<?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>144500</bug_id>
          
          <creation_ts>2015-05-01 14:25:07 -0700</creation_ts>
          <short_desc>FTL should use AI more</short_desc>
          <delta_ts>2015-05-01 19:02:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>144396</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</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>1090881</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-01 14:25:07 -0700</bug_when>
    <thetext>Currently if a DFG Node semantically requires a check, and we know that the check is redundant, then one of three things happen in the FTL backend:

1) If the check is part of the edge, then we will correctly remove it and not emit any LLVM IR for the check.

2) If the check is the only thing that the node does, and AI knows this, then ConstantFoldingPhase will remove the node before we get to the backend.

3) If the node does many things and also the check (or AI just doesn&apos;t know about the check), then we will emit LLVM IR for the check.  In many (most?) cases, LLVM will not remove the check because it will involve things opaque to LLVM - like loading the type part of the object&apos;s header.

An easy simplification is to have all of the isNumber/isCell/isBlah things in FTL::LowerDFGToLLVM have a mode where they return an LLVM constant if we have already proved that the incoming value either is, or isn&apos;t, the type in question.  This will be slightly less effective than (1) or (2) since we will still emit control flow for the unreachable path, but in the end LLVM will prove this control flow unreachable and kill the code - so it&apos;s much better than falling over to (3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090882</commentid>
    <comment_count>1</comment_count>
      <attachid>252170</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-01 14:30:03 -0700</bug_when>
    <thetext>Created attachment 252170
the patch

Still testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090884</commentid>
    <comment_count>2</comment_count>
      <attachid>252170</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-01 14:34:58 -0700</bug_when>
    <thetext>Comment on attachment 252170
the patch

Tests look good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090890</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-05-01 14:57:10 -0700</bug_when>
    <thetext>r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091028</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-01 18:59:04 -0700</bug_when>
    <thetext>Perf results:


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r183690)
&quot;MoreFTLAI&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r183690)

Collected 6 samples per benchmark/VM, with 6 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                 MoreFTLAI                                     
SunSpider:
   3d-cube                                            5.2133+-0.0795            5.1772+-0.2274        
   3d-morph                                           5.9275+-0.4923            5.6884+-0.0466          might be 1.0420x faster
   3d-raytrace                                        6.6423+-0.2193     ?      6.7980+-0.3876        ? might be 1.0234x slower
   access-binary-trees                                2.3872+-0.2838     ?      2.4725+-0.2796        ? might be 1.0357x slower
   access-fannkuch                                    5.9384+-0.0584     ?      6.0561+-0.0600        ? might be 1.0198x slower
   access-nbody                                       2.9783+-0.1081     ?      3.0376+-0.3555        ? might be 1.0199x slower
   access-nsieve                                      3.7810+-0.5797            3.5013+-0.1663          might be 1.0799x faster
   bitops-3bit-bits-in-byte                           1.5973+-0.0929            1.5848+-0.0317        
   bitops-bits-in-byte                                3.4451+-0.1167            3.4295+-0.2379        
   bitops-bitwise-and                                 2.3495+-0.2814     ?      2.4855+-0.4972        ? might be 1.0579x slower
   bitops-nsieve-bits                                 3.3498+-0.0578            3.1578+-0.1384          might be 1.0608x faster
   controlflow-recursive                              2.3274+-0.0884     ?      2.3531+-0.1674        ? might be 1.0110x slower
   crypto-aes                                         4.5859+-0.3922            4.4660+-0.2107          might be 1.0268x faster
   crypto-md5                                         2.7709+-0.1175            2.7414+-0.0646          might be 1.0108x faster
   crypto-sha1                                        2.7829+-0.4133     ?      2.8441+-0.1949        ? might be 1.0220x slower
   date-format-tofte                                  9.3397+-0.0997            9.3347+-0.1660        
   date-format-xparb                                  6.0081+-0.3723            5.8291+-0.1357          might be 1.0307x faster
   math-cordic                                        3.0940+-0.0600     ?      3.2202+-0.1216        ? might be 1.0408x slower
   math-partial-sums                                  5.3037+-0.2894            5.1355+-0.0823          might be 1.0328x faster
   math-spectral-norm                                 1.9854+-0.1007            1.9729+-0.0455        
   regexp-dna                                         7.4698+-0.6942     ?      7.6868+-1.2284        ? might be 1.0290x slower
   string-base64                                      4.6440+-0.0848     ?      4.8016+-0.2038        ? might be 1.0339x slower
   string-fasta                                       7.1996+-0.7634            6.6023+-0.0712          might be 1.0905x faster
   string-tagcloud                                   10.1591+-0.8704            9.8838+-0.4434          might be 1.0279x faster
   string-unpack-code                                19.6481+-0.5739     ?     19.8948+-0.4623        ? might be 1.0126x slower
   string-validate-input                              5.1004+-0.3996            4.9414+-0.1250          might be 1.0322x faster

   &lt;arithmetic&gt;                                       5.2319+-0.0505            5.1960+-0.1120          might be 1.0069x faster

                                                        TipOfTree                 MoreFTLAI                                     
LongSpider:
   3d-cube                                          880.3380+-3.7383          879.7421+-7.3005        
   3d-morph                                        1537.0615+-11.5951        1527.0977+-3.3197        
   3d-raytrace                                      736.6251+-5.5384     ?    738.2175+-7.9744        ?
   access-binary-trees                             1031.0794+-6.4369         1030.2230+-9.3079        
   access-fannkuch                                  333.2329+-7.7392          331.3734+-8.7112        
   access-nbody                                     614.2570+-8.4289          611.4084+-3.8249        
   access-nsieve                                    889.4714+-52.2526         867.1235+-15.0022         might be 1.0258x faster
   bitops-3bit-bits-in-byte                          45.0355+-1.0570           44.0007+-0.5216          might be 1.0235x faster
   bitops-bits-in-byte                              102.8556+-1.7012          101.5980+-1.7503          might be 1.0124x faster
   bitops-nsieve-bits                               619.1204+-7.2095     ?    620.4943+-8.5617        ?
   controlflow-recursive                            485.2850+-4.8206     ^    477.7298+-0.5814        ^ definitely 1.0158x faster
   crypto-aes                                       740.9060+-89.0383         705.5165+-11.0669         might be 1.0502x faster
   crypto-md5                                       522.5791+-13.4974         521.9200+-3.3580        
   crypto-sha1                                      604.1404+-4.8704     ^    596.2706+-2.5012        ^ definitely 1.0132x faster
   date-format-tofte                                751.5618+-15.0732    ?    763.1029+-17.7852       ? might be 1.0154x slower
   date-format-xparb                                776.3487+-26.4682    ?    788.3760+-15.0947       ? might be 1.0155x slower
   math-cordic                                      595.5014+-6.3360          590.3419+-0.8924        
   math-partial-sums                                506.9176+-3.7763     ?    508.3313+-7.9377        ?
   math-spectral-norm                               563.1100+-0.6215     ?    563.7069+-0.8838        ?
   string-base64                                    380.5107+-3.2877          380.0783+-4.9997        
   string-fasta                                     445.1062+-8.9908          436.7726+-6.8359          might be 1.0191x faster
   string-tagcloud                                  198.3724+-1.7980     ?    199.5186+-2.0562        ?

   &lt;geometric&gt;                                      496.1875+-3.8930          493.1226+-1.4937          might be 1.0062x faster

                                                        TipOfTree                 MoreFTLAI                                     
V8Spider:
   crypto                                            56.7966+-2.7121     ?     57.5188+-1.3782        ? might be 1.0127x slower
   deltablue                                         96.8408+-5.9147           95.7688+-3.5300          might be 1.0112x faster
   earley-boyer                                      45.6005+-1.1738           44.7037+-1.8691          might be 1.0201x faster
   raytrace                                          41.6544+-1.4062           40.6227+-2.1933          might be 1.0254x faster
   regexp                                            80.5423+-2.8199     ?     83.6920+-1.7095        ? might be 1.0391x slower
   richards                                          79.7606+-1.8978     ?     80.7830+-1.2605        ? might be 1.0128x slower
   splay                                             39.7906+-2.1261     ?     40.3687+-2.4673        ? might be 1.0145x slower

   &lt;geometric&gt;                                       59.5646+-1.0245     ?     59.7517+-0.3412        ? might be 1.0031x slower

                                                        TipOfTree                 MoreFTLAI                                     
Octane:
   encrypt                                           0.20240+-0.00085    ?     0.20334+-0.00162       ?
   decrypt                                           3.61096+-0.05194          3.59739+-0.05911       
   deltablue                                x2       0.20848+-0.00173          0.20837+-0.00154       
   earley                                            0.53948+-0.00416          0.53818+-0.00454       
   boyer                                             6.75936+-0.04303    ?     6.77409+-0.10176       ?
   navier-stokes                            x2       5.22688+-0.07516          5.18956+-0.04771       
   raytrace                                 x2       1.27678+-0.04240          1.26585+-0.03956       
   richards                                 x2       0.12307+-0.00153    ?     0.12385+-0.00302       ?
   splay                                    x2       0.40720+-0.00566          0.40436+-0.00269       
   regexp                                   x2      31.57328+-0.27195    ?    31.72521+-0.39563       ?
   pdfjs                                    x2      43.68045+-0.38045         43.63777+-0.57114       
   mandreel                                 x2      50.48890+-0.25868    ?    50.67894+-1.11515       ?
   gbemu                                    x2      42.47940+-2.77590         41.96119+-0.46707         might be 1.0123x faster
   closure                                           0.56569+-0.00392    ?     0.56840+-0.00698       ?
   jquery                                            7.22325+-0.08612          7.16136+-0.04874       
   box2d                                    x2      12.33748+-0.18167         12.29050+-0.16227       
   zlib                                     x2     382.59528+-18.67880   ?   391.42424+-15.02485      ? might be 1.0231x slower
   typescript                               x2     844.90592+-7.18286        837.30575+-8.59770       

   &lt;geometric&gt;                                       6.74248+-0.04577          6.73716+-0.03208         might be 1.0008x faster

                                                        TipOfTree                 MoreFTLAI                                     
Kraken:
   ai-astar                                          271.647+-3.214            271.308+-2.494         
   audio-beat-detection                              107.367+-0.844            107.258+-0.547         
   audio-dft                                         151.540+-5.090            151.117+-3.870         
   audio-fft                                          85.544+-4.676             80.863+-1.802           might be 1.0579x faster
   audio-oscillator                                  208.194+-3.894      ?     210.586+-3.945         ? might be 1.0115x slower
   imaging-darkroom                                  104.178+-1.281      !     107.158+-0.736         ! definitely 1.0286x slower
   imaging-desaturate                                 63.246+-1.675      ?      65.293+-1.886         ? might be 1.0324x slower
   imaging-gaussian-blur                             125.636+-33.479           111.453+-1.102           might be 1.1273x faster
   json-parse-financial                               48.377+-2.673             46.781+-2.067           might be 1.0341x faster
   json-stringify-tinderbox                           56.944+-1.800             56.677+-1.399         
   stanford-crypto-aes                                58.800+-0.756      ?      59.095+-0.514         ?
   stanford-crypto-ccm                                60.199+-1.862      ?      60.907+-1.855         ? might be 1.0118x slower
   stanford-crypto-pbkdf2                            138.244+-2.469      ?     138.421+-1.550         ?
   stanford-crypto-sha256-iterative                   52.972+-1.834             52.677+-1.552         

   &lt;arithmetic&gt;                                      109.492+-2.594            108.543+-0.380           might be 1.0087x faster

                                                        TipOfTree                 MoreFTLAI                                     
