<?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>68430</bug_id>
          
          <creation_ts>2011-09-20 01:10:49 -0700</creation_ts>
          <short_desc>DFG JIT performs too many negative zero checks, and too many overflow checks</short_desc>
          <delta_ts>2011-09-20 13:10:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>469946</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 01:10:49 -0700</bug_when>
    <thetext>In the following constructs, the DFG JIT could perform some obvious optimizations.  Currently it doesn&apos;t.  All of these optimizations require one mechanism: backward propagation of the worst-case use kind of a value.  The DFG currently does have this mechanism, but it should.

a[b * c]
       b * c does not need to check for negative zero, since a[-0] is the same as a[0].

(a + b) | c
       a + b does not need to check for overflow.

(a * b) * c
       a * b does not need to check for negative zero, if (a * b) * c does not need to.

Finally, in the case where all of these optimizations fail and the DFG produces a double result because it believes that an overflow needs to be noted, the DFG JIT should not subsequently give up on speculation just because it sees a ValueToInt32.  It&apos;s better to just perform a conversion to integer (even if it&apos;s not cheap) then it is to OSR exit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469950</commentid>
    <comment_count>1</comment_count>
      <attachid>107974</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 01:19:03 -0700</bug_when>
    <thetext>Created attachment 107974
the patch

This is a nice win.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;BetterNumberConv&quot; at /Volumes/Data/pizlo/senary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Used 1 benchmark iteration per VM
invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting
benchmark execution times with 95% confidence intervals in milliseconds.

                                            TipOfTree            BetterNumberConv                                
SunSpider:
   3d-cube                                7.8791+-0.2642    ?     8.0094+-0.2106       ? might be 1.0165x slower
   3d-morph                               8.4468+-1.3923          7.5334+-0.1758         might be 1.1212x faster
   3d-raytrace                            7.6742+-0.2178    ?     7.7203+-0.2013       ?
   access-binary-trees                    2.3274+-0.0733    ?     2.4202+-0.1349       ? might be 1.0399x slower
   access-fannkuch                       11.5724+-0.2467    ?    11.6143+-0.2553       ?
   access-nbody                           3.9548+-0.0935          3.9532+-0.1059       
   access-nsieve                          2.6385+-0.0683    ?     2.6655+-0.0824       ? might be 1.0102x slower
   bitops-3bit-bits-in-byte               1.6935+-0.0437    ?     1.7216+-0.0415       ? might be 1.0166x slower
   bitops-bits-in-byte                    2.8113+-0.0587    ?     2.8335+-0.0522       ?
   bitops-bitwise-and                     3.8596+-0.2919          3.6143+-0.0739         might be 1.0679x faster
   bitops-nsieve-bits                     6.0068+-0.7020          5.4780+-0.1282         might be 1.0965x faster
   controlflow-recursive                  2.0247+-0.0389    ?     2.0689+-0.0863       ? might be 1.0218x slower
   crypto-aes                             7.0917+-0.3823          6.9152+-0.2227         might be 1.0255x faster
   crypto-md5                             2.8758+-0.0891    ?     3.4291+-0.7067       ? might be 1.1924x slower
   crypto-sha1                            2.2817+-0.0575          2.2302+-0.0499         might be 1.0231x faster
   date-format-tofte                     10.4814+-0.2338         10.0192+-0.2975         might be 1.0461x faster
   date-format-xparb                      9.0143+-0.2438          8.9260+-0.2320       
   math-cordic                            6.1861+-0.0999    ?     6.4139+-0.1781       ? might be 1.0368x slower
   math-partial-sums                      7.5917+-0.1730          7.5370+-0.3952       
   math-spectral-norm                     2.6855+-0.0724    ?     2.7436+-0.0586       ? might be 1.0216x slower
   regexp-dna                            11.1408+-0.1574    ^    10.7841+-0.1643       ^ definitely 1.0331x faster
   string-base64                          5.9814+-0.2405    ?     6.6745+-0.8607       ? might be 1.1159x slower
   string-fasta                           6.9674+-0.2165    ?     7.0385+-0.1657       ? might be 1.0102x slower
   string-tagcloud                       12.3302+-0.2751         12.1328+-0.4081         might be 1.0163x faster
   string-unpack-code                    19.4090+-0.7800         18.4574+-0.5016         might be 1.0516x faster
   string-validate-input                  6.8779+-0.2438          6.7539+-0.3112         might be 1.0184x faster

   &lt;arithmetic&gt;                           6.6078+-0.0965          6.5265+-0.0744         might be 1.0125x faster
   &lt;geometric&gt;                            5.4311+-0.0597          5.4225+-0.0752       
   &lt;harmonic&gt;                             4.4166+-0.0361    ?     4.4481+-0.0708       ?

                                            TipOfTree            BetterNumberConv                                
V8:
   crypto                                79.0186+-2.6448    ^    72.7767+-0.4733       ^ definitely 1.0858x faster
   deltablue                            248.5009+-1.6062        248.1938+-3.3008       
   earley-boyer                          98.2168+-1.0922         97.2901+-1.1711       
   raytrace                              70.8401+-0.7682         69.8204+-0.6046         might be 1.0146x faster
   regexp                               106.8140+-0.3316    ?   107.0127+-0.6624       ?
   richards                             220.1409+-1.9328        218.8661+-1.5256       
   splay                                 99.3371+-0.8613    ?   100.6593+-0.9449       ? might be 1.0133x slower

   &lt;arithmetic&gt;                         131.8383+-0.4309    ^   130.6599+-0.6989       ^ definitely 1.0090x faster
   &lt;geometric&gt;                          118.0035+-0.4232    ^   116.3769+-0.5123       ^ definitely 1.0140x faster
   &lt;harmonic&gt;                           107.7174+-0.5083    ^   105.6953+-0.4600       ^ definitely 1.0191x faster

                                            TipOfTree            BetterNumberConv                                
Kraken:
   ai-astar                             632.9047+-6.0172    ?   640.0044+-8.9559       ? might be 1.0112x slower
   audio-beat-detection                 477.4563+-3.0349    ^   466.4551+-1.2944       ^ definitely 1.0236x faster
   audio-dft                            440.9264+-11.6726   ?   442.5051+-9.4084       ?
   audio-fft                            370.5988+-1.4298        370.5765+-2.1601       
   audio-oscillator                     322.8622+-2.8701    ^   294.8488+-4.3636       ^ definitely 1.0950x faster
   imaging-darkroom                     420.7992+-1.5369    ?   421.2799+-3.3969       ?
   imaging-desaturate                   227.0660+-12.3934       219.7338+-1.5312         might be 1.0334x faster
   imaging-gaussian-blur                587.2874+-5.2972    ?   589.8138+-3.2451       ?
   json-parse-financial                  48.8475+-0.8010         48.7679+-0.5812       
   json-stringify-tinderbox              69.5481+-0.8916         69.4690+-0.3177       
   stanford-crypto-aes                  145.9134+-1.5163        142.6462+-1.7818         might be 1.0229x faster
   stanford-crypto-ccm                  112.4743+-1.3139        110.8871+-1.5005         might be 1.0143x faster
   stanford-crypto-pbkdf2               403.8542+-7.7887    ^   379.5667+-5.4956       ^ definitely 1.0640x faster
   stanford-crypto-sha256-iterative     149.8354+-1.2315    ^    86.8713+-2.7902       ^ definitely 1.7248x faster

   &lt;arithmetic&gt;                         315.0267+-1.3871    ^   305.9590+-0.9802       ^ definitely 1.0296x faster
   &lt;geometric&gt;                          246.1830+-1.3091    ^   232.9846+-0.9188       ^ definitely 1.0566x faster
   &lt;harmonic&gt;                           174.9720+-1.1707    ^   163.1923+-0.9627       ^ definitely 1.0722x faster

                                            TipOfTree            BetterNumberConv                                
All benchmarks:
   &lt;arithmetic&gt;                         117.1286+-0.4081    ^   114.2071+-0.3557       ^ definitely 1.0256x faster
   &lt;geometric&gt;                           26.7537+-0.1693    ^    26.2405+-0.2139       ^ definitely 1.0196x faster
   &lt;harmonic&gt;                             7.7919+-0.0622    ?     7.8369+-0.1218       ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469951</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-20 01:21:52 -0700</bug_when>
    <thetext>Attachment 107974 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGPropagator.cpp:146:  Missing spaces around /  [whitespace/operators] [3]
Source/JavaScriptCore/dfg/DFGPropagator.cpp:146:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGPropagator.cpp:153:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGPropagator.cpp:253:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 4 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469954</commentid>
    <comment_count>3</comment_count>
      <attachid>107976</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 01:30:24 -0700</bug_when>
    <thetext>Created attachment 107976
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469971</commentid>
    <comment_count>4</comment_count>
      <attachid>107980</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 02:41:59 -0700</bug_when>
    <thetext>Created attachment 107980
the patch - fix bugs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470091</commentid>
    <comment_count>5</comment_count>
      <attachid>107980</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-20 08:48:37 -0700</bug_when>
    <thetext>Comment on attachment 107980
the patch - fix bugs

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

r=me, but remove the silly whitespace change :D

&gt; Source/JavaScriptCore/dfg/DFGNode.h:201
&gt; -#define NodeIdMask           0xFFF
&gt; -#define NodeResultMask      0xF000
&gt; -#define NodeMustGenerate   0x10000 // set on nodes that have side effects, and may not trivially be removed by DCE.
&gt; -#define NodeIsConstant     0x20000
&gt; -#define NodeIsJump         0x40000
&gt; -#define NodeIsBranch       0x80000
&gt; -#define NodeIsTerminal    0x100000
&gt; -#define NodeHasVarArgs    0x200000
&gt; -#define NodeClobbersWorld 0x400000
&gt; -#define NodeMightClobber  0x800000
&gt; +#define NodeIdMask            0xFFF
&gt; +#define NodeResultMask       0xF000
&gt; +#define NodeMustGenerate    0x10000 // set on nodes that have side effects, and may not trivially be removed by DCE.
&gt; +#define NodeIsConstant      0x20000
&gt; +#define NodeIsJump          0x40000
&gt; +#define NodeIsBranch        0x80000
&gt; +#define NodeIsTerminal     0x100000
&gt; +#define NodeHasVarArgs     0x200000
&gt; +#define NodeClobbersWorld  0x400000
&gt; +#define NodeMightClobber   0x800000

Die whitespace die!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470266</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 13:10:31 -0700</bug_when>
    <thetext>Landed in r95563</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107974</attachid>
            <date>2011-09-20 01:19:03 -0700</date>
            <delta_ts>2011-09-20 01:30:24 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>arithmodeflags_patch_1.diff</filename>
            <type>text/plain</type>
            <size>60930</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU1MTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzQgQEAK
KzIwMTEtMDktMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHBlcmZvcm1zIHRvbyBtYW55IG5lZ2F0aXZlIHplcm8gY2hlY2tzLCBhbmQgdG9vIG1h
bnkKKyAgICAgICAgb3ZlcmZsb3cgY2hlY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02ODQzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIGNvbXByZWhlbnNpdmUgc3VwcG9y
dCBmb3IgZGVjaWRpbmcgaG93IHRvIHBlcmZvcm0gYW4KKyAgICAgICAgYXJpdGhtZXRpYyBvcGVy
YXRpb25zIGJhc2VkIG9uIGEgY29tYmluYXRpb24gb2Ygb3ZlcmZsb3cgcHJvZmlsaW5nLAorICAg
ICAgICBuZWdhdGl2ZSB6ZXJvIHByb2ZpbGluZywgdmFsdWUgcHJvZmlsaW5nLCBhbmQgYSBzdGF0
aWMgYW5hbHlzaXMgb2YKKyAgICAgICAgaG93IHRoZSByZXN1bHRzIG9mIHRoZXNlIG9wZXJhdGlv
bnMgZ2V0IHVzZWQuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgNzIlIHNwZWVkLXVwIG9u
IHN0YW5mb3JkLWNyeXB0by1zaGEyNTYtaXRlcmF0aXZlLCBhbmQgYQorICAgICAgICAyLjUlIHNw
ZWVkLXVwIG9uIHRoZSBLcmFrZW4gYXZlcmFnZSwgYSAxLjQlIHNwZWVkLXVwIG9uIHRoZSBWOAor
ICAgICAgICBnZW9tZWFuLCBhbmQgbmV1dHJhbCBvbiBTdW5TcGlkZXIuIEl0J3MgYWxzbyBhbiA4
LjUlIHNwZWVkLXVwIG9uCisgICAgICAgIFY4LWNyeXB0bywgYmVjYXVzZSBhcHBhcmVudHkgZXZl
cnl0aGluZyB3ZSBkbyBzcGVlZHMgdXAgY3J5cHRvLgorCisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6dG9JbnQz
Mik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnRvTnVtYmVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aXNTbWFsbEludDMyQ29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjp2YWx1ZU9mSW50MzJDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OndlYWtseVByZWRpY3RJbnQzMik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1ha2VTYWZlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnByb2Nlc3NQaGlTdGFjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVCYXNp
Y0FyaXRoT3ApOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
bm9kZVVzZWRBc051bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUNhblRydW5jYXRlSW50
ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6bm9kZUNhblNwZWN1bGF0ZUludGVnZXIpOgorICAgICAgICAoSlND
OjpERkc6OmFyaXRoTm9kZUZsYWdzQXNTdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyaXRoTm9kZUZsYWdzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpyYXdBcml0aE5vZGVGbGFncyk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6YXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmFy
aXRoTm9kZUZsYWdzRm9yQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0QXJp
dGhOb2RlRmxhZyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bWVyZ2VBcml0aE5vZGVGbGFn
cyk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BhZ2F0b3I6OmZpeHBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpp
c05vdE5lZ1plcm8pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmlzTm90WmVybyk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3Mp
OgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdz
Rm9yd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhO
b2RlRmxhZ3NCYWNrd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFn
YXRlTm9kZVByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9w
YWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6
OnByb3BhZ2F0ZVByZWRpY3Rpb25zQmFja3dhcmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXh1cE5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmZpeHVwKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wYWdhdG9yOjpzdGFydEluZGV4Rm9yQ2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OmVuZEluZGV4Rm9yUHVyZUNTRSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6cHVyZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
Y2xvYmJlcnNXb3JsZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6c2V0UmVwbGFj
ZW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpsb2NhbENTRSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVW
YWx1ZVJlY292ZXJ5Rm9yKToKKwogMjAxMS0wOS0xOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5l
bmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0b1ByaW1pdGl2ZSBmcm9tIEpTQ2Vs
bApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDk1NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw5ICsxOTMsNiBAQCBwcml2
YXRlOgogICAgICAgICBpZiAobm9kZS5vcCA9PSBVSW50MzJUb051bWJlcikKICAgICAgICAgICAg
IHJldHVybiBub2RlLmNoaWxkMSgpOwogCi0gICAgICAgIGlmIChub2RlLm9wID09IFVJbnQzMlRv
TnVtYmVyU2FmZSkKLSAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwotCiAgICAgICAg
IC8vIENoZWNrIGZvciBudW1lcmljIGNvbnN0YW50cyBib3hlZCBhcyBKU1ZhbHVlcy4KICAgICAg
ICAgaWYgKG5vZGUub3AgPT0gSlNDb25zdGFudCkgewogICAgICAgICAgICAgSlNWYWx1ZSB2ID0g
dmFsdWVPZkpTQ29uc3RhbnQoaW5kZXgpOwpAQCAtMjIxLDcgKzIxOCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobm9kZS5jb25zdGFudE51bWJlcigp
KTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBhZGRUb0dyYXBoKFZhbHVlVG9OdW1iZXIs
IGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoVmFsdWVUb051bWJlciwgT3BJbmZv
KE5vZGVVc2VCb3R0b20pLCBpbmRleCk7CiAgICAgfQogCiAgICAgTm9kZUluZGV4IGdldEpTQ29u
c3RhbnQodW5zaWduZWQgY29uc3RhbnQpCkBAIC0yNjQsMTAgKzI2MSw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIGludDMyX3QgaW50VmFsdWUgPSB2YWx1ZS5hc0ludDMyKCk7CiAgICAgICAgIHJldHVy
biBpbnRWYWx1ZSA+PSAtNSAmJiBpbnRWYWx1ZSA8PSA1OwogICAgIH0KLSAgICBib29sIGlzRG91
YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBp
c0pTQ29uc3RhbnQobm9kZUluZGV4KSAmJiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlz
TnVtYmVyKCk7Ci0gICAgfQogICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGdldHRpbmcg
Y29uc3RhbnQgdmFsdWVzLgogICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4
IGluZGV4KQogICAgIHsKQEAgLTI3OSwxNCArMjcyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgQVNT
RVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKICAgICAgICAgcmV0dXJuIHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGVJbmRleCkuYXNJbnQzMigpOwogICAgIH0KLSAgICBkb3VibGUgdmFsdWVP
ZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICBBU1NF
UlQoaXNEb3VibGVDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgZG91YmxlIHZhbHVlOwot
ICAgICAgICBib29sIG9rYXkgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmdldE51bWJl
cih2YWx1ZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQob2theSwgb2theSk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICB9CiAKICAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgSlNDb25z
dGFudCB3aXRoIHRoZSB2YWx1ZSAndW5kZWZpbmVkJy4KICAgICBOb2RlSW5kZXggY29uc3RhbnRV
bmRlZmluZWQoKQpAQCAtNDg2LDEwICs0NzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc3dp
dGNoIChub2RlUHRyLT5vcCkgewogICAgICAgICAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAg
ICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzoK
LSAgICAgICAgICAgIGNhc2UgQXJpdGhNdWxTcGVjTm90TmVnWmVybzoKLSAgICAgICAgICAgIGNh
c2UgQXJpdGhNdWxQb3NzaWJseU5lZ1plcm86Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTXVsU2Fm
ZToKKyAgICAgICAgICAgIGNhc2UgQXJpdGhNdWw6CiAgICAgICAgICAgICBjYXNlIFZhbHVlQWRk
OgogICAgICAgICAgICAgICAgIG1fcmV1c2FibGVOb2RlU3RhY2suYXBwZW5kKCZtX2dyYXBoW25v
ZGVQdHItPmNoaWxkMSgpXSk7CiAgICAgICAgICAgICAgICAgbV9yZXVzYWJsZU5vZGVTdGFjay5h
cHBlbmQoJm1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQyKCldKTsKQEAgLTUyNSw3MCArNTA3LDM4IEBA
IHByaXZhdGU6CiAgICAgICAgIHN0cm9uZ2x5UHJlZGljdChub2RlSW5kZXgsIG1fY3VycmVudElu
ZGV4KTsKICAgICB9CiAgICAgCi0gICAgTm9kZVR5cGUgbWFrZVNhZmUoTm9kZVR5cGUgb3ApCisg
ICAgTm9kZUluZGV4IG1ha2VTYWZlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAg
ICBpZiAoIW1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5k
ZXgpKQotICAgICAgICAgICAgcmV0dXJuIG9wOworICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRl
eDsKICAgICAgICAgCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmlu
dGYoIk1ha2luZyAlcyBAJWx1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzbG93LWNhc2UgY291bnRl
ciBpcyBhdCAldVxuIiwgR3JhcGg6Om9wTmFtZShvcCksIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJl
bnRJbmRleCwgbV9wcm9maWxlZEJsb2NrLT5zbG93Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7CisgICAgICAgIHByaW50ZigiTWFraW5nICVz
IEAldSBzYWZlIGF0IGJjIyV1IGJlY2F1c2Ugc2xvdy1jYXNlIGNvdW50ZXIgaXMgYXQgJXVcbiIs
IEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4LCBtX2N1cnJl
bnRJbmRleCwgbV9wcm9maWxlZEJsb2NrLT5zbG93Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAg
IHN3aXRjaCAob3ApIHsKKyAgICAgICAgc3dpdGNoIChtX2dyYXBoW25vZGVJbmRleF0ub3ApIHsK
ICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgICAgIHJldHVybiBVSW50MzJU
b051bWJlclNhZmU7CiAgICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgICAgICByZXR1cm4g
QXJpdGhBZGRTYWZlOwogICAgICAgICBjYXNlIEFyaXRoU3ViOgotICAgICAgICAgICAgcmV0dXJu
IEFyaXRoU3ViU2FmZTsKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgICAgIG1fZ3Jh
cGhbbm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgaW5pdGlhbGl6
ZSBBcml0aE11bCB0byBBcml0aE11bElnbm9yZVplcm8gYW5kIHB1c2ggaXQgdG93YXJkcwotICAg
ICAgICAgICAgLy8gc2FmZXIgdmFyaWFudHMgYXMgd2UgbGVhcm4gbW9yZSwgdW5sZXNzIHdlIGFs
cmVhZHkga25vdyB0aGF0IGl0Ci0gICAgICAgICAgICAvLyBjYW4gb3ZlcmZsb3cuIElmIGl0IGRv
ZXNuJ3Qgb3ZlcmZsb3csIHdlIGZpcnN0IHR1cm4gaXQgaW50bwotICAgICAgICAgICAgLy8gUG9z
c2libHlOZWdaZXJvIGlmIHdlIHNlZSB0aGF0IGl0IGhhZCBiZWVuIC0wIGR1cmluZyBvbGQgSklU
Ci0gICAgICAgICAgICAvLyBleGVjdXRpb24uCi0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVa
ZXJvOgorICAgICAgICBjYXNlIEFyaXRoTXVsOgogICAgICAgICAgICAgaWYgKG1fcHJvZmlsZWRC
bG9jay0+bGlrZWx5VG9UYWtlRGVlcGVzdFNsb3dDYXNlKG1fY3VycmVudEluZGV4KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gQXJpdGhNdWxTYWZlOworICAgICAgICAgICAgICAgIG1fZ3JhcGhb
bm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyB8IE5vZGVNYXlO
ZWdaZXJvKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gQXJpdGhN
dWxQb3NzaWJseU5lZ1plcm87CisgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm1l
cmdlQXJpdGhOb2RlRmxhZ3MoTm9kZU1heU5lZ1plcm8pOworICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAgICAgIHJldHVybiBW
YWx1ZUFkZFNhZmU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBQaGFudG9tOyAvLyBIYXZlIHRvIHJldHVybiBz
b21ldGhpbmcuCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IGdldFRydWVS
ZXN1bHQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ncmFw
aFtub2RlSW5kZXhdLm9wKSB7Ci0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVaZXJvOgotICAg
ICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm9wID0gQXJpdGhNdWxTcGVjTm90TmVnWmVybzsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRoTXVsUG9zc2libHlOZWdaZXJv
OgotICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm9wID0gQXJpdGhNdWxTYWZlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBpc011bHRpcGx5KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCkgewotICAgICAgICBjYXNlIEFyaXRoTXVs
U3BlY05vdE5lZ1plcm86Ci0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVaZXJvOgotICAgICAg
ICBjYXNlIEFyaXRoTXVsUG9zc2libHlOZWdaZXJvOgotICAgICAgICBjYXNlIEFyaXRoTXVsU2Fm
ZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgSlNHbG9iYWxEYXRhKiBt
X2dsb2JhbERhdGE7CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBDb2RlQmxvY2sq
IG1fcHJvZmlsZWRCbG9jazsKQEAgLTY4OSw3ICs2MzksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVNaW5NYXgoYm9vbCB1CiAgICAgfQogICAgIAogICAgIGlmIChsYXN0QXJnID09IGZp
cnN0QXJnICsgMikgewotICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChvcCwg
Z2V0VG9OdW1iZXIoZmlyc3RBcmcgKyAxKSwgZ2V0VG9OdW1iZXIoZmlyc3RBcmcgKyAyKSkpOwor
ICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChvcCwgT3BJbmZvKE5vZGVVc2VC
b3R0b20pLCBnZXRUb051bWJlcihmaXJzdEFyZyArIDEpLCBnZXRUb051bWJlcihmaXJzdEFyZyAr
IDIpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTcxMyw3ICs2NjMs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGlm
IChhYnNBcmcgPiBsYXN0QXJnKQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNvbnN0
YW50TmFOKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwg
YWRkVG9HcmFwaChBcml0aEFicywgZ2V0VG9OdW1iZXIoYWJzQXJnKSkpOworICAgICAgICAgICAg
c2V0KHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhBYnMsIE9wSW5mbyhOb2RlVXNlQm90
dG9tKSwgZ2V0VG9OdW1iZXIoYWJzQXJnKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgICAgIApAQCAtODU3LDExICs4MDcsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGlmICh2YWx1ZU9mSW50MzJDb25zdGFu
dChvcDIpICYgMHgxZikKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChC
aXRVUlNoaWZ0LCBvcDEsIG9wMik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKG1ha2VTYWZlKFVJbnQzMlRvTnVtYmVyKSwgb3Ax
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFrZVNhZmUoYWRkVG9HcmFwaChVSW50
MzJUb051bWJlciwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcDEpKTsKICAgICAgICAgICAgIH0g
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENhbm5vdCBvcHRpbWl6ZSBhdCB0aGlzIHN0YWdl
OyBzaGlmdCAmIHBvdGVudGlhbGx5IHJlYm94IGFzIGEgZG91YmxlLgogICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGFkZFRvR3JhcGgoQml0VVJTaGlmdCwgb3AxLCBvcDIpOwotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGFkZFRvR3JhcGgobWFrZVNhZmUoVUludDMyVG9OdW1iZXIpLCByZXN1bHQp
OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTYWZlKGFkZFRvR3JhcGgoVUludDMyVG9O
dW1iZXIsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgcmVzdWx0KSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0LCBQ
cmVkaWN0SW50MzIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdXJzaGlmdCk7CkBAIC04
NzMsNyArODIzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldFRvTnVtYmVyKHNyY0RzdCk7CiAg
ICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3ApOwotICAgICAgICAgICAgc2V0KHNyY0Rz
dCwgYWRkVG9HcmFwaChtYWtlU2FmZShBcml0aEFkZCksIG9wLCBvbmUoKSkpOworICAgICAgICAg
ICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgT3BJbmZvKE5vZGVV
c2VCb3R0b20pLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wcmVf
aW5jKTsKICAgICAgICAgfQogCkBAIC04ODMsNyArODMzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0VG9O
dW1iZXIoc3JjRHN0KTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcCk7CiAgICAg
ICAgICAgICBzZXQocmVzdWx0LCBvcCk7Ci0gICAgICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dy
YXBoKG1ha2VTYWZlKEFyaXRoQWRkKSwgb3AsIG9uZSgpKSk7CisgICAgICAgICAgICBzZXQoc3Jj
RHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBPcEluZm8oTm9kZVVzZUJvdHRvbSks
IG9wLCBvbmUoKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Bvc3RfaW5jKTsKICAg
ICAgICAgfQogCkBAIC04OTEsNyArODQxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldFRvTnVt
YmVyKHNyY0RzdCk7CiAgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3ApOwotICAgICAg
ICAgICAgc2V0KHNyY0RzdCwgYWRkVG9HcmFwaChtYWtlU2FmZShBcml0aFN1YiksIG9wLCBvbmUo
KSkpOworICAgICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1
YiwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9wcmVfZGVjKTsKICAgICAgICAgfQogCkBAIC05MDEsNyArODUxLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUlu
ZGV4IG9wID0gZ2V0VG9OdW1iZXIoc3JjRHN0KTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJ
bnQzMihvcCk7CiAgICAgICAgICAgICBzZXQocmVzdWx0LCBvcCk7Ci0gICAgICAgICAgICBzZXQo
c3JjRHN0LCBhZGRUb0dyYXBoKG1ha2VTYWZlKEFyaXRoU3ViKSwgb3AsIG9uZSgpKSk7CisgICAg
ICAgICAgICBzZXQoc3JjRHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBPcEluZm8o
Tm9kZVVzZUJvdHRvbSksIG9wLCBvbmUoKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3Bvc3RfZGVjKTsKICAgICAgICAgfQogCkBAIC05MTcsMTcgKzg2NywxMCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgd2Vha2x5UHJl
ZGljdEludDMyKG9wMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIElmIGJvdGggaW5wdXRzIGFyZSBtdWx0aXBsaWVzLCB0aGVuIHdlIG5lZWQgdG8gbWFrZSBz
dXJlIHRvIHBsYXkKLSAgICAgICAgICAgIC8vIGl0IHNhZmUgd2l0aCAtMC4KLSAgICAgICAgICAg
IGlmIChpc011bHRpcGx5KG9wMSkgJiYgaXNNdWx0aXBseShvcDIpKSB7Ci0gICAgICAgICAgICAg
ICAgZ2V0VHJ1ZVJlc3VsdChvcDEpOwotICAgICAgICAgICAgICAgIGdldFRydWVSZXN1bHQob3Ay
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fZ3JhcGhb
b3AxXS5oYXNOdW1iZXJSZXN1bHQoKSAmJiBtX2dyYXBoW29wMl0uaGFzTnVtYmVyUmVzdWx0KCkp
Ci0gICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFk
ZFRvR3JhcGgobWFrZVNhZmUoQXJpdGhBZGQpLCB0b051bWJlcihvcDEpLCB0b051bWJlcihvcDIp
KSk7CisgICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgdG9O
dW1iZXIob3AxKSwgdG9OdW1iZXIob3AyKSkpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaCht
YWtlU2FmZShWYWx1ZUFkZCksIG9wMSwgb3AyKSk7CisgICAgICAgICAgICAgICAgc2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoVmFsdWVBZGQs
IE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9hZGQpOwogICAgICAgICB9CiAKQEAgLTkzOSwyMiArODgyLDE1IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB3ZWFrbHlQ
cmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gRm9yIHRoZSBsZWZ0IGNoaWxkIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBuZWdh
dGl2ZSB6ZXJvLAotICAgICAgICAgICAgLy8gc2luY2UgLTAgLSAwIGlzIC0wLiAgSWYgdGhlIHJp
Z2h0IGNoaWxkIGlzIC0wIHRoZW4gaXQgZG9lc24ndAotICAgICAgICAgICAgLy8gbWF0dGVyLCBz
aW5jZSAwIC0gLTAgaXMgMCBhbmQgMCAtIDAgaXMgMC4KLSAgICAgICAgICAgIGdldFRydWVSZXN1
bHQob3AxKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgobWFrZVNhZmUoQXJpdGhTdWIpLCBvcDEsIG9wMikp
OworICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VT
YWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIp
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdWIpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9tdWw6IHsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIGJlIGZhbmN5IGhlcmUg
YW5kIHNraXAgdGhlIGdldFRydWVSZXN1bHQsIGluc3RlYWQgbWFraW5nCi0gICAgICAgICAgICAv
LyBnZXRUcnVlUmVzdWx0IG9wZXJhdGUgdHJhbnNpdGl2ZWx5LiBCdXQgd2UgZG8gdGhpcyB0aGUg
c2ltcGxlIHdheSwgZm9yCi0gICAgICAgICAgICAvLyBub3cuCi0gICAgICAgICAgICBOb2RlSW5k
ZXggb3AxID0gZ2V0VHJ1ZVJlc3VsdChnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VHJ1ZVJlc3VsdChn
ZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0gICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChtYWtlU2Fm
ZShBcml0aE11bElnbm9yZVplcm8pLCBvcDEsIG9wMikpOworICAgICAgICAgICAgLy8gTXVsdGlw
bHkgcmVxdWlyZXMgdGhhdCB0aGUgaW5wdXRzIGFyZSBub3QgdHJ1bmNhdGVkLCB1bmZvcnR1bmF0
ZWx5LgorICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvTnVtYmVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRv
TnVtYmVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgc2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJp
dGhNdWwsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9tdWwpOwogICAgICAgICB9CiAKQEAgLTEwODksNyArMTAyNSw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9w
dXRfYnlfdmFsOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCB2YWx1ZSA9IGdldFRydWVSZXN1bHQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RBcnJheShiYXNl
KTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CiAKQEAgLTExNDYs
NyArMTA4Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggdmFsdWUgPSBnZXRUcnVlUmVzdWx0KGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAg
Ym9vbCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5vcGVyYW5kOwpAQCAtMTE2Nyw3
ICsxMTAzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3ZhcjogewotICAgICAgICAgICAg
Tm9kZUluZGV4IHZhbHVlID0gZ2V0VHJ1ZVJlc3VsdChnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9i
YWxWYXIsIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgdmFsdWUpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2dsb2JhbF92YXIpOwogICAgICAgICB9CkBA
IC0xNDQ5LDE1ICsxMzg1LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNr
KCkKICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0g
U2V0TG9jYWwgfHwgbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFBoaSk7CiAKICAg
ICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSAmbV9ncmFwaFtlbnRyeS5tX3BoaV07Ci0gICAgICAg
ICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gQW55IGxpdmUgU2V0TG9jYWwgc2hvdWxkIGVuc3VyZSB0aGF0IGl0IGdldHMgdGhl
IHRydWUgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB0aGlzIG1lYW5z
IHRoYXQgQXJpdGhNdWxzIGRpc3Rpbmd1aXNoIGJldHdlZW4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gbmVnYXRpdmUgemVybyBhbmQgcG9zaXRpdmUgemVyby4KLSAgICAgICAgICAgICAgICAgICAg
Z2V0VHJ1ZVJlc3VsdChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCkpOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwaGlOb2RlLT5yZWZDb3VudCgpKQogICAg
ICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0gICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDEoKSA9PSBOb05vZGUpIHsKICAg
ICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5maXhlZC5jaGlsZDEgPSB2YWx1ZUluUHJl
ZGVjZXNzb3I7CkBAIC0xNTQyLDEwICsxNDcxLDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2UoKQogICAgIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJzID0gbV9wcmVzZXJ2ZWRWYXJzOwogICAg
IG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CiAKLSNpZiBFTkFC
TEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKLSNl
bmRpZgotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5NTQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDEwIEBAIHZv
aWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICAgICAgaGFzUHJpbnRl
ZCA9IG5vZGUuY2hpbGQxKCkgIT0gTm9Ob2RlOwogICAgIH0KIAorICAgIGlmIChub2RlLmhhc0Fy
aXRoTm9kZUZsYWdzKCkpIHsKKyAgICAgICAgcHJpbnRmKCIlcyVzIiwgaGFzUHJpbnRlZCA/ICIs
ICIgOiAiIiwgYXJpdGhOb2RlRmxhZ3NBc1N0cmluZyhub2RlLnJhd0FyaXRoTm9kZUZsYWdzKCkp
KTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgfQogICAgIGlmIChub2RlLmhhc1Zh
ck51bWJlcigpKSB7CiAgICAgICAgIHByaW50ZigiJXN2YXIldSIsIGhhc1ByaW50ZWQgPyAiLCAi
IDogIiIsIG5vZGUudmFyTnVtYmVyKCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gOTU0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjksMTAgKzcyOSw3IEBAIHZv
aWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVCYXMKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKLSAgICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzoKLSAgICBjYXNlIEFy
aXRoTXVsUG9zc2libHlOZWdaZXJvOgotICAgIGNhc2UgQXJpdGhNdWxTcGVjTm90TmVnWmVybzoK
LSAgICBjYXNlIEFyaXRoTXVsU2FmZTogeworICAgIGNhc2UgQXJpdGhNdWw6IHsKICAgICAgICAg
b3ZlcmZsb3cuYXBwZW5kKG1faml0LmJyYW5jaE11bDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxv
dywgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKSk7CiAgICAgICAgIG92ZXJmbG93LmFwcGVu
ZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikpOwog
ICAgICAgICBicmVhazsKQEAgLTgyMywxMCArODIwLDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9y
Ojpub25TcGVjdWxhdGl2ZUJhcwogICAgICAgICBtX2ppdC5zdWJEb3VibGUodG1wMkZQUiwgdG1w
MUZQUik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgY2FzZSBBcml0aE11bEln
bm9yZVplcm86Ci0gICAgY2FzZSBBcml0aE11bFBvc3NpYmx5TmVnWmVybzoKLSAgICBjYXNlIEFy
aXRoTXVsU3BlY05vdE5lZ1plcm86Ci0gICAgY2FzZSBBcml0aE11bFNhZmU6CisgICAgY2FzZSBB
cml0aE11bDoKICAgICAgICAgbV9qaXQubXVsRG91YmxlKHRtcDJGUFIsIHRtcDFGUFIpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHJldmlzaW9uIDk1NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMyBAQAogI2lmbmRlZiBERkdOb2Rl
X2gKICNkZWZpbmUgREZHTm9kZV9oCiAKKyNpbmNsdWRlIDx3dGYvQm91bmRzQ2hlY2tlZFBvaW50
ZXIuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAogLy8gRW1pdCB2YXJpb3VzIGxvZ2dp
bmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcgdGhlIGRhdGFm
bG93IGdyYXBocy4KICNkZWZpbmUgRU5BQkxFX0RGR19ERUJVR19WRVJCT1NFIDAKKy8vIEVtaXQg
ZHVtcHMgZHVyaW5nIHByb3BhZ2F0aW9uLCBpbiBhZGRpdGlvbiB0byBqdXN0IGFmdGVyLgorI2Rl
ZmluZSBFTkFCTEVfREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UgMAogLy8gRW1pdCBsb2dn
aW5nIGZvciBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIGF0IGV2ZXJ5IG5vZGUsIG5vdCBqdXN0
IG5vZGVzIHRoYXQKIC8vIGFjdHVhbGx5IGhhcyBzcGVjdWxhdGlvbiBjaGVja3MuCiAjZGVmaW5l
IEVOQUJMRV9ERkdfVkVSQk9TRV9WQUxVRV9SRUNPVkVSSUVTIDAKQEAgLTEwNSwxOCArMTA4LDk3
IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4OwogfTsKIAordHlwZWRl
ZiB1bnNpZ25lZCBBcml0aE5vZGVGbGFnczsKKyNkZWZpbmUgTm9kZVVzZUJvdHRvbSAgICAgIDB4
MDAKKyNkZWZpbmUgTm9kZVVzZWRBc051bWJlciAgIDB4MDEKKyNkZWZpbmUgTm9kZU5lZWRzTmVn
WmVybyAgIDB4MDIKKyNkZWZpbmUgTm9kZVVzZWRBc01hc2sgICAgIDB4MDMKKyNkZWZpbmUgTm9k
ZU1heU92ZXJmbG93ICAgIDB4MDQKKyNkZWZpbmUgTm9kZU1heU5lZ1plcm8gICAgIDB4MDgKKyNk
ZWZpbmUgTm9kZUJlaGF2aW9yTWFzayAgIDB4MGMKKworc3RhdGljIGlubGluZSBib29sIG5vZGVV
c2VkQXNOdW1iZXIoQXJpdGhOb2RlRmxhZ3MgZmxhZ3MpCit7CisgICAgcmV0dXJuICEhKGZsYWdz
ICYgTm9kZVVzZWRBc051bWJlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQoreworICAgIHJldHVybiAhbm9kZVVz
ZWRBc051bWJlcihmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuSWdub3Jl
TmVnYXRpdmVaZXJvKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQoreworICAgIHJldHVybiAhKGZsYWdz
ICYgTm9kZU5lZWRzTmVnWmVybyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuU3Bl
Y3VsYXRlSW50ZWdlcihBcml0aE5vZGVGbGFncyBmbGFncykKK3sKKyAgICBpZiAoZmxhZ3MgJiBO
b2RlTWF5T3ZlcmZsb3cpCisgICAgICAgIHJldHVybiAhbm9kZVVzZWRBc051bWJlcihmbGFncyk7
CisgICAgCisgICAgaWYgKGZsYWdzICYgTm9kZU1heU5lZ1plcm8pCisgICAgICAgIHJldHVybiBu
b2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKGZsYWdzKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworI2lmbmRlZiBOREVCVUcKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2Rl
RmxhZ3NBc1N0cmluZyhBcml0aE5vZGVGbGFncyBmbGFncykKK3sKKyAgICBpZiAoIWZsYWdzKQor
ICAgICAgICByZXR1cm4gIjxlbXB0eT4iOworCisgICAgc3RhdGljIGNvbnN0IGludCBzaXplID0g
NjQ7CisgICAgc3RhdGljIGNoYXIgZGVzY3JpcHRpb25bc2l6ZV07CisgICAgQm91bmRzQ2hlY2tl
ZFBvaW50ZXI8Y2hhcj4gcHRyKGRlc2NyaXB0aW9uLCBzaXplKTsKKyAgICAKKyAgICBib29sIGhh
c1ByaW50ZWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoZmxhZ3MgJiBOb2RlVXNlZEFzTnVtYmVy
KSB7CisgICAgICAgIHB0ci5zdHJjYXQoIlVzZWRBc051bSIpOworICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGZsYWdzICYgTm9kZU5lZWRzTmVnWmVybykg
eworICAgICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsK
KyAgICAgICAgcHRyLnN0cmNhdCgiTmVlZHNOZWdaZXJvIik7CisgICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5T3ZlcmZsb3cpIHsK
KyAgICAgICAgaWYgKGhhc1ByaW50ZWQpCisgICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Cisg
ICAgICAgIHB0ci5zdHJjYXQoIk1heU92ZXJmbG93Iik7CisgICAgICAgIGhhc1ByaW50ZWQgPSB0
cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5TmVnWmVybykgeworICAg
ICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKKyAgICAg
ICAgcHRyLnN0cmNhdCgiTWF5TmVnWmVybyIpOworICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgKnB0cisrID0gMDsKKyAgICAKKyAgICByZXR1cm4gZGVzY3JpcHRp
b247Cit9CisjZW5kaWYKKwogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51bSAoYmVsb3cp
IGFyZSBjb21wb3NlZCBvZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkgbm9uZSkKIC8v
IGFuZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2VuZXJhdGUsIGlz
IGNvbnN0YW50LCBldGMpLgotI2RlZmluZSBOb2RlSWRNYXNrICAgICAgICAgICAweEZGRgotI2Rl
ZmluZSBOb2RlUmVzdWx0TWFzayAgICAgIDB4RjAwMAotI2RlZmluZSBOb2RlTXVzdEdlbmVyYXRl
ICAgMHgxMDAwMCAvLyBzZXQgb24gbm9kZXMgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cywgYW5kIG1h
eSBub3QgdHJpdmlhbGx5IGJlIHJlbW92ZWQgYnkgRENFLgotI2RlZmluZSBOb2RlSXNDb25zdGFu
dCAgICAgMHgyMDAwMAotI2RlZmluZSBOb2RlSXNKdW1wICAgICAgICAgMHg0MDAwMAotI2RlZmlu
ZSBOb2RlSXNCcmFuY2ggICAgICAgMHg4MDAwMAotI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgICAw
eDEwMDAwMAotI2RlZmluZSBOb2RlSGFzVmFyQXJncyAgICAweDIwMDAwMAotI2RlZmluZSBOb2Rl
Q2xvYmJlcnNXb3JsZCAweDQwMDAwMAotI2RlZmluZSBOb2RlTWlnaHRDbG9iYmVyICAweDgwMDAw
MAorI2RlZmluZSBOb2RlSWRNYXNrICAgICAgICAgICAgMHhGRkYKKyNkZWZpbmUgTm9kZVJlc3Vs
dE1hc2sgICAgICAgMHhGMDAwCisjZGVmaW5lIE5vZGVNdXN0R2VuZXJhdGUgICAgMHgxMDAwMCAv
LyBzZXQgb24gbm9kZXMgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cywgYW5kIG1heSBub3QgdHJpdmlh
bGx5IGJlIHJlbW92ZWQgYnkgRENFLgorI2RlZmluZSBOb2RlSXNDb25zdGFudCAgICAgIDB4MjAw
MDAKKyNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgICAweDQwMDAwCisjZGVmaW5lIE5vZGVJc0Jy
YW5jaCAgICAgICAgMHg4MDAwMAorI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgICAgMHgxMDAwMDAK
KyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAgIDB4MjAwMDAwCisjZGVmaW5lIE5vZGVDbG9iYmVy
c1dvcmxkICAweDQwMDAwMAorI2RlZmluZSBOb2RlTWlnaHRDbG9iYmVyICAgMHg4MDAwMDAKIAog
Ly8gVGhlc2UgdmFsdWVzIHJlY29yZCB0aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG5vZGUgKGFzIGNo
ZWNrZWQgYnkgTm9kZVJlc3VsdE1hc2ssIGFib3ZlKSwgMCBmb3Igbm8gcmVzdWx0LgogI2RlZmlu
ZSBOb2RlUmVzdWx0SlMgICAgICAweDEwMDAKQEAgLTE0NywxNyArMjI5LDExIEBAIHByaXZhdGU6
CiAgICAgbWFjcm8oVmFsdWVUb0ludDMyLCBOb2RlUmVzdWx0SW50MzIgfCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgLyogVXNlZCB0byBib3ggdGhlIHJlc3VsdCBvZiBVUlNoaWZ0IG5vZGVzIChy
ZXN1bHQgaGFzIHJhbmdlIDAuLjJeMzItMSkuICovXAogICAgIG1hY3JvKFVJbnQzMlRvTnVtYmVy
LCBOb2RlUmVzdWx0TnVtYmVyKSBcCi0gICAgbWFjcm8oVUludDMyVG9OdW1iZXJTYWZlLCBOb2Rl
UmVzdWx0TnVtYmVyKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBhcml0aG1ldGljIG9wZXJh
dGlvbnMuICovXAogICAgIG1hY3JvKEFyaXRoQWRkLCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAg
bWFjcm8oQXJpdGhTdWIsIE5vZGVSZXN1bHROdW1iZXIpIFwKLSAgICBtYWNybyhBcml0aEFkZFNh
ZmUsIE5vZGVSZXN1bHROdW1iZXIpIC8qIFNhZmUgdmFyaWFudHMgYXJlIHRob3NlIHRoYXQgYXJl
IGtub3duIHRvIHRha2Ugb2xkIEpJVCBzbG93IHBhdGggKi9cCi0gICAgbWFjcm8oQXJpdGhTdWJT
YWZlLCBOb2RlUmVzdWx0TnVtYmVyKSBcCi0gICAgbWFjcm8oQXJpdGhNdWxTcGVjTm90TmVnWmVy
bywgTm9kZVJlc3VsdE51bWJlcikgLyogU3BlY3VsYXRlIHRoYXQgdGhlIHJlc3VsdCBpcyBub3Qg
bmVnYXRpdmUgemVyby4gKi8gXAotICAgIG1hY3JvKEFyaXRoTXVsSWdub3JlWmVybywgTm9kZVJl
c3VsdE51bWJlcikgLyogSWYgaXQncyBuZWdhdGl2ZSB6ZXJvLCBpZ25vcmUgaXQuICovIFwKLSAg
ICBtYWNybyhBcml0aE11bFBvc3NpYmx5TmVnWmVybywgTm9kZVJlc3VsdE51bWJlcikgLyogSXQg
ZGVmaW5pdGVseSBtYXkgYmUgbmVnYXRpdmUgemVybyBidXQgd2UgaGF2ZW4ndCBkZWNpZGVkIHdo
YXQgdG8gZG8gYWJvdXQgaXQgeWV0LiBObyBjb2RlIGdlbmVyYXRpb24gZm9yIHRoaXMgbm9kZTsg
aXQgZWl0aGVyIHR1cm5zIGludG8gQXJpdGhNdWxJZ25vcmVaZXJvIG9yIEFyaXRoTXVsU2FmZS4g
Ki8gXAotICAgIG1hY3JvKEFyaXRoTXVsU2FmZSwgTm9kZVJlc3VsdE51bWJlcikgLyogSXQgbWF5
IGJlIG5lZ2F0aXZlIHplcm8sIG9yIGl0IG1heSBwcm9kdWNlIG90aGVyIGZvcm1zIG9mIGRvdWJs
ZSwgc28gc3BlY3VsYXRlIGRvdWJsZS4gKi9cCisgICAgbWFjcm8oQXJpdGhNdWwsIE5vZGVSZXN1
bHROdW1iZXIpIFwKICAgICBtYWNybyhBcml0aERpdiwgTm9kZVJlc3VsdE51bWJlcikgXAogICAg
IG1hY3JvKEFyaXRoTW9kLCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhBYnMs
IE5vZGVSZXN1bHROdW1iZXIpIFwKQEAgLTE3Miw3ICsyNDgsNiBAQCBwcml2YXRlOgogICAgIFwK
ICAgICAvKiBBZGQgb2YgdmFsdWVzIG1heSBlaXRoZXIgYmUgYXJpdGhtZXRpYywgb3IgcmVzdWx0
IGluIHN0cmluZyBjb25jYXRlbmF0aW9uLiAqL1wKICAgICBtYWNybyhWYWx1ZUFkZCwgTm9kZVJl
c3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwKLSAgICBtYWNy
byhWYWx1ZUFkZFNhZmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWln
aHRDbG9iYmVyKSBcCiAgICAgXAogICAgIC8qIFByb3BlcnR5IGFjY2Vzcy4gKi9cCiAgICAgLyog
UHV0QnlWYWxBbGlhcyBpbmRpY2F0ZXMgYSAncHV0JyBhbGlhc2VzIGEgcHJpb3Igd3JpdGUgdG8g
dGhlIHNhbWUgcHJvcGVydHkuICovXApAQCAtMjU2LDYgKzMzMSw3IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5v
ZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIEFTU0VSVCghaGFzQXJpdGhOb2RlRmxhZ3MoKSk7CiAg
ICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKICAgICAgICAgY2hpbGRyZW4u
Zml4ZWQuY2hpbGQyID0gY2hpbGQyOwogICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBj
aGlsZDM7CkBAIC0zODYsNiArNDYyLDY2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJu
IG1fb3BJbmZvOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc0FyaXRoTm9kZUZsYWdzKCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOgor
ICAgICAgICBjYXNlIFZhbHVlVG9Eb3VibGU6CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6
CisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAg
IGNhc2UgQXJpdGhNdWw6CisgICAgICAgIGNhc2UgQXJpdGhBYnM6CisgICAgICAgIGNhc2UgQXJp
dGhNaW46CisgICAgICAgIGNhc2UgQXJpdGhNYXg6CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBBcml0aE5vZGVGbGFncyBy
YXdBcml0aE5vZGVGbGFncygpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzQXJpdGhOb2RlRmxh
Z3MoKSk7CisgICAgICAgIHJldHVybiBtX29wSW5mbzsKKyAgICB9CisgICAgCisgICAgLy8gVGhp
cyBjb3JyZWN0cyB0aGUgYXJpdGhtZXRpYyBub2RlIGZsYWdzLCBzbyB0aGF0IGlycmVsZXZhbnQg
Yml0cyBhcmUKKyAgICAvLyBpZ25vcmVkLiBJbiBwYXJ0aWN1bGFyLCBhbnl0aGluZyBvdGhlciB0
aGFuIEFyaXRoTXVsIGRvZXMgbm90IG5lZWQKKyAgICAvLyB0byBrbm93IGlmIGl0IGNhbiBzcGVj
dWxhdGUgb24gbmVnYXRpdmUgemVyby4KKyAgICBBcml0aE5vZGVGbGFncyBhcml0aE5vZGVGbGFn
cygpCisgICAgeworICAgICAgICBBcml0aE5vZGVGbGFncyByZXN1bHQgPSByYXdBcml0aE5vZGVG
bGFncygpOworICAgICAgICBpZiAob3AgPT0gQXJpdGhNdWwpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICByZXR1cm4gcmVzdWx0ICYgfk5vZGVOZWVkc05lZ1plcm87CisgICAg
fQorICAgIAorICAgIEFyaXRoTm9kZUZsYWdzIGFyaXRoTm9kZUZsYWdzRm9yQ29tcGFyZSgpCisg
ICAgeworICAgICAgICBpZiAoaGFzQXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgIHJldHVy
biBhcml0aE5vZGVGbGFncygpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzZXRBcml0aE5vZGVGbGFnKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc0FyaXRoTm9kZUZsYWdzKCkpOworICAgICAgICBtX29wSW5mbyA9IGZsYWdz
OworICAgIH0KKyAgICAKKyAgICBib29sIG1lcmdlQXJpdGhOb2RlRmxhZ3MoQXJpdGhOb2RlRmxh
Z3MgZmxhZ3MpCisgICAgeworICAgICAgICBpZiAoIWhhc0FyaXRoTm9kZUZsYWdzKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIEFyaXRoTm9kZUZsYWdzIG5ld0ZsYWdzID0g
bV9vcEluZm8gfCBmbGFnczsKKyAgICAgICAgaWYgKG5ld0ZsYWdzID09IG1fb3BJbmZvKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX29wSW5mbyA9IG5ld0ZsYWdzOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNWYXJOdW1iZXIoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG9wID09IEdldEdsb2JhbFZhciB8fCBvcCA9PSBQdXRHbG9i
YWxWYXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5j
cHAJKHJldmlzaW9uIDk1NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9w
YWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsMjcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgZml4cG9pbnQoKQogICAgIHsKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJP
U0UpCisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgIG1fZ3Jh
cGguZHVtcChtX2NvZGVCbG9jayk7CisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFVwIGhlcmUgd2Ugc3RhcnQgd2l0aCBhIGJhY2t3YXJkIHBhc3MgYmVjYXVzZSB3
ZSBzdXNwZWN0IHRoYXQgdG8gYmUKKyAgICAgICAgICAgIC8vIG1vcmUgcHJvZml0YWJsZS4KKyAg
ICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzQmFja3dhcmQoKTsKKyAgICAgICAgICAg
IGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRo
Tm9kZUZsYWdzRm9yd2FyZCgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgICAg
ICAKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIG1f
Y291bnQgPSAwOwogI2VuZGlmCiAgICAgICAgIGRvIHsKQEAgLTgzLDcgKzEwMyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBu
ZWFyLW9wdGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCiAgICAgICAgICAg
ICAvLyBERlMtc29ydGVkIGNvZGUuCi0gICAgICAgICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7Cisg
ICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQoKTsKICAgICAgICAgICAgIGlm
ICghbV9jaGFuZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC05
MiwxOSArMTEyLDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJl
cyB0d28gY2FzZXM6ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50CiAgICAg
ICAgICAgICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMg
YmFja3dhcmQgZmxvdy4KICAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAg
ICAgcHJvcGFnYXRlQmFja3dhcmQoKTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rpb25z
QmFja3dhcmQoKTsKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKICAgICAgICAgCiAgICAg
ICAgIGZpeHVwKCk7CiAgICAgICAgIAotI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyNp
ZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIHByaW50Zigi
R3JhcGggYWZ0ZXIgcHJvcGFnYXRpb24gZml4dXA6XG4iKTsKICAgICAgICAgbV9ncmFwaC5kdW1w
KG1fY29kZUJsb2NrKTsKICNlbmRpZgogCiAgICAgICAgIGxvY2FsQ1NFKCk7CiAKLSNpZiBFTkFC
TEUoREZHX0RFQlVHX1ZFUkJPU0UpCisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIENTRTpcbiIpOwogICAgICAgICBt
X2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwogI2VuZGlmCkBAIC0xMTIsMTIgKzEzMiwxNjQgQEAg
cHVibGljOgogICAgICAgICBhbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMoKTsKIAogI2lmIEVOQUJM
RShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciB2aXJ0dWFs
IHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsKKyAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciBw
cm9wYWdhdGlvbjpcbiIpOwogICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwogI2Vu
ZGlmCiAgICAgfQogICAgIAogcHJpdmF0ZToKKyAgICBib29sIGlzTm90TmVnWmVybyhOb2RlSW5k
ZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3Rh
bnQobV9jb2RlQmxvY2ssIG5vZGVJbmRleCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG1fY29k
ZUJsb2NrLCBub2RlSW5kZXgpOworICAgICAgICByZXR1cm4gdmFsdWUgPT0gMC4wICYmIDEuMC92
YWx1ZSA8IDAuMDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc05vdFplcm8oTm9kZUluZGV4IG5v
ZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG1f
Y29kZUJsb2NrLCBub2RlSW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobV9jb2RlQmxvY2ssIG5vZGVJ
bmRleCkgIT0gMC4wOworICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZUFyaXRoTm9kZUZs
YWdzKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIE5vZGVUeXBlIG9wID0g
bm9kZS5vcDsKKyAgICAgICAgQXJpdGhOb2RlRmxhZ3MgZmxhZ3MgPSAwOworICAgICAgICAKKyAg
ICAgICAgaWYgKG5vZGUuaGFzQXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgIGZsYWdzID0g
bm9kZS5yYXdBcml0aE5vZGVGbGFncygpOworICAgICAgICAKKyNpZiBFTkFCTEUoREZHX0RFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICAgJXMgQCV1OiAlcyAiLCBH
cmFwaDo6b3BOYW1lKG9wKSwgbV9jb21waWxlSW5kZXgsIGFyaXRoTm9kZUZsYWdzQXNTdHJpbmco
ZmxhZ3MpKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgZmxhZ3MgJj0gTm9kZVVzZWRBc01h
c2s7CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAg
IGNhc2UgQml0QW5kOgorICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoK
KyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAg
ICBjYXNlIEJpdFVSU2hpZnQ6IHsKKyAgICAgICAgICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgYXJl
IHBlcmZlY3RseSBoYXBweSB3aXRoIHRydW5jYXRlZCBpbnRlZ2VycywKKyAgICAgICAgICAgIC8v
IHNvIHdlIGRvbid0IHdhbnQgdG8gcHJvcGFnYXRlIGFueXRoaW5nLgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6
CisgICAgICAgIGNhc2UgVmFsdWVUb0RvdWJsZToKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJl
cjogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdl
QXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIFZhbHVlQWRk
OiB7CisgICAgICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQxKCkpIHx8IGlzTm90
TmVnWmVybyhub2RlLmNoaWxkMigpKSkKKyAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5l
ZWRzTmVnWmVybzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxh
Z3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFyaXRoU3ViOiB7CisgICAgICAgICAgICBpZiAoaXNOb3RaZXJvKG5vZGUuY2hpbGQx
KCkpIHx8IGlzTm90WmVybyhub2RlLmNoaWxkMigpKSkKKyAgICAgICAgICAgICAgICBmbGFncyAm
PSB+Tm9kZU5lZWRzTmVnWmVybzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2Rl
RmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNl
ZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdz
KGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcml0aE1pbjoKKyAgICAgICAgY2FzZSBBcml0aE1heDogeworICAgICAgICAg
ICAgZmxhZ3MgfD0gTm9kZVVzZWRBc051bWJlcjsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdz
KGZsYWdzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBcml0aEFiczogeworICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05l
Z1plcm87CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVy
Z2VBcml0aE5vZGVGbGFncyhmbGFncyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzIHwg
Tm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8pOworICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MgfCBO
b2RlVXNlZEFzTnVtYmVyKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNo
aWxkMygpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlciB8IE5v
ZGVOZWVkc05lZ1plcm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyB8IE5vZGVVc2Vk
QXNOdW1iZXIgfCBOb2RlTmVlZHNOZWdaZXJvKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRB
c051bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwg
Tm9kZU5lZWRzTmVnWmVybzsKKyAgICAgICAgICAgIGlmIChvcCAmIE5vZGVIYXNWYXJBcmdzKSB7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGls
ZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBj
aGlsZElkeCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFttX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdz
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGlmIChub2RlLmNoaWxkMSgpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MigpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3Mo
ZmxhZ3MpOworICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMygpID09IE5vTm9kZSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQzKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworI2lmIEVOQUJMRShERkdfREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIlc1xuIiwgY2hhbmdlZCA/
ICJDSEFOR0VEIiA6ICIiKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgbV9jaGFuZ2VkIHw9
IGNoYW5nZWQ7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NG
b3J3YXJkKCkKKyAgICB7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQorICAgICAgICBwcmludGYoIlByb3BhZ2F0aW5nIGFyaXRobWV0aWMgbm9kZSBmbGFncyBmb3J3
YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgZm9yIChtX2NvbXBpbGVJ
bmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxlSW5k
ZXgpCisgICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFncyhtX2dyYXBoW21fY29tcGls
ZUluZGV4XSk7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NC
YWNrd2FyZCgpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKKyAgICAgICAgcHJpbnRmKCJQcm9wYWdhdGluZyBhcml0aG1ldGljIG5vZGUgZmxhZ3MgYmFj
a3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAgICAgICBmb3IgKG1fY29tcGls
ZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29tcGlsZUluZGV4LS0gPiAwOykKKyAgICAgICAg
ICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAg
ICB9CisgICAgCiAgICAgYm9vbCBzZXRQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlv
bikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5oYXNSZXN1
bHQoKSk7CkBAIC0xNDMsMTUgKzMxNSwxNSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gSlND
OjptZXJnZVByZWRpY3Rpb24obV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0sIHByZWRpY3Rp
b24pOwogICAgIH0KICAgICAKLSAgICB2b2lkIHByb3BhZ2F0ZU5vZGUoTm9kZSYgbm9kZSkKKyAg
ICB2b2lkIHByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyhOb2RlJiBub2RlKQogICAgIHsKICAgICAg
ICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CiAKLSNpZiBFTkFCTEUoREZHX0RF
QlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiICAgJXNbJXVdOiAiLCBHcmFwaDo6b3BOYW1l
KG9wKSwgbV9jb21waWxlSW5kZXgpOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3Ap
LCBtX2NvbXBpbGVJbmRleCk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIGJvb2wgY2hhbmdl
ZCA9IGZhbHNlOwpAQCAtMTg0LDE5ICszNTYsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBC
aXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0TFNoaWZ0OgogICAgICAgICBjYXNlIEJpdFVSU2hp
ZnQ6Ci0gICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CiAgICAgICAgIGNhc2UgVmFsdWVUb0lu
dDMyOgogICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNl
dFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9u
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgVUludDMyVG9OdW1iZXI6IHsKKyAgICAgICAgICAgIGlmIChub2RlQ2FuU3BlY3VsYXRl
SW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0SW50MzIsIFN0cm9uZ1ByZWRp
Y3Rpb24pKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNl
dFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdE51bWJlciwgU3Ryb25nUHJlZGljdGlv
bikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIFZhbHVl
VG9OdW1iZXI6IHsKICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fcHJl
ZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChp
c1N0cm9uZ1ByZWRpY3Rpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNO
dW1iZXJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgICAgICBpZiAoIShw
cmVkaWN0aW9uICYgUHJlZGljdERvdWJsZSkgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9k
ZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJn
ZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9u
KSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0TnVtYmVyLCBTdHJvbmdQcmVk
aWN0aW9uKSk7CiAgICAgICAgICAgICB9CkBAIC0yMTAsNyArMzg5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSAmJiBp
c1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVy
UHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihtZXJnZVByZWRpY3Rpb25zKGxlZnQs
IHJpZ2h0KSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihtZXJn
ZVByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSkgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9k
ZS5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgU3Ryb25nUHJlZGlj
dGlvbikpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91Ymxl
LCBTdHJvbmdQcmVkaWN0aW9uKSk7CkBAIC0yMjUsMTYgKzQwNCwxNCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgIGNhc2UgQXJpdGhTdWI6
Ci0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVaZXJvOgotICAgICAgICBjYXNlIEFyaXRoTXVs
UG9zc2libHlOZWdaZXJvOgotICAgICAgICBjYXNlIEFyaXRoTXVsU3BlY05vdE5lZ1plcm86Cisg
ICAgICAgIGNhc2UgQXJpdGhNdWw6CiAgICAgICAgIGNhc2UgQXJpdGhNaW46CiAgICAgICAgIGNh
c2UgQXJpdGhNYXg6IHsKICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fcHJlZGlj
dGlvbnNbbm9kZS5jaGlsZDEoKV07CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0g
bV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigpXTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSAmJiBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlv
bnMobGVmdCwgcmlnaHQpKSkKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24o
bWVyZ2VQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkpICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMiwgU3Ryb25nUHJlZGlj
dGlvbikpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25n
UHJlZGljdGlvbikpOwpAQCAtMjUwLDMxICs0MjcsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGNo
aWxkID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKLSAgICAgICAgICAgIGlmIChpc1N0
cm9uZ1ByZWRpY3Rpb24oY2hpbGQpKQotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uKGNoaWxkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBBcml0aEFkZFNhZmU6Ci0gICAgICAgIGNhc2UgQXJpdGhTdWJT
YWZlOgotICAgICAgICBjYXNlIEFyaXRoTXVsU2FmZToKLSAgICAgICAgY2FzZSBVSW50MzJUb051
bWJlclNhZmU6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJl
ZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgVmFsdWVBZGRTYWZlOiB7Ci0gICAgICAg
ICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOwot
ICAgICAgICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGls
ZDIoKV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24o
bGVmdCkgJiYgaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSkgewotICAgICAgICAgICAgICAgIGlm
IChpc051bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KSkK
LSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRp
Y3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKCEobGVmdCAmIFByZWRpY3ROdW1iZXIpIHx8ICEocmlnaHQgJiBQcmVkaWN0TnVt
YmVyKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBsZWZ0IG9yIHJpZ2h0IGlzIGRlZmluaXRl
bHkgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBudW1iZXIuCi0gICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RTdHJpbmcsIFN0
cm9uZ1ByZWRpY3Rpb24pKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdFN0
cmluZyB8IFByZWRpY3RJbnQzMiB8IFByZWRpY3REb3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsK
KyAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24oY2hpbGQpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkp
CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKGNoaWxkKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9u
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzcx
LDcgKzUyOCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgfQogCi0jaWYgRU5BQkxFKERG
R19ERUJVR19WRVJCT1NFKQorI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKICAgICAgICAgcHJpbnRmKCJleHBlY3QoJXMpICIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3By
ZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSkpOwogICAgICAgICBwcmludGYoInVzZSglcykgJXNc
biIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3VzZXNbbV9jb21waWxlSW5kZXhdKSwgY2hhbmdlZCA/
ICJDSEFOR0VEIiA6ICIiKTsKICNlbmRpZgpAQCAtMzc5LDI4ICs1MzYsMjggQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CiAgICAgfQogICAgIAotICAgIHZvaWQgcHJv
cGFnYXRlRm9yd2FyZCgpCisgICAgdm9pZCBwcm9wYWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQoKQog
ICAgIHsKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiUHJv
cGFnYXRpbmcgZm9yd2FyZCBbJXVdXG4iLCArK21fY291bnQpOworI2lmIEVOQUJMRShERkdfREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJQcm9wYWdhdGluZyBwcmVk
aWN0aW9ucyBmb3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CiAjZW5kaWYKICAgICAgICAgZm9y
IChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsr
bV9jb21waWxlSW5kZXgpCi0gICAgICAgICAgICBwcm9wYWdhdGVOb2RlKG1fZ3JhcGhbbV9jb21w
aWxlSW5kZXhdKTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyhtX2dyYXBo
W21fY29tcGlsZUluZGV4XSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgcHJvcGFnYXRlQmFja3dh
cmQoKQorICAgIHZvaWQgcHJvcGFnYXRlUHJlZGljdGlvbnNCYWNrd2FyZCgpCiAgICAgewotI2lm
IEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCJQcm9wYWdhdGluZyBi
YWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQpOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJQcm9wYWdhdGluZyBwcmVkaWN0aW9ucyBi
YWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwogI2VuZGlmCiAgICAgICAgIGZvciAobV9jb21w
aWxlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsgbV9jb21waWxlSW5kZXgtLSA+IDA7KQotICAgICAg
ICAgICAgcHJvcGFnYXRlTm9kZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgICAgICAg
ICBwcm9wYWdhdGVOb2RlUHJlZGljdGlvbnMobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwogICAg
IH0KICAgICAKICAgICB2b2lkIHRvRG91YmxlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewog
ICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wID09IFZhbHVlVG9OdW1iZXIpIHsKLSNp
ZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQogICAgICAgICAgICAgcHJpbnRmKCIgIEAldSAtPiBWYWx1ZVRvRG91Ymxl
Iiwgbm9kZUluZGV4KTsKICNlbmRpZgogICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm9w
ID0gVmFsdWVUb0RvdWJsZTsKQEAgLTQxNCwxMiArNTcxLDE4IEBAIHByaXZhdGU6CiAgICAgICAg
IAogICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CiAKLSNpZiBFTkFCTEUoREZHX0RFQlVH
X1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiICAgJXNbJXVdOiAiLCBHcmFwaDo6b3BOYW1lKG9w
KSwgbV9jb21waWxlSW5kZXgpOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBt
X2NvbXBpbGVJbmRleCk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAob3ApIHsK
ICAgICAgICAgY2FzZSBWYWx1ZUFkZDogeworICAgICAgICAgICAgaWYgKCFub2RlQ2FuU3BlY3Vs
YXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICAgICAgdG9E
b3VibGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgdG9Eb3VibGUobm9kZS5jaGls
ZDIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fcHJlZGljdGlvbnNbbm9kZS5j
aGlsZDEoKV07CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9wcmVkaWN0aW9u
c1tub2RlLmNoaWxkMigpXTsKICAgICAgICAgICAgIApAQCAtNDM0LDExICs1OTcsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBjYXNl
IEFyaXRoU3ViOgotICAgICAgICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzoKLSAgICAgICAgY2Fz
ZSBBcml0aE11bFBvc3NpYmx5TmVnWmVybzoKLSAgICAgICAgY2FzZSBBcml0aE11bFNwZWNOb3RO
ZWdaZXJvOgorICAgICAgICBjYXNlIEFyaXRoTXVsOgogICAgICAgICBjYXNlIEFyaXRoTWluOgog
ICAgICAgICBjYXNlIEFyaXRoTWF4OiB7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5TcGVjdWxh
dGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgICAgICB0b0Rv
dWJsZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICB0b0RvdWJsZShub2RlLmNoaWxk
MigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNo
aWxkMSgpXTsKICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX3ByZWRpY3Rpb25z
W25vZGUuY2hpbGQyKCldOwogICAgICAgICAgICAgCkBAIC00NTgsNiArNjI1LDExIEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWJzOiB7Cisg
ICAgICAgICAgICBpZiAoIW5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxh
Z3MoKSkpIHsKKyAgICAgICAgICAgICAgICB0b0RvdWJsZShub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgp
XTsKICAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24ocHJlZGljdGlvbikgJiYgKHBy
ZWRpY3Rpb24gJiBQcmVkaWN0RG91YmxlKSkKICAgICAgICAgICAgICAgICB0b0RvdWJsZShub2Rl
LmNoaWxkMSgpKTsKQEAgLTQ2OSwzNyArNjQxLDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJpdGhBZGRTYWZl
OgotICAgICAgICBjYXNlIEFyaXRoU3ViU2FmZToKLSAgICAgICAgY2FzZSBBcml0aE11bFNhZmU6
IHsKLSAgICAgICAgICAgIHRvRG91YmxlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgdG9E
b3VibGUobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgVmFsdWVBZGRTYWZlOiB7Ci0gICAgICAgICAgICBQcmVk
aWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOwotICAgICAgICAg
ICAgUHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDIoKV07Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkgJiYg
aXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSAmJiBpc051bWJlclByZWRpY3Rpb24obGVmdCkgJiYg
aXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KSkgewotICAgICAgICAgICAgICAgIHRvRG91YmxlKG5v
ZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgICAgIHRvRG91YmxlKG5vZGUuY2hpbGQxKCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0jaWYgRU5B
QkxFKERGR19ERUJVR19WRVJCT1NFKQorI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCJcbiIpOwogI2VuZGlmCiAgICAgfQogICAgIAogICAg
IHZvaWQgZml4dXAoKQogICAgIHsKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisjaWYg
RU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBwcmludGYoIlBl
cmZvcm1pbmcgRml4dXBcbiIpOwogI2VuZGlmCiAgICAgICAgIGZvciAobV9jb21waWxlSW5kZXgg
PSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyArK21fY29tcGlsZUluZGV4KQpA
QCAtNTU5LDcgKzcxMiw3IEBAIHByaXZhdGU6CiAgICAgTm9kZUluZGV4IHN0YXJ0SW5kZXhGb3JD
aGlsZHJlbihOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4
IHJlc3VsdCA9IGNvbXB1dGVTdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQxLCBjaGlsZDIsIGNo
aWxkMyk7Ci0jaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorI2lmIEVOQUJMRShERkdfREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCIgIGxvb2tiYWNrICV1OiAi
LCByZXN1bHQpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC01NzksNyArNzMy
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0Kys7CiAgICAg
ICAgIEFTU0VSVChyZXN1bHQgPD0gbV9jb21waWxlSW5kZXgpOwotI2lmIEVOQUJMRShERkdfREVC
VUdfVkVSQk9TRSkKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAg
ICAgICAgIHByaW50ZigiICBsaW1pdCAldTogIiwgcmVzdWx0KTsKICNlbmRpZgogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwpAQCAtNTk3LDYgKzc1MCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBp
ZiAobm9kZS5vcCAhPSBvdGhlck5vZGUub3ApCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLmFyaXRoTm9kZUZsYWdzRm9yQ29tcGFy
ZSgpICE9IG90aGVyTm9kZS5hcml0aE5vZGVGbGFnc0ZvckNvbXBhcmUoKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTm9kZUluZGV4IG90aGVy
Q2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIGlm
IChvdGhlckNoaWxkID09IE5vTm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CkBA
IC02NDMsNyArNzk5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAg
IGNhc2UgVmFsdWVBZGRTYWZlOgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgogICAgICAgICBj
YXNlIENvbXBhcmVMZXNzRXE6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CkBAIC03NTAs
NyArOTA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKG1fcHJlZGljdGlvbnNbbV9jb21waWxl
SW5kZXhdICE9IG1fcHJlZGljdGlvbnNbcmVwbGFjZW1lbnRdKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisjaWYgRU5BQkxFKERG
R19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBwcmludGYoIiAgIFJlcGxhY2lu
ZyBAJXUgLT4gQCV1IiwgbV9jb21waWxlSW5kZXgsIHJlcGxhY2VtZW50KTsKICNlbmRpZgogICAg
ICAgICAKQEAgLTc3Niw4ICs5MzEsOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIW5vZGUuc2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0jaWYgRU5BQkxF
KERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoIiAgICVzWyV1XTogIiwgR3JhcGg6
Om9wTmFtZShtX2dyYXBoW21fY29tcGlsZUluZGV4XS5vcCksIG1fY29tcGlsZUluZGV4KTsKKyNp
ZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50Zigi
ICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BOYW1lKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLm9wKSwg
bV9jb21waWxlSW5kZXgpOwogI2VuZGlmCiAKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CkBA
IC03OTEsMTggKzk0NiwxMyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6CiAg
ICAgICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgIGNh
c2UgQXJpdGhNdWxJZ25vcmVaZXJvOgotICAgICAgICBjYXNlIEFyaXRoTXVsUG9zc2libHlOZWda
ZXJvOgotICAgICAgICBjYXNlIEFyaXRoTXVsU3BlY05vdE5lZ1plcm86CisgICAgICAgIGNhc2Ug
QXJpdGhNdWw6CiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6CiAgICAgICAgIGNhc2UgQXJpdGhEaXY6
CiAgICAgICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgICAgIGNhc2UgQXJpdGhNaW46CiAgICAgICAg
IGNhc2UgQXJpdGhNYXg6CiAgICAgICAgIGNhc2UgQXJpdGhTcXJ0OgotICAgICAgICBjYXNlIEFy
aXRoQWRkU2FmZToKLSAgICAgICAgY2FzZSBBcml0aFN1YlNhZmU6Ci0gICAgICAgIGNhc2UgQXJp
dGhNdWxTYWZlOgogICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocHVyZUNTRShub2RlKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtODU2LDcgKzEwMDYsNyBAQCBwcml2
YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2xhc3RTZWVuW25vZGUub3AgJiBO
b2RlSWRNYXNrXSA9IG1fY29tcGlsZUluZGV4OwotI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9T
RSkKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIHBy
aW50ZigiXG4iKTsKICNlbmRpZgogICAgIH0KQEAgLTg3MSw3ICsxMDIxLDcgQEAgcHJpdmF0ZToK
ICAgICAKICAgICB2b2lkIGxvY2FsQ1NFKCkKICAgICB7Ci0jaWYgRU5BQkxFKERGR19ERUJVR19W
RVJCT1NFKQorI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAg
ICAgcHJpbnRmKCJQZXJmb3JtaW5nIGxvY2FsIENTRToiKTsKICNlbmRpZgogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKyti
bG9jaykKQEAgLTkzNiw3ICsxMDg2LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBQcmVkaWN0aW9u
VHJhY2tlciBtX3ZhcmlhYmxlVXNlczsKIAotI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkK
KyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgdW5zaWduZWQg
bV9jb3VudDsKICNlbmRpZgogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1NDg0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgzMCw2ICs4MzAsMjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKKyAgICAgICAg
aWYgKCFub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Cisg
ICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBzb21ldGltZXMgcHJvZHVjZXMgZG91Ymxl
cy4gU28gcHJvZHVjZSBhIGRvdWJsZSBldmVyeQorICAgICAgICAgICAgLy8gdGltZS4gVGhpcyBh
dCBsZWFzdCBhbGxvd3Mgc3Vic2VxdWVudCBjb2RlIHRvIG5vdCBoYXZlIHdlaXJkIGNvbmRpdGlv
bmFscy4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gb3AxLmdwcigpOwor
ICAgICAgICAgICAgRlBSUmVnIG91dHB1dEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIG91dHB1
dEZQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHBvc2l0
aXZlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwg
aW5wdXRHUFIsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgICAgICBtX2ppdC5hZGREb3VibGUo
SklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIG91dHB1dEZQUik7Cisg
ICAgICAgICAgICBwb3NpdGl2ZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGRvdWJsZVJlc3VsdChvdXRwdXRGUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKQEAgLTg0MSwyNyAr
ODYwLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFVJbnQzMlRvTnVtYmVyU2FmZTog
ewotICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBzb21ldGltZXMgcHJvZHVjZXMgZG91Ymxl
cy4gU28gcHJvZHVjZSBhIGRvdWJsZSBldmVyeQotICAgICAgICAvLyB0aW1lLiBUaGlzIGF0IGxl
YXN0IGFsbG93cyBzdWJzZXF1ZW50IGNvZGUgdG8gbm90IGhhdmUgd2VpcmQgY29uZGl0aW9uYWxz
LgotICAgICAgICAKLSAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAKLSAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gb3AxLmdwcigpOwotICAgICAgICBGUFJSZWcgb3V0cHV0RlBS
ID0gcmVzdWx0LmZwcigpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9E
b3VibGUoaW5wdXRHUFIsIG91dHB1dEZQUik7Ci0gICAgICAgIAotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVy
VGhhbk9yRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkpOwotICAgICAgICBtX2ppdC5h
ZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIG91dHB1
dEZQUik7Ci0gICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKLSAgICAgICAgCi0gICAgICAg
IGRvdWJsZVJlc3VsdChvdXRwdXRGUFIsIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKKyAgICAgICAgaWYgKHNob3VsZE5v
dFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgICAgIC8vIERvIGl0
IHRoZSBzYWZlIHdheS4KKyAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKG5v
ZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTg3MCwxNyArODc1LDE4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFZhbHVlVG9OdW1i
ZXI6IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkp
IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAg
ICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAg
ICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBvcDEuZm9ybWF0
KCkpOworICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgp
KSkgeworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Cisg
ICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAg
ICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSk7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQu
ZnByKCkpOwotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIAorICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsK
KyAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIGlu
dGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgb3AxLmZvcm1hdCgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC04OTQsMTMgKzkwMCwxNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICBjYXNlIFZhbHVlQWRkOgogICAg
IGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9k
ZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0
ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkgJiYgbm9kZUNhblNwZWN1bGF0
ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgewogICAgICAgICAgICAgaWYgKGlzSW50
MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgewogICAgICAgICAgICAgICAgIGludDMyX3QgaW1t
MSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgICAg
IFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZs
b3csIG9wMi5ncHIoKSwgSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJp
dGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDIuZ3By
KCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKEltbTMy
KGltbTEpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1i
bGVyOjpPdmVyZmxvdywgb3AyLmdwcigpLCBJbW0zMihpbW0xKSwgcmVzdWx0LmdwcigpKSk7CiAK
ICAgICAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTExLDcgKzkyMSwxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgaW50MzJf
dCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1i
bGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVG
bGFncygpKSkgeworICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoSW1tMzIoaW1tMiks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92
ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAg
ICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05MjQsMjQgKzkzOCwyOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgZ3ByMSA9IG9w
MS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBncHIyID0gb3AyLmdwcigpOwogICAgICAgICAg
ICAgR1BSUmVnIGdwclJlc3VsdCA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGNoZWNrID0gbV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92
ZXJmbG93LCBncHIxLCBncHIyLCBncHJSZXN1bHQpOwotCi0gICAgICAgICAgICBpZiAoZ3ByMSA9
PSBncHJSZXN1bHQpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhjaGVjaywgU3Bl
Y3VsYXRpb25SZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIyKSk7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChncHIyID09IGdwclJlc3VsdCkKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKGNoZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBn
cHJSZXN1bHQsIGdwcjEpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKGNoZWNrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGVD
YW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAg
ICAgIGlmIChncHIxID09IGdwclJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRk
MzIoZ3ByMiwgZ3ByUmVzdWx0KTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShncHIyLCBncHJSZXN1bHQpOworICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5hZGQzMihncHIxLCBncHJSZXN1bHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hl
Y2sgPSBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIGdwcjEsIGdw
cjIsIGdwclJlc3VsdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGdw
cjEgPT0gZ3ByUmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGNo
ZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1bHQsIGdwcjIp
KTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChncHIyID09IGdwclJlc3VsdCkKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShT
cGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIxKSk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGNoZWNrKTsKKyAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChncHJSZXN1bHQsIG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBG
YWxsIHRocm91Z2ggdG8gc2FmZSBjYXNlcy4KLSAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgVmFs
dWVBZGRTYWZlOgotICAgIGNhc2UgQXJpdGhBZGRTYWZlOiB7CiAgICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVOdW1iZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CkBAIC05NTUsNyArOTc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEFT
U0VSVChvcCA9PSBWYWx1ZUFkZCB8fCBvcCA9PSBWYWx1ZUFkZFNhZmUpOworICAgICAgICBBU1NF
UlQob3AgPT0gVmFsdWVBZGQpOwogICAgICAgICAKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywg
bm9kZS5jaGlsZDIoKSk7CkBAIC05NzYsMTMgKzk5NSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aFN1YjogewotICAg
ICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxk
MigpKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgp
LCBub2RlLmNoaWxkMigpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9k
ZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQy
KCkpKSB7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CiAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihp
bW0yKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0
ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAgICAgICAgICBt
X2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3ViMzIoSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNo
U3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCBy
ZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdw
cigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05OTIsMTYg
KzEwMTUsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZs
b3csIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIGlm
IChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5zdWIzMihvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFN1
YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3Vs
dC5ncHIoKSkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBzYWZlIGNhc2UuCi0gICAgfQotICAgICAgICAKLSAg
ICBjYXNlIEFyaXRoU3ViU2FmZTogewogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBv
cDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKQEAgLTEwMTQsMjIgKzEwMzcsMjcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIEFyaXRo
TXVsU3BlY05vdE5lZ1plcm86Ci0gICAgY2FzZSBBcml0aE11bFBvc3NpYmx5TmVnWmVybzoKLSAg
ICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkgeworICAgIGNhc2UgQXJpdGhN
dWw6IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwg
bm9kZS5jaGlsZDIoKSkgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVG
bGFncygpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKIAogICAgICAgICAgICAgR1BSUmVnIHJlZzEgPSBvcDEuZ3ByKCk7CiAgICAgICAgICAg
ICBHUFJSZWcgcmVnMiA9IG9wMi5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
V2hhdCBpcyB1bmZvcnR1bmF0ZSBpcyB0aGF0IHdlIGNhbm5vdCB0YWtlIGFkdmFudGFnZSBvZiBu
b2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKCkKKyAgICAgICAgICAgIC8vIGhlcmUuIEEgbXVsdGlwbHkg
b24gaW50ZWdlcnMgcGVyZm9ybWVkIGluIHRoZSBkb3VibGUgZG9tYWluIGFuZCB0aGVuIHRydW5j
YXRlZCB0bworICAgICAgICAgICAgLy8gYW4gaW50ZWdlciB3aWxsIGdpdmUgYSBkaWZmZXJlbnQg
cmVzdWx0IHRoYW4gYSBtdWx0aXBseSBwZXJmb3JtZWQgaW4gdGhlIGludGVnZXIKKyAgICAgICAg
ICAgIC8vIGRvbWFpbiBhbmQgdGhlbiB0cnVuY2F0ZWQsIGlmIHRoZSBpbnRlZ2VyIGRvbWFpbiBy
ZXN1bHQgd291bGQgaGF2ZSByZXN1bHRlZCBpbgorICAgICAgICAgICAgLy8gc29tZXRoaW5nIGJp
Z2dlciB0aGFuIHdoYXQgYSAzMi1iaXQgaW50ZWdlciBjYW4gaG9sZC4gSmF2YVNjcmlwdCBtYW5k
YXRlcyB0aGF0CisgICAgICAgICAgICAvLyB0aGUgc2VtYW50aWNzIGFyZSBhbHdheXMgYXMgaWYg
dGhlIG11bHRpcGx5IGhhZCBiZWVuIHBlcmZvcm1lZCBpbiB0aGUgZG91YmxlCisgICAgICAgICAg
ICAvLyBkb21haW4uCisgICAgICAgICAgICAKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
bV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCByZWcxLCByZWcyLCBy
ZXN1bHQuZ3ByKCkpKTsKLQotICAgICAgICAgICAgLy8gT25seSB0aGUgQXJpdGhNdWxTcGVjTm90
TmVnWmVybyBvcGNvZGUgcmVxdWlyZXMgdGhhdCB3ZSBhY3R1YWxseSB0dXJuCi0gICAgICAgICAg
ICAvLyBuZWdhdGl2ZSB6ZXJvIGludG8gYSBkb3VibGUuIFRoZSBvdGhlciB0d28gbWVhbiB0aGF0
IGFsbCB1c2VycyBvZiB0aGlzCi0gICAgICAgICAgICAvLyByZXN1bHQgZG9uJ3QgY2FyZSBpZiBp
dCdzIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgemVyby4KLSAgICAgICAgICAgIGlmIChvcCA9PSBB
cml0aE11bFNwZWNOb3ROZWdaZXJvKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIENo
ZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCBpZiB0aGUgdXNlcnMgb2YgdGhpcyBub2RlIGNhcmUgYWJv
dXQgc3VjaCB0aGluZ3MuCisgICAgICAgICAgICBpZiAoIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVpl
cm8obm9kZS5hcml0aE5vZGVGbGFncygpKSkgewogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIHJlc3VsdE5vblplcm8gPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzEsIFRydXN0
ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcyLCBUcnVzdGVkSW1tMzIoMCkpKTsK
QEAgLTEwNDAsMTAgKzEwNjgsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
Ly8gRmFsbCB0aHJvdWdoIHRvIHNhZmUgY2FzZS4KLSAgICB9Ci0KLSAgICBjYXNlIEFyaXRoTXVs
U2FmZTogewogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwpA
QCAtMTA5OSw3ICsxMTIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50
ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKQEAgLTExMjYsNyArMTE1MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFy
aXRoTWF4OiB7Ci0gICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQx
KCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwpAQCAtMTg3Niw3ICsxOTAwLDcgQEAg
VmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbAogICAgICAgICAKICAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGVQdHItPm9w
ID09IFVJbnQzMlRvTnVtYmVyIHx8IG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyU2FmZSkg
eworICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVUludDMyVG9OdW1iZXIpIHsKICAgICAgICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBub2RlUHRyLT5jaGlsZDEoKTsKICAgICAgICAgICAg
IG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwogICAgICAgICAgICAgaW5mb1B0
ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKQEAgLTE5
MDcsNyArMTkzMSw2IEBAIFZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWwK
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMySW5kZXggPSBpbmZvLm5vZGVJbmRleCgp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFVJbnQz
MlRvTnVtYmVyOgotICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXJTYWZlOgogICAg
ICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107976</attachid>
            <date>2011-09-20 01:30:24 -0700</date>
            <delta_ts>2011-09-20 02:41:59 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>arithmodeflags_patch_2.diff</filename>
            <type>text/plain</type>
            <size>60900</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU1MTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzQgQEAK
KzIwMTEtMDktMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHBlcmZvcm1zIHRvbyBtYW55IG5lZ2F0aXZlIHplcm8gY2hlY2tzLCBhbmQgdG9vIG1h
bnkKKyAgICAgICAgb3ZlcmZsb3cgY2hlY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02ODQzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIGNvbXByZWhlbnNpdmUgc3VwcG9y
dCBmb3IgZGVjaWRpbmcgaG93IHRvIHBlcmZvcm0gYW4KKyAgICAgICAgYXJpdGhtZXRpYyBvcGVy
YXRpb25zIGJhc2VkIG9uIGEgY29tYmluYXRpb24gb2Ygb3ZlcmZsb3cgcHJvZmlsaW5nLAorICAg
ICAgICBuZWdhdGl2ZSB6ZXJvIHByb2ZpbGluZywgdmFsdWUgcHJvZmlsaW5nLCBhbmQgYSBzdGF0
aWMgYW5hbHlzaXMgb2YKKyAgICAgICAgaG93IHRoZSByZXN1bHRzIG9mIHRoZXNlIG9wZXJhdGlv
bnMgZ2V0IHVzZWQuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgNzIlIHNwZWVkLXVwIG9u
IHN0YW5mb3JkLWNyeXB0by1zaGEyNTYtaXRlcmF0aXZlLCBhbmQgYQorICAgICAgICAyLjUlIHNw
ZWVkLXVwIG9uIHRoZSBLcmFrZW4gYXZlcmFnZSwgYSAxLjQlIHNwZWVkLXVwIG9uIHRoZSBWOAor
ICAgICAgICBnZW9tZWFuLCBhbmQgbmV1dHJhbCBvbiBTdW5TcGlkZXIuIEl0J3MgYWxzbyBhbiA4
LjUlIHNwZWVkLXVwIG9uCisgICAgICAgIFY4LWNyeXB0bywgYmVjYXVzZSBhcHBhcmVudHkgZXZl
cnl0aGluZyB3ZSBkbyBzcGVlZHMgdXAgY3J5cHRvLgorCisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6dG9JbnQz
Mik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnRvTnVtYmVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aXNTbWFsbEludDMyQ29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjp2YWx1ZU9mSW50MzJDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OndlYWtseVByZWRpY3RJbnQzMik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1ha2VTYWZlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnByb2Nlc3NQaGlTdGFjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVCYXNp
Y0FyaXRoT3ApOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
bm9kZVVzZWRBc051bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUNhblRydW5jYXRlSW50
ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6bm9kZUNhblNwZWN1bGF0ZUludGVnZXIpOgorICAgICAgICAoSlND
OjpERkc6OmFyaXRoTm9kZUZsYWdzQXNTdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyaXRoTm9kZUZsYWdzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpyYXdBcml0aE5vZGVGbGFncyk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6YXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmFy
aXRoTm9kZUZsYWdzRm9yQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0QXJp
dGhOb2RlRmxhZyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bWVyZ2VBcml0aE5vZGVGbGFn
cyk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BhZ2F0b3I6OmZpeHBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpp
c05vdE5lZ1plcm8pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmlzTm90WmVybyk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3Mp
OgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdz
Rm9yd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhO
b2RlRmxhZ3NCYWNrd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFn
YXRlTm9kZVByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9w
YWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6
OnByb3BhZ2F0ZVByZWRpY3Rpb25zQmFja3dhcmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXh1cE5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmZpeHVwKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wYWdhdG9yOjpzdGFydEluZGV4Rm9yQ2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OmVuZEluZGV4Rm9yUHVyZUNTRSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6cHVyZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
Y2xvYmJlcnNXb3JsZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6c2V0UmVwbGFj
ZW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpsb2NhbENTRSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVW
YWx1ZVJlY292ZXJ5Rm9yKToKKwogMjAxMS0wOS0xOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5l
bmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0b1ByaW1pdGl2ZSBmcm9tIEpTQ2Vs
bApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDk1NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw5ICsxOTMsNiBAQCBwcml2
YXRlOgogICAgICAgICBpZiAobm9kZS5vcCA9PSBVSW50MzJUb051bWJlcikKICAgICAgICAgICAg
IHJldHVybiBub2RlLmNoaWxkMSgpOwogCi0gICAgICAgIGlmIChub2RlLm9wID09IFVJbnQzMlRv
TnVtYmVyU2FmZSkKLSAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwotCiAgICAgICAg
IC8vIENoZWNrIGZvciBudW1lcmljIGNvbnN0YW50cyBib3hlZCBhcyBKU1ZhbHVlcy4KICAgICAg
ICAgaWYgKG5vZGUub3AgPT0gSlNDb25zdGFudCkgewogICAgICAgICAgICAgSlNWYWx1ZSB2ID0g
dmFsdWVPZkpTQ29uc3RhbnQoaW5kZXgpOwpAQCAtMjIxLDcgKzIxOCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobm9kZS5jb25zdGFudE51bWJlcigp
KTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBhZGRUb0dyYXBoKFZhbHVlVG9OdW1iZXIs
IGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoVmFsdWVUb051bWJlciwgT3BJbmZv
KE5vZGVVc2VCb3R0b20pLCBpbmRleCk7CiAgICAgfQogCiAgICAgTm9kZUluZGV4IGdldEpTQ29u
c3RhbnQodW5zaWduZWQgY29uc3RhbnQpCkBAIC0yNjQsMTAgKzI2MSw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIGludDMyX3QgaW50VmFsdWUgPSB2YWx1ZS5hc0ludDMyKCk7CiAgICAgICAgIHJldHVy
biBpbnRWYWx1ZSA+PSAtNSAmJiBpbnRWYWx1ZSA8PSA1OwogICAgIH0KLSAgICBib29sIGlzRG91
YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBp
c0pTQ29uc3RhbnQobm9kZUluZGV4KSAmJiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlz
TnVtYmVyKCk7Ci0gICAgfQogICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGdldHRpbmcg
Y29uc3RhbnQgdmFsdWVzLgogICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4
IGluZGV4KQogICAgIHsKQEAgLTI3OSwxNCArMjcyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgQVNT
RVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKICAgICAgICAgcmV0dXJuIHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGVJbmRleCkuYXNJbnQzMigpOwogICAgIH0KLSAgICBkb3VibGUgdmFsdWVP
ZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICBBU1NF
UlQoaXNEb3VibGVDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgZG91YmxlIHZhbHVlOwot
ICAgICAgICBib29sIG9rYXkgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmdldE51bWJl
cih2YWx1ZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQob2theSwgb2theSk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICB9CiAKICAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgSlNDb25z
dGFudCB3aXRoIHRoZSB2YWx1ZSAndW5kZWZpbmVkJy4KICAgICBOb2RlSW5kZXggY29uc3RhbnRV
bmRlZmluZWQoKQpAQCAtNDg2LDEwICs0NzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc3dp
dGNoIChub2RlUHRyLT5vcCkgewogICAgICAgICAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAg
ICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzoK
LSAgICAgICAgICAgIGNhc2UgQXJpdGhNdWxTcGVjTm90TmVnWmVybzoKLSAgICAgICAgICAgIGNh
c2UgQXJpdGhNdWxQb3NzaWJseU5lZ1plcm86Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTXVsU2Fm
ZToKKyAgICAgICAgICAgIGNhc2UgQXJpdGhNdWw6CiAgICAgICAgICAgICBjYXNlIFZhbHVlQWRk
OgogICAgICAgICAgICAgICAgIG1fcmV1c2FibGVOb2RlU3RhY2suYXBwZW5kKCZtX2dyYXBoW25v
ZGVQdHItPmNoaWxkMSgpXSk7CiAgICAgICAgICAgICAgICAgbV9yZXVzYWJsZU5vZGVTdGFjay5h
cHBlbmQoJm1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQyKCldKTsKQEAgLTUyNSw3MCArNTA3LDM4IEBA
IHByaXZhdGU6CiAgICAgICAgIHN0cm9uZ2x5UHJlZGljdChub2RlSW5kZXgsIG1fY3VycmVudElu
ZGV4KTsKICAgICB9CiAgICAgCi0gICAgTm9kZVR5cGUgbWFrZVNhZmUoTm9kZVR5cGUgb3ApCisg
ICAgTm9kZUluZGV4IG1ha2VTYWZlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAg
ICBpZiAoIW1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5k
ZXgpKQotICAgICAgICAgICAgcmV0dXJuIG9wOworICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRl
eDsKICAgICAgICAgCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmlu
dGYoIk1ha2luZyAlcyBAJWx1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzbG93LWNhc2UgY291bnRl
ciBpcyBhdCAldVxuIiwgR3JhcGg6Om9wTmFtZShvcCksIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJl
bnRJbmRleCwgbV9wcm9maWxlZEJsb2NrLT5zbG93Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7CisgICAgICAgIHByaW50ZigiTWFraW5nICVz
IEAldSBzYWZlIGF0IGJjIyV1IGJlY2F1c2Ugc2xvdy1jYXNlIGNvdW50ZXIgaXMgYXQgJXVcbiIs
IEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4LCBtX2N1cnJl
bnRJbmRleCwgbV9wcm9maWxlZEJsb2NrLT5zbG93Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAg
IHN3aXRjaCAob3ApIHsKKyAgICAgICAgc3dpdGNoIChtX2dyYXBoW25vZGVJbmRleF0ub3ApIHsK
ICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgICAgIHJldHVybiBVSW50MzJU
b051bWJlclNhZmU7CiAgICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgICAgICByZXR1cm4g
QXJpdGhBZGRTYWZlOwogICAgICAgICBjYXNlIEFyaXRoU3ViOgotICAgICAgICAgICAgcmV0dXJu
IEFyaXRoU3ViU2FmZTsKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgICAgIG1fZ3Jh
cGhbbm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgaW5pdGlhbGl6
ZSBBcml0aE11bCB0byBBcml0aE11bElnbm9yZVplcm8gYW5kIHB1c2ggaXQgdG93YXJkcwotICAg
ICAgICAgICAgLy8gc2FmZXIgdmFyaWFudHMgYXMgd2UgbGVhcm4gbW9yZSwgdW5sZXNzIHdlIGFs
cmVhZHkga25vdyB0aGF0IGl0Ci0gICAgICAgICAgICAvLyBjYW4gb3ZlcmZsb3cuIElmIGl0IGRv
ZXNuJ3Qgb3ZlcmZsb3csIHdlIGZpcnN0IHR1cm4gaXQgaW50bwotICAgICAgICAgICAgLy8gUG9z
c2libHlOZWdaZXJvIGlmIHdlIHNlZSB0aGF0IGl0IGhhZCBiZWVuIC0wIGR1cmluZyBvbGQgSklU
Ci0gICAgICAgICAgICAvLyBleGVjdXRpb24uCi0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVa
ZXJvOgorICAgICAgICBjYXNlIEFyaXRoTXVsOgogICAgICAgICAgICAgaWYgKG1fcHJvZmlsZWRC
bG9jay0+bGlrZWx5VG9UYWtlRGVlcGVzdFNsb3dDYXNlKG1fY3VycmVudEluZGV4KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gQXJpdGhNdWxTYWZlOworICAgICAgICAgICAgICAgIG1fZ3JhcGhb
bm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyB8IE5vZGVNYXlO
ZWdaZXJvKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gQXJpdGhN
dWxQb3NzaWJseU5lZ1plcm87CisgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm1l
cmdlQXJpdGhOb2RlRmxhZ3MoTm9kZU1heU5lZ1plcm8pOworICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAgICAgIHJldHVybiBW
YWx1ZUFkZFNhZmU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBQaGFudG9tOyAvLyBIYXZlIHRvIHJldHVybiBz
b21ldGhpbmcuCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IGdldFRydWVS
ZXN1bHQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ncmFw
aFtub2RlSW5kZXhdLm9wKSB7Ci0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVaZXJvOgotICAg
ICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm9wID0gQXJpdGhNdWxTcGVjTm90TmVnWmVybzsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRoTXVsUG9zc2libHlOZWdaZXJv
OgotICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm9wID0gQXJpdGhNdWxTYWZlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBpc011bHRpcGx5KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCkgewotICAgICAgICBjYXNlIEFyaXRoTXVs
U3BlY05vdE5lZ1plcm86Ci0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVaZXJvOgotICAgICAg
ICBjYXNlIEFyaXRoTXVsUG9zc2libHlOZWdaZXJvOgotICAgICAgICBjYXNlIEFyaXRoTXVsU2Fm
ZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgSlNHbG9iYWxEYXRhKiBt
X2dsb2JhbERhdGE7CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBDb2RlQmxvY2sq
IG1fcHJvZmlsZWRCbG9jazsKQEAgLTY4OSw3ICs2MzksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVNaW5NYXgoYm9vbCB1CiAgICAgfQogICAgIAogICAgIGlmIChsYXN0QXJnID09IGZp
cnN0QXJnICsgMikgewotICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChvcCwg
Z2V0VG9OdW1iZXIoZmlyc3RBcmcgKyAxKSwgZ2V0VG9OdW1iZXIoZmlyc3RBcmcgKyAyKSkpOwor
ICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChvcCwgT3BJbmZvKE5vZGVVc2VC
b3R0b20pLCBnZXRUb051bWJlcihmaXJzdEFyZyArIDEpLCBnZXRUb051bWJlcihmaXJzdEFyZyAr
IDIpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTcxMyw3ICs2NjMs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGlm
IChhYnNBcmcgPiBsYXN0QXJnKQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNvbnN0
YW50TmFOKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwg
YWRkVG9HcmFwaChBcml0aEFicywgZ2V0VG9OdW1iZXIoYWJzQXJnKSkpOworICAgICAgICAgICAg
c2V0KHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhBYnMsIE9wSW5mbyhOb2RlVXNlQm90
dG9tKSwgZ2V0VG9OdW1iZXIoYWJzQXJnKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgICAgIApAQCAtODU3LDExICs4MDcsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGlmICh2YWx1ZU9mSW50MzJDb25zdGFu
dChvcDIpICYgMHgxZikKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChC
aXRVUlNoaWZ0LCBvcDEsIG9wMik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKG1ha2VTYWZlKFVJbnQzMlRvTnVtYmVyKSwgb3Ax
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFrZVNhZmUoYWRkVG9HcmFwaChVSW50
MzJUb051bWJlciwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcDEpKTsKICAgICAgICAgICAgIH0g
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENhbm5vdCBvcHRpbWl6ZSBhdCB0aGlzIHN0YWdl
OyBzaGlmdCAmIHBvdGVudGlhbGx5IHJlYm94IGFzIGEgZG91YmxlLgogICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGFkZFRvR3JhcGgoQml0VVJTaGlmdCwgb3AxLCBvcDIpOwotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGFkZFRvR3JhcGgobWFrZVNhZmUoVUludDMyVG9OdW1iZXIpLCByZXN1bHQp
OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTYWZlKGFkZFRvR3JhcGgoVUludDMyVG9O
dW1iZXIsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgcmVzdWx0KSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0LCBQ
cmVkaWN0SW50MzIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdXJzaGlmdCk7CkBAIC04
NzMsNyArODIzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldFRvTnVtYmVyKHNyY0RzdCk7CiAg
ICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3ApOwotICAgICAgICAgICAgc2V0KHNyY0Rz
dCwgYWRkVG9HcmFwaChtYWtlU2FmZShBcml0aEFkZCksIG9wLCBvbmUoKSkpOworICAgICAgICAg
ICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgT3BJbmZvKE5vZGVV
c2VCb3R0b20pLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wcmVf
aW5jKTsKICAgICAgICAgfQogCkBAIC04ODMsNyArODMzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0VG9O
dW1iZXIoc3JjRHN0KTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcCk7CiAgICAg
ICAgICAgICBzZXQocmVzdWx0LCBvcCk7Ci0gICAgICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dy
YXBoKG1ha2VTYWZlKEFyaXRoQWRkKSwgb3AsIG9uZSgpKSk7CisgICAgICAgICAgICBzZXQoc3Jj
RHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBPcEluZm8oTm9kZVVzZUJvdHRvbSks
IG9wLCBvbmUoKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Bvc3RfaW5jKTsKICAg
ICAgICAgfQogCkBAIC04OTEsNyArODQxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldFRvTnVt
YmVyKHNyY0RzdCk7CiAgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3ApOwotICAgICAg
ICAgICAgc2V0KHNyY0RzdCwgYWRkVG9HcmFwaChtYWtlU2FmZShBcml0aFN1YiksIG9wLCBvbmUo
KSkpOworICAgICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1
YiwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9wcmVfZGVjKTsKICAgICAgICAgfQogCkBAIC05MDEsNyArODUxLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUlu
ZGV4IG9wID0gZ2V0VG9OdW1iZXIoc3JjRHN0KTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJ
bnQzMihvcCk7CiAgICAgICAgICAgICBzZXQocmVzdWx0LCBvcCk7Ci0gICAgICAgICAgICBzZXQo
c3JjRHN0LCBhZGRUb0dyYXBoKG1ha2VTYWZlKEFyaXRoU3ViKSwgb3AsIG9uZSgpKSk7CisgICAg
ICAgICAgICBzZXQoc3JjRHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBPcEluZm8o
Tm9kZVVzZUJvdHRvbSksIG9wLCBvbmUoKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3Bvc3RfZGVjKTsKICAgICAgICAgfQogCkBAIC05MTcsMTcgKzg2NywxMCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgd2Vha2x5UHJl
ZGljdEludDMyKG9wMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIElmIGJvdGggaW5wdXRzIGFyZSBtdWx0aXBsaWVzLCB0aGVuIHdlIG5lZWQgdG8gbWFrZSBz
dXJlIHRvIHBsYXkKLSAgICAgICAgICAgIC8vIGl0IHNhZmUgd2l0aCAtMC4KLSAgICAgICAgICAg
IGlmIChpc011bHRpcGx5KG9wMSkgJiYgaXNNdWx0aXBseShvcDIpKSB7Ci0gICAgICAgICAgICAg
ICAgZ2V0VHJ1ZVJlc3VsdChvcDEpOwotICAgICAgICAgICAgICAgIGdldFRydWVSZXN1bHQob3Ay
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fZ3JhcGhb
b3AxXS5oYXNOdW1iZXJSZXN1bHQoKSAmJiBtX2dyYXBoW29wMl0uaGFzTnVtYmVyUmVzdWx0KCkp
Ci0gICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFk
ZFRvR3JhcGgobWFrZVNhZmUoQXJpdGhBZGQpLCB0b051bWJlcihvcDEpLCB0b051bWJlcihvcDIp
KSk7CisgICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgdG9O
dW1iZXIob3AxKSwgdG9OdW1iZXIob3AyKSkpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaCht
YWtlU2FmZShWYWx1ZUFkZCksIG9wMSwgb3AyKSk7CisgICAgICAgICAgICAgICAgc2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoVmFsdWVBZGQs
IE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9hZGQpOwogICAgICAgICB9CiAKQEAgLTkzOSwyMiArODgyLDE1IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB3ZWFrbHlQ
cmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gRm9yIHRoZSBsZWZ0IGNoaWxkIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBuZWdh
dGl2ZSB6ZXJvLAotICAgICAgICAgICAgLy8gc2luY2UgLTAgLSAwIGlzIC0wLiAgSWYgdGhlIHJp
Z2h0IGNoaWxkIGlzIC0wIHRoZW4gaXQgZG9lc24ndAotICAgICAgICAgICAgLy8gbWF0dGVyLCBz
aW5jZSAwIC0gLTAgaXMgMCBhbmQgMCAtIDAgaXMgMC4KLSAgICAgICAgICAgIGdldFRydWVSZXN1
bHQob3AxKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgobWFrZVNhZmUoQXJpdGhTdWIpLCBvcDEsIG9wMikp
OworICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VT
YWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIp
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdWIpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9tdWw6IHsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIGJlIGZhbmN5IGhlcmUg
YW5kIHNraXAgdGhlIGdldFRydWVSZXN1bHQsIGluc3RlYWQgbWFraW5nCi0gICAgICAgICAgICAv
LyBnZXRUcnVlUmVzdWx0IG9wZXJhdGUgdHJhbnNpdGl2ZWx5LiBCdXQgd2UgZG8gdGhpcyB0aGUg
c2ltcGxlIHdheSwgZm9yCi0gICAgICAgICAgICAvLyBub3cuCi0gICAgICAgICAgICBOb2RlSW5k
ZXggb3AxID0gZ2V0VHJ1ZVJlc3VsdChnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VHJ1ZVJlc3VsdChn
ZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0gICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChtYWtlU2Fm
ZShBcml0aE11bElnbm9yZVplcm8pLCBvcDEsIG9wMikpOworICAgICAgICAgICAgLy8gTXVsdGlw
bHkgcmVxdWlyZXMgdGhhdCB0aGUgaW5wdXRzIGFyZSBub3QgdHJ1bmNhdGVkLCB1bmZvcnR1bmF0
ZWx5LgorICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvTnVtYmVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRv
TnVtYmVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgc2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJp
dGhNdWwsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9tdWwpOwogICAgICAgICB9CiAKQEAgLTEwODksNyArMTAyNSw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9w
dXRfYnlfdmFsOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCB2YWx1ZSA9IGdldFRydWVSZXN1bHQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RBcnJheShiYXNl
KTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CiAKQEAgLTExNDYs
NyArMTA4Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggdmFsdWUgPSBnZXRUcnVlUmVzdWx0KGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAg
Ym9vbCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5vcGVyYW5kOwpAQCAtMTE2Nyw3
ICsxMTAzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3ZhcjogewotICAgICAgICAgICAg
Tm9kZUluZGV4IHZhbHVlID0gZ2V0VHJ1ZVJlc3VsdChnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9i
YWxWYXIsIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgdmFsdWUpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2dsb2JhbF92YXIpOwogICAgICAgICB9CkBA
IC0xNDQ5LDE1ICsxMzg1LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNr
KCkKICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0g
U2V0TG9jYWwgfHwgbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFBoaSk7CiAKICAg
ICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSAmbV9ncmFwaFtlbnRyeS5tX3BoaV07Ci0gICAgICAg
ICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gQW55IGxpdmUgU2V0TG9jYWwgc2hvdWxkIGVuc3VyZSB0aGF0IGl0IGdldHMgdGhl
IHRydWUgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB0aGlzIG1lYW5z
IHRoYXQgQXJpdGhNdWxzIGRpc3Rpbmd1aXNoIGJldHdlZW4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gbmVnYXRpdmUgemVybyBhbmQgcG9zaXRpdmUgemVyby4KLSAgICAgICAgICAgICAgICAgICAg
Z2V0VHJ1ZVJlc3VsdChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCkpOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwaGlOb2RlLT5yZWZDb3VudCgpKQogICAg
ICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0gICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDEoKSA9PSBOb05vZGUpIHsKICAg
ICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5maXhlZC5jaGlsZDEgPSB2YWx1ZUluUHJl
ZGVjZXNzb3I7CkBAIC0xNTQyLDEwICsxNDcxLDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2UoKQogICAgIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJzID0gbV9wcmVzZXJ2ZWRWYXJzOwogICAg
IG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CiAKLSNpZiBFTkFC
TEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKLSNl
bmRpZgotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5NTQ4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDEwIEBAIHZv
aWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICAgICAgaGFzUHJpbnRl
ZCA9IG5vZGUuY2hpbGQxKCkgIT0gTm9Ob2RlOwogICAgIH0KIAorICAgIGlmIChub2RlLmhhc0Fy
aXRoTm9kZUZsYWdzKCkpIHsKKyAgICAgICAgcHJpbnRmKCIlcyVzIiwgaGFzUHJpbnRlZCA/ICIs
ICIgOiAiIiwgYXJpdGhOb2RlRmxhZ3NBc1N0cmluZyhub2RlLnJhd0FyaXRoTm9kZUZsYWdzKCkp
KTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgfQogICAgIGlmIChub2RlLmhhc1Zh
ck51bWJlcigpKSB7CiAgICAgICAgIHByaW50ZigiJXN2YXIldSIsIGhhc1ByaW50ZWQgPyAiLCAi
IDogIiIsIG5vZGUudmFyTnVtYmVyKCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gOTU0ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjksMTAgKzcyOSw3IEBAIHZv
aWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVCYXMKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKLSAgICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzoKLSAgICBjYXNlIEFy
aXRoTXVsUG9zc2libHlOZWdaZXJvOgotICAgIGNhc2UgQXJpdGhNdWxTcGVjTm90TmVnWmVybzoK
LSAgICBjYXNlIEFyaXRoTXVsU2FmZTogeworICAgIGNhc2UgQXJpdGhNdWw6IHsKICAgICAgICAg
b3ZlcmZsb3cuYXBwZW5kKG1faml0LmJyYW5jaE11bDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxv
dywgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKSk7CiAgICAgICAgIG92ZXJmbG93LmFwcGVu
ZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikpOwog
ICAgICAgICBicmVhazsKQEAgLTgyMywxMCArODIwLDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9y
Ojpub25TcGVjdWxhdGl2ZUJhcwogICAgICAgICBtX2ppdC5zdWJEb3VibGUodG1wMkZQUiwgdG1w
MUZQUik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgY2FzZSBBcml0aE11bEln
bm9yZVplcm86Ci0gICAgY2FzZSBBcml0aE11bFBvc3NpYmx5TmVnWmVybzoKLSAgICBjYXNlIEFy
aXRoTXVsU3BlY05vdE5lZ1plcm86Ci0gICAgY2FzZSBBcml0aE11bFNhZmU6CisgICAgY2FzZSBB
cml0aE11bDoKICAgICAgICAgbV9qaXQubXVsRG91YmxlKHRtcDJGUFIsIHRtcDFGUFIpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHJldmlzaW9uIDk1NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMyBAQAogI2lmbmRlZiBERkdOb2Rl
X2gKICNkZWZpbmUgREZHTm9kZV9oCiAKKyNpbmNsdWRlIDx3dGYvQm91bmRzQ2hlY2tlZFBvaW50
ZXIuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAogLy8gRW1pdCB2YXJpb3VzIGxvZ2dp
bmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcgdGhlIGRhdGFm
bG93IGdyYXBocy4KICNkZWZpbmUgRU5BQkxFX0RGR19ERUJVR19WRVJCT1NFIDAKKy8vIEVtaXQg
ZHVtcHMgZHVyaW5nIHByb3BhZ2F0aW9uLCBpbiBhZGRpdGlvbiB0byBqdXN0IGFmdGVyLgorI2Rl
ZmluZSBFTkFCTEVfREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UgMAogLy8gRW1pdCBsb2dn
aW5nIGZvciBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIGF0IGV2ZXJ5IG5vZGUsIG5vdCBqdXN0
IG5vZGVzIHRoYXQKIC8vIGFjdHVhbGx5IGhhcyBzcGVjdWxhdGlvbiBjaGVja3MuCiAjZGVmaW5l
IEVOQUJMRV9ERkdfVkVSQk9TRV9WQUxVRV9SRUNPVkVSSUVTIDAKQEAgLTEwNSwxOCArMTA4LDk3
IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4OwogfTsKIAordHlwZWRl
ZiB1bnNpZ25lZCBBcml0aE5vZGVGbGFnczsKKyNkZWZpbmUgTm9kZVVzZUJvdHRvbSAgICAgIDB4
MDAKKyNkZWZpbmUgTm9kZVVzZWRBc051bWJlciAgIDB4MDEKKyNkZWZpbmUgTm9kZU5lZWRzTmVn
WmVybyAgIDB4MDIKKyNkZWZpbmUgTm9kZVVzZWRBc01hc2sgICAgIDB4MDMKKyNkZWZpbmUgTm9k
ZU1heU92ZXJmbG93ICAgIDB4MDQKKyNkZWZpbmUgTm9kZU1heU5lZ1plcm8gICAgIDB4MDgKKyNk
ZWZpbmUgTm9kZUJlaGF2aW9yTWFzayAgIDB4MGMKKworc3RhdGljIGlubGluZSBib29sIG5vZGVV
c2VkQXNOdW1iZXIoQXJpdGhOb2RlRmxhZ3MgZmxhZ3MpCit7CisgICAgcmV0dXJuICEhKGZsYWdz
ICYgTm9kZVVzZWRBc051bWJlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQoreworICAgIHJldHVybiAhbm9kZVVz
ZWRBc051bWJlcihmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuSWdub3Jl
TmVnYXRpdmVaZXJvKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQoreworICAgIHJldHVybiAhKGZsYWdz
ICYgTm9kZU5lZWRzTmVnWmVybyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuU3Bl
Y3VsYXRlSW50ZWdlcihBcml0aE5vZGVGbGFncyBmbGFncykKK3sKKyAgICBpZiAoZmxhZ3MgJiBO
b2RlTWF5T3ZlcmZsb3cpCisgICAgICAgIHJldHVybiAhbm9kZVVzZWRBc051bWJlcihmbGFncyk7
CisgICAgCisgICAgaWYgKGZsYWdzICYgTm9kZU1heU5lZ1plcm8pCisgICAgICAgIHJldHVybiBu
b2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKGZsYWdzKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworI2lmbmRlZiBOREVCVUcKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2Rl
RmxhZ3NBc1N0cmluZyhBcml0aE5vZGVGbGFncyBmbGFncykKK3sKKyAgICBpZiAoIWZsYWdzKQor
ICAgICAgICByZXR1cm4gIjxlbXB0eT4iOworCisgICAgc3RhdGljIGNvbnN0IGludCBzaXplID0g
NjQ7CisgICAgc3RhdGljIGNoYXIgZGVzY3JpcHRpb25bc2l6ZV07CisgICAgQm91bmRzQ2hlY2tl
ZFBvaW50ZXI8Y2hhcj4gcHRyKGRlc2NyaXB0aW9uLCBzaXplKTsKKyAgICAKKyAgICBib29sIGhh
c1ByaW50ZWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoZmxhZ3MgJiBOb2RlVXNlZEFzTnVtYmVy
KSB7CisgICAgICAgIHB0ci5zdHJjYXQoIlVzZWRBc051bSIpOworICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGZsYWdzICYgTm9kZU5lZWRzTmVnWmVybykg
eworICAgICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsK
KyAgICAgICAgcHRyLnN0cmNhdCgiTmVlZHNOZWdaZXJvIik7CisgICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5T3ZlcmZsb3cpIHsK
KyAgICAgICAgaWYgKGhhc1ByaW50ZWQpCisgICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Cisg
ICAgICAgIHB0ci5zdHJjYXQoIk1heU92ZXJmbG93Iik7CisgICAgICAgIGhhc1ByaW50ZWQgPSB0
cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5TmVnWmVybykgeworICAg
ICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKKyAgICAg
ICAgcHRyLnN0cmNhdCgiTWF5TmVnWmVybyIpOworICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgKnB0cisrID0gMDsKKyAgICAKKyAgICByZXR1cm4gZGVzY3JpcHRp
b247Cit9CisjZW5kaWYKKwogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51bSAoYmVsb3cp
IGFyZSBjb21wb3NlZCBvZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkgbm9uZSkKIC8v
IGFuZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2VuZXJhdGUsIGlz
IGNvbnN0YW50LCBldGMpLgotI2RlZmluZSBOb2RlSWRNYXNrICAgICAgICAgICAweEZGRgotI2Rl
ZmluZSBOb2RlUmVzdWx0TWFzayAgICAgIDB4RjAwMAotI2RlZmluZSBOb2RlTXVzdEdlbmVyYXRl
ICAgMHgxMDAwMCAvLyBzZXQgb24gbm9kZXMgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cywgYW5kIG1h
eSBub3QgdHJpdmlhbGx5IGJlIHJlbW92ZWQgYnkgRENFLgotI2RlZmluZSBOb2RlSXNDb25zdGFu
dCAgICAgMHgyMDAwMAotI2RlZmluZSBOb2RlSXNKdW1wICAgICAgICAgMHg0MDAwMAotI2RlZmlu
ZSBOb2RlSXNCcmFuY2ggICAgICAgMHg4MDAwMAotI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgICAw
eDEwMDAwMAotI2RlZmluZSBOb2RlSGFzVmFyQXJncyAgICAweDIwMDAwMAotI2RlZmluZSBOb2Rl
Q2xvYmJlcnNXb3JsZCAweDQwMDAwMAotI2RlZmluZSBOb2RlTWlnaHRDbG9iYmVyICAweDgwMDAw
MAorI2RlZmluZSBOb2RlSWRNYXNrICAgICAgICAgICAgMHhGRkYKKyNkZWZpbmUgTm9kZVJlc3Vs
dE1hc2sgICAgICAgMHhGMDAwCisjZGVmaW5lIE5vZGVNdXN0R2VuZXJhdGUgICAgMHgxMDAwMCAv
LyBzZXQgb24gbm9kZXMgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cywgYW5kIG1heSBub3QgdHJpdmlh
bGx5IGJlIHJlbW92ZWQgYnkgRENFLgorI2RlZmluZSBOb2RlSXNDb25zdGFudCAgICAgIDB4MjAw
MDAKKyNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgICAweDQwMDAwCisjZGVmaW5lIE5vZGVJc0Jy
YW5jaCAgICAgICAgMHg4MDAwMAorI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgICAgMHgxMDAwMDAK
KyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAgIDB4MjAwMDAwCisjZGVmaW5lIE5vZGVDbG9iYmVy
c1dvcmxkICAweDQwMDAwMAorI2RlZmluZSBOb2RlTWlnaHRDbG9iYmVyICAgMHg4MDAwMDAKIAog
Ly8gVGhlc2UgdmFsdWVzIHJlY29yZCB0aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG5vZGUgKGFzIGNo
ZWNrZWQgYnkgTm9kZVJlc3VsdE1hc2ssIGFib3ZlKSwgMCBmb3Igbm8gcmVzdWx0LgogI2RlZmlu
ZSBOb2RlUmVzdWx0SlMgICAgICAweDEwMDAKQEAgLTE0NywxNyArMjI5LDExIEBAIHByaXZhdGU6
CiAgICAgbWFjcm8oVmFsdWVUb0ludDMyLCBOb2RlUmVzdWx0SW50MzIgfCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgLyogVXNlZCB0byBib3ggdGhlIHJlc3VsdCBvZiBVUlNoaWZ0IG5vZGVzIChy
ZXN1bHQgaGFzIHJhbmdlIDAuLjJeMzItMSkuICovXAogICAgIG1hY3JvKFVJbnQzMlRvTnVtYmVy
LCBOb2RlUmVzdWx0TnVtYmVyKSBcCi0gICAgbWFjcm8oVUludDMyVG9OdW1iZXJTYWZlLCBOb2Rl
UmVzdWx0TnVtYmVyKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBhcml0aG1ldGljIG9wZXJh
dGlvbnMuICovXAogICAgIG1hY3JvKEFyaXRoQWRkLCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAg
bWFjcm8oQXJpdGhTdWIsIE5vZGVSZXN1bHROdW1iZXIpIFwKLSAgICBtYWNybyhBcml0aEFkZFNh
ZmUsIE5vZGVSZXN1bHROdW1iZXIpIC8qIFNhZmUgdmFyaWFudHMgYXJlIHRob3NlIHRoYXQgYXJl
IGtub3duIHRvIHRha2Ugb2xkIEpJVCBzbG93IHBhdGggKi9cCi0gICAgbWFjcm8oQXJpdGhTdWJT
YWZlLCBOb2RlUmVzdWx0TnVtYmVyKSBcCi0gICAgbWFjcm8oQXJpdGhNdWxTcGVjTm90TmVnWmVy
bywgTm9kZVJlc3VsdE51bWJlcikgLyogU3BlY3VsYXRlIHRoYXQgdGhlIHJlc3VsdCBpcyBub3Qg
bmVnYXRpdmUgemVyby4gKi8gXAotICAgIG1hY3JvKEFyaXRoTXVsSWdub3JlWmVybywgTm9kZVJl
c3VsdE51bWJlcikgLyogSWYgaXQncyBuZWdhdGl2ZSB6ZXJvLCBpZ25vcmUgaXQuICovIFwKLSAg
ICBtYWNybyhBcml0aE11bFBvc3NpYmx5TmVnWmVybywgTm9kZVJlc3VsdE51bWJlcikgLyogSXQg
ZGVmaW5pdGVseSBtYXkgYmUgbmVnYXRpdmUgemVybyBidXQgd2UgaGF2ZW4ndCBkZWNpZGVkIHdo
YXQgdG8gZG8gYWJvdXQgaXQgeWV0LiBObyBjb2RlIGdlbmVyYXRpb24gZm9yIHRoaXMgbm9kZTsg
aXQgZWl0aGVyIHR1cm5zIGludG8gQXJpdGhNdWxJZ25vcmVaZXJvIG9yIEFyaXRoTXVsU2FmZS4g
Ki8gXAotICAgIG1hY3JvKEFyaXRoTXVsU2FmZSwgTm9kZVJlc3VsdE51bWJlcikgLyogSXQgbWF5
IGJlIG5lZ2F0aXZlIHplcm8sIG9yIGl0IG1heSBwcm9kdWNlIG90aGVyIGZvcm1zIG9mIGRvdWJs
ZSwgc28gc3BlY3VsYXRlIGRvdWJsZS4gKi9cCisgICAgbWFjcm8oQXJpdGhNdWwsIE5vZGVSZXN1
bHROdW1iZXIpIFwKICAgICBtYWNybyhBcml0aERpdiwgTm9kZVJlc3VsdE51bWJlcikgXAogICAg
IG1hY3JvKEFyaXRoTW9kLCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhBYnMs
IE5vZGVSZXN1bHROdW1iZXIpIFwKQEAgLTE3Miw3ICsyNDgsNiBAQCBwcml2YXRlOgogICAgIFwK
ICAgICAvKiBBZGQgb2YgdmFsdWVzIG1heSBlaXRoZXIgYmUgYXJpdGhtZXRpYywgb3IgcmVzdWx0
IGluIHN0cmluZyBjb25jYXRlbmF0aW9uLiAqL1wKICAgICBtYWNybyhWYWx1ZUFkZCwgTm9kZVJl
c3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwKLSAgICBtYWNy
byhWYWx1ZUFkZFNhZmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWln
aHRDbG9iYmVyKSBcCiAgICAgXAogICAgIC8qIFByb3BlcnR5IGFjY2Vzcy4gKi9cCiAgICAgLyog
UHV0QnlWYWxBbGlhcyBpbmRpY2F0ZXMgYSAncHV0JyBhbGlhc2VzIGEgcHJpb3Igd3JpdGUgdG8g
dGhlIHNhbWUgcHJvcGVydHkuICovXApAQCAtMjU2LDYgKzMzMSw3IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5v
ZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIEFTU0VSVCghaGFzQXJpdGhOb2RlRmxhZ3MoKSk7CiAg
ICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKICAgICAgICAgY2hpbGRyZW4u
Zml4ZWQuY2hpbGQyID0gY2hpbGQyOwogICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBj
aGlsZDM7CkBAIC0zODYsNiArNDYyLDY2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJu
IG1fb3BJbmZvOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc0FyaXRoTm9kZUZsYWdzKCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOgor
ICAgICAgICBjYXNlIFZhbHVlVG9Eb3VibGU6CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6
CisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAg
IGNhc2UgQXJpdGhNdWw6CisgICAgICAgIGNhc2UgQXJpdGhBYnM6CisgICAgICAgIGNhc2UgQXJp
dGhNaW46CisgICAgICAgIGNhc2UgQXJpdGhNYXg6CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBBcml0aE5vZGVGbGFncyBy
YXdBcml0aE5vZGVGbGFncygpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzQXJpdGhOb2RlRmxh
Z3MoKSk7CisgICAgICAgIHJldHVybiBtX29wSW5mbzsKKyAgICB9CisgICAgCisgICAgLy8gVGhp
cyBjb3JyZWN0cyB0aGUgYXJpdGhtZXRpYyBub2RlIGZsYWdzLCBzbyB0aGF0IGlycmVsZXZhbnQg
Yml0cyBhcmUKKyAgICAvLyBpZ25vcmVkLiBJbiBwYXJ0aWN1bGFyLCBhbnl0aGluZyBvdGhlciB0
aGFuIEFyaXRoTXVsIGRvZXMgbm90IG5lZWQKKyAgICAvLyB0byBrbm93IGlmIGl0IGNhbiBzcGVj
dWxhdGUgb24gbmVnYXRpdmUgemVyby4KKyAgICBBcml0aE5vZGVGbGFncyBhcml0aE5vZGVGbGFn
cygpCisgICAgeworICAgICAgICBBcml0aE5vZGVGbGFncyByZXN1bHQgPSByYXdBcml0aE5vZGVG
bGFncygpOworICAgICAgICBpZiAob3AgPT0gQXJpdGhNdWwpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICByZXR1cm4gcmVzdWx0ICYgfk5vZGVOZWVkc05lZ1plcm87CisgICAg
fQorICAgIAorICAgIEFyaXRoTm9kZUZsYWdzIGFyaXRoTm9kZUZsYWdzRm9yQ29tcGFyZSgpCisg
ICAgeworICAgICAgICBpZiAoaGFzQXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgIHJldHVy
biBhcml0aE5vZGVGbGFncygpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzZXRBcml0aE5vZGVGbGFnKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc0FyaXRoTm9kZUZsYWdzKCkpOworICAgICAgICBtX29wSW5mbyA9IGZsYWdz
OworICAgIH0KKyAgICAKKyAgICBib29sIG1lcmdlQXJpdGhOb2RlRmxhZ3MoQXJpdGhOb2RlRmxh
Z3MgZmxhZ3MpCisgICAgeworICAgICAgICBpZiAoIWhhc0FyaXRoTm9kZUZsYWdzKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIEFyaXRoTm9kZUZsYWdzIG5ld0ZsYWdzID0g
bV9vcEluZm8gfCBmbGFnczsKKyAgICAgICAgaWYgKG5ld0ZsYWdzID09IG1fb3BJbmZvKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX29wSW5mbyA9IG5ld0ZsYWdzOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNWYXJOdW1iZXIoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG9wID09IEdldEdsb2JhbFZhciB8fCBvcCA9PSBQdXRHbG9i
YWxWYXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5j
cHAJKHJldmlzaW9uIDk1NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9w
YWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsMjcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgZml4cG9pbnQoKQogICAgIHsKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJP
U0UpCisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgIG1fZ3Jh
cGguZHVtcChtX2NvZGVCbG9jayk7CisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFVwIGhlcmUgd2Ugc3RhcnQgd2l0aCBhIGJhY2t3YXJkIHBhc3MgYmVjYXVzZSB3
ZSBzdXNwZWN0IHRoYXQgdG8gYmUKKyAgICAgICAgICAgIC8vIG1vcmUgcHJvZml0YWJsZS4KKyAg
ICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzQmFja3dhcmQoKTsKKyAgICAgICAgICAg
IGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRo
Tm9kZUZsYWdzRm9yd2FyZCgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgICAg
ICAKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIG1f
Y291bnQgPSAwOwogI2VuZGlmCiAgICAgICAgIGRvIHsKQEAgLTgzLDcgKzEwMyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBu
ZWFyLW9wdGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCiAgICAgICAgICAg
ICAvLyBERlMtc29ydGVkIGNvZGUuCi0gICAgICAgICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7Cisg
ICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQoKTsKICAgICAgICAgICAgIGlm
ICghbV9jaGFuZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC05
MiwxOSArMTEyLDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJl
cyB0d28gY2FzZXM6ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50CiAgICAg
ICAgICAgICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMg
YmFja3dhcmQgZmxvdy4KICAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAg
ICAgcHJvcGFnYXRlQmFja3dhcmQoKTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rpb25z
QmFja3dhcmQoKTsKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKICAgICAgICAgCiAgICAg
ICAgIGZpeHVwKCk7CiAgICAgICAgIAotI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyNp
ZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIHByaW50Zigi
R3JhcGggYWZ0ZXIgcHJvcGFnYXRpb24gZml4dXA6XG4iKTsKICAgICAgICAgbV9ncmFwaC5kdW1w
KG1fY29kZUJsb2NrKTsKICNlbmRpZgogCiAgICAgICAgIGxvY2FsQ1NFKCk7CiAKLSNpZiBFTkFC
TEUoREZHX0RFQlVHX1ZFUkJPU0UpCisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIENTRTpcbiIpOwogICAgICAgICBt
X2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwogI2VuZGlmCkBAIC0xMTIsMTIgKzEzMiwxNjMgQEAg
cHVibGljOgogICAgICAgICBhbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMoKTsKIAogI2lmIEVOQUJM
RShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciB2aXJ0dWFs
IHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsKKyAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciBw
cm9wYWdhdGlvbjpcbiIpOwogICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwogI2Vu
ZGlmCiAgICAgfQogICAgIAogcHJpdmF0ZToKKyAgICBib29sIGlzTm90TmVnWmVybyhOb2RlSW5k
ZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3Rh
bnQobV9jb2RlQmxvY2ssIG5vZGVJbmRleCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG1fY29k
ZUJsb2NrLCBub2RlSW5kZXgpOworICAgICAgICByZXR1cm4gIXZhbHVlICYmIDEuMCAvIHZhbHVl
IDwgMC4wOworICAgIH0KKyAgICAKKyAgICBib29sIGlzTm90WmVybyhOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobV9jb2Rl
QmxvY2ssIG5vZGVJbmRleCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiAhIW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG1fY29kZUJsb2NrLCBub2RlSW5k
ZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKE5vZGUm
IG5vZGUpCisgICAgeworICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsK
KyAgICAgICAgQXJpdGhOb2RlRmxhZ3MgZmxhZ3MgPSAwOworICAgICAgICAKKyAgICAgICAgaWYg
KG5vZGUuaGFzQXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgIGZsYWdzID0gbm9kZS5yYXdB
cml0aE5vZGVGbGFncygpOworICAgICAgICAKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICAgJXMgQCV1OiAlcyAiLCBHcmFwaDo6b3BO
YW1lKG9wKSwgbV9jb21waWxlSW5kZXgsIGFyaXRoTm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3MpKTsK
KyNlbmRpZgorICAgICAgICAKKyAgICAgICAgZmxhZ3MgJj0gTm9kZVVzZWRBc01hc2s7CisgICAg
ICAgIAorICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHN3
aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgIGNhc2UgQml0
QW5kOgorICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAg
Y2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICBjYXNlIEJp
dFVSU2hpZnQ6IHsKKyAgICAgICAgICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgYXJlIHBlcmZlY3Rs
eSBoYXBweSB3aXRoIHRydW5jYXRlZCBpbnRlZ2VycywKKyAgICAgICAgICAgIC8vIHNvIHdlIGRv
bid0IHdhbnQgdG8gcHJvcGFnYXRlIGFueXRoaW5nLgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6CisgICAgICAg
IGNhc2UgVmFsdWVUb0RvdWJsZToKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogeworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2Rl
RmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIFZhbHVlQWRkOiB7CisgICAg
ICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQxKCkpIHx8IGlzTm90TmVnWmVybyhu
b2RlLmNoaWxkMigpKSkKKyAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVy
bzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
aXRoU3ViOiB7CisgICAgICAgICAgICBpZiAoaXNOb3RaZXJvKG5vZGUuY2hpbGQxKCkpIHx8IGlz
Tm90WmVybyhub2RlLmNoaWxkMigpKSkKKyAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5l
ZWRzTmVnWmVybzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxh
Z3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVy
IHwgTm9kZU5lZWRzTmVnWmVybzsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBBcml0aE1pbjoKKyAgICAgICAgY2FzZSBBcml0aE1heDogeworICAgICAgICAgICAgZmxhZ3Mg
fD0gTm9kZVVzZWRBc051bWJlcjsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBBcml0aEFiczogeworICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87Cisg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5v
ZGVGbGFncyhmbGFncyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRB
c051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8pOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MgfCBOb2RlVXNlZEFz
TnVtYmVyKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5t
ZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05l
Z1plcm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEdldEJ5VmFsOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyB8IE5vZGVVc2VkQXNOdW1iZXIg
fCBOb2RlTmVlZHNOZWdaZXJvKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlcik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRz
TmVnWmVybzsKKyAgICAgICAgICAgIGlmIChvcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGls
ZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsr
KQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuW2NoaWxkSWR4XV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IE5vTm9k
ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgICAgIGlmIChu
b2RlLmNoaWxkMygpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQzKCldLm1lcmdlQXJpdGhO
b2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAg
ICAgcHJpbnRmKCIlc1xuIiwgY2hhbmdlZCA/ICJDSEFOR0VEIiA6ICIiKTsKKyNlbmRpZgorICAg
ICAgICAKKyAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CisgICAgfQorICAgIAorICAgIHZv
aWQgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NGb3J3YXJkKCkKKyAgICB7CisjaWYgRU5BQkxFKERG
R19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIlByb3BhZ2F0aW5n
IGFyaXRobWV0aWMgbm9kZSBmbGFncyBmb3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CisjZW5k
aWYKKyAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9n
cmFwaC5zaXplKCk7ICsrbV9jb21waWxlSW5kZXgpCisgICAgICAgICAgICBwcm9wYWdhdGVBcml0
aE5vZGVGbGFncyhtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NCYWNrd2FyZCgpCisgICAgeworI2lmIEVOQUJMRShE
RkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJQcm9wYWdhdGlu
ZyBhcml0aG1ldGljIG5vZGUgZmxhZ3MgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNl
bmRpZgorICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29t
cGlsZUluZGV4LS0gPiAwOykKKyAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBzZXRQcmVkaWN0
aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dy
YXBoW21fY29tcGlsZUluZGV4XS5oYXNSZXN1bHQoKSk7CkBAIC0xNDMsMTUgKzMxNCwxNSBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gSlNDOjptZXJnZVByZWRpY3Rpb24obV9wcmVkaWN0aW9u
c1ttX2NvbXBpbGVJbmRleF0sIHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKLSAgICB2b2lkIHBy
b3BhZ2F0ZU5vZGUoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9u
cyhOb2RlJiBub2RlKQogICAgIHsKICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBOb2RlVHlwZSBvcCA9IG5v
ZGUub3A7CiAKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50Zigi
ICAgJXNbJXVdOiAiLCBHcmFwaDo6b3BOYW1lKG9wKSwgbV9jb21waWxlSW5kZXgpOworI2lmIEVO
QUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICAl
cyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCk7CiAjZW5kaWYKICAg
ICAgICAgCiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwpAQCAtMTg0LDE5ICszNTUsMjYg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0TFNo
aWZ0OgogICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAgICAgIGNhc2UgVUludDMyVG9OdW1i
ZXI6CiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgogICAgICAgICBjYXNlIEFyaXRoTW9kOiB7
CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJl
ZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKKyAgICAg
ICAgICAgIGlmIChub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkp
KQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlv
bihQcmVkaWN0SW50MzIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJl
ZGljdE51bWJlciwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKwogICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6IHsKICAgICAgICAgICAgIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24ocHJlZGljdGlvbikp
IHsKLSAgICAgICAgICAgICAgICBpZiAoaXNOdW1iZXJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQot
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9u
KTsKKyAgICAgICAgICAgICAgICBpZiAoIShwcmVkaWN0aW9uICYgUHJlZGljdERvdWJsZSkgJiYg
bm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJl
ZGljdEludDMyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlv
bihQcmVkaWN0TnVtYmVyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICB9CkBAIC0y
MTAsNyArMzg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlz
U3Ryb25nUHJlZGljdGlvbihsZWZ0KSAmJiBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclBy
ZWRpY3Rpb24ocmlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0ludDMyUHJlZGlj
dGlvbihtZXJnZVByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSkpCisgICAgICAgICAgICAgICAgICAg
IGlmIChpc0ludDMyUHJlZGljdGlvbihtZXJnZVByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSkgJiYg
bm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9u
KFByZWRpY3RJbnQzMiwgU3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbiht
YWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CkBAIC0yMjUs
MTYgKzQwMywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhB
ZGQ6CiAgICAgICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVa
ZXJvOgotICAgICAgICBjYXNlIEFyaXRoTXVsUG9zc2libHlOZWdaZXJvOgotICAgICAgICBjYXNl
IEFyaXRoTXVsU3BlY05vdE5lZ1plcm86CisgICAgICAgIGNhc2UgQXJpdGhNdWw6CiAgICAgICAg
IGNhc2UgQXJpdGhNaW46CiAgICAgICAgIGNhc2UgQXJpdGhNYXg6IHsKICAgICAgICAgICAgIFBy
ZWRpY3RlZFR5cGUgbGVmdCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CiAgICAgICAg
ICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigpXTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSAm
JiBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW50
MzJQcmVkaWN0aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSkKKyAgICAgICAgICAg
ICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24obWVyZ2VQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkp
ICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9u
KFByZWRpY3RJbnQzMiwgU3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRp
Y3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOwpAQCAtMjUwLDMxICs0MjYs
MTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CiAg
ICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGNoaWxkID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxk
MSgpXTsKLSAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24oY2hpbGQpKQotICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKGNoaWxkKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aEFkZFNh
ZmU6Ci0gICAgICAgIGNhc2UgQXJpdGhTdWJTYWZlOgotICAgICAgICBjYXNlIEFyaXRoTXVsU2Fm
ZToKLSAgICAgICAgY2FzZSBVSW50MzJUb051bWJlclNhZmU6IHsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQ
cmVkaWN0aW9uKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNh
c2UgVmFsdWVBZGRTYWZlOiB7Ci0gICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3By
ZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSByaWdo
dCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDIoKV07Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkgJiYgaXNTdHJvbmdQcmVkaWN0aW9uKHJp
Z2h0KSkgewotICAgICAgICAgICAgICAgIGlmIChpc051bWJlclByZWRpY3Rpb24obGVmdCkgJiYg
aXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KSkKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJl
ZGljdGlvbikpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEobGVmdCAmIFByZWRpY3ROdW1i
ZXIpIHx8ICEocmlnaHQgJiBQcmVkaWN0TnVtYmVyKSkgewotICAgICAgICAgICAgICAgICAgICAv
LyBsZWZ0IG9yIHJpZ2h0IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBudW1i
ZXIuCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQ
cmVkaWN0aW9uKFByZWRpY3RTdHJpbmcsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24obWFrZVByZWRpY3Rpb24oUHJlZGljdFN0cmluZyB8IFByZWRpY3RJbnQzMiB8IFByZWRpY3RE
b3VibGUsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRp
Y3Rpb24oY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVDYW5TcGVjdWxhdGVJbnRl
Z2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKGNoaWxkKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVk
aWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMzcxLDcgKzUyNyw3IEBAIHByaXZhdGU6CiAjZW5kaWYK
ICAgICAgICAgfQogCi0jaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorI2lmIEVOQUJMRShE
RkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCJleHBlY3QoJXMp
ICIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSkpOwog
ICAgICAgICBwcmludGYoInVzZSglcykgJXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3VzZXNb
bV9jb21waWxlSW5kZXhdKSwgY2hhbmdlZCA/ICJDSEFOR0VEIiA6ICIiKTsKICNlbmRpZgpAQCAt
Mzc5LDI4ICs1MzUsMjggQEAgcHJpdmF0ZToKICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7
CiAgICAgfQogICAgIAotICAgIHZvaWQgcHJvcGFnYXRlRm9yd2FyZCgpCisgICAgdm9pZCBwcm9w
YWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQoKQogICAgIHsKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZF
UkJPU0UpCi0gICAgICAgIHByaW50ZigiUHJvcGFnYXRpbmcgZm9yd2FyZCBbJXVdXG4iLCArK21f
Y291bnQpOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAg
ICAgcHJpbnRmKCJQcm9wYWdhdGluZyBwcmVkaWN0aW9ucyBmb3J3YXJkIFsldV1cbiIsICsrbV9j
b3VudCk7CiAjZW5kaWYKICAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGls
ZUluZGV4IDwgbV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxlSW5kZXgpCi0gICAgICAgICAgICBw
cm9wYWdhdGVOb2RlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICAgICAgICAgIHByb3Bh
Z2F0ZU5vZGVQcmVkaWN0aW9ucyhtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgcHJvcGFnYXRlQmFja3dhcmQoKQorICAgIHZvaWQgcHJvcGFnYXRlUHJlZGlj
dGlvbnNCYWNrd2FyZCgpCiAgICAgewotI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAg
ICAgICAgcHJpbnRmKCJQcm9wYWdhdGluZyBiYWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwor
I2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRm
KCJQcm9wYWdhdGluZyBwcmVkaWN0aW9ucyBiYWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwog
I2VuZGlmCiAgICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsgbV9j
b21waWxlSW5kZXgtLSA+IDA7KQotICAgICAgICAgICAgcHJvcGFnYXRlTm9kZShtX2dyYXBoW21f
Y29tcGlsZUluZGV4XSk7CisgICAgICAgICAgICBwcm9wYWdhdGVOb2RlUHJlZGljdGlvbnMobV9n
cmFwaFttX2NvbXBpbGVJbmRleF0pOwogICAgIH0KICAgICAKICAgICB2b2lkIHRvRG91YmxlKE5v
ZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhd
Lm9wID09IFZhbHVlVG9OdW1iZXIpIHsKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisj
aWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgcHJp
bnRmKCIgIEAldSAtPiBWYWx1ZVRvRG91YmxlIiwgbm9kZUluZGV4KTsKICNlbmRpZgogICAgICAg
ICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm9wID0gVmFsdWVUb0RvdWJsZTsKQEAgLTQxNCwxMiAr
NTcwLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUu
b3A7CiAKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiICAg
JXNbJXVdOiAiLCBHcmFwaDo6b3BOYW1lKG9wKSwgbV9jb21waWxlSW5kZXgpOworI2lmIEVOQUJM
RShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICAlcyBA
JXU6ICIsIEdyYXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCk7CiAjZW5kaWYKICAgICAg
ICAgCiAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBWYWx1ZUFkZDogeworICAg
ICAgICAgICAgaWYgKCFub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdz
KCkpKSB7CisgICAgICAgICAgICAgICAgdG9Eb3VibGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAg
ICAgICAgICAgdG9Eb3VibGUobm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
bGVmdCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CiAgICAgICAgICAgICBQcmVkaWN0
ZWRUeXBlIHJpZ2h0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigpXTsKICAgICAgICAgICAg
IApAQCAtNDM0LDExICs1OTYsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFyaXRoQWRkOgogICAgICAgICBjYXNlIEFyaXRoU3ViOgotICAgICAgICBjYXNlIEFyaXRo
TXVsSWdub3JlWmVybzoKLSAgICAgICAgY2FzZSBBcml0aE11bFBvc3NpYmx5TmVnWmVybzoKLSAg
ICAgICAgY2FzZSBBcml0aE11bFNwZWNOb3ROZWdaZXJvOgorICAgICAgICBjYXNlIEFyaXRoTXVs
OgogICAgICAgICBjYXNlIEFyaXRoTWluOgogICAgICAgICBjYXNlIEFyaXRoTWF4OiB7CisgICAg
ICAgICAgICBpZiAoIW5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3Mo
KSkpIHsKKyAgICAgICAgICAgICAgICB0b0RvdWJsZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgICAgICB0b0RvdWJsZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBs
ZWZ0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKICAgICAgICAgICAgIFByZWRpY3Rl
ZFR5cGUgcmlnaHQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQyKCldOwogICAgICAgICAgICAg
CkBAIC00NTgsNiArNjI0LDExIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5TcGVjdWxh
dGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgICAgICB0b0Rv
dWJsZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0g
bV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKICAgICAgICAgICAgIGlmIChpc1N0cm9uZ1By
ZWRpY3Rpb24ocHJlZGljdGlvbikgJiYgKHByZWRpY3Rpb24gJiBQcmVkaWN0RG91YmxlKSkKICAg
ICAgICAgICAgICAgICB0b0RvdWJsZShub2RlLmNoaWxkMSgpKTsKQEAgLTQ2OSwzNyArNjQwLDE4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQXJpdGhBZGRTYWZlOgotICAgICAgICBjYXNlIEFyaXRoU3ViU2FmZToK
LSAgICAgICAgY2FzZSBBcml0aE11bFNhZmU6IHsKLSAgICAgICAgICAgIHRvRG91YmxlKG5vZGUu
Y2hpbGQxKCkpOwotICAgICAgICAgICAgdG9Eb3VibGUobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVmFsdWVB
ZGRTYWZlOiB7Ci0gICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25z
W25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJl
ZGljdGlvbnNbbm9kZS5jaGlsZDIoKV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChp
c1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkgJiYgaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSAmJiBp
c051bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KSkgewot
ICAgICAgICAgICAgICAgIHRvRG91YmxlKG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgICAg
IHRvRG91YmxlKG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCi0jaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorI2lmIEVO
QUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCJcbiIp
OwogI2VuZGlmCiAgICAgfQogICAgIAogICAgIHZvaWQgZml4dXAoKQogICAgIHsKLSNpZiBFTkFC
TEUoREZHX0RFQlVHX1ZFUkJPU0UpCisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICBwcmludGYoIlBlcmZvcm1pbmcgRml4dXBcbiIpOwogI2VuZGlmCiAg
ICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGgu
c2l6ZSgpOyArK21fY29tcGlsZUluZGV4KQpAQCAtNTU5LDcgKzcxMSw3IEBAIHByaXZhdGU6CiAg
ICAgTm9kZUluZGV4IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihOb2RlSW5kZXggY2hpbGQxID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2Rl
KQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IGNvbXB1dGVTdGFydEluZGV4Rm9y
Q2hpbGRyZW4oY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7Ci0jaWYgRU5BQkxFKERGR19ERUJVR19W
RVJCT1NFKQorI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAg
ICAgcHJpbnRmKCIgIGxvb2tiYWNrICV1OiAiLCByZXN1bHQpOwogI2VuZGlmCiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CkBAIC01NzksNyArNzMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgcmVzdWx0Kys7CiAgICAgICAgIEFTU0VSVChyZXN1bHQgPD0gbV9jb21waWxl
SW5kZXgpOwotI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyNpZiBFTkFCTEUoREZHX0RF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIHByaW50ZigiICBsaW1pdCAldTogIiwg
cmVzdWx0KTsKICNlbmRpZgogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNTk3LDYgKzc0OSw5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZS5vcCAhPSBvdGhlck5vZGUub3ApCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChu
b2RlLmFyaXRoTm9kZUZsYWdzRm9yQ29tcGFyZSgpICE9IG90aGVyTm9kZS5hcml0aE5vZGVGbGFn
c0ZvckNvbXBhcmUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAog
ICAgICAgICAgICAgTm9kZUluZGV4IG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CkBAIC02NDMsNyArNzk4LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAg
ICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgIGNhc2UgVmFsdWVBZGRTYWZlOgogICAgICAgICBj
YXNlIENvbXBhcmVMZXNzOgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgICAgIGNh
c2UgQ29tcGFyZUdyZWF0ZXI6CkBAIC03NTAsNyArOTA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdICE9IG1fcHJlZGljdGlvbnNbcmVwbGFj
ZW1lbnRdKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSNpZiBFTkFCTEUoREZHX0RF
QlVHX1ZFUkJPU0UpCisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQog
ICAgICAgICBwcmludGYoIiAgIFJlcGxhY2luZyBAJXUgLT4gQCV1IiwgbV9jb21waWxlSW5kZXgs
IHJlcGxhY2VtZW50KTsKICNlbmRpZgogICAgICAgICAKQEAgLTc3Niw4ICs5MzAsOCBAQCBwcml2
YXRlOgogICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCi0jaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBw
cmludGYoIiAgICVzWyV1XTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW21fY29tcGlsZUluZGV4
XS5vcCksIG1fY29tcGlsZUluZGV4KTsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BOYW1lKG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdLm9wKSwgbV9jb21waWxlSW5kZXgpOwogI2VuZGlmCiAKICAg
ICAgICAgc3dpdGNoIChub2RlLm9wKSB7CkBAIC03OTEsMTggKzk0NSwxMyBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6CiAgICAgICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAg
IGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVaZXJvOgotICAgICAg
ICBjYXNlIEFyaXRoTXVsUG9zc2libHlOZWdaZXJvOgotICAgICAgICBjYXNlIEFyaXRoTXVsU3Bl
Y05vdE5lZ1plcm86CisgICAgICAgIGNhc2UgQXJpdGhNdWw6CiAgICAgICAgIGNhc2UgQXJpdGhN
b2Q6CiAgICAgICAgIGNhc2UgQXJpdGhEaXY6CiAgICAgICAgIGNhc2UgQXJpdGhBYnM6CiAgICAg
ICAgIGNhc2UgQXJpdGhNaW46CiAgICAgICAgIGNhc2UgQXJpdGhNYXg6CiAgICAgICAgIGNhc2Ug
QXJpdGhTcXJ0OgotICAgICAgICBjYXNlIEFyaXRoQWRkU2FmZToKLSAgICAgICAgY2FzZSBBcml0
aFN1YlNhZmU6Ci0gICAgICAgIGNhc2UgQXJpdGhNdWxTYWZlOgogICAgICAgICAgICAgc2V0UmVw
bGFjZW1lbnQocHVyZUNTRShub2RlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IApAQCAtODU2LDcgKzEwMDUsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBtX2xhc3RTZWVuW25vZGUub3AgJiBOb2RlSWRNYXNrXSA9IG1fY29tcGlsZUluZGV4Owot
I2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIHByaW50ZigiXG4iKTsKICNlbmRpZgogICAgIH0KQEAg
LTg3MSw3ICsxMDIwLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGxvY2FsQ1NFKCkKICAg
ICB7Ci0jaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorI2lmIEVOQUJMRShERkdfREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCJQZXJmb3JtaW5nIGxvY2FsIENT
RToiKTsKICNlbmRpZgogICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrID0gMDsgYmxvY2sgPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9jaykKQEAgLTkzNiw3ICsxMDg1LDcgQEAgcHJp
dmF0ZToKICAgICAKICAgICBQcmVkaWN0aW9uVHJhY2tlciBtX3ZhcmlhYmxlVXNlczsKIAotI2lm
IEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCiAgICAgdW5zaWduZWQgbV9jb3VudDsKICNlbmRpZgogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDk1NDg0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzMCw2ICs4MzAsMjUgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
VUludDMyVG9OdW1iZXI6IHsKKyAgICAgICAgaWYgKCFub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihu
b2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhp
cyBzb21ldGltZXMgcHJvZHVjZXMgZG91Ymxlcy4gU28gcHJvZHVjZSBhIGRvdWJsZSBldmVyeQor
ICAgICAgICAgICAgLy8gdGltZS4gVGhpcyBhdCBsZWFzdCBhbGxvd3Mgc3Vic2VxdWVudCBjb2Rl
IHRvIG5vdCBoYXZlIHdlaXJkIGNvbmRpdGlvbmFscy4KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAg
RlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BS
UmVnIGlucHV0R1BSID0gb3AxLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIG91dHB1dEZQUiA9
IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQuY29udmVydElu
dDMyVG9Eb3VibGUoaW5wdXRHUFIsIG91dHB1dEZQUik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIHBvc2l0aXZlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMigwKSk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygm
dHdvVG9UaGUzMiksIG91dHB1dEZQUik7CisgICAgICAgICAgICBwb3NpdGl2ZS5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvdWJsZVJlc3VsdChvdXRwdXRGUFIsIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgSW50ZWdlck9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSk7CiAKQEAgLTg0MSwyNyArODYwLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAg
ICBjYXNlIFVJbnQzMlRvTnVtYmVyU2FmZTogewotICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhp
cyBzb21ldGltZXMgcHJvZHVjZXMgZG91Ymxlcy4gU28gcHJvZHVjZSBhIGRvdWJsZSBldmVyeQot
ICAgICAgICAvLyB0aW1lLiBUaGlzIGF0IGxlYXN0IGFsbG93cyBzdWJzZXF1ZW50IGNvZGUgdG8g
bm90IGhhdmUgd2VpcmQgY29uZGl0aW9uYWxzLgotICAgICAgICAKLSAgICAgICAgSW50ZWdlck9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gb3AxLmdwcigp
OwotICAgICAgICBGUFJSZWcgb3V0cHV0RlBSID0gcmVzdWx0LmZwcigpOwotICAgICAgICAKLSAg
ICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIG91dHB1dEZQUik7Ci0g
ICAgICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVk
SW1tMzIoMCkpOwotICAgICAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRl
QWRkcmVzcygmdHdvVG9UaGUzMiksIG91dHB1dEZQUik7Ci0gICAgICAgIHBvc2l0aXZlLmxpbmso
Jm1faml0KTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZVJlc3VsdChvdXRwdXRGUFIsIG1fY29t
cGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCiAgICAgY2FzZSBWYWx1ZVRvSW50
MzI6IHsKKyAgICAgICAgaWYgKHNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEo
KSkpIHsKKyAgICAgICAgICAgIC8vIERvIGl0IHRoZSBzYWZlIHdheS4KKyAgICAgICAgICAgIG5v
blNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEp
OwogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTg3MCwx
NyArODc1LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICB9CiAKICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigp
LCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4LCBvcDEuZm9ybWF0KCkpOworICAgICAgICBpZiAoc2hvdWxkTm90U3Bl
Y3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBGUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9w
MS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQu
ZnByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwot
ICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0gICAgICAgIG1faml0Lm1v
dmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICBkb3VibGVSZXN1bHQo
cmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIAorICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCwgb3AxLmZvcm1hdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC04
OTQsMTMgKzkwMCwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAKICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsK
KyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5j
aGlsZDIoKSkgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygp
KSkgewogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgewog
ICAgICAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0
aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwotCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hB
ZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMi5ncHIoKSwgSW1tMzIoaW1tMSksIHJl
c3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2Rl
Q2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAg
ICAgICAgICAgIG1faml0LmFkZDMyKEltbTMyKGltbTEpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AyLmdwcigpLCBJbW0z
MihpbW0xKSwgcmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtOTExLDcgKzkyMSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0z
MihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVu
Y2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuYWRkMzIoSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIp
LCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0
LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05MjQs
MjQgKzkzOCwyOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICBHUFJSZWcgZ3ByMSA9IG9wMS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBn
cHIyID0gb3AyLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIGdwclJlc3VsdCA9IHJlc3VsdC5n
cHIoKTsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrID0gbV9qaXQuYnJh
bmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBncHIxLCBncHIyLCBncHJSZXN1bHQp
OwotCi0gICAgICAgICAgICBpZiAoZ3ByMSA9PSBncHJSZXN1bHQpCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShTcGVjdWxhdGl2ZUFk
ZCwgZ3ByUmVzdWx0LCBncHIyKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChncHIyID09IGdwclJl
c3VsdCkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGNoZWNrLCBTcGVjdWxhdGlv
blJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1bHQsIGdwcjEpKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGNoZWNrKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5v
ZGVGbGFncygpKSkgeworICAgICAgICAgICAgICAgIGlmIChncHIxID09IGdwclJlc3VsdCkKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoZ3ByMiwgZ3ByUmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShncHIyLCBncHJS
ZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihncHIxLCBncHJSZXN1bHQp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2sgPSBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fz
c2VtYmxlcjo6T3ZlcmZsb3csIGdwcjEsIGdwcjIsIGdwclJlc3VsdCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKGdwcjEgPT0gZ3ByUmVzdWx0KQorICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGNoZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1
bGF0aXZlQWRkLCBncHJSZXN1bHQsIGdwcjIpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChn
cHIyID09IGdwclJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhj
aGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIx
KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKGNoZWNrKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaW50ZWdlclJlc3Vs
dChncHJSZXN1bHQsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gc2FmZSBjYXNlcy4KLSAg
ICB9Ci0gICAgICAgIAotICAgIGNhc2UgVmFsdWVBZGRTYWZlOgotICAgIGNhc2UgQXJpdGhBZGRT
YWZlOiB7CiAgICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS5jaGlsZDEoKSwg
bm9kZS5jaGlsZDIoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC05NTUsNyArOTc0LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIEFTU0VSVChvcCA9PSBWYWx1ZUFkZCB8fCBvcCA9PSBW
YWx1ZUFkZFNhZmUpOworICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOwogICAgICAgICAK
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC05NzYsMTMgKzk5
NSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQog
CiAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkgeworICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSAmJiBub2RlQ2FuU3Bl
Y3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICBpZiAo
aXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CiAgICAgICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAg
ICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpOwog
ICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKLSAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpP
dmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAg
ICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygp
KSkgeworICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoSW1tMzIoaW1tMiksIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93
LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICAgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC05OTIsMTYgKzEwMTUsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hT
dWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1
bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUu
YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihvcDIuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywg
b3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOwogCiAgICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBzYWZl
IGNhc2UuCi0gICAgfQotICAgICAgICAKLSAgICBjYXNlIEFyaXRoU3ViU2FmZTogewogICAgICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAg
ICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKQEAgLTEwMTQsMjIgKzEwMzcsMjcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBjYXNlIEFyaXRoTXVsU3BlY05vdE5lZ1plcm86Ci0gICAgY2FzZSBB
cml0aE11bFBvc3NpYmx5TmVnWmVybzoKLSAgICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzogewot
ICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNo
aWxkMigpKSkgeworICAgIGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkgJiYgbm9kZUNhblNwZWN1
bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgewogICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgR1BSUmVnIHJl
ZzEgPSBvcDEuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVnMiA9IG9wMi5ncHIoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2hhdCBpcyB1bmZvcnR1bmF0ZSBpcyB0aGF0IHdl
IGNhbm5vdCB0YWtlIGFkdmFudGFnZSBvZiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKCkKKyAgICAg
ICAgICAgIC8vIGhlcmUuIEEgbXVsdGlwbHkgb24gaW50ZWdlcnMgcGVyZm9ybWVkIGluIHRoZSBk
b3VibGUgZG9tYWluIGFuZCB0aGVuIHRydW5jYXRlZCB0bworICAgICAgICAgICAgLy8gYW4gaW50
ZWdlciB3aWxsIGdpdmUgYSBkaWZmZXJlbnQgcmVzdWx0IHRoYW4gYSBtdWx0aXBseSBwZXJmb3Jt
ZWQgaW4gdGhlIGludGVnZXIKKyAgICAgICAgICAgIC8vIGRvbWFpbiBhbmQgdGhlbiB0cnVuY2F0
ZWQsIGlmIHRoZSBpbnRlZ2VyIGRvbWFpbiByZXN1bHQgd291bGQgaGF2ZSByZXN1bHRlZCBpbgor
ICAgICAgICAgICAgLy8gc29tZXRoaW5nIGJpZ2dlciB0aGFuIHdoYXQgYSAzMi1iaXQgaW50ZWdl
ciBjYW4gaG9sZC4gSmF2YVNjcmlwdCBtYW5kYXRlcyB0aGF0CisgICAgICAgICAgICAvLyB0aGUg
c2VtYW50aWNzIGFyZSBhbHdheXMgYXMgaWYgdGhlIG11bHRpcGx5IGhhZCBiZWVuIHBlcmZvcm1l
ZCBpbiB0aGUgZG91YmxlCisgICAgICAgICAgICAvLyBkb21haW4uCisgICAgICAgICAgICAKICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok92ZXJmbG93LCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpKTsKLQotICAgICAgICAgICAg
Ly8gT25seSB0aGUgQXJpdGhNdWxTcGVjTm90TmVnWmVybyBvcGNvZGUgcmVxdWlyZXMgdGhhdCB3
ZSBhY3R1YWxseSB0dXJuCi0gICAgICAgICAgICAvLyBuZWdhdGl2ZSB6ZXJvIGludG8gYSBkb3Vi
bGUuIFRoZSBvdGhlciB0d28gbWVhbiB0aGF0IGFsbCB1c2VycyBvZiB0aGlzCi0gICAgICAgICAg
ICAvLyByZXN1bHQgZG9uJ3QgY2FyZSBpZiBpdCdzIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgemVy
by4KLSAgICAgICAgICAgIGlmIChvcCA9PSBBcml0aE11bFNwZWNOb3ROZWdaZXJvKSB7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCBpZiB0aGUg
dXNlcnMgb2YgdGhpcyBub2RlIGNhcmUgYWJvdXQgc3VjaCB0aGluZ3MuCisgICAgICAgICAgICBp
ZiAoIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygpKSkgewog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJlc3VsdE5vblplcm8gPSBtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSk7CiAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIHJlZzEsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
LCByZWcyLCBUcnVzdGVkSW1tMzIoMCkpKTsKQEAgLTEwNDAsMTAgKzEwNjgsNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHNhZmUgY2FzZS4K
LSAgICB9Ci0KLSAgICBjYXNlIEFyaXRoTXVsU2FmZTogewogICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwpAQCAtMTA5OSw3ICsxMTIzLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBBcml0aEFiczogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNo
aWxkMSgpKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxk
MSgpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7
CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTExMjYsNyArMTE1MCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAg
Y2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OiB7Ci0gICAgICAgIGlmIChzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAg
IGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkp
ICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBv
cDEpOwpAQCAtMTg3Niw3ICsxOTAwLDcgQEAgVmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6
Y29tcHV0ZVZhbAogICAgICAgICAKICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAg
ICAKLSAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyIHx8IG5vZGVQdHIt
Pm9wID09IFVJbnQzMlRvTnVtYmVyU2FmZSkgeworICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0g
VUludDMyVG9OdW1iZXIpIHsKICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBub2Rl
UHRyLT5jaGlsZDEoKTsKICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2Rl
SW5kZXhdOwogICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHIt
PnZpcnR1YWxSZWdpc3RlcigpXTsKQEAgLTE5MDcsNyArMTkzMSw2IEBAIFZhbHVlUmVjb3Zlcnkg
U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0lu
dDMySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAgICAgICAgIGNh
c2UgVUludDMyVG9OdW1iZXJTYWZlOgogICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJl
ckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107980</attachid>
            <date>2011-09-20 02:41:59 -0700</date>
            <delta_ts>2011-09-20 08:48:37 -0700</delta_ts>
            <desc>the patch - fix bugs</desc>
            <filename>arithmodeflags_patch_3.diff</filename>
            <type>text/plain</type>
            <size>63641</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU1MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzQgQEAK
KzIwMTEtMDktMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIHBlcmZvcm1zIHRvbyBtYW55IG5lZ2F0aXZlIHplcm8gY2hlY2tzLCBhbmQgdG9vIG1h
bnkKKyAgICAgICAgb3ZlcmZsb3cgY2hlY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02ODQzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIGNvbXByZWhlbnNpdmUgc3VwcG9y
dCBmb3IgZGVjaWRpbmcgaG93IHRvIHBlcmZvcm0gYW4KKyAgICAgICAgYXJpdGhtZXRpYyBvcGVy
YXRpb25zIGJhc2VkIG9uIGEgY29tYmluYXRpb24gb2Ygb3ZlcmZsb3cgcHJvZmlsaW5nLAorICAg
ICAgICBuZWdhdGl2ZSB6ZXJvIHByb2ZpbGluZywgdmFsdWUgcHJvZmlsaW5nLCBhbmQgYSBzdGF0
aWMgYW5hbHlzaXMgb2YKKyAgICAgICAgaG93IHRoZSByZXN1bHRzIG9mIHRoZXNlIG9wZXJhdGlv
bnMgZ2V0IHVzZWQuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgNzIlIHNwZWVkLXVwIG9u
IHN0YW5mb3JkLWNyeXB0by1zaGEyNTYtaXRlcmF0aXZlLCBhbmQgYQorICAgICAgICAyLjUlIHNw
ZWVkLXVwIG9uIHRoZSBLcmFrZW4gYXZlcmFnZSwgYSAxLjQlIHNwZWVkLXVwIG9uIHRoZSBWOAor
ICAgICAgICBnZW9tZWFuLCBhbmQgbmV1dHJhbCBvbiBTdW5TcGlkZXIuIEl0J3MgYWxzbyBhbiA4
LjUlIHNwZWVkLXVwIG9uCisgICAgICAgIFY4LWNyeXB0bywgYmVjYXVzZSBhcHBhcmVudHkgZXZl
cnl0aGluZyB3ZSBkbyBzcGVlZHMgdXAgY3J5cHRvLgorCisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6dG9JbnQz
Mik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnRvTnVtYmVyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aXNTbWFsbEludDMyQ29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjp2YWx1ZU9mSW50MzJDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OndlYWtseVByZWRpY3RJbnQzMik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1ha2VTYWZlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnByb2Nlc3NQaGlTdGFjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVCYXNp
Y0FyaXRoT3ApOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
bm9kZVVzZWRBc051bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUNhblRydW5jYXRlSW50
ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6bm9kZUNhblNwZWN1bGF0ZUludGVnZXIpOgorICAgICAgICAoSlND
OjpERkc6OmFyaXRoTm9kZUZsYWdzQXNTdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FyaXRoTm9kZUZsYWdzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpyYXdBcml0aE5vZGVGbGFncyk6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6YXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmFy
aXRoTm9kZUZsYWdzRm9yQ29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0QXJp
dGhOb2RlRmxhZyk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bWVyZ2VBcml0aE5vZGVGbGFn
cyk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BhZ2F0b3I6OmZpeHBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpp
c05vdE5lZ1plcm8pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmlzTm90WmVybyk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3Mp
OgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdz
Rm9yd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhO
b2RlRmxhZ3NCYWNrd2FyZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFn
YXRlTm9kZVByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9w
YWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6
OnByb3BhZ2F0ZVByZWRpY3Rpb25zQmFja3dhcmQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6OnRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXh1cE5v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmZpeHVwKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wYWdhdG9yOjpzdGFydEluZGV4Rm9yQ2hpbGRyZW4pOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OmVuZEluZGV4Rm9yUHVyZUNTRSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6cHVyZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
Y2xvYmJlcnNXb3JsZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6c2V0UmVwbGFj
ZW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpsb2NhbENTRSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVW
YWx1ZVJlY292ZXJ5Rm9yKToKKwogMjAxMS0wOS0xOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5l
bmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0b1ByaW1pdGl2ZSBmcm9tIEpTQ2Vs
bApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDk1NTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw5ICsxOTMsNiBAQCBwcml2
YXRlOgogICAgICAgICBpZiAobm9kZS5vcCA9PSBVSW50MzJUb051bWJlcikKICAgICAgICAgICAg
IHJldHVybiBub2RlLmNoaWxkMSgpOwogCi0gICAgICAgIGlmIChub2RlLm9wID09IFVJbnQzMlRv
TnVtYmVyU2FmZSkKLSAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOwotCiAgICAgICAg
IC8vIENoZWNrIGZvciBudW1lcmljIGNvbnN0YW50cyBib3hlZCBhcyBKU1ZhbHVlcy4KICAgICAg
ICAgaWYgKG5vZGUub3AgPT0gSlNDb25zdGFudCkgewogICAgICAgICAgICAgSlNWYWx1ZSB2ID0g
dmFsdWVPZkpTQ29uc3RhbnQoaW5kZXgpOwpAQCAtMjIxLDcgKzIxOCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobm9kZS5jb25zdGFudE51bWJlcigp
KTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBhZGRUb0dyYXBoKFZhbHVlVG9OdW1iZXIs
IGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoVmFsdWVUb051bWJlciwgT3BJbmZv
KE5vZGVVc2VCb3R0b20pLCBpbmRleCk7CiAgICAgfQogCiAgICAgTm9kZUluZGV4IGdldEpTQ29u
c3RhbnQodW5zaWduZWQgY29uc3RhbnQpCkBAIC0yNjQsMTAgKzI2MSw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIGludDMyX3QgaW50VmFsdWUgPSB2YWx1ZS5hc0ludDMyKCk7CiAgICAgICAgIHJldHVy
biBpbnRWYWx1ZSA+PSAtNSAmJiBpbnRWYWx1ZSA8PSA1OwogICAgIH0KLSAgICBib29sIGlzRG91
YmxlQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBp
c0pTQ29uc3RhbnQobm9kZUluZGV4KSAmJiB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmlz
TnVtYmVyKCk7Ci0gICAgfQogICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGdldHRpbmcg
Y29uc3RhbnQgdmFsdWVzLgogICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZUluZGV4
IGluZGV4KQogICAgIHsKQEAgLTI3OSwxNCArMjcyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgQVNT
RVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKICAgICAgICAgcmV0dXJuIHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGVJbmRleCkuYXNJbnQzMigpOwogICAgIH0KLSAgICBkb3VibGUgdmFsdWVP
ZkRvdWJsZUNvbnN0YW50KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICBBU1NF
UlQoaXNEb3VibGVDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgZG91YmxlIHZhbHVlOwot
ICAgICAgICBib29sIG9rYXkgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLmdldE51bWJl
cih2YWx1ZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQob2theSwgb2theSk7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICB9CiAKICAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgSlNDb25z
dGFudCB3aXRoIHRoZSB2YWx1ZSAndW5kZWZpbmVkJy4KICAgICBOb2RlSW5kZXggY29uc3RhbnRV
bmRlZmluZWQoKQpAQCAtNDg2LDEwICs0NzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc3dp
dGNoIChub2RlUHRyLT5vcCkgewogICAgICAgICAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAg
ICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzoK
LSAgICAgICAgICAgIGNhc2UgQXJpdGhNdWxTcGVjTm90TmVnWmVybzoKLSAgICAgICAgICAgIGNh
c2UgQXJpdGhNdWxQb3NzaWJseU5lZ1plcm86Ci0gICAgICAgICAgICBjYXNlIEFyaXRoTXVsU2Fm
ZToKKyAgICAgICAgICAgIGNhc2UgQXJpdGhNdWw6CiAgICAgICAgICAgICBjYXNlIFZhbHVlQWRk
OgogICAgICAgICAgICAgICAgIG1fcmV1c2FibGVOb2RlU3RhY2suYXBwZW5kKCZtX2dyYXBoW25v
ZGVQdHItPmNoaWxkMSgpXSk7CiAgICAgICAgICAgICAgICAgbV9yZXVzYWJsZU5vZGVTdGFjay5h
cHBlbmQoJm1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQyKCldKTsKQEAgLTUyNSw3MCArNTA3LDM4IEBA
IHByaXZhdGU6CiAgICAgICAgIHN0cm9uZ2x5UHJlZGljdChub2RlSW5kZXgsIG1fY3VycmVudElu
ZGV4KTsKICAgICB9CiAgICAgCi0gICAgTm9kZVR5cGUgbWFrZVNhZmUoTm9kZVR5cGUgb3ApCisg
ICAgTm9kZUluZGV4IG1ha2VTYWZlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAg
ICBpZiAoIW1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5k
ZXgpKQotICAgICAgICAgICAgcmV0dXJuIG9wOworICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRl
eDsKICAgICAgICAgCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmlu
dGYoIk1ha2luZyAlcyBAJWx1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzbG93LWNhc2UgY291bnRl
ciBpcyBhdCAldVxuIiwgR3JhcGg6Om9wTmFtZShvcCksIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJl
bnRJbmRleCwgbV9wcm9maWxlZEJsb2NrLT5zbG93Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7CisgICAgICAgIHByaW50ZigiTWFraW5nICVz
IEAldSBzYWZlIGF0IGJjIyV1IGJlY2F1c2Ugc2xvdy1jYXNlIGNvdW50ZXIgaXMgYXQgJXVcbiIs
IEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4LCBtX2N1cnJl
bnRJbmRleCwgbV9wcm9maWxlZEJsb2NrLT5zbG93Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNl
dChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAg
IHN3aXRjaCAob3ApIHsKKyAgICAgICAgc3dpdGNoIChtX2dyYXBoW25vZGVJbmRleF0ub3ApIHsK
ICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgICAgIHJldHVybiBVSW50MzJU
b051bWJlclNhZmU7CiAgICAgICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgICAgICByZXR1cm4g
QXJpdGhBZGRTYWZlOwogICAgICAgICBjYXNlIEFyaXRoU3ViOgotICAgICAgICAgICAgcmV0dXJu
IEFyaXRoU3ViU2FmZTsKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgICAgIG1fZ3Jh
cGhbbm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UgaW5pdGlhbGl6
ZSBBcml0aE11bCB0byBBcml0aE11bElnbm9yZVplcm8gYW5kIHB1c2ggaXQgdG93YXJkcwotICAg
ICAgICAgICAgLy8gc2FmZXIgdmFyaWFudHMgYXMgd2UgbGVhcm4gbW9yZSwgdW5sZXNzIHdlIGFs
cmVhZHkga25vdyB0aGF0IGl0Ci0gICAgICAgICAgICAvLyBjYW4gb3ZlcmZsb3cuIElmIGl0IGRv
ZXNuJ3Qgb3ZlcmZsb3csIHdlIGZpcnN0IHR1cm4gaXQgaW50bwotICAgICAgICAgICAgLy8gUG9z
c2libHlOZWdaZXJvIGlmIHdlIHNlZSB0aGF0IGl0IGhhZCBiZWVuIC0wIGR1cmluZyBvbGQgSklU
Ci0gICAgICAgICAgICAvLyBleGVjdXRpb24uCi0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVa
ZXJvOgorICAgICAgICBjYXNlIEFyaXRoTXVsOgogICAgICAgICAgICAgaWYgKG1fcHJvZmlsZWRC
bG9jay0+bGlrZWx5VG9UYWtlRGVlcGVzdFNsb3dDYXNlKG1fY3VycmVudEluZGV4KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gQXJpdGhNdWxTYWZlOworICAgICAgICAgICAgICAgIG1fZ3JhcGhb
bm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyB8IE5vZGVNYXlO
ZWdaZXJvKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gQXJpdGhN
dWxQb3NzaWJseU5lZ1plcm87CisgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm1l
cmdlQXJpdGhOb2RlRmxhZ3MoTm9kZU1heU5lZ1plcm8pOworICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAgICAgIHJldHVybiBW
YWx1ZUFkZFNhZmU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBQaGFudG9tOyAvLyBIYXZlIHRvIHJldHVybiBz
b21ldGhpbmcuCi0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IGdldFRydWVS
ZXN1bHQoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ncmFw
aFtub2RlSW5kZXhdLm9wKSB7Ci0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVaZXJvOgotICAg
ICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm9wID0gQXJpdGhNdWxTcGVjTm90TmVnWmVybzsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRoTXVsUG9zc2libHlOZWdaZXJv
OgotICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm9wID0gQXJpdGhNdWxTYWZlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBpc011bHRpcGx5KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCkgewotICAgICAgICBjYXNlIEFyaXRoTXVs
U3BlY05vdE5lZ1plcm86Ci0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVaZXJvOgotICAgICAg
ICBjYXNlIEFyaXRoTXVsUG9zc2libHlOZWdaZXJvOgotICAgICAgICBjYXNlIEFyaXRoTXVsU2Fm
ZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgSlNHbG9iYWxEYXRhKiBt
X2dsb2JhbERhdGE7CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBDb2RlQmxvY2sq
IG1fcHJvZmlsZWRCbG9jazsKQEAgLTY4OSw3ICs2MzksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVNaW5NYXgoYm9vbCB1CiAgICAgfQogICAgIAogICAgIGlmIChsYXN0QXJnID09IGZp
cnN0QXJnICsgMikgewotICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChvcCwg
Z2V0VG9OdW1iZXIoZmlyc3RBcmcgKyAxKSwgZ2V0VG9OdW1iZXIoZmlyc3RBcmcgKyAyKSkpOwor
ICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChvcCwgT3BJbmZvKE5vZGVVc2VC
b3R0b20pLCBnZXRUb051bWJlcihmaXJzdEFyZyArIDEpLCBnZXRUb051bWJlcihmaXJzdEFyZyAr
IDIpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTcxMyw3ICs2NjMs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGlm
IChhYnNBcmcgPiBsYXN0QXJnKQogICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNvbnN0
YW50TmFOKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwg
YWRkVG9HcmFwaChBcml0aEFicywgZ2V0VG9OdW1iZXIoYWJzQXJnKSkpOworICAgICAgICAgICAg
c2V0KHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhBYnMsIE9wSW5mbyhOb2RlVXNlQm90
dG9tKSwgZ2V0VG9OdW1iZXIoYWJzQXJnKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgICAgIApAQCAtODU3LDExICs4MDcsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGlmICh2YWx1ZU9mSW50MzJDb25zdGFu
dChvcDIpICYgMHgxZikKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChC
aXRVUlNoaWZ0LCBvcDEsIG9wMik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKG1ha2VTYWZlKFVJbnQzMlRvTnVtYmVyKSwgb3Ax
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbWFrZVNhZmUoYWRkVG9HcmFwaChVSW50
MzJUb051bWJlciwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcDEpKTsKICAgICAgICAgICAgIH0g
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENhbm5vdCBvcHRpbWl6ZSBhdCB0aGlzIHN0YWdl
OyBzaGlmdCAmIHBvdGVudGlhbGx5IHJlYm94IGFzIGEgZG91YmxlLgogICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGFkZFRvR3JhcGgoQml0VVJTaGlmdCwgb3AxLCBvcDIpOwotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGFkZFRvR3JhcGgobWFrZVNhZmUoVUludDMyVG9OdW1iZXIpLCByZXN1bHQp
OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1ha2VTYWZlKGFkZFRvR3JhcGgoVUludDMyVG9O
dW1iZXIsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgcmVzdWx0KSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0LCBQ
cmVkaWN0SW50MzIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdXJzaGlmdCk7CkBAIC04
NzMsNyArODIzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldFRvTnVtYmVyKHNyY0RzdCk7CiAg
ICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3ApOwotICAgICAgICAgICAgc2V0KHNyY0Rz
dCwgYWRkVG9HcmFwaChtYWtlU2FmZShBcml0aEFkZCksIG9wLCBvbmUoKSkpOworICAgICAgICAg
ICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgT3BJbmZvKE5vZGVV
c2VCb3R0b20pLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wcmVf
aW5jKTsKICAgICAgICAgfQogCkBAIC04ODMsNyArODMzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IG9wID0gZ2V0VG9O
dW1iZXIoc3JjRHN0KTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihvcCk7CiAgICAg
ICAgICAgICBzZXQocmVzdWx0LCBvcCk7Ci0gICAgICAgICAgICBzZXQoc3JjRHN0LCBhZGRUb0dy
YXBoKG1ha2VTYWZlKEFyaXRoQWRkKSwgb3AsIG9uZSgpKSk7CisgICAgICAgICAgICBzZXQoc3Jj
RHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBPcEluZm8oTm9kZVVzZUJvdHRvbSks
IG9wLCBvbmUoKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Bvc3RfaW5jKTsKICAg
ICAgICAgfQogCkBAIC04OTEsNyArODQxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgc3JjRHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcCA9IGdldFRvTnVt
YmVyKHNyY0RzdCk7CiAgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0SW50MzIob3ApOwotICAgICAg
ICAgICAgc2V0KHNyY0RzdCwgYWRkVG9HcmFwaChtYWtlU2FmZShBcml0aFN1YiksIG9wLCBvbmUo
KSkpOworICAgICAgICAgICAgc2V0KHNyY0RzdCwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1
YiwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBvcCwgb25lKCkpKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9wcmVfZGVjKTsKICAgICAgICAgfQogCkBAIC05MDEsNyArODUxLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUlu
ZGV4IG9wID0gZ2V0VG9OdW1iZXIoc3JjRHN0KTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJ
bnQzMihvcCk7CiAgICAgICAgICAgICBzZXQocmVzdWx0LCBvcCk7Ci0gICAgICAgICAgICBzZXQo
c3JjRHN0LCBhZGRUb0dyYXBoKG1ha2VTYWZlKEFyaXRoU3ViKSwgb3AsIG9uZSgpKSk7CisgICAg
ICAgICAgICBzZXQoc3JjRHN0LCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBPcEluZm8o
Tm9kZVVzZUJvdHRvbSksIG9wLCBvbmUoKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3Bvc3RfZGVjKTsKICAgICAgICAgfQogCkBAIC05MTcsMTcgKzg2NywxMCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgd2Vha2x5UHJl
ZGljdEludDMyKG9wMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIElmIGJvdGggaW5wdXRzIGFyZSBtdWx0aXBsaWVzLCB0aGVuIHdlIG5lZWQgdG8gbWFrZSBz
dXJlIHRvIHBsYXkKLSAgICAgICAgICAgIC8vIGl0IHNhZmUgd2l0aCAtMC4KLSAgICAgICAgICAg
IGlmIChpc011bHRpcGx5KG9wMSkgJiYgaXNNdWx0aXBseShvcDIpKSB7Ci0gICAgICAgICAgICAg
ICAgZ2V0VHJ1ZVJlc3VsdChvcDEpOwotICAgICAgICAgICAgICAgIGdldFRydWVSZXN1bHQob3Ay
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fZ3JhcGhb
b3AxXS5oYXNOdW1iZXJSZXN1bHQoKSAmJiBtX2dyYXBoW29wMl0uaGFzTnVtYmVyUmVzdWx0KCkp
Ci0gICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFk
ZFRvR3JhcGgobWFrZVNhZmUoQXJpdGhBZGQpLCB0b051bWJlcihvcDEpLCB0b051bWJlcihvcDIp
KSk7CisgICAgICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgdG9O
dW1iZXIob3AxKSwgdG9OdW1iZXIob3AyKSkpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaCht
YWtlU2FmZShWYWx1ZUFkZCksIG9wMSwgb3AyKSk7CisgICAgICAgICAgICAgICAgc2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoVmFsdWVBZGQs
IE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9hZGQpOwogICAgICAgICB9CiAKQEAgLTkzOSwyMiArODgyLDE1IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB3ZWFrbHlQ
cmVkaWN0SW50MzIob3AyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gRm9yIHRoZSBsZWZ0IGNoaWxkIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCBuZWdh
dGl2ZSB6ZXJvLAotICAgICAgICAgICAgLy8gc2luY2UgLTAgLSAwIGlzIC0wLiAgSWYgdGhlIHJp
Z2h0IGNoaWxkIGlzIC0wIHRoZW4gaXQgZG9lc24ndAotICAgICAgICAgICAgLy8gbWF0dGVyLCBz
aW5jZSAwIC0gLTAgaXMgMCBhbmQgMCAtIDAgaXMgMC4KLSAgICAgICAgICAgIGdldFRydWVSZXN1
bHQob3AxKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgobWFrZVNhZmUoQXJpdGhTdWIpLCBvcDEsIG9wMikp
OworICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VT
YWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIp
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9zdWIpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9tdWw6IHsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIGJlIGZhbmN5IGhlcmUg
YW5kIHNraXAgdGhlIGdldFRydWVSZXN1bHQsIGluc3RlYWQgbWFraW5nCi0gICAgICAgICAgICAv
LyBnZXRUcnVlUmVzdWx0IG9wZXJhdGUgdHJhbnNpdGl2ZWx5LiBCdXQgd2UgZG8gdGhpcyB0aGUg
c2ltcGxlIHdheSwgZm9yCi0gICAgICAgICAgICAvLyBub3cuCi0gICAgICAgICAgICBOb2RlSW5k
ZXggb3AxID0gZ2V0VHJ1ZVJlc3VsdChnZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AyID0gZ2V0VHJ1ZVJlc3VsdChn
ZXRUb051bWJlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0gICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChtYWtlU2Fm
ZShBcml0aE11bElnbm9yZVplcm8pLCBvcDEsIG9wMikpOworICAgICAgICAgICAgLy8gTXVsdGlw
bHkgcmVxdWlyZXMgdGhhdCB0aGUgaW5wdXRzIGFyZSBub3QgdHJ1bmNhdGVkLCB1bmZvcnR1bmF0
ZWx5LgorICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRvTnVtYmVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgTm9kZUluZGV4IG9wMiA9IGdldFRv
TnVtYmVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICAgICAgc2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJp
dGhNdWwsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgb3AxLCBvcDIpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9tdWwpOwogICAgICAgICB9CiAKQEAgLTEwODksNyArMTAyNSw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9w
dXRfYnlfdmFsOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCB2YWx1ZSA9IGdldFRydWVSZXN1bHQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RBcnJheShiYXNl
KTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CiAKQEAgLTExNDYs
NyArMTA4Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7Ci0gICAgICAgICAgICBOb2Rl
SW5kZXggdmFsdWUgPSBnZXRUcnVlUmVzdWx0KGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKSk7CisgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlk
ZW50aWZpZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAg
Ym9vbCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5vcGVyYW5kOwpAQCAtMTE2Nyw3
ICsxMTAzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9wdXRfZ2xvYmFsX3ZhcjogewotICAgICAgICAgICAg
Tm9kZUluZGV4IHZhbHVlID0gZ2V0VHJ1ZVJlc3VsdChnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCkpOworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9i
YWxWYXIsIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgdmFsdWUpOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2dsb2JhbF92YXIpOwogICAgICAgICB9CkBA
IC0xNDQ5LDE1ICsxMzg1LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNr
KCkKICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0g
U2V0TG9jYWwgfHwgbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFBoaSk7CiAKICAg
ICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSAmbV9ncmFwaFtlbnRyeS5tX3BoaV07Ci0gICAgICAg
ICAgICBpZiAocGhpTm9kZS0+cmVmQ291bnQoKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gQW55IGxpdmUgU2V0TG9jYWwgc2hvdWxkIGVuc3VyZSB0aGF0IGl0IGdldHMgdGhl
IHRydWUgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB0aGlzIG1lYW5z
IHRoYXQgQXJpdGhNdWxzIGRpc3Rpbmd1aXNoIGJldHdlZW4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gbmVnYXRpdmUgemVybyBhbmQgcG9zaXRpdmUgemVyby4KLSAgICAgICAgICAgICAgICAgICAg
Z2V0VHJ1ZVJlc3VsdChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCkpOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwaGlOb2RlLT5yZWZDb3VudCgpKQogICAg
ICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHZhbHVlSW5QcmVkZWNlc3Nvcik7Ci0gICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmIChwaGlOb2RlLT5jaGlsZDEoKSA9PSBOb05vZGUpIHsKICAg
ICAgICAgICAgICAgICBwaGlOb2RlLT5jaGlsZHJlbi5maXhlZC5jaGlsZDEgPSB2YWx1ZUluUHJl
ZGVjZXNzb3I7CkBAIC0xNTQyLDEwICsxNDcxLDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2UoKQogICAgIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJzID0gbV9wcmVzZXJ2ZWRWYXJzOwogICAg
IG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90cyA9IG1fcGFyYW1ldGVyU2xvdHM7CiAKLSNpZiBFTkFC
TEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKLSNl
bmRpZgotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5NTUxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDEwIEBAIHZv
aWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICAgICAgaGFzUHJpbnRl
ZCA9IG5vZGUuY2hpbGQxKCkgIT0gTm9Ob2RlOwogICAgIH0KIAorICAgIGlmIChub2RlLmhhc0Fy
aXRoTm9kZUZsYWdzKCkpIHsKKyAgICAgICAgcHJpbnRmKCIlcyVzIiwgaGFzUHJpbnRlZCA/ICIs
ICIgOiAiIiwgYXJpdGhOb2RlRmxhZ3NBc1N0cmluZyhub2RlLnJhd0FyaXRoTm9kZUZsYWdzKCkp
KTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgfQogICAgIGlmIChub2RlLmhhc1Zh
ck51bWJlcigpKSB7CiAgICAgICAgIHByaW50ZigiJXN2YXIldSIsIGhhc1ByaW50ZWQgPyAiLCAi
IDogIiIsIG5vZGUudmFyTnVtYmVyKCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gOTU1MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjksMTAgKzcyOSw3IEBAIHZv
aWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVCYXMKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKLSAgICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzoKLSAgICBjYXNlIEFy
aXRoTXVsUG9zc2libHlOZWdaZXJvOgotICAgIGNhc2UgQXJpdGhNdWxTcGVjTm90TmVnWmVybzoK
LSAgICBjYXNlIEFyaXRoTXVsU2FmZTogeworICAgIGNhc2UgQXJpdGhNdWw6IHsKICAgICAgICAg
b3ZlcmZsb3cuYXBwZW5kKG1faml0LmJyYW5jaE11bDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxv
dywgYXJnMUdQUiwgYXJnMkdQUiwgcmVzdWx0R1BSKSk7CiAgICAgICAgIG92ZXJmbG93LmFwcGVu
ZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikpOwog
ICAgICAgICBicmVhazsKQEAgLTgyMywxMCArODIwLDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9y
Ojpub25TcGVjdWxhdGl2ZUJhcwogICAgICAgICBtX2ppdC5zdWJEb3VibGUodG1wMkZQUiwgdG1w
MUZQUik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgY2FzZSBBcml0aE11bEln
bm9yZVplcm86Ci0gICAgY2FzZSBBcml0aE11bFBvc3NpYmx5TmVnWmVybzoKLSAgICBjYXNlIEFy
aXRoTXVsU3BlY05vdE5lZ1plcm86Ci0gICAgY2FzZSBBcml0aE11bFNhZmU6CisgICAgY2FzZSBB
cml0aE11bDoKICAgICAgICAgbV9qaXQubXVsRG91YmxlKHRtcDJGUFIsIHRtcDFGUFIpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHJldmlzaW9uIDk1NTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxMyBAQAogI2lmbmRlZiBERkdOb2Rl
X2gKICNkZWZpbmUgREZHTm9kZV9oCiAKKyNpbmNsdWRlIDx3dGYvQm91bmRzQ2hlY2tlZFBvaW50
ZXIuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAogLy8gRW1pdCB2YXJpb3VzIGxvZ2dp
bmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcgdGhlIGRhdGFm
bG93IGdyYXBocy4KICNkZWZpbmUgRU5BQkxFX0RGR19ERUJVR19WRVJCT1NFIDAKKy8vIEVtaXQg
ZHVtcHMgZHVyaW5nIHByb3BhZ2F0aW9uLCBpbiBhZGRpdGlvbiB0byBqdXN0IGFmdGVyLgorI2Rl
ZmluZSBFTkFCTEVfREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UgMAogLy8gRW1pdCBsb2dn
aW5nIGZvciBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIGF0IGV2ZXJ5IG5vZGUsIG5vdCBqdXN0
IG5vZGVzIHRoYXQKIC8vIGFjdHVhbGx5IGhhcyBzcGVjdWxhdGlvbiBjaGVja3MuCiAjZGVmaW5l
IEVOQUJMRV9ERkdfVkVSQk9TRV9WQUxVRV9SRUNPVkVSSUVTIDAKQEAgLTEwNSwxOCArMTA4LDk3
IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4OwogfTsKIAordHlwZWRl
ZiB1bnNpZ25lZCBBcml0aE5vZGVGbGFnczsKKyNkZWZpbmUgTm9kZVVzZUJvdHRvbSAgICAgIDB4
MDAKKyNkZWZpbmUgTm9kZVVzZWRBc051bWJlciAgIDB4MDEKKyNkZWZpbmUgTm9kZU5lZWRzTmVn
WmVybyAgIDB4MDIKKyNkZWZpbmUgTm9kZVVzZWRBc01hc2sgICAgIDB4MDMKKyNkZWZpbmUgTm9k
ZU1heU92ZXJmbG93ICAgIDB4MDQKKyNkZWZpbmUgTm9kZU1heU5lZ1plcm8gICAgIDB4MDgKKyNk
ZWZpbmUgTm9kZUJlaGF2aW9yTWFzayAgIDB4MGMKKworc3RhdGljIGlubGluZSBib29sIG5vZGVV
c2VkQXNOdW1iZXIoQXJpdGhOb2RlRmxhZ3MgZmxhZ3MpCit7CisgICAgcmV0dXJuICEhKGZsYWdz
ICYgTm9kZVVzZWRBc051bWJlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuVHJ1
bmNhdGVJbnRlZ2VyKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQoreworICAgIHJldHVybiAhbm9kZVVz
ZWRBc051bWJlcihmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuSWdub3Jl
TmVnYXRpdmVaZXJvKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQoreworICAgIHJldHVybiAhKGZsYWdz
ICYgTm9kZU5lZWRzTmVnWmVybyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBub2RlQ2FuU3Bl
Y3VsYXRlSW50ZWdlcihBcml0aE5vZGVGbGFncyBmbGFncykKK3sKKyAgICBpZiAoZmxhZ3MgJiBO
b2RlTWF5T3ZlcmZsb3cpCisgICAgICAgIHJldHVybiAhbm9kZVVzZWRBc051bWJlcihmbGFncyk7
CisgICAgCisgICAgaWYgKGZsYWdzICYgTm9kZU1heU5lZ1plcm8pCisgICAgICAgIHJldHVybiBu
b2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKGZsYWdzKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworI2lmbmRlZiBOREVCVUcKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2Rl
RmxhZ3NBc1N0cmluZyhBcml0aE5vZGVGbGFncyBmbGFncykKK3sKKyAgICBpZiAoIWZsYWdzKQor
ICAgICAgICByZXR1cm4gIjxlbXB0eT4iOworCisgICAgc3RhdGljIGNvbnN0IGludCBzaXplID0g
NjQ7CisgICAgc3RhdGljIGNoYXIgZGVzY3JpcHRpb25bc2l6ZV07CisgICAgQm91bmRzQ2hlY2tl
ZFBvaW50ZXI8Y2hhcj4gcHRyKGRlc2NyaXB0aW9uLCBzaXplKTsKKyAgICAKKyAgICBib29sIGhh
c1ByaW50ZWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoZmxhZ3MgJiBOb2RlVXNlZEFzTnVtYmVy
KSB7CisgICAgICAgIHB0ci5zdHJjYXQoIlVzZWRBc051bSIpOworICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGZsYWdzICYgTm9kZU5lZWRzTmVnWmVybykg
eworICAgICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsK
KyAgICAgICAgcHRyLnN0cmNhdCgiTmVlZHNOZWdaZXJvIik7CisgICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5T3ZlcmZsb3cpIHsK
KyAgICAgICAgaWYgKGhhc1ByaW50ZWQpCisgICAgICAgICAgICBwdHIuc3RyY2F0KCJ8Iik7Cisg
ICAgICAgIHB0ci5zdHJjYXQoIk1heU92ZXJmbG93Iik7CisgICAgICAgIGhhc1ByaW50ZWQgPSB0
cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoZmxhZ3MgJiBOb2RlTWF5TmVnWmVybykgeworICAg
ICAgICBpZiAoaGFzUHJpbnRlZCkKKyAgICAgICAgICAgIHB0ci5zdHJjYXQoInwiKTsKKyAgICAg
ICAgcHRyLnN0cmNhdCgiTWF5TmVnWmVybyIpOworICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgKnB0cisrID0gMDsKKyAgICAKKyAgICByZXR1cm4gZGVzY3JpcHRp
b247Cit9CisjZW5kaWYKKwogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51bSAoYmVsb3cp
IGFyZSBjb21wb3NlZCBvZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkgbm9uZSkKIC8v
IGFuZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2VuZXJhdGUsIGlz
IGNvbnN0YW50LCBldGMpLgotI2RlZmluZSBOb2RlSWRNYXNrICAgICAgICAgICAweEZGRgotI2Rl
ZmluZSBOb2RlUmVzdWx0TWFzayAgICAgIDB4RjAwMAotI2RlZmluZSBOb2RlTXVzdEdlbmVyYXRl
ICAgMHgxMDAwMCAvLyBzZXQgb24gbm9kZXMgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cywgYW5kIG1h
eSBub3QgdHJpdmlhbGx5IGJlIHJlbW92ZWQgYnkgRENFLgotI2RlZmluZSBOb2RlSXNDb25zdGFu
dCAgICAgMHgyMDAwMAotI2RlZmluZSBOb2RlSXNKdW1wICAgICAgICAgMHg0MDAwMAotI2RlZmlu
ZSBOb2RlSXNCcmFuY2ggICAgICAgMHg4MDAwMAotI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgICAw
eDEwMDAwMAotI2RlZmluZSBOb2RlSGFzVmFyQXJncyAgICAweDIwMDAwMAotI2RlZmluZSBOb2Rl
Q2xvYmJlcnNXb3JsZCAweDQwMDAwMAotI2RlZmluZSBOb2RlTWlnaHRDbG9iYmVyICAweDgwMDAw
MAorI2RlZmluZSBOb2RlSWRNYXNrICAgICAgICAgICAgMHhGRkYKKyNkZWZpbmUgTm9kZVJlc3Vs
dE1hc2sgICAgICAgMHhGMDAwCisjZGVmaW5lIE5vZGVNdXN0R2VuZXJhdGUgICAgMHgxMDAwMCAv
LyBzZXQgb24gbm9kZXMgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cywgYW5kIG1heSBub3QgdHJpdmlh
bGx5IGJlIHJlbW92ZWQgYnkgRENFLgorI2RlZmluZSBOb2RlSXNDb25zdGFudCAgICAgIDB4MjAw
MDAKKyNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgICAweDQwMDAwCisjZGVmaW5lIE5vZGVJc0Jy
YW5jaCAgICAgICAgMHg4MDAwMAorI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgICAgMHgxMDAwMDAK
KyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAgIDB4MjAwMDAwCisjZGVmaW5lIE5vZGVDbG9iYmVy
c1dvcmxkICAweDQwMDAwMAorI2RlZmluZSBOb2RlTWlnaHRDbG9iYmVyICAgMHg4MDAwMDAKIAog
Ly8gVGhlc2UgdmFsdWVzIHJlY29yZCB0aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG5vZGUgKGFzIGNo
ZWNrZWQgYnkgTm9kZVJlc3VsdE1hc2ssIGFib3ZlKSwgMCBmb3Igbm8gcmVzdWx0LgogI2RlZmlu
ZSBOb2RlUmVzdWx0SlMgICAgICAweDEwMDAKQEAgLTE0NywxNyArMjI5LDExIEBAIHByaXZhdGU6
CiAgICAgbWFjcm8oVmFsdWVUb0ludDMyLCBOb2RlUmVzdWx0SW50MzIgfCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgLyogVXNlZCB0byBib3ggdGhlIHJlc3VsdCBvZiBVUlNoaWZ0IG5vZGVzIChy
ZXN1bHQgaGFzIHJhbmdlIDAuLjJeMzItMSkuICovXAogICAgIG1hY3JvKFVJbnQzMlRvTnVtYmVy
LCBOb2RlUmVzdWx0TnVtYmVyKSBcCi0gICAgbWFjcm8oVUludDMyVG9OdW1iZXJTYWZlLCBOb2Rl
UmVzdWx0TnVtYmVyKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBhcml0aG1ldGljIG9wZXJh
dGlvbnMuICovXAogICAgIG1hY3JvKEFyaXRoQWRkLCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAg
bWFjcm8oQXJpdGhTdWIsIE5vZGVSZXN1bHROdW1iZXIpIFwKLSAgICBtYWNybyhBcml0aEFkZFNh
ZmUsIE5vZGVSZXN1bHROdW1iZXIpIC8qIFNhZmUgdmFyaWFudHMgYXJlIHRob3NlIHRoYXQgYXJl
IGtub3duIHRvIHRha2Ugb2xkIEpJVCBzbG93IHBhdGggKi9cCi0gICAgbWFjcm8oQXJpdGhTdWJT
YWZlLCBOb2RlUmVzdWx0TnVtYmVyKSBcCi0gICAgbWFjcm8oQXJpdGhNdWxTcGVjTm90TmVnWmVy
bywgTm9kZVJlc3VsdE51bWJlcikgLyogU3BlY3VsYXRlIHRoYXQgdGhlIHJlc3VsdCBpcyBub3Qg
bmVnYXRpdmUgemVyby4gKi8gXAotICAgIG1hY3JvKEFyaXRoTXVsSWdub3JlWmVybywgTm9kZVJl
c3VsdE51bWJlcikgLyogSWYgaXQncyBuZWdhdGl2ZSB6ZXJvLCBpZ25vcmUgaXQuICovIFwKLSAg
ICBtYWNybyhBcml0aE11bFBvc3NpYmx5TmVnWmVybywgTm9kZVJlc3VsdE51bWJlcikgLyogSXQg
ZGVmaW5pdGVseSBtYXkgYmUgbmVnYXRpdmUgemVybyBidXQgd2UgaGF2ZW4ndCBkZWNpZGVkIHdo
YXQgdG8gZG8gYWJvdXQgaXQgeWV0LiBObyBjb2RlIGdlbmVyYXRpb24gZm9yIHRoaXMgbm9kZTsg
aXQgZWl0aGVyIHR1cm5zIGludG8gQXJpdGhNdWxJZ25vcmVaZXJvIG9yIEFyaXRoTXVsU2FmZS4g
Ki8gXAotICAgIG1hY3JvKEFyaXRoTXVsU2FmZSwgTm9kZVJlc3VsdE51bWJlcikgLyogSXQgbWF5
IGJlIG5lZ2F0aXZlIHplcm8sIG9yIGl0IG1heSBwcm9kdWNlIG90aGVyIGZvcm1zIG9mIGRvdWJs
ZSwgc28gc3BlY3VsYXRlIGRvdWJsZS4gKi9cCisgICAgbWFjcm8oQXJpdGhNdWwsIE5vZGVSZXN1
bHROdW1iZXIpIFwKICAgICBtYWNybyhBcml0aERpdiwgTm9kZVJlc3VsdE51bWJlcikgXAogICAg
IG1hY3JvKEFyaXRoTW9kLCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhBYnMs
IE5vZGVSZXN1bHROdW1iZXIpIFwKQEAgLTE3Miw3ICsyNDgsNiBAQCBwcml2YXRlOgogICAgIFwK
ICAgICAvKiBBZGQgb2YgdmFsdWVzIG1heSBlaXRoZXIgYmUgYXJpdGhtZXRpYywgb3IgcmVzdWx0
IGluIHN0cmluZyBjb25jYXRlbmF0aW9uLiAqL1wKICAgICBtYWNybyhWYWx1ZUFkZCwgTm9kZVJl
c3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwKLSAgICBtYWNy
byhWYWx1ZUFkZFNhZmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWln
aHRDbG9iYmVyKSBcCiAgICAgXAogICAgIC8qIFByb3BlcnR5IGFjY2Vzcy4gKi9cCiAgICAgLyog
UHV0QnlWYWxBbGlhcyBpbmRpY2F0ZXMgYSAncHV0JyBhbGlhc2VzIGEgcHJpb3Igd3JpdGUgdG8g
dGhlIHNhbWUgcHJvcGVydHkuICovXApAQCAtMjU2LDYgKzMzMSw3IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5v
ZGVIYXNWYXJBcmdzKSk7CisgICAgICAgIEFTU0VSVCghaGFzQXJpdGhOb2RlRmxhZ3MoKSk7CiAg
ICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxkMTsKICAgICAgICAgY2hpbGRyZW4u
Zml4ZWQuY2hpbGQyID0gY2hpbGQyOwogICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDMgPSBj
aGlsZDM7CkBAIC0zODYsNiArNDYyLDY2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJu
IG1fb3BJbmZvOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc0FyaXRoTm9kZUZsYWdzKCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOgor
ICAgICAgICBjYXNlIFZhbHVlVG9Eb3VibGU6CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6
CisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAg
IGNhc2UgQXJpdGhNdWw6CisgICAgICAgIGNhc2UgQXJpdGhBYnM6CisgICAgICAgIGNhc2UgQXJp
dGhNaW46CisgICAgICAgIGNhc2UgQXJpdGhNYXg6CisgICAgICAgIGNhc2UgVmFsdWVBZGQ6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBBcml0aE5vZGVGbGFncyBy
YXdBcml0aE5vZGVGbGFncygpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzQXJpdGhOb2RlRmxh
Z3MoKSk7CisgICAgICAgIHJldHVybiBtX29wSW5mbzsKKyAgICB9CisgICAgCisgICAgLy8gVGhp
cyBjb3JyZWN0cyB0aGUgYXJpdGhtZXRpYyBub2RlIGZsYWdzLCBzbyB0aGF0IGlycmVsZXZhbnQg
Yml0cyBhcmUKKyAgICAvLyBpZ25vcmVkLiBJbiBwYXJ0aWN1bGFyLCBhbnl0aGluZyBvdGhlciB0
aGFuIEFyaXRoTXVsIGRvZXMgbm90IG5lZWQKKyAgICAvLyB0byBrbm93IGlmIGl0IGNhbiBzcGVj
dWxhdGUgb24gbmVnYXRpdmUgemVyby4KKyAgICBBcml0aE5vZGVGbGFncyBhcml0aE5vZGVGbGFn
cygpCisgICAgeworICAgICAgICBBcml0aE5vZGVGbGFncyByZXN1bHQgPSByYXdBcml0aE5vZGVG
bGFncygpOworICAgICAgICBpZiAob3AgPT0gQXJpdGhNdWwpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICByZXR1cm4gcmVzdWx0ICYgfk5vZGVOZWVkc05lZ1plcm87CisgICAg
fQorICAgIAorICAgIEFyaXRoTm9kZUZsYWdzIGFyaXRoTm9kZUZsYWdzRm9yQ29tcGFyZSgpCisg
ICAgeworICAgICAgICBpZiAoaGFzQXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgIHJldHVy
biBhcml0aE5vZGVGbGFncygpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzZXRBcml0aE5vZGVGbGFnKEFyaXRoTm9kZUZsYWdzIGZsYWdzKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc0FyaXRoTm9kZUZsYWdzKCkpOworICAgICAgICBtX29wSW5mbyA9IGZsYWdz
OworICAgIH0KKyAgICAKKyAgICBib29sIG1lcmdlQXJpdGhOb2RlRmxhZ3MoQXJpdGhOb2RlRmxh
Z3MgZmxhZ3MpCisgICAgeworICAgICAgICBpZiAoIWhhc0FyaXRoTm9kZUZsYWdzKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIEFyaXRoTm9kZUZsYWdzIG5ld0ZsYWdzID0g
bV9vcEluZm8gfCBmbGFnczsKKyAgICAgICAgaWYgKG5ld0ZsYWdzID09IG1fb3BJbmZvKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX29wSW5mbyA9IG5ld0ZsYWdzOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNWYXJOdW1iZXIoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG9wID09IEdldEdsb2JhbFZhciB8fCBvcCA9PSBQdXRHbG9i
YWxWYXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5j
cHAJKHJldmlzaW9uIDk1NTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9w
YWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsMjcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgZml4cG9pbnQoKQogICAgIHsKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJP
U0UpCisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgIG1fZ3Jh
cGguZHVtcChtX2NvZGVCbG9jayk7CisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFVwIGhlcmUgd2Ugc3RhcnQgd2l0aCBhIGJhY2t3YXJkIHBhc3MgYmVjYXVzZSB3
ZSBzdXNwZWN0IHRoYXQgdG8gYmUKKyAgICAgICAgICAgIC8vIG1vcmUgcHJvZml0YWJsZS4KKyAg
ICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzQmFja3dhcmQoKTsKKyAgICAgICAgICAg
IGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRo
Tm9kZUZsYWdzRm9yd2FyZCgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgICAg
ICAKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIG1f
Y291bnQgPSAwOwogI2VuZGlmCiAgICAgICAgIGRvIHsKQEAgLTgzLDcgKzEwMyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBu
ZWFyLW9wdGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCiAgICAgICAgICAg
ICAvLyBERlMtc29ydGVkIGNvZGUuCi0gICAgICAgICAgICBwcm9wYWdhdGVGb3J3YXJkKCk7Cisg
ICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQoKTsKICAgICAgICAgICAgIGlm
ICghbV9jaGFuZ2VkKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC05
MiwxOSArMTEyLDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJl
cyB0d28gY2FzZXM6ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50CiAgICAg
ICAgICAgICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMg
YmFja3dhcmQgZmxvdy4KICAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAg
ICAgcHJvcGFnYXRlQmFja3dhcmQoKTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rpb25z
QmFja3dhcmQoKTsKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKICAgICAgICAgCiAgICAg
ICAgIGZpeHVwKCk7CiAgICAgICAgIAotI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyNp
ZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIHByaW50Zigi
R3JhcGggYWZ0ZXIgcHJvcGFnYXRpb24gZml4dXA6XG4iKTsKICAgICAgICAgbV9ncmFwaC5kdW1w
KG1fY29kZUJsb2NrKTsKICNlbmRpZgogCiAgICAgICAgIGxvY2FsQ1NFKCk7CiAKLSNpZiBFTkFC
TEUoREZHX0RFQlVHX1ZFUkJPU0UpCisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIENTRTpcbiIpOwogICAgICAgICBt
X2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwogI2VuZGlmCkBAIC0xMTIsMTIgKzEzMiwxNjggQEAg
cHVibGljOgogICAgICAgICBhbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMoKTsKIAogI2lmIEVOQUJM
RShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciB2aXJ0dWFs
IHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsKKyAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciBw
cm9wYWdhdGlvbjpcbiIpOwogICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwogI2Vu
ZGlmCiAgICAgfQogICAgIAogcHJpdmF0ZToKKyAgICBib29sIGlzTm90TmVnWmVybyhOb2RlSW5k
ZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3Rh
bnQobV9jb2RlQmxvY2ssIG5vZGVJbmRleCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG1fY29k
ZUJsb2NrLCBub2RlSW5kZXgpOworICAgICAgICByZXR1cm4gIXZhbHVlICYmIDEuMCAvIHZhbHVl
IDwgMC4wOworICAgIH0KKyAgICAKKyAgICBib29sIGlzTm90WmVybyhOb2RlSW5kZXggbm9kZUlu
ZGV4KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobV9jb2Rl
QmxvY2ssIG5vZGVJbmRleCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiAhIW1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG1fY29kZUJsb2NrLCBub2RlSW5k
ZXgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKE5vZGUm
IG5vZGUpCisgICAgeworICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsK
KyAgICAgICAgQXJpdGhOb2RlRmxhZ3MgZmxhZ3MgPSAwOworICAgICAgICAKKyAgICAgICAgaWYg
KG5vZGUuaGFzQXJpdGhOb2RlRmxhZ3MoKSkKKyAgICAgICAgICAgIGZsYWdzID0gbm9kZS5yYXdB
cml0aE5vZGVGbGFncygpOworICAgICAgICAKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICAgJXMgQCV1OiAlcyAiLCBHcmFwaDo6b3BO
YW1lKG9wKSwgbV9jb21waWxlSW5kZXgsIGFyaXRoTm9kZUZsYWdzQXNTdHJpbmcoZmxhZ3MpKTsK
KyNlbmRpZgorICAgICAgICAKKyAgICAgICAgZmxhZ3MgJj0gTm9kZVVzZWRBc01hc2s7CisgICAg
ICAgIAorICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHN3
aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgIGNhc2UgQml0
QW5kOgorICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAg
Y2FzZSBCaXRMU2hpZnQ6CisgICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICBjYXNlIEJp
dFVSU2hpZnQ6IHsKKyAgICAgICAgICAgIC8vIFRoZXNlIG9wZXJhdGlvbnMgYXJlIHBlcmZlY3Rs
eSBoYXBweSB3aXRoIHRydW5jYXRlZCBpbnRlZ2VycywKKyAgICAgICAgICAgIC8vIHNvIHdlIGRv
bid0IHdhbnQgdG8gcHJvcGFnYXRlIGFueXRoaW5nLgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6CisgICAgICAg
IGNhc2UgVmFsdWVUb0RvdWJsZToKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjogeworICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2Rl
RmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIFZhbHVlQWRkOiB7CisgICAg
ICAgICAgICBpZiAoaXNOb3ROZWdaZXJvKG5vZGUuY2hpbGQxKCkpIHx8IGlzTm90TmVnWmVybyhu
b2RlLmNoaWxkMigpKSkKKyAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5lZWRzTmVnWmVy
bzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8
PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFy
aXRoU3ViOiB7CisgICAgICAgICAgICBpZiAoaXNOb3RaZXJvKG5vZGUuY2hpbGQxKCkpIHx8IGlz
Tm90WmVybyhub2RlLmNoaWxkMigpKSkKKyAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZU5l
ZWRzTmVnWmVybzsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxh
Z3MpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgICAgICAvLyBBcyBzb29uIGFzIGEgbXVsdGlwbHkg
aGFwcGVucywgd2UgY2FuIGVhc2lseSBlbmQgdXAgaW4gdGhlIHBhcnQKKyAgICAgICAgICAgIC8v
IG9mIHRoZSBkb3VibGUgZG9tYWluIHdoZXJlIHRoZSBwb2ludCBhdCB3aGljaCB5b3UgZG8gdHJ1
bmNhdGlvbgorICAgICAgICAgICAgLy8gY2FuIGNoYW5nZSB0aGUgb3V0Y29tZS4gU28sIEFyaXRo
TXVsIGFsd2F5cyBjaGVja3MgZm9yIG92ZXJmbG93CisgICAgICAgICAgICAvLyBubyBtYXR0ZXIg
d2hhdCwgYW5kIGFsd2F5cyBmb3JjZXMgaXRzIGlucHV0cyB0byBjaGVjayBhcyB3ZWxsLgorICAg
ICAgICAgICAgCisgICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5l
ZWRzTmVnWmVybzsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aE1p
bjoKKyAgICAgICAgY2FzZSBBcml0aE1heDogeworICAgICAgICAgICAgZmxhZ3MgfD0gTm9kZVVz
ZWRBc051bWJlcjsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9n
cmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcml0aEFi
czogeworICAgICAgICAgICAgZmxhZ3MgJj0gfk5vZGVOZWVkc05lZ1plcm87CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVyZ2VBcml0aE5vZGVGbGFncyhm
bGFncyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgUHV0QnlWYWw6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlciB8
IE5vZGVOZWVkc05lZ1plcm8pOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MgfCBOb2RlVXNlZEFzTnVtYmVyKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMygpXS5tZXJnZUFyaXRo
Tm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlciB8IE5vZGVOZWVkc05lZ1plcm8pOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEdldEJ5VmFsOiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyB8IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlTmVl
ZHNOZWdaZXJvKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigp
XS5tZXJnZUFyaXRoTm9kZUZsYWdzKGZsYWdzIHwgTm9kZVVzZWRBc051bWJlcik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBmbGFncyB8PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsK
KyAgICAgICAgICAgIGlmIChvcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5v
ZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XV0ubWVyZ2VBcml0aE5vZGVGbGFncyhmbGFncyk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IE5vTm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLmNoaWxkMigpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1l
cmdlQXJpdGhOb2RlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MygpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQzKCldLm1lcmdlQXJpdGhOb2RlRmxhZ3Mo
ZmxhZ3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
I2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRm
KCIlc1xuIiwgY2hhbmdlZCA/ICJDSEFOR0VEIiA6ICIiKTsKKyNlbmRpZgorICAgICAgICAKKyAg
ICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvcGFn
YXRlQXJpdGhOb2RlRmxhZ3NGb3J3YXJkKCkKKyAgICB7CisjaWYgRU5BQkxFKERGR19ERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIlByb3BhZ2F0aW5nIGFyaXRobWV0
aWMgbm9kZSBmbGFncyBmb3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CisjZW5kaWYKKyAgICAg
ICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwgbV9ncmFwaC5zaXpl
KCk7ICsrbV9jb21waWxlSW5kZXgpCisgICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFn
cyhtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvcGFn
YXRlQXJpdGhOb2RlRmxhZ3NCYWNrd2FyZCgpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJQcm9wYWdhdGluZyBhcml0aG1l
dGljIG5vZGUgZmxhZ3MgYmFja3dhcmQgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAg
ICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gbV9ncmFwaC5zaXplKCk7IG1fY29tcGlsZUluZGV4
LS0gPiAwOykKKyAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBzZXRQcmVkaWN0aW9uKFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29t
cGlsZUluZGV4XS5oYXNSZXN1bHQoKSk7CkBAIC0xNDMsMTUgKzMxOSwxNSBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gSlNDOjptZXJnZVByZWRpY3Rpb24obV9wcmVkaWN0aW9uc1ttX2NvbXBp
bGVJbmRleF0sIHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKLSAgICB2b2lkIHByb3BhZ2F0ZU5v
ZGUoTm9kZSYgbm9kZSkKKyAgICB2b2lkIHByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyhOb2RlJiBu
b2RlKQogICAgIHsKICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CiAK
LSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiICAgJXNbJXVd
OiAiLCBHcmFwaDo6b3BOYW1lKG9wKSwgbV9jb21waWxlSW5kZXgpOworI2lmIEVOQUJMRShERkdf
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICAlcyBAJXU6ICIs
IEdyYXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCk7CiAjZW5kaWYKICAgICAgICAgCiAg
ICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwpAQCAtMTg0LDE5ICszNjAsMjYgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0TFNoaWZ0OgogICAg
ICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CiAgICAg
ICAgIGNhc2UgVmFsdWVUb0ludDMyOgogICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CiAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMy
LCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKKyAgICAgICAgICAgIGlm
IChub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKQorICAgICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0
SW50MzIsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdE51bWJl
ciwgU3Ryb25nUHJlZGljdGlvbikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwog
ICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6IHsKICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
cHJlZGljdGlvbiA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24ocHJlZGljdGlvbikpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoaXNOdW1iZXJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIShwcmVkaWN0aW9uICYgUHJlZGljdERvdWJsZSkgJiYgbm9kZUNhblNw
ZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKKyAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdEludDMy
LCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0
TnVtYmVyLCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICB9CkBAIC0yMTAsNyArMzkz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJl
ZGljdGlvbihsZWZ0KSAmJiBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24o
cmlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihtZXJn
ZVByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChpc0lu
dDMyUHJlZGljdGlvbihtZXJnZVByZWRpY3Rpb25zKGxlZnQsIHJpZ2h0KSkgJiYgbm9kZUNhblNw
ZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJ
bnQzMiwgU3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihtYWtlUHJlZGlj
dGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9uKSk7CkBAIC0yMjUsMTYgKzQwOCwx
NCBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAg
ICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVaZXJvOgotICAg
ICAgICBjYXNlIEFyaXRoTXVsUG9zc2libHlOZWdaZXJvOgotICAgICAgICBjYXNlIEFyaXRoTXVs
U3BlY05vdE5lZ1plcm86CisgICAgICAgIGNhc2UgQXJpdGhNdWw6CiAgICAgICAgIGNhc2UgQXJp
dGhNaW46CiAgICAgICAgIGNhc2UgQXJpdGhNYXg6IHsKICAgICAgICAgICAgIFByZWRpY3RlZFR5
cGUgbGVmdCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CiAgICAgICAgICAgICBQcmVk
aWN0ZWRUeXBlIHJpZ2h0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigpXTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSAmJiBpc1N0cm9u
Z1ByZWRpY3Rpb24ocmlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0
aW9uKG1lcmdlUHJlZGljdGlvbnMobGVmdCwgcmlnaHQpKSkKKyAgICAgICAgICAgICAgICBpZiAo
aXNJbnQzMlByZWRpY3Rpb24obWVyZ2VQcmVkaWN0aW9ucyhsZWZ0LCByaWdodCkpICYmIG5vZGVD
YW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpCiAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9uKFByZWRpY3RJ
bnQzMiwgU3Ryb25nUHJlZGljdGlvbikpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJl
ZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikpOwpAQCAtMjUwLDMxICs0MzEsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CiAgICAgICAgICAg
ICBQcmVkaWN0ZWRUeXBlIGNoaWxkID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKLSAg
ICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24oY2hpbGQpKQotICAgICAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKGNoaWxkKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcml0aEFkZFNhZmU6Ci0gICAg
ICAgIGNhc2UgQXJpdGhTdWJTYWZlOgotICAgICAgICBjYXNlIEFyaXRoTXVsU2FmZToKLSAgICAg
ICAgY2FzZSBVSW50MzJUb051bWJlclNhZmU6IHsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91YmxlLCBTdHJvbmdQcmVkaWN0aW9u
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgVmFsdWVB
ZGRTYWZlOiB7Ci0gICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25z
W25vZGUuY2hpbGQxKCldOwotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJl
ZGljdGlvbnNbbm9kZS5jaGlsZDIoKV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChp
c1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkgJiYgaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSkgewot
ICAgICAgICAgICAgICAgIGlmIChpc051bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQ
cmVkaWN0aW9uKHJpZ2h0KSkKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24obWFrZVByZWRpY3Rpb24oUHJlZGljdERvdWJsZSwgU3Ryb25nUHJlZGljdGlvbikp
OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEobGVmdCAmIFByZWRpY3ROdW1iZXIpIHx8ICEo
cmlnaHQgJiBQcmVkaWN0TnVtYmVyKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBsZWZ0IG9y
IHJpZ2h0IGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBudW1iZXIuCi0gICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG1ha2VQcmVkaWN0aW9u
KFByZWRpY3RTdHJpbmcsIFN0cm9uZ1ByZWRpY3Rpb24pKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obWFrZVBy
ZWRpY3Rpb24oUHJlZGljdFN0cmluZyB8IFByZWRpY3RJbnQzMiB8IFByZWRpY3REb3VibGUsIFN0
cm9uZ1ByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24oY2hp
bGQpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUu
YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQ
cmVkaWN0aW9uKGNoaWxkKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtYWtlUHJlZGljdGlvbihQcmVkaWN0RG91Ymxl
LCBTdHJvbmdQcmVkaWN0aW9uKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtMzcxLDcgKzUzMiw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAg
fQogCi0jaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorI2lmIEVOQUJMRShERkdfREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCJleHBlY3QoJXMpICIsIHByZWRp
Y3Rpb25Ub1N0cmluZyhtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSkpOwogICAgICAgICBw
cmludGYoInVzZSglcykgJXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3VzZXNbbV9jb21waWxl
SW5kZXhdKSwgY2hhbmdlZCA/ICJDSEFOR0VEIiA6ICIiKTsKICNlbmRpZgpAQCAtMzc5LDI4ICs1
NDAsMjggQEAgcHJpdmF0ZToKICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgcHJvcGFnYXRlRm9yd2FyZCgpCisgICAgdm9pZCBwcm9wYWdhdGVQcmVk
aWN0aW9uc0ZvcndhcmQoKQogICAgIHsKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0g
ICAgICAgIHByaW50ZigiUHJvcGFnYXRpbmcgZm9yd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwor
I2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRm
KCJQcm9wYWdhdGluZyBwcmVkaWN0aW9ucyBmb3J3YXJkIFsldV1cbiIsICsrbV9jb3VudCk7CiAj
ZW5kaWYKICAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IDA7IG1fY29tcGlsZUluZGV4IDwg
bV9ncmFwaC5zaXplKCk7ICsrbV9jb21waWxlSW5kZXgpCi0gICAgICAgICAgICBwcm9wYWdhdGVO
b2RlKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZU5vZGVQ
cmVkaWN0aW9ucyhtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgcHJvcGFnYXRlQmFja3dhcmQoKQorICAgIHZvaWQgcHJvcGFnYXRlUHJlZGljdGlvbnNCYWNr
d2FyZCgpCiAgICAgewotI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgcHJp
bnRmKCJQcm9wYWdhdGluZyBiYWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQpOworI2lmIEVOQUJM
RShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJQcm9wYWdh
dGluZyBwcmVkaWN0aW9ucyBiYWNrd2FyZCBbJXVdXG4iLCArK21fY291bnQpOwogI2VuZGlmCiAg
ICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSBtX2dyYXBoLnNpemUoKTsgbV9jb21waWxlSW5k
ZXgtLSA+IDA7KQotICAgICAgICAgICAgcHJvcGFnYXRlTm9kZShtX2dyYXBoW21fY29tcGlsZUlu
ZGV4XSk7CisgICAgICAgICAgICBwcm9wYWdhdGVOb2RlUHJlZGljdGlvbnMobV9ncmFwaFttX2Nv
bXBpbGVJbmRleF0pOwogICAgIH0KICAgICAKICAgICB2b2lkIHRvRG91YmxlKE5vZGVJbmRleCBu
b2RlSW5kZXgpCiAgICAgewogICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wID09IFZh
bHVlVG9OdW1iZXIpIHsKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisjaWYgRU5BQkxF
KERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgcHJpbnRmKCIgIEAl
dSAtPiBWYWx1ZVRvRG91YmxlIiwgbm9kZUluZGV4KTsKICNlbmRpZgogICAgICAgICAgICAgbV9n
cmFwaFtub2RlSW5kZXhdLm9wID0gVmFsdWVUb0RvdWJsZTsKQEAgLTQxNCwxMiArNTc1LDE4IEBA
IHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CiAKLSNp
ZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiICAgJXNbJXVdOiAi
LCBHcmFwaDo6b3BOYW1lKG9wKSwgbV9jb21waWxlSW5kZXgpOworI2lmIEVOQUJMRShERkdfREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICAlcyBAJXU6ICIsIEdy
YXBoOjpvcE5hbWUob3ApLCBtX2NvbXBpbGVJbmRleCk7CiAjZW5kaWYKICAgICAgICAgCiAgICAg
ICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBWYWx1ZUFkZDogeworICAgICAgICAgICAg
aWYgKCFub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Cisg
ICAgICAgICAgICAgICAgdG9Eb3VibGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAg
dG9Eb3VibGUobm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1f
cHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJp
Z2h0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigpXTsKICAgICAgICAgICAgIApAQCAtNDM0
LDExICs2MDEsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRo
QWRkOgogICAgICAgICBjYXNlIEFyaXRoU3ViOgotICAgICAgICBjYXNlIEFyaXRoTXVsSWdub3Jl
WmVybzoKLSAgICAgICAgY2FzZSBBcml0aE11bFBvc3NpYmx5TmVnWmVybzoKLSAgICAgICAgY2Fz
ZSBBcml0aE11bFNwZWNOb3ROZWdaZXJvOgorICAgICAgICBjYXNlIEFyaXRoTXVsOgogICAgICAg
ICBjYXNlIEFyaXRoTWluOgogICAgICAgICBjYXNlIEFyaXRoTWF4OiB7CisgICAgICAgICAgICBp
ZiAoIW5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAg
ICAgICAgICAgICAgICB0b0RvdWJsZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICB0
b0RvdWJsZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0gbV9w
cmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcmln
aHQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQyKCldOwogICAgICAgICAgICAgCkBAIC00NTgs
NiArNjI5LDExIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFyaXRoQWJzOiB7CisgICAgICAgICAgICBpZiAoIW5vZGVDYW5TcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgICAgICB0b0RvdWJsZShub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbV9wcmVkaWN0
aW9uc1tub2RlLmNoaWxkMSgpXTsKICAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24o
cHJlZGljdGlvbikgJiYgKHByZWRpY3Rpb24gJiBQcmVkaWN0RG91YmxlKSkKICAgICAgICAgICAg
ICAgICB0b0RvdWJsZShub2RlLmNoaWxkMSgpKTsKQEAgLTQ2OSwzNyArNjQ1LDE4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJpdGhBZGRTYWZlOgotICAgICAgICBjYXNlIEFyaXRoU3ViU2FmZToKLSAgICAgICAg
Y2FzZSBBcml0aE11bFNhZmU6IHsKLSAgICAgICAgICAgIHRvRG91YmxlKG5vZGUuY2hpbGQxKCkp
OwotICAgICAgICAgICAgdG9Eb3VibGUobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVmFsdWVBZGRTYWZlOiB7
Ci0gICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hp
bGQxKCldOwotICAgICAgICAgICAgUHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJlZGljdGlvbnNb
bm9kZS5jaGlsZDIoKV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc1N0cm9uZ1By
ZWRpY3Rpb24obGVmdCkgJiYgaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSAmJiBpc051bWJlclBy
ZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KSkgewotICAgICAgICAg
ICAgICAgIHRvRG91YmxlKG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgICAgIHRvRG91Ymxl
KG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCi0jaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorI2lmIEVOQUJMRShERkdf
REVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCJcbiIpOwogI2VuZGlm
CiAgICAgfQogICAgIAogICAgIHZvaWQgZml4dXAoKQogICAgIHsKLSNpZiBFTkFCTEUoREZHX0RF
QlVHX1ZFUkJPU0UpCisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQog
ICAgICAgICBwcmludGYoIlBlcmZvcm1pbmcgRml4dXBcbiIpOwogI2VuZGlmCiAgICAgICAgIGZv
ciAobV9jb21waWxlSW5kZXggPSAwOyBtX2NvbXBpbGVJbmRleCA8IG1fZ3JhcGguc2l6ZSgpOyAr
K21fY29tcGlsZUluZGV4KQpAQCAtNTU5LDcgKzcxNiw3IEBAIHByaXZhdGU6CiAgICAgTm9kZUlu
ZGV4IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsK
ICAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IGNvbXB1dGVTdGFydEluZGV4Rm9yQ2hpbGRyZW4o
Y2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7Ci0jaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQor
I2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgcHJpbnRm
KCIgIGxvb2tiYWNrICV1OiAiLCByZXN1bHQpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiByZXN1
bHQ7CkBAIC01NzksNyArNzM2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgcmVzdWx0Kys7CiAgICAgICAgIEFTU0VSVChyZXN1bHQgPD0gbV9jb21waWxlSW5kZXgpOwot
I2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIHByaW50ZigiICBsaW1pdCAldTogIiwgcmVzdWx0KTsK
ICNlbmRpZgogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNTk3LDYgKzc1NCw5IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBpZiAobm9kZS5vcCAhPSBvdGhlck5vZGUub3ApCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLmFyaXRo
Tm9kZUZsYWdzRm9yQ29tcGFyZSgpICE9IG90aGVyTm9kZS5hcml0aE5vZGVGbGFnc0ZvckNvbXBh
cmUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgTm9kZUluZGV4IG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMSgp
KTsKICAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gaW5kZXg7CkBAIC02NDMsNyArODAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAgIGNhc2Ug
VmFsdWVBZGQ6Ci0gICAgICAgIGNhc2UgVmFsdWVBZGRTYWZlOgogICAgICAgICBjYXNlIENvbXBh
cmVMZXNzOgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgICAgIGNhc2UgQ29tcGFy
ZUdyZWF0ZXI6CkBAIC03NTAsNyArOTA5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKG1fcHJl
ZGljdGlvbnNbbV9jb21waWxlSW5kZXhdICE9IG1fcHJlZGljdGlvbnNbcmVwbGFjZW1lbnRdKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJP
U0UpCisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBw
cmludGYoIiAgIFJlcGxhY2luZyBAJXUgLT4gQCV1IiwgbV9jb21waWxlSW5kZXgsIHJlcGxhY2Vt
ZW50KTsKICNlbmRpZgogICAgICAgICAKQEAgLTc3Niw4ICs5MzUsOCBAQCBwcml2YXRlOgogICAg
ICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCi0jaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoIiAg
ICVzWyV1XTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW21fY29tcGlsZUluZGV4XS5vcCksIG1f
Y29tcGlsZUluZGV4KTsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgICAgIHByaW50ZigiICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BOYW1lKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdLm9wKSwgbV9jb21waWxlSW5kZXgpOwogI2VuZGlmCiAKICAgICAgICAgc3dp
dGNoIChub2RlLm9wKSB7CkBAIC03OTEsMTggKzk1MCwxMyBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIEJpdFVSU2hpZnQ6CiAgICAgICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgIGNhc2UgQXJp
dGhTdWI6Ci0gICAgICAgIGNhc2UgQXJpdGhNdWxJZ25vcmVaZXJvOgotICAgICAgICBjYXNlIEFy
aXRoTXVsUG9zc2libHlOZWdaZXJvOgotICAgICAgICBjYXNlIEFyaXRoTXVsU3BlY05vdE5lZ1pl
cm86CisgICAgICAgIGNhc2UgQXJpdGhNdWw6CiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6CiAgICAg
ICAgIGNhc2UgQXJpdGhEaXY6CiAgICAgICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgICAgIGNhc2Ug
QXJpdGhNaW46CiAgICAgICAgIGNhc2UgQXJpdGhNYXg6CiAgICAgICAgIGNhc2UgQXJpdGhTcXJ0
OgotICAgICAgICBjYXNlIEFyaXRoQWRkU2FmZToKLSAgICAgICAgY2FzZSBBcml0aFN1YlNhZmU6
Ci0gICAgICAgIGNhc2UgQXJpdGhNdWxTYWZlOgogICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
cHVyZUNTRShub2RlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtODU2
LDcgKzEwMTAsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2xh
c3RTZWVuW25vZGUub3AgJiBOb2RlSWRNYXNrXSA9IG1fY29tcGlsZUluZGV4OwotI2lmIEVOQUJM
RShERkdfREVCVUdfVkVSQk9TRSkKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCiAgICAgICAgIHByaW50ZigiXG4iKTsKICNlbmRpZgogICAgIH0KQEAgLTg3MSw3ICsx
MDI1LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGxvY2FsQ1NFKCkKICAgICB7Ci0jaWYg
RU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJ
T05fVkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCJQZXJmb3JtaW5nIGxvY2FsIENTRToiKTsKICNl
bmRpZgogICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1f
YmxvY2tzLnNpemUoKTsgKytibG9jaykKQEAgLTkzNiw3ICsxMDkwLDcgQEAgcHJpdmF0ZToKICAg
ICAKICAgICBQcmVkaWN0aW9uVHJhY2tlciBtX3ZhcmlhYmxlVXNlczsKIAotI2lmIEVOQUJMRShE
RkdfREVCVUdfVkVSQk9TRSkKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCiAgICAgdW5zaWduZWQgbV9jb3VudDsKICNlbmRpZgogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1
NTE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgzMCw2ICs4MzAsMjUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVUludDMyVG9O
dW1iZXI6IHsKKyAgICAgICAgaWYgKCFub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRo
Tm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBzb21ldGlt
ZXMgcHJvZHVjZXMgZG91Ymxlcy4gU28gcHJvZHVjZSBhIGRvdWJsZSBldmVyeQorICAgICAgICAg
ICAgLy8gdGltZS4gVGhpcyBhdCBsZWFzdCBhbGxvd3Mgc3Vic2VxdWVudCBjb2RlIHRvIG5vdCBo
YXZlIHdlaXJkIGNvbmRpdGlvbmFscy4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgRlBSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVnIGlucHV0
R1BSID0gb3AxLmdwcigpOworICAgICAgICAgICAgRlBSUmVnIG91dHB1dEZQUiA9IHJlc3VsdC5m
cHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3Vi
bGUoaW5wdXRHUFIsIG91dHB1dEZQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIHBvc2l0aXZlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okdy
ZWF0ZXJUaGFuT3JFcXVhbCwgaW5wdXRHUFIsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgICAg
ICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUz
MiksIG91dHB1dEZQUik7CisgICAgICAgICAgICBwb3NpdGl2ZS5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRvdWJsZVJlc3VsdChvdXRwdXRGUFIsIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9w
MSk7CiAKQEAgLTg0MSwyNyArODYwLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFVJ
bnQzMlRvTnVtYmVyU2FmZTogewotICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBzb21ldGlt
ZXMgcHJvZHVjZXMgZG91Ymxlcy4gU28gcHJvZHVjZSBhIGRvdWJsZSBldmVyeQotICAgICAgICAv
LyB0aW1lLiBUaGlzIGF0IGxlYXN0IGFsbG93cyBzdWJzZXF1ZW50IGNvZGUgdG8gbm90IGhhdmUg
d2VpcmQgY29uZGl0aW9uYWxzLgotICAgICAgICAKLSAgICAgICAgSW50ZWdlck9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwotICAgICAgICAKLSAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gb3AxLmdwcigpOwotICAgICAg
ICBGUFJSZWcgb3V0cHV0RlBSID0gcmVzdWx0LmZwcigpOwotICAgICAgICAKLSAgICAgICAgbV9q
aXQuY29udmVydEludDMyVG9Eb3VibGUoaW5wdXRHUFIsIG91dHB1dEZQUik7Ci0gICAgICAgIAot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0R1BSLCBUcnVzdGVkSW1tMzIoMCkp
OwotICAgICAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygm
dHdvVG9UaGUzMiksIG91dHB1dEZQUik7Ci0gICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsK
LSAgICAgICAgCi0gICAgICAgIGRvdWJsZVJlc3VsdChvdXRwdXRGUFIsIG1fY29tcGlsZUluZGV4
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKKyAg
ICAgICAgaWYgKHNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAg
ICAgICAgICAgIC8vIERvIGl0IHRoZSBzYWZlIHdheS4KKyAgICAgICAgICAgIG5vblNwZWN1bGF0
aXZlVmFsdWVUb0ludDMyKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogICAgICAg
ICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKQEAgLTg3MCwxNyArODc1LDE4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAg
ICBjYXNlIFZhbHVlVG9OdW1iZXI6IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVn
ZXIobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQu
Z3ByKCkpOwotICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGls
ZUluZGV4LCBvcDEuZm9ybWF0KCkpOworICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50
ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwg
cmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1f
Y29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBG
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUo
b3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZw
cigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIAorICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCwgb3AxLmZvcm1hdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC04OTQsMTMgKzkw
MCwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICBj
YXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkg
JiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgewogICAg
ICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKSkgewogICAgICAgICAg
ICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2Rl
LmNoaWxkMigpKTsKICAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwot
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hBZGQzMihNYWNy
b0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMi5ncHIoKSwgSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIo
KSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNh
dGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAg
IG1faml0LmFkZDMyKEltbTMyKGltbTEpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AyLmdwcigpLCBJbW0zMihpbW0xKSwg
cmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTExLDcg
KzkyMSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGls
ZDIoKSk7CiAgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihpbW0yKSwg
cmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVn
ZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
YWRkMzIoSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoQWRkMzIo
TWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQu
Z3ByKCkpKTsKIAogICAgICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05MjQsMjQgKzkzOCwy
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICBHUFJSZWcgZ3ByMSA9IG9wMS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBncHIyID0gb3Ay
LmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIGdwclJlc3VsdCA9IHJlc3VsdC5ncHIoKTsKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrID0gbV9qaXQuYnJhbmNoQWRkMzIo
TWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBncHIxLCBncHIyLCBncHJSZXN1bHQpOwotCi0gICAg
ICAgICAgICBpZiAoZ3ByMSA9PSBncHJSZXN1bHQpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVz
dWx0LCBncHIyKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChncHIyID09IGdwclJlc3VsdCkKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGNoZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5
KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1bHQsIGdwcjEpKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGNoZWNrKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygp
KSkgeworICAgICAgICAgICAgICAgIGlmIChncHIxID09IGdwclJlc3VsdCkKKyAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuYWRkMzIoZ3ByMiwgZ3ByUmVzdWx0KTsKKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShncHIyLCBncHJSZXN1bHQpOwor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihncHIxLCBncHJSZXN1bHQpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgY2hlY2sgPSBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6
T3ZlcmZsb3csIGdwcjEsIGdwcjIsIGdwclJlc3VsdCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKGdwcjEgPT0gZ3ByUmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKGNoZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRk
LCBncHJSZXN1bHQsIGdwcjIpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChncHIyID09IGdw
clJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhjaGVjaywgU3Bl
Y3VsYXRpb25SZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIxKSk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGNo
ZWNrKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChncHJSZXN1
bHQsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gc2FmZSBjYXNlcy4KLSAgICB9Ci0gICAg
ICAgIAotICAgIGNhc2UgVmFsdWVBZGRTYWZlOgotICAgIGNhc2UgQXJpdGhBZGRTYWZlOiB7CiAg
ICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGls
ZDIoKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CkBAIC05NTUsNyArOTc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIEFTU0VSVChvcCA9PSBWYWx1ZUFkZCB8fCBvcCA9PSBWYWx1ZUFkZFNh
ZmUpOworICAgICAgICBBU1NFUlQob3AgPT0gVmFsdWVBZGQpOwogICAgICAgICAKICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC05NzYsMTMgKzk5NSwxNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2Fz
ZSBBcml0aFN1YjogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNo
aWxkMSgpLCBub2RlLmNoaWxkMigpKSkgeworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50
ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQyKCkpKSB7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIGludDMy
X3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywg
b3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAg
aWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSk7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3By
KCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICAgICAgICAgIGludGVn
ZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC05OTIsMTYgKzEwMTUsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hTdWIzMihNYWNy
b0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkp
KTsKKyAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2Rl
RmxhZ3MoKSkpIHsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihvcDIuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigp
LCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBzYWZlIGNhc2UuCi0g
ICAgfQotICAgICAgICAKLSAgICBjYXNlIEFyaXRoU3ViU2FmZTogewogICAgICAgICBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKQEAgLTEwMTQsMjIgKzEwMzcsMjcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICBjYXNlIEFyaXRoTXVsU3BlY05vdE5lZ1plcm86Ci0gICAgY2FzZSBBcml0aE11bFBv
c3NpYmx5TmVnWmVybzoKLSAgICBjYXNlIEFyaXRoTXVsSWdub3JlWmVybzogewotICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkg
eworICAgIGNhc2UgQXJpdGhNdWw6IHsKKyAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVn
ZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVn
ZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgR1BSUmVnIHJlZzEgPSBvcDEu
Z3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgcmVnMiA9IG9wMi5ncHIoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gV2hhdCBpcyB1bmZvcnR1bmF0ZSBpcyB0aGF0IHdlIGNhbm5vdCB0
YWtlIGFkdmFudGFnZSBvZiBub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKCkKKyAgICAgICAgICAgIC8v
IGhlcmUuIEEgbXVsdGlwbHkgb24gaW50ZWdlcnMgcGVyZm9ybWVkIGluIHRoZSBkb3VibGUgZG9t
YWluIGFuZCB0aGVuIHRydW5jYXRlZCB0bworICAgICAgICAgICAgLy8gYW4gaW50ZWdlciB3aWxs
IGdpdmUgYSBkaWZmZXJlbnQgcmVzdWx0IHRoYW4gYSBtdWx0aXBseSBwZXJmb3JtZWQgaW4gdGhl
IGludGVnZXIKKyAgICAgICAgICAgIC8vIGRvbWFpbiBhbmQgdGhlbiB0cnVuY2F0ZWQsIGlmIHRo
ZSBpbnRlZ2VyIGRvbWFpbiByZXN1bHQgd291bGQgaGF2ZSByZXN1bHRlZCBpbgorICAgICAgICAg
ICAgLy8gc29tZXRoaW5nIGJpZ2dlciB0aGFuIHdoYXQgYSAzMi1iaXQgaW50ZWdlciBjYW4gaG9s
ZC4gSmF2YVNjcmlwdCBtYW5kYXRlcyB0aGF0CisgICAgICAgICAgICAvLyB0aGUgc2VtYW50aWNz
IGFyZSBhbHdheXMgYXMgaWYgdGhlIG11bHRpcGx5IGhhZCBiZWVuIHBlcmZvcm1lZCBpbiB0aGUg
ZG91YmxlCisgICAgICAgICAgICAvLyBkb21haW4uCisgICAgICAgICAgICAKICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJm
bG93LCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpKTsKLQotICAgICAgICAgICAgLy8gT25seSB0
aGUgQXJpdGhNdWxTcGVjTm90TmVnWmVybyBvcGNvZGUgcmVxdWlyZXMgdGhhdCB3ZSBhY3R1YWxs
eSB0dXJuCi0gICAgICAgICAgICAvLyBuZWdhdGl2ZSB6ZXJvIGludG8gYSBkb3VibGUuIFRoZSBv
dGhlciB0d28gbWVhbiB0aGF0IGFsbCB1c2VycyBvZiB0aGlzCi0gICAgICAgICAgICAvLyByZXN1
bHQgZG9uJ3QgY2FyZSBpZiBpdCdzIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgemVyby4KLSAgICAg
ICAgICAgIGlmIChvcCA9PSBBcml0aE11bFNwZWNOb3ROZWdaZXJvKSB7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIENoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCBpZiB0aGUgdXNlcnMgb2Yg
dGhpcyBub2RlIGNhcmUgYWJvdXQgc3VjaCB0aGluZ3MuCisgICAgICAgICAgICBpZiAoIW5vZGVD
YW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygpKSkgewogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJlc3VsdE5vblplcm8gPSBtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW4sIHJlZzEsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcyLCBU
cnVzdGVkSW1tMzIoMCkpKTsKQEAgLTEwNDAsMTAgKzEwNjgsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIHNhZmUgY2FzZS4KLSAgICB9Ci0K
LSAgICBjYXNlIEFyaXRoTXVsU2FmZTogewogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgb3AxLCBvcDIpOwpAQCAtMTA5OSw3ICsxMTIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcml0aEFi
czogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpKSkg
eworICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpKSAmJiBu
b2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTExMjYsNyArMTE1MCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgY2FzZSBBcml0
aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OiB7Ci0gICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIGlmIChzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpICYmIG5vZGVD
YW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKICAgICAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hp
bGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwpAQCAt
MTg3Niw3ICsxOTAwLDcgQEAgVmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZh
bAogICAgICAgICAKICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICAKLSAgICAg
ICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyIHx8IG5vZGVQdHItPm9wID09IFVJ
bnQzMlRvTnVtYmVyU2FmZSkgeworICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gVUludDMyVG9O
dW1iZXIpIHsKICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBub2RlUHRyLT5jaGls
ZDEoKTsKICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwog
ICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxS
ZWdpc3RlcigpXTsKQEAgLTE5MDcsNyArMTkzMSw2IEBAIFZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRp
dmVKSVQ6OmNvbXB1dGVWYWwKICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMySW5kZXgg
PSBpbmZvLm5vZGVJbmRleCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAgICAgICAgIGNhc2UgVUludDMy
VG9OdW1iZXJTYWZlOgogICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlckluZGV4ID0g
aW5mby5ub2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0
aG1ldGljLmNwcAkocmV2aXNpb24gOTU1MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVEFyaXRobWV0aWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzgsNiArNzc4LDkgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wKE9wY29kZUlEIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElt
bWVkaWF0ZUludGVnZXIocmVnVDEpOworI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICBS
YXJlQ2FzZVByb2ZpbGUqIHByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YWRkU3BlY2lhbEZhc3RDYXNl
UHJvZmlsZShtX2J5dGVjb2RlT2Zmc2V0KTsKKyNlbmRpZgogICAgIGlmIChvcGNvZGVJRCA9PSBv
cF9hZGQpCiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJmbG93LCByZWdUMSwg
cmVnVDApKTsKICAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9zdWIpCkBAIC04MDAsNyArODAz
LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVCaW5hcnlBcml0aE9wKE9wY29kZUlEIAogICAgICAgICAg
ICAgLy8gV2Ugb25seSBnZXQgaGVyZSBpZiB3ZSBoYXZlIGEgZ2VudWluZSBuZWdhdGl2ZSB6ZXJv
LiBSZWNvcmQgdGhpcywKICAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhlIHNwZWN1bGF0aXZlIEpJ
VCBrbm93cyB0aGF0IHdlIGZhaWxlZCBzcGVjdWxhdGlvbgogICAgICAgICAgICAgLy8gYmVjYXVz
ZSBvZiBhIG5lZ2F0aXZlIHplcm8uCi0gICAgICAgICAgICBhZGQzMihJbW0zMigxKSwgQWJzb2x1
dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+YWRkU3BlY2lhbEZhc3RDYXNlUHJvZmlsZShtX2J5dGVj
b2RlT2Zmc2V0KS0+bV9jb3VudGVyKSk7CisgICAgICAgICAgICBhZGQzMihJbW0zMigxKSwgQWJz
b2x1dGVBZGRyZXNzKCZwcm9maWxlLT5tX2NvdW50ZXIpKTsKICAgICAgICAgICAgIGFkZFNsb3dD
YXNlKGp1bXAoKSk7CiAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgICAgICAgICBt
b3ZlKHJlZ1QyLCByZWdUMCk7CkBAIC05NjQsMTEgKzk2NywxOSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9tdWwoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgLy8gRm9yIG5vdywgb25seSBwbGFudCBhIGZh
c3QgaW50IGNhc2UgaWYgdGhlIGNvbnN0YW50IG9wZXJhbmQgaXMgZ3JlYXRlciB0aGFuIHplcm8u
CiAgICAgaW50MzJfdCB2YWx1ZTsKICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbW1lZGlhdGVJ
bnQob3AxKSAmJiAoKHZhbHVlID0gZ2V0Q29uc3RhbnRPcGVyYW5kSW1tZWRpYXRlSW50KG9wMSkp
ID4gMCkpIHsKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgICAgIC8vIEFkZCBhIHNw
ZWNpYWwgZmFzdCBjYXNlIHByb2ZpbGUgYmVjYXVzZSB0aGUgREZHIEpJVCB3aWxsIGV4cGVjdCBv
bmUuCisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRTcGVjaWFsRmFzdENhc2VQcm9maWxlKG1fYnl0
ZWNvZGVPZmZzZXQpOworI2VuZGlmCiAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByZWdUMCk7CiAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIo
cmVnVDApOwogICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hNdWwzMihPdmVyZmxvdywgSW1tMzIo
dmFsdWUpLCByZWdUMCwgcmVnVDApKTsKICAgICAgICAgZW1pdEZhc3RBcml0aFJlVGFnSW1tZWRp
YXRlKHJlZ1QwLCByZWdUMCk7CiAgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEltbWVk
aWF0ZUludChvcDIpICYmICgodmFsdWUgPSBnZXRDb25zdGFudE9wZXJhbmRJbW1lZGlhdGVJbnQo
b3AyKSkgPiAwKSkgeworI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICAgICAgLy8gQWRk
IGEgc3BlY2lhbCBmYXN0IGNhc2UgcHJvZmlsZSBiZWNhdXNlIHRoZSBERkcgSklUIHdpbGwgZXhw
ZWN0IG9uZS4KKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZFNwZWNpYWxGYXN0Q2FzZVByb2ZpbGUo
bV9ieXRlY29kZU9mZnNldCk7CisjZW5kaWYKICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDEsIHJlZ1QwKTsKICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50
ZWdlcihyZWdUMCk7CiAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaE11bDMyKE92ZXJmbG93LCBJ
bW0zMih2YWx1ZSksIHJlZ1QwLCByZWdUMCkpOwo=
</data>
<flag name="review"
          id="104822"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>