<?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>148338</bug_id>
          
          <creation_ts>2015-08-21 15:51:22 -0700</creation_ts>
          <short_desc>DFG string concatenation shouldn&apos;t be playing fast and loose with effects and OSR exit</short_desc>
          <delta_ts>2015-08-22 11:36:23 -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>Other</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>
          
          <blocked>145204</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1119965</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-21 15:51:22 -0700</bug_when>
    <thetext>DFG string concatenation appears to have various different ways of creating an OSR exit right after a side effect.  We should change this code so that it is only speculative when it isn&apos;t effectful.  It also happens to be the case that if string concat needs to be effectful, then it will already be sufficiently slow that making it speculative won&apos;t help anyone.  So, this kind of clean-up is likely to not affect performance; it&apos;ll just make the compiler easier to hack on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119967</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-21 15:53:40 -0700</bug_when>
    <thetext>Proposal:

- ByteCodeParser uses a new node called StrCat that takes two or three arguments, and is basically a MakeRope with ToString rolled together.

- FixupPhase simplifies ValueAdd to MakeRope only if we can speculate that the inputs are strings.

- FixupPhase simplifies StrCat the same way it does for ValueAdd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120032</commentid>
    <comment_count>2</comment_count>
      <attachid>259692</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-21 17:56:47 -0700</bug_when>
    <thetext>Created attachment 259692
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120039</commentid>
    <comment_count>3</comment_count>
      <attachid>259694</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-21 18:50:56 -0700</bug_when>
    <thetext>Created attachment 259694
the patch

Not marking r? yet because I still have to run benchmarks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120040</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-21 18:53:33 -0700</bug_when>
    <thetext>Attachment 259694 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1518:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1534:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 20 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>1120057</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-21 19:47:59 -0700</bug_when>
    <thetext>Performance is fine:

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r188811)
&quot;StrCat&quot; at /Volumes/Data/quartary/OpenSource/WebKitBuild/Release/jsc (r188811)

Collected 7 samples per benchmark/VM, with 7 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
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                   StrCat                                      
SunSpider:
   3d-cube                                            4.8229+-0.3247            4.7261+-0.3395          might be 1.0205x faster
   3d-morph                                           5.0405+-0.1254     ?      5.2170+-0.1804        ? might be 1.0350x slower
   3d-raytrace                                        5.0033+-0.0440     ?      5.0537+-0.2218        ? might be 1.0101x slower
   access-binary-trees                                2.0113+-0.0671            1.9677+-0.1082          might be 1.0222x faster
   access-fannkuch                                    5.3965+-0.1412     ?      5.4118+-0.2427        ?
   access-nbody                                       2.6635+-0.3231            2.4920+-0.2761          might be 1.0688x faster
   access-nsieve                                      3.0727+-0.1571            2.9906+-0.0469          might be 1.0275x faster
   bitops-3bit-bits-in-byte                           1.4651+-0.0836     ?      1.4746+-0.0878        ?
   bitops-bits-in-byte                                3.2533+-0.1042            3.2392+-0.0936        
   bitops-bitwise-and                                 1.9588+-0.0305            1.9260+-0.0132          might be 1.0170x faster
   bitops-nsieve-bits                                 2.9641+-0.0912     ?      3.2153+-0.6424        ? might be 1.0848x slower
   controlflow-recursive                              2.0926+-0.1979            1.9499+-0.0701          might be 1.0732x faster
   crypto-aes                                         3.6925+-0.0300     ?      3.8437+-0.1519        ? might be 1.0409x slower
   crypto-md5                                         2.3192+-0.1594     ?      2.4199+-0.3883        ? might be 1.0434x slower
   crypto-sha1                                        2.4645+-0.2638            2.4046+-0.2646          might be 1.0249x faster
   date-format-tofte                                  6.7955+-0.5335            6.5446+-0.2061          might be 1.0383x faster
   date-format-xparb                                  4.4253+-0.1625     ?      4.6008+-0.3069        ? might be 1.0397x slower
   math-cordic                                        2.8286+-0.1659            2.6998+-0.0526          might be 1.0477x faster
   math-partial-sums                                  5.0907+-0.2213            4.9831+-0.0949          might be 1.0216x faster
   math-spectral-norm                                 1.7413+-0.0237     ?      1.7444+-0.0651        ?
   regexp-dna                                         6.6188+-0.3263     ?      6.6566+-0.4232        ?
   string-base64                                      4.8567+-1.1255            4.2737+-0.1087          might be 1.1364x faster
   string-fasta                                       6.0499+-0.3264            5.8356+-0.3056          might be 1.0367x faster
   string-tagcloud                                    7.8009+-0.4097     ?      7.8285+-0.2646        ?
   string-unpack-code                                18.9248+-0.8256           18.7430+-0.5036        
   string-validate-input                              4.5129+-0.1626            4.5065+-0.1360        

   &lt;arithmetic&gt;                                       4.5333+-0.0437            4.4903+-0.0381          might be 1.0096x faster

                                                        TipOfTree                   StrCat                                      
LongSpider:
   3d-cube                                          801.3519+-6.9271          798.7902+-11.3417       
   3d-morph                                        1498.2163+-11.8925        1494.8267+-6.9537        
   3d-raytrace                                      605.6156+-18.0632         598.9443+-3.1865          might be 1.0111x faster
   access-binary-trees                              793.9444+-4.5666     ?    794.1231+-8.7404        ?
   access-fannkuch                                  280.6371+-7.6342     ?    281.1981+-6.1448        ?
   access-nbody                                     514.0720+-3.4278     ?    514.6780+-4.9865        ?
   access-nsieve                                    363.0103+-10.7253    ?    367.0928+-11.8301       ? might be 1.0112x slower
   bitops-3bit-bits-in-byte                          39.1975+-1.8050           38.5505+-1.1168          might be 1.0168x faster
   bitops-bits-in-byte                               76.4239+-1.7928           76.0188+-1.6294        
   bitops-nsieve-bits                               406.3780+-2.9944          404.6351+-7.1489        
   controlflow-recursive                            443.2008+-5.2312          437.3526+-5.9566          might be 1.0134x faster
   crypto-aes                                       567.8957+-7.1787     ?    568.0831+-7.0665        ?
   crypto-md5                                       485.5027+-23.0029    ?    494.7652+-7.6763        ? might be 1.0191x slower
   crypto-sha1                                      623.7245+-7.9552     ?    632.9822+-10.8374       ? might be 1.0148x slower
   date-format-tofte                                507.7560+-10.1046         500.2855+-9.0152          might be 1.0149x faster
   date-format-xparb                                618.2691+-5.5785     !    665.5340+-6.1935        ! definitely 1.0764x slower
   hash-map                                         155.1628+-1.4372          153.0116+-0.8541          might be 1.0141x faster
   math-cordic                                      484.8735+-1.8192     ?    489.9809+-10.3342       ? might be 1.0105x slower
   math-partial-sums                                462.8330+-1.8755     ?    467.3193+-4.9677        ?
   math-spectral-norm                               548.4941+-3.4072     ?    556.5191+-10.3996       ? might be 1.0146x slower
   string-base64                                    350.5227+-5.0660     ?    351.1612+-7.0415        ?
   string-fasta                                     366.9147+-5.7366          365.1158+-7.7914        
   string-tagcloud                                  175.5753+-2.1044     ?    176.3488+-1.8162        ?

   &lt;geometric&gt;                                      389.3394+-1.2888     ?    390.6055+-1.5563        ? might be 1.0033x slower

                                                        TipOfTree                   StrCat                                      
V8Spider:
   crypto                                            47.7636+-1.5085     ?     49.8260+-1.3022        ? might be 1.0432x slower
   deltablue                                         84.5017+-4.3584     ?     86.9629+-3.7174        ? might be 1.0291x slower
   earley-boyer                                      39.8567+-0.9469           39.1756+-0.9359          might be 1.0174x faster
   raytrace                                          31.4919+-2.2552           31.1890+-1.0818        
   regexp                                            61.6669+-1.1145     ?     62.8699+-1.9515        ? might be 1.0195x slower
   richards                                          65.5516+-1.4109     ?     65.9757+-0.6426        ?
   splay                                             36.2523+-2.0906     ?     36.8449+-1.8684        ? might be 1.0163x slower

   &lt;geometric&gt;                                       49.6028+-1.1518     ?     50.2279+-0.7055        ? might be 1.0126x slower

                                                        TipOfTree                   StrCat                                      
Octane:
   encrypt                                           0.16856+-0.00600    ?     0.16993+-0.00181       ?
   decrypt                                           3.30153+-0.05009          3.27973+-0.02540       
   deltablue                                x2       0.15401+-0.00145    !     0.15818+-0.00131       ! definitely 1.0271x slower
   earley                                            0.27642+-0.00200          0.27529+-0.00201       
   boyer                                             4.16719+-0.02811          4.14330+-0.04613       
   navier-stokes                            x2       4.97781+-0.29689          4.86957+-0.02779         might be 1.0222x faster
   raytrace                                 x2       1.05439+-0.06365          0.98101+-0.03183         might be 1.0748x faster
   richards                                 x2       0.10940+-0.00157          0.10865+-0.00079       
   splay                                    x2       0.32972+-0.00227    ?     0.33051+-0.00235       ?
   regexp                                   x2      24.66087+-0.37094         24.56550+-0.17747       
   pdfjs                                    x2      36.70991+-0.50439    ?    36.93184+-0.26231       ?
   mandreel                                 x2      44.06865+-0.55693         43.73296+-0.37088       
   gbemu                                    x2      33.81755+-0.34382    ?    34.29419+-1.39406       ? might be 1.0141x slower
   closure                                           0.56091+-0.00220    ?     0.56108+-0.00471       ?
   jquery                                            7.07405+-0.03798    ?     7.11095+-0.05743       ?
   box2d                                    x2       9.96104+-0.08433    ?    10.43497+-1.23471       ? might be 1.0476x slower
   zlib                                     x2     381.88336+-13.14289       380.39107+-15.03474      
   typescript                               x2     646.49648+-11.26071       645.09225+-7.89991       

   &lt;geometric&gt;                                       5.56861+-0.03467          5.55839+-0.04587         might be 1.0018x faster

                                                        TipOfTree                   StrCat                                      
Kraken:
   ai-astar                                          227.358+-8.187            221.642+-3.848           might be 1.0258x faster
   audio-beat-detection                               50.820+-0.290             50.446+-0.383         
   audio-dft                                          96.478+-2.095      ?      96.659+-2.052         ?
   audio-fft                                          34.758+-0.306      ?      34.901+-0.409         ?
   audio-oscillator                                   59.756+-0.845      ?      60.922+-2.320         ? might be 1.0195x slower
   imaging-darkroom                                   60.752+-0.123      ?      61.458+-1.007         ? might be 1.0116x slower
   imaging-desaturate                                 50.225+-2.461      ?      50.458+-3.240         ?
   imaging-gaussian-blur                              83.985+-1.637             83.835+-1.060         
   json-parse-financial                               37.484+-0.652      ?      37.654+-0.986         ?
   json-stringify-tinderbox                           22.602+-0.763      ?      22.906+-1.331         ? might be 1.0134x slower
   stanford-crypto-aes                                41.338+-1.480             41.025+-0.952         
   stanford-crypto-ccm                                34.734+-1.357      ?      34.793+-1.719         ?
   stanford-crypto-pbkdf2                             93.886+-1.088      ?      94.258+-1.493         ?
   stanford-crypto-sha256-iterative                   36.000+-0.789      ?      36.209+-0.865         ?

   &lt;arithmetic&gt;                                       66.441+-0.522             66.226+-0.400           might be 1.0032x faster

                                                        TipOfTree                   StrCat                                      