JSRegress:
   abs-boolean                                        2.6532+-0.0689     ?      2.6987+-0.1037        ? might be 1.0172x slower
   adapt-to-double-divide                            16.7131+-0.3753     ?     17.1041+-0.6751        ? might be 1.0234x slower
   aliased-arguments-getbyval                         1.2282+-0.0873     ?      1.3534+-0.2456        ? might be 1.1019x slower
   allocate-big-object                                3.0398+-0.2851            3.0078+-0.3075          might be 1.0106x faster
   arguments-named-and-reflective                    13.2784+-1.6006           13.1526+-1.5246        
   arguments-out-of-bounds                           15.6865+-2.7653           14.8362+-0.1749          might be 1.0573x faster
   arguments-strict-mode                             12.0017+-0.8217     ?     12.2829+-0.8253        ? might be 1.0234x slower
   arguments                                         10.4624+-0.2240     ?     11.3345+-1.1943        ? might be 1.0834x slower
   arity-mismatch-inlining                            0.8472+-0.1060            0.8250+-0.0344          might be 1.0269x faster
   array-access-polymorphic-structure                 7.2938+-0.8956            6.9022+-0.2619          might be 1.0567x faster
   array-nonarray-polymorhpic-access                 33.8220+-1.6674     ?     34.3955+-1.5508        ? might be 1.0170x slower
   array-prototype-every                             87.8969+-1.7488     ?     88.7825+-1.2540        ? might be 1.0101x slower
   array-prototype-forEach                           85.3063+-4.0894     ?     85.9800+-2.1328        ?
   array-prototype-map                               93.3947+-1.8865     ?     95.1311+-2.1259        ? might be 1.0186x slower
   array-prototype-some                              86.7135+-2.2354     ?     88.4930+-2.1371        ? might be 1.0205x slower
   array-splice-contiguous                           41.3620+-1.1539     ?     41.9445+-2.3152        ? might be 1.0141x slower
   array-with-double-add                              4.2001+-0.1673     ?      4.3679+-0.3390        ? might be 1.0400x slower
   array-with-double-increment                        3.2287+-0.1231            3.2050+-0.0483        
   array-with-double-mul-add                          5.0745+-0.0813     ?      5.1350+-0.2111        ? might be 1.0119x slower
   array-with-double-sum                              3.2942+-0.1417            3.2325+-0.0370          might be 1.0191x faster
   array-with-int32-add-sub                           6.7590+-0.0817     ?      6.7876+-0.0630        ?
   array-with-int32-or-double-sum                     3.3090+-0.0122     ?      3.3595+-0.1085        ? might be 1.0153x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     34.2374+-1.8286           33.2493+-1.4343          might be 1.0297x faster
   ArrayBuffer-DataView-alloc-long-lived             14.7597+-1.5999     ?     15.0086+-1.8157        ? might be 1.0169x slower
   ArrayBuffer-Int32Array-byteOffset                  3.7353+-0.0767     ?      4.0595+-0.4023        ? might be 1.0868x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     32.3698+-1.5176           32.0557+-0.5443        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.7548+-1.5900     ?     23.6108+-1.6542        ? might be 1.0376x slower
   ArrayBuffer-Int8Array-alloc-long-lived            13.6327+-1.5348           12.5210+-0.2956          might be 1.0888x faster
   ArrayBuffer-Int8Array-alloc                       11.0868+-1.4606           10.5878+-0.1412          might be 1.0471x faster
   asmjs_bool_bug                                     7.9972+-0.5881            7.7287+-0.1327          might be 1.0347x faster
   assign-custom-setter-polymorphic                   3.7447+-0.6260     ?      3.7835+-0.4957        ? might be 1.0104x slower
   assign-custom-setter                               4.9148+-1.0126     ?      5.1218+-0.7031        ? might be 1.0421x slower
   basic-set                                          9.9056+-2.1102            8.6635+-0.4080          might be 1.1434x faster
   big-int-mul                                        3.9925+-0.0992            3.9812+-0.1007        
   boolean-test                                       3.1130+-0.1915            3.0451+-0.0415          might be 1.0223x faster
   branch-fold                                        3.8822+-0.3455            3.8608+-0.2830        
   branch-on-string-as-boolean                       19.7961+-1.3151           19.7430+-0.8583        
   by-val-generic                                     8.1956+-0.2858     ?      8.6039+-0.6392        ? might be 1.0498x slower
   call-spread-apply                                 29.8975+-1.1445     ?     31.3193+-2.0170        ? might be 1.0476x slower
   call-spread-call                                  26.8125+-2.1837           26.0535+-1.3785          might be 1.0291x faster
   captured-assignments                               0.4429+-0.0301            0.4277+-0.0187          might be 1.0354x faster
   cast-int-to-double                                 5.3067+-0.0655            5.2985+-0.1494        
   cell-argument                                      8.5354+-0.1094     ?      8.6650+-0.2478        ? might be 1.0152x slower
   cfg-simplify                                       3.3682+-0.6105            3.0831+-0.1051          might be 1.0925x faster
   chain-getter-access                                9.9694+-0.1751     ?     10.0901+-0.3222        ? might be 1.0121x slower
   cmpeq-obj-to-obj-other                            12.2104+-1.5596           11.6854+-0.9851          might be 1.0449x faster
   constant-test                                      4.9333+-0.0399     ?      4.9635+-0.0616        ?
   create-lots-of-functions                          12.0253+-0.4241           11.9133+-0.3042        
   DataView-custom-properties                        36.8258+-1.2684     ?     38.1585+-1.5732        ? might be 1.0362x slower
   deconstructing-parameters-overridden-by-function   
                                                      0.4775+-0.0257     ?      0.5287+-0.0718        ? might be 1.1072x slower
   delay-tear-off-arguments-strictmode               14.0673+-0.2366     ?     14.0848+-0.1102        ?
   deltablue-varargs                                203.1466+-2.1432     ?    206.6475+-4.0448        ? might be 1.0172x slower
   destructuring-arguments                           17.9766+-0.6230     ?     18.1674+-0.4335        ? might be 1.0106x slower
   destructuring-swap                                 5.0802+-0.0580     ?      5.2391+-0.3874        ? might be 1.0313x slower
   direct-arguments-getbyval                          1.2691+-0.1583     ?      1.3191+-0.1050        ? might be 1.0394x slower
   div-boolean-double                                 5.3076+-0.2356            5.2609+-0.2113        
   div-boolean                                        7.9670+-0.3144            7.8293+-0.0800          might be 1.0176x faster
   double-get-by-val-out-of-bounds                    4.5647+-0.1805            4.5240+-0.0752        
   double-pollution-getbyval                          8.9323+-0.2052     ?      8.9875+-0.1841        ?
   double-pollution-putbyoffset                       4.3159+-0.1327            4.2780+-0.0673        
   double-to-int32-typed-array-no-inline              2.2410+-0.0405     ?      2.2885+-0.0844        ? might be 1.0212x slower
   double-to-int32-typed-array                        1.9651+-0.0329            1.9489+-0.0387        
   double-to-uint32-typed-array-no-inline             2.3393+-0.0659     ?      2.3468+-0.1319        ?
   double-to-uint32-typed-array                       2.0889+-0.1280            2.0181+-0.0152          might be 1.0351x faster
   elidable-new-object-dag                           45.5297+-1.2567           43.6402+-1.6210          might be 1.0433x faster
   elidable-new-object-roflcopter                    46.8773+-2.1695     ?     48.5299+-1.4850        ? might be 1.0353x slower
   elidable-new-object-then-call                     39.1847+-1.1683     ?     39.6617+-2.0794        ? might be 1.0122x slower
   elidable-new-object-tree                          45.3700+-1.7544     ?     46.3948+-2.5814        ? might be 1.0226x slower
   empty-string-plus-int                              5.5806+-0.4786            5.5476+-0.4084        
   emscripten-cube2hash                              39.5888+-1.4544     ?     40.0063+-0.9569        ? might be 1.0105x slower
   exit-length-on-plain-object                       14.6018+-1.2862     ?     14.8219+-1.5466        ? might be 1.0151x slower
   external-arguments-getbyval                        1.2605+-0.0522            1.2399+-0.0845          might be 1.0166x faster
   external-arguments-putbyval                        2.3460+-0.0804     ?      2.3919+-0.2728        ? might be 1.0196x slower
   fixed-typed-array-storage-var-index                1.2083+-0.0355     ?      1.2411+-0.0332        ? might be 1.0271x slower
   fixed-typed-array-storage                          0.8890+-0.0510     ?      0.9294+-0.1305        ? might be 1.0455x slower
   Float32Array-matrix-mult                           4.7928+-0.4407     ?      5.0573+-1.0362        ? might be 1.0552x slower
   Float32Array-to-Float64Array-set                  52.7313+-1.7864     !     56.9566+-1.8235        ! definitely 1.0801x slower
   Float64Array-alloc-long-lived                     73.8189+-1.8595     ?     73.9422+-1.1068        ?
   Float64Array-to-Int16Array-set                    71.9711+-1.9466           68.6934+-1.9773          might be 1.0477x faster
   fold-double-to-int                                13.5618+-0.2239           13.4395+-0.2347        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.2015+-1.7005           10.6383+-1.4990          might be 1.0529x faster
   fold-get-by-id-to-multi-get-by-offset             11.0042+-0.8447           10.2380+-1.0180          might be 1.0748x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.7298+-0.9990            9.1572+-0.9675          might be 1.0625x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.0404+-1.0069            8.7969+-0.6120          might be 1.0277x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.3693+-1.3091            9.2808+-0.9562        
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.9202+-0.7987            5.2061+-0.5908          might be 1.1372x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.8733+-0.1383            9.6226+-0.4190          might be 1.0261x faster
   fold-put-by-id-to-multi-put-by-offset              9.7646+-1.3738     ?     10.4747+-1.6072        ? might be 1.0727x slower
   fold-put-structure                                 5.0758+-0.1885            4.4408+-0.7235          might be 1.1430x faster
   for-of-iterate-array-entries                       4.8081+-0.4275            4.6853+-0.1211          might be 1.0262x faster
   for-of-iterate-array-keys                          3.7945+-0.1781     ?      3.9170+-0.2184        ? might be 1.0323x slower
   for-of-iterate-array-values                        3.8639+-0.3262            3.8258+-0.1452        
   fround                                            21.6990+-0.7096           20.7475+-0.4076          might be 1.0459x faster
   ftl-library-inlining-dataview                     63.9498+-0.6669     ?     64.7902+-0.4674        ? might be 1.0131x slower
   ftl-library-inlining                              74.6216+-19.0414          73.5344+-18.7880         might be 1.0148x faster
   function-dot-apply                                 2.2258+-0.0259     ?      2.2297+-0.0197        ?
   function-test                                      3.4830+-0.1900            3.3632+-0.0942          might be 1.0356x faster
   function-with-eval                               108.8488+-4.1650          104.5817+-5.4995          might be 1.0408x faster
   gcse-poly-get-less-obvious                        18.8887+-0.8727           18.5819+-0.4669          might be 1.0165x faster
   gcse-poly-get                                     19.8960+-0.9794     ?     21.9863+-1.9819        ? might be 1.1051x slower
   gcse                                               4.3861+-0.1766     ?      4.3932+-0.1142        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.8168+-0.3469     ?      2.8516+-0.3516        ? might be 1.0124x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.2942+-0.4022            6.0121+-0.0404          might be 1.0469x faster
   get-by-id-chain-from-try-block                     7.9955+-1.5593            7.9932+-1.2972        
   get-by-id-check-structure-elimination              5.1030+-0.0724     ?      5.2260+-0.1808        ? might be 1.0241x slower
   get-by-id-proto-or-self                           17.2528+-1.1109           16.8545+-0.4613          might be 1.0236x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.1087+-0.0269     ?      3.1535+-0.0365        ? might be 1.0144x slower
   get-by-id-self-or-proto                           17.6817+-0.7039     ?     17.7655+-0.6270        ?
   get-by-val-out-of-bounds                           4.4183+-0.0707            4.3658+-0.0565          might be 1.0120x faster
   get_callee_monomorphic                             2.9043+-0.1635            2.8545+-0.0690          might be 1.0174x faster
   get_callee_polymorphic                             3.7586+-0.0358     ?      3.7621+-0.0394        ?
   getter-no-activation                               5.0117+-0.2721     ?      5.1100+-0.2918        ? might be 1.0196x slower
   getter-richards                                  123.0515+-5.3821     ?    128.3137+-4.5004        ? might be 1.0428x slower
   getter                                             5.6591+-0.5833     ?      5.7242+-0.6452        ? might be 1.0115x slower
   global-var-const-infer-fire-from-opt               1.0064+-0.0989            0.9644+-0.0854          might be 1.0435x faster
   global-var-const-infer                             0.8326+-0.1029            0.7823+-0.1284          might be 1.0643x faster
   HashMap-put-get-iterate-keys                      26.3791+-0.9242           25.6685+-0.6340          might be 1.0277x faster
   HashMap-put-get-iterate                           25.7738+-0.4047     ?     25.9108+-0.6623        ?
   HashMap-string-put-get-iterate                    28.0664+-0.9138           27.1344+-1.0075          might be 1.0343x faster
   hoist-make-rope                                   12.5505+-1.0195     ?     13.2768+-2.1419        ? might be 1.0579x slower
   hoist-poly-check-structure-effectful-loop   
                                                      5.0693+-0.1459     ?      5.0995+-0.1770        ?
   hoist-poly-check-structure                         3.6497+-0.0414     ?      3.9323+-0.3503        ? might be 1.0775x slower
   imul-double-only                                   8.5460+-0.1508     ?      8.6101+-0.4420        ?
   imul-int-only                                      9.6672+-0.1689     ?      9.7228+-0.1018        ?
   imul-mixed                                         8.5146+-0.1935     ?      8.6381+-0.6846        ? might be 1.0145x slower
   in-four-cases                                     20.7144+-0.3607     ?     20.8560+-0.4567        ?
   in-one-case-false                                 10.8997+-0.8775           10.1967+-0.6982          might be 1.0689x faster
   in-one-case-true                                  10.6481+-0.7278           10.3528+-0.6383          might be 1.0285x faster
   in-two-cases                                      10.2253+-0.3437     ?     10.3432+-0.3304        ? might be 1.0115x slower
   indexed-properties-in-objects                      3.0571+-0.3568     ?      3.1997+-0.2148        ? might be 1.0467x slower
   infer-closure-const-then-mov-no-inline             3.8791+-0.0212     ?      3.9184+-0.0937        ? might be 1.0101x slower
   infer-closure-const-then-mov                      20.5756+-0.9122           20.0238+-0.5647          might be 1.0276x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     15.0308+-1.8524           14.7926+-1.3776          might be 1.0161x faster
   infer-closure-const-then-put-to-scope             22.4899+-1.1749           22.0817+-0.7238          might be 1.0185x faster
   infer-closure-const-then-reenter-no-inline   
                                                     63.9440+-2.6479     ?     64.0485+-2.1722        ?
   infer-closure-const-then-reenter                  22.2135+-0.6729     ?     23.1979+-1.4044        ? might be 1.0443x slower
   infer-constant-global-property                    30.1193+-0.3231     ?     30.4753+-1.2435        ? might be 1.0118x slower
   infer-constant-property                            2.6998+-0.0438            2.6494+-0.0301          might be 1.0190x faster
   infer-one-time-closure-ten-vars                   13.0231+-1.4696           12.9566+-0.9042        
   infer-one-time-closure-two-vars                   12.2441+-0.7158           12.1388+-0.4649        
   infer-one-time-closure                            12.5299+-0.9306           11.9799+-0.2503          might be 1.0459x faster
   infer-one-time-deep-closure                       21.4848+-1.4773           20.9032+-1.0427          might be 1.0278x faster
   inline-arguments-access                            4.8128+-0.3659     ?      5.0516+-1.0346        ? might be 1.0496x slower
   inline-arguments-aliased-access                    4.6728+-0.0427     ?      4.7805+-0.2184        ? might be 1.0230x slower
   inline-arguments-local-escape                      4.8607+-0.1825            4.8079+-0.2388          might be 1.0110x faster
   inline-get-scoped-var                              4.9087+-0.3042     ?      4.9430+-0.1919        ?
   inlined-put-by-id-transition                      11.4708+-0.6025     ?     11.7785+-0.7535        ? might be 1.0268x slower
   int-or-other-abs-then-get-by-val                   4.7580+-0.0778     ?      4.7756+-0.0762        ?
   int-or-other-abs-zero-then-get-by-val             17.4107+-0.7245     ?     18.0984+-1.1577        ? might be 1.0395x slower
   int-or-other-add-then-get-by-val                   4.5314+-0.3218            4.4050+-0.1169          might be 1.0287x faster
   int-or-other-add                                   5.3726+-0.0954            5.3612+-0.0820        
   int-or-other-div-then-get-by-val                   4.3531+-0.1979     ?      4.3549+-0.2391        ?
   int-or-other-max-then-get-by-val                   4.3713+-0.0471     ?      4.4401+-0.1970        ? might be 1.0157x slower
   int-or-other-min-then-get-by-val                   4.3976+-0.1284     ?      4.4150+-0.1690        ?
   int-or-other-mod-then-get-by-val                   3.9075+-0.0394     ?      4.0185+-0.0987        ? might be 1.0284x slower
   int-or-other-mul-then-get-by-val                   3.9755+-0.0567            3.9365+-0.0383        
   int-or-other-neg-then-get-by-val                   4.5016+-0.1303     ?      4.6301+-0.2647        ? might be 1.0285x slower
   int-or-other-neg-zero-then-get-by-val             17.3936+-0.3343     ?     17.8546+-1.0647        ? might be 1.0265x slower
   int-or-other-sub-then-get-by-val                   4.6438+-0.2263            4.6024+-0.1237        
   int-or-other-sub                                   3.7318+-0.3889            3.6234+-0.0988          might be 1.0299x faster
   int-overflow-local                                 4.5332+-0.1491            4.5194+-0.0409        
   Int16Array-alloc-long-lived                       54.7818+-1.4699           52.5938+-0.9616          might be 1.0416x faster
   Int16Array-bubble-sort-with-byteLength            21.4480+-1.1291     ?     21.9213+-1.9838        ? might be 1.0221x slower
   Int16Array-bubble-sort                            20.0559+-0.9520           19.2876+-0.2197          might be 1.0398x faster
   Int16Array-load-int-mul                            1.6394+-0.2704            1.5202+-0.0689          might be 1.0784x faster
   Int16Array-to-Int32Array-set                      57.3896+-1.8526           55.1628+-1.5924          might be 1.0404x faster
   Int32Array-alloc-large                            24.0940+-0.9619     ?     24.7134+-1.3034        ? might be 1.0257x slower
   Int32Array-alloc-long-lived                       58.5367+-1.5746           58.2525+-1.9303        
   Int32Array-alloc                                   3.7729+-0.1396            3.6318+-0.1048          might be 1.0388x faster
   Int32Array-Int8Array-view-alloc                    7.2783+-1.1939            7.0385+-0.9800          might be 1.0341x faster
   int52-spill                                        6.5998+-0.3915            6.2939+-0.0856          might be 1.0486x faster
   Int8Array-alloc-long-lived                        48.4574+-1.5498     ?     49.2828+-2.6406        ? might be 1.0170x slower
   Int8Array-load-with-byteLength                     3.4739+-0.1698            3.3359+-0.0535          might be 1.0414x faster
   Int8Array-load                                     3.5028+-0.4296            3.4302+-0.2363          might be 1.0212x faster
   integer-divide                                    11.3412+-0.2934     ?     11.4711+-0.5799        ? might be 1.0114x slower
   integer-modulo                                     2.0741+-0.0916     ?      2.1171+-0.2116        ? might be 1.0208x slower
   is-boolean-fold-tricky                             4.6763+-0.4990            4.4462+-0.0844          might be 1.0517x faster
   is-boolean-fold                                    3.0250+-0.3520            2.9628+-0.4057          might be 1.0210x faster
   is-function-fold-tricky-internal-function   
                                                     10.3375+-0.2123     ?     10.4428+-0.1795        ? might be 1.0102x slower
   is-function-fold-tricky                            4.5476+-0.0704            4.5240+-0.0584        
   is-function-fold                                   2.8639+-0.0254     ?      2.9715+-0.3554        ? might be 1.0376x slower
   is-number-fold-tricky                              4.4870+-0.1417     ?      4.5806+-0.2285        ? might be 1.0209x slower
   is-number-fold                                     2.8710+-0.0754            2.8105+-0.0742          might be 1.0215x faster
   is-object-or-null-fold-functions                   2.9032+-0.0563     ?      2.9169+-0.1284        ?
   is-object-or-null-fold-less-tricky                 4.6347+-0.1763            4.4851+-0.0447          might be 1.0333x faster
   is-object-or-null-fold-tricky                     10.0465+-0.0917     ?     10.2386+-0.2817        ? might be 1.0191x slower
   is-object-or-null-fold                             2.8868+-0.0381     ?      2.9392+-0.1446        ? might be 1.0181x slower
   is-object-or-null-trickier-function                4.7151+-0.1497            4.6677+-0.1315          might be 1.0102x faster
   is-object-or-null-trickier-internal-function   
                                                     12.1893+-0.2236     ?     12.3783+-0.4312        ? might be 1.0155x slower
   is-object-or-null-tricky-function                  4.6231+-0.1558     ?      4.8875+-0.5706        ? might be 1.0572x slower
   is-object-or-null-tricky-internal-function   
                                                     10.5841+-0.0678     ?     10.6619+-0.1091        ?
   is-string-fold-tricky                              4.5503+-0.1466            4.4290+-0.1156          might be 1.0274x faster
   is-string-fold                                     2.8739+-0.0413            2.8394+-0.0800          might be 1.0121x faster
   is-undefined-fold-tricky                           3.7606+-0.1450            3.6868+-0.0326          might be 1.0200x faster
   is-undefined-fold                                  3.0095+-0.3205            2.9071+-0.1027          might be 1.0352x faster
   large-int-captured                                 4.6477+-0.0326     ?      4.6630+-0.1054        ?
   large-int-neg                                     16.3885+-0.4055     ?     16.6847+-0.3877        ? might be 1.0181x slower
   large-int                                         15.6728+-1.6671           14.9854+-0.3039          might be 1.0459x faster
   logical-not                                        4.5672+-0.0788            4.5386+-0.0258        
   lots-of-fields                                    13.5217+-0.4700           12.9992+-0.4633          might be 1.0402x faster
   make-indexed-storage                               3.3004+-0.2210            3.0701+-0.1115          might be 1.0750x faster
   make-rope-cse                                      5.2137+-0.5499            5.0517+-0.3967          might be 1.0321x faster
   marsaglia-larger-ints                             36.7232+-0.9648           36.5121+-0.9906        
   marsaglia-osr-entry                               24.0974+-1.4971           23.2525+-0.5637          might be 1.0363x faster
   max-boolean                                        2.5937+-0.1261     ^      2.4340+-0.0235        ^ definitely 1.0656x faster
   method-on-number                                  16.9862+-0.3125     ?     17.1289+-0.2726        ?
   min-boolean                                        2.4858+-0.0291            2.4730+-0.0925        
   minus-boolean-double                               3.1744+-0.0312     ?      3.2139+-0.0582        ? might be 1.0124x slower
   minus-boolean                                      2.4151+-0.1524            2.3032+-0.0790          might be 1.0486x faster
   misc-strict-eq                                    39.3632+-3.4624           38.1958+-1.7958          might be 1.0306x faster
   mod-boolean-double                                11.2436+-0.9545           10.8977+-0.0821          might be 1.0317x faster
   mod-boolean                                        7.9123+-0.2730            7.8789+-0.0909        
   mul-boolean-double                                 3.7050+-0.0570     ?      3.8338+-0.3269        ? might be 1.0347x slower
   mul-boolean                                        2.9972+-0.3376     ?      3.0199+-0.3587        ?
   neg-boolean                                        3.3076+-0.2391            3.1879+-0.0674          might be 1.0375x faster
   negative-zero-divide                               0.3642+-0.0380            0.3478+-0.0111          might be 1.0470x faster
   negative-zero-modulo                               0.3477+-0.0183     ?      0.3810+-0.0865        ? might be 1.0957x slower
   negative-zero-negate                               0.3247+-0.0140     ?      0.3439+-0.0495        ? might be 1.0592x slower
   nested-function-parsing                           39.7375+-1.7278           39.1279+-1.4293          might be 1.0156x faster
   new-array-buffer-dead                            114.1371+-1.6658          113.6510+-2.1253        
   new-array-buffer-push                              7.3466+-0.7987            7.1635+-0.6263          might be 1.0256x faster
   new-array-dead                                    19.3146+-1.1445           18.9581+-0.3176          might be 1.0188x faster
   new-array-push                                     4.0214+-0.2084     ?      4.0673+-0.4275        ? might be 1.0114x slower
   no-inline-constructor                            131.9454+-2.3379     ^    121.8396+-3.0501        ^ definitely 1.0829x faster
   number-test                                        3.0496+-0.0563     ?      3.1987+-0.2147        ? might be 1.0489x slower
   object-closure-call                                5.7141+-0.1402            5.6647+-0.1224        
   object-test                                        3.2777+-0.4040            3.1638+-0.1147          might be 1.0360x faster
   obvious-sink-pathology-taken                     138.3976+-1.0471     ?    139.6801+-2.5914        ?
   obvious-sink-pathology                           131.3220+-1.0577          128.4644+-1.9336          might be 1.0222x faster
   obviously-elidable-new-object                     35.5605+-2.5942     ?     35.8939+-1.7457        ?
   plus-boolean-arith                                 2.5621+-0.1092     ?      2.5743+-0.2389        ?
   plus-boolean-double                                3.2921+-0.1598            3.2590+-0.1354          might be 1.0102x faster
   plus-boolean                                       2.5674+-0.3062            2.4098+-0.1072          might be 1.0654x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.3734+-0.1258            3.3151+-0.0889          might be 1.0176x faster
   poly-chain-access-different-prototypes             2.6056+-0.0937     ?      2.6414+-0.2040        ? might be 1.0138x slower
   poly-chain-access-simpler                          3.2743+-0.0532     ?      3.3210+-0.1226        ? might be 1.0143x slower
   poly-chain-access                                  2.5720+-0.0550            2.5223+-0.0212          might be 1.0197x faster
   poly-stricteq                                     62.8061+-1.7632     ?     63.6077+-1.6829        ? might be 1.0128x slower
   polymorphic-array-call                             1.2761+-0.0476     ?      1.2841+-0.0693        ?
   polymorphic-get-by-id                              3.2346+-0.2985            3.1626+-0.0852          might be 1.0228x faster
   polymorphic-put-by-id                             28.9013+-1.3473     ?     31.1026+-1.9661        ? might be 1.0762x slower
   polymorphic-structure                             14.8958+-0.2911     ?     14.9788+-0.3974        ?
   polyvariant-monomorphic-get-by-id                  8.5712+-0.1896     ?      8.7802+-0.7835        ? might be 1.0244x slower
   proto-getter-access                               10.1825+-0.1758           10.0915+-0.2608        
   put-by-id-replace-and-transition                   9.2014+-0.2343            9.1986+-0.2949        
   put-by-id-slightly-polymorphic                     2.8834+-0.3480            2.8191+-0.0442          might be 1.0228x faster
   put-by-id                                         12.7938+-0.4963     ?     13.1392+-0.6028        ? might be 1.0270x slower
   put-by-val-direct                                  0.4184+-0.0251     ?      0.4220+-0.0249        ?
   put-by-val-large-index-blank-indexing-type   
                                                      5.8663+-0.1294     ?      6.1504+-0.7624        ? might be 1.0484x slower
   put-by-val-machine-int                             2.7823+-0.0660     ?      2.8717+-0.2269        ? might be 1.0321x slower
   rare-osr-exit-on-local                            14.8725+-0.1546     ?     15.5987+-0.7651        ? might be 1.0488x slower
   register-pressure-from-osr                        21.7651+-0.3849           21.4785+-0.2368          might be 1.0133x faster
   setter                                             6.4977+-0.7657            5.3954+-0.4041          might be 1.2043x faster
   simple-activation-demo                            25.4752+-1.1068           25.2053+-0.8241          might be 1.0107x faster
   simple-getter-access                              12.8335+-0.2326     ?     12.9610+-0.2640        ?
   simple-poly-call-nested                            8.3874+-0.2459     ?      8.4271+-0.2374        ?
   simple-poly-call                                   1.2552+-0.0209     ?      1.2650+-0.0210        ?
   sin-boolean                                       24.0574+-0.9205           22.2940+-1.7308          might be 1.0791x faster
   singleton-scope                                   67.5834+-0.7341     ?     70.7494+-3.3326        ? might be 1.0468x slower
   sink-function                                     12.2899+-0.3006     ?     12.5646+-0.5588        ? might be 1.0224x slower
   sinkable-new-object-dag                           70.8078+-1.6545           70.4924+-2.6450        
   sinkable-new-object-taken                         54.0090+-2.8518           51.2965+-3.0333          might be 1.0529x faster
   sinkable-new-object                               39.0991+-1.2801           38.2803+-0.5756          might be 1.0214x faster
   slow-array-profile-convergence                     3.0665+-0.6344            2.9869+-0.3578          might be 1.0267x faster
   slow-convergence                                   2.8670+-0.3427            2.7189+-0.0899          might be 1.0545x faster
   sorting-benchmark                                 20.8479+-0.2511     ?     21.3106+-1.5328        ? might be 1.0222x slower
   sparse-conditional                                 1.1615+-0.0643            1.1093+-0.0166          might be 1.0470x faster
   splice-to-remove                                  17.5863+-1.6863           17.0345+-1.2749          might be 1.0324x faster
   string-char-code-at                               17.7648+-1.2207           17.3382+-1.1202          might be 1.0246x faster
   string-concat-object                               2.7061+-0.3217            2.6805+-0.2298        
   string-concat-pair-object                          2.5116+-0.0520     ?      2.7131+-0.5518        ? might be 1.0802x slower
   string-concat-pair-simple                         11.9251+-0.3112           11.5071+-0.2640          might be 1.0363x faster
   string-concat-simple                              12.1980+-0.5210     ?     13.2129+-3.3587        ? might be 1.0832x slower
   string-cons-repeat                                 8.3515+-0.6238     ?      8.9486+-1.2248        ? might be 1.0715x slower
   string-cons-tower                                  8.4317+-0.6996     ?      8.8396+-1.1004        ? might be 1.0484x slower
   string-equality                                   17.5135+-0.2340     ?     17.6004+-0.4901        ?
   string-get-by-val-big-char                         7.2497+-0.3055            7.1458+-0.1341          might be 1.0145x faster
   string-get-by-val-out-of-bounds-insane             3.8451+-0.6238     ?      3.9861+-0.4729        ? might be 1.0367x slower
   string-get-by-val-out-of-bounds                    5.2817+-0.1669            5.2092+-0.0594          might be 1.0139x faster
   string-get-by-val                                  3.3776+-0.1265     ?      3.3960+-0.0493        ?
   string-hash                                        2.1488+-0.1568            2.0707+-0.0455          might be 1.0377x faster
   string-long-ident-equality                        15.2775+-0.2600           15.1820+-0.2556        
   string-out-of-bounds                              15.1056+-0.3304           14.8628+-0.2556          might be 1.0163x faster
   string-repeat-arith                               35.9455+-2.6814           35.0235+-1.9042          might be 1.0263x faster
   string-sub                                        68.9455+-2.7560           68.7264+-3.2435        
   string-test                                        3.0938+-0.1675     ?      3.1095+-0.3403        ?
   string-var-equality                               33.7300+-1.9468           33.0508+-1.8982          might be 1.0206x faster
   structure-hoist-over-transitions                   2.6552+-0.0709     ?      2.7123+-0.2471        ? might be 1.0215x slower
   substring-concat-weird                            40.9310+-1.6034           40.8719+-1.6044        
   substring-concat                                  40.2504+-0.4433     ?     40.9985+-0.8247        ? might be 1.0186x slower
   substring                                         47.3151+-2.9234           46.1821+-2.0919          might be 1.0245x faster
   switch-char-constant                               2.7330+-0.0578     ?      2.7953+-0.2474        ? might be 1.0228x slower
   switch-char                                        6.7926+-1.1034            6.5631+-1.0482          might be 1.0350x faster
   switch-constant                                    8.5080+-0.2131     ?      8.6403+-0.4041        ? might be 1.0156x slower
   switch-string-basic-big-var                       18.0417+-0.3967     ?     18.4135+-0.7091        ? might be 1.0206x slower
   switch-string-basic-big                           14.6105+-0.2971     ?     15.3445+-0.8014        ? might be 1.0502x slower
   switch-string-basic-var                           15.0816+-0.9919     ?     16.8730+-4.4301        ? might be 1.1188x slower
   switch-string-basic                               13.7635+-0.3713           13.5308+-0.2617          might be 1.0172x faster
   switch-string-big-length-tower-var                20.5540+-1.2572     ?     21.2533+-1.2571        ? might be 1.0340x slower
   switch-string-length-tower-var                    15.3052+-0.3233     ?     15.3903+-0.1766        ?
   switch-string-length-tower                        13.1029+-0.4819           12.7760+-0.1992          might be 1.0256x faster
   switch-string-short                               12.8110+-0.2831     ?     12.8703+-0.2804        ?
   switch                                            12.8761+-0.2912           12.5076+-0.0974          might be 1.0295x faster
   tear-off-arguments-simple                          3.5764+-0.2011            3.4305+-0.0747          might be 1.0425x faster
   tear-off-arguments                                 4.7480+-0.1670            4.6964+-0.0532          might be 1.0110x faster
   temporal-structure                                12.3202+-0.2157           12.3029+-0.1860        
   to-int32-boolean                                  13.9870+-0.7985           13.7907+-0.4550          might be 1.0142x faster
   try-catch-get-by-val-cloned-arguments             15.0350+-1.4005           14.4935+-0.4362          might be 1.0374x faster
   try-catch-get-by-val-direct-arguments              6.4294+-0.0372     ?      6.8773+-0.5640        ? might be 1.0697x slower
   try-catch-get-by-val-scoped-arguments              7.9189+-0.3035     ?      8.2972+-0.9171        ? might be 1.0478x slower
   typed-array-get-set-by-val-profiling              33.3748+-1.9791           33.1197+-1.5811        
   undefined-property-access                        358.4873+-3.9328     ?    359.8091+-4.7467        ?
   undefined-test                                     3.1068+-0.1519     ?      3.1842+-0.3403        ? might be 1.0249x slower
   unprofiled-licm                                   25.0980+-3.2555           23.7136+-1.4741          might be 1.0584x faster
   varargs-call                                      16.1762+-0.5304     ?     16.6330+-1.3758        ? might be 1.0282x slower
   varargs-construct-inline                          23.8445+-1.2933           23.5767+-1.0594          might be 1.0114x faster
   varargs-construct                                 32.4129+-0.9348     ?     33.1416+-1.4897        ? might be 1.0225x slower
   varargs-inline                                     9.4080+-0.0803     ?      9.4551+-0.1779        ?
   varargs-strict-mode                               10.4024+-0.3032     ?     10.6425+-0.2857        ? might be 1.0231x slower
   varargs                                           10.2199+-0.0963     ?     10.3233+-0.1939        ? might be 1.0101x slower
   weird-inlining-const-prop                          2.3933+-0.1542     ?      2.4170+-0.2581        ?

   &lt;geometric&gt;                                        8.6240+-0.0259            8.6038+-0.0118          might be 1.0023x faster

                                                        TipOfTree                 MoreFTLAI                                     
