<?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>68316</bug_id>
          
          <creation_ts>2011-09-17 14:01:17 -0700</creation_ts>
          <short_desc>DFG JIT does not have full block-local CSE</short_desc>
          <delta_ts>2011-09-17 20:46:39 -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>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>469099</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-17 14:01:17 -0700</bug_when>
    <thetext>DFG JIT can perform some simple load elimination on array accesses, but other than that it cannot do common subexpression elimination (CSE).  This is unfortunate, since CSE would be of great benefit for global variable accesses, more complex forms of array accesses, and repeated arithmetic.  This is particularly true since these operations in JavaScript are so expensive.  Thus eliminating even a few of them can have a big effect.

The DFG JIT should implement block-local CSE with facilities to eliminate both pure operations (additions on numbers, etc) and heap operations (GetGlobalVar, GetByVal, CheckMethod).  The latter should take care to ensure correctness in the case of conflicting side-effects.  CSE should be OSR-friendly: if it eliminates an operation, it should ensure that everything needed to perform that operation in the old JIT if OSR happens is still intact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469100</commentid>
    <comment_count>1</comment_count>
      <attachid>107773</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-17 14:08:42 -0700</bug_when>
    <thetext>Created attachment 107773
work in progress

Still working on this, but it&apos;s pretty awesome for Kraken.



Benchmark report for Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;PhantomCSE&quot; at /Volumes/Data/pizlo/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               PhantomCSE                                   

ai-astar                             634.8768+-5.2150        632.3351+-4.7085       
audio-beat-detection                 467.5151+-1.2716        465.7044+-1.3745       
audio-dft                            423.1598+-2.3857        421.5126+-2.3649       
audio-fft                            364.7906+-1.2717    ?   365.5174+-1.0969       ?
audio-oscillator                     312.1471+-1.5005    ?   331.5295+-21.8849      ? might be 1.0621x slower
imaging-darkroom                     412.6474+-1.6945        411.6372+-1.1734       
imaging-desaturate                   207.4252+-0.7089    !   221.9861+-0.8245       ! definitely 1.0702x slower
imaging-gaussian-blur               1082.7893+-2.2880    ^   591.5093+-0.8721       ^ definitely 1.8306x faster
json-parse-financial                  49.5232+-0.2997    ?    50.3901+-1.3708       ? might be 1.0175x slower
json-stringify-tinderbox              68.0220+-0.2688         67.8016+-0.6565       
stanford-crypto-aes                  144.5714+-0.6423        143.6752+-1.0772       
stanford-crypto-ccm                  110.8207+-0.2111        110.1401+-0.5823       
stanford-crypto-pbkdf2               396.3371+-1.5674        394.0494+-5.6482       
stanford-crypto-sha256-iterative     148.7113+-0.6486    ?   149.4918+-0.3482       ?

&lt;arithmetic&gt;                         344.5241+-0.4476    ^   311.2343+-1.5880       ^ definitely 1.1070x faster
&lt;geometric&gt;                          252.2160+-0.3048    ^   243.4866+-0.8714       ^ definitely 1.0359x faster
&lt;harmonic&gt;                           174.4002+-0.3305        174.1282+-0.7948</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469101</commentid>
    <comment_count>2</comment_count>
      <attachid>107774</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-17 14:25:29 -0700</bug_when>
    <thetext>Created attachment 107774
work in progress - fixed clobber detection

This fixes a bug where nodes that might clobber the world depending on what the predictions are are not caught as having clobbered the world.  That would have potentially caused a heap access to miss a mutation performed by a valueOf method.  This does not affect performance, we still have a win.



Benchmark report for Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;PhantomCSE&quot; at /Volumes/Data/pizlo/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               PhantomCSE                                   

ai-astar                             633.3743+-5.5077        628.2505+-3.3314       
audio-beat-detection                 467.7312+-1.1106        465.8301+-2.4056       
audio-dft                            425.0346+-3.3409        421.6433+-3.9040       
audio-fft                            364.9765+-1.0920        363.3348+-0.7880       
audio-oscillator                     312.2311+-1.3474    ?   334.1131+-24.5161      ? might be 1.0701x slower
imaging-darkroom                     421.8919+-7.9838        412.6673+-3.6377         might be 1.0224x faster
imaging-desaturate                   207.5554+-0.8215    !   222.0429+-0.8075       ! definitely 1.0698x slower
imaging-gaussian-blur               1080.7974+-3.1483    ^   590.5500+-1.2227       ^ definitely 1.8302x faster
json-parse-financial                  49.4475+-0.2421    ?    49.8471+-0.5680       ?
json-stringify-tinderbox              67.7704+-0.3214         67.3444+-0.3539       
stanford-crypto-aes                  145.3547+-1.7446        144.5298+-1.4606       
stanford-crypto-ccm                  113.2217+-1.2073        111.4091+-1.2598         might be 1.0163x faster
stanford-crypto-pbkdf2               395.2784+-1.8910        393.7265+-1.4519       
stanford-crypto-sha256-iterative     149.5971+-0.5527    ^   148.2928+-0.5524       ^ definitely 1.0088x faster

&lt;arithmetic&gt;                         345.3045+-1.0924    ^   310.9701+-1.5270       ^ definitely 1.1104x faster
&lt;geometric&gt;                          253.0919+-0.7436    ^   243.2712+-1.0140       ^ definitely 1.0404x faster
&lt;harmonic&gt;                           174.9138+-0.5020    ^   173.6795+-0.4600       ^ definitely 1.0071x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469102</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-17 14:28:02 -0700</bug_when>
    <thetext>Attachment 107774 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:537:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGPropagator.cpp:544:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 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>469103</commentid>
    <comment_count>4</comment_count>
      <attachid>107775</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-17 14:30:30 -0700</bug_when>
    <thetext>Created attachment 107775
fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469105</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-17 15:22:14 -0700</bug_when>
    <thetext>This appears to cause problems in v8-crypto.  Will investigate.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;PhantomCSE&quot; at /Volumes/Data/pizlo/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               PhantomCSE                                   
SunSpider:
   3d-cube                                7.8284+-0.2287    ?     8.0779+-0.3870       ? might be 1.0319x slower
   3d-morph                               7.6338+-0.1110          7.4934+-0.0868         might be 1.0187x faster
   3d-raytrace                            7.8429+-0.1767          7.7937+-0.1765       
   access-binary-trees                    2.3852+-0.1110          2.3590+-0.0676         might be 1.0111x faster
   access-fannkuch                       11.8849+-0.3509         11.7750+-0.2073       
   access-nbody                           4.2269+-0.0789    ?     4.2728+-0.0942       ? might be 1.0109x slower
   access-nsieve                          2.8027+-0.1699          2.6734+-0.0905         might be 1.0483x faster
   bitops-3bit-bits-in-byte               1.6754+-0.0381    ?     1.7034+-0.0363       ? might be 1.0167x slower
   bitops-bits-in-byte                    2.8888+-0.1243          2.7230+-0.0417         might be 1.0609x faster
   bitops-bitwise-and                     3.5988+-0.0952    ?     3.6492+-0.0804       ? might be 1.0140x slower
   bitops-nsieve-bits                     5.5235+-0.2110    ?     5.5242+-0.1183       ?
   controlflow-recursive                  1.9878+-0.0313    ?     2.0334+-0.0523       ? might be 1.0229x slower
   crypto-aes                             6.8065+-0.2288    ?     6.9506+-0.2345       ? might be 1.0212x slower
   crypto-md5                             2.8490+-0.0740          2.8360+-0.0769       
   crypto-sha1                            2.2570+-0.0533          2.2547+-0.0661       
   date-format-tofte                     10.3381+-0.3317    ?    10.5701+-0.3384       ? might be 1.0225x slower
   date-format-xparb                      8.8419+-0.1870    ?     8.8898+-0.2041       ?
   math-cordic                            6.3064+-0.1460          6.2773+-0.1129       
   math-partial-sums                      7.4684+-0.1287          7.3521+-0.1185         might be 1.0158x faster
   math-spectral-norm                     2.6770+-0.0452    ?     2.7024+-0.0858       ?
   regexp-dna                            11.1097+-0.2560         11.0797+-0.2991       
   string-base64                          5.9207+-0.1820    ?     5.9388+-0.2183       ?
   string-fasta                           7.4196+-0.2309          7.2921+-0.1549         might be 1.0175x faster
   string-tagcloud                       12.2438+-0.3220    ?    12.3827+-0.3968       ? might be 1.0113x slower
   string-unpack-code                    19.0840+-0.4811    ?    19.1473+-0.4783       ?
   string-validate-input                  7.0255+-0.1803          6.7060+-0.1777         might be 1.0477x faster

   &lt;arithmetic&gt;                           6.5626+-0.0592          6.5561+-0.0347       
   &lt;geometric&gt;                            5.4158+-0.0484          5.4012+-0.0282       
   &lt;harmonic&gt;                             4.4173+-0.0425          4.4048+-0.0279       

                                            TipOfTree               PhantomCSE                                   
V8:
   crypto                                85.0254+-1.0501    !    90.1991+-0.9224       ! definitely 1.0608x slower
   deltablue                            241.6628+-3.2628    ?   246.2428+-3.6104       ? might be 1.0190x slower
   earley-boyer                          97.6438+-0.7456    ?    99.2094+-2.1783       ? might be 1.0160x slower
   raytrace                              71.4261+-2.1758         71.2358+-0.9164       
   regexp                               108.6062+-0.7931        107.9489+-1.3720       
   richards                             222.6911+-1.9571    ?   223.6860+-1.7525       ?
   splay                                100.8236+-1.2160        100.5770+-1.1419       

   &lt;arithmetic&gt;                         132.5542+-0.8131    ?   134.1570+-0.8461       ? might be 1.0121x slower
   &lt;geometric&gt;                          119.5471+-0.8401    !   121.0450+-0.6406       ! definitely 1.0125x slower
   &lt;harmonic&gt;                           109.7402+-0.9649    ?   111.1702+-0.4928       ? might be 1.0130x slower

                                            TipOfTree               PhantomCSE                                   
Kraken:
   ai-astar                             649.6561+-4.1369        646.0026+-2.4923       
   audio-beat-detection                 475.6792+-4.4012    ?   483.0049+-4.7150       ? might be 1.0154x slower
   audio-dft                            436.4239+-7.3389    ?   446.6362+-8.3083       ? might be 1.0234x slower
   audio-fft                            373.1857+-1.6543    ^   367.4489+-3.1949       ^ definitely 1.0156x faster
   audio-oscillator                     316.8722+-2.4950    ?   320.6392+-1.8030       ? might be 1.0119x slower
   imaging-darkroom                     422.7289+-3.2483        420.5169+-3.2162       
   imaging-desaturate                   213.9714+-1.3662    !   227.1311+-2.3809       ! definitely 1.0615x slower
   imaging-gaussian-blur               1105.4039+-10.1736   ^   599.5372+-3.7661       ^ definitely 1.8438x faster
   json-parse-financial                  51.4321+-1.0503    ?    52.0258+-1.3815       ? might be 1.0115x slower
   json-stringify-tinderbox              71.3999+-0.7193         70.0470+-1.1840         might be 1.0193x faster
   stanford-crypto-aes                  148.7115+-1.0955        145.8912+-2.0387         might be 1.0193x faster
   stanford-crypto-ccm                  114.4813+-1.0582        112.6201+-1.1088         might be 1.0165x faster
   stanford-crypto-pbkdf2               405.1123+-2.8189        401.1639+-4.8977       
   stanford-crypto-sha256-iterative     153.8989+-1.7272    ^   150.0681+-1.9634       ^ definitely 1.0255x faster

   &lt;arithmetic&gt;                         352.7827+-0.6156    ^   317.3381+-1.0955       ^ definitely 1.1117x faster
   &lt;geometric&gt;                          259.2795+-0.4700    ^   248.2747+-1.0513       ^ definitely 1.0443x faster
   &lt;harmonic&gt;                           180.3846+-0.9365        178.1785+-1.5075         might be 1.0124x faster

                                            TipOfTree               PhantomCSE                                   
All benchmarks:
   &lt;arithmetic&gt;                         128.4567+-0.2710    ^   118.1338+-0.3207       ^ definitely 1.0874x faster
   &lt;geometric&gt;                           27.1805+-0.1378    ^    26.8417+-0.0892       ^ definitely 1.0126x faster
   &lt;harmonic&gt;                             7.7977+-0.0731          7.7760+-0.0484</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469106</commentid>
    <comment_count>6</comment_count>
      <attachid>107776</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-17 15:42:26 -0700</bug_when>
    <thetext>Created attachment 107776
work in progress - fixed crypto slow-down

Turns out there was a pretty stupid goof in the handling of PutByVal aliasing, which would result in almost no PutByValAlias nodes being created.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;PhantomCSE&quot; at /Volumes/Data/pizlo/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               PhantomCSE                                   
SunSpider:
   3d-cube                                7.9232+-0.2648          7.7525+-0.1162         might be 1.0220x faster
   3d-morph                               7.5163+-0.1542    ?     7.6411+-0.1451       ? might be 1.0166x slower
   3d-raytrace                            7.6198+-0.2213    ?     7.8154+-0.2687       ? might be 1.0257x slower
   access-binary-trees                    2.2927+-0.0631    ?     2.3430+-0.1076       ? might be 1.0219x slower
   access-fannkuch                       11.7955+-0.2221         11.7900+-0.2864       
   access-nbody                           4.1922+-0.1009    ?     4.2398+-0.1195       ? might be 1.0114x slower
   access-nsieve                          2.6116+-0.0884          2.5449+-0.0317         might be 1.0262x faster
   bitops-3bit-bits-in-byte               1.7448+-0.0877          1.6776+-0.0485         might be 1.0401x faster
   bitops-bits-in-byte                    2.8421+-0.1109          2.7431+-0.0741         might be 1.0361x faster
   bitops-bitwise-and                     3.5856+-0.1136          3.5406+-0.0905         might be 1.0127x faster
   bitops-nsieve-bits                     5.4613+-0.1900          5.3684+-0.2327         might be 1.0173x faster
   controlflow-recursive                  2.0266+-0.0641    ?     2.0337+-0.0686       ?
   crypto-aes                             7.0701+-0.2844          6.7988+-0.2883         might be 1.0399x faster
   crypto-md5                             2.8068+-0.0990          2.7402+-0.0907         might be 1.0243x faster
   crypto-sha1                            2.2296+-0.0893    ?     2.2779+-0.0488       ? might be 1.0217x slower
   date-format-tofte                     10.1306+-0.2732    ?    10.2069+-0.3424       ?
   date-format-xparb                      8.7109+-0.2887    ?     8.8241+-0.3383       ? might be 1.0130x slower
   math-cordic                            6.1599+-0.1779          6.1429+-0.0971       
   math-partial-sums                      7.4027+-0.1215    ?     7.5718+-0.2252       ? might be 1.0229x slower
   math-spectral-norm                     2.5749+-0.0525    ?     2.7397+-0.1251       ? might be 1.0640x slower
   regexp-dna                            10.8766+-0.1139         10.8204+-0.1617       
   string-base64                          5.7194+-0.1861    ?     5.8138+-0.1489       ? might be 1.0165x slower
   string-fasta                           6.9102+-0.1286    ?     7.0826+-0.1556       ? might be 1.0249x slower
   string-tagcloud                       12.3084+-0.1789         12.1509+-0.2705         might be 1.0130x faster
   string-unpack-code                    18.6770+-0.4576         18.5139+-0.4159       
   string-validate-input                  6.7260+-0.2239          6.7087+-0.2291       

   &lt;arithmetic&gt;                           6.4583+-0.0381          6.4570+-0.0472       
   &lt;geometric&gt;                            5.3302+-0.0372          5.3297+-0.0292       
   &lt;harmonic&gt;                             4.3574+-0.0437          4.3517+-0.0257       

                                            TipOfTree               PhantomCSE                                   
V8:
   crypto                                82.6909+-0.4717    ?    83.5986+-1.4897       ? might be 1.0110x slower
   deltablue                            240.3774+-2.9172    ?   241.6129+-2.6006       ?
   earley-boyer                          94.9925+-0.3658    ?    95.1899+-0.3365       ?
   raytrace                              69.2022+-0.5321         68.5608+-0.3370       
   regexp                               106.4039+-0.2924    ?   106.8109+-0.3315       ?
   richards                             217.5292+-0.7257    ?   219.1786+-1.2439       ?
   splay                                 98.7563+-0.6588    ?    98.9796+-0.6181       ?

   &lt;arithmetic&gt;                         129.9932+-0.4350    ?   130.5616+-0.4737       ?
   &lt;geometric&gt;                          116.9140+-0.2731    ?   117.2857+-0.3739       ?
   &lt;harmonic&gt;                           107.1039+-0.2477    ?   107.3130+-0.3540       ?

                                            TipOfTree               PhantomCSE                                   
Kraken:
   ai-astar                             633.8644+-4.5250        629.9101+-4.8375       
   audio-beat-detection                 467.7739+-1.8784    !   480.9118+-2.5217       ! definitely 1.0281x slower
   audio-dft                            420.5802+-2.2915    ?   422.7050+-3.7068       ?
   audio-fft                            365.8273+-1.0027    ^   361.6524+-1.0137       ^ definitely 1.0115x faster
   audio-oscillator                     312.5754+-1.2268    ?   313.3259+-1.3247       ?
   imaging-darkroom                     414.3694+-0.6042    ?   417.3312+-6.3912       ?
   imaging-desaturate                   208.8211+-0.4056    !   219.5143+-1.8043       ! definitely 1.0512x slower
   imaging-gaussian-blur               1079.3643+-3.0724    ^   591.0141+-1.4195       ^ definitely 1.8263x faster
   json-parse-financial                  49.3249+-0.2466    ?    49.3504+-0.3346       ?
   json-stringify-tinderbox              68.2024+-0.2941    ^    67.4662+-0.1954       ^ definitely 1.0109x faster
   stanford-crypto-aes                  145.1407+-0.6647        143.8512+-1.0142       
   stanford-crypto-ccm                  111.9583+-0.4591        111.0426+-0.5527       
   stanford-crypto-pbkdf2               393.4172+-1.8730    !   400.2963+-3.0613       ! definitely 1.0175x slower
   stanford-crypto-sha256-iterative     149.7088+-0.5165        149.1306+-0.5542       

   &lt;arithmetic&gt;                         344.3520+-0.4113    ^   311.2502+-0.8385       ^ definitely 1.1064x faster
   &lt;geometric&gt;                          252.5200+-0.3160    ^   242.9262+-0.5994       ^ definitely 1.0395x faster
   &lt;harmonic&gt;                           174.7026+-0.3688    ^   173.0850+-0.4576       ^ definitely 1.0093x faster

                                            TipOfTree               PhantomCSE                                   
All benchmarks:
   &lt;arithmetic&gt;                         125.5063+-0.1475    ^   115.7301+-0.2455       ^ definitely 1.0845x faster
   &lt;geometric&gt;                           26.6428+-0.0985    ^    26.3484+-0.0743       ^ definitely 1.0112x faster
   &lt;harmonic&gt;                             7.6893+-0.0752          7.6787+-0.0442</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469112</commentid>
    <comment_count>7</comment_count>
      <attachid>107778</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-17 16:31:30 -0700</bug_when>
    <thetext>Created attachment 107778
the patch - reduced worst case performance a bit

This improces the CSE algorithm by ensuring that pure CSE only searches for aliases in the range:

From: Beginning of the basic block, or the maximum index of the children, whichever is bigger.
To: Last occurence of a node with the same opcode.

It searches this range backwards.  This optimization does not apply for non-pure operations because it would miss side effects.

Current numbers with latest changes.

Benchmark report for SunSpider, V8, and Kraken.

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

Collected 30 samples per benchmark/VM, with 10 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               PhantomCSE                                   
SunSpider:
   3d-cube                                7.7572+-0.0872    ?     7.7909+-0.1244       ?
   3d-morph                               7.5184+-0.0785    ?     7.5558+-0.0963       ?
   3d-raytrace                            7.7239+-0.1032    ?     7.7468+-0.1156       ?
   access-binary-trees                    2.2740+-0.0315    ?     2.3107+-0.0482       ? might be 1.0161x slower
   access-fannkuch                       11.7960+-0.1183    ^    11.5626+-0.0988       ^ definitely 1.0202x faster
   access-nbody                           4.1633+-0.0454    ?     4.2540+-0.0832       ? might be 1.0218x slower
   access-nsieve                          2.6018+-0.0398    ?     2.6032+-0.0310       ?
   bitops-3bit-bits-in-byte               1.6668+-0.0267    ?     1.7083+-0.0400       ? might be 1.0249x slower
   bitops-bits-in-byte                    2.7696+-0.0319    ?     2.8233+-0.0574       ? might be 1.0194x slower
   bitops-bitwise-and                     3.5817+-0.0621    ?     3.6520+-0.0629       ? might be 1.0196x slower
   bitops-nsieve-bits                     5.2870+-0.0667    ?     5.2977+-0.0682       ?
   controlflow-recursive                  2.0383+-0.0401    ?     2.1312+-0.0930       ? might be 1.0456x slower
   crypto-aes                             7.0860+-0.2158    ?     7.1663+-0.1855       ? might be 1.0113x slower
   crypto-md5                             2.8093+-0.0448    ?     2.8269+-0.0811       ?
   crypto-sha1                            2.2280+-0.0402    ?     2.2414+-0.0501       ?
   date-format-tofte                     10.2269+-0.1716         10.2042+-0.1426       
   date-format-xparb                      8.7081+-0.1255    ?     8.8777+-0.1652       ? might be 1.0195x slower
   math-cordic                            6.1956+-0.0690          6.1295+-0.0601         might be 1.0108x faster
   math-partial-sums                      7.4034+-0.0937          7.3807+-0.0997       
   math-spectral-norm                     2.5948+-0.0337    ?     2.6117+-0.0482       ?
   regexp-dna                            10.8661+-0.1062    ?    10.9373+-0.1211       ?
   string-base64                          5.8322+-0.1108          5.8219+-0.1171       
   string-fasta                           6.9385+-0.1083    ?     7.0151+-0.1314       ? might be 1.0110x slower
   string-tagcloud                       12.1121+-0.1935    ?    12.3550+-0.2062       ? might be 1.0201x slower
   string-unpack-code                    18.8462+-0.3793         18.5825+-0.2283         might be 1.0142x faster
   string-validate-input                  6.6845+-0.1124    ?     6.7245+-0.1514       ?

   &lt;arithmetic&gt;                           6.4504+-0.0253    ?     6.4735+-0.0239       ?
   &lt;geometric&gt;                            5.3125+-0.0181    !     5.3515+-0.0169       ! definitely 1.0073x slower
   &lt;harmonic&gt;                             4.3312+-0.0168    !     4.3786+-0.0162       ! definitely 1.0109x slower

                                            TipOfTree               PhantomCSE                                   
V8:
   crypto                                82.7124+-0.2753    ?    82.9466+-0.3673       ?
   deltablue                            239.2213+-0.8353    ?   239.8840+-1.0250       ?
   earley-boyer                          94.9496+-0.1586    ?    95.3712+-0.4045       ?
   raytrace                              69.0085+-0.2725         68.9221+-0.4887       
   regexp                               107.3699+-0.7440        107.0229+-0.3693       
   richards                             217.7471+-0.5430    !   219.5234+-0.5972       ! definitely 1.0082x slower
   splay                                 98.7746+-0.3300         98.7596+-0.2519       

   &lt;arithmetic&gt;                         129.9691+-0.2003    ?   130.3471+-0.2048       ?
   &lt;geometric&gt;                          116.9542+-0.1749    ?   117.1789+-0.1988       ?
   &lt;harmonic&gt;                           107.1496+-0.1678    ?   107.2769+-0.2259       ?

                                            TipOfTree               PhantomCSE                                   
Kraken:
   ai-astar                             636.9671+-4.2157    ^   629.5812+-1.9895       ^ definitely 1.0117x faster
   audio-beat-detection                 467.7131+-1.0341    !   470.1425+-1.0160       ! definitely 1.0052x slower
   audio-dft                            425.3115+-3.7983        423.8902+-2.1948       
   audio-fft                            364.0817+-0.6708        363.9339+-1.0152       
   audio-oscillator                     312.5008+-0.3736    ?   312.5853+-0.5099       ?
   imaging-darkroom                     413.9106+-0.8494    ^   410.8664+-0.5848       ^ definitely 1.0074x faster
   imaging-desaturate                   207.8968+-0.4679    !   218.0565+-0.4687       ! definitely 1.0489x slower
   imaging-gaussian-blur               1081.8128+-1.7363    ^   589.7422+-1.1866       ^ definitely 1.8344x faster
   json-parse-financial                  49.2932+-0.1803    ?    49.7524+-0.2908       ?
   json-stringify-tinderbox              69.6689+-1.5041    ^    67.6637+-0.3880       ^ definitely 1.0296x faster
   stanford-crypto-aes                  144.3012+-0.4594        144.2128+-0.4487       
   stanford-crypto-ccm                  111.9439+-0.3347        111.7710+-0.3905       
   stanford-crypto-pbkdf2               396.0157+-1.5465    ?   397.0790+-1.5456       ?
   stanford-crypto-sha256-iterative     149.2708+-0.4787    !   150.4953+-0.5297       ! definitely 1.0082x slower

   &lt;arithmetic&gt;                         345.0492+-0.4615    ^   309.9837+-0.3411       ^ definitely 1.1131x faster
   &lt;geometric&gt;                          252.9574+-0.3953    ^   242.5861+-0.2959       ^ definitely 1.0428x faster
   &lt;harmonic&gt;                           175.1667+-0.5736    ^   173.5501+-0.3501       ^ definitely 1.0093x faster

                                            TipOfTree               PhantomCSE                                   
All benchmarks:
   &lt;arithmetic&gt;                         125.7060+-0.1391    ^   115.3301+-0.1168       ^ definitely 1.0900x faster
   &lt;geometric&gt;                           26.6087+-0.0437    ^    26.3931+-0.0411       ^ definitely 1.0082x faster
   &lt;harmonic&gt;                             7.6444+-0.0289    !     7.7252+-0.0277       ! definitely 1.0106x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469116</commentid>
    <comment_count>8</comment_count>
      <attachid>107779</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-17 16:55:22 -0700</bug_when>
    <thetext>Created attachment 107779
the patch - updated changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469118</commentid>
    <comment_count>9</comment_count>
      <attachid>107779</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-17 17:20:48 -0700</bug_when>
    <thetext>Comment on attachment 107779
the patch - updated changelog

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

r=me but i&apos;d like some response to my commentary

&gt; Source/JavaScriptCore/dfg/DFGNode.h:176
&gt; +    macro(PutByVal, NodeMustGenerate | NodeClobbersWorld) \
&gt; +    macro(PutByValAlias, NodeMustGenerate | NodeClobbersWorld) \
&gt; +    macro(GetById, NodeResultJS | NodeMustGenerate | NodeClobbersWorld) \
&gt; +    macro(PutById, NodeMustGenerate | NodeClobbersWorld) \
&gt; +    macro(PutByIdDirect, NodeMustGenerate | NodeClobbersWorld) \

Do we really need to consider the gets to clobber the world?  if we know that the get is a pure object property, then the access is pure

&gt; Source/JavaScriptCore/dfg/DFGPropagator.cpp:732
&gt; +        case ArithAbs:

Don&apos;t we support sqrt(), and min/max?

In the longer term it seems we would probably want a generic handler for pure intrinsics.

&gt; Source/JavaScriptCore/dfg/DFGPropagator.cpp:-443
&gt; -#if ENABLE(DFG_DEBUG_VERBOSE)
&gt; -    graph.dump(codeBlock);
&gt; -#endif

is this deliberate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469119</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-17 17:25:43 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/dfg/DFGNode.h:176
&gt; &gt; +    macro(PutByVal, NodeMustGenerate | NodeClobbersWorld) \
&gt; &gt; +    macro(PutByValAlias, NodeMustGenerate | NodeClobbersWorld) \
&gt; &gt; +    macro(GetById, NodeResultJS | NodeMustGenerate | NodeClobbersWorld) \
&gt; &gt; +    macro(PutById, NodeMustGenerate | NodeClobbersWorld) \
&gt; &gt; +    macro(PutByIdDirect, NodeMustGenerate | NodeClobbersWorld) \
&gt; 
&gt; Do we really need to consider the gets to clobber the world?  if we know that the get is a pure object property, then the access is pure

Currently we never predict or speculate the purity of GetById.  All GetById&apos;s get compiled with a slow path that may call arbitrary JS code for getters, or arbitrary C++ code in WebCore.

This will change once we start doing reasonable things for GetById.  We will still have a GetById that covers the cases where we know nothing (in which case it&apos;ll be have as it does now, and we&apos;ll still have to assume that it clobbers the world), but we will also have another GetById op that already knows the structure it&apos;s accessing and already knows that the access is pure.  That&apos;s probably my next task...

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGPropagator.cpp:732
&gt; &gt; +        case ArithAbs:
&gt; 
&gt; Don&apos;t we support sqrt(), and min/max?

Haven&apos;t landed that patch yet. :-)

&gt; 
&gt; In the longer term it seems we would probably want a generic handler for pure intrinsics.

pureCSE() is that handler.  So it&apos;s just a question of whether we want performNodeCSE() to have one switch statement (which is more efficient) or have an if statement at the top like:

if (node.op &amp; NodeIsPure) {
    setReplacement(pureCSE(node));
    return;
}

I think that would be reasonable if the number of pure arithmetic nodes that are CSE-able grows really big.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGPropagator.cpp:-443
&gt; &gt; -#if ENABLE(DFG_DEBUG_VERBOSE)
&gt; &gt; -    graph.dump(codeBlock);
&gt; &gt; -#endif
&gt; 
&gt; is this deliberate?

Yup, since fixpoint() now does dump() calls, including one at the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469133</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-17 20:46:39 -0700</bug_when>
    <thetext>Landed in r95389.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107773</attachid>
            <date>2011-09-17 14:08:42 -0700</date>
            <delta_ts>2011-09-17 14:25:29 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>cse_patch_1.diff</filename>
            <type>text/plain</type>
            <size>43769</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUzODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAK
KzIwMTEtMDktMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGhhdmUgZnVsbCBibG9jay1sb2NhbCBDU0UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzE2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgYmxvY2st
bG9jYWwgQ1NFIHRvIHRoZSBERkcuIENTRSBydW5zIGluIHRoZSBwcm9wYWdhdG9yIGp1c3QgYWZ0
ZXIKKyAgICAgICAgdHlwZSBwcm9wYWdhdGlvbi4gSXQgaXMgcGFydCBvZiB0aGUgcHJvcGFnYXRv
ciBpdHNlbGYgYmVjYXVzZSBpdCBuZWVkcyB0bworICAgICAgICB1c2UgdGhlIHByb3BhZ2F0b3In
cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG9wZXJhdGlvbnMK
KyAgICAgICAgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLiBCZWNhdXNlIGl0IGNoYW5nZXMgdGhlIGxp
dmUtcmFuZ2VzIG9mIG5vZGVzLCB0aGUKKyAgICAgICAgdmlydHVhbCByZWdpc3RlciBhbGxvY2F0
b3IgaGFkIHRvIGJlIG1vdmVkIGludG8gdGhlIHByb3BhZ2F0b3Igc28gdGhhdCBpdAorICAgICAg
ICBydW5zIGFmdGVyIENTRS4gVG8gZW5zdXJlIHRoYXQgdGhlIGJhY2stZW5kIGtub3dzIHRvIGtl
ZXAgdGhlIGlucHV0cyB0bworICAgICAgICBhbnkgZWxpbWluYXRlZCBub2RlIGFsaXZlIGZvciBP
U1IsIGEgbmV3IG5vZGUgdHlwZSwgUGhhbnRvbSwgd2FzIGludHJvZHVjZWQuCisgICAgICAgIEl0
IGlzIGEgbm8tb3AgYnV0IHByb2xvbmdlcyB0aGUgbGl2ZS1yYW5nZSBvZiBpdHMgaW5wdXRzLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhbiA4MCUgc3BlZWQtdXAgb24gaW1hZ2luZy1nYXVz
c2lhbi1ibHVyLCBhbmQgYSAxMCUgc3BlZWQtdXAgb24KKyAgICAgICAgS3Jha2VuLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuIFRoZXJlIGFyZSBw
cm9iYWJseSBzdGlsbCBzb21lIGJpZyBidWdzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQWxpYXNUcmFja2Vy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpNZXRob2RDaGVja0RhdGE6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6Ok1ldGhvZENoZWNrRGF0YTo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWaXJ0dWFsUmVn
aXN0ZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldFJlZkNvdW50KToKKyAgICAgICAg
KiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
UHJvcGFnYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OlByb3BhZ2F0b3I6OmNhbm9uaWNhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6Y29tcHV0ZVN0YXJ0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6OnN0YXJ0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnB1cmVD
U0UpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6Omdsb2JhbFZhckxvYWRFbGltaW5h
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0QnlWYWxMb2FkRWxpbWlu
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldE1ldGhvZExvYWRFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybVN1YnN0aXR1
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6c2V0UmVwbGFjZW1lbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtQmxvY2tDU0UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlByb3BhZ2F0b3I6OmxvY2FsQ1NFKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
OjphbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpERkc6OnByb3BhZ2F0
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTEtMDktMTYgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVG91Y2ggUGxhdGZvcm0uaCBpbiB0aGUg
aG9wZSB0byBmaXggU25vd0xlb3BhcmQgSW50ZWwgUmVsZWFzZSAoV2ViS2l0MiBUZXN0cykuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTUzNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMzU5LDcgKzM1OSw2IEBACiAJCTg2RUM5REQzMTMyOERGODIw
MDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1
bGF0aXZlSklULmggKi87IH07CiAJCTg2RUNBM0VBMTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDQTNF
OTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovOyB9OwogCQk4NkVDQTNGQTEzMkRGMjVB
MDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9h
cmQuaCAqLzsgfTsKLQkJODZFQ0E0RjExMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0FsaWFzVHJhY2tl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQ0E0
RjAxMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0FsaWFzVHJhY2tlci5oICovOyB9OwogCQk4NkYzODg1
OTEyMTEzMENBMDA3QTdDRTMgLyogQXRvbWljU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGMzg4NTgxMjExMzBDQTAwN0E3Q0UzIC8q
IEF0b21pY1N0cmluZ0hhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGlj
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDIx
M0UzQjEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgKi87IH07CiAJCTkw
MjEzRTNFMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDIxM0UzQzEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xMTExLDcgKzExMTAsNiBAQAogCQk4NkVDOURDMzEzMjhERjgy
MDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHU3BlY3VsYXRpdmVKSVQuaDsgcGF0aCA9IGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJB
RDcgLyogREZHTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2Rl
Lmg7IHBhdGggPSBkZmcvREZHTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTY29yZUJvYXJkLmg7IHBhdGggPSBkZmcvREZHU2NvcmVC
b2FyZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkVDQTRGMDEzMkVBQTZEMDAy
QjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0FsaWFzVHJhY2tlci5oOyBwYXRoID0gZGZnL0RGR0FsaWFzVHJhY2tlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkYzODg1ODEyMTEzMENBMDA3QTdDRTMgLyogQXRv
bWljU3RyaW5nSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBdG9taWNT
dHJpbmdIYXNoLmg7IHBhdGggPSB0ZXh0L0F0b21pY1N0cmluZ0hhc2guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTAyMTNFM0IxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRp
c3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5U3Rh
dGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkwMjEzRTNDMTIzQTQw
QzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1lbW9yeVN0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyMzUsNyArMjIzMyw2IEBACiAJCQkJMEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERG
R1Byb3BhZ2F0b3IuY3BwICovLAogCQkJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdE
cml2ZXIuaCAqLywKIAkJCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCAqLywKLQkJCQk4NkVDQTRGMDEzMkVBQTZEMDAyQjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmgg
Ki8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNw
cCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIu
aCAqLywKIAkJCQk4NkFFNkM0QjEzNkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oICovLApA
QCAtMjQ5Myw3ICsyNDkwLDYgQEAKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVi
dWdnZXJDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzVGQUYyMTJEMjZBQ0UwMDND
MDgzQiAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQzBFMTZGNUNEMDBC
MzQ0NjAgLyogRGVxdWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2RUNBNEYxMTMyRUFBNkQwMDJC
MkFENyAvKiBERkdBbGlhc1RyYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM1MTMy
OERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOURDODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tl
ci5oCShyZXZpc2lvbiA5NTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxp
YXNUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdBbGlhc1RyYWNr
ZXJfaAotI2RlZmluZSBERkdBbGlhc1RyYWNrZXJfaAotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0K
LSNpbmNsdWRlIDxkZmcvREZHR3JhcGguaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8gPT09IEFsaWFzVHJhY2tlciA9PT0K
LS8vCi0vLyBUaGlzIGNsYXNzIGlkIHVzZWQgdG8gZGV0ZWN0IGFsaWFzaW5nIHByb3BlcnR5IGFj
Y2Vzc2VzLCB3aGljaCB3ZSBtYXkKLS8vIGJlIGFibGUgdG8gc3BlY3VsYXRpdmVseSBvcHRpbWl6
ZSAoZm9yIGV4YW1wbGUgcmVtb3ZpbmcgcmVkdW5kYW50IGxvYWRzCi0vLyB3aGVyZSB3ZSBrbm93
IGEgZ2V0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCwgb3Igb3B0aW1pemluZyBwdXRzIHRvIGFycmF5
cwotLy8gd2hlcmUgd2Uga25vdyB0aGUgdmFsdWUgYmVpbmcgd3JpdHRlbiB0byBpbiB3aXRoaW4g
bGVuZ3RoIGFuZCBpcyBub3QgYQotLy8gaG9sZSB2YWx1ZSkuIEluIHRpbWUsIHRoaXMgc2hvdWxk
IGJlIG1vcmUgdGhhbiBhIDEtZGVlcCBidWZmZXIhCi1jbGFzcyBBbGlhc1RyYWNrZXIgewotcHVi
bGljOgotICAgIEFsaWFzVHJhY2tlcihHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDogbV9ncmFwaChn
cmFwaCkKLSAgICAgICAgLCBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwoTm9Ob2RlKQotICAgIHsK
LSAgICB9Ci0KLSAgICBOb2RlSW5kZXggbG9va3VwR2V0QnlWYWwoTm9kZUluZGV4IGJhc2UsIE5v
ZGVJbmRleCBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICAgIC8vIFRyeSB0byBkZXRlY3Qgc2l0dWF0
aW9ucyB3aGVyZSBhIEdldEJ5VmFsIGZvbGxvd3MgYW5vdGhlciBHZXRCeVZhbCB0byB0aGUgc2Ft
ZQotICAgICAgICAvLyBwcm9wZXJ0eTsgaW4gdGhlc2UgY2FzZXMsIHdlIG1heSBiZSBhYmxlIHRv
IG9taXQgdGhlIHN1YnNlcXVlbnQgZ2V0IG9uIHRoZQotICAgICAgICAvLyBzcGVjdWxhdGl2ZSBw
YXRoLCB3aGVyZSB3ZSBrbm93IGNvbmRpdGlvbnMgaG9sZCB0byBtYWtlIHRoaXMgc2FmZSAoZm9y
IGV4YW1wbGUsCi0gICAgICAgIC8vIG9uIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHdlIHdpbGwgbm90
IGhhdmUgYWxsb3dlZCBnZXR0ZXIgYWNjZXNzKS4KLSAgICAgICAgaWYgKG1fY2FuZGlkYXRlQWxp
YXNHZXRCeVZhbCAhPSBOb05vZGUpIHsKLSAgICAgICAgICAgIE5vZGUmIHBvc3NpYmxlQWxpYXMg
PSBtX2dyYXBoW21fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbF07Ci0gICAgICAgICAgICBBU1NFUlQo
cG9zc2libGVBbGlhcy5vcCA9PSBHZXRCeVZhbCk7Ci0gICAgICAgICAgICAvLyBUaGlzIGNoZWNr
IGVuc3VyZXMgdGhlIGFjY2Vzc2VzIGFsaWFzLCBwcm92aWRlZCB0aGF0IHRoZSBzdWJzY3JpcHQg
aXMgYW4KLSAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXggKHRoaXMgaXMgZ29vZCBlbm91Z2g7
IHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHdpbGwgb25seSBnZW5lcmF0ZQotICAgICAgICAgICAgLy8g
b3B0aW1pemVkIGFjY2Vzc2VzIHRvIGhhbmRsZSBpbnRlZ2VyIHN1YnNjcmlwdHMpLgotICAgICAg
ICAgICAgaWYgKHBvc3NpYmxlQWxpYXMuY2hpbGQxKCkgPT0gYmFzZSAmJiBlcXVhbElnbm9yaW5n
TGF0ZXJOdW1lcmljQ29udmVyc2lvbihwb3NzaWJsZUFsaWFzLmNoaWxkMigpLCBwcm9wZXJ0eSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbDsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgIH0KLQotICAgIHZvaWQgcmVjb3JkR2V0
QnlWYWwoTm9kZUluZGV4IGdldEJ5VmFsKQotICAgIHsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlh
c0dldEJ5VmFsID0gZ2V0QnlWYWw7Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRQdXRCeVZhbChO
b2RlSW5kZXggcHV0QnlWYWwpCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKHB1dEJ5VmFs
LCBtX2dyYXBoW3B1dEJ5VmFsXS5vcCA9PSBQdXRCeVZhbCB8fCBtX2dyYXBoW3B1dEJ5VmFsXS5v
cCA9PSBQdXRCeVZhbEFsaWFzKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0g
Tm9Ob2RlOwotICAgIH0KLQotICAgIHZvaWQgcmVjb3JkR2V0QnlJZChOb2RlSW5kZXggZ2V0QnlJ
ZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZ2V0QnlJZCwgbV9ncmFwaFtnZXRCeUlk
XS5vcCA9PSBHZXRCeUlkKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9O
b2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlY29yZEdldE1ldGhvZChOb2RlSW5kZXggZ2V0
TWV0aG9kKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChnZXRNZXRob2QsIG1fZ3JhcGhb
Z2V0TWV0aG9kXS5vcCA9PSBHZXRNZXRob2QgfHwgbV9ncmFwaFtnZXRNZXRob2RdLm9wID09IENo
ZWNrTWV0aG9kKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOwot
ICAgIH0KLQotICAgIHZvaWQgcmVjb3JkUHV0QnlJZChOb2RlSW5kZXggcHV0QnlJZCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocHV0QnlJZCwgbV9ncmFwaFtwdXRCeUlkXS5vcCA9PSBQ
dXRCeUlkKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOwotICAg
IH0KLQotICAgIHZvaWQgcmVjb3JkUHV0QnlJZERpcmVjdChOb2RlSW5kZXggcHV0QnlWYWwpCi0g
ICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKHB1dEJ5VmFsLCBtX2dyYXBoW3B1dEJ5VmFsXS5v
cCA9PSBQdXRCeUlkRGlyZWN0KTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0g
Tm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlY29yZENhbGwoTm9kZUluZGV4IGNhbGwp
Ci0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhbGwsIG1fZ3JhcGhbY2FsbF0ub3AgPT0g
Q2FsbCk7Ci0gICAgICAgIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbCA9IE5vTm9kZTsKLSAgICB9
Ci0KLSAgICB2b2lkIHJlY29yZENvbnN0cnVjdChOb2RlSW5kZXggY29uc3RydWN0KQotICAgIHsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChjb25zdHJ1Y3QsIG1fZ3JhcGhbY29uc3RydWN0XS5vcCA9
PSBDb25zdHJ1Y3QpOwotICAgICAgICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7
Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRSZXNvbHZlKE5vZGVJbmRleCByZXNvbHZlKQotICAg
IHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlLCBtX2dyYXBoW3Jlc29sdmVdLm9wID09
IFJlc29sdmUKLSAgICAgICAgICAgIHx8IG1fZ3JhcGhbcmVzb2x2ZV0ub3AgPT0gUmVzb2x2ZUJh
c2UKLSAgICAgICAgICAgIHx8IG1fZ3JhcGhbcmVzb2x2ZV0ub3AgPT0gUmVzb2x2ZUJhc2VTdHJp
Y3RQdXQpOwotICAgICAgICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBmb3IgYXJndW1l
bnRzOgotICAgIC8vICAgLSAoWCwgWCkKLSAgICAvLyAgIC0gKFgsIFZhbHVlVG9OdW1iZXIoWCkp
Ci0gICAgLy8gICAtIChYLCBWYWx1ZVRvSW50MzIoWCkpCi0gICAgLy8gICAtIChYLCBOdW1iZXJU
b0ludDMyKFgpKQotICAgIGJvb2wgZXF1YWxJZ25vcmluZ0xhdGVyTnVtZXJpY0NvbnZlcnNpb24o
Tm9kZUluZGV4IG9wMSwgTm9kZUluZGV4IG9wMikKLSAgICB7Ci0gICAgICAgIGlmIChvcDEgPT0g
b3AyKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIE5vZGUmIG5vZGUyID0gbV9n
cmFwaFtvcDJdOwotICAgICAgICByZXR1cm4gKG5vZGUyLm9wID09IFZhbHVlVG9OdW1iZXIgfHwg
bm9kZTIub3AgPT0gVmFsdWVUb0ludDMyKSAmJiBvcDEgPT0gbm9kZTIuY2hpbGQxKCk7Ci0gICAg
fQotCi0gICAgLy8gVGhlIGdyYXBoLCB0byBsb29rIHVwIHBvdGVudGlhbGx5IGFsaWFzaW5nIG5v
ZGVzLgotICAgIEdyYXBoJiBtX2dyYXBoOwotICAgIC8vIEN1cnJlbnRseSBhIDEtZGVlcCBidWZm
ZXIhCi0gICAgTm9kZUluZGV4IG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbDsKLX07Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAot
I2luY2x1ZGUgIkRGR0FsaWFzVHJhY2tlci5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5o
IgotI2luY2x1ZGUgIkRGR1Njb3JlQm9hcmQuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC02MzYsOCArNjM0LDYgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgbV9jb25zdGFudHNb
aV0gPSBDb25zdGFudFJlY29yZCgpOwogICAgIH0KIAotICAgIEFsaWFzVHJhY2tlciBhbGlhc2Vz
KG1fZ3JhcGgpOwotCiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9iYWxEYXRh
LT5pbnRlcnByZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBibG9ja0JlZ2lu
ID0gbV9jdXJyZW50SW5kZXg7CkBAIC05NTAsMTAgKzk0Niw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RBcnJheShi
YXNlKTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CiAKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygw
KSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSwgcHJvcGVydHksIGFsaWFzZXMubG9va3VwR2V0
QnlWYWwoYmFzZSwgcHJvcGVydHkpKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9
IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFz
ZSwgcHJvcGVydHkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIGdldEJ5VmFsKTsKICAgICAgICAgICAgIHN0cm9uZ2x5UHJlZGljdChnZXRCeVZhbCk7
Ci0gICAgICAgICAgICBhbGlhc2VzLnJlY29yZEdldEJ5VmFsKGdldEJ5VmFsKTsKIAogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CiAgICAgICAgIH0KQEAgLTk2NSw5ICs5
NjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICB3ZWFrbHlQcmVkaWN0QXJyYXkoYmFzZSk7CiAgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0
SW50MzIocHJvcGVydHkpOwogCi0gICAgICAgICAgICBOb2RlSW5kZXggYWxpYXNlZEdldCA9IGFs
aWFzZXMubG9va3VwR2V0QnlWYWwoYmFzZSwgcHJvcGVydHkpOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IHB1dEJ5VmFsID0gYWRkVG9HcmFwaChhbGlhc2VkR2V0ICE9IE5vTm9kZSA/IFB1dEJ5VmFs
QWxpYXMgOiBQdXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKLSAgICAgICAgICAgIGFs
aWFzZXMucmVjb3JkUHV0QnlWYWwocHV0QnlWYWwpOworICAgICAgICAgICAgYWRkVG9HcmFwaChQ
dXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKIAogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfcHV0X2J5X3ZhbCk7CiAgICAgICAgIH0KQEAgLTk5OCwxMyArOTkxLDEwIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBtZXRo
b2RDaGVja0RhdGEuZnVuY3Rpb24gPSBtZXRob2RDYWxsLmNhY2hlZEZ1bmN0aW9uLmdldCgpOwog
ICAgICAgICAgICAgICAgIG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUgPSBtZXRob2RDYWxsLmNh
Y2hlZFByb3RvdHlwZS5nZXQoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbWV0aG9kQ2hl
Y2tEYXRhLmFwcGVuZChtZXRob2RDaGVja0RhdGEpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGFsaWFzZXMucmVjb3JkR2V0TWV0aG9kKGNoZWNrTWV0aG9kKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdldE1ldGhvZCA9IGFkZFRv
R3JhcGgoR2V0TWV0aG9kLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhQcmVkaWN0Tm9uZSks
IGJhc2UpOwogICAgICAgICAgICAgICAgIHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IGdldE1ldGhvZCk7CiAgICAgICAgICAgICAgICAgc3Ryb25nbHlQcmVkaWN0KGdldE1ldGhvZCk7
Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRNZXRob2QoZ2V0TWV0aG9kKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggKz0g
T1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2spICsgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlf
aWQpOwpAQCAtMTAxOCw3ICsxMDA4LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdl
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSk7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlJZCk7
CiAgICAgICAgICAgICBzdHJvbmdseVByZWRpY3QoZ2V0QnlJZCk7Ci0gICAgICAgICAgICBhbGlh
c2VzLnJlY29yZEdldEJ5SWQoZ2V0QnlJZCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2dldF9ieV9pZCk7CiAgICAgICAgIH0KQEAgLTEwMjksMTMgKzEwMTgsMTAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgaWRl
bnRpZmllciA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBi
b29sIGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAg
ICAgIGlmIChkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHV0QnlJZERpcmVj
dCA9IGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNlLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRQdXRCeUlkRGlyZWN0KHB1dEJ5
SWREaXJlY3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggcHV0QnlJZCA9IGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNl
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRQdXRCeUlkKHB1dEJ5SWQp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpcmVjdCkKKyAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgYmFzZSwgdmFs
dWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJ
ZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNlLCB2YWx1ZSk7CiAKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX3B1dF9ieV9pZCk7CiAgICAgICAgIH0KQEAgLTEyNTIsMTQgKzEyMzgsMTIgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IGNh
bGwgPSBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwpOwotICAg
ICAgICAgICAgYWxpYXNlcy5yZWNvcmRDYWxsKGNhbGwpOworICAgICAgICAgICAgYWRkQ2FsbChp
bnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBDYWxsKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2NhbGwpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBv
cF9jb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25zdHJ1Y3QgPSBhZGRDYWxs
KGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbnN0cnVjdCk7Ci0gICAgICAgICAg
ICBhbGlhc2VzLnJlY29yZENvbnN0cnVjdChjb25zdHJ1Y3QpOworICAgICAgICAgICAgYWRkQ2Fs
bChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBDb25zdHJ1Y3QpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfY29uc3RydWN0KTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC0xMjcxLDcgKzEyNTUsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAKICAgICAgICAgICAgIE5vZGVJbmRleCByZXNvbHZlID0gYWRkVG9HcmFwaChSZXNvbHZl
LCBPcEluZm8oaWRlbnRpZmllcikpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIHJlc29sdmUpOwotICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRSZXNv
bHZlKHJlc29sdmUpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9yZXNvbHZlKTsKICAg
ICAgICAgfQpAQCAtMTI4MSw3ICsxMjY0LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogCiAgICAgICAgICAgICBOb2RlSW5kZXggcmVzb2x2ZSA9IGFkZFRvR3Jh
cGgoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCA/IFJlc29sdmVCYXNlU3RyaWN0UHV0
IDogUmVzb2x2ZUJhc2UsIE9wSW5mbyhpZGVudGlmaWVyKSk7CiAgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzb2x2ZSk7Ci0gICAgICAgICAgICBhbGlh
c2VzLnJlY29yZFJlc29sdmUocmVzb2x2ZSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3Jlc29sdmVfYmFzZSk7CiAgICAgICAgIH0KQEAgLTEzODUsNTEgKzEzNjcsNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpzZXR1cFByZWRlY2Vzc29ycygpCiAgICAgfQogfQogCi12b2lkIEJ5dGVD
b2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMoKQotewotICAgIFNjb3JlQm9hcmQg
c2NvcmVCb2FyZChtX2dyYXBoLCBtX3ByZXNlcnZlZFZhcnMpOwotICAgIHVuc2lnbmVkIHNpemVF
eGNsdWRpbmdQaGlOb2RlcyA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5lbmQ7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplRXhjbHVkaW5nUGhpTm9kZXM7ICsraSkgewotICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtpXTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAg
ICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVzIGluIHRoZSBncmFw
aCwgcmVmZXJlbmNpbmcKLSAgICAgICAgLy8gcmVzdWx0cyBmcm9tIHByaW9yIGJsb2Nrcy4KLSAg
ICAgICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKLSAgICAgICAgICAgIC8vIEZpcnN0LCBj
YWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCi0gICAg
ICAgICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBk
byBzbyBpbiB0aGlzCi0gICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMg
b24gaXRzIGxhc3QgdXNlLCBhbmQgYQotICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlz
IGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICBpZiAo
bm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGls
ZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAgICAgICAg
ICBzY29yZUJvYXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBub2RlLnNldFZpcnR1YWxSZWdpc3RlcihzY29y
ZUJvYXJkLmFsbG9jYXRlKCkpOwotICAgICAgICAvLyAnbXVzdEdlbmVyYXRlJyBub2RlcyBoYXZl
IHRoZWlyIHVzZUNvdW50IGFydGlmaWNpYWxseSBlbGV2YXRlZCwKLSAgICAgICAgLy8gY2FsbCB1
c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCi0gICAgICAgIGlmIChub2RlLm11c3RHZW5lcmF0
ZSgpKQotICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UoaSk7Ci0gICAgfQotCi0gICAgLy8gJ21f
bnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxvY2FscyBhbmQgdGVtcG9yYXJp
ZXMgYWxsb2NhdGVkCi0gICAgLy8gZm9yIHRoZSBmdW5jdGlvbiAoYW5kIGNoZWNrZWQgZm9yIG9u
IGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBhbmQKLSAgICAvLyBkaWZmZXJlbnQgYWxs
b2NhdGlvbiBvZiB0ZW1wb3JhcmllcywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBiZSByZXF1aXJl
ZC4KLSAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMgPSBzY29yZUJvYXJkLmFsbG9jYXRlZENv
dW50KCkgKyBtX3ByZXNlcnZlZFZhcnMgKyBtX3BhcmFtZXRlclNsb3RzOwotICAgIGlmICgodW5z
aWduZWQpbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIDwgY2FsbGVlUmVnaXN0ZXJz
KQotICAgICAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgPSBjYWxsZWVSZWdp
c3RlcnM7Ci19Ci0KIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKIHsKICAgICAvLyBTZXQg
ZHVyaW5nIGNvbnN0cnVjdGlvbi4KQEAgLTE0NjEsOCArMTM5OCw5IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlKCkKICAgICBzZXR1cFByZWRlY2Vzc29ycygpOwogICAgIHByb2Nlc3NQaGlT
dGFjazxMb2NhbFBoaVN0YWNrPigpOwogICAgIHByb2Nlc3NQaGlTdGFjazxBcmd1bWVudFBoaVN0
YWNrPigpOwotCi0gICAgYWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJzKCk7CisgICAgCisgICAgbV9n
cmFwaC5tX3ByZXNlcnZlZFZhcnMgPSBtX3ByZXNlcnZlZFZhcnM7CisgICAgbV9ncmFwaC5tX3Bh
cmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIAogI2lmIEVOQUJMRShERkdfREVCVUdf
VkVSQk9TRSkKICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk1MzUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3
LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgIC8vICAg
ICAgICAgaWQjICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGFuIGlkZW50aWZpZXIg
eyBpZiBjb2RlQmxvY2sgaXMgcGFzc2VkIHRvIGR1bXAoKSwgdGhlIHN0cmluZyByZXByZXNlbnRh
dGlvbiBpcyBkaXNwbGF5ZWQgfS4KICAgICAvLyAgICAgICAgIHZhciMgLSB0aGUgaW5kZXggb2Yg
YSB2YXIgb24gdGhlIGdsb2JhbCBvYmplY3QsIHVzZWQgYnkgR2V0R2xvYmFsVmFyL1B1dEdsb2Jh
bFZhciBvcGVyYXRpb25zLgogICAgIHByaW50ZigiJSA0ZDolczwlYyV1OiIsIChpbnQpbm9kZUlu
ZGV4LCBza2lwcGVkID8gIiAgc2tpcHBlZCAgIiA6ICIgICAgICAgICAgICIsIG11c3RHZW5lcmF0
ZSA/ICchJyA6ICcgJywgcmVmQ291bnQpOwotICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmICFz
a2lwcGVkKQorICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmICFza2lwcGVkICYmIG5vZGUuaGFz
VmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgIHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICBlbHNlCiAgICAgICAgIHByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gOTUzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDI0IEBA
IHN0cnVjdCBNZXRob2RDaGVja0RhdGEgewogICAgIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0
dXJlOwogICAgIEpTT2JqZWN0KiBmdW5jdGlvbjsKICAgICBKU09iamVjdCogcHJvdG90eXBlOwor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNZXRob2RDaGVja0RhdGEmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBvdGhlci5zdHJ1Y3R1cmUpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChwcm90b3R5cGVTdHJ1Y3R1cmUg
IT0gb3RoZXIucHJvdG90eXBlU3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoZnVuY3Rpb24gIT0gb3RoZXIuZnVuY3Rpb24pCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChwcm90b3R5cGUgIT0gb3RoZXIucHJvdG90eXBlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1ldGhvZENoZWNrRGF0YSYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQogfTsKIAog
dHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29yTGlzdDsKQEAgLTI4MSw2
ICsyOTksOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBt
X2Jsb2NrczsKICAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKICAg
ICBWZWN0b3I8TWV0aG9kQ2hlY2tEYXRhPiBtX21ldGhvZENoZWNrRGF0YTsKKyAgICB1bnNpZ25l
ZCBtX3ByZXNlcnZlZFZhcnM7CisgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKIHByaXZh
dGU6CiAgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudE5vZGUoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gOTUzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDE0ICsxMDcsMTUgQEAgcHJpdmF0ZToK
IAogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51bSAoYmVsb3cpIGFyZSBjb21wb3NlZCBv
ZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkgbm9uZSkKIC8vIGFuZCBzb21lIGFkZGl0
aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2VuZXJhdGUsIGlzIGNvbnN0YW50LCBldGMp
LgotI2RlZmluZSBOb2RlSWRNYXNrICAgICAgICAgIDB4RkZGCi0jZGVmaW5lIE5vZGVSZXN1bHRN
YXNrICAgICAweEYwMDAKLSNkZWZpbmUgTm9kZU11c3RHZW5lcmF0ZSAgMHgxMDAwMCAvLyBzZXQg
b24gbm9kZXMgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cywgYW5kIG1heSBub3QgdHJpdmlhbGx5IGJl
IHJlbW92ZWQgYnkgRENFLgotI2RlZmluZSBOb2RlSXNDb25zdGFudCAgICAweDIwMDAwCi0jZGVm
aW5lIE5vZGVJc0p1bXAgICAgICAgIDB4NDAwMDAKLSNkZWZpbmUgTm9kZUlzQnJhbmNoICAgICAg
MHg4MDAwMAotI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgIDB4MTAwMDAwCi0jZGVmaW5lIE5vZGVI
YXNWYXJBcmdzICAgMHgyMDAwMDAKKyNkZWZpbmUgTm9kZUlkTWFzayAgICAgICAgICAgMHhGRkYK
KyNkZWZpbmUgTm9kZVJlc3VsdE1hc2sgICAgICAweEYwMDAKKyNkZWZpbmUgTm9kZU11c3RHZW5l
cmF0ZSAgIDB4MTAwMDAgLy8gc2V0IG9uIG5vZGVzIHRoYXQgaGF2ZSBzaWRlIGVmZmVjdHMsIGFu
ZCBtYXkgbm90IHRyaXZpYWxseSBiZSByZW1vdmVkIGJ5IERDRS4KKyNkZWZpbmUgTm9kZUlzQ29u
c3RhbnQgICAgIDB4MjAwMDAKKyNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgIDB4NDAwMDAKKyNk
ZWZpbmUgTm9kZUlzQnJhbmNoICAgICAgIDB4ODAwMDAKKyNkZWZpbmUgTm9kZUlzVGVybWluYWwg
ICAgMHgxMDAwMDAKKyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAgMHgyMDAwMDAKKyNkZWZpbmUg
Tm9kZUNsb2JiZXJzV29ybGQgMHg0MDAwMDAKIAogLy8gVGhlc2UgdmFsdWVzIHJlY29yZCB0aGUg
cmVzdWx0IHR5cGUgb2YgdGhlIG5vZGUgKGFzIGNoZWNrZWQgYnkgTm9kZVJlc3VsdE1hc2ssIGFi
b3ZlKSwgMCBmb3Igbm8gcmVzdWx0LgogI2RlZmluZSBOb2RlUmVzdWx0SlMgICAgICAweDEwMDAK
QEAgLTEzMSw2ICsxMzIsNyBAQCBwcml2YXRlOgogICAgIC8qIE5vZGVzIGZvciBsb2NhbCB2YXJp
YWJsZSBhY2Nlc3MuICovXAogICAgIG1hY3JvKEdldExvY2FsLCBOb2RlUmVzdWx0SlMpIFwKICAg
ICBtYWNybyhTZXRMb2NhbCwgMCkgXAorICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhQaGksIDApIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGJpdHdp
c2Ugb3BlcmF0aW9ucy4gKi9cCkBAIC0xNjYsMTUgKzE2OCwxNSBAQCBwcml2YXRlOgogICAgIC8q
IFNpbmNlIGEgcHV0IHRvICdsZW5ndGgnIG1heSBpbnZhbGlkYXRlIG9wdGltaXphdGlvbnMgaGVy
ZSwgKi9cCiAgICAgLyogdGhpcyBtdXN0IGJlIHRoZSBkaXJlY3RseSBzdWJzZXF1ZW50IHByb3Bl
cnR5IHB1dC4gKi9cCiAgICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUpIFwKLSAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAg
IG1hY3JvKFB1dEJ5VmFsQWxpYXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhHZXRC
eUlkLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oUHV0QnlJ
ZCwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVD
bG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oR2V0QnlJZCwgTm9kZVJlc3VsdEpT
IHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0
QnlJZCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8o
UHV0QnlJZERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAg
ICAgbWFjcm8oR2V0TWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oQ2hlY2tNZXRob2QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUp
IFwKLSAgICBtYWNybyhQdXRHbG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhQdXRHbG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAog
ICAgIFwKICAgICAvKiBOb2RlcyBmb3IgY29tcGFyaXNvbiBvcGVyYXRpb25zLiAqL1wKICAgICBt
YWNybyhDb21wYXJlTGVzcywgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBc
CkBAIC0xODUsMTYgKzE4NywxNiBAQCBwcml2YXRlOgogICAgIG1hY3JvKENvbXBhcmVTdHJpY3RF
cSwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgLyogQ2FsbHMuICovXAotICAgIG1h
Y3JvKENhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJn
cykgXAotICAgIG1hY3JvKENvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKKyAg
ICBtYWNybyhDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
SGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgXAogICAgIC8qIFJlc29sdmUg
bm9kZXMuICovXAotICAgIG1hY3JvKFJlc29sdmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKLSAgICBtYWNybyhSZXNvbHZlQmFzZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAotICAgIG1hY3JvKFJlc29sdmVCYXNlU3RyaWN0UHV0LCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUmVzb2x2ZSwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUmVzb2x2
ZUJhc2UsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3Js
ZCkgXAorICAgIG1hY3JvKFJlc29sdmVCYXNlU3RyaWN0UHV0LCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBcCiAgICAgLyogTm9kZXMg
Zm9yIG1pc2Mgb3BlcmF0aW9ucy4gKi9cCi0gICAgbWFjcm8oQnJlYWtwb2ludCwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAorICAgIG1hY3JvKEJyZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
Q2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKENoZWNrSGFzSW5zdGFuY2UsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhJbnN0YW5jZU9mLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAg
IG1hY3JvKExvZ2ljYWxOb3QsIE5vZGVSZXN1bHRCb29sZWFuKSBcCkBAIC00ODQsNiArNDg2LDEx
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKICAgICB9CiAgICAg
CisgICAgYm9vbCBoYXNWaXJ0dWFsUmVnaXN0ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
dmlydHVhbFJlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXI7CisgICAgfQorICAgIAog
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGhhc1Jlc3VsdCgpKTsKQEAgLTUxOSw2ICs1MjYsMTEgQEAgc3RydWN0IE5vZGUgewogICAg
ICAgICByZXR1cm4gbXVzdEdlbmVyYXRlKCkgPyBtX3JlZkNvdW50IC0gMSA6IG1fcmVmQ291bnQ7
CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0UmVmQ291bnQodW5zaWduZWQgcmVmQ291bnQpCisg
ICAgeworICAgICAgICBtX3JlZkNvdW50ID0gcmVmQ291bnQ7CisgICAgfQorICAgIAogICAgIE5v
ZGVJbmRleCBjaGlsZDEoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFy
QXJncykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3Iu
Y3BwCShyZXZpc2lvbiA5NTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
cGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUo
REZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHU2NvcmVCb2Fy
ZC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTU4LDkgKzU5LDEz
IEBAIHB1YmxpYzoKICAgICAgICAgbV91c2VzLnJlc2l6ZShtX2dyYXBoLnNpemUoKSk7CiAgICAg
ICAgIG1fdmFyaWFibGVVc2VzLmluaXRpYWxpemVTaW1pbGFyVG8obV9ncmFwaC5wcmVkaWN0aW9u
cygpKTsKICAgICAgICAgCisgICAgICAgIC8vIFJlcGxhY2VtZW50cyBhcmUgdXNlZCB0byBpbXBs
ZW1lbnQgbG9jYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWluYXRpb24uCisgICAgICAgIG1f
cmVwbGFjZW1lbnRzLnJlc2l6ZShtX2dyYXBoLnNpemUoKSk7CisgICAgICAgIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgbV9wcmVkaWN0aW9uc1tpXSA9IFByZWRpY3ROb25lOwogICAgICAgICAgICAgbV91c2VzW2ld
ID0gUHJlZGljdE5vbmU7CisgICAgICAgICAgICBtX3JlcGxhY2VtZW50c1tpXSA9IE5vTm9kZTsK
ICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTg3LDYgKzkyLDI1IEBAIHB1YmxpYzoKICAgICAg
ICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKICAgICAgICAgCiAgICAgICAgIGZpeHVwKCk7CisgICAg
ICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJHcmFw
aCBhZnRlciBwcm9wYWdhdGlvbiBmaXh1cDpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAobV9j
b2RlQmxvY2spOworI2VuZGlmCisKKyAgICAgICAgbG9jYWxDU0UoKTsKKworI2lmIEVOQUJMRShE
RkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciBDU0U6XG4iKTsK
KyAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKKyNlbmRpZgorCisgICAgICAgIGFs
bG9jYXRlVmlydHVhbFJlZ2lzdGVycygpOworCisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NF
KQorICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIHZpcnR1YWwgcmVnaXN0ZXIgYWxsb2NhdGlv
bjpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOworI2VuZGlmCiAgICAg
fQogICAgIAogcHJpdmF0ZToKQEAgLTMwMSw2ICszMjUsMTAgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCisgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBh
bnl0aGluZy4KKyAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00MTAsMTEgKzQzOCwzNzggQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CiAgICAgfQog
ICAgIAorICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICB7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0dXJu
IE5vTm9kZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRleF0ub3AgPT0g
VmFsdWVUb051bWJlcikKKyAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3JhcGhbbm9kZUluZGV4
XS5jaGlsZDEoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRleF0ub3Ag
PT0gVmFsdWVUb0ludDMyKQorICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9ncmFwaFtub2RlSW5k
ZXhdLmNoaWxkMSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICB9
CisgICAgCisgICAgLy8gQ29tcHV0ZXMgd2hlcmUgdGhlIHNlYXJjaCBmb3IgYSBjYW5kaWRhdGUg
Zm9yIENTRSBzaG91bGQgc3RhcnQuIERvbid0IGNhbGwKKyAgICAvLyB0aGlzIGRpcmVjdGx5OyBj
YWxsIHN0YXJ0SW5kZXgoKSBpbnN0ZWFkIGFzIGl0IGRvZXMgbG9nZ2luZyBpbiBkZWJ1ZyBtb2Rl
LgorICAgIE5vZGVJbmRleCBjb21wdXRlU3RhcnRJbmRleCgpCisgICAgeworICAgICAgICBjb25z
dCB1bnNpZ25lZCBsaW1pdCA9IDMwMDsKKyAgICAgICAgCisgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBzdGFy
dCA9IG1fc3RhcnQ7CisgICAgICAgIGlmIChtX2NvbXBpbGVJbmRleCAtIHN0YXJ0ID4gbGltaXQp
CisgICAgICAgICAgICBzdGFydCA9IG1fY29tcGlsZUluZGV4IC0gbGltaXQ7CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQoc3RhcnQgPj0gbV9zdGFydCk7CisgICAgICAgIAorICAgICAgICBOb2Rl
SW5kZXggY2hpbGQgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGlmIChj
aGlsZCA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm4gc3RhcnQ7CisgICAgICAgIAorICAg
ICAgICBpZiAoc3RhcnQgPCBjaGlsZCkKKyAgICAgICAgICAgIHN0YXJ0ID0gY2hpbGQ7CisgICAg
ICAgIAorICAgICAgICBjaGlsZCA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKTsKKyAgICAg
ICAgaWYgKGNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybiBzdGFydDsKKyAgICAg
ICAgCisgICAgICAgIGlmIChzdGFydCA8IGNoaWxkKQorICAgICAgICAgICAgc3RhcnQgPSBjaGls
ZDsKKyAgICAgICAgCisgICAgICAgIGNoaWxkID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQzKCkp
OworICAgICAgICBpZiAoY2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXJ0
OworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXJ0IDwgY2hpbGQpCisgICAgICAgICAgICBzdGFy
dCA9IGNoaWxkOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN0YXJ0OworICAgIH0KKyAgICAK
KyAgICBOb2RlSW5kZXggc3RhcnRJbmRleCgpCisgICAgeworICAgICAgICBOb2RlSW5kZXggcmVz
dWx0ID0gY29tcHV0ZVN0YXJ0SW5kZXgoKTsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0Up
CisgICAgICAgIHByaW50ZigiICBsb29rYmFjayAldTogIiwgbV9jb21waWxlSW5kZXggLSByZXN1
bHQpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIE5v
ZGVJbmRleCBwdXJlQ1NFKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBOb2RlSW5kZXggY2hp
bGQxID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBOb2RlSW5kZXggY2hp
bGQyID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpOworICAgICAgICBOb2RlSW5kZXggY2hp
bGQzID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQzKCkpOworICAgICAgICAKKyAgICAgICAgTm9k
ZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleCgpOworICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRl
eCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAgICAgICBOb2Rl
JiBvdGhlck5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlLm9wICE9
IG90aGVyTm9kZS5vcCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgTm9kZUluZGV4IG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBj
aGlsZDEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDIpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBj
YW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgIGlmIChvdGhlckNo
aWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAg
ICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDMpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggZ2xvYmFsVmFyTG9h
ZEVsaW1pbmF0aW9uKHVuc2lnbmVkIHZhck51bWJlcikKKyAgICB7CisgICAgICAgIE5vZGVJbmRl
eCBzdGFydCA9IHN0YXJ0SW5kZXgoKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBt
X2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAg
ICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJO
dW1iZXIoKSA9PSB2YXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgor
ICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUub3AgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOwor
ICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24oTm9kZUlu
ZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNoaWxkMikKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBz
dGFydCA9IHN0YXJ0SW5kZXgoKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2Nv
bXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAg
ICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09
IGNoaWxkMSAmJiBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fub25pY2FsaXplKGNo
aWxkMikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKSA9
PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUu
Y2hpbGQzKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5v
ZGUub3AgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXgg
Z2V0TWV0aG9kTG9hZEVsaW1pbmF0aW9uKGNvbnN0IE1ldGhvZENoZWNrRGF0YSYgbWV0aG9kQ2hl
Y2tEYXRhLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlSW5kZXggY2hpbGQxKQorICAg
IHsKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleCgpOworICAgICAgICBmb3Ig
KE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7Cisg
ICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBpZiAo
bm9kZS5vcCA9PSBDaGVja01ldGhvZAorICAgICAgICAgICAgICAgICYmIG5vZGUuY2hpbGQxKCkg
PT0gY2hpbGQxCisgICAgICAgICAgICAgICAgJiYgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCkgPT0g
aWRlbnRpZmllck51bWJlcgorICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9tZXRob2RDaGVj
a0RhdGFbbm9kZS5tZXRob2RDaGVja0RhdGFJbmRleCgpXSA9PSBtZXRob2RDaGVja0RhdGEpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgaWYgKG5vZGUub3AgJiBO
b2RlQ2xvYmJlcnNXb3JsZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0
dXRpb24oTm9kZUluZGV4JiBjaGlsZCkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGlmIHRoaXMg
b3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCisgICAgICAgIGlmIChjaGlsZCA9PSBOb05vZGUp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayBpZiB0aGVy
ZSBpcyBhbnkgcmVwbGFjZW1lbnQuCisgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudCA9IG1f
cmVwbGFjZW1lbnRzW2NoaWxkXTsKKyAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IE5vTm9kZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGNoaWxkID0gcmVwbGFjZW1l
bnQ7CisgICAgICAgIAorICAgICAgICAvLyBUaGVyZSBpcyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1l
bnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBkb2VzIG5vdAorICAgICAgICAvLyBoYXZl
IGEgcmVwbGFjZW1lbnQuCisgICAgICAgIEFTU0VSVChtX3JlcGxhY2VtZW50c1tjaGlsZF0gPT0g
Tm9Ob2RlKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGhbY2hpbGRdLnJlZigpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldFJlcGxhY2VtZW50KE5vZGVJbmRleCByZXBsYWNlbWVudCkKKyAg
ICB7CisgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgICAgICAvLyBCZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVyZm9ybSBy
ZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0CisgICAgICAgIC8vIGFncmVlLgor
ICAgICAgICBpZiAobV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0gIT0gbV9wcmVkaWN0aW9u
c1tyZXBsYWNlbWVudF0pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorI2lmIEVOQUJM
RShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICBSZXBsYWNpbmcgQCV1IC0+
IEAldSIsIG1fY29tcGlsZUluZGV4LCByZXBsYWNlbWVudCk7CisjZW5kaWYKKyAgICAgICAgCisg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgbm9k
ZS5vcCA9IFBoYW50b207CisgICAgICAgIG5vZGUuc2V0UmVmQ291bnQoMSk7CisgICAgICAgIAor
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdpbGwgZWxpbWluYXRlIGFsbCByZWZlcmVuY2Vz
IHRvIHRoaXMgbm9kZS4KKyAgICAgICAgbV9yZXBsYWNlbWVudHNbbV9jb21waWxlSW5kZXhdID0g
cmVwbGFjZW1lbnQ7CisgICAgfQorICAgIAorICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9kZSYg
bm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hp
bGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgr
KykKKyAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG1fZ3JhcGgubV92YXJBcmdD
aGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMSk7CisgICAgICAgICAgICBw
ZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQyKTsKKyAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDMpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NF
KQorICAgICAgICBwcmludGYoIiAgICVzWyV1XTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW21f
Y29tcGlsZUluZGV4XS5vcCksIG1fY29tcGlsZUluZGV4KTsKKyNlbmRpZgorCisgICAgICAgIHN3
aXRjaCAobm9kZS5vcCkgeworICAgICAgICAKKyAgICAgICAgLy8gSGFuZGxlIHRoZSBwdXJlIG5v
ZGVzLiBUaGVzZSBub2RlcyBuZXZlciBoYXZlIGFueSBzaWRlLWVmZmVjdHMuCisgICAgICAgIGNh
c2UgQml0QW5kOgorICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoKKyAg
ICAgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICBj
YXNlIEJpdFVSU2hpZnQ6CisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJp
dGhTdWI6CisgICAgICAgIGNhc2UgQXJpdGhNdWw6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6Cisg
ICAgICAgIGNhc2UgQXJpdGhEaXY6CisgICAgICAgIGNhc2UgQXJpdGhBYnM6CisgICAgICAgICAg
ICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgICAgIC8vIEhhbmRsZSBub2RlcyB0aGF0IGFyZSBjb25kaXRpb25hbGx5
IHB1cmU6IHRoZXNlIGFyZSBwdXJlLCBhbmQgY2FuCisgICAgICAgIC8vIGJlIENTRSdkLCBzbyBs
b25nIGFzIHRoZSBwcmVkaWN0aW9uIGlzIHRoZSBvbmUgd2Ugd2FudC4KKyAgICAgICAgY2FzZSBW
YWx1ZUFkZDoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAgICAgY2FzZSBDb21wYXJl
TGVzc0VxOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgICAgICBjYXNlIENvbXBh
cmVHcmVhdGVyRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUVxOiB7CisgICAgICAgICAgICBQcmVk
aWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICAg
ICAgUHJlZGljdGVkVHlwZSByaWdodCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDIoKV07Cisg
ICAgICAgICAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpICYmIGlzU3Ryb25nUHJlZGlj
dGlvbihyaWdodCkKKyAgICAgICAgICAgICAgICAmJiBpc051bWJlclByZWRpY3Rpb24obGVmdCkg
JiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNTRShub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAo
cmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYg
cmVwbGFjZW1lbnQgPSBtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdOworICAgICAgICAgICAgICAg
ICAgICBQcmVkaWN0ZWRUeXBlIHJlcGxhY2VtZW50TGVmdCA9IG1fcHJlZGljdGlvbnNbcmVwbGFj
ZW1lbnQuY2hpbGQxKCldOworICAgICAgICAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHJlcGxh
Y2VtZW50UmlnaHQgPSBtX3ByZWRpY3Rpb25zW3JlcGxhY2VtZW50LmNoaWxkMigpXTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihyZXBsYWNlbWVudExlZnQpICYm
IGlzU3Ryb25nUHJlZGljdGlvbihyZXBsYWNlbWVudFJpZ2h0KQorICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJlcGxhY2VtZW50TGVmdCkgJiYgaXNOdW1iZXJQ
cmVkaWN0aW9uKHJlcGxhY2VtZW50UmlnaHQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBCb3RoIGFyZSBvcGVyYXRpbmcgb3ZlciBudW1iZXJzLCBzbyB0aGV5J3JlIGJvdGggcHVyZSwg
YW5kCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmUgY2FuIGJlIHJlcGxhY2VkIHdpdGgg
dGhlIG90aGVyLgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFj
ZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgTG9naWNhbE5vdDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBw
cmVkaWN0aW9uID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgIGlm
IChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pIHx8ICFpc1N0cm9uZ1ByZWRpY3Rpb24o
cHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnRJbmRl
eCA9IHB1cmVDU0Uobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50SW5kZXgg
IT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUmIHJlcGxhY2VtZW50ID0gbV9n
cmFwaFtyZXBsYWNlbWVudEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgUHJlZGljdGVkVHlw
ZSByZXBsYWNlbWVudFByZWRpY3Rpb24gPSBtX3ByZWRpY3Rpb25zW3JlcGxhY2VtZW50LmNoaWxk
MSgpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocmVwbGFj
ZW1lbnRQcmVkaWN0aW9uKSB8fCAhaXNTdHJvbmdQcmVkaWN0aW9uKHJlcGxhY2VtZW50UHJlZGlj
dGlvbikpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChyZXBsYWNlbWVu
dEluZGV4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgorICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKG5v
ZGUudmFyTnVtYmVyKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeVZhbExv
YWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICAg
ICAgaWYgKGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQy
KCkpICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBub2RlLm9wID0gUHV0QnlWYWxBbGlhczsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ2hlY2tNZXRo
b2Q6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRNZXRob2RMb2FkRWxpbWluYXRpb24o
bV9ncmFwaC5tX21ldGhvZENoZWNrRGF0YVtub2RlLm1ldGhvZENoZWNrRGF0YUluZGV4KCldLCBu
b2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgbm9kZS5jaGlsZDEoKSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIGRvIG5v
dGhpbmcuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2lmIEVOQUJMRShERkdfREVC
VUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgfQorICAgIAor
ICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2smIGJsb2NrKQorICAgIHsKKyAgICAg
ICAgbV9zdGFydCA9IGJsb2NrLmJlZ2luOworICAgICAgICBOb2RlSW5kZXggZW5kID0gYmxvY2su
ZW5kOworICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gbV9zdGFydDsgbV9jb21waWxlSW5k
ZXggPCBlbmQ7ICsrbV9jb21waWxlSW5kZXgpCisgICAgICAgICAgICBwZXJmb3JtTm9kZUNTRSht
X2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jYWxDU0Uo
KQorICAgIHsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50Zigi
UGVyZm9ybWluZyBsb2NhbCBDU0U6Iik7CisjZW5kaWYKKyAgICAgICAgZm9yICh1bnNpZ25lZCBi
bG9jayA9IDA7IGJsb2NrIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2spCisgICAg
ICAgICAgICBwZXJmb3JtQmxvY2tDU0UoKm1fZ3JhcGgubV9ibG9ja3NbYmxvY2tdKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMoKQorICAgIHsKKyAgICAg
ICAgU2NvcmVCb2FyZCBzY29yZUJvYXJkKG1fZ3JhcGgsIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJz
KTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVzID0gbV9ncmFwaC5tX2Js
b2Nrcy5sYXN0KCktPmVuZDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplRXhj
bHVkaW5nUGhpTm9kZXM7ICsraSkgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
aV07CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAgLy8gR2V0TG9j
YWwgbm9kZXMgYXJlIGVmZmVjdGl2ZWx5IHBoaSBub2RlcyBpbiB0aGUgZ3JhcGgsIHJlZmVyZW5j
aW5nCisgICAgICAgICAgICAvLyByZXN1bHRzIGZyb20gcHJpb3IgYmxvY2tzLgorICAgICAgICAg
ICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCwg
Y2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhlbgorICAg
ICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUu
IFdlIGRvIHNvIGluIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEg
Y2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQorICAgICAgICAgICAgICAgIC8vIFZpcnR1
YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2VkIGZvciBub2RlLgorICAg
ICAgICAgICAgICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGls
ZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsr
KQorICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UobV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuW2NoaWxkSWR4XSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAg
ICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbm9kZS5oYXNSZXN1bHQoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbm9kZS5zZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NvcmVCb2FyZC5hbGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIC8vICdtdXN0R2VuZXJhdGUnIG5v
ZGVzIGhhdmUgdGhlaXIgdXNlQ291bnQgYXJ0aWZpY2lhbGx5IGVsZXZhdGVkLAorICAgICAgICAg
ICAgLy8gY2FsbCB1c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCisgICAgICAgICAgICBpZiAo
bm9kZS5tdXN0R2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShpKTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vICdtX251bUNhbGxlZVJlZ2lzdGVycycgaXMgdGhlIG51
bWJlciBvZiBsb2NhbHMgYW5kIHRlbXBvcmFyaWVzIGFsbG9jYXRlZAorICAgICAgICAvLyBmb3Ig
dGhlIGZ1bmN0aW9uIChhbmQgY2hlY2tlZCBmb3Igb24gZW50cnkpLiBTaW5jZSB3ZSBwZXJmb3Jt
IGEgbmV3IGFuZAorICAgICAgICAvLyBkaWZmZXJlbnQgYWxsb2NhdGlvbiBvZiB0ZW1wb3Jhcmll
cywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBiZSByZXF1aXJlZC4KKyAgICAgICAgdW5zaWduZWQg
Y2FsbGVlUmVnaXN0ZXJzID0gc2NvcmVCb2FyZC5hbGxvY2F0ZWRDb3VudCgpICsgbV9ncmFwaC5t
X3ByZXNlcnZlZFZhcnMgKyBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHM7CisgICAgICAgIGlmICgo
dW5zaWduZWQpbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIDwgY2FsbGVlUmVnaXN0
ZXJzKQorICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2Fs
bGVlUmVnaXN0ZXJzOworICAgIH0KKyAgICAKICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICBKU0ds
b2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAg
IENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwogICAgIAorICAgIE5vZGVJbmRleCBtX3N0YXJ0
OwogICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKICAgICAKICAgICBWZWN0b3I8UHJlZGlj
dGVkVHlwZSwgMTY+IG1fcHJlZGljdGlvbnM7CkBAIC00MjcsNiArODIyLDggQEAgcHJpdmF0ZToK
ICNlbmRpZgogICAgIAogICAgIGJvb2wgbV9jaGFuZ2VkOworCisgICAgVmVjdG9yPE5vZGVJbmRl
eCwgMTY+IG1fcmVwbGFjZW1lbnRzOwogfTsKIAogdm9pZCBwcm9wYWdhdGUoR3JhcGgmIGdyYXBo
LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQpAQCAtNDM4
LDkgKzgzNSw2IEBAIHZvaWQgcHJvcGFnYXRlKEdyYXBoJiBncmFwaCwgSlNHbG9iYWxEYXQKICAg
ICBQcm9wYWdhdG9yIHByb3BhZ2F0b3IoZ3JhcGgsICpnbG9iYWxEYXRhLCBjb2RlQmxvY2ssIHBy
b2ZpbGVkQmxvY2spOwogICAgIHByb3BhZ2F0b3IuZml4cG9pbnQoKTsKICAgICAKLSNpZiBFTkFC
TEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgZ3JhcGguZHVtcChjb2RlQmxvY2spOwotI2VuZGlm
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NTM1MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTU3LDE2ICsxMTU3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAg
ICAgICAgTm9kZUluZGV4IGFsaWFzID0gbm9kZS5jaGlsZDMoKTsKLSAgICAgICAgaWYgKGFsaWFz
ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgLy8gRklYTUU6IHJlc3VsdCBzaG91bGQgYmUgYWJs
ZSB0byByZXVzZSBjaGlsZDEsIGNoaWxkMi4gU2hvdWxkIGhhdmUgYW4gJ1VudXNlZE9wZXJhbmQn
IHR5cGUuCi0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhbGlhc2VkVmFsdWUodGhpcywgbm9k
ZS5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGFsaWFz
ZWRWYWx1ZSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKGFsaWFzZWRWYWx1ZS5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCisgICAgICAgIEFT
U0VSVChub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHN0b3JhZ2UodGhpcyk7CkBAIC0xNTk2LDYgKzE1ODcsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAg
IAorICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wLgorICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAK
ICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107774</attachid>
            <date>2011-09-17 14:25:29 -0700</date>
            <delta_ts>2011-09-17 14:30:30 -0700</delta_ts>
            <desc>work in progress - fixed clobber detection</desc>
            <filename>cse_patch_2.diff</filename>
            <type>text/plain</type>
            <size>45085</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUzODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAK
KzIwMTEtMDktMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGhhdmUgZnVsbCBibG9jay1sb2NhbCBDU0UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzE2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgYmxvY2st
bG9jYWwgQ1NFIHRvIHRoZSBERkcuIENTRSBydW5zIGluIHRoZSBwcm9wYWdhdG9yIGp1c3QgYWZ0
ZXIKKyAgICAgICAgdHlwZSBwcm9wYWdhdGlvbi4gSXQgaXMgcGFydCBvZiB0aGUgcHJvcGFnYXRv
ciBpdHNlbGYgYmVjYXVzZSBpdCBuZWVkcyB0bworICAgICAgICB1c2UgdGhlIHByb3BhZ2F0b3In
cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG9wZXJhdGlvbnMK
KyAgICAgICAgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLiBCZWNhdXNlIGl0IGNoYW5nZXMgdGhlIGxp
dmUtcmFuZ2VzIG9mIG5vZGVzLCB0aGUKKyAgICAgICAgdmlydHVhbCByZWdpc3RlciBhbGxvY2F0
b3IgaGFkIHRvIGJlIG1vdmVkIGludG8gdGhlIHByb3BhZ2F0b3Igc28gdGhhdCBpdAorICAgICAg
ICBydW5zIGFmdGVyIENTRS4gVG8gZW5zdXJlIHRoYXQgdGhlIGJhY2stZW5kIGtub3dzIHRvIGtl
ZXAgdGhlIGlucHV0cyB0bworICAgICAgICBhbnkgZWxpbWluYXRlZCBub2RlIGFsaXZlIGZvciBP
U1IsIGEgbmV3IG5vZGUgdHlwZSwgUGhhbnRvbSwgd2FzIGludHJvZHVjZWQuCisgICAgICAgIEl0
IGlzIGEgbm8tb3AgYnV0IHByb2xvbmdlcyB0aGUgbGl2ZS1yYW5nZSBvZiBpdHMgaW5wdXRzLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhbiA4MCUgc3BlZWQtdXAgb24gaW1hZ2luZy1nYXVz
c2lhbi1ibHVyLCBhbmQgYSAxMCUgc3BlZWQtdXAgb24KKyAgICAgICAgS3Jha2VuLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuIFRoZXJlIGFyZSBw
cm9iYWJseSBzdGlsbCBzb21lIGJpZyBidWdzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQWxpYXNUcmFja2Vy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpNZXRob2RDaGVja0RhdGE6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6Ok1ldGhvZENoZWNrRGF0YTo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWaXJ0dWFsUmVn
aXN0ZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldFJlZkNvdW50KToKKyAgICAgICAg
KiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
UHJvcGFnYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OlByb3BhZ2F0b3I6OmNhbm9uaWNhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6Y29tcHV0ZVN0YXJ0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6OnN0YXJ0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnB1cmVD
U0UpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6Omdsb2JhbFZhckxvYWRFbGltaW5h
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0QnlWYWxMb2FkRWxpbWlu
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldE1ldGhvZExvYWRFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybVN1YnN0aXR1
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6c2V0UmVwbGFjZW1lbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtQmxvY2tDU0UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlByb3BhZ2F0b3I6OmxvY2FsQ1NFKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
OjphbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpERkc6OnByb3BhZ2F0
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTEtMDktMTYgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVG91Y2ggUGxhdGZvcm0uaCBpbiB0aGUg
aG9wZSB0byBmaXggU25vd0xlb3BhcmQgSW50ZWwgUmVsZWFzZSAoV2ViS2l0MiBUZXN0cykuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTUzNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMzU5LDcgKzM1OSw2IEBACiAJCTg2RUM5REQzMTMyOERGODIw
MDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1
bGF0aXZlSklULmggKi87IH07CiAJCTg2RUNBM0VBMTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDQTNF
OTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovOyB9OwogCQk4NkVDQTNGQTEzMkRGMjVB
MDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9h
cmQuaCAqLzsgfTsKLQkJODZFQ0E0RjExMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0FsaWFzVHJhY2tl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQ0E0
RjAxMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0FsaWFzVHJhY2tlci5oICovOyB9OwogCQk4NkYzODg1
OTEyMTEzMENBMDA3QTdDRTMgLyogQXRvbWljU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGMzg4NTgxMjExMzBDQTAwN0E3Q0UzIC8q
IEF0b21pY1N0cmluZ0hhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGlj
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDIx
M0UzQjEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgKi87IH07CiAJCTkw
MjEzRTNFMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDIxM0UzQzEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xMTExLDcgKzExMTAsNiBAQAogCQk4NkVDOURDMzEzMjhERjgy
MDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHU3BlY3VsYXRpdmVKSVQuaDsgcGF0aCA9IGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJB
RDcgLyogREZHTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2Rl
Lmg7IHBhdGggPSBkZmcvREZHTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTY29yZUJvYXJkLmg7IHBhdGggPSBkZmcvREZHU2NvcmVC
b2FyZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkVDQTRGMDEzMkVBQTZEMDAy
QjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0FsaWFzVHJhY2tlci5oOyBwYXRoID0gZGZnL0RGR0FsaWFzVHJhY2tlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkYzODg1ODEyMTEzMENBMDA3QTdDRTMgLyogQXRv
bWljU3RyaW5nSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBdG9taWNT
dHJpbmdIYXNoLmg7IHBhdGggPSB0ZXh0L0F0b21pY1N0cmluZ0hhc2guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTAyMTNFM0IxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRp
c3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5U3Rh
dGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkwMjEzRTNDMTIzQTQw
QzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1lbW9yeVN0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyMzUsNyArMjIzMyw2IEBACiAJCQkJMEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERG
R1Byb3BhZ2F0b3IuY3BwICovLAogCQkJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdE
cml2ZXIuaCAqLywKIAkJCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCAqLywKLQkJCQk4NkVDQTRGMDEzMkVBQTZEMDAyQjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmgg
Ki8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNw
cCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIu
aCAqLywKIAkJCQk4NkFFNkM0QjEzNkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oICovLApA
QCAtMjQ5Myw3ICsyNDkwLDYgQEAKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVi
dWdnZXJDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzVGQUYyMTJEMjZBQ0UwMDND
MDgzQiAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQzBFMTZGNUNEMDBC
MzQ0NjAgLyogRGVxdWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2RUNBNEYxMTMyRUFBNkQwMDJC
MkFENyAvKiBERkdBbGlhc1RyYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM1MTMy
OERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOURDODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tl
ci5oCShyZXZpc2lvbiA5NTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxp
YXNUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdBbGlhc1RyYWNr
ZXJfaAotI2RlZmluZSBERkdBbGlhc1RyYWNrZXJfaAotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0K
LSNpbmNsdWRlIDxkZmcvREZHR3JhcGguaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8gPT09IEFsaWFzVHJhY2tlciA9PT0K
LS8vCi0vLyBUaGlzIGNsYXNzIGlkIHVzZWQgdG8gZGV0ZWN0IGFsaWFzaW5nIHByb3BlcnR5IGFj
Y2Vzc2VzLCB3aGljaCB3ZSBtYXkKLS8vIGJlIGFibGUgdG8gc3BlY3VsYXRpdmVseSBvcHRpbWl6
ZSAoZm9yIGV4YW1wbGUgcmVtb3ZpbmcgcmVkdW5kYW50IGxvYWRzCi0vLyB3aGVyZSB3ZSBrbm93
IGEgZ2V0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCwgb3Igb3B0aW1pemluZyBwdXRzIHRvIGFycmF5
cwotLy8gd2hlcmUgd2Uga25vdyB0aGUgdmFsdWUgYmVpbmcgd3JpdHRlbiB0byBpbiB3aXRoaW4g
bGVuZ3RoIGFuZCBpcyBub3QgYQotLy8gaG9sZSB2YWx1ZSkuIEluIHRpbWUsIHRoaXMgc2hvdWxk
IGJlIG1vcmUgdGhhbiBhIDEtZGVlcCBidWZmZXIhCi1jbGFzcyBBbGlhc1RyYWNrZXIgewotcHVi
bGljOgotICAgIEFsaWFzVHJhY2tlcihHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDogbV9ncmFwaChn
cmFwaCkKLSAgICAgICAgLCBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwoTm9Ob2RlKQotICAgIHsK
LSAgICB9Ci0KLSAgICBOb2RlSW5kZXggbG9va3VwR2V0QnlWYWwoTm9kZUluZGV4IGJhc2UsIE5v
ZGVJbmRleCBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICAgIC8vIFRyeSB0byBkZXRlY3Qgc2l0dWF0
aW9ucyB3aGVyZSBhIEdldEJ5VmFsIGZvbGxvd3MgYW5vdGhlciBHZXRCeVZhbCB0byB0aGUgc2Ft
ZQotICAgICAgICAvLyBwcm9wZXJ0eTsgaW4gdGhlc2UgY2FzZXMsIHdlIG1heSBiZSBhYmxlIHRv
IG9taXQgdGhlIHN1YnNlcXVlbnQgZ2V0IG9uIHRoZQotICAgICAgICAvLyBzcGVjdWxhdGl2ZSBw
YXRoLCB3aGVyZSB3ZSBrbm93IGNvbmRpdGlvbnMgaG9sZCB0byBtYWtlIHRoaXMgc2FmZSAoZm9y
IGV4YW1wbGUsCi0gICAgICAgIC8vIG9uIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHdlIHdpbGwgbm90
IGhhdmUgYWxsb3dlZCBnZXR0ZXIgYWNjZXNzKS4KLSAgICAgICAgaWYgKG1fY2FuZGlkYXRlQWxp
YXNHZXRCeVZhbCAhPSBOb05vZGUpIHsKLSAgICAgICAgICAgIE5vZGUmIHBvc3NpYmxlQWxpYXMg
PSBtX2dyYXBoW21fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbF07Ci0gICAgICAgICAgICBBU1NFUlQo
cG9zc2libGVBbGlhcy5vcCA9PSBHZXRCeVZhbCk7Ci0gICAgICAgICAgICAvLyBUaGlzIGNoZWNr
IGVuc3VyZXMgdGhlIGFjY2Vzc2VzIGFsaWFzLCBwcm92aWRlZCB0aGF0IHRoZSBzdWJzY3JpcHQg
aXMgYW4KLSAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXggKHRoaXMgaXMgZ29vZCBlbm91Z2g7
IHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHdpbGwgb25seSBnZW5lcmF0ZQotICAgICAgICAgICAgLy8g
b3B0aW1pemVkIGFjY2Vzc2VzIHRvIGhhbmRsZSBpbnRlZ2VyIHN1YnNjcmlwdHMpLgotICAgICAg
ICAgICAgaWYgKHBvc3NpYmxlQWxpYXMuY2hpbGQxKCkgPT0gYmFzZSAmJiBlcXVhbElnbm9yaW5n
TGF0ZXJOdW1lcmljQ29udmVyc2lvbihwb3NzaWJsZUFsaWFzLmNoaWxkMigpLCBwcm9wZXJ0eSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbDsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgIH0KLQotICAgIHZvaWQgcmVjb3JkR2V0
QnlWYWwoTm9kZUluZGV4IGdldEJ5VmFsKQotICAgIHsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlh
c0dldEJ5VmFsID0gZ2V0QnlWYWw7Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRQdXRCeVZhbChO
b2RlSW5kZXggcHV0QnlWYWwpCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKHB1dEJ5VmFs
LCBtX2dyYXBoW3B1dEJ5VmFsXS5vcCA9PSBQdXRCeVZhbCB8fCBtX2dyYXBoW3B1dEJ5VmFsXS5v
cCA9PSBQdXRCeVZhbEFsaWFzKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0g
Tm9Ob2RlOwotICAgIH0KLQotICAgIHZvaWQgcmVjb3JkR2V0QnlJZChOb2RlSW5kZXggZ2V0QnlJ
ZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZ2V0QnlJZCwgbV9ncmFwaFtnZXRCeUlk
XS5vcCA9PSBHZXRCeUlkKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9O
b2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlY29yZEdldE1ldGhvZChOb2RlSW5kZXggZ2V0
TWV0aG9kKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChnZXRNZXRob2QsIG1fZ3JhcGhb
Z2V0TWV0aG9kXS5vcCA9PSBHZXRNZXRob2QgfHwgbV9ncmFwaFtnZXRNZXRob2RdLm9wID09IENo
ZWNrTWV0aG9kKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOwot
ICAgIH0KLQotICAgIHZvaWQgcmVjb3JkUHV0QnlJZChOb2RlSW5kZXggcHV0QnlJZCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocHV0QnlJZCwgbV9ncmFwaFtwdXRCeUlkXS5vcCA9PSBQ
dXRCeUlkKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOwotICAg
IH0KLQotICAgIHZvaWQgcmVjb3JkUHV0QnlJZERpcmVjdChOb2RlSW5kZXggcHV0QnlWYWwpCi0g
ICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKHB1dEJ5VmFsLCBtX2dyYXBoW3B1dEJ5VmFsXS5v
cCA9PSBQdXRCeUlkRGlyZWN0KTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0g
Tm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlY29yZENhbGwoTm9kZUluZGV4IGNhbGwp
Ci0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhbGwsIG1fZ3JhcGhbY2FsbF0ub3AgPT0g
Q2FsbCk7Ci0gICAgICAgIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbCA9IE5vTm9kZTsKLSAgICB9
Ci0KLSAgICB2b2lkIHJlY29yZENvbnN0cnVjdChOb2RlSW5kZXggY29uc3RydWN0KQotICAgIHsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChjb25zdHJ1Y3QsIG1fZ3JhcGhbY29uc3RydWN0XS5vcCA9
PSBDb25zdHJ1Y3QpOwotICAgICAgICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7
Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRSZXNvbHZlKE5vZGVJbmRleCByZXNvbHZlKQotICAg
IHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlLCBtX2dyYXBoW3Jlc29sdmVdLm9wID09
IFJlc29sdmUKLSAgICAgICAgICAgIHx8IG1fZ3JhcGhbcmVzb2x2ZV0ub3AgPT0gUmVzb2x2ZUJh
c2UKLSAgICAgICAgICAgIHx8IG1fZ3JhcGhbcmVzb2x2ZV0ub3AgPT0gUmVzb2x2ZUJhc2VTdHJp
Y3RQdXQpOwotICAgICAgICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBmb3IgYXJndW1l
bnRzOgotICAgIC8vICAgLSAoWCwgWCkKLSAgICAvLyAgIC0gKFgsIFZhbHVlVG9OdW1iZXIoWCkp
Ci0gICAgLy8gICAtIChYLCBWYWx1ZVRvSW50MzIoWCkpCi0gICAgLy8gICAtIChYLCBOdW1iZXJU
b0ludDMyKFgpKQotICAgIGJvb2wgZXF1YWxJZ25vcmluZ0xhdGVyTnVtZXJpY0NvbnZlcnNpb24o
Tm9kZUluZGV4IG9wMSwgTm9kZUluZGV4IG9wMikKLSAgICB7Ci0gICAgICAgIGlmIChvcDEgPT0g
b3AyKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIE5vZGUmIG5vZGUyID0gbV9n
cmFwaFtvcDJdOwotICAgICAgICByZXR1cm4gKG5vZGUyLm9wID09IFZhbHVlVG9OdW1iZXIgfHwg
bm9kZTIub3AgPT0gVmFsdWVUb0ludDMyKSAmJiBvcDEgPT0gbm9kZTIuY2hpbGQxKCk7Ci0gICAg
fQotCi0gICAgLy8gVGhlIGdyYXBoLCB0byBsb29rIHVwIHBvdGVudGlhbGx5IGFsaWFzaW5nIG5v
ZGVzLgotICAgIEdyYXBoJiBtX2dyYXBoOwotICAgIC8vIEN1cnJlbnRseSBhIDEtZGVlcCBidWZm
ZXIhCi0gICAgTm9kZUluZGV4IG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbDsKLX07Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAot
I2luY2x1ZGUgIkRGR0FsaWFzVHJhY2tlci5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5o
IgotI2luY2x1ZGUgIkRGR1Njb3JlQm9hcmQuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC02MzYsOCArNjM0LDYgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgbV9jb25zdGFudHNb
aV0gPSBDb25zdGFudFJlY29yZCgpOwogICAgIH0KIAotICAgIEFsaWFzVHJhY2tlciBhbGlhc2Vz
KG1fZ3JhcGgpOwotCiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9iYWxEYXRh
LT5pbnRlcnByZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBibG9ja0JlZ2lu
ID0gbV9jdXJyZW50SW5kZXg7CkBAIC05NTAsMTAgKzk0Niw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RBcnJheShi
YXNlKTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CiAKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygw
KSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSwgcHJvcGVydHksIGFsaWFzZXMubG9va3VwR2V0
QnlWYWwoYmFzZSwgcHJvcGVydHkpKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9
IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFz
ZSwgcHJvcGVydHkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIGdldEJ5VmFsKTsKICAgICAgICAgICAgIHN0cm9uZ2x5UHJlZGljdChnZXRCeVZhbCk7
Ci0gICAgICAgICAgICBhbGlhc2VzLnJlY29yZEdldEJ5VmFsKGdldEJ5VmFsKTsKIAogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CiAgICAgICAgIH0KQEAgLTk2NSw5ICs5
NjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICB3ZWFrbHlQcmVkaWN0QXJyYXkoYmFzZSk7CiAgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0
SW50MzIocHJvcGVydHkpOwogCi0gICAgICAgICAgICBOb2RlSW5kZXggYWxpYXNlZEdldCA9IGFs
aWFzZXMubG9va3VwR2V0QnlWYWwoYmFzZSwgcHJvcGVydHkpOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IHB1dEJ5VmFsID0gYWRkVG9HcmFwaChhbGlhc2VkR2V0ICE9IE5vTm9kZSA/IFB1dEJ5VmFs
QWxpYXMgOiBQdXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKLSAgICAgICAgICAgIGFs
aWFzZXMucmVjb3JkUHV0QnlWYWwocHV0QnlWYWwpOworICAgICAgICAgICAgYWRkVG9HcmFwaChQ
dXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKIAogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfcHV0X2J5X3ZhbCk7CiAgICAgICAgIH0KQEAgLTk5OCwxMyArOTkxLDEwIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBtZXRo
b2RDaGVja0RhdGEuZnVuY3Rpb24gPSBtZXRob2RDYWxsLmNhY2hlZEZ1bmN0aW9uLmdldCgpOwog
ICAgICAgICAgICAgICAgIG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUgPSBtZXRob2RDYWxsLmNh
Y2hlZFByb3RvdHlwZS5nZXQoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbWV0aG9kQ2hl
Y2tEYXRhLmFwcGVuZChtZXRob2RDaGVja0RhdGEpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGFsaWFzZXMucmVjb3JkR2V0TWV0aG9kKGNoZWNrTWV0aG9kKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdldE1ldGhvZCA9IGFkZFRv
R3JhcGgoR2V0TWV0aG9kLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhQcmVkaWN0Tm9uZSks
IGJhc2UpOwogICAgICAgICAgICAgICAgIHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IGdldE1ldGhvZCk7CiAgICAgICAgICAgICAgICAgc3Ryb25nbHlQcmVkaWN0KGdldE1ldGhvZCk7
Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRNZXRob2QoZ2V0TWV0aG9kKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggKz0g
T1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2spICsgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlf
aWQpOwpAQCAtMTAxOCw3ICsxMDA4LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdl
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSk7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlJZCk7
CiAgICAgICAgICAgICBzdHJvbmdseVByZWRpY3QoZ2V0QnlJZCk7Ci0gICAgICAgICAgICBhbGlh
c2VzLnJlY29yZEdldEJ5SWQoZ2V0QnlJZCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2dldF9ieV9pZCk7CiAgICAgICAgIH0KQEAgLTEwMjksMTMgKzEwMTgsMTAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgaWRl
bnRpZmllciA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBi
b29sIGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAg
ICAgIGlmIChkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHV0QnlJZERpcmVj
dCA9IGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNlLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRQdXRCeUlkRGlyZWN0KHB1dEJ5
SWREaXJlY3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggcHV0QnlJZCA9IGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNl
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRQdXRCeUlkKHB1dEJ5SWQp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpcmVjdCkKKyAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgYmFzZSwgdmFs
dWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJ
ZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNlLCB2YWx1ZSk7CiAKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX3B1dF9ieV9pZCk7CiAgICAgICAgIH0KQEAgLTEyNTIsMTQgKzEyMzgsMTIgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IGNh
bGwgPSBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwpOwotICAg
ICAgICAgICAgYWxpYXNlcy5yZWNvcmRDYWxsKGNhbGwpOworICAgICAgICAgICAgYWRkQ2FsbChp
bnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBDYWxsKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2NhbGwpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBv
cF9jb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25zdHJ1Y3QgPSBhZGRDYWxs
KGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbnN0cnVjdCk7Ci0gICAgICAgICAg
ICBhbGlhc2VzLnJlY29yZENvbnN0cnVjdChjb25zdHJ1Y3QpOworICAgICAgICAgICAgYWRkQ2Fs
bChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBDb25zdHJ1Y3QpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfY29uc3RydWN0KTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC0xMjcxLDcgKzEyNTUsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAKICAgICAgICAgICAgIE5vZGVJbmRleCByZXNvbHZlID0gYWRkVG9HcmFwaChSZXNvbHZl
LCBPcEluZm8oaWRlbnRpZmllcikpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIHJlc29sdmUpOwotICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRSZXNv
bHZlKHJlc29sdmUpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9yZXNvbHZlKTsKICAg
ICAgICAgfQpAQCAtMTI4MSw3ICsxMjY0LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogCiAgICAgICAgICAgICBOb2RlSW5kZXggcmVzb2x2ZSA9IGFkZFRvR3Jh
cGgoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCA/IFJlc29sdmVCYXNlU3RyaWN0UHV0
IDogUmVzb2x2ZUJhc2UsIE9wSW5mbyhpZGVudGlmaWVyKSk7CiAgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzb2x2ZSk7Ci0gICAgICAgICAgICBhbGlh
c2VzLnJlY29yZFJlc29sdmUocmVzb2x2ZSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3Jlc29sdmVfYmFzZSk7CiAgICAgICAgIH0KQEAgLTEzODUsNTEgKzEzNjcsNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpzZXR1cFByZWRlY2Vzc29ycygpCiAgICAgfQogfQogCi12b2lkIEJ5dGVD
b2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMoKQotewotICAgIFNjb3JlQm9hcmQg
c2NvcmVCb2FyZChtX2dyYXBoLCBtX3ByZXNlcnZlZFZhcnMpOwotICAgIHVuc2lnbmVkIHNpemVF
eGNsdWRpbmdQaGlOb2RlcyA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5lbmQ7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplRXhjbHVkaW5nUGhpTm9kZXM7ICsraSkgewotICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtpXTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAg
ICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVzIGluIHRoZSBncmFw
aCwgcmVmZXJlbmNpbmcKLSAgICAgICAgLy8gcmVzdWx0cyBmcm9tIHByaW9yIGJsb2Nrcy4KLSAg
ICAgICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKLSAgICAgICAgICAgIC8vIEZpcnN0LCBj
YWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCi0gICAg
ICAgICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBk
byBzbyBpbiB0aGlzCi0gICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMg
b24gaXRzIGxhc3QgdXNlLCBhbmQgYQotICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlz
IGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICBpZiAo
bm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGls
ZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAgICAgICAg
ICBzY29yZUJvYXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBub2RlLnNldFZpcnR1YWxSZWdpc3RlcihzY29y
ZUJvYXJkLmFsbG9jYXRlKCkpOwotICAgICAgICAvLyAnbXVzdEdlbmVyYXRlJyBub2RlcyBoYXZl
IHRoZWlyIHVzZUNvdW50IGFydGlmaWNpYWxseSBlbGV2YXRlZCwKLSAgICAgICAgLy8gY2FsbCB1
c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCi0gICAgICAgIGlmIChub2RlLm11c3RHZW5lcmF0
ZSgpKQotICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UoaSk7Ci0gICAgfQotCi0gICAgLy8gJ21f
bnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxvY2FscyBhbmQgdGVtcG9yYXJp
ZXMgYWxsb2NhdGVkCi0gICAgLy8gZm9yIHRoZSBmdW5jdGlvbiAoYW5kIGNoZWNrZWQgZm9yIG9u
IGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBhbmQKLSAgICAvLyBkaWZmZXJlbnQgYWxs
b2NhdGlvbiBvZiB0ZW1wb3JhcmllcywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBiZSByZXF1aXJl
ZC4KLSAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMgPSBzY29yZUJvYXJkLmFsbG9jYXRlZENv
dW50KCkgKyBtX3ByZXNlcnZlZFZhcnMgKyBtX3BhcmFtZXRlclNsb3RzOwotICAgIGlmICgodW5z
aWduZWQpbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIDwgY2FsbGVlUmVnaXN0ZXJz
KQotICAgICAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgPSBjYWxsZWVSZWdp
c3RlcnM7Ci19Ci0KIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKIHsKICAgICAvLyBTZXQg
ZHVyaW5nIGNvbnN0cnVjdGlvbi4KQEAgLTE0NjEsOCArMTM5OCw5IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlKCkKICAgICBzZXR1cFByZWRlY2Vzc29ycygpOwogICAgIHByb2Nlc3NQaGlT
dGFjazxMb2NhbFBoaVN0YWNrPigpOwogICAgIHByb2Nlc3NQaGlTdGFjazxBcmd1bWVudFBoaVN0
YWNrPigpOwotCi0gICAgYWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJzKCk7CisgICAgCisgICAgbV9n
cmFwaC5tX3ByZXNlcnZlZFZhcnMgPSBtX3ByZXNlcnZlZFZhcnM7CisgICAgbV9ncmFwaC5tX3Bh
cmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIAogI2lmIEVOQUJMRShERkdfREVCVUdf
VkVSQk9TRSkKICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk1MzUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3
LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgIC8vICAg
ICAgICAgaWQjICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGFuIGlkZW50aWZpZXIg
eyBpZiBjb2RlQmxvY2sgaXMgcGFzc2VkIHRvIGR1bXAoKSwgdGhlIHN0cmluZyByZXByZXNlbnRh
dGlvbiBpcyBkaXNwbGF5ZWQgfS4KICAgICAvLyAgICAgICAgIHZhciMgLSB0aGUgaW5kZXggb2Yg
YSB2YXIgb24gdGhlIGdsb2JhbCBvYmplY3QsIHVzZWQgYnkgR2V0R2xvYmFsVmFyL1B1dEdsb2Jh
bFZhciBvcGVyYXRpb25zLgogICAgIHByaW50ZigiJSA0ZDolczwlYyV1OiIsIChpbnQpbm9kZUlu
ZGV4LCBza2lwcGVkID8gIiAgc2tpcHBlZCAgIiA6ICIgICAgICAgICAgICIsIG11c3RHZW5lcmF0
ZSA/ICchJyA6ICcgJywgcmVmQ291bnQpOwotICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmICFz
a2lwcGVkKQorICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmICFza2lwcGVkICYmIG5vZGUuaGFz
VmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgIHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICBlbHNlCiAgICAgICAgIHByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gOTUzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDI0IEBA
IHN0cnVjdCBNZXRob2RDaGVja0RhdGEgewogICAgIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0
dXJlOwogICAgIEpTT2JqZWN0KiBmdW5jdGlvbjsKICAgICBKU09iamVjdCogcHJvdG90eXBlOwor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNZXRob2RDaGVja0RhdGEmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBvdGhlci5zdHJ1Y3R1cmUpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChwcm90b3R5cGVTdHJ1Y3R1cmUg
IT0gb3RoZXIucHJvdG90eXBlU3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoZnVuY3Rpb24gIT0gb3RoZXIuZnVuY3Rpb24pCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChwcm90b3R5cGUgIT0gb3RoZXIucHJvdG90eXBlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1ldGhvZENoZWNrRGF0YSYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQogfTsKIAog
dHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29yTGlzdDsKQEAgLTI4MSw2
ICsyOTksOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBt
X2Jsb2NrczsKICAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKICAg
ICBWZWN0b3I8TWV0aG9kQ2hlY2tEYXRhPiBtX21ldGhvZENoZWNrRGF0YTsKKyAgICB1bnNpZ25l
ZCBtX3ByZXNlcnZlZFZhcnM7CisgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKIHByaXZh
dGU6CiAgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudE5vZGUoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gOTUzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDE0ICsxMDcsMTYgQEAgcHJpdmF0ZToK
IAogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51bSAoYmVsb3cpIGFyZSBjb21wb3NlZCBv
ZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkgbm9uZSkKIC8vIGFuZCBzb21lIGFkZGl0
aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2VuZXJhdGUsIGlzIGNvbnN0YW50LCBldGMp
LgotI2RlZmluZSBOb2RlSWRNYXNrICAgICAgICAgIDB4RkZGCi0jZGVmaW5lIE5vZGVSZXN1bHRN
YXNrICAgICAweEYwMDAKLSNkZWZpbmUgTm9kZU11c3RHZW5lcmF0ZSAgMHgxMDAwMCAvLyBzZXQg
b24gbm9kZXMgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cywgYW5kIG1heSBub3QgdHJpdmlhbGx5IGJl
IHJlbW92ZWQgYnkgRENFLgotI2RlZmluZSBOb2RlSXNDb25zdGFudCAgICAweDIwMDAwCi0jZGVm
aW5lIE5vZGVJc0p1bXAgICAgICAgIDB4NDAwMDAKLSNkZWZpbmUgTm9kZUlzQnJhbmNoICAgICAg
MHg4MDAwMAotI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgIDB4MTAwMDAwCi0jZGVmaW5lIE5vZGVI
YXNWYXJBcmdzICAgMHgyMDAwMDAKKyNkZWZpbmUgTm9kZUlkTWFzayAgICAgICAgICAgMHhGRkYK
KyNkZWZpbmUgTm9kZVJlc3VsdE1hc2sgICAgICAweEYwMDAKKyNkZWZpbmUgTm9kZU11c3RHZW5l
cmF0ZSAgIDB4MTAwMDAgLy8gc2V0IG9uIG5vZGVzIHRoYXQgaGF2ZSBzaWRlIGVmZmVjdHMsIGFu
ZCBtYXkgbm90IHRyaXZpYWxseSBiZSByZW1vdmVkIGJ5IERDRS4KKyNkZWZpbmUgTm9kZUlzQ29u
c3RhbnQgICAgIDB4MjAwMDAKKyNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgIDB4NDAwMDAKKyNk
ZWZpbmUgTm9kZUlzQnJhbmNoICAgICAgIDB4ODAwMDAKKyNkZWZpbmUgTm9kZUlzVGVybWluYWwg
ICAgMHgxMDAwMDAKKyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAgMHgyMDAwMDAKKyNkZWZpbmUg
Tm9kZUNsb2JiZXJzV29ybGQgMHg0MDAwMDAKKyNkZWZpbmUgTm9kZU1pZ2h0Q2xvYmJlciAgMHg4
MDAwMDAKIAogLy8gVGhlc2UgdmFsdWVzIHJlY29yZCB0aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG5v
ZGUgKGFzIGNoZWNrZWQgYnkgTm9kZVJlc3VsdE1hc2ssIGFib3ZlKSwgMCBmb3Igbm8gcmVzdWx0
LgogI2RlZmluZSBOb2RlUmVzdWx0SlMgICAgICAweDEwMDAKQEAgLTEzMSw2ICsxMzMsNyBAQCBw
cml2YXRlOgogICAgIC8qIE5vZGVzIGZvciBsb2NhbCB2YXJpYWJsZSBhY2Nlc3MuICovXAogICAg
IG1hY3JvKEdldExvY2FsLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgMCkg
XAorICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQaGks
IDApIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGJpdHdpc2Ugb3BlcmF0aW9ucy4gKi9cCkBA
IC0xNTksNDUgKzE2Miw0NSBAQCBwcml2YXRlOgogICAgIG1hY3JvKFZhbHVlVG9Eb3VibGUsIE5v
ZGVSZXN1bHROdW1iZXIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIEFkZCBv
ZiB2YWx1ZXMgbWF5IGVpdGhlciBiZSBhcml0aG1ldGljLCBvciByZXN1bHQgaW4gc3RyaW5nIGNv
bmNhdGVuYXRpb24uICovXAotICAgIG1hY3JvKFZhbHVlQWRkLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFsdWVBZGQsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgXAogICAgIC8qIFByb3BlcnR5
IGFjY2Vzcy4gKi9cCiAgICAgLyogUHV0QnlWYWxBbGlhcyBpbmRpY2F0ZXMgYSAncHV0JyBhbGlh
c2VzIGEgcHJpb3Igd3JpdGUgdG8gdGhlIHNhbWUgcHJvcGVydHkuICovXAogICAgIC8qIFNpbmNl
IGEgcHV0IHRvICdsZW5ndGgnIG1heSBpbnZhbGlkYXRlIG9wdGltaXphdGlvbnMgaGVyZSwgKi9c
CiAgICAgLyogdGhpcyBtdXN0IGJlIHRoZSBkaXJlY3RseSBzdWJzZXF1ZW50IHByb3BlcnR5IHB1
dC4gKi9cCiAgICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKLSAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3Jv
KFB1dEJ5VmFsQWxpYXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhHZXRCeUlkLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oUHV0QnlJZCwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVy
c1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oR2V0QnlJZCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlJZCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlJ
ZERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFj
cm8oR2V0TWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oQ2hlY2tNZXRob2QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAg
ICBtYWNybyhQdXRHbG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQdXRH
bG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwK
ICAgICAvKiBOb2RlcyBmb3IgY29tcGFyaXNvbiBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNybyhD
b21wYXJlTGVzcywgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAg
bWFjcm8oQ29tcGFyZUxlc3NFcSwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCi0gICAgbWFjcm8oQ29tcGFyZUdyZWF0ZXIsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKENvbXBhcmVHcmVhdGVyRXEsIE5vZGVSZXN1bHRCb29s
ZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKENvbXBhcmVFcSwgTm9kZVJlc3Vs
dEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ29tcGFyZUxlc3MsIE5v
ZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwK
KyAgICBtYWNybyhDb21wYXJlTGVzc0VxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCisgICAgbWFjcm8oQ29tcGFyZUdyZWF0ZXIsIE5v
ZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwK
KyAgICBtYWNybyhDb21wYXJlR3JlYXRlckVxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCisgICAgbWFjcm8oQ29tcGFyZUVxLCBOb2Rl
UmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAg
ICAgbWFjcm8oQ29tcGFyZVN0cmljdEVxLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIFwKICAg
ICAvKiBDYWxscy4gKi9cCi0gICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oQ29uc3RydWN0LCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhD
YWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBO
b2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKENvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwK
ICAgICBcCiAgICAgLyogUmVzb2x2ZSBub2Rlcy4gKi9cCi0gICAgbWFjcm8oUmVzb2x2ZSwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFJlc29sdmVCYXNlLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oUmVzb2x2ZUJhc2VT
dHJpY3RQdXQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhS
ZXNvbHZlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29y
bGQpIFwKKyAgICBtYWNybyhSZXNvbHZlQmFzZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUmVzb2x2ZUJhc2VTdHJpY3RQ
dXQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkg
XAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNy
byhCcmVha3BvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQnJlYWtwb2ludCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oQ2hlY2tI
YXNJbnN0YW5jZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEluc3RhbmNlT2YsIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEJvb2xl
YW4pIFwKKyAgICBtYWNybyhMb2dpY2FsTm90LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNaWdo
dENsb2JiZXIpIFwKICAgICBcCiAgICAgLyogQmxvY2sgdGVybWluYWxzLiAqL1wKICAgICBtYWNy
byhKdW1wLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwgfCBOb2RlSXNKdW1wKSBc
CkBAIC00ODQsNiArNDg3LDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJ
bmZvMjsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNWaXJ0dWFsUmVnaXN0ZXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXI7CisgICAgfQorICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKQEAgLTUxOSw2ICs1MjcsMTEgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbXVzdEdlbmVyYXRlKCkgPyBtX3JlZkNvdW50
IC0gMSA6IG1fcmVmQ291bnQ7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0UmVmQ291bnQodW5z
aWduZWQgcmVmQ291bnQpCisgICAgeworICAgICAgICBtX3JlZkNvdW50ID0gcmVmQ291bnQ7Cisg
ICAgfQorICAgIAogICAgIE5vZGVJbmRleCBjaGlsZDEoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NTM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5j
bHVkZSAiREZHU2NvcmVCb2FyZC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKQEAgLTU4LDkgKzU5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV91c2VzLnJlc2l6ZShtX2dy
YXBoLnNpemUoKSk7CiAgICAgICAgIG1fdmFyaWFibGVVc2VzLmluaXRpYWxpemVTaW1pbGFyVG8o
bV9ncmFwaC5wcmVkaWN0aW9ucygpKTsKICAgICAgICAgCisgICAgICAgIC8vIFJlcGxhY2VtZW50
cyBhcmUgdXNlZCB0byBpbXBsZW1lbnQgbG9jYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWlu
YXRpb24uCisgICAgICAgIG1fcmVwbGFjZW1lbnRzLnJlc2l6ZShtX2dyYXBoLnNpemUoKSk7Cisg
ICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5zaXplKCk7
ICsraSkgewogICAgICAgICAgICAgbV9wcmVkaWN0aW9uc1tpXSA9IFByZWRpY3ROb25lOwogICAg
ICAgICAgICAgbV91c2VzW2ldID0gUHJlZGljdE5vbmU7CisgICAgICAgICAgICBtX3JlcGxhY2Vt
ZW50c1tpXSA9IE5vTm9kZTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTg3LDYgKzkyLDI1
IEBAIHB1YmxpYzoKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKICAgICAgICAgCiAgICAg
ICAgIGZpeHVwKCk7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAg
ICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciBwcm9wYWdhdGlvbiBmaXh1cDpcbiIpOworICAgICAg
ICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOworI2VuZGlmCisKKyAgICAgICAgbG9jYWxDU0Uo
KTsKKworI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJHcmFw
aCBhZnRlciBDU0U6XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKKyNl
bmRpZgorCisgICAgICAgIGFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycygpOworCisjaWYgRU5BQkxF
KERGR19ERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIHZpcnR1YWwg
cmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxv
Y2spOworI2VuZGlmCiAgICAgfQogICAgIAogcHJpdmF0ZToKQEAgLTMwMSw2ICszMjUsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1
c2UgaXQgZG9lc24ndCBkbyBhbnl0aGluZy4KKyAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00MTAsMTEgKzQz
OCwzOTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBoW21fY29tcGls
ZUluZGV4XSk7CiAgICAgfQogICAgIAorICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQor
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBo
W25vZGVJbmRleF0ub3AgPT0gVmFsdWVUb051bWJlcikKKyAgICAgICAgICAgIG5vZGVJbmRleCA9
IG1fZ3JhcGhbbm9kZUluZGV4XS5jaGlsZDEoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2dy
YXBoW25vZGVJbmRleF0ub3AgPT0gVmFsdWVUb0ludDMyKQorICAgICAgICAgICAgbm9kZUluZGV4
ID0gbV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKKyAgICB9CisgICAgCisgICAgLy8gQ29tcHV0ZXMgd2hlcmUgdGhlIHNlYXJj
aCBmb3IgYSBjYW5kaWRhdGUgZm9yIENTRSBzaG91bGQgc3RhcnQuIERvbid0IGNhbGwKKyAgICAv
LyB0aGlzIGRpcmVjdGx5OyBjYWxsIHN0YXJ0SW5kZXgoKSBpbnN0ZWFkIGFzIGl0IGRvZXMgbG9n
Z2luZyBpbiBkZWJ1ZyBtb2RlLgorICAgIE5vZGVJbmRleCBjb21wdXRlU3RhcnRJbmRleCgpCisg
ICAgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBsaW1pdCA9IDMwMDsKKyAgICAgICAgCisgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgCisgICAg
ICAgIE5vZGVJbmRleCBzdGFydCA9IG1fc3RhcnQ7CisgICAgICAgIGlmIChtX2NvbXBpbGVJbmRl
eCAtIHN0YXJ0ID4gbGltaXQpCisgICAgICAgICAgICBzdGFydCA9IG1fY29tcGlsZUluZGV4IC0g
bGltaXQ7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoc3RhcnQgPj0gbV9zdGFydCk7CisgICAg
ICAgIAorICAgICAgICBOb2RlSW5kZXggY2hpbGQgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEo
KSk7CisgICAgICAgIGlmIChjaGlsZCA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm4gc3Rh
cnQ7CisgICAgICAgIAorICAgICAgICBpZiAoc3RhcnQgPCBjaGlsZCkKKyAgICAgICAgICAgIHN0
YXJ0ID0gY2hpbGQ7CisgICAgICAgIAorICAgICAgICBjaGlsZCA9IGNhbm9uaWNhbGl6ZShub2Rl
LmNoaWxkMigpKTsKKyAgICAgICAgaWYgKGNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGFydDsKKyAgICAgICAgCisgICAgICAgIGlmIChzdGFydCA8IGNoaWxkKQorICAgICAg
ICAgICAgc3RhcnQgPSBjaGlsZDsKKyAgICAgICAgCisgICAgICAgIGNoaWxkID0gY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQzKCkpOworICAgICAgICBpZiAoY2hpbGQgPT0gTm9Ob2RlKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXJ0OworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXJ0IDwgY2hpbGQp
CisgICAgICAgICAgICBzdGFydCA9IGNoaWxkOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN0
YXJ0OworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggc3RhcnRJbmRleCgpCisgICAgeworICAg
ICAgICBOb2RlSW5kZXggcmVzdWx0ID0gY29tcHV0ZVN0YXJ0SW5kZXgoKTsKKyNpZiBFTkFCTEUo
REZHX0RFQlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICBsb29rYmFjayAldTogIiwgbV9j
b21waWxlSW5kZXggLSByZXN1bHQpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIE5vZGVJbmRleCBwdXJlQ1NFKE5vZGUmIG5vZGUpCisgICAgeworICAg
ICAgICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICBOb2RlSW5kZXggY2hpbGQyID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpOworICAg
ICAgICBOb2RlSW5kZXggY2hpbGQzID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQzKCkpOworICAg
ICAgICAKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleCgpOworICAgICAgICBm
b3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7
CisgICAgICAgICAgICBOb2RlJiBvdGhlck5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAg
ICAgIGlmIChub2RlLm9wICE9IG90aGVyTm9kZS5vcCkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZUluZGV4IG90aGVyQ2hpbGQgPSBjYW5v
bmljYWxpemUob3RoZXJOb2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGlmIChvdGhlckNoaWxk
ID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBp
ZiAob3RoZXJDaGlsZCAhPSBjaGlsZDEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2Rl
LmNoaWxkMigpKTsKKyAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBj
aGlsZDIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMygpKTsKKyAgICAg
ICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDMpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAKKyAgICBib29s
IGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUmIG5vZGUpIHsKKyAgICAgICAgUHJlZGljdGVkVHlw
ZSBsZWZ0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgUHJlZGljdGVk
VHlwZSByaWdodCA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDIoKV07CisgICAgICAgIHJldHVy
biBpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkgJiYgaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KQor
ICAgICAgICAgICAgJiYgaXNOdW1iZXJQcmVkaWN0aW9uKGxlZnQpICYmIGlzTnVtYmVyUHJlZGlj
dGlvbihyaWdodCk7CisgICAgfQorICAgIAorICAgIGJvb2wgbG9naWNhbE5vdElzUHVyZShOb2Rl
JiBub2RlKSB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fcHJlZGljdGlv
bnNbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIHJldHVybiBpc0Jvb2xlYW5QcmVkaWN0aW9uKHBy
ZWRpY3Rpb24pIHx8ICFpc1N0cm9uZ1ByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgfQorICAg
IAorICAgIGJvb2wgY2xvYmJlcnNXb3JsZChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgaWYgKG5vZGUu
b3AgJiBOb2RlQ2xvYmJlcnNXb3JsZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoIShub2RlLm9wICYgTm9kZU1pZ2h0Q2xvYmJlcikpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICBjYXNlIFZhbHVlQWRk
OgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6
CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0
ZXJFcToKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgICAgICByZXR1cm4gIWlzUHJl
ZGljdGVkTnVtZXJpY2FsKG5vZGUpOworICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CisgICAgICAg
ICAgICByZXR1cm4gIWxvZ2ljYWxOb3RJc1B1cmUobm9kZSk7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OyAvLyBJZiBieSBzb21lIG9kZGl0eSB3ZSBoaXQgdGhpcyBjYXNlIGluIHJlbGVhc2UgYnVpbGQg
aXQncyBzYWZlciB0byBoYXZlIENTRSBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICB9CisgICAg
fQorICAgIAorICAgIE5vZGVJbmRleCBnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24odW5zaWduZWQg
dmFyTnVtYmVyKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleCgp
OworICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0t
ID4gc3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgIGNhc2UgR2V0R2xvYmFs
VmFyOgorICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGdl
dEJ5VmFsTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIE5vZGVJbmRleCBjaGlsZDIp
CisgICAgeworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4KCk7CisgICAgICAg
IGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDsp
IHsKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAg
IHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUu
Y2hpbGQyKCkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFB1
dEJ5VmFsOgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBj
YW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSkgPT0gY2Fub25pY2FsaXplKGNoaWxkMikpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0K
KyAgICAKKyAgICBOb2RlSW5kZXggZ2V0TWV0aG9kTG9hZEVsaW1pbmF0aW9uKGNvbnN0IE1ldGhv
ZENoZWNrRGF0YSYgbWV0aG9kQ2hlY2tEYXRhLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBO
b2RlSW5kZXggY2hpbGQxKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJ
bmRleCgpOworICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBp
bmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRl
eF07CisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBDaGVja01ldGhvZAorICAgICAgICAgICAg
ICAgICYmIG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCisgICAgICAgICAgICAgICAgJiYgbm9kZS5p
ZGVudGlmaWVyTnVtYmVyKCkgPT0gaWRlbnRpZmllck51bWJlcgorICAgICAgICAgICAgICAgICYm
IG1fZ3JhcGgubV9tZXRob2RDaGVja0RhdGFbbm9kZS5tZXRob2RDaGVja0RhdGFJbmRleCgpXSA9
PSBtZXRob2RDaGVja0RhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAg
ICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgfQorICAgIAorICAgIHZvaWQg
cGVyZm9ybVN1YnN0aXR1dGlvbihOb2RlSW5kZXgmIGNoaWxkKQorICAgIHsKKyAgICAgICAgLy8g
Q2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVudXNlZC4KKyAgICAgICAgaWYgKGNo
aWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8v
IENoZWNrIGlmIHRoZXJlIGlzIGFueSByZXBsYWNlbWVudC4KKyAgICAgICAgTm9kZUluZGV4IHJl
cGxhY2VtZW50ID0gbV9yZXBsYWNlbWVudHNbY2hpbGRdOworICAgICAgICBpZiAocmVwbGFjZW1l
bnQgPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgY2hp
bGQgPSByZXBsYWNlbWVudDsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZXJlIGlzIGRlZmluaXRl
bHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQgdGhlIHJlcGxhY2VtZW50IGRvZXMgbm90Cisg
ICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4KKyAgICAgICAgQVNTRVJUKG1fcmVwbGFjZW1l
bnRzW2NoaWxkXSA9PSBOb05vZGUpOworICAgICAgICAKKyAgICAgICAgbV9ncmFwaFtjaGlsZF0u
cmVmKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0UmVwbGFjZW1lbnQoTm9kZUluZGV4IHJl
cGxhY2VtZW50KQorICAgIHsKKyAgICAgICAgaWYgKHJlcGxhY2VtZW50ID09IE5vTm9kZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIEJlIHNhZmUuIERvbid0IHRy
eSB0byBwZXJmb3JtIHJlcGxhY2VtZW50cyBpZiB0aGUgcHJlZGljdGlvbnMgZG9uJ3QKKyAgICAg
ICAgLy8gYWdyZWUuCisgICAgICAgIGlmIChtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSAh
PSBtX3ByZWRpY3Rpb25zW3JlcGxhY2VtZW50XSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIiAgIFJl
cGxhY2luZyBAJXUgLT4gQCV1IiwgbV9jb21waWxlSW5kZXgsIHJlcGxhY2VtZW50KTsKKyNlbmRp
ZgorICAgICAgICAKKyAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhd
OworICAgICAgICBub2RlLm9wID0gUGhhbnRvbTsKKyAgICAgICAgbm9kZS5zZXRSZWZDb3VudCgx
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBlbGltaW5hdGUg
YWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlLgorICAgICAgICBtX3JlcGxhY2VtZW50c1ttX2Nv
bXBpbGVJbmRleF0gPSByZXBsYWNlbWVudDsKKyAgICB9CisgICAgCisgICAgdm9pZCBwZXJmb3Jt
Tm9kZUNTRShOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFz
VmFyQXJncykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmly
c3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJl
bigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obV9n
cmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQxKTsK
KyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5maXhlZC5jaGls
ZDIpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmZpeGVk
LmNoaWxkMyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyNpZiBFTkFCTEUoREZH
X0RFQlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICAgJXNbJXVdOiAiLCBHcmFwaDo6b3BO
YW1lKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLm9wKSwgbV9jb21waWxlSW5kZXgpOworI2VuZGlm
CisKKyAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgIAorICAgICAgICAvLyBIYW5k
bGUgdGhlIHB1cmUgbm9kZXMuIFRoZXNlIG5vZGVzIG5ldmVyIGhhdmUgYW55IHNpZGUtZWZmZWN0
cy4KKyAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgIGNh
c2UgQml0WG9yOgorICAgICAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICAgICAgY2FzZSBCaXRMU2hp
ZnQ6CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDoKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKKyAg
ICAgICAgY2FzZSBBcml0aFN1YjoKKyAgICAgICAgY2FzZSBBcml0aE11bDoKKyAgICAgICAgY2Fz
ZSBBcml0aE1vZDoKKyAgICAgICAgY2FzZSBBcml0aERpdjoKKyAgICAgICAgY2FzZSBBcml0aEFi
czoKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHB1cmVDU0Uobm9kZSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgLy8gSGFuZGxlIG5vZGVzIHRoYXQgYXJl
IGNvbmRpdGlvbmFsbHkgcHVyZTogdGhlc2UgYXJlIHB1cmUsIGFuZCBjYW4KKyAgICAgICAgLy8g
YmUgQ1NFJ2QsIHNvIGxvbmcgYXMgdGhlIHByZWRpY3Rpb24gaXMgdGhlIG9uZSB3ZSB3YW50Lgor
ICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAg
ICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAg
ICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKKyAgICAgICAgY2FzZSBDb21wYXJlRXE6IHsKKyAg
ICAgICAgICAgIGlmIChpc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKSkgeworICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNTRShub2RlKTsKKyAgICAgICAg
ICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYgaXNQcmVkaWN0ZWROdW1l
cmljYWwobV9ncmFwaFtyZXBsYWNlbWVudEluZGV4XSkpCisgICAgICAgICAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KHJlcGxhY2VtZW50SW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIExvZ2ljYWxO
b3Q6IHsKKyAgICAgICAgICAgIGlmIChsb2dpY2FsTm90SXNQdXJlKG5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50SW5kZXggPSBwdXJlQ1NFKG5vZGUpOworICAg
ICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudEluZGV4ICE9IE5vTm9kZSAmJiBsb2dpY2FsTm90
SXNQdXJlKG1fZ3JhcGhbcmVwbGFjZW1lbnRJbmRleF0pKQorICAgICAgICAgICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChyZXBsYWNlbWVudEluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRHbG9i
YWxWYXI6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnbG9iYWxWYXJMb2FkRWxpbWluYXRp
b24obm9kZS52YXJOdW1iZXIoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5
VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAg
ICAgICAgICBpZiAoZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5j
aGlsZDIoKSkgIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIG5vZGUub3AgPSBQdXRCeVZhbEFs
aWFzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVj
a01ldGhvZDoKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldE1ldGhvZExvYWRFbGltaW5h
dGlvbihtX2dyYXBoLm1fbWV0aG9kQ2hlY2tEYXRhW25vZGUubWV0aG9kQ2hlY2tEYXRhSW5kZXgo
KV0sIG5vZGUuaWRlbnRpZmllck51bWJlcigpLCBub2RlLmNoaWxkMSgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8g
ZG8gbm90aGluZy4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWYgRU5BQkxFKERG
R19ERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBwZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9jayYgYmxvY2spCisgICAgewor
ICAgICAgICBtX3N0YXJ0ID0gYmxvY2suYmVnaW47CisgICAgICAgIE5vZGVJbmRleCBlbmQgPSBi
bG9jay5lbmQ7CisgICAgICAgIGZvciAobV9jb21waWxlSW5kZXggPSBtX3N0YXJ0OyBtX2NvbXBp
bGVJbmRleCA8IGVuZDsgKyttX2NvbXBpbGVJbmRleCkKKyAgICAgICAgICAgIHBlcmZvcm1Ob2Rl
Q1NFKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2Nh
bENTRSgpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJp
bnRmKCJQZXJmb3JtaW5nIGxvY2FsIENTRToiKTsKKyNlbmRpZgorICAgICAgICBmb3IgKHVuc2ln
bmVkIGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9jaykK
KyAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NTRSgqbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja10pOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycygpCisgICAgewor
ICAgICAgICBTY29yZUJvYXJkIHNjb3JlQm9hcmQobV9ncmFwaCwgbV9ncmFwaC5tX3ByZXNlcnZl
ZFZhcnMpOworICAgICAgICB1bnNpZ25lZCBzaXplRXhjbHVkaW5nUGhpTm9kZXMgPSBtX2dyYXBo
Lm1fYmxvY2tzLmxhc3QoKS0+ZW5kOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emVFeGNsdWRpbmdQaGlOb2RlczsgKytpKSB7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFtpXTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgICAgICAvLyBH
ZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVzIGluIHRoZSBncmFwaCwgcmVm
ZXJlbmNpbmcKKyAgICAgICAgICAgIC8vIHJlc3VsdHMgZnJvbSBwcmlvciBibG9ja3MuCisgICAg
ICAgICAgICBpZiAobm9kZS5vcCAhPSBHZXRMb2NhbCkgeworICAgICAgICAgICAgICAgIC8vIEZp
cnN0LCBjYWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVu
CisgICAgICAgICAgICAgICAgLy8gYWxsb2NhdGUgYSBWaXJ0dWFsUmVnaXN0ZXIgZm9yIHRoaXMg
bm9kZS4gV2UgZG8gc28gaW4gdGhpcworICAgICAgICAgICAgICAgIC8vIG9yZGVyIHNvIHRoYXQg
aWYgYSBjaGlsZCBpcyBvbiBpdHMgbGFzdCB1c2UsIGFuZCBhCisgICAgICAgICAgICAgICAgLy8g
VmlydHVhbFJlZ2lzdGVyIGlzIGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUu
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7
IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxk
SWR4KyspCisgICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShtX2dyYXBoLm1f
dmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFub2RlLmhhc1Jlc3VsdCgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBub2RlLnNldFZpcnR1YWxSZWdp
c3RlcihzY29yZUJvYXJkLmFsbG9jYXRlKCkpOworICAgICAgICAgICAgLy8gJ211c3RHZW5lcmF0
ZScgbm9kZXMgaGF2ZSB0aGVpciB1c2VDb3VudCBhcnRpZmljaWFsbHkgZWxldmF0ZWQsCisgICAg
ICAgICAgICAvLyBjYWxsIHVzZSBub3cgdG8gYWNjb3VudCBmb3IgdGhpcy4KKyAgICAgICAgICAg
IGlmIChub2RlLm11c3RHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNl
KGkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gJ21fbnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0
aGUgbnVtYmVyIG9mIGxvY2FscyBhbmQgdGVtcG9yYXJpZXMgYWxsb2NhdGVkCisgICAgICAgIC8v
IGZvciB0aGUgZnVuY3Rpb24gKGFuZCBjaGVja2VkIGZvciBvbiBlbnRyeSkuIFNpbmNlIHdlIHBl
cmZvcm0gYSBuZXcgYW5kCisgICAgICAgIC8vIGRpZmZlcmVudCBhbGxvY2F0aW9uIG9mIHRlbXBv
cmFyaWVzLCBtb3JlIHJlZ2lzdGVycyBtYXkgbm93IGJlIHJlcXVpcmVkLgorICAgICAgICB1bnNp
Z25lZCBjYWxsZWVSZWdpc3RlcnMgPSBzY29yZUJvYXJkLmFsbG9jYXRlZENvdW50KCkgKyBtX2dy
YXBoLm1fcHJlc2VydmVkVmFycyArIG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90czsKKyAgICAgICAg
aWYgKCh1bnNpZ25lZCltX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgPCBjYWxsZWVS
ZWdpc3RlcnMpCisgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMg
PSBjYWxsZWVSZWdpc3RlcnM7CisgICAgfQorICAgIAogICAgIEdyYXBoJiBtX2dyYXBoOwogICAg
IEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7
CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CiAgICAgCisgICAgTm9kZUluZGV4IG1f
c3RhcnQ7CiAgICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4OwogICAgIAogICAgIFZlY3RvcjxQ
cmVkaWN0ZWRUeXBlLCAxNj4gbV9wcmVkaWN0aW9uczsKQEAgLTQyNyw2ICs4NDAsOCBAQCBwcml2
YXRlOgogI2VuZGlmCiAgICAgCiAgICAgYm9vbCBtX2NoYW5nZWQ7CisKKyAgICBWZWN0b3I8Tm9k
ZUluZGV4LCAxNj4gbV9yZXBsYWNlbWVudHM7CiB9OwogCiB2b2lkIHByb3BhZ2F0ZShHcmFwaCYg
Z3JhcGgsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCkBA
IC00MzgsOSArODUzLDYgQEAgdm9pZCBwcm9wYWdhdGUoR3JhcGgmIGdyYXBoLCBKU0dsb2JhbERh
dAogICAgIFByb3BhZ2F0b3IgcHJvcGFnYXRvcihncmFwaCwgKmdsb2JhbERhdGEsIGNvZGVCbG9j
aywgcHJvZmlsZWRCbG9jayk7CiAgICAgcHJvcGFnYXRvci5maXhwb2ludCgpOwogICAgIAotI2lm
IEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICBncmFwaC5kdW1wKGNvZGVCbG9jayk7Ci0j
ZW5kaWYKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1MzUy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNTcsMTYgKzExNTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBHZXRCeVZhbDog
ewotICAgICAgICBOb2RlSW5kZXggYWxpYXMgPSBub2RlLmNoaWxkMygpOwotICAgICAgICBpZiAo
YWxpYXMgIT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogcmVzdWx0IHNob3VsZCBi
ZSBhYmxlIHRvIHJldXNlIGNoaWxkMSwgY2hpbGQyLiBTaG91bGQgaGF2ZSBhbiAnVW51c2VkT3Bl
cmFuZCcgdHlwZS4KLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFsaWFzZWRWYWx1ZSh0aGlz
LCBub2RlLmNoaWxkMygpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
YWxpYXNlZFZhbHVlKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoYWxpYXNlZFZhbHVlLmdwcigp
LCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KKyAgICAg
ICAgQVNTRVJUKG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsKICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBH
UFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKQEAgLTE1OTYsNiArMTU4NywxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAg
ICAgICAgCisgICAgY2FzZSBQaGFudG9tOgorICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AuCisg
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIAogICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmIG5vZGUubXVzdEdlbmVyYXRlKCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107775</attachid>
            <date>2011-09-17 14:30:30 -0700</date>
            <delta_ts>2011-09-17 15:42:26 -0700</delta_ts>
            <desc>fix style</desc>
            <filename>cse_patch_3.diff</filename>
            <type>text/plain</type>
            <size>45095</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUzODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAK
KzIwMTEtMDktMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGhhdmUgZnVsbCBibG9jay1sb2NhbCBDU0UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzE2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgYmxvY2st
bG9jYWwgQ1NFIHRvIHRoZSBERkcuIENTRSBydW5zIGluIHRoZSBwcm9wYWdhdG9yIGp1c3QgYWZ0
ZXIKKyAgICAgICAgdHlwZSBwcm9wYWdhdGlvbi4gSXQgaXMgcGFydCBvZiB0aGUgcHJvcGFnYXRv
ciBpdHNlbGYgYmVjYXVzZSBpdCBuZWVkcyB0bworICAgICAgICB1c2UgdGhlIHByb3BhZ2F0b3In
cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG9wZXJhdGlvbnMK
KyAgICAgICAgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLiBCZWNhdXNlIGl0IGNoYW5nZXMgdGhlIGxp
dmUtcmFuZ2VzIG9mIG5vZGVzLCB0aGUKKyAgICAgICAgdmlydHVhbCByZWdpc3RlciBhbGxvY2F0
b3IgaGFkIHRvIGJlIG1vdmVkIGludG8gdGhlIHByb3BhZ2F0b3Igc28gdGhhdCBpdAorICAgICAg
ICBydW5zIGFmdGVyIENTRS4gVG8gZW5zdXJlIHRoYXQgdGhlIGJhY2stZW5kIGtub3dzIHRvIGtl
ZXAgdGhlIGlucHV0cyB0bworICAgICAgICBhbnkgZWxpbWluYXRlZCBub2RlIGFsaXZlIGZvciBP
U1IsIGEgbmV3IG5vZGUgdHlwZSwgUGhhbnRvbSwgd2FzIGludHJvZHVjZWQuCisgICAgICAgIEl0
IGlzIGEgbm8tb3AgYnV0IHByb2xvbmdlcyB0aGUgbGl2ZS1yYW5nZSBvZiBpdHMgaW5wdXRzLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhbiA4MCUgc3BlZWQtdXAgb24gaW1hZ2luZy1nYXVz
c2lhbi1ibHVyLCBhbmQgYSAxMCUgc3BlZWQtdXAgb24KKyAgICAgICAgS3Jha2VuLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuIFRoZXJlIGFyZSBw
cm9iYWJseSBzdGlsbCBzb21lIGJpZyBidWdzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQWxpYXNUcmFja2Vy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpNZXRob2RDaGVja0RhdGE6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6Ok1ldGhvZENoZWNrRGF0YTo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWaXJ0dWFsUmVn
aXN0ZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldFJlZkNvdW50KToKKyAgICAgICAg
KiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
UHJvcGFnYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OlByb3BhZ2F0b3I6OmNhbm9uaWNhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6Y29tcHV0ZVN0YXJ0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6OnN0YXJ0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnB1cmVD
U0UpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6Omdsb2JhbFZhckxvYWRFbGltaW5h
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0QnlWYWxMb2FkRWxpbWlu
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldE1ldGhvZExvYWRFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybVN1YnN0aXR1
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6c2V0UmVwbGFjZW1lbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtQmxvY2tDU0UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlByb3BhZ2F0b3I6OmxvY2FsQ1NFKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
OjphbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpERkc6OnByb3BhZ2F0
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTEtMDktMTYgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVG91Y2ggUGxhdGZvcm0uaCBpbiB0aGUg
aG9wZSB0byBmaXggU25vd0xlb3BhcmQgSW50ZWwgUmVsZWFzZSAoV2ViS2l0MiBUZXN0cykuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTUzNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMzU5LDcgKzM1OSw2IEBACiAJCTg2RUM5REQzMTMyOERGODIw
MDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1
bGF0aXZlSklULmggKi87IH07CiAJCTg2RUNBM0VBMTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDQTNF
OTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovOyB9OwogCQk4NkVDQTNGQTEzMkRGMjVB
MDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9h
cmQuaCAqLzsgfTsKLQkJODZFQ0E0RjExMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0FsaWFzVHJhY2tl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQ0E0
RjAxMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0FsaWFzVHJhY2tlci5oICovOyB9OwogCQk4NkYzODg1
OTEyMTEzMENBMDA3QTdDRTMgLyogQXRvbWljU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGMzg4NTgxMjExMzBDQTAwN0E3Q0UzIC8q
IEF0b21pY1N0cmluZ0hhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGlj
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDIx
M0UzQjEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgKi87IH07CiAJCTkw
MjEzRTNFMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDIxM0UzQzEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xMTExLDcgKzExMTAsNiBAQAogCQk4NkVDOURDMzEzMjhERjgy
MDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHU3BlY3VsYXRpdmVKSVQuaDsgcGF0aCA9IGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJB
RDcgLyogREZHTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2Rl
Lmg7IHBhdGggPSBkZmcvREZHTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTY29yZUJvYXJkLmg7IHBhdGggPSBkZmcvREZHU2NvcmVC
b2FyZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkVDQTRGMDEzMkVBQTZEMDAy
QjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0FsaWFzVHJhY2tlci5oOyBwYXRoID0gZGZnL0RGR0FsaWFzVHJhY2tlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkYzODg1ODEyMTEzMENBMDA3QTdDRTMgLyogQXRv
bWljU3RyaW5nSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBdG9taWNT
dHJpbmdIYXNoLmg7IHBhdGggPSB0ZXh0L0F0b21pY1N0cmluZ0hhc2guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTAyMTNFM0IxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRp
c3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5U3Rh
dGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkwMjEzRTNDMTIzQTQw
QzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1lbW9yeVN0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyMzUsNyArMjIzMyw2IEBACiAJCQkJMEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERG
R1Byb3BhZ2F0b3IuY3BwICovLAogCQkJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdE
cml2ZXIuaCAqLywKIAkJCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCAqLywKLQkJCQk4NkVDQTRGMDEzMkVBQTZEMDAyQjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmgg
Ki8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNw
cCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIu
aCAqLywKIAkJCQk4NkFFNkM0QjEzNkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oICovLApA
QCAtMjQ5Myw3ICsyNDkwLDYgQEAKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVi
dWdnZXJDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzVGQUYyMTJEMjZBQ0UwMDND
MDgzQiAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQzBFMTZGNUNEMDBC
MzQ0NjAgLyogRGVxdWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2RUNBNEYxMTMyRUFBNkQwMDJC
MkFENyAvKiBERkdBbGlhc1RyYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM1MTMy
OERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOURDODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tl
ci5oCShyZXZpc2lvbiA5NTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxp
YXNUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdBbGlhc1RyYWNr
ZXJfaAotI2RlZmluZSBERkdBbGlhc1RyYWNrZXJfaAotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0K
LSNpbmNsdWRlIDxkZmcvREZHR3JhcGguaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8gPT09IEFsaWFzVHJhY2tlciA9PT0K
LS8vCi0vLyBUaGlzIGNsYXNzIGlkIHVzZWQgdG8gZGV0ZWN0IGFsaWFzaW5nIHByb3BlcnR5IGFj
Y2Vzc2VzLCB3aGljaCB3ZSBtYXkKLS8vIGJlIGFibGUgdG8gc3BlY3VsYXRpdmVseSBvcHRpbWl6
ZSAoZm9yIGV4YW1wbGUgcmVtb3ZpbmcgcmVkdW5kYW50IGxvYWRzCi0vLyB3aGVyZSB3ZSBrbm93
IGEgZ2V0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCwgb3Igb3B0aW1pemluZyBwdXRzIHRvIGFycmF5
cwotLy8gd2hlcmUgd2Uga25vdyB0aGUgdmFsdWUgYmVpbmcgd3JpdHRlbiB0byBpbiB3aXRoaW4g
bGVuZ3RoIGFuZCBpcyBub3QgYQotLy8gaG9sZSB2YWx1ZSkuIEluIHRpbWUsIHRoaXMgc2hvdWxk
IGJlIG1vcmUgdGhhbiBhIDEtZGVlcCBidWZmZXIhCi1jbGFzcyBBbGlhc1RyYWNrZXIgewotcHVi
bGljOgotICAgIEFsaWFzVHJhY2tlcihHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDogbV9ncmFwaChn
cmFwaCkKLSAgICAgICAgLCBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwoTm9Ob2RlKQotICAgIHsK
LSAgICB9Ci0KLSAgICBOb2RlSW5kZXggbG9va3VwR2V0QnlWYWwoTm9kZUluZGV4IGJhc2UsIE5v
ZGVJbmRleCBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICAgIC8vIFRyeSB0byBkZXRlY3Qgc2l0dWF0
aW9ucyB3aGVyZSBhIEdldEJ5VmFsIGZvbGxvd3MgYW5vdGhlciBHZXRCeVZhbCB0byB0aGUgc2Ft
ZQotICAgICAgICAvLyBwcm9wZXJ0eTsgaW4gdGhlc2UgY2FzZXMsIHdlIG1heSBiZSBhYmxlIHRv
IG9taXQgdGhlIHN1YnNlcXVlbnQgZ2V0IG9uIHRoZQotICAgICAgICAvLyBzcGVjdWxhdGl2ZSBw
YXRoLCB3aGVyZSB3ZSBrbm93IGNvbmRpdGlvbnMgaG9sZCB0byBtYWtlIHRoaXMgc2FmZSAoZm9y
IGV4YW1wbGUsCi0gICAgICAgIC8vIG9uIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHdlIHdpbGwgbm90
IGhhdmUgYWxsb3dlZCBnZXR0ZXIgYWNjZXNzKS4KLSAgICAgICAgaWYgKG1fY2FuZGlkYXRlQWxp
YXNHZXRCeVZhbCAhPSBOb05vZGUpIHsKLSAgICAgICAgICAgIE5vZGUmIHBvc3NpYmxlQWxpYXMg
PSBtX2dyYXBoW21fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbF07Ci0gICAgICAgICAgICBBU1NFUlQo
cG9zc2libGVBbGlhcy5vcCA9PSBHZXRCeVZhbCk7Ci0gICAgICAgICAgICAvLyBUaGlzIGNoZWNr
IGVuc3VyZXMgdGhlIGFjY2Vzc2VzIGFsaWFzLCBwcm92aWRlZCB0aGF0IHRoZSBzdWJzY3JpcHQg
aXMgYW4KLSAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXggKHRoaXMgaXMgZ29vZCBlbm91Z2g7
IHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHdpbGwgb25seSBnZW5lcmF0ZQotICAgICAgICAgICAgLy8g
b3B0aW1pemVkIGFjY2Vzc2VzIHRvIGhhbmRsZSBpbnRlZ2VyIHN1YnNjcmlwdHMpLgotICAgICAg
ICAgICAgaWYgKHBvc3NpYmxlQWxpYXMuY2hpbGQxKCkgPT0gYmFzZSAmJiBlcXVhbElnbm9yaW5n
TGF0ZXJOdW1lcmljQ29udmVyc2lvbihwb3NzaWJsZUFsaWFzLmNoaWxkMigpLCBwcm9wZXJ0eSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbDsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgIH0KLQotICAgIHZvaWQgcmVjb3JkR2V0
QnlWYWwoTm9kZUluZGV4IGdldEJ5VmFsKQotICAgIHsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlh
c0dldEJ5VmFsID0gZ2V0QnlWYWw7Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRQdXRCeVZhbChO
b2RlSW5kZXggcHV0QnlWYWwpCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKHB1dEJ5VmFs
LCBtX2dyYXBoW3B1dEJ5VmFsXS5vcCA9PSBQdXRCeVZhbCB8fCBtX2dyYXBoW3B1dEJ5VmFsXS5v
cCA9PSBQdXRCeVZhbEFsaWFzKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0g
Tm9Ob2RlOwotICAgIH0KLQotICAgIHZvaWQgcmVjb3JkR2V0QnlJZChOb2RlSW5kZXggZ2V0QnlJ
ZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZ2V0QnlJZCwgbV9ncmFwaFtnZXRCeUlk
XS5vcCA9PSBHZXRCeUlkKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9O
b2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlY29yZEdldE1ldGhvZChOb2RlSW5kZXggZ2V0
TWV0aG9kKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChnZXRNZXRob2QsIG1fZ3JhcGhb
Z2V0TWV0aG9kXS5vcCA9PSBHZXRNZXRob2QgfHwgbV9ncmFwaFtnZXRNZXRob2RdLm9wID09IENo
ZWNrTWV0aG9kKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOwot
ICAgIH0KLQotICAgIHZvaWQgcmVjb3JkUHV0QnlJZChOb2RlSW5kZXggcHV0QnlJZCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocHV0QnlJZCwgbV9ncmFwaFtwdXRCeUlkXS5vcCA9PSBQ
dXRCeUlkKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOwotICAg
IH0KLQotICAgIHZvaWQgcmVjb3JkUHV0QnlJZERpcmVjdChOb2RlSW5kZXggcHV0QnlWYWwpCi0g
ICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKHB1dEJ5VmFsLCBtX2dyYXBoW3B1dEJ5VmFsXS5v
cCA9PSBQdXRCeUlkRGlyZWN0KTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0g
Tm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlY29yZENhbGwoTm9kZUluZGV4IGNhbGwp
Ci0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhbGwsIG1fZ3JhcGhbY2FsbF0ub3AgPT0g
Q2FsbCk7Ci0gICAgICAgIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbCA9IE5vTm9kZTsKLSAgICB9
Ci0KLSAgICB2b2lkIHJlY29yZENvbnN0cnVjdChOb2RlSW5kZXggY29uc3RydWN0KQotICAgIHsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChjb25zdHJ1Y3QsIG1fZ3JhcGhbY29uc3RydWN0XS5vcCA9
PSBDb25zdHJ1Y3QpOwotICAgICAgICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7
Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRSZXNvbHZlKE5vZGVJbmRleCByZXNvbHZlKQotICAg
IHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlLCBtX2dyYXBoW3Jlc29sdmVdLm9wID09
IFJlc29sdmUKLSAgICAgICAgICAgIHx8IG1fZ3JhcGhbcmVzb2x2ZV0ub3AgPT0gUmVzb2x2ZUJh
c2UKLSAgICAgICAgICAgIHx8IG1fZ3JhcGhbcmVzb2x2ZV0ub3AgPT0gUmVzb2x2ZUJhc2VTdHJp
Y3RQdXQpOwotICAgICAgICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBmb3IgYXJndW1l
bnRzOgotICAgIC8vICAgLSAoWCwgWCkKLSAgICAvLyAgIC0gKFgsIFZhbHVlVG9OdW1iZXIoWCkp
Ci0gICAgLy8gICAtIChYLCBWYWx1ZVRvSW50MzIoWCkpCi0gICAgLy8gICAtIChYLCBOdW1iZXJU
b0ludDMyKFgpKQotICAgIGJvb2wgZXF1YWxJZ25vcmluZ0xhdGVyTnVtZXJpY0NvbnZlcnNpb24o
Tm9kZUluZGV4IG9wMSwgTm9kZUluZGV4IG9wMikKLSAgICB7Ci0gICAgICAgIGlmIChvcDEgPT0g
b3AyKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIE5vZGUmIG5vZGUyID0gbV9n
cmFwaFtvcDJdOwotICAgICAgICByZXR1cm4gKG5vZGUyLm9wID09IFZhbHVlVG9OdW1iZXIgfHwg
bm9kZTIub3AgPT0gVmFsdWVUb0ludDMyKSAmJiBvcDEgPT0gbm9kZTIuY2hpbGQxKCk7Ci0gICAg
fQotCi0gICAgLy8gVGhlIGdyYXBoLCB0byBsb29rIHVwIHBvdGVudGlhbGx5IGFsaWFzaW5nIG5v
ZGVzLgotICAgIEdyYXBoJiBtX2dyYXBoOwotICAgIC8vIEN1cnJlbnRseSBhIDEtZGVlcCBidWZm
ZXIhCi0gICAgTm9kZUluZGV4IG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbDsKLX07Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAot
I2luY2x1ZGUgIkRGR0FsaWFzVHJhY2tlci5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5o
IgotI2luY2x1ZGUgIkRGR1Njb3JlQm9hcmQuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC02MzYsOCArNjM0LDYgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgbV9jb25zdGFudHNb
aV0gPSBDb25zdGFudFJlY29yZCgpOwogICAgIH0KIAotICAgIEFsaWFzVHJhY2tlciBhbGlhc2Vz
KG1fZ3JhcGgpOwotCiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9iYWxEYXRh
LT5pbnRlcnByZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBibG9ja0JlZ2lu
ID0gbV9jdXJyZW50SW5kZXg7CkBAIC05NTAsMTAgKzk0Niw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RBcnJheShi
YXNlKTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CiAKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygw
KSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSwgcHJvcGVydHksIGFsaWFzZXMubG9va3VwR2V0
QnlWYWwoYmFzZSwgcHJvcGVydHkpKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9
IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFz
ZSwgcHJvcGVydHkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIGdldEJ5VmFsKTsKICAgICAgICAgICAgIHN0cm9uZ2x5UHJlZGljdChnZXRCeVZhbCk7
Ci0gICAgICAgICAgICBhbGlhc2VzLnJlY29yZEdldEJ5VmFsKGdldEJ5VmFsKTsKIAogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CiAgICAgICAgIH0KQEAgLTk2NSw5ICs5
NjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICB3ZWFrbHlQcmVkaWN0QXJyYXkoYmFzZSk7CiAgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0
SW50MzIocHJvcGVydHkpOwogCi0gICAgICAgICAgICBOb2RlSW5kZXggYWxpYXNlZEdldCA9IGFs
aWFzZXMubG9va3VwR2V0QnlWYWwoYmFzZSwgcHJvcGVydHkpOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IHB1dEJ5VmFsID0gYWRkVG9HcmFwaChhbGlhc2VkR2V0ICE9IE5vTm9kZSA/IFB1dEJ5VmFs
QWxpYXMgOiBQdXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKLSAgICAgICAgICAgIGFs
aWFzZXMucmVjb3JkUHV0QnlWYWwocHV0QnlWYWwpOworICAgICAgICAgICAgYWRkVG9HcmFwaChQ
dXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKIAogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfcHV0X2J5X3ZhbCk7CiAgICAgICAgIH0KQEAgLTk5OCwxMyArOTkxLDEwIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBtZXRo
b2RDaGVja0RhdGEuZnVuY3Rpb24gPSBtZXRob2RDYWxsLmNhY2hlZEZ1bmN0aW9uLmdldCgpOwog
ICAgICAgICAgICAgICAgIG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUgPSBtZXRob2RDYWxsLmNh
Y2hlZFByb3RvdHlwZS5nZXQoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbWV0aG9kQ2hl
Y2tEYXRhLmFwcGVuZChtZXRob2RDaGVja0RhdGEpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGFsaWFzZXMucmVjb3JkR2V0TWV0aG9kKGNoZWNrTWV0aG9kKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdldE1ldGhvZCA9IGFkZFRv
R3JhcGgoR2V0TWV0aG9kLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhQcmVkaWN0Tm9uZSks
IGJhc2UpOwogICAgICAgICAgICAgICAgIHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IGdldE1ldGhvZCk7CiAgICAgICAgICAgICAgICAgc3Ryb25nbHlQcmVkaWN0KGdldE1ldGhvZCk7
Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRNZXRob2QoZ2V0TWV0aG9kKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggKz0g
T1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2spICsgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlf
aWQpOwpAQCAtMTAxOCw3ICsxMDA4LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdl
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSk7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlJZCk7
CiAgICAgICAgICAgICBzdHJvbmdseVByZWRpY3QoZ2V0QnlJZCk7Ci0gICAgICAgICAgICBhbGlh
c2VzLnJlY29yZEdldEJ5SWQoZ2V0QnlJZCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2dldF9ieV9pZCk7CiAgICAgICAgIH0KQEAgLTEwMjksMTMgKzEwMTgsMTAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgaWRl
bnRpZmllciA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBi
b29sIGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAg
ICAgIGlmIChkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHV0QnlJZERpcmVj
dCA9IGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNlLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRQdXRCeUlkRGlyZWN0KHB1dEJ5
SWREaXJlY3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggcHV0QnlJZCA9IGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNl
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRQdXRCeUlkKHB1dEJ5SWQp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpcmVjdCkKKyAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgYmFzZSwgdmFs
dWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJ
ZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNlLCB2YWx1ZSk7CiAKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX3B1dF9ieV9pZCk7CiAgICAgICAgIH0KQEAgLTEyNTIsMTQgKzEyMzgsMTIgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IGNh
bGwgPSBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwpOwotICAg
ICAgICAgICAgYWxpYXNlcy5yZWNvcmRDYWxsKGNhbGwpOworICAgICAgICAgICAgYWRkQ2FsbChp
bnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBDYWxsKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2NhbGwpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBv
cF9jb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25zdHJ1Y3QgPSBhZGRDYWxs
KGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbnN0cnVjdCk7Ci0gICAgICAgICAg
ICBhbGlhc2VzLnJlY29yZENvbnN0cnVjdChjb25zdHJ1Y3QpOworICAgICAgICAgICAgYWRkQ2Fs
bChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBDb25zdHJ1Y3QpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfY29uc3RydWN0KTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC0xMjcxLDcgKzEyNTUsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAKICAgICAgICAgICAgIE5vZGVJbmRleCByZXNvbHZlID0gYWRkVG9HcmFwaChSZXNvbHZl
LCBPcEluZm8oaWRlbnRpZmllcikpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIHJlc29sdmUpOwotICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRSZXNv
bHZlKHJlc29sdmUpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9yZXNvbHZlKTsKICAg
ICAgICAgfQpAQCAtMTI4MSw3ICsxMjY0LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogCiAgICAgICAgICAgICBOb2RlSW5kZXggcmVzb2x2ZSA9IGFkZFRvR3Jh
cGgoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCA/IFJlc29sdmVCYXNlU3RyaWN0UHV0
IDogUmVzb2x2ZUJhc2UsIE9wSW5mbyhpZGVudGlmaWVyKSk7CiAgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzb2x2ZSk7Ci0gICAgICAgICAgICBhbGlh
c2VzLnJlY29yZFJlc29sdmUocmVzb2x2ZSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3Jlc29sdmVfYmFzZSk7CiAgICAgICAgIH0KQEAgLTEzODUsNTEgKzEzNjcsNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpzZXR1cFByZWRlY2Vzc29ycygpCiAgICAgfQogfQogCi12b2lkIEJ5dGVD
b2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMoKQotewotICAgIFNjb3JlQm9hcmQg
c2NvcmVCb2FyZChtX2dyYXBoLCBtX3ByZXNlcnZlZFZhcnMpOwotICAgIHVuc2lnbmVkIHNpemVF
eGNsdWRpbmdQaGlOb2RlcyA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5lbmQ7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplRXhjbHVkaW5nUGhpTm9kZXM7ICsraSkgewotICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtpXTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAg
ICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVzIGluIHRoZSBncmFw
aCwgcmVmZXJlbmNpbmcKLSAgICAgICAgLy8gcmVzdWx0cyBmcm9tIHByaW9yIGJsb2Nrcy4KLSAg
ICAgICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKLSAgICAgICAgICAgIC8vIEZpcnN0LCBj
YWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCi0gICAg
ICAgICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBk
byBzbyBpbiB0aGlzCi0gICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMg
b24gaXRzIGxhc3QgdXNlLCBhbmQgYQotICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlz
IGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICBpZiAo
bm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGls
ZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAgICAgICAg
ICBzY29yZUJvYXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBub2RlLnNldFZpcnR1YWxSZWdpc3RlcihzY29y
ZUJvYXJkLmFsbG9jYXRlKCkpOwotICAgICAgICAvLyAnbXVzdEdlbmVyYXRlJyBub2RlcyBoYXZl
IHRoZWlyIHVzZUNvdW50IGFydGlmaWNpYWxseSBlbGV2YXRlZCwKLSAgICAgICAgLy8gY2FsbCB1
c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCi0gICAgICAgIGlmIChub2RlLm11c3RHZW5lcmF0
ZSgpKQotICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UoaSk7Ci0gICAgfQotCi0gICAgLy8gJ21f
bnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxvY2FscyBhbmQgdGVtcG9yYXJp
ZXMgYWxsb2NhdGVkCi0gICAgLy8gZm9yIHRoZSBmdW5jdGlvbiAoYW5kIGNoZWNrZWQgZm9yIG9u
IGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBhbmQKLSAgICAvLyBkaWZmZXJlbnQgYWxs
b2NhdGlvbiBvZiB0ZW1wb3JhcmllcywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBiZSByZXF1aXJl
ZC4KLSAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMgPSBzY29yZUJvYXJkLmFsbG9jYXRlZENv
dW50KCkgKyBtX3ByZXNlcnZlZFZhcnMgKyBtX3BhcmFtZXRlclNsb3RzOwotICAgIGlmICgodW5z
aWduZWQpbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIDwgY2FsbGVlUmVnaXN0ZXJz
KQotICAgICAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgPSBjYWxsZWVSZWdp
c3RlcnM7Ci19Ci0KIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKIHsKICAgICAvLyBTZXQg
ZHVyaW5nIGNvbnN0cnVjdGlvbi4KQEAgLTE0NjEsOCArMTM5OCw5IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlKCkKICAgICBzZXR1cFByZWRlY2Vzc29ycygpOwogICAgIHByb2Nlc3NQaGlT
dGFjazxMb2NhbFBoaVN0YWNrPigpOwogICAgIHByb2Nlc3NQaGlTdGFjazxBcmd1bWVudFBoaVN0
YWNrPigpOwotCi0gICAgYWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJzKCk7CisgICAgCisgICAgbV9n
cmFwaC5tX3ByZXNlcnZlZFZhcnMgPSBtX3ByZXNlcnZlZFZhcnM7CisgICAgbV9ncmFwaC5tX3Bh
cmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIAogI2lmIEVOQUJMRShERkdfREVCVUdf
VkVSQk9TRSkKICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk1MzUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3
LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgIC8vICAg
ICAgICAgaWQjICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGFuIGlkZW50aWZpZXIg
eyBpZiBjb2RlQmxvY2sgaXMgcGFzc2VkIHRvIGR1bXAoKSwgdGhlIHN0cmluZyByZXByZXNlbnRh
dGlvbiBpcyBkaXNwbGF5ZWQgfS4KICAgICAvLyAgICAgICAgIHZhciMgLSB0aGUgaW5kZXggb2Yg
YSB2YXIgb24gdGhlIGdsb2JhbCBvYmplY3QsIHVzZWQgYnkgR2V0R2xvYmFsVmFyL1B1dEdsb2Jh
bFZhciBvcGVyYXRpb25zLgogICAgIHByaW50ZigiJSA0ZDolczwlYyV1OiIsIChpbnQpbm9kZUlu
ZGV4LCBza2lwcGVkID8gIiAgc2tpcHBlZCAgIiA6ICIgICAgICAgICAgICIsIG11c3RHZW5lcmF0
ZSA/ICchJyA6ICcgJywgcmVmQ291bnQpOwotICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmICFz
a2lwcGVkKQorICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmICFza2lwcGVkICYmIG5vZGUuaGFz
VmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgIHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICBlbHNlCiAgICAgICAgIHByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gOTUzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDI0IEBA
IHN0cnVjdCBNZXRob2RDaGVja0RhdGEgewogICAgIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0
dXJlOwogICAgIEpTT2JqZWN0KiBmdW5jdGlvbjsKICAgICBKU09iamVjdCogcHJvdG90eXBlOwor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNZXRob2RDaGVja0RhdGEmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBvdGhlci5zdHJ1Y3R1cmUpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChwcm90b3R5cGVTdHJ1Y3R1cmUg
IT0gb3RoZXIucHJvdG90eXBlU3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoZnVuY3Rpb24gIT0gb3RoZXIuZnVuY3Rpb24pCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChwcm90b3R5cGUgIT0gb3RoZXIucHJvdG90eXBlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1ldGhvZENoZWNrRGF0YSYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQogfTsKIAog
dHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29yTGlzdDsKQEAgLTI4MSw2
ICsyOTksOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBt
X2Jsb2NrczsKICAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKICAg
ICBWZWN0b3I8TWV0aG9kQ2hlY2tEYXRhPiBtX21ldGhvZENoZWNrRGF0YTsKKyAgICB1bnNpZ25l
ZCBtX3ByZXNlcnZlZFZhcnM7CisgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKIHByaXZh
dGU6CiAgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudE5vZGUoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gOTUzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDE0ICsxMDcsMTYgQEAgcHJpdmF0ZToK
IAogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51bSAoYmVsb3cpIGFyZSBjb21wb3NlZCBv
ZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkgbm9uZSkKIC8vIGFuZCBzb21lIGFkZGl0
aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2VuZXJhdGUsIGlzIGNvbnN0YW50LCBldGMp
LgotI2RlZmluZSBOb2RlSWRNYXNrICAgICAgICAgIDB4RkZGCi0jZGVmaW5lIE5vZGVSZXN1bHRN
YXNrICAgICAweEYwMDAKLSNkZWZpbmUgTm9kZU11c3RHZW5lcmF0ZSAgMHgxMDAwMCAvLyBzZXQg
b24gbm9kZXMgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cywgYW5kIG1heSBub3QgdHJpdmlhbGx5IGJl
IHJlbW92ZWQgYnkgRENFLgotI2RlZmluZSBOb2RlSXNDb25zdGFudCAgICAweDIwMDAwCi0jZGVm
aW5lIE5vZGVJc0p1bXAgICAgICAgIDB4NDAwMDAKLSNkZWZpbmUgTm9kZUlzQnJhbmNoICAgICAg
MHg4MDAwMAotI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgIDB4MTAwMDAwCi0jZGVmaW5lIE5vZGVI
YXNWYXJBcmdzICAgMHgyMDAwMDAKKyNkZWZpbmUgTm9kZUlkTWFzayAgICAgICAgICAgMHhGRkYK
KyNkZWZpbmUgTm9kZVJlc3VsdE1hc2sgICAgICAweEYwMDAKKyNkZWZpbmUgTm9kZU11c3RHZW5l
cmF0ZSAgIDB4MTAwMDAgLy8gc2V0IG9uIG5vZGVzIHRoYXQgaGF2ZSBzaWRlIGVmZmVjdHMsIGFu
ZCBtYXkgbm90IHRyaXZpYWxseSBiZSByZW1vdmVkIGJ5IERDRS4KKyNkZWZpbmUgTm9kZUlzQ29u
c3RhbnQgICAgIDB4MjAwMDAKKyNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgIDB4NDAwMDAKKyNk
ZWZpbmUgTm9kZUlzQnJhbmNoICAgICAgIDB4ODAwMDAKKyNkZWZpbmUgTm9kZUlzVGVybWluYWwg
ICAgMHgxMDAwMDAKKyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAgMHgyMDAwMDAKKyNkZWZpbmUg
Tm9kZUNsb2JiZXJzV29ybGQgMHg0MDAwMDAKKyNkZWZpbmUgTm9kZU1pZ2h0Q2xvYmJlciAgMHg4
MDAwMDAKIAogLy8gVGhlc2UgdmFsdWVzIHJlY29yZCB0aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG5v
ZGUgKGFzIGNoZWNrZWQgYnkgTm9kZVJlc3VsdE1hc2ssIGFib3ZlKSwgMCBmb3Igbm8gcmVzdWx0
LgogI2RlZmluZSBOb2RlUmVzdWx0SlMgICAgICAweDEwMDAKQEAgLTEzMSw2ICsxMzMsNyBAQCBw
cml2YXRlOgogICAgIC8qIE5vZGVzIGZvciBsb2NhbCB2YXJpYWJsZSBhY2Nlc3MuICovXAogICAg
IG1hY3JvKEdldExvY2FsLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgMCkg
XAorICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQaGks
IDApIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGJpdHdpc2Ugb3BlcmF0aW9ucy4gKi9cCkBA
IC0xNTksNDUgKzE2Miw0NSBAQCBwcml2YXRlOgogICAgIG1hY3JvKFZhbHVlVG9Eb3VibGUsIE5v
ZGVSZXN1bHROdW1iZXIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIEFkZCBv
ZiB2YWx1ZXMgbWF5IGVpdGhlciBiZSBhcml0aG1ldGljLCBvciByZXN1bHQgaW4gc3RyaW5nIGNv
bmNhdGVuYXRpb24uICovXAotICAgIG1hY3JvKFZhbHVlQWRkLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFsdWVBZGQsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgXAogICAgIC8qIFByb3BlcnR5
IGFjY2Vzcy4gKi9cCiAgICAgLyogUHV0QnlWYWxBbGlhcyBpbmRpY2F0ZXMgYSAncHV0JyBhbGlh
c2VzIGEgcHJpb3Igd3JpdGUgdG8gdGhlIHNhbWUgcHJvcGVydHkuICovXAogICAgIC8qIFNpbmNl
IGEgcHV0IHRvICdsZW5ndGgnIG1heSBpbnZhbGlkYXRlIG9wdGltaXphdGlvbnMgaGVyZSwgKi9c
CiAgICAgLyogdGhpcyBtdXN0IGJlIHRoZSBkaXJlY3RseSBzdWJzZXF1ZW50IHByb3BlcnR5IHB1
dC4gKi9cCiAgICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKLSAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3Jv
KFB1dEJ5VmFsQWxpYXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhHZXRCeUlkLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oUHV0QnlJZCwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVy
c1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oR2V0QnlJZCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlJZCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlJ
ZERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFj
cm8oR2V0TWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oQ2hlY2tNZXRob2QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAg
ICBtYWNybyhQdXRHbG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQdXRH
bG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwK
ICAgICAvKiBOb2RlcyBmb3IgY29tcGFyaXNvbiBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNybyhD
b21wYXJlTGVzcywgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAg
bWFjcm8oQ29tcGFyZUxlc3NFcSwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCi0gICAgbWFjcm8oQ29tcGFyZUdyZWF0ZXIsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKENvbXBhcmVHcmVhdGVyRXEsIE5vZGVSZXN1bHRCb29s
ZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKENvbXBhcmVFcSwgTm9kZVJlc3Vs
dEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ29tcGFyZUxlc3MsIE5v
ZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwK
KyAgICBtYWNybyhDb21wYXJlTGVzc0VxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCisgICAgbWFjcm8oQ29tcGFyZUdyZWF0ZXIsIE5v
ZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwK
KyAgICBtYWNybyhDb21wYXJlR3JlYXRlckVxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCisgICAgbWFjcm8oQ29tcGFyZUVxLCBOb2Rl
UmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAg
ICAgbWFjcm8oQ29tcGFyZVN0cmljdEVxLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIFwKICAg
ICAvKiBDYWxscy4gKi9cCi0gICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oQ29uc3RydWN0LCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhD
YWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBO
b2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKENvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwK
ICAgICBcCiAgICAgLyogUmVzb2x2ZSBub2Rlcy4gKi9cCi0gICAgbWFjcm8oUmVzb2x2ZSwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFJlc29sdmVCYXNlLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oUmVzb2x2ZUJhc2VT
dHJpY3RQdXQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhS
ZXNvbHZlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29y
bGQpIFwKKyAgICBtYWNybyhSZXNvbHZlQmFzZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUmVzb2x2ZUJhc2VTdHJpY3RQ
dXQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkg
XAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNy
byhCcmVha3BvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQnJlYWtwb2ludCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oQ2hlY2tI
YXNJbnN0YW5jZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEluc3RhbmNlT2YsIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEJvb2xl
YW4pIFwKKyAgICBtYWNybyhMb2dpY2FsTm90LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNaWdo
dENsb2JiZXIpIFwKICAgICBcCiAgICAgLyogQmxvY2sgdGVybWluYWxzLiAqL1wKICAgICBtYWNy
byhKdW1wLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwgfCBOb2RlSXNKdW1wKSBc
CkBAIC00ODQsNiArNDg3LDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJ
bmZvMjsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNWaXJ0dWFsUmVnaXN0ZXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXI7CisgICAgfQorICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKQEAgLTUxOSw2ICs1MjcsMTEgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbXVzdEdlbmVyYXRlKCkgPyBtX3JlZkNvdW50
IC0gMSA6IG1fcmVmQ291bnQ7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0UmVmQ291bnQodW5z
aWduZWQgcmVmQ291bnQpCisgICAgeworICAgICAgICBtX3JlZkNvdW50ID0gcmVmQ291bnQ7Cisg
ICAgfQorICAgIAogICAgIE5vZGVJbmRleCBjaGlsZDEoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NTM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5j
bHVkZSAiREZHU2NvcmVCb2FyZC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKQEAgLTU4LDkgKzU5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV91c2VzLnJlc2l6ZShtX2dy
YXBoLnNpemUoKSk7CiAgICAgICAgIG1fdmFyaWFibGVVc2VzLmluaXRpYWxpemVTaW1pbGFyVG8o
bV9ncmFwaC5wcmVkaWN0aW9ucygpKTsKICAgICAgICAgCisgICAgICAgIC8vIFJlcGxhY2VtZW50
cyBhcmUgdXNlZCB0byBpbXBsZW1lbnQgbG9jYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWlu
YXRpb24uCisgICAgICAgIG1fcmVwbGFjZW1lbnRzLnJlc2l6ZShtX2dyYXBoLnNpemUoKSk7Cisg
ICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5zaXplKCk7
ICsraSkgewogICAgICAgICAgICAgbV9wcmVkaWN0aW9uc1tpXSA9IFByZWRpY3ROb25lOwogICAg
ICAgICAgICAgbV91c2VzW2ldID0gUHJlZGljdE5vbmU7CisgICAgICAgICAgICBtX3JlcGxhY2Vt
ZW50c1tpXSA9IE5vTm9kZTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTg3LDYgKzkyLDI1
IEBAIHB1YmxpYzoKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKICAgICAgICAgCiAgICAg
ICAgIGZpeHVwKCk7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAg
ICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciBwcm9wYWdhdGlvbiBmaXh1cDpcbiIpOworICAgICAg
ICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOworI2VuZGlmCisKKyAgICAgICAgbG9jYWxDU0Uo
KTsKKworI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJHcmFw
aCBhZnRlciBDU0U6XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKKyNl
bmRpZgorCisgICAgICAgIGFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycygpOworCisjaWYgRU5BQkxF
KERGR19ERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIHZpcnR1YWwg
cmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxv
Y2spOworI2VuZGlmCiAgICAgfQogICAgIAogcHJpdmF0ZToKQEAgLTMwMSw2ICszMjUsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1
c2UgaXQgZG9lc24ndCBkbyBhbnl0aGluZy4KKyAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00MTAsMTEgKzQz
OCwzOTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBoW21fY29tcGls
ZUluZGV4XSk7CiAgICAgfQogICAgIAorICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQor
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBo
W25vZGVJbmRleF0ub3AgPT0gVmFsdWVUb051bWJlcikKKyAgICAgICAgICAgIG5vZGVJbmRleCA9
IG1fZ3JhcGhbbm9kZUluZGV4XS5jaGlsZDEoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2dy
YXBoW25vZGVJbmRleF0ub3AgPT0gVmFsdWVUb0ludDMyKQorICAgICAgICAgICAgbm9kZUluZGV4
ID0gbV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKKyAgICB9CisgICAgCisgICAgLy8gQ29tcHV0ZXMgd2hlcmUgdGhlIHNlYXJj
aCBmb3IgYSBjYW5kaWRhdGUgZm9yIENTRSBzaG91bGQgc3RhcnQuIERvbid0IGNhbGwKKyAgICAv
LyB0aGlzIGRpcmVjdGx5OyBjYWxsIHN0YXJ0SW5kZXgoKSBpbnN0ZWFkIGFzIGl0IGRvZXMgbG9n
Z2luZyBpbiBkZWJ1ZyBtb2RlLgorICAgIE5vZGVJbmRleCBjb21wdXRlU3RhcnRJbmRleCgpCisg
ICAgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBsaW1pdCA9IDMwMDsKKyAgICAgICAgCisgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgCisgICAg
ICAgIE5vZGVJbmRleCBzdGFydCA9IG1fc3RhcnQ7CisgICAgICAgIGlmIChtX2NvbXBpbGVJbmRl
eCAtIHN0YXJ0ID4gbGltaXQpCisgICAgICAgICAgICBzdGFydCA9IG1fY29tcGlsZUluZGV4IC0g
bGltaXQ7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoc3RhcnQgPj0gbV9zdGFydCk7CisgICAg
ICAgIAorICAgICAgICBOb2RlSW5kZXggY2hpbGQgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEo
KSk7CisgICAgICAgIGlmIChjaGlsZCA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm4gc3Rh
cnQ7CisgICAgICAgIAorICAgICAgICBpZiAoc3RhcnQgPCBjaGlsZCkKKyAgICAgICAgICAgIHN0
YXJ0ID0gY2hpbGQ7CisgICAgICAgIAorICAgICAgICBjaGlsZCA9IGNhbm9uaWNhbGl6ZShub2Rl
LmNoaWxkMigpKTsKKyAgICAgICAgaWYgKGNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGFydDsKKyAgICAgICAgCisgICAgICAgIGlmIChzdGFydCA8IGNoaWxkKQorICAgICAg
ICAgICAgc3RhcnQgPSBjaGlsZDsKKyAgICAgICAgCisgICAgICAgIGNoaWxkID0gY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQzKCkpOworICAgICAgICBpZiAoY2hpbGQgPT0gTm9Ob2RlKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXJ0OworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXJ0IDwgY2hpbGQp
CisgICAgICAgICAgICBzdGFydCA9IGNoaWxkOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN0
YXJ0OworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggc3RhcnRJbmRleCgpCisgICAgeworICAg
ICAgICBOb2RlSW5kZXggcmVzdWx0ID0gY29tcHV0ZVN0YXJ0SW5kZXgoKTsKKyNpZiBFTkFCTEUo
REZHX0RFQlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICBsb29rYmFjayAldTogIiwgbV9j
b21waWxlSW5kZXggLSByZXN1bHQpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIE5vZGVJbmRleCBwdXJlQ1NFKE5vZGUmIG5vZGUpCisgICAgeworICAg
ICAgICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICBOb2RlSW5kZXggY2hpbGQyID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpOworICAg
ICAgICBOb2RlSW5kZXggY2hpbGQzID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQzKCkpOworICAg
ICAgICAKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleCgpOworICAgICAgICBm
b3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7
CisgICAgICAgICAgICBOb2RlJiBvdGhlck5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAg
ICAgIGlmIChub2RlLm9wICE9IG90aGVyTm9kZS5vcCkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZUluZGV4IG90aGVyQ2hpbGQgPSBjYW5v
bmljYWxpemUob3RoZXJOb2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGlmIChvdGhlckNoaWxk
ID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBp
ZiAob3RoZXJDaGlsZCAhPSBjaGlsZDEpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2Rl
LmNoaWxkMigpKTsKKyAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBj
aGlsZDIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMygpKTsKKyAgICAg
ICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDMpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAKKyAgICBib29s
IGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBQcmVkaWN0
ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICBQcmVk
aWN0ZWRUeXBlIHJpZ2h0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigpXTsKKyAgICAgICAg
cmV0dXJuIGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSAmJiBpc1N0cm9uZ1ByZWRpY3Rpb24ocmln
aHQpCisgICAgICAgICAgICAmJiBpc051bWJlclByZWRpY3Rpb24obGVmdCkgJiYgaXNOdW1iZXJQ
cmVkaWN0aW9uKHJpZ2h0KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBsb2dpY2FsTm90SXNQdXJl
KE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBt
X3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICByZXR1cm4gaXNCb29sZWFuUHJl
ZGljdGlvbihwcmVkaWN0aW9uKSB8fCAhaXNTdHJvbmdQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZUluZGV4IG5vZGVJbmRleCkK
KyAgICB7CisgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAg
IGlmIChub2RlLm9wICYgTm9kZUNsb2JiZXJzV29ybGQpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKCEobm9kZS5vcCAmIE5vZGVNaWdodENsb2JiZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgY2Fz
ZSBWYWx1ZUFkZDoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAgICAgY2FzZSBDb21w
YXJlTGVzc0VxOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgICAgICBjYXNlIENv
bXBhcmVHcmVhdGVyRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUVxOgorICAgICAgICAgICAgcmV0
dXJuICFpc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKTsKKyAgICAgICAgY2FzZSBMb2dpY2FsTm90
OgorICAgICAgICAgICAgcmV0dXJuICFsb2dpY2FsTm90SXNQdXJlKG5vZGUpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsgLy8gSWYgYnkgc29tZSBvZGRpdHkgd2UgaGl0IHRoaXMgY2FzZSBpbiByZWxl
YXNlIGJ1aWxkIGl0J3Mgc2FmZXIgdG8gaGF2ZSBDU0UgYXNzdW1lIHRoZSB3b3JzdC4KKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9u
KHVuc2lnbmVkIHZhck51bWJlcikKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0
YXJ0SW5kZXgoKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRl
eDsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
aW5kZXhdOworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgICAgICBjYXNl
IEdldEdsb2JhbFZhcjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJOdW1iZXIoKSA9PSB2
YXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgorICAgICAgICAgICAg
ICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgfQorICAgIAorICAgIE5v
ZGVJbmRleCBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxLCBOb2RlSW5k
ZXggY2hpbGQyKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleCgp
OworICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0t
ID4gc3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGNhbm9uaWNh
bGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBj
aGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9uaWNhbGl6ZShjaGls
ZDIpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDMoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGdldE1ldGhvZExvYWRFbGltaW5hdGlvbihj
b25zdCBNZXRob2RDaGVja0RhdGEmIG1ldGhvZENoZWNrRGF0YSwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgTm9kZUluZGV4IGNoaWxkMSkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBzdGFy
dCA9IHN0YXJ0SW5kZXgoKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBp
bGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gQ2hlY2tNZXRob2QKKyAg
ICAgICAgICAgICAgICAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAg
ICYmIG5vZGUuaWRlbnRpZmllck51bWJlcigpID09IGlkZW50aWZpZXJOdW1iZXIKKyAgICAgICAg
ICAgICAgICAmJiBtX2dyYXBoLm1fbWV0aG9kQ2hlY2tEYXRhW25vZGUubWV0aG9kQ2hlY2tEYXRh
SW5kZXgoKV0gPT0gbWV0aG9kQ2hlY2tEYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmRl
eDsKKyAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb24oTm9kZUluZGV4JiBjaGlsZCkKKyAgICB7Cisg
ICAgICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCisgICAg
ICAgIGlmIChjaGlsZCA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCisgICAgICAgIE5v
ZGVJbmRleCByZXBsYWNlbWVudCA9IG1fcmVwbGFjZW1lbnRzW2NoaWxkXTsKKyAgICAgICAgaWYg
KHJlcGxhY2VtZW50ID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIGNoaWxkID0gcmVwbGFjZW1lbnQ7CisgICAgICAgIAorICAgICAgICAvLyBUaGVyZSBp
cyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBk
b2VzIG5vdAorICAgICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCisgICAgICAgIEFTU0VSVCht
X3JlcGxhY2VtZW50c1tjaGlsZF0gPT0gTm9Ob2RlKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3Jh
cGhbY2hpbGRdLnJlZigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlcGxhY2VtZW50KE5v
ZGVJbmRleCByZXBsYWNlbWVudCkKKyAgICB7CisgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBO
b05vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBCZSBzYWZl
LiBEb24ndCB0cnkgdG8gcGVyZm9ybSByZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRv
bid0CisgICAgICAgIC8vIGFncmVlLgorICAgICAgICBpZiAobV9wcmVkaWN0aW9uc1ttX2NvbXBp
bGVJbmRleF0gIT0gbV9wcmVkaWN0aW9uc1tyZXBsYWNlbWVudF0pCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJp
bnRmKCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY29tcGlsZUluZGV4LCByZXBsYWNlbWVu
dCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29t
cGlsZUluZGV4XTsKKyAgICAgICAgbm9kZS5vcCA9IFBoYW50b207CisgICAgICAgIG5vZGUuc2V0
UmVmQ291bnQoMSk7CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdpbGwg
ZWxpbWluYXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbm9kZS4KKyAgICAgICAgbV9yZXBsYWNl
bWVudHNbbV9jb21waWxlSW5kZXhdID0gcmVwbGFjZW1lbnQ7CisgICAgfQorICAgIAorICAgIHZv
aWQgcGVyZm9ybU5vZGVDU0UoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLm9w
ICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHgg
PSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUu
bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3Rp
dHV0aW9uKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmZpeGVk
LmNoaWxkMSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4u
Zml4ZWQuY2hpbGQyKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGls
ZHJlbi5maXhlZC5jaGlsZDMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW5v
ZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisjaWYg
RU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIiAgICVzWyV1XTogIiwg
R3JhcGg6Om9wTmFtZShtX2dyYXBoW21fY29tcGlsZUluZGV4XS5vcCksIG1fY29tcGlsZUluZGV4
KTsKKyNlbmRpZgorCisgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAKKyAgICAg
ICAgLy8gSGFuZGxlIHRoZSBwdXJlIG5vZGVzLiBUaGVzZSBub2RlcyBuZXZlciBoYXZlIGFueSBz
aWRlLWVmZmVjdHMuCisgICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICBjYXNlIEJpdE9yOgor
ICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgICAgIGNh
c2UgQml0TFNoaWZ0OgorICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgICAgIGNhc2UgQXJp
dGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAgIGNhc2UgQXJpdGhNdWw6Cisg
ICAgICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgICAgIGNhc2UgQXJpdGhEaXY6CisgICAgICAgIGNh
c2UgQXJpdGhBYnM6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIC8vIEhhbmRsZSBub2Rl
cyB0aGF0IGFyZSBjb25kaXRpb25hbGx5IHB1cmU6IHRoZXNlIGFyZSBwdXJlLCBhbmQgY2FuCisg
ICAgICAgIC8vIGJlIENTRSdkLCBzbyBsb25nIGFzIHRoZSBwcmVkaWN0aW9uIGlzIHRoZSBvbmUg
d2Ugd2FudC4KKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVz
czoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVh
dGVyOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgIGNhc2UgQ29tcGFy
ZUVxOiB7CisgICAgICAgICAgICBpZiAoaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSkpIHsKKyAg
ICAgICAgICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnRJbmRleCA9IHB1cmVDU0Uobm9kZSk7
CisgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50SW5kZXggIT0gTm9Ob2RlICYmIGlzUHJl
ZGljdGVkTnVtZXJpY2FsKG1fZ3JhcGhbcmVwbGFjZW1lbnRJbmRleF0pKQorICAgICAgICAgICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChyZXBsYWNlbWVudEluZGV4KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBMb2dpY2FsTm90OiB7CisgICAgICAgICAgICBpZiAobG9naWNhbE5vdElzUHVyZShub2RlKSkg
eworICAgICAgICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNTRShu
b2RlKTsKKyAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYg
bG9naWNhbE5vdElzUHVyZShtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdKSkKKyAgICAgICAgICAg
ICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRJbmRleCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgR2V0R2xvYmFsVmFyOgorICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9h
ZEVsaW1pbmF0aW9uKG5vZGUudmFyTnVtYmVyKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICBzZXRSZXBsYWNl
bWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5
VmFsOgorICAgICAgICAgICAgaWYgKGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQx
KCksIG5vZGUuY2hpbGQyKCkpICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBub2RlLm9wID0g
UHV0QnlWYWxBbGlhczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQ2hlY2tNZXRob2Q6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRNZXRob2RM
b2FkRWxpbWluYXRpb24obV9ncmFwaC5tX21ldGhvZENoZWNrRGF0YVtub2RlLm1ldGhvZENoZWNr
RGF0YUluZGV4KCldLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSwgbm9kZS5jaGlsZDEoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIC8vIGRvIG5vdGhpbmcuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2lm
IEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlm
CisgICAgfQorICAgIAorICAgIHZvaWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2smIGJsb2Nr
KQorICAgIHsKKyAgICAgICAgbV9zdGFydCA9IGJsb2NrLmJlZ2luOworICAgICAgICBOb2RlSW5k
ZXggZW5kID0gYmxvY2suZW5kOworICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gbV9zdGFy
dDsgbV9jb21waWxlSW5kZXggPCBlbmQ7ICsrbV9jb21waWxlSW5kZXgpCisgICAgICAgICAgICBw
ZXJmb3JtTm9kZUNTRShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgbG9jYWxDU0UoKQorICAgIHsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisg
ICAgICAgIHByaW50ZigiUGVyZm9ybWluZyBsb2NhbCBDU0U6Iik7CisjZW5kaWYKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBibG9jayA9IDA7IGJsb2NrIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2spCisgICAgICAgICAgICBwZXJmb3JtQmxvY2tDU0UoKm1fZ3JhcGgubV9ibG9ja3Nb
YmxvY2tdKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMo
KQorICAgIHsKKyAgICAgICAgU2NvcmVCb2FyZCBzY29yZUJvYXJkKG1fZ3JhcGgsIG1fZ3JhcGgu
bV9wcmVzZXJ2ZWRWYXJzKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVz
ID0gbV9ncmFwaC5tX2Jsb2Nrcy5sYXN0KCktPmVuZDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplRXhjbHVkaW5nUGhpTm9kZXM7ICsraSkgeworICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbaV07CisgICAgICAgIAorICAgICAgICAgICAgaWYgKCFub2RlLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAg
ICAgICAgLy8gR2V0TG9jYWwgbm9kZXMgYXJlIGVmZmVjdGl2ZWx5IHBoaSBub2RlcyBpbiB0aGUg
Z3JhcGgsIHJlZmVyZW5jaW5nCisgICAgICAgICAgICAvLyByZXN1bHRzIGZyb20gcHJpb3IgYmxv
Y2tzLgorICAgICAgICAgICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAg
ICAgICAvLyBGaXJzdCwgY2FsbCB1c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGls
ZHJlbiwgdGhlbgorICAgICAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVy
IGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBvcmRl
ciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQorICAgICAgICAg
ICAgICAgIC8vIFZpcnR1YWxSZWdpc3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2Vk
IGZvciBub2RlLgorICAgICAgICAgICAgICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3Mp
IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmly
c3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJl
bigpOyBjaGlsZElkeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uo
bV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQyKCkpOworICAg
ICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMygpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbm9kZS5oYXNSZXN1
bHQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbm9kZS5zZXRW
aXJ0dWFsUmVnaXN0ZXIoc2NvcmVCb2FyZC5hbGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIC8vICdt
dXN0R2VuZXJhdGUnIG5vZGVzIGhhdmUgdGhlaXIgdXNlQ291bnQgYXJ0aWZpY2lhbGx5IGVsZXZh
dGVkLAorICAgICAgICAgICAgLy8gY2FsbCB1c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCisg
ICAgICAgICAgICBpZiAobm9kZS5tdXN0R2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBzY29y
ZUJvYXJkLnVzZShpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vICdtX251bUNhbGxlZVJlZ2lz
dGVycycgaXMgdGhlIG51bWJlciBvZiBsb2NhbHMgYW5kIHRlbXBvcmFyaWVzIGFsbG9jYXRlZAor
ICAgICAgICAvLyBmb3IgdGhlIGZ1bmN0aW9uIChhbmQgY2hlY2tlZCBmb3Igb24gZW50cnkpLiBT
aW5jZSB3ZSBwZXJmb3JtIGEgbmV3IGFuZAorICAgICAgICAvLyBkaWZmZXJlbnQgYWxsb2NhdGlv
biBvZiB0ZW1wb3JhcmllcywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBiZSByZXF1aXJlZC4KKyAg
ICAgICAgdW5zaWduZWQgY2FsbGVlUmVnaXN0ZXJzID0gc2NvcmVCb2FyZC5hbGxvY2F0ZWRDb3Vu
dCgpICsgbV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMgKyBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHM7
CisgICAgICAgIGlmICgodW5zaWduZWQpbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
IDwgY2FsbGVlUmVnaXN0ZXJzKQorICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOworICAgIH0KKyAgICAKICAgICBHcmFwaCYgbV9n
cmFwaDsKICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKICAgICBDb2RlQmxvY2sqIG1f
Y29kZUJsb2NrOwogICAgIENvZGVCbG9jayogbV9wcm9maWxlZEJsb2NrOwogICAgIAorICAgIE5v
ZGVJbmRleCBtX3N0YXJ0OwogICAgIE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKICAgICAKICAg
ICBWZWN0b3I8UHJlZGljdGVkVHlwZSwgMTY+IG1fcHJlZGljdGlvbnM7CkBAIC00MjcsNiArODQy
LDggQEAgcHJpdmF0ZToKICNlbmRpZgogICAgIAogICAgIGJvb2wgbV9jaGFuZ2VkOworCisgICAg
VmVjdG9yPE5vZGVJbmRleCwgMTY+IG1fcmVwbGFjZW1lbnRzOwogfTsKIAogdm9pZCBwcm9wYWdh
dGUoR3JhcGgmIGdyYXBoLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29k
ZUJsb2NrKQpAQCAtNDM4LDkgKzg1NSw2IEBAIHZvaWQgcHJvcGFnYXRlKEdyYXBoJiBncmFwaCwg
SlNHbG9iYWxEYXQKICAgICBQcm9wYWdhdG9yIHByb3BhZ2F0b3IoZ3JhcGgsICpnbG9iYWxEYXRh
LCBjb2RlQmxvY2ssIHByb2ZpbGVkQmxvY2spOwogICAgIHByb3BhZ2F0b3IuZml4cG9pbnQoKTsK
ICAgICAKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgZ3JhcGguZHVtcChjb2Rl
QmxvY2spOwotI2VuZGlmCiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiA5NTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU3LDE2ICsxMTU3LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
R2V0QnlWYWw6IHsKLSAgICAgICAgTm9kZUluZGV4IGFsaWFzID0gbm9kZS5jaGlsZDMoKTsKLSAg
ICAgICAgaWYgKGFsaWFzICE9IE5vTm9kZSkgewotICAgICAgICAgICAgLy8gRklYTUU6IHJlc3Vs
dCBzaG91bGQgYmUgYWJsZSB0byByZXVzZSBjaGlsZDEsIGNoaWxkMi4gU2hvdWxkIGhhdmUgYW4g
J1VudXNlZE9wZXJhbmQnIHR5cGUuCi0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhbGlhc2Vk
VmFsdWUodGhpcywgbm9kZS5jaGlsZDMoKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIGFsaWFzZWRWYWx1ZSk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKGFsaWFzZWRW
YWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotCisgICAgICAgIEFTU0VSVChub2RlLmNoaWxkMygpID09IE5vTm9kZSk7CiAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CkBAIC0xNTk2LDYgKzE1ODcsMTEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
ICAgICB9CisgICAgICAgIAorICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgLy8gVGhpcyBpcyBh
IG5vLW9wLgorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAKICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11c3RHZW5l
cmF0ZSgpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107776</attachid>
            <date>2011-09-17 15:42:26 -0700</date>
            <delta_ts>2011-09-17 16:31:30 -0700</delta_ts>
            <desc>work in progress - fixed crypto slow-down</desc>
            <filename>cse_patch_4.diff</filename>
            <type>text/plain</type>
            <size>45591</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUzODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAK
KzIwMTEtMDktMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGhhdmUgZnVsbCBibG9jay1sb2NhbCBDU0UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzE2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgYmxvY2st
bG9jYWwgQ1NFIHRvIHRoZSBERkcuIENTRSBydW5zIGluIHRoZSBwcm9wYWdhdG9yIGp1c3QgYWZ0
ZXIKKyAgICAgICAgdHlwZSBwcm9wYWdhdGlvbi4gSXQgaXMgcGFydCBvZiB0aGUgcHJvcGFnYXRv
ciBpdHNlbGYgYmVjYXVzZSBpdCBuZWVkcyB0bworICAgICAgICB1c2UgdGhlIHByb3BhZ2F0b3In
cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG9wZXJhdGlvbnMK
KyAgICAgICAgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLiBCZWNhdXNlIGl0IGNoYW5nZXMgdGhlIGxp
dmUtcmFuZ2VzIG9mIG5vZGVzLCB0aGUKKyAgICAgICAgdmlydHVhbCByZWdpc3RlciBhbGxvY2F0
b3IgaGFkIHRvIGJlIG1vdmVkIGludG8gdGhlIHByb3BhZ2F0b3Igc28gdGhhdCBpdAorICAgICAg
ICBydW5zIGFmdGVyIENTRS4gVG8gZW5zdXJlIHRoYXQgdGhlIGJhY2stZW5kIGtub3dzIHRvIGtl
ZXAgdGhlIGlucHV0cyB0bworICAgICAgICBhbnkgZWxpbWluYXRlZCBub2RlIGFsaXZlIGZvciBP
U1IsIGEgbmV3IG5vZGUgdHlwZSwgUGhhbnRvbSwgd2FzIGludHJvZHVjZWQuCisgICAgICAgIEl0
IGlzIGEgbm8tb3AgYnV0IHByb2xvbmdlcyB0aGUgbGl2ZS1yYW5nZSBvZiBpdHMgaW5wdXRzLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhbiA4MCUgc3BlZWQtdXAgb24gaW1hZ2luZy1nYXVz
c2lhbi1ibHVyLCBhbmQgYSAxMCUgc3BlZWQtdXAgb24KKyAgICAgICAgS3Jha2VuLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuIFRoZXJlIGFyZSBw
cm9iYWJseSBzdGlsbCBzb21lIGJpZyBidWdzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQWxpYXNUcmFja2Vy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpNZXRob2RDaGVja0RhdGE6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6Ok1ldGhvZENoZWNrRGF0YTo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWaXJ0dWFsUmVn
aXN0ZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldFJlZkNvdW50KToKKyAgICAgICAg
KiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
UHJvcGFnYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OlByb3BhZ2F0b3I6OmNhbm9uaWNhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6Y29tcHV0ZVN0YXJ0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6OnN0YXJ0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnB1cmVD
U0UpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6Omdsb2JhbFZhckxvYWRFbGltaW5h
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0QnlWYWxMb2FkRWxpbWlu
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldE1ldGhvZExvYWRFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybVN1YnN0aXR1
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6c2V0UmVwbGFjZW1lbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtQmxvY2tDU0UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlByb3BhZ2F0b3I6OmxvY2FsQ1NFKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
OjphbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpERkc6OnByb3BhZ2F0
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTEtMDktMTYgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVG91Y2ggUGxhdGZvcm0uaCBpbiB0aGUg
aG9wZSB0byBmaXggU25vd0xlb3BhcmQgSW50ZWwgUmVsZWFzZSAoV2ViS2l0MiBUZXN0cykuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTUzNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMzU5LDcgKzM1OSw2IEBACiAJCTg2RUM5REQzMTMyOERGODIw
MDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1
bGF0aXZlSklULmggKi87IH07CiAJCTg2RUNBM0VBMTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDQTNF
OTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovOyB9OwogCQk4NkVDQTNGQTEzMkRGMjVB
MDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9h
cmQuaCAqLzsgfTsKLQkJODZFQ0E0RjExMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0FsaWFzVHJhY2tl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQ0E0
RjAxMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0FsaWFzVHJhY2tlci5oICovOyB9OwogCQk4NkYzODg1
OTEyMTEzMENBMDA3QTdDRTMgLyogQXRvbWljU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGMzg4NTgxMjExMzBDQTAwN0E3Q0UzIC8q
IEF0b21pY1N0cmluZ0hhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGlj
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDIx
M0UzQjEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgKi87IH07CiAJCTkw
MjEzRTNFMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDIxM0UzQzEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xMTExLDcgKzExMTAsNiBAQAogCQk4NkVDOURDMzEzMjhERjgy
MDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHU3BlY3VsYXRpdmVKSVQuaDsgcGF0aCA9IGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJB
RDcgLyogREZHTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2Rl
Lmg7IHBhdGggPSBkZmcvREZHTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTY29yZUJvYXJkLmg7IHBhdGggPSBkZmcvREZHU2NvcmVC
b2FyZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkVDQTRGMDEzMkVBQTZEMDAy
QjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0FsaWFzVHJhY2tlci5oOyBwYXRoID0gZGZnL0RGR0FsaWFzVHJhY2tlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkYzODg1ODEyMTEzMENBMDA3QTdDRTMgLyogQXRv
bWljU3RyaW5nSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBdG9taWNT
dHJpbmdIYXNoLmg7IHBhdGggPSB0ZXh0L0F0b21pY1N0cmluZ0hhc2guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTAyMTNFM0IxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRp
c3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5U3Rh
dGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkwMjEzRTNDMTIzQTQw
QzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1lbW9yeVN0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyMzUsNyArMjIzMyw2IEBACiAJCQkJMEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERG
R1Byb3BhZ2F0b3IuY3BwICovLAogCQkJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdE
cml2ZXIuaCAqLywKIAkJCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCAqLywKLQkJCQk4NkVDQTRGMDEzMkVBQTZEMDAyQjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmgg
Ki8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNw
cCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIu
aCAqLywKIAkJCQk4NkFFNkM0QjEzNkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oICovLApA
QCAtMjQ5Myw3ICsyNDkwLDYgQEAKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVi
dWdnZXJDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzVGQUYyMTJEMjZBQ0UwMDND
MDgzQiAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQzBFMTZGNUNEMDBC
MzQ0NjAgLyogRGVxdWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2RUNBNEYxMTMyRUFBNkQwMDJC
MkFENyAvKiBERkdBbGlhc1RyYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM1MTMy
OERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOURDODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tl
ci5oCShyZXZpc2lvbiA5NTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxp
YXNUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdBbGlhc1RyYWNr
ZXJfaAotI2RlZmluZSBERkdBbGlhc1RyYWNrZXJfaAotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0K
LSNpbmNsdWRlIDxkZmcvREZHR3JhcGguaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8gPT09IEFsaWFzVHJhY2tlciA9PT0K
LS8vCi0vLyBUaGlzIGNsYXNzIGlkIHVzZWQgdG8gZGV0ZWN0IGFsaWFzaW5nIHByb3BlcnR5IGFj
Y2Vzc2VzLCB3aGljaCB3ZSBtYXkKLS8vIGJlIGFibGUgdG8gc3BlY3VsYXRpdmVseSBvcHRpbWl6
ZSAoZm9yIGV4YW1wbGUgcmVtb3ZpbmcgcmVkdW5kYW50IGxvYWRzCi0vLyB3aGVyZSB3ZSBrbm93
IGEgZ2V0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCwgb3Igb3B0aW1pemluZyBwdXRzIHRvIGFycmF5
cwotLy8gd2hlcmUgd2Uga25vdyB0aGUgdmFsdWUgYmVpbmcgd3JpdHRlbiB0byBpbiB3aXRoaW4g
bGVuZ3RoIGFuZCBpcyBub3QgYQotLy8gaG9sZSB2YWx1ZSkuIEluIHRpbWUsIHRoaXMgc2hvdWxk
IGJlIG1vcmUgdGhhbiBhIDEtZGVlcCBidWZmZXIhCi1jbGFzcyBBbGlhc1RyYWNrZXIgewotcHVi
bGljOgotICAgIEFsaWFzVHJhY2tlcihHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDogbV9ncmFwaChn
cmFwaCkKLSAgICAgICAgLCBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwoTm9Ob2RlKQotICAgIHsK
LSAgICB9Ci0KLSAgICBOb2RlSW5kZXggbG9va3VwR2V0QnlWYWwoTm9kZUluZGV4IGJhc2UsIE5v
ZGVJbmRleCBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICAgIC8vIFRyeSB0byBkZXRlY3Qgc2l0dWF0
aW9ucyB3aGVyZSBhIEdldEJ5VmFsIGZvbGxvd3MgYW5vdGhlciBHZXRCeVZhbCB0byB0aGUgc2Ft
ZQotICAgICAgICAvLyBwcm9wZXJ0eTsgaW4gdGhlc2UgY2FzZXMsIHdlIG1heSBiZSBhYmxlIHRv
IG9taXQgdGhlIHN1YnNlcXVlbnQgZ2V0IG9uIHRoZQotICAgICAgICAvLyBzcGVjdWxhdGl2ZSBw
YXRoLCB3aGVyZSB3ZSBrbm93IGNvbmRpdGlvbnMgaG9sZCB0byBtYWtlIHRoaXMgc2FmZSAoZm9y
IGV4YW1wbGUsCi0gICAgICAgIC8vIG9uIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHdlIHdpbGwgbm90
IGhhdmUgYWxsb3dlZCBnZXR0ZXIgYWNjZXNzKS4KLSAgICAgICAgaWYgKG1fY2FuZGlkYXRlQWxp
YXNHZXRCeVZhbCAhPSBOb05vZGUpIHsKLSAgICAgICAgICAgIE5vZGUmIHBvc3NpYmxlQWxpYXMg
PSBtX2dyYXBoW21fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbF07Ci0gICAgICAgICAgICBBU1NFUlQo
cG9zc2libGVBbGlhcy5vcCA9PSBHZXRCeVZhbCk7Ci0gICAgICAgICAgICAvLyBUaGlzIGNoZWNr
IGVuc3VyZXMgdGhlIGFjY2Vzc2VzIGFsaWFzLCBwcm92aWRlZCB0aGF0IHRoZSBzdWJzY3JpcHQg
aXMgYW4KLSAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXggKHRoaXMgaXMgZ29vZCBlbm91Z2g7
IHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHdpbGwgb25seSBnZW5lcmF0ZQotICAgICAgICAgICAgLy8g
b3B0aW1pemVkIGFjY2Vzc2VzIHRvIGhhbmRsZSBpbnRlZ2VyIHN1YnNjcmlwdHMpLgotICAgICAg
ICAgICAgaWYgKHBvc3NpYmxlQWxpYXMuY2hpbGQxKCkgPT0gYmFzZSAmJiBlcXVhbElnbm9yaW5n
TGF0ZXJOdW1lcmljQ29udmVyc2lvbihwb3NzaWJsZUFsaWFzLmNoaWxkMigpLCBwcm9wZXJ0eSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbDsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgIH0KLQotICAgIHZvaWQgcmVjb3JkR2V0
QnlWYWwoTm9kZUluZGV4IGdldEJ5VmFsKQotICAgIHsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlh
c0dldEJ5VmFsID0gZ2V0QnlWYWw7Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRQdXRCeVZhbChO
b2RlSW5kZXggcHV0QnlWYWwpCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKHB1dEJ5VmFs
LCBtX2dyYXBoW3B1dEJ5VmFsXS5vcCA9PSBQdXRCeVZhbCB8fCBtX2dyYXBoW3B1dEJ5VmFsXS5v
cCA9PSBQdXRCeVZhbEFsaWFzKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0g
Tm9Ob2RlOwotICAgIH0KLQotICAgIHZvaWQgcmVjb3JkR2V0QnlJZChOb2RlSW5kZXggZ2V0QnlJ
ZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZ2V0QnlJZCwgbV9ncmFwaFtnZXRCeUlk
XS5vcCA9PSBHZXRCeUlkKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9O
b2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlY29yZEdldE1ldGhvZChOb2RlSW5kZXggZ2V0
TWV0aG9kKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChnZXRNZXRob2QsIG1fZ3JhcGhb
Z2V0TWV0aG9kXS5vcCA9PSBHZXRNZXRob2QgfHwgbV9ncmFwaFtnZXRNZXRob2RdLm9wID09IENo
ZWNrTWV0aG9kKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOwot
ICAgIH0KLQotICAgIHZvaWQgcmVjb3JkUHV0QnlJZChOb2RlSW5kZXggcHV0QnlJZCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocHV0QnlJZCwgbV9ncmFwaFtwdXRCeUlkXS5vcCA9PSBQ
dXRCeUlkKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOwotICAg
IH0KLQotICAgIHZvaWQgcmVjb3JkUHV0QnlJZERpcmVjdChOb2RlSW5kZXggcHV0QnlWYWwpCi0g
ICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKHB1dEJ5VmFsLCBtX2dyYXBoW3B1dEJ5VmFsXS5v
cCA9PSBQdXRCeUlkRGlyZWN0KTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0g
Tm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlY29yZENhbGwoTm9kZUluZGV4IGNhbGwp
Ci0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhbGwsIG1fZ3JhcGhbY2FsbF0ub3AgPT0g
Q2FsbCk7Ci0gICAgICAgIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbCA9IE5vTm9kZTsKLSAgICB9
Ci0KLSAgICB2b2lkIHJlY29yZENvbnN0cnVjdChOb2RlSW5kZXggY29uc3RydWN0KQotICAgIHsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChjb25zdHJ1Y3QsIG1fZ3JhcGhbY29uc3RydWN0XS5vcCA9
PSBDb25zdHJ1Y3QpOwotICAgICAgICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7
Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRSZXNvbHZlKE5vZGVJbmRleCByZXNvbHZlKQotICAg
IHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlLCBtX2dyYXBoW3Jlc29sdmVdLm9wID09
IFJlc29sdmUKLSAgICAgICAgICAgIHx8IG1fZ3JhcGhbcmVzb2x2ZV0ub3AgPT0gUmVzb2x2ZUJh
c2UKLSAgICAgICAgICAgIHx8IG1fZ3JhcGhbcmVzb2x2ZV0ub3AgPT0gUmVzb2x2ZUJhc2VTdHJp
Y3RQdXQpOwotICAgICAgICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBmb3IgYXJndW1l
bnRzOgotICAgIC8vICAgLSAoWCwgWCkKLSAgICAvLyAgIC0gKFgsIFZhbHVlVG9OdW1iZXIoWCkp
Ci0gICAgLy8gICAtIChYLCBWYWx1ZVRvSW50MzIoWCkpCi0gICAgLy8gICAtIChYLCBOdW1iZXJU
b0ludDMyKFgpKQotICAgIGJvb2wgZXF1YWxJZ25vcmluZ0xhdGVyTnVtZXJpY0NvbnZlcnNpb24o
Tm9kZUluZGV4IG9wMSwgTm9kZUluZGV4IG9wMikKLSAgICB7Ci0gICAgICAgIGlmIChvcDEgPT0g
b3AyKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIE5vZGUmIG5vZGUyID0gbV9n
cmFwaFtvcDJdOwotICAgICAgICByZXR1cm4gKG5vZGUyLm9wID09IFZhbHVlVG9OdW1iZXIgfHwg
bm9kZTIub3AgPT0gVmFsdWVUb0ludDMyKSAmJiBvcDEgPT0gbm9kZTIuY2hpbGQxKCk7Ci0gICAg
fQotCi0gICAgLy8gVGhlIGdyYXBoLCB0byBsb29rIHVwIHBvdGVudGlhbGx5IGFsaWFzaW5nIG5v
ZGVzLgotICAgIEdyYXBoJiBtX2dyYXBoOwotICAgIC8vIEN1cnJlbnRseSBhIDEtZGVlcCBidWZm
ZXIhCi0gICAgTm9kZUluZGV4IG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbDsKLX07Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAot
I2luY2x1ZGUgIkRGR0FsaWFzVHJhY2tlci5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5o
IgotI2luY2x1ZGUgIkRGR1Njb3JlQm9hcmQuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC02MzYsOCArNjM0LDYgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgbV9jb25zdGFudHNb
aV0gPSBDb25zdGFudFJlY29yZCgpOwogICAgIH0KIAotICAgIEFsaWFzVHJhY2tlciBhbGlhc2Vz
KG1fZ3JhcGgpOwotCiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9iYWxEYXRh
LT5pbnRlcnByZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBibG9ja0JlZ2lu
ID0gbV9jdXJyZW50SW5kZXg7CkBAIC05NTAsMTAgKzk0Niw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RBcnJheShi
YXNlKTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CiAKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygw
KSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSwgcHJvcGVydHksIGFsaWFzZXMubG9va3VwR2V0
QnlWYWwoYmFzZSwgcHJvcGVydHkpKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9
IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFz
ZSwgcHJvcGVydHkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIGdldEJ5VmFsKTsKICAgICAgICAgICAgIHN0cm9uZ2x5UHJlZGljdChnZXRCeVZhbCk7
Ci0gICAgICAgICAgICBhbGlhc2VzLnJlY29yZEdldEJ5VmFsKGdldEJ5VmFsKTsKIAogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CiAgICAgICAgIH0KQEAgLTk2NSw5ICs5
NjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICB3ZWFrbHlQcmVkaWN0QXJyYXkoYmFzZSk7CiAgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0
SW50MzIocHJvcGVydHkpOwogCi0gICAgICAgICAgICBOb2RlSW5kZXggYWxpYXNlZEdldCA9IGFs
aWFzZXMubG9va3VwR2V0QnlWYWwoYmFzZSwgcHJvcGVydHkpOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IHB1dEJ5VmFsID0gYWRkVG9HcmFwaChhbGlhc2VkR2V0ICE9IE5vTm9kZSA/IFB1dEJ5VmFs
QWxpYXMgOiBQdXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKLSAgICAgICAgICAgIGFs
aWFzZXMucmVjb3JkUHV0QnlWYWwocHV0QnlWYWwpOworICAgICAgICAgICAgYWRkVG9HcmFwaChQ
dXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKIAogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfcHV0X2J5X3ZhbCk7CiAgICAgICAgIH0KQEAgLTk5OCwxMyArOTkxLDEwIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBtZXRo
b2RDaGVja0RhdGEuZnVuY3Rpb24gPSBtZXRob2RDYWxsLmNhY2hlZEZ1bmN0aW9uLmdldCgpOwog
ICAgICAgICAgICAgICAgIG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUgPSBtZXRob2RDYWxsLmNh
Y2hlZFByb3RvdHlwZS5nZXQoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbWV0aG9kQ2hl
Y2tEYXRhLmFwcGVuZChtZXRob2RDaGVja0RhdGEpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGFsaWFzZXMucmVjb3JkR2V0TWV0aG9kKGNoZWNrTWV0aG9kKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdldE1ldGhvZCA9IGFkZFRv
R3JhcGgoR2V0TWV0aG9kLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhQcmVkaWN0Tm9uZSks
IGJhc2UpOwogICAgICAgICAgICAgICAgIHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IGdldE1ldGhvZCk7CiAgICAgICAgICAgICAgICAgc3Ryb25nbHlQcmVkaWN0KGdldE1ldGhvZCk7
Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRNZXRob2QoZ2V0TWV0aG9kKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggKz0g
T1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2spICsgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlf
aWQpOwpAQCAtMTAxOCw3ICsxMDA4LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdl
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSk7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlJZCk7
CiAgICAgICAgICAgICBzdHJvbmdseVByZWRpY3QoZ2V0QnlJZCk7Ci0gICAgICAgICAgICBhbGlh
c2VzLnJlY29yZEdldEJ5SWQoZ2V0QnlJZCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2dldF9ieV9pZCk7CiAgICAgICAgIH0KQEAgLTEwMjksMTMgKzEwMTgsMTAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgaWRl
bnRpZmllciA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBi
b29sIGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAg
ICAgIGlmIChkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHV0QnlJZERpcmVj
dCA9IGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNlLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRQdXRCeUlkRGlyZWN0KHB1dEJ5
SWREaXJlY3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggcHV0QnlJZCA9IGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNl
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRQdXRCeUlkKHB1dEJ5SWQp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpcmVjdCkKKyAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgYmFzZSwgdmFs
dWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJ
ZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNlLCB2YWx1ZSk7CiAKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX3B1dF9ieV9pZCk7CiAgICAgICAgIH0KQEAgLTEyNTIsMTQgKzEyMzgsMTIgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IGNh
bGwgPSBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwpOwotICAg
ICAgICAgICAgYWxpYXNlcy5yZWNvcmRDYWxsKGNhbGwpOworICAgICAgICAgICAgYWRkQ2FsbChp
bnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBDYWxsKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2NhbGwpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBv
cF9jb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25zdHJ1Y3QgPSBhZGRDYWxs
KGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbnN0cnVjdCk7Ci0gICAgICAgICAg
ICBhbGlhc2VzLnJlY29yZENvbnN0cnVjdChjb25zdHJ1Y3QpOworICAgICAgICAgICAgYWRkQ2Fs
bChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBDb25zdHJ1Y3QpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfY29uc3RydWN0KTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC0xMjcxLDcgKzEyNTUsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAKICAgICAgICAgICAgIE5vZGVJbmRleCByZXNvbHZlID0gYWRkVG9HcmFwaChSZXNvbHZl
LCBPcEluZm8oaWRlbnRpZmllcikpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIHJlc29sdmUpOwotICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRSZXNv
bHZlKHJlc29sdmUpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9yZXNvbHZlKTsKICAg
ICAgICAgfQpAQCAtMTI4MSw3ICsxMjY0LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogCiAgICAgICAgICAgICBOb2RlSW5kZXggcmVzb2x2ZSA9IGFkZFRvR3Jh
cGgoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCA/IFJlc29sdmVCYXNlU3RyaWN0UHV0
IDogUmVzb2x2ZUJhc2UsIE9wSW5mbyhpZGVudGlmaWVyKSk7CiAgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzb2x2ZSk7Ci0gICAgICAgICAgICBhbGlh
c2VzLnJlY29yZFJlc29sdmUocmVzb2x2ZSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3Jlc29sdmVfYmFzZSk7CiAgICAgICAgIH0KQEAgLTEzODUsNTEgKzEzNjcsNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpzZXR1cFByZWRlY2Vzc29ycygpCiAgICAgfQogfQogCi12b2lkIEJ5dGVD
b2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMoKQotewotICAgIFNjb3JlQm9hcmQg
c2NvcmVCb2FyZChtX2dyYXBoLCBtX3ByZXNlcnZlZFZhcnMpOwotICAgIHVuc2lnbmVkIHNpemVF
eGNsdWRpbmdQaGlOb2RlcyA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5lbmQ7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplRXhjbHVkaW5nUGhpTm9kZXM7ICsraSkgewotICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtpXTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAg
ICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVzIGluIHRoZSBncmFw
aCwgcmVmZXJlbmNpbmcKLSAgICAgICAgLy8gcmVzdWx0cyBmcm9tIHByaW9yIGJsb2Nrcy4KLSAg
ICAgICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKLSAgICAgICAgICAgIC8vIEZpcnN0LCBj
YWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCi0gICAg
ICAgICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBk
byBzbyBpbiB0aGlzCi0gICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMg
b24gaXRzIGxhc3QgdXNlLCBhbmQgYQotICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlz
IGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICBpZiAo
bm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGls
ZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAgICAgICAg
ICBzY29yZUJvYXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBub2RlLnNldFZpcnR1YWxSZWdpc3RlcihzY29y
ZUJvYXJkLmFsbG9jYXRlKCkpOwotICAgICAgICAvLyAnbXVzdEdlbmVyYXRlJyBub2RlcyBoYXZl
IHRoZWlyIHVzZUNvdW50IGFydGlmaWNpYWxseSBlbGV2YXRlZCwKLSAgICAgICAgLy8gY2FsbCB1
c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCi0gICAgICAgIGlmIChub2RlLm11c3RHZW5lcmF0
ZSgpKQotICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UoaSk7Ci0gICAgfQotCi0gICAgLy8gJ21f
bnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxvY2FscyBhbmQgdGVtcG9yYXJp
ZXMgYWxsb2NhdGVkCi0gICAgLy8gZm9yIHRoZSBmdW5jdGlvbiAoYW5kIGNoZWNrZWQgZm9yIG9u
IGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBhbmQKLSAgICAvLyBkaWZmZXJlbnQgYWxs
b2NhdGlvbiBvZiB0ZW1wb3JhcmllcywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBiZSByZXF1aXJl
ZC4KLSAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMgPSBzY29yZUJvYXJkLmFsbG9jYXRlZENv
dW50KCkgKyBtX3ByZXNlcnZlZFZhcnMgKyBtX3BhcmFtZXRlclNsb3RzOwotICAgIGlmICgodW5z
aWduZWQpbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIDwgY2FsbGVlUmVnaXN0ZXJz
KQotICAgICAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgPSBjYWxsZWVSZWdp
c3RlcnM7Ci19Ci0KIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKIHsKICAgICAvLyBTZXQg
ZHVyaW5nIGNvbnN0cnVjdGlvbi4KQEAgLTE0NjEsOCArMTM5OCw5IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlKCkKICAgICBzZXR1cFByZWRlY2Vzc29ycygpOwogICAgIHByb2Nlc3NQaGlT
dGFjazxMb2NhbFBoaVN0YWNrPigpOwogICAgIHByb2Nlc3NQaGlTdGFjazxBcmd1bWVudFBoaVN0
YWNrPigpOwotCi0gICAgYWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJzKCk7CisgICAgCisgICAgbV9n
cmFwaC5tX3ByZXNlcnZlZFZhcnMgPSBtX3ByZXNlcnZlZFZhcnM7CisgICAgbV9ncmFwaC5tX3Bh
cmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIAogI2lmIEVOQUJMRShERkdfREVCVUdf
VkVSQk9TRSkKICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk1MzUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3
LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgIC8vICAg
ICAgICAgaWQjICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGFuIGlkZW50aWZpZXIg
eyBpZiBjb2RlQmxvY2sgaXMgcGFzc2VkIHRvIGR1bXAoKSwgdGhlIHN0cmluZyByZXByZXNlbnRh
dGlvbiBpcyBkaXNwbGF5ZWQgfS4KICAgICAvLyAgICAgICAgIHZhciMgLSB0aGUgaW5kZXggb2Yg
YSB2YXIgb24gdGhlIGdsb2JhbCBvYmplY3QsIHVzZWQgYnkgR2V0R2xvYmFsVmFyL1B1dEdsb2Jh
bFZhciBvcGVyYXRpb25zLgogICAgIHByaW50ZigiJSA0ZDolczwlYyV1OiIsIChpbnQpbm9kZUlu
ZGV4LCBza2lwcGVkID8gIiAgc2tpcHBlZCAgIiA6ICIgICAgICAgICAgICIsIG11c3RHZW5lcmF0
ZSA/ICchJyA6ICcgJywgcmVmQ291bnQpOwotICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmICFz
a2lwcGVkKQorICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmICFza2lwcGVkICYmIG5vZGUuaGFz
VmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgIHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICBlbHNlCiAgICAgICAgIHByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gOTUzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDI0IEBA
IHN0cnVjdCBNZXRob2RDaGVja0RhdGEgewogICAgIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0
dXJlOwogICAgIEpTT2JqZWN0KiBmdW5jdGlvbjsKICAgICBKU09iamVjdCogcHJvdG90eXBlOwor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNZXRob2RDaGVja0RhdGEmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBvdGhlci5zdHJ1Y3R1cmUpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChwcm90b3R5cGVTdHJ1Y3R1cmUg
IT0gb3RoZXIucHJvdG90eXBlU3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoZnVuY3Rpb24gIT0gb3RoZXIuZnVuY3Rpb24pCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChwcm90b3R5cGUgIT0gb3RoZXIucHJvdG90eXBlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1ldGhvZENoZWNrRGF0YSYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQogfTsKIAog
dHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29yTGlzdDsKQEAgLTI4MSw2
ICsyOTksOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBt
X2Jsb2NrczsKICAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKICAg
ICBWZWN0b3I8TWV0aG9kQ2hlY2tEYXRhPiBtX21ldGhvZENoZWNrRGF0YTsKKyAgICB1bnNpZ25l
ZCBtX3ByZXNlcnZlZFZhcnM7CisgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKIHByaXZh
dGU6CiAgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudE5vZGUoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gOTUzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDE0ICsxMDcsMTYgQEAgcHJpdmF0ZToK
IAogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51bSAoYmVsb3cpIGFyZSBjb21wb3NlZCBv
ZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkgbm9uZSkKIC8vIGFuZCBzb21lIGFkZGl0
aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2VuZXJhdGUsIGlzIGNvbnN0YW50LCBldGMp
LgotI2RlZmluZSBOb2RlSWRNYXNrICAgICAgICAgIDB4RkZGCi0jZGVmaW5lIE5vZGVSZXN1bHRN
YXNrICAgICAweEYwMDAKLSNkZWZpbmUgTm9kZU11c3RHZW5lcmF0ZSAgMHgxMDAwMCAvLyBzZXQg
b24gbm9kZXMgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cywgYW5kIG1heSBub3QgdHJpdmlhbGx5IGJl
IHJlbW92ZWQgYnkgRENFLgotI2RlZmluZSBOb2RlSXNDb25zdGFudCAgICAweDIwMDAwCi0jZGVm
aW5lIE5vZGVJc0p1bXAgICAgICAgIDB4NDAwMDAKLSNkZWZpbmUgTm9kZUlzQnJhbmNoICAgICAg
MHg4MDAwMAotI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgIDB4MTAwMDAwCi0jZGVmaW5lIE5vZGVI
YXNWYXJBcmdzICAgMHgyMDAwMDAKKyNkZWZpbmUgTm9kZUlkTWFzayAgICAgICAgICAgMHhGRkYK
KyNkZWZpbmUgTm9kZVJlc3VsdE1hc2sgICAgICAweEYwMDAKKyNkZWZpbmUgTm9kZU11c3RHZW5l
cmF0ZSAgIDB4MTAwMDAgLy8gc2V0IG9uIG5vZGVzIHRoYXQgaGF2ZSBzaWRlIGVmZmVjdHMsIGFu
ZCBtYXkgbm90IHRyaXZpYWxseSBiZSByZW1vdmVkIGJ5IERDRS4KKyNkZWZpbmUgTm9kZUlzQ29u
c3RhbnQgICAgIDB4MjAwMDAKKyNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgIDB4NDAwMDAKKyNk
ZWZpbmUgTm9kZUlzQnJhbmNoICAgICAgIDB4ODAwMDAKKyNkZWZpbmUgTm9kZUlzVGVybWluYWwg
ICAgMHgxMDAwMDAKKyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAgMHgyMDAwMDAKKyNkZWZpbmUg
Tm9kZUNsb2JiZXJzV29ybGQgMHg0MDAwMDAKKyNkZWZpbmUgTm9kZU1pZ2h0Q2xvYmJlciAgMHg4
MDAwMDAKIAogLy8gVGhlc2UgdmFsdWVzIHJlY29yZCB0aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG5v
ZGUgKGFzIGNoZWNrZWQgYnkgTm9kZVJlc3VsdE1hc2ssIGFib3ZlKSwgMCBmb3Igbm8gcmVzdWx0
LgogI2RlZmluZSBOb2RlUmVzdWx0SlMgICAgICAweDEwMDAKQEAgLTEzMSw2ICsxMzMsNyBAQCBw
cml2YXRlOgogICAgIC8qIE5vZGVzIGZvciBsb2NhbCB2YXJpYWJsZSBhY2Nlc3MuICovXAogICAg
IG1hY3JvKEdldExvY2FsLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgMCkg
XAorICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQaGks
IDApIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGJpdHdpc2Ugb3BlcmF0aW9ucy4gKi9cCkBA
IC0xNTksNDUgKzE2Miw0NSBAQCBwcml2YXRlOgogICAgIG1hY3JvKFZhbHVlVG9Eb3VibGUsIE5v
ZGVSZXN1bHROdW1iZXIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIEFkZCBv
ZiB2YWx1ZXMgbWF5IGVpdGhlciBiZSBhcml0aG1ldGljLCBvciByZXN1bHQgaW4gc3RyaW5nIGNv
bmNhdGVuYXRpb24uICovXAotICAgIG1hY3JvKFZhbHVlQWRkLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFsdWVBZGQsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgXAogICAgIC8qIFByb3BlcnR5
IGFjY2Vzcy4gKi9cCiAgICAgLyogUHV0QnlWYWxBbGlhcyBpbmRpY2F0ZXMgYSAncHV0JyBhbGlh
c2VzIGEgcHJpb3Igd3JpdGUgdG8gdGhlIHNhbWUgcHJvcGVydHkuICovXAogICAgIC8qIFNpbmNl
IGEgcHV0IHRvICdsZW5ndGgnIG1heSBpbnZhbGlkYXRlIG9wdGltaXphdGlvbnMgaGVyZSwgKi9c
CiAgICAgLyogdGhpcyBtdXN0IGJlIHRoZSBkaXJlY3RseSBzdWJzZXF1ZW50IHByb3BlcnR5IHB1
dC4gKi9cCiAgICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKLSAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3Jv
KFB1dEJ5VmFsQWxpYXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhHZXRCeUlkLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oUHV0QnlJZCwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVy
c1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oR2V0QnlJZCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlJZCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlJ
ZERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFj
cm8oR2V0TWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oQ2hlY2tNZXRob2QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAg
ICBtYWNybyhQdXRHbG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQdXRH
bG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwK
ICAgICAvKiBOb2RlcyBmb3IgY29tcGFyaXNvbiBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNybyhD
b21wYXJlTGVzcywgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAg
bWFjcm8oQ29tcGFyZUxlc3NFcSwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCi0gICAgbWFjcm8oQ29tcGFyZUdyZWF0ZXIsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKENvbXBhcmVHcmVhdGVyRXEsIE5vZGVSZXN1bHRCb29s
ZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKENvbXBhcmVFcSwgTm9kZVJlc3Vs
dEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ29tcGFyZUxlc3MsIE5v
ZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwK
KyAgICBtYWNybyhDb21wYXJlTGVzc0VxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCisgICAgbWFjcm8oQ29tcGFyZUdyZWF0ZXIsIE5v
ZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwK
KyAgICBtYWNybyhDb21wYXJlR3JlYXRlckVxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCisgICAgbWFjcm8oQ29tcGFyZUVxLCBOb2Rl
UmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAg
ICAgbWFjcm8oQ29tcGFyZVN0cmljdEVxLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIFwKICAg
ICAvKiBDYWxscy4gKi9cCi0gICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oQ29uc3RydWN0LCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhD
YWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBO
b2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKENvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwK
ICAgICBcCiAgICAgLyogUmVzb2x2ZSBub2Rlcy4gKi9cCi0gICAgbWFjcm8oUmVzb2x2ZSwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFJlc29sdmVCYXNlLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oUmVzb2x2ZUJhc2VT
dHJpY3RQdXQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhS
ZXNvbHZlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29y
bGQpIFwKKyAgICBtYWNybyhSZXNvbHZlQmFzZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUmVzb2x2ZUJhc2VTdHJpY3RQ
dXQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkg
XAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNy
byhCcmVha3BvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQnJlYWtwb2ludCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oQ2hlY2tI
YXNJbnN0YW5jZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEluc3RhbmNlT2YsIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEJvb2xl
YW4pIFwKKyAgICBtYWNybyhMb2dpY2FsTm90LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNaWdo
dENsb2JiZXIpIFwKICAgICBcCiAgICAgLyogQmxvY2sgdGVybWluYWxzLiAqL1wKICAgICBtYWNy
byhKdW1wLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwgfCBOb2RlSXNKdW1wKSBc
CkBAIC00ODQsNiArNDg3LDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJ
bmZvMjsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNWaXJ0dWFsUmVnaXN0ZXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXI7CisgICAgfQorICAgIAogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKQEAgLTUxOSw2ICs1MjcsMTEgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbXVzdEdlbmVyYXRlKCkgPyBtX3JlZkNvdW50
IC0gMSA6IG1fcmVmQ291bnQ7CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0UmVmQ291bnQodW5z
aWduZWQgcmVmQ291bnQpCisgICAgeworICAgICAgICBtX3JlZkNvdW50ID0gcmVmQ291bnQ7Cisg
ICAgfQorICAgIAogICAgIE5vZGVJbmRleCBjaGlsZDEoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NTM1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5
LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5j
bHVkZSAiREZHU2NvcmVCb2FyZC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKQEAgLTU4LDkgKzU5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgbV91c2VzLnJlc2l6ZShtX2dy
YXBoLnNpemUoKSk7CiAgICAgICAgIG1fdmFyaWFibGVVc2VzLmluaXRpYWxpemVTaW1pbGFyVG8o
bV9ncmFwaC5wcmVkaWN0aW9ucygpKTsKICAgICAgICAgCisgICAgICAgIC8vIFJlcGxhY2VtZW50
cyBhcmUgdXNlZCB0byBpbXBsZW1lbnQgbG9jYWwgY29tbW9uIHN1YmV4cHJlc3Npb24gZWxpbWlu
YXRpb24uCisgICAgICAgIG1fcmVwbGFjZW1lbnRzLnJlc2l6ZShtX2dyYXBoLnNpemUoKSk7Cisg
ICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5zaXplKCk7
ICsraSkgewogICAgICAgICAgICAgbV9wcmVkaWN0aW9uc1tpXSA9IFByZWRpY3ROb25lOwogICAg
ICAgICAgICAgbV91c2VzW2ldID0gUHJlZGljdE5vbmU7CisgICAgICAgICAgICBtX3JlcGxhY2Vt
ZW50c1tpXSA9IE5vTm9kZTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTg3LDYgKzkyLDI1
IEBAIHB1YmxpYzoKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKICAgICAgICAgCiAgICAg
ICAgIGZpeHVwKCk7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAg
ICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciBwcm9wYWdhdGlvbiBmaXh1cDpcbiIpOworICAgICAg
ICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOworI2VuZGlmCisKKyAgICAgICAgbG9jYWxDU0Uo
KTsKKworI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJHcmFw
aCBhZnRlciBDU0U6XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKKyNl
bmRpZgorCisgICAgICAgIGFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycygpOworCisjaWYgRU5BQkxF
KERGR19ERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIHZpcnR1YWwg
cmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxv
Y2spOworI2VuZGlmCiAgICAgfQogICAgIAogcHJpdmF0ZToKQEAgLTMwMSw2ICszMjUsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1
c2UgaXQgZG9lc24ndCBkbyBhbnl0aGluZy4KKyAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00MTAsMTEgKzQz
OCw0MDQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBoW21fY29tcGls
ZUluZGV4XSk7CiAgICAgfQogICAgIAorICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQor
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBo
W25vZGVJbmRleF0ub3AgPT0gVmFsdWVUb051bWJlcikKKyAgICAgICAgICAgIG5vZGVJbmRleCA9
IG1fZ3JhcGhbbm9kZUluZGV4XS5jaGlsZDEoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2dy
YXBoW25vZGVJbmRleF0ub3AgPT0gVmFsdWVUb0ludDMyKQorICAgICAgICAgICAgbm9kZUluZGV4
ID0gbV9ncmFwaFtub2RlSW5kZXhdLmNoaWxkMSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKKyAgICB9CisgICAgCisgICAgLy8gQ29tcHV0ZXMgd2hlcmUgdGhlIHNlYXJj
aCBmb3IgYSBjYW5kaWRhdGUgZm9yIENTRSBzaG91bGQgc3RhcnQuIERvbid0IGNhbGwKKyAgICAv
LyB0aGlzIGRpcmVjdGx5OyBjYWxsIHN0YXJ0SW5kZXgoKSBpbnN0ZWFkIGFzIGl0IGRvZXMgbG9n
Z2luZyBpbiBkZWJ1ZyBtb2RlLgorICAgIE5vZGVJbmRleCBjb21wdXRlU3RhcnRJbmRleEZvckNo
aWxkcmVuKE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05v
ZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgeworICAgICAgICBjb25zdCB1bnNp
Z25lZCBsaW1pdCA9IDMwMDsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IG1f
c3RhcnQ7CisgICAgICAgIGlmIChtX2NvbXBpbGVJbmRleCAtIHN0YXJ0ID4gbGltaXQpCisgICAg
ICAgICAgICBzdGFydCA9IG1fY29tcGlsZUluZGV4IC0gbGltaXQ7CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQoc3RhcnQgPj0gbV9zdGFydCk7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXgg
Y2hpbGQgPSBjYW5vbmljYWxpemUoY2hpbGQxKTsKKyAgICAgICAgaWYgKGNoaWxkID09IE5vTm9k
ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGFydDsKKyAgICAgICAgCisgICAgICAgIGlmIChzdGFy
dCA8IGNoaWxkKQorICAgICAgICAgICAgc3RhcnQgPSBjaGlsZDsKKyAgICAgICAgCisgICAgICAg
IGNoaWxkID0gY2Fub25pY2FsaXplKGNoaWxkMik7CisgICAgICAgIGlmIChjaGlsZCA9PSBOb05v
ZGUpCisgICAgICAgICAgICByZXR1cm4gc3RhcnQ7CisgICAgICAgIAorICAgICAgICBpZiAoc3Rh
cnQgPCBjaGlsZCkKKyAgICAgICAgICAgIHN0YXJ0ID0gY2hpbGQ7CisgICAgICAgIAorICAgICAg
ICBjaGlsZCA9IGNhbm9uaWNhbGl6ZShjaGlsZDMpOworICAgICAgICBpZiAoY2hpbGQgPT0gTm9O
b2RlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OworICAgICAgICAKKyAgICAgICAgaWYgKHN0
YXJ0IDwgY2hpbGQpCisgICAgICAgICAgICBzdGFydCA9IGNoaWxkOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHN0YXJ0OworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggc3RhcnRJbmRleEZv
ckNoaWxkcmVuKE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgeworICAgICAgICBOb2RlSW5k
ZXggcmVzdWx0ID0gY29tcHV0ZVN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEsIGNoaWxkMiwg
Y2hpbGQzKTsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50Zigi
ICBsb29rYmFjayAldTogIiwgbV9jb21waWxlSW5kZXggLSByZXN1bHQpOworI2VuZGlmCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBzdGFydEluZGV4
KCkKKyAgICB7CisgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGlsZUluZGV4XTsK
KyAgICAgICAgcmV0dXJuIHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihub2RlLmNoaWxkMSgpLCBub2Rl
LmNoaWxkMigpLCBub2RlLmNoaWxkMygpKTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IHB1
cmVDU0UoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDEgPSBjYW5v
bmljYWxpemUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDIgPSBjYW5v
bmljYWxpemUobm9kZS5jaGlsZDIoKSk7CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDMgPSBjYW5v
bmljYWxpemUobm9kZS5jaGlsZDMoKSk7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggc3Rh
cnQgPSBzdGFydEluZGV4KCk7CisgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21w
aWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKKyAgICAgICAgICAgIE5vZGUmIG90aGVyTm9k
ZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3AgIT0gb3RoZXJOb2Rl
Lm9wKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBOb2RlSW5kZXggb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQxKCkp
OworICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIGlmIChvdGhlckNoaWxkICE9IGNoaWxkMSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3RoZXJD
aGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgaWYg
KG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAg
ICAgICAgICAgIGlmIChvdGhlckNoaWxkICE9IGNoaWxkMikKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6
ZShvdGhlck5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9O
b2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIGlmIChvdGhl
ckNoaWxkICE9IGNoaWxkMykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisgICAgICAgIHJldHVybiBO
b05vZGU7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1lcmljYWwoTm9kZSYg
bm9kZSkKKyAgICB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fcHJlZGljdGlvbnNb
bm9kZS5jaGlsZDEoKV07CisgICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX3ByZWRpY3Rp
b25zW25vZGUuY2hpbGQyKCldOworICAgICAgICByZXR1cm4gaXNTdHJvbmdQcmVkaWN0aW9uKGxl
ZnQpICYmIGlzU3Ryb25nUHJlZGljdGlvbihyaWdodCkKKyAgICAgICAgICAgICYmIGlzTnVtYmVy
UHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQpOworICAgIH0KKyAg
ICAKKyAgICBib29sIGxvZ2ljYWxOb3RJc1B1cmUoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAg
IFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fcHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07
CisgICAgICAgIHJldHVybiBpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pIHx8ICFpc1N0
cm9uZ1ByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgfQorICAgIAorICAgIGJvb2wgY2xvYmJl
cnNXb3JsZChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgaWYgKG5vZGUub3AgJiBOb2RlQ2xvYmJlcnNX
b3JsZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIShub2RlLm9wICYg
Tm9kZU1pZ2h0Q2xvYmJlcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHN3
aXRjaCAobm9kZS5vcCkgeworICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICBjYXNlIENv
bXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgIGNhc2UgQ29t
cGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKKyAgICAgICAgY2Fz
ZSBDb21wYXJlRXE6CisgICAgICAgICAgICByZXR1cm4gIWlzUHJlZGljdGVkTnVtZXJpY2FsKG5v
ZGUpOworICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CisgICAgICAgICAgICByZXR1cm4gIWxvZ2lj
YWxOb3RJc1B1cmUobm9kZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJZiBieSBzb21lIG9k
ZGl0eSB3ZSBoaXQgdGhpcyBjYXNlIGluIHJlbGVhc2UgYnVpbGQgaXQncyBzYWZlciB0byBoYXZl
IENTRSBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGVJ
bmRleCBnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24odW5zaWduZWQgdmFyTnVtYmVyKQorICAgIHsK
KyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleCgpOworICAgICAgICBmb3IgKE5v
ZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAg
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUub3ApIHsKKyAgICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgorICAgICAgICAgICAg
ICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBQdXRHbG9iYWxWYXI6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyTnVtYmVyKCkgPT0g
dmFyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChp
bmRleCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IE5vTm9kZTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGdldEJ5VmFsTG9hZEVsaW1pbmF0
aW9uKE5vZGVJbmRleCBjaGlsZDEsIE5vZGVJbmRleCBjaGlsZDIpCisgICAgeworICAgICAgICBO
b2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQxLCBjaGlsZDIpOwor
ICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4g
c3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAg
ICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGNhbm9uaWNhbGl6
ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGls
ZDEgJiYgY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9uaWNhbGl6ZShjaGlsZDIp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDMoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9kZTsK
KyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGdldE1ldGhvZExvYWRFbGltaW5hdGlvbihjb25z
dCBNZXRob2RDaGVja0RhdGEmIG1ldGhvZENoZWNrRGF0YSwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgTm9kZUluZGV4IGNoaWxkMSkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBzdGFydCA9
IHN0YXJ0SW5kZXgoKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJ
bmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gQ2hlY2tNZXRob2QKKyAgICAg
ICAgICAgICAgICAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICYm
IG5vZGUuaWRlbnRpZmllck51bWJlcigpID09IGlkZW50aWZpZXJOdW1iZXIKKyAgICAgICAgICAg
ICAgICAmJiBtX2dyYXBoLm1fbWV0aG9kQ2hlY2tEYXRhW25vZGUubWV0aG9kQ2hlY2tEYXRhSW5k
ZXgoKV0gPT0gbWV0aG9kQ2hlY2tEYXRhKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb24oTm9kZUluZGV4JiBjaGlsZCkKKyAgICB7CisgICAg
ICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCisgICAgICAg
IGlmIChjaGlsZCA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCisgICAgICAgIE5vZGVJ
bmRleCByZXBsYWNlbWVudCA9IG1fcmVwbGFjZW1lbnRzW2NoaWxkXTsKKyAgICAgICAgaWYgKHJl
cGxhY2VtZW50ID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgIGNoaWxkID0gcmVwbGFjZW1lbnQ7CisgICAgICAgIAorICAgICAgICAvLyBUaGVyZSBpcyBk
ZWZpbml0ZWx5IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBkb2Vz
IG5vdAorICAgICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCisgICAgICAgIEFTU0VSVChtX3Jl
cGxhY2VtZW50c1tjaGlsZF0gPT0gTm9Ob2RlKTsKKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGhb
Y2hpbGRdLnJlZigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlcGxhY2VtZW50KE5vZGVJ
bmRleCByZXBsYWNlbWVudCkKKyAgICB7CisgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBOb05v
ZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBCZSBzYWZlLiBE
b24ndCB0cnkgdG8gcGVyZm9ybSByZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0
CisgICAgICAgIC8vIGFncmVlLgorICAgICAgICBpZiAobV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJ
bmRleF0gIT0gbV9wcmVkaWN0aW9uc1tyZXBsYWNlbWVudF0pCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRm
KCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY29tcGlsZUluZGV4LCByZXBsYWNlbWVudCk7
CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fY29tcGls
ZUluZGV4XTsKKyAgICAgICAgbm9kZS5vcCA9IFBoYW50b207CisgICAgICAgIG5vZGUuc2V0UmVm
Q291bnQoMSk7CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdpbGwgZWxp
bWluYXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbm9kZS4KKyAgICAgICAgbV9yZXBsYWNlbWVu
dHNbbV9jb21waWxlSW5kZXhdID0gcmVwbGFjZW1lbnQ7CisgICAgfQorICAgIAorICAgIHZvaWQg
cGVyZm9ybU5vZGVDU0UoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLm9wICYg
Tm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVt
Q2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0
aW9uKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmZpeGVkLmNo
aWxkMSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uZml4
ZWQuY2hpbGQyKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGlsZHJl
bi5maXhlZC5jaGlsZDMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisjaWYgRU5B
QkxFKERGR19ERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIiAgICVzWyV1XTogIiwgR3Jh
cGg6Om9wTmFtZShtX2dyYXBoW21fY29tcGlsZUluZGV4XS5vcCksIG1fY29tcGlsZUluZGV4KTsK
KyNlbmRpZgorCisgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAKKyAgICAgICAg
Ly8gSGFuZGxlIHRoZSBwdXJlIG5vZGVzLiBUaGVzZSBub2RlcyBuZXZlciBoYXZlIGFueSBzaWRl
LWVmZmVjdHMuCisgICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICBjYXNlIEJpdE9yOgorICAg
ICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgICAgIGNhc2Ug
Qml0TFNoaWZ0OgorICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgICAgIGNhc2UgQXJpdGhB
ZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAgIGNhc2UgQXJpdGhNdWw6CisgICAg
ICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgICAgIGNhc2UgQXJpdGhEaXY6CisgICAgICAgIGNhc2Ug
QXJpdGhBYnM6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NFKG5vZGUpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIC8vIEhhbmRsZSBub2RlcyB0
aGF0IGFyZSBjb25kaXRpb25hbGx5IHB1cmU6IHRoZXNlIGFyZSBwdXJlLCBhbmQgY2FuCisgICAg
ICAgIC8vIGJlIENTRSdkLCBzbyBsb25nIGFzIHRoZSBwcmVkaWN0aW9uIGlzIHRoZSBvbmUgd2Ug
d2FudC4KKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzczoK
KyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVy
OgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUVx
OiB7CisgICAgICAgICAgICBpZiAoaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSkpIHsKKyAgICAg
ICAgICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnRJbmRleCA9IHB1cmVDU0Uobm9kZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50SW5kZXggIT0gTm9Ob2RlICYmIGlzUHJlZGlj
dGVkTnVtZXJpY2FsKG1fZ3JhcGhbcmVwbGFjZW1lbnRJbmRleF0pKQorICAgICAgICAgICAgICAg
ICAgICBzZXRSZXBsYWNlbWVudChyZXBsYWNlbWVudEluZGV4KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBM
b2dpY2FsTm90OiB7CisgICAgICAgICAgICBpZiAobG9naWNhbE5vdElzUHVyZShub2RlKSkgewor
ICAgICAgICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0gcHVyZUNTRShub2Rl
KTsKKyAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBOb05vZGUgJiYgbG9n
aWNhbE5vdElzUHVyZShtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdKSkKKyAgICAgICAgICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRJbmRleCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIC8vIEZp
bmFsbHkgaGFuZGxlIGhlYXAgYWNjZXNzZXMuIFRoZXNlIGFyZSBub3QgcXVpdGUgcHVyZSwgYnV0
IHdlIGNhbiBzdGlsbAorICAgICAgICAvLyBvcHRpbWl6ZSB0aGVtIHByb3ZpZGVkIHRoYXQgc29t
ZSBzdWJ0bGUgY29uZGl0aW9ucyBhcmUgbWV0LgorICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoK
KyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbihub2Rl
LnZhck51bWJlcigpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxMb2Fk
RWxpbWluYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgICAg
IGlmIChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigp
KSAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgbm9kZS5vcCA9IFB1dEJ5VmFsQWxpYXM7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENoZWNrTWV0aG9k
OgorICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0TWV0aG9kTG9hZEVsaW1pbmF0aW9uKG1f
Z3JhcGgubV9tZXRob2RDaGVja0RhdGFbbm9kZS5tZXRob2RDaGVja0RhdGFJbmRleCgpXSwgbm9k
ZS5pZGVudGlmaWVyTnVtYmVyKCksIG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBkbyBub3Ro
aW5nLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoREZHX0RFQlVH
X1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAg
ICB2b2lkIHBlcmZvcm1CbG9ja0NTRShCYXNpY0Jsb2NrJiBibG9jaykKKyAgICB7CisgICAgICAg
IG1fc3RhcnQgPSBibG9jay5iZWdpbjsKKyAgICAgICAgTm9kZUluZGV4IGVuZCA9IGJsb2NrLmVu
ZDsKKyAgICAgICAgZm9yIChtX2NvbXBpbGVJbmRleCA9IG1fc3RhcnQ7IG1fY29tcGlsZUluZGV4
IDwgZW5kOyArK21fY29tcGlsZUluZGV4KQorICAgICAgICAgICAgcGVyZm9ybU5vZGVDU0UobV9n
cmFwaFttX2NvbXBpbGVJbmRleF0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvY2FsQ1NFKCkK
KyAgICB7CisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIlBl
cmZvcm1pbmcgbG9jYWwgQ1NFOiIpOworI2VuZGlmCisgICAgICAgIGZvciAodW5zaWduZWQgYmxv
Y2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrKQorICAgICAg
ICAgICAgcGVyZm9ybUJsb2NrQ1NFKCptX2dyYXBoLm1fYmxvY2tzW2Jsb2NrXSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgYWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJzKCkKKyAgICB7CisgICAgICAg
IFNjb3JlQm9hcmQgc2NvcmVCb2FyZChtX2dyYXBoLCBtX2dyYXBoLm1fcHJlc2VydmVkVmFycyk7
CisgICAgICAgIHVuc2lnbmVkIHNpemVFeGNsdWRpbmdQaGlOb2RlcyA9IG1fZ3JhcGgubV9ibG9j
a3MubGFzdCgpLT5lbmQ7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZUV4Y2x1
ZGluZ1BoaU5vZGVzOyArK2kpIHsKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2ld
OworICAgICAgICAKKyAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgICAgIC8vIEdldExvY2Fs
IG5vZGVzIGFyZSBlZmZlY3RpdmVseSBwaGkgbm9kZXMgaW4gdGhlIGdyYXBoLCByZWZlcmVuY2lu
ZworICAgICAgICAgICAgLy8gcmVzdWx0cyBmcm9tIHByaW9yIGJsb2Nrcy4KKyAgICAgICAgICAg
IGlmIChub2RlLm9wICE9IEdldExvY2FsKSB7CisgICAgICAgICAgICAgICAgLy8gRmlyc3QsIGNh
bGwgdXNlIG9uIGFsbCBvZiB0aGUgY3VycmVudCBub2RlJ3MgY2hpbGRyZW4sIHRoZW4KKyAgICAg
ICAgICAgICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBX
ZSBkbyBzbyBpbiB0aGlzCisgICAgICAgICAgICAgICAgLy8gb3JkZXIgc28gdGhhdCBpZiBhIGNo
aWxkIGlzIG9uIGl0cyBsYXN0IHVzZSwgYW5kIGEKKyAgICAgICAgICAgICAgICAvLyBWaXJ0dWFs
UmVnaXN0ZXIgaXMgZnJlZWQsIHRoZW4gaXQgbWF5IGJlIHJldXNlZCBmb3Igbm9kZS4KKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJ
ZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG1fZ3JhcGgubV92YXJBcmdD
aGlsZHJlbltjaGlsZElkeF0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAg
ICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICAgICAg
c2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIG5vZGUuc2V0VmlydHVhbFJlZ2lzdGVyKHNj
b3JlQm9hcmQuYWxsb2NhdGUoKSk7CisgICAgICAgICAgICAvLyAnbXVzdEdlbmVyYXRlJyBub2Rl
cyBoYXZlIHRoZWlyIHVzZUNvdW50IGFydGlmaWNpYWxseSBlbGV2YXRlZCwKKyAgICAgICAgICAg
IC8vIGNhbGwgdXNlIG5vdyB0byBhY2NvdW50IGZvciB0aGlzLgorICAgICAgICAgICAgaWYgKG5v
ZGUubXVzdEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UoaSk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyAnbV9udW1DYWxsZWVSZWdpc3RlcnMnIGlzIHRoZSBudW1i
ZXIgb2YgbG9jYWxzIGFuZCB0ZW1wb3JhcmllcyBhbGxvY2F0ZWQKKyAgICAgICAgLy8gZm9yIHRo
ZSBmdW5jdGlvbiAoYW5kIGNoZWNrZWQgZm9yIG9uIGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBh
IG5ldyBhbmQKKyAgICAgICAgLy8gZGlmZmVyZW50IGFsbG9jYXRpb24gb2YgdGVtcG9yYXJpZXMs
IG1vcmUgcmVnaXN0ZXJzIG1heSBub3cgYmUgcmVxdWlyZWQuCisgICAgICAgIHVuc2lnbmVkIGNh
bGxlZVJlZ2lzdGVycyA9IHNjb3JlQm9hcmQuYWxsb2NhdGVkQ291bnQoKSArIG1fZ3JhcGgubV9w
cmVzZXJ2ZWRWYXJzICsgbV9ncmFwaC5tX3BhcmFtZXRlclNsb3RzOworICAgICAgICBpZiAoKHVu
c2lnbmVkKW1fY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyA8IGNhbGxlZVJlZ2lzdGVy
cykKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyA9IGNhbGxl
ZVJlZ2lzdGVyczsKKyAgICB9CisgICAgCiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgSlNHbG9i
YWxEYXRhJiBtX2dsb2JhbERhdGE7CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBD
b2RlQmxvY2sqIG1fcHJvZmlsZWRCbG9jazsKICAgICAKKyAgICBOb2RlSW5kZXggbV9zdGFydDsK
ICAgICBOb2RlSW5kZXggbV9jb21waWxlSW5kZXg7CiAgICAgCiAgICAgVmVjdG9yPFByZWRpY3Rl
ZFR5cGUsIDE2PiBtX3ByZWRpY3Rpb25zOwpAQCAtNDI3LDYgKzg0OCw4IEBAIHByaXZhdGU6CiAj
ZW5kaWYKICAgICAKICAgICBib29sIG1fY2hhbmdlZDsKKworICAgIFZlY3RvcjxOb2RlSW5kZXgs
IDE2PiBtX3JlcGxhY2VtZW50czsKIH07CiAKIHZvaWQgcHJvcGFnYXRlKEdyYXBoJiBncmFwaCwg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKQEAgLTQzOCw5
ICs4NjEsNiBAQCB2b2lkIHByb3BhZ2F0ZShHcmFwaCYgZ3JhcGgsIEpTR2xvYmFsRGF0CiAgICAg
UHJvcGFnYXRvciBwcm9wYWdhdG9yKGdyYXBoLCAqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLCBwcm9m
aWxlZEJsb2NrKTsKICAgICBwcm9wYWdhdG9yLmZpeHBvaW50KCk7CiAgICAgCi0jaWYgRU5BQkxF
KERGR19ERUJVR19WRVJCT1NFKQotICAgIGdyYXBoLmR1bXAoY29kZUJsb2NrKTsKLSNlbmRpZgog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTUzNTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE1NywxNiArMTE1Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAg
ICAgIE5vZGVJbmRleCBhbGlhcyA9IG5vZGUuY2hpbGQzKCk7Ci0gICAgICAgIGlmIChhbGlhcyAh
PSBOb05vZGUpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiByZXN1bHQgc2hvdWxkIGJlIGFibGUg
dG8gcmV1c2UgY2hpbGQxLCBjaGlsZDIuIFNob3VsZCBoYXZlIGFuICdVbnVzZWRPcGVyYW5kJyB0
eXBlLgotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYWxpYXNlZFZhbHVlKHRoaXMsIG5vZGUu
Y2hpbGQzKCkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBhbGlhc2Vk
VmFsdWUpOwotICAgICAgICAgICAgbV9qaXQubW92ZShhbGlhc2VkVmFsdWUuZ3ByKCksIHJlc3Vs
dC5ncHIoKSk7Ci0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQorICAgICAgICBBU1NF
UlQobm9kZS5jaGlsZDMoKSA9PSBOb05vZGUpOwogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBv
cmFyeSBzdG9yYWdlKHRoaXMpOwpAQCAtMTU5Niw2ICsxNTg3LDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAK
KyAgICBjYXNlIFBoYW50b206CisgICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcC4KKyAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAg
ICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107778</attachid>
            <date>2011-09-17 16:31:30 -0700</date>
            <delta_ts>2011-09-17 16:55:22 -0700</delta_ts>
            <desc>the patch - reduced worst case performance a bit</desc>
            <filename>cse_patch_5.diff</filename>
            <type>text/plain</type>
            <size>46436</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUzODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAK
KzIwMTEtMDktMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGhhdmUgZnVsbCBibG9jay1sb2NhbCBDU0UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzE2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgYmxvY2st
bG9jYWwgQ1NFIHRvIHRoZSBERkcuIENTRSBydW5zIGluIHRoZSBwcm9wYWdhdG9yIGp1c3QgYWZ0
ZXIKKyAgICAgICAgdHlwZSBwcm9wYWdhdGlvbi4gSXQgaXMgcGFydCBvZiB0aGUgcHJvcGFnYXRv
ciBpdHNlbGYgYmVjYXVzZSBpdCBuZWVkcyB0bworICAgICAgICB1c2UgdGhlIHByb3BhZ2F0b3In
cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG9wZXJhdGlvbnMK
KyAgICAgICAgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLiBCZWNhdXNlIGl0IGNoYW5nZXMgdGhlIGxp
dmUtcmFuZ2VzIG9mIG5vZGVzLCB0aGUKKyAgICAgICAgdmlydHVhbCByZWdpc3RlciBhbGxvY2F0
b3IgaGFkIHRvIGJlIG1vdmVkIGludG8gdGhlIHByb3BhZ2F0b3Igc28gdGhhdCBpdAorICAgICAg
ICBydW5zIGFmdGVyIENTRS4gVG8gZW5zdXJlIHRoYXQgdGhlIGJhY2stZW5kIGtub3dzIHRvIGtl
ZXAgdGhlIGlucHV0cyB0bworICAgICAgICBhbnkgZWxpbWluYXRlZCBub2RlIGFsaXZlIGZvciBP
U1IsIGEgbmV3IG5vZGUgdHlwZSwgUGhhbnRvbSwgd2FzIGludHJvZHVjZWQuCisgICAgICAgIEl0
IGlzIGEgbm8tb3AgYnV0IHByb2xvbmdlcyB0aGUgbGl2ZS1yYW5nZSBvZiBpdHMgaW5wdXRzLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhbiA4MCUgc3BlZWQtdXAgb24gaW1hZ2luZy1nYXVz
c2lhbi1ibHVyLCBhbmQgYSAxMCUgc3BlZWQtdXAgb24KKyAgICAgICAgS3Jha2VuLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBpcyBzdGlsbCBhIHdvcmsgaW4gcHJvZ3Jlc3MuIFRoZXJlIGFyZSBw
cm9iYWJseSBzdGlsbCBzb21lIGJpZyBidWdzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQWxpYXNUcmFja2Vy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3Jh
cGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpNZXRob2RDaGVja0RhdGE6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAoSlNDOjpERkc6Ok1ldGhvZENoZWNrRGF0YTo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWaXJ0dWFsUmVn
aXN0ZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldFJlZkNvdW50KToKKyAgICAgICAg
KiBkZmcvREZHUHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6
UHJvcGFnYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Zml4cG9pbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OlByb3BhZ2F0b3I6OmNhbm9uaWNhbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6Y29tcHV0ZVN0YXJ0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6OnN0YXJ0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnB1cmVD
U0UpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6Omdsb2JhbFZhckxvYWRFbGltaW5h
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0QnlWYWxMb2FkRWxpbWlu
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldE1ldGhvZExvYWRFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybVN1YnN0aXR1
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6c2V0UmVwbGFjZW1lbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtQmxvY2tDU0UpOgorICAgICAgICAoSlNDOjpE
Rkc6OlByb3BhZ2F0b3I6OmxvY2FsQ1NFKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9y
OjphbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpERkc6OnByb3BhZ2F0
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTEtMDktMTYgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVG91Y2ggUGxhdGZvcm0uaCBpbiB0aGUg
aG9wZSB0byBmaXggU25vd0xlb3BhcmQgSW50ZWwgUmVsZWFzZSAoV2ViS2l0MiBUZXN0cykuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTUzNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMzU5LDcgKzM1OSw2IEBACiAJCTg2RUM5REQzMTMyOERGODIw
MDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQzlEQzMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1
bGF0aXZlSklULmggKi87IH07CiAJCTg2RUNBM0VBMTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDQTNF
OTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovOyB9OwogCQk4NkVDQTNGQTEzMkRGMjVB
MDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODZFQ0EzRjkxMzJERjI1QTAwMkIyQUQ3IC8qIERGR1Njb3JlQm9h
cmQuaCAqLzsgfTsKLQkJODZFQ0E0RjExMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0FsaWFzVHJhY2tl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZFQ0E0
RjAxMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0FsaWFzVHJhY2tlci5oICovOyB9OwogCQk4NkYzODg1
OTEyMTEzMENBMDA3QTdDRTMgLyogQXRvbWljU3RyaW5nSGFzaC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZGMzg4NTgxMjExMzBDQTAwN0E3Q0UzIC8q
IEF0b21pY1N0cmluZ0hhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGlj
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDIx
M0UzQjEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgKi87IH07CiAJCTkw
MjEzRTNFMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDIxM0UzQzEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0xMTExLDcgKzExMTAsNiBAQAogCQk4NkVDOURDMzEzMjhERjgy
MDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHU3BlY3VsYXRpdmVKSVQuaDsgcGF0aCA9IGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJB
RDcgLyogREZHTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2Rl
Lmg7IHBhdGggPSBkZmcvREZHTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NkVDQTNGOTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTY29yZUJvYXJkLmg7IHBhdGggPSBkZmcvREZHU2NvcmVC
b2FyZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkVDQTRGMDEzMkVBQTZEMDAy
QjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0FsaWFzVHJhY2tlci5oOyBwYXRoID0gZGZnL0RGR0FsaWFzVHJhY2tlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkYzODg1ODEyMTEzMENBMDA3QTdDRTMgLyogQXRv
bWljU3RyaW5nSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBdG9taWNT
dHJpbmdIYXNoLmg7IHBhdGggPSB0ZXh0L0F0b21pY1N0cmluZ0hhc2guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTAyMTNFM0IxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRp
c3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5U3Rh
dGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkwMjEzRTNDMTIzQTQw
QzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1lbW9yeVN0YXRpc3RpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyMzUsNyArMjIzMyw2IEBACiAJCQkJMEZEM0M4MjMxNDExNUQxQTAwRkQ4MUNCIC8qIERG
R1Byb3BhZ2F0b3IuY3BwICovLAogCQkJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdE
cml2ZXIuaCAqLywKIAkJCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCAqLywKLQkJCQk4NkVDQTRGMDEzMkVBQTZEMDAyQjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmgg
Ki8sCiAJCQkJODZFQzlEQjQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNw
cCAqLywKIAkJCQk4NkVDOURCNTEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIu
aCAqLywKIAkJCQk4NkFFNkM0QjEzNkExMUU0MDA5NjMwMTIgLyogREZHRlBSSW5mby5oICovLApA
QCAtMjQ5Myw3ICsyNDkwLDYgQEAKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVi
dWdnZXJDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzVGQUYyMTJEMjZBQ0UwMDND
MDgzQiAvKiBEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQzBFMTZGNUNEMDBC
MzQ0NjAgLyogRGVxdWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTg2RUNBNEYxMTMyRUFBNkQwMDJC
MkFENyAvKiBERkdBbGlhc1RyYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM1MTMy
OERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZFQzlEQzYxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dlbmVyYXRpb25JbmZvLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOURDODEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tl
ci5oCShyZXZpc2lvbiA5NTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxp
YXNUcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBERkdBbGlhc1RyYWNr
ZXJfaAotI2RlZmluZSBERkdBbGlhc1RyYWNrZXJfaAotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0K
LSNpbmNsdWRlIDxkZmcvREZHR3JhcGguaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8gPT09IEFsaWFzVHJhY2tlciA9PT0K
LS8vCi0vLyBUaGlzIGNsYXNzIGlkIHVzZWQgdG8gZGV0ZWN0IGFsaWFzaW5nIHByb3BlcnR5IGFj
Y2Vzc2VzLCB3aGljaCB3ZSBtYXkKLS8vIGJlIGFibGUgdG8gc3BlY3VsYXRpdmVseSBvcHRpbWl6
ZSAoZm9yIGV4YW1wbGUgcmVtb3ZpbmcgcmVkdW5kYW50IGxvYWRzCi0vLyB3aGVyZSB3ZSBrbm93
IGEgZ2V0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCwgb3Igb3B0aW1pemluZyBwdXRzIHRvIGFycmF5
cwotLy8gd2hlcmUgd2Uga25vdyB0aGUgdmFsdWUgYmVpbmcgd3JpdHRlbiB0byBpbiB3aXRoaW4g
bGVuZ3RoIGFuZCBpcyBub3QgYQotLy8gaG9sZSB2YWx1ZSkuIEluIHRpbWUsIHRoaXMgc2hvdWxk
IGJlIG1vcmUgdGhhbiBhIDEtZGVlcCBidWZmZXIhCi1jbGFzcyBBbGlhc1RyYWNrZXIgewotcHVi
bGljOgotICAgIEFsaWFzVHJhY2tlcihHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDogbV9ncmFwaChn
cmFwaCkKLSAgICAgICAgLCBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwoTm9Ob2RlKQotICAgIHsK
LSAgICB9Ci0KLSAgICBOb2RlSW5kZXggbG9va3VwR2V0QnlWYWwoTm9kZUluZGV4IGJhc2UsIE5v
ZGVJbmRleCBwcm9wZXJ0eSkKLSAgICB7Ci0gICAgICAgIC8vIFRyeSB0byBkZXRlY3Qgc2l0dWF0
aW9ucyB3aGVyZSBhIEdldEJ5VmFsIGZvbGxvd3MgYW5vdGhlciBHZXRCeVZhbCB0byB0aGUgc2Ft
ZQotICAgICAgICAvLyBwcm9wZXJ0eTsgaW4gdGhlc2UgY2FzZXMsIHdlIG1heSBiZSBhYmxlIHRv
IG9taXQgdGhlIHN1YnNlcXVlbnQgZ2V0IG9uIHRoZQotICAgICAgICAvLyBzcGVjdWxhdGl2ZSBw
YXRoLCB3aGVyZSB3ZSBrbm93IGNvbmRpdGlvbnMgaG9sZCB0byBtYWtlIHRoaXMgc2FmZSAoZm9y
IGV4YW1wbGUsCi0gICAgICAgIC8vIG9uIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHdlIHdpbGwgbm90
IGhhdmUgYWxsb3dlZCBnZXR0ZXIgYWNjZXNzKS4KLSAgICAgICAgaWYgKG1fY2FuZGlkYXRlQWxp
YXNHZXRCeVZhbCAhPSBOb05vZGUpIHsKLSAgICAgICAgICAgIE5vZGUmIHBvc3NpYmxlQWxpYXMg
PSBtX2dyYXBoW21fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbF07Ci0gICAgICAgICAgICBBU1NFUlQo
cG9zc2libGVBbGlhcy5vcCA9PSBHZXRCeVZhbCk7Ci0gICAgICAgICAgICAvLyBUaGlzIGNoZWNr
IGVuc3VyZXMgdGhlIGFjY2Vzc2VzIGFsaWFzLCBwcm92aWRlZCB0aGF0IHRoZSBzdWJzY3JpcHQg
aXMgYW4KLSAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXggKHRoaXMgaXMgZ29vZCBlbm91Z2g7
IHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHdpbGwgb25seSBnZW5lcmF0ZQotICAgICAgICAgICAgLy8g
b3B0aW1pemVkIGFjY2Vzc2VzIHRvIGhhbmRsZSBpbnRlZ2VyIHN1YnNjcmlwdHMpLgotICAgICAg
ICAgICAgaWYgKHBvc3NpYmxlQWxpYXMuY2hpbGQxKCkgPT0gYmFzZSAmJiBlcXVhbElnbm9yaW5n
TGF0ZXJOdW1lcmljQ29udmVyc2lvbihwb3NzaWJsZUFsaWFzLmNoaWxkMigpLCBwcm9wZXJ0eSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbDsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgIH0KLQotICAgIHZvaWQgcmVjb3JkR2V0
QnlWYWwoTm9kZUluZGV4IGdldEJ5VmFsKQotICAgIHsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlh
c0dldEJ5VmFsID0gZ2V0QnlWYWw7Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRQdXRCeVZhbChO
b2RlSW5kZXggcHV0QnlWYWwpCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKHB1dEJ5VmFs
LCBtX2dyYXBoW3B1dEJ5VmFsXS5vcCA9PSBQdXRCeVZhbCB8fCBtX2dyYXBoW3B1dEJ5VmFsXS5v
cCA9PSBQdXRCeVZhbEFsaWFzKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0g
Tm9Ob2RlOwotICAgIH0KLQotICAgIHZvaWQgcmVjb3JkR2V0QnlJZChOb2RlSW5kZXggZ2V0QnlJ
ZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoZ2V0QnlJZCwgbV9ncmFwaFtnZXRCeUlk
XS5vcCA9PSBHZXRCeUlkKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9O
b2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlY29yZEdldE1ldGhvZChOb2RlSW5kZXggZ2V0
TWV0aG9kKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChnZXRNZXRob2QsIG1fZ3JhcGhb
Z2V0TWV0aG9kXS5vcCA9PSBHZXRNZXRob2QgfHwgbV9ncmFwaFtnZXRNZXRob2RdLm9wID09IENo
ZWNrTWV0aG9kKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOwot
ICAgIH0KLQotICAgIHZvaWQgcmVjb3JkUHV0QnlJZChOb2RlSW5kZXggcHV0QnlJZCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocHV0QnlJZCwgbV9ncmFwaFtwdXRCeUlkXS5vcCA9PSBQ
dXRCeUlkKTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0gTm9Ob2RlOwotICAg
IH0KLQotICAgIHZvaWQgcmVjb3JkUHV0QnlJZERpcmVjdChOb2RlSW5kZXggcHV0QnlWYWwpCi0g
ICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKHB1dEJ5VmFsLCBtX2dyYXBoW3B1dEJ5VmFsXS5v
cCA9PSBQdXRCeUlkRGlyZWN0KTsKLSAgICAgICAgbV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsID0g
Tm9Ob2RlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHJlY29yZENhbGwoTm9kZUluZGV4IGNhbGwp
Ci0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhbGwsIG1fZ3JhcGhbY2FsbF0ub3AgPT0g
Q2FsbCk7Ci0gICAgICAgIG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbCA9IE5vTm9kZTsKLSAgICB9
Ci0KLSAgICB2b2lkIHJlY29yZENvbnN0cnVjdChOb2RlSW5kZXggY29uc3RydWN0KQotICAgIHsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChjb25zdHJ1Y3QsIG1fZ3JhcGhbY29uc3RydWN0XS5vcCA9
PSBDb25zdHJ1Y3QpOwotICAgICAgICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7
Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRSZXNvbHZlKE5vZGVJbmRleCByZXNvbHZlKQotICAg
IHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNvbHZlLCBtX2dyYXBoW3Jlc29sdmVdLm9wID09
IFJlc29sdmUKLSAgICAgICAgICAgIHx8IG1fZ3JhcGhbcmVzb2x2ZV0ub3AgPT0gUmVzb2x2ZUJh
c2UKLSAgICAgICAgICAgIHx8IG1fZ3JhcGhbcmVzb2x2ZV0ub3AgPT0gUmVzb2x2ZUJhc2VTdHJp
Y3RQdXQpOwotICAgICAgICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZSBmb3IgYXJndW1l
bnRzOgotICAgIC8vICAgLSAoWCwgWCkKLSAgICAvLyAgIC0gKFgsIFZhbHVlVG9OdW1iZXIoWCkp
Ci0gICAgLy8gICAtIChYLCBWYWx1ZVRvSW50MzIoWCkpCi0gICAgLy8gICAtIChYLCBOdW1iZXJU
b0ludDMyKFgpKQotICAgIGJvb2wgZXF1YWxJZ25vcmluZ0xhdGVyTnVtZXJpY0NvbnZlcnNpb24o
Tm9kZUluZGV4IG9wMSwgTm9kZUluZGV4IG9wMikKLSAgICB7Ci0gICAgICAgIGlmIChvcDEgPT0g
b3AyKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIE5vZGUmIG5vZGUyID0gbV9n
cmFwaFtvcDJdOwotICAgICAgICByZXR1cm4gKG5vZGUyLm9wID09IFZhbHVlVG9OdW1iZXIgfHwg
bm9kZTIub3AgPT0gVmFsdWVUb0ludDMyKSAmJiBvcDEgPT0gbm9kZTIuY2hpbGQxKCk7Ci0gICAg
fQotCi0gICAgLy8gVGhlIGdyYXBoLCB0byBsb29rIHVwIHBvdGVudGlhbGx5IGFsaWFzaW5nIG5v
ZGVzLgotICAgIEdyYXBoJiBtX2dyYXBoOwotICAgIC8vIEN1cnJlbnRseSBhIDEtZGVlcCBidWZm
ZXIhCi0gICAgTm9kZUluZGV4IG1fY2FuZGlkYXRlQWxpYXNHZXRCeVZhbDsKLX07Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTM1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAot
I2luY2x1ZGUgIkRGR0FsaWFzVHJhY2tlci5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5o
IgotI2luY2x1ZGUgIkRGR1Njb3JlQm9hcmQuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCkBAIC02MzYsOCArNjM0LDYgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgbV9jb25zdGFudHNb
aV0gPSBDb25zdGFudFJlY29yZCgpOwogICAgIH0KIAotICAgIEFsaWFzVHJhY2tlciBhbGlhc2Vz
KG1fZ3JhcGgpOwotCiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gbV9nbG9iYWxEYXRh
LT5pbnRlcnByZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBibG9ja0JlZ2lu
ID0gbV9jdXJyZW50SW5kZXg7CkBAIC05NTAsMTAgKzk0Niw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RBcnJheShi
YXNlKTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CiAKLSAgICAg
ICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygw
KSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSwgcHJvcGVydHksIGFsaWFzZXMubG9va3VwR2V0
QnlWYWwoYmFzZSwgcHJvcGVydHkpKTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9
IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFz
ZSwgcHJvcGVydHkpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIGdldEJ5VmFsKTsKICAgICAgICAgICAgIHN0cm9uZ2x5UHJlZGljdChnZXRCeVZhbCk7
Ci0gICAgICAgICAgICBhbGlhc2VzLnJlY29yZEdldEJ5VmFsKGdldEJ5VmFsKTsKIAogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CiAgICAgICAgIH0KQEAgLTk2NSw5ICs5
NjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICB3ZWFrbHlQcmVkaWN0QXJyYXkoYmFzZSk7CiAgICAgICAgICAgICB3ZWFrbHlQcmVkaWN0
SW50MzIocHJvcGVydHkpOwogCi0gICAgICAgICAgICBOb2RlSW5kZXggYWxpYXNlZEdldCA9IGFs
aWFzZXMubG9va3VwR2V0QnlWYWwoYmFzZSwgcHJvcGVydHkpOwotICAgICAgICAgICAgTm9kZUlu
ZGV4IHB1dEJ5VmFsID0gYWRkVG9HcmFwaChhbGlhc2VkR2V0ICE9IE5vTm9kZSA/IFB1dEJ5VmFs
QWxpYXMgOiBQdXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKLSAgICAgICAgICAgIGFs
aWFzZXMucmVjb3JkUHV0QnlWYWwocHV0QnlWYWwpOworICAgICAgICAgICAgYWRkVG9HcmFwaChQ
dXRCeVZhbCwgYmFzZSwgcHJvcGVydHksIHZhbHVlKTsKIAogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfcHV0X2J5X3ZhbCk7CiAgICAgICAgIH0KQEAgLTk5OCwxMyArOTkxLDEwIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBtZXRo
b2RDaGVja0RhdGEuZnVuY3Rpb24gPSBtZXRob2RDYWxsLmNhY2hlZEZ1bmN0aW9uLmdldCgpOwog
ICAgICAgICAgICAgICAgIG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUgPSBtZXRob2RDYWxsLmNh
Y2hlZFByb3RvdHlwZS5nZXQoKTsKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fbWV0aG9kQ2hl
Y2tEYXRhLmFwcGVuZChtZXRob2RDaGVja0RhdGEpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGFsaWFzZXMucmVjb3JkR2V0TWV0aG9kKGNoZWNrTWV0aG9kKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IGdldE1ldGhvZCA9IGFkZFRv
R3JhcGgoR2V0TWV0aG9kLCBPcEluZm8oaWRlbnRpZmllciksIE9wSW5mbyhQcmVkaWN0Tm9uZSks
IGJhc2UpOwogICAgICAgICAgICAgICAgIHNldChnZXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IGdldE1ldGhvZCk7CiAgICAgICAgICAgICAgICAgc3Ryb25nbHlQcmVkaWN0KGdldE1ldGhvZCk7
Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRNZXRob2QoZ2V0TWV0aG9kKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggKz0g
T1BDT0RFX0xFTkdUSChvcF9tZXRob2RfY2hlY2spICsgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlf
aWQpOwpAQCAtMTAxOCw3ICsxMDA4LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdl
dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSk7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlJZCk7
CiAgICAgICAgICAgICBzdHJvbmdseVByZWRpY3QoZ2V0QnlJZCk7Ci0gICAgICAgICAgICBhbGlh
c2VzLnJlY29yZEdldEJ5SWQoZ2V0QnlJZCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2dldF9ieV9pZCk7CiAgICAgICAgIH0KQEAgLTEwMjksMTMgKzEwMTgsMTAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgdW5zaWduZWQgaWRl
bnRpZmllciA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBi
b29sIGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAg
ICAgIGlmIChkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHV0QnlJZERpcmVj
dCA9IGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNlLCB2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRQdXRCeUlkRGlyZWN0KHB1dEJ5
SWREaXJlY3QpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggcHV0QnlJZCA9IGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNl
LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRQdXRCeUlkKHB1dEJ5SWQp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpcmVjdCkKKyAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgYmFzZSwgdmFs
dWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJ
ZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBiYXNlLCB2YWx1ZSk7CiAKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX3B1dF9ieV9pZCk7CiAgICAgICAgIH0KQEAgLTEyNTIsMTQgKzEyMzgsMTIgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IGNh
bGwgPSBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwpOwotICAg
ICAgICAgICAgYWxpYXNlcy5yZWNvcmRDYWxsKGNhbGwpOworICAgICAgICAgICAgYWRkQ2FsbChp
bnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBDYWxsKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2NhbGwpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBv
cF9jb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBjb25zdHJ1Y3QgPSBhZGRDYWxs
KGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbnN0cnVjdCk7Ci0gICAgICAgICAg
ICBhbGlhc2VzLnJlY29yZENvbnN0cnVjdChjb25zdHJ1Y3QpOworICAgICAgICAgICAgYWRkQ2Fs
bChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBDb25zdHJ1Y3QpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfY29uc3RydWN0KTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC0xMjcxLDcgKzEyNTUsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAKICAgICAgICAgICAgIE5vZGVJbmRleCByZXNvbHZlID0gYWRkVG9HcmFwaChSZXNvbHZl
LCBPcEluZm8oaWRlbnRpZmllcikpOwogICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIHJlc29sdmUpOwotICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRSZXNv
bHZlKHJlc29sdmUpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9yZXNvbHZlKTsKICAg
ICAgICAgfQpAQCAtMTI4MSw3ICsxMjY0LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogCiAgICAgICAgICAgICBOb2RlSW5kZXggcmVzb2x2ZSA9IGFkZFRvR3Jh
cGgoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCA/IFJlc29sdmVCYXNlU3RyaWN0UHV0
IDogUmVzb2x2ZUJhc2UsIE9wSW5mbyhpZGVudGlmaWVyKSk7CiAgICAgICAgICAgICBzZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzb2x2ZSk7Ci0gICAgICAgICAgICBhbGlh
c2VzLnJlY29yZFJlc29sdmUocmVzb2x2ZSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3Jlc29sdmVfYmFzZSk7CiAgICAgICAgIH0KQEAgLTEzODUsNTEgKzEzNjcsNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpzZXR1cFByZWRlY2Vzc29ycygpCiAgICAgfQogfQogCi12b2lkIEJ5dGVD
b2RlUGFyc2VyOjphbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMoKQotewotICAgIFNjb3JlQm9hcmQg
c2NvcmVCb2FyZChtX2dyYXBoLCBtX3ByZXNlcnZlZFZhcnMpOwotICAgIHVuc2lnbmVkIHNpemVF
eGNsdWRpbmdQaGlOb2RlcyA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5lbmQ7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplRXhjbHVkaW5nUGhpTm9kZXM7ICsraSkgewotICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtpXTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAg
ICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVzIGluIHRoZSBncmFw
aCwgcmVmZXJlbmNpbmcKLSAgICAgICAgLy8gcmVzdWx0cyBmcm9tIHByaW9yIGJsb2Nrcy4KLSAg
ICAgICAgaWYgKG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKLSAgICAgICAgICAgIC8vIEZpcnN0LCBj
YWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJlbnQgbm9kZSdzIGNoaWxkcmVuLCB0aGVuCi0gICAg
ICAgICAgICAvLyBhbGxvY2F0ZSBhIFZpcnR1YWxSZWdpc3RlciBmb3IgdGhpcyBub2RlLiBXZSBk
byBzbyBpbiB0aGlzCi0gICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQgaXMg
b24gaXRzIGxhc3QgdXNlLCBhbmQgYQotICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlz
IGZyZWVkLCB0aGVuIGl0IG1heSBiZSByZXVzZWQgZm9yIG5vZGUuCi0gICAgICAgICAgICBpZiAo
bm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGls
ZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAgICAgICAg
ICBzY29yZUJvYXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDMoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW5vZGUuaGFzUmVzdWx0KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBub2RlLnNldFZpcnR1YWxSZWdpc3RlcihzY29y
ZUJvYXJkLmFsbG9jYXRlKCkpOwotICAgICAgICAvLyAnbXVzdEdlbmVyYXRlJyBub2RlcyBoYXZl
IHRoZWlyIHVzZUNvdW50IGFydGlmaWNpYWxseSBlbGV2YXRlZCwKLSAgICAgICAgLy8gY2FsbCB1
c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCi0gICAgICAgIGlmIChub2RlLm11c3RHZW5lcmF0
ZSgpKQotICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UoaSk7Ci0gICAgfQotCi0gICAgLy8gJ21f
bnVtQ2FsbGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxvY2FscyBhbmQgdGVtcG9yYXJp
ZXMgYWxsb2NhdGVkCi0gICAgLy8gZm9yIHRoZSBmdW5jdGlvbiAoYW5kIGNoZWNrZWQgZm9yIG9u
IGVudHJ5KS4gU2luY2Ugd2UgcGVyZm9ybSBhIG5ldyBhbmQKLSAgICAvLyBkaWZmZXJlbnQgYWxs
b2NhdGlvbiBvZiB0ZW1wb3JhcmllcywgbW9yZSByZWdpc3RlcnMgbWF5IG5vdyBiZSByZXF1aXJl
ZC4KLSAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMgPSBzY29yZUJvYXJkLmFsbG9jYXRlZENv
dW50KCkgKyBtX3ByZXNlcnZlZFZhcnMgKyBtX3BhcmFtZXRlclNsb3RzOwotICAgIGlmICgodW5z
aWduZWQpbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIDwgY2FsbGVlUmVnaXN0ZXJz
KQotICAgICAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgPSBjYWxsZWVSZWdp
c3RlcnM7Ci19Ci0KIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKIHsKICAgICAvLyBTZXQg
ZHVyaW5nIGNvbnN0cnVjdGlvbi4KQEAgLTE0NjEsOCArMTM5OCw5IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlKCkKICAgICBzZXR1cFByZWRlY2Vzc29ycygpOwogICAgIHByb2Nlc3NQaGlT
dGFjazxMb2NhbFBoaVN0YWNrPigpOwogICAgIHByb2Nlc3NQaGlTdGFjazxBcmd1bWVudFBoaVN0
YWNrPigpOwotCi0gICAgYWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJzKCk7CisgICAgCisgICAgbV9n
cmFwaC5tX3ByZXNlcnZlZFZhcnMgPSBtX3ByZXNlcnZlZFZhcnM7CisgICAgbV9ncmFwaC5tX3Bh
cmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsKIAogI2lmIEVOQUJMRShERkdfREVCVUdf
VkVSQk9TRSkKICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk1MzUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3
LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgIC8vICAg
ICAgICAgaWQjICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGFuIGlkZW50aWZpZXIg
eyBpZiBjb2RlQmxvY2sgaXMgcGFzc2VkIHRvIGR1bXAoKSwgdGhlIHN0cmluZyByZXByZXNlbnRh
dGlvbiBpcyBkaXNwbGF5ZWQgfS4KICAgICAvLyAgICAgICAgIHZhciMgLSB0aGUgaW5kZXggb2Yg
YSB2YXIgb24gdGhlIGdsb2JhbCBvYmplY3QsIHVzZWQgYnkgR2V0R2xvYmFsVmFyL1B1dEdsb2Jh
bFZhciBvcGVyYXRpb25zLgogICAgIHByaW50ZigiJSA0ZDolczwlYyV1OiIsIChpbnQpbm9kZUlu
ZGV4LCBza2lwcGVkID8gIiAgc2tpcHBlZCAgIiA6ICIgICAgICAgICAgICIsIG11c3RHZW5lcmF0
ZSA/ICchJyA6ICcgJywgcmVmQ291bnQpOwotICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmICFz
a2lwcGVkKQorICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmICFza2lwcGVkICYmIG5vZGUuaGFz
VmlydHVhbFJlZ2lzdGVyKCkpCiAgICAgICAgIHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICBlbHNlCiAgICAgICAgIHByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gOTUzNTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDI0IEBA
IHN0cnVjdCBNZXRob2RDaGVja0RhdGEgewogICAgIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0
dXJlOwogICAgIEpTT2JqZWN0KiBmdW5jdGlvbjsKICAgICBKU09iamVjdCogcHJvdG90eXBlOwor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNZXRob2RDaGVja0RhdGEmIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBvdGhlci5zdHJ1Y3R1cmUpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChwcm90b3R5cGVTdHJ1Y3R1cmUg
IT0gb3RoZXIucHJvdG90eXBlU3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoZnVuY3Rpb24gIT0gb3RoZXIuZnVuY3Rpb24pCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChwcm90b3R5cGUgIT0gb3RoZXIucHJvdG90eXBlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE1ldGhvZENoZWNrRGF0YSYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQogfTsKIAog
dHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29yTGlzdDsKQEAgLTI4MSw2
ICsyOTksOCBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBt
X2Jsb2NrczsKICAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKICAg
ICBWZWN0b3I8TWV0aG9kQ2hlY2tEYXRhPiBtX21ldGhvZENoZWNrRGF0YTsKKyAgICB1bnNpZ25l
ZCBtX3ByZXNlcnZlZFZhcnM7CisgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKIHByaXZh
dGU6CiAgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudE5vZGUoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gOTUzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDE0ICsxMDcsMTYgQEAgcHJpdmF0ZToK
IAogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51bSAoYmVsb3cpIGFyZSBjb21wb3NlZCBv
ZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkgbm9uZSkKIC8vIGFuZCBzb21lIGFkZGl0
aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2VuZXJhdGUsIGlzIGNvbnN0YW50LCBldGMp
LgotI2RlZmluZSBOb2RlSWRNYXNrICAgICAgICAgIDB4RkZGCi0jZGVmaW5lIE5vZGVSZXN1bHRN
YXNrICAgICAweEYwMDAKLSNkZWZpbmUgTm9kZU11c3RHZW5lcmF0ZSAgMHgxMDAwMCAvLyBzZXQg
b24gbm9kZXMgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cywgYW5kIG1heSBub3QgdHJpdmlhbGx5IGJl
IHJlbW92ZWQgYnkgRENFLgotI2RlZmluZSBOb2RlSXNDb25zdGFudCAgICAweDIwMDAwCi0jZGVm
aW5lIE5vZGVJc0p1bXAgICAgICAgIDB4NDAwMDAKLSNkZWZpbmUgTm9kZUlzQnJhbmNoICAgICAg
MHg4MDAwMAotI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgIDB4MTAwMDAwCi0jZGVmaW5lIE5vZGVI
YXNWYXJBcmdzICAgMHgyMDAwMDAKKyNkZWZpbmUgTm9kZUlkTWFzayAgICAgICAgICAgMHhGRkYK
KyNkZWZpbmUgTm9kZVJlc3VsdE1hc2sgICAgICAweEYwMDAKKyNkZWZpbmUgTm9kZU11c3RHZW5l
cmF0ZSAgIDB4MTAwMDAgLy8gc2V0IG9uIG5vZGVzIHRoYXQgaGF2ZSBzaWRlIGVmZmVjdHMsIGFu
ZCBtYXkgbm90IHRyaXZpYWxseSBiZSByZW1vdmVkIGJ5IERDRS4KKyNkZWZpbmUgTm9kZUlzQ29u
c3RhbnQgICAgIDB4MjAwMDAKKyNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgIDB4NDAwMDAKKyNk
ZWZpbmUgTm9kZUlzQnJhbmNoICAgICAgIDB4ODAwMDAKKyNkZWZpbmUgTm9kZUlzVGVybWluYWwg
ICAgMHgxMDAwMDAKKyNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAgMHgyMDAwMDAKKyNkZWZpbmUg
Tm9kZUNsb2JiZXJzV29ybGQgMHg0MDAwMDAKKyNkZWZpbmUgTm9kZU1pZ2h0Q2xvYmJlciAgMHg4
MDAwMDAKIAogLy8gVGhlc2UgdmFsdWVzIHJlY29yZCB0aGUgcmVzdWx0IHR5cGUgb2YgdGhlIG5v
ZGUgKGFzIGNoZWNrZWQgYnkgTm9kZVJlc3VsdE1hc2ssIGFib3ZlKSwgMCBmb3Igbm8gcmVzdWx0
LgogI2RlZmluZSBOb2RlUmVzdWx0SlMgICAgICAweDEwMDAKQEAgLTEzMSw2ICsxMzMsNyBAQCBw
cml2YXRlOgogICAgIC8qIE5vZGVzIGZvciBsb2NhbCB2YXJpYWJsZSBhY2Nlc3MuICovXAogICAg
IG1hY3JvKEdldExvY2FsLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgMCkg
XAorICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQaGks
IDApIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGJpdHdpc2Ugb3BlcmF0aW9ucy4gKi9cCkBA
IC0xNTksNDUgKzE2Miw0NSBAQCBwcml2YXRlOgogICAgIG1hY3JvKFZhbHVlVG9Eb3VibGUsIE5v
ZGVSZXN1bHROdW1iZXIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIEFkZCBv
ZiB2YWx1ZXMgbWF5IGVpdGhlciBiZSBhcml0aG1ldGljLCBvciByZXN1bHQgaW4gc3RyaW5nIGNv
bmNhdGVuYXRpb24uICovXAotICAgIG1hY3JvKFZhbHVlQWRkLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVmFsdWVBZGQsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgXAogICAgIC8qIFByb3BlcnR5
IGFjY2Vzcy4gKi9cCiAgICAgLyogUHV0QnlWYWxBbGlhcyBpbmRpY2F0ZXMgYSAncHV0JyBhbGlh
c2VzIGEgcHJpb3Igd3JpdGUgdG8gdGhlIHNhbWUgcHJvcGVydHkuICovXAogICAgIC8qIFNpbmNl
IGEgcHV0IHRvICdsZW5ndGgnIG1heSBpbnZhbGlkYXRlIG9wdGltaXphdGlvbnMgaGVyZSwgKi9c
CiAgICAgLyogdGhpcyBtdXN0IGJlIHRoZSBkaXJlY3RseSBzdWJzZXF1ZW50IHByb3BlcnR5IHB1
dC4gKi9cCiAgICAgbWFjcm8oR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKLSAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3Jv
KFB1dEJ5VmFsQWxpYXMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhHZXRCeUlkLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oUHV0QnlJZCwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhQdXRCeVZhbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVy
c1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oR2V0QnlJZCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlJZCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlJ
ZERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFj
cm8oR2V0TWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oQ2hlY2tNZXRob2QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAg
ICBtYWNybyhQdXRHbG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQdXRH
bG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwK
ICAgICAvKiBOb2RlcyBmb3IgY29tcGFyaXNvbiBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNybyhD
b21wYXJlTGVzcywgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAg
bWFjcm8oQ29tcGFyZUxlc3NFcSwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCi0gICAgbWFjcm8oQ29tcGFyZUdyZWF0ZXIsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKENvbXBhcmVHcmVhdGVyRXEsIE5vZGVSZXN1bHRCb29s
ZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKENvbXBhcmVFcSwgTm9kZVJlc3Vs
dEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ29tcGFyZUxlc3MsIE5v
ZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwK
KyAgICBtYWNybyhDb21wYXJlTGVzc0VxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCisgICAgbWFjcm8oQ29tcGFyZUdyZWF0ZXIsIE5v
ZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwK
KyAgICBtYWNybyhDb21wYXJlR3JlYXRlckVxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCisgICAgbWFjcm8oQ29tcGFyZUVxLCBOb2Rl
UmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAg
ICAgbWFjcm8oQ29tcGFyZVN0cmljdEVxLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIFwKICAg
ICAvKiBDYWxscy4gKi9cCi0gICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oQ29uc3RydWN0LCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhD
YWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBO
b2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKENvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwK
ICAgICBcCiAgICAgLyogUmVzb2x2ZSBub2Rlcy4gKi9cCi0gICAgbWFjcm8oUmVzb2x2ZSwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFJlc29sdmVCYXNlLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oUmVzb2x2ZUJhc2VT
dHJpY3RQdXQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhS
ZXNvbHZlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29y
bGQpIFwKKyAgICBtYWNybyhSZXNvbHZlQmFzZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUmVzb2x2ZUJhc2VTdHJpY3RQ
dXQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkg
XAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNy
byhCcmVha3BvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQnJlYWtwb2ludCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oQ2hlY2tI
YXNJbnN0YW5jZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEluc3RhbmNlT2YsIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oTG9naWNhbE5vdCwgTm9kZVJlc3VsdEJvb2xl
YW4pIFwKKyAgICBtYWNybyhMb2dpY2FsTm90LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNaWdo
dENsb2JiZXIpIFwKICAgICBcCiAgICAgLyogQmxvY2sgdGVybWluYWxzLiAqL1wKICAgICBtYWNy
byhKdW1wLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUlzVGVybWluYWwgfCBOb2RlSXNKdW1wKSBc
CkBAIC0yMTAsNiArMjEzLDcgQEAgZW51bSBOb2RlSWQgewogI2RlZmluZSBERkdfT1BfRU5VTShv
cGNvZGUsIGZsYWdzKSBvcGNvZGUjI19pZCwKICAgICBGT1JfRUFDSF9ERkdfT1AoREZHX09QX0VO
VU0pCiAjdW5kZWYgREZHX09QX0VOVU0KKyAgICBMYXN0Tm9kZUlkCiB9OwogCiAvLyBFbnRyaWVz
IGluIHRoaXMgZW51bSBkZXNjcmliZSBhbGwgTm9kZSB0eXBlcy4KQEAgLTQ4NCw2ICs0ODgsMTEg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8yOwogICAgIH0KICAgICAK
KyAgICBib29sIGhhc1ZpcnR1YWxSZWdpc3RlcigpCisgICAgeworICAgICAgICByZXR1cm4gbV92
aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAgICB9CisgICAgCiAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpCiAgICAgewogICAgICAgICBBU1NF
UlQoaGFzUmVzdWx0KCkpOwpAQCAtNTE5LDYgKzUyOCwxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIHJldHVybiBtdXN0R2VuZXJhdGUoKSA/IG1fcmVmQ291bnQgLSAxIDogbV9yZWZDb3VudDsK
ICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRSZWZDb3VudCh1bnNpZ25lZCByZWZDb3VudCkKKyAg
ICB7CisgICAgICAgIG1fcmVmQ291bnQgPSByZWZDb3VudDsKKyAgICB9CisgICAgCiAgICAgTm9k
ZUluZGV4IGNoaWxkMSgpCiAgICAgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJB
cmdzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5j
cHAJKHJldmlzaW9uIDk1MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9w
YWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShE
RkdfSklUKQogCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdTY29yZUJvYXJk
LmgiCisjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXkuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCkBAIC01OCwxMCArNjAsMTcgQEAgcHVibGljOgogICAgICAgICBtX3VzZXMu
cmVzaXplKG1fZ3JhcGguc2l6ZSgpKTsKICAgICAgICAgbV92YXJpYWJsZVVzZXMuaW5pdGlhbGl6
ZVNpbWlsYXJUbyhtX2dyYXBoLnByZWRpY3Rpb25zKCkpOwogICAgICAgICAKKyAgICAgICAgLy8g
UmVwbGFjZW1lbnRzIGFyZSB1c2VkIHRvIGltcGxlbWVudCBsb2NhbCBjb21tb24gc3ViZXhwcmVz
c2lvbiBlbGltaW5hdGlvbi4KKyAgICAgICAgbV9yZXBsYWNlbWVudHMucmVzaXplKG1fZ3JhcGgu
c2l6ZSgpKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dy
YXBoLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBtX3ByZWRpY3Rpb25zW2ldID0gUHJlZGlj
dE5vbmU7CiAgICAgICAgICAgICBtX3VzZXNbaV0gPSBQcmVkaWN0Tm9uZTsKKyAgICAgICAgICAg
IG1fcmVwbGFjZW1lbnRzW2ldID0gTm9Ob2RlOwogICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTGFzdE5vZGVJZDsgKytpKQorICAgICAgICAgICAg
bV9sYXN0U2VlbltpXSA9IE5vTm9kZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXhwb2ludCgp
CkBAIC04Nyw2ICs5NiwyNSBAQCBwdWJsaWM6CiAgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7
CiAgICAgICAgIAogICAgICAgICBmaXh1cCgpOworICAgICAgICAKKyNpZiBFTkFCTEUoREZHX0RF
QlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiR3JhcGggYWZ0ZXIgcHJvcGFnYXRpb24gZml4
dXA6XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKKyNlbmRpZgorCisg
ICAgICAgIGxvY2FsQ1NFKCk7CisKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisgICAg
ICAgIHByaW50ZigiR3JhcGggYWZ0ZXIgQ1NFOlxuIik7CisgICAgICAgIG1fZ3JhcGguZHVtcCht
X2NvZGVCbG9jayk7CisjZW5kaWYKKworICAgICAgICBhbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMo
KTsKKworI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJHcmFw
aCBhZnRlciB2aXJ0dWFsIHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsKKyAgICAgICAgbV9ncmFw
aC5kdW1wKG1fY29kZUJsb2NrKTsKKyNlbmRpZgogICAgIH0KICAgICAKIHByaXZhdGU6CkBAIC0z
MDEsNiArMzI5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUmVzb2x2ZUJhc2VTdHJpY3RQ
dXQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAorICAgICAgICAvLyBUaGlzIGdl
dHMgaWdub3JlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCisgICAgICAgIGNhc2Ug
UGhhbnRvbToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtNDEwLDExICs0NDIsNDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmaXh1cE5vZGUo
bV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwogICAgIH0KICAgICAKKyAgICBOb2RlSW5kZXggY2Fu
b25pY2FsaXplKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBpZiAobm9kZUlu
ZGV4ID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIAorICAg
ICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wID09IFZhbHVlVG9OdW1iZXIpCisgICAgICAg
ICAgICBub2RlSW5kZXggPSBtX2dyYXBoW25vZGVJbmRleF0uY2hpbGQxKCk7CisgICAgICAgIAor
ICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wID09IFZhbHVlVG9JbnQzMikKKyAgICAg
ICAgICAgIG5vZGVJbmRleCA9IG1fZ3JhcGhbbm9kZUluZGV4XS5jaGlsZDEoKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgfQorICAgIAorICAgIC8vIENvbXB1dGVz
IHdoZXJlIHRoZSBzZWFyY2ggZm9yIGEgY2FuZGlkYXRlIGZvciBDU0Ugc2hvdWxkIHN0YXJ0LiBE
b24ndCBjYWxsCisgICAgLy8gdGhpcyBkaXJlY3RseTsgY2FsbCBzdGFydEluZGV4KCkgaW5zdGVh
ZCBhcyBpdCBkb2VzIGxvZ2dpbmcgaW4gZGVidWcgbW9kZS4KKyAgICBOb2RlSW5kZXggY29tcHV0
ZVN0YXJ0SW5kZXhGb3JDaGlsZHJlbihOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5k
ZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIHsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgbGltaXQgPSAzMDA7CisgICAgICAgIAorICAgICAgICBOb2Rl
SW5kZXggc3RhcnQgPSBtX3N0YXJ0OworICAgICAgICBpZiAobV9jb21waWxlSW5kZXggLSBzdGFy
dCA+IGxpbWl0KQorICAgICAgICAgICAgc3RhcnQgPSBtX2NvbXBpbGVJbmRleCAtIGxpbWl0Owor
ICAgICAgICAKKyAgICAgICAgQVNTRVJUKHN0YXJ0ID49IG1fc3RhcnQpOworICAgICAgICAKKyAg
ICAgICAgTm9kZUluZGV4IGNoaWxkID0gY2Fub25pY2FsaXplKGNoaWxkMSk7CisgICAgICAgIGlm
IChjaGlsZCA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm4gc3RhcnQ7CisgICAgICAgIAor
ICAgICAgICBpZiAoc3RhcnQgPCBjaGlsZCkKKyAgICAgICAgICAgIHN0YXJ0ID0gY2hpbGQ7Cisg
ICAgICAgIAorICAgICAgICBjaGlsZCA9IGNhbm9uaWNhbGl6ZShjaGlsZDIpOworICAgICAgICBp
ZiAoY2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OworICAgICAgICAK
KyAgICAgICAgaWYgKHN0YXJ0IDwgY2hpbGQpCisgICAgICAgICAgICBzdGFydCA9IGNoaWxkOwor
ICAgICAgICAKKyAgICAgICAgY2hpbGQgPSBjYW5vbmljYWxpemUoY2hpbGQzKTsKKyAgICAgICAg
aWYgKGNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybiBzdGFydDsKKyAgICAgICAg
CisgICAgICAgIGlmIChzdGFydCA8IGNoaWxkKQorICAgICAgICAgICAgc3RhcnQgPSBjaGlsZDsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBzdGFydDsKKyAgICB9CisgICAgCisgICAgTm9kZUlu
ZGV4IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIHsK
KyAgICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IGNvbXB1dGVTdGFydEluZGV4Rm9yQ2hpbGRyZW4o
Y2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQor
ICAgICAgICBwcmludGYoIiAgbG9va2JhY2sgJXU6ICIsIHJlc3VsdCk7CisjZW5kaWYKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IHN0YXJ0SW5kZXgo
KQorICAgIHsKKyAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwor
ICAgICAgICByZXR1cm4gc3RhcnRJbmRleEZvckNoaWxkcmVuKG5vZGUuY2hpbGQxKCksIG5vZGUu
Y2hpbGQyKCksIG5vZGUuY2hpbGQzKCkpOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggZW5k
SW5kZXhGb3JQdXJlQ1NFKCkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCByZXN1bHQgPSBtX2xh
c3RTZWVuW21fZ3JhcGhbbV9jb21waWxlSW5kZXhdLm9wICYgTm9kZUlkTWFza107CisgICAgICAg
IGlmIChyZXN1bHQgPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPD0gbV9j
b21waWxlSW5kZXgpOworI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJp
bnRmKCIgIGxpbWl0ICV1OiAiLCByZXN1bHQpOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBwdXJlQ1NFKE5vZGUmIG5vZGUpCisgICAg
eworICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQxKCkp
OworICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkp
OworICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gY2Fub25pY2FsaXplKG5vZGUuY2hpbGQzKCkp
OworICAgICAgICAKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleCgpOworICAg
ICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpbmRleC0t
ID4gc3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBvdGhlck5vZGUgPSBtX2dyYXBoW2luZGV4
XTsKKyAgICAgICAgICAgIGlmIChub2RlLm9wICE9IG90aGVyTm9kZS5vcCkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZUluZGV4IG90aGVy
Q2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGlm
IChvdGhlckNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Cisg
ICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDEpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxp
emUob3RoZXJOb2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IE5v
Tm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBpZiAob3Ro
ZXJDaGlsZCAhPSBjaGlsZDIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxk
MygpKTsKKyAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCAhPSBjaGlsZDMp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJl
dHVybiBpbmRleDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzUHJlZGljdGVkTnVtZXJpY2FsKE5vZGUmIG5vZGUpCisgICAgeworICAg
ICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOwor
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9wcmVkaWN0aW9uc1tub2RlLmNoaWxkMigp
XTsKKyAgICAgICAgcmV0dXJuIGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSAmJiBpc1N0cm9uZ1By
ZWRpY3Rpb24ocmlnaHQpCisgICAgICAgICAgICAmJiBpc051bWJlclByZWRpY3Rpb24obGVmdCkg
JiYgaXNOdW1iZXJQcmVkaWN0aW9uKHJpZ2h0KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBsb2dp
Y2FsTm90SXNQdXJlKE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBQcmVkaWN0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQxKCldOworICAgICAgICByZXR1cm4g
aXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSB8fCAhaXNTdHJvbmdQcmVkaWN0aW9uKHBy
ZWRpY3Rpb24pOworICAgIH0KKyAgICAKKyAgICBib29sIGNsb2JiZXJzV29ybGQoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRl
eF07CisgICAgICAgIGlmIChub2RlLm9wICYgTm9kZUNsb2JiZXJzV29ybGQpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCEobm9kZS5vcCAmIE5vZGVNaWdodENsb2JiZXIp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsK
KyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAg
ICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAg
ICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgIGNhc2UgQ29tcGFyZUVxOgorICAg
ICAgICAgICAgcmV0dXJuICFpc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKTsKKyAgICAgICAgY2Fz
ZSBMb2dpY2FsTm90OgorICAgICAgICAgICAgcmV0dXJuICFsb2dpY2FsTm90SXNQdXJlKG5vZGUp
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSWYgYnkgc29tZSBvZGRpdHkgd2UgaGl0IHRoaXMg
Y2FzZSBpbiByZWxlYXNlIGJ1aWxkIGl0J3Mgc2FmZXIgdG8gaGF2ZSBDU0UgYXNzdW1lIHRoZSB3
b3JzdC4KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggZ2xvYmFsVmFyTG9h
ZEVsaW1pbmF0aW9uKHVuc2lnbmVkIHZhck51bWJlcikKKyAgICB7CisgICAgICAgIE5vZGVJbmRl
eCBzdGFydCA9IHN0YXJ0SW5kZXgoKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBt
X2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAg
ICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJO
dW1iZXIoKSA9PSB2YXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgor
ICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgfQor
ICAgIAorICAgIE5vZGVJbmRleCBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hp
bGQxLCBOb2RlSW5kZXggY2hpbGQyKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0g
c3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSwgY2hpbGQyKTsKKyAgICAgICAgZm9yIChOb2Rl
SW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgICAgIGlm
IChub2RlLmNoaWxkMSgpID09IGNoaWxkMSAmJiBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSkg
PT0gY2Fub25pY2FsaXplKGNoaWxkMikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRl
eDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYmIGNhbm9uaWNhbGl6
ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgfQorICAgIAorICAg
IE5vZGVJbmRleCBnZXRNZXRob2RMb2FkRWxpbWluYXRpb24oY29uc3QgTWV0aG9kQ2hlY2tEYXRh
JiBtZXRob2RDaGVja0RhdGEsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGVJbmRleCBj
aGlsZDEpCisgICAgeworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4KCk7Cisg
ICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBz
dGFydDspIHsKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAg
ICAgICAgIGlmIChub2RlLm9wID09IENoZWNrTWV0aG9kCisgICAgICAgICAgICAgICAgJiYgbm9k
ZS5jaGlsZDEoKSA9PSBjaGlsZDEKKyAgICAgICAgICAgICAgICAmJiBub2RlLmlkZW50aWZpZXJO
dW1iZXIoKSA9PSBpZGVudGlmaWVyTnVtYmVyCisgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5t
X21ldGhvZENoZWNrRGF0YVtub2RlLm1ldGhvZENoZWNrRGF0YUluZGV4KCldID09IG1ldGhvZENo
ZWNrRGF0YSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBpZiAo
Y2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwZXJmb3JtU3Vi
c3RpdHV0aW9uKE5vZGVJbmRleCYgY2hpbGQpCisgICAgeworICAgICAgICAvLyBDaGVjayBpZiB0
aGlzIG9wZXJhbmQgaXMgYWN0dWFsbHkgdW51c2VkLgorICAgICAgICBpZiAoY2hpbGQgPT0gTm9O
b2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlcmUgaXMgYW55IHJlcGxhY2VtZW50LgorICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnQg
PSBtX3JlcGxhY2VtZW50c1tjaGlsZF07CisgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBOb05v
ZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBjaGlsZCA9IHJlcGxh
Y2VtZW50OworICAgICAgICAKKyAgICAgICAgLy8gVGhlcmUgaXMgZGVmaW5pdGVseSBhIHJlcGxh
Y2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1lbnQgZG9lcyBub3QKKyAgICAgICAgLy8g
aGF2ZSBhIHJlcGxhY2VtZW50LgorICAgICAgICBBU1NFUlQobV9yZXBsYWNlbWVudHNbY2hpbGRd
ID09IE5vTm9kZSk7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoW2NoaWxkXS5yZWYoKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzZXRSZXBsYWNlbWVudChOb2RlSW5kZXggcmVwbGFjZW1lbnQp
CisgICAgeworICAgICAgICBpZiAocmVwbGFjZW1lbnQgPT0gTm9Ob2RlKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gQmUgc2FmZS4gRG9uJ3QgdHJ5IHRvIHBlcmZv
cm0gcmVwbGFjZW1lbnRzIGlmIHRoZSBwcmVkaWN0aW9ucyBkb24ndAorICAgICAgICAvLyBhZ3Jl
ZS4KKyAgICAgICAgaWYgKG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdICE9IG1fcHJlZGlj
dGlvbnNbcmVwbGFjZW1lbnRdKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyNpZiBF
TkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICAgUmVwbGFjaW5nIEAl
dSAtPiBAJXUiLCBtX2NvbXBpbGVJbmRleCwgcmVwbGFjZW1lbnQpOworI2VuZGlmCisgICAgICAg
IAorICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAg
IG5vZGUub3AgPSBQaGFudG9tOworICAgICAgICBub2RlLnNldFJlZkNvdW50KDEpOworICAgICAg
ICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3aWxsIGVsaW1pbmF0ZSBhbGwgcmVmZXJl
bmNlcyB0byB0aGlzIG5vZGUuCisgICAgICAgIG1fcmVwbGFjZW1lbnRzW21fY29tcGlsZUluZGV4
XSA9IHJlcGxhY2VtZW50OworICAgIH0KKyAgICAKKyAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5v
ZGUmIG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxkKCk7
IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNoaWxk
SWR4KyspCisgICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihtX2dyYXBoLm1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBl
cmZvcm1TdWJzdGl0dXRpb24obm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDEpOworICAgICAgICAg
ICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxkcmVuLmZpeGVkLmNoaWxkMik7CisgICAg
ICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUuY2hpbGRyZW4uZml4ZWQuY2hpbGQzKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVS
Qk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICAlc1sldV06ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFw
aFttX2NvbXBpbGVJbmRleF0ub3ApLCBtX2NvbXBpbGVJbmRleCk7CisjZW5kaWYKKworICAgICAg
ICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgCisgICAgICAgIC8vIEhhbmRsZSB0aGUgcHVy
ZSBub2Rlcy4gVGhlc2Ugbm9kZXMgbmV2ZXIgaGF2ZSBhbnkgc2lkZS1lZmZlY3RzLgorICAgICAg
ICBjYXNlIEJpdEFuZDoKKyAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY2FzZSBCaXRYb3I6
CisgICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICBjYXNlIEJpdExTaGlmdDoKKyAgICAg
ICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNl
IEFyaXRoU3ViOgorICAgICAgICBjYXNlIEFyaXRoTXVsOgorICAgICAgICBjYXNlIEFyaXRoTW9k
OgorICAgICAgICBjYXNlIEFyaXRoRGl2OgorICAgICAgICBjYXNlIEFyaXRoQWJzOgorICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQocHVyZUNTRShub2RlKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgICAgICAvLyBIYW5kbGUgbm9kZXMgdGhhdCBhcmUgY29uZGl0aW9u
YWxseSBwdXJlOiB0aGVzZSBhcmUgcHVyZSwgYW5kIGNhbgorICAgICAgICAvLyBiZSBDU0UnZCwg
c28gbG9uZyBhcyB0aGUgcHJlZGljdGlvbiBpcyB0aGUgb25lIHdlIHdhbnQuCisgICAgICAgIGNh
c2UgVmFsdWVBZGQ6CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAgIGNhc2UgQ29t
cGFyZUxlc3NFcToKKyAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICAgICAgY2FzZSBD
b21wYXJlR3JlYXRlckVxOgorICAgICAgICBjYXNlIENvbXBhcmVFcTogeworICAgICAgICAgICAg
aWYgKGlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IHJlcGxhY2VtZW50SW5kZXggPSBwdXJlQ1NFKG5vZGUpOworICAgICAgICAgICAgICAgIGlm
IChyZXBsYWNlbWVudEluZGV4ICE9IE5vTm9kZSAmJiBpc1ByZWRpY3RlZE51bWVyaWNhbChtX2dy
YXBoW3JlcGxhY2VtZW50SW5kZXhdKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1l
bnQocmVwbGFjZW1lbnRJbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTG9naWNhbE5vdDogeworICAg
ICAgICAgICAgaWYgKGxvZ2ljYWxOb3RJc1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBO
b2RlSW5kZXggcmVwbGFjZW1lbnRJbmRleCA9IHB1cmVDU0Uobm9kZSk7CisgICAgICAgICAgICAg
ICAgaWYgKHJlcGxhY2VtZW50SW5kZXggIT0gTm9Ob2RlICYmIGxvZ2ljYWxOb3RJc1B1cmUobV9n
cmFwaFtyZXBsYWNlbWVudEluZGV4XSkpCisgICAgICAgICAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KHJlcGxhY2VtZW50SW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSBoZWFw
IGFjY2Vzc2VzLiBUaGVzZSBhcmUgbm90IHF1aXRlIHB1cmUsIGJ1dCB3ZSBjYW4gc3RpbGwKKyAg
ICAgICAgLy8gb3B0aW1pemUgdGhlbSBwcm92aWRlZCB0aGF0IHNvbWUgc3VidGxlIGNvbmRpdGlv
bnMgYXJlIG1ldC4KKyAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24obm9kZS52YXJOdW1iZXIoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoK
KyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKG5vZGUu
Y2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICBpZiAoZ2V0QnlWYWxMb2Fk
RWxpbWluYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkgIT0gTm9Ob2RlKQorICAg
ICAgICAgICAgICAgIG5vZGUub3AgPSBQdXRCeVZhbEFsaWFzOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja01ldGhvZDoKKyAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KGdldE1ldGhvZExvYWRFbGltaW5hdGlvbihtX2dyYXBoLm1fbWV0aG9kQ2hl
Y2tEYXRhW25vZGUubWV0aG9kQ2hlY2tEYXRhSW5kZXgoKV0sIG5vZGUuaWRlbnRpZmllck51bWJl
cigpLCBub2RlLmNoaWxkMSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gZG8gbm90aGluZy4KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2xhc3RTZWVuW25vZGUub3Ag
JiBOb2RlSWRNYXNrXSA9IG1fY29tcGlsZUluZGV4OworI2lmIEVOQUJMRShERkdfREVCVUdfVkVS
Qk9TRSkKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgfQorICAgIAorICAgIHZv
aWQgcGVyZm9ybUJsb2NrQ1NFKEJhc2ljQmxvY2smIGJsb2NrKQorICAgIHsKKyAgICAgICAgbV9z
dGFydCA9IGJsb2NrLmJlZ2luOworICAgICAgICBOb2RlSW5kZXggZW5kID0gYmxvY2suZW5kOwor
ICAgICAgICBmb3IgKG1fY29tcGlsZUluZGV4ID0gbV9zdGFydDsgbV9jb21waWxlSW5kZXggPCBl
bmQ7ICsrbV9jb21waWxlSW5kZXgpCisgICAgICAgICAgICBwZXJmb3JtTm9kZUNTRShtX2dyYXBo
W21fY29tcGlsZUluZGV4XSk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jYWxDU0UoKQorICAg
IHsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiUGVyZm9y
bWluZyBsb2NhbCBDU0U6Iik7CisjZW5kaWYKKyAgICAgICAgZm9yICh1bnNpZ25lZCBibG9jayA9
IDA7IGJsb2NrIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2spCisgICAgICAgICAg
ICBwZXJmb3JtQmxvY2tDU0UoKm1fZ3JhcGgubV9ibG9ja3NbYmxvY2tdKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBhbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMoKQorICAgIHsKKyAgICAgICAgU2Nv
cmVCb2FyZCBzY29yZUJvYXJkKG1fZ3JhcGgsIG1fZ3JhcGgubV9wcmVzZXJ2ZWRWYXJzKTsKKyAg
ICAgICAgdW5zaWduZWQgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVzID0gbV9ncmFwaC5tX2Jsb2Nrcy5s
YXN0KCktPmVuZDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplRXhjbHVkaW5n
UGhpTm9kZXM7ICsraSkgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaV07Cisg
ICAgICAgIAorICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAgLy8gR2V0TG9jYWwgbm9k
ZXMgYXJlIGVmZmVjdGl2ZWx5IHBoaSBub2RlcyBpbiB0aGUgZ3JhcGgsIHJlZmVyZW5jaW5nCisg
ICAgICAgICAgICAvLyByZXN1bHRzIGZyb20gcHJpb3IgYmxvY2tzLgorICAgICAgICAgICAgaWYg
KG5vZGUub3AgIT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCwgY2FsbCB1
c2Ugb24gYWxsIG9mIHRoZSBjdXJyZW50IG5vZGUncyBjaGlsZHJlbiwgdGhlbgorICAgICAgICAg
ICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVhbFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRv
IHNvIGluIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBvcmRlciBzbyB0aGF0IGlmIGEgY2hpbGQg
aXMgb24gaXRzIGxhc3QgdXNlLCBhbmQgYQorICAgICAgICAgICAgICAgIC8vIFZpcnR1YWxSZWdp
c3RlciBpcyBmcmVlZCwgdGhlbiBpdCBtYXkgYmUgcmV1c2VkIGZvciBub2RlLgorICAgICAgICAg
ICAgICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8
IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2UobV9ncmFwaC5tX3ZhckFyZ0NoaWxk
cmVuW2NoaWxkSWR4XSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAg
IHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICBzY29y
ZUJvYXJkLnVzZShub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghbm9kZS5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgbm9kZS5zZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcmVC
b2FyZC5hbGxvY2F0ZSgpKTsKKyAgICAgICAgICAgIC8vICdtdXN0R2VuZXJhdGUnIG5vZGVzIGhh
dmUgdGhlaXIgdXNlQ291bnQgYXJ0aWZpY2lhbGx5IGVsZXZhdGVkLAorICAgICAgICAgICAgLy8g
Y2FsbCB1c2Ugbm93IHRvIGFjY291bnQgZm9yIHRoaXMuCisgICAgICAgICAgICBpZiAobm9kZS5t
dXN0R2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vICdtX251bUNhbGxlZVJlZ2lzdGVycycgaXMgdGhlIG51bWJlciBv
ZiBsb2NhbHMgYW5kIHRlbXBvcmFyaWVzIGFsbG9jYXRlZAorICAgICAgICAvLyBmb3IgdGhlIGZ1
bmN0aW9uIChhbmQgY2hlY2tlZCBmb3Igb24gZW50cnkpLiBTaW5jZSB3ZSBwZXJmb3JtIGEgbmV3
IGFuZAorICAgICAgICAvLyBkaWZmZXJlbnQgYWxsb2NhdGlvbiBvZiB0ZW1wb3JhcmllcywgbW9y
ZSByZWdpc3RlcnMgbWF5IG5vdyBiZSByZXF1aXJlZC4KKyAgICAgICAgdW5zaWduZWQgY2FsbGVl
UmVnaXN0ZXJzID0gc2NvcmVCb2FyZC5hbGxvY2F0ZWRDb3VudCgpICsgbV9ncmFwaC5tX3ByZXNl
cnZlZFZhcnMgKyBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHM7CisgICAgICAgIGlmICgodW5zaWdu
ZWQpbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIDwgY2FsbGVlUmVnaXN0ZXJzKQor
ICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVn
aXN0ZXJzOworICAgIH0KKyAgICAKICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICBKU0dsb2JhbERh
dGEmIG1fZ2xvYmFsRGF0YTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwogICAgIENvZGVC
bG9jayogbV9wcm9maWxlZEJsb2NrOwogICAgIAorICAgIE5vZGVJbmRleCBtX3N0YXJ0OwogICAg
IE5vZGVJbmRleCBtX2NvbXBpbGVJbmRleDsKICAgICAKICAgICBWZWN0b3I8UHJlZGljdGVkVHlw
ZSwgMTY+IG1fcHJlZGljdGlvbnM7CkBAIC00MjcsNiArODY4LDkgQEAgcHJpdmF0ZToKICNlbmRp
ZgogICAgIAogICAgIGJvb2wgbV9jaGFuZ2VkOworCisgICAgVmVjdG9yPE5vZGVJbmRleCwgMTY+
IG1fcmVwbGFjZW1lbnRzOworICAgIEZpeGVkQXJyYXk8Tm9kZUluZGV4LCBMYXN0Tm9kZUlkPiBt
X2xhc3RTZWVuOwogfTsKIAogdm9pZCBwcm9wYWdhdGUoR3JhcGgmIGdyYXBoLCBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIENvZGVCbG9jayogY29kZUJsb2NrKQpAQCAtNDM4LDkgKzg4Miw2IEBA
IHZvaWQgcHJvcGFnYXRlKEdyYXBoJiBncmFwaCwgSlNHbG9iYWxEYXQKICAgICBQcm9wYWdhdG9y
IHByb3BhZ2F0b3IoZ3JhcGgsICpnbG9iYWxEYXRhLCBjb2RlQmxvY2ssIHByb2ZpbGVkQmxvY2sp
OwogICAgIHByb3BhZ2F0b3IuZml4cG9pbnQoKTsKICAgICAKLSNpZiBFTkFCTEUoREZHX0RFQlVH
X1ZFUkJPU0UpCi0gICAgZ3JhcGguZHVtcChjb2RlQmxvY2spOwotI2VuZGlmCiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NTM1MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTU3LDE2ICsxMTU3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgTm9kZUlu
ZGV4IGFsaWFzID0gbm9kZS5jaGlsZDMoKTsKLSAgICAgICAgaWYgKGFsaWFzICE9IE5vTm9kZSkg
ewotICAgICAgICAgICAgLy8gRklYTUU6IHJlc3VsdCBzaG91bGQgYmUgYWJsZSB0byByZXVzZSBj
aGlsZDEsIGNoaWxkMi4gU2hvdWxkIGhhdmUgYW4gJ1VudXNlZE9wZXJhbmQnIHR5cGUuCi0gICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhbGlhc2VkVmFsdWUodGhpcywgbm9kZS5jaGlsZDMoKSk7
Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGFsaWFzZWRWYWx1ZSk7Ci0g
ICAgICAgICAgICBtX2ppdC5tb3ZlKGFsaWFzZWRWYWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsK
LSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCisgICAgICAgIEFTU0VSVChub2RlLmNo
aWxkMygpID09IE5vTm9kZSk7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3Jh
Z2UodGhpcyk7CkBAIC0xNTk2LDYgKzE1ODcsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
UGhhbnRvbToKKyAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wLgorICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICBpZiAobm9k
ZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107779</attachid>
            <date>2011-09-17 16:55:22 -0700</date>
            <delta_ts>2011-09-17 17:20:48 -0700</delta_ts>
            <desc>the patch - updated changelog</desc>
            <filename>cse_patch_5.diff</filename>
            <type>text/plain</type>
            <size>46351</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUzODQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTYgQEAK
KzIwMTEtMDktMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IGhhdmUgZnVsbCBibG9jay1sb2NhbCBDU0UKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzE2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgYmxvY2st
bG9jYWwgQ1NFIHRvIHRoZSBERkcuIENTRSBydW5zIGluIHRoZSBwcm9wYWdhdG9yIGp1c3QgYWZ0
ZXIKKyAgICAgICAgdHlwZSBwcm9wYWdhdGlvbi4gSXQgaXMgcGFydCBvZiB0aGUgcHJvcGFnYXRv
ciBpdHNlbGYgYmVjYXVzZSBpdCBuZWVkcyB0bworICAgICAgICB1c2UgdGhlIHByb3BhZ2F0b3In
cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG9wZXJhdGlvbnMK
KyAgICAgICAgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLiBCZWNhdXNlIGl0IGNoYW5nZXMgdGhlIGxp
dmUtcmFuZ2VzIG9mIG5vZGVzLCB0aGUKKyAgICAgICAgdmlydHVhbCByZWdpc3RlciBhbGxvY2F0
b3IgaGFkIHRvIGJlIG1vdmVkIGludG8gdGhlIHByb3BhZ2F0b3Igc28gdGhhdCBpdAorICAgICAg
ICBydW5zIGFmdGVyIENTRS4gVG8gZW5zdXJlIHRoYXQgdGhlIGJhY2stZW5kIGtub3dzIHRvIGtl
ZXAgdGhlIGlucHV0cyB0bworICAgICAgICBhbnkgZWxpbWluYXRlZCBub2RlIGFsaXZlIGZvciBP
U1IsIGEgbmV3IG5vZGUgdHlwZSwgUGhhbnRvbSwgd2FzIGludHJvZHVjZWQuCisgICAgICAgIEl0
IGlzIGEgbm8tb3AgYnV0IHByb2xvbmdlcyB0aGUgbGl2ZS1yYW5nZSBvZiBpdHMgaW5wdXRzLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhbiA4MCUgc3BlZWQtdXAgb24gaW1hZ2luZy1nYXVz
c2lhbi1ibHVyLCBhbmQgYSAxMCUgc3BlZWQtdXAgb24KKyAgICAgICAgS3Jha2VuLgorICAgICAg
ICAKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGRmZy9ERkdBbGlhc1RyYWNrZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2Up
OgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6Ok1l
dGhvZENoZWNrRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6TWV0aG9kQ2hl
Y2tEYXRhOjpvcGVyYXRvciE9KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Omhhc1ZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6c2V0UmVmQ291bnQpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpQcm9wYWdhdG9yKToKKyAgICAgICAgKEpTQzo6
REZHOjpQcm9wYWdhdG9yOjpmaXhwb2ludCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRv
cjo6cHJvcGFnYXRlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Y2Fub25p
Y2FsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpjb21wdXRlU3RhcnRJbmRl
eCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6c3RhcnRJbmRleCk6CisgICAgICAg
IChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHVyZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJv
cGFnYXRvcjo6Z2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9wYWdhdG9yOjpnZXRCeVZhbExvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6Z2V0TWV0aG9kTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpQcm9wYWdhdG9yOjpwZXJmb3JtU3Vic3RpdHV0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
cm9wYWdhdG9yOjpzZXRSZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRv
cjo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZv
cm1CbG9ja0NTRSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6bG9jYWxDU0UpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycyk6
CisgICAgICAgIChKU0M6OkRGRzo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKwogMjAxMS0wOS0xNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBUb3VjaCBQbGF0Zm9ybS5oIGluIHRoZSBob3BlIHRvIGZpeCBTbm93TGVvcGFyZCBJbnRl
bCBSZWxlYXNlIChXZWJLaXQyIFRlc3RzKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiA5NTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTksNyAr
MzU5LDYgQEAKIAkJODZFQzlERDMxMzI4REY4MjAwMkIyQUQ3IC8qIERGR1NwZWN1bGF0aXZlSklU
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDOURD
MzEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuaCAqLzsgfTsKIAkJODZFQ0Ez
RUExMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2Rl
LmggKi87IH07CiAJCTg2RUNBM0ZBMTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDQTNGOTEz
MkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5oICovOyB9OwotCQk4NkVDQTRGMTEzMkVB
QTZEMDAyQjJBRDcgLyogREZHQWxpYXNUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkVDQTRGMDEzMkVBQTZEMDAyQjJBRDcgLyogREZHQWxp
YXNUcmFja2VyLmggKi87IH07CiAJCTg2RjM4ODU5MTIxMTMwQ0EwMDdBN0NFMyAvKiBBdG9taWNT
dHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4NkYzODg1ODEyMTEzMENBMDA3QTdDRTMgLyogQXRvbWljU3RyaW5nSGFzaC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkwMjEzRTNEMTIzQTQw
QzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwMjEzRTNCMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1v
cnlTdGF0aXN0aWNzLmNwcCAqLzsgfTsKIAkJOTAyMTNFM0UxMjNBNDBDMjAwRDQyMkYzIC8qIE1l
bW9yeVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkwMjEzRTNDMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTExMTEsNyAr
MTExMCw2IEBACiAJCTg2RUM5REMzMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJ
VC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTcGVjdWxhdGl2ZUpJVC5o
OyBwYXRoID0gZGZnL0RGR1NwZWN1bGF0aXZlSklULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05vZGUuaDsgcGF0aCA9IGRmZy9ERkdOb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RUNBM0Y5MTMyREYyNUEwMDJCMkFENyAvKiBE
RkdTY29yZUJvYXJkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Njb3Jl
Qm9hcmQuaDsgcGF0aCA9IGRmZy9ERkdTY29yZUJvYXJkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTg2RUNBNEYwMTMyRUFBNkQwMDJCMkFENyAvKiBERkdBbGlhc1RyYWNrZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWxpYXNUcmFja2VyLmg7IHBhdGgg
PSBkZmcvREZHQWxpYXNUcmFja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
RjM4ODU4MTIxMTMwQ0EwMDdBN0NFMyAvKiBBdG9taWNTdHJpbmdIYXNoLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEF0b21pY1N0cmluZ0hhc2guaDsgcGF0aCA9IHRleHQvQXRv
bWljU3RyaW5nSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MDIxM0UzQjEy
M0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBNZW1vcnlTdGF0aXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJOTAyMTNFM0MxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3Rp
Y3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVtb3J5U3RhdGlzdGljcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIzNSw3ICsyMjMzLDYgQEAKIAkJCQkw
RkQzQzgyMzE0MTE1RDFBMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5jcHAgKi8sCiAJCQkJMEZE
M0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovLAogCQkJCTBGRDNDODIwMTQx
MTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovLAotCQkJCTg2RUNBNEYwMTMyRUFBNkQw
MDJCMkFENyAvKiBERkdBbGlhc1RyYWNrZXIuaCAqLywKIAkJCQk4NkVDOURCNDEzMjhERjgyMDAy
QjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwICovLAogCQkJCTg2RUM5REI1MTMyOERGODIw
MDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oICovLAogCQkJCTg2QUU2QzRCMTM2QTExRTQw
MDk2MzAxMiAvKiBERkdGUFJJbmZvLmggKi8sCkBAIC0yNDkzLDcgKzI0OTAsNiBAQAogCQkJCUJD
MThDM0ZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTEzNUZBRjIxMkQyNkFDRTAwM0MwODNCIC8qIERlY29kZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDM0ZDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZXF1ZS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJODZFQ0E0RjExMzJFQUE2RDAwMkIyQUQ3IC8qIERGR0FsaWFzVHJhY2tlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2Rl
UGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyog
REZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERGODIw
MDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FsaWFzVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWxpYXNUcmFja2VyLmgJKHJldmlzaW9uIDk1MzUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGlhc1RyYWNrZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMSwxNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIERGR0FsaWFzVHJhY2tlcl9oCi0jZGVmaW5lIERGR0FsaWFzVHJhY2tl
cl9oCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgPGRmZy9ERkdHcmFwaC5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewotCi0vLyA9PT0gQWxpYXNUcmFja2VyID09PQotLy8KLS8vIFRoaXMgY2xhc3MgaWQgdXNlZCB0
byBkZXRlY3QgYWxpYXNpbmcgcHJvcGVydHkgYWNjZXNzZXMsIHdoaWNoIHdlIG1heQotLy8gYmUg
YWJsZSB0byBzcGVjdWxhdGl2ZWx5IG9wdGltaXplIChmb3IgZXhhbXBsZSByZW1vdmluZyByZWR1
bmRhbnQgbG9hZHMKLS8vIHdoZXJlIHdlIGtub3cgYSBnZXR0ZXIgd2lsbCBub3QgYmUgY2FsbGVk
LCBvciBvcHRpbWl6aW5nIHB1dHMgdG8gYXJyYXlzCi0vLyB3aGVyZSB3ZSBrbm93IHRoZSB2YWx1
ZSBiZWluZyB3cml0dGVuIHRvIGluIHdpdGhpbiBsZW5ndGggYW5kIGlzIG5vdCBhCi0vLyBob2xl
IHZhbHVlKS4gSW4gdGltZSwgdGhpcyBzaG91bGQgYmUgbW9yZSB0aGFuIGEgMS1kZWVwIGJ1ZmZl
ciEKLWNsYXNzIEFsaWFzVHJhY2tlciB7Ci1wdWJsaWM6Ci0gICAgQWxpYXNUcmFja2VyKEdyYXBo
JiBncmFwaCkKLSAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQotICAgICAgICAsIG1fY2FuZGlkYXRl
QWxpYXNHZXRCeVZhbChOb05vZGUpCi0gICAgewotICAgIH0KLQotICAgIE5vZGVJbmRleCBsb29r
dXBHZXRCeVZhbChOb2RlSW5kZXggYmFzZSwgTm9kZUluZGV4IHByb3BlcnR5KQotICAgIHsKLSAg
ICAgICAgLy8gVHJ5IHRvIGRldGVjdCBzaXR1YXRpb25zIHdoZXJlIGEgR2V0QnlWYWwgZm9sbG93
cyBhbm90aGVyIEdldEJ5VmFsIHRvIHRoZSBzYW1lCi0gICAgICAgIC8vIHByb3BlcnR5OyBpbiB0
aGVzZSBjYXNlcywgd2UgbWF5IGJlIGFibGUgdG8gb21pdCB0aGUgc3Vic2VxdWVudCBnZXQgb24g
dGhlCi0gICAgICAgIC8vIHNwZWN1bGF0aXZlIHBhdGgsIHdoZXJlIHdlIGtub3cgY29uZGl0aW9u
cyBob2xkIHRvIG1ha2UgdGhpcyBzYWZlIChmb3IgZXhhbXBsZSwKLSAgICAgICAgLy8gb24gdGhl
IHNwZWN1bGF0aXZlIHBhdGggd2Ugd2lsbCBub3QgaGF2ZSBhbGxvd2VkIGdldHRlciBhY2Nlc3Mp
LgotICAgICAgICBpZiAobV9jYW5kaWRhdGVBbGlhc0dldEJ5VmFsICE9IE5vTm9kZSkgewotICAg
ICAgICAgICAgTm9kZSYgcG9zc2libGVBbGlhcyA9IG1fZ3JhcGhbbV9jYW5kaWRhdGVBbGlhc0dl
dEJ5VmFsXTsKLSAgICAgICAgICAgIEFTU0VSVChwb3NzaWJsZUFsaWFzLm9wID09IEdldEJ5VmFs
KTsKLSAgICAgICAgICAgIC8vIFRoaXMgY2hlY2sgZW5zdXJlcyB0aGUgYWNjZXNzZXMgYWxpYXMs
IHByb3ZpZGVkIHRoYXQgdGhlIHN1YnNjcmlwdCBpcyBhbgotICAgICAgICAgICAgLy8gaW50ZWdl
ciBpbmRleCAodGhpcyBpcyBnb29kIGVub3VnaDsgdGhlIHNwZWN1bGF0aXZlIHBhdGggd2lsbCBv
bmx5IGdlbmVyYXRlCi0gICAgICAgICAgICAvLyBvcHRpbWl6ZWQgYWNjZXNzZXMgdG8gaGFuZGxl
IGludGVnZXIgc3Vic2NyaXB0cykuCi0gICAgICAgICAgICBpZiAocG9zc2libGVBbGlhcy5jaGls
ZDEoKSA9PSBiYXNlICYmIGVxdWFsSWdub3JpbmdMYXRlck51bWVyaWNDb252ZXJzaW9uKHBvc3Np
YmxlQWxpYXMuY2hpbGQyKCksIHByb3BlcnR5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9j
YW5kaWRhdGVBbGlhc0dldEJ5VmFsOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBOb05vZGU7
Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRHZXRCeVZhbChOb2RlSW5kZXggZ2V0QnlWYWwpCi0g
ICAgewotICAgICAgICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBnZXRCeVZhbDsKLSAgICB9
Ci0KLSAgICB2b2lkIHJlY29yZFB1dEJ5VmFsKE5vZGVJbmRleCBwdXRCeVZhbCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVF9VTlVTRUQocHV0QnlWYWwsIG1fZ3JhcGhbcHV0QnlWYWxdLm9wID09IFB1
dEJ5VmFsIHx8IG1fZ3JhcGhbcHV0QnlWYWxdLm9wID09IFB1dEJ5VmFsQWxpYXMpOwotICAgICAg
ICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7Ci0gICAgfQotCi0gICAgdm9pZCBy
ZWNvcmRHZXRCeUlkKE5vZGVJbmRleCBnZXRCeUlkKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChnZXRCeUlkLCBtX2dyYXBoW2dldEJ5SWRdLm9wID09IEdldEJ5SWQpOwotICAgICAgICBt
X2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
cmVjb3JkR2V0TWV0aG9kKE5vZGVJbmRleCBnZXRNZXRob2QpCi0gICAgewotICAgICAgICBBU1NF
UlRfVU5VU0VEKGdldE1ldGhvZCwgbV9ncmFwaFtnZXRNZXRob2RdLm9wID09IEdldE1ldGhvZCB8
fCBtX2dyYXBoW2dldE1ldGhvZF0ub3AgPT0gQ2hlY2tNZXRob2QpOwotICAgICAgICBtX2NhbmRp
ZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRQdXRC
eUlkKE5vZGVJbmRleCBwdXRCeUlkKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChwdXRC
eUlkLCBtX2dyYXBoW3B1dEJ5SWRdLm9wID09IFB1dEJ5SWQpOwotICAgICAgICBtX2NhbmRpZGF0
ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7Ci0gICAgfQotCi0gICAgdm9pZCByZWNvcmRQdXRCeUlk
RGlyZWN0KE5vZGVJbmRleCBwdXRCeVZhbCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQo
cHV0QnlWYWwsIG1fZ3JhcGhbcHV0QnlWYWxdLm9wID09IFB1dEJ5SWREaXJlY3QpOwotICAgICAg
ICBtX2NhbmRpZGF0ZUFsaWFzR2V0QnlWYWwgPSBOb05vZGU7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgcmVjb3JkQ2FsbChOb2RlSW5kZXggY2FsbCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVT
RUQoY2FsbCwgbV9ncmFwaFtjYWxsXS5vcCA9PSBDYWxsKTsKLSAgICAgICAgbV9jYW5kaWRhdGVB
bGlhc0dldEJ5VmFsID0gTm9Ob2RlOwotICAgIH0KLQotICAgIHZvaWQgcmVjb3JkQ29uc3RydWN0
KE5vZGVJbmRleCBjb25zdHJ1Y3QpCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbnN0
cnVjdCwgbV9ncmFwaFtjb25zdHJ1Y3RdLm9wID09IENvbnN0cnVjdCk7Ci0gICAgICAgIG1fY2Fu
ZGlkYXRlQWxpYXNHZXRCeVZhbCA9IE5vTm9kZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlY29yZFJl
c29sdmUoTm9kZUluZGV4IHJlc29sdmUpCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKHJl
c29sdmUsIG1fZ3JhcGhbcmVzb2x2ZV0ub3AgPT0gUmVzb2x2ZQotICAgICAgICAgICAgfHwgbV9n
cmFwaFtyZXNvbHZlXS5vcCA9PSBSZXNvbHZlQmFzZQotICAgICAgICAgICAgfHwgbV9ncmFwaFty
ZXNvbHZlXS5vcCA9PSBSZXNvbHZlQmFzZVN0cmljdFB1dCk7Ci0gICAgICAgIG1fY2FuZGlkYXRl
QWxpYXNHZXRCeVZhbCA9IE5vTm9kZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gVGhpcyBt
ZXRob2QgcmV0dXJucyB0cnVlIGZvciBhcmd1bWVudHM6Ci0gICAgLy8gICAtIChYLCBYKQotICAg
IC8vICAgLSAoWCwgVmFsdWVUb051bWJlcihYKSkKLSAgICAvLyAgIC0gKFgsIFZhbHVlVG9JbnQz
MihYKSkKLSAgICAvLyAgIC0gKFgsIE51bWJlclRvSW50MzIoWCkpCi0gICAgYm9vbCBlcXVhbEln
bm9yaW5nTGF0ZXJOdW1lcmljQ29udmVyc2lvbihOb2RlSW5kZXggb3AxLCBOb2RlSW5kZXggb3Ay
KQotICAgIHsKLSAgICAgICAgaWYgKG9wMSA9PSBvcDIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgTm9kZSYgbm9kZTIgPSBtX2dyYXBoW29wMl07Ci0gICAgICAgIHJldHVybiAo
bm9kZTIub3AgPT0gVmFsdWVUb051bWJlciB8fCBub2RlMi5vcCA9PSBWYWx1ZVRvSW50MzIpICYm
IG9wMSA9PSBub2RlMi5jaGlsZDEoKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgZ3JhcGgsIHRvIGxv
b2sgdXAgcG90ZW50aWFsbHkgYWxpYXNpbmcgbm9kZXMuCi0gICAgR3JhcGgmIG1fZ3JhcGg7Ci0g
ICAgLy8gQ3VycmVudGx5IGEgMS1kZWVwIGJ1ZmZlciEKLSAgICBOb2RlSW5kZXggbV9jYW5kaWRh
dGVBbGlhc0dldEJ5VmFsOwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5k
aWYKLSNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk1MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDcg
QEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVkZSAiREZHQWxpYXNUcmFja2VyLmgi
CiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCi0jaW5jbHVkZSAiREZHU2NvcmVCb2FyZC5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAK
QEAgLTYzNiw4ICs2MzQsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICBtX2NvbnN0YW50c1tpXSA9IENvbnN0YW50UmVjb3JkKCk7CiAgICAg
fQogCi0gICAgQWxpYXNUcmFja2VyIGFsaWFzZXMobV9ncmFwaCk7Ci0KICAgICBJbnRlcnByZXRl
ciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmludGVycHJldGVyOwogICAgIEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpOwogICAgIHVuc2lnbmVkIGJsb2NrQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKQEAgLTk1MCwx
MCArOTQ2LDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgd2Vha2x5UHJlZGljdEFycmF5KGJhc2UpOwogICAgICAgICAgICAgd2Vha2x5UHJl
ZGljdEludDMyKHByb3BlcnR5KTsKIAotICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFsID0g
YWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKDApLCBPcEluZm8oUHJlZGljdE5vbmUpLCBiYXNl
LCBwcm9wZXJ0eSwgYWxpYXNlcy5sb29rdXBHZXRCeVZhbChiYXNlLCBwcm9wZXJ0eSkpOworICAg
ICAgICAgICAgTm9kZUluZGV4IGdldEJ5VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZv
KDApLCBPcEluZm8oUHJlZGljdE5vbmUpLCBiYXNlLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICBz
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlWYWwpOwogICAgICAgICAg
ICAgc3Ryb25nbHlQcmVkaWN0KGdldEJ5VmFsKTsKLSAgICAgICAgICAgIGFsaWFzZXMucmVjb3Jk
R2V0QnlWYWwoZ2V0QnlWYWwpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYnlf
dmFsKTsKICAgICAgICAgfQpAQCAtOTY1LDkgKzk2MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RBcnJheShiYXNl
KTsKICAgICAgICAgICAgIHdlYWtseVByZWRpY3RJbnQzMihwcm9wZXJ0eSk7CiAKLSAgICAgICAg
ICAgIE5vZGVJbmRleCBhbGlhc2VkR2V0ID0gYWxpYXNlcy5sb29rdXBHZXRCeVZhbChiYXNlLCBw
cm9wZXJ0eSk7Ci0gICAgICAgICAgICBOb2RlSW5kZXggcHV0QnlWYWwgPSBhZGRUb0dyYXBoKGFs
aWFzZWRHZXQgIT0gTm9Ob2RlID8gUHV0QnlWYWxBbGlhcyA6IFB1dEJ5VmFsLCBiYXNlLCBwcm9w
ZXJ0eSwgdmFsdWUpOwotICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRQdXRCeVZhbChwdXRCeVZh
bCk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5VmFsLCBiYXNlLCBwcm9wZXJ0eSwgdmFs
dWUpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfdmFsKTsKICAgICAgICAg
fQpAQCAtOTk4LDEzICs5OTEsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgICAgIG1ldGhvZENoZWNrRGF0YS5mdW5jdGlvbiA9IG1ldGhv
ZENhbGwuY2FjaGVkRnVuY3Rpb24uZ2V0KCk7CiAgICAgICAgICAgICAgICAgbWV0aG9kQ2hlY2tE
YXRhLnByb3RvdHlwZSA9IG1ldGhvZENhbGwuY2FjaGVkUHJvdG90eXBlLmdldCgpOwogICAgICAg
ICAgICAgICAgIG1fZ3JhcGgubV9tZXRob2RDaGVja0RhdGEuYXBwZW5kKG1ldGhvZENoZWNrRGF0
YSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYWxpYXNlcy5yZWNvcmRHZXRN
ZXRob2QoY2hlY2tNZXRob2QpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBOb2RlSW5kZXggZ2V0TWV0aG9kID0gYWRkVG9HcmFwaChHZXRNZXRob2QsIE9wSW5mbyhpZGVu
dGlmaWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgc2V0
KGdldEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0TWV0aG9kKTsKICAgICAgICAgICAgICAg
ICBzdHJvbmdseVByZWRpY3QoZ2V0TWV0aG9kKTsKLSAgICAgICAgICAgICAgICBhbGlhc2VzLnJl
Y29yZEdldE1ldGhvZChnZXRNZXRob2QpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBtX2N1cnJlbnRJbmRleCArPSBPUENPREVfTEVOR1RIKG9wX21ldGhvZF9jaGVj
aykgKyBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZCk7CkBAIC0xMDE4LDcgKzEwMDgsNiBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2Rl
SW5kZXggZ2V0QnlJZCA9IGFkZFRvR3JhcGgoR2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBP
cEluZm8oUHJlZGljdE5vbmUpLCBiYXNlKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeUlkKTsKICAgICAgICAgICAgIHN0cm9uZ2x5UHJlZGlj
dChnZXRCeUlkKTsKLSAgICAgICAgICAgIGFsaWFzZXMucmVjb3JkR2V0QnlJZChnZXRCeUlkKTsK
IAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X2lkKTsKICAgICAgICAgfQpAQCAt
MTAyOSwxMyArMTAxOCwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGJvb2wgZGlyZWN0ID0gY3VycmVudEluc3RydWN0
aW9uWzhdLnUub3BlcmFuZDsKIAotICAgICAgICAgICAgaWYgKGRpcmVjdCkgewotICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBwdXRCeUlkRGlyZWN0ID0gYWRkVG9HcmFwaChQdXRCeUlkRGlyZWN0
LCBPcEluZm8oaWRlbnRpZmllciksIGJhc2UsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBhbGlh
c2VzLnJlY29yZFB1dEJ5SWREaXJlY3QocHV0QnlJZERpcmVjdCk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwdXRCeUlkID0gYWRkVG9HcmFwaChQdXRC
eUlkLCBPcEluZm8oaWRlbnRpZmllciksIGJhc2UsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBh
bGlhc2VzLnJlY29yZFB1dEJ5SWQocHV0QnlJZCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZGlyZWN0KQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwg
T3BJbmZvKGlkZW50aWZpZXIpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIGJhc2Us
IHZhbHVlKTsKIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAgICAg
ICAgfQpAQCAtMTI1MiwxNCArMTIzOCwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggY2FsbCA9IGFkZENhbGwoaW50ZXJwcmV0ZXIsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCk7Ci0gICAgICAgICAgICBhbGlhc2VzLnJlY29yZENhbGwo
Y2FsbCk7CisgICAgICAgICAgICBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIENhbGwpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbCk7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogewotICAgICAgICAgICAg
Tm9kZUluZGV4IGNvbnN0cnVjdCA9IGFkZENhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgQ29uc3RydWN0KTsKLSAgICAgICAgICAgIGFsaWFzZXMucmVjb3JkQ29uc3RydWN0KGNv
bnN0cnVjdCk7CisgICAgICAgICAgICBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIENvbnN0cnVjdCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jb25zdHJ1Y3Qp
OwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEyNzEsNyArMTI1NSw2IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICAgICAgTm9kZUluZGV4
IHJlc29sdmUgPSBhZGRUb0dyYXBoKFJlc29sdmUsIE9wSW5mbyhpZGVudGlmaWVyKSk7CiAgICAg
ICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzb2x2ZSk7Ci0g
ICAgICAgICAgICBhbGlhc2VzLnJlY29yZFJlc29sdmUocmVzb2x2ZSk7CiAKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX3Jlc29sdmUpOwogICAgICAgICB9CkBAIC0xMjgxLDcgKzEyNjQsNiBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAg
IE5vZGVJbmRleCByZXNvbHZlID0gYWRkVG9HcmFwaChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kID8gUmVzb2x2ZUJhc2VTdHJpY3RQdXQgOiBSZXNvbHZlQmFzZSwgT3BJbmZvKGlkZW50
aWZpZXIpKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCByZXNvbHZlKTsKLSAgICAgICAgICAgIGFsaWFzZXMucmVjb3JkUmVzb2x2ZShyZXNvbHZlKTsK
IAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcmVzb2x2ZV9iYXNlKTsKICAgICAgICAgfQpA
QCAtMTM4NSw1MSArMTM2Nyw2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnNldHVwUHJlZGVjZXNz
b3JzKCkKICAgICB9CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVmlydHVhbFJl
Z2lzdGVycygpCi17Ci0gICAgU2NvcmVCb2FyZCBzY29yZUJvYXJkKG1fZ3JhcGgsIG1fcHJlc2Vy
dmVkVmFycyk7Ci0gICAgdW5zaWduZWQgc2l6ZUV4Y2x1ZGluZ1BoaU5vZGVzID0gbV9ncmFwaC5t
X2Jsb2Nrcy5sYXN0KCktPmVuZDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemVFeGNs
dWRpbmdQaGlOb2RlczsgKytpKSB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2ldOwot
ICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEdldExvY2FsIG5vZGVzIGFyZSBlZmZl
Y3RpdmVseSBwaGkgbm9kZXMgaW4gdGhlIGdyYXBoLCByZWZlcmVuY2luZwotICAgICAgICAvLyBy
ZXN1bHRzIGZyb20gcHJpb3IgYmxvY2tzLgotICAgICAgICBpZiAobm9kZS5vcCAhPSBHZXRMb2Nh
bCkgewotICAgICAgICAgICAgLy8gRmlyc3QsIGNhbGwgdXNlIG9uIGFsbCBvZiB0aGUgY3VycmVu
dCBub2RlJ3MgY2hpbGRyZW4sIHRoZW4KLSAgICAgICAgICAgIC8vIGFsbG9jYXRlIGEgVmlydHVh
bFJlZ2lzdGVyIGZvciB0aGlzIG5vZGUuIFdlIGRvIHNvIGluIHRoaXMKLSAgICAgICAgICAgIC8v
IG9yZGVyIHNvIHRoYXQgaWYgYSBjaGlsZCBpcyBvbiBpdHMgbGFzdCB1c2UsIGFuZCBhCi0gICAg
ICAgICAgICAvLyBWaXJ0dWFsUmVnaXN0ZXIgaXMgZnJlZWQsIHRoZW4gaXQgbWF5IGJlIHJldXNl
ZCBmb3Igbm9kZS4KLSAgICAgICAgICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsK
LSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS5maXJzdENoaWxk
KCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51bUNoaWxkcmVuKCk7IGNo
aWxkSWR4KyspCi0gICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBz
Y29yZUJvYXJkLnVzZShub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgICAgICBzY29yZUJvYXJk
LnVzZShub2RlLmNoaWxkMygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghbm9kZS5oYXNSZXN1bHQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IG5vZGUuc2V0VmlydHVhbFJlZ2lzdGVyKHNjb3JlQm9hcmQuYWxsb2NhdGUoKSk7Ci0gICAgICAg
IC8vICdtdXN0R2VuZXJhdGUnIG5vZGVzIGhhdmUgdGhlaXIgdXNlQ291bnQgYXJ0aWZpY2lhbGx5
IGVsZXZhdGVkLAotICAgICAgICAvLyBjYWxsIHVzZSBub3cgdG8gYWNjb3VudCBmb3IgdGhpcy4K
LSAgICAgICAgaWYgKG5vZGUubXVzdEdlbmVyYXRlKCkpCi0gICAgICAgICAgICBzY29yZUJvYXJk
LnVzZShpKTsKLSAgICB9Ci0KLSAgICAvLyAnbV9udW1DYWxsZWVSZWdpc3RlcnMnIGlzIHRoZSBu
dW1iZXIgb2YgbG9jYWxzIGFuZCB0ZW1wb3JhcmllcyBhbGxvY2F0ZWQKLSAgICAvLyBmb3IgdGhl
IGZ1bmN0aW9uIChhbmQgY2hlY2tlZCBmb3Igb24gZW50cnkpLiBTaW5jZSB3ZSBwZXJmb3JtIGEg
bmV3IGFuZAotICAgIC8vIGRpZmZlcmVudCBhbGxvY2F0aW9uIG9mIHRlbXBvcmFyaWVzLCBtb3Jl
IHJlZ2lzdGVycyBtYXkgbm93IGJlIHJlcXVpcmVkLgotICAgIHVuc2lnbmVkIGNhbGxlZVJlZ2lz
dGVycyA9IHNjb3JlQm9hcmQuYWxsb2NhdGVkQ291bnQoKSArIG1fcHJlc2VydmVkVmFycyArIG1f
cGFyYW1ldGVyU2xvdHM7Ci0gICAgaWYgKCh1bnNpZ25lZCltX2NvZGVCbG9jay0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMgPCBjYWxsZWVSZWdpc3RlcnMpCi0gICAgICAgIG1fY29kZUJsb2NrLT5tX251
bUNhbGxlZVJlZ2lzdGVycyA9IGNhbGxlZVJlZ2lzdGVyczsKLX0KLQogYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2UoKQogewogICAgIC8vIFNldCBkdXJpbmcgY29uc3RydWN0aW9uLgpAQCAtMTQ2
MSw4ICsxMzk4LDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIHNldHVwUHJl
ZGVjZXNzb3JzKCk7CiAgICAgcHJvY2Vzc1BoaVN0YWNrPExvY2FsUGhpU3RhY2s+KCk7CiAgICAg
cHJvY2Vzc1BoaVN0YWNrPEFyZ3VtZW50UGhpU3RhY2s+KCk7Ci0KLSAgICBhbGxvY2F0ZVZpcnR1
YWxSZWdpc3RlcnMoKTsKKyAgICAKKyAgICBtX2dyYXBoLm1fcHJlc2VydmVkVmFycyA9IG1fcHJl
c2VydmVkVmFyczsKKyAgICBtX2dyYXBoLm1fcGFyYW1ldGVyU2xvdHMgPSBtX3BhcmFtZXRlclNs
b3RzOwogCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQogICAgIG1fZ3JhcGguZHVtcCht
X2NvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gOTUzNTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJ
bmRleCBub2RlSW5kZXgsIENvCiAgICAgLy8gICAgICAgICBpZCMgIC0gdGhlIGluZGV4IGluIHRo
ZSBDb2RlQmxvY2sgb2YgYW4gaWRlbnRpZmllciB7IGlmIGNvZGVCbG9jayBpcyBwYXNzZWQgdG8g
ZHVtcCgpLCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGlzIGRpc3BsYXllZCB9LgogICAgIC8v
ICAgICAgICAgdmFyIyAtIHRoZSBpbmRleCBvZiBhIHZhciBvbiB0aGUgZ2xvYmFsIG9iamVjdCwg
dXNlZCBieSBHZXRHbG9iYWxWYXIvUHV0R2xvYmFsVmFyIG9wZXJhdGlvbnMuCiAgICAgcHJpbnRm
KCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlSW5kZXgsIHNraXBwZWQgPyAiICBza2lwcGVkICAi
IDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7Ci0g
ICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBwZWQpCisgICAgaWYgKG5vZGUuaGFzUmVz
dWx0KCkgJiYgIXNraXBwZWQgJiYgbm9kZS5oYXNWaXJ0dWFsUmVnaXN0ZXIoKSkKICAgICAgICAg
cHJpbnRmKCIldSIsIG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIGVsc2UKICAgICAgICAg
cHJpbnRmKCItIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZp
c2lvbiA5NTM1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29y
a2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMjQgQEAgc3RydWN0IE1ldGhvZENoZWNrRGF0YSB7CiAg
ICAgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmU7CiAgICAgSlNPYmplY3QqIGZ1bmN0aW9u
OwogICAgIEpTT2JqZWN0KiBwcm90b3R5cGU7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IE1ldGhvZENoZWNrRGF0YSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoc3Ry
dWN0dXJlICE9IG90aGVyLnN0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKHByb3RvdHlwZVN0cnVjdHVyZSAhPSBvdGhlci5wcm90b3R5cGVTdHJ1Y3R1cmUp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChmdW5jdGlvbiAhPSBvdGhl
ci5mdW5jdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHByb3Rv
dHlwZSAhPSBvdGhlci5wcm90b3R5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
TWV0aG9kQ2hlY2tEYXRhJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICB9CiB9OwogCiB0eXBlZGVmIFZlY3RvciA8QmxvY2tJbmRleCwg
Mj4gUHJlZGVjZXNzb3JMaXN0OwpAQCAtMjgxLDYgKzI5OSw4IEBAIHB1YmxpYzoKICAgICBWZWN0
b3I8IE93blB0cjxCYXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tzOwogICAgIFZlY3RvcjxOb2RlSW5k
ZXgsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwogICAgIFZlY3RvcjxNZXRob2RDaGVja0RhdGE+IG1f
bWV0aG9kQ2hlY2tEYXRhOworICAgIHVuc2lnbmVkIG1fcHJlc2VydmVkVmFyczsKKyAgICB1bnNp
Z25lZCBtX3BhcmFtZXRlclNsb3RzOwogcHJpdmF0ZToKICAgICAKICAgICBKU1ZhbHVlIHZhbHVl
T2ZKU0NvbnN0YW50Tm9kZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRl
eCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NTM1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDcsMTQgKzEwNywxNiBAQCBwcml2YXRlOgogCiAvLyBFbnRyaWVzIGluIHRoZSBOb2RlVHlw
ZSBlbnVtIChiZWxvdykgYXJlIGNvbXBvc2VkIG9mIGFuIGlkLCBhIHJlc3VsdCB0eXBlIChwb3Nz
aWJseSBub25lKQogLy8gYW5kIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGl2ZSBmbGFncyAobXVz
dCBnZW5lcmF0ZSwgaXMgY29uc3RhbnQsIGV0YykuCi0jZGVmaW5lIE5vZGVJZE1hc2sgICAgICAg
ICAgMHhGRkYKLSNkZWZpbmUgTm9kZVJlc3VsdE1hc2sgICAgIDB4RjAwMAotI2RlZmluZSBOb2Rl
TXVzdEdlbmVyYXRlICAweDEwMDAwIC8vIHNldCBvbiBub2RlcyB0aGF0IGhhdmUgc2lkZSBlZmZl
Y3RzLCBhbmQgbWF5IG5vdCB0cml2aWFsbHkgYmUgcmVtb3ZlZCBieSBEQ0UuCi0jZGVmaW5lIE5v
ZGVJc0NvbnN0YW50ICAgIDB4MjAwMDAKLSNkZWZpbmUgTm9kZUlzSnVtcCAgICAgICAgMHg0MDAw
MAotI2RlZmluZSBOb2RlSXNCcmFuY2ggICAgICAweDgwMDAwCi0jZGVmaW5lIE5vZGVJc1Rlcm1p
bmFsICAgMHgxMDAwMDAKLSNkZWZpbmUgTm9kZUhhc1ZhckFyZ3MgICAweDIwMDAwMAorI2RlZmlu
ZSBOb2RlSWRNYXNrICAgICAgICAgICAweEZGRgorI2RlZmluZSBOb2RlUmVzdWx0TWFzayAgICAg
IDB4RjAwMAorI2RlZmluZSBOb2RlTXVzdEdlbmVyYXRlICAgMHgxMDAwMCAvLyBzZXQgb24gbm9k
ZXMgdGhhdCBoYXZlIHNpZGUgZWZmZWN0cywgYW5kIG1heSBub3QgdHJpdmlhbGx5IGJlIHJlbW92
ZWQgYnkgRENFLgorI2RlZmluZSBOb2RlSXNDb25zdGFudCAgICAgMHgyMDAwMAorI2RlZmluZSBO
b2RlSXNKdW1wICAgICAgICAgMHg0MDAwMAorI2RlZmluZSBOb2RlSXNCcmFuY2ggICAgICAgMHg4
MDAwMAorI2RlZmluZSBOb2RlSXNUZXJtaW5hbCAgICAweDEwMDAwMAorI2RlZmluZSBOb2RlSGFz
VmFyQXJncyAgICAweDIwMDAwMAorI2RlZmluZSBOb2RlQ2xvYmJlcnNXb3JsZCAweDQwMDAwMAor
I2RlZmluZSBOb2RlTWlnaHRDbG9iYmVyICAweDgwMDAwMAogCiAvLyBUaGVzZSB2YWx1ZXMgcmVj
b3JkIHRoZSByZXN1bHQgdHlwZSBvZiB0aGUgbm9kZSAoYXMgY2hlY2tlZCBieSBOb2RlUmVzdWx0
TWFzaywgYWJvdmUpLCAwIGZvciBubyByZXN1bHQuCiAjZGVmaW5lIE5vZGVSZXN1bHRKUyAgICAg
IDB4MTAwMApAQCAtMTMxLDYgKzEzMyw3IEBAIHByaXZhdGU6CiAgICAgLyogTm9kZXMgZm9yIGxv
Y2FsIHZhcmlhYmxlIGFjY2Vzcy4gKi9cCiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRK
UykgXAogICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCisgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFBoaSwgMCkgXAogICAgIFwKICAgICAvKiBOb2RlcyBm
b3IgYml0d2lzZSBvcGVyYXRpb25zLiAqL1wKQEAgLTE1OSw0NSArMTYyLDQ1IEBAIHByaXZhdGU6
CiAgICAgbWFjcm8oVmFsdWVUb0RvdWJsZSwgTm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBcCiAgICAgLyogQWRkIG9mIHZhbHVlcyBtYXkgZWl0aGVyIGJlIGFyaXRo
bWV0aWMsIG9yIHJlc3VsdCBpbiBzdHJpbmcgY29uY2F0ZW5hdGlvbi4gKi9cCi0gICAgbWFjcm8o
VmFsdWVBZGQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhW
YWx1ZUFkZCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2Ji
ZXIpIFwKICAgICBcCiAgICAgLyogUHJvcGVydHkgYWNjZXNzLiAqL1wKICAgICAvKiBQdXRCeVZh
bEFsaWFzIGluZGljYXRlcyBhICdwdXQnIGFsaWFzZXMgYSBwcmlvciB3cml0ZSB0byB0aGUgc2Ft
ZSBwcm9wZXJ0eS4gKi9cCiAgICAgLyogU2luY2UgYSBwdXQgdG8gJ2xlbmd0aCcgbWF5IGludmFs
aWRhdGUgb3B0aW1pemF0aW9ucyBoZXJlLCAqL1wKICAgICAvKiB0aGlzIG11c3QgYmUgdGhlIGRp
cmVjdGx5IHN1YnNlcXVlbnQgcHJvcGVydHkgcHV0LiAqL1wKICAgICBtYWNybyhHZXRCeVZhbCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFB1dEJ5VmFsLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oUHV0QnlWYWxBbGlhcywgTm9kZU11c3RHZW5l
cmF0ZSkgXAotICAgIG1hY3JvKEdldEJ5SWQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKLSAgICBtYWNybyhQdXRCeUlkLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8o
UHV0QnlJZERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFB1dEJ5VmFsLCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKKyAgICBtYWNybyhQdXRCeVZh
bEFsaWFzLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKKyAgICBtYWNy
byhHZXRCeUlkLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJz
V29ybGQpIFwKKyAgICBtYWNybyhQdXRCeUlkLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2Ji
ZXJzV29ybGQpIFwKKyAgICBtYWNybyhQdXRCeUlkRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhHZXRNZXRob2QsIE5vZGVSZXN1bHRKUyB8
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDaGVja01ldGhvZCwgTm9kZVJlc3VsdEpT
IHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldEdsb2JhbFZhciwgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFB1dEdsb2JhbFZhciwgTm9kZU11
c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFB1dEdsb2JhbFZhciwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBjb21wYXJpc29u
IG9wZXJhdGlvbnMuICovXAotICAgIG1hY3JvKENvbXBhcmVMZXNzLCBOb2RlUmVzdWx0Qm9vbGVh
biB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhDb21wYXJlTGVzc0VxLCBOb2RlUmVz
dWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhDb21wYXJlR3JlYXRl
ciwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oQ29t
cGFyZUdyZWF0ZXJFcSwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0g
ICAgbWFjcm8oQ29tcGFyZUVxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUp
IFwKKyAgICBtYWNybyhDb21wYXJlTGVzcywgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAorICAgIG1hY3JvKENvbXBhcmVMZXNzRXEsIE5v
ZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwK
KyAgICBtYWNybyhDb21wYXJlR3JlYXRlciwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAorICAgIG1hY3JvKENvbXBhcmVHcmVhdGVyRXEs
IE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIp
IFwKKyAgICBtYWNybyhDb21wYXJlRXEsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwKICAgICBtYWNybyhDb21wYXJlU3RyaWN0RXEsIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgXAogICAgIC8qIENhbGxzLiAqL1wKLSAgICBtYWNybyhD
YWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MpIFwK
LSAgICBtYWNybyhDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSGFzVmFyQXJncykgXAorICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFj
cm8oQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1Zh
ckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKICAgICAvKiBSZXNvbHZlIG5vZGVz
LiAqL1wKLSAgICBtYWNybyhSZXNvbHZlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCi0gICAgbWFjcm8oUmVzb2x2ZUJhc2UsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKLSAgICBtYWNybyhSZXNvbHZlQmFzZVN0cmljdFB1dCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFJlc29sdmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKFJlc29sdmVCYXNl
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwK
KyAgICBtYWNybyhSZXNvbHZlQmFzZVN0cmljdFB1dCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBt
aXNjIG9wZXJhdGlvbnMuICovXAotICAgIG1hY3JvKEJyZWFrcG9pbnQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhCcmVha3BvaW50LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2Ji
ZXJzV29ybGQpIFwKICAgICBtYWNybyhDaGVja0hhc0luc3RhbmNlLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oSW5zdGFuY2VPZiwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBtYWNy
byhMb2dpY2FsTm90LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAorICAgIG1hY3JvKExvZ2ljYWxOb3Qs
IE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAogICAgIFwKICAgICAvKiBC
bG9jayB0ZXJtaW5hbHMuICovXAogICAgIG1hY3JvKEp1bXAsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSXNUZXJtaW5hbCB8IE5vZGVJc0p1bXApIFwKQEAgLTIxMCw2ICsyMTMsNyBAQCBlbnVtIE5v
ZGVJZCB7CiAjZGVmaW5lIERGR19PUF9FTlVNKG9wY29kZSwgZmxhZ3MpIG9wY29kZSMjX2lkLAog
ICAgIEZPUl9FQUNIX0RGR19PUChERkdfT1BfRU5VTSkKICN1bmRlZiBERkdfT1BfRU5VTQorICAg
IExhc3ROb2RlSWQKIH07CiAKIC8vIEVudHJpZXMgaW4gdGhpcyBlbnVtIGRlc2NyaWJlIGFsbCBO
b2RlIHR5cGVzLgpAQCAtNDg0LDYgKzQ4OCwxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJl
dHVybiBtX29wSW5mbzI7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzVmlydHVhbFJlZ2lzdGVy
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAhPSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyOworICAgIH0KKyAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CkBAIC01MTksNiAr
NTI4LDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG11c3RHZW5lcmF0ZSgpID8g
bV9yZWZDb3VudCAtIDEgOiBtX3JlZkNvdW50OwogICAgIH0KICAgICAKKyAgICB2b2lkIHNldFJl
ZkNvdW50KHVuc2lnbmVkIHJlZkNvdW50KQorICAgIHsKKyAgICAgICAgbV9yZWZDb3VudCA9IHJl
ZkNvdW50OworICAgIH0KKyAgICAKICAgICBOb2RlSW5kZXggY2hpbGQxKCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTUzNTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdHcmFw
aC5oIgorI2luY2x1ZGUgIkRGR1Njb3JlQm9hcmQuaCIKKyNpbmNsdWRlIDx3dGYvRml4ZWRBcnJh
eS5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTU4LDEwICs2MCwx
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fdXNlcy5yZXNpemUobV9ncmFwaC5zaXplKCkpOwogICAg
ICAgICBtX3ZhcmlhYmxlVXNlcy5pbml0aWFsaXplU2ltaWxhclRvKG1fZ3JhcGgucHJlZGljdGlv
bnMoKSk7CiAgICAgICAgIAorICAgICAgICAvLyBSZXBsYWNlbWVudHMgYXJlIHVzZWQgdG8gaW1w
bGVtZW50IGxvY2FsIGNvbW1vbiBzdWJleHByZXNzaW9uIGVsaW1pbmF0aW9uLgorICAgICAgICBt
X3JlcGxhY2VtZW50cy5yZXNpemUobV9ncmFwaC5zaXplKCkpOworICAgICAgICAKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGguc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgIG1fcHJlZGljdGlvbnNbaV0gPSBQcmVkaWN0Tm9uZTsKICAgICAgICAgICAgIG1fdXNlc1tp
XSA9IFByZWRpY3ROb25lOworICAgICAgICAgICAgbV9yZXBsYWNlbWVudHNbaV0gPSBOb05vZGU7
CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBM
YXN0Tm9kZUlkOyArK2kpCisgICAgICAgICAgICBtX2xhc3RTZWVuW2ldID0gTm9Ob2RlOwogICAg
IH0KICAgICAKICAgICB2b2lkIGZpeHBvaW50KCkKQEAgLTg3LDYgKzk2LDI1IEBAIHB1YmxpYzoK
ICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKICAgICAgICAgCiAgICAgICAgIGZpeHVwKCk7
CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRm
KCJHcmFwaCBhZnRlciBwcm9wYWdhdGlvbiBmaXh1cDpcbiIpOworICAgICAgICBtX2dyYXBoLmR1
bXAobV9jb2RlQmxvY2spOworI2VuZGlmCisKKyAgICAgICAgbG9jYWxDU0UoKTsKKworI2lmIEVO
QUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciBDU0U6
XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKKyNlbmRpZgorCisgICAg
ICAgIGFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycygpOworCisjaWYgRU5BQkxFKERGR19ERUJVR19W
RVJCT1NFKQorICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIHZpcnR1YWwgcmVnaXN0ZXIgYWxs
b2NhdGlvbjpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOworI2VuZGlm
CiAgICAgfQogICAgIAogcHJpdmF0ZToKQEAgLTMwMSw2ICszMjksMTAgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCisgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25vcmVkIGJlY2F1c2UgaXQgZG9lc24n
dCBkbyBhbnl0aGluZy4KKyAgICAgICAgY2FzZSBQaGFudG9tOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00MTAsMTEgKzQ0Miw0MjAgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGZpeHVwTm9kZShtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CiAg
ICAgfQogICAgIAorICAgIE5vZGVJbmRleCBjYW5vbmljYWxpemUoTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICB7CisgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAg
cmV0dXJuIE5vTm9kZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRleF0u
b3AgPT0gVmFsdWVUb051bWJlcikKKyAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fZ3JhcGhbbm9k
ZUluZGV4XS5jaGlsZDEoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRl
eF0ub3AgPT0gVmFsdWVUb0ludDMyKQorICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9ncmFwaFtu
b2RlSW5kZXhdLmNoaWxkMSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsK
KyAgICB9CisgICAgCisgICAgLy8gQ29tcHV0ZXMgd2hlcmUgdGhlIHNlYXJjaCBmb3IgYSBjYW5k
aWRhdGUgZm9yIENTRSBzaG91bGQgc3RhcnQuIERvbid0IGNhbGwKKyAgICAvLyB0aGlzIGRpcmVj
dGx5OyBjYWxsIHN0YXJ0SW5kZXgoKSBpbnN0ZWFkIGFzIGl0IGRvZXMgbG9nZ2luZyBpbiBkZWJ1
ZyBtb2RlLgorICAgIE5vZGVJbmRleCBjb21wdXRlU3RhcnRJbmRleEZvckNoaWxkcmVuKE5vZGVJ
bmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRl
eCBjaGlsZDMgPSBOb05vZGUpCisgICAgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBsaW1pdCA9
IDMwMDsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IG1fc3RhcnQ7CisgICAg
ICAgIGlmIChtX2NvbXBpbGVJbmRleCAtIHN0YXJ0ID4gbGltaXQpCisgICAgICAgICAgICBzdGFy
dCA9IG1fY29tcGlsZUluZGV4IC0gbGltaXQ7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoc3Rh
cnQgPj0gbV9zdGFydCk7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggY2hpbGQgPSBjYW5v
bmljYWxpemUoY2hpbGQxKTsKKyAgICAgICAgaWYgKGNoaWxkID09IE5vTm9kZSkKKyAgICAgICAg
ICAgIHJldHVybiBzdGFydDsKKyAgICAgICAgCisgICAgICAgIGlmIChzdGFydCA8IGNoaWxkKQor
ICAgICAgICAgICAgc3RhcnQgPSBjaGlsZDsKKyAgICAgICAgCisgICAgICAgIGNoaWxkID0gY2Fu
b25pY2FsaXplKGNoaWxkMik7CisgICAgICAgIGlmIChjaGlsZCA9PSBOb05vZGUpCisgICAgICAg
ICAgICByZXR1cm4gc3RhcnQ7CisgICAgICAgIAorICAgICAgICBpZiAoc3RhcnQgPCBjaGlsZCkK
KyAgICAgICAgICAgIHN0YXJ0ID0gY2hpbGQ7CisgICAgICAgIAorICAgICAgICBjaGlsZCA9IGNh
bm9uaWNhbGl6ZShjaGlsZDMpOworICAgICAgICBpZiAoY2hpbGQgPT0gTm9Ob2RlKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXJ0OworICAgICAgICAKKyAgICAgICAgaWYgKHN0YXJ0IDwgY2hpbGQp
CisgICAgICAgICAgICBzdGFydCA9IGNoaWxkOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN0
YXJ0OworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggc3RhcnRJbmRleEZvckNoaWxkcmVuKE5v
ZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJ
bmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgeworICAgICAgICBOb2RlSW5kZXggcmVzdWx0ID0g
Y29tcHV0ZVN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKKyNp
ZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICBsb29rYmFjayAl
dTogIiwgcmVzdWx0KTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBOb2RlSW5kZXggc3RhcnRJbmRleCgpCisgICAgeworICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAgIHJldHVybiBzdGFydEluZGV4Rm9y
Q2hpbGRyZW4obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSwgbm9kZS5jaGlsZDMoKSk7Cisg
ICAgfQorICAgIAorICAgIE5vZGVJbmRleCBlbmRJbmRleEZvclB1cmVDU0UoKQorICAgIHsKKyAg
ICAgICAgTm9kZUluZGV4IHJlc3VsdCA9IG1fbGFzdFNlZW5bbV9ncmFwaFttX2NvbXBpbGVJbmRl
eF0ub3AgJiBOb2RlSWRNYXNrXTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOb05vZGUpCisgICAg
ICAgICAgICByZXN1bHQgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQrKzsK
KyAgICAgICAgQVNTRVJUKHJlc3VsdCA8PSBtX2NvbXBpbGVJbmRleCk7CisjaWYgRU5BQkxFKERG
R19ERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIiAgbGltaXQgJXU6ICIsIHJlc3VsdCk7
CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTm9kZUlu
ZGV4IHB1cmVDU0UoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDEg
PSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDIg
PSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSk7CisgICAgICAgIE5vZGVJbmRleCBjaGlsZDMg
PSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDMoKSk7CisgICAgICAgIAorICAgICAgICBOb2RlSW5k
ZXggc3RhcnQgPSBzdGFydEluZGV4KCk7CisgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0g
ZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGluZGV4LS0gPiBzdGFydDspIHsKKyAgICAgICAgICAgIE5v
ZGUmIG90aGVyTm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3Ag
IT0gb3RoZXJOb2RlLm9wKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBOb2RlSW5kZXggb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5v
ZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQorICAg
ICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIGlmIChvdGhlckNoaWxkICE9
IGNoaWxkMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQyKCkpOworICAg
ICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIHJldHVy
biBpbmRleDsKKyAgICAgICAgICAgIGlmIChvdGhlckNoaWxkICE9IGNoaWxkMikKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3RoZXJDaGlsZCA9
IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgaWYgKG90aGVy
Q2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAg
ICAgIGlmIChvdGhlckNoaWxkICE9IGNoaWxkMykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBOb05vZGU7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNQcmVkaWN0ZWROdW1l
cmljYWwoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1f
cHJlZGljdGlvbnNbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQg
PSBtX3ByZWRpY3Rpb25zW25vZGUuY2hpbGQyKCldOworICAgICAgICByZXR1cm4gaXNTdHJvbmdQ
cmVkaWN0aW9uKGxlZnQpICYmIGlzU3Ryb25nUHJlZGljdGlvbihyaWdodCkKKyAgICAgICAgICAg
ICYmIGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRpY3Rpb24ocmlnaHQp
OworICAgIH0KKyAgICAKKyAgICBib29sIGxvZ2ljYWxOb3RJc1B1cmUoTm9kZSYgbm9kZSkKKyAg
ICB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG1fcHJlZGljdGlvbnNbbm9k
ZS5jaGlsZDEoKV07CisgICAgICAgIHJldHVybiBpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rp
b24pIHx8ICFpc1N0cm9uZ1ByZWRpY3Rpb24ocHJlZGljdGlvbik7CisgICAgfQorICAgIAorICAg
IGJvb2wgY2xvYmJlcnNXb3JsZChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgaWYgKG5vZGUub3AgJiBO
b2RlQ2xvYmJlcnNXb3JsZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
IShub2RlLm9wICYgTm9kZU1pZ2h0Q2xvYmJlcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAg
ICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAg
ICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToK
KyAgICAgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgICAgICByZXR1cm4gIWlzUHJlZGljdGVk
TnVtZXJpY2FsKG5vZGUpOworICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CisgICAgICAgICAgICBy
ZXR1cm4gIWxvZ2ljYWxOb3RJc1B1cmUobm9kZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBJ
ZiBieSBzb21lIG9kZGl0eSB3ZSBoaXQgdGhpcyBjYXNlIGluIHJlbGVhc2UgYnVpbGQgaXQncyBz
YWZlciB0byBoYXZlIENTRSBhc3N1bWUgdGhlIHdvcnN0LgorICAgICAgICB9CisgICAgfQorICAg
IAorICAgIE5vZGVJbmRleCBnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24odW5zaWduZWQgdmFyTnVt
YmVyKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleCgpOworICAg
ICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3Rh
cnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgor
ICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJlcikKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFy
TnVtYmVyKCkgPT0gdmFyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5j
aGlsZDEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2xv
YmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGdldEJ5VmFs
TG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIE5vZGVJbmRleCBjaGlsZDIpCisgICAg
eworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQx
LCBjaGlsZDIpOworICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4
OyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtp
bmRleF07CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgIGNhc2Ug
R2V0QnlWYWw6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxICYm
IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKSA9PSBjYW5vbmljYWxpemUoY2hpbGQyKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGls
ZDEoKSA9PSBjaGlsZDEgJiYgY2Fub25pY2FsaXplKG5vZGUuY2hpbGQyKCkpID09IGNhbm9uaWNh
bGl6ZShjaGlsZDIpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDMoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3Js
ZChpbmRleCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIE5vTm9kZTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGdldE1ldGhvZExvYWRFbGlt
aW5hdGlvbihjb25zdCBNZXRob2RDaGVja0RhdGEmIG1ldGhvZENoZWNrRGF0YSwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgTm9kZUluZGV4IGNoaWxkMSkKKyAgICB7CisgICAgICAgIE5vZGVJ
bmRleCBzdGFydCA9IHN0YXJ0SW5kZXgoKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXgg
PSBtX2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gQ2hlY2tN
ZXRob2QKKyAgICAgICAgICAgICAgICAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMQorICAgICAg
ICAgICAgICAgICYmIG5vZGUuaWRlbnRpZmllck51bWJlcigpID09IGlkZW50aWZpZXJOdW1iZXIK
KyAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fbWV0aG9kQ2hlY2tEYXRhW25vZGUubWV0aG9k
Q2hlY2tEYXRhSW5kZXgoKV0gPT0gbWV0aG9kQ2hlY2tEYXRhKQorICAgICAgICAgICAgICAgIHJl
dHVybiBpbmRleDsKKyAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb24oTm9kZUluZGV4JiBjaGlsZCkK
KyAgICB7CisgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVz
ZWQuCisgICAgICAgIGlmIChjaGlsZCA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVwbGFjZW1lbnQuCisg
ICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudCA9IG1fcmVwbGFjZW1lbnRzW2NoaWxkXTsKKyAg
ICAgICAgaWYgKHJlcGxhY2VtZW50ID09IE5vTm9kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIGNoaWxkID0gcmVwbGFjZW1lbnQ7CisgICAgICAgIAorICAgICAgICAv
LyBUaGVyZSBpcyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRoZSByZXBs
YWNlbWVudCBkb2VzIG5vdAorICAgICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCisgICAgICAg
IEFTU0VSVChtX3JlcGxhY2VtZW50c1tjaGlsZF0gPT0gTm9Ob2RlKTsKKyAgICAgICAgCisgICAg
ICAgIG1fZ3JhcGhbY2hpbGRdLnJlZigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlcGxh
Y2VtZW50KE5vZGVJbmRleCByZXBsYWNlbWVudCkKKyAgICB7CisgICAgICAgIGlmIChyZXBsYWNl
bWVudCA9PSBOb05vZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAv
LyBCZSBzYWZlLiBEb24ndCB0cnkgdG8gcGVyZm9ybSByZXBsYWNlbWVudHMgaWYgdGhlIHByZWRp
Y3Rpb25zIGRvbid0CisgICAgICAgIC8vIGFncmVlLgorICAgICAgICBpZiAobV9wcmVkaWN0aW9u
c1ttX2NvbXBpbGVJbmRleF0gIT0gbV9wcmVkaWN0aW9uc1tyZXBsYWNlbWVudF0pCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAg
ICAgICAgcHJpbnRmKCIgICBSZXBsYWNpbmcgQCV1IC0+IEAldSIsIG1fY29tcGlsZUluZGV4LCBy
ZXBsYWNlbWVudCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgbm9kZS5vcCA9IFBoYW50b207CisgICAgICAg
IG5vZGUuc2V0UmVmQ291bnQoMSk7CisgICAgICAgIAorICAgICAgICAvLyBBdCB0aGlzIHBvaW50
IHdlIHdpbGwgZWxpbWluYXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbm9kZS4KKyAgICAgICAg
bV9yZXBsYWNlbWVudHNbbV9jb21waWxlSW5kZXhdID0gcmVwbGFjZW1lbnQ7CisgICAgfQorICAg
IAorICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGlm
IChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Y2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQo
KSArIG5vZGUubnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKKyAgICAgICAgICAgICAgICBwZXJm
b3JtU3Vic3RpdHV0aW9uKG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbihub2RlLmNoaWxk
cmVuLmZpeGVkLmNoaWxkMSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uKG5vZGUu
Y2hpbGRyZW4uZml4ZWQuY2hpbGQyKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb24o
bm9kZS5jaGlsZHJlbi5maXhlZC5jaGlsZDMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIiAgICVz
WyV1XTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW21fY29tcGlsZUluZGV4XS5vcCksIG1fY29t
cGlsZUluZGV4KTsKKyNlbmRpZgorCisgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAg
ICAKKyAgICAgICAgLy8gSGFuZGxlIHRoZSBwdXJlIG5vZGVzLiBUaGVzZSBub2RlcyBuZXZlciBo
YXZlIGFueSBzaWRlLWVmZmVjdHMuCisgICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICBjYXNl
IEJpdE9yOgorICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6Cisg
ICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgICAg
IGNhc2UgQXJpdGhBZGQ6CisgICAgICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAgIGNhc2UgQXJp
dGhNdWw6CisgICAgICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgICAgIGNhc2UgQXJpdGhEaXY6Cisg
ICAgICAgIGNhc2UgQXJpdGhBYnM6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NF
KG5vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIC8vIEhh
bmRsZSBub2RlcyB0aGF0IGFyZSBjb25kaXRpb25hbGx5IHB1cmU6IHRoZXNlIGFyZSBwdXJlLCBh
bmQgY2FuCisgICAgICAgIC8vIGJlIENTRSdkLCBzbyBsb25nIGFzIHRoZSBwcmVkaWN0aW9uIGlz
IHRoZSBvbmUgd2Ugd2FudC4KKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2FzZSBD
b21wYXJlTGVzczoKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICBjYXNlIENv
bXBhcmVHcmVhdGVyOgorICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgIGNh
c2UgQ29tcGFyZUVxOiB7CisgICAgICAgICAgICBpZiAoaXNQcmVkaWN0ZWROdW1lcmljYWwobm9k
ZSkpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggcmVwbGFjZW1lbnRJbmRleCA9IHB1cmVD
U0Uobm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50SW5kZXggIT0gTm9Ob2Rl
ICYmIGlzUHJlZGljdGVkTnVtZXJpY2FsKG1fZ3JhcGhbcmVwbGFjZW1lbnRJbmRleF0pKQorICAg
ICAgICAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChyZXBsYWNlbWVudEluZGV4KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBMb2dpY2FsTm90OiB7CisgICAgICAgICAgICBpZiAobG9naWNhbE5vdElzUHVy
ZShub2RlKSkgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0g
cHVyZUNTRShub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnRJbmRleCAhPSBO
b05vZGUgJiYgbG9naWNhbE5vdElzUHVyZShtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdKSkKKyAg
ICAgICAgICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQocmVwbGFjZW1lbnRJbmRleCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIGhlYXAgYWNjZXNzZXMuIFRoZXNlIGFyZSBub3QgcXVp
dGUgcHVyZSwgYnV0IHdlIGNhbiBzdGlsbAorICAgICAgICAvLyBvcHRpbWl6ZSB0aGVtIHByb3Zp
ZGVkIHRoYXQgc29tZSBzdWJ0bGUgY29uZGl0aW9ucyBhcmUgbWV0LgorICAgICAgICBjYXNlIEdl
dEdsb2JhbFZhcjoKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdsb2JhbFZhckxvYWRFbGlt
aW5hdGlvbihub2RlLnZhck51bWJlcigpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoK
KyAgICAgICAgICAgIGlmIChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxkMSgpLCBu
b2RlLmNoaWxkMigpKSAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgbm9kZS5vcCA9IFB1dEJ5
VmFsQWxpYXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IENoZWNrTWV0aG9kOgorICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0TWV0aG9kTG9hZEVs
aW1pbmF0aW9uKG1fZ3JhcGgubV9tZXRob2RDaGVja0RhdGFbbm9kZS5tZXRob2RDaGVja0RhdGFJ
bmRleCgpXSwgbm9kZS5pZGVudGlmaWVyTnVtYmVyKCksIG5vZGUuY2hpbGQxKCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAvLyBkbyBub3RoaW5nLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIG1fbGFzdFNlZW5bbm9kZS5vcCAmIE5vZGVJZE1hc2tdID0gbV9jb21waWxlSW5k
ZXg7CisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIlxuIik7
CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgdm9pZCBwZXJmb3JtQmxvY2tDU0UoQmFzaWNCbG9j
ayYgYmxvY2spCisgICAgeworICAgICAgICBtX3N0YXJ0ID0gYmxvY2suYmVnaW47CisgICAgICAg
IE5vZGVJbmRleCBlbmQgPSBibG9jay5lbmQ7CisgICAgICAgIGZvciAobV9jb21waWxlSW5kZXgg
PSBtX3N0YXJ0OyBtX2NvbXBpbGVJbmRleCA8IGVuZDsgKyttX2NvbXBpbGVJbmRleCkKKyAgICAg
ICAgICAgIHBlcmZvcm1Ob2RlQ1NFKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBsb2NhbENTRSgpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfVkVS
Qk9TRSkKKyAgICAgICAgcHJpbnRmKCJQZXJmb3JtaW5nIGxvY2FsIENTRToiKTsKKyNlbmRpZgor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKTsgKytibG9jaykKKyAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NTRSgqbV9ncmFwaC5t
X2Jsb2Nrc1tibG9ja10pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFsbG9jYXRlVmlydHVhbFJl
Z2lzdGVycygpCisgICAgeworICAgICAgICBTY29yZUJvYXJkIHNjb3JlQm9hcmQobV9ncmFwaCwg
bV9ncmFwaC5tX3ByZXNlcnZlZFZhcnMpOworICAgICAgICB1bnNpZ25lZCBzaXplRXhjbHVkaW5n
UGhpTm9kZXMgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS0+ZW5kOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemVFeGNsdWRpbmdQaGlOb2RlczsgKytpKSB7CisgICAgICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtpXTsKKyAgICAgICAgCisgICAgICAgICAgICBpZiAoIW5v
ZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
CisgICAgICAgICAgICAvLyBHZXRMb2NhbCBub2RlcyBhcmUgZWZmZWN0aXZlbHkgcGhpIG5vZGVz
IGluIHRoZSBncmFwaCwgcmVmZXJlbmNpbmcKKyAgICAgICAgICAgIC8vIHJlc3VsdHMgZnJvbSBw
cmlvciBibG9ja3MuCisgICAgICAgICAgICBpZiAobm9kZS5vcCAhPSBHZXRMb2NhbCkgeworICAg
ICAgICAgICAgICAgIC8vIEZpcnN0LCBjYWxsIHVzZSBvbiBhbGwgb2YgdGhlIGN1cnJlbnQgbm9k
ZSdzIGNoaWxkcmVuLCB0aGVuCisgICAgICAgICAgICAgICAgLy8gYWxsb2NhdGUgYSBWaXJ0dWFs
UmVnaXN0ZXIgZm9yIHRoaXMgbm9kZS4gV2UgZG8gc28gaW4gdGhpcworICAgICAgICAgICAgICAg
IC8vIG9yZGVyIHNvIHRoYXQgaWYgYSBjaGlsZCBpcyBvbiBpdHMgbGFzdCB1c2UsIGFuZCBhCisg
ICAgICAgICAgICAgICAgLy8gVmlydHVhbFJlZ2lzdGVyIGlzIGZyZWVkLCB0aGVuIGl0IG1heSBi
ZSByZXVzZWQgZm9yIG5vZGUuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFz
VmFyQXJncykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0g
bm9kZS5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS5maXJzdENoaWxkKCkgKyBub2RlLm51
bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCisgICAgICAgICAgICAgICAgICAgICAgICBzY29yZUJv
YXJkLnVzZShtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzY29yZUJvYXJkLnVzZShub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc2NvcmVCb2FyZC51c2Uobm9kZS5jaGlsZDIo
KSk7CisgICAgICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQudXNlKG5vZGUuY2hpbGQzKCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFub2Rl
Lmhhc1Jlc3VsdCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBu
b2RlLnNldFZpcnR1YWxSZWdpc3RlcihzY29yZUJvYXJkLmFsbG9jYXRlKCkpOworICAgICAgICAg
ICAgLy8gJ211c3RHZW5lcmF0ZScgbm9kZXMgaGF2ZSB0aGVpciB1c2VDb3VudCBhcnRpZmljaWFs
bHkgZWxldmF0ZWQsCisgICAgICAgICAgICAvLyBjYWxsIHVzZSBub3cgdG8gYWNjb3VudCBmb3Ig
dGhpcy4KKyAgICAgICAgICAgIGlmIChub2RlLm11c3RHZW5lcmF0ZSgpKQorICAgICAgICAgICAg
ICAgIHNjb3JlQm9hcmQudXNlKGkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gJ21fbnVtQ2Fs
bGVlUmVnaXN0ZXJzJyBpcyB0aGUgbnVtYmVyIG9mIGxvY2FscyBhbmQgdGVtcG9yYXJpZXMgYWxs
b2NhdGVkCisgICAgICAgIC8vIGZvciB0aGUgZnVuY3Rpb24gKGFuZCBjaGVja2VkIGZvciBvbiBl
bnRyeSkuIFNpbmNlIHdlIHBlcmZvcm0gYSBuZXcgYW5kCisgICAgICAgIC8vIGRpZmZlcmVudCBh
bGxvY2F0aW9uIG9mIHRlbXBvcmFyaWVzLCBtb3JlIHJlZ2lzdGVycyBtYXkgbm93IGJlIHJlcXVp
cmVkLgorICAgICAgICB1bnNpZ25lZCBjYWxsZWVSZWdpc3RlcnMgPSBzY29yZUJvYXJkLmFsbG9j
YXRlZENvdW50KCkgKyBtX2dyYXBoLm1fcHJlc2VydmVkVmFycyArIG1fZ3JhcGgubV9wYXJhbWV0
ZXJTbG90czsKKyAgICAgICAgaWYgKCh1bnNpZ25lZCltX2NvZGVCbG9jay0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMgPCBjYWxsZWVSZWdpc3RlcnMpCisgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMgPSBjYWxsZWVSZWdpc3RlcnM7CisgICAgfQorICAgIAogICAgIEdy
YXBoJiBtX2dyYXBoOwogICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogICAgIENvZGVC
bG9jayogbV9jb2RlQmxvY2s7CiAgICAgQ29kZUJsb2NrKiBtX3Byb2ZpbGVkQmxvY2s7CiAgICAg
CisgICAgTm9kZUluZGV4IG1fc3RhcnQ7CiAgICAgTm9kZUluZGV4IG1fY29tcGlsZUluZGV4Owog
ICAgIAogICAgIFZlY3RvcjxQcmVkaWN0ZWRUeXBlLCAxNj4gbV9wcmVkaWN0aW9uczsKQEAgLTQy
Nyw2ICs4NjgsOSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgCiAgICAgYm9vbCBtX2NoYW5nZWQ7
CisKKyAgICBWZWN0b3I8Tm9kZUluZGV4LCAxNj4gbV9yZXBsYWNlbWVudHM7CisgICAgRml4ZWRB
cnJheTxOb2RlSW5kZXgsIExhc3ROb2RlSWQ+IG1fbGFzdFNlZW47CiB9OwogCiB2b2lkIHByb3Bh
Z2F0ZShHcmFwaCYgZ3JhcGgsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCkBAIC00MzgsOSArODgyLDYgQEAgdm9pZCBwcm9wYWdhdGUoR3JhcGgmIGdyYXBo
LCBKU0dsb2JhbERhdAogICAgIFByb3BhZ2F0b3IgcHJvcGFnYXRvcihncmFwaCwgKmdsb2JhbERh
dGEsIGNvZGVCbG9jaywgcHJvZmlsZWRCbG9jayk7CiAgICAgcHJvcGFnYXRvci5maXhwb2ludCgp
OwogICAgIAotI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICBncmFwaC5kdW1wKGNv
ZGVCbG9jayk7Ci0jZW5kaWYKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDk1MzUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNTcsMTYgKzExNTcsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBHZXRCeVZhbDogewotICAgICAgICBOb2RlSW5kZXggYWxpYXMgPSBub2RlLmNoaWxkMygpOwot
ICAgICAgICBpZiAoYWxpYXMgIT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogcmVz
dWx0IHNob3VsZCBiZSBhYmxlIHRvIHJldXNlIGNoaWxkMSwgY2hpbGQyLiBTaG91bGQgaGF2ZSBh
biAnVW51c2VkT3BlcmFuZCcgdHlwZS4KLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFsaWFz
ZWRWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgYWxpYXNlZFZhbHVlKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoYWxpYXNl
ZFZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KKyAgICAgICAgQVNTRVJUKG5vZGUuY2hpbGQzKCkgPT0gTm9Ob2RlKTsKICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkp
OwogICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKQEAgLTE1OTYsNiArMTU4Nywx
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBQaGFudG9tOgorICAgICAgICAvLyBUaGlzIGlz
IGEgbm8tb3AuCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIAogICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmIG5vZGUubXVzdEdl
bmVyYXRlKCkpCg==
</data>
<flag name="review"
          id="104557"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>