<?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>32190</bug_id>
          
          <creation_ts>2009-12-05 22:30:40 -0800</creation_ts>
          <short_desc>conway benchmark spends half it&apos;s time in op_less (jump fusion fails)</short_desc>
          <delta_ts>2009-12-06 08:48:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          <cc>abarth</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>169066</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-12-05 22:30:40 -0800</bug_when>
    <thetext>The &quot;conway&quot; test on the new Celtic Kane benchmark spends half its time in op_less. This is because it does conditionals like this:

if (a &lt; b &amp;&amp; c &gt; d)...

and the logical and operator prevents any branch/condition fusion from taking place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169069</commentid>
    <comment_count>1</comment_count>
      <attachid>44354</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-12-05 23:08:41 -0800</bug_when>
    <thetext>Created attachment 44354
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169071</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-05 23:11:59 -0800</bug_when>
    <thetext>Attachment 44354 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/jit/JITArithmetic.cpp:151:  JIT::emit_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITArithmetic.cpp:188:  JIT::emitSlow_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITArithmetic.cpp:1529:  JIT::emit_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITArithmetic.cpp:1567:  JIT::emitSlow_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITArithmetic.cpp:1595:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/jit/JITArithmetic.cpp:1636:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/jit/JIT.h:739:  emit_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JIT.h:748:  emit_op_loop_if_false is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JIT.h:823:  emitSlow_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JIT.h:829:  emitSlow_op_loop_if_false is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITOpcodes.cpp:746:  JIT::emit_op_loop_if_false is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITOpcodes.cpp:777:  JIT::emitSlow_op_loop_if_false is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/interpreter/Interpreter.cpp:2650:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
JavaScriptCore/interpreter/Interpreter.cpp:2833:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 14</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169073</commentid>
    <comment_count>3</comment_count>
      <attachid>44357</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-12-05 23:25:47 -0800</bug_when>
    <thetext>Created attachment 44357
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169074</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-05 23:27:33 -0800</bug_when>
    <thetext>Attachment 44357 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/jit/JITArithmetic.cpp:151:  JIT::emit_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITArithmetic.cpp:188:  JIT::emitSlow_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITArithmetic.cpp:1529:  JIT::emit_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITArithmetic.cpp:1567:  JIT::emitSlow_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITArithmetic.cpp:1595:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/jit/JITArithmetic.cpp:1636:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/jit/JIT.h:739:  emit_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JIT.h:748:  emit_op_loop_if_false is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JIT.h:823:  emitSlow_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JIT.h:829:  emitSlow_op_loop_if_false is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITOpcodes.cpp:746:  JIT::emit_op_loop_if_false is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITOpcodes.cpp:777:  JIT::emitSlow_op_loop_if_false is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/interpreter/Interpreter.cpp:2650:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
JavaScriptCore/interpreter/Interpreter.cpp:2833:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 14</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169075</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-05 23:36:59 -0800</bug_when>
    <thetext>Are these naming warnings useful?  Do we plan to change these names to use camel case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169077</commentid>
    <comment_count>6</comment_count>
      <attachid>44357</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-05 23:49:38 -0800</bug_when>
    <thetext>Comment on attachment 44357
Patch

r=me on the code, though i&apos;d like gbarra or ggaren to also look at the jit code
gen.

The changes to the sunspider script seem accidental

I&apos;d prefer it if the test case also covered float values in addition to
integers.

--Oliver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169078</commentid>
    <comment_count>7</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-12-06 00:03:00 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Are these naming warnings useful?  Do we plan to change these names to use
&gt; camel case?

The opcode-related names are an exception to the usual naming rules. They should probably be whitelisted somehow for style checking purposes. Allowing names with _op_ in the JavaScriptCore directory would probably do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169079</commentid>
    <comment_count>8</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-12-06 00:13:57 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt;
&gt; JavaScriptCore/interpreter/Interpreter.cpp:2650:  Place brace on its own line
&gt; for function definitions.  [whitespace/braces] [4]
&gt; JavaScriptCore/interpreter/Interpreter.cpp:2833:  Place brace on its own line
&gt; for function definitions.  [whitespace/braces] [4]

These are also false positives (the lines in question are funky funky macros followed by a brace, not function definitions).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169080</commentid>
    <comment_count>9</comment_count>
      <attachid>44358</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-12-06 00:33:52 -0800</bug_when>
    <thetext>Created attachment 44358
Fix style issues; remove bogus sunspider change; add tests for float case codegen</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169081</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-06 00:38:39 -0800</bug_when>
    <thetext>Attachment 44358 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/jit/JITArithmetic.cpp:151:  JIT::emit_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITArithmetic.cpp:188:  JIT::emitSlow_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITArithmetic.cpp:1529:  JIT::emit_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITArithmetic.cpp:1567:  JIT::emitSlow_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JIT.h:739:  emit_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JIT.h:748:  emit_op_loop_if_false is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JIT.h:823:  emitSlow_op_jless is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JIT.h:829:  emitSlow_op_loop_if_false is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITOpcodes.cpp:746:  JIT::emit_op_loop_if_false is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/jit/JITOpcodes.cpp:777:  JIT::emitSlow_op_loop_if_false is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
JavaScriptCore/interpreter/Interpreter.cpp:2650:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
JavaScriptCore/interpreter/Interpreter.cpp:2833:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 12</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169082</commentid>
    <comment_count>11</comment_count>
      <attachid>44358</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-06 01:19:19 -0800</bug_when>
    <thetext>Comment on attachment 44358
Fix style issues; remove bogus sunspider change; add tests for float case codegen

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169083</commentid>
    <comment_count>12</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-12-06 01:42:30 -0800</bug_when>
    <thetext>Committed r51735: &lt;http://trac.webkit.org/changeset/51735&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169095</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-06 08:44:30 -0800</bug_when>
    <thetext>&gt; The opcode-related names are an exception to the usual naming rules. They
&gt; should probably be whitelisted somehow for style checking purposes. Allowing
&gt; names with _op_ in the JavaScriptCore directory would probably do it.

Filed https://bugs.webkit.org/show_bug.cgi?id=32192</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169097</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-06 08:48:16 -0800</bug_when>
    <thetext>&gt; These are also false positives (the lines in question are funky funky macros
&gt; followed by a brace, not function definitions).

Filed: https://bugs.webkit.org/show_bug.cgi?id=32193</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44354</attachid>
            <date>2009-12-05 23:08:41 -0800</date>
            <delta_ts>2009-12-05 23:25:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-32190-20091205230839.patch</filename>
            <type>text/plain</type>
            <size>50941</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUxNzM0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIxIEBACisyMDA5LTEyLTA1ICBNYWNpZWog