JSRegress:
   abc-forward-loop-equal                            31.1456+-1.4073           30.4296+-0.3846          might be 1.0235x faster
   abc-postfix-backward-loop                         29.9684+-1.1729     ?     30.3571+-0.6869        ? might be 1.0130x slower
   abc-simple-backward-loop                          29.4809+-0.7306     ?     29.8360+-0.9788        ? might be 1.0120x slower
   abc-simple-forward-loop                           30.0459+-1.1628           29.9501+-0.7662        
   abc-skippy-loop                                   21.7065+-1.0456           21.2913+-0.3694          might be 1.0195x faster
   abs-boolean                                        2.4337+-0.0584     ?      2.5656+-0.2636        ? might be 1.0542x slower
   adapt-to-double-divide                            16.4878+-0.8791           16.1938+-0.3396          might be 1.0182x faster
   aliased-arguments-getbyval                         1.1704+-0.0434     ?      1.1707+-0.0424        ?
   allocate-big-object                                2.4617+-0.1206     ?      2.9181+-1.0364        ? might be 1.1854x slower
   arguments-named-and-reflective                    11.3366+-0.4559           10.9323+-0.2212          might be 1.0370x faster
   arguments-out-of-bounds                            9.1195+-0.2300            9.0666+-0.2590        
   arguments-strict-mode                             10.1922+-0.2730            9.9007+-0.2057          might be 1.0294x faster
   arguments                                          8.6848+-0.1860            8.6184+-0.1084        
   arity-mismatch-inlining                            0.7778+-0.0268     ?      0.7896+-0.0334        ? might be 1.0151x slower
   array-access-polymorphic-structure                 5.8145+-0.2538     ?      5.8689+-0.1942        ?
   array-nonarray-polymorhpic-access                 24.5954+-0.2835           24.5492+-0.5157        
   array-prototype-every                             76.5537+-1.6512     ?     77.5238+-1.1578        ? might be 1.0127x slower
   array-prototype-forEach                           77.5141+-3.3151           75.9677+-1.7970          might be 1.0204x faster
   array-prototype-map                               80.8135+-0.7237     ?     86.6966+-8.9413        ? might be 1.0728x slower
   array-prototype-reduce                            73.3315+-1.3747           72.9891+-1.9002        
   array-prototype-reduceRight                       72.4801+-1.3334     ?     73.6562+-3.5670        ? might be 1.0162x slower
   array-prototype-some                              76.0469+-1.0196     ?     76.9526+-1.6458        ? might be 1.0119x slower
   array-splice-contiguous                           21.3071+-0.7037           20.2920+-1.0941          might be 1.0500x faster
   array-with-double-add                              3.9956+-0.0962     ?      4.0420+-0.1368        ? might be 1.0116x slower
   array-with-double-increment                        3.0188+-0.0305     ?      3.0873+-0.1024        ? might be 1.0227x slower
   array-with-double-mul-add                          5.0347+-0.1066     ?      5.1806+-0.2030        ? might be 1.0290x slower
   array-with-double-sum                              3.2137+-0.0976            3.1686+-0.1208          might be 1.0142x faster
   array-with-int32-add-sub                           7.6219+-0.2412     ?      7.7368+-0.3901        ? might be 1.0151x slower
   array-with-int32-or-double-sum                     3.3596+-0.0596     ?      3.4121+-0.0855        ? might be 1.0156x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     25.3177+-0.5026     ?     26.1742+-0.9101        ? might be 1.0338x slower
   ArrayBuffer-DataView-alloc-long-lived             11.7720+-0.5511     ?     11.7806+-0.6288        ?
   ArrayBuffer-Int32Array-byteOffset                  3.6647+-0.1069            3.5748+-0.0826          might be 1.0252x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     30.0504+-0.5769     ?     30.6883+-1.3370        ? might be 1.0212x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.1507+-0.4191     ?     20.7614+-0.9561        ? might be 1.0303x slower
   ArrayBuffer-Int8Array-alloc-long-lived            12.8059+-0.7278           12.5412+-0.7450          might be 1.0211x faster
   ArrayBuffer-Int8Array-alloc                        9.3755+-0.3654     ?      9.7997+-0.4810        ? might be 1.0452x slower
   arrowfunction-call                                10.7135+-0.2454           10.5185+-0.1472          might be 1.0185x faster
   asmjs_bool_bug                                     6.9057+-0.1906            6.8679+-0.1709        
   assign-custom-setter-polymorphic                   2.6230+-0.7529            2.3449+-0.0510          might be 1.1186x faster
   assign-custom-setter                               3.2358+-0.1125            3.1331+-0.0642          might be 1.0328x faster
   basic-set                                          8.4282+-0.6542     ?      8.5470+-0.4325        ? might be 1.0141x slower
   big-int-mul                                        3.6063+-0.3060            3.4231+-0.0727          might be 1.0535x faster
   boolean-test                                       2.9189+-0.0476     ?      2.9856+-0.1509        ? might be 1.0228x slower
   branch-fold                                        3.5399+-0.0553     ?      3.8179+-0.5844        ? might be 1.0785x slower
   branch-on-string-as-boolean                       16.8358+-0.4432     ?     16.9982+-0.7382        ?
   by-val-generic                                     2.3459+-0.0975     ?      2.3655+-0.1769        ?
   call-spread-apply                                 27.2581+-2.4959           26.0660+-0.8431          might be 1.0457x faster
   call-spread-call                                  21.3594+-0.6888     ?     21.3614+-1.0236        ?
   captured-assignments                               0.4657+-0.0313     ^      0.4204+-0.0081        ^ definitely 1.1076x faster
   cast-int-to-double                                 5.0370+-0.0941     ?      5.5158+-1.4485        ? might be 1.0951x slower
   cell-argument                                      6.5626+-0.3597            6.4824+-0.3332          might be 1.0124x faster
   cfg-simplify                                       2.6609+-0.0905     ?      2.7738+-0.2334        ? might be 1.0424x slower
   chain-getter-access                                8.2312+-0.1675     ?      8.3123+-0.1646        ?
   cmpeq-obj-to-obj-other                            11.6687+-1.0878     ?     12.0208+-0.6587        ? might be 1.0302x slower
   constant-test                                      4.7275+-0.0325            4.7274+-0.0886        
   create-lots-of-functions                           9.5317+-0.4458     ?      9.7405+-0.6411        ? might be 1.0219x slower
   cse-new-array-buffer                               2.2375+-0.1122     ?      2.2691+-0.1682        ? might be 1.0141x slower
   cse-new-array                                      2.2445+-0.1002            2.1922+-0.1102          might be 1.0239x faster
   DataView-custom-properties                        33.3879+-5.9830           30.6297+-0.4778          might be 1.0900x faster
   delay-tear-off-arguments-strictmode               12.4377+-0.3288           12.2544+-0.2778          might be 1.0150x faster
   deltablue-varargs                                158.5559+-0.7326     ?    158.7660+-2.1798        ?
   destructuring-arguments                          161.8938+-1.2668          161.0386+-1.9538        
   destructuring-parameters-overridden-by-function   
                                                      0.4646+-0.0524            0.4523+-0.0273          might be 1.0274x faster
   destructuring-swap                                 4.7325+-0.2366            4.6063+-0.0622          might be 1.0274x faster
   direct-arguments-getbyval                          1.1734+-0.0575     ?      1.2341+-0.1086        ? might be 1.0517x slower
   div-boolean-double                                 5.2619+-0.1643     ?      5.2633+-0.0389        ?
   div-boolean                                        8.1071+-0.0692     ?      8.1529+-0.1457        ?
   double-get-by-val-out-of-bounds                    3.9550+-0.1739     ?      3.9558+-0.0953        ?
   double-pollution-getbyval                          8.6139+-0.0455            8.5876+-0.0306        
   double-pollution-putbyoffset                       3.8017+-0.2199            3.7036+-0.0850          might be 1.0265x faster
   double-real-use                                   26.9679+-1.8766     ?     27.4053+-2.7069        ? might be 1.0162x slower
   double-to-int32-typed-array-no-inline              1.9427+-0.0541     ?      2.0637+-0.3079        ? might be 1.0622x slower
   double-to-int32-typed-array                        1.8152+-0.0815     ?      1.8460+-0.2939        ? might be 1.0170x slower
   double-to-uint32-typed-array-no-inline             2.0096+-0.0340     ?      2.0243+-0.1375        ?
   double-to-uint32-typed-array                       1.8860+-0.0817            1.8166+-0.0716          might be 1.0382x faster
   elidable-new-object-dag                           34.2381+-0.9081           33.8854+-0.5693          might be 1.0104x faster
   elidable-new-object-roflcopter                    33.3892+-0.8551           33.0703+-0.5301        
   elidable-new-object-then-call                     31.0470+-0.3284     ?     31.5540+-0.5959        ? might be 1.0163x slower
   elidable-new-object-tree                          37.5618+-0.9812           37.1336+-1.0619          might be 1.0115x faster
   empty-string-plus-int                              4.5654+-0.1095     ?      4.7860+-0.1689        ? might be 1.0483x slower
   emscripten-cube2hash                              26.0617+-1.2798     ?     26.7690+-1.6684        ? might be 1.0271x slower
   exit-length-on-plain-object                       12.2029+-0.3331     ?     12.3964+-0.6679        ? might be 1.0159x slower
   external-arguments-getbyval                        1.2448+-0.3545     ?      1.2597+-0.1047        ? might be 1.0119x slower
   external-arguments-putbyval                        2.2593+-0.3710     ?      2.2665+-0.2370        ?
   fixed-typed-array-storage-var-index                1.1405+-0.0641            1.1303+-0.0418        
   fixed-typed-array-storage                          0.8996+-0.1570            0.8304+-0.0376          might be 1.0833x faster
   Float32Array-matrix-mult                           3.8641+-0.1069            3.8243+-0.1172          might be 1.0104x faster
   Float32Array-to-Float64Array-set                  46.3413+-0.8890     ?     48.0356+-0.9460        ? might be 1.0366x slower
   Float64Array-alloc-long-lived                     68.3447+-0.8755     ?     70.0030+-1.7225        ? might be 1.0243x slower
   Float64Array-to-Int16Array-set                    57.3182+-2.7270           56.2293+-1.0038          might be 1.0194x faster
   fold-double-to-int                                12.2681+-0.4423           12.1509+-0.3977        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.5835+-1.3629           11.3527+-0.8725          might be 1.0203x faster
   fold-get-by-id-to-multi-get-by-offset              9.6951+-0.4112     ?     10.5021+-1.1908        ? might be 1.0832x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.4390+-0.4917            8.9371+-1.9079          might be 1.0562x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.6073+-0.8821            8.0096+-0.9251          might be 1.0746x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.5311+-1.1464            8.2115+-0.7486          might be 1.1607x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      3.8417+-0.2350     ?      4.6043+-0.7592        ? might be 1.1985x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.1443+-0.2370     ?      8.2129+-0.2706        ?
   fold-put-by-id-to-multi-put-by-offset             10.5276+-1.1868           10.0132+-0.6344          might be 1.0514x faster
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     10.3340+-1.7707           10.0412+-1.2083          might be 1.0292x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     11.8404+-1.2672           10.3970+-0.7190          might be 1.1388x faster
   fold-put-structure                                 4.0908+-0.3562            4.0351+-0.2550          might be 1.0138x faster
   for-of-iterate-array-entries                      11.2199+-0.2825           10.9754+-0.2070          might be 1.0223x faster
   for-of-iterate-array-keys                          3.2887+-0.1086     ?      3.3138+-0.1933        ?
   for-of-iterate-array-values                        3.5796+-0.2340            3.3546+-0.1672          might be 1.0671x faster
   fround                                            19.8170+-1.0044           18.4767+-1.4056          might be 1.0725x faster
   ftl-library-inlining-dataview                     56.1531+-0.8738     ?     56.6655+-1.7936        ?
   ftl-library-inlining                             105.9074+-2.8813     ?    106.9240+-1.1386        ?
   function-call                                     10.4703+-0.2053     ?     10.4904+-0.2700        ?
   function-dot-apply                                 1.7519+-0.0492            1.7377+-0.0647        
   function-test                                      2.6067+-0.0333     ?      2.6787+-0.0518        ? might be 1.0276x slower
   function-with-eval                                98.6235+-1.8720           98.3354+-1.6727        
   gcse-poly-get-less-obvious                        13.9881+-0.1321     ?     14.4059+-0.4888        ? might be 1.0299x slower
   gcse-poly-get                                     16.2136+-0.6146     ?     16.2936+-0.9627        ?
   gcse                                               3.9205+-0.2015     ?      3.9684+-0.2727        ? might be 1.0122x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.5747+-0.0867     ?      2.6185+-0.0541        ? might be 1.0170x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.7929+-0.2862            5.6527+-0.0570          might be 1.0248x faster
   get-by-id-chain-from-try-block                     5.4149+-0.1738     ?      5.5115+-0.2450        ? might be 1.0178x slower
   get-by-id-check-structure-elimination              4.3621+-0.0731     ?      4.5710+-0.2913        ? might be 1.0479x slower
   get-by-id-proto-or-self                           16.1435+-0.3159           15.7855+-0.3270          might be 1.0227x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8843+-0.0859            2.8672+-0.0781        
   get-by-id-self-or-proto                           16.7096+-1.3658           15.8880+-0.3775          might be 1.0517x faster
   get-by-val-out-of-bounds                           3.9046+-0.5398            3.6850+-0.1338          might be 1.0596x faster
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.8780+-0.3093            2.8044+-0.1022          might be 1.0262x faster
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      5.9207+-0.0823     ?      6.6700+-1.3409        ? might be 1.1266x slower
   get-by-val-with-string-chain-from-try-block   
                                                      5.7615+-0.5953            5.6545+-0.2849          might be 1.0189x faster
   get-by-val-with-string-check-structure-elimination   
                                                      5.1048+-0.1187     ?      5.3803+-0.7413        ? might be 1.0540x slower
   get-by-val-with-string-proto-or-self              16.4740+-1.4911           16.2640+-1.2117          might be 1.0129x faster
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.1866+-0.0952            3.1356+-0.0621          might be 1.0163x faster
   get-by-val-with-string-self-or-proto              16.5654+-1.2355     ?     18.2298+-2.2927        ? might be 1.1005x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.0135+-0.0598            2.9989+-0.0765        
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.2834+-0.0991           12.2825+-0.1538        
   get-by-val-with-symbol-chain-from-try-block   
                                                      5.4909+-0.1269     ?      5.7126+-0.3032        ? might be 1.0404x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     10.9255+-0.0735     ?     10.9531+-0.0489        ?
   get-by-val-with-symbol-proto-or-self              17.6960+-1.7465     ?     17.7269+-1.5277        ?
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      4.3091+-0.8793            3.8462+-0.0425          might be 1.1204x faster
   get-by-val-with-symbol-self-or-proto              16.5420+-1.2979     ?     18.0642+-1.6752        ? might be 1.0920x slower
   get_callee_monomorphic                             2.1951+-0.1172     ?      2.2366+-0.1831        ? might be 1.0189x slower
   get_callee_polymorphic                             3.1910+-0.0887     ?      3.2404+-0.0945        ? might be 1.0155x slower
   getter-no-activation                               4.6924+-0.1448     ?      4.7293+-0.1329        ?
   getter-prototype                                   9.0873+-0.3969            8.9836+-0.2186          might be 1.0115x faster
   getter-richards                                  122.8137+-3.9077          117.4564+-5.6593          might be 1.0456x faster
   getter                                             5.7251+-0.6897            5.3005+-0.5729          might be 1.0801x faster
   global-object-access-with-mutating-structure   
                                                      5.6862+-0.1670     ?      5.7731+-0.2288        ? might be 1.0153x slower
   global-var-const-infer-fire-from-opt               0.8095+-0.0586            0.7380+-0.0666          might be 1.0969x faster
   global-var-const-infer                             0.5862+-0.0191     ?      0.6703+-0.1048        ? might be 1.1434x slower
   hard-overflow-check-equal                         33.0695+-0.7954           32.7384+-0.4644          might be 1.0101x faster
   hard-overflow-check                               33.9262+-1.2635           32.8813+-0.3965          might be 1.0318x faster
   HashMap-put-get-iterate-keys                      26.1099+-2.3512           25.4144+-1.6804          might be 1.0274x faster
   HashMap-put-get-iterate                           28.1582+-1.0382           27.9748+-1.4628        
   HashMap-string-put-get-iterate                    23.0403+-0.7028     ?     25.3869+-1.6966        ? might be 1.1018x slower
   hoist-make-rope                                    9.4122+-1.0186            8.6981+-0.6850          might be 1.0821x faster
   hoist-poly-check-structure-effectful-loop   
                                                      4.0350+-0.0827     ?      4.1851+-0.3913        ? might be 1.0372x slower
   hoist-poly-check-structure                         3.2539+-0.0593     ?      3.2928+-0.0723        ? might be 1.0120x slower
   imul-double-only                                   7.4231+-0.0525            7.3420+-0.2689          might be 1.0110x faster
   imul-int-only                                      8.4854+-0.5863            8.1219+-0.7523          might be 1.0448x faster
   imul-mixed                                         6.8331+-0.3803     ?      6.8585+-0.3299        ?
   in-four-cases                                     17.1404+-0.3110     ?     17.8450+-2.3242        ? might be 1.0411x slower
   in-one-case-false                                  9.4449+-0.4228     ?      9.5211+-0.5951        ?
   in-one-case-true                                   9.2405+-0.2482            9.2167+-0.2526        
   in-two-cases                                       9.8873+-0.7828            9.6766+-0.2216          might be 1.0218x faster
   indexed-properties-in-objects                      2.6666+-0.0584     ?      2.8036+-0.3184        ? might be 1.0514x slower
   infer-closure-const-then-mov-no-inline             3.0070+-0.0395     ?      3.0214+-0.0535        ?
   infer-closure-const-then-mov                      19.0286+-0.5132           18.6708+-0.7898          might be 1.0192x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.5158+-0.3669           10.3597+-0.0713          might be 1.0151x faster
   infer-closure-const-then-put-to-scope             22.0530+-0.5881           21.1777+-0.7510          might be 1.0413x faster
   infer-closure-const-then-reenter-no-inline   
                                                     50.6959+-1.3560           50.3739+-1.5974        
   infer-closure-const-then-reenter                  21.5408+-0.5510     ?     22.0286+-0.2955        ? might be 1.0226x slower
   infer-constant-global-property                     3.5016+-0.1434     ?      3.5441+-0.2581        ? might be 1.0121x slower
   infer-constant-property                            2.5655+-0.0331     ?      2.5757+-0.0361        ?
   infer-one-time-closure-ten-vars                    7.6331+-0.2489     ?      7.6732+-0.3664        ?
   infer-one-time-closure-two-vars                    7.4261+-0.3729            7.2691+-0.3027          might be 1.0216x faster
   infer-one-time-closure                             7.1008+-0.2838     ?      7.2716+-0.6153        ? might be 1.0240x slower
   infer-one-time-deep-closure                       10.8396+-0.1970     ?     10.9955+-0.5436        ? might be 1.0144x slower
   inline-arguments-access                            3.6590+-0.3138            3.5412+-0.1702          might be 1.0333x faster
   inline-arguments-aliased-access                    3.8611+-0.7523            3.4771+-0.0342          might be 1.1104x faster
   inline-arguments-local-escape                      3.6135+-0.2379     ?      3.7779+-0.5080        ? might be 1.0455x slower
   inline-get-scoped-var                              4.5823+-0.2074            4.5178+-0.1743          might be 1.0143x faster
   inlined-put-by-id-transition                      10.3908+-0.7313           10.0489+-0.9520          might be 1.0340x faster
   inlined-put-by-val-with-string-transition   
                                                     71.9445+-0.4746           71.4734+-1.8479        
   inlined-put-by-val-with-symbol-transition   
                                                     70.0681+-0.8703     ?     70.6903+-1.5673        ?
   int-or-other-abs-then-get-by-val                   4.6914+-0.0843            4.6873+-0.0973        
   int-or-other-abs-zero-then-get-by-val             17.3349+-3.5691           15.4835+-0.1737          might be 1.1196x faster
   int-or-other-add-then-get-by-val                   3.9274+-0.0765            3.9255+-0.0277        
   int-or-other-add                                   4.8364+-0.1537            4.7739+-0.0849          might be 1.0131x faster
   int-or-other-div-then-get-by-val                   3.7933+-0.0988            3.7682+-0.0587        
   int-or-other-max-then-get-by-val                   3.7371+-0.0203     ?      3.7735+-0.0706        ?
   int-or-other-min-then-get-by-val                   3.9045+-0.0817     ?      3.9398+-0.1240        ?
   int-or-other-mod-then-get-by-val                   3.5329+-0.0938     ?      3.5475+-0.0991        ?
   int-or-other-mul-then-get-by-val                   3.4988+-0.0610     ?      3.6295+-0.2778        ? might be 1.0374x slower
   int-or-other-neg-then-get-by-val                   4.3817+-0.0902            4.3801+-0.2104        
   int-or-other-neg-zero-then-get-by-val             16.1496+-1.1679           15.6258+-0.3840          might be 1.0335x faster
   int-or-other-sub-then-get-by-val                   3.9758+-0.0726            3.9347+-0.0578          might be 1.0105x faster
   int-or-other-sub                                   3.3992+-0.1944     ?      3.4142+-0.1347        ?
   int-overflow-local                                 4.1255+-0.2099     ?      4.2104+-0.3422        ? might be 1.0206x slower
   Int16Array-alloc-long-lived                       47.0587+-0.9067           46.9449+-0.9351        
   Int16Array-bubble-sort-with-byteLength            17.5691+-0.5270     ?     17.7390+-0.9971        ?
   Int16Array-bubble-sort                            17.6189+-0.8051           17.4716+-0.7130        
   Int16Array-load-int-mul                            1.3929+-0.0170            1.3911+-0.0498        
   Int16Array-to-Int32Array-set                      53.4947+-16.5133          46.9457+-1.4543          might be 1.1395x faster
   Int32Array-alloc-large                            12.3675+-0.8325     ?     12.5094+-0.6702        ? might be 1.0115x slower
   Int32Array-alloc-long-lived                       54.9740+-1.1645     ?     55.2544+-0.5761        ?
   Int32Array-alloc                                   2.7862+-0.2352     ?      2.9979+-0.5004        ? might be 1.0760x slower
   Int32Array-Int8Array-view-alloc                    5.9407+-0.0928            5.8846+-0.1137        
   int52-spill                                        4.4282+-0.0766     ?      4.4979+-0.1031        ? might be 1.0157x slower
   Int8Array-alloc-long-lived                        41.1368+-1.7902           41.1357+-1.2157        
   Int8Array-load-with-byteLength                     3.4189+-0.1704            3.3262+-0.0219          might be 1.0279x faster
   Int8Array-load                                     3.3903+-0.1097     ?      3.4682+-0.1543        ? might be 1.0230x slower
   integer-divide                                    10.0651+-0.1625     ?     10.1459+-0.2646        ?
   integer-modulo                                     1.5144+-0.0202     ?      1.5271+-0.0440        ?
   is-boolean-fold-tricky                             3.7480+-0.0682     ?      3.8831+-0.2923        ? might be 1.0360x slower
   is-boolean-fold                                    2.7155+-0.1680            2.6057+-0.0449          might be 1.0421x faster
   is-function-fold-tricky-internal-function   
                                                     10.1678+-0.0734     ?     10.2925+-0.2530        ? might be 1.0123x slower
   is-function-fold-tricky                            4.0705+-0.0355     ?      4.0884+-0.0963        ?
   is-function-fold                                   2.6304+-0.0324     ?      2.6597+-0.1214        ? might be 1.0111x slower
   is-number-fold-tricky                              4.0524+-0.0731            4.0246+-0.0908        
   is-number-fold                                     2.6237+-0.1380     ?      2.7929+-0.3881        ? might be 1.0645x slower
   is-object-or-null-fold-functions                   2.6381+-0.0546            2.6365+-0.0511        
   is-object-or-null-fold-less-tricky                 4.0663+-0.0564            4.0202+-0.0244          might be 1.0115x faster
   is-object-or-null-fold-tricky                      5.2059+-0.1313            5.0461+-0.1316          might be 1.0317x faster
   is-object-or-null-fold                             2.6445+-0.0796     ?      2.7330+-0.2929        ? might be 1.0335x slower
   is-object-or-null-trickier-function                4.0882+-0.0430     ?      4.1387+-0.0942        ? might be 1.0124x slower
   is-object-or-null-trickier-internal-function   
                                                     10.5889+-0.2027     ?     10.7656+-0.0741        ? might be 1.0167x slower
   is-object-or-null-tricky-function                  4.0838+-0.0955            4.0549+-0.0388        
   is-object-or-null-tricky-internal-function   
                                                      7.8208+-0.0575            7.8044+-0.0943        
   is-string-fold-tricky                              3.9924+-0.0548     ?      3.9991+-0.0664        ?
   is-string-fold                                     2.6303+-0.0916     ?      2.6654+-0.1679        ? might be 1.0134x slower
   is-undefined-fold-tricky                           3.5508+-0.4753            3.3561+-0.2491          might be 1.0580x faster
   is-undefined-fold                                  2.6070+-0.1004     ?      2.6397+-0.1001        ? might be 1.0125x slower
   JSONP-negative-0                                   0.2486+-0.0039     ?      0.2540+-0.0314        ? might be 1.0217x slower
   large-int-captured                                 3.9732+-0.2508     ?      4.0787+-0.4290        ? might be 1.0265x slower
   large-int-neg                                     13.9153+-0.4101           13.7747+-0.2821          might be 1.0102x faster
   large-int                                         12.6826+-0.2588     ?     13.1542+-0.6735        ? might be 1.0372x slower
   load-varargs-elimination                          20.9234+-0.6051     ?     21.3090+-0.6305        ? might be 1.0184x slower
   logical-not-weird-types                            2.8406+-0.1144            2.7562+-0.0628          might be 1.0306x faster
   logical-not                                        4.1691+-0.0982     ?      4.2117+-0.2138        ? might be 1.0102x slower
   lots-of-fields                                     9.5229+-0.1386            9.2073+-0.3929          might be 1.0343x faster
   make-indexed-storage                               2.7055+-0.0951     ?      2.7297+-0.2262        ?
   make-rope-cse                                      3.6464+-0.1132     ?      3.6747+-0.1744        ?
   marsaglia-larger-ints                             32.2311+-2.2429           31.8976+-0.4541          might be 1.0105x faster
   marsaglia-osr-entry                               21.8169+-0.4521           21.3050+-0.4166          might be 1.0240x faster
   math-with-out-of-bounds-array-values              22.4487+-0.5164     ?     23.1385+-1.0879        ? might be 1.0307x slower
   max-boolean                                        2.6936+-0.2937            2.6220+-0.0599          might be 1.0273x faster
   method-on-number                                  16.2266+-0.6764           15.7417+-0.2831          might be 1.0308x faster
   min-boolean                                        2.6524+-0.2885            2.5685+-0.0847          might be 1.0327x faster
   minus-boolean-double                               3.0661+-0.0690            3.0584+-0.0671        
   minus-boolean                                      2.3601+-0.2139            2.3547+-0.1270        
   misc-strict-eq                                    32.5762+-1.0582     ^     29.4148+-0.6865        ^ definitely 1.1075x faster
   mod-boolean-double                                11.1977+-0.3266           10.9937+-0.2184          might be 1.0186x faster
   mod-boolean                                        8.4449+-0.2433            8.2363+-0.0933          might be 1.0253x faster
   mul-boolean-double                                 3.5678+-0.0394     ?      3.6668+-0.2671        ? might be 1.0277x slower
   mul-boolean                                        2.7819+-0.0855            2.7773+-0.0341        
   neg-boolean                                        3.1006+-0.0141            3.0825+-0.0919        
   negative-zero-divide                               0.3493+-0.0198     ?      0.3578+-0.0316        ? might be 1.0244x slower
   negative-zero-modulo                               0.3367+-0.0074     ?      0.3401+-0.0140        ? might be 1.0100x slower
   negative-zero-negate                               0.3277+-0.0163            0.3229+-0.0164          might be 1.0150x faster
   nested-function-parsing                           44.0606+-1.3436     ?     44.3895+-0.7551        ?
   new-array-buffer-dead                             87.7879+-1.1897     ?     88.3784+-1.1193        ?
   new-array-buffer-push                              5.9845+-0.3235     ?      6.2733+-0.5818        ? might be 1.0483x slower
   new-array-dead                                    14.7372+-0.4094     ?     14.9960+-0.5969        ? might be 1.0176x slower
   new-array-push                                     3.6849+-0.4874            3.3529+-0.1225          might be 1.0990x faster
   no-inline-constructor                             31.6900+-0.8482           31.2977+-0.9552          might be 1.0125x faster
   number-test                                        3.0308+-0.2186            2.9203+-0.0265          might be 1.0379x faster
   object-closure-call                                4.6466+-0.0680     ?      4.6765+-0.0307        ?
   object-get-own-property-symbols-on-large-array   
                                                      4.2335+-0.2532     ?      4.9312+-0.7876        ? might be 1.1648x slower
   object-test                                        2.6406+-0.0924     ?      2.8420+-0.3678        ? might be 1.0763x slower
   obvious-sink-pathology-taken                     100.7753+-1.3656           98.6911+-0.9040          might be 1.0211x faster
   obvious-sink-pathology                            96.4686+-2.5620           93.9887+-0.8356          might be 1.0264x faster
   obviously-elidable-new-object                     28.7442+-0.9348           28.2874+-0.3639          might be 1.0161x faster
   plus-boolean-arith                                 2.3492+-0.0732     ?      2.3789+-0.0659        ? might be 1.0126x slower
   plus-boolean-double                                3.1017+-0.0560     ?      3.1640+-0.1677        ? might be 1.0201x slower
   plus-boolean                                       2.6227+-0.1280            2.6159+-0.3930        
   poly-chain-access-different-prototypes-simple   
                                                      3.1948+-0.0493     ?      3.2247+-0.0807        ?
   poly-chain-access-different-prototypes             2.9137+-0.0773            2.8583+-0.1210          might be 1.0194x faster
   poly-chain-access-simpler                          3.1899+-0.0526     ?      3.3626+-0.4021        ? might be 1.0542x slower
   poly-chain-access                                  3.2526+-0.1145     ?      3.2565+-0.0707        ?
   poly-stricteq                                     50.4970+-0.4574     ^     48.4766+-0.8568        ^ definitely 1.0417x faster
   polymorphic-array-call                             1.2638+-0.0607            1.1783+-0.0640          might be 1.0725x faster
   polymorphic-get-by-id                              2.8236+-0.1198            2.7826+-0.0561          might be 1.0147x faster
   polymorphic-put-by-id                             25.1849+-1.4878           24.8862+-1.3509          might be 1.0120x faster
   polymorphic-put-by-val-with-string                25.6421+-0.8351           25.3653+-0.5556          might be 1.0109x faster
   polymorphic-put-by-val-with-symbol                24.9496+-0.5299           24.8567+-0.5412        
   polymorphic-structure                             13.7651+-0.8716           13.1191+-0.2252          might be 1.0492x faster
   polyvariant-monomorphic-get-by-id                  6.6336+-0.9316     ?      6.6380+-0.8811        ?
   proto-getter-access                                8.5117+-0.3709            8.3768+-0.3214          might be 1.0161x faster
   prototype-access-with-mutating-prototype           5.4771+-0.2494     ?      5.6443+-0.4012        ? might be 1.0305x slower
   put-by-id-replace-and-transition                   7.9639+-0.5039            7.9281+-0.3799        
   put-by-id-slightly-polymorphic                     2.6113+-0.0937            2.5770+-0.0380          might be 1.0133x faster
   put-by-id                                          9.7076+-0.4687     ?      9.7594+-0.5257        ?
   put-by-val-direct                                  0.3238+-0.0059     ?      0.3682+-0.0825        ? might be 1.1370x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.6218+-0.6511            5.5741+-0.5735        
   put-by-val-machine-int                             2.3438+-0.0898     ?      2.4495+-0.2376        ? might be 1.0451x slower
   put-by-val-with-string-replace-and-transition   
                                                     10.3405+-0.6322           10.1094+-0.5299          might be 1.0229x faster
   put-by-val-with-string-slightly-polymorphic   
                                                      2.8797+-0.0983            2.7979+-0.0212          might be 1.0293x faster
   put-by-val-with-string                            10.5278+-0.3571           10.1387+-0.4633          might be 1.0384x faster
   put-by-val-with-symbol-replace-and-transition   
                                                     11.6553+-0.6060           11.3151+-0.2570          might be 1.0301x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.3136+-0.3272            3.0999+-0.0614          might be 1.0689x faster
   put-by-val-with-symbol                            10.4623+-0.5638           10.1827+-0.3735          might be 1.0275x faster
   rare-osr-exit-on-local                            14.1499+-0.2728     ?     14.5824+-0.5626        ? might be 1.0306x slower
   register-pressure-from-osr                        16.6289+-0.5319     ?     16.6723+-0.4702        ?
   repeat-multi-get-by-offset                        21.4990+-0.2896     ?     22.2393+-1.0880        ? might be 1.0344x slower
   setter-prototype                                   7.7757+-0.2726            7.6022+-0.1878          might be 1.0228x faster
   setter                                             5.2869+-0.4751     ?      5.6403+-0.7535        ? might be 1.0669x slower
   simple-activation-demo                            24.6667+-1.3609           24.6474+-0.9674        
   simple-getter-access                              10.8195+-0.5222     ?     11.0280+-0.4992        ? might be 1.0193x slower
   simple-poly-call-nested                            8.8865+-0.9067            8.8777+-0.7708        
   simple-poly-call                                   1.1463+-0.0167     ?      1.1907+-0.0435        ? might be 1.0387x slower
   sin-boolean                                       20.7469+-1.5038           20.5577+-1.3363        
   singleton-scope                                   56.0539+-1.4795           55.6335+-0.6538        
   sink-function                                     10.3840+-0.8357            9.6764+-0.4415          might be 1.0731x faster
   sink-huge-activation                              16.2677+-0.4368     ?     16.5253+-0.5513        ? might be 1.0158x slower
   sinkable-new-object-dag                           54.3792+-0.5899     ?     54.8855+-1.7615        ?
   sinkable-new-object-taken                         42.9556+-2.0262     ?     43.6815+-1.8042        ? might be 1.0169x slower
   sinkable-new-object                               30.4937+-0.8378           30.1870+-0.9364          might be 1.0102x faster
   slow-array-profile-convergence                     2.7342+-0.4909            2.5652+-0.2583          might be 1.0659x faster
   slow-convergence                                   2.2895+-0.0781     ?      2.3290+-0.1445        ? might be 1.0172x slower
   slow-ternaries                                    17.4546+-0.6152     ?     18.5285+-1.6750        ? might be 1.0615x slower
   sorting-benchmark                                 16.7123+-0.4597           16.4958+-0.4930          might be 1.0131x faster
   sparse-conditional                                 1.0959+-0.0383            1.0824+-0.0242          might be 1.0125x faster
   splice-to-remove                                  12.1830+-0.4896     ?     13.0335+-1.2099        ? might be 1.0698x slower
   string-char-code-at                               14.0684+-0.4336     ?     14.3286+-0.6381        ? might be 1.0185x slower
   string-concat-object                               2.1888+-0.0815            2.1527+-0.1699          might be 1.0168x faster
   string-concat-pair-object                          2.0466+-0.0869            2.0295+-0.1172        
   string-concat-pair-simple                          9.3575+-0.8451     ?      9.5057+-0.4900        ? might be 1.0158x slower
   string-concat-simple                               9.0983+-0.2570     ?      9.3932+-0.3635        ? might be 1.0324x slower
   string-cons-repeat                                 6.4657+-0.5533            6.3317+-0.2490          might be 1.0212x faster
   string-cons-tower                                  6.9810+-0.5092            6.9780+-0.8797        
   string-equality                                   15.1554+-0.5691     ?     15.2491+-0.5658        ?
   string-get-by-val-big-char                         6.6301+-0.0995     ?      6.9014+-0.3114        ? might be 1.0409x slower
   string-get-by-val-out-of-bounds-insane             3.0567+-0.0694     ?      3.1164+-0.0952        ? might be 1.0195x slower
   string-get-by-val-out-of-bounds                    4.1134+-0.1867            3.9774+-0.1017          might be 1.0342x faster
   string-get-by-val                                  2.7883+-0.0565            2.7820+-0.0379        
   string-hash                                        1.7822+-0.0310            1.7679+-0.0170        
   string-long-ident-equality                        12.4208+-0.1984     ?     12.9007+-1.0481        ? might be 1.0386x slower
   string-out-of-bounds                              10.0984+-0.3248     ?     10.3635+-0.6056        ? might be 1.0263x slower
   string-repeat-arith                               25.9027+-0.4338     ?     29.2328+-7.1232        ? might be 1.1286x slower
   string-sub                                        51.5594+-0.3931           51.5006+-0.6356        
   string-test                                        2.9570+-0.2971            2.8196+-0.0690          might be 1.0487x faster
   string-var-equality                               24.7246+-0.3301     ?     24.9020+-0.5108        ?
   structure-hoist-over-transitions                   2.4392+-0.1579            2.4151+-0.0671        
   substring-concat-weird                            36.2008+-1.5922           35.6064+-0.8610          might be 1.0167x faster
   substring-concat                                  38.8599+-0.8447     ?     39.4013+-0.7220        ? might be 1.0139x slower
   substring                                         44.9148+-0.7839     ?     45.6822+-2.7099        ? might be 1.0171x slower
   switch-char-constant                               2.5945+-0.0411     ?      2.6532+-0.1349        ? might be 1.0226x slower
   switch-char                                        8.0024+-0.2832     ^      6.9740+-0.6189        ^ definitely 1.1475x faster
   switch-constant                                    8.2765+-1.0611            8.2729+-0.4389        
   switch-string-basic-big-var                       13.7849+-0.1566     ?     13.9359+-0.3378        ? might be 1.0110x slower
   switch-string-basic-big                           14.1514+-0.2010     ?     14.3380+-0.1366        ? might be 1.0132x slower
   switch-string-basic-var                           13.0743+-0.3132     ?     13.2869+-0.4514        ? might be 1.0163x slower
   switch-string-basic                               12.7244+-0.4532           12.4874+-0.1877          might be 1.0190x faster
   switch-string-big-length-tower-var                17.9992+-0.5468           17.8340+-0.3907        
   switch-string-length-tower-var                    14.0604+-0.9481           13.7309+-0.4745          might be 1.0240x faster
   switch-string-length-tower                        12.0111+-0.3903           11.7652+-0.1365          might be 1.0209x faster
   switch-string-short                               12.0165+-0.1216     ?     12.1827+-0.4034        ? might be 1.0138x slower
   switch                                            11.0308+-0.4788     ?     12.0783+-1.0862        ? might be 1.0950x slower
   tear-off-arguments-simple                          3.0123+-0.1402            2.9841+-0.1348        
   tear-off-arguments                                 3.8576+-0.0970     ?      3.8894+-0.1095        ?
   temporal-structure                                12.0939+-0.4399     ?     12.1672+-0.2985        ?
   to-int32-boolean                                  12.5873+-0.1510           12.5255+-0.1652        
   try-catch-get-by-val-cloned-arguments             14.8324+-1.1734           14.2358+-0.5494          might be 1.0419x faster
   try-catch-get-by-val-direct-arguments              6.1888+-0.1099     ?      6.4509+-0.4315        ? might be 1.0423x slower
   try-catch-get-by-val-scoped-arguments              7.7319+-0.2994            7.5411+-0.2008          might be 1.0253x faster
   typed-array-get-set-by-val-profiling              27.2373+-0.6321           27.0678+-0.9738        
   undefined-property-access                        225.0114+-2.9720          223.7468+-1.3135        
   undefined-test                                     2.9424+-0.1006            2.9231+-0.0910        
   unprofiled-licm                                   14.1277+-0.5036           13.7112+-0.2547          might be 1.0304x faster
   varargs-call                                      13.2443+-0.2085     ?     13.2668+-0.3749        ?
   varargs-construct-inline                          22.6368+-1.8568           21.9539+-0.7398          might be 1.0311x faster
   varargs-construct                                 21.1347+-1.2246           19.8487+-0.6085          might be 1.0648x faster
   varargs-inline                                     8.9231+-0.9917            8.5147+-0.2360          might be 1.0480x faster
   varargs-strict-mode                                9.3143+-0.6835            8.9110+-0.1678          might be 1.0453x faster
   varargs                                            8.7695+-0.0546     ?      8.8153+-0.1160        ?
   weird-inlining-const-prop                          2.5034+-0.2887            2.4186+-0.1737          might be 1.0351x faster

   &lt;geometric&gt;                                        7.8485+-0.0156            7.8385+-0.0353          might be 1.0013x faster

                                                        TipOfTree                   StrCat                                      