AsmBench:
   bigfib.cpp                                       495.0035+-1.7222     ?    498.0674+-5.0501        ?
   cray.c                                           425.5793+-6.5097     ?    427.4196+-5.4509        ?
   dry.c                                            481.9525+-8.6790     ?    482.9209+-8.2841        ?
   FloatMM.c                                        730.4862+-9.4699          727.9580+-7.0671        
   gcc-loops.cpp                                   4304.6523+-38.5713        4287.7308+-14.7932       
   n-body.c                                         982.9005+-6.8341          981.7188+-6.4864        
   Quicksort.c                                      419.8948+-5.1199     ?    422.5041+-5.4117        ?
   stepanov_container.cpp                          3602.2148+-10.6756    ?   3618.3750+-19.5309       ?
   Towers.c                                         259.5187+-0.7723     ?    261.1121+-3.2883        ?

   &lt;geometric&gt;                                      792.3764+-3.0038     ?    794.1959+-2.2211        ? might be 1.0023x slower

                                                        TipOfTree                 MoreFTLAI                                     
CompressionBench:
   huffman                                          367.3377+-5.7203          366.4925+-2.4149        
   arithmetic-simple                                401.2019+-7.9292     ?    401.4430+-10.5321       ?
   arithmetic-precise                               302.9927+-6.3914          301.3920+-11.0029       
   arithmetic-complex-precise                       298.6305+-2.9615          296.4503+-3.3609        
   arithmetic-precise-order-0                       425.9280+-8.4396     ?    434.9696+-15.0576       ? might be 1.0212x slower
   arithmetic-precise-order-1                       329.6323+-3.7135     ?    329.8437+-6.4023        ?
   arithmetic-precise-order-2                       361.3228+-7.5016          360.6905+-4.4830        
   arithmetic-simple-order-1                        421.5302+-1.0212     ?    427.8086+-5.7225        ? might be 1.0149x slower
   arithmetic-simple-order-2                        472.8546+-6.3149          469.1770+-5.0197        
   lz-string                                        319.0969+-1.9267     ?    325.3835+-7.2643        ? might be 1.0197x slower

   &lt;geometric&gt;                                      365.8797+-1.5893     ?    367.0270+-2.6640        ? might be 1.0031x slower

                                                        TipOfTree                 MoreFTLAI                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   64.1081+-0.1868           63.9787+-0.2021          might be 1.0020x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1091029</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-01 19:02:33 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/183708</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252170</attachid>
            <date>2015-05-01 14:30:03 -0700</date>
            <delta_ts>2015-05-01 14:56:54 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35792</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzNjkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBA
CisyMDE1LTA1LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCB1c2UgQUkgbW9yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQ0NTAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBUaGlzIG1ha2VzIG91ciB0eXBlIGNoZWNrIGZvbGRpbmcg
ZXZlbiBtb3JlIGNvbXByZWhlbnNpdmUgYnkgZW5zdXJpbmcgdGhhdCBldmVuIGlmIHRoZSBGVEwK
KyAgICAgICAgZGVjaWRlcyB0byBlbWl0IHNvbWUgY2hlY2tzLCBpdCB3aWxsIHN0aWxsIGRvIGFu
b3RoZXIgcXVlcnkgdG8gdGhlIGFic3RyYWN0IGludGVycHJldGVyIHRvCisgICAgICAgIHNlZSBp
ZiB0aGUgY2hlY2sgaXMgbmVjZXNzYXJ5LiBUaGlzIGhlbHBzIHdpdGggY2FzZXMgd2hlcmUgd2Ug
ZGVjaWRlZCBlYXJseSBvbiB0byBzcGVjdWxhdGUKKyAgICAgICAgb25lIHdheSwgYnV0IGxhdGVy
IHByb3ZlZCBhIG1vcmUgc3BlY2lmaWMgdHlwZSBvZiB0aGUgdmFsdWUgaW4gcXVlc3Rpb24sIGFu
ZCB0aGUgY29uc3RhbnQKKyAgICAgICAgZm9sZGVyIGRpZG4ndCBjYXRjaCBpdC4KKyAgICAgICAg
CisgICAgICAgIFRoaXMgYWxzbyBtYWtlcyBpdCBtb3JlIG5hdHVyYWwgdG8gcXVlcnkgdGhlIGFi
c3RyYWN0IGludGVycHJldGVyLiBGb3IgZXhhbXBsZSwgaWYgeW91IGp1c3QKKyAgICAgICAgd2Fu
dCB0aGUgcHJvdmVuIHR5cGUsIHlvdSBjYW4gbm93IHNheSBwcm92ZW5UeXBlKG5vZGUpIG9yIHBy
b3ZlblR5cGUoZWRnZSkuCisKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKToKKyAgICAgICAgKiBkZmcv
REZHQXJyYXlNb2RlLmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJvb2xlYW5Ub051bWJlcik6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVUb1RoaXMpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVmFsdWVBZGQpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhBZGRPclN1Yik6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aFBvdyk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRCeUlkKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNoZWNrQXJyYXkpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVG9TdHJpbmdPckNhbGxTdHJpbmdDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVUb1ByaW1pdGl2
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVTdHJpbmdDaGFy
QXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU3RyaW5nQ2hh
ckNvZGVBdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21w
YXJlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
U3dpdGNoKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUlzQm9v
bGVhbik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVJc051bWJl
cik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVJc1N0cmluZyk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVJc09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVJbnN0YW5jZU9mKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bnVtYmVyT3JOb3RDZWxsVG9JbnQzMik6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJhc2VJbmRleCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09iamVj
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnR5cGVkQXJyYXlMZW5ndGgp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpib29saWZ5KToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6ZXF1YWxOdWxsT3JVbmRlZmluZWQpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dJbnQzMik6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06Omxvd0ludDUyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6bG93Q2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxv
d0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dEb3VibGUp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc0NlbGxPck1pc2MpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc05vdENlbGxPck1pc2MpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc051bWJlcik6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmlzTm90TnVtYmVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6aXNOb3RDZWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6aXNDZWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6aXNOb3RNaXNj
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6aXNNaXNjKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6aXNOb3RCb29sZWFuKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6aXNCb29sZWFuKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6aXNOb3RPdGhlcik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmlzT3RoZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc1Byb3Zl
blZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6aXNPYmplY3QpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjppc05vdE9iamVjdCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmlzTm90U3RyaW5nKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6aXNTdHJpbmcpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjppc0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6aXNOb3RGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZU5vdFN0cmluZ1Zhcik6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmFic3RyYWN0VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpwcm92ZW5UeXBlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6cHJvdmVuVmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjphYnN0cmFjdFN0cnVjdHVyZSk6CisKIDIwMTUtMDQtMzAgIEpvbiBEYXZpcyAgPGpvbmRAYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNvbnNvbGUgc2hvdWxkIHNob3cgYW4g
aWNvbiBmb3IgY29uc29sZS5pbmZvKCkgbWVzc2FnZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE4MzY1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI4
LDcgKzMyOCw3IEBAIFN0cnVjdHVyZSogQXJyYXlNb2RlOjpvcmlnaW5hbEFycmF5U3RydWMKICAg
ICByZXR1cm4gb3JpZ2luYWxBcnJheVN0cnVjdHVyZShncmFwaCwgbm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKIH0KIAotYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEluZGV4aW5nVHlwZSBzaGFwZSkgY29u
c3QKK2Jvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIHZhbHVlLCBJbmRleGluZ1R5cGUgc2hhcGUpIGNvbnN0
CiB7CiAgICAgc3dpdGNoIChhcnJheUNsYXNzKCkpIHsKICAgICBjYXNlIEFycmF5OjpPcmlnaW5h
bEFycmF5OiB7CkBAIC0zNzUsNyArMzc1LDcgQEAgYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVj
a2VkKEdyYXBoJiBncgogICAgIH0gfQogfQogCi1ib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNr
ZWQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSkgY29uc3QK
K2Jvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGNvbnN0IEFic3RyYWN0VmFsdWUmIHZhbHVlKSBjb25zdAogewogICAgIHN3aXRjaCAodHlwZSgp
KSB7CiAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24gMTgzNjUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjIzLDcgKzIyMyw3
IEBAIHB1YmxpYzoKICAgICAKICAgICBBcnJheU1vZGUgcmVmaW5lKEdyYXBoJiwgTm9kZSosIFNw
ZWN1bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4LCBTcGVjdWxhdGVkVHlwZSB2
YWx1ZSA9IFNwZWNOb25lKSBjb25zdDsKICAgICAKLSAgICBib29sIGFscmVhZHlDaGVja2VkKEdy
YXBoJiwgTm9kZSosIEFic3RyYWN0VmFsdWUmKSBjb25zdDsKKyAgICBib29sIGFscmVhZHlDaGVj
a2VkKEdyYXBoJiwgTm9kZSosIGNvbnN0IEFic3RyYWN0VmFsdWUmKSBjb25zdDsKICAgICAKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKQEAgLTQ2OSw3ICs0NjksNyBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gYXJyYXlNb2RlMSB8IGFycmF5TW9kZTI7CiAgICAg
fQogCi0gICAgYm9vbCBhbHJlYWR5Q2hlY2tlZChHcmFwaCYsIE5vZGUqLCBBYnN0cmFjdFZhbHVl
JiwgSW5kZXhpbmdUeXBlIHNoYXBlKSBjb25zdDsKKyAgICBib29sIGFscmVhZHlDaGVja2VkKEdy
YXBoJiwgTm9kZSosIGNvbnN0IEFic3RyYWN0VmFsdWUmLCBJbmRleGluZ1R5cGUgc2hhcGUpIGNv
bnN0OwogICAgIAogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAx
ODM2NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA2Nyw3ICsxMDY3LDkgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQm9v
bGVhblRvTnVtYmVyIGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgbm90Qm9vbGVhblJlc3VsdCA9IG1fb3V0LmFuY2hvcih2YWx1ZSk7Ci0g
ICAgICAgICAgICBtX291dC5icmFuY2goaXNCb29sZWFuKHZhbHVlKSwgdW5zdXJlKGJvb2xlYW5D
YXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAor
ICAgICAgICAgICAgICAgIGlzQm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxk
MSgpKSksCisgICAgICAgICAgICAgICAgdW5zdXJlKGJvb2xlYW5DYXNlKSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGJvb2xlYW5DYXNlLCBjb250aW51YXRpb24pOwogICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgYm9vbGVhblJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5iaXRP
cigKQEAgLTExNzQsNyArMTE3Niw4IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIHNs
b3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1RoaXMgc2xvdyBjYXNlIikpOwogICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRv
VGhpcyBjb250aW51YXRpb24iKSk7CiAgICAgICAgIAotICAgICAgICBtX291dC5icmFuY2goaXND
ZWxsKHZhbHVlKSwgdXN1YWxseShpc0NlbGxDYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZSht
X25vZGUtPmNoaWxkMSgpKSksIHVzdWFsbHkoaXNDZWxsQ2FzZSksIHJhcmVseShzbG93Q2FzZSkp
OwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhpc0NlbGxDYXNlLCBzbG93Q2FzZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1
bHQgPSBtX291dC5hbmNob3IodmFsdWUpOwpAQCAtMTE5Nyw4ICsxMjAwLDggQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZCgpCiAgICAgewogICAgICAgICBKX0pJVE9wZXJhdGlv
bl9FSkogb3BlcmF0aW9uOwotICAgICAgICBpZiAoIShtX3N0YXRlLmZvck5vZGUobV9ub2RlLT5j
aGlsZDEoKSkubV90eXBlICYgU3BlY0Z1bGxOdW1iZXIpCi0gICAgICAgICAgICAmJiAhKG1fc3Rh
dGUuZm9yTm9kZShtX25vZGUtPmNoaWxkMigpKS5tX3R5cGUgJiBTcGVjRnVsbE51bWJlcikpCisg
ICAgICAgIGlmICghKHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkgJiBTcGVjRnVsbE51bWJl
cikKKyAgICAgICAgICAgICYmICEocHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMigpKSAmIFNwZWNG
dWxsTnVtYmVyKSkKICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkTm90
TnVtYmVyOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25W
YWx1ZUFkZDsKQEAgLTEyNTgsOCArMTI2MSw4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEludDUyUmVwVXNlOiB7Ci0gICAgICAgICAgICBpZiAoIW1f
c3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxkMSgpKS5jb3VsZEJlVHlwZShTcGVjSW50NTIpCi0g
ICAgICAgICAgICAgICAgJiYgIW1fc3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxkMigpKS5jb3Vs
ZEJlVHlwZShTcGVjSW50NTIpKSB7CisgICAgICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUobV9u
b2RlLT5jaGlsZDEoKSkuY291bGRCZVR5cGUoU3BlY0ludDUyKQorICAgICAgICAgICAgICAgICYm
ICFhYnN0cmFjdFZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpLmNvdWxkQmVUeXBlKFNwZWNJbnQ1Mikp
IHsKICAgICAgICAgICAgICAgICBJbnQ1MktpbmQga2luZDsKICAgICAgICAgICAgICAgICBMVmFs
dWUgbGVmdCA9IGxvd1doaWNoZXZlckludDUyKG1fbm9kZS0+Y2hpbGQxKCksIGtpbmQpOwogICAg
ICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCksIGtp
bmQpOwpAQCAtMTcxOSw3ICsxNzIyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIElmIHkg
aXMgTmFOLCB0aGUgcmVzdWx0IGlzIE5hTi4KICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRv
dWJsZUV4cG9uZW50UG93QmxvY2tFbnRyeSwgbmFuRXhjZXB0aW9uRXhwb25lbnRJc0luZmluaXR5
KTsKICAgICAgICAgICAgIExWYWx1ZSBleHBvbmVudElzTmFOOwotICAgICAgICAgICAgaWYgKG1f
c3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxkMigpKS5tX3R5cGUgJiBTcGVjRG91YmxlTmFOKQor
ICAgICAgICAgICAgaWYgKHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDIoKSkgJiBTcGVjRG91Ymxl
TmFOKQogICAgICAgICAgICAgICAgIGV4cG9uZW50SXNOYU4gPSBtX291dC5kb3VibGVOb3RFcXVh
bE9yVW5vcmRlcmVkKGV4cG9uZW50LCBleHBvbmVudCk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgZXhwb25lbnRJc05hTiA9IG1fb3V0LmJvb2xlYW5GYWxzZTsKQEAgLTE3ODUs
NyArMTc4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEludDUyUmVwVXNlOiB7Ci0gICAgICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX25v
ZGUtPmNoaWxkMSgpKS5jb3VsZEJlVHlwZShTcGVjSW50NTIpKSB7CisgICAgICAgICAgICBpZiAo
IWFic3RyYWN0VmFsdWUobV9ub2RlLT5jaGlsZDEoKSkuY291bGRCZVR5cGUoU3BlY0ludDUyKSkg
ewogICAgICAgICAgICAgICAgIEludDUyS2luZCBraW5kOwogICAgICAgICAgICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd1doaWNoZXZlckludDUyKG1fbm9kZS0+Y2hpbGQxKCksIGtpbmQpOwogICAg
ICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5uZWcodmFsdWUpOwpAQCAtMjAwMCw3
ICsyMDAzLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeUlkIHVudHlwZWQgbm90IGNlbGwgY2FzZSIp
KTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiR2V0QnlJZCB1bnR5cGVkIGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSksIHVuc3VyZShjZWxsQ2FzZSks
IHVuc3VyZShub3RDZWxsQ2FzZSkpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAg
ICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVu
c3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBu
b3RDZWxsQ2FzZSk7CiAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjZWxsUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKGdldEJ5SWQodmFsdWUpKTsKQEAgLTIwOTYsNyArMjEwMCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIEVkZ2UgZWRnZSA9IG1fbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIExWYWx1ZSBj
ZWxsID0gbG93Q2VsbChlZGdlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmFycmF5
TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG1fbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKGVk
Z2UpKSkKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9n
cmFwaCwgbV9ub2RlLCBhYnN0cmFjdFZhbHVlKGVkZ2UpKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZSgKQEAgLTI1NTUsNyArMjU1OSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgVHlwZWRQb2ludGVyIGVsZW1lbnRQb2ludGVyID0gbV9vdXQu
YmFzZUluZGV4KAogICAgICAgICAgICAgICAgICAgICBtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSA9PSBBcnJheTo6SW50MzIgPwogICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJ
bnQzMlByb3BlcnRpZXMgOiBtX2hlYXBzLmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywKLSAg
ICAgICAgICAgICAgICAgICAgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCksIG1fc3Rh
dGUuZm9yTm9kZShjaGlsZDIpLm1fdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
LCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwgcHJvdmVuVmFsdWUoY2hpbGQyKSk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbEFs
aWFzKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGVsZW1lbnRQ
b2ludGVyKTsKQEAgLTI1ODEsNyArMjU4NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgVHlwZWRQb2ludGVyIGVsZW1lbnRQb2ludGVyID0gbV9vdXQuYmFz
ZUluZGV4KAogICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0
aWVzLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwKLSAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5mb3JOb2RlKGNoaWxkMikubV92YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IHByb3ZlblZhbHVlKGNoaWxkMikpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgewogICAgICAgICAgICAgICAgICAg
ICBtX291dC5zdG9yZURvdWJsZSh2YWx1ZSwgZWxlbWVudFBvaW50ZXIpOwpAQCAtMzM5MSwxNCAr
MzM5NSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IENlbGxVc2UpCiAgICAgICAgICAgICAgICAgaXNDZWxsUHJlZGljYXRlID0gbV9v
dXQuYm9vbGVhblRydWU7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaXNDZWxs
UHJlZGljYXRlID0gdGhpcy0+aXNDZWxsKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpc0NlbGxQ
cmVkaWNhdGUgPSB0aGlzLT5pc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEo
KSkpOwogICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbFByZWRpY2F0ZSwgdW5zdXJlKGlz
Q2VsbCksIHVuc3VyZShub3RTdHJpbmcpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGwsIG5vdFN0cmluZyk7CiAg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzaW1wbGVSZXN1bHQgPSBtX291dC5hbmNob3IodmFs
dWUpOwogICAgICAgICAgICAgTFZhbHVlIGlzU3RyaW5nUHJlZGljYXRlOwogICAgICAgICAgICAg
aWYgKG1fbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNTdHJpbmcpIHsKLSAgICAg
ICAgICAgICAgICBpc1N0cmluZ1ByZWRpY2F0ZSA9IGlzU3RyaW5nKHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBpc1N0cmluZ1ByZWRpY2F0ZSA9IGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKG1f
bm9kZS0+Y2hpbGQxKCkpKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIGlz
U3RyaW5nUHJlZGljYXRlID0gbV9vdXQuYm9vbGVhbkZhbHNlOwogICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKGlzU3RyaW5nUHJlZGljYXRlLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5v
dFN0cmluZykpOwpAQCAtMzQzNCwxMSArMzQzOCwxNCBAQCBwcml2YXRlOgogICAgICAgICBWZWN0
b3I8VmFsdWVGcm9tQmxvY2ssIDM+IHJlc3VsdHM7CiAgICAgICAgIAogICAgICAgICByZXN1bHRz
LmFwcGVuZChtX291dC5hbmNob3IodmFsdWUpKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2Vs
bCh2YWx1ZSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUo
bV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRp
b24pKTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oaXNDZWxsQ2FzZSwgaXNPYmplY3RDYXNlKTsKICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
bV9vdXQuYW5jaG9yKHZhbHVlKSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc09iamVjdCh2YWx1
ZSksIHVuc3VyZShpc09iamVjdENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAg
IG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzT2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKG1f
bm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShpc09iamVjdENhc2UpLCB1bnN1
cmUoY29udGludWF0aW9uKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhpc09i
amVjdENhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcih2bUNhbGwoCkBAIC0zNTU0LDcgKzM1NjEsNyBAQCBwcml2YXRlOgogICAgICAgICBWYWx1
ZUZyb21CbG9jayBjaGFyOEJpdCA9IG1fb3V0LmFuY2hvcihtX291dC56ZXJvRXh0KAogICAgICAg
ICAgICAgbV9vdXQubG9hZDgobV9vdXQuYmFzZUluZGV4KAogICAgICAgICAgICAgICAgIG1faGVh
cHMuY2hhcmFjdGVyczgsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLAotICAgICAg
ICAgICAgICAgIG1fc3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxkMigpKS5tX3ZhbHVlKSksCisg
ICAgICAgICAgICAgICAgcHJvdmVuVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKSwKICAgICAgICAg
ICAgIG1fb3V0LmludDMyKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoYml0c0NvbnRpbnVhdGlvbik7
CiAgICAgICAgICAgICAKQEAgLTM1NjMsNyArMzU3MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGNoYXIxNkJpdCA9IG1fb3V0LmFuY2hvcihtX291dC56ZXJvRXh0KAogICAg
ICAgICAgICAgbV9vdXQubG9hZDE2KG1fb3V0LmJhc2VJbmRleCgKICAgICAgICAgICAgICAgICBt
X2hlYXBzLmNoYXJhY3RlcnMxNiwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCksCi0g
ICAgICAgICAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKG1fbm9kZS0+Y2hpbGQyKCkpLm1fdmFsdWUp
KSwKKyAgICAgICAgICAgICAgICBwcm92ZW5WYWx1ZShtX25vZGUtPmNoaWxkMigpKSkpLAogICAg
ICAgICAgICAgbV9vdXQuaW50MzIpKTsKICAgICAgICAgbV9vdXQuYnJhbmNoKAogICAgICAgICAg
ICAgbV9vdXQuYWJvdmVPckVxdWFsKGNoYXIxNkJpdC52YWx1ZSgpLCBtX291dC5jb25zdEludDMy
KDB4MTAwKSksCkBAIC0zNjQ0LDcgKzM2NTEsNyBAQCBwcml2YXRlOgogICAgICAgICBWYWx1ZUZy
b21CbG9jayBjaGFyOEJpdCA9IG1fb3V0LmFuY2hvcihtX291dC56ZXJvRXh0KAogICAgICAgICAg
ICAgbV9vdXQubG9hZDgobV9vdXQuYmFzZUluZGV4KAogICAgICAgICAgICAgICAgIG1faGVhcHMu
Y2hhcmFjdGVyczgsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLAotICAgICAgICAg
ICAgICAgIG1fc3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxkMigpKS5tX3ZhbHVlKSksCisgICAg
ICAgICAgICAgICAgcHJvdmVuVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKSwKICAgICAgICAgICAg
IG1fb3V0LmludDMyKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAg
ICAgICAgIApAQCAtMzY1Myw3ICszNjYwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgY2hhcjE2Qml0ID0gbV9vdXQuYW5jaG9yKG1fb3V0Lnplcm9FeHQoCiAgICAgICAgICAg
ICBtX291dC5sb2FkMTYobV9vdXQuYmFzZUluZGV4KAogICAgICAgICAgICAgICAgIG1faGVhcHMu
Y2hhcmFjdGVyczE2LCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwKLSAgICAgICAg
ICAgICAgICBtX3N0YXRlLmZvck5vZGUobV9ub2RlLT5jaGlsZDIoKSkubV92YWx1ZSkpLAorICAg
ICAgICAgICAgICAgIHByb3ZlblZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSksCiAgICAgICAgICAg
ICBtX291dC5pbnQzMikpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAg
ICAgIApAQCAtNDAwNiwxMSArNDAxMywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlU3RyaWN0
RXEgU3RyaW5nSWRlbnQgdG8gTm90U3RyaW5nVmFyIGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFu
Y2hvcihtX291dC5ib29sZWFuRmFsc2UpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2Vs
bChyaWdodFZhbHVlKSwgdW5zdXJlKGlzQ2VsbENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7
CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXNDZWxsKHJpZ2h0
VmFsdWUsIHByb3ZlblR5cGUocmlnaHRFZGdlKSksCisgICAgICAgICAgICAgICAgdW5zdXJlKGlz
Q2VsbENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgaXNT
dHJpbmdDYXNlKTsKICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdFN0cmluZ1Jlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOwotICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKGlzU3RyaW5nKHJpZ2h0VmFsdWUpLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKGNv
bnRpbnVhdGlvbikpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAg
IGlzU3RyaW5nKHJpZ2h0VmFsdWUsIHByb3ZlblR5cGUocmlnaHRFZGdlKSksCisgICAgICAgICAg
ICAgICAgdW5zdXJlKGlzU3RyaW5nQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBjb250aW51
YXRpb24pOwogICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbV9vdXQubG9hZFB0cihyaWdodFZh
bHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKQEAgLTQzMjMsNyArNDMzNCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNO
b3RJbnQsIGlzRG91YmxlKTsKICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAg
ICAgICAgICAgICAgIGlzQ2VsbE9yTWlzYyhib3hlZFZhbHVlKSwKKyAgICAgICAgICAgICAgICAg
ICAgaXNDZWxsT3JNaXNjKGJveGVkVmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkp
LAogICAgICAgICAgICAgICAgICAgICB1c3VhbGx5KGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdo
LmJsb2NrKSksIHJhcmVseShpc0RvdWJsZSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzRG91YmxlLCBpbm5lckxhc3ROZXh0KTsKQEAgLTQzNjgs
MTMgKzQzNzksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc1N0
cmluZ0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIGlzIHN0
cmluZyIpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX291dC5icmFuY2go
Ci0gICAgICAgICAgICAgICAgICAgIGlzTm90Q2VsbCh1bmJveGVkVmFsdWUpLAorICAgICAgICAg
ICAgICAgICAgICBpc05vdENlbGwodW5ib3hlZFZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hp
bGQxKCkpKSwKICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxU
aHJvdWdoLmJsb2NrKSksIHVuc3VyZShpc0NlbGxDYXNlKSk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0Nl
bGxDYXNlLCBpc1N0cmluZ0Nhc2UpOwogICAgICAgICAgICAgICAgIExWYWx1ZSBjZWxsVmFsdWUg
PSB1bmJveGVkVmFsdWU7CiAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAg
ICAgICAgICAgICBpc05vdFN0cmluZyhjZWxsVmFsdWUpLAorICAgICAgICAgICAgICAgICAgICBp
c05vdFN0cmluZyhjZWxsVmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLAogICAg
ICAgICAgICAgICAgICAgICB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2sp
KSwgdW5zdXJlKGlzU3RyaW5nQ2FzZSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgbGFzdE5leHQpOwpAQCAtNDQ2NiwxMiAr
NDQ3NywxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5n
QmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJpbmcgVW50eXBl
ZCBzdHJpbmcgY2FzZSIpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSksIHVuc3VyZShpc0Nl
bGxCbG9jayksIHVuc3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQx
KCkpKSwKKyAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGlzQ2VsbEJsb2NrKSwgdW5zdXJlKGxv
d0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSkpOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxs
QmxvY2ssIGlzU3RyaW5nQmxvY2spOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgaXNTdHJpbmcodmFsdWUpLAorICAg
ICAgICAgICAgICAgICAgICBpc1N0cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxk
MSgpKSksCiAgICAgICAgICAgICAgICAgICAgIHVuc3VyZShpc1N0cmluZ0Jsb2NrKSwgdW5zdXJl
KGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSkpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQmxvY2ssIGxhc3ROZXh0KTsK
QEAgLTQ0OTksNyArNDUxMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTFZhbHVlIHZh
bHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENl
bGwgY2VsbCBjYXNlIikpOwogICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAg
ICAgICAgICAgICAgaXNDZWxsKHZhbHVlKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKGxvd0Js
b2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSkpOworICAgICAgICAgICAgICAgICAgICBpc0Nl
bGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLAorICAgICAgICAgICAgICAg
ICAgICB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2gu
YmxvY2spKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UpOwogICAg
ICAgICAgICAgICAgIGNlbGwgPSB2YWx1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ1
NjIsMTIgKzQ1NzUsMTIgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVJc0Jvb2xl
YW4oKQogICAgIHsKLSAgICAgICAgc2V0Qm9vbGVhbihpc0Jvb2xlYW4obG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpKSkpOworICAgICAgICBzZXRCb29sZWFuKGlzQm9vbGVhbihsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZUlzTnVtYmVyKCkKICAgICB7Ci0gICAgICAgIHNldEJv
b2xlYW4oaXNOdW1iZXIobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICBz
ZXRCb29sZWFuKGlzTnVtYmVyKGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIHByb3ZlblR5
cGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlSXNT
dHJpbmcoKQpAQCAtNDU3OCwxMCArNDU5MSwxMSBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzU3RyaW5nIGNvbnRp
bnVhdGlvbiIpKTsKICAgICAgICAgCiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENlbGxSZXN1
bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKLSAgICAgICAgbV9vdXQuYnJh
bmNoKGlzQ2VsbCh2YWx1ZSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlv
bikpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHBy
b3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShj
b250aW51YXRpb24pKTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVG
cm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihpc1N0cmluZyh2YWx1ZSkpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBjZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGlzU3RyaW5nKHZh
bHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwpAQCAtNDU5NiwxMCArNDYxMCwxMSBAQCBwcml2YXRlOgogICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2Jq
ZWN0IGNvbnRpbnVhdGlvbiIpKTsKIAogICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAgICAgIG1fb3V0LmJy
YW5jaChpc0NlbGwodmFsdWUpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRp
b24pKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2VsbENhc2UpLCB1bnN1cmUo
Y29udGludWF0aW9uKSk7CiAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhpc0NlbGxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9j
ayBjZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGlzT2JqZWN0KHZhbHVlKSk7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGNlbGxSZXN1bHQgPSBtX291dC5hbmNob3IoaXNPYmplY3QodmFsdWUsIHBy
b3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwpAQCAtNDY3NCw3ICs0Njg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIExWYWx1
ZSBjb25kaXRpb247CiAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlKQotICAgICAgICAgICAgY29uZGl0aW9uID0gaXNDZWxsKGNlbGwpOworICAgICAg
ICAgICAgY29uZGl0aW9uID0gaXNDZWxsKGNlbGwsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEo
KSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb25kaXRpb24gPSBtX291dC5ib29sZWFu
VHJ1ZTsKICAgICAgICAgCkBAIC00NjgzLDcgKzQ2OTgsNyBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNl
LCBsb29wKTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBub1ZhbHVlKCks
IDAsIGlzTm90T2JqZWN0KHByb3RvdHlwZSkpOworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
bm9WYWx1ZSgpLCAwLCBpc05vdE9iamVjdChwcm90b3R5cGUsIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDIoKSkpKTsKICAgICAgICAgCiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9yaWdpbmFsVmFs
dWUgPSBtX291dC5hbmNob3IoY2VsbCk7CiAgICAgICAgIG1fb3V0Lmp1bXAobG9vcCk7CkBAIC01
MzY4LDcgKzUzODMsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90
SW50Q2FzZSwgZG91YmxlQ2FzZSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsT3JN
aXNjKHZhbHVlKSwgdW5zdXJlKG5vdE51bWJlckNhc2UpLCB1bnN1cmUoZG91YmxlQ2FzZSkpOwor
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIGlzQ2VsbE9yTWlzYyh2
YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShub3ROdW1iZXJDYXNlKSwgdW5zdXJlKGRv
dWJsZUNhc2UpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91
YmxlQ2FzZSwgbm90TnVtYmVyQ2FzZSk7CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291
dC5hbmNob3IoZG91YmxlVG9JbnQzMih1bmJveERvdWJsZSh2YWx1ZSkpKSk7CkBAIC01NTM0LDcg
KzU1NTAsNyBAQCBwcml2YXRlOgogICAgIFR5cGVkUG9pbnRlciBiYXNlSW5kZXgoSW5kZXhlZEFi
c3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1ZSBpbmRleCwgRWRnZSBlZGdl
LCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX291dC5iYXNl
SW5kZXgoCi0gICAgICAgICAgICBoZWFwLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4
KSwgbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdmFsdWUsIG9mZnNldCk7CisgICAgICAgICAgICBo
ZWFwLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwgcHJvdmVuVmFsdWUoZWRnZSks
IG9mZnNldCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGFyZSgKQEAgLTU1ODIsNyArNTU5
OCw5IEBAIHByaXZhdGU6CiAgICAgICAgIExCYXNpY0Jsb2NrIGxlZnROb3RDZWxsQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0IGxlZnQg
bm90IGNlbGwgY2FzZSIpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlRXFPYmplY3RPck90aGVyVG9PYmplY3QgY29udGlu
dWF0aW9uIikpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChsZWZ0VmFs
dWUpLCB1bnN1cmUobGVmdENlbGxDYXNlKSwgdW5zdXJlKGxlZnROb3RDZWxsQ2FzZSkpOworICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwobGVmdFZhbHVlLCBwcm92ZW5U
eXBlKGxlZnRDaGlsZCkpLAorICAgICAgICAgICAgdW5zdXJlKGxlZnRDZWxsQ2FzZSksIHVuc3Vy
ZShsZWZ0Tm90Q2VsbENhc2UpKTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8obGVmdENlbGxDYXNlLCBsZWZ0Tm90Q2VsbENhc2UpOwogICAg
ICAgICBzcGVjdWxhdGVUcnV0aHlPYmplY3QobGVmdENoaWxkLCBsZWZ0VmFsdWUsIFNwZWNPYmpl
Y3QgfCAoflNwZWNDZWxsKSk7CkBAIC01ODcxLDggKzU4ODksNyBAQCBwcml2YXRlOgogICAgIAog
ICAgIExWYWx1ZSB0eXBlZEFycmF5TGVuZ3RoKEVkZ2UgYmFzZUVkZ2UsIEFycmF5TW9kZSBhcnJh
eU1vZGUsIExWYWx1ZSBiYXNlKQogICAgIHsKLSAgICAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHZp
ZXcgPSBtX2dyYXBoLnRyeUdldEZvbGRhYmxlVmlldygKLSAgICAgICAgICAgIG1fc3RhdGUuZm9y
Tm9kZShiYXNlRWRnZSkubV92YWx1ZSwgYXJyYXlNb2RlKTsKKyAgICAgICAgSlNBcnJheUJ1ZmZl
clZpZXcqIHZpZXcgPSBtX2dyYXBoLnRyeUdldEZvbGRhYmxlVmlldyhwcm92ZW5WYWx1ZShiYXNl
RWRnZSksIGFycmF5TW9kZSk7CiAgICAgICAgIGlmICh2aWV3KQogICAgICAgICAgICAgcmV0dXJu
IG1fb3V0LmNvbnN0SW50MzIodmlldy0+bGVuZ3RoKCkpOwogICAgICAgICByZXR1cm4gbV9vdXQu
bG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19sZW5ndGgp
OwpAQCAtNTkwOSw3ICs1OTI2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGZhc3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgZmFzdCBj
YXNlIikpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgY29udGludWF0aW9uIikpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX291dC5icmFuY2goaXNOb3RCb29sZWFuKHZhbHVlKSwgcmFyZWx5
KHNsb3dDYXNlKSwgdXN1YWxseShmYXN0Q2FzZSkpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAorICAgICAgICAgICAgICAgIGlzTm90Qm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUt
PmNoaWxkMSgpKSksCisgICAgICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShm
YXN0Q2FzZSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RDYXNlLCBzbG93Q2FzZSk7CiAgICAgICAgICAgICBWYWx1
ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHVuYm94Qm9vbGVhbih2YWx1ZSkp
OwpAQCAtNTk1MSw3ICs1OTcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgcHJp
bWl0aXZlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRXF1YWxOdWxsT3JVbmRlZmluZWQg
cHJpbWl0aXZlIGNhc2UiKSk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiRXF1YWxOdWxsT3JVbmRlZmluZWQgY29udGludWF0aW9uIikp
OwogICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90Q2VsbCh2YWx1ZSksIHVuc3Vy
ZShwcmltaXRpdmVDYXNlKSwgdW5zdXJlKGNlbGxDYXNlKSk7CisgICAgICAgIG1fb3V0LmJyYW5j
aChpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUocHJpbWl0aXZlQ2Fz
ZSksIHVuc3VyZShjZWxsQ2FzZSkpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgcHJpbWl0aXZlQ2FzZSk7CiAgICAgICAg
IApAQCAtNjAwMyw3ICs2MDIyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHByaW1pdGl2ZVJl
c3VsdCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlVW5kZWZpbmVk
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFcXVhbE51bGxPclVuZGVmaW5l
ZDoKLSAgICAgICAgICAgIHByaW1pdGl2ZVJlc3VsdCA9IGlzT3RoZXIodmFsdWUpOworICAgICAg
ICAgICAgcHJpbWl0aXZlUmVzdWx0ID0gaXNPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTcGVjdWxhdGVOdWxsT3JVbmRlZmlu
ZWQ6CiAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKQEAgLTY0NzEsNyArNjQ5MCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKLSAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlw
ZSAmIFNwZWNJbnQzMikpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIShw
cm92ZW5UeXBlKGVkZ2UpICYgU3BlY0ludDMyKSk7CiAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50
YWJsZSk7CiAgICAgICAgIHJldHVybiBtX291dC5pbnQzMlplcm87CiAgICAgfQpAQCAtNjUwNSw3
ICs2NTI0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFtX3N0YXRlLmZvck5vZGUoZWRnZSku
bV90eXBlKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFwcm92ZW5UeXBl
KGVkZ2UpKTsKICAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKICAgICAgICAgcmV0dXJu
IG1fb3V0LmludDY0WmVybzsKICAgICB9CkBAIC02NTcyLDcgKzY1OTEsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgcmV0dXJuIHVuY2hlY2tlZFZhbHVlOwogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIShtX3N0YXRlLmZvck5vZGUoZWRn
ZSkubV90eXBlICYgU3BlY0NlbGwpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsICEocHJvdmVuVHlwZShlZGdlKSAmIFNwZWNDZWxsKSk7CiAgICAgICAgIHRlcm1pbmF0ZShV
bmNvdW50YWJsZSk7CiAgICAgICAgIHJldHVybiBtX291dC5pbnRQdHJaZXJvOwogICAgIH0KQEAg
LTY2NDEsNyArNjY2MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwg
IShtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0Jvb2xlYW4pKTsKKyAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICEocHJvdmVuVHlwZShlZGdlKSAmIFNwZWNCb29s
ZWFuKSk7CiAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CiAgICAgICAgIHJldHVybiBt
X291dC5ib29sZWFuRmFsc2U7CiAgICAgfQpAQCAtNjY1Myw3ICs2NjcyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fZG91YmxlVmFsdWVzLmdldChlZGdl
Lm5vZGUoKSk7CiAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKICAgICAgICAgICAgIHJldHVy
biB2YWx1ZS52YWx1ZSgpOwotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIW1f
c3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgIXByb3ZlblR5cGUoZWRnZSkpOwogICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFi
bGUpOwogICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlWmVybzsKICAgICB9CkBAIC02NzY1LDEy
ICs2Nzg0LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5hZGQobV9vdXQuemVy
b0V4dCh2YWx1ZSwgbV9vdXQuaW50NjQpLCBtX3RhZ1R5cGVOdW1iZXIpOwogICAgIH0KICAgICAK
LSAgICBMVmFsdWUgaXNDZWxsT3JNaXNjKExWYWx1ZSBqc1ZhbHVlKQorICAgIExWYWx1ZSBpc0Nl
bGxPck1pc2MoTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRv
cCkKICAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBl
LCBTcGVjQ2VsbCB8IFNwZWNNaXNjKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47CiAgICAg
ICAgIHJldHVybiBtX291dC50ZXN0SXNaZXJvNjQoanNWYWx1ZSwgbV90YWdUeXBlTnVtYmVyKTsK
ICAgICB9Ci0gICAgTFZhbHVlIGlzTm90Q2VsbE9yTWlzYyhMVmFsdWUganNWYWx1ZSkKKyAgICBM
VmFsdWUgaXNOb3RDZWxsT3JNaXNjKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBl
ID0gU3BlY0Z1bGxUb3ApCiAgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJv
dmVuVmFsdWUodHlwZSwgfihTcGVjQ2VsbCB8IFNwZWNNaXNjKSkpCisgICAgICAgICAgICByZXR1
cm4gcHJvdmVuOwogICAgICAgICByZXR1cm4gbV9vdXQudGVzdE5vblplcm82NChqc1ZhbHVlLCBt
X3RhZ1R5cGVOdW1iZXIpOwogICAgIH0KICAgICAKQEAgLTY4NjQsNDMgKzY4ODcsNTkgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIHBvc3NpYmxlUmVzdWx0OwogICAgIH0KICAgICAKLSAgICBM
VmFsdWUgaXNOdW1iZXIoTFZhbHVlIGpzVmFsdWUpCisgICAgTFZhbHVlIGlzTnVtYmVyKExWYWx1
ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCiAgICAgeworICAg
ICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY0Z1bGxOdW1i
ZXIpKQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAgcmV0dXJuIGlzTm90Q2Vs
bE9yTWlzYyhqc1ZhbHVlKTsKICAgICB9Ci0gICAgTFZhbHVlIGlzTm90TnVtYmVyKExWYWx1ZSBq
c1ZhbHVlKQorICAgIExWYWx1ZSBpc05vdE51bWJlcihMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQogICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92
ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIH5TcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBy
ZXR1cm4gcHJvdmVuOwogICAgICAgICByZXR1cm4gaXNDZWxsT3JNaXNjKGpzVmFsdWUpOwogICAg
IH0KICAgICAKLSAgICBMVmFsdWUgaXNOb3RDZWxsKExWYWx1ZSBqc1ZhbHVlKQorICAgIExWYWx1
ZSBpc05vdENlbGwoTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVs
bFRvcCkKICAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0
eXBlLCB+U3BlY0NlbGwpKQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAgcmV0
dXJuIG1fb3V0LnRlc3ROb25aZXJvNjQoanNWYWx1ZSwgbV90YWdNYXNrKTsKICAgICB9CiAgICAg
Ci0gICAgTFZhbHVlIGlzQ2VsbChMVmFsdWUganNWYWx1ZSkKKyAgICBMVmFsdWUgaXNDZWxsKExW
YWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCiAgICAgewor
ICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY0NlbGwp
KQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3RJ
c1plcm82NChqc1ZhbHVlLCBtX3RhZ01hc2spOwogICAgIH0KICAgICAKLSAgICBMVmFsdWUgaXNO
b3RNaXNjKExWYWx1ZSB2YWx1ZSkKKyAgICBMVmFsdWUgaXNOb3RNaXNjKExWYWx1ZSB2YWx1ZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQogICAgIHsKKyAgICAgICAgaWYgKExW
YWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIH5TcGVjTWlzYykpCisgICAgICAgICAg
ICByZXR1cm4gcHJvdmVuOwogICAgICAgICByZXR1cm4gbV9vdXQuYWJvdmUodmFsdWUsIG1fb3V0
LmNvbnN0SW50NjQoVGFnQml0VHlwZU90aGVyIHwgVGFnQml0Qm9vbCB8IFRhZ0JpdFVuZGVmaW5l
ZCkpOwogICAgIH0KICAgICAKLSAgICBMVmFsdWUgaXNNaXNjKExWYWx1ZSB2YWx1ZSkKKyAgICBM
VmFsdWUgaXNNaXNjKExWYWx1ZSB2YWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxs
VG9wKQogICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5
cGUsIFNwZWNNaXNjKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47CiAgICAgICAgIHJldHVy
biBtX291dC5iaXROb3QoaXNOb3RNaXNjKHZhbHVlKSk7CiAgICAgfQogICAgIAotICAgIExWYWx1
ZSBpc05vdEJvb2xlYW4oTFZhbHVlIGpzVmFsdWUpCisgICAgTFZhbHVlIGlzTm90Qm9vbGVhbihM
VmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQogICAgIHsK
KyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIH5TcGVjQm9v
bGVhbikpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOwogICAgICAgICByZXR1cm4gbV9vdXQu
dGVzdE5vblplcm82NCgKICAgICAgICAgICAgIG1fb3V0LmJpdFhvcihqc1ZhbHVlLCBtX291dC5j
b25zdEludDY0KFZhbHVlRmFsc2UpKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQofjEp
KTsKICAgICB9Ci0gICAgTFZhbHVlIGlzQm9vbGVhbihMVmFsdWUganNWYWx1ZSkKKyAgICBMVmFs
dWUgaXNCb29sZWFuKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1
bGxUb3ApCiAgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUo
dHlwZSwgU3BlY0Jvb2xlYW4pKQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAg
cmV0dXJuIG1fb3V0LmJpdE5vdChpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwogICAgIH0KICAgICBM
VmFsdWUgdW5ib3hCb29sZWFuKExWYWx1ZSBqc1ZhbHVlKQpAQCAtNjkxNSwxOCArNjk1NCwzMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgdmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVUcnVl
KSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZUZhbHNlKSk7CiAgICAgfQogICAgIAotICAgIExWYWx1
ZSBpc05vdE90aGVyKExWYWx1ZSB2YWx1ZSkKKyAgICBMVmFsdWUgaXNOb3RPdGhlcihMVmFsdWUg
dmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKICAgICB7CisgICAgICAg
IGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCB+U3BlY090aGVyKSkKKyAg
ICAgICAgICAgIHJldHVybiBwcm92ZW47CiAgICAgICAgIHJldHVybiBtX291dC5ub3RFcXVhbCgK
ICAgICAgICAgICAgIG1fb3V0LmJpdEFuZCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NCh+VGFnQml0
VW5kZWZpbmVkKSksCiAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KFZhbHVlTnVsbCkpOwog
ICAgIH0KLSAgICBMVmFsdWUgaXNPdGhlcihMVmFsdWUgdmFsdWUpCisgICAgTFZhbHVlIGlzT3Ro
ZXIoTFZhbHVlIHZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCiAgICAg
eworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY090
aGVyKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47CiAgICAgICAgIHJldHVybiBtX291dC5l
cXVhbCgKICAgICAgICAgICAgIG1fb3V0LmJpdEFuZCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NCh+
VGFnQml0VW5kZWZpbmVkKSksCiAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KFZhbHVlTnVs
bCkpOwogICAgIH0KKyAgICAKKyAgICBMVmFsdWUgaXNQcm92ZW5WYWx1ZShTcGVjdWxhdGVkVHlw
ZSBwcm92ZW5UeXBlLCBTcGVjdWxhdGVkVHlwZSB3YW50ZWRUeXBlKQorICAgIHsKKyAgICAgICAg
aWYgKCEocHJvdmVuVHlwZSAmIH53YW50ZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBtX291
dC5ib29sZWFuVHJ1ZTsKKyAgICAgICAgaWYgKCEocHJvdmVuVHlwZSAmIHdhbnRlZFR5cGUpKQor
ICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQogCiAgICAgdm9pZCBzcGVjdWxhdGUoRWRnZSBlZGdlKQogICAgIHsKQEAg
LTcwMjcsMjkgKzcwNzksMzcgQEAgcHJpdmF0ZToKICAgICAgICAganNWYWx1ZVRvU3RyaWN0SW50
NTIoZWRnZSwgbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pKTsKICAg
ICB9CiAgICAgCi0gICAgTFZhbHVlIGlzT2JqZWN0KExWYWx1ZSBjZWxsKQorICAgIExWYWx1ZSBp
c09iamVjdChMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQog
ICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUgJiBT
cGVjQ2VsbCwgU3BlY09iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOwogICAgICAg
ICByZXR1cm4gbV9vdXQuYWJvdmVPckVxdWFsKAogICAgICAgICAgICAgbV9vdXQubG9hZDgoY2Vs
bCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50OChPYmplY3RUeXBlKSk7CiAgICAgfQogCi0gICAgTFZhbHVlIGlzTm90T2JqZWN0KExWYWx1
ZSBjZWxsKQorICAgIExWYWx1ZSBpc05vdE9iamVjdChMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5
cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQogICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4g
PSBpc1Byb3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgflNwZWNPYmplY3QpKQorICAgICAgICAg
ICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAgcmV0dXJuIG1fb3V0LmJlbG93KAogICAgICAgICAg
ICAgbV9vdXQubG9hZDgoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50OChPYmplY3RUeXBlKSk7CiAgICAgfQogCi0gICAgTFZhbHVl
IGlzTm90U3RyaW5nKExWYWx1ZSBjZWxsKQorICAgIExWYWx1ZSBpc05vdFN0cmluZyhMVmFsdWUg
Y2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQogICAgIHsKKyAgICAgICAg
aWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgflNwZWNT
dHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKICAgICAgICAgcmV0dXJuIG1fb3V0
Lm5vdEVxdWFsKAogICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKSwKICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5zdHJpbmdT
dHJ1Y3R1cmUtPmlkKCkpKTsKICAgICB9CiAgICAgCi0gICAgTFZhbHVlIGlzU3RyaW5nKExWYWx1
ZSBjZWxsKQorICAgIExWYWx1ZSBpc1N0cmluZyhMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUg
dHlwZSA9IFNwZWNGdWxsVG9wKQogICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBp
c1Byb3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgU3BlY1N0cmluZykpCisgICAgICAgICAgICBy
ZXR1cm4gcHJvdmVuOwogICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCiAgICAgICAgICAgICBt
X291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAogICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQzMih2bSgpLnN0cmluZ1N0cnVjdHVyZS0+aWQoKSkpOwpAQCAtNzEw
NSw4ICs3MTY1LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTFZh
bHVlIGlzRnVuY3Rpb24oTFZhbHVlIGNlbGwpIHsgcmV0dXJuIGlzVHlwZShjZWxsLCBKU0Z1bmN0
aW9uVHlwZSk7IH0KLSAgICBMVmFsdWUgaXNOb3RGdW5jdGlvbihMVmFsdWUgY2VsbCkgeyByZXR1
cm4gaXNOb3RUeXBlKGNlbGwsIEpTRnVuY3Rpb25UeXBlKTsgfQorICAgIExWYWx1ZSBpc0Z1bmN0
aW9uKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAg
eworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSAmIFNwZWND
ZWxsLCBTcGVjRnVuY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAg
cmV0dXJuIGlzVHlwZShjZWxsLCBKU0Z1bmN0aW9uVHlwZSk7CisgICAgfQorICAgIExWYWx1ZSBp
c05vdEZ1bmN0aW9uKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxU
b3ApCisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlw
ZSAmIFNwZWNDZWxsLCB+U3BlY0Z1bmN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47
CisgICAgICAgIHJldHVybiBpc05vdFR5cGUoY2VsbCwgSlNGdW5jdGlvblR5cGUpOworICAgIH0K
ICAgICAKICAgICBMVmFsdWUgaXNUeXBlKExWYWx1ZSBjZWxsLCBKU1R5cGUgdHlwZSkKICAgICB7
CkBAIC03MTUxLDcgKzcyMjEsNyBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBwcmlt
aXRpdmVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzcGVjdWxhdGVPYmplY3RPck90aGVy
IHByaW1pdGl2ZSBjYXNlIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoInNwZWN1bGF0ZU9iamVjdE9yT3RoZXIgY29udGludWF0aW9u
IikpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90Q2VsbCh2YWx1ZSksIHVu
c3VyZShwcmltaXRpdmVDYXNlKSwgdW5zdXJlKGNlbGxDYXNlKSk7CisgICAgICAgIG1fb3V0LmJy
YW5jaChpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUocHJpbWl0aXZl
Q2FzZSksIHVuc3VyZShjZWxsQ2FzZSkpOwogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgcHJpbWl0aXZlQ2FzZSk7CiAgICAg
ICAgIApAQCAtNzI1MSw3ICs3MzIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RydWN0dXJlKiBz
dHJpbmdPYmplY3RTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNT
dWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpCisgICAgICAgIGlm
IChhYnN0cmFjdFN0cnVjdHVyZShlZGdlKS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJpbmdP
YmplY3RTdHJ1Y3R1cmUpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAg
IHNwZWN1bGF0ZSgKQEAgLTczMTQsMTAgKzczODQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgTEJh
c2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUg
Tm90U3RyaW5nVmFyIGlzIHN0cmluZyBjYXNlIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBOb3RTdHJpbmdWYXIg
Y29udGludWF0aW9uIikpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2
YWx1ZSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAg
ICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGlz
Q2VsbENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CiAgICAgICAgIAogICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2Fz
ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc1N0cmluZyh2YWx1ZSksIHVuc3VyZShpc1N0cmlu
Z0Nhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc1N0
cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShpc1N0cmluZ0Nhc2UpLCB1bnN1
cmUoY29udGludWF0aW9uKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0
cmluZ0Nhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50KGVk
Z2UsIHZhbHVlLCBtX291dC5sb2FkUHRyKHZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKSk7
CkBAIC03ODYwLDYgKzc5MzAsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGFkZHJlc3NG
b3Iob3BlcmFuZCwgVGFnT2Zmc2V0KTsKICAgICB9CiAgICAgCisgICAgQWJzdHJhY3RWYWx1ZSBh
YnN0cmFjdFZhbHVlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGF0ZS5m
b3JOb2RlKG5vZGUpOworICAgIH0KKyAgICBBYnN0cmFjdFZhbHVlIGFic3RyYWN0VmFsdWUoRWRn
ZSBlZGdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWUoZWRnZS5ub2RlKCkp
OworICAgIH0KKyAgICAKKyAgICBTcGVjdWxhdGVkVHlwZSBwcm92ZW5UeXBlKE5vZGUqIG5vZGUp
CisgICAgeworICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZShub2RlKS5tX3R5cGU7CisgICAg
fQorICAgIFNwZWN1bGF0ZWRUeXBlIHByb3ZlblR5cGUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHByb3ZlblR5cGUoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICBKU1Zh
bHVlIHByb3ZlblZhbHVlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWJzdHJh
Y3RWYWx1ZShub2RlKS5tX3ZhbHVlOworICAgIH0KKyAgICBKU1ZhbHVlIHByb3ZlblZhbHVlKEVk
Z2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBwcm92ZW5WYWx1ZShlZGdlLm5vZGUoKSk7
CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgYWJzdHJhY3RTdHJ1Y3R1
cmUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlKG5vZGUp
Lm1fc3RydWN0dXJlOworICAgIH0KKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIGFic3RyYWN0
U3RydWN0dXJlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhYnN0cmFjdFN0cnVj
dHVyZShlZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY3Jhc2goKQogICAgIHsK
ICAgICAgICAgY3Jhc2gobV9oaWdoQmxvY2stPmluZGV4LCBtX25vZGUtPmluZGV4KCkpOwo=
</data>
<flag name="review"
          id="277003"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>