U3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFuZCBidWcgVVJM
IChPT1BTISkKKworICAgICAgICA8MSUgc3BlZWR1cCBvbiBTdW5TcGlkZXIgYW5kIFY4CisgICAg
ICAgIDJ4IHNwZWVkdXAgb24gImNvbndheSIgYmVuY2htYXJrCisgICAgICAgIAorICAgICAgICBU
d28gb3B0aW1pemF0aW9uczoKKyAgICAgICAgMSkgSW1wcm92ZSBjb2RlZ2VuIGZvciBsb2dpY2Fs
IG9wZXJhdG9ycyAmJiwgfHwgYW5kICEgaW4gYSBjb25kaXRpb24gY29udGV4dAorICAgICAgICAK
KyAgICAgICAgV2hlbiBnZW5lcmF0aW5nIGNvZGUgZm9yIGNvbWJpbmF0aW9ucyBvZiAmJiwgfHwg
YW5kICEsIGluIGEKKyAgICAgICAgY29uZGl0aW9uIGNvbnRleHQgKGkuZS4gaW4gYW4gaWYgc3Rh
dGVtZW50IG9yIGxvb3AgY29uZGl0aW9uKSwgd2UKKyAgICAgICAgdXNlZCB0byBwcm9kdWNlIGEg
dmFsdWUsIGFuZCB0aGVuIHNlcGFyYXRlbHkganVtcCBiYXNlZCBvbiBpdHMKKyAgICAgICAgdHJ1
dGhpbmVzcy4gTm93IHdlIHBhc3MgdGhlIGZhbHNlIGFuZCB0cnVlIHRhcmdldHMgaW4sIGFuZCBs
ZXQgdGhlCisgICAgICAgIGxvZ2ljYWwgb3BlcmF0b3JzIGdlbmVyYXRlIGp1bXBzIGRpcmVjdGx5
LiBUaGlzIGhlbHBzIGluIGZvdXIKKyAgICAgICAgd2F5czoKKworICAgICAgICBhKSBJbmRpdmlk
dWFsIGNsYXVzZXMgb2YgYSBzaG9ydC1jaXJjdWl0IGxvZ2ljYWwgb3BlcmF0b3IgY2FuIG5vdwor
ICAgICAgICBqdW1wIGRpcmVjdGx5IHRvIHRoZSB0aGVuIG9yIGVsc2UgY2xhdXNlIG9mIGFuIGlm
IHN0YXRlbWVudCAob3IgdG8KKyAgICAgICAgdGhlIHRvcCBvciBleGl0IG9mIGEgbG9vcCkgaW5z
dGVhZCBvZiBqdW1waW5nIHRvIGEganVtcC4KKyAgICAgICAgCisgICAgICAgIGIpIEl0IHVzZWQg
dG8gYmUgdGhhdCBqdW1wIGZ1c2lvbiB3aXRoIHRoZSBjb25kaXRpb24gb2YgdGhlIGZpcnN0Cisg
ICAgICAgIGNsYXVzZSBvZiBhIGxvZ2ljYWwgb3BlcmF0b3Igd2FzIGluaGliaXRlZCwgYmVjYXVz
ZSB0aGUgcmVnaXN0ZXIKKyAgICAgICAgd2FzIHJlZidkIHRvIGJlIHVzZWQgbGF0ZXIsIGluIHRo
ZSBhY3R1YWwgY29uZGl0aW9uIGp1bXA7IHRoaXMgbm8KKyAgICAgICAgbG9uZ2VyIGhhcHBlbnMg
c2luY2UgYSBqdW1wIHN0cmFpZ2h0IHRvIHRoZSBmaW5hbCB0YXJnZXQgaXMKKyAgICAgICAgZ2Vu
ZXJhdGVkIGRpcmVjdGx5LgorCisgICAgICAgIGMpIEl0IHVzZWQgdG8gYmUgdGhhdCBqdW1wIGZ1
c2lvbiB3aXRoIHRoZSBjb25kaXRpb24gb2YgdGhlIHNlY29uZAorICAgICAgICBjbGF1c2Ugb2Yg
YSBsb2dpY2FsIG9wZXJhdG9yIHdhcyBpbmhpYml0ZWQsIGJlY2F1c2UgdGhlcmUgd2FzIGEKKyAg
ICAgICAganVtcCB0YXJnZXQgcmlnaHQgYWZ0ZXIgdGhlIHNlY29uZCBjbGF1c2UgYW5kIGJlZm9y
ZSB0aGUgYWN0dWFsCisgICAgICAgIGNvbmRpdGlvbiBqdW1wLiBCdXQgbm93IGl0J3Mgbm8gbG9u
Z2VyIG5lY2Vzc2FyeSBmb3IgdGhlIGZpcnN0CisgICAgICAgIGNsYXVzZSB0byBqdW1wIHRoZXJl
IHNvIGp1bXAgZnVzaW9uIGlzIG5vdCBibG9ja2VkLgorCisgICAgICAgIGQpIFdlIGF2b2lkIGdl
bmVyYXRpbmcgZXhjZXNzIG1vdiBzdGF0ZW1lbnRzIGluIHNvbWUgY2FzZXMuCisgICAgICAgIAor
ICAgICAgICBBcyBhIGNvbmNyZXRlIGV4YW1wbGUgdGhpcyBzb3VyY2U6CisgICAgICAgIAorICAg
ICAgICBpZiAoISgoeCA8IHEgJiYgeSA8IHEpIHx8ICh0IDwgcSAmJiB6IDwgcSkpKSB7CisgICAg
ICAgICAgICAvLyAuLi4KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVXNlZCB0byBnZW5l
cmF0ZSB0aGlzIGJ5dGVjb2RlOgorICAgICAgICAKKyAgICAgICAgWyAgMzRdIGxlc3MgICAgICAg
ICAgICAgIHIxLCByLTE1LCByLTE5CisgICAgICAgIFsgIDM4XSBqZmFsc2UgICAgICAgICAgICBy
MSwgNygtPjQ1KQorICAgICAgICBbICA0MV0gbGVzcyAgICAgICAgICAgICAgcjEsIHItMTYsIHIt
MTkKKyAgICAgICAgWyAgNDVdIGp0cnVlICAgICAgICAgICAgIHIxLCAxNCgtPjU5KQorICAgICAg
ICBbICA0OF0gbGVzcyAgICAgICAgICAgICAgcjEsIHItMTcsIHItMTkKKyAgICAgICAgWyAgNTJd
IGpmYWxzZSAgICAgICAgICAgIHIxLCA3KC0+NTkpCisgICAgICAgIFsgIDU1XSBsZXNzICAgICAg
ICAgICAgICByMSwgci0xOCwgci0xOQorICAgICAgICBbICA1OV0ganRydWUgICAgICAgICAgICAg
cjEsIDE3KC0+NzYpCisgICAgICAgIAorICAgICAgICBBbmQgbm93IGdlbmVyYXRlcyB0aGlzIGJ5
dGVjb2RlIChhbHNvIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIHNlY29uZCBvcHRpbWl6YXRpb24g
YmVsb3cpOgorICAgICAgICAKKyAgICAgICAgWyAgMzRdIGpubGVzcyAgICAgICAgICAgIHItMTUs
IHItMTksIDgoLT40MikKKyAgICAgICAgWyAgMzhdIGpsZXNzICAgICAgICAgICAgIHItMTYsIHIt
MTksIDI2KC0+NjQpCisgICAgICAgIFsgIDQyXSBqbmxlc3MgICAgICAgICAgICByLTE3LCByLTE5
LCA4KC0+NTApCisgICAgICAgIFsgIDQ2XSBqbGVzcyAgICAgICAgICAgICByLTE4LCByLTE5LCAx
OCgtPjY0KQorICAgICAgICAKKyAgICAgICAgTm90ZSB0aGUganVtcCBmdXNpb24gYW5kIHRoZSBm
YWN0IHRoYXQgdGhlcmUncyBsZXNzIGp1bXAKKyAgICAgICAgaW5kaXJlY3Rpb24gLSB0aHJlZSBv
ZiB0aGUgZm91ciBqdW1wcyBnbyBzdHJhaWdodCB0byB0aGUgdGFyZ2V0CisgICAgICAgIGNsYXVz
ZSBpbnN0ZWFkIG9mIGluZGlyZWN0aW5nIHRocm91Z2ggYW5vdGhlciBqdW1wLgorICAgICAgICAK
KyAgICAgICAgMikgSW1wbGVtZW50IGpsZXNzIG9wY29kZSB0byB0YWtlIGFkdmFudGFnZSBvZiB0
aGUgYWJvdmUsIHNpbmNlIHdlJ2xsIG5vdyBvZnRlbiBnZW5lcmF0ZQorICAgICAgICBhIGxlc3Mg
Zm9sbG93ZWQgYnkgYSBqdHJ1ZSB3aGVyZSBmdXNpb24gaXMgbm90IGZvcmJpZGRlbi4KKyAgICAg
ICAKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKEpTQzo6RXhwcmVzc2lvbk5v
ZGU6Omhhc0NvbmRpdGlvbkNvbnRleHRDb2RlZ2VuKTogSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVy
bWluZQorICAgICAgICB3aGV0aGVyIGEgbm9kZSBzdXBwb3J0cyBzcGVjaWFsIGNvbmRpdGlvbmFs
IGNvZGVnZW4uIFJldHVybiBmYWxzZSBhcyB0aGlzIGlzIHRoZSBkZWZhdWx0LgorICAgICAgICAo
SlNDOjpFeHByZXNzaW9uTm9kZTo6ZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KTogQXNz
ZXJ0IG5vdCByZWFjaGVkIC0gb25seSByZWFsbHkKKyAgICAgICAgZGVmaW5lZCBmb3Igbm9kZXMg
dGhhdCBkbyBoYXZlIGNvbmRpdGlvbmFsIGNvZGVnZW4uCisgICAgICAgIChKU0M6OlVuYXJ5T3BO
b2RlOjpleHByKTogQWRkIGNvbnN0IHZlcnNpb24uCisgICAgICAgIChKU0M6OkxvZ2ljYWxOb3RO
b2RlOjpoYXNDb25kaXRpb25Db250ZXh0Q29kZWdlbik6IFJldHVybmUgdHJ1ZSBvbmx5IGlmIHN1
YmV4cHJlc3Npb24KKyAgICAgICAgc3VwcG9ydHMgaXQuCisgICAgICAgIChKU0M6OkxvZ2ljYWxP
cE5vZGU6Omhhc0NvbmRpdGlvbkNvbnRleHRDb2RlZ2VuKTogUmV0dXJuIHRydWUuCisgICAgICAg
ICogcGFyc2VyL05vZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6TG9naWNhbE5vdE5vZGU6OmVtaXRC
eXRlY29kZUluQ29uZGl0aW9uQ29udGV4dCk6IEltcGxlbWVudGVkIC0ganVzdCBzd2FwCisgICAg
ICAgIHRoZSB0cnVlIGFuZCBmYWxzZSB0YXJnZXRzIGZvciB0aGUgY2hpbGQgbm9kZS4KKyAgICAg
ICAgKEpTQzo6TG9naWNhbE9wTm9kZTo6ZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KTog
SW1wbGVtZW50ZWQgLSBoYW5kbGUganVtcHMKKyAgICAgICAgZGlyZWN0bHksIGltcHJvdmluZyBj
b2RlZ2VuIHF1YWxpdHkuIEFsc28gaGFuZGxlcyBmdXJ0aGVyIG5lc3RlZCBjb25kaXRpb25hbCBj
b2RlZ2VuLgorICAgICAgICAoSlNDOjpDb25kaXRpb25hbE5vZGU6OmVtaXRCeXRlY29kZSk6IFVz
ZSBjb25kaXRpb24gY29udGV4dCBjb2RlZ2VuIHdoZW4gYXZhaWxhYmxlLgorICAgICAgICAoSlND
OjpJZk5vZGU6OmVtaXRCeXRlY29kZSk6IGRpdHRvCisgICAgICAgIChKU0M6OklmRWxzZU5vZGU6
OmVtaXRCeXRlY29kZSk6IGRpdHRvCisgICAgICAgIChKU0M6OkRvV2hpbGVOb2RlOjplbWl0Qnl0
ZWNvZGUpOiBkaXR0bworICAgICAgICAoSlNDOjpXaGlsZU5vZGU6OmVtaXRCeXRlY29kZSk6IGRp
dHRvCisgICAgICAgIChKU0M6OkZvck5vZGU6OmVtaXRCeXRlY29kZSk6IGRpdHRvCisKKyAgICAg
ICAgKiBieXRlY29kZS9PcGNvZGUuaDogCisgICAgICAgIC0gQWRkZWQgbG9vcF9pZl9mYWxzZSBv
cGNvZGUgLSBuZWVkZWQgbm93IHRoYXQgZmFsc2V5IGp1bXBzIGNhbiBiZSBiYWNrd2FyZHMuCisg
ICAgICAgIC0gQWRkZWQgamxlc3Mgb3Bjb2RlIHRvIHRha2UgYWR2YW50YWdlIG9mIG5ldyBmdXNp
b24gb3Bwb3J0dW5pdGllcy4KKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOiBIYW5kbGUgYWJvdmUuCisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRKdW1wSWZUcnVlKTogQWRkIHBlZXBob2xlIGZvciBsZXNzICsganRydWUg
PT0+IGpsZXNzLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZkZh
bHNlKTogQWRkIGhhbmRsaW5nIG9mIGJhY2t3cmRzIGZhbHNleSBqdW1wcy4KKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KTogV3JhcHBlciB0byBoYW5kbGUg
dHJhY2tpbmcgb2YKKyAgICAgICAgb3Zlcmx5IGRlZXAgZXhwcmVzc2lvbnMgZXRjLgorICAgICAg
ICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OnByaXZhdGVFeGVjdXRlKTogSW1wbGVtZW50IHRoZSB0d28gbmV3IG9wY29kZXMgKGxvb3Bf
aWZfZmFsc2UsIGpsZXNzKS4KKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKTogSW1wbGVtZW50IEpJVCBzdXBwb3J0IGZvciB0
aGUgdHdvIG5ldyBvcGNvZGVzLgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xv
d0Nhc2VzKTogZGl0dG8KKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVEFy
aXRobWV0aWMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfamxlc3MpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2psZXNzKTogZGl0dG8KKyAgICAgICAgKEpTQzo6SklU
OjplbWl0QmluYXJ5RG91YmxlT3ApOiBkaXR0bworICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNw
cDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9sb29wX2lmX2xlc3MpOiBkaXR0bwor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9vcF9pZl9mYWxzZSk6IGRpdHRvCisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9pZl9mYWxzZSk6IGRpdHRvCisgICAgICAgICog
aml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKEpT
Qzo6KToKKwogMjAwOS0xMi0wNCAgS2VudCBIYW5zZW4gIDxrZW50LmhhbnNlbkBub2tpYS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDUxNzA0KQorKysgSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODc2LDYgKzg3NiwxMCBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgICAgICBw
cmludENvbmRpdGlvbmFsSnVtcChleGVjLCBiZWdpbiwgaXQsIGxvY2F0aW9uLCAibG9vcF9pZl90
cnVlIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2xv
b3BfaWZfZmFsc2U6IHsKKyAgICAgICAgICAgIHByaW50Q29uZGl0aW9uYWxKdW1wKGV4ZWMsIGJl
Z2luLCBpdCwgbG9jYXRpb24sICJsb29wX2lmX2ZhbHNlIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2pmYWxzZTogewogICAgICAgICAgICAgcHJpbnRD
b25kaXRpb25hbEp1bXAoZXhlYywgYmVnaW4sIGl0LCBsb2NhdGlvbiwgImpmYWxzZSIpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC05MTYsNiArOTIwLDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
KEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gbG9vcF9pZl9s
ZXNzXHQgJXMsICVzLCAlZCgtPiVkKVxuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCBy
MCkuY19zdHIoKSwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIxKS5jX3N0cigpLCBvZmZzZXQsIGxvY2F0
aW9uICsgb2Zmc2V0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3Bfamxlc3M6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
b2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludGYoIlslNGRdIGps
ZXNzXHRcdCAlcywgJXMsICVkKC0+JWQpXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMs
IHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEpLmNfc3RyKCksIG9mZnNldCwgbG9j
YXRpb24gKyBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9sb29wX2lmX2xlc3NlcTogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiA1MTcwNCkKKysrIEphdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsOSArMTI4LDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBtYWNybyhvcF9qbmVxX3B0ciwgNCkgXAogICAgICAg
ICBtYWNybyhvcF9qbmxlc3MsIDQpIFwKICAgICAgICAgbWFjcm8ob3Bfam5sZXNzZXEsIDQpIFwK
KyAgICAgICAgbWFjcm8ob3Bfamxlc3MsIDQpIFwKICAgICAgICAgbWFjcm8ob3Bfam1wX3Njb3Bl
cywgMykgXAogICAgICAgICBtYWNybyhvcF9sb29wLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX2xv
b3BfaWZfdHJ1ZSwgMykgXAorICAgICAgICBtYWNybyhvcF9sb29wX2lmX2ZhbHNlLCAzKSBcCiAg
ICAgICAgIG1hY3JvKG9wX2xvb3BfaWZfbGVzcywgNCkgXAogICAgICAgICBtYWNybyhvcF9sb29w
X2lmX2xlc3NlcSwgNCkgXAogICAgICAgICBtYWNybyhvcF9zd2l0Y2hfaW1tLCA0KSBcCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDUxNzA0KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjE2LDcgKzYxNiw3IEBAIFBhc3NS
ZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWkKIAogUGFzc1JlZlB0cjxMYWJlbD4g
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZUcnVlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVs
KiB0YXJnZXQpCiB7Ci0gICAgaWYgKG1fbGFzdE9wY29kZUlEID09IG9wX2xlc3MgJiYgIXRhcmdl
dC0+aXNGb3J3YXJkKCkpIHsKKyAgICBpZiAobV9sYXN0T3Bjb2RlSUQgPT0gb3BfbGVzcykgewog
ICAgICAgICBpbnQgZHN0SW5kZXg7CiAgICAgICAgIGludCBzcmMxSW5kZXg7CiAgICAgICAgIGlu
dCBzcmMySW5kZXg7CkBAIC02MjcsNyArNjI3LDcgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaQogICAgICAgICAgICAgcmV3aW5kQmluYXJ5T3AoKTsKIAogICAgICAg
ICAgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgICAgICAgICAg
ZW1pdE9wY29kZShvcF9sb29wX2lmX2xlc3MpOworICAgICAgICAgICAgZW1pdE9wY29kZSh0YXJn
ZXQtPmlzRm9yd2FyZCgpID8gb3Bfamxlc3MgOiBvcF9sb29wX2lmX2xlc3MpOwogICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYzFJbmRleCk7CiAgICAgICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoc3JjMkluZGV4KTsKICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZCh0YXJnZXQtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwpAQCAtNjky
LDkgKzY5Miw3IEBAIFBhc3NSZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWkKIAog
UGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZGYWxzZShSZWdp
c3RlcklEKiBjb25kLCBMYWJlbCogdGFyZ2V0KQogewotICAgIEFTU0VSVCh0YXJnZXQtPmlzRm9y
d2FyZCgpKTsKLQotICAgIGlmIChtX2xhc3RPcGNvZGVJRCA9PSBvcF9sZXNzKSB7CisgICAgaWYg
KG1fbGFzdE9wY29kZUlEID09IG9wX2xlc3MgJiYgdGFyZ2V0LT5pc0ZvcndhcmQoKSkgewogICAg
ICAgICBpbnQgZHN0SW5kZXg7CiAgICAgICAgIGludCBzcmMxSW5kZXg7CiAgICAgICAgIGludCBz
cmMySW5kZXg7CkBAIC03MTEsNyArNzA5LDcgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaQogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+
YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSk7CiAgICAgICAgICAgICByZXR1cm4g
dGFyZ2V0OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX2xhc3RPcGNvZGVJRCA9PSBvcF9s
ZXNzZXEpIHsKKyAgICB9IGVsc2UgaWYgKG1fbGFzdE9wY29kZUlEID09IG9wX2xlc3NlcSAmJiB0
YXJnZXQtPmlzRm9yd2FyZCgpKSB7CiAgICAgICAgIGludCBkc3RJbmRleDsKICAgICAgICAgaW50
IHNyYzFJbmRleDsKICAgICAgICAgaW50IHNyYzJJbmRleDsKQEAgLTczOCwxMiArNzM2LDEyIEBA
IFBhc3NSZWZQdHI8TGFiZWw+IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWkKICAgICAgICAgICAgIHJl
d2luZFVuYXJ5T3AoKTsKIAogICAgICAgICAgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpOwotICAgICAgICAgICAgZW1pdE9wY29kZShvcF9qdHJ1ZSk7CisgICAgICAgICAg
ICBlbWl0T3Bjb2RlKHRhcmdldC0+aXNGb3J3YXJkKCkgPyBvcF9qdHJ1ZSA6IG9wX2xvb3BfaWZf
dHJ1ZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjSW5kZXgpOwogICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpKSk7CiAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmIChtX2xhc3RPcGNvZGVJRCA9PSBvcF9lcV9udWxsKSB7CisgICAgfSBl
bHNlIGlmIChtX2xhc3RPcGNvZGVJRCA9PSBvcF9lcV9udWxsICYmIHRhcmdldC0+aXNGb3J3YXJk
KCkpIHsKICAgICAgICAgaW50IGRzdEluZGV4OwogICAgICAgICBpbnQgc3JjSW5kZXg7CiAKQEAg
LTc1OCw3ICs3NTYsNyBAQCBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGFyZ2V0LT5iaW5kKGJlZ2luLCBp
bnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fbGFzdE9wY29kZUlEID09IG9wX25lcV9udWxsKSB7Cisg
ICAgfSBlbHNlIGlmIChtX2xhc3RPcGNvZGVJRCA9PSBvcF9uZXFfbnVsbCAmJiB0YXJnZXQtPmlz
Rm9yd2FyZCgpKSB7CiAgICAgICAgIGludCBkc3RJbmRleDsKICAgICAgICAgaW50IHNyY0luZGV4
OwogCkBAIC03NzYsNyArNzc0LDcgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaQogICAgIH0KIAogICAgIHNpemVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNpemUo
KTsKLSAgICBlbWl0T3Bjb2RlKG9wX2pmYWxzZSk7CisgICAgZW1pdE9wY29kZSh0YXJnZXQtPmlz
Rm9yd2FyZCgpID8gb3BfamZhbHNlIDogb3BfbG9vcF9pZl9mYWxzZSk7CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGNvbmQtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0
YXJnZXQtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwogICAgIHJldHVybiB0
YXJnZXQ7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gNTE3MDQpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5MiwxOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBlbWl0Tm9kZSgwLCBuKTsKICAg
ICAgICAgfQogCisgICAgICAgIHZvaWQgZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRleHQoRXhwcmVz
c2lvbk5vZGUqIG4sIExhYmVsKiB0cnVlVGFyZ2V0LCBMYWJlbCogZmFsc2VUYXJnZXQsIGJvb2wg
ZmFsbFRocm91Z2hNZWFuc1RydWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9jb2Rl
QmxvY2stPm51bWJlck9mTGluZUluZm9zKCkgfHwgbV9jb2RlQmxvY2stPmxhc3RMaW5lSW5mbygp
LmxpbmVOdW1iZXIgIT0gbi0+bGluZU5vKCkpIHsKKyAgICAgICAgICAgICAgICBMaW5lSW5mbyBp
bmZvID0geyBpbnN0cnVjdGlvbnMoKS5zaXplKCksIG4tPmxpbmVObygpIH07CisgICAgICAgICAg
ICAgICAgbV9jb2RlQmxvY2stPmFkZExpbmVJbmZvKGluZm8pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKG1fZW1pdE5vZGVEZXB0aCA+PSBzX21heEVtaXROb2RlRGVwdGgpCisgICAg
ICAgICAgICAgICAgZW1pdFRocm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsKKyAgICAg
ICAgICAgICsrbV9lbWl0Tm9kZURlcHRoOworICAgICAgICAgICAgbi0+ZW1pdEJ5dGVjb2RlSW5D
b25kaXRpb25Db250ZXh0KCp0aGlzLCB0cnVlVGFyZ2V0LCBmYWxzZVRhcmdldCwgZmFsbFRocm91
Z2hNZWFuc1RydWUpOworICAgICAgICAgICAgLS1tX2VtaXROb2RlRGVwdGg7CisgICAgICAgIH0K
KwogICAgICAgICB2b2lkIGVtaXRFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBkaXZvdCwgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKICAgICAgICAgeyAKICAgICAgICAg
ICAgIGRpdm90IC09IG1fY29kZUJsb2NrLT5zb3VyY2VPZmZzZXQoKTsKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDUxNzA0KQorKysg
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjQ3LDYgKzI2NDcsMjYgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1
dGUoRXhlYwogICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9sb29wX2lmX3RydWUpOwog
ICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAgICAgfQorICAgIERFRklORV9PUENPREUob3Bf
bG9vcF9pZl9mYWxzZSkgeworICAgICAgICAvKiBsb29wX2lmX3RydWUgY29uZChyKSB0YXJnZXQo
b2Zmc2V0KQorICAgICAgICAgCisgICAgICAgICAgIEp1bXBzIHRvIG9mZnNldCB0YXJnZXQgZnJv
bSB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiwgaWYgYW5kCisgICAgICAgICAgIG9ubHkgaWYgcmVn
aXN0ZXIgY29uZCBjb252ZXJ0cyB0byBib29sZWFuIGFzIGZhbHNlLgorCisgICAgICAgICAgIEFk
ZGl0aW9uYWxseSB0aGlzIGxvb3AgaW5zdHJ1Y3Rpb24gbWF5IHRlcm1pbmF0ZSBKUyBleGVjdXRp
b24gaXMKKyAgICAgICAgICAgdGhlIEpTIHRpbWVvdXQgaXMgcmVhY2hlZC4KKyAgICAgICAgICov
CisgICAgICAgIGludCBjb25kID0gdlBDWzFdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IHRhcmdl
dCA9IHZQQ1syXS51Lm9wZXJhbmQ7CisgICAgICAgIGlmICghY2FsbEZyYW1lLT5yKGNvbmQpLmpz
VmFsdWUoKS50b0Jvb2xlYW4oY2FsbEZyYW1lKSkgeworICAgICAgICAgICAgdlBDICs9IHRhcmdl
dDsKKyAgICAgICAgICAgIENIRUNLX0ZPUl9USU1FT1VUKCk7CisgICAgICAgICAgICBORVhUX0lO
U1RSVUNUSU9OKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZQQyArPSBPUENPREVf
TEVOR1RIKG9wX2xvb3BfaWZfdHJ1ZSk7CisgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKKyAg
ICB9CiAgICAgREVGSU5FX09QQ09ERShvcF9qdHJ1ZSkgewogICAgICAgICAvKiBqdHJ1ZSBjb25k
KHIpIHRhcmdldChvZmZzZXQpCiAKQEAgLTI4MTAsNiArMjgzMCwyOSBAQCBKU1ZhbHVlIEludGVy
cHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RI
KG9wX2pubGVzcyk7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9CisgICAgREVG
SU5FX09QQ09ERShvcF9qbGVzcykgeworICAgICAgICAvKiBqbGVzcyBzcmMxKHIpIHNyYzIocikg
dGFyZ2V0KG9mZnNldCkKKworICAgICAgICAgICBDaGVja3Mgd2hldGhlciByZWdpc3RlciBzcmMx
IGlzIGxlc3MgdGhhbiByZWdpc3RlciBzcmMyLCBhcworICAgICAgICAgICB3aXRoIHRoZSBFQ01B
U2NyaXB0ICc8JyBvcGVyYXRvciwgYW5kIHRoZW4ganVtcHMgdG8gb2Zmc2V0CisgICAgICAgICAg
IHRhcmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLCBpZiBhbmQgb25seSBpZiB0aGUg
CisgICAgICAgICAgIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiBpcyB0cnVlLgorICAgICAgICAq
LworICAgICAgICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBDWzFdLnUub3BlcmFuZCku
anNWYWx1ZSgpOworICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUu
b3BlcmFuZCkuanNWYWx1ZSgpOworICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzNdLnUub3BlcmFu
ZDsKKworICAgICAgICBib29sIHJlc3VsdCA9IGpzTGVzcyhjYWxsRnJhbWUsIHNyYzEsIHNyYzIp
OworICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CisgICAgICAgIAorICAgICAgICBpZiAo
cmVzdWx0KSB7CisgICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OworICAgICAgICAgICAgTkVYVF9J
TlNUUlVDVElPTigpOworICAgICAgICB9CisKKyAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgo
b3Bfamxlc3MpOworICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CisgICAgfQogICAgIERFRklO
RV9PUENPREUob3Bfam5sZXNzZXEpIHsKICAgICAgICAgLyogam5sZXNzZXEgc3JjMShyKSBzcmMy
KHIpIHRhcmdldChvZmZzZXQpCiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA1MTcwNCkK
KysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNiAr
MjUwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJ
TkVfT1Aob3Bfam5lcV9udWxsKQogICAgICAgICBERUZJTkVfT1Aob3Bfam5lcV9wdHIpCiAgICAg
ICAgIERFRklORV9PUChvcF9qbmxlc3MpCisgICAgICAgIERFRklORV9PUChvcF9qbGVzcykKICAg
ICAgICAgREVGSU5FX09QKG9wX2pubGVzc2VxKQogICAgICAgICBERUZJTkVfT1Aob3BfanNyKQog
ICAgICAgICBERUZJTkVfT1Aob3BfanRydWUpCkBAIC0yNTgsNiArMjU5LDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfbG9vcF9pZl9s
ZXNzKQogICAgICAgICBERUZJTkVfT1Aob3BfbG9vcF9pZl9sZXNzZXEpCiAgICAgICAgIERFRklO
RV9PUChvcF9sb29wX2lmX3RydWUpCisgICAgICAgIERFRklORV9PUChvcF9sb29wX2lmX2ZhbHNl
KQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQogICAgICAgICBERUZJTkVfT1Aob3BfbWV0
aG9kX2NoZWNrKQogICAgICAgICBERUZJTkVfT1Aob3BfbW9kKQpAQCAtMzg5LDExICszOTEsMTMg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX2luc3RhbmNlb2YpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9q
ZmFsc2UpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9qbmxlc3MpCisgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9qbGVzcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2pubGVzc2VxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfanRydWUpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9sb29wX2lmX2xlc3MpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9sb29wX2lmX2xlc3NlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2xvb3BfaWZfdHJ1ZSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaWZfZmFs
c2UpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9sc2hpZnQpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9tZXRob2RfY2hlY2spCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9tb2QpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiA1MTcwNCkKKysrIEphdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNzM2LDYgKzczNiw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bfam5lcV9udWxsKEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9qbmVxX3B0cihJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3Bfam5sZXNzKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9qbGVz
cyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bfam5sZXNzZXEoSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2pzcihJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfanRydWUoSW5zdHJ1Y3Rpb24qKTsKQEAgLTc0NCw2ICs3NDUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvb3BfaWZfbGVzcyhJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9vcF9pZl9sZXNzZXEoSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2xvb3BfaWZfdHJ1ZShJbnN0cnVjdGlvbiopOworICAgICAg
ICB2b2lkIGVtaXRfb3BfbG9vcF9pZl9mYWxzZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfbHNoaWZ0KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9tZXRo
b2RfY2hlY2soSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX21vZChJbnN0cnVj
dGlvbiopOwpAQCAtODE4LDExICs4MjAsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qZmFsc2UoSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3Bfam5sZXNzKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2psZXNzKEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93
X29wX2pubGVzc2VxKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2p0cnVlKEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xv
b3BfaWZfbGVzcyhJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9sb29wX2lmX2xlc3NlcShJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9sb29wX2lmX3RydWUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9pZl9mYWxzZShJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9sc2hpZnQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbWV0aG9kX2NoZWNrKEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX21vZChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAJKHJldmlzaW9uIDUx
NzA0KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDgsNiArMTQ4LDY5IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoSW5z
dHJ1Y3Rpb24KICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAp
LCB0YXJnZXQpOwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9qbGVzcyhJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOworCisgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CisgICAgSnVtcExpc3Qgbm90
SW50MzJPcDI7CisKKyAgICAvLyBJbnQzMiBsZXNzLgorICAgIGlmIChpc09wZXJhbmRDb25zdGFu
dEltbWVkaWF0ZUludChvcDEpKSB7CisgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1Qy
KTsKKyAgICAgICAgbm90SW50MzJPcDIuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywg
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoR3Jl
YXRlclRoYW4sIHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkp
KSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50
KG9wMikpIHsKKyAgICAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBu
b3RJbnQzMk9wMS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZykpKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAs
IEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSkpLCB0YXJnZXQpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVtaXRMb2FkMihvcDEsIHJlZ1QxLCByZWdUMCwgb3AyLCByZWdU
MywgcmVnVDIpOworICAgICAgICBub3RJbnQzMk9wMS5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKKyAgICAgICAgbm90SW50MzJPcDIu
YXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
KSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCByZWdUMiksIHRh
cmdldCk7CisgICAgfQorCisgICAgaWYgKCFzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgeworICAg
ICAgICBhZGRTbG93Q2FzZShub3RJbnQzMk9wMSk7CisgICAgICAgIGFkZFNsb3dDYXNlKG5vdElu
dDMyT3AyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBKdW1wIGVuZCA9IGp1bXAoKTsK
KworICAgIC8vIERvdWJsZSBsZXNzLgorICAgIGVtaXRCaW5hcnlEb3VibGVPcChvcF9qbGVzcywg
dGFyZ2V0LCBvcDEsIG9wMiwgT3BlcmFuZFR5cGVzKCksIG5vdEludDMyT3AxLCBub3RJbnQzMk9w
MiwgIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSksIGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlSW50KG9wMSkgfHwgIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikp
OworICAgIGVuZC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3Mo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3sKKyAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKworICAgIGlmICghc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKKyAgICAgICAg
aWYgKCFpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpICYmICFpc09wZXJhbmRDb25z
dGFudEltbWVkaWF0ZUludChvcDIpKQorICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBpbnQzMiBjaGVjaworICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGludDMyIGNoZWNr
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUlu
dChvcDEpKSB7CisgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGRvdWJsZSBjaGVj
aworICAgICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbnQzMiBjaGVjaworICAgICAg
ICB9CisgICAgICAgIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpIHx8ICFp
c09wZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDIpKQorICAgICAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBkb3VibGUgY2hlY2sKKyAgICB9CisKKyAgICBKSVRTdHViQ2FsbCBzdHVi
Q2FsbCh0aGlzLCBjdGlfb3Bfamxlc3MpOworICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMSk7
CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AyKTsKKyAgICBzdHViQ2FsbC5jYWxsKCk7Cisg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0
KTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICB1bnNpZ25lZCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwpAQCAtODMxLDYgKzg5NCwxMCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJs
ZU9wKE9wY29kZUlEIG9wCiAgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJl
Z1QyKTsKICAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIGRzdCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIG9wX2psZXNzOgorICAgICAgICAgICAgICAg
IGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7CisgICAgICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW4sIGZwUmVnVDIsIGZwUmVnVDApLCBkc3QpOworICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbmxlc3NlcToKICAgICAg
ICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwogICAgICAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDAs
IGZwUmVnVDIpLCBkc3QpOwpAQCAtODg0LDYgKzk1MSwxMCBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFy
eURvdWJsZU9wKE9wY29kZUlEIG9wCiAgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3Ay
LCBmcFJlZ1QxKTsKICAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVM
ZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIGRzdCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIG9wX2psZXNzOgorICAgICAgICAg
ICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7CisgICAgICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCBkc3Qp
OworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbmxlc3NlcToK
ICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwogICAgICAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIGZw
UmVnVDEsIGZwUmVnVDApLCBkc3QpOwpAQCAtMTQ1NSw2ICsxNTI2LDE5MSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5sZXNzKEluc3RydWN0aW9uCiAgICAgfQogfQogCit2b2lkIEpJVDo6ZW1p
dF9vcF9qbGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2ln
bmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQg
b3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgLy8gV2UgZ2VuZXJh
dGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoK
KyAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQorICAgIC8v
IC0gY29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCisgICAgLy8gLSBpbnQg
aW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudElt
bWVkaWF0ZUludChvcDIpKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBy
ZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVn
VDApOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0Q29u
c3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KG9wMik7CisjZWxzZQorICAgICAgICBpbnQzMl90IG9w
MmltbSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KEpTSW1tZWRpYXRlOjpyYXdWYWx1ZShnZXRDb25z
dGFudE9wZXJhbmQob3AyKSkpOworI2VuZGlmCisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTGVz
c1RoYW4sIHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKGlz
T3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1t
ZWRpYXRlSW50ZWdlcihyZWdUMSk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgaW50MzJf
dCBvcDFpbW0gPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AxKTsKKyNlbHNlCisg
ICAgICAgIGludDMyX3Qgb3AxaW1tID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNJbW1lZGlhdGU6
OnJhd1ZhbHVlKGdldENvbnN0YW50T3BlcmFuZChvcDEpKSk7CisjZW5kaWYKKyAgICAgICAgYWRk
SnVtcChicmFuY2gzMihHcmVhdGVyVGhhbiwgcmVnVDEsIEltbTMyKG9wMWltbSkpLCB0YXJnZXQp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKG9wMSwgcmVn
VDAsIG9wMiwgcmVnVDEpOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJ
bnRlZ2VyKHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50
ZWdlcihyZWdUMSk7CisKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAs
IHJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVz
cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOworCisgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xs
b3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0aDoKKyAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51
bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCisgICAgLy8gLSBjb25zdGFudCBpbnQgaW1t
ZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlcgorICAgIC8vIC0gZmxvYXRpbmctcG9pbnQg
bnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51bWJlci4KKworICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEltbWVkaWF0ZUludChvcDIpKSB7CisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKwor
ICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIo
cmVnVDApOworICAgICAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDAp
OworICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyNlbHNlCisg
ICAgICAgICAgICBKdW1wIGZhaWwxOworICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNL
bm93bk5vdEltbWVkaWF0ZShvcDEpKQorICAgICAgICAgICAgICAgIGZhaWwxID0gZW1pdEp1bXBJ
Zk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICAgICAgICAgIEp1bXAgZmFpbDIgPSBjaGVja1N0cnVj
dHVyZShyZWdUMCwgbV9nbG9iYWxEYXRhLT5udW1iZXJTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICAgICAgbG9hZERvdWJsZShBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNOdW1iZXJD
ZWxsLCBtX3ZhbHVlKSksIGZwUmVnVDApOworI2VuZGlmCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpOzsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtb3ZlKEltbTMyKG9wMmltbSksIHJl
Z1QxKTsKKyAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsK
KworICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NU
aGFuLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsKKworICAgICAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2pubGVzcykpOworCisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CisjZWxzZQorICAgICAgICAg
ICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShvcDEpKQorICAgICAgICAg
ICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CisgICAgICAgICAgICBmYWlsMi5saW5rKHRoaXMpOwor
I2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBj
dGlfb3Bfamxlc3MpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CisgICAg
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMiwgcmVnVDIpOworICAgICAgICBzdHViQ2FsbC5j
YWxsKCk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MCksIHRhcmdldCk7CisKKyAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRl
SW50KG9wMSkpIHsKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgICAgIGlmIChz
dXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAg
ICBKdW1wIGZhaWwxID0gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMSk7CisgICAg
ICAgICAgICBhZGRQdHIodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7CisgICAgICAgICAg
ICBtb3ZlUHRyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOworI2Vsc2UKKyAgICAgICAgICAgIEp1
bXAgZmFpbDE7CisgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRp
YXRlKG9wMikpCisgICAgICAgICAgICAgICAgZmFpbDEgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJl
Z1QxKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSnVtcCBmYWlsMiA9IGNoZWNrU3RydWN0
dXJlKHJlZ1QxLCBtX2dsb2JhbERhdGEtPm51bWJlclN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAg
ICAgICBsb2FkRG91YmxlKEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU051bWJlckNl
bGwsIG1fdmFsdWUpKSwgZnBSZWdUMSk7CisjZW5kaWYKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaW50MzJfdCBvcDFpbW0gPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7Owor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1vdmUoSW1tMzIob3AxaW1tKSwgcmVn
VDApOworICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwor
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hEb3VibGUoRG91YmxlTGVzc1Ro
YW4sIGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOworCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzKSk7CisKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKG9wMikpCisgICAgICAgICAg
ICAgICAgZmFpbDEubGluayh0aGlzKTsKKyAgICAgICAgICAgIGZhaWwyLmxpbmsodGhpcyk7Cisj
ZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcF9qbGVzcyk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMSwgcmVnVDIpOwor
ICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7CisgICAgICAgIHN0dWJDYWxsLmNh
bGwoKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1Qw
KSwgdGFyZ2V0KTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsK
KworICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1i
ZXIocmVnVDApOworICAgICAgICAgICAgSnVtcCBmYWlsMiA9IGVtaXRKdW1wSWZOb3RJbW1lZGlh
dGVOdW1iZXIocmVnVDEpOworICAgICAgICAgICAgSnVtcCBmYWlsMyA9IGVtaXRKdW1wSWZJbW1l
ZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKKyAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHJlZ1QxKTsKKyAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7Cisg
ICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOworI2Vsc2UKKyAgICAg
ICAgICAgIEp1bXAgZmFpbDE7CisgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3du
Tm90SW1tZWRpYXRlKG9wMSkpCisgICAgICAgICAgICAgICAgZmFpbDEgPSBlbWl0SnVtcElmTm90
SlNDZWxsKHJlZ1QwKTsKKworICAgICAgICAgICAgSnVtcCBmYWlsMjsKKyAgICAgICAgICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUob3AyKSkKKyAgICAgICAgICAgICAg
ICBmYWlsMiA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDEpOworCisgICAgICAgICAgICBKdW1w
IGZhaWwzID0gY2hlY2tTdHJ1Y3R1cmUocmVnVDAsIG1fZ2xvYmFsRGF0YS0+bnVtYmVyU3RydWN0
dXJlLmdldCgpKTsKKyAgICAgICAgICAgIEp1bXAgZmFpbDQgPSBjaGVja1N0cnVjdHVyZShyZWdU
MSwgbV9nbG9iYWxEYXRhLT5udW1iZXJTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgbG9h
ZERvdWJsZShBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNOdW1iZXJDZWxsLCBtX3Zh
bHVlKSksIGZwUmVnVDApOworICAgICAgICAgICAgbG9hZERvdWJsZShBZGRyZXNzKHJlZ1QxLCBP
QkpFQ1RfT0ZGU0VUT0YoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSksIGZwUmVnVDEpOworI2VuZGlm
CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaERvdWJsZShEb3VibGVMZXNz
VGhhbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9qbmxlc3MpKTsKKworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOworICAgICAgICAgICAgZmFp
bDIubGluayh0aGlzKTsKKyAgICAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisjZWxzZQorICAg
ICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShvcDEpKQorICAg
ICAgICAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CisgICAgICAgICAgICBpZiAoIW1fY29kZUJs
b2NrLT5pc0tub3duTm90SW1tZWRpYXRlKG9wMikpCisgICAgICAgICAgICAgICAgZmFpbDIubGlu
ayh0aGlzKTsKKyAgICAgICAgICAgIGZhaWwzLmxpbmsodGhpcyk7CisgICAgICAgICAgICBmYWls
NC5saW5rKHRoaXMpOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzcyk7
CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKKyAgICAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQocmVnVDEpOworICAgICAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb3RaZXJvLCByZWdUMCksIHRhcmdldCk7Cisg
ICAgfQorfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIHVuc2lnbmVkIG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiA1
MTcwNCkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2lmX2xlc3Mo
SW5zdHIKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbnQzMiBjaGVjawogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gaW50MzIgY2hlY2sKIAotICAgIEpJVFN0dWJDYWxsIHN0dWJD
YWxsKHRoaXMsIGN0aV9vcF9sb29wX2lmX2xlc3MpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9qbGVzcyk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AxKTsKICAg
ICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIpOwogICAgIHN0dWJDYWxsLmNhbGwoKTsKQEAgLTc0
Myw2ICs3NDMsNTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaWZfdHJ1ZShJbnN0cgog
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMCksIHRhcmdl
dCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2xvb3BfaWZfZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBjb25kID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdFRpbWVvdXRDaGVjaygpOworCisgICAgZW1pdExv
YWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsKKworICAgIEp1bXAgaXNUcnVlID0gYnJhbmNoMzIoRXF1
YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpUcnVlVGFnKSk7CisgICAgYWRkSnVtcChicmFuY2gz
MihFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkZhbHNlVGFnKSksIHRhcmdldCk7CisKKyAg
ICBKdW1wIGlzTm90SW50ZWdlciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpKTsKKyAgICBKdW1wIGlzVHJ1ZTIgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIEltbTMyKDApKTsKKyAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKworICAgIGlm
IChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgeworICAgICAgICBpc05vdEludGVnZXIubGluayh0
aGlzKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZSwgcmVnVDEsIEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKworICAgICAgICB6ZXJvRG91YmxlKGZwUmVnVDApOwor
ICAgICAgICBlbWl0TG9hZERvdWJsZShjb25kLCBmcFJlZ1QxKTsKKyAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoRG91YmxlRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMSksIHRh
cmdldCk7CisgICAgfSBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKGlzTm90SW50ZWdlcik7CisK
KyAgICBpc1RydWUubGluayh0aGlzKTsKKyAgICBpc1RydWUyLmxpbmsodGhpcyk7Cit9CisKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF9sb29wX2lmX2ZhbHNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAg
dW5zaWduZWQgY29uZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5z
aWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9v
cF9qdHJ1ZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY29uZCk7CisgICAgc3R1YkNhbGwu
Y2FsbCgpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCks
IHRhcmdldCk7Cit9CisKIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfYmFzZShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF9yZXNvbHZlX2Jhc2UpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZp
c2lvbiA1MTcwNCkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMTksMTkgKzExMTksNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBy
ZWdpc3Rlcl9maWxlCiAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3Iob2xkQ2FsbEZyYW1lLCBz
dGFja0ZyYW1lLmdsb2JhbERhdGEsIFJldHVybkFkZHJlc3NQdHIob2xkQ2FsbEZyYW1lLT5yZXR1
cm5QQygpKSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9O
KGludCwgb3BfbG9vcF9pZl9sZXNzKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKLQotICAgIEpTVmFsdWUgc3JjMSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVl
KCk7Ci0gICAgSlNWYWx1ZSBzcmMyID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKLSAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotCi0gICAgYm9v
bCByZXN1bHQgPSBqc0xlc3MoY2FsbEZyYW1lLCBzcmMxLCBzcmMyKTsKLSAgICBDSEVDS19GT1Jf
RVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIERFRklORV9TVFVC
X0ZVTkNUSU9OKGludCwgb3BfbG9vcF9pZl9sZXNzZXEpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNL
X0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtMjA5NywxOSArMjA4NCw2IEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKGludCwgb3BfbG9vcF9pZl90cnVlKQot
ewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIEpTVmFsdWUg
c3JjMSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0KLSAgICBDYWxsRnJhbWUqIGNh
bGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotCi0gICAgYm9vbCByZXN1bHQgPSBzcmMx
LnRvQm9vbGVhbihjYWxsRnJhbWUpOwotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAKIERFRklORV9TVFVCX0ZVTkNUSU9OKGludCwg
b3BfbG9hZF92YXJhcmdzKQogewogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1l
KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA1MTcwNCkKKysrIEphdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsOSArMzM1LDcgQEAg
ZXh0ZXJuICJDIiB7CiAgICAgaW50IEpJVF9TVFVCIGN0aV9vcF9qbGVzc2VxKFNUVUJfQVJHU19E
RUNMQVJBVElPTik7CiAgICAgaW50IEpJVF9TVFVCIGN0aV9vcF9qdHJ1ZShTVFVCX0FSR1NfREVD
TEFSQVRJT04pOwogICAgIGludCBKSVRfU1RVQiBjdGlfb3BfbG9hZF92YXJhcmdzKFNUVUJfQVJH
U19ERUNMQVJBVElPTik7Ci0gICAgaW50IEpJVF9TVFVCIGN0aV9vcF9sb29wX2lmX2xlc3MoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBpbnQgSklUX1NUVUIgY3RpX29wX2xvb3BfaWZfbGVz
c2VxKFNUVUJfQVJHU19ERUNMQVJBVElPTik7Ci0gICAgaW50IEpJVF9TVFVCIGN0aV9vcF9sb29w
X2lmX3RydWUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBpbnQgSklUX1NUVUIgY3RpX3Rp
bWVvdXRfY2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBpbnQgSklUX1NUVUIgY3Rp
X2hhc19wcm9wZXJ0eShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIg
Y3RpX29wX2NyZWF0ZV9hcmd1bWVudHMoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcGFyc2VyL05vZGVzLmNwcAkocmV2aXNpb24gNTE3MDQpCisrKyBKYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTEsNiArODExLDE4IEBAIFJlZ2lz
dGVySUQqIFVuYXJ5T3BOb2RlOjplbWl0Qnl0ZWNvZGUoQnkKICAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRVbmFyeU9wKG9wY29kZUlEKCksIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCks
IHNyYyk7CiB9CiAKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvZ2ljYWxO
b3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgTG9naWNh
bE5vdE5vZGU6OmVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBMYWJlbCogdHJ1ZVRhcmdldCwgTGFiZWwqIGZhbHNlVGFyZ2V0LCBib29s
IGZhbGxUaHJvdWdoTWVhbnNUcnVlKQoreworICAgIEFTU0VSVChleHByKCktPmhhc0NvbmRpdGlv
bkNvbnRleHRDb2RlZ2VuKCkpOworCisgICAgLy8gcmV2ZXJzZSB0aGUgdHJ1ZSBhbmQgZmFsc2Ug
dGFyZ2V0cworICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChleHByKCks
IGZhbHNlVGFyZ2V0LCB0cnVlVGFyZ2V0LCAhZmFsbFRocm91Z2hNZWFuc1RydWUpOworfQorCisK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCaW5hcnkgT3BlcmF0aW9uIE5vZGVz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIEJpbmFyeU9wTm9kZTo6
ZW1pdFN0cmNhdDoKQEAgLTEwMTcsNiArMTAyOSwzNCBAQCBSZWdpc3RlcklEKiBMb2dpY2FsT3BO
b2RlOjplbWl0Qnl0ZWNvZGUoCiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlv
bklmTmVlZGVkKGRzdCwgdGVtcC5nZXQoKSk7CiB9CiAKK3ZvaWQgTG9naWNhbE9wTm9kZTo6ZW1p
dEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IExhYmVsKiB0cnVlVGFyZ2V0LCBMYWJlbCogZmFsc2VUYXJnZXQsIGJvb2wgZmFsbFRocm91Z2hN
ZWFuc1RydWUpCit7CisgICAgaWYgKG1fZXhwcjEtPmhhc0NvbmRpdGlvbkNvbnRleHRDb2RlZ2Vu
KCkpIHsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBhZnRlckV4cHIxID0gZ2VuZXJhdG9yLm5ld0xh
YmVsKCk7CisgICAgICAgIGlmIChtX29wZXJhdG9yID09IE9wTG9naWNhbEFuZCkKKyAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChtX2V4cHIxLCBhZnRlckV4
cHIxLmdldCgpLCBmYWxzZVRhcmdldCwgdHJ1ZSk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRleHQobV9leHByMSwgdHJ1ZVRhcmdl
dCwgYWZ0ZXJFeHByMS5nZXQoKSwgZmFsc2UpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KGFmdGVyRXhwcjEuZ2V0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJlZ2lzdGVySUQqIHRl
bXAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMSk7CisgICAgICAgIGlmIChtX29wZXJhdG9y
ID09IE9wTG9naWNhbEFuZCkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2Uo
dGVtcCwgZmFsc2VUYXJnZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXBJZlRydWUodGVtcCwgdHJ1ZVRhcmdldCk7CisgICAgfQorCisgICAgaWYgKG1fZXhw
cjItPmhhc0NvbmRpdGlvbkNvbnRleHRDb2RlZ2VuKCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0
Tm9kZUluQ29uZGl0aW9uQ29udGV4dChtX2V4cHIyLCB0cnVlVGFyZ2V0LCBmYWxzZVRhcmdldCwg
ZmFsbFRocm91Z2hNZWFuc1RydWUpOworICAgIGVsc2UgeworICAgICAgICBSZWdpc3RlcklEKiB0
ZW1wID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIpOworICAgICAgICBpZiAoZmFsbFRocm91
Z2hNZWFuc1RydWUpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKHRlbXAs
IGZhbHNlVGFyZ2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wSWZUcnVlKHRlbXAsIHRydWVUYXJnZXQpOworICAgIH0KK30KKwogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIENvbmRpdGlvbmFsTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQ29uZGl0aW9uYWxOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtMTAyNSw4ICsx
MDY1LDE0IEBAIFJlZ2lzdGVySUQqIENvbmRpdGlvbmFsTm9kZTo6ZW1pdEJ5dGVjb2QKICAgICBS
ZWZQdHI8TGFiZWw+IGJlZm9yZUVsc2UgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICBSZWZQ
dHI8TGFiZWw+IGFmdGVyRWxzZSA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCi0gICAgUmVnaXN0
ZXJJRCogY29uZCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2xvZ2ljYWwpOwotICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmRmFsc2UoY29uZCwgYmVmb3JlRWxzZS5nZXQoKSk7CisgICAgaWYgKG1fbG9n
aWNhbC0+aGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4oKSkgeworICAgICAgICBSZWZQdHI8TGFi
ZWw+IGJlZm9yZVRoZW4gPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KG1fbG9naWNhbCwgYmVmb3JlVGhlbi5nZXQoKSwg
YmVmb3JlRWxzZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoYmVm
b3JlVGhlbi5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVnaXN0ZXJJRCogY29uZCA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX2xvZ2ljYWwpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1
bXBJZkZhbHNlKGNvbmQsIGJlZm9yZUVsc2UuZ2V0KCkpOworICAgIH0KIAogICAgIGdlbmVyYXRv
ci5lbWl0Tm9kZShuZXdEc3QuZ2V0KCksIG1fZXhwcjEpOwogICAgIGdlbmVyYXRvci5lbWl0SnVt
cChhZnRlckVsc2UuZ2V0KCkpOwpAQCAtMTM0Myw4ICsxMzg5LDE0IEBAIFJlZ2lzdGVySUQqIElm
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2QKICAgICAKICAgICBSZWZQdHI8TGFiZWw+IGFmdGVy
VGhlbiA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCi0gICAgUmVnaXN0ZXJJRCogY29uZCA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2NvbmRpdGlvbik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZG
YWxzZShjb25kLCBhZnRlclRoZW4uZ2V0KCkpOworICAgIGlmIChtX2NvbmRpdGlvbi0+aGFzQ29u
ZGl0aW9uQ29udGV4dENvZGVnZW4oKSkgeworICAgICAgICBSZWZQdHI8TGFiZWw+IGJlZm9yZVRo
ZW4gPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5D
b25kaXRpb25Db250ZXh0KG1fY29uZGl0aW9uLCBiZWZvcmVUaGVuLmdldCgpLCBhZnRlclRoZW4u
Z2V0KCksIHRydWUpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGJlZm9yZVRoZW4uZ2V0
KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJlZ2lzdGVySUQqIGNvbmQgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobV9jb25kaXRpb24pOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNl
KGNvbmQsIGFmdGVyVGhlbi5nZXQoKSk7CisgICAgfQogCiAgICAgZ2VuZXJhdG9yLmVtaXROb2Rl
KGRzdCwgbV9pZkJsb2NrKTsKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGFmdGVyVGhlbi5nZXQo
KSk7CkBAIC0xMzYyLDggKzE0MTQsMTQgQEAgUmVnaXN0ZXJJRCogSWZFbHNlTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dAogICAgIFJlZlB0cjxMYWJlbD4gYmVmb3JlRWxzZSA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwogICAgIFJlZlB0cjxMYWJlbD4gYWZ0ZXJFbHNlID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7CiAKLSAgICBSZWdpc3RlcklEKiBjb25kID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fY29uZGl0
aW9uKTsKLSAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGNvbmQsIGJlZm9yZUVsc2UuZ2V0
KCkpOworICAgIGlmIChtX2NvbmRpdGlvbi0+aGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4oKSkg
eworICAgICAgICBSZWZQdHI8TGFiZWw+IGJlZm9yZVRoZW4gPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KG1fY29uZGl0
aW9uLCBiZWZvcmVUaGVuLmdldCgpLCBiZWZvcmVFbHNlLmdldCgpLCB0cnVlKTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbChiZWZvcmVUaGVuLmdldCgpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBSZWdpc3RlcklEKiBjb25kID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fY29uZGl0aW9uKTsK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShjb25kLCBiZWZvcmVFbHNlLmdldCgp
KTsKKyAgICB9CiAKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2lmQmxvY2spOwogICAg
IGdlbmVyYXRvci5lbWl0SnVtcChhZnRlckVsc2UuZ2V0KCkpOwpAQCAtMTM5Myw4ICsxNDUxLDEy
IEBAIFJlZ2lzdGVySUQqIERvV2hpbGVOb2RlOjplbWl0Qnl0ZWNvZGUoQnkKIAogICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwogICAgIGdlbmVyYXRvci5l
bWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBtX2V4cHItPmxpbmVObygpLCBtX2V4
cHItPmxpbmVObygpKTsKLSAgICBSZWdpc3RlcklEKiBjb25kID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fZXhwcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGNvbmQsIHRvcE9mTG9vcC5n
ZXQoKSk7CisgICAgaWYgKG1fZXhwci0+aGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4oKSkKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KG1fZXhwciwgdG9wT2ZM
b29wLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSwgZmFsc2UpOworICAgIGVsc2UgeworICAg
ICAgICBSZWdpc3RlcklEKiBjb25kID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShjb25kLCB0b3BPZkxvb3AuZ2V0KCkpOworICAg
IH0KIAogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwogICAg
IHJldHVybiByZXN1bHQuZ2V0KCk7CkBAIC0xNDE1LDggKzE0NzcsMTMgQEAgUmVnaXN0ZXJJRCog
V2hpbGVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChz
Y29wZS0+Y29udGludWVUYXJnZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2ls
bEV4ZWN1dGVTdGF0ZW1lbnQsIG1fZXhwci0+bGluZU5vKCksIG1fZXhwci0+bGluZU5vKCkpOwot
ICAgIFJlZ2lzdGVySUQqIGNvbmQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKLSAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoY29uZCwgdG9wT2ZMb29wLmdldCgpKTsKKworICAgIGlm
IChtX2V4cHItPmhhc0NvbmRpdGlvbkNvbnRleHRDb2RlZ2VuKCkpCisgICAgICAgIGdlbmVyYXRv
ci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChtX2V4cHIsIHRvcE9mTG9vcC5nZXQoKSwgc2Nv
cGUtPmJyZWFrVGFyZ2V0KCksIGZhbHNlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVnaXN0ZXJJ
RCogY29uZCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXBJZlRydWUoY29uZCwgdG9wT2ZMb29wLmdldCgpKTsKKyAgICB9CiAKICAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKICAgICAKQEAgLTE0NTAsOCAr
MTUxNywxMiBAQCBSZWdpc3RlcklEKiBGb3JOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvCiAKICAg
ICBnZW5lcmF0b3IuZW1pdExhYmVsKGNvbmRpdGlvbi5nZXQoKSk7CiAgICAgaWYgKG1fZXhwcjIp
IHsKLSAgICAgICAgUmVnaXN0ZXJJRCogY29uZCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIy
KTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGNvbmQsIHRvcE9mTG9vcC5nZXQo
KSk7CisgICAgICAgIGlmIChtX2V4cHIyLT5oYXNDb25kaXRpb25Db250ZXh0Q29kZWdlbigpKQor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KG1fZXhwcjIs
IHRvcE9mTG9vcC5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCksIGZhbHNlKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEKiBjb25kID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG1fZXhwcjIpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGNvbmQsIHRv
cE9mTG9vcC5nZXQoKSk7CisgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRKdW1wKHRvcE9mTG9vcC5nZXQoKSk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNl
ci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShy
ZXZpc2lvbiA1MTcwNCkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEFyZ3Vt
ZW50TGlzdE5vZGU7CiAgICAgY2xhc3MgQnl0ZWNvZGVHZW5lcmF0b3I7CiAgICAgY2xhc3MgRnVu
Y3Rpb25Cb2R5Tm9kZTsKKyAgICBjbGFzcyBMYWJlbDsKICAgICBjbGFzcyBQcm9wZXJ0eUxpc3RO
b2RlOwogICAgIGNsYXNzIFJlYWRNb2RpZnlSZXNvbHZlTm9kZTsKICAgICBjbGFzcyBSZWdpc3Rl
cklEOwpAQCAtMTUxLDYgKzE1Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNDb21tYU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNTaW1wbGVBcnJheSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBpc0FkZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZp
cnR1YWwgYm9vbCBoYXNDb25kaXRpb25Db250ZXh0Q29kZWdlbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29u
dGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExhYmVsKiwgTGFiZWwqLCBib29sKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9CiAKICAgICAgICAgdmlydHVhbCBFeHByZXNzaW9uTm9kZSogc3RyaXBV
bmFyeVBsdXMoKSB7IHJldHVybiB0aGlzOyB9CiAKQEAgLTc1Nyw2ICs3NjEsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIGV4cHIo
KSB7IHJldHVybiBtX2V4cHI7IH0KKyAgICAgICAgY29uc3QgRXhwcmVzc2lvbk5vZGUqIGV4cHIo
KSBjb25zdCB7IHJldHVybiBtX2V4cHI7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKTsKQEAgLTc4OCw2ICs3OTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBM
b2dpY2FsTm90Tm9kZSA6IHB1YmxpYyBVbmFyeU9wTm9kZSB7CiAgICAgcHVibGljOgogICAgICAg
ICBMb2dpY2FsTm90Tm9kZShKU0dsb2JhbERhdGEqLCBFeHByZXNzaW9uTm9kZSopOworICAgIHBy
aXZhdGU6CisgICAgICAgIHZvaWQgZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KEJ5dGVj
b2RlR2VuZXJhdG9yJiwgTGFiZWwqIHRydWVUYXJnZXQsIExhYmVsKiBmYWxzZVRhcmdldCwgYm9v
bCBmYWxsVGhyb3VnaE1lYW5zVHJ1ZSk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNDb25kaXRp
b25Db250ZXh0Q29kZWdlbigpIGNvbnN0IHsgcmV0dXJuIGV4cHIoKS0+aGFzQ29uZGl0aW9uQ29u
dGV4dENvZGVnZW4oKTsgfQogICAgIH07CiAKICAgICBjbGFzcyBCaW5hcnlPcE5vZGUgOiBwdWJs
aWMgRXhwcmVzc2lvbk5vZGUgewpAQCAtOTUyLDYgKzk2MCw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOworICAgICAgICB2b2lkIGVtaXRC
eXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExhYmVsKiB0cnVl
VGFyZ2V0LCBMYWJlbCogZmFsc2VUYXJnZXQsIGJvb2wgZmFsbFRocm91Z2hNZWFuc1RydWUpOwor
ICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4oKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjE7CiAgICAg
ICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4cHIyOwpJbmRleDogU3VuU3BpZGVyL3N1bnNwaWRlcgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTdW5TcGlkZXIvc3Vuc3BpZGVyCShyZXZpc2lvbiA1MTcwNCkKKysrIFN1
blNwaWRlci9zdW5zcGlkZXIJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBzdWIg
bG9hZFRlc3RzTGlzdCgpCiB7CiAgICAgbXkgJHRlc3RsaXN0ID0gIkxJU1QiOwogICAgICR0ZXN0
bGlzdCA9ICJMSVNULVVCRU5DSCIgaWYgKCR1YmVuY2gpOwotICAgICR0ZXN0bGlzdCA9ICJMSVNU
LVY4IiBpZiAoJHY4c3VpdGUpOworICAgICR0ZXN0bGlzdCA9ICJMSVNULUNLIiBpZiAoJHY4c3Vp
dGUpOwogICAgICR0ZXN0bGlzdCA9ICJMSVNULVBBUlNFLU9OTFkiIGlmICgkcGFyc2Vvbmx5KTsK
IAogICAgIG9wZW4gVEVTVExJU1QsICI8IiwgInRlc3RzLyR7dGVzdGxpc3R9IiBvciBkaWUgIkNh
bid0IGZpbmQgLi90ZXN0cy8ke3Rlc3RsaXN0fSI7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MTczNCkK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDA5LTEyLTA1ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRl
c2NyaXB0aW9uIGFuZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICAqIGZhc3QvanMvY29kZWdl
bi1sb29wcy1sb2dpY2FsLW5vZGVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2pzL3Nj
cmlwdC10ZXN0cy9jb2RlZ2VuLWxvb3BzLWxvZ2ljYWwtbm9kZXMuanM6CisgICAgICAgICh3aGls
ZV9ub3Rfb3JfZXEpOgorICAgICAgICAod2hpbGVfbm90X29yX25lcSk6CisgICAgICAgICh3aGls
ZV9ub3Rfb3JfbGVzcyk6CisgICAgICAgICh3aGlsZV9ub3Rfb3JfbGVzc2VxKToKKyAgICAgICAg
KHdoaWxlX25vdF9hbmRfZXEpOgorICAgICAgICAod2hpbGVfbm90X2FuZF9uZXEpOgorICAgICAg
ICAod2hpbGVfbm90X2FuZF9sZXNzKToKKyAgICAgICAgKHdoaWxlX25vdF9hbmRfbGVzc2VxKToK
KyAgICAgICAgKGZvcl9ub3Rfb3JfZXEpOgorICAgICAgICAoZm9yX25vdF9vcl9uZXEpOgorICAg
ICAgICAoZm9yX25vdF9vcl9sZXNzKToKKyAgICAgICAgKGZvcl9ub3Rfb3JfbGVzc2VxKToKKyAg
ICAgICAgKGZvcl9ub3RfYW5kX2VxKToKKyAgICAgICAgKGZvcl9ub3RfYW5kX25lcSk6CisgICAg
ICAgIChmb3Jfbm90X2FuZF9sZXNzKToKKyAgICAgICAgKGZvcl9ub3RfYW5kX2xlc3NlcSk6Cisg
ICAgICAgIChkb3doaWxlX25vdF9vcl9lcSk6CisgICAgICAgIChkb3doaWxlX25vdF9vcl9uZXEp
OgorICAgICAgICAoZG93aGlsZV9ub3Rfb3JfbGVzcyk6CisgICAgICAgIChkb3doaWxlX25vdF9v
cl9sZXNzZXEpOgorICAgICAgICAoZG93aGlsZV9ub3RfYW5kX2VxKToKKyAgICAgICAgKGRvd2hp
bGVfbm90X2FuZF9uZXEpOgorICAgICAgICAoZG93aGlsZV9ub3RfYW5kX2xlc3MpOgorICAgICAg
ICAoZG93aGlsZV9ub3RfYW5kX2xlc3NlcSk6CisgICAgICAgICogaHR0cC90ZXN0cy9sb2FkaW5n
L3Jlc291cmNlcy9yZWRpcmVjdC1tZXRob2RzLXJlc3VsdC5waHA6CisKIDIwMDktMTItMDUgIFBo
aWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEd1c3Rhdm8gTm9yb25oYS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvY29kZWdlbi1s
b29wcy1sb2dpY2FsLW5vZGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL2NvZGVnZW4tbG9vcHMtbG9naWNhbC1ub2Rlcy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDUxNzA0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9jb2RlZ2VuLWxvb3BzLWxvZ2ljYWwt
bm9kZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNywzMCBAQCBQQVNT
IGRvd2hpbGVfYW5kX2VxKCkgaXMgdHJ1ZQogUEFTUyBkb3doaWxlX2FuZF9uZXEoKSBpcyB0cnVl
CiBQQVNTIGRvd2hpbGVfYW5kX2xlc3MoKSBpcyB0cnVlCiBQQVNTIGRvd2hpbGVfYW5kX2xlc3Nl
cSgpIGlzIHRydWUKK1BBU1Mgd2hpbGVfbm90X29yX2VxKCkgaXMgZmFsc2UKK1BBU1Mgd2hpbGVf
bm90X29yX25lcSgpIGlzIGZhbHNlCitQQVNTIHdoaWxlX25vdF9vcl9sZXNzKCkgaXMgZmFsc2UK
K1BBU1Mgd2hpbGVfbm90X29yX2xlc3NlcSgpIGlzIGZhbHNlCitQQVNTIHdoaWxlX25vdF9hbmRf
ZXEoKSBpcyBmYWxzZQorUEFTUyB3aGlsZV9ub3RfYW5kX25lcSgpIGlzIGZhbHNlCitQQVNTIHdo
aWxlX25vdF9hbmRfbGVzcygpIGlzIGZhbHNlCitQQVNTIHdoaWxlX25vdF9hbmRfbGVzc2VxKCkg
aXMgZmFsc2UKK1BBU1MgZm9yX25vdF9vcl9lcSgpIGlzIGZhbHNlCitQQVNTIGZvcl9ub3Rfb3Jf
bmVxKCkgaXMgZmFsc2UKK1BBU1MgZm9yX25vdF9vcl9sZXNzKCkgaXMgZmFsc2UKK1BBU1MgZm9y
X25vdF9vcl9sZXNzZXEoKSBpcyBmYWxzZQorUEFTUyBmb3Jfbm90X2FuZF9lcSgpIGlzIGZhbHNl
CitQQVNTIGZvcl9ub3RfYW5kX25lcSgpIGlzIGZhbHNlCitQQVNTIGZvcl9ub3RfYW5kX2xlc3Mo
KSBpcyBmYWxzZQorUEFTUyBmb3Jfbm90X2FuZF9sZXNzZXEoKSBpcyBmYWxzZQorUEFTUyBkb3do
aWxlX25vdF9vcl9lcSgpIGlzIGZhbHNlCitQQVNTIGRvd2hpbGVfbm90X29yX25lcSgpIGlzIGZh
bHNlCitQQVNTIGRvd2hpbGVfbm90X29yX2xlc3MoKSBpcyBmYWxzZQorUEFTUyBkb3doaWxlX25v
dF9vcl9sZXNzZXEoKSBpcyBmYWxzZQorUEFTUyBkb3doaWxlX25vdF9hbmRfZXEoKSBpcyBmYWxz
ZQorUEFTUyBkb3doaWxlX25vdF9hbmRfbmVxKCkgaXMgZmFsc2UKK1BBU1MgZG93aGlsZV9ub3Rf
YW5kX2xlc3MoKSBpcyBmYWxzZQorUEFTUyBkb3doaWxlX25vdF9hbmRfbGVzc2VxKCkgaXMgZmFs
c2UKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvY29kZWdlbi1sb29wcy1sb2dpY2Fs
LW5vZGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3Rz
L2NvZGVnZW4tbG9vcHMtbG9naWNhbC1ub2Rlcy5qcwkocmV2aXNpb24gNTE3MDQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9jb2RlZ2VuLWxvb3BzLWxvZ2ljYWwtbm9kZXMu
anMJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw0ICsyNjYsMjY4IEBAIGZ1bmN0aW9uIGRvd2hpbGVf
YW5kX2xlc3NlcSgpCiAKIHNob3VsZEJlVHJ1ZSgiZG93aGlsZV9hbmRfbGVzc2VxKCkiKTsKIAor
ZnVuY3Rpb24gd2hpbGVfbm90X29yX2VxKCkKK3sKKyAgICB2YXIgYSA9IDA7CisgICAgd2hpbGUg
KCEoYSA9PSAwIHx8IGEgPT0gMCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBm
YWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgid2hpbGVfbm90X29yX2VxKCkiKTsKKworZnVuY3Rp
b24gd2hpbGVfbm90X29yX25lcSgpCit7CisgICAgdmFyIGEgPSAwOworICAgIHdoaWxlICghKGEg
IT0gMSB8fCBhICE9IDEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3Nob3VsZEJlRmFsc2UoIndoaWxlX25vdF9vcl9uZXEoKSIpOworCitmdW5jdGlvbiB3
aGlsZV9ub3Rfb3JfbGVzcygpCit7CisgICAgdmFyIGEgPSAwOworICAgIHdoaWxlICghKGEgPCAx
IHx8IGEgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzaG91bGRCZUZhbHNlKCJ3aGlsZV9ub3Rfb3JfbGVzcygpIik7CisKK2Z1bmN0aW9uIHdoaWxl
X25vdF9vcl9sZXNzZXEoKQoreworICAgIHZhciBhID0gMDsKKyAgICB3aGlsZSAoIShhIDw9IDEg
fHwgYSA8PSAxKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzaG91bGRCZUZhbHNlKCJ3aGlsZV9ub3Rfb3JfbGVzc2VxKCkiKTsKKworZnVuY3Rpb24gd2hp
bGVfbm90X2FuZF9lcSgpCit7CisgICAgdmFyIGEgPSAwOworICAgIHdoaWxlICghKGEgPT0gMCAm
JiBhID09IDApKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3Nob3VsZEJlRmFsc2UoIndoaWxlX25vdF9hbmRfZXEoKSIpOworCitmdW5jdGlvbiB3aGlsZV9u
b3RfYW5kX25lcSgpCit7CisgICAgdmFyIGEgPSAwOworICAgIHdoaWxlICghKGEgIT0gMSAmJiBh
ICE9IDEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3No
b3VsZEJlRmFsc2UoIndoaWxlX25vdF9hbmRfbmVxKCkiKTsKKworZnVuY3Rpb24gd2hpbGVfbm90
X2FuZF9sZXNzKCkKK3sKKyAgICB2YXIgYSA9IDA7CisgICAgd2hpbGUgKCEoYSA8IDEgJiYgYSA8
IDEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3Vs
ZEJlRmFsc2UoIndoaWxlX25vdF9hbmRfbGVzcygpIik7CisKK2Z1bmN0aW9uIHdoaWxlX25vdF9h
bmRfbGVzc2VxKCkKK3sKKyAgICB2YXIgYSA9IDA7CisgICAgd2hpbGUgKCEoYSA8PSAxICYmIGEg
PD0gMSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworc2hv
dWxkQmVGYWxzZSgid2hpbGVfbm90X2FuZF9sZXNzZXEoKSIpOworCitmdW5jdGlvbiBmb3Jfbm90
X29yX2VxKCkKK3sKKyAgICBmb3IgKHZhciBhID0gMDsgIShhID09IDAgfHwgYSA9PSAwKTsgKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFs
c2UoImZvcl9ub3Rfb3JfZXEoKSIpOworCitmdW5jdGlvbiBmb3Jfbm90X29yX25lcSgpCit7Cisg
ICAgZm9yICh2YXIgYSA9IDA7ICEoYSAhPSAxIHx8IGEgIT0gMSk7ICkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJmb3Jfbm90X29y
X25lcSgpIik7CisKK2Z1bmN0aW9uIGZvcl9ub3Rfb3JfbGVzcygpCit7CisgICAgZm9yICh2YXIg
YSA9IDA7ICEoYSA8IDEgfHwgYSA8IDEpOyApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZm9yX25vdF9vcl9sZXNzKCkiKTsKKwor
ZnVuY3Rpb24gZm9yX25vdF9vcl9sZXNzZXEoKQoreworICAgIGZvciAodmFyIGEgPSAwOyAhKGEg
PD0gMSB8fCBhIDw9IDEpOyApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZm9yX25vdF9vcl9sZXNzZXEoKSIpOworCitmdW5jdGlv
biBmb3Jfbm90X2FuZF9lcSgpCit7CisgICAgZm9yICh2YXIgYSA9IDA7ICEoYSA9PSAwICYmIGEg
PT0gMCk7ICkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitz
aG91bGRCZUZhbHNlKCJmb3Jfbm90X2FuZF9lcSgpIik7CisKK2Z1bmN0aW9uIGZvcl9ub3RfYW5k
X25lcSgpCit7CisgICAgZm9yICh2YXIgYSA9IDA7ICEoYSAhPSAxICYmIGEgIT0gMSk7ICkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNl
KCJmb3Jfbm90X2FuZF9uZXEoKSIpOworCitmdW5jdGlvbiBmb3Jfbm90X2FuZF9sZXNzKCkKK3sK
KyAgICBmb3IgKHZhciBhID0gMDsgIShhIDwgMSAmJiBhIDwgMSk7ICkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJmb3Jfbm90X2Fu
ZF9sZXNzKCkiKTsKKworZnVuY3Rpb24gZm9yX25vdF9hbmRfbGVzc2VxKCkKK3sKKyAgICBmb3Ig
KHZhciBhID0gMDsgIShhIDw9IDEgJiYgYSA8PSAxKTsgKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFsc2UoImZvcl9ub3RfYW5kX2xlc3Nl
cSgpIik7CisKK2Z1bmN0aW9uIGRvd2hpbGVfbm90X29yX2VxKCkKK3sKKyAgICB2YXIgYSA9IDA7
CisgICAgdmFyIGkgPSAwOworICAgIGRvIHsKKyAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGkrKzsKKyAgICB9IHdoaWxlICghKGEgPT0gMCB8fCBh
ID09IDApKQorICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZG93aGlsZV9u
b3Rfb3JfZXEoKSIpOworCitmdW5jdGlvbiBkb3doaWxlX25vdF9vcl9uZXEoKQoreworICAgIHZh
ciBhID0gMDsKKyAgICB2YXIgaSA9IDA7CisgICAgZG8geworICAgICAgICBpZiAoaSA+IDApCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaSsrOworICAgIH0gd2hpbGUgKCEoYSAh
PSAxIHx8IGEgIT0gMSkpCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJk
b3doaWxlX25vdF9vcl9uZXEoKSIpOworCitmdW5jdGlvbiBkb3doaWxlX25vdF9vcl9sZXNzKCkK
K3sKKyAgICB2YXIgYSA9IDA7CisgICAgdmFyIGkgPSAwOworICAgIGRvIHsKKyAgICAgICAgaWYg
KGkgPiAwKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGkrKzsKKyAgICB9IHdo
aWxlICghKGEgPCAxIHx8IGEgPCAxKSkKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJl
RmFsc2UoImRvd2hpbGVfbm90X29yX2xlc3MoKSIpOworCitmdW5jdGlvbiBkb3doaWxlX25vdF9v
cl9sZXNzZXEoKQoreworICAgIHZhciBhID0gMDsKKyAgICB2YXIgaSA9IDA7CisgICAgZG8gewor
ICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaSsr
OworICAgIH0gd2hpbGUgKCEoYSA8PSAxIHx8IGEgPD0gMSkpCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitzaG91bGRCZUZhbHNlKCJkb3doaWxlX25vdF9vcl9sZXNzZXEoKSIpOworCitmdW5jdGlv
biBkb3doaWxlX25vdF9hbmRfZXEoKQoreworICAgIHZhciBhID0gMDsKKyAgICB2YXIgaSA9IDA7
CisgICAgZG8geworICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaSsrOworICAgIH0gd2hpbGUgKCEoYSA9PSAwICYmIGEgPT0gMCkpCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJkb3doaWxlX25vdF9hbmRfZXEoKSIpOwor
CitmdW5jdGlvbiBkb3doaWxlX25vdF9hbmRfbmVxKCkKK3sKKyAgICB2YXIgYSA9IDA7CisgICAg
dmFyIGkgPSAwOworICAgIGRvIHsKKyAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGkrKzsKKyAgICB9IHdoaWxlICghKGEgIT0gMSAmJiBhICE9IDEp
KQorICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZG93aGlsZV9ub3RfYW5k
X25lcSgpIik7CisKK2Z1bmN0aW9uIGRvd2hpbGVfbm90X2FuZF9sZXNzKCkKK3sKKyAgICB2YXIg
YSA9IDA7CisgICAgdmFyIGkgPSAwOworICAgIGRvIHsKKyAgICAgICAgaWYgKGkgPiAwKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGkrKzsKKyAgICB9IHdoaWxlICghKGEgPCAx
ICYmIGEgPCAxKSkKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFsc2UoImRvd2hp
bGVfbm90X2FuZF9sZXNzKCkiKTsKKworZnVuY3Rpb24gZG93aGlsZV9ub3RfYW5kX2xlc3NlcSgp
Cit7CisgICAgdmFyIGEgPSAwOworICAgIHZhciBpID0gMDsKKyAgICBkbyB7CisgICAgICAgIGlm
IChpID4gMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpKys7CisgICAgfSB3
aGlsZSAoIShhIDw9IDEgJiYgYSA8PSAxKSkKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3Vs
ZEJlRmFsc2UoImRvd2hpbGVfbm90X2FuZF9sZXNzZXEoKSIpOworCiB2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNv
dXJjZXMvcmVkaXJlY3QtbWV0aG9kcy1yZXN1bHQucGhwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvbG9hZGluZy9yZXNvdXJjZXMvcmVkaXJlY3QtbWV0aG9kcy1yZXN1bHQu
cGhwCShyZXZpc2lvbiA1MTcwNCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvbG9hZGluZy9y
ZXNvdXJjZXMvcmVkaXJlY3QtbWV0aG9kcy1yZXN1bHQucGhwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcgKzEsNyBAQAogPD9waHAKICRzdGF0dXMgPSAoaW50KSRfUkVRVUVTVFsnc3RhdHVzJ107CiBp
ZiAoJHN0YXR1cyA+IDIwMCAmJiAhJF9HRVRbJ3JlZGlyZWN0ZWQnXSkgewotICBoZWFkZXIoIkxv
Y2F0aW9uOiByZWRpcmVjdC1tZXRob2RzLXJlc3VsdC5waHA/cmVkaXJlY3RlZD10cnVlIiwgVFJV
RSwgJHN0YXR1cyk7CisgIGhlYWRlcigiTG9jYXRpb246IGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9s
b2FkaW5nL3Jlc291cmNlcy9yZWRpcmVjdC1tZXRob2RzLXJlc3VsdC5waHA/cmVkaXJlY3RlZD10
cnVlIiwgVFJVRSwgJHN0YXR1cyk7CiAgIGV4aXQoKTsKIH0KID8+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44357</attachid>
            <date>2009-12-05 23:25:47 -0800</date>
            <delta_ts>2009-12-06 00:32:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-32190-20091205232546.patch</filename>
            <type>text/plain</type>
            <size>49747</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUxNzM0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIyIEBACisyMDA5LTEyLTA1ICBNYWNpZWog