AsmBench:
   bigfib.cpp                                       455.1717+-5.1549          450.1677+-7.7476          might be 1.0111x faster
   cray.c                                           399.2916+-2.7610     ?    405.2760+-5.5102        ? might be 1.0150x slower
   dry.c                                            427.3124+-12.4429    ?    431.7579+-5.8084        ? might be 1.0104x slower
   FloatMM.c                                        700.4568+-35.4117         687.6922+-4.9069          might be 1.0186x faster
   gcc-loops.cpp                                   3447.8074+-45.0770        3440.1287+-17.6443       
   n-body.c                                         826.6895+-4.1895     ?    830.4058+-6.2975        ?
   Quicksort.c                                      412.2963+-16.3599         408.4893+-6.6752        
   stepanov_container.cpp                          3602.2525+-53.7644        3587.3544+-36.7372       
   Towers.c                                         234.0241+-1.7707     ?    234.9332+-2.9402        ?

   &lt;geometric&gt;                                      722.6572+-3.4368          721.8925+-2.0286          might be 1.0011x faster

                                                        TipOfTree                   StrCat                                      
CompressionBench:
   huffman                                           59.6905+-0.8487     ?     60.4018+-1.7954        ? might be 1.0119x slower
   arithmetic-simple                                274.2560+-3.0890          272.9439+-2.7159        
   arithmetic-precise                               243.4763+-1.5488     ?    243.8998+-2.2648        ?
   arithmetic-complex-precise                       244.7453+-1.8204     ?    245.0768+-3.6190        ?
   arithmetic-precise-order-0                       282.5098+-2.5430     ?    282.9064+-2.0032        ?
   arithmetic-precise-order-1                       304.4931+-2.0394     ?    305.3485+-3.4775        ?
   arithmetic-precise-order-2                       354.6418+-6.2511     ?    358.4465+-13.9828       ? might be 1.0107x slower
   arithmetic-simple-order-1                        327.8805+-2.9962     ?    331.8115+-6.3701        ? might be 1.0120x slower
   arithmetic-simple-order-2                        378.5660+-5.1875     ?    381.3957+-4.3562        ?
   lz-string                                        315.2341+-6.3704          311.4762+-5.7974          might be 1.0121x faster

   &lt;geometric&gt;                                      255.0249+-1.0439     ?    255.8277+-1.7300        ? might be 1.0031x slower

                                                        TipOfTree                   StrCat                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                   51.1475+-0.2239     ?     51.1608+-0.1229        ? might be 1.0003x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120117</commentid>
    <comment_count>6</comment_count>
      <attachid>259694</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-08-22 09:44:04 -0700</bug_when>
    <thetext>Comment on attachment 259694
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120119</commentid>
    <comment_count>7</comment_count>
      <attachid>259694</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-08-22 10:06:23 -0700</bug_when>
    <thetext>Comment on attachment 259694