U3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgY29ud2F5IGJlbmNobWFyayBzcGVuZHMgaGFsZiBpdCdzIHRp
bWUgaW4gb3BfbGVzcyAoanVtcCBmdXNpb24gZmFpbHMpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjE5MAorCisgICAgICAgIDwxJSBzcGVlZHVwIG9u
IFN1blNwaWRlciBhbmQgVjgKKyAgICAgICAgMnggc3BlZWR1cCBvbiAiY29ud2F5IiBiZW5jaG1h
cmsKKyAgICAgICAgCisgICAgICAgIFR3byBvcHRpbWl6YXRpb25zOgorICAgICAgICAxKSBJbXBy
b3ZlIGNvZGVnZW4gZm9yIGxvZ2ljYWwgb3BlcmF0b3JzICYmLCB8fCBhbmQgISBpbiBhIGNvbmRp
dGlvbiBjb250ZXh0CisgICAgICAgIAorICAgICAgICBXaGVuIGdlbmVyYXRpbmcgY29kZSBmb3Ig
Y29tYmluYXRpb25zIG9mICYmLCB8fCBhbmQgISwgaW4gYQorICAgICAgICBjb25kaXRpb24gY29u
dGV4dCAoaS5lLiBpbiBhbiBpZiBzdGF0ZW1lbnQgb3IgbG9vcCBjb25kaXRpb24pLCB3ZQorICAg
ICAgICB1c2VkIHRvIHByb2R1Y2UgYSB2YWx1ZSwgYW5kIHRoZW4gc2VwYXJhdGVseSBqdW1wIGJh
c2VkIG9uIGl0cworICAgICAgICB0cnV0aGluZXNzLiBOb3cgd2UgcGFzcyB0aGUgZmFsc2UgYW5k
IHRydWUgdGFyZ2V0cyBpbiwgYW5kIGxldCB0aGUKKyAgICAgICAgbG9naWNhbCBvcGVyYXRvcnMg
Z2VuZXJhdGUganVtcHMgZGlyZWN0bHkuIFRoaXMgaGVscHMgaW4gZm91cgorICAgICAgICB3YXlz
OgorCisgICAgICAgIGEpIEluZGl2aWR1YWwgY2xhdXNlcyBvZiBhIHNob3J0LWNpcmN1aXQgbG9n
aWNhbCBvcGVyYXRvciBjYW4gbm93CisgICAgICAgIGp1bXAgZGlyZWN0bHkgdG8gdGhlIHRoZW4g
b3IgZWxzZSBjbGF1c2Ugb2YgYW4gaWYgc3RhdGVtZW50IChvciB0bworICAgICAgICB0aGUgdG9w
IG9yIGV4aXQgb2YgYSBsb29wKSBpbnN0ZWFkIG9mIGp1bXBpbmcgdG8gYSBqdW1wLgorICAgICAg
ICAKKyAgICAgICAgYikgSXQgdXNlZCB0byBiZSB0aGF0IGp1bXAgZnVzaW9uIHdpdGggdGhlIGNv
bmRpdGlvbiBvZiB0aGUgZmlyc3QKKyAgICAgICAgY2xhdXNlIG9mIGEgbG9naWNhbCBvcGVyYXRv
ciB3YXMgaW5oaWJpdGVkLCBiZWNhdXNlIHRoZSByZWdpc3RlcgorICAgICAgICB3YXMgcmVmJ2Qg
dG8gYmUgdXNlZCBsYXRlciwgaW4gdGhlIGFjdHVhbCBjb25kaXRpb24ganVtcDsgdGhpcyBubwor
ICAgICAgICBsb25nZXIgaGFwcGVucyBzaW5jZSBhIGp1bXAgc3RyYWlnaHQgdG8gdGhlIGZpbmFs
IHRhcmdldCBpcworICAgICAgICBnZW5lcmF0ZWQgZGlyZWN0bHkuCisKKyAgICAgICAgYykgSXQg
dXNlZCB0byBiZSB0aGF0IGp1bXAgZnVzaW9uIHdpdGggdGhlIGNvbmRpdGlvbiBvZiB0aGUgc2Vj
b25kCisgICAgICAgIGNsYXVzZSBvZiBhIGxvZ2ljYWwgb3BlcmF0b3Igd2FzIGluaGliaXRlZCwg
YmVjYXVzZSB0aGVyZSB3YXMgYQorICAgICAgICBqdW1wIHRhcmdldCByaWdodCBhZnRlciB0aGUg
c2Vjb25kIGNsYXVzZSBhbmQgYmVmb3JlIHRoZSBhY3R1YWwKKyAgICAgICAgY29uZGl0aW9uIGp1
bXAuIEJ1dCBub3cgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5IGZvciB0aGUgZmlyc3QKKyAgICAg
ICAgY2xhdXNlIHRvIGp1bXAgdGhlcmUgc28ganVtcCBmdXNpb24gaXMgbm90IGJsb2NrZWQuCisK
KyAgICAgICAgZCkgV2UgYXZvaWQgZ2VuZXJhdGluZyBleGNlc3MgbW92IHN0YXRlbWVudHMgaW4g
c29tZSBjYXNlcy4KKyAgICAgICAgCisgICAgICAgIEFzIGEgY29uY3JldGUgZXhhbXBsZSB0aGlz
IHNvdXJjZToKKyAgICAgICAgCisgICAgICAgIGlmICghKCh4IDwgcSAmJiB5IDwgcSkgfHwgKHQg
PCBxICYmIHogPCBxKSkpIHsKKyAgICAgICAgICAgIC8vIC4uLgorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBVc2VkIHRvIGdlbmVyYXRlIHRoaXMgYnl0ZWNvZGU6CisgICAgICAgIAorICAg
ICAgICBbICAzNF0gbGVzcyAgICAgICAgICAgICAgcjEsIHItMTUsIHItMTkKKyAgICAgICAgWyAg
MzhdIGpmYWxzZSAgICAgICAgICAgIHIxLCA3KC0+NDUpCisgICAgICAgIFsgIDQxXSBsZXNzICAg
ICAgICAgICAgICByMSwgci0xNiwgci0xOQorICAgICAgICBbICA0NV0ganRydWUgICAgICAgICAg
ICAgcjEsIDE0KC0+NTkpCisgICAgICAgIFsgIDQ4XSBsZXNzICAgICAgICAgICAgICByMSwgci0x
Nywgci0xOQorICAgICAgICBbICA1Ml0gamZhbHNlICAgICAgICAgICAgcjEsIDcoLT41OSkKKyAg
ICAgICAgWyAgNTVdIGxlc3MgICAgICAgICAgICAgIHIxLCByLTE4LCByLTE5CisgICAgICAgIFsg
IDU5XSBqdHJ1ZSAgICAgICAgICAgICByMSwgMTcoLT43NikKKyAgICAgICAgCisgICAgICAgIEFu
ZCBub3cgZ2VuZXJhdGVzIHRoaXMgYnl0ZWNvZGUgKGFsc28gdGFraW5nIGFkdmFudGFnZSBvZiB0
aGUgc2Vjb25kIG9wdGltaXphdGlvbiBiZWxvdyk6CisgICAgICAgIAorICAgICAgICBbICAzNF0g
am5sZXNzICAgICAgICAgICAgci0xNSwgci0xOSwgOCgtPjQyKQorICAgICAgICBbICAzOF0gamxl
c3MgICAgICAgICAgICAgci0xNiwgci0xOSwgMjYoLT42NCkKKyAgICAgICAgWyAgNDJdIGpubGVz
cyAgICAgICAgICAgIHItMTcsIHItMTksIDgoLT41MCkKKyAgICAgICAgWyAgNDZdIGpsZXNzICAg
ICAgICAgICAgIHItMTgsIHItMTksIDE4KC0+NjQpCisgICAgICAgIAorICAgICAgICBOb3RlIHRo
ZSBqdW1wIGZ1c2lvbiBhbmQgdGhlIGZhY3QgdGhhdCB0aGVyZSdzIGxlc3MganVtcAorICAgICAg
ICBpbmRpcmVjdGlvbiAtIHRocmVlIG9mIHRoZSBmb3VyIGp1bXBzIGdvIHN0cmFpZ2h0IHRvIHRo
ZSB0YXJnZXQKKyAgICAgICAgY2xhdXNlIGluc3RlYWQgb2YgaW5kaXJlY3RpbmcgdGhyb3VnaCBh
bm90aGVyIGp1bXAuCisgICAgICAgIAorICAgICAgICAyKSBJbXBsZW1lbnQgamxlc3Mgb3Bjb2Rl
IHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBhYm92ZSwgc2luY2Ugd2UnbGwgbm93IG9mdGVuIGdl
bmVyYXRlCisgICAgICAgIGEgbGVzcyBmb2xsb3dlZCBieSBhIGp0cnVlIHdoZXJlIGZ1c2lvbiBp
cyBub3QgZm9yYmlkZGVuLgorICAgICAgIAorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAg
ICAgICAoSlNDOjpFeHByZXNzaW9uTm9kZTo6aGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4pOiBI
ZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lCisgICAgICAgIHdoZXRoZXIgYSBub2RlIHN1cHBv
cnRzIHNwZWNpYWwgY29uZGl0aW9uYWwgY29kZWdlbi4gUmV0dXJuIGZhbHNlIGFzIHRoaXMgaXMg
dGhlIGRlZmF1bHQuCisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjplbWl0Qnl0ZWNvZGVJ
bkNvbmRpdGlvbkNvbnRleHQpOiBBc3NlcnQgbm90IHJlYWNoZWQgLSBvbmx5IHJlYWxseQorICAg
ICAgICBkZWZpbmVkIGZvciBub2RlcyB0aGF0IGRvIGhhdmUgY29uZGl0aW9uYWwgY29kZWdlbi4K
KyAgICAgICAgKEpTQzo6VW5hcnlPcE5vZGU6OmV4cHIpOiBBZGQgY29uc3QgdmVyc2lvbi4KKyAg
ICAgICAgKEpTQzo6TG9naWNhbE5vdE5vZGU6Omhhc0NvbmRpdGlvbkNvbnRleHRDb2RlZ2VuKTog
UmV0dXJuZSB0cnVlIG9ubHkgaWYgc3ViZXhwcmVzc2lvbgorICAgICAgICBzdXBwb3J0cyBpdC4K
KyAgICAgICAgKEpTQzo6TG9naWNhbE9wTm9kZTo6aGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4p
OiBSZXR1cm4gdHJ1ZS4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAgICAgICAoSlND
OjpMb2dpY2FsTm90Tm9kZTo6ZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KTogSW1wbGVt
ZW50ZWQgLSBqdXN0IHN3YXAKKyAgICAgICAgdGhlIHRydWUgYW5kIGZhbHNlIHRhcmdldHMgZm9y
IHRoZSBjaGlsZCBub2RlLgorICAgICAgICAoSlNDOjpMb2dpY2FsT3BOb2RlOjplbWl0Qnl0ZWNv
ZGVJbkNvbmRpdGlvbkNvbnRleHQpOiBJbXBsZW1lbnRlZCAtIGhhbmRsZSBqdW1wcworICAgICAg
ICBkaXJlY3RseSwgaW1wcm92aW5nIGNvZGVnZW4gcXVhbGl0eS4gQWxzbyBoYW5kbGVzIGZ1cnRo
ZXIgbmVzdGVkIGNvbmRpdGlvbmFsIGNvZGVnZW4uCisgICAgICAgIChKU0M6OkNvbmRpdGlvbmFs
Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogVXNlIGNvbmRpdGlvbiBjb250ZXh0IGNvZGVnZW4gd2hlbiBh
dmFpbGFibGUuCisgICAgICAgIChKU0M6OklmTm9kZTo6ZW1pdEJ5dGVjb2RlKTogZGl0dG8KKyAg
ICAgICAgKEpTQzo6SWZFbHNlTm9kZTo6ZW1pdEJ5dGVjb2RlKTogZGl0dG8KKyAgICAgICAgKEpT
Qzo6RG9XaGlsZU5vZGU6OmVtaXRCeXRlY29kZSk6IGRpdHRvCisgICAgICAgIChKU0M6OldoaWxl
Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogZGl0dG8KKyAgICAgICAgKEpTQzo6Rm9yTm9kZTo6ZW1pdEJ5
dGVjb2RlKTogZGl0dG8KKworICAgICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOiAKKyAgICAgICAg
LSBBZGRlZCBsb29wX2lmX2ZhbHNlIG9wY29kZSAtIG5lZWRlZCBub3cgdGhhdCBmYWxzZXkganVt
cHMgY2FuIGJlIGJhY2t3YXJkcy4KKyAgICAgICAgLSBBZGRlZCBqbGVzcyBvcGNvZGUgdG8gdGFr
ZSBhZHZhbnRhZ2Ugb2YgbmV3IGZ1c2lvbiBvcHBvcnR1bml0aWVzLgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6IEhhbmRs
ZSBhYm92ZS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZlRydWUpOiBBZGQgcGVl
cGhvbGUgZm9yIGxlc3MgKyBqdHJ1ZSA9PT4gamxlc3MuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0SnVtcElmRmFsc2UpOiBBZGQgaGFuZGxpbmcgb2YgYmFja3dyZHMgZmFs
c2V5IGp1bXBzLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRl
eHQpOiBXcmFwcGVyIHRvIGhhbmRsZSB0cmFja2luZyBvZgorICAgICAgICBvdmVybHkgZGVlcCBl
eHByZXNzaW9ucyBldGMuCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUpOiBJbXBsZW1lbnQgdGhl
IHR3byBuZXcgb3Bjb2RlcyAobG9vcF9pZl9mYWxzZSwgamxlc3MpLgorICAgICAgICAqIGppdC9K
SVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOiBJbXBs
ZW1lbnQgSklUIHN1cHBvcnQgZm9yIHRoZSB0d28gbmV3IG9wY29kZXMuCisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOiBkaXR0bworICAgICAgICAqIGppdC9KSVQu
aDoKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9qbGVzcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MpOiBk
aXR0bworICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcCk6IGRpdHRvCisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2xvb3BfaWZfbGVzcyk6IGRpdHRvCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb29wX2lm
X2ZhbHNlKTogZGl0dG8KKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9sb29wX2lmX2Zh
bHNlKTogZGl0dG8KKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAqIGppdC9K
SVRTdHVicy5oOgorICAgICAgICAoSlNDOjopOgorCiAyMDA5LTEyLTA0ICBLZW50IEhhbnNlbiAg
PGtlbnQuaGFuc2VuQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gNTE3
MDQpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NzYsNiArODc2LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSog
ZXhlYywgY28KICAgICAgICAgICAgIHByaW50Q29uZGl0aW9uYWxKdW1wKGV4ZWMsIGJlZ2luLCBp
dCwgbG9jYXRpb24sICJsb29wX2lmX3RydWUiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9mYWxzZTogeworICAgICAgICAgICAgcHJpbnRD
b25kaXRpb25hbEp1bXAoZXhlYywgYmVnaW4sIGl0LCBsb2NhdGlvbiwgImxvb3BfaWZfZmFsc2Ui
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfamZhbHNl
OiB7CiAgICAgICAgICAgICBwcmludENvbmRpdGlvbmFsSnVtcChleGVjLCBiZWdpbiwgaXQsIGxv
Y2F0aW9uLCAiamZhbHNlIik7CiAgICAgICAgICAgICBicmVhazsKQEAgLTkxNiw2ICs5MjAsMTMg
QEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICAgICAg
cHJpbnRmKCJbJTRkXSBsb29wX2lmX2xlc3NcdCAlcywgJXMsICVkKC0+JWQpXG4iLCBsb2NhdGlv
biwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEp
LmNfc3RyKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qbGVzczogeworICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIHByaW50ZigiWyU0ZF0gamxlc3NcdFx0ICVzLCAlcywgJWQoLT4lZClcbiIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShleGVjLCBy
MSkuY19zdHIoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzc2VxOiB7CiAgICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOwpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9u
IDUxNzA0KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyOCw5ICsxMjgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIG1hY3JvKG9w
X2puZXFfcHRyLCA0KSBcCiAgICAgICAgIG1hY3JvKG9wX2pubGVzcywgNCkgXAogICAgICAgICBt
YWNybyhvcF9qbmxlc3NlcSwgNCkgXAorICAgICAgICBtYWNybyhvcF9qbGVzcywgNCkgXAogICAg
ICAgICBtYWNybyhvcF9qbXBfc2NvcGVzLCAzKSBcCiAgICAgICAgIG1hY3JvKG9wX2xvb3AsIDIp
IFwKICAgICAgICAgbWFjcm8ob3BfbG9vcF9pZl90cnVlLCAzKSBcCisgICAgICAgIG1hY3JvKG9w
X2xvb3BfaWZfZmFsc2UsIDMpIFwKICAgICAgICAgbWFjcm8ob3BfbG9vcF9pZl9sZXNzLCA0KSBc
CiAgICAgICAgIG1hY3JvKG9wX2xvb3BfaWZfbGVzc2VxLCA0KSBcCiAgICAgICAgIG1hY3JvKG9w
X3N3aXRjaF9pbW0sIDQpIFwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gNTE3MDQpCisrKyBKYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MTYsNyArNjE2LDcgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aQogCiBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZlRydWUo
UmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRhcmdldCkKIHsKLSAgICBpZiAobV9sYXN0T3Bjb2Rl
SUQgPT0gb3BfbGVzcyAmJiAhdGFyZ2V0LT5pc0ZvcndhcmQoKSkgeworICAgIGlmIChtX2xhc3RP
cGNvZGVJRCA9PSBvcF9sZXNzKSB7CiAgICAgICAgIGludCBkc3RJbmRleDsKICAgICAgICAgaW50
IHNyYzFJbmRleDsKICAgICAgICAgaW50IHNyYzJJbmRleDsKQEAgLTYyNyw3ICs2MjcsNyBAQCBQ
YXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pCiAgICAgICAgICAgICByZXdp
bmRCaW5hcnlPcCgpOwogCiAgICAgICAgICAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMo
KS5zaXplKCk7Ci0gICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2xvb3BfaWZfbGVzcyk7CisgICAg
ICAgICAgICBlbWl0T3Bjb2RlKHRhcmdldC0+aXNGb3J3YXJkKCkgPyBvcF9qbGVzcyA6IG9wX2xv
b3BfaWZfbGVzcyk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMUluZGV4
KTsKICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMySW5kZXgpOwogICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKSk7CkBAIC02OTIsOSArNjkyLDcgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaQogCiBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEp1bXBJZkZhbHNlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsKiB0YXJnZXQpCiB7Ci0g
ICAgQVNTRVJUKHRhcmdldC0+aXNGb3J3YXJkKCkpOwotCi0gICAgaWYgKG1fbGFzdE9wY29kZUlE
ID09IG9wX2xlc3MpIHsKKyAgICBpZiAobV9sYXN0T3Bjb2RlSUQgPT0gb3BfbGVzcyAmJiB0YXJn
ZXQtPmlzRm9yd2FyZCgpKSB7CiAgICAgICAgIGludCBkc3RJbmRleDsKICAgICAgICAgaW50IHNy
YzFJbmRleDsKICAgICAgICAgaW50IHNyYzJJbmRleDsKQEAgLTcxMSw3ICs3MDksNyBAQCBQYXNz
UmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pCiAgICAgICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQodGFyZ2V0LT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkp
KTsKICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KG1fbGFzdE9wY29kZUlEID09IG9wX2xlc3NlcSkgeworICAgIH0gZWxzZSBpZiAobV9sYXN0T3Bj
b2RlSUQgPT0gb3BfbGVzc2VxICYmIHRhcmdldC0+aXNGb3J3YXJkKCkpIHsKICAgICAgICAgaW50
IGRzdEluZGV4OwogICAgICAgICBpbnQgc3JjMUluZGV4OwogICAgICAgICBpbnQgc3JjMkluZGV4
OwpAQCAtNzM4LDEyICs3MzYsMTIgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaQogICAgICAgICAgICAgcmV3aW5kVW5hcnlPcCgpOwogCiAgICAgICAgICAgICBzaXpl
X3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgICAgICAgICBlbWl0T3Bjb2Rl
KG9wX2p0cnVlKTsKKyAgICAgICAgICAgIGVtaXRPcGNvZGUodGFyZ2V0LT5pc0ZvcndhcmQoKSA/
IG9wX2p0cnVlIDogb3BfbG9vcF9pZl90cnVlKTsKICAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChzcmNJbmRleCk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGFy
Z2V0LT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKICAgICAgICAgICAgIHJl
dHVybiB0YXJnZXQ7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fbGFzdE9wY29kZUlEID09
IG9wX2VxX251bGwpIHsKKyAgICB9IGVsc2UgaWYgKG1fbGFzdE9wY29kZUlEID09IG9wX2VxX251
bGwgJiYgdGFyZ2V0LT5pc0ZvcndhcmQoKSkgewogICAgICAgICBpbnQgZHN0SW5kZXg7CiAgICAg
ICAgIGludCBzcmNJbmRleDsKIApAQCAtNzU4LDcgKzc1Niw3IEBAIFBhc3NSZWZQdHI8TGFiZWw+
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWkKICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZCh0YXJnZXQtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRhcmdldDsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9sYXN0T3Bjb2Rl
SUQgPT0gb3BfbmVxX251bGwpIHsKKyAgICB9IGVsc2UgaWYgKG1fbGFzdE9wY29kZUlEID09IG9w
X25lcV9udWxsICYmIHRhcmdldC0+aXNGb3J3YXJkKCkpIHsKICAgICAgICAgaW50IGRzdEluZGV4
OwogICAgICAgICBpbnQgc3JjSW5kZXg7CiAKQEAgLTc3Niw3ICs3NzQsNyBAQCBQYXNzUmVmUHRy
PExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pCiAgICAgfQogCiAgICAgc2l6ZV90IGJlZ2lu
ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIGVtaXRPcGNvZGUob3BfamZhbHNlKTsKKyAg
ICBlbWl0T3Bjb2RlKHRhcmdldC0+aXNGb3J3YXJkKCkgPyBvcF9qZmFsc2UgOiBvcF9sb29wX2lm
X2ZhbHNlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29uZC0+aW5kZXgoKSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpKSk7CiAgICAgcmV0dXJuIHRhcmdldDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA1MTcwNCkKKysrIEph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTIsNiArMTkyLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0
dXJuIGVtaXROb2RlKDAsIG4pOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBlbWl0Tm9kZUlu
Q29uZGl0aW9uQ29udGV4dChFeHByZXNzaW9uTm9kZSogbiwgTGFiZWwqIHRydWVUYXJnZXQsIExh
YmVsKiBmYWxzZVRhcmdldCwgYm9vbCBmYWxsVGhyb3VnaE1lYW5zVHJ1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+bnVtYmVyT2ZMaW5lSW5mb3MoKSB8fCBtX2Nv
ZGVCbG9jay0+bGFzdExpbmVJbmZvKCkubGluZU51bWJlciAhPSBuLT5saW5lTm8oKSkgeworICAg
ICAgICAgICAgICAgIExpbmVJbmZvIGluZm8gPSB7IGluc3RydWN0aW9ucygpLnNpemUoKSwgbi0+
bGluZU5vKCkgfTsKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkTGluZUluZm8oaW5m
byk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9lbWl0Tm9kZURlcHRoID49IHNf
bWF4RW1pdE5vZGVEZXB0aCkKKyAgICAgICAgICAgICAgICBlbWl0VGhyb3dFeHByZXNzaW9uVG9v
RGVlcEV4Y2VwdGlvbigpOworICAgICAgICAgICAgKyttX2VtaXROb2RlRGVwdGg7CisgICAgICAg
ICAgICBuLT5lbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoKnRoaXMsIHRydWVUYXJnZXQs
IGZhbHNlVGFyZ2V0LCBmYWxsVGhyb3VnaE1lYW5zVHJ1ZSk7CisgICAgICAgICAgICAtLW1fZW1p
dE5vZGVEZXB0aDsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQgZW1pdEV4cHJlc3Npb25JbmZv
KHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
KQogICAgICAgICB7IAogICAgICAgICAgICAgZGl2b3QgLT0gbV9jb2RlQmxvY2stPnNvdXJjZU9m
ZnNldCgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkocmV2aXNpb24gNTE3MDQpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NDcsNiArMjY0NywyNiBAQCBKU1ZhbHVlIElu
dGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX2xvb3BfaWZfdHJ1ZSk7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9
CisgICAgREVGSU5FX09QQ09ERShvcF9sb29wX2lmX2ZhbHNlKSB7CisgICAgICAgIC8qIGxvb3Bf
aWZfdHJ1ZSBjb25kKHIpIHRhcmdldChvZmZzZXQpCisgICAgICAgICAKKyAgICAgICAgICAgSnVt
cHMgdG8gb2Zmc2V0IHRhcmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLCBpZiBhbmQK
KyAgICAgICAgICAgb25seSBpZiByZWdpc3RlciBjb25kIGNvbnZlcnRzIHRvIGJvb2xlYW4gYXMg
ZmFsc2UuCisKKyAgICAgICAgICAgQWRkaXRpb25hbGx5IHRoaXMgbG9vcCBpbnN0cnVjdGlvbiBt
YXkgdGVybWluYXRlIEpTIGV4ZWN1dGlvbiBpcworICAgICAgICAgICB0aGUgSlMgdGltZW91dCBp
cyByZWFjaGVkLgorICAgICAgICAgKi8KKyAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVy
YW5kOworICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKKyAgICAgICAgaWYg
KCFjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7Cisg
ICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OworICAgICAgICAgICAgQ0hFQ0tfRk9SX1RJTUVPVVQo
KTsKKyAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl90cnVlKTsKKyAgICAgICAg
TkVYVF9JTlNUUlVDVElPTigpOworICAgIH0KICAgICBERUZJTkVfT1BDT0RFKG9wX2p0cnVlKSB7
CiAgICAgICAgIC8qIGp0cnVlIGNvbmQocikgdGFyZ2V0KG9mZnNldCkKIApAQCAtMjgxMCw2ICsy
ODMwLDI5IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAgICAg
ICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzKTsKICAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwogICAgIH0KKyAgICBERUZJTkVfT1BDT0RFKG9wX2psZXNzKSB7CisgICAgICAgIC8q
IGpsZXNzIHNyYzEocikgc3JjMihyKSB0YXJnZXQob2Zmc2V0KQorCisgICAgICAgICAgIENoZWNr
cyB3aGV0aGVyIHJlZ2lzdGVyIHNyYzEgaXMgbGVzcyB0aGFuIHJlZ2lzdGVyIHNyYzIsIGFzCisg
ICAgICAgICAgIHdpdGggdGhlIEVDTUFTY3JpcHQgJzwnIG9wZXJhdG9yLCBhbmQgdGhlbiBqdW1w
cyB0byBvZmZzZXQKKyAgICAgICAgICAgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rp
b24sIGlmIGFuZCBvbmx5IGlmIHRoZSAKKyAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjb21wYXJp
c29uIGlzIHRydWUuCisgICAgICAgICovCisgICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFt
ZS0+cih2UENbMV0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgc3JjMiA9
IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgIGludCB0
YXJnZXQgPSB2UENbM10udS5vcGVyYW5kOworCisgICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNz
KGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7CisgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIHZQQyArPSB0YXJn
ZXQ7CisgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CisgICAgICAgIH0KKworICAgICAg
ICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9qbGVzcyk7CisgICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKKyAgICB9CiAgICAgREVGSU5FX09QQ09ERShvcF9qbmxlc3NlcSkgewogICAgICAgICAv
KiBqbmxlc3NlcSBzcmMxKHIpIHNyYzIocikgdGFyZ2V0KG9mZnNldCkKIApJbmRleDogSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAJKHJldmlzaW9uIDUxNzA0KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1MCw2ICsyNTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9qbmVxX251bGwpCiAgICAgICAgIERFRklO
RV9PUChvcF9qbmVxX3B0cikKICAgICAgICAgREVGSU5FX09QKG9wX2pubGVzcykKKyAgICAgICAg
REVGSU5FX09QKG9wX2psZXNzKQogICAgICAgICBERUZJTkVfT1Aob3Bfam5sZXNzZXEpCiAgICAg
ICAgIERFRklORV9PUChvcF9qc3IpCiAgICAgICAgIERFRklORV9PUChvcF9qdHJ1ZSkKQEAgLTI1
OCw2ICsyNTksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IERFRklORV9PUChvcF9sb29wX2lmX2xlc3MpCiAgICAgICAgIERFRklORV9PUChvcF9sb29wX2lm
X2xlc3NlcSkKICAgICAgICAgREVGSU5FX09QKG9wX2xvb3BfaWZfdHJ1ZSkKKyAgICAgICAgREVG
SU5FX09QKG9wX2xvb3BfaWZfZmFsc2UpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hpZnQpCiAg
ICAgICAgIERFRklORV9PUChvcF9tZXRob2RfY2hlY2spCiAgICAgICAgIERFRklORV9PUChvcF9t
b2QpCkBAIC0zODksMTEgKzM5MSwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaW5zdGFuY2VvZikKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX2pmYWxzZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX2pubGVzcykKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2psZXNzKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5sZXNzZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9qdHJ1ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaWZfbGVz
cykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaWZfbGVzc2VxKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9pZl90cnVlKQorICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfbG9vcF9pZl9mYWxzZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2xzaGlmdCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21ldGhvZF9jaGVjaykKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDUxNzA0KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MzYsNiArNzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbmVx
X251bGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2puZXFfcHRyKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbmxlc3MoSW5zdHJ1Y3Rpb24qKTsKKyAg
ICAgICAgdm9pZCBlbWl0X29wX2psZXNzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9qbmxlc3NlcShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfanNyKElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qdHJ1ZShJbnN0cnVjdGlvbiopOwpA
QCAtNzQ0LDYgKzc0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bf
bG9vcF9pZl9sZXNzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb29wX2lm
X2xlc3NlcShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9vcF9pZl90cnVl
KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9sb29wX2lmX2ZhbHNlKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sc2hpZnQoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX21ldGhvZF9jaGVjayhJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfbW9kKEluc3RydWN0aW9uKik7CkBAIC04MTgsMTEgKzgyMCwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pmYWxzZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfamxlc3MoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRy
dWUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9pZl9sZXNzKEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3Bf
aWZfbGVzc2VxKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaWZfdHJ1ZShJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9sb29wX2lmX2ZhbHNlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xzaGlmdChJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9tZXRob2RfY2hlY2soSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAkocmV2aXNpb24gNTE3MDQpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw2ICsxNDgsNjkgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pubGVzcyhJbnN0cnVjdGlvbgogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihaZXJvLCByZWdUMCksIHRhcmdldCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29w
X2psZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQg
b3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDIg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBKdW1wTGlzdCBub3RJbnQz
Mk9wMTsKKyAgICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKKworICAgIC8vIEludDMyIGxlc3MuCisg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKKyAgICAgICAgZW1p
dExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAgICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihHcmVhdGVyVGhhbiwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50
T3BlcmFuZChvcDEpLmFzSW50MzIoKSkpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgeworICAgICAgICBlbWl0TG9hZChvcDEsIHJl
Z1QxLCByZWdUMCk7CisgICAgICAgIG5vdEludDMyT3AxLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOworICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKExlc3NUaGFuLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJ
bnQzMigpKSksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdExvYWQyKG9wMSwg
cmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIG5vdEludDMyT3AxLmFw
cGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkp
OworICAgICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNz
VGhhbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKKyAgICB9CisKKyAgICBpZiAoIXN1cHBvcnRz
RmxvYXRpbmdQb2ludCgpKSB7CisgICAgICAgIGFkZFNsb3dDYXNlKG5vdEludDMyT3AxKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2Uobm90SW50MzJPcDIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEp1bXAgZW5kID0ganVtcCgpOworCisgICAgLy8gRG91YmxlIGxlc3MuCisgICAgZW1pdEJp
bmFyeURvdWJsZU9wKG9wX2psZXNzLCB0YXJnZXQsIG9wMSwgb3AyLCBPcGVyYW5kVHlwZXMoKSwg
bm90SW50MzJPcDEsIG5vdEludDMyT3AyLCAhaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQo
b3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSB8fCAhaXNPcGVyYW5kQ29u
c3RhbnRJbW1lZGlhdGVJbnQob3AyKSk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9qbGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIHVuc2lnbmVkIG9w
MSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AyID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgaWYgKCFzdXBwb3J0c0Zsb2F0
aW5nUG9pbnQoKSkgeworICAgICAgICBpZiAoIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50
KG9wMSkgJiYgIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpCisgICAgICAgICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGludDMyIGNoZWNrCisgICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gaW50MzIgY2hlY2sKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWlzT3Bl
cmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKKyAgICAgICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gZG91YmxlIGNoZWNrCisgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIGludDMyIGNoZWNrCisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlSW50KG9wMSkgfHwgIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikp
CisgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGRvdWJsZSBjaGVjaworICAgIH0K
KworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzcyk7CisgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQob3AxKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIpOwor
ICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmVnVDApLCB0YXJnZXQpOworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3Nl
cShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2lnbmVkIG9wMSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC04MzEsNiArODk0LDEwIEBAIHZv
aWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoT3Bjb2RlSUQgb3AKICAgICAgICAgICAgICAgICBl
bWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwogICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJl
Z1QyKSwgZHN0KTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ugb3Bf
amxlc3M6CisgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKKyAg
ICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbiwgZnBSZWdU
MiwgZnBSZWdUMCksIGRzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIG9wX2pubGVzc2VxOgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBS
ZWdUMik7CiAgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1Ro
YW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIGRzdCk7CkBAIC04ODQsNiArOTUxLDEw
IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoT3Bjb2RlSUQgb3AKICAgICAgICAgICAg
ICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwogICAgICAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1Qx
LCBmcFJlZ1QwKSwgZHN0KTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2Ugb3Bfamxlc3M6CisgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1Qx
KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbiwg
ZnBSZWdUMCwgZnBSZWdUMSksIGRzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIG9wX2pubGVzc2VxOgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9w
MiwgZnBSZWdUMSk7CiAgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91Ymxl
TGVzc1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIGRzdCk7CkBAIC0xNDU1LDYg
KzE1MjYsMTkxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoSW5zdHJ1Y3Rpb24KICAg
ICB9CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2psZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CisKKyAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBj
YXNlcyBpbiB0aGUgZmFzdCBwYXRoOgorICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFu
dCBpbnQgaW1tZWRpYXRlCisgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBp
bW1lZGlhdGUKKyAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQorCisgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
aW50MzJfdCBvcDJpbW0gPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AyKTsKKyNl
bHNlCisgICAgICAgIGludDMyX3Qgb3AyaW1tID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNJbW1l
ZGlhdGU6OnJhd1ZhbHVlKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSk7CisjZW5kaWYKKyAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIEltbTMyKG9wMmltbSkpLCB0YXJn
ZXQpOworICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSkg
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVk
aWF0ZUludChvcDEpOworI2Vsc2UKKyAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihKU0ltbWVkaWF0ZTo6cmF3VmFsdWUoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkp
KTsKKyNlbmRpZgorICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCByZWdUMSwg
SW1tMzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKKworICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKExlc3NUaGFuLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KK30KKwordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgdW5zaWduZWQg
b3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDIg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICAvLyBXZSBnZW5lcmF0ZSBp
bmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgorICAg
IC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKKyAg
ICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCisg
ICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgor
CisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsKKyAgICAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQo
KSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBKdW1wIGZhaWwxID0gZW1pdEp1
bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCk7CisgICAgICAgICAgICBhZGRQdHIodGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVn
VDAsIGZwUmVnVDApOworI2Vsc2UKKyAgICAgICAgICAgIEp1bXAgZmFpbDE7CisgICAgICAgICAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKG9wMSkpCisgICAgICAgICAg
ICAgICAgZmFpbDEgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKworICAgICAgICAgICAg
SnVtcCBmYWlsMiA9IGNoZWNrU3RydWN0dXJlKHJlZ1QwLCBtX2dsb2JhbERhdGEtPm51bWJlclN0
cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICBsb2FkRG91YmxlKEFkZHJlc3MocmVnVDAsIE9C
SkVDVF9PRkZTRVRPRihKU051bWJlckNlbGwsIG1fdmFsdWUpKSwgZnBSZWdUMCk7CisjZW5kaWYK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRDb25zdGFudE9w
ZXJhbmQob3AyKS5hc0ludDMyKCk7OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1vdmUoSW1tMzIob3AyaW1tKSwgcmVnVDEpOworICAgICAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUocmVnVDEsIGZwUmVnVDEpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOwor
CisgICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3Bf
am5sZXNzKSk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgZmFpbDEubGluayh0
aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1t
ZWRpYXRlKG9wMSkpCisgICAgICAgICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKKyAgICAgICAg
ICAgIGZhaWwyLmxpbmsodGhpcyk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzcyk7CisgICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KHJlZ1QwKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQob3AyLCByZWdU
Mik7CisgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKKworICAgIH0gZWxzZSBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSkgeworICAgICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7CisKKyAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBlbWl0SnVtcElmTm90SW1tZWRp
YXRlTnVtYmVyKHJlZ1QxKTsKKyAgICAgICAgICAgIGFkZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlZ1QxKTsKKyAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7
CisjZWxzZQorICAgICAgICAgICAgSnVtcCBmYWlsMTsKKyAgICAgICAgICAgIGlmICghbV9jb2Rl
QmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUob3AyKSkKKyAgICAgICAgICAgICAgICBmYWlsMSA9
IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICBK
dW1wIGZhaWwyID0gY2hlY2tTdHJ1Y3R1cmUocmVnVDEsIG1fZ2xvYmFsRGF0YS0+bnVtYmVyU3Ry
dWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgIGxvYWREb3VibGUoQWRkcmVzcyhyZWdUMSwgT0JK
RUNUX09GRlNFVE9GKEpTTnVtYmVyQ2VsbCwgbV92YWx1ZSkpLCBmcFJlZ1QxKTsKKyNlbmRpZgor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldENvbnN0YW50T3Bl
cmFuZChvcDEpLmFzSW50MzIoKTs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
bW92ZShJbW0zMihvcDFpbW0pLCByZWdUMCk7CisgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShyZWdUMCwgZnBSZWdUMCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaERvdWJsZShEb3VibGVMZXNzVGhhbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CisK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9q
bmxlc3MpKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBmYWlsMS5saW5rKHRo
aXMpOworI2Vsc2UKKyAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1l
ZGlhdGUob3AyKSkKKyAgICAgICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgZmFpbDIubGluayh0aGlzKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzKTsKKyAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQob3AxLCByZWdUMik7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1Qx
KTsKKyAgICAgICAgc3R1YkNhbGwuY2FsbCgpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDApLCB0YXJnZXQpOworCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBKdW1wIGZhaWwxID0gZW1p
dEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCk7CisgICAgICAgICAgICBKdW1wIGZhaWwy
ID0gZW1pdEp1bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMSk7CisgICAgICAgICAgICBKdW1w
IGZhaWwzID0gZW1pdEp1bXBJZkltbWVkaWF0ZUludGVnZXIocmVnVDEpOworICAgICAgICAgICAg
YWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgYWRkUHRy
KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDEpOworICAgICAgICAgICAgbW92ZVB0clRvRG91
YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJsZShyZWdUMSwg
ZnBSZWdUMSk7CisjZWxzZQorICAgICAgICAgICAgSnVtcCBmYWlsMTsKKyAgICAgICAgICAgIGlm
ICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUob3AxKSkKKyAgICAgICAgICAgICAg
ICBmYWlsMSA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApOworCisgICAgICAgICAgICBKdW1w
IGZhaWwyOworICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5vdEltbWVkaWF0
ZShvcDIpKQorICAgICAgICAgICAgICAgIGZhaWwyID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdU
MSk7CisKKyAgICAgICAgICAgIEp1bXAgZmFpbDMgPSBjaGVja1N0cnVjdHVyZShyZWdUMCwgbV9n
bG9iYWxEYXRhLT5udW1iZXJTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgSnVtcCBmYWls
NCA9IGNoZWNrU3RydWN0dXJlKHJlZ1QxLCBtX2dsb2JhbERhdGEtPm51bWJlclN0cnVjdHVyZS5n
ZXQoKSk7CisgICAgICAgICAgICBsb2FkRG91YmxlKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZT
RVRPRihKU051bWJlckNlbGwsIG1fdmFsdWUpKSwgZnBSZWdUMCk7CisgICAgICAgICAgICBsb2Fk
RG91YmxlKEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU051bWJlckNlbGwsIG1fdmFs
dWUpKSwgZnBSZWdUMSk7CisjZW5kaWYKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsK
KworICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9w
X2pubGVzcykpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGZhaWwxLmxpbmso
dGhpcyk7CisgICAgICAgICAgICBmYWlsMi5saW5rKHRoaXMpOworICAgICAgICAgICAgZmFpbDMu
bGluayh0aGlzKTsKKyNlbHNlCisgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3du
Tm90SW1tZWRpYXRlKG9wMSkpCisgICAgICAgICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKKyAg
ICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUob3AyKSkKKyAg
ICAgICAgICAgICAgICBmYWlsMi5saW5rKHRoaXMpOworICAgICAgICAgICAgZmFpbDMubGluayh0
aGlzKTsKKyAgICAgICAgICAgIGZhaWw0LmxpbmsodGhpcyk7CisjZW5kaWYKKyAgICAgICAgfQor
CisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKyAgICAgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX2psZXNzKTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVn
VDApOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7CisgICAgICAgIHN0dWJD
YWxsLmNhbGwoKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vdFpl
cm8sIHJlZ1QwKSwgdGFyZ2V0KTsKKyAgICB9Cit9CisKIHZvaWQgSklUOjplbWl0X29wX2pubGVz
c2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgdW5zaWduZWQgb3Ax
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDUxNzA0KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTQsNyArNDU0LDcgQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2xvb3BfaWZfbGVzcyhJbnN0cgogICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBpbnQzMiBjaGVjawog
Ci0gICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2xvb3BfaWZfbGVzcyk7Cisg
ICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzKTsKICAgICBzdHViQ2Fs
bC5hZGRBcmd1bWVudChvcDEpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KG9wMik7CiAgICAg
c3R1YkNhbGwuY2FsbCgpOwpAQCAtNzQzLDYgKzc0Myw1MCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfbG9vcF9pZl90cnVlKEluc3RyCiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KE5vblplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9p
Zl9mYWxzZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVk
IGNvbmQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0VGltZW91
dENoZWNrKCk7CisKKyAgICBlbWl0TG9hZChjb25kLCByZWdUMSwgcmVnVDApOworCisgICAgSnVt
cCBpc1RydWUgPSBicmFuY2gzMihFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OlRydWVUYWcp
KTsKKyAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6RmFs
c2VUYWcpKSwgdGFyZ2V0KTsKKworICAgIEp1bXAgaXNOb3RJbnRlZ2VyID0gYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgIEp1bXAgaXNUcnVl
MiA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgSW1tMzIoMCkpOworICAgIGFkZEp1bXAoanVt
cCgpLCB0YXJnZXQpOworCisgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CisgICAg
ICAgIGlzTm90SW50ZWdlci5saW5rKHRoaXMpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKEFib3ZlLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworCisgICAgICAg
IHplcm9Eb3VibGUoZnBSZWdUMCk7CisgICAgICAgIGVtaXRMb2FkRG91YmxlKGNvbmQsIGZwUmVn
VDEpOworICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVFcXVhbE9yVW5vcmRlcmVk
LCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgYWRkU2xv
d0Nhc2UoaXNOb3RJbnRlZ2VyKTsKKworICAgIGlzVHJ1ZS5saW5rKHRoaXMpOworICAgIGlzVHJ1
ZTIubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3BfaWZfZmFsc2Uo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3sKKyAgICB1bnNpZ25lZCBjb25kID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOworCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgSklUU3R1YkNh
bGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2p0cnVlKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChjb25kKTsKKyAgICBzdHViQ2FsbC5jYWxsKCk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9iYXNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX3Jlc29sdmVfYmFzZSk7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDUxNzA0KQorKysgSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExOSwxOSArMTExOSw2IEBAIERFRklO
RV9TVFVCX0ZVTkNUSU9OKHZvaWQsIHJlZ2lzdGVyX2ZpbGUKICAgICB0aHJvd1N0YWNrT3ZlcmZs
b3dFcnJvcihvbGRDYWxsRnJhbWUsIHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwgUmV0dXJuQWRkcmVz
c1B0cihvbGRDYWxsRnJhbWUtPnJldHVyblBDKCkpLCBTVFVCX1JFVFVSTl9BRERSRVNTKTsKIH0K
IAotREVGSU5FX1NUVUJfRlVOQ1RJT04oaW50LCBvcF9sb29wX2lmX2xlc3MpCi17Ci0gICAgU1RV
Ql9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwotCi0gICAgSlNWYWx1ZSBzcmMxID0gc3Rh
Y2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHNyYzIgPSBzdGFja0ZyYW1l
LmFyZ3NbMV0uanNWYWx1ZSgpOwotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFt
ZS5jYWxsRnJhbWU7Ci0KLSAgICBib29sIHJlc3VsdCA9IGpzTGVzcyhjYWxsRnJhbWUsIHNyYzEs
IHNyYzIpOwotICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQogREVGSU5FX1NUVUJfRlVOQ1RJT04oaW50LCBvcF9sb29wX2lmX2xlc3NlcSkK
IHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CkBAIC0yMDk3LDE5ICsy
MDg0LDYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04o
aW50LCBvcF9sb29wX2lmX3RydWUpCi17Ci0gICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNr
RnJhbWUpOwotCi0gICAgSlNWYWx1ZSBzcmMxID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUo
KTsKLQotICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0K
LSAgICBib29sIHJlc3VsdCA9IHNyYzEudG9Cb29sZWFuKGNhbGxGcmFtZSk7Ci0gICAgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotICAgIAogREVG
SU5FX1NUVUJfRlVOQ1RJT04oaW50LCBvcF9sb2FkX3ZhcmFyZ3MpCiB7CiAgICAgU1RVQl9JTklU
X1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlz
aW9uIDUxNzA0KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzNSw5ICszMzUsNyBAQCBleHRlcm4gIkMiIHsKICAgICBpbnQgSklUX1NUVUIgY3Rp
X29wX2psZXNzZXEoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBpbnQgSklUX1NUVUIgY3Rp
X29wX2p0cnVlKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgaW50IEpJVF9TVFVCIGN0aV9v
cF9sb2FkX3ZhcmFyZ3MoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKLSAgICBpbnQgSklUX1NUVUIg
Y3RpX29wX2xvb3BfaWZfbGVzcyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIGludCBKSVRf
U1RVQiBjdGlfb3BfbG9vcF9pZl9sZXNzZXEoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKLSAgICBp
bnQgSklUX1NUVUIgY3RpX29wX2xvb3BfaWZfdHJ1ZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwog
ICAgIGludCBKSVRfU1RVQiBjdGlfdGltZW91dF9jaGVjayhTVFVCX0FSR1NfREVDTEFSQVRJT04p
OwogICAgIGludCBKSVRfU1RVQiBjdGlfaGFzX3Byb3BlcnR5KFNUVUJfQVJHU19ERUNMQVJBVElP
Tik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfY3JlYXRlX2FyZ3VtZW50cyhTVFVCX0FSR1Nf
REVDTEFSQVRJT04pOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiA1MTcw
NCkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgxMSw2ICs4MTEsMTggQEAgUmVnaXN0ZXJJRCogVW5hcnlPcE5vZGU6OmVtaXRCeXRlY29kZShC
eQogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFVuYXJ5T3Aob3Bjb2RlSUQoKSwgZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0KSwgc3JjKTsKIH0KIAorCisvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gTG9naWNhbE5vdE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKwordm9pZCBMb2dpY2FsTm90Tm9kZTo6ZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25D
b250ZXh0KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIExhYmVsKiB0cnVlVGFyZ2V0LCBM
YWJlbCogZmFsc2VUYXJnZXQsIGJvb2wgZmFsbFRocm91Z2hNZWFuc1RydWUpCit7CisgICAgQVNT
RVJUKGV4cHIoKS0+aGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4oKSk7CisKKyAgICAvLyByZXZl
cnNlIHRoZSB0cnVlIGFuZCBmYWxzZSB0YXJnZXRzCisgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5D
b25kaXRpb25Db250ZXh0KGV4cHIoKSwgZmFsc2VUYXJnZXQsIHRydWVUYXJnZXQsICFmYWxsVGhy
b3VnaE1lYW5zVHJ1ZSk7Cit9CisKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
IEJpbmFyeSBPcGVyYXRpb24gTm9kZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogLy8gQmluYXJ5T3BOb2RlOjplbWl0U3RyY2F0OgpAQCAtMTAxNyw2ICsxMDI5LDM0IEBA
IFJlZ2lzdGVySUQqIExvZ2ljYWxPcE5vZGU6OmVtaXRCeXRlY29kZSgKICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCB0ZW1wLmdldCgpKTsKIH0KIAor
dm9pZCBMb2dpY2FsT3BOb2RlOjplbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgTGFiZWwqIHRydWVUYXJnZXQsIExhYmVsKiBmYWxzZVRh
cmdldCwgYm9vbCBmYWxsVGhyb3VnaE1lYW5zVHJ1ZSkKK3sKKyAgICBpZiAobV9leHByMS0+aGFz
Q29uZGl0aW9uQ29udGV4dENvZGVnZW4oKSkgeworICAgICAgICBSZWZQdHI8TGFiZWw+IGFmdGVy
RXhwcjEgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgaWYgKG1fb3BlcmF0b3IgPT0g
T3BMb2dpY2FsQW5kKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25D
b250ZXh0KG1fZXhwcjEsIGFmdGVyRXhwcjEuZ2V0KCksIGZhbHNlVGFyZ2V0LCB0cnVlKTsKKyAg
ICAgICAgZWxzZSAKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29u
dGV4dChtX2V4cHIxLCB0cnVlVGFyZ2V0LCBhZnRlckV4cHIxLmdldCgpLCBmYWxzZSk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoYWZ0ZXJFeHByMS5nZXQoKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgUmVnaXN0ZXJJRCogdGVtcCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIxKTsK
KyAgICAgICAgaWYgKG1fb3BlcmF0b3IgPT0gT3BMb2dpY2FsQW5kKQorICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZSh0ZW1wLCBmYWxzZVRhcmdldCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZSh0ZW1wLCB0cnVlVGFyZ2V0KTsK
KyAgICB9CisKKyAgICBpZiAobV9leHByMi0+aGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4oKSkK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KG1fZXhwcjIsIHRy
dWVUYXJnZXQsIGZhbHNlVGFyZ2V0LCBmYWxsVGhyb3VnaE1lYW5zVHJ1ZSk7CisgICAgZWxzZSB7
CisgICAgICAgIFJlZ2lzdGVySUQqIHRlbXAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMik7
CisgICAgICAgIGlmIChmYWxsVGhyb3VnaE1lYW5zVHJ1ZSkKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmRmFsc2UodGVtcCwgZmFsc2VUYXJnZXQpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUodGVtcCwgdHJ1ZVRhcmdldCk7CisgICAg
fQorfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uZGl0aW9uYWxOb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZWdpc3RlcklEKiBDb25kaXRpb25h
bE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCkBAIC0xMDI1LDggKzEwNjUsMTQgQEAgUmVnaXN0ZXJJRCogQ29uZGl0aW9uYWxO
b2RlOjplbWl0Qnl0ZWNvZAogICAgIFJlZlB0cjxMYWJlbD4gYmVmb3JlRWxzZSA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOwogICAgIFJlZlB0cjxMYWJlbD4gYWZ0ZXJFbHNlID0gZ2VuZXJhdG9yLm5l
d0xhYmVsKCk7CiAKLSAgICBSZWdpc3RlcklEKiBjb25kID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
bG9naWNhbCk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShjb25kLCBiZWZvcmVFbHNl
LmdldCgpKTsKKyAgICBpZiAobV9sb2dpY2FsLT5oYXNDb25kaXRpb25Db250ZXh0Q29kZWdlbigp
KSB7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gYmVmb3JlVGhlbiA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRleHQobV9sb2dp
Y2FsLCBiZWZvcmVUaGVuLmdldCgpLCBiZWZvcmVFbHNlLmdldCgpLCB0cnVlKTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbChiZWZvcmVUaGVuLmdldCgpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBSZWdpc3RlcklEKiBjb25kID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fbG9naWNhbCk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UoY29uZCwgYmVmb3JlRWxzZS5nZXQoKSk7
CisgICAgfQogCiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKG5ld0RzdC5nZXQoKSwgbV9leHByMSk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGFmdGVyRWxzZS5nZXQoKSk7CkBAIC0xMzQzLDggKzEz
ODksMTQgQEAgUmVnaXN0ZXJJRCogSWZOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZAogICAgIAog
ICAgIFJlZlB0cjxMYWJlbD4gYWZ0ZXJUaGVuID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAg
ICBSZWdpc3RlcklEKiBjb25kID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fY29uZGl0aW9uKTsKLSAg
ICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGNvbmQsIGFmdGVyVGhlbi5nZXQoKSk7CisgICAg
aWYgKG1fY29uZGl0aW9uLT5oYXNDb25kaXRpb25Db250ZXh0Q29kZWdlbigpKSB7CisgICAgICAg
IFJlZlB0cjxMYWJlbD4gYmVmb3JlVGhlbiA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRleHQobV9jb25kaXRpb24sIGJlZm9y
ZVRoZW4uZ2V0KCksIGFmdGVyVGhlbi5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwoYmVmb3JlVGhlbi5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVnaXN0
ZXJJRCogY29uZCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2NvbmRpdGlvbik7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmRmFsc2UoY29uZCwgYWZ0ZXJUaGVuLmdldCgpKTsKKyAgICB9CiAK
ICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2lmQmxvY2spOwogICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwoYWZ0ZXJUaGVuLmdldCgpKTsKQEAgLTEzNjIsOCArMTQxNCwxNCBAQCBSZWdpc3Rl
cklEKiBJZkVsc2VOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0CiAgICAgUmVmUHRyPExhYmVsPiBiZWZv
cmVFbHNlID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgUmVmUHRyPExhYmVsPiBhZnRlckVs
c2UgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAotICAgIFJlZ2lzdGVySUQqIGNvbmQgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9jb25kaXRpb24pOwotICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFs
c2UoY29uZCwgYmVmb3JlRWxzZS5nZXQoKSk7CisgICAgaWYgKG1fY29uZGl0aW9uLT5oYXNDb25k
aXRpb25Db250ZXh0Q29kZWdlbigpKSB7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gYmVmb3JlVGhl
biA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJbkNv
bmRpdGlvbkNvbnRleHQobV9jb25kaXRpb24sIGJlZm9yZVRoZW4uZ2V0KCksIGJlZm9yZUVsc2Uu
Z2V0KCksIHRydWUpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGJlZm9yZVRoZW4uZ2V0
KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJlZ2lzdGVySUQqIGNvbmQgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobV9jb25kaXRpb24pOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNl
KGNvbmQsIGJlZm9yZUVsc2UuZ2V0KCkpOworICAgIH0KIAogICAgIGdlbmVyYXRvci5lbWl0Tm9k
ZShkc3QsIG1faWZCbG9jayk7CiAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGFmdGVyRWxzZS5nZXQo
KSk7CkBAIC0xMzkzLDggKzE0NTEsMTIgQEAgUmVnaXN0ZXJJRCogRG9XaGlsZU5vZGU6OmVtaXRC
eXRlY29kZShCeQogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJn
ZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQs
IG1fZXhwci0+bGluZU5vKCksIG1fZXhwci0+bGluZU5vKCkpOwotICAgIFJlZ2lzdGVySUQqIGNv
bmQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKLSAgICBnZW5lcmF0b3IuZW1pdEp1bXBJ
ZlRydWUoY29uZCwgdG9wT2ZMb29wLmdldCgpKTsKKyAgICBpZiAobV9leHByLT5oYXNDb25kaXRp
b25Db250ZXh0Q29kZWdlbigpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJbkNvbmRpdGlv
bkNvbnRleHQobV9leHByLCB0b3BPZkxvb3AuZ2V0KCksIHNjb3BlLT5icmVha1RhcmdldCgpLCBm
YWxzZSk7CisgICAgZWxzZSB7CisgICAgICAgIFJlZ2lzdGVySUQqIGNvbmQgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobV9leHByKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGNvbmQs
IHRvcE9mTG9vcC5nZXQoKSk7CisgICAgfQogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29w
ZS0+YnJlYWtUYXJnZXQoKSk7CiAgICAgcmV0dXJuIHJlc3VsdC5nZXQoKTsKQEAgLTE0MTUsOCAr
MTQ3NywxMyBAQCBSZWdpc3RlcklEKiBXaGlsZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlCiAKICAg
ICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgbV9leHByLT5saW5lTm8o
KSwgbV9leHByLT5saW5lTm8oKSk7Ci0gICAgUmVnaXN0ZXJJRCogY29uZCA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2V4cHIpOwotICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShjb25kLCB0b3BP
Zkxvb3AuZ2V0KCkpOworCisgICAgaWYgKG1fZXhwci0+aGFzQ29uZGl0aW9uQ29udGV4dENvZGVn
ZW4oKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KG1fZXhw
ciwgdG9wT2ZMb29wLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSwgZmFsc2UpOworICAgIGVs
c2UgeworICAgICAgICBSZWdpc3RlcklEKiBjb25kID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhw
cik7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShjb25kLCB0b3BPZkxvb3AuZ2V0
KCkpOworICAgIH0KIAogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0
KCkpOwogICAgIApAQCAtMTQ1MCw4ICsxNTE3LDEyIEBAIFJlZ2lzdGVySUQqIEZvck5vZGU6OmVt
aXRCeXRlY29kZShCeXRlY28KIAogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoY29uZGl0aW9uLmdl
dCgpKTsKICAgICBpZiAobV9leHByMikgewotICAgICAgICBSZWdpc3RlcklEKiBjb25kID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRy
dWUoY29uZCwgdG9wT2ZMb29wLmdldCgpKTsKKyAgICAgICAgaWYgKG1fZXhwcjItPmhhc0NvbmRp
dGlvbkNvbnRleHRDb2RlZ2VuKCkpCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJbkNv
bmRpdGlvbkNvbnRleHQobV9leHByMiwgdG9wT2ZMb29wLmdldCgpLCBzY29wZS0+YnJlYWtUYXJn
ZXQoKSwgZmFsc2UpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQqIGNv
bmQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMik7CisgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXBJZlRydWUoY29uZCwgdG9wT2ZMb29wLmdldCgpKTsKKyAgICAgICAgfQogICAgIH0g
ZWxzZQogICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAodG9wT2ZMb29wLmdldCgpKTsKIApJbmRl
eDogSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDUxNzA0KQorKysgSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgY2xhc3MgQXJndW1lbnRMaXN0Tm9kZTsKICAgICBjbGFzcyBCeXRlY29kZUdl
bmVyYXRvcjsKICAgICBjbGFzcyBGdW5jdGlvbkJvZHlOb2RlOworICAgIGNsYXNzIExhYmVsOwog
ICAgIGNsYXNzIFByb3BlcnR5TGlzdE5vZGU7CiAgICAgY2xhc3MgUmVhZE1vZGlmeVJlc29sdmVO
b2RlOwogICAgIGNsYXNzIFJlZ2lzdGVySUQ7CkBAIC0xNTEsNiArMTUyLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NvbW1hTm9kZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NpbXBsZUFycmF5KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzQWRkKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGhhc0NvbmRpdGlvbkNvbnRleHRDb2Rl
Z2VuKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgZW1p
dEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KEJ5dGVjb2RlR2VuZXJhdG9yJiwgTGFiZWwqLCBM
YWJlbCosIGJvb2wpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogICAgICAgICB2aXJ0dWFs
IEV4cHJlc3Npb25Ob2RlKiBzdHJpcFVuYXJ5UGx1cygpIHsgcmV0dXJuIHRoaXM7IH0KIApAQCAt
NzU3LDYgKzc2MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICBFeHByZXNzaW9uTm9kZSogZXhwcigpIHsgcmV0dXJuIG1fZXhwcjsgfQorICAgICAgICBjb25z
dCBFeHByZXNzaW9uTm9kZSogZXhwcigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcjsgfQogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApOwpAQCAtNzg4LDYgKzc5Myw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIExvZ2ljYWxOb3ROb2RlIDogcHVibGljIFVuYXJ5T3BOb2Rl
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIExvZ2ljYWxOb3ROb2RlKEpTR2xvYmFsRGF0YSosIEV4
cHJlc3Npb25Ob2RlKik7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBlbWl0Qnl0ZWNvZGVJ
bkNvbmRpdGlvbkNvbnRleHQoQnl0ZWNvZGVHZW5lcmF0b3ImLCBMYWJlbCogdHJ1ZVRhcmdldCwg
TGFiZWwqIGZhbHNlVGFyZ2V0LCBib29sIGZhbGxUaHJvdWdoTWVhbnNUcnVlKTsKKyAgICAgICAg
dmlydHVhbCBib29sIGhhc0NvbmRpdGlvbkNvbnRleHRDb2RlZ2VuKCkgY29uc3QgeyByZXR1cm4g
ZXhwcigpLT5oYXNDb25kaXRpb25Db250ZXh0Q29kZWdlbigpOyB9CiAgICAgfTsKIAogICAgIGNs
YXNzIEJpbmFyeU9wTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CkBAIC05NTIsNiArOTYw
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIFJl
Z2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCk7CisgICAgICAgIHZvaWQgZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgTGFiZWwqIHRydWVUYXJnZXQsIExhYmVsKiBmYWxzZVRhcmdldCwgYm9vbCBm
YWxsVGhyb3VnaE1lYW5zVHJ1ZSk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNDb25kaXRpb25D
b250ZXh0Q29kZWdlbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICBFeHByZXNz
aW9uTm9kZSogbV9leHByMTsKICAgICAgICAgRXhwcmVzc2lvbk5vZGUqIG1fZXhwcjI7CkluZGV4
OiBTdW5TcGlkZXIvc3Vuc3BpZGVyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFN1blNwaWRlci9zdW5zcGlkZXIJ
KHJldmlzaW9uIDUxNzA0KQorKysgU3VuU3BpZGVyL3N1bnNwaWRlcgkod29ya2luZyBjb3B5KQpA
QCAtMTI1LDcgKzEyNSw3IEBAIHN1YiBsb2FkVGVzdHNMaXN0KCkKIHsKICAgICBteSAkdGVzdGxp
c3QgPSAiTElTVCI7CiAgICAgJHRlc3RsaXN0ID0gIkxJU1QtVUJFTkNIIiBpZiAoJHViZW5jaCk7
Ci0gICAgJHRlc3RsaXN0ID0gIkxJU1QtVjgiIGlmICgkdjhzdWl0ZSk7CisgICAgJHRlc3RsaXN0
ID0gIkxJU1QtQ0siIGlmICgkdjhzdWl0ZSk7CiAgICAgJHRlc3RsaXN0ID0gIkxJU1QtUEFSU0Ut
T05MWSIgaWYgKCRwYXJzZW9ubHkpOwogCiAgICAgb3BlbiBURVNUTElTVCwgIjwiLCAidGVzdHMv
JHt0ZXN0bGlzdH0iIG9yIGRpZSAiQ2FuJ3QgZmluZCAuL3Rlc3RzLyR7dGVzdGxpc3R9IjsKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDUxNzM0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMTItMDUgIE1hY2llaiBTdGFjaG93aWFrICA8
bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBjb253YXkgYmVuY2htYXJrIHNwZW5kcyBoYWxmIGl0J3MgdGltZSBpbiBvcF9sZXNz
IChqdW1wIGZ1c2lvbiBmYWlscykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMyMTkwCisKKyAgICAgICAgKiBmYXN0L2pzL2NvZGVnZW4tbG9vcHMtbG9n
aWNhbC1ub2Rlcy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9qcy9zY3JpcHQtdGVzdHMv
Y29kZWdlbi1sb29wcy1sb2dpY2FsLW5vZGVzLmpzOiBVcGRhdGUgdG8gdGVzdCBzb21lIG5ld2x5
CisgICAgICAgIHNlbnNpdGl2ZSBjYXNlcyBvZiBjb2RlZ2VuIHRoYXQgd2VyZSBub3QgYWxyZWFk
eSBjb3ZlcmVkLgorCiAyMDA5LTEyLTA1ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL2NvZGVnZW4tbG9vcHMtbG9naWNhbC1ub2Rlcy1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9jb2RlZ2VuLWxvb3BzLWxvZ2lj
YWwtbm9kZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1MTcwNCkKKysrIExheW91dFRlc3RzL2Zh
c3QvanMvY29kZWdlbi1sb29wcy1sb2dpY2FsLW5vZGVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsMzAgQEAgUEFTUyBkb3doaWxlX2FuZF9lcSgpIGlzIHRydWUKIFBB
U1MgZG93aGlsZV9hbmRfbmVxKCkgaXMgdHJ1ZQogUEFTUyBkb3doaWxlX2FuZF9sZXNzKCkgaXMg
dHJ1ZQogUEFTUyBkb3doaWxlX2FuZF9sZXNzZXEoKSBpcyB0cnVlCitQQVNTIHdoaWxlX25vdF9v
cl9lcSgpIGlzIGZhbHNlCitQQVNTIHdoaWxlX25vdF9vcl9uZXEoKSBpcyBmYWxzZQorUEFTUyB3
aGlsZV9ub3Rfb3JfbGVzcygpIGlzIGZhbHNlCitQQVNTIHdoaWxlX25vdF9vcl9sZXNzZXEoKSBp
cyBmYWxzZQorUEFTUyB3aGlsZV9ub3RfYW5kX2VxKCkgaXMgZmFsc2UKK1BBU1Mgd2hpbGVfbm90
X2FuZF9uZXEoKSBpcyBmYWxzZQorUEFTUyB3aGlsZV9ub3RfYW5kX2xlc3MoKSBpcyBmYWxzZQor
UEFTUyB3aGlsZV9ub3RfYW5kX2xlc3NlcSgpIGlzIGZhbHNlCitQQVNTIGZvcl9ub3Rfb3JfZXEo
KSBpcyBmYWxzZQorUEFTUyBmb3Jfbm90X29yX25lcSgpIGlzIGZhbHNlCitQQVNTIGZvcl9ub3Rf
b3JfbGVzcygpIGlzIGZhbHNlCitQQVNTIGZvcl9ub3Rfb3JfbGVzc2VxKCkgaXMgZmFsc2UKK1BB
U1MgZm9yX25vdF9hbmRfZXEoKSBpcyBmYWxzZQorUEFTUyBmb3Jfbm90X2FuZF9uZXEoKSBpcyBm
YWxzZQorUEFTUyBmb3Jfbm90X2FuZF9sZXNzKCkgaXMgZmFsc2UKK1BBU1MgZm9yX25vdF9hbmRf
bGVzc2VxKCkgaXMgZmFsc2UKK1BBU1MgZG93aGlsZV9ub3Rfb3JfZXEoKSBpcyBmYWxzZQorUEFT
UyBkb3doaWxlX25vdF9vcl9uZXEoKSBpcyBmYWxzZQorUEFTUyBkb3doaWxlX25vdF9vcl9sZXNz
KCkgaXMgZmFsc2UKK1BBU1MgZG93aGlsZV9ub3Rfb3JfbGVzc2VxKCkgaXMgZmFsc2UKK1BBU1Mg
ZG93aGlsZV9ub3RfYW5kX2VxKCkgaXMgZmFsc2UKK1BBU1MgZG93aGlsZV9ub3RfYW5kX25lcSgp
IGlzIGZhbHNlCitQQVNTIGRvd2hpbGVfbm90X2FuZF9sZXNzKCkgaXMgZmFsc2UKK1BBU1MgZG93
aGlsZV9ub3RfYW5kX2xlc3NlcSgpIGlzIGZhbHNlCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0
LXRlc3RzL2NvZGVnZW4tbG9vcHMtbG9naWNhbC1ub2Rlcy5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9jb2RlZ2VuLWxvb3BzLWxvZ2ljYWwtbm9kZXMu
anMJKHJldmlzaW9uIDUxNzA0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMv
Y29kZWdlbi1sb29wcy1sb2dpY2FsLW5vZGVzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNjYsNCAr
MjY2LDI2OCBAQCBmdW5jdGlvbiBkb3doaWxlX2FuZF9sZXNzZXEoKQogCiBzaG91bGRCZVRydWUo
ImRvd2hpbGVfYW5kX2xlc3NlcSgpIik7CiAKK2Z1bmN0aW9uIHdoaWxlX25vdF9vcl9lcSgpCit7
CisgICAgdmFyIGEgPSAwOworICAgIHdoaWxlICghKGEgPT0gMCB8fCBhID09IDApKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFsc2UoIndo
aWxlX25vdF9vcl9lcSgpIik7CisKK2Z1bmN0aW9uIHdoaWxlX25vdF9vcl9uZXEoKQoreworICAg
IHZhciBhID0gMDsKKyAgICB3aGlsZSAoIShhICE9IDEgfHwgYSAhPSAxKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJ3aGlsZV9u
b3Rfb3JfbmVxKCkiKTsKKworZnVuY3Rpb24gd2hpbGVfbm90X29yX2xlc3MoKQoreworICAgIHZh
ciBhID0gMDsKKyAgICB3aGlsZSAoIShhIDwgMSB8fCBhIDwgMSkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgid2hpbGVfbm90X29y
X2xlc3MoKSIpOworCitmdW5jdGlvbiB3aGlsZV9ub3Rfb3JfbGVzc2VxKCkKK3sKKyAgICB2YXIg
YSA9IDA7CisgICAgd2hpbGUgKCEoYSA8PSAxIHx8IGEgPD0gMSkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgid2hpbGVfbm90X29y
X2xlc3NlcSgpIik7CisKK2Z1bmN0aW9uIHdoaWxlX25vdF9hbmRfZXEoKQoreworICAgIHZhciBh
ID0gMDsKKyAgICB3aGlsZSAoIShhID09IDAgJiYgYSA9PSAwKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJ3aGlsZV9ub3RfYW5k
X2VxKCkiKTsKKworZnVuY3Rpb24gd2hpbGVfbm90X2FuZF9uZXEoKQoreworICAgIHZhciBhID0g
MDsKKyAgICB3aGlsZSAoIShhICE9IDEgJiYgYSAhPSAxKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJ3aGlsZV9ub3RfYW5kX25l
cSgpIik7CisKK2Z1bmN0aW9uIHdoaWxlX25vdF9hbmRfbGVzcygpCit7CisgICAgdmFyIGEgPSAw
OworICAgIHdoaWxlICghKGEgPCAxICYmIGEgPCAxKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJ3aGlsZV9ub3RfYW5kX2xlc3Mo
KSIpOworCitmdW5jdGlvbiB3aGlsZV9ub3RfYW5kX2xlc3NlcSgpCit7CisgICAgdmFyIGEgPSAw
OworICAgIHdoaWxlICghKGEgPD0gMSAmJiBhIDw9IDEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFsc2UoIndoaWxlX25vdF9hbmRfbGVz
c2VxKCkiKTsKKworZnVuY3Rpb24gZm9yX25vdF9vcl9lcSgpCit7CisgICAgZm9yICh2YXIgYSA9
IDA7ICEoYSA9PSAwIHx8IGEgPT0gMCk7ICkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJmb3Jfbm90X29yX2VxKCkiKTsKKworZnVu
Y3Rpb24gZm9yX25vdF9vcl9uZXEoKQoreworICAgIGZvciAodmFyIGEgPSAwOyAhKGEgIT0gMSB8
fCBhICE9IDEpOyApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30K
Kworc2hvdWxkQmVGYWxzZSgiZm9yX25vdF9vcl9uZXEoKSIpOworCitmdW5jdGlvbiBmb3Jfbm90
X29yX2xlc3MoKQoreworICAgIGZvciAodmFyIGEgPSAwOyAhKGEgPCAxIHx8IGEgPCAxKTsgKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFs
c2UoImZvcl9ub3Rfb3JfbGVzcygpIik7CisKK2Z1bmN0aW9uIGZvcl9ub3Rfb3JfbGVzc2VxKCkK
K3sKKyAgICBmb3IgKHZhciBhID0gMDsgIShhIDw9IDEgfHwgYSA8PSAxKTsgKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFsc2UoImZvcl9u
b3Rfb3JfbGVzc2VxKCkiKTsKKworZnVuY3Rpb24gZm9yX25vdF9hbmRfZXEoKQoreworICAgIGZv
ciAodmFyIGEgPSAwOyAhKGEgPT0gMCAmJiBhID09IDApOyApCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZm9yX25vdF9hbmRfZXEo
KSIpOworCitmdW5jdGlvbiBmb3Jfbm90X2FuZF9uZXEoKQoreworICAgIGZvciAodmFyIGEgPSAw
OyAhKGEgIT0gMSAmJiBhICE9IDEpOyApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZm9yX25vdF9hbmRfbmVxKCkiKTsKKworZnVu
Y3Rpb24gZm9yX25vdF9hbmRfbGVzcygpCit7CisgICAgZm9yICh2YXIgYSA9IDA7ICEoYSA8IDEg
JiYgYSA8IDEpOyApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30K
Kworc2hvdWxkQmVGYWxzZSgiZm9yX25vdF9hbmRfbGVzcygpIik7CisKK2Z1bmN0aW9uIGZvcl9u
b3RfYW5kX2xlc3NlcSgpCit7CisgICAgZm9yICh2YXIgYSA9IDA7ICEoYSA8PSAxICYmIGEgPD0g
MSk7ICkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91
bGRCZUZhbHNlKCJmb3Jfbm90X2FuZF9sZXNzZXEoKSIpOworCitmdW5jdGlvbiBkb3doaWxlX25v
dF9vcl9lcSgpCit7CisgICAgdmFyIGEgPSAwOworICAgIHZhciBpID0gMDsKKyAgICBkbyB7Cisg
ICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpKys7
CisgICAgfSB3aGlsZSAoIShhID09IDAgfHwgYSA9PSAwKSkKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3Nob3VsZEJlRmFsc2UoImRvd2hpbGVfbm90X29yX2VxKCkiKTsKKworZnVuY3Rpb24gZG93
aGlsZV9ub3Rfb3JfbmVxKCkKK3sKKyAgICB2YXIgYSA9IDA7CisgICAgdmFyIGkgPSAwOworICAg
IGRvIHsKKyAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGkrKzsKKyAgICB9IHdoaWxlICghKGEgIT0gMSB8fCBhICE9IDEpKQorICAgIHJldHVybiBm
YWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZG93aGlsZV9ub3Rfb3JfbmVxKCkiKTsKKworZnVu
Y3Rpb24gZG93aGlsZV9ub3Rfb3JfbGVzcygpCit7CisgICAgdmFyIGEgPSAwOworICAgIHZhciBp
ID0gMDsKKyAgICBkbyB7CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpKys7CisgICAgfSB3aGlsZSAoIShhIDwgMSB8fCBhIDwgMSkpCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJkb3doaWxlX25vdF9vcl9sZXNzKCki
KTsKKworZnVuY3Rpb24gZG93aGlsZV9ub3Rfb3JfbGVzc2VxKCkKK3sKKyAgICB2YXIgYSA9IDA7
CisgICAgdmFyIGkgPSAwOworICAgIGRvIHsKKyAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGkrKzsKKyAgICB9IHdoaWxlICghKGEgPD0gMSB8fCBh
IDw9IDEpKQorICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZG93aGlsZV9u
b3Rfb3JfbGVzc2VxKCkiKTsKKworZnVuY3Rpb24gZG93aGlsZV9ub3RfYW5kX2VxKCkKK3sKKyAg
ICB2YXIgYSA9IDA7CisgICAgdmFyIGkgPSAwOworICAgIGRvIHsKKyAgICAgICAgaWYgKGkgPiAw
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGkrKzsKKyAgICB9IHdoaWxlICgh
KGEgPT0gMCAmJiBhID09IDApKQorICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxz
ZSgiZG93aGlsZV9ub3RfYW5kX2VxKCkiKTsKKworZnVuY3Rpb24gZG93aGlsZV9ub3RfYW5kX25l
cSgpCit7CisgICAgdmFyIGEgPSAwOworICAgIHZhciBpID0gMDsKKyAgICBkbyB7CisgICAgICAg
IGlmIChpID4gMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpKys7CisgICAg
fSB3aGlsZSAoIShhICE9IDEgJiYgYSAhPSAxKSkKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3No
b3VsZEJlRmFsc2UoImRvd2hpbGVfbm90X2FuZF9uZXEoKSIpOworCitmdW5jdGlvbiBkb3doaWxl
X25vdF9hbmRfbGVzcygpCit7CisgICAgdmFyIGEgPSAwOworICAgIHZhciBpID0gMDsKKyAgICBk
byB7CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpKys7CisgICAgfSB3aGlsZSAoIShhIDwgMSAmJiBhIDwgMSkpCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitzaG91bGRCZUZhbHNlKCJkb3doaWxlX25vdF9hbmRfbGVzcygpIik7CisKK2Z1bmN0
aW9uIGRvd2hpbGVfbm90X2FuZF9sZXNzZXEoKQoreworICAgIHZhciBhID0gMDsKKyAgICB2YXIg
aSA9IDA7CisgICAgZG8geworICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgaSsrOworICAgIH0gd2hpbGUgKCEoYSA8PSAxICYmIGEgPD0gMSkpCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJkb3doaWxlX25vdF9hbmRfbGVz
c2VxKCkiKTsKKwogdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44358</attachid>
            <date>2009-12-06 00:33:52 -0800</date>
            <delta_ts>2009-12-06 01:19:19 -0800</delta_ts>
            <desc>Fix style issues; remove bogus sunspider change; add tests for float case codegen</desc>
            <filename>bug-32190-20091206003350.patch</filename>
            <type>text/plain</type>
            <size>60720</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUxNzM0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIyIEBACisyMDA5LTEyLTA1ICBNYWNpZWog
U3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgY29ud2F5IGJlbmNobWFyayBzcGVuZHMgaGFsZiBpdCdzIHRp
bWUgaW4gb3BfbGVzcyAoanVtcCBmdXNpb24gZmFpbHMpCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjE5MAorCisgICAgICAgIDwxJSBzcGVlZHVwIG9u
IFN1blNwaWRlciBhbmQgVjgKKyAgICAgICAgMnggc3BlZWR1cCBvbiAiY29ud2F5IiBiZW5jaG1h
cmsKKyAgICAgICAgCisgICAgICAgIFR3byBvcHRpbWl6YXRpb25zOgorICAgICAgICAxKSBJbXBy
b3ZlIGNvZGVnZW4gZm9yIGxvZ2ljYWwgb3BlcmF0b3JzICYmLCB8fCBhbmQgISBpbiBhIGNvbmRp
dGlvbiBjb250ZXh0CisgICAgICAgIAorICAgICAgICBXaGVuIGdlbmVyYXRpbmcgY29kZSBmb3Ig
Y29tYmluYXRpb25zIG9mICYmLCB8fCBhbmQgISwgaW4gYQorICAgICAgICBjb25kaXRpb24gY29u
dGV4dCAoaS5lLiBpbiBhbiBpZiBzdGF0ZW1lbnQgb3IgbG9vcCBjb25kaXRpb24pLCB3ZQorICAg
ICAgICB1c2VkIHRvIHByb2R1Y2UgYSB2YWx1ZSwgYW5kIHRoZW4gc2VwYXJhdGVseSBqdW1wIGJh
c2VkIG9uIGl0cworICAgICAgICB0cnV0aGluZXNzLiBOb3cgd2UgcGFzcyB0aGUgZmFsc2UgYW5k
IHRydWUgdGFyZ2V0cyBpbiwgYW5kIGxldCB0aGUKKyAgICAgICAgbG9naWNhbCBvcGVyYXRvcnMg
Z2VuZXJhdGUganVtcHMgZGlyZWN0bHkuIFRoaXMgaGVscHMgaW4gZm91cgorICAgICAgICB3YXlz
OgorCisgICAgICAgIGEpIEluZGl2aWR1YWwgY2xhdXNlcyBvZiBhIHNob3J0LWNpcmN1aXQgbG9n
aWNhbCBvcGVyYXRvciBjYW4gbm93CisgICAgICAgIGp1bXAgZGlyZWN0bHkgdG8gdGhlIHRoZW4g
b3IgZWxzZSBjbGF1c2Ugb2YgYW4gaWYgc3RhdGVtZW50IChvciB0bworICAgICAgICB0aGUgdG9w
IG9yIGV4aXQgb2YgYSBsb29wKSBpbnN0ZWFkIG9mIGp1bXBpbmcgdG8gYSBqdW1wLgorICAgICAg
ICAKKyAgICAgICAgYikgSXQgdXNlZCB0byBiZSB0aGF0IGp1bXAgZnVzaW9uIHdpdGggdGhlIGNv
bmRpdGlvbiBvZiB0aGUgZmlyc3QKKyAgICAgICAgY2xhdXNlIG9mIGEgbG9naWNhbCBvcGVyYXRv
ciB3YXMgaW5oaWJpdGVkLCBiZWNhdXNlIHRoZSByZWdpc3RlcgorICAgICAgICB3YXMgcmVmJ2Qg
dG8gYmUgdXNlZCBsYXRlciwgaW4gdGhlIGFjdHVhbCBjb25kaXRpb24ganVtcDsgdGhpcyBubwor
ICAgICAgICBsb25nZXIgaGFwcGVucyBzaW5jZSBhIGp1bXAgc3RyYWlnaHQgdG8gdGhlIGZpbmFs
IHRhcmdldCBpcworICAgICAgICBnZW5lcmF0ZWQgZGlyZWN0bHkuCisKKyAgICAgICAgYykgSXQg
dXNlZCB0byBiZSB0aGF0IGp1bXAgZnVzaW9uIHdpdGggdGhlIGNvbmRpdGlvbiBvZiB0aGUgc2Vj
b25kCisgICAgICAgIGNsYXVzZSBvZiBhIGxvZ2ljYWwgb3BlcmF0b3Igd2FzIGluaGliaXRlZCwg
YmVjYXVzZSB0aGVyZSB3YXMgYQorICAgICAgICBqdW1wIHRhcmdldCByaWdodCBhZnRlciB0aGUg
c2Vjb25kIGNsYXVzZSBhbmQgYmVmb3JlIHRoZSBhY3R1YWwKKyAgICAgICAgY29uZGl0aW9uIGp1
bXAuIEJ1dCBub3cgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5IGZvciB0aGUgZmlyc3QKKyAgICAg
ICAgY2xhdXNlIHRvIGp1bXAgdGhlcmUgc28ganVtcCBmdXNpb24gaXMgbm90IGJsb2NrZWQuCisK
KyAgICAgICAgZCkgV2UgYXZvaWQgZ2VuZXJhdGluZyBleGNlc3MgbW92IHN0YXRlbWVudHMgaW4g
c29tZSBjYXNlcy4KKyAgICAgICAgCisgICAgICAgIEFzIGEgY29uY3JldGUgZXhhbXBsZSB0aGlz
IHNvdXJjZToKKyAgICAgICAgCisgICAgICAgIGlmICghKCh4IDwgcSAmJiB5IDwgcSkgfHwgKHQg
PCBxICYmIHogPCBxKSkpIHsKKyAgICAgICAgICAgIC8vIC4uLgorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBVc2VkIHRvIGdlbmVyYXRlIHRoaXMgYnl0ZWNvZGU6CisgICAgICAgIAorICAg
ICAgICBbICAzNF0gbGVzcyAgICAgICAgICAgICAgcjEsIHItMTUsIHItMTkKKyAgICAgICAgWyAg
MzhdIGpmYWxzZSAgICAgICAgICAgIHIxLCA3KC0+NDUpCisgICAgICAgIFsgIDQxXSBsZXNzICAg
ICAgICAgICAgICByMSwgci0xNiwgci0xOQorICAgICAgICBbICA0NV0ganRydWUgICAgICAgICAg
ICAgcjEsIDE0KC0+NTkpCisgICAgICAgIFsgIDQ4XSBsZXNzICAgICAgICAgICAgICByMSwgci0x
Nywgci0xOQorICAgICAgICBbICA1Ml0gamZhbHNlICAgICAgICAgICAgcjEsIDcoLT41OSkKKyAg
ICAgICAgWyAgNTVdIGxlc3MgICAgICAgICAgICAgIHIxLCByLTE4LCByLTE5CisgICAgICAgIFsg
IDU5XSBqdHJ1ZSAgICAgICAgICAgICByMSwgMTcoLT43NikKKyAgICAgICAgCisgICAgICAgIEFu
ZCBub3cgZ2VuZXJhdGVzIHRoaXMgYnl0ZWNvZGUgKGFsc28gdGFraW5nIGFkdmFudGFnZSBvZiB0
aGUgc2Vjb25kIG9wdGltaXphdGlvbiBiZWxvdyk6CisgICAgICAgIAorICAgICAgICBbICAzNF0g
am5sZXNzICAgICAgICAgICAgci0xNSwgci0xOSwgOCgtPjQyKQorICAgICAgICBbICAzOF0gamxl
c3MgICAgICAgICAgICAgci0xNiwgci0xOSwgMjYoLT42NCkKKyAgICAgICAgWyAgNDJdIGpubGVz
cyAgICAgICAgICAgIHItMTcsIHItMTksIDgoLT41MCkKKyAgICAgICAgWyAgNDZdIGpsZXNzICAg
ICAgICAgICAgIHItMTgsIHItMTksIDE4KC0+NjQpCisgICAgICAgIAorICAgICAgICBOb3RlIHRo
ZSBqdW1wIGZ1c2lvbiBhbmQgdGhlIGZhY3QgdGhhdCB0aGVyZSdzIGxlc3MganVtcAorICAgICAg
ICBpbmRpcmVjdGlvbiAtIHRocmVlIG9mIHRoZSBmb3VyIGp1bXBzIGdvIHN0cmFpZ2h0IHRvIHRo
ZSB0YXJnZXQKKyAgICAgICAgY2xhdXNlIGluc3RlYWQgb2YgaW5kaXJlY3RpbmcgdGhyb3VnaCBh
bm90aGVyIGp1bXAuCisgICAgICAgIAorICAgICAgICAyKSBJbXBsZW1lbnQgamxlc3Mgb3Bjb2Rl
IHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBhYm92ZSwgc2luY2Ugd2UnbGwgbm93IG9mdGVuIGdl
bmVyYXRlCisgICAgICAgIGEgbGVzcyBmb2xsb3dlZCBieSBhIGp0cnVlIHdoZXJlIGZ1c2lvbiBp
cyBub3QgZm9yYmlkZGVuLgorICAgICAgIAorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAg
ICAgICAoSlNDOjpFeHByZXNzaW9uTm9kZTo6aGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4pOiBI
ZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lCisgICAgICAgIHdoZXRoZXIgYSBub2RlIHN1cHBv
cnRzIHNwZWNpYWwgY29uZGl0aW9uYWwgY29kZWdlbi4gUmV0dXJuIGZhbHNlIGFzIHRoaXMgaXMg
dGhlIGRlZmF1bHQuCisgICAgICAgIChKU0M6OkV4cHJlc3Npb25Ob2RlOjplbWl0Qnl0ZWNvZGVJ
bkNvbmRpdGlvbkNvbnRleHQpOiBBc3NlcnQgbm90IHJlYWNoZWQgLSBvbmx5IHJlYWxseQorICAg
ICAgICBkZWZpbmVkIGZvciBub2RlcyB0aGF0IGRvIGhhdmUgY29uZGl0aW9uYWwgY29kZWdlbi4K
KyAgICAgICAgKEpTQzo6VW5hcnlPcE5vZGU6OmV4cHIpOiBBZGQgY29uc3QgdmVyc2lvbi4KKyAg
ICAgICAgKEpTQzo6TG9naWNhbE5vdE5vZGU6Omhhc0NvbmRpdGlvbkNvbnRleHRDb2RlZ2VuKTog
UmV0dXJuZSB0cnVlIG9ubHkgaWYgc3ViZXhwcmVzc2lvbgorICAgICAgICBzdXBwb3J0cyBpdC4K
KyAgICAgICAgKEpTQzo6TG9naWNhbE9wTm9kZTo6aGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4p
OiBSZXR1cm4gdHJ1ZS4KKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuY3BwOgorICAgICAgICAoSlND
OjpMb2dpY2FsTm90Tm9kZTo6ZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KTogSW1wbGVt
ZW50ZWQgLSBqdXN0IHN3YXAKKyAgICAgICAgdGhlIHRydWUgYW5kIGZhbHNlIHRhcmdldHMgZm9y
IHRoZSBjaGlsZCBub2RlLgorICAgICAgICAoSlNDOjpMb2dpY2FsT3BOb2RlOjplbWl0Qnl0ZWNv
ZGVJbkNvbmRpdGlvbkNvbnRleHQpOiBJbXBsZW1lbnRlZCAtIGhhbmRsZSBqdW1wcworICAgICAg
ICBkaXJlY3RseSwgaW1wcm92aW5nIGNvZGVnZW4gcXVhbGl0eS4gQWxzbyBoYW5kbGVzIGZ1cnRo
ZXIgbmVzdGVkIGNvbmRpdGlvbmFsIGNvZGVnZW4uCisgICAgICAgIChKU0M6OkNvbmRpdGlvbmFs
Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogVXNlIGNvbmRpdGlvbiBjb250ZXh0IGNvZGVnZW4gd2hlbiBh
dmFpbGFibGUuCisgICAgICAgIChKU0M6OklmTm9kZTo6ZW1pdEJ5dGVjb2RlKTogZGl0dG8KKyAg
ICAgICAgKEpTQzo6SWZFbHNlTm9kZTo6ZW1pdEJ5dGVjb2RlKTogZGl0dG8KKyAgICAgICAgKEpT
Qzo6RG9XaGlsZU5vZGU6OmVtaXRCeXRlY29kZSk6IGRpdHRvCisgICAgICAgIChKU0M6OldoaWxl
Tm9kZTo6ZW1pdEJ5dGVjb2RlKTogZGl0dG8KKyAgICAgICAgKEpTQzo6Rm9yTm9kZTo6ZW1pdEJ5
dGVjb2RlKTogZGl0dG8KKworICAgICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOiAKKyAgICAgICAg
LSBBZGRlZCBsb29wX2lmX2ZhbHNlIG9wY29kZSAtIG5lZWRlZCBub3cgdGhhdCBmYWxzZXkganVt
cHMgY2FuIGJlIGJhY2t3YXJkcy4KKyAgICAgICAgLSBBZGRlZCBqbGVzcyBvcGNvZGUgdG8gdGFr
ZSBhZHZhbnRhZ2Ugb2YgbmV3IGZ1c2lvbiBvcHBvcnR1bml0aWVzLgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcCk6IEhhbmRs
ZSBhYm92ZS4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZlRydWUpOiBBZGQgcGVl
cGhvbGUgZm9yIGxlc3MgKyBqdHJ1ZSA9PT4gamxlc3MuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0SnVtcElmRmFsc2UpOiBBZGQgaGFuZGxpbmcgb2YgYmFja3dyZHMgZmFs
c2V5IGp1bXBzLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRl
eHQpOiBXcmFwcGVyIHRvIGhhbmRsZSB0cmFja2luZyBvZgorICAgICAgICBvdmVybHkgZGVlcCBl
eHByZXNzaW9ucyBldGMuCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgor
ICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUpOiBJbXBsZW1lbnQgdGhl
IHR3byBuZXcgb3Bjb2RlcyAobG9vcF9pZl9mYWxzZSwgamxlc3MpLgorICAgICAgICAqIGppdC9K
SVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOiBJbXBs
ZW1lbnQgSklUIHN1cHBvcnQgZm9yIHRoZSB0d28gbmV3IG9wY29kZXMuCisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOiBkaXR0bworICAgICAgICAqIGppdC9KSVQu
aDoKKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9qbGVzcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfamxlc3MpOiBk
aXR0bworICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcCk6IGRpdHRvCisgICAg
ICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2xvb3BfaWZfbGVzcyk6IGRpdHRvCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb29wX2lm
X2ZhbHNlKTogZGl0dG8KKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9sb29wX2lmX2Zh
bHNlKTogZGl0dG8KKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAqIGppdC9K
SVRTdHVicy5oOgorICAgICAgICAoSlNDOjopOgorCiAyMDA5LTEyLTA0ICBLZW50IEhhbnNlbiAg
PGtlbnQuaGFuc2VuQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gNTE3
MDQpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NzYsNiArODc2LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSog
ZXhlYywgY28KICAgICAgICAgICAgIHByaW50Q29uZGl0aW9uYWxKdW1wKGV4ZWMsIGJlZ2luLCBp
dCwgbG9jYXRpb24sICJsb29wX2lmX3RydWUiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisgICAgICAgIGNhc2Ugb3BfbG9vcF9pZl9mYWxzZTogeworICAgICAgICAgICAgcHJpbnRD
b25kaXRpb25hbEp1bXAoZXhlYywgYmVnaW4sIGl0LCBsb2NhdGlvbiwgImxvb3BfaWZfZmFsc2Ui
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfamZhbHNl
OiB7CiAgICAgICAgICAgICBwcmludENvbmRpdGlvbmFsSnVtcChleGVjLCBiZWdpbiwgaXQsIGxv
Y2F0aW9uLCAiamZhbHNlIik7CiAgICAgICAgICAgICBicmVhazsKQEAgLTkxNiw2ICs5MjAsMTMg
QEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICAgICAg
cHJpbnRmKCJbJTRkXSBsb29wX2lmX2xlc3NcdCAlcywgJXMsICVkKC0+JWQpXG4iLCBsb2NhdGlv
biwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEp
LmNfc3RyKCksIG9mZnNldCwgbG9jYXRpb24gKyBvZmZzZXQpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qbGVzczogeworICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAg
ICAgICAgIHByaW50ZigiWyU0ZF0gamxlc3NcdFx0ICVzLCAlcywgJWQoLT4lZClcbiIsIGxvY2F0
aW9uLCByZWdpc3Rlck5hbWUoZXhlYywgcjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShleGVjLCBy
MSkuY19zdHIoKSwgb2Zmc2V0LCBsb2NhdGlvbiArIG9mZnNldCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzc2VxOiB7CiAgICAgICAg
ICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9ICgr
K2l0KS0+dS5vcGVyYW5kOwpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9u
IDUxNzA0KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEyOCw5ICsxMjgsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIG1hY3JvKG9w
X2puZXFfcHRyLCA0KSBcCiAgICAgICAgIG1hY3JvKG9wX2pubGVzcywgNCkgXAogICAgICAgICBt
YWNybyhvcF9qbmxlc3NlcSwgNCkgXAorICAgICAgICBtYWNybyhvcF9qbGVzcywgNCkgXAogICAg
ICAgICBtYWNybyhvcF9qbXBfc2NvcGVzLCAzKSBcCiAgICAgICAgIG1hY3JvKG9wX2xvb3AsIDIp
IFwKICAgICAgICAgbWFjcm8ob3BfbG9vcF9pZl90cnVlLCAzKSBcCisgICAgICAgIG1hY3JvKG9w
X2xvb3BfaWZfZmFsc2UsIDMpIFwKICAgICAgICAgbWFjcm8ob3BfbG9vcF9pZl9sZXNzLCA0KSBc
CiAgICAgICAgIG1hY3JvKG9wX2xvb3BfaWZfbGVzc2VxLCA0KSBcCiAgICAgICAgIG1hY3JvKG9w
X3N3aXRjaF9pbW0sIDQpIFwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gNTE3MDQpCisrKyBKYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MTYsNyArNjE2LDcgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aQogCiBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZlRydWUo
UmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRhcmdldCkKIHsKLSAgICBpZiAobV9sYXN0T3Bjb2Rl
SUQgPT0gb3BfbGVzcyAmJiAhdGFyZ2V0LT5pc0ZvcndhcmQoKSkgeworICAgIGlmIChtX2xhc3RP
cGNvZGVJRCA9PSBvcF9sZXNzKSB7CiAgICAgICAgIGludCBkc3RJbmRleDsKICAgICAgICAgaW50
IHNyYzFJbmRleDsKICAgICAgICAgaW50IHNyYzJJbmRleDsKQEAgLTYyNyw3ICs2MjcsNyBAQCBQ
YXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pCiAgICAgICAgICAgICByZXdp
bmRCaW5hcnlPcCgpOwogCiAgICAgICAgICAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMo
KS5zaXplKCk7Ci0gICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2xvb3BfaWZfbGVzcyk7CisgICAg
ICAgICAgICBlbWl0T3Bjb2RlKHRhcmdldC0+aXNGb3J3YXJkKCkgPyBvcF9qbGVzcyA6IG9wX2xv
b3BfaWZfbGVzcyk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjMUluZGV4
KTsKICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMySW5kZXgpOwogICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKSk7CkBAIC02OTIsOSArNjkyLDcgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaQogCiBQYXNzUmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEp1bXBJZkZhbHNlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsKiB0YXJnZXQpCiB7Ci0g
ICAgQVNTRVJUKHRhcmdldC0+aXNGb3J3YXJkKCkpOwotCi0gICAgaWYgKG1fbGFzdE9wY29kZUlE
ID09IG9wX2xlc3MpIHsKKyAgICBpZiAobV9sYXN0T3Bjb2RlSUQgPT0gb3BfbGVzcyAmJiB0YXJn
ZXQtPmlzRm9yd2FyZCgpKSB7CiAgICAgICAgIGludCBkc3RJbmRleDsKICAgICAgICAgaW50IHNy
YzFJbmRleDsKICAgICAgICAgaW50IHNyYzJJbmRleDsKQEAgLTcxMSw3ICs3MDksNyBAQCBQYXNz
UmVmUHRyPExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pCiAgICAgICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQodGFyZ2V0LT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkp
KTsKICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KG1fbGFzdE9wY29kZUlEID09IG9wX2xlc3NlcSkgeworICAgIH0gZWxzZSBpZiAobV9sYXN0T3Bj
b2RlSUQgPT0gb3BfbGVzc2VxICYmIHRhcmdldC0+aXNGb3J3YXJkKCkpIHsKICAgICAgICAgaW50
IGRzdEluZGV4OwogICAgICAgICBpbnQgc3JjMUluZGV4OwogICAgICAgICBpbnQgc3JjMkluZGV4
OwpAQCAtNzM4LDEyICs3MzYsMTIgQEAgUGFzc1JlZlB0cjxMYWJlbD4gQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaQogICAgICAgICAgICAgcmV3aW5kVW5hcnlPcCgpOwogCiAgICAgICAgICAgICBzaXpl
X3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgICAgICAgICBlbWl0T3Bjb2Rl
KG9wX2p0cnVlKTsKKyAgICAgICAgICAgIGVtaXRPcGNvZGUodGFyZ2V0LT5pc0ZvcndhcmQoKSA/
IG9wX2p0cnVlIDogb3BfbG9vcF9pZl90cnVlKTsKICAgICAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChzcmNJbmRleCk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGFy
Z2V0LT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMoKS5zaXplKCkpKTsKICAgICAgICAgICAgIHJl
dHVybiB0YXJnZXQ7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fbGFzdE9wY29kZUlEID09
IG9wX2VxX251bGwpIHsKKyAgICB9IGVsc2UgaWYgKG1fbGFzdE9wY29kZUlEID09IG9wX2VxX251
bGwgJiYgdGFyZ2V0LT5pc0ZvcndhcmQoKSkgewogICAgICAgICBpbnQgZHN0SW5kZXg7CiAgICAg
ICAgIGludCBzcmNJbmRleDsKIApAQCAtNzU4LDcgKzc1Niw3IEBAIFBhc3NSZWZQdHI8TGFiZWw+
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWkKICAgICAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZCh0YXJnZXQtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRhcmdldDsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9sYXN0T3Bjb2Rl
SUQgPT0gb3BfbmVxX251bGwpIHsKKyAgICB9IGVsc2UgaWYgKG1fbGFzdE9wY29kZUlEID09IG9w
X25lcV9udWxsICYmIHRhcmdldC0+aXNGb3J3YXJkKCkpIHsKICAgICAgICAgaW50IGRzdEluZGV4
OwogICAgICAgICBpbnQgc3JjSW5kZXg7CiAKQEAgLTc3Niw3ICs3NzQsNyBAQCBQYXNzUmVmUHRy
PExhYmVsPiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pCiAgICAgfQogCiAgICAgc2l6ZV90IGJlZ2lu
ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIGVtaXRPcGNvZGUob3BfamZhbHNlKTsKKyAg
ICBlbWl0T3Bjb2RlKHRhcmdldC0+aXNGb3J3YXJkKCkgPyBvcF9qZmFsc2UgOiBvcF9sb29wX2lm
X2ZhbHNlKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY29uZC0+aW5kZXgoKSk7CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRhcmdldC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpKSk7CiAgICAgcmV0dXJuIHRhcmdldDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA1MTcwNCkKKysrIEph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTIsNiArMTkyLDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0
dXJuIGVtaXROb2RlKDAsIG4pOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBlbWl0Tm9kZUlu
Q29uZGl0aW9uQ29udGV4dChFeHByZXNzaW9uTm9kZSogbiwgTGFiZWwqIHRydWVUYXJnZXQsIExh
YmVsKiBmYWxzZVRhcmdldCwgYm9vbCBmYWxsVGhyb3VnaE1lYW5zVHJ1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+bnVtYmVyT2ZMaW5lSW5mb3MoKSB8fCBtX2Nv
ZGVCbG9jay0+bGFzdExpbmVJbmZvKCkubGluZU51bWJlciAhPSBuLT5saW5lTm8oKSkgeworICAg
ICAgICAgICAgICAgIExpbmVJbmZvIGluZm8gPSB7IGluc3RydWN0aW9ucygpLnNpemUoKSwgbi0+
bGluZU5vKCkgfTsKKyAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkTGluZUluZm8oaW5m
byk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9lbWl0Tm9kZURlcHRoID49IHNf
bWF4RW1pdE5vZGVEZXB0aCkKKyAgICAgICAgICAgICAgICBlbWl0VGhyb3dFeHByZXNzaW9uVG9v
RGVlcEV4Y2VwdGlvbigpOworICAgICAgICAgICAgKyttX2VtaXROb2RlRGVwdGg7CisgICAgICAg
ICAgICBuLT5lbWl0Qnl0ZWNvZGVJbkNvbmRpdGlvbkNvbnRleHQoKnRoaXMsIHRydWVUYXJnZXQs
IGZhbHNlVGFyZ2V0LCBmYWxsVGhyb3VnaE1lYW5zVHJ1ZSk7CisgICAgICAgICAgICAtLW1fZW1p
dE5vZGVEZXB0aDsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQgZW1pdEV4cHJlc3Npb25JbmZv
KHVuc2lnbmVkIGRpdm90LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
KQogICAgICAgICB7IAogICAgICAgICAgICAgZGl2b3QgLT0gbV9jb2RlQmxvY2stPnNvdXJjZU9m
ZnNldCgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkocmV2aXNpb24gNTE3MDQpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NDcsNiArMjY0NywyNiBAQCBKU1ZhbHVlIElu
dGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVO
R1RIKG9wX2xvb3BfaWZfdHJ1ZSk7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9
CisgICAgREVGSU5FX09QQ09ERShvcF9sb29wX2lmX2ZhbHNlKSB7CisgICAgICAgIC8qIGxvb3Bf
aWZfdHJ1ZSBjb25kKHIpIHRhcmdldChvZmZzZXQpCisgICAgICAgICAKKyAgICAgICAgICAgSnVt
cHMgdG8gb2Zmc2V0IHRhcmdldCBmcm9tIHRoZSBjdXJyZW50IGluc3RydWN0aW9uLCBpZiBhbmQK
KyAgICAgICAgICAgb25seSBpZiByZWdpc3RlciBjb25kIGNvbnZlcnRzIHRvIGJvb2xlYW4gYXMg
ZmFsc2UuCisKKyAgICAgICAgICAgQWRkaXRpb25hbGx5IHRoaXMgbG9vcCBpbnN0cnVjdGlvbiBt
YXkgdGVybWluYXRlIEpTIGV4ZWN1dGlvbiBpcworICAgICAgICAgICB0aGUgSlMgdGltZW91dCBp
cyByZWFjaGVkLgorICAgICAgICAgKi8KKyAgICAgICAgaW50IGNvbmQgPSB2UENbMV0udS5vcGVy
YW5kOworICAgICAgICBpbnQgdGFyZ2V0ID0gdlBDWzJdLnUub3BlcmFuZDsKKyAgICAgICAgaWYg
KCFjYWxsRnJhbWUtPnIoY29uZCkuanNWYWx1ZSgpLnRvQm9vbGVhbihjYWxsRnJhbWUpKSB7Cisg
ICAgICAgICAgICB2UEMgKz0gdGFyZ2V0OworICAgICAgICAgICAgQ0hFQ0tfRk9SX1RJTUVPVVQo
KTsKKyAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfbG9vcF9pZl90cnVlKTsKKyAgICAgICAg
TkVYVF9JTlNUUlVDVElPTigpOworICAgIH0KICAgICBERUZJTkVfT1BDT0RFKG9wX2p0cnVlKSB7
CiAgICAgICAgIC8qIGp0cnVlIGNvbmQocikgdGFyZ2V0KG9mZnNldCkKIApAQCAtMjgxMCw2ICsy
ODMwLDI5IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAgICAg
ICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzKTsKICAgICAgICAgTkVYVF9JTlNUUlVD
VElPTigpOwogICAgIH0KKyAgICBERUZJTkVfT1BDT0RFKG9wX2psZXNzKSB7CisgICAgICAgIC8q
IGpsZXNzIHNyYzEocikgc3JjMihyKSB0YXJnZXQob2Zmc2V0KQorCisgICAgICAgICAgIENoZWNr
cyB3aGV0aGVyIHJlZ2lzdGVyIHNyYzEgaXMgbGVzcyB0aGFuIHJlZ2lzdGVyIHNyYzIsIGFzCisg
ICAgICAgICAgIHdpdGggdGhlIEVDTUFTY3JpcHQgJzwnIG9wZXJhdG9yLCBhbmQgdGhlbiBqdW1w
cyB0byBvZmZzZXQKKyAgICAgICAgICAgdGFyZ2V0IGZyb20gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rp
b24sIGlmIGFuZCBvbmx5IGlmIHRoZSAKKyAgICAgICAgICAgcmVzdWx0IG9mIHRoZSBjb21wYXJp
c29uIGlzIHRydWUuCisgICAgICAgICovCisgICAgICAgIEpTVmFsdWUgc3JjMSA9IGNhbGxGcmFt
ZS0+cih2UENbMV0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgc3JjMiA9
IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7CisgICAgICAgIGludCB0
YXJnZXQgPSB2UENbM10udS5vcGVyYW5kOworCisgICAgICAgIGJvb2wgcmVzdWx0ID0ganNMZXNz
KGNhbGxGcmFtZSwgc3JjMSwgc3JjMik7CisgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIHZQQyArPSB0YXJn
ZXQ7CisgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CisgICAgICAgIH0KKworICAgICAg
ICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9qbGVzcyk7CisgICAgICAgIE5FWFRfSU5TVFJVQ1RJ
T04oKTsKKyAgICB9CiAgICAgREVGSU5FX09QQ09ERShvcF9qbmxlc3NlcSkgewogICAgICAgICAv
KiBqbmxlc3NlcSBzcmMxKHIpIHNyYzIocikgdGFyZ2V0KG9mZnNldCkKIApJbmRleDogSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAJKHJldmlzaW9uIDUxNzA0KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1MCw2ICsyNTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9qbmVxX251bGwpCiAgICAgICAgIERFRklO
RV9PUChvcF9qbmVxX3B0cikKICAgICAgICAgREVGSU5FX09QKG9wX2pubGVzcykKKyAgICAgICAg
REVGSU5FX09QKG9wX2psZXNzKQogICAgICAgICBERUZJTkVfT1Aob3Bfam5sZXNzZXEpCiAgICAg
ICAgIERFRklORV9PUChvcF9qc3IpCiAgICAgICAgIERFRklORV9PUChvcF9qdHJ1ZSkKQEAgLTI1
OCw2ICsyNTksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IERFRklORV9PUChvcF9sb29wX2lmX2xlc3MpCiAgICAgICAgIERFRklORV9PUChvcF9sb29wX2lm
X2xlc3NlcSkKICAgICAgICAgREVGSU5FX09QKG9wX2xvb3BfaWZfdHJ1ZSkKKyAgICAgICAgREVG
SU5FX09QKG9wX2xvb3BfaWZfZmFsc2UpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hpZnQpCiAg
ICAgICAgIERFRklORV9PUChvcF9tZXRob2RfY2hlY2spCiAgICAgICAgIERFRklORV9PUChvcF9t
b2QpCkBAIC0zODksMTEgKzM5MSwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaW5zdGFuY2VvZikKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX2pmYWxzZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX2pubGVzcykKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2psZXNzKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfam5sZXNzZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9qdHJ1ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaWZfbGVz
cykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2xvb3BfaWZfbGVzc2VxKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfbG9vcF9pZl90cnVlKQorICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfbG9vcF9pZl9mYWxzZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2xzaGlmdCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21ldGhvZF9jaGVjaykKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX21vZCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9u
IDUxNzA0KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MzYsNiArNzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbmVx
X251bGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2puZXFfcHRyKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qbmxlc3MoSW5zdHJ1Y3Rpb24qKTsKKyAg
ICAgICAgdm9pZCBlbWl0X29wX2psZXNzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9qbmxlc3NlcShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfanNyKElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qdHJ1ZShJbnN0cnVjdGlvbiopOwpA
QCAtNzQ0LDYgKzc0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3Bf
bG9vcF9pZl9sZXNzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb29wX2lm
X2xlc3NlcShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9vcF9pZl90cnVl
KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9sb29wX2lmX2ZhbHNlKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sc2hpZnQoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX21ldGhvZF9jaGVjayhJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfbW9kKEluc3RydWN0aW9uKik7CkBAIC04MTgsMTEgKzgyMCwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9pbnN0YW5jZW9mKEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX2pmYWxzZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9qbmxlc3MoSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1pdFNsb3df
b3Bfamxlc3MoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfam5sZXNzZXEoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfanRy
dWUoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAg
ICAgIHZvaWQgZW1pdFNsb3dfb3BfbG9vcF9pZl9sZXNzKEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3Bf
aWZfbGVzc2VxKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xvb3BfaWZfdHJ1ZShJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9sb29wX2lmX2ZhbHNlKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2xzaGlmdChJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9tZXRob2RfY2hlY2soSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfbW9kKEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJ
VEFyaXRobWV0aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAkocmV2aXNpb24gNTE3MDQpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJp
dGhtZXRpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw2ICsxNDgsNjkgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pubGVzcyhJbnN0cnVjdGlvbgogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihaZXJvLCByZWdUMCksIHRhcmdldCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29w
X2psZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQg
b3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDIg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBKdW1wTGlzdCBub3RJbnQz
Mk9wMTsKKyAgICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKKworICAgIC8vIEludDMyIGxlc3MuCisg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKKyAgICAgICAgZW1p
dExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAgICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKKyAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihHcmVhdGVyVGhhbiwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50
T3BlcmFuZChvcDEpLmFzSW50MzIoKSkpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AyKSkgeworICAgICAgICBlbWl0TG9hZChvcDEsIHJl
Z1QxLCByZWdUMCk7CisgICAgICAgIG5vdEludDMyT3AxLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOworICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKExlc3NUaGFuLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJ
bnQzMigpKSksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdExvYWQyKG9wMSwg
cmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIG5vdEludDMyT3AxLmFw
cGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkp
OworICAgICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihMZXNz
VGhhbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKKyAgICB9CisKKyAgICBpZiAoIXN1cHBvcnRz
RmxvYXRpbmdQb2ludCgpKSB7CisgICAgICAgIGFkZFNsb3dDYXNlKG5vdEludDMyT3AxKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2Uobm90SW50MzJPcDIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEp1bXAgZW5kID0ganVtcCgpOworCisgICAgLy8gRG91YmxlIGxlc3MuCisgICAgZW1pdEJp
bmFyeURvdWJsZU9wKG9wX2psZXNzLCB0YXJnZXQsIG9wMSwgb3AyLCBPcGVyYW5kVHlwZXMoKSwg
bm90SW50MzJPcDEsIG5vdEludDMyT3AyLCAhaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQo
b3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSB8fCAhaXNPcGVyYW5kQ29u
c3RhbnRJbW1lZGlhdGVJbnQob3AyKSk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9qbGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIHVuc2lnbmVkIG9w
MSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgb3AyID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgaWYgKCFzdXBwb3J0c0Zsb2F0
aW5nUG9pbnQoKSkgeworICAgICAgICBpZiAoIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50
KG9wMSkgJiYgIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpCisgICAgICAgICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGludDMyIGNoZWNrCisgICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gaW50MzIgY2hlY2sKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWlzT3Bl
cmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMSkpIHsKKyAgICAgICAgICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gZG91YmxlIGNoZWNrCisgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIGludDMyIGNoZWNrCisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW1tZWRpYXRlSW50KG9wMSkgfHwgIWlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikp
CisgICAgICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGRvdWJsZSBjaGVjaworICAgIH0K
KworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzcyk7CisgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQob3AxKTsKKyAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIpOwor
ICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIo
Tm9uWmVybywgcmVnVDApLCB0YXJnZXQpOworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3Nl
cShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2lnbmVkIG9wMSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC04MzEsNiArODk0LDEwIEBAIHZv
aWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoT3Bjb2RlSUQgb3AKICAgICAgICAgICAgICAgICBl
bWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwogICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJl
Z1QyKSwgZHN0KTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ugb3Bf
amxlc3M6CisgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKKyAg
ICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbiwgZnBSZWdU
MiwgZnBSZWdUMCksIGRzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIG9wX2pubGVzc2VxOgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBS
ZWdUMik7CiAgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1Ro
YW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIGRzdCk7CkBAIC04ODQsNiArOTUxLDEw
IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoT3Bjb2RlSUQgb3AKICAgICAgICAgICAg
ICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwogICAgICAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1Qx
LCBmcFJlZ1QwKSwgZHN0KTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2Ugb3Bfamxlc3M6CisgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1Qx
KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbiwg
ZnBSZWdUMCwgZnBSZWdUMSksIGRzdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIG9wX2pubGVzc2VxOgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9w
MiwgZnBSZWdUMSk7CiAgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91Ymxl
TGVzc1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIGRzdCk7CkBAIC0xNDU1LDYg
KzE1MjYsMTkxIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxlc3MoSW5zdHJ1Y3Rpb24KICAg
ICB9CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2psZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CisKKyAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBj
YXNlcyBpbiB0aGUgZmFzdCBwYXRoOgorICAgIC8vIC0gaW50IGltbWVkaWF0ZSB0byBjb25zdGFu
dCBpbnQgaW1tZWRpYXRlCisgICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGludCBp
bW1lZGlhdGUKKyAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVkaWF0ZQorCisgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsKKyAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW1tZWRpYXRlSW50ZWdlcihyZWdUMCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
aW50MzJfdCBvcDJpbW0gPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQob3AyKTsKKyNl
bHNlCisgICAgICAgIGludDMyX3Qgb3AyaW1tID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNJbW1l
ZGlhdGU6OnJhd1ZhbHVlKGdldENvbnN0YW50T3BlcmFuZChvcDIpKSk7CisjZW5kaWYKKyAgICAg
ICAgYWRkSnVtcChicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAsIEltbTMyKG9wMmltbSkpLCB0YXJn
ZXQpOworICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQob3AxKSkg
eworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOworICAgICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldENvbnN0YW50T3BlcmFuZEltbWVk
aWF0ZUludChvcDEpOworI2Vsc2UKKyAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihKU0ltbWVkaWF0ZTo6cmF3VmFsdWUoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkp
KTsKKyNlbmRpZgorICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCByZWdUMSwg
SW1tMzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOworICAgICAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKKworICAgICAgICBhZGRKdW1wKGJy
YW5jaDMyKExlc3NUaGFuLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KK30KKwordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgdW5zaWduZWQg
b3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBvcDIg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICAvLyBXZSBnZW5lcmF0ZSBp
bmxpbmUgY29kZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgorICAg
IC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKKyAg
ICAvLyAtIGNvbnN0YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCisg
ICAgLy8gLSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgor
CisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW1tZWRpYXRlSW50KG9wMikpIHsKKyAgICAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOworCisgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQo
KSkgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBKdW1wIGZhaWwxID0gZW1pdEp1
bXBJZk5vdEltbWVkaWF0ZU51bWJlcihyZWdUMCk7CisgICAgICAgICAgICBhZGRQdHIodGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVn
VDAsIGZwUmVnVDApOworI2Vsc2UKKyAgICAgICAgICAgIEp1bXAgZmFpbDE7CisgICAgICAgICAg
ICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKG9wMSkpCisgICAgICAgICAg
ICAgICAgZmFpbDEgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKworICAgICAgICAgICAg
SnVtcCBmYWlsMiA9IGNoZWNrU3RydWN0dXJlKHJlZ1QwLCBtX2dsb2JhbERhdGEtPm51bWJlclN0
cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICBsb2FkRG91YmxlKEFkZHJlc3MocmVnVDAsIE9C
SkVDVF9PRkZTRVRPRihKU051bWJlckNlbGwsIG1fdmFsdWUpKSwgZnBSZWdUMCk7CisjZW5kaWYK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRDb25zdGFudE9w
ZXJhbmQob3AyKS5hc0ludDMyKCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
bW92ZShJbW0zMihvcDJpbW0pLCByZWdUMSk7CisgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0Rv
dWJsZShyZWdUMSwgZnBSZWdUMSk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaERvdWJsZShEb3VibGVMZXNzVGhhbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CisK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9q
bmxlc3MpKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBmYWlsMS5saW5rKHRo
aXMpOworI2Vsc2UKKyAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1l
ZGlhdGUob3AxKSkKKyAgICAgICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOworICAgICAgICAg
ICAgZmFpbDIubGluayh0aGlzKTsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgSklUU3R1
YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2psZXNzKTsKKyAgICAgICAgc3R1YkNhbGwuYWRk
QXJndW1lbnQocmVnVDApOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIsIHJlZ1Qy
KTsKKyAgICAgICAgc3R1YkNhbGwuY2FsbCgpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDApLCB0YXJnZXQpOworCisgICAgfSBlbHNlIGlmIChpc09w
ZXJhbmRDb25zdGFudEltbWVkaWF0ZUludChvcDEpKSB7CisgICAgICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsKKworICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGVtaXRKdW1wSWZOb3RJbW1lZGlh
dGVOdW1iZXIocmVnVDEpOworICAgICAgICAgICAgYWRkUHRyKHRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgcmVnVDEpOworICAgICAgICAgICAgbW92ZVB0clRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsK
KyNlbHNlCisgICAgICAgICAgICBKdW1wIGZhaWwxOworICAgICAgICAgICAgaWYgKCFtX2NvZGVC
bG9jay0+aXNLbm93bk5vdEltbWVkaWF0ZShvcDIpKQorICAgICAgICAgICAgICAgIGZhaWwxID0g
ZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEp1
bXAgZmFpbDIgPSBjaGVja1N0cnVjdHVyZShyZWdUMSwgbV9nbG9iYWxEYXRhLT5udW1iZXJTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgbG9hZERvdWJsZShBZGRyZXNzKHJlZ1QxLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSksIGZwUmVnVDEpOworI2VuZGlmCisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0Q29uc3RhbnRPcGVy
YW5kKG9wMSkuYXNJbnQzMigpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1v
dmUoSW1tMzIob3AxaW1tKSwgcmVnVDApOworICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3Vi
bGUocmVnVDAsIGZwUmVnVDApOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hEb3VibGUoRG91YmxlTGVzc1RoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOworCisg
ICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3Bfam5s
ZXNzKSk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgZmFpbDEubGluayh0aGlz
KTsKKyNlbHNlCisgICAgICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRp
YXRlKG9wMikpCisgICAgICAgICAgICAgICAgZmFpbDEubGluayh0aGlzKTsKKyAgICAgICAgICAg
IGZhaWwyLmxpbmsodGhpcyk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIEpJVFN0dWJD
YWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzcyk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFy
Z3VtZW50KG9wMSwgcmVnVDIpOworICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSk7
CisgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QwKSwgdGFyZ2V0KTsKKworICAgIH0gZWxzZSB7CisgICAgICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50
KCkpIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGVtaXRK
dW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDApOworICAgICAgICAgICAgSnVtcCBmYWlsMiA9
IGVtaXRKdW1wSWZOb3RJbW1lZGlhdGVOdW1iZXIocmVnVDEpOworICAgICAgICAgICAgSnVtcCBm
YWlsMyA9IGVtaXRKdW1wSWZJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKKyAgICAgICAgICAgIGFk
ZFB0cih0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZFB0cih0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICAgICAgICAgIG1vdmVQdHJUb0RvdWJs
ZShyZWdUMCwgZnBSZWdUMCk7CisgICAgICAgICAgICBtb3ZlUHRyVG9Eb3VibGUocmVnVDEsIGZw
UmVnVDEpOworI2Vsc2UKKyAgICAgICAgICAgIEp1bXAgZmFpbDE7CisgICAgICAgICAgICBpZiAo
IW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKG9wMSkpCisgICAgICAgICAgICAgICAg
ZmFpbDEgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKworICAgICAgICAgICAgSnVtcCBm
YWlsMjsKKyAgICAgICAgICAgIGlmICghbV9jb2RlQmxvY2stPmlzS25vd25Ob3RJbW1lZGlhdGUo
b3AyKSkKKyAgICAgICAgICAgICAgICBmYWlsMiA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDEp
OworCisgICAgICAgICAgICBKdW1wIGZhaWwzID0gY2hlY2tTdHJ1Y3R1cmUocmVnVDAsIG1fZ2xv
YmFsRGF0YS0+bnVtYmVyU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgIEp1bXAgZmFpbDQg
PSBjaGVja1N0cnVjdHVyZShyZWdUMSwgbV9nbG9iYWxEYXRhLT5udW1iZXJTdHJ1Y3R1cmUuZ2V0
KCkpOworICAgICAgICAgICAgbG9hZERvdWJsZShBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNOdW1iZXJDZWxsLCBtX3ZhbHVlKSksIGZwUmVnVDApOworICAgICAgICAgICAgbG9hZERv
dWJsZShBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNOdW1iZXJDZWxsLCBtX3ZhbHVl
KSksIGZwUmVnVDEpOworI2VuZGlmCisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaERvdWJsZShEb3VibGVMZXNzVGhhbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CisK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9q
bmxlc3MpKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBmYWlsMS5saW5rKHRo
aXMpOworICAgICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKKyAgICAgICAgICAgIGZhaWwzLmxp
bmsodGhpcyk7CisjZWxzZQorICAgICAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+aXNLbm93bk5v
dEltbWVkaWF0ZShvcDEpKQorICAgICAgICAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CisgICAg
ICAgICAgICBpZiAoIW1fY29kZUJsb2NrLT5pc0tub3duTm90SW1tZWRpYXRlKG9wMikpCisgICAg
ICAgICAgICAgICAgZmFpbDIubGluayh0aGlzKTsKKyAgICAgICAgICAgIGZhaWwzLmxpbmsodGhp
cyk7CisgICAgICAgICAgICBmYWlsNC5saW5rKHRoaXMpOworI2VuZGlmCisgICAgICAgIH0KKwor
ICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CisgICAgICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGN0aV9vcF9qbGVzcyk7CisgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1Qw
KTsKKyAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOworICAgICAgICBzdHViQ2Fs
bC5jYWxsKCk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb3RaZXJv
LCByZWdUMCksIHRhcmdldCk7CisgICAgfQorfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3Nl
cShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVuc2lnbmVkIG9wMSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCShyZXZpc2lvbiA1MTcwNCkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDcgKzQ1NCw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9sb29wX2lmX2xlc3MoSW5zdHIKICAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBpbnQzMiBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gaW50MzIgY2hlY2sKIAot
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9sb29wX2lmX2xlc3MpOworICAg
IEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qbGVzcyk7CiAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQob3AxKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChvcDIpOwogICAgIHN0
dWJDYWxsLmNhbGwoKTsKQEAgLTc0Myw2ICs3NDMsNTAgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2xvb3BfaWZfdHJ1ZShJbnN0cgogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihO
b25aZXJvLCByZWdUMCksIHRhcmdldCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2xvb3BfaWZf
ZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBj
b25kID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdFRpbWVvdXRD
aGVjaygpOworCisgICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsKKworICAgIEp1bXAg
aXNUcnVlID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QxLCBJbW0zMihKU1ZhbHVlOjpUcnVlVGFnKSk7
CisgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDEsIEltbTMyKEpTVmFsdWU6OkZhbHNl
VGFnKSksIHRhcmdldCk7CisKKyAgICBKdW1wIGlzTm90SW50ZWdlciA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMSwgSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICBKdW1wIGlzVHJ1ZTIg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEltbTMyKDApKTsKKyAgICBhZGRKdW1wKGp1bXAo
KSwgdGFyZ2V0KTsKKworICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgeworICAgICAg
ICBpc05vdEludGVnZXIubGluayh0aGlzKTsKKworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihBYm92ZSwgcmVnVDEsIEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKworICAgICAgICB6
ZXJvRG91YmxlKGZwUmVnVDApOworICAgICAgICBlbWl0TG9hZERvdWJsZShjb25kLCBmcFJlZ1Qx
KTsKKyAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlRXF1YWxPclVub3JkZXJlZCwg
ZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CisgICAgfSBlbHNlCisgICAgICAgIGFkZFNsb3dD
YXNlKGlzTm90SW50ZWdlcik7CisKKyAgICBpc1RydWUubGluayh0aGlzKTsKKyAgICBpc1RydWUy
LmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2lmX2ZhbHNlKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit7CisgICAgdW5zaWduZWQgY29uZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKKworICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9qdHJ1ZSk7CisgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
Y29uZCk7CisgICAgc3R1YkNhbGwuY2FsbCgpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMCksIHRhcmdldCk7Cit9CisKIHZvaWQgSklUOjplbWl0X29wX3Jl
c29sdmVfYmFzZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9yZXNvbHZlX2Jhc2UpOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA1MTcwNCkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMTksMTkgKzExMTksNiBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkLCByZWdpc3Rlcl9maWxlCiAgICAgdGhyb3dTdGFja092ZXJmbG93
RXJyb3Iob2xkQ2FsbEZyYW1lLCBzdGFja0ZyYW1lLmdsb2JhbERhdGEsIFJldHVybkFkZHJlc3NQ
dHIob2xkQ2FsbEZyYW1lLT5yZXR1cm5QQygpKSwgU1RVQl9SRVRVUk5fQUREUkVTUyk7CiB9CiAK
LURFRklORV9TVFVCX0ZVTkNUSU9OKGludCwgb3BfbG9vcF9pZl9sZXNzKQotewotICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIEpTVmFsdWUgc3JjMSA9IHN0YWNr
RnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBzcmMyID0gc3RhY2tGcmFtZS5h
cmdzWzFdLmpzVmFsdWUoKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUu
Y2FsbEZyYW1lOwotCi0gICAgYm9vbCByZXN1bHQgPSBqc0xlc3MoY2FsbEZyYW1lLCBzcmMxLCBz
cmMyKTsKLSAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KIERFRklORV9TVFVCX0ZVTkNUSU9OKGludCwgb3BfbG9vcF9pZl9sZXNzZXEpCiB7
CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwpAQCAtMjA5NywxOSArMjA4
NCw2IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKLURFRklORV9TVFVCX0ZVTkNUSU9OKGlu
dCwgb3BfbG9vcF9pZl90cnVlKQotewotICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0Zy
YW1lKTsKLQotICAgIEpTVmFsdWUgc3JjMSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7
Ci0KLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotCi0g
ICAgYm9vbCByZXN1bHQgPSBzcmMxLnRvQm9vbGVhbihjYWxsRnJhbWUpOwotICAgIENIRUNLX0ZP
Ul9FWENFUFRJT05fQVRfRU5EKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAKIERFRklO
RV9TVFVCX0ZVTkNUSU9OKGludCwgb3BfbG9hZF92YXJhcmdzKQogewogICAgIFNUVUJfSU5JVF9T
VEFDS19GUkFNRShzdGFja0ZyYW1lKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lv
biA1MTcwNCkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzUsOSArMzM1LDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgaW50IEpJVF9TVFVCIGN0aV9v
cF9qbGVzc2VxKFNUVUJfQVJHU19ERUNMQVJBVElPTik7CiAgICAgaW50IEpJVF9TVFVCIGN0aV9v
cF9qdHJ1ZShTVFVCX0FSR1NfREVDTEFSQVRJT04pOwogICAgIGludCBKSVRfU1RVQiBjdGlfb3Bf
bG9hZF92YXJhcmdzKFNUVUJfQVJHU19ERUNMQVJBVElPTik7Ci0gICAgaW50IEpJVF9TVFVCIGN0
aV9vcF9sb29wX2lmX2xlc3MoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICBpbnQgSklUX1NU
VUIgY3RpX29wX2xvb3BfaWZfbGVzc2VxKFNUVUJfQVJHU19ERUNMQVJBVElPTik7Ci0gICAgaW50
IEpJVF9TVFVCIGN0aV9vcF9sb29wX2lmX3RydWUoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAg
ICBpbnQgSklUX1NUVUIgY3RpX3RpbWVvdXRfY2hlY2soU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsK
ICAgICBpbnQgSklUX1NUVUIgY3RpX2hhc19wcm9wZXJ0eShTVFVCX0FSR1NfREVDTEFSQVRJT04p
OwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX2NyZWF0ZV9hcmd1bWVudHMoU1RVQl9BUkdTX0RF
Q0xBUkFUSU9OKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkocmV2aXNpb24gNTE3MDQp
CisrKyBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MTEsNiArODExLDE4IEBAIFJlZ2lzdGVySUQqIFVuYXJ5T3BOb2RlOjplbWl0Qnl0ZWNvZGUoQnkK
ICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRVbmFyeU9wKG9wY29kZUlEKCksIGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCksIHNyYyk7CiB9CiAKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIExvZ2ljYWxOb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK3ZvaWQgTG9naWNhbE5vdE5vZGU6OmVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29u
dGV4dChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBMYWJlbCogdHJ1ZVRhcmdldCwgTGFi
ZWwqIGZhbHNlVGFyZ2V0LCBib29sIGZhbGxUaHJvdWdoTWVhbnNUcnVlKQoreworICAgIEFTU0VS
VChleHByKCktPmhhc0NvbmRpdGlvbkNvbnRleHRDb2RlZ2VuKCkpOworCisgICAgLy8gcmV2ZXJz
ZSB0aGUgdHJ1ZSBhbmQgZmFsc2UgdGFyZ2V0cworICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29u
ZGl0aW9uQ29udGV4dChleHByKCksIGZhbHNlVGFyZ2V0LCB0cnVlVGFyZ2V0LCAhZmFsbFRocm91
Z2hNZWFuc1RydWUpOworfQorCisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBC
aW5hcnkgT3BlcmF0aW9uIE5vZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIC8vIEJpbmFyeU9wTm9kZTo6ZW1pdFN0cmNhdDoKQEAgLTEwMTcsNiArMTAyOSwzNCBAQCBS
ZWdpc3RlcklEKiBMb2dpY2FsT3BOb2RlOjplbWl0Qnl0ZWNvZGUoCiAgICAgcmV0dXJuIGdlbmVy
YXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgdGVtcC5nZXQoKSk7CiB9CiAKK3Zv
aWQgTG9naWNhbE9wTm9kZTo6ZW1pdEJ5dGVjb2RlSW5Db25kaXRpb25Db250ZXh0KEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIExhYmVsKiB0cnVlVGFyZ2V0LCBMYWJlbCogZmFsc2VUYXJn
ZXQsIGJvb2wgZmFsbFRocm91Z2hNZWFuc1RydWUpCit7CisgICAgaWYgKG1fZXhwcjEtPmhhc0Nv
bmRpdGlvbkNvbnRleHRDb2RlZ2VuKCkpIHsKKyAgICAgICAgUmVmUHRyPExhYmVsPiBhZnRlckV4
cHIxID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIGlmIChtX29wZXJhdG9yID09IE9w
TG9naWNhbEFuZCkKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29u
dGV4dChtX2V4cHIxLCBhZnRlckV4cHIxLmdldCgpLCBmYWxzZVRhcmdldCwgdHJ1ZSk7CisgICAg
ICAgIGVsc2UgCisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGVJbkNvbmRpdGlvbkNvbnRl
eHQobV9leHByMSwgdHJ1ZVRhcmdldCwgYWZ0ZXJFeHByMS5nZXQoKSwgZmFsc2UpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdExhYmVsKGFmdGVyRXhwcjEuZ2V0KCkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIFJlZ2lzdGVySUQqIHRlbXAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByMSk7Cisg
ICAgICAgIGlmIChtX29wZXJhdG9yID09IE9wTG9naWNhbEFuZCkKKyAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcElmRmFsc2UodGVtcCwgZmFsc2VUYXJnZXQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUodGVtcCwgdHJ1ZVRhcmdldCk7Cisg
ICAgfQorCisgICAgaWYgKG1fZXhwcjItPmhhc0NvbmRpdGlvbkNvbnRleHRDb2RlZ2VuKCkpCisg
ICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChtX2V4cHIyLCB0cnVl
VGFyZ2V0LCBmYWxzZVRhcmdldCwgZmFsbFRocm91Z2hNZWFuc1RydWUpOworICAgIGVsc2Ugewor
ICAgICAgICBSZWdpc3RlcklEKiB0ZW1wID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIpOwor
ICAgICAgICBpZiAoZmFsbFRocm91Z2hNZWFuc1RydWUpCisgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXBJZkZhbHNlKHRlbXAsIGZhbHNlVGFyZ2V0KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHRlbXAsIHRydWVUYXJnZXQpOworICAgIH0K
K30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbmRpdGlvbmFsTm9kZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVnaXN0ZXJJRCogQ29uZGl0aW9uYWxO
b2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCogZHN0KQpAQCAtMTAyNSw4ICsxMDY1LDE0IEBAIFJlZ2lzdGVySUQqIENvbmRpdGlvbmFsTm9k
ZTo6ZW1pdEJ5dGVjb2QKICAgICBSZWZQdHI8TGFiZWw+IGJlZm9yZUVsc2UgPSBnZW5lcmF0b3Iu
bmV3TGFiZWwoKTsKICAgICBSZWZQdHI8TGFiZWw+IGFmdGVyRWxzZSA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwogCi0gICAgUmVnaXN0ZXJJRCogY29uZCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2xv
Z2ljYWwpOwotICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UoY29uZCwgYmVmb3JlRWxzZS5n
ZXQoKSk7CisgICAgaWYgKG1fbG9naWNhbC0+aGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4oKSkg
eworICAgICAgICBSZWZQdHI8TGFiZWw+IGJlZm9yZVRoZW4gPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KG1fbG9naWNh
bCwgYmVmb3JlVGhlbi5nZXQoKSwgYmVmb3JlRWxzZS5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0TGFiZWwoYmVmb3JlVGhlbi5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgUmVnaXN0ZXJJRCogY29uZCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2xvZ2ljYWwpOworICAg
ICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGNvbmQsIGJlZm9yZUVsc2UuZ2V0KCkpOwor
ICAgIH0KIAogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShuZXdEc3QuZ2V0KCksIG1fZXhwcjEpOwog
ICAgIGdlbmVyYXRvci5lbWl0SnVtcChhZnRlckVsc2UuZ2V0KCkpOwpAQCAtMTM0Myw4ICsxMzg5
LDE0IEBAIFJlZ2lzdGVySUQqIElmTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2QKICAgICAKICAg
ICBSZWZQdHI8TGFiZWw+IGFmdGVyVGhlbiA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCi0gICAg
UmVnaXN0ZXJJRCogY29uZCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2NvbmRpdGlvbik7Ci0gICAg
Z2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShjb25kLCBhZnRlclRoZW4uZ2V0KCkpOworICAgIGlm
IChtX2NvbmRpdGlvbi0+aGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4oKSkgeworICAgICAgICBS
ZWZQdHI8TGFiZWw+IGJlZm9yZVRoZW4gPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25Db250ZXh0KG1fY29uZGl0aW9uLCBiZWZvcmVU
aGVuLmdldCgpLCBhZnRlclRoZW4uZ2V0KCksIHRydWUpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dExhYmVsKGJlZm9yZVRoZW4uZ2V0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJlZ2lzdGVy
SUQqIGNvbmQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9jb25kaXRpb24pOworICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXBJZkZhbHNlKGNvbmQsIGFmdGVyVGhlbi5nZXQoKSk7CisgICAgfQogCiAg
ICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9pZkJsb2NrKTsKICAgICBnZW5lcmF0b3IuZW1p
dExhYmVsKGFmdGVyVGhlbi5nZXQoKSk7CkBAIC0xMzYyLDggKzE0MTQsMTQgQEAgUmVnaXN0ZXJJ
RCogSWZFbHNlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dAogICAgIFJlZlB0cjxMYWJlbD4gYmVmb3Jl
RWxzZSA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogICAgIFJlZlB0cjxMYWJlbD4gYWZ0ZXJFbHNl
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICBSZWdpc3RlcklEKiBjb25kID0gZ2VuZXJh
dG9yLmVtaXROb2RlKG1fY29uZGl0aW9uKTsKLSAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNl
KGNvbmQsIGJlZm9yZUVsc2UuZ2V0KCkpOworICAgIGlmIChtX2NvbmRpdGlvbi0+aGFzQ29uZGl0
aW9uQ29udGV4dENvZGVnZW4oKSkgeworICAgICAgICBSZWZQdHI8TGFiZWw+IGJlZm9yZVRoZW4g
PSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25k
aXRpb25Db250ZXh0KG1fY29uZGl0aW9uLCBiZWZvcmVUaGVuLmdldCgpLCBiZWZvcmVFbHNlLmdl
dCgpLCB0cnVlKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChiZWZvcmVUaGVuLmdldCgp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZWdpc3RlcklEKiBjb25kID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fY29uZGl0aW9uKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShj
b25kLCBiZWZvcmVFbHNlLmdldCgpKTsKKyAgICB9CiAKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUo
ZHN0LCBtX2lmQmxvY2spOwogICAgIGdlbmVyYXRvci5lbWl0SnVtcChhZnRlckVsc2UuZ2V0KCkp
OwpAQCAtMTM5Myw4ICsxNDUxLDEyIEBAIFJlZ2lzdGVySUQqIERvV2hpbGVOb2RlOjplbWl0Qnl0
ZWNvZGUoQnkKIAogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOwogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBt
X2V4cHItPmxpbmVObygpLCBtX2V4cHItPmxpbmVObygpKTsKLSAgICBSZWdpc3RlcklEKiBjb25k
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7Ci0gICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZU
cnVlKGNvbmQsIHRvcE9mTG9vcC5nZXQoKSk7CisgICAgaWYgKG1fZXhwci0+aGFzQ29uZGl0aW9u
Q29udGV4dENvZGVnZW4oKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25kaXRpb25D
b250ZXh0KG1fZXhwciwgdG9wT2ZMb29wLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSwgZmFs
c2UpOworICAgIGVsc2UgeworICAgICAgICBSZWdpc3RlcklEKiBjb25kID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fZXhwcik7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShjb25kLCB0
b3BPZkxvb3AuZ2V0KCkpOworICAgIH0KIAogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUt
PmJyZWFrVGFyZ2V0KCkpOwogICAgIHJldHVybiByZXN1bHQuZ2V0KCk7CkBAIC0xNDE1LDggKzE0
NzcsMTMgQEAgUmVnaXN0ZXJJRCogV2hpbGVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogCiAgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CiAgICAgZ2VuZXJh
dG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIG1fZXhwci0+bGluZU5vKCks
IG1fZXhwci0+bGluZU5vKCkpOwotICAgIFJlZ2lzdGVySUQqIGNvbmQgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9leHByKTsKLSAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoY29uZCwgdG9wT2ZM
b29wLmdldCgpKTsKKworICAgIGlmIChtX2V4cHItPmhhc0NvbmRpdGlvbkNvbnRleHRDb2RlZ2Vu
KCkpCisgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZUluQ29uZGl0aW9uQ29udGV4dChtX2V4cHIs
IHRvcE9mTG9vcC5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCksIGZhbHNlKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgUmVnaXN0ZXJJRCogY29uZCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoY29uZCwgdG9wT2ZMb29wLmdldCgp
KTsKKyAgICB9CiAKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgp
KTsKICAgICAKQEAgLTE0NTAsOCArMTUxNywxMiBAQCBSZWdpc3RlcklEKiBGb3JOb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvCiAKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGNvbmRpdGlvbi5nZXQo
KSk7CiAgICAgaWYgKG1fZXhwcjIpIHsKLSAgICAgICAgUmVnaXN0ZXJJRCogY29uZCA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIyKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVl
KGNvbmQsIHRvcE9mTG9vcC5nZXQoKSk7CisgICAgICAgIGlmIChtX2V4cHIyLT5oYXNDb25kaXRp
b25Db250ZXh0Q29kZWdlbigpKQorICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlSW5Db25k
aXRpb25Db250ZXh0KG1fZXhwcjIsIHRvcE9mTG9vcC5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0
KCksIGZhbHNlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBSZWdpc3RlcklEKiBjb25k
ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcjIpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRKdW1wSWZUcnVlKGNvbmQsIHRvcE9mTG9vcC5nZXQoKSk7CisgICAgICAgIH0KICAgICB9IGVs
c2UKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKHRvcE9mTG9vcC5nZXQoKSk7CiAKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiA1MTcwNCkKKysrIEphdmFTY3JpcHRDb3JlL3Bh
cnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIEFyZ3VtZW50TGlzdE5vZGU7CiAgICAgY2xhc3MgQnl0ZWNvZGVHZW5l
cmF0b3I7CiAgICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZTsKKyAgICBjbGFzcyBMYWJlbDsKICAg
ICBjbGFzcyBQcm9wZXJ0eUxpc3ROb2RlOwogICAgIGNsYXNzIFJlYWRNb2RpZnlSZXNvbHZlTm9k
ZTsKICAgICBjbGFzcyBSZWdpc3RlcklEOwpAQCAtMTUxLDYgKzE1Miw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb21tYU5vZGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaW1wbGVBcnJheSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0FkZCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNDb25kaXRpb25Db250ZXh0Q29kZWdl
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGVtaXRC
eXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdlbmVyYXRvciYsIExhYmVsKiwgTGFi
ZWwqLCBib29sKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAKICAgICAgICAgdmlydHVhbCBF
eHByZXNzaW9uTm9kZSogc3RyaXBVbmFyeVBsdXMoKSB7IHJldHVybiB0aGlzOyB9CiAKQEAgLTc1
Nyw2ICs3NjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAg
RXhwcmVzc2lvbk5vZGUqIGV4cHIoKSB7IHJldHVybiBtX2V4cHI7IH0KKyAgICAgICAgY29uc3Qg
RXhwcmVzc2lvbk5vZGUqIGV4cHIoKSBjb25zdCB7IHJldHVybiBtX2V4cHI7IH0KIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKTsKQEAgLTc4OCw2ICs3OTMsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBjbGFzcyBMb2dpY2FsTm90Tm9kZSA6IHB1YmxpYyBVbmFyeU9wTm9kZSB7
CiAgICAgcHVibGljOgogICAgICAgICBMb2dpY2FsTm90Tm9kZShKU0dsb2JhbERhdGEqLCBFeHBy
ZXNzaW9uTm9kZSopOworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgZW1pdEJ5dGVjb2RlSW5D
b25kaXRpb25Db250ZXh0KEJ5dGVjb2RlR2VuZXJhdG9yJiwgTGFiZWwqIHRydWVUYXJnZXQsIExh
YmVsKiBmYWxzZVRhcmdldCwgYm9vbCBmYWxsVGhyb3VnaE1lYW5zVHJ1ZSk7CisgICAgICAgIHZp
cnR1YWwgYm9vbCBoYXNDb25kaXRpb25Db250ZXh0Q29kZWdlbigpIGNvbnN0IHsgcmV0dXJuIGV4
cHIoKS0+aGFzQ29uZGl0aW9uQ29udGV4dENvZGVnZW4oKTsgfQogICAgIH07CiAKICAgICBjbGFz
cyBCaW5hcnlPcE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewpAQCAtOTUyLDYgKzk2MCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdmlydHVhbCBSZWdp
c3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDAp
OworICAgICAgICB2b2lkIGVtaXRCeXRlY29kZUluQ29uZGl0aW9uQ29udGV4dChCeXRlY29kZUdl
bmVyYXRvciYsIExhYmVsKiB0cnVlVGFyZ2V0LCBMYWJlbCogZmFsc2VUYXJnZXQsIGJvb2wgZmFs
bFRocm91Z2hNZWFuc1RydWUpOworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzQ29uZGl0aW9uQ29u
dGV4dENvZGVnZW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAgICAgRXhwcmVzc2lv
bk5vZGUqIG1fZXhwcjE7CiAgICAgICAgIEV4cHJlc3Npb25Ob2RlKiBtX2V4cHIyOwpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gNTE3MzQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0xMi0wNSAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNA
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIGNvbndheSBiZW5jaG1hcmsgc3BlbmRzIGhhbGYgaXQncyB0aW1lIGluIG9wX2xlc3MgKGp1
bXAgZnVzaW9uIGZhaWxzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzIxOTAKKworICAgICAgICAqIGZhc3QvanMvY29kZWdlbi1sb29wcy1sb2dpY2Fs
LW5vZGVzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2pzL3NjcmlwdC10ZXN0cy9jb2Rl
Z2VuLWxvb3BzLWxvZ2ljYWwtbm9kZXMuanM6IFVwZGF0ZSB0byB0ZXN0IHNvbWUgbmV3bHkKKyAg
ICAgICAgc2Vuc2l0aXZlIGNhc2VzIG9mIGNvZGVnZW4gdGhhdCB3ZXJlIG5vdCBhbHJlYWR5IGNv
dmVyZWQuCisKIDIwMDktMTItMDUgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEd1c3Rhdm8gTm9yb25oYS4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvY29kZWdlbi1sb29wcy1sb2dpY2FsLW5vZGVzLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2NvZGVnZW4tbG9vcHMtbG9naWNhbC1u
b2Rlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDUxNzA0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9jb2RlZ2VuLWxvb3BzLWxvZ2ljYWwtbm9kZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2ICsyNyw3NyBAQCBQQVNTIGRvd2hpbGVfYW5kX2VxKCkgaXMgdHJ1ZQogUEFTUyBk
b3doaWxlX2FuZF9uZXEoKSBpcyB0cnVlCiBQQVNTIGRvd2hpbGVfYW5kX2xlc3MoKSBpcyB0cnVl
CiBQQVNTIGRvd2hpbGVfYW5kX2xlc3NlcSgpIGlzIHRydWUKK1BBU1Mgd2hpbGVfbm90X29yX2Vx
KCkgaXMgZmFsc2UKK1BBU1Mgd2hpbGVfbm90X29yX25lcSgpIGlzIGZhbHNlCitQQVNTIHdoaWxl
X25vdF9vcl9sZXNzKCkgaXMgZmFsc2UKK1BBU1Mgd2hpbGVfbm90X29yX2xlc3NlcSgpIGlzIGZh
bHNlCitQQVNTIHdoaWxlX25vdF9hbmRfZXEoKSBpcyBmYWxzZQorUEFTUyB3aGlsZV9ub3RfYW5k
X25lcSgpIGlzIGZhbHNlCitQQVNTIHdoaWxlX25vdF9hbmRfbGVzcygpIGlzIGZhbHNlCitQQVNT
IHdoaWxlX25vdF9hbmRfbGVzc2VxKCkgaXMgZmFsc2UKK1BBU1MgZm9yX25vdF9vcl9lcSgpIGlz
IGZhbHNlCitQQVNTIGZvcl9ub3Rfb3JfbmVxKCkgaXMgZmFsc2UKK1BBU1MgZm9yX25vdF9vcl9s
ZXNzKCkgaXMgZmFsc2UKK1BBU1MgZm9yX25vdF9vcl9sZXNzZXEoKSBpcyBmYWxzZQorUEFTUyBm
b3Jfbm90X2FuZF9lcSgpIGlzIGZhbHNlCitQQVNTIGZvcl9ub3RfYW5kX25lcSgpIGlzIGZhbHNl
CitQQVNTIGZvcl9ub3RfYW5kX2xlc3MoKSBpcyBmYWxzZQorUEFTUyBmb3Jfbm90X2FuZF9sZXNz
ZXEoKSBpcyBmYWxzZQorUEFTUyBkb3doaWxlX25vdF9vcl9lcSgpIGlzIGZhbHNlCitQQVNTIGRv
d2hpbGVfbm90X29yX25lcSgpIGlzIGZhbHNlCitQQVNTIGRvd2hpbGVfbm90X29yX2xlc3MoKSBp
cyBmYWxzZQorUEFTUyBkb3doaWxlX25vdF9vcl9sZXNzZXEoKSBpcyBmYWxzZQorUEFTUyBkb3do
aWxlX25vdF9hbmRfZXEoKSBpcyBmYWxzZQorUEFTUyBkb3doaWxlX25vdF9hbmRfbmVxKCkgaXMg
ZmFsc2UKK1BBU1MgZG93aGlsZV9ub3RfYW5kX2xlc3MoKSBpcyBmYWxzZQorUEFTUyBkb3doaWxl
X25vdF9hbmRfbGVzc2VxKCkgaXMgZmFsc2UKK1BBU1MgZmxvYXRfd2hpbGVfb3JfZXEoKSBpcyB0
cnVlCitQQVNTIGZsb2F0X3doaWxlX29yX25lcSgpIGlzIHRydWUKK1BBU1MgZmxvYXRfd2hpbGVf
b3JfbGVzcygpIGlzIHRydWUKK1BBU1MgZmxvYXRfd2hpbGVfb3JfbGVzc2VxKCkgaXMgdHJ1ZQor
UEFTUyBmbG9hdF93aGlsZV9hbmRfZXEoKSBpcyB0cnVlCitQQVNTIGZsb2F0X3doaWxlX2FuZF9u
ZXEoKSBpcyB0cnVlCitQQVNTIGZsb2F0X3doaWxlX2FuZF9sZXNzKCkgaXMgdHJ1ZQorUEFTUyBm
bG9hdF93aGlsZV9hbmRfbGVzc2VxKCkgaXMgdHJ1ZQorUEFTUyBmbG9hdF9mb3Jfb3JfZXEoKSBp
cyB0cnVlCitQQVNTIGZsb2F0X2Zvcl9vcl9uZXEoKSBpcyB0cnVlCitQQVNTIGZsb2F0X2Zvcl9v
cl9sZXNzKCkgaXMgdHJ1ZQorUEFTUyBmbG9hdF9mb3Jfb3JfbGVzc2VxKCkgaXMgdHJ1ZQorUEFT
UyBmbG9hdF9mb3JfYW5kX2VxKCkgaXMgdHJ1ZQorUEFTUyBmbG9hdF9mb3JfYW5kX25lcSgpIGlz
IHRydWUKK1BBU1MgZmxvYXRfZm9yX2FuZF9sZXNzKCkgaXMgdHJ1ZQorUEFTUyBmbG9hdF9mb3Jf
YW5kX2xlc3NlcSgpIGlzIHRydWUKK1BBU1MgZmxvYXRfZG93aGlsZV9vcl9lcSgpIGlzIHRydWUK
K1BBU1MgZmxvYXRfZG93aGlsZV9vcl9uZXEoKSBpcyB0cnVlCitQQVNTIGZsb2F0X2Rvd2hpbGVf
b3JfbGVzcygpIGlzIHRydWUKK1BBU1MgZmxvYXRfZG93aGlsZV9vcl9sZXNzZXEoKSBpcyB0cnVl
CitQQVNTIGZsb2F0X2Rvd2hpbGVfYW5kX2VxKCkgaXMgdHJ1ZQorUEFTUyBmbG9hdF9kb3doaWxl
X2FuZF9uZXEoKSBpcyB0cnVlCitQQVNTIGZsb2F0X2Rvd2hpbGVfYW5kX2xlc3MoKSBpcyB0cnVl
CitQQVNTIGZsb2F0X2Rvd2hpbGVfYW5kX2xlc3NlcSgpIGlzIHRydWUKK1BBU1MgZmxvYXRfd2hp
bGVfbm90X29yX2VxKCkgaXMgZmFsc2UKK1BBU1MgZmxvYXRfd2hpbGVfbm90X29yX25lcSgpIGlz
IGZhbHNlCitQQVNTIGZsb2F0X3doaWxlX25vdF9vcl9sZXNzKCkgaXMgZmFsc2UKK1BBU1MgZmxv
YXRfd2hpbGVfbm90X29yX2xlc3NlcSgpIGlzIGZhbHNlCitQQVNTIGZsb2F0X3doaWxlX25vdF9h
bmRfZXEoKSBpcyBmYWxzZQorUEFTUyBmbG9hdF93aGlsZV9ub3RfYW5kX25lcSgpIGlzIGZhbHNl
CitQQVNTIGZsb2F0X3doaWxlX25vdF9hbmRfbGVzcygpIGlzIGZhbHNlCitQQVNTIGZsb2F0X3do
aWxlX25vdF9hbmRfbGVzc2VxKCkgaXMgZmFsc2UKK1BBU1MgZmxvYXRfZm9yX25vdF9vcl9lcSgp
IGlzIGZhbHNlCitQQVNTIGZsb2F0X2Zvcl9ub3Rfb3JfbmVxKCkgaXMgZmFsc2UKK1BBU1MgZmxv
YXRfZm9yX25vdF9vcl9sZXNzKCkgaXMgZmFsc2UKK1BBU1MgZmxvYXRfZm9yX25vdF9vcl9sZXNz
ZXEoKSBpcyBmYWxzZQorUEFTUyBmbG9hdF9mb3Jfbm90X2FuZF9lcSgpIGlzIGZhbHNlCitQQVNT
IGZsb2F0X2Zvcl9ub3RfYW5kX25lcSgpIGlzIGZhbHNlCitQQVNTIGZsb2F0X2Zvcl9ub3RfYW5k
X2xlc3MoKSBpcyBmYWxzZQorUEFTUyBmbG9hdF9mb3Jfbm90X2FuZF9sZXNzZXEoKSBpcyBmYWxz
ZQorUEFTUyBmbG9hdF9kb3doaWxlX25vdF9vcl9lcSgpIGlzIGZhbHNlCitQQVNTIGZsb2F0X2Rv
d2hpbGVfbm90X29yX25lcSgpIGlzIGZhbHNlCitQQVNTIGZsb2F0X2Rvd2hpbGVfbm90X29yX2xl
c3MoKSBpcyBmYWxzZQorUEFTUyBmbG9hdF9kb3doaWxlX25vdF9vcl9sZXNzZXEoKSBpcyBmYWxz
ZQorUEFTUyBmbG9hdF9kb3doaWxlX25vdF9hbmRfZXEoKSBpcyBmYWxzZQorUEFTUyBmbG9hdF9k
b3doaWxlX25vdF9hbmRfbmVxKCkgaXMgZmFsc2UKK1BBU1MgZmxvYXRfZG93aGlsZV9ub3RfYW5k
X2xlc3MoKSBpcyBmYWxzZQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNU
IENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9jb2RlZ2Vu
LWxvb3BzLWxvZ2ljYWwtbm9kZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9q
cy9zY3JpcHQtdGVzdHMvY29kZWdlbi1sb29wcy1sb2dpY2FsLW5vZGVzLmpzCShyZXZpc2lvbiA1
MTcwNCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2NvZGVnZW4tbG9vcHMt
bG9naWNhbC1ub2Rlcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMjY2LDQgKzI2Niw3OTQgQEAgZnVu
Y3Rpb24gZG93aGlsZV9hbmRfbGVzc2VxKCkKIAogc2hvdWxkQmVUcnVlKCJkb3doaWxlX2FuZF9s
ZXNzZXEoKSIpOwogCitmdW5jdGlvbiB3aGlsZV9ub3Rfb3JfZXEoKQoreworICAgIHZhciBhID0g
MDsKKyAgICB3aGlsZSAoIShhID09IDAgfHwgYSA9PSAwKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJ3aGlsZV9ub3Rfb3JfZXEo
KSIpOworCitmdW5jdGlvbiB3aGlsZV9ub3Rfb3JfbmVxKCkKK3sKKyAgICB2YXIgYSA9IDA7Cisg
ICAgd2hpbGUgKCEoYSAhPSAxIHx8IGEgIT0gMSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgid2hpbGVfbm90X29yX25lcSgpIik7
CisKK2Z1bmN0aW9uIHdoaWxlX25vdF9vcl9sZXNzKCkKK3sKKyAgICB2YXIgYSA9IDA7CisgICAg
d2hpbGUgKCEoYSA8IDEgfHwgYSA8IDEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFsc2UoIndoaWxlX25vdF9vcl9sZXNzKCkiKTsKKwor
ZnVuY3Rpb24gd2hpbGVfbm90X29yX2xlc3NlcSgpCit7CisgICAgdmFyIGEgPSAwOworICAgIHdo
aWxlICghKGEgPD0gMSB8fCBhIDw9IDEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFsc2UoIndoaWxlX25vdF9vcl9sZXNzZXEoKSIpOwor
CitmdW5jdGlvbiB3aGlsZV9ub3RfYW5kX2VxKCkKK3sKKyAgICB2YXIgYSA9IDA7CisgICAgd2hp
bGUgKCEoYSA9PSAwICYmIGEgPT0gMCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgid2hpbGVfbm90X2FuZF9lcSgpIik7CisKK2Z1
bmN0aW9uIHdoaWxlX25vdF9hbmRfbmVxKCkKK3sKKyAgICB2YXIgYSA9IDA7CisgICAgd2hpbGUg
KCEoYSAhPSAxICYmIGEgIT0gMSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBm
YWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgid2hpbGVfbm90X2FuZF9uZXEoKSIpOworCitmdW5j
dGlvbiB3aGlsZV9ub3RfYW5kX2xlc3MoKQoreworICAgIHZhciBhID0gMDsKKyAgICB3aGlsZSAo
IShhIDwgMSAmJiBhIDwgMSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworc2hvdWxkQmVGYWxzZSgid2hpbGVfbm90X2FuZF9sZXNzKCkiKTsKKworZnVuY3Rp
b24gd2hpbGVfbm90X2FuZF9sZXNzZXEoKQoreworICAgIHZhciBhID0gMDsKKyAgICB3aGlsZSAo
IShhIDw9IDEgJiYgYSA8PSAxKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzaG91bGRCZUZhbHNlKCJ3aGlsZV9ub3RfYW5kX2xlc3NlcSgpIik7CisKK2Z1
bmN0aW9uIGZvcl9ub3Rfb3JfZXEoKQoreworICAgIGZvciAodmFyIGEgPSAwOyAhKGEgPT0gMCB8
fCBhID09IDApOyApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30K
Kworc2hvdWxkQmVGYWxzZSgiZm9yX25vdF9vcl9lcSgpIik7CisKK2Z1bmN0aW9uIGZvcl9ub3Rf
b3JfbmVxKCkKK3sKKyAgICBmb3IgKHZhciBhID0gMDsgIShhICE9IDEgfHwgYSAhPSAxKTsgKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFs
c2UoImZvcl9ub3Rfb3JfbmVxKCkiKTsKKworZnVuY3Rpb24gZm9yX25vdF9vcl9sZXNzKCkKK3sK
KyAgICBmb3IgKHZhciBhID0gMDsgIShhIDwgMSB8fCBhIDwgMSk7ICkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJmb3Jfbm90X29y
X2xlc3MoKSIpOworCitmdW5jdGlvbiBmb3Jfbm90X29yX2xlc3NlcSgpCit7CisgICAgZm9yICh2
YXIgYSA9IDA7ICEoYSA8PSAxIHx8IGEgPD0gMSk7ICkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJmb3Jfbm90X29yX2xlc3NlcSgp
Iik7CisKK2Z1bmN0aW9uIGZvcl9ub3RfYW5kX2VxKCkKK3sKKyAgICBmb3IgKHZhciBhID0gMDsg
IShhID09IDAgJiYgYSA9PSAwKTsgKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFsc2UoImZvcl9ub3RfYW5kX2VxKCkiKTsKKworZnVuY3Rp
b24gZm9yX25vdF9hbmRfbmVxKCkKK3sKKyAgICBmb3IgKHZhciBhID0gMDsgIShhICE9IDEgJiYg
YSAhPSAxKTsgKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3Nob3VsZEJlRmFsc2UoImZvcl9ub3RfYW5kX25lcSgpIik7CisKK2Z1bmN0aW9uIGZvcl9ub3Rf
YW5kX2xlc3MoKQoreworICAgIGZvciAodmFyIGEgPSAwOyAhKGEgPCAxICYmIGEgPCAxKTsgKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFs
c2UoImZvcl9ub3RfYW5kX2xlc3MoKSIpOworCitmdW5jdGlvbiBmb3Jfbm90X2FuZF9sZXNzZXEo
KQoreworICAgIGZvciAodmFyIGEgPSAwOyAhKGEgPD0gMSAmJiBhIDw9IDEpOyApCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZm9y
X25vdF9hbmRfbGVzc2VxKCkiKTsKKworZnVuY3Rpb24gZG93aGlsZV9ub3Rfb3JfZXEoKQorewor
ICAgIHZhciBhID0gMDsKKyAgICB2YXIgaSA9IDA7CisgICAgZG8geworICAgICAgICBpZiAoaSA+
IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaSsrOworICAgIH0gd2hpbGUg
KCEoYSA9PSAwIHx8IGEgPT0gMCkpCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZh
bHNlKCJkb3doaWxlX25vdF9vcl9lcSgpIik7CisKK2Z1bmN0aW9uIGRvd2hpbGVfbm90X29yX25l
cSgpCit7CisgICAgdmFyIGEgPSAwOworICAgIHZhciBpID0gMDsKKyAgICBkbyB7CisgICAgICAg
IGlmIChpID4gMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpKys7CisgICAg
fSB3aGlsZSAoIShhICE9IDEgfHwgYSAhPSAxKSkKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3No
b3VsZEJlRmFsc2UoImRvd2hpbGVfbm90X29yX25lcSgpIik7CisKK2Z1bmN0aW9uIGRvd2hpbGVf
bm90X29yX2xlc3MoKQoreworICAgIHZhciBhID0gMDsKKyAgICB2YXIgaSA9IDA7CisgICAgZG8g
eworICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
aSsrOworICAgIH0gd2hpbGUgKCEoYSA8IDEgfHwgYSA8IDEpKQorICAgIHJldHVybiBmYWxzZTsK
K30KKworc2hvdWxkQmVGYWxzZSgiZG93aGlsZV9ub3Rfb3JfbGVzcygpIik7CisKK2Z1bmN0aW9u
IGRvd2hpbGVfbm90X29yX2xlc3NlcSgpCit7CisgICAgdmFyIGEgPSAwOworICAgIHZhciBpID0g
MDsKKyAgICBkbyB7CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBpKys7CisgICAgfSB3aGlsZSAoIShhIDw9IDEgfHwgYSA8PSAxKSkKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFsc2UoImRvd2hpbGVfbm90X29yX2xlc3NlcSgp
Iik7CisKK2Z1bmN0aW9uIGRvd2hpbGVfbm90X2FuZF9lcSgpCit7CisgICAgdmFyIGEgPSAwOwor
ICAgIHZhciBpID0gMDsKKyAgICBkbyB7CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBpKys7CisgICAgfSB3aGlsZSAoIShhID09IDAgJiYgYSA9
PSAwKSkKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFsc2UoImRvd2hpbGVfbm90
X2FuZF9lcSgpIik7CisKK2Z1bmN0aW9uIGRvd2hpbGVfbm90X2FuZF9uZXEoKQoreworICAgIHZh
ciBhID0gMDsKKyAgICB2YXIgaSA9IDA7CisgICAgZG8geworICAgICAgICBpZiAoaSA+IDApCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaSsrOworICAgIH0gd2hpbGUgKCEoYSAh
PSAxICYmIGEgIT0gMSkpCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJk
b3doaWxlX25vdF9hbmRfbmVxKCkiKTsKKworZnVuY3Rpb24gZG93aGlsZV9ub3RfYW5kX2xlc3Mo
KQoreworICAgIHZhciBhID0gMDsKKyAgICB2YXIgaSA9IDA7CisgICAgZG8geworICAgICAgICBp
ZiAoaSA+IDApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaSsrOworICAgIH0g
d2hpbGUgKCEoYSA8IDEgJiYgYSA8IDEpKQorICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxk
QmVGYWxzZSgiZG93aGlsZV9ub3RfYW5kX2xlc3MoKSIpOworCitmdW5jdGlvbiBkb3doaWxlX25v
dF9hbmRfbGVzc2VxKCkKK3sKKyAgICB2YXIgYSA9IDA7CisgICAgdmFyIGkgPSAwOworICAgIGRv
IHsKKyAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGkrKzsKKyAgICB9IHdoaWxlICghKGEgPD0gMSAmJiBhIDw9IDEpKQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZG93aGlsZV9ub3RfYW5kX2xlc3NlcSgpIik7CisKK2Z1
bmN0aW9uIGZsb2F0X3doaWxlX29yX2VxKCkKK3sKKyAgICB2YXIgYSA9IDAuMTsKKyAgICB3aGls
ZSAoYSA9PSAwLjEgfHwgYSA9PSAwLjEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBmYWxzZTsKK30KKworc2hvdWxkQmVUcnVlKCJmbG9hdF93aGlsZV9vcl9lcSgpIik7CisKK2Z1
bmN0aW9uIGZsb2F0X3doaWxlX29yX25lcSgpCit7CisgICAgdmFyIGEgPSAwLjE7CisgICAgd2hp
bGUgKGEgIT0gMS4xIHx8IGEgIT0gMS4xKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlVHJ1ZSgiZmxvYXRfd2hpbGVfb3JfbmVxKCkiKTsKKwor
ZnVuY3Rpb24gZmxvYXRfd2hpbGVfb3JfbGVzcygpCit7CisgICAgdmFyIGEgPSAwLjE7CisgICAg
d2hpbGUgKGEgPCAxLjEgfHwgYSA8IDEuMSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitzaG91bGRCZVRydWUoImZsb2F0X3doaWxlX29yX2xlc3MoKSIpOwor
CitmdW5jdGlvbiBmbG9hdF93aGlsZV9vcl9sZXNzZXEoKQoreworICAgIHZhciBhID0gMC4xOwor
ICAgIHdoaWxlIChhIDw9IDEuMSB8fCBhIDw9IDEuMSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZVRydWUoImZsb2F0X3doaWxlX29yX2xlc3Nl
cSgpIik7CisKK2Z1bmN0aW9uIGZsb2F0X3doaWxlX2FuZF9lcSgpCit7CisgICAgdmFyIGEgPSAw
LjE7CisgICAgd2hpbGUgKGEgPT0gMC4xICYmIGEgPT0gMC4xKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlVHJ1ZSgiZmxvYXRfd2hpbGVfYW5k
X2VxKCkiKTsKKworZnVuY3Rpb24gZmxvYXRfd2hpbGVfYW5kX25lcSgpCit7CisgICAgdmFyIGEg
PSAwLjE7CisgICAgd2hpbGUgKGEgIT0gMS4xICYmIGEgIT0gMS4xKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlVHJ1ZSgiZmxvYXRfd2hpbGVf
YW5kX25lcSgpIik7CisKK2Z1bmN0aW9uIGZsb2F0X3doaWxlX2FuZF9sZXNzKCkKK3sKKyAgICB2
YXIgYSA9IDAuMTsKKyAgICB3aGlsZSAoYSA8IDEuMSAmJiBhIDwgMS4xKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlVHJ1ZSgiZmxvYXRfd2hp
bGVfYW5kX2xlc3MoKSIpOworCitmdW5jdGlvbiBmbG9hdF93aGlsZV9hbmRfbGVzc2VxKCkKK3sK
KyAgICB2YXIgYSA9IDAuMTsKKyAgICB3aGlsZSAoYSA8PSAxLjEgJiYgYSA8PSAxLjEpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVUcnVlKCJm
bG9hdF93aGlsZV9hbmRfbGVzc2VxKCkiKTsKKworZnVuY3Rpb24gZmxvYXRfZm9yX29yX2VxKCkK
K3sKKyAgICBmb3IgKHZhciBhID0gMC4xOyBhID09IDAuMSB8fCBhID09IDAuMTsgKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlVHJ1ZSgiZmxv
YXRfZm9yX29yX2VxKCkiKTsKKworZnVuY3Rpb24gZmxvYXRfZm9yX29yX25lcSgpCit7CisgICAg
Zm9yICh2YXIgYSA9IDAuMTsgYSAhPSAxLjEgfHwgYSAhPSAxLjE7ICkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZVRydWUoImZsb2F0X2Zvcl9v
cl9uZXEoKSIpOworCitmdW5jdGlvbiBmbG9hdF9mb3Jfb3JfbGVzcygpCit7CisgICAgZm9yICh2
YXIgYSA9IDAuMTsgYSA8IDEuMSB8fCBhIDwgMS4xOyApCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVUcnVlKCJmbG9hdF9mb3Jfb3JfbGVzcygp
Iik7CisKK2Z1bmN0aW9uIGZsb2F0X2Zvcl9vcl9sZXNzZXEoKQoreworICAgIGZvciAodmFyIGEg
PSAwLjE7IGEgPD0gMS4xIHx8IGEgPD0gMS4xOyApCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVUcnVlKCJmbG9hdF9mb3Jfb3JfbGVzc2VxKCki
KTsKKworZnVuY3Rpb24gZmxvYXRfZm9yX2FuZF9lcSgpCit7CisgICAgZm9yICh2YXIgYSA9IDAu
MTsgYSA9PSAwLjEgJiYgYSA9PSAwLjE7ICkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitzaG91bGRCZVRydWUoImZsb2F0X2Zvcl9hbmRfZXEoKSIpOworCitm
dW5jdGlvbiBmbG9hdF9mb3JfYW5kX25lcSgpCit7CisgICAgZm9yICh2YXIgYSA9IDAuMTsgYSAh
PSAxLjEgJiYgYSAhPSAxLjE7ICkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzaG91bGRCZVRydWUoImZsb2F0X2Zvcl9hbmRfbmVxKCkiKTsKKworZnVuY3Rp
b24gZmxvYXRfZm9yX2FuZF9sZXNzKCkKK3sKKyAgICBmb3IgKHZhciBhID0gMC4xOyBhIDwgMS4x
ICYmIGEgPCAxLjE7ICkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitzaG91bGRCZVRydWUoImZsb2F0X2Zvcl9hbmRfbGVzcygpIik7CisKK2Z1bmN0aW9uIGZs
b2F0X2Zvcl9hbmRfbGVzc2VxKCkKK3sKKyAgICBmb3IgKHZhciBhID0gMC4xOyBhIDw9IDEuMSAm
JiBhIDw9IDEuMTsgKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3Nob3VsZEJlVHJ1ZSgiZmxvYXRfZm9yX2FuZF9sZXNzZXEoKSIpOworCitmdW5jdGlvbiBm
bG9hdF9kb3doaWxlX29yX2VxKCkKK3sKKyAgICB2YXIgYSA9IDAuMTsKKyAgICB2YXIgaSA9IDAu
MTsKKyAgICBkbyB7CisgICAgICAgIGlmIChpID4gMC4xKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGkrKzsKKyAgICB9IHdoaWxlIChhID09IDAuMSB8fCBhID09IDAuMSkKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlVHJ1ZSgiZmxvYXRfZG93aGlsZV9vcl9lcSgp
Iik7CisKK2Z1bmN0aW9uIGZsb2F0X2Rvd2hpbGVfb3JfbmVxKCkKK3sKKyAgICB2YXIgYSA9IDAu
MTsKKyAgICB2YXIgaSA9IDAuMTsKKyAgICBkbyB7CisgICAgICAgIGlmIChpID4gMC4xKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGkrKzsKKyAgICB9IHdoaWxlIChhICE9IDEu
MSB8fCBhICE9IDEuMSkKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlVHJ1ZSgiZmxv
YXRfZG93aGlsZV9vcl9uZXEoKSIpOworCitmdW5jdGlvbiBmbG9hdF9kb3doaWxlX29yX2xlc3Mo
KQoreworICAgIHZhciBhID0gMC4xOworICAgIHZhciBpID0gMC4xOworICAgIGRvIHsKKyAgICAg
ICAgaWYgKGkgPiAwLjEpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaSsrOwor
ICAgIH0gd2hpbGUgKGEgPCAxLjEgfHwgYSA8IDEuMSkKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3Nob3VsZEJlVHJ1ZSgiZmxvYXRfZG93aGlsZV9vcl9sZXNzKCkiKTsKKworZnVuY3Rpb24gZmxv
YXRfZG93aGlsZV9vcl9sZXNzZXEoKQoreworICAgIHZhciBhID0gMC4xOworICAgIHZhciBpID0g
MC4xOworICAgIGRvIHsKKyAgICAgICAgaWYgKGkgPiAwLjEpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgaSsrOworICAgIH0gd2hpbGUgKGEgPD0gMS4xIHx8IGEgPD0gMS4xKQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVUcnVlKCJmbG9hdF9kb3doaWxlX29yX2xl
c3NlcSgpIik7CisKK2Z1bmN0aW9uIGZsb2F0X2Rvd2hpbGVfYW5kX2VxKCkKK3sKKyAgICB2YXIg
YSA9IDAuMTsKKyAgICB2YXIgaSA9IDAuMTsKKyAgICBkbyB7CisgICAgICAgIGlmIChpID4gMC4x
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGkrKzsKKyAgICB9IHdoaWxlIChh
ID09IDAuMSAmJiBhID09IDAuMSkKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlVHJ1
ZSgiZmxvYXRfZG93aGlsZV9hbmRfZXEoKSIpOworCitmdW5jdGlvbiBmbG9hdF9kb3doaWxlX2Fu
ZF9uZXEoKQoreworICAgIHZhciBhID0gMC4xOworICAgIHZhciBpID0gMC4xOworICAgIGRvIHsK
KyAgICAgICAgaWYgKGkgPiAwLjEpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
aSsrOworICAgIH0gd2hpbGUgKGEgIT0gMS4xICYmIGEgIT0gMS4xKQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworc2hvdWxkQmVUcnVlKCJmbG9hdF9kb3doaWxlX2FuZF9uZXEoKSIpOworCitmdW5j
dGlvbiBmbG9hdF9kb3doaWxlX2FuZF9sZXNzKCkKK3sKKyAgICB2YXIgYSA9IDAuMTsKKyAgICB2
YXIgaSA9IDAuMTsKKyAgICBkbyB7CisgICAgICAgIGlmIChpID4gMC4xKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGkrKzsKKyAgICB9IHdoaWxlIChhIDwgMS4xICYmIGEgPCAx
LjEpCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZVRydWUoImZsb2F0X2Rvd2hpbGVf
YW5kX2xlc3MoKSIpOworCitmdW5jdGlvbiBmbG9hdF9kb3doaWxlX2FuZF9sZXNzZXEoKQorewor
ICAgIHZhciBhID0gMC4xOworICAgIHZhciBpID0gMC4xOworICAgIGRvIHsKKyAgICAgICAgaWYg
KGkgPiAwLjEpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaSsrOworICAgIH0g
d2hpbGUgKGEgPD0gMS4xICYmIGEgPD0gMS4xKQorICAgIHJldHVybiBmYWxzZTsKK30KKworc2hv
dWxkQmVUcnVlKCJmbG9hdF9kb3doaWxlX2FuZF9sZXNzZXEoKSIpOworCitmdW5jdGlvbiBmbG9h
dF93aGlsZV9ub3Rfb3JfZXEoKQoreworICAgIHZhciBhID0gMC4xOworICAgIHdoaWxlICghKGEg
PT0gMC4xIHx8IGEgPT0gMC4xKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzaG91bGRCZUZhbHNlKCJmbG9hdF93aGlsZV9ub3Rfb3JfZXEoKSIpOworCitm
dW5jdGlvbiBmbG9hdF93aGlsZV9ub3Rfb3JfbmVxKCkKK3sKKyAgICB2YXIgYSA9IDAuMTsKKyAg
ICB3aGlsZSAoIShhICE9IDEuMSB8fCBhICE9IDEuMSkpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZmxvYXRfd2hpbGVfbm90X29y
X25lcSgpIik7CisKK2Z1bmN0aW9uIGZsb2F0X3doaWxlX25vdF9vcl9sZXNzKCkKK3sKKyAgICB2
YXIgYSA9IDAuMTsKKyAgICB3aGlsZSAoIShhIDwgMS4xIHx8IGEgPCAxLjEpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFsc2UoImZsb2F0
X3doaWxlX25vdF9vcl9sZXNzKCkiKTsKKworZnVuY3Rpb24gZmxvYXRfd2hpbGVfbm90X29yX2xl
c3NlcSgpCit7CisgICAgdmFyIGEgPSAwLjE7CisgICAgd2hpbGUgKCEoYSA8PSAxLjEgfHwgYSA8
PSAxLjEpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3No
b3VsZEJlRmFsc2UoImZsb2F0X3doaWxlX25vdF9vcl9sZXNzZXEoKSIpOworCitmdW5jdGlvbiBm
bG9hdF93aGlsZV9ub3RfYW5kX2VxKCkKK3sKKyAgICB2YXIgYSA9IDAuMTsKKyAgICB3aGlsZSAo
IShhID09IDAuMSAmJiBhID09IDAuMSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZmxvYXRfd2hpbGVfbm90X2FuZF9lcSgpIik7
CisKK2Z1bmN0aW9uIGZsb2F0X3doaWxlX25vdF9hbmRfbmVxKCkKK3sKKyAgICB2YXIgYSA9IDAu
MTsKKyAgICB3aGlsZSAoIShhICE9IDEuMSAmJiBhICE9IDEuMSkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZmxvYXRfd2hpbGVf
bm90X2FuZF9uZXEoKSIpOworCitmdW5jdGlvbiBmbG9hdF93aGlsZV9ub3RfYW5kX2xlc3MoKQor
eworICAgIHZhciBhID0gMC4xOworICAgIHdoaWxlICghKGEgPCAxLjEgJiYgYSA8IDEuMSkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxz
ZSgiZmxvYXRfd2hpbGVfbm90X2FuZF9sZXNzKCkiKTsKKworZnVuY3Rpb24gZmxvYXRfd2hpbGVf
bm90X2FuZF9sZXNzZXEoKQoreworICAgIHZhciBhID0gMC4xOworICAgIHdoaWxlICghKGEgPD0g
MS4xICYmIGEgPD0gMS4xKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitzaG91bGRCZUZhbHNlKCJmbG9hdF93aGlsZV9ub3RfYW5kX2xlc3NlcSgpIik7CisK
K2Z1bmN0aW9uIGZsb2F0X2Zvcl9ub3Rfb3JfZXEoKQoreworICAgIGZvciAodmFyIGEgPSAwLjE7
ICEoYSA9PSAwLjEgfHwgYSA9PSAwLjEpOyApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZmxvYXRfZm9yX25vdF9vcl9lcSgpIik7
CisKK2Z1bmN0aW9uIGZsb2F0X2Zvcl9ub3Rfb3JfbmVxKCkKK3sKKyAgICBmb3IgKHZhciBhID0g
MC4xOyAhKGEgIT0gMS4xIHx8IGEgIT0gMS4xKTsgKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFsc2UoImZsb2F0X2Zvcl9ub3Rfb3JfbmVx
KCkiKTsKKworZnVuY3Rpb24gZmxvYXRfZm9yX25vdF9vcl9sZXNzKCkKK3sKKyAgICBmb3IgKHZh
ciBhID0gMC4xOyAhKGEgPCAxLjEgfHwgYSA8IDEuMSk7ICkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJmbG9hdF9mb3Jfbm90X29y
X2xlc3MoKSIpOworCitmdW5jdGlvbiBmbG9hdF9mb3Jfbm90X29yX2xlc3NlcSgpCit7CisgICAg
Zm9yICh2YXIgYSA9IDAuMTsgIShhIDw9IDEuMSB8fCBhIDw9IDEuMSk7ICkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJmbG9hdF9m
b3Jfbm90X29yX2xlc3NlcSgpIik7CisKK2Z1bmN0aW9uIGZsb2F0X2Zvcl9ub3RfYW5kX2VxKCkK
K3sKKyAgICBmb3IgKHZhciBhID0gMC4xOyAhKGEgPT0gMC4xICYmIGEgPT0gMC4xKTsgKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJlRmFsc2Uo
ImZsb2F0X2Zvcl9ub3RfYW5kX2VxKCkiKTsKKworZnVuY3Rpb24gZmxvYXRfZm9yX25vdF9hbmRf
bmVxKCkKK3sKKyAgICBmb3IgKHZhciBhID0gMC4xOyAhKGEgIT0gMS4xICYmIGEgIT0gMS4xKTsg
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Nob3VsZEJl
RmFsc2UoImZsb2F0X2Zvcl9ub3RfYW5kX25lcSgpIik7CisKK2Z1bmN0aW9uIGZsb2F0X2Zvcl9u
b3RfYW5kX2xlc3MoKQoreworICAgIGZvciAodmFyIGEgPSAwLjE7ICEoYSA8IDEuMSAmJiBhIDwg
MS4xKTsgKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3No
b3VsZEJlRmFsc2UoImZsb2F0X2Zvcl9ub3RfYW5kX2xlc3MoKSIpOworCitmdW5jdGlvbiBmbG9h
dF9mb3Jfbm90X2FuZF9sZXNzZXEoKQoreworICAgIGZvciAodmFyIGEgPSAwLjE7ICEoYSA8PSAx
LjEgJiYgYSA8PSAxLjEpOyApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZmxvYXRfZm9yX25vdF9hbmRfbGVzc2VxKCkiKTsKKwor
ZnVuY3Rpb24gZmxvYXRfZG93aGlsZV9ub3Rfb3JfZXEoKQoreworICAgIHZhciBhID0gMC4xOwor
ICAgIHZhciBpID0gMC4xOworICAgIGRvIHsKKyAgICAgICAgaWYgKGkgPiAwLjEpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaSsrOworICAgIH0gd2hpbGUgKCEoYSA9PSAwLjEg
fHwgYSA9PSAwLjEpKQorICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZmxv
YXRfZG93aGlsZV9ub3Rfb3JfZXEoKSIpOworCitmdW5jdGlvbiBmbG9hdF9kb3doaWxlX25vdF9v
cl9uZXEoKQoreworICAgIHZhciBhID0gMC4xOworICAgIHZhciBpID0gMC4xOworICAgIGRvIHsK
KyAgICAgICAgaWYgKGkgPiAwLjEpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
aSsrOworICAgIH0gd2hpbGUgKCEoYSAhPSAxLjEgfHwgYSAhPSAxLjEpKQorICAgIHJldHVybiBm
YWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgiZmxvYXRfZG93aGlsZV9ub3Rfb3JfbmVxKCkiKTsK
KworZnVuY3Rpb24gZmxvYXRfZG93aGlsZV9ub3Rfb3JfbGVzcygpCit7CisgICAgdmFyIGEgPSAw
LjE7CisgICAgdmFyIGkgPSAwLjE7CisgICAgZG8geworICAgICAgICBpZiAoaSA+IDAuMSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpKys7CisgICAgfSB3aGlsZSAoIShhIDwg
MS4xIHx8IGEgPCAxLjEpKQorICAgIHJldHVybiBmYWxzZTsKK30KKworc2hvdWxkQmVGYWxzZSgi
ZmxvYXRfZG93aGlsZV9ub3Rfb3JfbGVzcygpIik7CisKK2Z1bmN0aW9uIGZsb2F0X2Rvd2hpbGVf
bm90X29yX2xlc3NlcSgpCit7CisgICAgdmFyIGEgPSAwLjE7CisgICAgdmFyIGkgPSAwLjE7Cisg
ICAgZG8geworICAgICAgICBpZiAoaSA+IDAuMSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBpKys7CisgICAgfSB3aGlsZSAoIShhIDw9IDEuMSB8fCBhIDw9IDEuMSkpCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJmbG9hdF9kb3doaWxlX25vdF9vcl9s
ZXNzZXEoKSIpOworCitmdW5jdGlvbiBmbG9hdF9kb3doaWxlX25vdF9hbmRfZXEoKQoreworICAg
IHZhciBhID0gMC4xOworICAgIHZhciBpID0gMC4xOworICAgIGRvIHsKKyAgICAgICAgaWYgKGkg
PiAwLjEpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaSsrOworICAgIH0gd2hp
bGUgKCEoYSA9PSAwLjEgJiYgYSA9PSAwLjEpKQorICAgIHJldHVybiBmYWxzZTsKK30KKworc2hv
dWxkQmVGYWxzZSgiZmxvYXRfZG93aGlsZV9ub3RfYW5kX2VxKCkiKTsKKworZnVuY3Rpb24gZmxv
YXRfZG93aGlsZV9ub3RfYW5kX25lcSgpCit7CisgICAgdmFyIGEgPSAwLjE7CisgICAgdmFyIGkg
PSAwLjE7CisgICAgZG8geworICAgICAgICBpZiAoaSA+IDAuMSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpKys7CisgICAgfSB3aGlsZSAoIShhICE9IDEuMSAmJiBhICE9IDEu
MSkpCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzaG91bGRCZUZhbHNlKCJmbG9hdF9kb3doaWxl
X25vdF9hbmRfbmVxKCkiKTsKKworZnVuY3Rpb24gZmxvYXRfZG93aGlsZV9ub3RfYW5kX2xlc3Mo
KQoreworICAgIHZhciBhID0gMC4xOworICAgIHZhciBpID0gMC4xOworICAgIGRvIHsKKyAgICAg
ICAgaWYgKGkgPiAwLjEpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaSsrOwor
ICAgIH0gd2hpbGUgKCEoYSA8IDEuMSAmJiBhIDwgMS4xKSkKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3Nob3VsZEJlRmFsc2UoImZsb2F0X2Rvd2hpbGVfbm90X2FuZF9sZXNzKCkiKTsKKworZnVu
Y3Rpb24gZmxvYXRfZG93aGlsZV9ub3RfYW5kX2xlc3NlcSgpCit7CisgICAgdmFyIGEgPSAwLjE7
CisgICAgdmFyIGkgPSAwLjE7CisgICAgZG8geworICAgICAgICBpZiAoaSA+IDAuMSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpKys7CisgICAgfSB3aGlsZSAoIShhIDw9IDEu
MSAmJiBhIDw9IDEuMSkpCisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2YXIgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsK
</data>
<flag name="review"
          id="26191"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>