the patch

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

r=me too, with comments
Maybe you can also add a test that ensures that you don&apos;t execute side effects twice for an out of memory error.

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1515
&gt; +        bool goodToGo = true;

Nit: maybe call this variable &quot;canConvertToMakeRope&quot;.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:2086
&gt; +        

You need an exception check here!

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2212
&gt; +        

You need an exception check here!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120122</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-22 11:11:36 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 259694 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=259694&amp;action=review
&gt; 
&gt; r=me too, with comments
&gt; Maybe you can also add a test that ensures that you don&apos;t execute side
&gt; effects twice for an out of memory error.

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1515
&gt; &gt; +        bool goodToGo = true;
&gt; 
&gt; Nit: maybe call this variable &quot;canConvertToMakeRope&quot;.

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:2086
&gt; &gt; +        
&gt; 
&gt; You need an exception check here!
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:2212
&gt; &gt; +        
&gt; 
&gt; You need an exception check here!

Damn, I forgot about those!  I&apos;ll add the checks and some tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120123</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-22 11:36:23 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/188825</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259692</attachid>
            <date>2015-08-21 17:56:47 -0700</date>
            <delta_ts>2015-08-21 18:50:56 -0700</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>16714</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4ODc3MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDE4LDYgKzQxOCwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3Ry
aW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAg
Y2FzZSBTdHJDYXQ6IHsKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgs
IFNwZWNTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
QXJpdGhBZGQ6IHsKICAgICAgICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkudmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg4NzcwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDcgKzI0Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgY2FzZSBBcml0aEFkZDogewog
ICAgICAgICAgICAgaWYgKGlzTm90TmVnWmVybyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlz
Tm90TmVnWmVybyhub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgIGZsYWdz
ICY9IH5Ob2RlQnl0ZWNvZGVOZWVkc05lZ1plcm87CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTg4NzcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyODksMzcgKzMyODksMzEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaW50IHN0YXJ0T3BlcmFuZCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgbnVtT3BlcmFuZHMgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogI2lmIENQVShYODYpCi0gICAgICAgICAgICAv
LyBYODYgZG9lc24ndCBoYXZlIGVub3VnaCByZWdpc3RlcnMgdG8gY29tcGlsZSBNYWtlUm9wZSB3
aXRoIHRocmVlIGFyZ3VtZW50cy4KLSAgICAgICAgICAgIC8vIFJhdGhlciB0aGFuIHRyeSB0byBi
ZSBjbGV2ZXIsIHdlIGp1c3QgbWFrZSBNYWtlUm9wZSBkdW1iZXIgb24gdGhpcyBwcm9jZXNzb3Iu
Ci0gICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhSb3BlQXJndW1lbnRzID0gMjsKKyAgICAg
ICAgICAgIC8vIFg4NiBkb2Vzbid0IGhhdmUgZW5vdWdoIHJlZ2lzdGVycyB0byBjb21waWxlIE1h
a2VSb3BlIHdpdGggdGhyZWUgYXJndW1lbnRzLiBUaGUKKyAgICAgICAgICAgIC8vIFN0ckNhdCB3
ZSBlbWl0IGhlcmUgbWF5IGJlIHR1cm5lZCBpbnRvIGEgTWFrZVJvcGUuIFJhdGhlciB0aGFuIHRy
eSB0byBiZSBjbGV2ZXIsCisgICAgICAgICAgICAvLyB3ZSBqdXN0IG1ha2UgU3RyQ2F0IGR1bWJl
ciBvbiB0aGlzIHByb2Nlc3Nvci4KKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1heEFyZ3Vt
ZW50cyA9IDI7CiAjZWxzZQotICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbWF4Um9wZUFyZ3Vt
ZW50cyA9IDM7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhBcmd1bWVudHMgPSAzOwog
I2VuZGlmCi0gICAgICAgICAgICBhdXRvIHRvU3RyaW5nTm9kZXMgPSBzdGQ6Om1ha2VfdW5pcXVl
PE5vZGUqW10+KG51bU9wZXJhbmRzKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bnVtT3BlcmFuZHM7IGkrKykKLSAgICAgICAgICAgICAgICB0b1N0cmluZ05vZGVzW2ldID0gYWRk
VG9HcmFwaChUb1N0cmluZywgZ2V0KFZpcnR1YWxSZWdpc3RlcihzdGFydE9wZXJhbmQgLSBpKSkp
OwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU9wZXJhbmRzOyBpKyspCi0g
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCB0b1N0cmluZ05vZGVzW2ldKTsKLQog
ICAgICAgICAgICAgTm9kZSogb3BlcmFuZHNbQWRqYWNlbmN5TGlzdDo6U2l6ZV07CiAgICAgICAg
ICAgICB1bnNpZ25lZCBpbmRleEluT3BlcmFuZHMgPSAwOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkKICAgICAgICAgICAgICAg
ICBvcGVyYW5kc1tpXSA9IDA7CiAgICAgICAgICAgICBmb3IgKGludCBvcGVyYW5kSWR4ID0gMDsg
b3BlcmFuZElkeCA8IG51bU9wZXJhbmRzOyArK29wZXJhbmRJZHgpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoaW5kZXhJbk9wZXJhbmRzID09IG1heFJvcGVBcmd1bWVudHMpIHsKLSAgICAgICAgICAg
ICAgICAgICAgb3BlcmFuZHNbMF0gPSBhZGRUb0dyYXBoKE1ha2VSb3BlLCBvcGVyYW5kc1swXSwg
b3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXhJbk9w
ZXJhbmRzID09IG1heEFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAgICBvcGVyYW5kc1sw
XSA9IGFkZFRvR3JhcGgoU3RyQ2F0LCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRz
WzJdKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IEFkamFj
ZW5jeUxpc3Q6OlNpemU7ICsraSkKICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRzW2ld
ID0gMDsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbk9wZXJhbmRzID0gMTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKGluZGV4
SW5PcGVyYW5kcyA8IEFkamFjZW5jeUxpc3Q6OlNpemUpOwotICAgICAgICAgICAgICAgIEFTU0VS
VChpbmRleEluT3BlcmFuZHMgPCBtYXhSb3BlQXJndW1lbnRzKTsKLSAgICAgICAgICAgICAgICBv
cGVyYW5kc1tpbmRleEluT3BlcmFuZHMrK10gPSB0b1N0cmluZ05vZGVzW29wZXJhbmRJZHhdOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChpbmRleEluT3BlcmFuZHMgPCBtYXhBcmd1bWVudHMpOwor
ICAgICAgICAgICAgICAgIG9wZXJhbmRzW2luZGV4SW5PcGVyYW5kcysrXSA9IGdldChWaXJ0dWFs
UmVnaXN0ZXIoc3RhcnRPcGVyYW5kIC0gb3BlcmFuZElkeCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE1ha2VSb3BlLCBvcGVyYW5kc1swXSwg
b3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChT
dHJDYXQsIG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pKTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX3N0cmNhdCk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4ODc3MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zODgsNiArMzg4LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgIGNhc2UgVG9QcmltaXRpdmU6CiAgICAgY2FzZSBJbjoKICAgICBjYXNlIFZhbHVlQWRk
OgorICAgIGNhc2UgU3RyQ2F0OgogICAgICAgICByZWFkKFdvcmxkKTsKICAgICAgICAgd3JpdGUo
SGVhcCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAJKHJldmlzaW9uIDE4ODc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksNyBAQCBib29sIGRv
ZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBBcml0aENvczoKICAgICBj
YXNlIEFyaXRoTG9nOgogICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgY2FzZSBTdHJDYXQ6CiAgICAg
Y2FzZSBHZXRCeUlkOgogICAgIGNhc2UgR2V0QnlJZEZsdXNoOgogICAgIGNhc2UgUHV0QnlJZDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTg4NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDI5ICsxNTEsMTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gRklYTUU6IE9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVyZSBvbmUgb2YgdGhlIG9wZXJh
bmRzIGlzIHRoZQotICAgICAgICAgICAgLy8gZW1wdHkgc3RyaW5nLiBBbHNvIGNvbnNpZGVyIG9w
dGltaXppbmcgZm9yIHRoZSBjYXNlIHdoZXJlIHdlIGRvbid0Ci0gICAgICAgICAgICAvLyBiZWxp
ZXZlIGVpdGhlciBzaWRlIGlzIHRoZSBlbXRweSBzdHJpbmcuIEJvdGggb2YgdGhlc2UgdGhpbmdz
IHNob3VsZAotICAgICAgICAgICAgLy8gYmUgZWFzeS4KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKQotICAgICAgICAg
ICAgICAgICYmIGF0dGVtcHRUb01ha2VGYXN0U3RyaW5nQWRkPFN0cmluZ1VzZT4obm9kZSwgbm9k
ZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkKLSAg
ICAgICAgICAgICAgICAmJiBhdHRlbXB0VG9NYWtlRmFzdFN0cmluZ0FkZDxTdHJpbmdVc2U+KG5v
ZGUsIG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDEoKSkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmlu
Z09iamVjdCgpCi0gICAgICAgICAgICAgICAgJiYgYXR0ZW1wdFRvTWFrZUZhc3RTdHJpbmdBZGQ8
U3RyaW5nT2JqZWN0VXNlPihub2RlLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5z
aG91bGRTcGVjdWxhdGVTdHJpbmdPYmplY3QoKQotICAgICAgICAgICAgICAgICYmIGF0dGVtcHRU
b01ha2VGYXN0U3RyaW5nQWRkPFN0cmluZ09iamVjdFVzZT4obm9kZSwgbm9kZS0+Y2hpbGQyKCks
IG5vZGUtPmNoaWxkMSgpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdPYmplY3QoKQot
ICAgICAgICAgICAgICAgICYmIGF0dGVtcHRUb01ha2VGYXN0U3RyaW5nQWRkPFN0cmluZ09yU3Ry
aW5nT2JqZWN0VXNlPihub2RlLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5zaG91
bGRTcGVjdWxhdGVTdHJpbmdPclN0cmluZ09iamVjdCgpCi0gICAgICAgICAgICAgICAgJiYgYXR0
ZW1wdFRvTWFrZUZhc3RTdHJpbmdBZGQ8U3RyaW5nT3JTdHJpbmdPYmplY3RVc2U+KG5vZGUsIG5v
ZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDEoKSkpCisgICAgICAgICAgICBpZiAoYXR0ZW1wdFRv
TWFrZUZhc3RTdHJpbmdBZGQobm9kZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIC8vIFdlIGNvdWxkIGF0dGVtcHQgdG8gdHVybiB0aGlzIGludG8gYSBTdHJDYXQgaGVy
ZS4gQnV0IGZvciBub3csIHRoYXQgd291bGRuJ3QKKyAgICAgICAgICAgIC8vIHNpZ25pZmljYW50
bHkgcmVkdWNlIHRoZSBudW1iZXIgb2YgYnJhbmNoZXMgcmVxdWlyZWQuCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgU3RyQ2F0OiB7CisgICAgICAgICAgICBh
dHRlbXB0VG9NYWtlRmFzdFN0cmluZ0FkZChub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTE0MzIsOCArMTQxOSw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBX
ZSBvdWdodCB0byBiZSBhYmxlIHRvIGhhdmUgYSBUb1ByaW1pdGl2ZVRvU3RyaW5nIG5vZGUuCi0g
ICAgICAgIAogICAgICAgICBvYnNlcnZlVXNlS2luZE9uTm9kZTx1c2VLaW5kPihlZGdlLm5vZGUo
KSk7CiAgICAgICAgIGNyZWF0ZVRvU3RyaW5nPHVzZUtpbmQ+KG5vZGUsIGVkZ2UpOwogICAgIH0K
QEAgLTE1MjQsNTAgKzE1MDksNDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxVc2VLaW5kIGxlZnRVc2VLaW5kPgot
ICAgIGJvb2wgYXR0ZW1wdFRvTWFrZUZhc3RTdHJpbmdBZGQoTm9kZSogbm9kZSwgRWRnZSYgbGVm
dCwgRWRnZSYgcmlnaHQpCisKKyAgICBib29sIGF0dGVtcHRUb01ha2VGYXN0U3RyaW5nQWRkKE5v
ZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBU1NFUlQobGVmdFVzZUtpbmQgPT0gU3RyaW5nVXNl
IHx8IGxlZnRVc2VLaW5kID09IFN0cmluZ09iamVjdFVzZSB8fCBsZWZ0VXNlS2luZCA9PSBTdHJp
bmdPclN0cmluZ09iamVjdFVzZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNTdHJpbmdPYmpl
Y3RVc2U8bGVmdFVzZUtpbmQ+KCkgJiYgIWNhbk9wdGltaXplU3RyaW5nT2JqZWN0QWNjZXNzKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpCisgICAgICAgIGJvb2wgZ29vZFRvR28gPSB0cnVlOworICAg
ICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAg
ICBbJl0gKEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoZWRnZS0+c2hvdWxkU3Bl
Y3VsYXRlU3RyaW5nKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICBpZiAoY2FuT3B0aW1pemVTdHJpbmdPYmplY3RBY2Nlc3Mobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZS0+c2hvdWxkU3BlY3VsYXRlU3Ry
aW5nT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgIGlmIChlZGdlLT5zaG91bGRTcGVjdWxhdGVTdHJpbmdPclN0cmluZ09iamVjdCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBnb29kVG9HbyA9IGZhbHNlOworICAgICAgICAgICAgfSk7CisgICAgICAg
IGlmICghZ29vZFRvR28pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAg
ICAgICBjb252ZXJ0U3RyaW5nQWRkVXNlPGxlZnRVc2VLaW5kPihub2RlLCBsZWZ0KTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChyaWdodC0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpCi0gICAgICAg
ICAgICBjb252ZXJ0U3RyaW5nQWRkVXNlPFN0cmluZ1VzZT4obm9kZSwgcmlnaHQpOwotICAgICAg
ICBlbHNlIGlmIChyaWdodC0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nT2JqZWN0KCkgJiYgY2FuT3B0
aW1pemVTdHJpbmdPYmplY3RBY2Nlc3Mobm9kZS0+b3JpZ2luLnNlbWFudGljKSkKLSAgICAgICAg
ICAgIGNvbnZlcnRTdHJpbmdBZGRVc2U8U3RyaW5nT2JqZWN0VXNlPihub2RlLCByaWdodCk7Ci0g
ICAgICAgIGVsc2UgaWYgKHJpZ2h0LT5zaG91bGRTcGVjdWxhdGVTdHJpbmdPclN0cmluZ09iamVj
dCgpICYmIGNhbk9wdGltaXplU3RyaW5nT2JqZWN0QWNjZXNzKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpCi0gICAgICAgICAgICBjb252ZXJ0U3RyaW5nQWRkVXNlPFN0cmluZ09yU3RyaW5nT2JqZWN0
VXNlPihub2RlLCByaWdodCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gQXQgdGhp
cyBwb2ludCB3ZSBrbm93IHRoYXQgdGhlIG90aGVyIG9wZXJhbmQgaXMgc29tZXRoaW5nIHdlaXJk
LiBUaGUgc2VtYW50aWNhbGx5IGNvcnJlY3QKLSAgICAgICAgICAgIC8vIHdheSBvZiBkZWFsaW5n
IHdpdGggdGhpcyBpczoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBNYWtlUm9wZShA
bGVmdCwgVG9TdHJpbmcoVG9QcmltaXRpdmUoQHJpZ2h0KSkpCi0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gU28gdGhhdCdzIHdoYXQgd2UgZW1pdC4gTkIsIHdlIG5lZWQgdG8gZG8gYWxs
IHJlbGV2YW50IHR5cGUgY2hlY2tzIG9uIEBsZWZ0IGJlZm9yZSB3ZSBkbwotICAgICAgICAgICAg
Ly8gYW55dGhpbmcgdG8gQHJpZ2h0LCBzaW5jZSBUb1ByaW1pdGl2ZSBtYXkgYmUgZWZmZWN0ZnVs
LgotICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiB0b1ByaW1pdGl2ZSA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIHJlc3Vs
dE9mVG9QcmltaXRpdmUocmlnaHQtPnByZWRpY3Rpb24oKSksIFRvUHJpbWl0aXZlLAotICAgICAg
ICAgICAgICAgIG5vZGUtPm9yaWdpbiwgRWRnZShyaWdodC5ub2RlKCkpKTsKLSAgICAgICAgICAg
IE5vZGUqIHRvU3RyaW5nID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
ICAgICBtX2luZGV4SW5CbG9jaywgU3BlY1N0cmluZywgVG9TdHJpbmcsIG5vZGUtPm9yaWdpbiwg
RWRnZSh0b1ByaW1pdGl2ZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmaXh1cFRvUHJp
bWl0aXZlKHRvUHJpbWl0aXZlKTsKLQotICAgICAgICAgICAgLy8gRG9uJ3QgZml4IHVwIFRvU3Ry
aW5nLiBUb1N0cmluZyBhbmQgVG9QcmltaXRpdmUgYXJlIG9yaWdpbmF0ZWQgZnJvbSB0aGUgc2Ft
ZSBieXRlY29kZSBhbmQKLSAgICAgICAgICAgIC8vIFRvUHJpbWl0aXZlIG1heSBoYXZlIGFuIG9i
c2VydmFibGUgc2lkZSBlZmZlY3QuIFRvU3RyaW5nIHNob3VsZCBub3QgYmUgY29udmVydGVkIGlu
dG8gQ2hlY2sKLSAgICAgICAgICAgIC8vIHdpdGggc3BlY3VsYXRpdmUgdHlwZSBjaGVjayBiZWNh
dXNlIE9TUiBleGl0IHJlcHJvZHVjZSBhbiBvYnNlcnZhYmxlIHNpZGUgZWZmZWN0IGRvbmUgaW4K
LSAgICAgICAgICAgIC8vIFRvUHJpbWl0aXZlLgogCi0gICAgICAgICAgICByaWdodC5zZXROb2Rl
KHRvU3RyaW5nKTsKLSAgICAgICAgfQorICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAg
ICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZWRnZS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY29udmVydFN0cmluZ0FkZFVzZTxTdHJpbmdVc2U+KG5vZGUsIGVkZ2UpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIEFTU0VSVChjYW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyhub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKTsKKyAgICAgICAgICAgICAgICBpZiAoZWRnZS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5n
T2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udmVydFN0cmluZ0FkZFVzZTxTdHJp
bmdPYmplY3RVc2U+KG5vZGUsIGVkZ2UpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChlZGdlLT5zaG91bGRTcGVjdWxh
dGVTdHJpbmdPclN0cmluZ09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRT
dHJpbmdBZGRVc2U8U3RyaW5nT3JTdHJpbmdPYmplY3RVc2U+KG5vZGUsIGVkZ2UpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAg
CiAgICAgICAgIGNvbnZlcnRUb01ha2VSb3BlKG5vZGUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgCiAgICAgYm9vbCBpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoCkBAIC0x
NjAwLDEwICsxNTgxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSA9IG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKTsK
KyAgICAgICAgbV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJpbmdPYmplY3RTdHJ1Y3R1cmUp
OwogICAgICAgICBBU1NFUlQoc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUo
KS5pc09iamVjdCgpKTsKICAgICAgICAgQVNTRVJUKHN0cmluZ09iamVjdFN0cnVjdHVyZS0+c3Rv
cmVkUHJvdG90eXBlKCkuYXNDZWxsKCktPmNsYXNzSW5mbygpID09IFN0cmluZ1Byb3RvdHlwZTo6
aW5mbygpKTsKLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBzdHJpbmdQcm90b3R5cGVPYmpl
Y3QgPSBhc09iamVjdChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsK
KworICAgICAgICBGcm96ZW5WYWx1ZSogc3RyaW5nUHJvdG90eXBlT2JqZWN0ID0KKyAgICAgICAg
ICAgIG1fZ3JhcGguZnJlZXplKHN0cmluZ09iamVjdFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBl
KCkpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSA9IHN0cmlu
Z1Byb3RvdHlwZU9iamVjdC0+c3RydWN0dXJlKCk7CiAgICAgICAgIGlmIChtX2dyYXBoLnJlZ2lz
dGVyU3RydWN0dXJlKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSkgIT0gU3RydWN0dXJlUmVnaXN0
ZXJlZEFuZFdhdGNoZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxODg3NzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
MCw2ICsxNjAsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogQWRk
IG9mIHZhbHVlcyBtYXkgZWl0aGVyIGJlIGFyaXRobWV0aWMsIG9yIHJlc3VsdCBpbiBzdHJpbmcg
Y29uY2F0ZW5hdGlvbi4gKi9cCiAgICAgbWFjcm8oVmFsdWVBZGQsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCisgICAgLyogQWRkIG9mIHZhbHVlcyB0aGF0IGFsd2F5
cyBjb252ZXJzIGl0cyBpbnB1dHMgdG8gc3RyaW5ncy4gTWF5IGhhdmUgdHdvIG9yIHRocmVlIGtp
ZHMuICovXAorICAgIG1hY3JvKFN0ckNhdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAorICAgIFwKICAgICAvKiBQcm9wZXJ0eSBhY2Nlc3MuICovXAogICAgIC8qIFB1dEJ5VmFs
QWxpYXMgaW5kaWNhdGVzIGEgJ3B1dCcgYWxpYXNlcyBhIHByaW9yIHdyaXRlIHRvIHRoZSBzYW1l
IHByb3BlcnR5LiAqL1wKICAgICAvKiBTaW5jZSBhIHB1dCB0byAnbGVuZ3RoJyBtYXkgaW52YWxp
ZGF0ZSBvcHRpbWl6YXRpb25zIGhlcmUsICovXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODg3NzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTA4
LDYgKzExMDgsNDkgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMwog
ICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgYSwgYiwgYyk7CiB9CiAKK0pTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgYSwgRW5jb2RlZEpTVmFsdWUgYikKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIEpT
U3RyaW5nKiBzdHIxID0gSlNWYWx1ZTo6ZGVjb2RlKGEpLnRvU3RyaW5nKGV4ZWMpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgSlNT
dHJpbmcqIHN0cjIgPSBKU1ZhbHVlOjpkZWNvZGUoYikudG9TdHJpbmcoZXhlYyk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlm
IChzdW1PdmVyZmxvd3M8aW50MzJfdD4oc3RyMS0+bGVuZ3RoKCksIHN0cjItPmxlbmd0aCgpKSkg
eworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgc3Ry
MSwgc3RyMik7Cit9CisgICAgCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3RyQ2F0
MyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGEsIEVuY29kZWRKU1ZhbHVlIGIsIEVu
Y29kZWRKU1ZhbHVlIGMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBKU1N0cmluZyogc3RyMSA9
IEpTVmFsdWU6OmRlY29kZShhKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIEpTU3RyaW5nKiBzdHIyID0g
SlNWYWx1ZTo6ZGVjb2RlKGIpLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgSlNTdHJpbmcqIHN0cjMgPSBK
U1ZhbHVlOjpkZWNvZGUoYykudG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChzdW1PdmVyZmxvd3M8
aW50MzJfdD4oc3RyMS0+bGVuZ3RoKCksIHN0cjItPmxlbmd0aCgpLCBzdHIzLT5sZW5ndGgoKSkp
IHsKKyAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gSlNSb3BlU3RyaW5nOjpjcmVhdGUodm0sIHN0
cjEsIHN0cjIsIHN0cjMpOworfQorCiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRT
d2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KQogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE4ODc3MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjUsNiArMTI1LDggQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxTdHJp
bgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxTdHJpbmdDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTWFrZVJvcGUyKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBK
U1N0cmluZyosIEpTU3RyaW5nKik7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3Ry
Q2F0MihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpOworSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN0ckNhdDMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CiBjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4KTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uU3dpdGNoU3RyaW5nKEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyop
OwogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZ0FuZEdldEJyYW5j
aE9mZnNldChFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcqKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg3NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDk1LDcgKzQ5NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBjYXNlIENhbGxTdHJpbmdDb25zdHJ1Y3RvcjoKICAgICAgICAgY2FzZSBU
b1N0cmluZzoKLSAgICAgICAgY2FzZSBNYWtlUm9wZTogeworICAgICAgICBjYXNlIE1ha2VSb3Bl
OgorICAgICAgICBjYXNlIFN0ckNhdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVk
aWN0aW9uKFNwZWNTdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lv
biAxODg3NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDYgKzIzNCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShB
YnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIExvZ2ljYWxOb3Q6CiAgICAgY2FzZSBUb1By
aW1pdGl2ZToKICAgICBjYXNlIFRvU3RyaW5nOgorICAgIGNhc2UgU3RyQ2F0OgogICAgIGNhc2Ug
Q2FsbFN0cmluZ0NvbnN0cnVjdG9yOgogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgogICAgIGNh
c2UgTWFrZVJvcGU6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259694</attachid>
            <date>2015-08-21 18:50:56 -0700</date>
            <delta_ts>2015-08-22 10:06:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30542</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4ODE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBA
CisyMDE1LTA4LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHN0cmluZyBjb25jYXRlbmF0aW9uIHNob3VsZG4ndCBiZSBwbGF5aW5nIGZhc3QgYW5kIGxv
b3NlIHdpdGggZWZmZWN0cyBhbmQgT1NSIGV4aXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODMzOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFByaW9yIHRvIHRoaXMgY2hhbmdlLCBERkcgc3RyaW5nIGNv
bmNhdGVuYXRpb24gYXBwZWFyZWQgdG8gaGF2ZSB2YXJpb3VzIGRpZmZlcmVudCB3YXlzIG9mCisg
ICAgICAgIGNyZWF0aW5nIGFuIE9TUiBleGl0IHJpZ2h0IGFmdGVyIGEgc2lkZSBlZmZlY3QuIFRo
YXQncyBiYWQsIGJlY2F1c2UgdGhlIGV4aXQgd2lsbCBjYXVzZQorICAgICAgICB1cyB0byByZWV4
ZWN1dGUgdGhlIHNpZGUgZWZmZWN0LiBUaGUgY29kZSBhcHBlYXJzIHRvIGhhdmUgc29tZSBoYWNr
cyBmb3IgYXZvaWRpbmcgdGhpcywKKyAgICAgICAgYnV0IHNvbWUgY2FzZXMgYXJlIGJhc2ljYWxs
eSB1bmF2b2lkYWJsZSwgbGlrZSB0aGUgT09NIGNhc2Ugb2Ygc3RyaW5nIGNvbmNhdGVuYXRpb246
IGluCisgICAgICAgIHRydW5rIHRoYXQgY291bGQgY2F1c2UgdHdvIGV4ZWN1dGlvbnMgb2YgdGhl
IHRvU3RyaW5nIG9wZXJhdGlvbi4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhlIHN0cmluZyBj
b25jYXRlbmF0aW9uIGNvZGUgdG8gZWl0aGVyIGJlIHNwZWN1bGF0aXZlIG9yIGVmZmVjdGZ1bCBi
dXQKKyAgICAgICAgbmV2ZXIgYm90aC4gSXQncyBhbHJlYWR5IHRoZSBjYXNlIHRoYXQgd2hlbiB0
aGlzIGNvZGUgbmVlZHMgdG8gYmUgZWZmZWN0ZnVsLCBpdCBhbHNvCisgICAgICAgIG5lZWRzIHRv
IGJlIHNsb3cgKGl0IGRvZXMgaW50LT5zdHJpbmcgY29udmVyc2lvbnMsIGNhbGxzIEpTIGZ1bmN0
aW9ucywgZXRjKS4gU28sIHRoaXMgaXMKKyAgICAgICAgYSBzbWFsbCBwcmljZSB0byBwYXkgZm9y
IHNhbml0eS4KKworICAgICAgICBUaGUgYmlnZ2VzdCBwYXJ0IG9mIHRoaXMgY2hhbmdlIGlzIHRo
ZSBpbnRyb2R1Y3Rpb24gb2YgU3RyQ2F0LCB3aGljaCBpcyBsaWtlIE1ha2VSb3BlIGJ1dAorICAg
ICAgICBkb2VzIHRvU3RyaW5nIGNvbnZlcnNpb25zIG9uIGl0cyBvd24gaW5zdGVhZCBvZiByZWx5
aW5nIG9uIHNlcGFyYXRlIG5vZGVzLiBTdHJDYXQgY2FuCisgICAgICAgIHRha2UgZWl0aGVyIDIg
b3IgMyBjaGlsZHJlbi4gSXQncyB0aGUgZWZmZWN0ZnVsIGJ1dCBub3Qgc3BlY3VsYXRpdmUgdmVy
c2lvbiBvZiBNYWtlUm9wZS4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVy
aXplKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhh
c2U6OmNvbnZlcnRTdHJpbmdBZGRVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6
OmZpeHVwVG9TdHJpbmdPckNhbGxTdHJpbmdDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6YXR0ZW1wdFRvTWFrZUZhc3RTdHJpbmdBZGQpOgorICAgICAgICAoSlND
OjpERkc6OkZpeHVwUGhhc2U6OmNhbk9wdGltaXplU3RyaW5nT2JqZWN0QWNjZXNzKToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVPcGVyYW5kOjpKU1Zh
bHVlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6On5KU1ZhbHVl
T3BlcmFuZCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRlKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwv
RlRMSW50cmluc2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExW
TS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5v
ZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVWYWx1
ZUFkZCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVN0
ckNhdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFy
aXRoQWRkT3JTdWIpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisKIDIwMTUtMDgt
MjEgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxODg3OTIgYW5kIHIxODg4MDMuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCShyZXZpc2lvbiAxODg4MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxOCw2
ICs0MTgsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyB8IFNwZWNCeXRl
Y29kZU51bWJlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGNhc2UgU3RyQ2F0OiB7
CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1p
dCk7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3RyaW5nKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAKICAgICBjYXNlIEFyaXRoQWRkOiB7CiAg
ICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4ODgxMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0Niw3ICsyNDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbm9kZS0+Y2hp
bGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgICAgIAorCiAgICAgICAgIGNhc2UgQXJpdGhBZGQ6IHsKICAgICAgICAgICAgIGlm
IChpc05vdE5lZ1plcm8obm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc05vdE5lZ1plcm8obm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICBmbGFncyAmPSB+Tm9kZUJ5dGVj
b2RlTmVlZHNOZWdaZXJvOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4ODgxMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjg5
LDM3ICszMjg5LDMxIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIGludCBzdGFydE9wZXJhbmQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOwogICAgICAgICAgICAgaW50IG51bU9wZXJhbmRzID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKICNpZiBDUFUoWDg2KQotICAgICAgICAgICAgLy8gWDg2IGRvZXNuJ3Qg
aGF2ZSBlbm91Z2ggcmVnaXN0ZXJzIHRvIGNvbXBpbGUgTWFrZVJvcGUgd2l0aCB0aHJlZSBhcmd1
bWVudHMuCi0gICAgICAgICAgICAvLyBSYXRoZXIgdGhhbiB0cnkgdG8gYmUgY2xldmVyLCB3ZSBq
dXN0IG1ha2UgTWFrZVJvcGUgZHVtYmVyIG9uIHRoaXMgcHJvY2Vzc29yLgotICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgbWF4Um9wZUFyZ3VtZW50cyA9IDI7CisgICAgICAgICAgICAvLyBYODYg
ZG9lc24ndCBoYXZlIGVub3VnaCByZWdpc3RlcnMgdG8gY29tcGlsZSBNYWtlUm9wZSB3aXRoIHRo
cmVlIGFyZ3VtZW50cy4gVGhlCisgICAgICAgICAgICAvLyBTdHJDYXQgd2UgZW1pdCBoZXJlIG1h
eSBiZSB0dXJuZWQgaW50byBhIE1ha2VSb3BlLiBSYXRoZXIgdGhhbiB0cnkgdG8gYmUgY2xldmVy
LAorICAgICAgICAgICAgLy8gd2UganVzdCBtYWtlIFN0ckNhdCBkdW1iZXIgb24gdGhpcyBwcm9j
ZXNzb3IuCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBtYXhBcmd1bWVudHMgPSAyOwogI2Vs
c2UKLSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIG1heFJvcGVBcmd1bWVudHMgPSAzOworICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgbWF4QXJndW1lbnRzID0gMzsKICNlbmRpZgotICAgICAg
ICAgICAgYXV0byB0b1N0cmluZ05vZGVzID0gc3RkOjptYWtlX3VuaXF1ZTxOb2RlKltdPihudW1P
cGVyYW5kcyk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU9wZXJhbmRzOyBp
KyspCi0gICAgICAgICAgICAgICAgdG9TdHJpbmdOb2Rlc1tpXSA9IGFkZFRvR3JhcGgoVG9TdHJp
bmcsIGdldChWaXJ0dWFsUmVnaXN0ZXIoc3RhcnRPcGVyYW5kIC0gaSkpKTsKLQotICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1PcGVyYW5kczsgaSsrKQotICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgdG9TdHJpbmdOb2Rlc1tpXSk7Ci0KICAgICAgICAgICAgIE5v
ZGUqIG9wZXJhbmRzW0FkamFjZW5jeUxpc3Q6OlNpemVdOwogICAgICAgICAgICAgdW5zaWduZWQg
aW5kZXhJbk9wZXJhbmRzID0gMDsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpCiAgICAgICAgICAgICAgICAgb3BlcmFuZHNbaV0g
PSAwOwogICAgICAgICAgICAgZm9yIChpbnQgb3BlcmFuZElkeCA9IDA7IG9wZXJhbmRJZHggPCBu
dW1PcGVyYW5kczsgKytvcGVyYW5kSWR4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4SW5P
cGVyYW5kcyA9PSBtYXhSb3BlQXJndW1lbnRzKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wZXJh
bmRzWzBdID0gYWRkVG9HcmFwaChNYWtlUm9wZSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBv
cGVyYW5kc1syXSk7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4SW5PcGVyYW5kcyA9PSBtYXhB
cmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZHNbMF0gPSBhZGRUb0dyYXBo
KFN0ckNhdCwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSk7CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXpl
OyArK2kpCiAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kc1tpXSA9IDA7CiAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5PcGVyYW5kcyA9IDE7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFTU0VSVChpbmRleEluT3BlcmFuZHMgPCBB
ZGphY2VuY3lMaXN0OjpTaXplKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaW5kZXhJbk9wZXJh
bmRzIDwgbWF4Um9wZUFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgb3BlcmFuZHNbaW5kZXhJ
bk9wZXJhbmRzKytdID0gdG9TdHJpbmdOb2Rlc1tvcGVyYW5kSWR4XTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoaW5kZXhJbk9wZXJhbmRzIDwgbWF4QXJndW1lbnRzKTsKKyAgICAgICAgICAgICAg
ICBvcGVyYW5kc1tpbmRleEluT3BlcmFuZHMrK10gPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHN0YXJ0
T3BlcmFuZCAtIG9wZXJhbmRJZHgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksCi0gICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChNYWtlUm9wZSwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBv
cGVyYW5kc1syXSkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoU3RyQ2F0LCBvcGVyYW5k
c1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9zdHJjYXQpOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxODg4MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzg4LDYgKzM4OCw3
IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIFRv
UHJpbWl0aXZlOgogICAgIGNhc2UgSW46CiAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIFN0
ckNhdDoKICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAgIHdyaXRlKEhlYXApOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShy
ZXZpc2lvbiAxODg4MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQXJpdGhDb3M6CiAgICAgY2FzZSBBcml0aExvZzoK
ICAgICBjYXNlIFZhbHVlQWRkOgorICAgIGNhc2UgU3RyQ2F0OgogICAgIGNhc2UgR2V0QnlJZDoK
ICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIFB1dEJ5SWQ6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4ODgxMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1MSwyOSArMTUxLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBP
cHRpbWl6ZSBmb3IgdGhlIGNhc2Ugd2hlcmUgb25lIG9mIHRoZSBvcGVyYW5kcyBpcyB0aGUKLSAg
ICAgICAgICAgIC8vIGVtcHR5IHN0cmluZy4gQWxzbyBjb25zaWRlciBvcHRpbWl6aW5nIGZvciB0
aGUgY2FzZSB3aGVyZSB3ZSBkb24ndAotICAgICAgICAgICAgLy8gYmVsaWV2ZSBlaXRoZXIgc2lk
ZSBpcyB0aGUgZW10cHkgc3RyaW5nLiBCb3RoIG9mIHRoZXNlIHRoaW5ncyBzaG91bGQKLSAgICAg
ICAgICAgIC8vIGJlIGVhc3kuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAmJiBhdHRl
bXB0VG9NYWtlRmFzdFN0cmluZ0FkZDxTdHJpbmdVc2U+KG5vZGUsIG5vZGUtPmNoaWxkMSgpLCBu
b2RlLT5jaGlsZDIoKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpCi0gICAgICAgICAgICAgICAg
JiYgYXR0ZW1wdFRvTWFrZUZhc3RTdHJpbmdBZGQ8U3RyaW5nVXNlPihub2RlLCBub2RlLT5jaGls
ZDIoKSwgbm9kZS0+Y2hpbGQxKCkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmdPYmplY3QoKQotICAg
ICAgICAgICAgICAgICYmIGF0dGVtcHRUb01ha2VGYXN0U3RyaW5nQWRkPFN0cmluZ09iamVjdFVz
ZT4obm9kZSwgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRl
U3RyaW5nT2JqZWN0KCkKLSAgICAgICAgICAgICAgICAmJiBhdHRlbXB0VG9NYWtlRmFzdFN0cmlu
Z0FkZDxTdHJpbmdPYmplY3RVc2U+KG5vZGUsIG5vZGUtPmNoaWxkMigpLCBub2RlLT5jaGlsZDEo
KSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZ09yU3RyaW5nT2JqZWN0KCkKLSAgICAgICAgICAgICAg
ICAmJiBhdHRlbXB0VG9NYWtlRmFzdFN0cmluZ0FkZDxTdHJpbmdPclN0cmluZ09iamVjdFVzZT4o
bm9kZSwgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3Ry
aW5nT3JTdHJpbmdPYmplY3QoKQotICAgICAgICAgICAgICAgICYmIGF0dGVtcHRUb01ha2VGYXN0
U3RyaW5nQWRkPFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlPihub2RlLCBub2RlLT5jaGlsZDIoKSwg
bm9kZS0+Y2hpbGQxKCkpKQorICAgICAgICAgICAgaWYgKGF0dGVtcHRUb01ha2VGYXN0U3RyaW5n
QWRkKG5vZGUpKQogICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyBXZSBj
b3VsZCBhdHRlbXB0IHRvIHR1cm4gdGhpcyBpbnRvIGEgU3RyQ2F0IGhlcmUuIEJ1dCBmb3Igbm93
LCB0aGF0IHdvdWxkbid0CisgICAgICAgICAgICAvLyBzaWduaWZpY2FudGx5IHJlZHVjZSB0aGUg
bnVtYmVyIG9mIGJyYW5jaGVzIHJlcXVpcmVkLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIFN0ckNhdDogeworICAgICAgICAgICAgYXR0ZW1wdFRvTWFrZUZh
c3RTdHJpbmdBZGQobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCkBAIC0xNDMyLDggKzE0MTksNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogV2Ugb3VnaHQgdG8gYmUg
YWJsZSB0byBoYXZlIGEgVG9QcmltaXRpdmVUb1N0cmluZyBub2RlLgotICAgICAgICAKICAgICAg
ICAgb2JzZXJ2ZVVzZUtpbmRPbk5vZGU8dXNlS2luZD4oZWRnZS5ub2RlKCkpOwogICAgICAgICBj
cmVhdGVUb1N0cmluZzx1c2VLaW5kPihub2RlLCBlZGdlKTsKICAgICB9CkBAIC0xNTI0LDQ3ICsx
NTA5LDQ0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
Ci0gICAgCi0gICAgdGVtcGxhdGU8VXNlS2luZCBsZWZ0VXNlS2luZD4KLSAgICBib29sIGF0dGVt
cHRUb01ha2VGYXN0U3RyaW5nQWRkKE5vZGUqIG5vZGUsIEVkZ2UmIGxlZnQsIEVkZ2UmIHJpZ2h0
KQorCisgICAgYm9vbCBhdHRlbXB0VG9NYWtlRmFzdFN0cmluZ0FkZChOb2RlKiBub2RlKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKGxlZnRVc2VLaW5kID09IFN0cmluZ1VzZSB8fCBsZWZ0VXNlS2lu
ZCA9PSBTdHJpbmdPYmplY3RVc2UgfHwgbGVmdFVzZUtpbmQgPT0gU3RyaW5nT3JTdHJpbmdPYmpl
Y3RVc2UpOwotICAgICAgICAKLSAgICAgICAgaWYgKGlzU3RyaW5nT2JqZWN0VXNlPGxlZnRVc2VL
aW5kPigpICYmICFjYW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyhub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKQorICAgICAgICBib29sIGdvb2RUb0dvID0gdHJ1ZTsKKyAgICAgICAgbV9ncmFwaC5k
b1RvQ2hpbGRyZW4oCisgICAgICAgICAgICBub2RlLAorICAgICAgICAgICAgWyZdIChFZGdlJiBl
ZGdlKSB7CisgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKGNhbk9w
dGltaXplU3RyaW5nT2JqZWN0QWNjZXNzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGVkZ2UtPnNob3VsZFNwZWN1bGF0ZVN0cmluZ09iamVjdCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAo
ZWRnZS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdPYmplY3QoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Z29vZFRvR28gPSBmYWxzZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBpZiAoIWdvb2RUb0dv
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgY29udmVydFN0
cmluZ0FkZFVzZTxsZWZ0VXNlS2luZD4obm9kZSwgbGVmdCk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAocmlnaHQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQotICAgICAgICAgICAgY29udmVydFN0
cmluZ0FkZFVzZTxTdHJpbmdVc2U+KG5vZGUsIHJpZ2h0KTsKLSAgICAgICAgZWxzZSBpZiAocmln
aHQtPnNob3VsZFNwZWN1bGF0ZVN0cmluZ09iamVjdCgpICYmIGNhbk9wdGltaXplU3RyaW5nT2Jq
ZWN0QWNjZXNzKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpCi0gICAgICAgICAgICBjb252ZXJ0U3Ry
aW5nQWRkVXNlPFN0cmluZ09iamVjdFVzZT4obm9kZSwgcmlnaHQpOwotICAgICAgICBlbHNlIGlm
IChyaWdodC0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdPYmplY3QoKSAmJiBjYW5PcHRp
bWl6ZVN0cmluZ09iamVjdEFjY2Vzcyhub2RlLT5vcmlnaW4uc2VtYW50aWMpKQotICAgICAgICAg
ICAgY29udmVydFN0cmluZ0FkZFVzZTxTdHJpbmdPclN0cmluZ09iamVjdFVzZT4obm9kZSwgcmln
aHQpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25v
dyB0aGF0IHRoZSBvdGhlciBvcGVyYW5kIGlzIHNvbWV0aGluZyB3ZWlyZC4gVGhlIHNlbWFudGlj
YWxseSBjb3JyZWN0Ci0gICAgICAgICAgICAvLyB3YXkgb2YgZGVhbGluZyB3aXRoIHRoaXMgaXM6
Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gTWFrZVJvcGUoQGxlZnQsIFRvU3RyaW5n
KFRvUHJpbWl0aXZlKEByaWdodCkpKQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFNv
IHRoYXQncyB3aGF0IHdlIGVtaXQuIE5CLCB3ZSBuZWVkIHRvIGRvIGFsbCByZWxldmFudCB0eXBl
IGNoZWNrcyBvbiBAbGVmdCBiZWZvcmUgd2UgZG8KLSAgICAgICAgICAgIC8vIGFueXRoaW5nIHRv
IEByaWdodCwgc2luY2UgVG9QcmltaXRpdmUgbWF5IGJlIGVmZmVjdGZ1bC4KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgTm9kZSogdG9QcmltaXRpdmUgPSBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCByZXN1bHRPZlRvUHJpbWl0aXZl
KHJpZ2h0LT5wcmVkaWN0aW9uKCkpLCBUb1ByaW1pdGl2ZSwKLSAgICAgICAgICAgICAgICBub2Rl
LT5vcmlnaW4sIEVkZ2UocmlnaHQubm9kZSgpKSk7Ci0gICAgICAgICAgICBOb2RlKiB0b1N0cmlu
ZyA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgbV9pbmRleElu
QmxvY2ssIFNwZWNTdHJpbmcsIFRvU3RyaW5nLCBub2RlLT5vcmlnaW4sIEVkZ2UodG9QcmltaXRp
dmUpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZml4dXBUb1ByaW1pdGl2ZSh0b1ByaW1p
dGl2ZSk7Ci0KLSAgICAgICAgICAgIC8vIERvbid0IGZpeCB1cCBUb1N0cmluZy4gVG9TdHJpbmcg
YW5kIFRvUHJpbWl0aXZlIGFyZSBvcmlnaW5hdGVkIGZyb20gdGhlIHNhbWUgYnl0ZWNvZGUgYW5k
Ci0gICAgICAgICAgICAvLyBUb1ByaW1pdGl2ZSBtYXkgaGF2ZSBhbiBvYnNlcnZhYmxlIHNpZGUg
ZWZmZWN0LiBUb1N0cmluZyBzaG91bGQgbm90IGJlIGNvbnZlcnRlZCBpbnRvIENoZWNrCi0gICAg
ICAgICAgICAvLyB3aXRoIHNwZWN1bGF0aXZlIHR5cGUgY2hlY2sgYmVjYXVzZSBPU1IgZXhpdCBy
ZXByb2R1Y2UgYW4gb2JzZXJ2YWJsZSBzaWRlIGVmZmVjdCBkb25lIGluCi0gICAgICAgICAgICAv
LyBUb1ByaW1pdGl2ZS4KIAotICAgICAgICAgICAgcmlnaHQuc2V0Tm9kZSh0b1N0cmluZyk7Ci0g
ICAgICAgIH0KKyAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICBub2Rl
LAorICAgICAgICAgICAgWyZdIChFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAgaWYgKGVk
Z2UtPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnZl
cnRTdHJpbmdBZGRVc2U8U3RyaW5nVXNlPihub2RlLCBlZGdlKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoY2Fu
T3B0aW1pemVTdHJpbmdPYmplY3RBY2Nlc3Mobm9kZS0+b3JpZ2luLnNlbWFudGljKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGVkZ2UtPnNob3VsZFNwZWN1bGF0ZVN0cmluZ09iamVjdCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnZlcnRTdHJpbmdBZGRVc2U8U3RyaW5nT2JqZWN0VXNlPihu
b2RlLCBlZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoZWRnZS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nT3JTdHJp
bmdPYmplY3QoKSkgeworICAgICAgICAgICAgICAgICAgICBjb252ZXJ0U3RyaW5nQWRkVXNlPFN0
cmluZ09yU3RyaW5nT2JqZWN0VXNlPihub2RlLCBlZGdlKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAgICBjb252
ZXJ0VG9NYWtlUm9wZShub2RlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjAwLDExICsx
NTgyLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSA9IG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKGNvZGVPcmlnaW4pLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKTsKKyAgICAgICAg
bV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpOwogICAgICAg
ICBBU1NFUlQoc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5pc09iamVj
dCgpKTsKICAgICAgICAgQVNTRVJUKHN0cmluZ09iamVjdFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90
eXBlKCkuYXNDZWxsKCktPmNsYXNzSW5mbygpID09IFN0cmluZ1Byb3RvdHlwZTo6aW5mbygpKTsK
LSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0KiBzdHJpbmdQcm90b3R5cGVPYmplY3QgPSBhc09i
amVjdChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsKLSAgICAgICAg
U3RydWN0dXJlKiBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUgPSBzdHJpbmdQcm90b3R5cGVPYmpl
Y3QtPnN0cnVjdHVyZSgpOworCisgICAgICAgIEZyb3plblZhbHVlKiBzdHJpbmdQcm90b3R5cGVP
YmplY3RWYWx1ZSA9CisgICAgICAgICAgICBtX2dyYXBoLmZyZWV6ZShzdHJpbmdPYmplY3RTdHJ1
Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsKKyAgICAgICAgU3RyaW5nUHJvdG90eXBlKiBzdHJp
bmdQcm90b3R5cGVPYmplY3QgPQorICAgICAgICAgICAgc3RyaW5nUHJvdG90eXBlT2JqZWN0VmFs
dWUtPmR5bmFtaWNDYXN0PFN0cmluZ1Byb3RvdHlwZSo+KCk7CisgICAgICAgIFN0cnVjdHVyZSog
c3RyaW5nUHJvdG90eXBlU3RydWN0dXJlID0gc3RyaW5nUHJvdG90eXBlT2JqZWN0VmFsdWUtPnN0
cnVjdHVyZSgpOwogICAgICAgICBpZiAobV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJpbmdQ
cm90b3R5cGVTdHJ1Y3R1cmUpICE9IFN0cnVjdHVyZVJlZ2lzdGVyZWRBbmRXYXRjaGVkKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE4ODgxMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDYgKzE2MCw5
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBBZGQgb2YgdmFsdWVz
IG1heSBlaXRoZXIgYmUgYXJpdGhtZXRpYywgb3IgcmVzdWx0IGluIHN0cmluZyBjb25jYXRlbmF0
aW9uLiAqL1wKICAgICBtYWNybyhWYWx1ZUFkZCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIFwKKyAgICAvKiBBZGQgb2YgdmFsdWVzIHRoYXQgYWx3YXlzIGNvbnZlcnMg
aXRzIGlucHV0cyB0byBzdHJpbmdzLiBNYXkgaGF2ZSB0d28gb3IgdGhyZWUga2lkcy4gKi9cCisg
ICAgbWFjcm8oU3RyQ2F0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
XAogICAgIC8qIFByb3BlcnR5IGFjY2Vzcy4gKi9cCiAgICAgLyogUHV0QnlWYWxBbGlhcyBpbmRp
Y2F0ZXMgYSAncHV0JyBhbGlhc2VzIGEgcHJpb3Igd3JpdGUgdG8gdGhlIHNhbWUgcHJvcGVydHku
ICovXAogICAgIC8qIFNpbmNlIGEgcHV0IHRvICdsZW5ndGgnIG1heSBpbnZhbGlkYXRlIG9wdGlt
aXphdGlvbnMgaGVyZSwgKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4ODgxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMDgsNiArMTEwOCw0
OSBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzCiAgICAgcmV0dXJu
IEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZtLCBhLCBiLCBjKTsKIH0KIAorSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblN0ckNhdDIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBh
LCBFbmNvZGVkSlNWYWx1ZSBiKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgSlNTdHJpbmcqIHN0
cjEgPSBKU1ZhbHVlOjpkZWNvZGUoYSkudG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBKU1N0cmluZyogc3Ry
MiA9IEpTVmFsdWU6OmRlY29kZShiKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKHN1bU92ZXJm
bG93czxpbnQzMl90PihzdHIxLT5sZW5ndGgoKSwgc3RyMi0+bGVuZ3RoKCkpKSB7CisgICAgICAg
IHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgcmV0dXJuIEpTUm9wZVN0cmluZzo6Y3JlYXRlKHZtLCBzdHIxLCBzdHIyKTsK
K30KKyAgICAKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQzKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgYSwgRW5jb2RlZEpTVmFsdWUgYiwgRW5jb2RlZEpTVmFs
dWUgYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIEpTU3RyaW5nKiBzdHIxID0gSlNWYWx1ZTo6
ZGVjb2RlKGEpLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgSlNTdHJpbmcqIHN0cjIgPSBKU1ZhbHVlOjpk
ZWNvZGUoYikudG9TdHJpbmcoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBKU1N0cmluZyogc3RyMyA9IEpTVmFsdWU6OmRl
Y29kZShjKS50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKHN1bU92ZXJmbG93czxpbnQzMl90Pihz
dHIxLT5sZW5ndGgoKSwgc3RyMi0+bGVuZ3RoKCksIHN0cjMtPmxlbmd0aCgpKSkgeworICAgICAg
ICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIHJldHVybiBKU1JvcGVTdHJpbmc6OmNyZWF0ZSh2bSwgc3RyMSwgc3RyMiwg
c3RyMyk7Cit9CisKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRh
cmdldEZvckRvdWJsZSgKICAgICBFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgc2l6ZV90IHRhYmxlSW5kZXgpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTg4ODExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw2ICsx
MjUsOCBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbFN0cmluCiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlKTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9w
ZTIoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwogSlNDZWxsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwg
SlNTdHJpbmcqKTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25TdHJDYXQyKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7CitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uU3RyQ2F0MyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwg
c2l6ZV90IHRhYmxlSW5kZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hT
dHJpbmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7CiBpbnQzMl90
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5nQW5kR2V0QnJhbmNoT2Zmc2V0KEV4
ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE4ODgxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OTUsNyArNDk1LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CiAgICAg
ICAgIGNhc2UgQ2FsbFN0cmluZ0NvbnN0cnVjdG9yOgogICAgICAgICBjYXNlIFRvU3RyaW5nOgot
ICAgICAgICBjYXNlIE1ha2VSb3BlOiB7CisgICAgICAgIGNhc2UgTWFrZVJvcGU6CisgICAgICAg
IGNhc2UgU3RyQ2F0OiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3Bl
Y1N0cmluZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4ODgxMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzQsNiArMjM0LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdAogICAgIGNhc2UgTG9naWNhbE5vdDoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgog
ICAgIGNhc2UgVG9TdHJpbmc6CisgICAgY2FzZSBTdHJDYXQ6CiAgICAgY2FzZSBDYWxsU3RyaW5n
Q29uc3RydWN0b3I6CiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CiAgICAgY2FzZSBNYWtlUm9w
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTg4ODExKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1
Nyw2ICsyMDU3LDM3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBTdHJDYXQ6IHsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3AzKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBvcDFU
YWdHUFIgPSBvcDEudGFnR1BSKCk7CisgICAgICAgIEdQUlJlZyBvcDFQYXlsb2FkR1BSID0gb3Ax
LnBheWxvYWRHUFIoKTsKKyAgICAgICAgR1BSUmVnIG9wMlRhZ0dQUiA9IG9wMi50YWdHUFIoKTsK
KyAgICAgICAgR1BSUmVnIG9wMlBheWxvYWRHUFIgPSBvcDIucGF5bG9hZEdQUigpOworICAgICAg
ICBHUFJSZWcgb3AzVGFnR1BSOworICAgICAgICBHUFJSZWcgb3AzUGF5bG9hZEdQUjsKKyAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMygpKSB7CisgICAgICAgICAgICBvcDNUYWdHUFIgPSBvcDMudGFn
R1BSKCk7CisgICAgICAgICAgICBvcDNQYXlsb2FkR1BSID0gb3AzLnBheWxvYWRHUFIoKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG9wM1RhZ0dQUiA9IEludmFsaWRHUFJSZWc7Cisg
ICAgICAgICAgICBvcDNQYXlsb2FkR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgICAgICBHUFJGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDMoKSkKKyAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0MywgcmVzdWx0LmdwcigpLCBvcDFU
YWdHUFIsIG9wMVBheWxvYWRHUFIsIG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQUiwgb3AzVGFnR1BS
LCBvcDNQYXlsb2FkR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25TdHJDYXQyLCByZXN1bHQuZ3ByKCksIG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQ
Uiwgb3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKTsKKyAgICAgICAgCisgICAgICAgIGNlbGxSZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2Fz
ZSBBcml0aEFkZDoKICAgICAgICAgY29tcGlsZUFkZChub2RlKTsKICAgICAgICAgYnJlYWs7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHJldmlzaW9uIDE4ODgxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxODksNiArMjE4OSwzMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBTdHJDYXQ6IHsKKyAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
b3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AzKHRo
aXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBvcDFHUFIgPSBv
cDEuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBvcDNHUFI7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDMoKSkKKyAgICAgICAgICAgIG9w
M0dQUiA9IG9wMy5ncHIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3AzR1BSID0gSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICAg
ICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBpZiAobm9kZS0+
Y2hpbGQzKCkpCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdDMsIHJl
c3VsdC5ncHIoKSwgb3AxR1BSLCBvcDJHUFIsIG9wM0dQUik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0MiwgcmVzdWx0LmdwcigpLCBvcDFH
UFIsIG9wMkdQUik7CisgICAgICAgIAorICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAg
ICAgIGNvbXBpbGVBZGQobm9kZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTg4ODExKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzc0LDExICsxMzc0LDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpKIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpKQyBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwg
YXJnMyk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVz
dWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9w
ZXJhdGlvbl9FSkpKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJl
ZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VKWiBvcGVyYXRpb24sIEdQUlJlZyBy
ZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKQEAgLTE3MDUsNiArMTcxNSwx
OSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShF
QUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CiAgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRp
b24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQ
UlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCisgICAgeworICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxv
YWQsIGFyZzFUYWcsIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKworICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUpKSiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBh
cmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQsIEdQUlJlZyBhcmczVGFnLCBHUFJSZWcgYXJnM1Bh
eWxvYWQpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
RUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFyZzFUYWcsIGFyZzJQYXlsb2FkLCBh
cmcyVGFnLCBhcmczUGF5bG9hZCwgYXJnM1RhZyk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisKICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFNfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKICAgICB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBh
cmcxUGF5bG9hZCwgYXJnMVRhZyk7CkBAIC0yNDk0LDYgKzI1MTcsOCBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBBU1NFUlQobV9qaXQpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1v
ZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlw
ZWRVc2UpOworICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICByZXR1cm47CiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKICAgICAgICAg
ICAgIGdwcigpOwpAQCAtMjUwNyw2ICsyNTMyLDggQEAgcHVibGljOgogCiAgICAgfkpTVmFsdWVP
cGVyYW5kKCkKICAgICB7CisgICAgICAgIGlmICghbV9lZGdlKQorICAgICAgICAgICAgcmV0dXJu
OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJ
bnZhbGlkR1BSUmVnKTsKICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24g
MTg4ODExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzNyw2ICsyMzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
Y2FzZSBDb21wYXJlR3JlYXRlckVxOgogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUVxOgog
ICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgorICAgICAgICAgICAgICAgIGNh
c2UgU3RyQ2F0OgogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+
Y2hpbGQyKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4ODgxMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBp
bGUoTm9kZSogCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6
CiAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIFN0ckNhdDoKICAgICBjYXNlIEFyaXRoQWRk
OgogICAgIGNhc2UgQXJpdGhDbHozMjoKICAgICBjYXNlIEFyaXRoU3ViOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJl
dmlzaW9uIDE4ODgxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2lj
UmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw4IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhDX0pJVE9wZXJhdGlvbl9FQ1pDLCBmdW5j
dGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0ciwgaW50MzIsIGludFB0cikpIFwKICAgICBt
YWNybyhDX0pJVE9wZXJhdGlvbl9FR0MsIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50
UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oQ19KSVRPcGVyYXRpb25fRUosIGZ1bmN0aW9uVHlw
ZShpbnRQdHIsIGludFB0ciwgaW50NjQpKSBcCisgICAgbWFjcm8oQ19KSVRPcGVyYXRpb25fRUpK
LCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludDY0LCBpbnQ2NCkpIFwKKyAgICBtYWNy
byhDX0pJVE9wZXJhdGlvbl9FSkpKLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludDY0
LCBpbnQ2NCwgaW50NjQpKSBcCiAgICAgbWFjcm8oQ19KSVRPcGVyYXRpb25fRUpzc0pzcywgZnVu
Y3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhD
X0pJVE9wZXJhdGlvbl9FSnNzSnNzSnNzLCBmdW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGlu
dFB0ciwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oQ19KSVRPcGVyYXRpb25fRVN0LCBm
dW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludFB0cikpIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODg4
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDU0LDYgKzQ1NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
VmFsdWVBZGQ6CiAgICAgICAgICAgICBjb21waWxlVmFsdWVBZGQoKTsKICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFN0ckNhdDoKKyAgICAgICAgICAgIGNvbXBpbGVTdHJDYXQoKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBjYXNl
IEFyaXRoU3ViOgogICAgICAgICAgICAgY29tcGlsZUFyaXRoQWRkT3JTdWIoKTsKQEAgLTEzMTUs
NiArMTMxOCwyMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpKSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKSkpOwogICAgIH0KICAgICAKKyAg
ICB2b2lkIGNvbXBpbGVTdHJDYXQoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdDsKKyAg
ICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQzKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHZtQ2Fs
bCgKKyAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0MyksIG1f
Y2FsbEZyYW1lLAorICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSks
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSksCisgICAgICAgICAgICAgICAgbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMygpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1
bHQgPSB2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblN0
ckNhdDIpLCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKTsKKyAgICAgICAgfQorICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29tcGlsZUFy
aXRoQWRkT3JTdWIoKQogICAgIHsKICAgICAgICAgYm9vbCBpc1N1YiA9ICBtX25vZGUtPm9wKCkg
PT0gQXJpdGhTdWI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAkocmV2aXNpb24gMTg4ODExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw3ICsxNDUsOSBAQCB0eXBlZGVmIEpT
Q2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlCiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJB
VElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc2NDKShFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSlNDZWxs
Kik7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKWiko
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwogdHlwZWRlZiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gKCpDX0pJVE9wZXJhdGlvbl9FSlpDKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgaW50MzJfdCwgSlNDZWxsKik7Cit0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAo
KkNfSklUT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25f
RUpKQykoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBKU0NlbGwq
KTsKK3R5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRpb25fRUpKSiko
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSk7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09QRVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc2Na
KShFeGVjU3RhdGUqLCBKU1Njb3BlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogSklUX09Q
RVJBVElPTiAoKkNfSklUT3BlcmF0aW9uX0VKc3NTdCkoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBT
dHJ1Y3R1cmUqKTsKIHR5cGVkZWYgSlNDZWxsKiBKSVRfT1BFUkFUSU9OICgqQ19KSVRPcGVyYXRp
b25fRUpzc0pzcykoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwo=
</data>
<flag name="review"
          id="284892"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>