<?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>124812</bug_id>
          
          <creation_ts>2013-11-23 18:33:39 -0800</creation_ts>
          <short_desc>Infer one-time scopes</short_desc>
          <delta_ts>2013-11-28 04:08:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          <dependson>124824</dependson>
          <blocked>124630</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>p.jacquemart</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>953828</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-23 18:33:39 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953830</commentid>
    <comment_count>1</comment_count>
      <attachid>217756</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-23 20:48:52 -0800</bug_when>
    <thetext>Created attachment 217756
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953867</commentid>
    <comment_count>2</comment_count>
      <attachid>217766</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-24 15:50:08 -0800</bug_when>
    <thetext>Created attachment 217766
more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953871</commentid>
    <comment_count>3</comment_count>
      <attachid>217768</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-24 17:04:41 -0800</bug_when>
    <thetext>Created attachment 217768
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953873</commentid>
    <comment_count>4</comment_count>
      <attachid>217768</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-24 17:12:29 -0800</bug_when>
    <thetext>Comment on attachment 217768
the patch

Attachment 217768 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/35208314</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953874</commentid>
    <comment_count>5</comment_count>
      <attachid>217768</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-24 17:13:36 -0800</bug_when>
    <thetext>Comment on attachment 217768
the patch

Attachment 217768 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/35218342</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953876</commentid>
    <comment_count>6</comment_count>
      <attachid>217769</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-24 17:22:20 -0800</bug_when>
    <thetext>Created attachment 217769
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953877</commentid>
    <comment_count>7</comment_count>
      <attachid>217769</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-11-24 17:45:12 -0800</bug_when>
    <thetext>Comment on attachment 217769
the patch

rs=me.  I&apos;m looking at this and wondering if we want to have channeling back to the unlinked code to say if we think attempting to watch pointing isn&apos;t worth it in future?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953878</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-24 17:50:25 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 217769 [details])
&gt; rs=me.

Lol wat?  Is it r=me or did you mean rs=me?

&gt; I&apos;m looking at this and wondering if we want to have channeling back to the unlinked code to say if we think attempting to watch pointing isn&apos;t worth it in future?

I don&apos;t think that the watchpointing costs anything.  In steady state, an activation allocation does a fast path check to see that the watchpoint is already invalidated and then does nothing.  This is one load+branch.

If we ever got around to inlining activation allocation, then the DFG could even omit the watchpoint check in almost all cases because it would observe that the watchpoint is already invalidated.  This is the same principle that makes other kinds of watchpointing free: (a) if the path that fires the watchpoint is hot then it probably would have already executed before getting DFG-optimized and the DFG would observe that it doesn&apos;t have to emit any code because the watchpoint can&apos;t &quot;uninvalidate&quot;; (b) the fast path check for watchpoint invalidation is really cheap so even if you have to emit it, it&apos;s probably in the noise.

So the only thing that channeling this back to unlinked code would do is make us miss cases where the current instance of a piece of code has a closure that is one-shot even though some past instance was multi-shot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953882</commentid>
    <comment_count>9</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-11-24 18:13:54 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 217769 [details] [details])
&gt; &gt; rs=me.
&gt; 
&gt; Lol wat?  Is it r=me or did you mean rs=me?
&gt; 
Haha, r=me.

or

rs=rage 

Feel free to choose :)

What is the cost of a wathcpoint being triggered these days?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953884</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-24 18:21:19 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; (From update of attachment 217769 [details] [details] [details])
&gt; &gt; &gt; rs=me.
&gt; &gt; 
&gt; &gt; Lol wat?  Is it r=me or did you mean rs=me?
&gt; &gt; 
&gt; Haha, r=me.
&gt; 
&gt; or
&gt; 
&gt; rs=rage 
&gt; 
&gt; Feel free to choose :)
&gt; 
&gt; What is the cost of a wathcpoint being triggered these days?

Two answers:

Actual cost: zero in all benchmarks I know of.  We virtually watch things in the LLInt and Baseline JIT.  For example, every global variable has a state where we are &quot;watching&quot; it and this corresponds to just after the first assignment to the global.  We then virtually invalidate it one the second assignment.  The virtual invalidation is basically free; both the LLint and baseline JIT inline it and it just involves a branch and a store (pretty cheap considering other overheads in those engines).  So, by the time you&apos;re in the DFG, watchpoints are either already invalidated (in which case there is no further invalidation cost) or they haven&apos;t been invalidated *and they never will be*.  I.e. it&apos;s very unlikely for a truly mutable value to have been only set once by the time we get into the DFG.

Theoretical cost: firing a watchpoint usually means splattering a jump instruction on each invalidation point and flushing some icaches.   It ain&apos;t free.  The dominant cost is probably the cost of recompilation.  You can imagine a program that assigns a bunch of stuff for the second time after the first DFG compilation, causing a second DFG compilation.  That could cost us.  But I haven&apos;t seen it happen...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953888</commentid>
    <comment_count>11</comment_count>
      <attachid>217769</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-24 19:11:36 -0800</bug_when>
    <thetext>Comment on attachment 217769
the patch

Nooope.  This actually results in the watchpoint being invalidated whenever we run code from the cache.  I need to move the watchpoint out of SymbolTable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953896</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-24 20:47:33 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 217769 [details])
&gt; Nooope.  This actually results in the watchpoint being invalidated whenever we run code from the cache.  I need to move the watchpoint out of SymbolTable.

Actually ... I think this will *just work* once I apply https://bugs.webkit.org/show_bug.cgi?id=124824.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954195</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-25 18:50:42 -0800</bug_when>
    <thetext>OK - yeah, this totally works after I ensure that SymbolTables are cloned (https://bugs.webkit.org/show_bug.cgi?id=124824).  Here&apos;s the performance, note the speed-ups in asm.js workloads.

It&apos;s important to note that the primary purpose of this patch is *not* to have a speed-up.  It&apos;s an enabler for constant closure variable inference.  The fact that it&apos;s a speed-up already is pretty cool though.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159740)
&quot;OneShotClosure&quot; at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159740)

Collected 10 samples per benchmark/VM, with 10 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               OneShotClosure                                  
SunSpider:
   3d-cube                                            7.5713+-0.0586     !      7.7229+-0.0608        ! definitely 1.0200x slower
   3d-morph                                           8.8579+-0.0741            8.7897+-0.0720        
   3d-raytrace                                        8.7592+-0.1628     ?      8.8390+-0.1069        ?
   access-binary-trees                                1.9928+-0.0127     ?      2.0025+-0.0112        ?
   access-fannkuch                                    7.9314+-0.1398     ?      7.9500+-0.0648        ?
   access-nbody                                       4.2195+-0.0074     ?      4.2248+-0.0070        ?
   access-nsieve                                      4.9850+-0.0291     ?      5.0058+-0.0209        ?
   bitops-3bit-bits-in-byte                           1.8067+-0.0077            1.8052+-0.0014        
   bitops-bits-in-byte                                7.2157+-0.0761     ?      7.2684+-0.0352        ?
   bitops-bitwise-and                                 2.9373+-0.0199            2.9146+-0.0356        
   bitops-nsieve-bits                                 4.5981+-0.0107     ?      4.6156+-0.0200        ?
   controlflow-recursive                              3.1256+-0.0104     ?      3.1492+-0.0180        ?
   crypto-aes                                         5.4101+-0.0269     !      5.4799+-0.0161        ! definitely 1.0129x slower
   crypto-md5                                         3.1096+-0.0217     ?      3.1138+-0.0092        ?
   crypto-sha1                                        2.9519+-0.0153     ?      2.9634+-0.0166        ?
   date-format-tofte                                 11.1999+-0.1028     ?     11.3538+-0.1139        ? might be 1.0137x slower
   date-format-xparb                                  8.6572+-0.2649            8.5946+-0.1464        
   math-cordic                                        4.2146+-0.0130            4.2111+-0.0086        
   math-partial-sums                                 10.1713+-0.0669           10.1329+-0.1217        
   math-spectral-norm                                 2.7195+-0.0091     ?      2.7237+-0.0067        ?
   regexp-dna                                        12.8214+-0.0917     ?     12.9185+-0.0695        ?
   string-base64                                      5.4529+-0.0487            5.4474+-0.0299        
   string-fasta                                      10.1685+-0.1193     ?     10.1800+-0.0628        ?
   string-tagcloud                                   14.7793+-0.1383     ?     14.8674+-0.0696        ?
   string-unpack-code                                29.8436+-0.1539     !     31.4094+-0.6887        ! definitely 1.0525x slower
   string-validate-input                              6.8875+-0.0531     !      7.0241+-0.0715        ! definitely 1.0198x slower

   &lt;arithmetic&gt; *                                     7.3995+-0.0220     !      7.4888+-0.0319        ! definitely 1.0121x slower
   &lt;geometric&gt;                                        5.9376+-0.0153     !      5.9720+-0.0110        ! definitely 1.0058x slower
   &lt;harmonic&gt;                                         4.8557+-0.0094     ?      4.8719+-0.0069        ? might be 1.0033x slower

                                                        TipOfTree               OneShotClosure                                  
LongSpider:
   3d-cube                                         2703.6911+-5.1639     ?   2705.2078+-5.7551        ?
   3d-morph                                        1503.9913+-1.0547     ?   1504.3099+-0.5120        ?
   3d-raytrace                                     1532.7155+-27.1282    ?   1536.9038+-37.7426       ?
   access-binary-trees                             2214.8490+-28.9112        2210.5071+-9.0686        
   access-fannkuch                                  668.1636+-0.3095          667.0806+-2.8580        
   access-nbody                                    1496.0519+-0.7766         1495.8079+-1.0155        
   access-nsieve                                   1545.6492+-3.3063         1545.3567+-3.5099        
   bitops-3bit-bits-in-byte                         122.0382+-1.5032          121.6812+-0.6140        
   bitops-bits-in-byte                              638.6634+-2.4622     ?    639.7084+-1.8781        ?
   bitops-nsieve-bits                              1059.5476+-20.6393        1046.5556+-0.4456          might be 1.0124x faster
   controlflow-recursive                           1490.1838+-1.1999     ?   1491.2281+-1.1711        ?
   crypto-aes                                      1657.4204+-13.1218        1650.7580+-4.9355        
   crypto-md5                                      1189.5926+-16.0090        1183.4123+-1.0479        
   crypto-sha1                                     1620.0481+-4.2877         1615.9520+-5.1804        
   date-format-tofte                               1176.7482+-6.5750     ?   1184.6930+-15.1147       ?
   date-format-xparb                               1456.9124+-19.7117    ?   1468.2665+-14.4047       ?
   math-cordic                                     1735.8039+-2.4339     ?   1756.1163+-50.6096       ? might be 1.0117x slower
   math-partial-sums                               1313.4159+-1.6790         1313.0176+-15.0448       
   math-spectral-norm                              1826.9231+-1.4185         1826.1909+-0.5086        
   string-base64                                    504.5985+-2.0241     ?    505.1897+-1.7492        ?
   string-fasta                                     995.7686+-8.7513     ?   1002.5400+-6.4549        ?
   string-tagcloud                                  379.5819+-6.1538          379.4218+-2.5465        

   &lt;arithmetic&gt;                                    1310.5617+-2.1037     ?   1311.3593+-2.9540        ? might be 1.0006x slower
   &lt;geometric&gt; *                                   1116.9702+-1.8255     ?   1117.3612+-1.9354        ? might be 1.0004x slower
   &lt;harmonic&gt;                                       801.9628+-3.1782          801.5110+-1.6658          might be 1.0006x faster

                                                        TipOfTree               OneShotClosure                                  
V8Spider:
   crypto                                            79.8400+-0.7819           79.4116+-0.1977        
   deltablue                                         97.6271+-0.5112     ?     97.7724+-0.8289        ?
   earley-boyer                                      70.9846+-0.2851     ?     71.1164+-0.5930        ?
   raytrace                                          39.5626+-0.1295     ?     39.7617+-0.1278        ?
   regexp                                            98.5962+-0.2371     !    100.6687+-0.0982        ! definitely 1.0210x slower
   richards                                         133.4647+-1.1364     ?    133.5138+-1.9033        ?
   splay                                             45.7088+-0.4910           45.5637+-0.4150        

   &lt;arithmetic&gt;                                      80.8263+-0.1189     ?     81.1155+-0.3498        ? might be 1.0036x slower
   &lt;geometric&gt; *                                     74.8500+-0.1056     ?     75.0742+-0.2586        ? might be 1.0030x slower
   &lt;harmonic&gt;                                        68.8617+-0.1375     ?     69.0266+-0.2115        ? might be 1.0024x slower

                                                        TipOfTree               OneShotClosure                                  
Octane and V8v7:
   encrypt                                           0.46539+-0.00056          0.46537+-0.00059       
   decrypt                                           8.61278+-0.10320          8.56494+-0.01297       
   deltablue                                x2       0.56811+-0.00829          0.56580+-0.00723       
   earley                                            0.86179+-0.00996          0.85311+-0.00737         might be 1.0102x faster
   boyer                                            12.28732+-0.03527    ?    12.36198+-0.14571       ?
   raytrace                                 x2       4.25234+-0.03819    ?     4.28571+-0.05769       ?
   regexp                                   x2      33.38518+-0.14569    ?    34.17660+-0.77651       ? might be 1.0237x slower
   richards                                 x2       0.43053+-0.00741          0.42879+-0.00598       
   splay                                    x2       0.62881+-0.00292    !     0.67835+-0.03390       ! definitely 1.0788x slower
   navier-stokes                            x2      10.93098+-0.01050    ^    10.74471+-0.00447       ^ definitely 1.0173x faster
   closure                                           0.41954+-0.00045    !     0.42786+-0.00080       ! definitely 1.0198x slower
   jquery                                            6.01172+-0.02131    !     6.14123+-0.01382       ! definitely 1.0215x slower
   gbemu                                    x2      71.46555+-1.23004    ?    71.81298+-0.78129       ?
   mandreel                                 x2     144.69750+-0.21674    ?   145.00739+-0.22634       ?
   pdfjs                                    x2     100.70562+-0.32917    !   101.73275+-0.42501       ! definitely 1.0102x slower
   box2d                                    x2      35.21347+-0.19488    ?    35.63574+-0.47073       ? might be 1.0120x slower

V8v7:
   &lt;arithmetic&gt;                                      7.66370+-0.01653    ?     7.75033+-0.09537       ? might be 1.0113x slower
   &lt;geometric&gt; *                                     2.50570+-0.00760    ?     2.52927+-0.01950       ? might be 1.0094x slower
   &lt;harmonic&gt;                                        1.02763+-0.00543    ?     1.03971+-0.01165       ? might be 1.0118x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                     32.04672+-0.10358    !    32.26739+-0.05829       ! definitely 1.0069x slower
   &lt;geometric&gt; *                                     6.96319+-0.01762    !     7.03006+-0.02895       ! definitely 1.0096x slower
   &lt;harmonic&gt;                                        1.42556+-0.00639    ?     1.44389+-0.01382       ? might be 1.0129x slower

                                                        TipOfTree               OneShotClosure                                  
Kraken:
   ai-astar                                          493.505+-0.500      ?     493.921+-0.421         ?
   audio-beat-detection                              237.374+-1.829      ?     237.832+-0.990         ?
   audio-dft                                         289.340+-0.735      ?     289.343+-0.916         ?
   audio-fft                                         143.141+-0.263            142.956+-0.148         
   audio-oscillator                                  243.913+-0.711      ?     246.344+-3.731         ?
   imaging-darkroom                                  291.706+-8.118            290.361+-6.557         
   imaging-desaturate                                158.351+-0.092      ?     159.246+-2.047         ?
   imaging-gaussian-blur                             362.795+-0.399            362.731+-0.194         
   json-parse-financial                               80.461+-0.327             80.377+-0.252         
   json-stringify-tinderbox                          106.854+-2.260      ?     109.055+-0.863         ? might be 1.0206x slower
   stanford-crypto-aes                                90.845+-0.555             90.000+-0.871         
   stanford-crypto-ccm                               101.297+-1.320             99.726+-1.234           might be 1.0158x faster
   stanford-crypto-pbkdf2                            261.004+-1.818      ?     261.205+-1.283         ?
   stanford-crypto-sha256-iterative                  114.809+-0.376      !     115.932+-0.472         ! definitely 1.0098x slower

   &lt;arithmetic&gt; *                                    212.528+-0.764      ?     212.788+-0.586         ? might be 1.0012x slower
   &lt;geometric&gt;                                       182.922+-0.652      ?     183.148+-0.468         ? might be 1.0012x slower
   &lt;harmonic&gt;                                        158.187+-0.643      ?     158.307+-0.414         ? might be 1.0008x slower

                                                        TipOfTree               OneShotClosure                                  
JSRegress:
   adapt-to-double-divide                            22.7615+-0.1060           22.6735+-0.1096        
   aliased-arguments-getbyval                         0.9530+-0.0029     !      0.9620+-0.0050        ! definitely 1.0095x slower
   allocate-big-object                                2.6239+-0.0298     ?      2.6641+-0.0943        ? might be 1.0153x slower
   arity-mismatch-inlining                            0.8865+-0.0039     !      0.8956+-0.0026        ! definitely 1.0102x slower
   array-access-polymorphic-structure                 9.7423+-0.1081     ?      9.8772+-0.0965        ? might be 1.0138x slower
   array-nonarray-polymorhpic-access                 56.4944+-0.2788           56.3676+-0.3042        
   array-with-double-add                              5.7447+-0.0591     ?      5.7655+-0.0545        ?
   array-with-double-increment                        4.2768+-0.0422     ?      4.3302+-0.0150        ? might be 1.0125x slower
   array-with-double-mul-add                          6.7851+-0.0756     ?      6.8312+-0.0309        ?
   array-with-double-sum                              8.0033+-0.0466            7.9885+-0.0655        
   array-with-int32-add-sub                          10.4787+-0.1581           10.4335+-0.1180        
   array-with-int32-or-double-sum                     8.0835+-0.1019            8.0323+-0.0831        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    122.3827+-1.0212     ?    122.5661+-1.2554        ?
   ArrayBuffer-DataView-alloc-long-lived             34.1578+-0.7951           33.6167+-0.1725          might be 1.0161x faster
   ArrayBuffer-Int32Array-byteOffset                  7.0278+-0.0816            6.9931+-0.0103        
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    215.5672+-2.2279     ?    215.9768+-3.3175        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    166.4188+-0.9604     !    169.3677+-1.6704        ! definitely 1.0177x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    122.1009+-2.9445     ?    123.7447+-1.8271        ? might be 1.0135x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     49.7888+-0.2816     !     54.1200+-0.5532        ! definitely 1.0870x slower
   ArrayBuffer-Int8Array-alloc-long-lived            32.6590+-0.5204     ?     33.1573+-0.2388        ? might be 1.0153x slower
   ArrayBuffer-Int8Array-alloc                       29.7232+-0.2568     ?     29.7573+-0.1870        ?
   asmjs_bool_bug                                    10.1716+-0.1390           10.0934+-0.0953        
   basic-set                                         21.6522+-0.1298     ?     21.7772+-0.1838        ?
   big-int-mul                                        5.6363+-0.0267     ?      5.6424+-0.0547        ?
   boolean-test                                       4.3988+-0.0448     ?      4.4545+-0.0636        ? might be 1.0127x slower
   branch-fold                                        4.9467+-0.0161            4.9430+-0.0556        
   cast-int-to-double                                12.3768+-0.1395     ?     12.5320+-0.1578        ? might be 1.0125x slower
   cell-argument                                     15.5064+-0.1248     ?     15.5950+-0.1253        ?
   cfg-simplify                                       3.9435+-0.0074     ?      3.9482+-0.0077        ?
   cmpeq-obj-to-obj-other                            12.6204+-0.2944     ?     12.6567+-0.5886        ?
   constant-test                                      8.7994+-0.1028     ?      8.8936+-0.0994        ? might be 1.0107x slower
   DataView-custom-properties                       129.5010+-0.9075          128.8144+-0.5721        
   delay-tear-off-arguments-strictmode                3.5068+-0.0095     ?      3.5123+-0.0048        ?
   destructuring-arguments-length                   174.5923+-2.5584          173.6766+-1.7415        
   destructuring-arguments                            8.7296+-0.1162     ?      8.7482+-0.1089        ?
   destructuring-swap                                 8.5469+-0.0678     ?      8.6567+-0.0734        ? might be 1.0128x slower
   direct-arguments-getbyval                          0.8412+-0.0176     ?      0.8493+-0.0396        ?
   double-pollution-getbyval                         11.0731+-0.1106     ?     11.1012+-0.0922        ?
   double-pollution-putbyoffset                       6.5065+-0.0486            6.4815+-0.0612        
   empty-string-plus-int                             10.8124+-0.0329     !     10.9680+-0.0330        ! definitely 1.0144x slower
   emscripten-cube2hash                              51.8496+-0.2716     !     55.0846+-0.6865        ! definitely 1.0624x slower
   emscripten-memops                               9249.1299+-31.3622    ^   7773.6842+-1.8794        ^ definitely 1.1898x faster
   external-arguments-getbyval                        2.0032+-0.0091     ?      2.0149+-0.0104        ?
   external-arguments-putbyval                        3.0466+-0.0545     ?      3.0606+-0.0235        ?
   Float32Array-matrix-mult                           6.3671+-0.0338            6.3595+-0.0328        
   Float32Array-to-Float64Array-set                  94.6681+-0.5339     ?     94.9547+-0.6135        ?
   Float64Array-alloc-long-lived                    101.1448+-0.4746     ?    102.1419+-1.0407        ?
   Float64Array-to-Int16Array-set                   117.5357+-0.6822     ?    117.8154+-1.5060        ?
   fold-double-to-int                                25.9809+-0.5501     !     36.6639+-0.1387        ! definitely 1.4112x slower
   for-of-iterate-array-entries                       8.5360+-0.0613     ?      8.5742+-0.0804        ?
   for-of-iterate-array-keys                          3.4720+-0.0466     ?      3.4908+-0.0385        ?
   for-of-iterate-array-values                        2.9759+-0.0244     ?      2.9765+-0.0484        ?
   function-dot-apply                                 3.1594+-0.0103     ?      3.1799+-0.0495        ?
   function-test                                      5.0785+-0.0944            5.0389+-0.0514        
   get-by-id-chain-from-try-block                     7.5553+-0.0301     ?      7.5619+-0.0848        ?
   get-by-id-proto-or-self                           26.0687+-0.2480     ?     26.1275+-0.1581        ?
   get-by-id-self-or-proto                           23.6326+-0.6337     ?     23.6905+-0.7016        ?
   get_callee_monomorphic                             4.7673+-0.1198            4.7303+-0.1285        
   get_callee_polymorphic                             4.4747+-0.0076     ?      4.4974+-0.0358        ?
   global-var-const-infer-fire-from-opt               0.9516+-0.0091     ?      0.9574+-0.0070        ?
   global-var-const-infer                             0.7522+-0.0024     ?      0.7572+-0.0037        ?
   HashMap-put-get-iterate-keys                      44.7619+-0.9343           44.1545+-0.1804          might be 1.0138x faster
   HashMap-put-get-iterate                           62.7998+-0.5412     ^     61.9374+-0.2661        ^ definitely 1.0139x faster
   HashMap-string-put-get-iterate                    55.5746+-0.8860     ?     55.7375+-0.2901        ?
   imul-double-only                                  17.7288+-0.0662     ?     17.7837+-0.1176        ?
   imul-int-only                                     15.0396+-0.2188     ?     15.0510+-0.2166        ?
   imul-mixed                                        22.1761+-0.0582     ?     22.2026+-0.1319        ?
   in-four-cases                                     25.9134+-0.0794     ?     26.0685+-0.2276        ?
   in-one-case-false                                 12.0300+-0.0305     ?     12.0662+-0.1001        ?
   in-one-case-true                                  12.0038+-0.0967     ?     12.0594+-0.1830        ?
   in-two-cases                                      12.8641+-0.1102     ?     12.8798+-0.1216        ?
   indexed-properties-in-objects                      4.7329+-0.0367            4.7075+-0.0497        
   infer-one-time-closure-ten-vars                   96.2601+-0.1294     ^     92.3286+-0.1121        ^ definitely 1.0426x faster
   infer-one-time-closure-two-vars                   28.7906+-0.1296     ?     28.7945+-0.1244        ?
   infer-one-time-closure                            28.7024+-0.1026     ?     28.7948+-0.1078        ?
   infer-one-time-deep-closure                       84.8430+-0.1152     ^     56.9038+-0.1035        ^ definitely 1.4910x faster
   inline-arguments-access                            1.5147+-0.0061     ?      1.5207+-0.0047        ?
   inline-arguments-local-escape                     22.4906+-0.2077     ?     22.8959+-0.2455        ? might be 1.0180x slower
   inline-get-scoped-var                              6.9669+-0.1486     ?      7.0623+-0.0708        ? might be 1.0137x slower
   inlined-put-by-id-transition                      15.4374+-0.2340           15.2985+-0.1957        
   int-or-other-abs-then-get-by-val                   9.4216+-0.0490            9.3885+-0.1483        
   int-or-other-abs-zero-then-get-by-val             41.2471+-0.4491           40.3351+-0.5973          might be 1.0226x faster
   int-or-other-add-then-get-by-val                   9.7139+-0.0982            9.6545+-0.0539        
   int-or-other-add                                  10.9760+-0.1059           10.9149+-0.0667        
   int-or-other-div-then-get-by-val                   6.2450+-0.0972     ?      6.3073+-0.1162        ?
   int-or-other-max-then-get-by-val                   8.7412+-0.2089     ?      8.8167+-0.1677        ?
   int-or-other-min-then-get-by-val                   7.1146+-0.0236            7.1058+-0.0689        
   int-or-other-mod-then-get-by-val                   6.1356+-0.0197            6.1326+-0.0697        
   int-or-other-mul-then-get-by-val                   6.4273+-0.1159            6.4248+-0.0679        
   int-or-other-neg-then-get-by-val                   7.8420+-0.0891            7.8318+-0.0622        
   int-or-other-neg-zero-then-get-by-val             41.6566+-0.5574     ^     39.7040+-0.2088        ^ definitely 1.0492x faster
   int-or-other-sub-then-get-by-val                  10.2182+-0.0837           10.1040+-0.0709          might be 1.0113x faster
   int-or-other-sub                                   8.0451+-0.0721     ?      8.0858+-0.0534        ?
   int-overflow-local                                 6.6569+-0.1131     ?      6.7200+-0.0302        ?
   Int16Array-alloc-long-lived                       66.9303+-0.9628     ?     67.3642+-1.2042        ?
   Int16Array-bubble-sort-with-byteLength            48.9026+-0.0874     ?     49.0868+-0.1505        ?
   Int16Array-bubble-sort                            48.4094+-0.1188     ?     48.5192+-0.1208        ?
   Int16Array-load-int-mul                            2.0529+-0.0073     ?      2.0558+-0.0041        ?
   Int16Array-to-Int32Array-set                      89.2501+-1.0251     !     93.2549+-1.0906        ! definitely 1.0449x slower
   Int32Array-alloc-huge-long-lived                 703.8271+-2.3584     ?    714.7537+-21.6199       ? might be 1.0155x slower
   Int32Array-alloc-huge                            810.9773+-6.4076          802.8170+-8.8403          might be 1.0102x faster
   Int32Array-alloc-large-long-lived                972.0261+-10.1262    ?    972.8335+-7.1647        ?
   Int32Array-alloc-large                            44.5977+-0.9395     ?     45.8318+-0.6680        ? might be 1.0277x slower
   Int32Array-alloc-long-lived                       79.5661+-0.4773           79.2518+-0.6356        
   Int32Array-alloc                                   4.4897+-0.0379     ?      4.4932+-0.0105        ?
   Int32Array-Int8Array-view-alloc                   14.8669+-0.1029     ?     15.1068+-0.1423        ? might be 1.0161x slower
   int52-spill                                       12.2416+-0.1965     ?     12.5038+-0.2038        ? might be 1.0214x slower
   Int8Array-alloc-long-lived                        66.4291+-0.6228     ?     66.8872+-0.8774        ?
   Int8Array-load-with-byteLength                     5.0474+-0.0031            5.0137+-0.0678        
   Int8Array-load                                     5.0962+-0.0615            5.0521+-0.0458        
   integer-divide                                    15.3937+-0.0949     ?     15.4865+-0.1624        ?
   integer-modulo                                     2.1891+-0.2145            2.1070+-0.0099          might be 1.0390x faster
   large-int-captured                                 9.1935+-0.1804            9.1581+-0.0859        
   large-int-neg                                     25.9562+-0.1702     ?     26.0513+-0.1309        ?
   large-int                                         23.5679+-0.2996           23.3032+-0.1711          might be 1.0114x faster
   lots-of-fields                                    10.9445+-0.0625     ?     11.0014+-0.0936        ?
   make-indexed-storage                               4.2509+-0.0167            4.2338+-0.0098        
   make-rope-cse                                      5.9967+-0.0612     ?      6.0595+-0.1166        ? might be 1.0105x slower
   marsaglia-larger-ints                            119.9557+-1.4569          118.9668+-0.0924        
   marsaglia-osr-entry                               52.6856+-0.0993           52.6714+-0.0953        
   marsaglia                                        519.7085+-0.2545          519.6917+-0.2704        
   method-on-number                                  31.4656+-0.6985           30.9481+-0.3884          might be 1.0167x faster
   negative-zero-divide                               0.3982+-0.0026     ?      0.4018+-0.0020        ?
   negative-zero-modulo                               0.3950+-0.0273            0.3844+-0.0023          might be 1.0278x faster
   negative-zero-negate                               0.3662+-0.0023     ?      0.3678+-0.0022        ?
   nested-function-parsing-random                   380.4197+-2.1140     !    389.9795+-0.6575        ! definitely 1.0251x slower
   nested-function-parsing                           48.1334+-0.3215     !     55.1116+-0.1179        ! definitely 1.1450x slower
   new-array-buffer-dead                              3.7521+-0.0281     ?      3.7751+-0.0695        ?
   new-array-buffer-push                             10.6194+-0.1366           10.5319+-0.1753        
   new-array-dead                                    28.5981+-0.1371           28.5362+-0.0919        
   new-array-push                                     6.8473+-0.0654     ?      6.9198+-0.1337        ? might be 1.0106x slower
   number-test                                        4.3251+-0.0381     ?      4.3484+-0.0068        ?
   object-closure-call                               13.2772+-0.0526           13.1896+-0.0856        
   object-test                                        4.7714+-0.0357     ?      4.7885+-0.0357        ?
   poly-stricteq                                     79.8627+-0.8227           79.8276+-0.3474        
   polymorphic-structure                             21.1588+-0.1153     ?     21.2311+-0.1305        ?
   polyvariant-monomorphic-get-by-id                 12.0118+-0.1360           11.9553+-0.1296        
   put-by-id                                         19.5739+-0.4032           19.4899+-0.2858        
   put-by-val-large-index-blank-indexing-type   
                                                     11.2603+-0.2421           11.0281+-0.1301          might be 1.0211x faster
   rare-osr-exit-on-local                            20.2075+-0.0892     ?     20.2468+-0.1238        ?
   register-pressure-from-osr                        32.3813+-0.3933           32.2131+-0.1101        
   simple-activation-demo                            35.0721+-0.0691           35.0336+-0.0793        
   slow-array-profile-convergence                     4.0309+-0.0406     ?      4.1446+-0.1861        ? might be 1.0282x slower
   slow-convergence                                   3.4580+-0.0417            3.4332+-0.0119        
   sparse-conditional                                 1.3538+-0.0179            1.3457+-0.0045        
   splice-to-remove                                  77.4692+-0.2402     ^     77.0371+-0.1217        ^ definitely 1.0056x faster
   stepanov_container                             11645.6466+-33.1074    ^  10839.5263+-145.1165      ^ definitely 1.0744x faster
   string-concat-object                               2.9939+-0.0228            2.9797+-0.0106        
   string-concat-pair-object                          2.9107+-0.0104     ?      2.9234+-0.0121        ?
   string-concat-pair-simple                         16.9617+-0.3941           16.8659+-0.3276        
   string-concat-simple                              17.4087+-0.4532           17.0738+-0.3152          might be 1.0196x faster
   string-cons-repeat                                10.5340+-0.0251           10.5234+-0.0415        
   string-cons-tower                                 11.0584+-0.0273     ^     10.9979+-0.0181        ^ definitely 1.0055x faster
   string-equality                                   43.2507+-0.1243     ?     43.4960+-0.3866        ?
   string-get-by-val-big-char                        13.3955+-0.1778     ?     13.5055+-0.0798        ?
   string-get-by-val-out-of-bounds-insane             5.7509+-0.1285     ?      5.8274+-0.1487        ? might be 1.0133x slower
   string-get-by-val-out-of-bounds                    5.2910+-0.0514     ?      5.2956+-0.0568        ?
   string-get-by-val                                  4.9002+-0.0261            4.8793+-0.0081        
   string-hash                                        2.7575+-0.0205            2.7456+-0.0082        
   string-long-ident-equality                        38.2377+-0.3184           38.1741+-0.0897        
   string-repeat-arith                               48.7239+-0.1453     ?     48.8014+-0.2497        ?
   string-sub                                        98.3621+-0.4328           97.6805+-0.9969        
   string-test                                        4.3132+-0.0074            4.2936+-0.0349        
   string-var-equality                               87.5703+-1.3191     ?     87.9372+-0.7991        ?
   structure-hoist-over-transitions                   3.3506+-0.0088     ?      3.3694+-0.0100        ?
   switch-char-constant                               3.4672+-0.0063            3.4615+-0.0065        
   switch-char                                        8.1233+-0.0841            8.0630+-0.1177        
   switch-constant                                    9.2469+-0.1221            9.2298+-0.1202        
   switch-string-basic-big-var                       20.1557+-0.0925           20.1500+-0.1726        
   switch-string-basic-big                           21.4802+-0.1505     ?     22.7984+-2.2999        ? might be 1.0614x slower
   switch-string-basic-var                           20.1364+-0.1254     ?     20.2666+-0.1744        ?
   switch-string-basic                               22.6436+-0.7883           21.3086+-0.7920          might be 1.0627x faster
   switch-string-big-length-tower-var                29.8803+-0.1209           29.8740+-0.1178        
   switch-string-length-tower-var                    21.7255+-0.1830     ?     21.7628+-0.1642        ?
   switch-string-length-tower                        16.9520+-0.1037           16.9519+-0.0940        
   switch-string-short                               16.8775+-0.1210     ?     16.9990+-0.1883        ?
   switch                                            15.5398+-0.1167     ?     15.5692+-0.1063        ?
   tear-off-arguments-simple                          2.1959+-0.0056     !      2.2208+-0.0141        ! definitely 1.0113x slower
   tear-off-arguments                                 3.5329+-0.0064     ?      3.5451+-0.0075        ?
   temporal-structure                                16.8838+-0.0810     ?     16.9399+-0.0761        ?
   to-int32-boolean                                  22.2733+-0.1311           22.2541+-0.1531        
   undefined-test                                     4.5688+-0.0326            4.5660+-0.0215        
   weird-inlining-const-prop                          2.2857+-0.0098     ?      2.2982+-0.0144        ?

   &lt;arithmetic&gt;                                     157.3890+-0.2841     ^    144.9922+-0.7820        ^ definitely 1.0855x faster
   &lt;geometric&gt; *                                     14.5568+-0.0178     ?     14.5696+-0.0132        ? might be 1.0009x slower
   &lt;harmonic&gt;                                         5.3446+-0.0213     ?      5.3543+-0.0105        ? might be 1.0018x slower

                                                        TipOfTree               OneShotClosure                                  
All benchmarks:
   &lt;arithmetic&gt;                                     223.7458+-0.3086     ^    215.6978+-0.6267        ^ definitely 1.0373x faster
   &lt;geometric&gt;                                       20.8508+-0.0224     !     20.8962+-0.0174        ! definitely 1.0022x slower
   &lt;harmonic&gt;                                         4.7888+-0.0140     ?      4.8146+-0.0156        ? might be 1.0054x slower

                                                        TipOfTree               OneShotClosure                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                                   48.6915+-0.0572     !     48.9108+-0.0710        ! definitely 1.0045x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954196</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-25 18:53:06 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; OK - yeah, this totally works after I ensure that SymbolTables are cloned (https://bugs.webkit.org/show_bug.cgi?id=124824).  Here&apos;s the performance, note the speed-ups in asm.js workloads.
&gt; 
&gt; It&apos;s important to note that the primary purpose of this patch is *not* to have a speed-up.  It&apos;s an enabler for constant closure variable inference.  The fact that it&apos;s a speed-up already is pretty cool though.
&gt; 
&gt; 
&gt; Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).
&gt; 
&gt; VMs tested:
&gt; &quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159740)
&gt; &quot;OneShotClosure&quot; at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159740)
&gt; 
&gt; Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
&gt; Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
&gt; timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.
&gt; 
&gt;                                                         TipOfTree               OneShotClosure                                  
&gt; SunSpider:
&gt;    3d-cube                                            7.5713+-0.0586     !      7.7229+-0.0608        ! definitely 1.0200x slower
&gt;    3d-morph                                           8.8579+-0.0741            8.7897+-0.0720        
&gt;    3d-raytrace                                        8.7592+-0.1628     ?      8.8390+-0.1069        ?
&gt;    access-binary-trees                                1.9928+-0.0127     ?      2.0025+-0.0112        ?
&gt;    access-fannkuch                                    7.9314+-0.1398     ?      7.9500+-0.0648        ?
&gt;    access-nbody                                       4.2195+-0.0074     ?      4.2248+-0.0070        ?
&gt;    access-nsieve                                      4.9850+-0.0291     ?      5.0058+-0.0209        ?
&gt;    bitops-3bit-bits-in-byte                           1.8067+-0.0077            1.8052+-0.0014        
&gt;    bitops-bits-in-byte                                7.2157+-0.0761     ?      7.2684+-0.0352        ?
&gt;    bitops-bitwise-and                                 2.9373+-0.0199            2.9146+-0.0356        
&gt;    bitops-nsieve-bits                                 4.5981+-0.0107     ?      4.6156+-0.0200        ?
&gt;    controlflow-recursive                              3.1256+-0.0104     ?      3.1492+-0.0180        ?
&gt;    crypto-aes                                         5.4101+-0.0269     !      5.4799+-0.0161        ! definitely 1.0129x slower
&gt;    crypto-md5                                         3.1096+-0.0217     ?      3.1138+-0.0092        ?
&gt;    crypto-sha1                                        2.9519+-0.0153     ?      2.9634+-0.0166        ?
&gt;    date-format-tofte                                 11.1999+-0.1028     ?     11.3538+-0.1139        ? might be 1.0137x slower
&gt;    date-format-xparb                                  8.6572+-0.2649            8.5946+-0.1464        
&gt;    math-cordic                                        4.2146+-0.0130            4.2111+-0.0086        
&gt;    math-partial-sums                                 10.1713+-0.0669           10.1329+-0.1217        
&gt;    math-spectral-norm                                 2.7195+-0.0091     ?      2.7237+-0.0067        ?
&gt;    regexp-dna                                        12.8214+-0.0917     ?     12.9185+-0.0695        ?
&gt;    string-base64                                      5.4529+-0.0487            5.4474+-0.0299        
&gt;    string-fasta                                      10.1685+-0.1193     ?     10.1800+-0.0628        ?
&gt;    string-tagcloud                                   14.7793+-0.1383     ?     14.8674+-0.0696        ?
&gt;    string-unpack-code                                29.8436+-0.1539     !     31.4094+-0.6887        ! definitely 1.0525x slower
&gt;    string-validate-input                              6.8875+-0.0531     !      7.0241+-0.0715        ! definitely 1.0198x slower
&gt; 
&gt;    &lt;arithmetic&gt; *                                     7.3995+-0.0220     !      7.4888+-0.0319        ! definitely 1.0121x slower
&gt;    &lt;geometric&gt;                                        5.9376+-0.0153     !      5.9720+-0.0110        ! definitely 1.0058x slower
&gt;    &lt;harmonic&gt;                                         4.8557+-0.0094     ?      4.8719+-0.0069        ? might be 1.0033x slower

The SunSpider regression is due to https://bugs.webkit.org/show_bug.cgi?id=124824, which I include in this measurement, and I think I have a fix.

&gt; 
&gt;                                                         TipOfTree               OneShotClosure                                  
&gt; LongSpider:
&gt;    3d-cube                                         2703.6911+-5.1639     ?   2705.2078+-5.7551        ?
&gt;    3d-morph                                        1503.9913+-1.0547     ?   1504.3099+-0.5120        ?
&gt;    3d-raytrace                                     1532.7155+-27.1282    ?   1536.9038+-37.7426       ?
&gt;    access-binary-trees                             2214.8490+-28.9112        2210.5071+-9.0686        
&gt;    access-fannkuch                                  668.1636+-0.3095          667.0806+-2.8580        
&gt;    access-nbody                                    1496.0519+-0.7766         1495.8079+-1.0155        
&gt;    access-nsieve                                   1545.6492+-3.3063         1545.3567+-3.5099        
&gt;    bitops-3bit-bits-in-byte                         122.0382+-1.5032          121.6812+-0.6140        
&gt;    bitops-bits-in-byte                              638.6634+-2.4622     ?    639.7084+-1.8781        ?
&gt;    bitops-nsieve-bits                              1059.5476+-20.6393        1046.5556+-0.4456          might be 1.0124x faster
&gt;    controlflow-recursive                           1490.1838+-1.1999     ?   1491.2281+-1.1711        ?
&gt;    crypto-aes                                      1657.4204+-13.1218        1650.7580+-4.9355        
&gt;    crypto-md5                                      1189.5926+-16.0090        1183.4123+-1.0479        
&gt;    crypto-sha1                                     1620.0481+-4.2877         1615.9520+-5.1804        
&gt;    date-format-tofte                               1176.7482+-6.5750     ?   1184.6930+-15.1147       ?
&gt;    date-format-xparb                               1456.9124+-19.7117    ?   1468.2665+-14.4047       ?
&gt;    math-cordic                                     1735.8039+-2.4339     ?   1756.1163+-50.6096       ? might be 1.0117x slower
&gt;    math-partial-sums                               1313.4159+-1.6790         1313.0176+-15.0448       
&gt;    math-spectral-norm                              1826.9231+-1.4185         1826.1909+-0.5086        
&gt;    string-base64                                    504.5985+-2.0241     ?    505.1897+-1.7492        ?
&gt;    string-fasta                                     995.7686+-8.7513     ?   1002.5400+-6.4549        ?
&gt;    string-tagcloud                                  379.5819+-6.1538          379.4218+-2.5465        
&gt; 
&gt;    &lt;arithmetic&gt;                                    1310.5617+-2.1037     ?   1311.3593+-2.9540        ? might be 1.0006x slower
&gt;    &lt;geometric&gt; *                                   1116.9702+-1.8255     ?   1117.3612+-1.9354        ? might be 1.0004x slower
&gt;    &lt;harmonic&gt;                                       801.9628+-3.1782          801.5110+-1.6658          might be 1.0006x faster
&gt; 
&gt;                                                         TipOfTree               OneShotClosure                                  
&gt; V8Spider:
&gt;    crypto                                            79.8400+-0.7819           79.4116+-0.1977        
&gt;    deltablue                                         97.6271+-0.5112     ?     97.7724+-0.8289        ?
&gt;    earley-boyer                                      70.9846+-0.2851     ?     71.1164+-0.5930        ?
&gt;    raytrace                                          39.5626+-0.1295     ?     39.7617+-0.1278        ?
&gt;    regexp                                            98.5962+-0.2371     !    100.6687+-0.0982        ! definitely 1.0210x slower
&gt;    richards                                         133.4647+-1.1364     ?    133.5138+-1.9033        ?
&gt;    splay                                             45.7088+-0.4910           45.5637+-0.4150        
&gt; 
&gt;    &lt;arithmetic&gt;                                      80.8263+-0.1189     ?     81.1155+-0.3498        ? might be 1.0036x slower
&gt;    &lt;geometric&gt; *                                     74.8500+-0.1056     ?     75.0742+-0.2586        ? might be 1.0030x slower
&gt;    &lt;harmonic&gt;                                        68.8617+-0.1375     ?     69.0266+-0.2115        ? might be 1.0024x slower
&gt; 
&gt;                                                         TipOfTree               OneShotClosure                                  
&gt; Octane and V8v7:
&gt;    encrypt                                           0.46539+-0.00056          0.46537+-0.00059       
&gt;    decrypt                                           8.61278+-0.10320          8.56494+-0.01297       
&gt;    deltablue                                x2       0.56811+-0.00829          0.56580+-0.00723       
&gt;    earley                                            0.86179+-0.00996          0.85311+-0.00737         might be 1.0102x faster
&gt;    boyer                                            12.28732+-0.03527    ?    12.36198+-0.14571       ?
&gt;    raytrace                                 x2       4.25234+-0.03819    ?     4.28571+-0.05769       ?
&gt;    regexp                                   x2      33.38518+-0.14569    ?    34.17660+-0.77651       ? might be 1.0237x slower
&gt;    richards                                 x2       0.43053+-0.00741          0.42879+-0.00598       
&gt;    splay                                    x2       0.62881+-0.00292    !     0.67835+-0.03390       ! definitely 1.0788x slower
&gt;    navier-stokes                            x2      10.93098+-0.01050    ^    10.74471+-0.00447       ^ definitely 1.0173x faster
&gt;    closure                                           0.41954+-0.00045    !     0.42786+-0.00080       ! definitely 1.0198x slower
&gt;    jquery                                            6.01172+-0.02131    !     6.14123+-0.01382       ! definitely 1.0215x slower
&gt;    gbemu                                    x2      71.46555+-1.23004    ?    71.81298+-0.78129       ?
&gt;    mandreel                                 x2     144.69750+-0.21674    ?   145.00739+-0.22634       ?
&gt;    pdfjs                                    x2     100.70562+-0.32917    !   101.73275+-0.42501       ! definitely 1.0102x slower
&gt;    box2d                                    x2      35.21347+-0.19488    ?    35.63574+-0.47073       ? might be 1.0120x slower
&gt; 
&gt; V8v7:
&gt;    &lt;arithmetic&gt;                                      7.66370+-0.01653    ?     7.75033+-0.09537       ? might be 1.0113x slower
&gt;    &lt;geometric&gt; *                                     2.50570+-0.00760    ?     2.52927+-0.01950       ? might be 1.0094x slower
&gt;    &lt;harmonic&gt;                                        1.02763+-0.00543    ?     1.03971+-0.01165       ? might be 1.0118x slower
&gt; 
&gt; Octane including V8v7:
&gt;    &lt;arithmetic&gt;                                     32.04672+-0.10358    !    32.26739+-0.05829       ! definitely 1.0069x slower
&gt;    &lt;geometric&gt; *                                     6.96319+-0.01762    !     7.03006+-0.02895       ! definitely 1.0096x slower
&gt;    &lt;harmonic&gt;                                        1.42556+-0.00639    ?     1.44389+-0.01382       ? might be 1.0129x slower

I think this was a fluke; here&apos;s a rerun.  Note that splay just has its usual wonkiness.

                              TipOfTree               OneShotClosure                                  
Octane and V8v7:
   encrypt                 0.46813+-0.00603          0.46747+-0.00519       
   decrypt                 8.62154+-0.10678          8.56783+-0.01162       
   deltablue      x2       0.57090+-0.00960          0.56268+-0.00253         might be 1.0146x faster
   earley                  0.85546+-0.00489    ?     0.85839+-0.00646       ?
   boyer                  12.37733+-0.09864    ?    12.41143+-0.23295       ?
   raytrace       x2       4.31331+-0.05178    ?     4.32453+-0.08173       ?
   regexp         x2      33.42525+-0.20828    !    33.84932+-0.13013       ! definitely 1.0127x slower
   richards       x2       0.43041+-0.00687    ?     0.43278+-0.01188       ?
   splay          x2       0.63683+-0.00784    ?     0.66795+-0.02938       ? might be 1.0489x slower
   navier-stokes  x2      10.98589+-0.11800         10.80932+-0.14694         might be 1.0163x faster
   closure                 0.41934+-0.00040    !     0.43101+-0.00539       ! definitely 1.0278x slower
   jquery                  6.07970+-0.09544    ?     6.16716+-0.08235       ? might be 1.0144x slower
   gbemu          x2      72.55122+-0.58218         71.87743+-1.01660       
   mandreel       x2     145.23576+-1.53236        144.96594+-0.35981       
   pdfjs          x2     101.33431+-1.30216    ?   101.72435+-0.35442       ?
   box2d          x2      35.30093+-0.15306         35.10096+-0.17036       

V8v7:
   &lt;arithmetic&gt;            7.69048+-0.02836    ?     7.72489+-0.02516       ? might be 1.0045x slower
   &lt;geometric&gt; *           2.51853+-0.00976    ?     2.52966+-0.02085       ? might be 1.0044x slower
   &lt;harmonic&gt;              1.03214+-0.00796    ?     1.03964+-0.01437       ? might be 1.0073x slower

Octane including V8v7:
   &lt;arithmetic&gt;           32.24581+-0.12979         32.21284+-0.10055         might be 1.0010x faster
   &lt;geometric&gt; *           7.00271+-0.01513    ?     7.02597+-0.03955       ? might be 1.0033x slower
   &lt;harmonic&gt;              1.43101+-0.00942    ?     1.44512+-0.01789       ? might be 1.0099x slower


&gt; 
&gt;                                                         TipOfTree               OneShotClosure                                  
&gt; Kraken:
&gt;    ai-astar                                          493.505+-0.500      ?     493.921+-0.421         ?
&gt;    audio-beat-detection                              237.374+-1.829      ?     237.832+-0.990         ?
&gt;    audio-dft                                         289.340+-0.735      ?     289.343+-0.916         ?
&gt;    audio-fft                                         143.141+-0.263            142.956+-0.148         
&gt;    audio-oscillator                                  243.913+-0.711      ?     246.344+-3.731         ?
&gt;    imaging-darkroom                                  291.706+-8.118            290.361+-6.557         
&gt;    imaging-desaturate                                158.351+-0.092      ?     159.246+-2.047         ?
&gt;    imaging-gaussian-blur                             362.795+-0.399            362.731+-0.194         
&gt;    json-parse-financial                               80.461+-0.327             80.377+-0.252         
&gt;    json-stringify-tinderbox                          106.854+-2.260      ?     109.055+-0.863         ? might be 1.0206x slower
&gt;    stanford-crypto-aes                                90.845+-0.555             90.000+-0.871         
&gt;    stanford-crypto-ccm                               101.297+-1.320             99.726+-1.234           might be 1.0158x faster
&gt;    stanford-crypto-pbkdf2                            261.004+-1.818      ?     261.205+-1.283         ?
&gt;    stanford-crypto-sha256-iterative                  114.809+-0.376      !     115.932+-0.472         ! definitely 1.0098x slower
&gt; 
&gt;    &lt;arithmetic&gt; *                                    212.528+-0.764      ?     212.788+-0.586         ? might be 1.0012x slower
&gt;    &lt;geometric&gt;                                       182.922+-0.652      ?     183.148+-0.468         ? might be 1.0012x slower
&gt;    &lt;harmonic&gt;                                        158.187+-0.643      ?     158.307+-0.414         ? might be 1.0008x slower
&gt; 
&gt;                                                         TipOfTree               OneShotClosure                                  
&gt; JSRegress:
&gt;    adapt-to-double-divide                            22.7615+-0.1060           22.6735+-0.1096        
&gt;    aliased-arguments-getbyval                         0.9530+-0.0029     !      0.9620+-0.0050        ! definitely 1.0095x slower
&gt;    allocate-big-object                                2.6239+-0.0298     ?      2.6641+-0.0943        ? might be 1.0153x slower
&gt;    arity-mismatch-inlining                            0.8865+-0.0039     !      0.8956+-0.0026        ! definitely 1.0102x slower
&gt;    array-access-polymorphic-structure                 9.7423+-0.1081     ?      9.8772+-0.0965        ? might be 1.0138x slower
&gt;    array-nonarray-polymorhpic-access                 56.4944+-0.2788           56.3676+-0.3042        
&gt;    array-with-double-add                              5.7447+-0.0591     ?      5.7655+-0.0545        ?
&gt;    array-with-double-increment                        4.2768+-0.0422     ?      4.3302+-0.0150        ? might be 1.0125x slower
&gt;    array-with-double-mul-add                          6.7851+-0.0756     ?      6.8312+-0.0309        ?
&gt;    array-with-double-sum                              8.0033+-0.0466            7.9885+-0.0655        
&gt;    array-with-int32-add-sub                          10.4787+-0.1581           10.4335+-0.1180        
&gt;    array-with-int32-or-double-sum                     8.0835+-0.1019            8.0323+-0.0831        
&gt;    ArrayBuffer-DataView-alloc-large-long-lived   
&gt;                                                     122.3827+-1.0212     ?    122.5661+-1.2554        ?
&gt;    ArrayBuffer-DataView-alloc-long-lived             34.1578+-0.7951           33.6167+-0.1725          might be 1.0161x faster
&gt;    ArrayBuffer-Int32Array-byteOffset                  7.0278+-0.0816            6.9931+-0.0103        
&gt;    ArrayBuffer-Int8Array-alloc-huge-long-lived   
&gt;                                                     215.5672+-2.2279     ?    215.9768+-3.3175        ?
&gt;    ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
&gt;                                                     166.4188+-0.9604     !    169.3677+-1.6704        ! definitely 1.0177x slower
&gt;    ArrayBuffer-Int8Array-alloc-large-long-lived   
&gt;                                                     122.1009+-2.9445     ?    123.7447+-1.8271        ? might be 1.0135x slower
&gt;    ArrayBuffer-Int8Array-alloc-long-lived-buffer   
&gt;                                                      49.7888+-0.2816     !     54.1200+-0.5532        ! definitely 1.0870x slower
&gt;    ArrayBuffer-Int8Array-alloc-long-lived            32.6590+-0.5204     ?     33.1573+-0.2388        ? might be 1.0153x slower
&gt;    ArrayBuffer-Int8Array-alloc                       29.7232+-0.2568     ?     29.7573+-0.1870        ?
&gt;    asmjs_bool_bug                                    10.1716+-0.1390           10.0934+-0.0953        
&gt;    basic-set                                         21.6522+-0.1298     ?     21.7772+-0.1838        ?
&gt;    big-int-mul                                        5.6363+-0.0267     ?      5.6424+-0.0547        ?
&gt;    boolean-test                                       4.3988+-0.0448     ?      4.4545+-0.0636        ? might be 1.0127x slower
&gt;    branch-fold                                        4.9467+-0.0161            4.9430+-0.0556        
&gt;    cast-int-to-double                                12.3768+-0.1395     ?     12.5320+-0.1578        ? might be 1.0125x slower
&gt;    cell-argument                                     15.5064+-0.1248     ?     15.5950+-0.1253        ?
&gt;    cfg-simplify                                       3.9435+-0.0074     ?      3.9482+-0.0077        ?
&gt;    cmpeq-obj-to-obj-other                            12.6204+-0.2944     ?     12.6567+-0.5886        ?
&gt;    constant-test                                      8.7994+-0.1028     ?      8.8936+-0.0994        ? might be 1.0107x slower
&gt;    DataView-custom-properties                       129.5010+-0.9075          128.8144+-0.5721        
&gt;    delay-tear-off-arguments-strictmode                3.5068+-0.0095     ?      3.5123+-0.0048        ?
&gt;    destructuring-arguments-length                   174.5923+-2.5584          173.6766+-1.7415        
&gt;    destructuring-arguments                            8.7296+-0.1162     ?      8.7482+-0.1089        ?
&gt;    destructuring-swap                                 8.5469+-0.0678     ?      8.6567+-0.0734        ? might be 1.0128x slower
&gt;    direct-arguments-getbyval                          0.8412+-0.0176     ?      0.8493+-0.0396        ?
&gt;    double-pollution-getbyval                         11.0731+-0.1106     ?     11.1012+-0.0922        ?
&gt;    double-pollution-putbyoffset                       6.5065+-0.0486            6.4815+-0.0612        
&gt;    empty-string-plus-int                             10.8124+-0.0329     !     10.9680+-0.0330        ! definitely 1.0144x slower
&gt;    emscripten-cube2hash                              51.8496+-0.2716     !     55.0846+-0.6865        ! definitely 1.0624x slower
&gt;    emscripten-memops                               9249.1299+-31.3622    ^   7773.6842+-1.8794        ^ definitely 1.1898x faster

Sweet.

&gt;    external-arguments-getbyval                        2.0032+-0.0091     ?      2.0149+-0.0104        ?
&gt;    external-arguments-putbyval                        3.0466+-0.0545     ?      3.0606+-0.0235        ?
&gt;    Float32Array-matrix-mult                           6.3671+-0.0338            6.3595+-0.0328        
&gt;    Float32Array-to-Float64Array-set                  94.6681+-0.5339     ?     94.9547+-0.6135        ?
&gt;    Float64Array-alloc-long-lived                    101.1448+-0.4746     ?    102.1419+-1.0407        ?
&gt;    Float64Array-to-Int16Array-set                   117.5357+-0.6822     ?    117.8154+-1.5060        ?
&gt;    fold-double-to-int                                25.9809+-0.5501     !     36.6639+-0.1387        ! definitely 1.4112x slower
&gt;    for-of-iterate-array-entries                       8.5360+-0.0613     ?      8.5742+-0.0804        ?
&gt;    for-of-iterate-array-keys                          3.4720+-0.0466     ?      3.4908+-0.0385        ?
&gt;    for-of-iterate-array-values                        2.9759+-0.0244     ?      2.9765+-0.0484        ?
&gt;    function-dot-apply                                 3.1594+-0.0103     ?      3.1799+-0.0495        ?
&gt;    function-test                                      5.0785+-0.0944            5.0389+-0.0514        
&gt;    get-by-id-chain-from-try-block                     7.5553+-0.0301     ?      7.5619+-0.0848        ?
&gt;    get-by-id-proto-or-self                           26.0687+-0.2480     ?     26.1275+-0.1581        ?
&gt;    get-by-id-self-or-proto                           23.6326+-0.6337     ?     23.6905+-0.7016        ?
&gt;    get_callee_monomorphic                             4.7673+-0.1198            4.7303+-0.1285        
&gt;    get_callee_polymorphic                             4.4747+-0.0076     ?      4.4974+-0.0358        ?
&gt;    global-var-const-infer-fire-from-opt               0.9516+-0.0091     ?      0.9574+-0.0070        ?
&gt;    global-var-const-infer                             0.7522+-0.0024     ?      0.7572+-0.0037        ?
&gt;    HashMap-put-get-iterate-keys                      44.7619+-0.9343           44.1545+-0.1804          might be 1.0138x faster
&gt;    HashMap-put-get-iterate                           62.7998+-0.5412     ^     61.9374+-0.2661        ^ definitely 1.0139x faster
&gt;    HashMap-string-put-get-iterate                    55.5746+-0.8860     ?     55.7375+-0.2901        ?
&gt;    imul-double-only                                  17.7288+-0.0662     ?     17.7837+-0.1176        ?
&gt;    imul-int-only                                     15.0396+-0.2188     ?     15.0510+-0.2166        ?
&gt;    imul-mixed                                        22.1761+-0.0582     ?     22.2026+-0.1319        ?
&gt;    in-four-cases                                     25.9134+-0.0794     ?     26.0685+-0.2276        ?
&gt;    in-one-case-false                                 12.0300+-0.0305     ?     12.0662+-0.1001        ?
&gt;    in-one-case-true                                  12.0038+-0.0967     ?     12.0594+-0.1830        ?
&gt;    in-two-cases                                      12.8641+-0.1102     ?     12.8798+-0.1216        ?
&gt;    indexed-properties-in-objects                      4.7329+-0.0367            4.7075+-0.0497        
&gt;    infer-one-time-closure-ten-vars                   96.2601+-0.1294     ^     92.3286+-0.1121        ^ definitely 1.0426x faster
&gt;    infer-one-time-closure-two-vars                   28.7906+-0.1296     ?     28.7945+-0.1244        ?
&gt;    infer-one-time-closure                            28.7024+-0.1026     ?     28.7948+-0.1078        ?

Yeah, notice how this isn&apos;t necessarily a speed-up even for heavy closure variable use.

&gt;    infer-one-time-deep-closure                       84.8430+-0.1152     ^     56.9038+-0.1035        ^ definitely 1.4910x faster

That&apos;s what I&apos;m talking about!

&gt;    inline-arguments-access                            1.5147+-0.0061     ?      1.5207+-0.0047        ?
&gt;    inline-arguments-local-escape                     22.4906+-0.2077     ?     22.8959+-0.2455        ? might be 1.0180x slower
&gt;    inline-get-scoped-var                              6.9669+-0.1486     ?      7.0623+-0.0708        ? might be 1.0137x slower
&gt;    inlined-put-by-id-transition                      15.4374+-0.2340           15.2985+-0.1957        
&gt;    int-or-other-abs-then-get-by-val                   9.4216+-0.0490            9.3885+-0.1483        
&gt;    int-or-other-abs-zero-then-get-by-val             41.2471+-0.4491           40.3351+-0.5973          might be 1.0226x faster
&gt;    int-or-other-add-then-get-by-val                   9.7139+-0.0982            9.6545+-0.0539        
&gt;    int-or-other-add                                  10.9760+-0.1059           10.9149+-0.0667        
&gt;    int-or-other-div-then-get-by-val                   6.2450+-0.0972     ?      6.3073+-0.1162        ?
&gt;    int-or-other-max-then-get-by-val                   8.7412+-0.2089     ?      8.8167+-0.1677        ?
&gt;    int-or-other-min-then-get-by-val                   7.1146+-0.0236            7.1058+-0.0689        
&gt;    int-or-other-mod-then-get-by-val                   6.1356+-0.0197            6.1326+-0.0697        
&gt;    int-or-other-mul-then-get-by-val                   6.4273+-0.1159            6.4248+-0.0679        
&gt;    int-or-other-neg-then-get-by-val                   7.8420+-0.0891            7.8318+-0.0622        
&gt;    int-or-other-neg-zero-then-get-by-val             41.6566+-0.5574     ^     39.7040+-0.2088        ^ definitely 1.0492x faster
&gt;    int-or-other-sub-then-get-by-val                  10.2182+-0.0837           10.1040+-0.0709          might be 1.0113x faster
&gt;    int-or-other-sub                                   8.0451+-0.0721     ?      8.0858+-0.0534        ?
&gt;    int-overflow-local                                 6.6569+-0.1131     ?      6.7200+-0.0302        ?
&gt;    Int16Array-alloc-long-lived                       66.9303+-0.9628     ?     67.3642+-1.2042        ?
&gt;    Int16Array-bubble-sort-with-byteLength            48.9026+-0.0874     ?     49.0868+-0.1505        ?
&gt;    Int16Array-bubble-sort                            48.4094+-0.1188     ?     48.5192+-0.1208        ?
&gt;    Int16Array-load-int-mul                            2.0529+-0.0073     ?      2.0558+-0.0041        ?
&gt;    Int16Array-to-Int32Array-set                      89.2501+-1.0251     !     93.2549+-1.0906        ! definitely 1.0449x slower
&gt;    Int32Array-alloc-huge-long-lived                 703.8271+-2.3584     ?    714.7537+-21.6199       ? might be 1.0155x slower
&gt;    Int32Array-alloc-huge                            810.9773+-6.4076          802.8170+-8.8403          might be 1.0102x faster
&gt;    Int32Array-alloc-large-long-lived                972.0261+-10.1262    ?    972.8335+-7.1647        ?
&gt;    Int32Array-alloc-large                            44.5977+-0.9395     ?     45.8318+-0.6680        ? might be 1.0277x slower
&gt;    Int32Array-alloc-long-lived                       79.5661+-0.4773           79.2518+-0.6356        
&gt;    Int32Array-alloc                                   4.4897+-0.0379     ?      4.4932+-0.0105        ?
&gt;    Int32Array-Int8Array-view-alloc                   14.8669+-0.1029     ?     15.1068+-0.1423        ? might be 1.0161x slower
&gt;    int52-spill                                       12.2416+-0.1965     ?     12.5038+-0.2038        ? might be 1.0214x slower
&gt;    Int8Array-alloc-long-lived                        66.4291+-0.6228     ?     66.8872+-0.8774        ?
&gt;    Int8Array-load-with-byteLength                     5.0474+-0.0031            5.0137+-0.0678        
&gt;    Int8Array-load                                     5.0962+-0.0615            5.0521+-0.0458        
&gt;    integer-divide                                    15.3937+-0.0949     ?     15.4865+-0.1624        ?
&gt;    integer-modulo                                     2.1891+-0.2145            2.1070+-0.0099          might be 1.0390x faster
&gt;    large-int-captured                                 9.1935+-0.1804            9.1581+-0.0859        
&gt;    large-int-neg                                     25.9562+-0.1702     ?     26.0513+-0.1309        ?
&gt;    large-int                                         23.5679+-0.2996           23.3032+-0.1711          might be 1.0114x faster
&gt;    lots-of-fields                                    10.9445+-0.0625     ?     11.0014+-0.0936        ?
&gt;    make-indexed-storage                               4.2509+-0.0167            4.2338+-0.0098        
&gt;    make-rope-cse                                      5.9967+-0.0612     ?      6.0595+-0.1166        ? might be 1.0105x slower
&gt;    marsaglia-larger-ints                            119.9557+-1.4569          118.9668+-0.0924        
&gt;    marsaglia-osr-entry                               52.6856+-0.0993           52.6714+-0.0953        
&gt;    marsaglia                                        519.7085+-0.2545          519.6917+-0.2704        
&gt;    method-on-number                                  31.4656+-0.6985           30.9481+-0.3884          might be 1.0167x faster
&gt;    negative-zero-divide                               0.3982+-0.0026     ?      0.4018+-0.0020        ?
&gt;    negative-zero-modulo                               0.3950+-0.0273            0.3844+-0.0023          might be 1.0278x faster
&gt;    negative-zero-negate                               0.3662+-0.0023     ?      0.3678+-0.0022        ?
&gt;    nested-function-parsing-random                   380.4197+-2.1140     !    389.9795+-0.6575        ! definitely 1.0251x slower
&gt;    nested-function-parsing                           48.1334+-0.3215     !     55.1116+-0.1179        ! definitely 1.1450x slower
&gt;    new-array-buffer-dead                              3.7521+-0.0281     ?      3.7751+-0.0695        ?
&gt;    new-array-buffer-push                             10.6194+-0.1366           10.5319+-0.1753        
&gt;    new-array-dead                                    28.5981+-0.1371           28.5362+-0.0919        
&gt;    new-array-push                                     6.8473+-0.0654     ?      6.9198+-0.1337        ? might be 1.0106x slower
&gt;    number-test                                        4.3251+-0.0381     ?      4.3484+-0.0068        ?
&gt;    object-closure-call                               13.2772+-0.0526           13.1896+-0.0856        
&gt;    object-test                                        4.7714+-0.0357     ?      4.7885+-0.0357        ?
&gt;    poly-stricteq                                     79.8627+-0.8227           79.8276+-0.3474        
&gt;    polymorphic-structure                             21.1588+-0.1153     ?     21.2311+-0.1305        ?
&gt;    polyvariant-monomorphic-get-by-id                 12.0118+-0.1360           11.9553+-0.1296        
&gt;    put-by-id                                         19.5739+-0.4032           19.4899+-0.2858        
&gt;    put-by-val-large-index-blank-indexing-type   
&gt;                                                      11.2603+-0.2421           11.0281+-0.1301          might be 1.0211x faster
&gt;    rare-osr-exit-on-local                            20.2075+-0.0892     ?     20.2468+-0.1238        ?
&gt;    register-pressure-from-osr                        32.3813+-0.3933           32.2131+-0.1101        
&gt;    simple-activation-demo                            35.0721+-0.0691           35.0336+-0.0793        
&gt;    slow-array-profile-convergence                     4.0309+-0.0406     ?      4.1446+-0.1861        ? might be 1.0282x slower
&gt;    slow-convergence                                   3.4580+-0.0417            3.4332+-0.0119        
&gt;    sparse-conditional                                 1.3538+-0.0179            1.3457+-0.0045        
&gt;    splice-to-remove                                  77.4692+-0.2402     ^     77.0371+-0.1217        ^ definitely 1.0056x faster
&gt;    stepanov_container                             11645.6466+-33.1074    ^  10839.5263+-145.1165      ^ definitely 1.0744x faster

Awesome.

&gt;    string-concat-object                               2.9939+-0.0228            2.9797+-0.0106        
&gt;    string-concat-pair-object                          2.9107+-0.0104     ?      2.9234+-0.0121        ?
&gt;    string-concat-pair-simple                         16.9617+-0.3941           16.8659+-0.3276        
&gt;    string-concat-simple                              17.4087+-0.4532           17.0738+-0.3152          might be 1.0196x faster
&gt;    string-cons-repeat                                10.5340+-0.0251           10.5234+-0.0415        
&gt;    string-cons-tower                                 11.0584+-0.0273     ^     10.9979+-0.0181        ^ definitely 1.0055x faster
&gt;    string-equality                                   43.2507+-0.1243     ?     43.4960+-0.3866        ?
&gt;    string-get-by-val-big-char                        13.3955+-0.1778     ?     13.5055+-0.0798        ?
&gt;    string-get-by-val-out-of-bounds-insane             5.7509+-0.1285     ?      5.8274+-0.1487        ? might be 1.0133x slower
&gt;    string-get-by-val-out-of-bounds                    5.2910+-0.0514     ?      5.2956+-0.0568        ?
&gt;    string-get-by-val                                  4.9002+-0.0261            4.8793+-0.0081        
&gt;    string-hash                                        2.7575+-0.0205            2.7456+-0.0082        
&gt;    string-long-ident-equality                        38.2377+-0.3184           38.1741+-0.0897        
&gt;    string-repeat-arith                               48.7239+-0.1453     ?     48.8014+-0.2497        ?
&gt;    string-sub                                        98.3621+-0.4328           97.6805+-0.9969        
&gt;    string-test                                        4.3132+-0.0074            4.2936+-0.0349        
&gt;    string-var-equality                               87.5703+-1.3191     ?     87.9372+-0.7991        ?
&gt;    structure-hoist-over-transitions                   3.3506+-0.0088     ?      3.3694+-0.0100        ?
&gt;    switch-char-constant                               3.4672+-0.0063            3.4615+-0.0065        
&gt;    switch-char                                        8.1233+-0.0841            8.0630+-0.1177        
&gt;    switch-constant                                    9.2469+-0.1221            9.2298+-0.1202        
&gt;    switch-string-basic-big-var                       20.1557+-0.0925           20.1500+-0.1726        
&gt;    switch-string-basic-big                           21.4802+-0.1505     ?     22.7984+-2.2999        ? might be 1.0614x slower
&gt;    switch-string-basic-var                           20.1364+-0.1254     ?     20.2666+-0.1744        ?
&gt;    switch-string-basic                               22.6436+-0.7883           21.3086+-0.7920          might be 1.0627x faster
&gt;    switch-string-big-length-tower-var                29.8803+-0.1209           29.8740+-0.1178        
&gt;    switch-string-length-tower-var                    21.7255+-0.1830     ?     21.7628+-0.1642        ?
&gt;    switch-string-length-tower                        16.9520+-0.1037           16.9519+-0.0940        
&gt;    switch-string-short                               16.8775+-0.1210     ?     16.9990+-0.1883        ?
&gt;    switch                                            15.5398+-0.1167     ?     15.5692+-0.1063        ?
&gt;    tear-off-arguments-simple                          2.1959+-0.0056     !      2.2208+-0.0141        ! definitely 1.0113x slower
&gt;    tear-off-arguments                                 3.5329+-0.0064     ?      3.5451+-0.0075        ?
&gt;    temporal-structure                                16.8838+-0.0810     ?     16.9399+-0.0761        ?
&gt;    to-int32-boolean                                  22.2733+-0.1311           22.2541+-0.1531        
&gt;    undefined-test                                     4.5688+-0.0326            4.5660+-0.0215        
&gt;    weird-inlining-const-prop                          2.2857+-0.0098     ?      2.2982+-0.0144        ?
&gt; 
&gt;    &lt;arithmetic&gt;                                     157.3890+-0.2841     ^    144.9922+-0.7820        ^ definitely 1.0855x faster
&gt;    &lt;geometric&gt; *                                     14.5568+-0.0178     ?     14.5696+-0.0132        ? might be 1.0009x slower
&gt;    &lt;harmonic&gt;                                         5.3446+-0.0213     ?      5.3543+-0.0105        ? might be 1.0018x slower
&gt; 
&gt;                                                         TipOfTree               OneShotClosure                                  
&gt; All benchmarks:
&gt;    &lt;arithmetic&gt;                                     223.7458+-0.3086     ^    215.6978+-0.6267        ^ definitely 1.0373x faster
&gt;    &lt;geometric&gt;                                       20.8508+-0.0224     !     20.8962+-0.0174        ! definitely 1.0022x slower
&gt;    &lt;harmonic&gt;                                         4.7888+-0.0140     ?      4.8146+-0.0156        ? might be 1.0054x slower
&gt; 
&gt;                                                         TipOfTree               OneShotClosure                                  
&gt; Geomean of preferred means:
&gt;    &lt;scaled-result&gt;                                   48.6915+-0.0572     !     48.9108+-0.0710        ! definitely 1.0045x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954200</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-25 19:14:37 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; OK - yeah, this totally works after I ensure that SymbolTables are cloned (https://bugs.webkit.org/show_bug.cgi?id=124824).  Here&apos;s the performance, note the speed-ups in asm.js workloads.
&gt; &gt; 
&gt; &gt; It&apos;s important to note that the primary purpose of this patch is *not* to have a speed-up.  It&apos;s an enabler for constant closure variable inference.  The fact that it&apos;s a speed-up already is pretty cool though.
&gt; &gt; 
&gt; &gt; 
&gt; &gt; Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).
&gt; &gt; 
&gt; &gt; VMs tested:
&gt; &gt; &quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159740)
&gt; &gt; &quot;OneShotClosure&quot; at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159740)
&gt; &gt; 
&gt; &gt; Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
&gt; &gt; Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
&gt; &gt; timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.
&gt; &gt; 
&gt; &gt;                                                         TipOfTree               OneShotClosure                                  
&gt; &gt; SunSpider:
&gt; &gt;    3d-cube                                            7.5713+-0.0586     !      7.7229+-0.0608        ! definitely 1.0200x slower
&gt; &gt;    3d-morph                                           8.8579+-0.0741            8.7897+-0.0720        
&gt; &gt;    3d-raytrace                                        8.7592+-0.1628     ?      8.8390+-0.1069        ?
&gt; &gt;    access-binary-trees                                1.9928+-0.0127     ?      2.0025+-0.0112        ?
&gt; &gt;    access-fannkuch                                    7.9314+-0.1398     ?      7.9500+-0.0648        ?
&gt; &gt;    access-nbody                                       4.2195+-0.0074     ?      4.2248+-0.0070        ?
&gt; &gt;    access-nsieve                                      4.9850+-0.0291     ?      5.0058+-0.0209        ?
&gt; &gt;    bitops-3bit-bits-in-byte                           1.8067+-0.0077            1.8052+-0.0014        
&gt; &gt;    bitops-bits-in-byte                                7.2157+-0.0761     ?      7.2684+-0.0352        ?
&gt; &gt;    bitops-bitwise-and                                 2.9373+-0.0199            2.9146+-0.0356        
&gt; &gt;    bitops-nsieve-bits                                 4.5981+-0.0107     ?      4.6156+-0.0200        ?
&gt; &gt;    controlflow-recursive                              3.1256+-0.0104     ?      3.1492+-0.0180        ?
&gt; &gt;    crypto-aes                                         5.4101+-0.0269     !      5.4799+-0.0161        ! definitely 1.0129x slower
&gt; &gt;    crypto-md5                                         3.1096+-0.0217     ?      3.1138+-0.0092        ?
&gt; &gt;    crypto-sha1                                        2.9519+-0.0153     ?      2.9634+-0.0166        ?
&gt; &gt;    date-format-tofte                                 11.1999+-0.1028     ?     11.3538+-0.1139        ? might be 1.0137x slower
&gt; &gt;    date-format-xparb                                  8.6572+-0.2649            8.5946+-0.1464        
&gt; &gt;    math-cordic                                        4.2146+-0.0130            4.2111+-0.0086        
&gt; &gt;    math-partial-sums                                 10.1713+-0.0669           10.1329+-0.1217        
&gt; &gt;    math-spectral-norm                                 2.7195+-0.0091     ?      2.7237+-0.0067        ?
&gt; &gt;    regexp-dna                                        12.8214+-0.0917     ?     12.9185+-0.0695        ?
&gt; &gt;    string-base64                                      5.4529+-0.0487            5.4474+-0.0299        
&gt; &gt;    string-fasta                                      10.1685+-0.1193     ?     10.1800+-0.0628        ?
&gt; &gt;    string-tagcloud                                   14.7793+-0.1383     ?     14.8674+-0.0696        ?
&gt; &gt;    string-unpack-code                                29.8436+-0.1539     !     31.4094+-0.6887        ! definitely 1.0525x slower
&gt; &gt;    string-validate-input                              6.8875+-0.0531     !      7.0241+-0.0715        ! definitely 1.0198x slower
&gt; &gt; 
&gt; &gt;    &lt;arithmetic&gt; *                                     7.3995+-0.0220     !      7.4888+-0.0319        ! definitely 1.0121x slower
&gt; &gt;    &lt;geometric&gt;                                        5.9376+-0.0153     !      5.9720+-0.0110        ! definitely 1.0058x slower
&gt; &gt;    &lt;harmonic&gt;                                         4.8557+-0.0094     ?      4.8719+-0.0069        ? might be 1.0033x slower
&gt; 
&gt; The SunSpider regression is due to https://bugs.webkit.org/show_bug.cgi?id=124824, which I include in this measurement, and I think I have a fix.

Nope, no fix.  We will basically have to eat this slow-down.

&gt; 
&gt; &gt; 
&gt; &gt;                                                         TipOfTree               OneShotClosure                                  
&gt; &gt; LongSpider:
&gt; &gt;    3d-cube                                         2703.6911+-5.1639     ?   2705.2078+-5.7551        ?
&gt; &gt;    3d-morph                                        1503.9913+-1.0547     ?   1504.3099+-0.5120        ?
&gt; &gt;    3d-raytrace                                     1532.7155+-27.1282    ?   1536.9038+-37.7426       ?
&gt; &gt;    access-binary-trees                             2214.8490+-28.9112        2210.5071+-9.0686        
&gt; &gt;    access-fannkuch                                  668.1636+-0.3095          667.0806+-2.8580        
&gt; &gt;    access-nbody                                    1496.0519+-0.7766         1495.8079+-1.0155        
&gt; &gt;    access-nsieve                                   1545.6492+-3.3063         1545.3567+-3.5099        
&gt; &gt;    bitops-3bit-bits-in-byte                         122.0382+-1.5032          121.6812+-0.6140        
&gt; &gt;    bitops-bits-in-byte                              638.6634+-2.4622     ?    639.7084+-1.8781        ?
&gt; &gt;    bitops-nsieve-bits                              1059.5476+-20.6393        1046.5556+-0.4456          might be 1.0124x faster
&gt; &gt;    controlflow-recursive                           1490.1838+-1.1999     ?   1491.2281+-1.1711        ?
&gt; &gt;    crypto-aes                                      1657.4204+-13.1218        1650.7580+-4.9355        
&gt; &gt;    crypto-md5                                      1189.5926+-16.0090        1183.4123+-1.0479        
&gt; &gt;    crypto-sha1                                     1620.0481+-4.2877         1615.9520+-5.1804        
&gt; &gt;    date-format-tofte                               1176.7482+-6.5750     ?   1184.6930+-15.1147       ?
&gt; &gt;    date-format-xparb                               1456.9124+-19.7117    ?   1468.2665+-14.4047       ?
&gt; &gt;    math-cordic                                     1735.8039+-2.4339     ?   1756.1163+-50.6096       ? might be 1.0117x slower
&gt; &gt;    math-partial-sums                               1313.4159+-1.6790         1313.0176+-15.0448       
&gt; &gt;    math-spectral-norm                              1826.9231+-1.4185         1826.1909+-0.5086        
&gt; &gt;    string-base64                                    504.5985+-2.0241     ?    505.1897+-1.7492        ?
&gt; &gt;    string-fasta                                     995.7686+-8.7513     ?   1002.5400+-6.4549        ?
&gt; &gt;    string-tagcloud                                  379.5819+-6.1538          379.4218+-2.5465        
&gt; &gt; 
&gt; &gt;    &lt;arithmetic&gt;                                    1310.5617+-2.1037     ?   1311.3593+-2.9540        ? might be 1.0006x slower
&gt; &gt;    &lt;geometric&gt; *                                   1116.9702+-1.8255     ?   1117.3612+-1.9354        ? might be 1.0004x slower
&gt; &gt;    &lt;harmonic&gt;                                       801.9628+-3.1782          801.5110+-1.6658          might be 1.0006x faster
&gt; &gt; 
&gt; &gt;                                                         TipOfTree               OneShotClosure                                  
&gt; &gt; V8Spider:
&gt; &gt;    crypto                                            79.8400+-0.7819           79.4116+-0.1977        
&gt; &gt;    deltablue                                         97.6271+-0.5112     ?     97.7724+-0.8289        ?
&gt; &gt;    earley-boyer                                      70.9846+-0.2851     ?     71.1164+-0.5930        ?
&gt; &gt;    raytrace                                          39.5626+-0.1295     ?     39.7617+-0.1278        ?
&gt; &gt;    regexp                                            98.5962+-0.2371     !    100.6687+-0.0982        ! definitely 1.0210x slower
&gt; &gt;    richards                                         133.4647+-1.1364     ?    133.5138+-1.9033        ?
&gt; &gt;    splay                                             45.7088+-0.4910           45.5637+-0.4150        
&gt; &gt; 
&gt; &gt;    &lt;arithmetic&gt;                                      80.8263+-0.1189     ?     81.1155+-0.3498        ? might be 1.0036x slower
&gt; &gt;    &lt;geometric&gt; *                                     74.8500+-0.1056     ?     75.0742+-0.2586        ? might be 1.0030x slower
&gt; &gt;    &lt;harmonic&gt;                                        68.8617+-0.1375     ?     69.0266+-0.2115        ? might be 1.0024x slower
&gt; &gt; 
&gt; &gt;                                                         TipOfTree               OneShotClosure                                  
&gt; &gt; Octane and V8v7:
&gt; &gt;    encrypt                                           0.46539+-0.00056          0.46537+-0.00059       
&gt; &gt;    decrypt                                           8.61278+-0.10320          8.56494+-0.01297       
&gt; &gt;    deltablue                                x2       0.56811+-0.00829          0.56580+-0.00723       
&gt; &gt;    earley                                            0.86179+-0.00996          0.85311+-0.00737         might be 1.0102x faster
&gt; &gt;    boyer                                            12.28732+-0.03527    ?    12.36198+-0.14571       ?
&gt; &gt;    raytrace                                 x2       4.25234+-0.03819    ?     4.28571+-0.05769       ?
&gt; &gt;    regexp                                   x2      33.38518+-0.14569    ?    34.17660+-0.77651       ? might be 1.0237x slower
&gt; &gt;    richards                                 x2       0.43053+-0.00741          0.42879+-0.00598       
&gt; &gt;    splay                                    x2       0.62881+-0.00292    !     0.67835+-0.03390       ! definitely 1.0788x slower
&gt; &gt;    navier-stokes                            x2      10.93098+-0.01050    ^    10.74471+-0.00447       ^ definitely 1.0173x faster
&gt; &gt;    closure                                           0.41954+-0.00045    !     0.42786+-0.00080       ! definitely 1.0198x slower
&gt; &gt;    jquery                                            6.01172+-0.02131    !     6.14123+-0.01382       ! definitely 1.0215x slower
&gt; &gt;    gbemu                                    x2      71.46555+-1.23004    ?    71.81298+-0.78129       ?
&gt; &gt;    mandreel                                 x2     144.69750+-0.21674    ?   145.00739+-0.22634       ?
&gt; &gt;    pdfjs                                    x2     100.70562+-0.32917    !   101.73275+-0.42501       ! definitely 1.0102x slower
&gt; &gt;    box2d                                    x2      35.21347+-0.19488    ?    35.63574+-0.47073       ? might be 1.0120x slower
&gt; &gt; 
&gt; &gt; V8v7:
&gt; &gt;    &lt;arithmetic&gt;                                      7.66370+-0.01653    ?     7.75033+-0.09537       ? might be 1.0113x slower
&gt; &gt;    &lt;geometric&gt; *                                     2.50570+-0.00760    ?     2.52927+-0.01950       ? might be 1.0094x slower
&gt; &gt;    &lt;harmonic&gt;                                        1.02763+-0.00543    ?     1.03971+-0.01165       ? might be 1.0118x slower
&gt; &gt; 
&gt; &gt; Octane including V8v7:
&gt; &gt;    &lt;arithmetic&gt;                                     32.04672+-0.10358    !    32.26739+-0.05829       ! definitely 1.0069x slower
&gt; &gt;    &lt;geometric&gt; *                                     6.96319+-0.01762    !     7.03006+-0.02895       ! definitely 1.0096x slower
&gt; &gt;    &lt;harmonic&gt;                                        1.42556+-0.00639    ?     1.44389+-0.01382       ? might be 1.0129x slower
&gt; 
&gt; I think this was a fluke; here&apos;s a rerun.  Note that splay just has its usual wonkiness.
&gt; 
&gt;                               TipOfTree               OneShotClosure                                  
&gt; Octane and V8v7:
&gt;    encrypt                 0.46813+-0.00603          0.46747+-0.00519       
&gt;    decrypt                 8.62154+-0.10678          8.56783+-0.01162       
&gt;    deltablue      x2       0.57090+-0.00960          0.56268+-0.00253         might be 1.0146x faster
&gt;    earley                  0.85546+-0.00489    ?     0.85839+-0.00646       ?
&gt;    boyer                  12.37733+-0.09864    ?    12.41143+-0.23295       ?
&gt;    raytrace       x2       4.31331+-0.05178    ?     4.32453+-0.08173       ?
&gt;    regexp         x2      33.42525+-0.20828    !    33.84932+-0.13013       ! definitely 1.0127x slower
&gt;    richards       x2       0.43041+-0.00687    ?     0.43278+-0.01188       ?
&gt;    splay          x2       0.63683+-0.00784    ?     0.66795+-0.02938       ? might be 1.0489x slower
&gt;    navier-stokes  x2      10.98589+-0.11800         10.80932+-0.14694         might be 1.0163x faster
&gt;    closure                 0.41934+-0.00040    !     0.43101+-0.00539       ! definitely 1.0278x slower
&gt;    jquery                  6.07970+-0.09544    ?     6.16716+-0.08235       ? might be 1.0144x slower
&gt;    gbemu          x2      72.55122+-0.58218         71.87743+-1.01660       
&gt;    mandreel       x2     145.23576+-1.53236        144.96594+-0.35981       
&gt;    pdfjs          x2     101.33431+-1.30216    ?   101.72435+-0.35442       ?
&gt;    box2d          x2      35.30093+-0.15306         35.10096+-0.17036       
&gt; 
&gt; V8v7:
&gt;    &lt;arithmetic&gt;            7.69048+-0.02836    ?     7.72489+-0.02516       ? might be 1.0045x slower
&gt;    &lt;geometric&gt; *           2.51853+-0.00976    ?     2.52966+-0.02085       ? might be 1.0044x slower
&gt;    &lt;harmonic&gt;              1.03214+-0.00796    ?     1.03964+-0.01437       ? might be 1.0073x slower
&gt; 
&gt; Octane including V8v7:
&gt;    &lt;arithmetic&gt;           32.24581+-0.12979         32.21284+-0.10055         might be 1.0010x faster
&gt;    &lt;geometric&gt; *           7.00271+-0.01513    ?     7.02597+-0.03955       ? might be 1.0033x slower
&gt;    &lt;harmonic&gt;              1.43101+-0.00942    ?     1.44512+-0.01789       ? might be 1.0099x slower
&gt; 
&gt; 
&gt; &gt; 
&gt; &gt;                                                         TipOfTree               OneShotClosure                                  
&gt; &gt; Kraken:
&gt; &gt;    ai-astar                                          493.505+-0.500      ?     493.921+-0.421         ?
&gt; &gt;    audio-beat-detection                              237.374+-1.829      ?     237.832+-0.990         ?
&gt; &gt;    audio-dft                                         289.340+-0.735      ?     289.343+-0.916         ?
&gt; &gt;    audio-fft                                         143.141+-0.263            142.956+-0.148         
&gt; &gt;    audio-oscillator                                  243.913+-0.711      ?     246.344+-3.731         ?
&gt; &gt;    imaging-darkroom                                  291.706+-8.118            290.361+-6.557         
&gt; &gt;    imaging-desaturate                                158.351+-0.092      ?     159.246+-2.047         ?
&gt; &gt;    imaging-gaussian-blur                             362.795+-0.399            362.731+-0.194         
&gt; &gt;    json-parse-financial                               80.461+-0.327             80.377+-0.252         
&gt; &gt;    json-stringify-tinderbox                          106.854+-2.260      ?     109.055+-0.863         ? might be 1.0206x slower
&gt; &gt;    stanford-crypto-aes                                90.845+-0.555             90.000+-0.871         
&gt; &gt;    stanford-crypto-ccm                               101.297+-1.320             99.726+-1.234           might be 1.0158x faster
&gt; &gt;    stanford-crypto-pbkdf2                            261.004+-1.818      ?     261.205+-1.283         ?
&gt; &gt;    stanford-crypto-sha256-iterative                  114.809+-0.376      !     115.932+-0.472         ! definitely 1.0098x slower
&gt; &gt; 
&gt; &gt;    &lt;arithmetic&gt; *                                    212.528+-0.764      ?     212.788+-0.586         ? might be 1.0012x slower
&gt; &gt;    &lt;geometric&gt;                                       182.922+-0.652      ?     183.148+-0.468         ? might be 1.0012x slower
&gt; &gt;    &lt;harmonic&gt;                                        158.187+-0.643      ?     158.307+-0.414         ? might be 1.0008x slower
&gt; &gt; 
&gt; &gt;                                                         TipOfTree               OneShotClosure                                  
&gt; &gt; JSRegress:
&gt; &gt;    adapt-to-double-divide                            22.7615+-0.1060           22.6735+-0.1096        
&gt; &gt;    aliased-arguments-getbyval                         0.9530+-0.0029     !      0.9620+-0.0050        ! definitely 1.0095x slower
&gt; &gt;    allocate-big-object                                2.6239+-0.0298     ?      2.6641+-0.0943        ? might be 1.0153x slower
&gt; &gt;    arity-mismatch-inlining                            0.8865+-0.0039     !      0.8956+-0.0026        ! definitely 1.0102x slower
&gt; &gt;    array-access-polymorphic-structure                 9.7423+-0.1081     ?      9.8772+-0.0965        ? might be 1.0138x slower
&gt; &gt;    array-nonarray-polymorhpic-access                 56.4944+-0.2788           56.3676+-0.3042        
&gt; &gt;    array-with-double-add                              5.7447+-0.0591     ?      5.7655+-0.0545        ?
&gt; &gt;    array-with-double-increment                        4.2768+-0.0422     ?      4.3302+-0.0150        ? might be 1.0125x slower
&gt; &gt;    array-with-double-mul-add                          6.7851+-0.0756     ?      6.8312+-0.0309        ?
&gt; &gt;    array-with-double-sum                              8.0033+-0.0466            7.9885+-0.0655        
&gt; &gt;    array-with-int32-add-sub                          10.4787+-0.1581           10.4335+-0.1180        
&gt; &gt;    array-with-int32-or-double-sum                     8.0835+-0.1019            8.0323+-0.0831        
&gt; &gt;    ArrayBuffer-DataView-alloc-large-long-lived   
&gt; &gt;                                                     122.3827+-1.0212     ?    122.5661+-1.2554        ?
&gt; &gt;    ArrayBuffer-DataView-alloc-long-lived             34.1578+-0.7951           33.6167+-0.1725          might be 1.0161x faster
&gt; &gt;    ArrayBuffer-Int32Array-byteOffset                  7.0278+-0.0816            6.9931+-0.0103        
&gt; &gt;    ArrayBuffer-Int8Array-alloc-huge-long-lived   
&gt; &gt;                                                     215.5672+-2.2279     ?    215.9768+-3.3175        ?
&gt; &gt;    ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
&gt; &gt;                                                     166.4188+-0.9604     !    169.3677+-1.6704        ! definitely 1.0177x slower
&gt; &gt;    ArrayBuffer-Int8Array-alloc-large-long-lived   
&gt; &gt;                                                     122.1009+-2.9445     ?    123.7447+-1.8271        ? might be 1.0135x slower
&gt; &gt;    ArrayBuffer-Int8Array-alloc-long-lived-buffer   
&gt; &gt;                                                      49.7888+-0.2816     !     54.1200+-0.5532        ! definitely 1.0870x slower
&gt; &gt;    ArrayBuffer-Int8Array-alloc-long-lived            32.6590+-0.5204     ?     33.1573+-0.2388        ? might be 1.0153x slower
&gt; &gt;    ArrayBuffer-Int8Array-alloc                       29.7232+-0.2568     ?     29.7573+-0.1870        ?
&gt; &gt;    asmjs_bool_bug                                    10.1716+-0.1390           10.0934+-0.0953        
&gt; &gt;    basic-set                                         21.6522+-0.1298     ?     21.7772+-0.1838        ?
&gt; &gt;    big-int-mul                                        5.6363+-0.0267     ?      5.6424+-0.0547        ?
&gt; &gt;    boolean-test                                       4.3988+-0.0448     ?      4.4545+-0.0636        ? might be 1.0127x slower
&gt; &gt;    branch-fold                                        4.9467+-0.0161            4.9430+-0.0556        
&gt; &gt;    cast-int-to-double                                12.3768+-0.1395     ?     12.5320+-0.1578        ? might be 1.0125x slower
&gt; &gt;    cell-argument                                     15.5064+-0.1248     ?     15.5950+-0.1253        ?
&gt; &gt;    cfg-simplify                                       3.9435+-0.0074     ?      3.9482+-0.0077        ?
&gt; &gt;    cmpeq-obj-to-obj-other                            12.6204+-0.2944     ?     12.6567+-0.5886        ?
&gt; &gt;    constant-test                                      8.7994+-0.1028     ?      8.8936+-0.0994        ? might be 1.0107x slower
&gt; &gt;    DataView-custom-properties                       129.5010+-0.9075          128.8144+-0.5721        
&gt; &gt;    delay-tear-off-arguments-strictmode                3.5068+-0.0095     ?      3.5123+-0.0048        ?
&gt; &gt;    destructuring-arguments-length                   174.5923+-2.5584          173.6766+-1.7415        
&gt; &gt;    destructuring-arguments                            8.7296+-0.1162     ?      8.7482+-0.1089        ?
&gt; &gt;    destructuring-swap                                 8.5469+-0.0678     ?      8.6567+-0.0734        ? might be 1.0128x slower
&gt; &gt;    direct-arguments-getbyval                          0.8412+-0.0176     ?      0.8493+-0.0396        ?
&gt; &gt;    double-pollution-getbyval                         11.0731+-0.1106     ?     11.1012+-0.0922        ?
&gt; &gt;    double-pollution-putbyoffset                       6.5065+-0.0486            6.4815+-0.0612        
&gt; &gt;    empty-string-plus-int                             10.8124+-0.0329     !     10.9680+-0.0330        ! definitely 1.0144x slower
&gt; &gt;    emscripten-cube2hash                              51.8496+-0.2716     !     55.0846+-0.6865        ! definitely 1.0624x slower
&gt; &gt;    emscripten-memops                               9249.1299+-31.3622    ^   7773.6842+-1.8794        ^ definitely 1.1898x faster
&gt; 
&gt; Sweet.
&gt; 
&gt; &gt;    external-arguments-getbyval                        2.0032+-0.0091     ?      2.0149+-0.0104        ?
&gt; &gt;    external-arguments-putbyval                        3.0466+-0.0545     ?      3.0606+-0.0235        ?
&gt; &gt;    Float32Array-matrix-mult                           6.3671+-0.0338            6.3595+-0.0328        
&gt; &gt;    Float32Array-to-Float64Array-set                  94.6681+-0.5339     ?     94.9547+-0.6135        ?
&gt; &gt;    Float64Array-alloc-long-lived                    101.1448+-0.4746     ?    102.1419+-1.0407        ?
&gt; &gt;    Float64Array-to-Int16Array-set                   117.5357+-0.6822     ?    117.8154+-1.5060        ?
&gt; &gt;    fold-double-to-int                                25.9809+-0.5501     !     36.6639+-0.1387        ! definitely 1.4112x slower
&gt; &gt;    for-of-iterate-array-entries                       8.5360+-0.0613     ?      8.5742+-0.0804        ?
&gt; &gt;    for-of-iterate-array-keys                          3.4720+-0.0466     ?      3.4908+-0.0385        ?
&gt; &gt;    for-of-iterate-array-values                        2.9759+-0.0244     ?      2.9765+-0.0484        ?
&gt; &gt;    function-dot-apply                                 3.1594+-0.0103     ?      3.1799+-0.0495        ?
&gt; &gt;    function-test                                      5.0785+-0.0944            5.0389+-0.0514        
&gt; &gt;    get-by-id-chain-from-try-block                     7.5553+-0.0301     ?      7.5619+-0.0848        ?
&gt; &gt;    get-by-id-proto-or-self                           26.0687+-0.2480     ?     26.1275+-0.1581        ?
&gt; &gt;    get-by-id-self-or-proto                           23.6326+-0.6337     ?     23.6905+-0.7016        ?
&gt; &gt;    get_callee_monomorphic                             4.7673+-0.1198            4.7303+-0.1285        
&gt; &gt;    get_callee_polymorphic                             4.4747+-0.0076     ?      4.4974+-0.0358        ?
&gt; &gt;    global-var-const-infer-fire-from-opt               0.9516+-0.0091     ?      0.9574+-0.0070        ?
&gt; &gt;    global-var-const-infer                             0.7522+-0.0024     ?      0.7572+-0.0037        ?
&gt; &gt;    HashMap-put-get-iterate-keys                      44.7619+-0.9343           44.1545+-0.1804          might be 1.0138x faster
&gt; &gt;    HashMap-put-get-iterate                           62.7998+-0.5412     ^     61.9374+-0.2661        ^ definitely 1.0139x faster
&gt; &gt;    HashMap-string-put-get-iterate                    55.5746+-0.8860     ?     55.7375+-0.2901        ?
&gt; &gt;    imul-double-only                                  17.7288+-0.0662     ?     17.7837+-0.1176        ?
&gt; &gt;    imul-int-only                                     15.0396+-0.2188     ?     15.0510+-0.2166        ?
&gt; &gt;    imul-mixed                                        22.1761+-0.0582     ?     22.2026+-0.1319        ?
&gt; &gt;    in-four-cases                                     25.9134+-0.0794     ?     26.0685+-0.2276        ?
&gt; &gt;    in-one-case-false                                 12.0300+-0.0305     ?     12.0662+-0.1001        ?
&gt; &gt;    in-one-case-true                                  12.0038+-0.0967     ?     12.0594+-0.1830        ?
&gt; &gt;    in-two-cases                                      12.8641+-0.1102     ?     12.8798+-0.1216        ?
&gt; &gt;    indexed-properties-in-objects                      4.7329+-0.0367            4.7075+-0.0497        
&gt; &gt;    infer-one-time-closure-ten-vars                   96.2601+-0.1294     ^     92.3286+-0.1121        ^ definitely 1.0426x faster
&gt; &gt;    infer-one-time-closure-two-vars                   28.7906+-0.1296     ?     28.7945+-0.1244        ?
&gt; &gt;    infer-one-time-closure                            28.7024+-0.1026     ?     28.7948+-0.1078        ?
&gt; 
&gt; Yeah, notice how this isn&apos;t necessarily a speed-up even for heavy closure variable use.
&gt; 
&gt; &gt;    infer-one-time-deep-closure                       84.8430+-0.1152     ^     56.9038+-0.1035        ^ definitely 1.4910x faster
&gt; 
&gt; That&apos;s what I&apos;m talking about!
&gt; 
&gt; &gt;    inline-arguments-access                            1.5147+-0.0061     ?      1.5207+-0.0047        ?
&gt; &gt;    inline-arguments-local-escape                     22.4906+-0.2077     ?     22.8959+-0.2455        ? might be 1.0180x slower
&gt; &gt;    inline-get-scoped-var                              6.9669+-0.1486     ?      7.0623+-0.0708        ? might be 1.0137x slower
&gt; &gt;    inlined-put-by-id-transition                      15.4374+-0.2340           15.2985+-0.1957        
&gt; &gt;    int-or-other-abs-then-get-by-val                   9.4216+-0.0490            9.3885+-0.1483        
&gt; &gt;    int-or-other-abs-zero-then-get-by-val             41.2471+-0.4491           40.3351+-0.5973          might be 1.0226x faster
&gt; &gt;    int-or-other-add-then-get-by-val                   9.7139+-0.0982            9.6545+-0.0539        
&gt; &gt;    int-or-other-add                                  10.9760+-0.1059           10.9149+-0.0667        
&gt; &gt;    int-or-other-div-then-get-by-val                   6.2450+-0.0972     ?      6.3073+-0.1162        ?
&gt; &gt;    int-or-other-max-then-get-by-val                   8.7412+-0.2089     ?      8.8167+-0.1677        ?
&gt; &gt;    int-or-other-min-then-get-by-val                   7.1146+-0.0236            7.1058+-0.0689        
&gt; &gt;    int-or-other-mod-then-get-by-val                   6.1356+-0.0197            6.1326+-0.0697        
&gt; &gt;    int-or-other-mul-then-get-by-val                   6.4273+-0.1159            6.4248+-0.0679        
&gt; &gt;    int-or-other-neg-then-get-by-val                   7.8420+-0.0891            7.8318+-0.0622        
&gt; &gt;    int-or-other-neg-zero-then-get-by-val             41.6566+-0.5574     ^     39.7040+-0.2088        ^ definitely 1.0492x faster
&gt; &gt;    int-or-other-sub-then-get-by-val                  10.2182+-0.0837           10.1040+-0.0709          might be 1.0113x faster
&gt; &gt;    int-or-other-sub                                   8.0451+-0.0721     ?      8.0858+-0.0534        ?
&gt; &gt;    int-overflow-local                                 6.6569+-0.1131     ?      6.7200+-0.0302        ?
&gt; &gt;    Int16Array-alloc-long-lived                       66.9303+-0.9628     ?     67.3642+-1.2042        ?
&gt; &gt;    Int16Array-bubble-sort-with-byteLength            48.9026+-0.0874     ?     49.0868+-0.1505        ?
&gt; &gt;    Int16Array-bubble-sort                            48.4094+-0.1188     ?     48.5192+-0.1208        ?
&gt; &gt;    Int16Array-load-int-mul                            2.0529+-0.0073     ?      2.0558+-0.0041        ?
&gt; &gt;    Int16Array-to-Int32Array-set                      89.2501+-1.0251     !     93.2549+-1.0906        ! definitely 1.0449x slower
&gt; &gt;    Int32Array-alloc-huge-long-lived                 703.8271+-2.3584     ?    714.7537+-21.6199       ? might be 1.0155x slower
&gt; &gt;    Int32Array-alloc-huge                            810.9773+-6.4076          802.8170+-8.8403          might be 1.0102x faster
&gt; &gt;    Int32Array-alloc-large-long-lived                972.0261+-10.1262    ?    972.8335+-7.1647        ?
&gt; &gt;    Int32Array-alloc-large                            44.5977+-0.9395     ?     45.8318+-0.6680        ? might be 1.0277x slower
&gt; &gt;    Int32Array-alloc-long-lived                       79.5661+-0.4773           79.2518+-0.6356        
&gt; &gt;    Int32Array-alloc                                   4.4897+-0.0379     ?      4.4932+-0.0105        ?
&gt; &gt;    Int32Array-Int8Array-view-alloc                   14.8669+-0.1029     ?     15.1068+-0.1423        ? might be 1.0161x slower
&gt; &gt;    int52-spill                                       12.2416+-0.1965     ?     12.5038+-0.2038        ? might be 1.0214x slower
&gt; &gt;    Int8Array-alloc-long-lived                        66.4291+-0.6228     ?     66.8872+-0.8774        ?
&gt; &gt;    Int8Array-load-with-byteLength                     5.0474+-0.0031            5.0137+-0.0678        
&gt; &gt;    Int8Array-load                                     5.0962+-0.0615            5.0521+-0.0458        
&gt; &gt;    integer-divide                                    15.3937+-0.0949     ?     15.4865+-0.1624        ?
&gt; &gt;    integer-modulo                                     2.1891+-0.2145            2.1070+-0.0099          might be 1.0390x faster
&gt; &gt;    large-int-captured                                 9.1935+-0.1804            9.1581+-0.0859        
&gt; &gt;    large-int-neg                                     25.9562+-0.1702     ?     26.0513+-0.1309        ?
&gt; &gt;    large-int                                         23.5679+-0.2996           23.3032+-0.1711          might be 1.0114x faster
&gt; &gt;    lots-of-fields                                    10.9445+-0.0625     ?     11.0014+-0.0936        ?
&gt; &gt;    make-indexed-storage                               4.2509+-0.0167            4.2338+-0.0098        
&gt; &gt;    make-rope-cse                                      5.9967+-0.0612     ?      6.0595+-0.1166        ? might be 1.0105x slower
&gt; &gt;    marsaglia-larger-ints                            119.9557+-1.4569          118.9668+-0.0924        
&gt; &gt;    marsaglia-osr-entry                               52.6856+-0.0993           52.6714+-0.0953        
&gt; &gt;    marsaglia                                        519.7085+-0.2545          519.6917+-0.2704        
&gt; &gt;    method-on-number                                  31.4656+-0.6985           30.9481+-0.3884          might be 1.0167x faster
&gt; &gt;    negative-zero-divide                               0.3982+-0.0026     ?      0.4018+-0.0020        ?
&gt; &gt;    negative-zero-modulo                               0.3950+-0.0273            0.3844+-0.0023          might be 1.0278x faster
&gt; &gt;    negative-zero-negate                               0.3662+-0.0023     ?      0.3678+-0.0022        ?
&gt; &gt;    nested-function-parsing-random                   380.4197+-2.1140     !    389.9795+-0.6575        ! definitely 1.0251x slower
&gt; &gt;    nested-function-parsing                           48.1334+-0.3215     !     55.1116+-0.1179        ! definitely 1.1450x slower
&gt; &gt;    new-array-buffer-dead                              3.7521+-0.0281     ?      3.7751+-0.0695        ?
&gt; &gt;    new-array-buffer-push                             10.6194+-0.1366           10.5319+-0.1753        
&gt; &gt;    new-array-dead                                    28.5981+-0.1371           28.5362+-0.0919        
&gt; &gt;    new-array-push                                     6.8473+-0.0654     ?      6.9198+-0.1337        ? might be 1.0106x slower
&gt; &gt;    number-test                                        4.3251+-0.0381     ?      4.3484+-0.0068        ?
&gt; &gt;    object-closure-call                               13.2772+-0.0526           13.1896+-0.0856        
&gt; &gt;    object-test                                        4.7714+-0.0357     ?      4.7885+-0.0357        ?
&gt; &gt;    poly-stricteq                                     79.8627+-0.8227           79.8276+-0.3474        
&gt; &gt;    polymorphic-structure                             21.1588+-0.1153     ?     21.2311+-0.1305        ?
&gt; &gt;    polyvariant-monomorphic-get-by-id                 12.0118+-0.1360           11.9553+-0.1296        
&gt; &gt;    put-by-id                                         19.5739+-0.4032           19.4899+-0.2858        
&gt; &gt;    put-by-val-large-index-blank-indexing-type   
&gt; &gt;                                                      11.2603+-0.2421           11.0281+-0.1301          might be 1.0211x faster
&gt; &gt;    rare-osr-exit-on-local                            20.2075+-0.0892     ?     20.2468+-0.1238        ?
&gt; &gt;    register-pressure-from-osr                        32.3813+-0.3933           32.2131+-0.1101        
&gt; &gt;    simple-activation-demo                            35.0721+-0.0691           35.0336+-0.0793        
&gt; &gt;    slow-array-profile-convergence                     4.0309+-0.0406     ?      4.1446+-0.1861        ? might be 1.0282x slower
&gt; &gt;    slow-convergence                                   3.4580+-0.0417            3.4332+-0.0119        
&gt; &gt;    sparse-conditional                                 1.3538+-0.0179            1.3457+-0.0045        
&gt; &gt;    splice-to-remove                                  77.4692+-0.2402     ^     77.0371+-0.1217        ^ definitely 1.0056x faster
&gt; &gt;    stepanov_container                             11645.6466+-33.1074    ^  10839.5263+-145.1165      ^ definitely 1.0744x faster
&gt; 
&gt; Awesome.
&gt; 
&gt; &gt;    string-concat-object                               2.9939+-0.0228            2.9797+-0.0106        
&gt; &gt;    string-concat-pair-object                          2.9107+-0.0104     ?      2.9234+-0.0121        ?
&gt; &gt;    string-concat-pair-simple                         16.9617+-0.3941           16.8659+-0.3276        
&gt; &gt;    string-concat-simple                              17.4087+-0.4532           17.0738+-0.3152          might be 1.0196x faster
&gt; &gt;    string-cons-repeat                                10.5340+-0.0251           10.5234+-0.0415        
&gt; &gt;    string-cons-tower                                 11.0584+-0.0273     ^     10.9979+-0.0181        ^ definitely 1.0055x faster
&gt; &gt;    string-equality                                   43.2507+-0.1243     ?     43.4960+-0.3866        ?
&gt; &gt;    string-get-by-val-big-char                        13.3955+-0.1778     ?     13.5055+-0.0798        ?
&gt; &gt;    string-get-by-val-out-of-bounds-insane             5.7509+-0.1285     ?      5.8274+-0.1487        ? might be 1.0133x slower
&gt; &gt;    string-get-by-val-out-of-bounds                    5.2910+-0.0514     ?      5.2956+-0.0568        ?
&gt; &gt;    string-get-by-val                                  4.9002+-0.0261            4.8793+-0.0081        
&gt; &gt;    string-hash                                        2.7575+-0.0205            2.7456+-0.0082        
&gt; &gt;    string-long-ident-equality                        38.2377+-0.3184           38.1741+-0.0897        
&gt; &gt;    string-repeat-arith                               48.7239+-0.1453     ?     48.8014+-0.2497        ?
&gt; &gt;    string-sub                                        98.3621+-0.4328           97.6805+-0.9969        
&gt; &gt;    string-test                                        4.3132+-0.0074            4.2936+-0.0349        
&gt; &gt;    string-var-equality                               87.5703+-1.3191     ?     87.9372+-0.7991        ?
&gt; &gt;    structure-hoist-over-transitions                   3.3506+-0.0088     ?      3.3694+-0.0100        ?
&gt; &gt;    switch-char-constant                               3.4672+-0.0063            3.4615+-0.0065        
&gt; &gt;    switch-char                                        8.1233+-0.0841            8.0630+-0.1177        
&gt; &gt;    switch-constant                                    9.2469+-0.1221            9.2298+-0.1202        
&gt; &gt;    switch-string-basic-big-var                       20.1557+-0.0925           20.1500+-0.1726        
&gt; &gt;    switch-string-basic-big                           21.4802+-0.1505     ?     22.7984+-2.2999        ? might be 1.0614x slower
&gt; &gt;    switch-string-basic-var                           20.1364+-0.1254     ?     20.2666+-0.1744        ?
&gt; &gt;    switch-string-basic                               22.6436+-0.7883           21.3086+-0.7920          might be 1.0627x faster
&gt; &gt;    switch-string-big-length-tower-var                29.8803+-0.1209           29.8740+-0.1178        
&gt; &gt;    switch-string-length-tower-var                    21.7255+-0.1830     ?     21.7628+-0.1642        ?
&gt; &gt;    switch-string-length-tower                        16.9520+-0.1037           16.9519+-0.0940        
&gt; &gt;    switch-string-short                               16.8775+-0.1210     ?     16.9990+-0.1883        ?
&gt; &gt;    switch                                            15.5398+-0.1167     ?     15.5692+-0.1063        ?
&gt; &gt;    tear-off-arguments-simple                          2.1959+-0.0056     !      2.2208+-0.0141        ! definitely 1.0113x slower
&gt; &gt;    tear-off-arguments                                 3.5329+-0.0064     ?      3.5451+-0.0075        ?
&gt; &gt;    temporal-structure                                16.8838+-0.0810     ?     16.9399+-0.0761        ?
&gt; &gt;    to-int32-boolean                                  22.2733+-0.1311           22.2541+-0.1531        
&gt; &gt;    undefined-test                                     4.5688+-0.0326            4.5660+-0.0215        
&gt; &gt;    weird-inlining-const-prop                          2.2857+-0.0098     ?      2.2982+-0.0144        ?
&gt; &gt; 
&gt; &gt;    &lt;arithmetic&gt;                                     157.3890+-0.2841     ^    144.9922+-0.7820        ^ definitely 1.0855x faster
&gt; &gt;    &lt;geometric&gt; *                                     14.5568+-0.0178     ?     14.5696+-0.0132        ? might be 1.0009x slower
&gt; &gt;    &lt;harmonic&gt;                                         5.3446+-0.0213     ?      5.3543+-0.0105        ? might be 1.0018x slower
&gt; &gt; 
&gt; &gt;                                                         TipOfTree               OneShotClosure                                  
&gt; &gt; All benchmarks:
&gt; &gt;    &lt;arithmetic&gt;                                     223.7458+-0.3086     ^    215.6978+-0.6267        ^ definitely 1.0373x faster
&gt; &gt;    &lt;geometric&gt;                                       20.8508+-0.0224     !     20.8962+-0.0174        ! definitely 1.0022x slower
&gt; &gt;    &lt;harmonic&gt;                                         4.7888+-0.0140     ?      4.8146+-0.0156        ? might be 1.0054x slower
&gt; &gt; 
&gt; &gt;                                                         TipOfTree               OneShotClosure                                  
&gt; &gt; Geomean of preferred means:
&gt; &gt;    &lt;scaled-result&gt;                                   48.6915+-0.0572     !     48.9108+-0.0710        ! definitely 1.0045x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954456</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-26 21:31:39 -0800</bug_when>
    <thetext>Latest performance numbers.  Note that this compares to before I started landing the other patches for constant closure variable inference.

It appears that there is some fluke-ish splay slow-down.  I need to get to the bottom of it.  Splay is a super weird benchmark but I want to make sure that this isn&apos;t really a 10% slow-down.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;Old&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159740)
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r159798)
&quot;OneShotScopes&quot; at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159798)

Collected 10 samples per benchmark/VM, with 10 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.

                                                           Old                    TipOfTree               OneShotScopes            OneShotScopes v. Old   
SunSpider:
   3d-cube                                            7.6429+-0.0778     ?      7.7349+-0.0866            7.6525+-0.0614        ?
   3d-morph                                           8.7467+-0.0670     ?      8.7919+-0.0619            8.7757+-0.0986        ?
   3d-raytrace                                        8.6707+-0.1177     ?      8.7416+-0.1506            8.6418+-0.0850        
   access-binary-trees                                1.9925+-0.0100     ?      2.0017+-0.0167            1.9997+-0.0239        ?
   access-fannkuch                                    7.9340+-0.0707            7.9340+-0.0988            7.8967+-0.0646        
   access-nbody                                       4.2234+-0.0166            4.2077+-0.0483     ?      4.2188+-0.0112        
   access-nsieve                                      4.9953+-0.0357            4.9700+-0.1021     ?      4.9874+-0.0285        
   bitops-3bit-bits-in-byte                           1.8034+-0.0063            1.8008+-0.0075     ?      1.8116+-0.0297        ?
   bitops-bits-in-byte                                7.2471+-0.0796            7.2273+-0.0789     ?      7.3087+-0.0704        ?
   bitops-bitwise-and                                 2.9520+-0.0058            2.9202+-0.0387     ?      2.9348+-0.0221        
   bitops-nsieve-bits                                 4.5689+-0.0559     ?      4.5968+-0.0057     ?      4.6102+-0.0234        ?
   controlflow-recursive                              3.1330+-0.0137            3.1231+-0.0117            3.1124+-0.0090        
   crypto-aes                                         5.4164+-0.0237     ?      5.4337+-0.0337     ?      5.4650+-0.1005        ?
   crypto-md5                                         3.1029+-0.0236     ?      3.1129+-0.0231     ?      3.1367+-0.0502        ? might be 1.0109x slower
   crypto-sha1                                        2.9553+-0.0202            2.9501+-0.0099            2.9471+-0.0099        
   date-format-tofte                                 11.3212+-0.1757           11.2624+-0.0861           11.2102+-0.0925        
   date-format-xparb                                  8.5273+-0.0887     ?      8.5918+-0.0851            8.4821+-0.0797        
   math-cordic                                        4.3069+-0.1583            4.2195+-0.0225     ?      4.2715+-0.1172        
   math-partial-sums                                 10.2396+-0.0931           10.1562+-0.1064     ?     10.2599+-0.1263        ?
   math-spectral-norm                                 2.7131+-0.0065     ?      2.7244+-0.0117            2.7102+-0.0044        
   regexp-dna                                        12.8272+-0.1012     ?     12.8799+-0.1137     ?     12.9606+-0.1034        ? might be 1.0104x slower
   string-base64                                      5.4440+-0.0215     ?      5.4707+-0.0225     ?      5.4735+-0.0413        ?
   string-fasta                                      10.1253+-0.0625           10.1111+-0.0511     ?     10.2266+-0.0823        ? might be 1.0100x slower
   string-tagcloud                                   14.7926+-0.0731     ?     14.8198+-0.0577     ?     14.9359+-0.1126        ?
   string-unpack-code                                29.9724+-0.1649     ?     30.5502+-1.4932     ?     30.6543+-0.1574        ! definitely 1.0228x slower
   string-validate-input                              6.9075+-0.0628     ?      6.9543+-0.0532     ?      6.9615+-0.0387        ?

   &lt;arithmetic&gt; *                                     7.4062+-0.0125     ?      7.4341+-0.0596     ?      7.4479+-0.0159        ! definitely 1.0056x slower
   &lt;geometric&gt;                                        5.9417+-0.0130     ?      5.9475+-0.0163     ?      5.9570+-0.0150        ? might be 1.0026x slower
   &lt;harmonic&gt;                                         4.8589+-0.0115            4.8581+-0.0078     ?      4.8661+-0.0160        ? might be 1.0015x slower

                                                           Old                    TipOfTree               OneShotScopes            OneShotScopes v. Old   
LongSpider:
   3d-cube                                         2702.9441+-6.1643     ?   2711.5522+-7.2566         2700.7355+-26.7662       
   3d-morph                                        1504.2267+-0.8938         1503.1766+-0.9398     ?   1508.8413+-10.8602       ?
   3d-raytrace                                     1511.3610+-10.0171    ?   1526.3364+-22.1091        1512.2406+-6.2797        ?
   access-binary-trees                             2211.9925+-12.4705    ?   2219.1066+-13.8848        2217.3317+-13.0023       ?
   access-fannkuch                                  665.1598+-4.0876     ?    671.2719+-6.9014          669.2977+-6.9534        ?
   access-nbody                                    1495.6662+-0.5586     ?   1496.1030+-0.5842     ?   1496.5355+-1.0274        ?
   access-nsieve                                   1547.7779+-2.9192     ?   1549.9184+-2.3975     ?   1551.1416+-4.1927        ?
   bitops-3bit-bits-in-byte                         121.3743+-0.1134     ?    121.5216+-0.3096     ?    122.1667+-1.1791        ?
   bitops-bits-in-byte                              636.9607+-2.2116     ?    639.1830+-6.9994          637.1001+-2.0261        ?
   bitops-nsieve-bits                              1047.8432+-1.4111         1046.0159+-0.7252     ?   1052.0667+-12.5380       ?
   controlflow-recursive                           1489.7916+-1.0986     ?   1490.0802+-1.2309     ?   1490.7498+-1.4574        ?
   crypto-aes                                      1643.9586+-2.8211         1643.8457+-2.6060     ?   1655.7148+-10.7792       ?
   crypto-md5                                      1182.3865+-1.6202     ^   1165.4056+-9.2672         1162.5734+-1.3551        ^ definitely 1.0170x faster
   crypto-sha1                                     1612.9604+-1.2714     !   1620.0677+-4.8286         1616.8101+-2.9231        ?
   date-format-tofte                               1176.4254+-3.3025     ^   1166.9065+-5.5746         1163.8324+-6.1375        ^ definitely 1.0108x faster
   date-format-xparb                               1443.5831+-15.5707    ?   1468.1521+-23.6796        1455.2937+-13.6736       ?
   math-cordic                                     1733.0417+-2.7068     ?   1759.2292+-46.0440        1745.5950+-19.7751       ?
   math-partial-sums                               1311.4323+-1.5024     ?   1313.7319+-12.4528        1308.6268+-0.4043        ^ definitely 1.0021x faster
   math-spectral-norm                              1825.9787+-0.6112     ?   1827.5367+-2.1998         1826.5670+-0.9955        ?
   string-base64                                    504.6240+-1.8264     ?    506.0432+-1.6740          504.8203+-2.3815        ?
   string-fasta                                     991.7010+-2.3756     ?    993.3750+-3.6096     !   1004.8386+-5.4577        ! definitely 1.0132x slower
   string-tagcloud                                  376.5584+-0.8667     ?    377.5134+-1.3408     !    380.9191+-0.6571        ! definitely 1.0116x slower

   &lt;arithmetic&gt;                                    1306.2613+-0.6823     !   1309.8215+-2.8163         1308.3545+-2.0243        ? might be 1.0016x slower
   &lt;geometric&gt; *                                   1112.8765+-0.4888     !   1115.4928+-1.9989         1115.1783+-1.0576        ! definitely 1.0021x slower
   &lt;harmonic&gt;                                       798.5136+-0.4150     !    800.1104+-1.0294     ?    801.5840+-2.3625        ! definitely 1.0038x slower

                                                           Old                    TipOfTree               OneShotScopes            OneShotScopes v. Old   
V8Spider:
   crypto                                            79.4023+-0.1660           79.3733+-0.1907     ?     79.4308+-0.2035        ?
   deltablue                                         99.2035+-1.5004           98.5589+-1.3653           97.4762+-0.7915          might be 1.0177x faster
   earley-boyer                                      71.4969+-1.0564           70.9800+-0.2409           70.9136+-0.2359        
   raytrace                                          39.6294+-0.2426           39.6053+-0.1173     ?     39.9588+-0.8607        ?
   regexp                                            98.5873+-0.1388     !     99.6280+-0.6821     ?    100.3485+-0.2251        ! definitely 1.0179x slower
   richards                                         135.0199+-1.7565          132.5246+-1.1494          132.0637+-1.1632        ^ definitely 1.0224x faster
   splay                                             45.7903+-0.4840     ?     45.8513+-0.2464     ?     45.8786+-0.2836        ?

   &lt;arithmetic&gt;                                      81.3042+-0.4650           80.9316+-0.2476           80.8672+-0.2830          might be 1.0054x faster
   &lt;geometric&gt; *                                     75.1974+-0.3302           74.9687+-0.1559     ?     74.9877+-0.2962          might be 1.0028x faster
   &lt;harmonic&gt;                                        69.1025+-0.2083           68.9777+-0.0918     ?     69.0827+-0.3837          might be 1.0003x faster

                                                           Old                    TipOfTree               OneShotScopes            OneShotScopes v. Old   
Octane and V8v7:
   encrypt                                           0.46550+-0.00036          0.46548+-0.00054          0.46517+-0.00029       
   decrypt                                           8.55969+-0.01038    ?     8.56683+-0.01321    ?     8.56742+-0.01066       ?
   deltablue                                x2       0.56864+-0.00675          0.56559+-0.00252    ?     0.57070+-0.00708       ?
   earley                                            0.85916+-0.00643          0.85736+-0.01197    ?     0.85794+-0.00548       
   boyer                                            12.34354+-0.06386         12.28646+-0.05262    ?    12.34283+-0.13739       
   raytrace                                 x2       4.28180+-0.04905    ?     4.29505+-0.05248    ?     4.29696+-0.04946       ?
   regexp                                   x2      33.85890+-0.73708         33.56008+-0.17091         33.42819+-0.24213         might be 1.0129x faster
   richards                                 x2       0.42871+-0.00696    ?     0.43328+-0.00567          0.43054+-0.00462       ?
   splay                                    x2       0.63161+-0.00488    ?     0.63279+-0.00369    !     0.70532+-0.03916       ! definitely 1.1167x slower
   navier-stokes                            x2      10.92640+-0.00397    !    10.93708+-0.00445    ^    10.77643+-0.14000       ^ definitely 1.0139x faster
   closure                                           0.41951+-0.00078    !     0.42282+-0.00024    !     0.42662+-0.00056       ! definitely 1.0169x slower
   jquery                                            6.03644+-0.01977    !     6.13445+-0.01535    ?     6.15033+-0.01653       ! definitely 1.0189x slower
   gbemu                                    x2      72.01372+-1.09548    ?    72.01968+-0.77798         71.70425+-0.60982       
   mandreel                                 x2     144.95273+-1.47596    ^   142.26755+-0.15157    ?   142.29771+-0.16735       ^ definitely 1.0187x faster
   pdfjs                                    x2     100.95244+-0.39291    ?   101.30191+-0.65439    ?   101.94462+-0.48098       ! definitely 1.0098x slower
   box2d                                    x2      35.14602+-0.23029    ?    35.16523+-0.21966    ?    35.36365+-0.25553       ?

V8v7:
   &lt;arithmetic&gt;                                      7.72625+-0.09335          7.68899+-0.02297          7.66560+-0.02941         might be 1.0079x faster
   &lt;geometric&gt; *                                     2.51175+-0.01166          2.51168+-0.00715    !     2.54090+-0.01578       ! definitely 1.0116x slower
   &lt;harmonic&gt;                                        1.02758+-0.00691    ?     1.02991+-0.00416    !     1.05094+-0.00992       ! definitely 1.0227x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                     32.16176+-0.17628         31.96500+-0.08971    ?    31.99412+-0.08801         might be 1.0052x faster
   &lt;geometric&gt; *                                     6.97992+-0.02564          6.97848+-0.01577    !     7.03562+-0.02770       ! definitely 1.0080x slower
   &lt;harmonic&gt;                                        1.42556+-0.00821    ?     1.42999+-0.00501    !     1.45662+-0.01171       ! definitely 1.0218x slower

                                                           Old                    TipOfTree               OneShotScopes            OneShotScopes v. Old   
Kraken:
   ai-astar                                          493.306+-0.637      ?     493.919+-0.480      ?     495.700+-4.602         ?
   audio-beat-detection                              237.041+-0.352      !     239.163+-1.417      ^     236.928+-0.666         
   audio-dft                                         289.314+-0.876      ?     290.273+-1.059      ?     290.519+-1.662         ?
   audio-fft                                         143.060+-0.056      ?     143.177+-0.128            142.947+-0.118         
   audio-oscillator                                  243.694+-0.291            243.664+-0.495      ?     244.427+-0.813         ?
   imaging-darkroom                                  286.305+-0.566            285.323+-0.721      ?     285.893+-0.911         
   imaging-desaturate                                158.340+-0.191      ?     158.355+-0.129      ?     158.391+-0.100         ?
   imaging-gaussian-blur                             362.675+-0.282      ?     362.764+-0.200      ^     362.439+-0.097         
   json-parse-financial                               80.464+-0.330             80.088+-0.190             79.975+-0.416         
   json-stringify-tinderbox                          106.040+-0.481      ^     104.716+-0.364            104.055+-0.375         ^ definitely 1.0191x faster
   stanford-crypto-aes                                90.646+-0.428      ?      90.901+-0.705             90.259+-1.094         
   stanford-crypto-ccm                                97.475+-5.623      ?     102.489+-0.800            101.069+-1.295         ? might be 1.0369x slower
   stanford-crypto-pbkdf2                            259.708+-2.297      ?     261.919+-0.948      !     264.359+-0.785         ! definitely 1.0179x slower
   stanford-crypto-sha256-iterative                  115.009+-0.351      ^     114.203+-0.445      !     115.325+-0.354         ?

   &lt;arithmetic&gt; *                                    211.648+-0.391      !     212.211+-0.117      ?     212.306+-0.424         ? might be 1.0031x slower
   &lt;geometric&gt;                                       181.935+-0.748      ?     182.600+-0.200            182.442+-0.276         ? might be 1.0028x slower
   &lt;harmonic&gt;                                        157.098+-1.121      ?     157.859+-0.281            157.506+-0.300         ? might be 1.0026x slower

                                                           Old                    TipOfTree               OneShotScopes            OneShotScopes v. Old   
JSRegress:
   adapt-to-double-divide                            22.7257+-0.0895           22.6136+-0.0920     ?     22.7634+-0.0698        ?
   aliased-arguments-getbyval                         0.9526+-0.0038     ?      0.9543+-0.0038     ?      0.9787+-0.0419        ? might be 1.0274x slower
   allocate-big-object                                2.6204+-0.0196     ?      2.6252+-0.0133            2.6186+-0.0090        
   arity-mismatch-inlining                            0.8875+-0.0050     !      0.9219+-0.0116            0.9211+-0.0057        ! definitely 1.0378x slower
   array-access-polymorphic-structure                 9.7281+-0.1223     ?      9.8445+-0.1136            9.8028+-0.1325        ?
   array-nonarray-polymorhpic-access                 56.5145+-0.3991           56.4341+-0.2868           56.0872+-0.1666        
   array-with-double-add                              5.7369+-0.0499            5.7077+-0.0790     ?      5.7193+-0.0739        
   array-with-double-increment                        4.3080+-0.0046            4.3018+-0.0376     ?      4.3129+-0.0651        ?
   array-with-double-mul-add                          6.8229+-0.0618     ?      6.8754+-0.0985            6.8314+-0.0570        ?
   array-with-double-sum                              8.0028+-0.0244            7.9591+-0.1025     ?      8.0108+-0.0818        ?
   array-with-int32-add-sub                          10.4794+-0.0859           10.3883+-0.1249     ?     10.4025+-0.0542        
   array-with-int32-or-double-sum                     7.9677+-0.0835     ?      7.9813+-0.0791     ?      8.0249+-0.0822        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    122.4786+-1.2071     ^    118.1644+-1.2970     !    121.0588+-0.9514          might be 1.0117x faster
   ArrayBuffer-DataView-alloc-long-lived             34.0481+-0.6430     ^     30.1993+-0.1737     !     33.2249+-0.1918          might be 1.0248x faster
   ArrayBuffer-Int32Array-byteOffset                  6.9976+-0.0508     !      7.0788+-0.0289            7.0662+-0.0816        ?
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    215.9635+-2.6587          215.5442+-2.2114          214.8022+-1.5751        
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    166.9396+-1.2183          166.8816+-1.1084     ?    168.5139+-0.8390        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    122.4456+-1.1983     ^    118.7458+-0.9953     !    122.6853+-1.6575        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     49.5794+-0.3468     ^     48.1900+-0.1733     !     52.0040+-0.7515        ! definitely 1.0489x slower
   ArrayBuffer-Int8Array-alloc-long-lived            31.7364+-0.6619     ^     30.5531+-0.3521     !     33.1606+-0.5062        ! definitely 1.0449x slower
   ArrayBuffer-Int8Array-alloc                       29.6737+-0.4906     ^     26.4587+-0.1135     !     29.7156+-0.6909        ?
   asmjs_bool_bug                                    10.1082+-0.0716     ^      9.5976+-0.1019            9.5260+-0.1008        ^ definitely 1.0611x faster
   basic-set                                         21.7480+-0.1139           21.7375+-0.0975     ?     21.9120+-0.3323        ?
   big-int-mul                                        5.6136+-0.0723            5.5490+-0.0871            5.5315+-0.0195          might be 1.0148x faster
   boolean-test                                       4.4445+-0.0291     ^      4.3250+-0.0038     ?      4.3253+-0.0033        ^ definitely 1.0276x faster
   branch-fold                                        4.9455+-0.0231     ?      4.9584+-0.0070            4.9486+-0.0072        ?
   cast-int-to-double                                12.4605+-0.1119           12.3287+-0.1025     ?     12.3656+-0.1075        
   cell-argument                                     15.5009+-0.0895     ?     15.8624+-0.3980     ?     16.1941+-0.3445        ! definitely 1.0447x slower
   cfg-simplify                                       3.9439+-0.0042     ?      3.9462+-0.0045            3.9398+-0.0065        
   cmpeq-obj-to-obj-other                            12.7438+-0.4076           12.6627+-0.5157     ?     12.8914+-0.2834        ? might be 1.0116x slower
   constant-test                                      8.8003+-0.1194            8.7229+-0.0696     ?      8.8382+-0.1162        ?
   DataView-custom-properties                       129.4751+-0.9957     ^    125.3389+-1.1161     !    128.5568+-0.6513        
   delay-tear-off-arguments-strictmode                3.5056+-0.0073     ?      3.5082+-0.0052            3.5051+-0.0107        
   destructuring-arguments-length                   173.9497+-1.8347          172.9614+-0.8793          172.8830+-1.0589        
   destructuring-arguments                            8.7638+-0.1124            8.6666+-0.0993     ?      8.7029+-0.1308        
   destructuring-swap                                 8.4776+-0.0839     !      8.6473+-0.0706            8.5497+-0.0556        ?
   direct-arguments-getbyval                          0.8331+-0.0068     ?      0.8349+-0.0039     ?      0.8504+-0.0403        ? might be 1.0208x slower
   double-pollution-getbyval                         10.9816+-0.0852     ?     11.0496+-0.1334           11.0388+-0.0899        ?
   double-pollution-putbyoffset                       7.0634+-1.1849            6.5518+-0.0238            6.5421+-0.0764          might be 1.0797x faster
   empty-string-plus-int                             10.7705+-0.0687     !     10.9906+-0.0719           10.9176+-0.0691        ! definitely 1.0137x slower
   emscripten-cube2hash                              51.7529+-0.1688     ^     50.3761+-0.1556     !     53.3994+-0.1882        ! definitely 1.0318x slower
   emscripten-memops                               9241.5998+-24.3324    ^   8415.9461+-100.3685   ^   7967.9235+-0.9581        ^ definitely 1.1599x faster
   external-arguments-getbyval                        2.0277+-0.0496     ?      2.0287+-0.0071     ^      1.9939+-0.0106          might be 1.0169x faster
   external-arguments-putbyval                        3.0260+-0.0158     !      3.0789+-0.0209            3.0403+-0.0736        ?
   Float32Array-matrix-mult                           6.3742+-0.0265     ?      6.3954+-0.0516            6.3380+-0.0403        
   Float32Array-to-Float64Array-set                  95.5900+-1.3124           93.4776+-1.2131           93.0669+-1.2003        ^ definitely 1.0271x faster
   Float64Array-alloc-long-lived                    101.7195+-0.4713     !    102.9951+-0.4698          102.6768+-0.4790        ! definitely 1.0094x slower
   Float64Array-to-Int16Array-set                   116.7977+-0.4080     ?    117.7903+-1.7373          117.4194+-0.8096        ?
   fold-double-to-int                                25.4244+-0.0808     ?     26.2557+-1.3825     !     36.9191+-0.5710        ! definitely 1.4521x slower
   for-of-iterate-array-entries                       8.5343+-0.0820     !      8.7117+-0.0882            8.5917+-0.0896        ?
   for-of-iterate-array-keys                          3.4848+-0.0422     ?      3.5006+-0.0440            3.4731+-0.0557        
   for-of-iterate-array-values                        2.9303+-0.0544            2.9272+-0.0561            2.8961+-0.0426          might be 1.0118x faster
   function-dot-apply                                 3.1572+-0.0066     ^      3.1175+-0.0067            3.1170+-0.0033        ^ definitely 1.0129x faster
   function-test                                      5.0445+-0.0522     ^      4.7397+-0.0471     ?      4.7914+-0.0638        ^ definitely 1.0528x faster
   get-by-id-chain-from-try-block                     7.5841+-0.0461            7.5458+-0.0890     ?      7.6146+-0.0427        ?
   get-by-id-proto-or-self                           25.8165+-0.3174     ?     26.0789+-0.4336           25.7446+-0.2523        
   get-by-id-self-or-proto                           23.8939+-0.6389           23.6096+-0.5771     ?     23.8852+-0.6667        
   get_callee_monomorphic                             4.7313+-0.0312     ?      4.7525+-0.0882     ?      4.8258+-0.0662        ? might be 1.0200x slower
   get_callee_polymorphic                             4.5488+-0.1510            4.5022+-0.0541            4.4790+-0.0212          might be 1.0156x faster
   global-var-const-infer-fire-from-opt               0.9585+-0.0198            0.9384+-0.0120     ?      0.9440+-0.0112          might be 1.0154x faster
   global-var-const-infer                             0.7567+-0.0054     ?      0.7589+-0.0073            0.7576+-0.0034        ?
   HashMap-put-get-iterate-keys                      44.3490+-0.3220     ^     40.9785+-0.2022           40.8843+-0.2897        ^ definitely 1.0847x faster
   HashMap-put-get-iterate                           62.1169+-0.1805     ^     59.2521+-0.8694           58.2577+-0.4347        ^ definitely 1.0662x faster
   HashMap-string-put-get-iterate                    55.4444+-0.4053     ^     53.6606+-0.2768     ?     54.0986+-0.9593          might be 1.0249x faster
   imul-double-only                                  17.7961+-0.1378     ?     17.8532+-0.2330           17.7409+-0.1046        
   imul-int-only                                     15.1155+-0.2017     ^     14.7959+-0.0886           14.7483+-0.1167        ^ definitely 1.0249x faster
   imul-mixed                                        22.2240+-0.1330     ^     21.7682+-0.1190     ?     21.7792+-0.0902        ^ definitely 1.0204x faster
   in-four-cases                                     25.8726+-0.0787     ?     25.9098+-0.1333           25.8728+-0.1264        ?
   in-one-case-false                                 12.1598+-0.1894           12.0533+-0.1007           12.0465+-0.1068        
   in-one-case-true                                  12.0615+-0.0758           12.0469+-0.0384     ?     12.0760+-0.1005        ?
   in-two-cases                                      12.7887+-0.1215     ?     12.8221+-0.0343     ?     12.9327+-0.1564        ? might be 1.0113x slower
   indexed-properties-in-objects                      4.7173+-0.0077     ^      4.6621+-0.0059     ?      4.6655+-0.0079        ^ definitely 1.0111x faster
   infer-one-time-closure-ten-vars                   96.1752+-0.0490           96.1356+-0.0818     ^     92.3052+-0.1363        ^ definitely 1.0419x faster
   infer-one-time-closure-two-vars                   28.8633+-0.2067           28.8269+-0.1277           28.7033+-0.1134        
   infer-one-time-closure                            28.6927+-0.1423     ?     28.7305+-0.1182     ?     28.7655+-0.1012        ?
   infer-one-time-deep-closure                       84.7760+-0.0995           84.7734+-0.0701     ^     56.9828+-0.1049        ^ definitely 1.4877x faster
   inline-arguments-access                            1.5112+-0.0060     !      1.6005+-0.0024            1.5990+-0.0036        ! definitely 1.0581x slower
   inline-arguments-local-escape                     22.5822+-0.2038     ?     22.5946+-0.2008     !     23.2554+-0.2533        ! definitely 1.0298x slower
   inline-get-scoped-var                              7.0010+-0.0938     ?      7.0392+-0.0997            6.9737+-0.0961        
   inlined-put-by-id-transition                      15.3554+-0.2500           15.2380+-0.2994     ?     15.2754+-0.2777        
   int-or-other-abs-then-get-by-val                   9.4348+-0.0840            9.4000+-0.0619            9.3886+-0.1273        
   int-or-other-abs-zero-then-get-by-val             41.2814+-0.4068     ?     41.4887+-0.4662     ^     39.7391+-0.7443        ^ definitely 1.0388x faster
   int-or-other-add-then-get-by-val                   9.6495+-0.1346     !     10.5616+-0.1098     ?     10.5638+-0.1828        ! definitely 1.0948x slower
   int-or-other-add                                  10.9854+-0.1178           10.7754+-0.1279     ?     10.7993+-0.1369          might be 1.0172x faster
   int-or-other-div-then-get-by-val                   6.3655+-0.1719            6.3555+-0.0694            6.3255+-0.0924        
   int-or-other-max-then-get-by-val                   8.6900+-0.1800            8.6266+-0.1905     ?      8.8074+-0.1516        ? might be 1.0135x slower
   int-or-other-min-then-get-by-val                   7.1276+-0.0713     ^      6.9389+-0.0699            6.9028+-0.0801        ^ definitely 1.0326x faster
   int-or-other-mod-then-get-by-val                   6.1434+-0.0188     ^      6.0549+-0.0635            6.0109+-0.0857        ^ definitely 1.0220x faster
   int-or-other-mul-then-get-by-val                   6.3666+-0.0966     ?      6.4833+-0.0727     ?      6.5180+-0.0238        ! definitely 1.0238x slower
   int-or-other-neg-then-get-by-val                   7.8920+-0.0828            7.8704+-0.0410            7.7998+-0.0573          might be 1.0118x faster
   int-or-other-neg-zero-then-get-by-val             41.6154+-0.4787     ?     42.1977+-0.2249     ^     39.3907+-0.1171        ^ definitely 1.0565x faster
   int-or-other-sub-then-get-by-val                  10.1873+-0.0776     !     10.4047+-0.0981     ?     10.4783+-0.0968        ! definitely 1.0286x slower
   int-or-other-sub                                   8.0950+-0.0559     !      8.8055+-0.1030     ?      8.8536+-0.0749        ! definitely 1.0937x slower
   int-overflow-local                                 6.6696+-0.0838     ^      6.3572+-0.1191     ?      6.4070+-0.0835        ^ definitely 1.0410x faster
   Int16Array-alloc-long-lived                       66.6138+-0.3708     ?     67.6384+-0.9785           67.2379+-0.4730        ?
   Int16Array-bubble-sort-with-byteLength            48.9869+-0.1059           48.9629+-0.1464     ?     49.0251+-0.0595        ?
   Int16Array-bubble-sort                            48.3926+-0.0829           48.2455+-0.1284     ?     48.3123+-0.1243        
   Int16Array-load-int-mul                            2.0568+-0.0066     ^      1.8211+-0.0504            1.7943+-0.0038        ^ definitely 1.1463x faster
   Int16Array-to-Int32Array-set                      89.1831+-1.1492     !     94.6521+-0.4113     !     98.4094+-0.3167        ! definitely 1.1035x slower
   Int32Array-alloc-huge-long-lived                 703.5624+-2.8086     ?    705.2882+-1.8814     ?    713.3379+-21.0777       ? might be 1.0139x slower
   Int32Array-alloc-huge                            805.6759+-5.8380     ?    807.5993+-8.0514     ?    809.7266+-5.7096        ?
   Int32Array-alloc-large-long-lived                975.9036+-7.7689     ?    977.7218+-10.7472         970.3766+-8.2645        
   Int32Array-alloc-large                            45.2848+-0.6660           44.6094+-1.2792     ?     45.3779+-0.9698        ?
   Int32Array-alloc-long-lived                       79.5129+-0.4496     ?     79.7100+-0.3631     ?     79.9563+-0.6561        ?
   Int32Array-alloc                                   4.5026+-0.0249     ?      4.5134+-0.0105     ^      4.4914+-0.0098        
   Int32Array-Int8Array-view-alloc                   15.0529+-0.3161           15.0518+-0.1424     ?     15.1156+-0.0402        ?
   int52-spill                                       12.4335+-0.2295           12.1233+-0.1234     ?     12.2970+-0.1746          might be 1.0111x faster
   Int8Array-alloc-long-lived                        66.4013+-0.5024     ?     66.8150+-0.5866           66.5644+-0.6873        ?
   Int8Array-load-with-byteLength                     5.0331+-0.0414            5.0301+-0.0393     ?      5.0317+-0.0622        
   Int8Array-load                                     5.0585+-0.0541            5.0584+-0.0230            5.0124+-0.0608        
   integer-divide                                    15.5476+-0.1026     ^     14.9318+-0.0777           14.9118+-0.1373        ^ definitely 1.0426x faster
   integer-modulo                                     2.1203+-0.0481     ^      2.0057+-0.0083     ^      1.9853+-0.0078        ^ definitely 1.0680x faster
   large-int-captured                                 9.0260+-0.1214            8.9889+-0.0732     ?      9.0443+-0.0738        ?
   large-int-neg                                     26.0099+-0.1740           25.9453+-0.1702           25.9156+-0.1262        
   large-int                                         23.2971+-0.1315     ?     23.6789+-0.3302           23.3635+-0.1112        ?
   lots-of-fields                                    10.9830+-0.1044     ?     11.0164+-0.0685           11.0085+-0.1223        ?
   make-indexed-storage                               4.2331+-0.0159            4.2245+-0.0467     ?      4.2479+-0.0711        ?
   make-rope-cse                                      5.8917+-0.0898     ?      5.9000+-0.0606     ?      5.9625+-0.0565        ? might be 1.0120x slower
   marsaglia-larger-ints                            119.2265+-0.1944     ^    111.7609+-0.1136     ?    111.8256+-0.0873        ^ definitely 1.0662x faster
   marsaglia-osr-entry                               52.6993+-0.0791     ^     47.0393+-0.0964           46.9869+-0.1538        ^ definitely 1.1216x faster
   marsaglia                                        519.6862+-0.2153     ^    463.8427+-0.6735          463.7744+-0.3777        ^ definitely 1.1206x faster
   method-on-number                                  31.1363+-0.5025     ^     30.2059+-0.1903     ?     30.3454+-0.5648          might be 1.0261x faster
   negative-zero-divide                               0.4010+-0.0032     ?      0.4021+-0.0032            0.3983+-0.0015        
   negative-zero-modulo                               0.3805+-0.0016     !      0.3875+-0.0032     ^      0.3817+-0.0016        ?
   negative-zero-negate                               0.3661+-0.0015     ?      0.3701+-0.0028            0.3675+-0.0031        ?
   nested-function-parsing-random                   379.7133+-0.6519     !    381.8263+-0.2913     ?    381.9647+-1.9010        ?
   nested-function-parsing                           48.0222+-0.1864           47.9996+-0.1056     ?     48.1808+-0.1188        ?
   new-array-buffer-dead                              3.7408+-0.0182     ?      3.7711+-0.0781            3.6922+-0.0060        ^ definitely 1.0132x faster
   new-array-buffer-push                             10.5188+-0.1278     ?     10.6296+-0.1399           10.5700+-0.1306        ?
   new-array-dead                                    28.4782+-0.0910           28.4356+-0.0775     ?     28.5590+-0.0956        ?
   new-array-push                                     6.8428+-0.0815     ?      6.8534+-0.0357            6.8369+-0.0639        
   number-test                                        4.3410+-0.0054     ^      4.2972+-0.0234            4.2397+-0.0521        ^ definitely 1.0239x faster
   object-closure-call                               13.2346+-0.0803     ?     13.2749+-0.1165           13.2251+-0.0995        
   object-test                                        4.7376+-0.0143     !      4.8232+-0.0318     ?      4.8252+-0.0314        ! definitely 1.0185x slower
   poly-stricteq                                     79.6500+-0.2561     ^     76.1020+-0.2309           76.0534+-0.4052        ^ definitely 1.0473x faster
   polymorphic-structure                             21.0715+-0.2003     ?     21.1001+-0.1439     ?     21.1517+-0.1012        ?
   polyvariant-monomorphic-get-by-id                 11.9949+-0.0999           11.9738+-0.1203     ?     11.9880+-0.1139        
   put-by-id                                         19.4023+-0.3191     ?     19.4125+-0.3615           19.1589+-0.3385          might be 1.0127x faster
   put-by-val-large-index-blank-indexing-type   
                                                     11.1725+-0.2933           10.8839+-0.1100     ?     10.9536+-0.1039          might be 1.0200x faster
   rare-osr-exit-on-local                            20.3548+-0.1097           20.1542+-0.1235     ?     20.3036+-0.1314        
   register-pressure-from-osr                        32.1283+-0.0647     ^     31.1671+-0.1223     ?     31.2227+-0.0999        ^ definitely 1.0290x faster
   simple-activation-demo                            35.1512+-0.4817           35.1071+-0.0761           35.0945+-0.1142        
   slow-array-profile-convergence                     4.1009+-0.1764            4.0052+-0.0132     ?      4.0714+-0.0824        
   slow-convergence                                   3.4488+-0.0185     !      4.1731+-0.0067     ?      4.2060+-0.0400        ! definitely 1.2196x slower
   sparse-conditional                                 1.3433+-0.0042     ?      1.3496+-0.0103            1.3418+-0.0062        
   splice-to-remove                                  77.4886+-0.2247           77.3046+-0.2675     ^     76.9229+-0.0915        ^ definitely 1.0074x faster
   stepanov_container                             11622.7882+-16.3677    ^  11424.2082+-11.9749    ^  10463.7838+-14.2992       ^ definitely 1.1108x faster
   string-concat-object                               2.9877+-0.0073            2.9791+-0.0168     ?      2.9830+-0.0244        
   string-concat-pair-object                          2.9205+-0.0217     ?      2.9238+-0.0121            2.9161+-0.0097        
   string-concat-pair-simple                         17.4587+-0.4848           17.3369+-0.3596           17.0356+-0.3202          might be 1.0248x faster
   string-concat-simple                              17.1787+-0.2110           16.9424+-0.2975     ?     17.2854+-0.2651        ?
   string-cons-repeat                                10.5230+-0.0150           10.5207+-0.0438           10.5122+-0.0318        
   string-cons-tower                                 11.0572+-0.0397           11.0455+-0.0451           11.0407+-0.0264        
   string-equality                                   43.8700+-0.7302           42.8428+-0.5660           42.8354+-0.4816          might be 1.0242x faster
   string-get-by-val-big-char                        13.4263+-0.1214     ^     12.6373+-0.0512     !     12.9927+-0.1724        ^ definitely 1.0334x faster
   string-get-by-val-out-of-bounds-insane             5.7879+-0.0823            5.6900+-0.1583     ?      5.8418+-0.1047        ?
   string-get-by-val-out-of-bounds                    5.3088+-0.0078            5.2218+-0.0809     ?      5.2973+-0.0299        
   string-get-by-val                                  4.8999+-0.0153            4.8923+-0.0120     ?      4.9320+-0.0320        ?
   string-hash                                        2.7365+-0.0028            2.7327+-0.0028            2.7307+-0.0061        
   string-long-ident-equality                        38.3370+-0.3282           37.7691+-0.7489           37.3919+-0.7239          might be 1.0253x faster
   string-repeat-arith                               49.3698+-1.0934     ?     49.5396+-0.2863           49.5060+-0.2717        ?
   string-sub                                        98.0182+-0.2343     ?     98.0708+-0.3517     !     99.8287+-1.3363        ! definitely 1.0185x slower
   string-test                                        4.3262+-0.0269     ^      4.2615+-0.0284            4.2208+-0.0340        ^ definitely 1.0250x faster
   string-var-equality                               87.7694+-1.6514     ^     70.2531+-0.5880           70.1224+-0.2548        ^ definitely 1.2517x faster
   structure-hoist-over-transitions                   3.3709+-0.0232     ?      3.3884+-0.0235            3.3615+-0.0147        
   switch-char-constant                               3.4671+-0.0049     ?      3.4855+-0.0342            3.4566+-0.0067        
   switch-char                                        8.1430+-0.0921            8.1321+-0.0835            8.1090+-0.0664        
   switch-constant                                    9.2340+-0.1403     ?      9.2503+-0.1185            9.2052+-0.1305        
   switch-string-basic-big-var                       20.2044+-0.1169     ?     20.2978+-0.1256           20.2715+-0.0885        ?
   switch-string-basic-big                           21.5604+-0.1276     ^     20.7662+-0.1459           20.2293+-0.7423        ^ definitely 1.0658x faster
   switch-string-basic-var                           20.0876+-0.1137           20.0790+-0.1327     ?     20.0990+-0.1021        ?
   switch-string-basic                               22.0928+-0.6631           21.6162+-0.8843     ?     21.7132+-0.3832          might be 1.0175x faster
   switch-string-big-length-tower-var                29.8250+-0.0725     ^     28.9900+-0.1401           28.9090+-0.1033        ^ definitely 1.0317x faster
   switch-string-length-tower-var                    21.7359+-0.1202     ^     21.4739+-0.0875           21.4510+-0.1100        ^ definitely 1.0133x faster
   switch-string-length-tower                        16.9442+-0.1626     ^     16.5314+-0.1042           16.4202+-0.0948        ^ definitely 1.0319x faster
   switch-string-short                               16.9385+-0.1232     ^     16.3725+-0.0943     ?     16.3805+-0.0799        ^ definitely 1.0341x faster
   switch                                            15.5335+-0.1223           15.5068+-0.1237           15.4995+-0.1006        
   tear-off-arguments-simple                          2.1966+-0.0051            2.1944+-0.0075     !      2.2114+-0.0044        ! definitely 1.0067x slower
   tear-off-arguments                                 3.5334+-0.0050     ?      3.5365+-0.0053     ?      3.5374+-0.0160        ?
   temporal-structure                                17.0125+-0.0834     ?     17.0650+-0.0754           16.9936+-0.0726        
   to-int32-boolean                                  22.3640+-0.3467           21.8883+-0.1560     ?     21.9613+-0.3572          might be 1.0183x faster
   undefined-test                                     4.5325+-0.0792            4.4743+-0.0070            4.4731+-0.0124          might be 1.0133x faster
   weird-inlining-const-prop                          2.2815+-0.0063     ?      2.2843+-0.0104     ?      2.2869+-0.0161        ?

   &lt;arithmetic&gt;                                     157.2023+-0.1758     ^    150.9652+-0.5254     ^    143.3144+-0.1314        ^ definitely 1.0969x faster
   &lt;geometric&gt; *                                     14.5522+-0.0177     ^     14.4242+-0.0093     ?     14.4432+-0.0131        ^ definitely 1.0075x faster
   &lt;harmonic&gt;                                         5.3338+-0.0087     ?      5.3395+-0.0072            5.3318+-0.0126          might be 1.0004x faster

                                                           Old                    TipOfTree               OneShotScopes            OneShotScopes v. Old   
All benchmarks:
   &lt;arithmetic&gt;                                     223.2616+-0.1638     ^    219.4409+-0.4109     ^    214.2956+-0.1455        ^ definitely 1.0418x faster
   &lt;geometric&gt;                                       20.8430+-0.0133     ^     20.7298+-0.0085     !     20.7654+-0.0175        ^ definitely 1.0037x faster
   &lt;harmonic&gt;                                         4.7834+-0.0079     ?      4.7911+-0.0082     !      4.8152+-0.0157        ! definitely 1.0067x slower

                                                           Old                    TipOfTree               OneShotScopes            OneShotScopes v. Old   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   48.6897+-0.0335           48.6626+-0.0677     ?     48.7581+-0.0530        ? might be 1.0014x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954638</commentid>
    <comment_count>17</comment_count>
      <attachid>217974</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-27 19:10:07 -0800</bug_when>
    <thetext>Created attachment 217974
the patch

Rebased again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954655</commentid>
    <comment_count>18</comment_count>
      <attachid>217980</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-27 21:50:52 -0800</bug_when>
    <thetext>Created attachment 217980
patch for landing?

I simplified some stuff.

This may be the winner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954656</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-27 21:52:14 -0800</bug_when>
    <thetext>The performance data after we include http://trac.webkit.org/changeset/159826, but before the latest changes (https://bugs.webkit.org/attachment.cgi?id=217980):

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159826)
&quot;OneShotScope&quot; at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159826)

Collected 10 samples per benchmark/VM, with 10 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                OneShotScope                                   
SunSpider:
   3d-cube                                            7.6723+-0.0596            7.6642+-0.0568        
   3d-morph                                           8.8630+-0.1551            8.8010+-0.0650        
   3d-raytrace                                        8.8080+-0.1540            8.7532+-0.1137        
   access-binary-trees                                1.9921+-0.0163            1.9917+-0.0075        
   access-fannkuch                                    7.9782+-0.0607            7.8674+-0.0920          might be 1.0141x faster
   access-nbody                                       4.2280+-0.0041     ?      4.2384+-0.0255        ?
   access-nsieve                                      4.9871+-0.0326     ?      4.9961+-0.0481        ?
   bitops-3bit-bits-in-byte                           1.8021+-0.0092     ?      1.8061+-0.0087        ?
   bitops-bits-in-byte                                7.2708+-0.0964     ?      7.2770+-0.0228        ?
   bitops-bitwise-and                                 2.9500+-0.0214     ?      2.9533+-0.0080        ?
   bitops-nsieve-bits                                 4.6055+-0.0135     ?      4.6106+-0.0247        ?
   controlflow-recursive                              3.1226+-0.0081     ?      3.1420+-0.0256        ?
   crypto-aes                                         5.4845+-0.1215            5.4821+-0.0932        
   crypto-md5                                         3.1267+-0.0339     !      3.2847+-0.0992        ! definitely 1.0505x slower
   crypto-sha1                                        2.9638+-0.0115     ?      2.9830+-0.0611        ?
   date-format-tofte                                 11.1459+-0.1200     ?     11.2926+-0.1108        ? might be 1.0132x slower
   date-format-xparb                                  8.5976+-0.2139     ?      8.6431+-0.1014        ?
   math-cordic                                        4.2351+-0.0403            4.2184+-0.0212        
   math-partial-sums                                 10.2821+-0.0883           10.2799+-0.0858        
   math-spectral-norm                                 2.7360+-0.0189     ?      2.7406+-0.0223        ?
   regexp-dna                                        12.9440+-0.0887     ?     12.9746+-0.1066        ?
   string-base64                                      5.4131+-0.0258     ?      5.4253+-0.0533        ?
   string-fasta                                      10.1815+-0.1844           10.1636+-0.0666        
   string-tagcloud                                   14.9441+-0.1239     ?     15.0286+-0.1807        ?
   string-unpack-code                                29.5361+-0.1344     !     30.4605+-0.1397        ! definitely 1.0313x slower
   string-validate-input                              7.0053+-0.1241     ?      7.0428+-0.0337        ?

   &lt;arithmetic&gt; *                                     7.4183+-0.0262     !      7.4662+-0.0141        ! definitely 1.0065x slower
   &lt;geometric&gt;                                        5.9585+-0.0139     ?      5.9822+-0.0111        ? might be 1.0040x slower
   &lt;harmonic&gt;                                         4.8698+-0.0059     !      4.8906+-0.0120        ! definitely 1.0043x slower

                                                        TipOfTree                OneShotScope                                   
LongSpider:
   3d-cube                                         2722.1774+-36.7056        2692.5892+-6.7951          might be 1.0110x faster
   3d-morph                                        1504.0106+-1.0848     ?   1514.3566+-18.1234       ?
   3d-raytrace                                     1520.2257+-8.0148     ?   1526.9209+-21.0267       ?
   access-binary-trees                             2187.5921+-6.1430         2186.1170+-9.2454        
   access-fannkuch                                  666.7151+-3.0796     ?    668.2647+-0.3535        ?
   access-nbody                                    1498.3422+-6.0844         1495.7914+-0.4823        
   access-nsieve                                   1548.5310+-2.5732     ?   1550.0748+-3.8999        ?
   bitops-3bit-bits-in-byte                         121.4014+-0.1959     ?    122.0926+-1.5291        ?
   bitops-bits-in-byte                              639.0350+-2.8329          636.1316+-1.6904        
   bitops-nsieve-bits                              1045.9125+-0.4269     ?   1052.2952+-14.4386       ?
   controlflow-recursive                           1491.7919+-0.8168     ?   1497.4082+-11.6217       ?
   crypto-aes                                      1643.9363+-2.1172         1642.5767+-1.7645        
   crypto-md5                                      1170.0728+-1.2400     ?   1170.2151+-0.6776        ?
   crypto-sha1                                     1634.0455+-6.2475     ?   1635.2346+-4.7547        ?
   date-format-tofte                               1172.1312+-13.3355    ?   1192.9544+-25.6679       ? might be 1.0178x slower
   date-format-xparb                               1474.0205+-23.8198        1469.4283+-22.2984       
   math-cordic                                     1733.0909+-2.4705     ?   1734.7287+-3.7503        ?
   math-partial-sums                               1308.1891+-1.2965         1306.8180+-1.7479        
   math-spectral-norm                              1825.7603+-0.5118     ?   1826.4470+-0.7440        ?
   string-base64                                    505.1803+-1.8707          505.0239+-1.6082        
   string-fasta                                     993.3369+-5.6366          992.5731+-3.7595        
   string-tagcloud                                  380.3663+-0.8134     !    383.7274+-1.8097        ! definitely 1.0088x slower

   &lt;arithmetic&gt;                                    1308.4484+-2.2327     ?   1309.1713+-1.5920        ? might be 1.0006x slower
   &lt;geometric&gt; *                                   1114.8449+-1.3363     ?   1116.5717+-1.0905        ? might be 1.0015x slower
   &lt;harmonic&gt;                                       799.9866+-0.7523     ?    802.4882+-2.7926        ? might be 1.0031x slower

                                                        TipOfTree                OneShotScope                                   
V8Spider:
   crypto                                            79.3481+-0.3012     ?     79.3709+-0.1998        ?
   deltablue                                         98.2703+-1.2804           97.7791+-0.6150        
   earley-boyer                                      70.7925+-0.2143           70.7656+-0.3319        
   raytrace                                          39.8643+-0.7596     ?     39.8705+-0.2175        ?
   regexp                                            98.3138+-0.1825     !    100.0826+-0.1865        ! definitely 1.0180x slower
   richards                                         134.1364+-1.8609          131.8321+-1.3601          might be 1.0175x faster
   splay                                             45.9927+-0.4238           45.7737+-0.3350        

   &lt;arithmetic&gt;                                      80.9597+-0.3340           80.7821+-0.2843          might be 1.0022x faster
   &lt;geometric&gt; *                                     74.9921+-0.2943           74.8982+-0.2098          might be 1.0013x faster
   &lt;harmonic&gt;                                        69.0486+-0.3764           68.9877+-0.1811          might be 1.0009x faster

                                                        TipOfTree                OneShotScope                                   
Octane and V8v7:
   encrypt                                           0.46753+-0.00536          0.46496+-0.00036       
   decrypt                                           8.56716+-0.01079    ?     8.57435+-0.01832       ?
   deltablue                                x2       0.56851+-0.00691          0.56264+-0.00752         might be 1.0104x faster
   earley                                            0.89709+-0.00903    ?     0.90397+-0.00330       ?
   boyer                                            12.23240+-0.06140    ?    12.24362+-0.02797       ?
   raytrace                                 x2       4.29020+-0.04690    ?     4.32608+-0.05188       ?
   regexp                                   x2      33.19970+-0.18129         33.11474+-0.09815       
   richards                                 x2       0.42961+-0.00765          0.42311+-0.00769         might be 1.0153x faster
   splay                                    x2       0.63875+-0.00512    ^     0.62904+-0.00296       ^ definitely 1.0154x faster
   navier-stokes                            x2      10.93291+-0.01251    ^    10.71913+-0.01023       ^ definitely 1.0199x faster
   closure                                           0.42350+-0.00373    ?     0.42643+-0.00021       ?
   jquery                                            6.15723+-0.12149    ?     6.15725+-0.01713       ?
   gbemu                                    x2      71.81577+-0.80536    ?    72.05416+-0.75109       ?
   mandreel                                 x2     142.10405+-0.16399        142.04857+-0.19031       
   pdfjs                                    x2     102.05381+-0.14380    ?   102.06633+-0.31485       ?
   box2d                                    x2      35.23584+-0.19339    ?    35.24959+-0.15589       ?

V8v7:
   &lt;arithmetic&gt;                                      7.64272+-0.02343          7.60852+-0.01722         might be 1.0045x faster
   &lt;geometric&gt; *                                     2.51675+-0.00879          2.50016+-0.00835         might be 1.0066x faster
   &lt;harmonic&gt;                                        1.03430+-0.00667          1.02378+-0.00705         might be 1.0103x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                     31.97243+-0.06793         31.96759+-0.06891         might be 1.0002x faster
   &lt;geometric&gt; *                                     6.99138+-0.01622          6.96680+-0.01527         might be 1.0035x faster
   &lt;harmonic&gt;                                        1.43549+-0.00713          1.42433+-0.00836         might be 1.0078x faster

                                                        TipOfTree                OneShotScope                                   
Kraken:
   ai-astar                                          493.706+-0.616      ?     495.624+-3.449         ?
   audio-beat-detection                              236.864+-1.022      ?     237.331+-1.976         ?
   audio-dft                                         289.880+-0.743      ?     296.182+-13.023        ? might be 1.0217x slower
   audio-fft                                         143.720+-1.492      ?     143.842+-1.679         ?
   audio-oscillator                                  243.832+-0.290      ?     244.140+-0.411         ?
   imaging-darkroom                                  287.086+-3.859      ?     287.509+-3.878         ?
   imaging-desaturate                                158.377+-0.128            158.348+-0.128         
   imaging-gaussian-blur                             362.966+-0.780            362.589+-0.188         
   json-parse-financial                               79.895+-0.577      ?      80.565+-1.541         ?
   json-stringify-tinderbox                          104.638+-0.626      ?     105.071+-0.299         ?
   stanford-crypto-aes                                90.487+-0.538      ?      90.623+-1.490         ?
   stanford-crypto-ccm                               102.730+-1.426      ^      99.895+-0.996         ^ definitely 1.0284x faster
   stanford-crypto-pbkdf2                            264.099+-1.494      ^     258.934+-0.407         ^ definitely 1.0199x faster
   stanford-crypto-sha256-iterative                  113.445+-0.430      ?     113.868+-0.642         ?

   &lt;arithmetic&gt; *                                    212.266+-0.386      ?     212.466+-1.087         ? might be 1.0009x slower
   &lt;geometric&gt;                                       182.545+-0.412            182.517+-0.809           might be 1.0002x faster
   &lt;harmonic&gt;                                        157.700+-0.457            157.569+-0.824           might be 1.0008x faster

                                                        TipOfTree                OneShotScope                                   
JSRegress:
   adapt-to-double-divide                            22.7021+-0.1613     ?     22.8219+-0.2720        ?
   aliased-arguments-getbyval                         0.9610+-0.0177            0.9571+-0.0060        
   allocate-big-object                                2.6158+-0.0148     ?      2.6299+-0.0260        ?
   arity-mismatch-inlining                            0.9251+-0.0059     ?      0.9315+-0.0166        ?
   array-access-polymorphic-structure                 9.7276+-0.1004     ?      9.7901+-0.1166        ?
   array-nonarray-polymorhpic-access                 56.2602+-0.2349     ?     56.3471+-0.2983        ?
   array-with-double-add                              5.7534+-0.0654     ?      5.7541+-0.0360        ?
   array-with-double-increment                        4.3132+-0.0056            4.2996+-0.0576        
   array-with-double-mul-add                          6.8233+-0.0812            6.8034+-0.0758        
   array-with-double-sum                              8.0274+-0.0412            8.0103+-0.0828        
   array-with-int32-add-sub                          10.3701+-0.1433           10.3085+-0.0855        
   array-with-int32-or-double-sum                     8.0712+-0.0857            8.0480+-0.0483        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    118.0619+-0.8825     !    124.1497+-2.0082        ! definitely 1.0516x slower
   ArrayBuffer-DataView-alloc-long-lived             30.3120+-0.3023     !     33.4393+-0.2089        ! definitely 1.1032x slower
   ArrayBuffer-Int32Array-byteOffset                  7.0650+-0.0357            7.0436+-0.0687        
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    215.2676+-1.9545     ?    216.3990+-1.7910        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    167.1971+-1.1773     ?    168.6711+-0.9507        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    119.4686+-1.2348     !    122.0697+-1.1313        ! definitely 1.0218x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     51.5255+-1.3342     !     54.5854+-0.6586        ! definitely 1.0594x slower
   ArrayBuffer-Int8Array-alloc-long-lived            30.8562+-0.2781     !     32.7311+-0.1639        ! definitely 1.0608x slower
   ArrayBuffer-Int8Array-alloc                       27.6026+-0.2609     !     29.1875+-0.2004        ! definitely 1.0574x slower
   asmjs_bool_bug                                     9.5563+-0.0702            9.5521+-0.0544        
   basic-set                                         21.6335+-0.1799     ?     21.9867+-0.4851        ? might be 1.0163x slower
   big-int-mul                                        5.4874+-0.0637     ?      5.4983+-0.0109        ?
   boolean-test                                       4.3238+-0.0047            4.3073+-0.0575        
   branch-fold                                        4.9740+-0.0204            4.9517+-0.0073        
   cast-int-to-double                                12.4717+-0.1381     ?     12.5222+-0.1462        ?
   cell-argument                                     16.1583+-0.3221     ?     16.3788+-0.3108        ? might be 1.0136x slower
   cfg-simplify                                       3.9430+-0.0038            3.9316+-0.0367        
   cmpeq-obj-to-obj-other                            13.1133+-0.5304           12.2985+-0.5529          might be 1.0663x faster
   constant-test                                      8.8905+-0.0605     ?      8.8970+-0.0796        ?
   DataView-custom-properties                       124.2123+-0.7312     !    130.6236+-1.2927        ! definitely 1.0516x slower
   delay-tear-off-arguments-strictmode                3.5156+-0.0077            3.5148+-0.0040        
   destructuring-arguments-length                   170.2309+-0.9375     ?    173.1485+-2.9689        ? might be 1.0171x slower
   destructuring-arguments                            8.7196+-0.0487            8.6987+-0.1107        
   destructuring-swap                                 8.5377+-0.0572     ?      8.5862+-0.1173        ?
   direct-arguments-getbyval                          0.8363+-0.0066            0.8339+-0.0109        
   double-pollution-getbyval                         11.0638+-0.0564           11.0052+-0.1144        
   double-pollution-putbyoffset                       6.5115+-0.0503     ?      6.5375+-0.0461        ?
   empty-string-plus-int                             10.7662+-0.0583     !     11.1571+-0.0953        ! definitely 1.0363x slower
   emscripten-cube2hash                              50.3503+-0.1762     !     53.3073+-0.2492        ! definitely 1.0587x slower
   emscripten-memops                               8405.4104+-80.0080    ^   7967.2952+-2.2250        ^ definitely 1.0550x faster
   external-arguments-getbyval                        2.0385+-0.0558            2.0356+-0.0261        
   external-arguments-putbyval                        3.0042+-0.0153     ?      3.0455+-0.0308        ? might be 1.0137x slower
   Float32Array-matrix-mult                           6.3073+-0.0299            6.3010+-0.0274        
   Float32Array-to-Float64Array-set                  95.3202+-1.4241           93.9051+-1.6971          might be 1.0151x faster
   Float64Array-alloc-long-lived                    103.1201+-0.5320     ?    103.6332+-0.6986        ?
   Float64Array-to-Int16Array-set                   121.3198+-3.0295          118.2081+-1.0393          might be 1.0263x faster
   fold-double-to-int                                25.7610+-0.4819     !     36.7868+-0.4926        ! definitely 1.4280x slower
   for-of-iterate-array-entries                       8.5514+-0.0845     ?      8.5642+-0.0373        ?
   for-of-iterate-array-keys                          3.4653+-0.0607            3.4504+-0.0643        
   for-of-iterate-array-values                        2.9902+-0.0451            2.9240+-0.0571          might be 1.0226x faster
   function-dot-apply                                 3.1542+-0.0468            3.1190+-0.0075          might be 1.0113x faster
   function-test                                      4.7748+-0.0574            4.7084+-0.0092          might be 1.0141x faster
   get-by-id-chain-from-try-block                     7.5637+-0.0169     ?      7.5749+-0.0812        ?
   get-by-id-proto-or-self                           25.7743+-0.2483     ?     26.0391+-0.3965        ? might be 1.0103x slower
   get-by-id-self-or-proto                           23.6029+-0.6088     ?     23.9361+-0.6421        ? might be 1.0141x slower
   get_callee_monomorphic                             4.7621+-0.0990     ?      4.8252+-0.0156        ? might be 1.0133x slower
   get_callee_polymorphic                             4.4829+-0.0117            4.4824+-0.0179        
   global-var-const-infer-fire-from-opt               0.9447+-0.0175     ?      0.9535+-0.0072        ?
   global-var-const-infer                             0.7551+-0.0040     ?      0.7634+-0.0073        ? might be 1.0110x slower
   HashMap-put-get-iterate-keys                      41.6944+-0.6247           41.2675+-0.1872          might be 1.0103x faster
   HashMap-put-get-iterate                           59.0075+-0.3494           58.9100+-0.3807        
   HashMap-string-put-get-iterate                    53.7770+-0.3042     ?     54.4470+-0.5906        ? might be 1.0125x slower
   imul-double-only                                  17.8387+-0.1990           17.7988+-0.0651        
   imul-int-only                                     14.7550+-0.0637           14.7434+-0.0917        
   imul-mixed                                        22.2175+-0.9308           21.8364+-0.0982          might be 1.0175x faster
   in-four-cases                                     25.8217+-0.1490     ?     25.8478+-0.1294        ?
   in-one-case-false                                 12.0786+-0.1190           12.0072+-0.0835        
   in-one-case-true                                  12.1345+-0.0859           12.0439+-0.0872        
   in-two-cases                                      12.9005+-0.1713           12.8764+-0.1057        
   indexed-properties-in-objects                      4.6136+-0.0738     ?      4.6604+-0.0035        ? might be 1.0102x slower
   infer-one-time-closure-ten-vars                   96.3919+-0.3372     ^     92.2205+-0.0873        ^ definitely 1.0452x faster
   infer-one-time-closure-two-vars                   28.7663+-0.0569     !     28.9261+-0.0929        ! definitely 1.0056x slower
   infer-one-time-closure                            28.9384+-0.3469           28.8384+-0.0781        
   infer-one-time-deep-closure                       84.9158+-0.1283     ^     57.0003+-0.0838        ^ definitely 1.4897x faster
   inline-arguments-access                            1.6191+-0.0235            1.6122+-0.0133        
   inline-arguments-local-escape                     22.6715+-0.2672           22.5384+-0.4500        
   inline-get-scoped-var                              7.0287+-0.0794            7.0099+-0.0753        
   inlined-put-by-id-transition                      15.2491+-0.3237           15.2202+-0.3026        
   int-or-other-abs-then-get-by-val                   9.3451+-0.1101     ?      9.3935+-0.0829        ?
   int-or-other-abs-zero-then-get-by-val             41.3279+-0.1111           41.3119+-0.0929        
   int-or-other-add-then-get-by-val                  10.4262+-0.0691     ?     10.4728+-0.1090        ?
   int-or-other-add                                  10.8703+-0.1463     ?     10.8912+-0.1140        ?
   int-or-other-div-then-get-by-val                   6.3617+-0.0283            6.2862+-0.0975          might be 1.0120x faster
   int-or-other-max-then-get-by-val                   8.8079+-0.2467            8.6889+-0.1981          might be 1.0137x faster
   int-or-other-min-then-get-by-val                   6.9450+-0.0674     ?      6.9922+-0.0559        ?
   int-or-other-mod-then-get-by-val                   6.0505+-0.0579     ?      6.0611+-0.0598        ?
   int-or-other-mul-then-get-by-val                   6.5654+-0.0269            6.5082+-0.0624        
   int-or-other-neg-then-get-by-val                   7.8606+-0.0864     ?      7.8928+-0.0655        ?
   int-or-other-neg-zero-then-get-by-val             42.0269+-0.7783           41.9632+-0.1820        
   int-or-other-sub-then-get-by-val                  10.4667+-0.0139     ?     10.4990+-0.1475        ?
   int-or-other-sub                                   8.8875+-0.0586            8.8860+-0.0677        
   int-overflow-local                                 6.4410+-0.0362            6.4034+-0.0849        
   Int16Array-alloc-long-lived                       67.7701+-0.7499           67.3338+-0.2973        
   Int16Array-bubble-sort-with-byteLength            49.3572+-0.6716           49.1766+-0.1652        
   Int16Array-bubble-sort                            48.3394+-0.0835     ?     48.3405+-0.0998        ?
   Int16Array-load-int-mul                            1.7969+-0.0025     ?      1.8354+-0.0547        ? might be 1.0214x slower
   Int16Array-to-Int32Array-set                      89.3811+-0.6585     !     95.7147+-1.8291        ! definitely 1.0709x slower
   Int32Array-alloc-huge-long-lived                 713.1904+-21.6702         703.6446+-2.9225          might be 1.0136x faster
   Int32Array-alloc-huge                            805.4432+-7.0287          801.4568+-6.1012        
   Int32Array-alloc-large-long-lived                972.4818+-8.2474     ?    979.8113+-10.9262       ?
   Int32Array-alloc-large                            45.4967+-0.9098           45.3809+-1.1720        
   Int32Array-alloc-long-lived                       80.7400+-1.0075           80.1797+-0.3469        
   Int32Array-alloc                                   4.5212+-0.0251            4.5073+-0.0375        
   Int32Array-Int8Array-view-alloc                   16.0050+-0.2792           15.9126+-0.1826        
   int52-spill                                       12.8893+-0.2923           12.7516+-0.4586          might be 1.0108x faster
   Int8Array-alloc-long-lived                        67.0142+-0.5887     ?     67.0668+-0.5936        ?
   Int8Array-load-with-byteLength                     5.0209+-0.0615     ?      5.0216+-0.0596        ?
   Int8Array-load                                     4.9909+-0.0734     ?      4.9992+-0.0802        ?
   integer-divide                                    14.9573+-0.1075           14.9145+-0.1315        
   integer-modulo                                     2.0031+-0.0366            1.9871+-0.0076        
   large-int-captured                                 9.7858+-0.0825     ?      9.8463+-0.1205        ?
   large-int-neg                                     25.9356+-0.1048     ?     25.9485+-0.1131        ?
   large-int                                         23.5509+-0.2760           23.3574+-0.1231        
   lots-of-fields                                    10.9722+-0.1069           10.8812+-0.0843        
   make-indexed-storage                               4.2398+-0.0847            4.1966+-0.0556          might be 1.0103x faster
   make-rope-cse                                      5.9002+-0.0674     ?      5.9780+-0.0665        ? might be 1.0132x slower
   marsaglia-larger-ints                            111.9084+-0.1307     ?    111.9160+-0.2558        ?
   marsaglia-osr-entry                               47.7895+-0.8605           47.0704+-0.1552          might be 1.0153x faster
   marsaglia                                        466.4094+-6.2967          463.1654+-0.3678        
   method-on-number                                  30.8483+-0.6615           30.5392+-0.4325          might be 1.0101x faster
   negative-zero-divide                               0.4012+-0.0020     ?      0.4125+-0.0209        ? might be 1.0282x slower
   negative-zero-modulo                               0.3846+-0.0020     ?      0.3849+-0.0025        ?
   negative-zero-negate                               0.3735+-0.0057            0.3691+-0.0025          might be 1.0120x faster
   nested-function-parsing-random                   376.3047+-0.6459          375.8835+-0.8794        
   nested-function-parsing                           48.1440+-0.0995           48.0596+-0.3379        
   new-array-buffer-dead                              3.7068+-0.0057     ?      3.7364+-0.0633        ?
   new-array-buffer-push                             10.6046+-0.1125           10.5256+-0.1632        
   new-array-dead                                    28.6637+-0.3150           28.4985+-0.1051        
   new-array-push                                     6.8539+-0.0581     ?      6.9492+-0.0760        ? might be 1.0139x slower
   number-test                                        4.3233+-0.0676            4.2839+-0.0715        
   object-closure-call                               13.2671+-0.0284     ?     13.2905+-0.1164        ?
   object-test                                        4.7871+-0.0596            4.7717+-0.0887        
   poly-stricteq                                     76.0897+-0.1798     ?     76.6701+-1.1193        ?
   polymorphic-structure                             21.1383+-0.0932     ?     21.2832+-0.2416        ?
   polyvariant-monomorphic-get-by-id                 12.0039+-0.0951           11.9610+-0.1273        
   put-by-id                                         19.2801+-0.4312           19.1428+-0.4989        
   put-by-val-large-index-blank-indexing-type   
                                                     11.1167+-0.1308           11.0188+-0.1122        
   rare-osr-exit-on-local                            20.2517+-0.0924           20.2285+-0.0878        
   register-pressure-from-osr                        31.2659+-0.1052     ?     31.3699+-0.1592        ?
   simple-activation-demo                            35.1708+-0.1272           35.1330+-0.0740        
   slow-array-profile-convergence                     4.0642+-0.0246     ^      4.0059+-0.0123        ^ definitely 1.0145x faster
   slow-convergence                                   4.1927+-0.0262            4.1854+-0.0197        
   sparse-conditional                                 1.3465+-0.0053     ?      1.3533+-0.0223        ?
   splice-to-remove                                  77.3532+-0.3715           77.0774+-0.1283        
   stepanov_container                             11492.0859+-80.6636    ^  10498.8115+-18.9126       ^ definitely 1.0946x faster
   string-concat-object                               2.9811+-0.0150            2.9746+-0.0149        
   string-concat-pair-object                          2.9094+-0.0099     ?      2.9136+-0.0101        ?
   string-concat-pair-simple                         16.9693+-0.4603           16.6762+-0.3620          might be 1.0176x faster
   string-concat-simple                              17.1523+-0.2974           16.8564+-0.2165          might be 1.0176x faster
   string-cons-repeat                                10.4791+-0.0248     ?     10.4925+-0.0247        ?
   string-cons-tower                                 11.2033+-0.2471           11.1597+-0.2244        
   string-equality                                   42.6638+-0.4362           42.2596+-0.2457        
   string-get-by-val-big-char                        12.8846+-0.1549     ?     12.9794+-0.1428        ?
   string-get-by-val-out-of-bounds-insane             5.7890+-0.0688     ?      5.8027+-0.0635        ?
   string-get-by-val-out-of-bounds                    5.2772+-0.0813     ?      5.2836+-0.0613        ?
   string-get-by-val                                  4.8702+-0.0455     ?      4.9058+-0.0381        ?
   string-hash                                        2.7327+-0.0033     ?      2.7337+-0.0064        ?
   string-long-ident-equality                        37.4715+-0.8034     ?     37.8728+-0.7455        ? might be 1.0107x slower
   string-repeat-arith                               49.0844+-0.2253           49.0576+-0.7692        
   string-sub                                        97.4400+-0.3680     ?     97.5119+-0.3777        ?
   string-test                                        4.2778+-0.0481            4.2346+-0.0072          might be 1.0102x faster
   string-var-equality                               69.8576+-0.0775     ?     70.6419+-1.2387        ? might be 1.0112x slower
   structure-hoist-over-transitions                   3.3677+-0.0140            3.3628+-0.0155        
   switch-char-constant                               3.4670+-0.0076     ?      3.4676+-0.0099        ?
   switch-char                                        8.0857+-0.0890     ?      8.1471+-0.0552        ?
   switch-constant                                    9.2393+-0.1327            9.2392+-0.1488        
   switch-string-basic-big-var                       20.2885+-0.1430     ?     20.3177+-0.1020        ?
   switch-string-basic-big                           20.8561+-0.2004     ?     20.8790+-0.6229        ?
   switch-string-basic-var                           20.1438+-0.0396           20.0925+-0.1179        
   switch-string-basic                               21.6418+-0.8056           21.2045+-0.9025          might be 1.0206x faster
   switch-string-big-length-tower-var                28.9024+-0.1019     ?     29.0433+-0.0803        ?
   switch-string-length-tower-var                    21.5214+-0.0553     ?     21.5396+-0.1986        ?
   switch-string-length-tower                        16.4667+-0.1294           16.4335+-0.1209        
   switch-string-short                               16.4403+-0.1307           16.3954+-0.0939        
   switch                                            15.5464+-0.1204           15.5364+-0.1413        
   tear-off-arguments-simple                          2.1983+-0.0055     !      2.2106+-0.0062        ! definitely 1.0056x slower
   tear-off-arguments                                 3.5370+-0.0051     ?      3.5473+-0.0058        ?
   temporal-structure                                16.9730+-0.1177     ?     17.0001+-0.1209        ?
   to-int32-boolean                                  21.9828+-0.3032           21.9804+-0.1387        
   undefined-test                                     4.4166+-0.0476     ?      4.4805+-0.0189        ? might be 1.0145x slower
   weird-inlining-const-prop                          2.3160+-0.0514            2.2807+-0.0094          might be 1.0155x faster

   &lt;arithmetic&gt;                                     151.3140+-0.8892     ^    143.5037+-0.1228        ^ definitely 1.0544x faster
   &lt;geometric&gt; *                                     14.4630+-0.0181     ?     14.4742+-0.0130        ? might be 1.0008x slower
   &lt;harmonic&gt;                                         5.3463+-0.0119     ?      5.3552+-0.0198        ? might be 1.0017x slower

                                                        TipOfTree                OneShotScope                                   
All benchmarks:
   &lt;arithmetic&gt;                                     219.5645+-0.5823     ^    214.4900+-0.1224        ^ definitely 1.0237x faster
   &lt;geometric&gt;                                       20.7726+-0.0223     ?     20.7858+-0.0127        ? might be 1.0006x slower
   &lt;harmonic&gt;                                         4.8015+-0.0093            4.7962+-0.0100          might be 1.0011x faster

                                                        TipOfTree                OneShotScope                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   48.6822+-0.0603     ?     48.7221+-0.0401        ? might be 1.0008x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954662</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-27 22:53:45 -0800</bug_when>
    <thetext>Latest numbers:


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159826)
&quot;OneShotScope&quot; at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159826)

Collected 10 samples per benchmark/VM, with 10 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                OneShotScope                                   
SunSpider:
   3d-cube                                            7.6485+-0.0476     ?      7.7193+-0.0921        ?
   3d-morph                                           8.8303+-0.0881     ?      8.8326+-0.0589        ?
   3d-raytrace                                        8.7623+-0.1263            8.7482+-0.1125        
   access-binary-trees                                1.9956+-0.0085            1.9904+-0.0086        
   access-fannkuch                                    7.9632+-0.0654            7.9154+-0.1072        
   access-nbody                                       4.2303+-0.0080            4.2297+-0.0087        
   access-nsieve                                      4.9642+-0.0449     ?      5.0065+-0.0213        ?
   bitops-3bit-bits-in-byte                           1.8078+-0.0137            1.8054+-0.0054        
   bitops-bits-in-byte                                7.3122+-0.0435            7.2958+-0.0407        
   bitops-bitwise-and                                 2.9249+-0.0444     ?      2.9459+-0.0197        ?
   bitops-nsieve-bits                                 4.6034+-0.0077            4.6024+-0.0049        
   controlflow-recursive                              3.1186+-0.0096            3.1160+-0.0060        
   crypto-aes                                         5.4163+-0.0214     ?      5.4612+-0.0462        ?
   crypto-md5                                         3.1054+-0.0169     ?      3.1259+-0.0132        ?
   crypto-sha1                                        2.9491+-0.0063     ?      2.9608+-0.0091        ?
   date-format-tofte                                 11.1410+-0.2263           11.1388+-0.0906        
   date-format-xparb                                  8.6257+-0.2301            8.4680+-0.1100          might be 1.0186x faster
   math-cordic                                        4.2158+-0.0215     ?      4.2443+-0.0707        ?
   math-partial-sums                                 10.2153+-0.0787           10.1910+-0.0603        
   math-spectral-norm                                 2.7230+-0.0080     ?      2.7376+-0.0411        ?
   regexp-dna                                        12.9229+-0.1131     ?     12.9692+-0.1049        ?
   string-base64                                      5.4419+-0.1018            5.4241+-0.0366        
   string-fasta                                      10.1378+-0.1242     ?     10.2192+-0.1074        ?
   string-tagcloud                                   14.9370+-0.0650     ?     15.1020+-0.1197        ? might be 1.0110x slower
   string-unpack-code                                29.5283+-0.1108     !     30.7290+-0.1736        ! definitely 1.0407x slower
   string-validate-input                              7.0357+-0.0654            6.9834+-0.0397        

   &lt;arithmetic&gt; *                                     7.4060+-0.0118     !      7.4601+-0.0109        ! definitely 1.0073x slower
   &lt;geometric&gt;                                        5.9467+-0.0072     !      5.9633+-0.0088        ! definitely 1.0028x slower
   &lt;harmonic&gt;                                         4.8602+-0.0053     ?      4.8688+-0.0063        ? might be 1.0018x slower

                                                        TipOfTree                OneShotScope                                   
LongSpider:
   3d-cube                                         2708.2727+-7.7503     ^   2683.4885+-4.5678        ^ definitely 1.0092x faster
   3d-morph                                        1503.9377+-0.5251         1503.4351+-0.9175        
   3d-raytrace                                     1541.5607+-26.9132        1541.5329+-19.9650       
   access-binary-trees                             2193.6131+-9.7624         2189.1102+-9.7420        
   access-fannkuch                                  666.8275+-3.0173     ?    668.4414+-0.4705        ?
   access-nbody                                    1495.0340+-0.7495     ?   1504.1620+-20.1579       ?
   access-nsieve                                   1551.2558+-3.0818         1546.6283+-4.0443        
   bitops-3bit-bits-in-byte                         121.4314+-0.0797          121.4105+-0.0820        
   bitops-bits-in-byte                              637.7672+-2.4554     ?    638.4528+-1.3807        ?
   bitops-nsieve-bits                              1046.2604+-0.7379     ?   1052.5507+-13.2307       ?
   controlflow-recursive                           1492.5777+-2.6759     ?   1497.6714+-14.5327       ?
   crypto-aes                                      1640.7670+-2.1622     ?   1641.8434+-2.6661        ?
   crypto-md5                                      1170.5650+-2.3885     ?   1170.5740+-1.2081        ?
   crypto-sha1                                     1635.1857+-3.7009         1632.4840+-5.1304        
   date-format-tofte                               1170.6436+-21.6221        1168.8021+-4.8773        
   date-format-xparb                               1460.7292+-23.8136        1451.4164+-14.0562       
   math-cordic                                     1732.5437+-2.4872     ?   1734.8053+-7.5952        ?
   math-partial-sums                               1307.2211+-1.9656     ?   1307.2595+-2.0181        ?
   math-spectral-norm                              1825.7693+-0.4714     ?   1826.0452+-0.6362        ?
   string-base64                                    504.1490+-2.0943     ?    505.6795+-1.7876        ?
   string-fasta                                     990.7542+-5.3368     ?    997.8989+-5.0853        ?
   string-tagcloud                                  380.0960+-1.2322     !    385.8077+-0.9074        ! definitely 1.0150x slower

   &lt;arithmetic&gt;                                    1308.0437+-2.3231         1307.7045+-1.7172          might be 1.0003x faster
   &lt;geometric&gt; *                                   1114.4682+-1.8564     ?   1115.5860+-1.4889        ? might be 1.0010x slower
   &lt;harmonic&gt;                                       799.7115+-0.8282     ?    801.3569+-0.8473        ? might be 1.0021x slower

                                                        TipOfTree                OneShotScope                                   
V8Spider:
   crypto                                            79.5044+-0.3349           79.3219+-0.2112        
   deltablue                                         97.9512+-0.6720     ?     98.2339+-0.7789        ?
   earley-boyer                                      71.1273+-0.3809           70.8279+-0.4658        
   raytrace                                          39.8547+-0.7259     ?     39.8656+-0.2325        ?
   regexp                                            98.4219+-0.4505     !    100.1613+-0.4124        ! definitely 1.0177x slower
   richards                                         134.4465+-2.0282          133.7967+-1.4752        
   splay                                             45.9048+-0.7948           45.8050+-0.3159        

   &lt;arithmetic&gt;                                      81.0301+-0.4548     ?     81.1446+-0.2744        ? might be 1.0014x slower
   &lt;geometric&gt; *                                     75.0418+-0.3906     ?     75.1229+-0.1969        ? might be 1.0011x slower
   &lt;harmonic&gt;                                        69.0719+-0.4131     ?     69.1115+-0.1830        ? might be 1.0006x slower

                                                        TipOfTree                OneShotScope                                   
Octane and V8v7:
   encrypt                                           0.46525+-0.00030          0.46506+-0.00059       
   decrypt                                           8.56798+-0.02343    ?     8.56989+-0.01453       ?
   deltablue                                x2       0.56609+-0.00739    ?     0.56934+-0.00564       ?
   earley                                            0.89576+-0.00646    !     0.91272+-0.00891       ! definitely 1.0189x slower
   boyer                                            12.23495+-0.02186    ?    12.25689+-0.04702       ?
   raytrace                                 x2       4.30550+-0.05006          4.27630+-0.04865       
   regexp                                   x2      33.17402+-0.12169         33.12315+-0.14271       
   richards                                 x2       0.42211+-0.00465    ?     0.42548+-0.00981       ?
   splay                                    x2       0.63511+-0.00291          0.63412+-0.00344       
   navier-stokes                            x2      10.99954+-0.14743    ^    10.70294+-0.00335       ^ definitely 1.0277x faster
   closure                                           0.42164+-0.00034    !     0.42589+-0.00038       ! definitely 1.0101x slower
   jquery                                            6.11025+-0.01292    !     6.18102+-0.04487       ! definitely 1.0116x slower
   gbemu                                    x2      71.59491+-0.68593    ?    72.04601+-0.43173       ?
   mandreel                                 x2     142.02187+-0.08774    ?   142.14399+-0.14290       ?
   pdfjs                                    x2     101.94314+-0.45743    ^   100.98035+-0.18472       ^ definitely 1.0095x faster
   box2d                                    x2      35.33030+-0.22968         35.31408+-0.20398       

V8v7:
   &lt;arithmetic&gt;                                      7.64804+-0.01775    ^     7.60420+-0.02000       ^ definitely 1.0058x faster
   &lt;geometric&gt; *                                     2.50995+-0.00884          2.50571+-0.00947         might be 1.0017x faster
   &lt;harmonic&gt;                                        1.02611+-0.00471    ?     1.03027+-0.00881       ? might be 1.0041x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                     31.94927+-0.05359         31.89396+-0.04133         might be 1.0017x faster
   &lt;geometric&gt; *                                     6.97551+-0.01547          6.97255+-0.01624         might be 1.0004x faster
   &lt;harmonic&gt;                                        1.42492+-0.00568    ?     1.43186+-0.01055       ? might be 1.0049x slower

                                                        TipOfTree                OneShotScope                                   
Kraken:
   ai-astar                                          493.930+-0.455      ?     495.321+-3.352         ?
   audio-beat-detection                              236.762+-0.504      ?     237.857+-0.990         ?
   audio-dft                                         288.992+-0.579      ?     293.861+-8.504         ? might be 1.0168x slower
   audio-fft                                         143.126+-0.132      ?     143.956+-2.037         ?
   audio-oscillator                                  245.416+-3.386      ?     246.949+-4.587         ?
   imaging-darkroom                                  285.172+-0.761            285.002+-0.477         
   imaging-desaturate                                158.318+-0.159      ?     158.502+-0.324         ?
   imaging-gaussian-blur                             362.458+-0.104      ?     362.595+-0.201         ?
   json-parse-financial                               79.964+-0.488             79.758+-0.152         
   json-stringify-tinderbox                          104.747+-1.366            104.459+-0.345         
   stanford-crypto-aes                                91.068+-0.460             90.458+-0.617         
   stanford-crypto-ccm                                99.492+-3.900      ?     101.406+-1.861         ? might be 1.0192x slower
   stanford-crypto-pbkdf2                            265.573+-2.552      ^     261.285+-1.016         ^ definitely 1.0164x faster
   stanford-crypto-sha256-iterative                  114.071+-0.880            113.736+-0.362         

   &lt;arithmetic&gt; *                                    212.078+-0.437      ?     212.510+-0.695         ? might be 1.0020x slower
   &lt;geometric&gt;                                       182.244+-0.670      ?     182.572+-0.552         ? might be 1.0018x slower
   &lt;harmonic&gt;                                        157.301+-0.900      ?     157.551+-0.485         ? might be 1.0016x slower

                                                        TipOfTree                OneShotScope                                   
JSRegress:
   adapt-to-double-divide                            22.7182+-0.0577           22.6790+-0.0651        
   aliased-arguments-getbyval                         0.9534+-0.0033     ?      0.9708+-0.0376        ? might be 1.0182x slower
   allocate-big-object                                2.6170+-0.0160            2.6121+-0.0122        
   arity-mismatch-inlining                            0.9208+-0.0050     ?      0.9285+-0.0058        ?
   array-access-polymorphic-structure                 9.7157+-0.0823     ?      9.8010+-0.1248        ?
   array-nonarray-polymorhpic-access                 56.4544+-0.3145           56.2166+-0.2635        
   array-with-double-add                              5.7343+-0.0720     ?      5.7406+-0.0517        ?
   array-with-double-increment                        4.2944+-0.0544     ?      4.3331+-0.0269        ?
   array-with-double-mul-add                          6.8661+-0.0282            6.8085+-0.0555        
   array-with-double-sum                              8.0269+-0.0449     ?      8.0466+-0.0590        ?
   array-with-int32-add-sub                          10.4337+-0.1112           10.4328+-0.0783        
   array-with-int32-or-double-sum                     7.9567+-0.1084     ?      8.0012+-0.0743        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    117.8781+-0.9253     ?    118.5637+-1.0934        ?
   ArrayBuffer-DataView-alloc-long-lived             30.5758+-0.3879     ?     30.9739+-0.3349        ? might be 1.0130x slower
   ArrayBuffer-Int32Array-byteOffset                  7.1174+-0.0410            7.0896+-0.0423        
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    212.8243+-1.7198     ?    214.9618+-2.0182        ? might be 1.0100x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    166.5483+-1.2957     ?    167.6278+-0.5273        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    119.6312+-1.8413     ?    120.0677+-1.4711        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     51.3305+-1.5401           50.1561+-1.3029          might be 1.0234x faster
   ArrayBuffer-Int8Array-alloc-long-lived            30.9628+-0.2515           30.8318+-0.4277        
   ArrayBuffer-Int8Array-alloc                       27.4837+-0.1357     ^     26.7450+-0.1216        ^ definitely 1.0276x faster
   asmjs_bool_bug                                     9.5054+-0.1134     ?      9.5381+-0.1042        ?
   basic-set                                         21.5947+-0.1403     ?     21.5982+-0.1284        ?
   big-int-mul                                        5.4900+-0.0242     ?      5.5175+-0.0584        ?
   boolean-test                                       4.3225+-0.0053     ?      4.3493+-0.0435        ?
   branch-fold                                        4.9313+-0.0556     ?      4.9788+-0.0423        ?
   cast-int-to-double                                12.4286+-0.1006           12.3873+-0.1227        
   cell-argument                                     16.1521+-0.3948           15.8756+-0.4052          might be 1.0174x faster
   cfg-simplify                                       3.9258+-0.0446     ?      3.9306+-0.0501        ?
   cmpeq-obj-to-obj-other                            12.8427+-0.4047           12.1826+-0.4458          might be 1.0542x faster
   constant-test                                      8.7936+-0.1320     ?      8.8338+-0.0858        ?
   DataView-custom-properties                       124.1860+-0.6923     !    125.5629+-0.6156        ! definitely 1.0111x slower
   delay-tear-off-arguments-strictmode                3.5081+-0.0032     !      3.5174+-0.0043        ! definitely 1.0026x slower
   destructuring-arguments-length                   168.8106+-0.6140     !    175.0004+-5.1016        ! definitely 1.0367x slower
   destructuring-arguments                            8.7357+-0.1245            8.7114+-0.1053        
   destructuring-swap                                 8.5253+-0.0986            8.5077+-0.0993        
   direct-arguments-getbyval                          0.8378+-0.0041     ?      0.8432+-0.0293        ?
   double-pollution-getbyval                         11.1044+-0.1233           10.9699+-0.0943          might be 1.0123x faster
   double-pollution-putbyoffset                       6.5099+-0.0404     !      6.7816+-0.2184        ! definitely 1.0417x slower
   empty-string-plus-int                             10.7692+-0.0586     !     11.2218+-0.0960        ! definitely 1.0420x slower
   emscripten-cube2hash                              50.3747+-0.2801     !     53.5160+-0.4043        ! definitely 1.0624x slower
   emscripten-memops                               8371.1953+-5.5819     ^   7769.7178+-1.9508        ^ definitely 1.0774x faster
   external-arguments-getbyval                        2.0031+-0.0173     ?      2.0250+-0.0163        ? might be 1.0109x slower
   external-arguments-putbyval                        3.0067+-0.0130     ?      3.0228+-0.0149        ?
   Float32Array-matrix-mult                           6.3292+-0.0233     ?      6.3521+-0.0509        ?
   Float32Array-to-Float64Array-set                  93.8699+-0.8006     ?     96.6605+-5.8271        ? might be 1.0297x slower
   Float64Array-alloc-long-lived                    103.3303+-0.4878          103.3190+-0.5684        
   Float64Array-to-Int16Array-set                   120.9917+-2.3665     ^    116.5884+-0.3095        ^ definitely 1.0378x faster
   fold-double-to-int                                25.6375+-0.2847     ^     20.3150+-0.1123        ^ definitely 1.2620x faster
   for-of-iterate-array-entries                       8.6290+-0.1545            8.5636+-0.1075        
   for-of-iterate-array-keys                          3.4716+-0.0397     ?      3.5209+-0.0437        ? might be 1.0142x slower
   for-of-iterate-array-values                        2.9588+-0.0446            2.9556+-0.0494        
   function-dot-apply                                 3.1271+-0.0198            3.1244+-0.0119        
   function-test                                      4.7235+-0.0482     !      4.8508+-0.0787        ! definitely 1.0269x slower
   get-by-id-chain-from-try-block                     7.6144+-0.0480            7.5798+-0.0846        
   get-by-id-proto-or-self                           25.8921+-0.2656     ?     26.2924+-0.3529        ? might be 1.0155x slower
   get-by-id-self-or-proto                           23.9998+-0.6667           23.6386+-0.5759          might be 1.0153x faster
   get_callee_monomorphic                             4.7111+-0.0289     ?      4.8015+-0.0714        ? might be 1.0192x slower
   get_callee_polymorphic                             4.5052+-0.0471            4.4769+-0.0124        
   global-var-const-infer-fire-from-opt               0.9517+-0.0127            0.9399+-0.0086          might be 1.0125x faster
   global-var-const-infer                             0.7583+-0.0058            0.7580+-0.0049        
   HashMap-put-get-iterate-keys                      41.5343+-0.2847           41.4532+-0.2141        
   HashMap-put-get-iterate                           59.3109+-0.3537           58.9591+-0.4245        
   HashMap-string-put-get-iterate                    53.7095+-0.3904     ?     53.9771+-0.3575        ?
   imul-double-only                                  18.0510+-0.9142           17.7303+-0.1086          might be 1.0181x faster
   imul-int-only                                     14.8069+-0.0768     ?     14.8524+-0.1067        ?
   imul-mixed                                        21.8624+-0.1297     ?     21.8723+-0.1204        ?
   in-four-cases                                     25.8836+-0.1155           25.8793+-0.1251        
   in-one-case-false                                 12.1741+-0.0891           12.0724+-0.0963        
   in-one-case-true                                  12.0572+-0.1443           12.0499+-0.0993        
   in-two-cases                                      12.8210+-0.1197     ?     12.8440+-0.0823        ?
   indexed-properties-in-objects                      4.6607+-0.0084            4.6576+-0.0031        
   infer-one-time-closure-ten-vars                   96.2335+-0.1510     ^     92.2606+-0.0711        ^ definitely 1.0431x faster
   infer-one-time-closure-two-vars                   28.7868+-0.1566     ?     28.8248+-0.1235        ?
   infer-one-time-closure                            28.7549+-0.0933           28.6826+-0.0831        
   infer-one-time-deep-closure                       84.7707+-0.0879     ^     60.8711+-0.1115        ^ definitely 1.3926x faster
   inline-arguments-access                            1.6084+-0.0152            1.6063+-0.0184        
   inline-arguments-local-escape                     22.4989+-0.2359     ?     22.9152+-0.2472        ? might be 1.0185x slower
   inline-get-scoped-var                              7.0562+-0.1028            7.0326+-0.0699        
   inlined-put-by-id-transition                      15.1634+-0.2373     ?     15.2928+-0.3042        ?
   int-or-other-abs-then-get-by-val                   9.3473+-0.1073            9.3124+-0.1442        
   int-or-other-abs-zero-then-get-by-val             41.6950+-0.4662     ^     40.2167+-0.6409        ^ definitely 1.0368x faster
   int-or-other-add-then-get-by-val                  10.5243+-0.0728           10.5028+-0.0414        
   int-or-other-add                                  10.9139+-0.0524           10.8992+-0.0982        
   int-or-other-div-then-get-by-val                   6.3389+-0.0674            6.3256+-0.0624        
   int-or-other-max-then-get-by-val                   8.6572+-0.1820     ?      8.8358+-0.1963        ? might be 1.0206x slower
   int-or-other-min-then-get-by-val                   6.9002+-0.0919     ?      6.9687+-0.0364        ?
   int-or-other-mod-then-get-by-val                   6.0539+-0.1021            6.0269+-0.0776        
   int-or-other-mul-then-get-by-val                   6.5071+-0.0570     ?      6.5422+-0.0525        ?
   int-or-other-neg-then-get-by-val                   7.8348+-0.0169            7.8249+-0.0725        
   int-or-other-neg-zero-then-get-by-val             42.0239+-0.2189     ^     40.9346+-0.7664        ^ definitely 1.0266x faster
   int-or-other-sub-then-get-by-val                  10.5179+-0.1137           10.5026+-0.0770        
   int-or-other-sub                                   8.8215+-0.0946     ?      8.9082+-0.0778        ?
   int-overflow-local                                 6.3831+-0.1088            6.3237+-0.1194        
   Int16Array-alloc-long-lived                       67.7608+-0.9895           67.6720+-0.4766        
   Int16Array-bubble-sort-with-byteLength            49.0090+-0.1470           48.9869+-0.0924        
   Int16Array-bubble-sort                            48.3885+-0.1430     ?     48.4307+-0.2374        ?
   Int16Array-load-int-mul                            1.7998+-0.0057            1.7986+-0.0054        
   Int16Array-to-Int32Array-set                      90.0113+-1.2460     !     94.4382+-0.4435        ! definitely 1.0492x slower
   Int32Array-alloc-huge-long-lived                 703.7467+-3.2407     ?    703.8888+-3.1176        ?
   Int32Array-alloc-huge                            807.1867+-5.8874          803.4851+-5.8786        
   Int32Array-alloc-large-long-lived                977.6018+-9.7857     ?    983.5882+-7.5314        ?
   Int32Array-alloc-large                            45.1132+-0.8189     ?     45.5322+-0.8202        ?
   Int32Array-alloc-long-lived                       80.4105+-0.4653     ?     80.5498+-0.8082        ?
   Int32Array-alloc                                   4.4991+-0.0162            4.4806+-0.0112        
   Int32Array-Int8Array-view-alloc                   16.0513+-0.1369     ^     15.6723+-0.0772        ^ definitely 1.0242x faster
   int52-spill                                       12.7818+-0.2473     ?     12.9700+-0.2057        ? might be 1.0147x slower
   Int8Array-alloc-long-lived                        67.6580+-0.4670           67.4412+-0.9184        
   Int8Array-load-with-byteLength                     5.0169+-0.0504     ?      5.0488+-0.0040        ?
   Int8Array-load                                     5.0488+-0.0055     ?      5.0521+-0.0094        ?
   integer-divide                                    14.8457+-0.1260     ?     14.9902+-0.0898        ?
   integer-modulo                                     2.0067+-0.0453            1.9931+-0.0133        
   large-int-captured                                 9.7572+-0.0942            9.7534+-0.1118        
   large-int-neg                                     25.8753+-0.1398           25.8633+-0.1739        
   large-int                                         23.3638+-0.1569           23.3625+-0.1214        
   lots-of-fields                                    10.9458+-0.1129           10.9129+-0.0890        
   make-indexed-storage                               4.2430+-0.0154            4.2332+-0.0595        
   make-rope-cse                                      5.9715+-0.1096            5.9463+-0.0649        
   marsaglia-larger-ints                            111.8962+-0.1524     ?    111.9193+-0.1989        ?
   marsaglia-osr-entry                               47.0910+-0.1156           47.0748+-0.0407        
   marsaglia                                        463.5420+-0.2957          463.4820+-0.3561        
   method-on-number                                  30.4450+-0.6266     ?     30.6554+-0.4180        ?
   negative-zero-divide                               0.4028+-0.0043     ?      0.4030+-0.0066        ?
   negative-zero-modulo                               0.3861+-0.0028            0.3846+-0.0013        
   negative-zero-negate                               0.3686+-0.0013     ?      0.3789+-0.0234        ? might be 1.0282x slower
   nested-function-parsing-random                   376.7093+-0.8564     !    379.2321+-0.3461        ! definitely 1.0067x slower
   nested-function-parsing                           47.9618+-0.0889     !     48.2964+-0.1760        ! definitely 1.0070x slower
   new-array-buffer-dead                              3.7005+-0.0063     ?      3.7031+-0.0140        ?
   new-array-buffer-push                             10.5848+-0.0953           10.5181+-0.1586        
   new-array-dead                                    28.4680+-0.1220     ?     28.5016+-0.0556        ?
   new-array-push                                     6.9084+-0.0562            6.8883+-0.0648        
   number-test                                        4.2816+-0.0051     ?      4.2902+-0.0474        ?
   object-closure-call                               13.2451+-0.0501           13.2234+-0.0947        
   object-test                                        4.8071+-0.0229     ?      4.8458+-0.0169        ?
   poly-stricteq                                     76.2303+-0.4124           75.9767+-0.6369        
   polymorphic-structure                             21.1254+-0.1297           21.0972+-0.0844        
   polyvariant-monomorphic-get-by-id                 11.9734+-0.1627           11.9678+-0.1417        
   put-by-id                                         19.4370+-0.5217           19.2250+-0.2510          might be 1.0110x faster
   put-by-val-large-index-blank-indexing-type   
                                                     11.1604+-0.2929     ?     11.3182+-0.2498        ? might be 1.0141x slower
   rare-osr-exit-on-local                            20.2833+-0.1172           20.2276+-0.1024        
   register-pressure-from-osr                        31.4558+-0.3712           31.2075+-0.0788        
   simple-activation-demo                            35.3943+-0.4537           35.0796+-0.1320        
   slow-array-profile-convergence                     4.0608+-0.0203     ?      4.0664+-0.0824        ?
   slow-convergence                                   4.1760+-0.0149     ?      4.1947+-0.0365        ?
   sparse-conditional                                 1.3457+-0.0076            1.3443+-0.0049        
   splice-to-remove                                  77.0906+-0.1466     ?     77.5315+-0.9783        ?
   stepanov_container                             11446.1160+-18.3759    ^  10573.2436+-19.5492       ^ definitely 1.0826x faster
   string-concat-object                               3.0058+-0.0293            2.9853+-0.0218        
   string-concat-pair-object                          2.9227+-0.0125            2.9095+-0.0104        
   string-concat-pair-simple                         17.2324+-0.3121           17.2315+-0.1705        
   string-concat-simple                              17.0299+-0.2610     ?     17.1011+-0.3532        ?
   string-cons-repeat                                10.5317+-0.0873           10.5277+-0.0383        
   string-cons-tower                                 11.1246+-0.0773           11.0250+-0.0477        
   string-equality                                   42.5151+-0.1436     ?     42.5492+-0.0807        ?
   string-get-by-val-big-char                        13.2502+-1.1463     ?     13.5130+-0.9177        ? might be 1.0198x slower
   string-get-by-val-out-of-bounds-insane             5.8066+-0.0552            5.7779+-0.0594        
   string-get-by-val-out-of-bounds                    5.2883+-0.0599     ?      5.2996+-0.0488        ?
   string-get-by-val                                  4.8884+-0.0057     !      4.9358+-0.0296        ! definitely 1.0097x slower
   string-hash                                        2.7381+-0.0061            2.7376+-0.0037        
   string-long-ident-equality                        37.4287+-0.6089     ?     38.0379+-1.3002        ? might be 1.0163x slower
   string-repeat-arith                               48.7583+-0.2751     ?     48.8231+-0.7553        ?
   string-sub                                        98.6113+-1.3684           97.5746+-0.5648          might be 1.0106x faster
   string-test                                        4.2638+-0.0281            4.2581+-0.0236        
   string-var-equality                               69.9855+-0.1515           69.8421+-0.1430        
   structure-hoist-over-transitions                   3.3540+-0.0068     ?      3.4177+-0.0940        ? might be 1.0190x slower
   switch-char-constant                               3.4776+-0.0115     ?      3.4916+-0.0506        ?
   switch-char                                        8.1326+-0.0281            8.0751+-0.0889        
   switch-constant                                    9.2709+-0.1574            9.1812+-0.1304        
   switch-string-basic-big-var                       20.3039+-0.1245     ?     20.3833+-0.2679        ?
   switch-string-basic-big                           20.8411+-0.2993     ?     20.9029+-1.3900        ?
   switch-string-basic-var                           19.9922+-0.1017     ?     20.1559+-0.1249        ?
   switch-string-basic                               21.8211+-0.5184           21.4977+-0.3603          might be 1.0150x faster
   switch-string-big-length-tower-var                28.9237+-0.1338     ?     28.9375+-0.1068        ?
   switch-string-length-tower-var                    21.5026+-0.1508           21.4792+-0.0966        
   switch-string-length-tower                        16.4596+-0.0843           16.4525+-0.0376        
   switch-string-short                               16.3688+-0.1196     ?     16.4103+-0.0967        ?
   switch                                            15.4976+-0.1230     ?     15.5786+-0.0986        ?
   tear-off-arguments-simple                          2.1975+-0.0053     ?      2.2104+-0.0103        ?
   tear-off-arguments                                 3.5428+-0.0114     ?      3.5440+-0.0090        ?
   temporal-structure                                17.0703+-0.1031           17.0250+-0.0833        
   to-int32-boolean                                  21.9773+-0.1491           21.7451+-0.1735          might be 1.0107x faster
   undefined-test                                     4.4607+-0.0353     ?      4.4884+-0.0740        ?
   weird-inlining-const-prop                          2.2791+-0.0081     ?      2.2859+-0.0129        ?

   &lt;arithmetic&gt;                                     150.8140+-0.0883     ^    142.6756+-0.1522        ^ definitely 1.0570x faster
   &lt;geometric&gt; *                                     14.4512+-0.0109     ^     14.4105+-0.0210        ^ definitely 1.0028x faster
   &lt;harmonic&gt;                                         5.3404+-0.0038     ?      5.3541+-0.0261        ? might be 1.0026x slower

                                                        TipOfTree                OneShotScope                                   
All benchmarks:
   &lt;arithmetic&gt;                                     219.1923+-0.1790     ^    213.8327+-0.1568        ^ definitely 1.0251x faster
   &lt;geometric&gt;                                       20.7512+-0.0104     ^     20.7213+-0.0165        ^ definitely 1.0014x faster
   &lt;harmonic&gt;                                         4.7864+-0.0055     ?      4.8016+-0.0135        ? might be 1.0032x slower

                                                        TipOfTree                OneShotScope                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   48.6392+-0.0568     ?     48.7053+-0.0292        ? might be 1.0014x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954663</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-27 23:07:53 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/159834</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954687</commentid>
    <comment_count>22</comment_count>
    <who name="Pascal Jacquemart">p.jacquemart</who>
    <bug_when>2013-11-28 04:08:45 -0800</bug_when>
    <thetext>Oddly it breaks the cross compilation for ARM</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217756</attachid>
            <date>2013-11-23 20:48:52 -0800</date>
            <delta_ts>2013-11-24 15:50:08 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>24436</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5NzMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBA
CisyMDEzLTExLTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5mZXIgb25lLXRpbWUgc2NvcGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjQ4MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZGV0ZWN0cyBKU0FjdGl2YXRpb25zIHRoYXQgYXJl
IGNyZWF0ZWQgb25seSBvbmNlLiBUaGUgSlNBY3RpdmF0aW9uIHBvaW50ZXIgaXMgdGhlbgorICAg
ICAgICBiYWtlZCBpbnRvIHRoZSBtYWNoaW5lIGNvZGUuCisKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1
Y3Rpb24uaDoKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgKEpTQzo6cGFk
T3Bjb2RlTmFtZSk6CisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5oOgorICAgICAgICAo
SlNDOjpJbmxpbmVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZSk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRSZXNvbHZlU2NvcGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6Ojo6ZXhlY3V0ZUVmZmVjdHMpOgor
ICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXpl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6
CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNT
eW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3ltYm9sVGFibGUpOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlOjpoYW5kbGUpOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVu
dGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmFic3RyYWN0
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU9wOjpSZXNvbHZl
T3ApOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoSlNDOjpT
eW1ib2xUYWJsZTo6U3ltYm9sVGFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUu
aDoKKwogMjAxMy0xMS0yMiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29t
PgogCiAgICAgICAgIEpTQyBPYmotQyBBUEkgc2hvdWxkIGhhdmUgcmVhbCBkb2N1bWVudGF0aW9u
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMTU5NzMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjUsNiArMTM2NSw3IEBAIHZvaWQgQ29kZUJs
b2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgICAgICsraXQ7IC8vIGRlcHRo
CiAgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJyZXNvbHZlX3Njb3BlIik7CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVkIiwg
cmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSkuZGF0
YSgpLCByZXNvbHZlTW9kZUFuZFR5cGUpOworICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6IHsKQEAg
LTE3NTMsNiArMTc1NCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUq
IG8KICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZSht
X2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBzY29wZSwgaWRlbnQsIEdldCwgdHlwZSk7CiAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDNdLnUub3BlcmFuZCA9IG9wLnR5cGU7CiAgICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IG9wLmRlcHRoOworICAgICAg
ICAgICAgaWYgKG9wLmFjdGl2YXRpb24pCisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA1XS51LmFjdGl2YXRpb24uc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLmFjdGl2YXRp
b24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTc3MCw3ICsxNzczLDkg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAg
UmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5n
bG9iYWxFeGVjKCksIHNjb3BlLCBpZGVudCwgR2V0LCBtb2RlQW5kVHlwZS50eXBlKCkpOwogCiAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IFJlc29sdmVNb2RlQW5k
VHlwZShtb2RlQW5kVHlwZS5tb2RlKCksIG9wLnR5cGUpLm9wZXJhbmQoKTsKLSAgICAgICAgICAg
IGlmIChvcC5zdHJ1Y3R1cmUpCisgICAgICAgICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIg
fHwgb3AudHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hwb2lu
dFNldDsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkKICAgICAgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDVdLnUuc3RydWN0dXJlLnNldCgqdm0oKSwgb3duZXJFeGVjdXRh
YmxlLCBvcC5zdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnBv
aW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcC5vcGVyYW5kKTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTc4MywxMCArMTc4OCw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlw
dEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3Ry
YWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBzY29wZSwgaWRlbnQsIFB1
dCwgbW9kZUFuZFR5cGUudHlwZSgpKTsKIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0
XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9kZUFuZFR5cGUobW9kZUFuZFR5cGUubW9kZSgpLCBvcC50
eXBlKS5vcGVyYW5kKCk7Ci0gICAgICAgICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIgfHwg
b3AudHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKCFvcC5zdHJ1Y3R1cmUpOworICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0g
R2xvYmFsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykK
ICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IG9w
LndhdGNocG9pbnRTZXQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkKKyAg
ICAgICAgICAgIGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDVdLnUuc3RydWN0dXJlLnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5z
dHJ1Y3R1cmUpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIgPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihvcC5vcGVyYW5kKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMjE3Miw2ICsyMTc2LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IGdldCBj
YWxsZWUgd2l0aCBmdW5jdGlvbiAlcC5cbiIsIGN1ckluc3RydWN0aW9uWzJdLnUuanNDZWxsLmdl
dCgpKTsKICAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlvblsyXS51LmpzQ2VsbC5jbGVhcigp
OwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Nj
b3BlOiB7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0FjdGl2YXRpb24+JiBh
Y3RpdmF0aW9uID0gY3VySW5zdHJ1Y3Rpb25bNV0udS5hY3RpdmF0aW9uOworICAgICAgICAgICAg
ICAgIGlmICghYWN0aXZhdGlvbiB8fCBIZWFwOjppc01hcmtlZChhY3RpdmF0aW9uLmdldCgpKSkK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIGRl
YWQgYWN0aXZhdGlvbiAlcC5cbiIsIGFjdGl2YXRpb24uZ2V0KCkpOworICAgICAgICAgICAgICAg
IGFjdGl2YXRpb24uY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CiAgICAgICAgICAgICBjYXNl
IG9wX3B1dF90b19zY29wZTogewogICAgICAgICAgICAgICAgIFJlc29sdmVNb2RlQW5kVHlwZSBt
b2RlQW5kVHlwZSA9CkBAIC0yMTgyLDcgKzIxOTUsNyBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUgfHwgSGVh
cDo6aXNNYXJrZWQoc3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHNjb3BlIGFjY2VzcyB3aXRoIHN0cnVj
dHVyZSAlcC5cbiIsIHN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dGKCJDbGVhcmluZyBzY29wZSBhY2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBzdHJ1Y3R1
cmUuZ2V0KCkpOwogICAgICAgICAgICAgICAgIHN0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDE1OTczMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTYsNiArMTE2LDcgQEAgc3RydWN0IEluc3RydWN0aW9uIHsKICAgICAgICAgQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZSogYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKICAgICAgICAgT2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUqIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwogICAgICAgICBXYXRjaHBvaW50
U2V0KiB3YXRjaHBvaW50U2V0OworICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQWN0aXZhdGlv
bj4gYWN0aXZhdGlvbjsKICAgICAgICAgdm9pZCogcG9pbnRlcjsKICAgICAgICAgYm9vbCogcHJl
ZGljYXRlUG9pbnRlcjsKICAgICB9IHU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wY29kZS5oCShyZXZpc2lvbiAxNTk3MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBtYWNybyhvcF9nZXRfcG5hbWVzLCA2KSBcCiAgICAgbWFjcm8ob3Bf
bmV4dF9wbmFtZSwgNykgXAogICAgIFwKLSAgICBtYWNybyhvcF9yZXNvbHZlX3Njb3BlLCA1KSBc
CisgICAgbWFjcm8ob3BfcmVzb2x2ZV9zY29wZSwgNikgXAogICAgIG1hY3JvKG9wX2dldF9mcm9t
X3Njb3BlLCA4KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKICAgICBtYWNybyhvcF9wdXRf
dG9fc2NvcGUsIDcpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9uIDE1OTczMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDks
MTkgQEAgcHVibGljOgogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIG5vdGlmeVdyaXRlKCkKKyAgICB7CisgICAgICAgIGlmIChpc0ZhdCgpKSB7
CisgICAgICAgICAgICBmYXQoKS0+bm90aWZ5V3JpdGUoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZGVjb2RlU3RhdGUobV9kYXRhKSA9PSBDbGVhcldhdGNo
cG9pbnQpCisgICAgICAgICAgICBtX2RhdGEgPSBlbmNvZGVTdGF0ZShJc1dhdGNoZWQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2RhdGEgPSBlbmNvZGVTdGF0ZShJc0ludmFsaWRhdGVk
KTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICB9CisgICAgCiBwcml2YXRl
OgogICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgSXNUaGluRmxhZyAgICAgICAgPSAxOwogICAg
IHN0YXRpYyBjb25zdCB1aW50cHRyX3QgU3RhdGVNYXNrICAgICAgICAgPSA2OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDE1OTczMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIw
LDYgKzEyMjAsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sCiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KGlkZW50aWZpZXIpKTsKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVR5cGUoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKDApOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICByZXR1cm4gZHN0
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNTk3MzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExNDUsNiArMTE0NSw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIG1fZ3JhcGgsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICBjYXNlIEFjdGl2YXRpb25BbGxvY2F0aW9uV2F0Y2hwb2ludDoKKyAgICAg
ICAgYnJlYWs7CiAgICAgCiAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6CiAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShTcGVjQXJndW1lbnRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTk3MzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgog
I2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCisjaW5j
bHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IlByZWNpc2VKdW1wVGFyZ2V0cy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKQEAgLTMw
NDYsOSArMzA0NywxOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3RhbnQo
bV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgICAg
ICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgZ2V0U2NvcGUobV9pbmxpbmVTdGFja1RvcC0+bV9j
b2RlQmxvY2stPm5lZWRzQWN0aXZhdGlvbigpLCBkZXB0aCkpOworICAgICAgICAgICAgY2FzZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgICAgIEpTQWN0
aXZhdGlvbiogYWN0aXZhdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LmFjdGl2YXRpb24u
Z2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKGFjdGl2YXRpb24KKyAgICAgICAgICAgICAgICAg
ICAgJiYgYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKS0+bV9hY3RpdmF0aW9uQWxsb2NhdGVkT25j
ZS5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEFjdGl2
YXRpb25BbGxvY2F0aW9uV2F0Y2hwb2ludCwgT3BJbmZvKGFjdGl2YXRpb24tPnN5bWJvbFRhYmxl
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxs
Q29uc3RhbnQoYWN0aXZhdGlvbikpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLAor
ICAgICAgICAgICAgICAgICAgICBnZXRTY29wZShtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9j
ay0+bmVlZHNBY3RpdmF0aW9uKCksIGRlcHRoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIER5bmFtaWM6CiAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTMwNjMsMTEgKzMwNzMsMTUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygp
W2lkZW50aWZpZXJOdW1iZXJdOwogICAgICAgICAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBSZXNvbHZlTW9kZUFuZFR5cGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkudHlw
ZSgpOwogCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gMDsKKyAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHdhdGNo
cG9pbnRzID0gMDsKICAgICAgICAgICAgIHVpbnRwdHJfdCBvcGVyYW5kOwogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgICAg
ICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgICAgICAgICB3YXRjaHBv
aW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQ7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bNV0udS5zdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgb3BlcmFuZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5wb2ludGVy
KTsKICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgJKHJldmlzaW9uIDE1OTczMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTQgKzE0NSwyMCBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIAogICAgIGNh
c2UgTm90aWZ5UHV0R2xvYmFsVmFyOgogICAgICAgICB3cml0ZShXYXRjaHBvaW50X2ZpcmUpOwor
ICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIENy
ZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6CiAgICAgICAgIHdyaXRl
KFNpZGVTdGF0ZSk7CisgICAgICAgIHdyaXRlKFdhdGNocG9pbnRfZmlyZSk7CiAgICAgICAgIHJl
YWQoR0NTdGF0ZSk7CiAgICAgICAgIHdyaXRlKEdDU3RhdGUpOwogICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50OgorICAgICAg
ICByZWFkKFdhdGNocG9pbnRfZmlyZSk7CisgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZXNl
IGFyZSBmb3J3YXJkLWV4aXRpbmcgbm9kZXMgdGhhdCBhc3N1bWUgdGhhdCB0aGUgc3Vic2VxdWVu
dCBpbnN0cnVjdGlvbgogICAgIC8vIGlzIGEgTW92SGludCwgYW5kIHRoZXkgdHJ5IHRvIHJvbGwg
Zm9yd2FyZCBvdmVyIHRoaXMgTW92SGludCBpbiB0aGVpcgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNTk3MzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MzksNiArOTM5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAg
ICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgY2FzZSBMb29wSGludDoK
KyAgICAgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAg
ICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTU5NzMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNjIsNiArMTA2MiwxNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzsKICAgICB9CiAgICAgCisgICAgYm9v
bCBoYXNTeW1ib2xUYWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBBY3RpdmF0
aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ7CisgICAgfQorICAgIAorICAgIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzU3ltYm9sVGFibGUoKSk7Cisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFN5bWJvbFRhYmxlKj4obV9vcEluZm8pOwor
ICAgIH0KKyAgICAKICAgICBib29sIGhhc0FycmF5TW9kZSgpCiAgICAgewogICAgICAgICBzd2l0
Y2ggKG9wKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHJldmlzaW9uIDE1OTczMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDYgKzE4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOb3RpZnlQdXRHbG9iYWxWYXIsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhHbG9iYWxWYXJXYXRjaHBvaW50LCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oVmFySW5qZWN0aW9uV2F0Y2hwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkg
XAorICAgIG1hY3JvKEFjdGl2YXRpb25BbGxvY2F0aW9uV2F0Y2hwb2ludCwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKENoZWNrRnVuY3Rpb24sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU5NzMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Myw2ICs1ODMsNyBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIFVucmVhY2hhYmxlOgogICAgICAgICBjYXNlIExvb3BIaW50OgogICAgICAgICBjYXNlIE5v
dGlmeVB1dEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNo
cG9pbnQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAvLyBUaGlz
IGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IGFscmVhZHkgaGFzIGEgcHJlZGljdGlvbi4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lv
biAxNTk3MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjQzLDYgKzI0Myw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShB
YnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEludDUyVG9WYWx1ZToKICAgICBjYXNlIElu
dmFsaWRhdGlvblBvaW50OgogICAgIGNhc2UgTm90aWZ5UHV0R2xvYmFsVmFyOgorICAgIGNhc2Ug
QWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU5NzMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDU5NSw2ICs0NTk1LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNl
IEFjdGl2YXRpb25BbGxvY2F0aW9uV2F0Y2hwb2ludDogeworICAgICAgICBub1Jlc3VsdChub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFyZ3Vt
ZW50czogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBv
aW50Q29sbGVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU5NzMxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI4LDYgKzEyOCwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYWRkTGF6aWx5
KGdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldh
dGNocG9pbnQ6CisgICAgICAgICAgICBhZGRMYXppbHkobV9ub2RlLT5zeW1ib2xUYWJsZSgpLT5t
X2FjdGl2YXRpb25BbGxvY2F0ZWRPbmNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHJldmlzaW9uIDE1OTczMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xODMxLDM5
ICsxODMxLDM5IEBAIF9sbGludF9vcF9yZXNvbHZlX3Njb3BlOgogI3JHbG9iYWxQcm9wZXJ0eToK
ICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHksIC5yR2xvYmFsVmFyCiAgICAgZ2V0R2xvYmFs
T2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFZh
cjoKICAgICBiaW5lcSB0MCwgR2xvYmFsVmFyLCAuckNsb3N1cmVWYXIKICAgICBnZXRHbG9iYWxP
YmplY3QoMSkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yQ2xvc3VyZVZh
cjoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhciwgLnJHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MKICAgICByZXNvbHZlU2NvcGUoKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlz
cGF0Y2goNikKIAogLnJHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAg
YmluZXEgdDAsIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnJEeW5hbWlj
KQogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2go
NikKIAogLnJHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQwLCBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckNsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnJEeW5hbWljKQogICAgIGdldEdsb2Jh
bE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2goNikKIAogLnJDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIC5yRHluYW1pYwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHlu
YW1pYykKICAgICByZXNvbHZlU2NvcGUoKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2go
NikKIAogLnJEeW5hbWljOgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3Jlc29s
dmVfc2NvcGUpCi0gICAgZGlzcGF0Y2goNSkKKyAgICBkaXNwYXRjaCg2KQogCiAKIG1hY3JvIGxv
YWRXaXRoU3RydWN0dXJlQ2hlY2sob3BlcmFuZCwgc2xvd1BhdGgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTU5NzMxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0FjdGl2YXRpb24q
IGNyZWF0ZShWTSYgdm0sIENhbGxGcmFtZSogY2FsbEZyYW1lLCBSZWdpc3RlciogcmVnaXN0ZXJz
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1i
b2xUYWJsZSA9IGNvZGVCbG9jay0+c3ltYm9sVGFibGUoKTsKKyAgICAgICAgc3ltYm9sVGFibGUt
Pm1fYWN0aXZhdGlvbkFsbG9jYXRlZE9uY2Uubm90aWZ5V3JpdGUoKTsKICAgICAgICAgSlNBY3Rp
dmF0aW9uKiBhY3RpdmF0aW9uID0gbmV3ICgKICAgICAgICAgICAgIE5vdE51bGwsCiAgICAgICAg
ICAgICBhbGxvY2F0ZUNlbGw8SlNBY3RpdmF0aW9uPigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNTk3MzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTkg
KzUzLDE5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhFeGVjU3QKICAgICBp
ZiAoSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0ganNEeW5hbWljQ2FzdDxKU0FjdGl2YXRpb24q
PihzY29wZSkpIHsKICAgICAgICAgaWYgKGlkZW50ID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5h
cmd1bWVudHMpIHsKICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHByb3BlcnR5IHdpbGwgYmUg
YXQgdGhpcyBhY3RpdmF0aW9uIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25vdyBob3cgdG8gY2FjaGUg
aXQuCi0gICAgICAgICAgICBvcCA9IFJlc29sdmVPcChEeW5hbWljLCAwLCAwLCAwLCAwKTsKKyAg
ICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDAsIDApOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5
IGVudHJ5ID0gYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKS0+Z2V0KGlkZW50LmltcGwoKSk7CiAg
ICAgICAgIGlmIChlbnRyeS5pc1JlYWRPbmx5KCkgJiYgZ2V0T3JQdXQgPT0gUHV0KSB7CiAgICAg
ICAgICAgICAvLyBXZSBrbm93IHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGF0IHRoaXMgYWN0aXZhdGlv
biBzY29wZSwgYnV0IHdlIGRvbid0IGtub3cgaG93IHRvIGNhY2hlIGl0LgotICAgICAgICAgICAg
b3AgPSBSZXNvbHZlT3AoRHluYW1pYywgMCwgMCwgMCwgMCk7CisgICAgICAgICAgICBvcCA9IFJl
c29sdmVPcChEeW5hbWljLCAwLCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewotICAgICAgICAg
ICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoQ2xvc3VyZVZhciwgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpLCBkZXB0aCwgYWN0aXZhdGlvbi0+c3RydWN0dXJlKCksIDAsIGVudHJ5LmdldEluZGV4
KCkpOworICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoQ2xvc3VyZVZhciwgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgMCwgYWN0aXZhdGlvbiwgMCwgZW50cnkuZ2V0
SW5kZXgoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC03OSwx
MiArNzksMTIgQEAgc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNTdAogICAg
ICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBpZiAoZ2V0T3JQdXQgPT0g
UHV0ICYmIGVudHJ5LmlzUmVhZE9ubHkoKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIGtub3cg
dGhlIHByb3BlcnR5IHdpbGwgYmUgYXQgZ2xvYmFsIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25vdyBo
b3cgdG8gY2FjaGUgaXQuCi0gICAgICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywg
MCwgMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywgMCwg
MCwgMCwgMCwgMCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKAotICAgICAgICAgICAgICAgIG1ha2VUeXBl
KEdsb2JhbFZhciwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgMCwgZW50cnkud2F0
Y2hwb2ludFNldCgpLAorICAgICAgICAgICAgICAgIG1ha2VUeXBlKEdsb2JhbFZhciwgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgMCwgMCwgZW50cnkud2F0Y2hwb2ludFNldCgpLAog
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihnbG9iYWxPYmplY3Qt
PnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2xvdCgpKSk7CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtOTYsMTUgKzk2LDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBhYnN0cmFjdEFjY2VzcyhFeGVjU3QKICAgICAgICAgICAgIHx8IChnbG9iYWxPYmplY3QtPnN0
cnVjdHVyZSgpLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1By
b3RvKCkgJiYgZ2V0T3JQdXQgPT0gUHV0KSkgewogICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUg
cHJvcGVydHkgd2lsbCBiZSBhdCBnbG9iYWwgc2NvcGUsIGJ1dCB3ZSBkb24ndCBrbm93IGhvdyB0
byBjYWNoZSBpdC4KICAgICAgICAgICAgIEFTU0VSVCghc2NvcGUtPm5leHQoKSk7Ci0gICAgICAg
ICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9wZXJ0eSwgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MpLCBkZXB0aCwgMCwgMCwgMCk7CisgICAgICAgICAgICBvcCA9IFJlc29sdmVP
cChtYWtlVHlwZShHbG9iYWxQcm9wZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0
aCwgMCwgMCwgMCwgMCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKEdsb2JhbFByb3BlcnR5LCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyksIGRlcHRoLCBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLCAwLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoR2xvYmFs
UHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIGdsb2JhbE9iamVjdC0+
c3RydWN0dXJlKCksIDAsIDAsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKLSAgICBvcCA9IFJlc29sdmVPcChEeW5hbWljLCAwLCAwLCAwLCAwKTsK
KyAgICBvcCA9IFJlc29sdmVPcChEeW5hbWljLCAwLCAwLCAwLCAwLCAwKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTQyLDcgKzE0Miw3IEBAIEpTVmFsdWUgSlNTY29wZTo6cmVzb2x2ZShF
eGVjU3RhdGUqIGV4ZWMKIAogUmVzb2x2ZU9wIEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgR2V0
T3JQdXQgZ2V0T3JQdXQsIFJlc29sdmVUeXBlIHVubGlua2VkVHlwZSkKIHsKLSAgICBSZXNvbHZl
T3Agb3AoRHluYW1pYywgMCwgMCwgMCwgMCk7CisgICAgUmVzb2x2ZU9wIG9wKER5bmFtaWMsIDAs
IDAsIDAsIDAsIDApOwogICAgIGlmICh1bmxpbmtlZFR5cGUgPT0gRHluYW1pYykKICAgICAgICAg
cmV0dXJuIG9wOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3Bl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5o
CShyZXZpc2lvbiAxNTk3MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nj
b3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDEwICs5NiwxMSBAQCBpbmxpbmUgYm9vbCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhSZXNvCiB9CiAKIHN0cnVjdCBSZXNvbHZlT3AgewotICAgIFJl
c29sdmVPcChSZXNvbHZlVHlwZSB0eXBlLCBzaXplX3QgZGVwdGgsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCB1aW50cHRyX3Qgb3BlcmFuZCkKKyAg
ICBSZXNvbHZlT3AoUmVzb2x2ZVR5cGUgdHlwZSwgc2l6ZV90IGRlcHRoLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBv
aW50U2V0LCB1aW50cHRyX3Qgb3BlcmFuZCkKICAgICAgICAgOiB0eXBlKHR5cGUpCiAgICAgICAg
ICwgZGVwdGgoZGVwdGgpCiAgICAgICAgICwgc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAg
LCBhY3RpdmF0aW9uKGFjdGl2YXRpb24pCiAgICAgICAgICwgd2F0Y2hwb2ludFNldCh3YXRjaHBv
aW50U2V0KQogICAgICAgICAsIG9wZXJhbmQob3BlcmFuZCkKICAgICB7CkBAIC0xMDgsNiArMTA5
LDcgQEAgc3RydWN0IFJlc29sdmVPcCB7CiAgICAgUmVzb2x2ZVR5cGUgdHlwZTsKICAgICBzaXpl
X3QgZGVwdGg7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgSlNBY3RpdmF0aW9uKiBh
Y3RpdmF0aW9uOwogICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CiAgICAgdWludHB0
cl90IG9wZXJhbmQ7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTU5NzMxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0
LDcgQEAgU3ltYm9sVGFibGU6OlN5bWJvbFRhYmxlKFZNJiB2bSkKICAgICAsIG1fdXNlc05vblN0
cmljdEV2YWwoZmFsc2UpCiAgICAgLCBtX2NhcHR1cmVTdGFydCgwKQogICAgICwgbV9jYXB0dXJl
RW5kKDApCisgICAgLCBtX2FjdGl2YXRpb25BbGxvY2F0ZWRPbmNlKENsZWFyV2F0Y2hwb2ludCkK
IHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5oCShyZXZpc2lvbiAxNTk3MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
eW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjUsNyArNDY1LDcgQEAgcHVibGljOgog
ICAgIC8vIDAgaWYgd2UgZG9uJ3QgY2FwdHVyZSBhbnkgYXJndW1lbnRzOyBwYXJhbWV0ZXJDb3Vu
dCgpIGluIGxlbmd0aCBpZiB3ZSBkby4KICAgICBjb25zdCBTbG93QXJndW1lbnQqIHNsb3dBcmd1
bWVudHMoKSB7IHJldHVybiBtX3Nsb3dBcmd1bWVudHMuZ2V0KCk7IH0KICAgICB2b2lkIHNldFNs
b3dBcmd1bWVudHMoc3RkOjp1bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBzbG93QXJndW1lbnRz
KSB7IG1fc2xvd0FyZ3VtZW50cyA9IHN0ZDo6bW92ZShzbG93QXJndW1lbnRzKTsgfQotCisgICAg
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKQEAgLTQ4MSw4ICs0ODEsMTAg
QEAgcHJpdmF0ZToKICAgICBpbnQgbV9jYXB0dXJlRW5kOwogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFNsb3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1bWVudHM7Ci0KKyAgICAKIHB1YmxpYzoKKyAgICBJ
bmxpbmVXYXRjaHBvaW50U2V0IG1fYWN0aXZhdGlvbkFsbG9jYXRlZE9uY2U7CisgICAgCiAgICAg
bXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217766</attachid>
            <date>2013-11-24 15:50:08 -0800</date>
            <delta_ts>2013-11-24 17:04:41 -0800</delta_ts>
            <desc>more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44509</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBA
CisyMDEzLTExLTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5mZXIgb25lLXRpbWUgc2NvcGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjQ4MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZGV0ZWN0cyBKU0FjdGl2YXRpb25zIHRoYXQgYXJl
IGNyZWF0ZWQgb25seSBvbmNlLiBUaGUgSlNBY3RpdmF0aW9uIHBvaW50ZXIgaXMgdGhlbgorICAg
ICAgICBiYWtlZCBpbnRvIHRoZSBtYWNoaW5lIGNvZGUuCisKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1
Y3Rpb24uaDoKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgKEpTQzo6cGFk
T3Bjb2RlTmFtZSk6CisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5oOgorICAgICAgICAo
SlNDOjpJbmxpbmVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZSk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRSZXNvbHZlU2NvcGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6Ojo6ZXhlY3V0ZUVmZmVjdHMpOgor
ICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXpl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6
CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNT
eW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3ltYm9sVGFibGUpOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlOjpoYW5kbGUpOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVu
dGltZS9KU0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmFic3RyYWN0
QWNjZXNzKToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU9wOjpSZXNvbHZl
T3ApOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoSlNDOjpT
eW1ib2xUYWJsZTo6U3ltYm9sVGFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUu
aDoKKwogMjAxMy0xMS0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIEZpeCBtb3JlIGZhbGxvdXQgZnJvbSBmYWlsZWQgYXR0ZW1wdHMgYXQgZGl2L21vZCBERkcg
c3RyZW5ndGggcmVkdWN0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1OTczNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY1LDYgKzEz
NjUsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAg
ICAgICArK2l0OyAvLyBkZXB0aAogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAicmVzb2x2ZV9zY29wZSIpOwogICAgICAgICAgICAgb3V0LnBy
aW50ZigiJXMsICVzLCAlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBpZE5hbWUoaWQwLCBp
ZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgcmVzb2x2ZU1vZGVBbmRUeXBlKTsKKyAgICAgICAgICAg
ICsraXQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2dl
dF9mcm9tX3Njb3BlOiB7CkBAIC0xNzUzLDYgKzE3NTQsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3Bl
OjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc2NvcGUsIGlk
ZW50LCBHZXQsIHR5cGUpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAzXS51Lm9wZXJh
bmQgPSBvcC50eXBlOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQg
PSBvcC5kZXB0aDsKKyAgICAgICAgICAgIGlmIChvcC5hY3RpdmF0aW9uKQorICAgICAgICAgICAg
ICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5hY3RpdmF0aW9uLnNldCgqdm0oKSwgb3duZXJFeGVj
dXRhYmxlLCBvcC5hY3RpdmF0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
QEAgLTE3NzAsNyArMTc3Myw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFi
bGUqIG8KICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2
ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBzY29wZSwgaWRlbnQsIEdldCwgbW9kZUFu
ZFR5cGUudHlwZSgpKTsKIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJh
bmQgPSBSZXNvbHZlTW9kZUFuZFR5cGUobW9kZUFuZFR5cGUubW9kZSgpLCBvcC50eXBlKS5vcGVy
YW5kKCk7Ci0gICAgICAgICAgICBpZiAob3Auc3RydWN0dXJlKQorICAgICAgICAgICAgaWYgKG9w
LnR5cGUgPT0gR2xvYmFsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2lu
dFNldCA9IG9wLndhdGNocG9pbnRTZXQ7CisgICAgICAgICAgICBlbHNlIGlmIChvcC5zdHJ1Y3R1
cmUpCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVyZS5zZXQo
KnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJlKTsKICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3Aub3Bl
cmFuZCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3ODMsMTAgKzE3ODgsOSBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBSZXNvbHZlT3Ag
b3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KSwgc2NvcGUsIGlkZW50LCBQdXQsIG1vZGVBbmRUeXBlLnR5cGUoKSk7CiAKICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gUmVzb2x2ZU1vZGVBbmRUeXBlKG1vZGVB
bmRUeXBlLm1vZGUoKSwgb3AudHlwZSkub3BlcmFuZCgpOwotICAgICAgICAgICAgaWYgKG9wLnR5
cGUgPT0gR2xvYmFsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcykgewotICAgICAgICAgICAgICAgIEFTU0VSVCghb3Auc3RydWN0dXJlKTsKKyAgICAgICAg
ICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51
LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0OwotICAgICAgICAgICAgfSBlbHNlIGlm
IChvcC5zdHJ1Y3R1cmUpCisgICAgICAgICAgICBlbHNlIGlmIChvcC5zdHJ1Y3R1cmUpCiAgICAg
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVyZS5zZXQoKnZtKCksIG93
bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJlKTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tp
ICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3Aub3BlcmFuZCk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTIxNzIsNiArMjE3NiwxNSBAQCB2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJD
bGVhcmluZyBMTEludCBnZXQgY2FsbGVlIHdpdGggZnVuY3Rpb24gJXAuXG4iLCBjdXJJbnN0cnVj
dGlvblsyXS51LmpzQ2VsbC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25b
Ml0udS5qc0NlbGwuY2xlYXIoKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2Ugb3BfcmVzb2x2ZV9zY29wZTogeworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllckJh
c2U8SlNBY3RpdmF0aW9uPiYgYWN0aXZhdGlvbiA9IGN1ckluc3RydWN0aW9uWzVdLnUuYWN0aXZh
dGlvbjsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdGl2YXRpb24gfHwgSGVhcDo6aXNNYXJrZWQo
YWN0aXZhdGlvbi5nZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dGKCJDbGVhcmluZyBkZWFkIGFjdGl2YXRpb24gJXAuXG4iLCBhY3RpdmF0aW9uLmdldCgp
KTsKKyAgICAgICAgICAgICAgICBhY3RpdmF0aW9uLmNsZWFyKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3Bl
OgogICAgICAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAgICAgICAgICBS
ZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUgPQpAQCAtMjE4Miw3ICsyMTk1LDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgICAgIGlm
ICghc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKHN0cnVjdHVyZS5nZXQoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCBzY29w
ZSBhY2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBzdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgc2NvcGUgYWNjZXNzIHdpdGggc3RydWN0
dXJlICVwLlxuIiwgc3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUu
Y2xlYXIoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAx
NTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw3IEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAg
ICAgICAgIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIGFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAg
ICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsK
ICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsKKyAgICAgICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0FjdGl2YXRpb24+IGFjdGl2YXRpb247CiAgICAgICAgIHZvaWQqIHBvaW50ZXI7
CiAgICAgICAgIGJvb2wqIHByZWRpY2F0ZVBvaW50ZXI7CiAgICAgfSB1OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24gMTU5NzM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjksNyArMTY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ob3BfZ2V0X3BuYW1lcywg
NikgXAogICAgIG1hY3JvKG9wX25leHRfcG5hbWUsIDcpIFwKICAgICBcCi0gICAgbWFjcm8ob3Bf
cmVzb2x2ZV9zY29wZSwgNSkgXAorICAgIG1hY3JvKG9wX3Jlc29sdmVfc2NvcGUsIDYpIFwKICAg
ICBtYWNybyhvcF9nZXRfZnJvbV9zY29wZSwgOCkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBc
CiAgICAgbWFjcm8ob3BfcHV0X3RvX3Njb3BlLCA3KSBcCiAgICAgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxNTk3MzYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDksNiArMjA5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBub3RpZnlXcml0ZSgpCisgICAgeworICAg
ICAgICBpZiAoaXNGYXQoKSkgeworICAgICAgICAgICAgZmF0KCktPm5vdGlmeVdyaXRlKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlY29kZVN0YXRlKG1f
ZGF0YSkgPT0gQ2xlYXJXYXRjaHBvaW50KQorICAgICAgICAgICAgbV9kYXRhID0gZW5jb2RlU3Rh
dGUoSXNXYXRjaGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kYXRhID0gZW5jb2Rl
U3RhdGUoSXNJbnZhbGlkYXRlZCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Cisg
ICAgfQorICAgIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IElzVGhpbkZs
YWcgICAgICAgID0gMTsKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IFN0YXRlTWFzayAgICAg
ICAgID0gNjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIxMiw2ICsxMjEyLDggQEAgUmVzb2x2ZVR5cGUgQnl0ZWNvZGVHZW5l
cmF0b3I6OnJlc29sdmVUeQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJl
c29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIp
CiB7CisgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpKTsKKwogICAgIEFTU0VSVCghbV9zeW1ib2xUYWJsZSB8fCAhbV9zeW1i
b2xUYWJsZS0+Y29udGFpbnMoaWRlbnRpZmllci5pbXBsKCkpIHx8IHJlc29sdmVUeXBlKCkgPT0g
RHluYW1pYyk7CiAKICAgICAvLyByZXNvbHZlX3Njb3BlIGRzdCwgaWQsIFJlc29sdmVUeXBlLCBk
ZXB0aApAQCAtMTIyMCw2ICsxMjIyLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRSZXNvbAogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlm
aWVyKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVUeXBlKCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAg
ICAgcmV0dXJuIGRzdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTU5
NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ1LDYgKzExNDUsOSBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBtX2dyYXBoLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hY3RpdmF0aW9uU3Ry
dWN0dXJlKCkpOwogICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAg
ICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNo
cG9pbnQ6CisgICAgICAgIGJyZWFrOwogICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0FyZ3VtZW50cyk7CkBAIC0xMjUwLDEw
ICsxMjUzLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldENsb3N1cmVWYXI6CisgICAgY2FzZSBHZXRTaW5n
bGV0b25DbG9zdXJlVmFyOgogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgorICAg
IGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjoKICAgICAgICAgY2xvYmJlckNhcHR1cmVkVmFy
cyhub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkRG
R0NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJHZXRC
eUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0cy5oIgogI2luY2x1ZGUgIlB1dEJ5
SWRTdGF0dXMuaCIKQEAgLTE3OSw2ICsxODAsMTkgQEAgcHJpdmF0ZToKIAogICAgIE5vZGUqIGdl
dFNjb3BlKGJvb2wgc2tpcFRvcCwgdW5zaWduZWQgc2tpcENvdW50KTsKICAgICAKKyAgICBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+KiB0cnlHZXRSZWdpc3RlcnMoTm9kZSogbm9kZSkKKyAgICB7
CisgICAgICAgIGlmICghbm9kZS0+aGFzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPQorICAgICAgICAgICAganNEeW5h
bWljQ2FzdDxKU0FjdGl2YXRpb24qPihtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsK
KyAgICAgICAgaWYgKCFhY3RpdmF0aW9uKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IGlmICghYWN0aXZhdGlvbi0+aXNUb3JuT2ZmKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIGFjdGl2YXRpb24tPnJlZ2lzdGVycygpOworICAgIH0KKyAgICAKICAgICAv
LyBQcmVwYXJlIHRvIHBhcnNlIGEgYmxvY2suCiAgICAgdm9pZCBwcmVwYXJlVG9QYXJzZUJsb2Nr
KCk7CiAgICAgLy8gUGFyc2UgYSBzaW5nbGUgYmFzaWMgYmxvY2sgb2YgYnl0ZWNvZGUgaW5zdHJ1
Y3Rpb25zLgpAQCAtMzA0Niw5ICszMDYwLDE4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCks
IGNlbGxDb25zdGFudChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKLSAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0g
ICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBnZXRTY29wZShtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bmVlZHNBY3RpdmF0aW9uKCksIGRlcHRoKSk7CisgICAg
ICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAg
ICAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gY3VycmVudEluc3RydWN0aW9uWzVd
LnUuYWN0aXZhdGlvbi5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZhdGlvbgorICAg
ICAgICAgICAgICAgICAgICAmJiBhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpLT5tX2FjdGl2YXRp
b25BbGxvY2F0ZWRPbmNlLmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50LCBPcEluZm8oYWN0aXZhdGlv
bi0+c3ltYm9sVGFibGUoKSkpOworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGRzdCksIGNlbGxDb25zdGFudChhY3RpdmF0aW9uKSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGRzdCksCisgICAgICAgICAgICAgICAgICAgIGdldFNjb3BlKG1faW5saW5lU3RhY2tU
b3AtPm1fY29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSwgZGVwdGgpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRHluYW1pYzoKICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMzA2MywxMSArMzA4NiwxNSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBo
LmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAgICAgICAgICAgICBSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlwZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5vcGVyYW5kKS50eXBlKCk7CiAKLSAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwor
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgV2F0Y2hw
b2ludFNldCogd2F0Y2hwb2ludHMgPSAwOwogICAgICAgICAgICAgdWludHB0cl90IG9wZXJhbmQ7
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICAg
ICAgICAgIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5nZXQo
KTsKKyAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29s
dmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICAg
ICAgICAgIHdhdGNocG9pbnRzID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNl
dDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5nZXQoKTsKICAgICAgICAgICAgICAg
ICBvcGVyYW5kID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGN1cnJlbnRJbnN0cnVjdGlv
bls2XS51LnBvaW50ZXIpOwogICAgICAgICAgICAgfQogCkBAIC0zMTA4LDExICszMTM1LDIyIEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAg
ICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAg
ICAgICAgTm9kZSogc2NvcGVOb2RlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpOworICAg
ICAgICAgICAgICAgIGlmIChXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWdpc3RlcnMgPSB0
cnlHZXRSZWdpc3RlcnMoc2NvcGVOb2RlKSkgeworICAgICAgICAgICAgICAgICAgICBTaW5nbGV0
b25DbG9zdXJlVmFyRGF0YSogZGF0YSA9ICZtX2dyYXBoLm1fc2luZ2xldG9uQ2xvc3VyZVZhckRh
dGEuYWxsb2MoKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+cmVnaXN0ZXJzID0gcmVnaXN0
ZXJzOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5vcGVyYW5kID0gb3BlcmFuZDsKKyAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBzY29wZU5vZGUpOworICAgICAgICAg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKEdldFNpbmdsZXRvbkNsb3N1cmVWYXIsIE9wSW5mbyhkYXRhKSwgT3BJ
bmZvKHByZWRpY3Rpb24pKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksCiAgICAg
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0Q2xvc3VyZVZhciwgT3BJbmZvKG9wZXJhbmQp
LCBPcEluZm8ocHJlZGljdGlvbiksIAotICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChHZXRDbG9zdXJlUmVnaXN0ZXJzLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldENsb3N1cmVSZWdpc3RlcnMsIHNj
b3BlTm9kZSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzE3MCw2ICszMjA4LDEzIEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoVmlydHVh
bFJlZ2lzdGVyKHNjb3BlKSk7CisgICAgICAgICAgICAgICAgaWYgKFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4qIHJlZ2lzdGVycyA9IHRyeUdldFJlZ2lzdGVycyhzY29wZU5vZGUpKSB7CisgICAg
ICAgICAgICAgICAgICAgIFNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKiBkYXRhID0gJm1fZ3JhcGgu
bV9zaW5nbGV0b25DbG9zdXJlVmFyRGF0YS5hbGxvYygpOworICAgICAgICAgICAgICAgICAgICBk
YXRhLT5yZWdpc3RlcnMgPSByZWdpc3RlcnM7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPm9w
ZXJhbmQgPSBvcGVyYW5kOworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFNpbmds
ZXRvbkNsb3N1cmVWYXIsIE9wSW5mbyhkYXRhKSwgc2NvcGVOb2RlLCBnZXQoVmlydHVhbFJlZ2lz
dGVyKHZhbHVlKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgTm9kZSogc2NvcGVSZWdpc3RlcnMgPSBhZGRUb0dyYXBoKEdl
dENsb3N1cmVSZWdpc3RlcnMsIHNjb3BlTm9kZSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChQdXRDbG9zdXJlVmFyLCBPcEluZm8ob3BlcmFuZCksIHNjb3BlTm9kZSwgc2NvcGVSZWdpc3Rl
cnMsIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNp
b24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyNyw3ICsyMjcsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogc2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKE5v
ZGUqIHJlZ2lzdGVycywgdW5zaWduZWQgdmFyTnVtYmVyKQorICAgIE5vZGUqIHNjb3BlZFZhckxv
YWRFbGltaW5hdGlvbihOb2RlKiByZWdpc3RlcnMsIGludCB2YXJOdW1iZXIpCiAgICAgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewogICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKQEAgLTI0NCw2ICsyNDQsMTEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMygpLm5v
ZGUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjogeworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kICE9IHZhck51bWJlcikKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0Nh
cHR1cmVkKCkKQEAgLTI2MCw2ICsyNjUsNDQgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogICAgIAorICAgIE5vZGUqIHNpbmdsZXRvblNjb3BlZFZhckxvYWRFbGltaW5hdGlv
bihTaW5nbGV0b25DbG9zdXJlVmFyRGF0YSogZGF0YSkKKyAgICB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CisgICAgICAgICAgICBjYXNlIEdldFNpbmdsZXRvbkNsb3N1cmVWYXI6IHsKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+cmVnaXN0ZXJzID09
IGRhdGEtPnJlZ2lzdGVycworICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5zaW5nbGV0b25D
bG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kID09IGRhdGEtPm9wZXJhbmQpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fSAKKyAgICAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogeworICAgICAgICAgICAgICAgIGlm
IChub2RlLT52YXJOdW1iZXIoKSAhPSBkYXRhLT5vcGVyYW5kKQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjogeworICAgICAgICAgICAgICAgIGlm
IChub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5yZWdpc3RlcnMgPT0gZGF0YS0+cmVn
aXN0ZXJzCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJE
YXRhKCktPm9wZXJhbmQgPT0gZGF0YS0+b3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKQorICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2Fs
KCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihkYXRhLT5vcGVyYW5kKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgCiAgICAgYm9vbCBnbG9iYWxWYXJXYXRjaHBvaW50RWxpbWluYXRpb24oV3JpdGVC
YXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCiAgICAgewogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewpAQCAtMzE4LDcgKzM2MSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBzY29wZWRW
YXJTdG9yZUVsaW1pbmF0aW9uKE5vZGUqIHNjb3BlLCBOb2RlKiByZWdpc3RlcnMsIHVuc2lnbmVk
IHZhck51bWJlcikKKyAgICBOb2RlKiBzY29wZWRWYXJTdG9yZUVsaW1pbmF0aW9uKE5vZGUqIHNj
b3BlLCBOb2RlKiByZWdpc3RlcnMsIGludCB2YXJOdW1iZXIpCiAgICAgewogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewogICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKQEAgLTMzMSw2ICszNzQsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjogeworICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kICE9
IHZhck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIEdldENsb3N1cmVWYXI6IHsKICAgICAgICAgICAgICAgICAvLyBMZXQncyBiZSBjb25zZXJ2
YXRpdmUuCiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhck51bWJlcigpID09IHZhck51bWJl
cikKQEAgLTMzOCw3ICszODcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6IHsKKyAgICAgICAgICAgIGNhc2UgR2V0U2luZ2xldG9uQ2xvc3VyZVZhcjogeworICAgICAg
ICAgICAgICAgIC8vIENvbnNlcnZhdGl2ZS4gTGV0J3MgYmUgaXQuCisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQgPT0gdmFyTnVtYmVy
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0TG9j
YWw6CisgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CiAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVk
KCkKICAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09
IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4odmFyTnVtYmVyKSkKQEAgLTM1NSw2ICs0MTIs
NTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAorICAgIE5vZGUq
IHNpbmdsZXRvblNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24oU2luZ2xldG9uQ2xvc3VyZVZhckRh
dGEqIGRhdGEpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBQ
dXRDbG9zdXJlVmFyOiB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhck51bWJlcigpICE9
IGRhdGEtPm9wZXJhbmQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7CisgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPnJlZ2lzdGVycyA9PSBkYXRhLT5yZWdpc3Rl
cnMKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEo
KS0+b3BlcmFuZCA9PSBkYXRhLT5vcGVyYW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogeworICAgICAgICAgICAgICAg
IC8vIExldCdzIGJlIGNvbnNlcnZhdGl2ZS4KKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFy
TnVtYmVyKCkgPT0gZGF0YS0+b3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIEdldFNpbmdsZXRvbkNsb3N1cmVWYXI6IHsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+cmVnaXN0ZXJzID09IGRh
dGEtPnJlZ2lzdGVycworICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5zaW5nbGV0b25DbG9z
dXJlVmFyRGF0YSgpLT5vcGVyYW5kID09IGRhdGEtPm9wZXJhbmQpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIGNh
c2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQorICAgICAgICAgICAgICAg
ICAgICAmJiB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gVmlydHVhbFJlZ2lzdGVyKGRh
dGEtPm9wZXJhbmQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX2dyYXBo
LmNsb2JiZXJzV29ybGQobm9kZSkgfHwgbm9kZS0+Y2FuRXhpdCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKICAg
ICBOb2RlKiBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihOb2RlKiBjaGlsZDEsIE5vZGUqIGNoaWxk
MikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07
KSB7CkBAIC04NTEsMTEgKzk1OCwxOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
R2V0Q2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICAgICAg
ICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlLT52YXJOdW1iZXIo
KSkgPT0gbG9jYWwpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBHZXRTaW5nbGV0
b25DbG9zdXJlVmFyOgorICAgICAgICAgICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJlVmFyOgor
ICAgICAgICAgICAgICAgIGlmIChWaXJ0dWFsUmVnaXN0ZXIobm9kZS0+c2luZ2xldG9uQ2xvc3Vy
ZVZhckRhdGEoKS0+b3BlcmFuZCkgPT0gbG9jYWwpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAoY2FyZUFib3V0Q2xvYmJlcmluZyAmJiBt
X2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OwpAQCAtOTA0LDEwICsxMDE4LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CisgICAgICAgICAgICBj
YXNlIFB1dENsb3N1cmVWYXI6CiAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFZpcnR1
YWxSZWdpc3Rlcj4obm9kZS0+dmFyTnVtYmVyKCkpID09IGxvY2FsKQogICAgICAgICAgICAgICAg
ICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEdldFNpbmdsZXRvbkNsb3N1cmVW
YXI6CisgICAgICAgICAgICBjYXNlIFB1dFNpbmdsZXRvbkNsb3N1cmVWYXI6CisgICAgICAgICAg
ICAgICAgaWYgKFZpcnR1YWxSZWdpc3Rlcihub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgp
LT5vcGVyYW5kKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNj
ZXNzZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgICAgICAgICAgY2FzZSBTa2lwVG9wU2Nv
cGU6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KQpAQCAtMTIyOSw2ICsxMzUwLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogCisgICAgICAgIGNhc2UgR2V0U2luZ2xldG9uQ2xvc3VyZVZhcjogeworICAgICAg
ICAgICAgaWYgKGNzZU1vZGUgPT0gU3RvcmVFbGltaW5hdGlvbikKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHNpbmdsZXRvblNjb3BlZFZhckxvYWRF
bGltaW5hdGlvbihub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoK
ICAgICAgICAgICAgIGlmIChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xMjU2LDYgKzEzODQsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJlVmFy
OiB7CisgICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBOb3JtYWxDU0UpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBlbGltaW5hdGUoc2luZ2xldG9uU2NvcGVkVmFyU3RvcmVF
bGltaW5hdGlvbihub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAg
ICBpZiAoY3NlTW9kZSA9PSBTdG9yZUVsaW1pbmF0aW9uKQogICAgICAgICAgICAgICAgIGJyZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlz
aW9uIDE1OTczNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTQgKzE0NSwyMCBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIAogICAgIGNhc2UgTm90aWZ5UHV0R2xvYmFs
VmFyOgogICAgICAgICB3cml0ZShXYXRjaHBvaW50X2ZpcmUpOworICAgICAgICB3cml0ZShTaWRl
U3RhdGUpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CiAg
ICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAg
ICAgIHdyaXRlKFdhdGNocG9pbnRfZmlyZSk7CiAgICAgICAgIHJlYWQoR0NTdGF0ZSk7CiAgICAg
ICAgIHdyaXRlKEdDU3RhdGUpOwogICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
QWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50OgorICAgICAgICByZWFkKFdhdGNocG9pbnRf
ZmlyZSk7CisgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZXNlIGFyZSBmb3J3YXJkLWV4aXRp
bmcgbm9kZXMgdGhhdCBhc3N1bWUgdGhhdCB0aGUgc3Vic2VxdWVudCBpbnN0cnVjdGlvbgogICAg
IC8vIGlzIGEgTW92SGludCwgYW5kIHRoZXkgdHJ5IHRvIHJvbGwgZm9yd2FyZCBvdmVyIHRoaXMg
TW92SGludCBpbiB0aGVpcgpAQCAtNTE1LDEwICs1MjEsMTggQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJs
ZXMsIG5vZGUtPnZhck51bWJlcigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAg
Y2FzZSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyOgorICAgICAgICByZWFkKEFic3RyYWN0SGVhcChW
YXJpYWJsZXMsIG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAgICAg
IHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJlVmFyOgor
ICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5zaW5nbGV0b25DbG9z
dXJlVmFyRGF0YSgpLT5vcGVyYW5kKSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAg
Y2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBvaW50OgogICAgICAg
ICByZWFkKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY3LDcgKzc2Nyw4IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgogICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIGNhc2Ug
R2V0U2NvcGU6IHsKKyAgICAgICAgY2FzZSBHZXRTY29wZToKKyAgICAgICAgY2FzZSBQdXRTaW5n
bGV0b25DbG9zdXJlVmFyOiB7CiAgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTkwMSw2ICs5
MDIsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAg
IGNhc2UgR2V0TXlTY29wZToKICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgorICAgICAgICBj
YXNlIEdldFNpbmdsZXRvbkNsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgog
ICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBOb3RpZnlQdXRHbG9iYWxW
YXI6CkBAIC05MzksNiArOTQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBVbnJlYWNoYWJs
ZToKICAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgY2FzZSBMb29w
SGludDoKKyAgICAgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6CiAgICAg
ICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxMCw2ICs4MTAsNyBA
QCBwdWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhLCA4
PiBtX3N0cnVjdHVyZVRyYW5zaXRpb25EYXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxOZXdBcnJh
eUJ1ZmZlckRhdGEsIDQ+IG1fbmV3QXJyYXlCdWZmZXJEYXRhOwogICAgIFNlZ21lbnRlZFZlY3Rv
cjxTd2l0Y2hEYXRhLCA0PiBtX3N3aXRjaERhdGE7CisgICAgU2VnbWVudGVkVmVjdG9yPFNpbmds
ZXRvbkNsb3N1cmVWYXJEYXRhLCA0PiBtX3NpbmdsZXRvbkNsb3N1cmVWYXJEYXRhOwogICAgIFZl
Y3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIE93
blB0cjxJbmxpbmVDYWxsRnJhbWVTZXQ+IG1faW5saW5lQ2FsbEZyYW1lczsKICAgICBIYXNoTWFw
PENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0
ZWNvZGVMaXZlbmVzczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZp
c2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSwxMSBAQCBzdHJ1Y3QgU3dpdGNoRGF0YSB7CiAgICAg
Ym9vbCBkaWRVc2VKdW1wVGFibGU7CiB9OwogCitzdHJ1Y3QgU2luZ2xldG9uQ2xvc3VyZVZhckRh
dGEgeworICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZ2lzdGVyczsKKyAgICBpbnQg
b3BlcmFuZDsKK307CisKIC8vIFRoaXMgdHlwZSB1c2VkIGluIHBhc3NpbmcgYW4gaW1tZWRpYXRl
IGFyZ3VtZW50IHRvIE5vZGUgY29uc3RydWN0b3I7CiAvLyBkaXN0aW5ndWlzaGVzIGFuIGltbWVk
aWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBDb2RlQmxvY2sgZGF0YSBzdHJ1
Y3R1cmUgLSAKIC8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVyKSBm
cm9tIGEgTm9kZSouCkBAIC03NDIsNyArNzQ3LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBy
ZXR1cm4gb3AoKSA9PSBHZXRDbG9zdXJlVmFyIHx8IG9wKCkgPT0gUHV0Q2xvc3VyZVZhcjsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCB2YXJOdW1iZXIoKQorICAgIGludCB2YXJOdW1iZXIoKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGhhc1Zhck51bWJlcigpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJ
bmZvOwpAQCAtNzY4LDYgKzc3MywxNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KG1fb3BJbmZvKTsKICAg
ICB9CisgICAgCisgICAgYm9vbCBoYXNTaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpCisgICAgewor
ICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyIHx8IG9wKCkgPT0g
UHV0U2luZ2xldG9uQ2xvc3VyZVZhcjsKKyAgICB9CisgICAgCisgICAgU2luZ2xldG9uQ2xvc3Vy
ZVZhckRhdGEqIHNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8U2luZ2xldG9uQ2xvc3VyZVZhckRhdGEqPihtX29wSW5mbyk7CisgICAg
fQogCiAgICAgYm9vbCBoYXNSZXN1bHQoKQogICAgIHsKQEAgLTkyMSw2ICs5MzYsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBjYXNlIEdldEJ5T2Zm
c2V0OgogICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CisgICAgICAgIGNhc2UgR2V0U2luZ2xl
dG9uQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgY2FzZSBBcnJh
eVB1c2g6CiAgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKQEAgLTEwNjIsNiArMTA3OCwxNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzsKICAgICB9CiAgICAgCisgICAg
Ym9vbCBoYXNTeW1ib2xUYWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBBY3Rp
dmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ7CisgICAgfQorICAgIAorICAgIFN5bWJvbFRhYmxl
KiBzeW1ib2xUYWJsZSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzU3ltYm9sVGFibGUoKSk7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFN5bWJvbFRhYmxlKj4obV9vcEluZm8p
OworICAgIH0KKyAgICAKICAgICBib29sIGhhc0FycmF5TW9kZSgpCiAgICAgewogICAgICAgICBz
d2l0Y2ggKG9wKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgJKHJldmlzaW9uIDE1OTczNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDExICsxODIsMTQgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldENsb3N1cmVSZWdpc3RlcnMsIE5vZGVS
ZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0Q2xvc3VyZVZhciwgTm9kZVJlc3VsdEpTKSBc
CiAgICAgbWFjcm8oUHV0Q2xvc3VyZVZhciwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KEdldFNpbmdsZXRvbkNsb3N1cmVWYXIsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFB1dFNp
bmdsZXRvbkNsb3N1cmVWYXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRHbG9i
YWxWYXIsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFB1dEdsb2JhbFZhciwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5vdGlmeVB1dEdsb2JhbFZhciwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEdsb2JhbFZhcldhdGNocG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhWYXJJbmplY3Rpb25XYXRjaHBvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisg
ICAgbWFjcm8oQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50LCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oQ2hlY2tGdW5jdGlvbiwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTkxLDcgKzE5MSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
Q2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFy
OgotICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6IHsKKyAgICAgICAgY2FzZSBHZXRDbG9zdXJl
VmFyOgorICAgICAgICBjYXNlIEdldFNpbmdsZXRvbkNsb3N1cmVWYXI6IHsKICAgICAgICAgICAg
IGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC01NTMsNiArNTU0LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgorICAgICAgICBjYXNlIFB1dFNpbmdsZXRvbkNsb3N1
cmVWYXI6CiAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBjYXNlIFRocm93OgogICAgICAg
ICBjYXNlIFB1dEJ5SWQ6CkBAIC01ODMsNiArNTg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBVbnJlYWNoYWJsZToKICAgICAgICAgY2FzZSBMb29wSGludDoKICAgICAgICAgY2FzZSBOb3Rp
ZnlQdXRHbG9iYWxWYXI6CisgICAgICAgIGNhc2UgQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBv
aW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gVGhpcyBn
ZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBhbHJlYWR5IGhhcyBhIHByZWRpY3Rpb24uCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24g
MTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksOSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJz
dHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBTa2lwU2NvcGU6CiAgICAgY2FzZSBHZXRDbG9z
dXJlUmVnaXN0ZXJzOgogICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKKyAgICBjYXNlIEdldFNpbmds
ZXRvbkNsb3N1cmVWYXI6CiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgorICAgIGNhc2UgUHV0U2lu
Z2xldG9uQ2xvc3VyZVZhcjoKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICBjYXNlIFB1dEds
b2JhbFZhcjoKICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6CkBAIC0yNDMsNiArMjQ1LDcg
QEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgSW50
NTJUb1ZhbHVlOgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlQ
dXRHbG9iYWxWYXI6CisgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFsOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDA5LDYgKzQwMDksMTMgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIEdl
dFNpbmdsZXRvbkNsb3N1cmVWYXI6IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbV9q
aXQubG9hZDY0KG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPnJlZ2lzdGVycyArIG5v
ZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQsIHJlc3VsdEdQUik7CisgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHJl
Z2lzdGVycyh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC00MDI1LDYgKzQwMzIsMjAgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBub1Jlc3VsdChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3Vy
ZVZhcjogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hSZWdpc3Rlcih0aGlzKTsKKworICAg
ICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaFJl
Z2lzdGVyLmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwg
bm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+cmVnaXN0ZXJzICsgbm9kZS0+c2luZ2xl
dG9uQ2xvc3VyZVZhckRhdGEoKS0+b3BlcmFuZCk7CisgICAgICAgIHdyaXRlQmFycmllcihzY29w
ZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFj
Y2Vzcywgc2NyYXRjaEdQUik7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVh
azsKKyAgICB9CiAgICAgY2FzZSBHZXRCeUlkOiB7CiAgICAgICAgIEFTU0VSVChub2RlLT5wcmVk
aWN0aW9uKCkpOwogCkBAIC00NTk1LDYgKzQ2MTYsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAg
IGNhc2UgQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50OiB7CisgICAgICAgIG5vUmVzdWx0
KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQ3JlYXRl
QXJndW1lbnRzOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgdmFsdWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dh
dGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhZGRM
YXppbHkoZ2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFjdGl2YXRpb25BbGxvY2F0
aW9uV2F0Y2hwb2ludDoKKyAgICAgICAgICAgIGFkZExhemlseShtX25vZGUtPnN5bWJvbFRhYmxl
KCktPm1fYWN0aXZhdGlvbkFsbG9jYXRlZE9uY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTE4
MzEsMzkgKzE4MzEsMzkgQEAgX2xsaW50X29wX3Jlc29sdmVfc2NvcGU6CiAjckdsb2JhbFByb3Bl
cnR5OgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLnJHbG9iYWxWYXIKICAgICBnZXRH
bG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yR2xv
YmFsVmFyOgogICAgIGJpbmVxIHQwLCBHbG9iYWxWYXIsIC5yQ2xvc3VyZVZhcgogICAgIGdldEds
b2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2goNikKIAogLnJDbG9z
dXJlVmFyOgogICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyLCAuckdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcwogICAgIHJlc29sdmVTY29wZSgpCi0gICAgZGlzcGF0Y2goNSkKKyAg
ICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoK
ICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICB2YXJJbmplY3Rpb25DaGVjayguckR5
bmFtaWMpCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNSkKKyAgICBkaXNw
YXRjaCg2KQogCiAuckdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEg
dDAsIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5yQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MKICAgICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFtaWMpCiAgICAgZ2V0
R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckNs
b3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJEeW5hbWljCiAgICAgdmFySW5qZWN0aW9uQ2hlY2so
LnJEeW5hbWljKQogICAgIHJlc29sdmVTY29wZSgpCi0gICAgZGlzcGF0Y2goNSkKKyAgICBkaXNw
YXRjaCg2KQogCiAuckR5bmFtaWM6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhf
cmVzb2x2ZV9zY29wZSkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3BhdGNoKDYpCiAKIAogbWFj
cm8gbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhvcGVyYW5kLCBzbG93UGF0aCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShyZXZpc2lvbiAxNTk3
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQWN0aXZh
dGlvbiogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFJlZ2lzdGVyKiByZWdp
c3RlcnMsIENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIHsKICAgICAgICAgU3ltYm9sVGFibGUq
IHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOworICAgICAgICBzeW1ib2xU
YWJsZS0+bV9hY3RpdmF0aW9uQWxsb2NhdGVkT25jZS5ub3RpZnlXcml0ZSgpOwogICAgICAgICBK
U0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKAogICAgICAgICAgICAgTm90TnVsbCwKICAg
ICAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0FjdGl2YXRpb24+KApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDE1OTczNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MywxOSArNTMsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNTdAog
ICAgIGlmIChKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBqc0R5bmFtaWNDYXN0PEpTQWN0aXZh
dGlvbio+KHNjb3BlKSkgewogICAgICAgICBpZiAoaWRlbnQgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmFyZ3VtZW50cykgewogICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgcHJvcGVydHkgd2ls
bCBiZSBhdCB0aGlzIGFjdGl2YXRpb24gc2NvcGUsIGJ1dCB3ZSBkb24ndCBrbm93IGhvdyB0byBj
YWNoZSBpdC4KLSAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDAp
OworICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywgMCwgMCwgMCwgMCwgMCk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIFN5bWJvbFRhYmxl
RW50cnkgZW50cnkgPSBhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpLT5nZXQoaWRlbnQuaW1wbCgp
KTsKICAgICAgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHkoKSAmJiBnZXRPclB1dCA9PSBQdXQpIHsK
ICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHByb3BlcnR5IHdpbGwgYmUgYXQgdGhpcyBhY3Rp
dmF0aW9uIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25vdyBob3cgdG8gY2FjaGUgaXQuCi0gICAgICAg
ICAgICBvcCA9IFJlc29sdmVPcChEeW5hbWljLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIG9w
ID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDAsIDApOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAg
ICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShDbG9zdXJlVmFyLCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyksIGRlcHRoLCBhY3RpdmF0aW9uLT5zdHJ1Y3R1cmUoKSwgMCwgZW50cnkuZ2V0
SW5kZXgoKSk7CisgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShDbG9zdXJlVmFy
LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAwLCBhY3RpdmF0aW9uLCAwLCBlbnRy
eS5nZXRJbmRleCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAg
LTc5LDEyICs3OSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoRXhlY1N0
CiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIGlmIChnZXRPclB1
dCA9PSBQdXQgJiYgZW50cnkuaXNSZWFkT25seSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2Ug
a25vdyB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCBnbG9iYWwgc2NvcGUsIGJ1dCB3ZSBkb24ndCBr
bm93IGhvdyB0byBjYWNoZSBpdC4KLSAgICAgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChEeW5h
bWljLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChEeW5hbWlj
LCAwLCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AoCi0gICAgICAgICAgICAgICAgbWFr
ZVR5cGUoR2xvYmFsVmFyLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAwLCBlbnRy
eS53YXRjaHBvaW50U2V0KCksCisgICAgICAgICAgICAgICAgbWFrZVR5cGUoR2xvYmFsVmFyLCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAwLCAwLCBlbnRyeS53YXRjaHBvaW50U2V0
KCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGdsb2JhbE9i
amVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5zbG90KCkpKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC05NiwxNSArOTYsMTUgQEAgc3RhdGljIGlubGlu
ZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNTdAogICAgICAgICAgICAgfHwgKGdsb2JhbE9iamVj
dC0+c3RydWN0dXJlKCktPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVk
aW5nUHJvdG8oKSAmJiBnZXRPclB1dCA9PSBQdXQpKSB7CiAgICAgICAgICAgICAvLyBXZSBrbm93
IHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGF0IGdsb2JhbCBzY29wZSwgYnV0IHdlIGRvbid0IGtub3cg
aG93IHRvIGNhY2hlIGl0LgogICAgICAgICAgICAgQVNTRVJUKCFzY29wZS0+bmV4dCgpKTsKLSAg
ICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKEdsb2JhbFByb3BlcnR5LCBuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIG9wID0gUmVz
b2x2ZU9wKG1ha2VUeXBlKEdsb2JhbFByb3BlcnR5LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyks
IGRlcHRoLCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKLSAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoR2xvYmFsUHJvcGVydHksIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCksIDAs
IHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShH
bG9iYWxQcm9wZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgZ2xvYmFsT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSwgMCwgMCwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAs
IDApOworICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDAsIDApOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0xNDIsNyArMTQyLDcgQEAgSlNWYWx1ZSBKU1Njb3BlOjpyZXNv
bHZlKEV4ZWNTdGF0ZSogZXhlYwogCiBSZXNvbHZlT3AgSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZl
KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBHZXRPclB1dCBnZXRPclB1dCwgUmVzb2x2ZVR5cGUgdW5saW5rZWRUeXBlKQogewotICAgIFJl
c29sdmVPcCBvcChEeW5hbWljLCAwLCAwLCAwLCAwKTsKKyAgICBSZXNvbHZlT3Agb3AoRHluYW1p
YywgMCwgMCwgMCwgMCwgMCk7CiAgICAgaWYgKHVubGlua2VkVHlwZSA9PSBEeW5hbWljKQogICAg
ICAgICByZXR1cm4gb3A7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nj
b3BlLmgJKHJldmlzaW9uIDE1OTczNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsMTAgKzk2LDExIEBAIGlubGluZSBib29s
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKFJlc28KIH0KIAogc3RydWN0IFJlc29sdmVPcCB7Ci0g
ICAgUmVzb2x2ZU9wKFJlc29sdmVUeXBlIHR5cGUsIHNpemVfdCBkZXB0aCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIHVpbnRwdHJfdCBvcGVyYW5k
KQorICAgIFJlc29sdmVPcChSZXNvbHZlVHlwZSB0eXBlLCBzaXplX3QgZGVwdGgsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24sIFdhdGNocG9pbnRTZXQqIHdh
dGNocG9pbnRTZXQsIHVpbnRwdHJfdCBvcGVyYW5kKQogICAgICAgICA6IHR5cGUodHlwZSkKICAg
ICAgICAgLCBkZXB0aChkZXB0aCkKICAgICAgICAgLCBzdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAg
ICAgICAsIGFjdGl2YXRpb24oYWN0aXZhdGlvbikKICAgICAgICAgLCB3YXRjaHBvaW50U2V0KHdh
dGNocG9pbnRTZXQpCiAgICAgICAgICwgb3BlcmFuZChvcGVyYW5kKQogICAgIHsKQEAgLTEwOCw2
ICsxMDksNyBAQCBzdHJ1Y3QgUmVzb2x2ZU9wIHsKICAgICBSZXNvbHZlVHlwZSB0eXBlOwogICAg
IHNpemVfdCBkZXB0aDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICBKU0FjdGl2YXRp
b24qIGFjdGl2YXRpb247CiAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsKICAgICB1
aW50cHRyX3Qgb3BlcmFuZDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgSlNWYXJpYWJsZU9iamVjdCA6IHB1YmxpYyBKU1N5bWJv
bAogcHVibGljOgogICAgIHR5cGVkZWYgSlNTeW1ib2xUYWJsZU9iamVjdCBCYXNlOwogCisgICAg
V3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogcmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9yZWdpc3Rl
cnM7IH0KICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiByZWdpc3RlckF0KGludCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CiAKICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiBjb25zdCAqIGFkZHJlc3NPZlJlZ2lzdGVycygpIGNvbnN0IHsgcmV0
dXJuICZtX3JlZ2lzdGVyczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiAr
MTA0LDcgQEAgU3ltYm9sVGFibGU6OlN5bWJvbFRhYmxlKFZNJiB2bSkKICAgICAsIG1fdXNlc05v
blN0cmljdEV2YWwoZmFsc2UpCiAgICAgLCBtX2NhcHR1cmVTdGFydCgwKQogICAgICwgbV9jYXB0
dXJlRW5kKDApCisgICAgLCBtX2FjdGl2YXRpb25BbGxvY2F0ZWRPbmNlKENsZWFyV2F0Y2hwb2lu
dCkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5oCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjUsNyArNDY1LDcgQEAgcHVibGlj
OgogICAgIC8vIDAgaWYgd2UgZG9uJ3QgY2FwdHVyZSBhbnkgYXJndW1lbnRzOyBwYXJhbWV0ZXJD
b3VudCgpIGluIGxlbmd0aCBpZiB3ZSBkby4KICAgICBjb25zdCBTbG93QXJndW1lbnQqIHNsb3dB
cmd1bWVudHMoKSB7IHJldHVybiBtX3Nsb3dBcmd1bWVudHMuZ2V0KCk7IH0KICAgICB2b2lkIHNl
dFNsb3dBcmd1bWVudHMoc3RkOjp1bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBzbG93QXJndW1l
bnRzKSB7IG1fc2xvd0FyZ3VtZW50cyA9IHN0ZDo6bW92ZShzbG93QXJndW1lbnRzKTsgfQotCisg
ICAgCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKQEAgLTQ4MSw4ICs0ODEs
MTAgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9jYXB0dXJlRW5kOwogCiAgICAgc3RkOjp1bmlxdWVf
cHRyPFNsb3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1bWVudHM7Ci0KKyAgICAKIHB1YmxpYzoKKyAg
ICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fYWN0aXZhdGlvbkFsbG9jYXRlZE9uY2U7CisgICAgCiAg
ICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7CiB9OwogCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVy
LW9uZS10aW1lLWNsb3N1cmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAgQEAKK0pTUmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAi
LS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5m
ZXItb25lLXRpbWUtY2xvc3VyZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItb25lLXRpbWUtY2xv
c3VyZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyIEBACitmdW5jdGlvbiBmb29NYWtl
cih4UGFyYW0pIHsKKyAgICB2YXIgeCA9IHhQYXJhbTsKKyAgICByZXR1cm4gZnVuY3Rpb24gKHkp
IHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpCisgICAgICAgICAgICB5
ICs9IHg7CisgICAgICAgIHJldHVybiB5OworICAgIH0KK30KKwordmFyIGZvbyA9IGZvb01ha2Vy
KDQyKTsKKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyg1KTsKKyAgICBpZiAocmVzdWx0ICE9IDQyICogMTAw
MCArIDUpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30K
KwordmFyIHJlc3VsdCA9IGZvb01ha2VyKDIzKSg1KTsKK2lmIChyZXN1bHQgIT0gMjMgKiAxMDAw
ICsgNSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217768</attachid>
            <date>2013-11-24 17:04:41 -0800</date>
            <delta_ts>2013-11-24 17:22:20 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58881</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5NzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBA
CisyMDEzLTExLTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5mZXIgb25lLXRpbWUgc2NvcGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjQ4MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZGV0ZWN0cyBKU0FjdGl2YXRpb25zIHRoYXQgYXJl
IGNyZWF0ZWQgb25seSBvbmNlLiBUaGUgSlNBY3RpdmF0aW9uIHBvaW50ZXIgaXMgdGhlbgorICAg
ICAgICBiYWtlZCBpbnRvIHRoZSBtYWNoaW5lIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlz
IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgb25lLXRpbWUgc2NvcGUgaW5mZXJlbmNlIHRvIHJlZHVj
ZSB0aGUgbnVibWVyIG9mCisgICAgICAgIGluZGlyZWN0aW9ucyBuZWVkZWQgdG8gZ2V0IHRvIGEg
Y2xvc3VyZSB2YXJpYWJsZSBpbiBjYXNlIHdoZXJlIHRoZSBzY29wZSBpcyBvbmx5CisgICAgICAg
IGFsbG9jYXRlZCBvbmNlLiBUaGlzIGlzbid0IHJlYWxseSBhIHNwZWVkLXVwIHNpbmNlIGluIHRo
ZSBjb21tb24gY2FzZSB0aGUgdG90YWwgbnVtYmVyCisgICAgICAgIG9mIGluc3RydWN0aW9uIGJ5
dGVzIG5lZWRlZCB0byBsb2FkIHRoZSBzY29wZSBmcm9tIHRoZSBzdGFjayBpcyBhYm91dCBlcXVh
bCB0byB0aGUKKyAgICAgICAgbnVtYmVyIG9mIGluc3RydWN0aW9uIGJ5dGVzIG5lZWRlZCB0byBt
YXRlcmlhbGl6ZSB0aGUgYWJzb2x1dGUgYWRkcmVzcyBvZiBhIHNjb3BlZAorICAgICAgICB2YXJp
YWJsZS4gQnV0LCB0aGlzIGlzIGEgbmVjZXNzYXJ5IHByZXJlcXVpc2l0ZSB0bworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0NjMwLCBzbyBpdCdzIHBy
b2JhYmx5IGEgZ29vZCBpZGVhIGFueXdheS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5o
OgorICAgICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOgorICAgICAgICAoSlNDOjpwYWRPcGNvZGVO
YW1lKToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50Lmg6CisgICAgICAgIChKU0M6Oklu
bGluZVdhdGNocG9pbnRTZXQ6Om5vdGlmeVdyaXRlKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFJlc29sdmVTY29wZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6dHJ5R2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6c2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6c2luZ2xldG9uU2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6c2NvcGVkVmFyU3RvcmVFbGltaW5hdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnNpbmdsZXRvblNjb3BlZFZhclN0b3Jl
RWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRMb2NhbExvYWRF
bGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnNldExvY2FsU3RvcmVF
bGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NF
KToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNs
b2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5o
OgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFy
TnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTaW5nbGV0b25DbG9zdXJlVmFy
RGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpoYXNTeW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6c3ltYm9sVGFibGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OmhhbmRsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0U2luZ2xldG9uQ2xvc3VyZVZhcik6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVQdXRTaW5nbGV0b25DbG9zdXJlVmFy
KToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAg
ICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9K
U0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmFic3RyYWN0QWNjZXNz
KToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU9wOjpSZXNvbHZlT3ApOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1Zh
cmlhYmxlT2JqZWN0OjpyZWdpc3RlcnMpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUu
Y3BwOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6U3ltYm9sVGFibGUpOgorICAgICAgICAq
IHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoKKwogMjAxMy0xMS0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBtb3JlIGZhbGxvdXQgZnJvbSBmYWlsZWQgYXR0
ZW1wdHMgYXQgZGl2L21vZCBERkcgc3RyZW5ndGggcmVkdWN0aW9ucwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1OTczNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzY1LDYgKzEzNjUsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2Rl
KFByaW50U3RyZWFtCiAgICAgICAgICAgICArK2l0OyAvLyBkZXB0aAogICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicmVzb2x2ZV9zY29wZSIp
OwogICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCIsIHJlZ2lzdGVyTmFtZShyMCku
ZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgcmVzb2x2ZU1vZGVB
bmRUeXBlKTsKKyAgICAgICAgICAgICsraXQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOiB7CkBAIC0xNzUzLDYgKzE3NTQsOCBA
QCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBS
ZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSwgc2NvcGUsIGlkZW50LCBHZXQsIHR5cGUpOwogICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zW2kgKyAzXS51Lm9wZXJhbmQgPSBvcC50eXBlOwogICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zW2kgKyA0XS51Lm9wZXJhbmQgPSBvcC5kZXB0aDsKKyAgICAgICAgICAgIGlmIChvcC5hY3Rp
dmF0aW9uKQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5hY3RpdmF0aW9u
LnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5hY3RpdmF0aW9uKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE3NzAsNyArMTc3Myw5IEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpT
U2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBzY29w
ZSwgaWRlbnQsIEdldCwgbW9kZUFuZFR5cGUudHlwZSgpKTsKIAogICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9kZUFuZFR5cGUobW9kZUFuZFR5cGUu
bW9kZSgpLCBvcC50eXBlKS5vcGVyYW5kKCk7Ci0gICAgICAgICAgICBpZiAob3Auc3RydWN0dXJl
KQorICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyIHx8IG9wLnR5cGUgPT0gR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IG9wLndhdGNocG9pbnRTZXQ7CisgICAgICAgICAg
ICBlbHNlIGlmIChvcC5zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA1XS51LnN0cnVjdHVyZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJl
KTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ob3Aub3BlcmFuZCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3ODMs
MTAgKzE3ODgsOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAg
ICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc2NvcGUsIGlkZW50LCBQdXQsIG1vZGVBbmRUeXBlLnR5
cGUoKSk7CiAKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gUmVz
b2x2ZU1vZGVBbmRUeXBlKG1vZGVBbmRUeXBlLm1vZGUoKSwgb3AudHlwZSkub3BlcmFuZCgpOwot
ICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICAgICAgICAgIEFTU0VSVCghb3Au
c3RydWN0dXJlKTsKKyAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50
eXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0Owot
ICAgICAgICAgICAgfSBlbHNlIGlmIChvcC5zdHJ1Y3R1cmUpCisgICAgICAgICAgICBlbHNlIGlm
IChvcC5zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0
cnVjdHVyZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJlKTsKICAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ob3Aub3BlcmFuZCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTIxNzIsNiArMjE3Niwx
NSBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCBnZXQgY2FsbGVlIHdpdGggZnVuY3Rp
b24gJXAuXG4iLCBjdXJJbnN0cnVjdGlvblsyXS51LmpzQ2VsbC5nZXQoKSk7CiAgICAgICAgICAg
ICAgICAgY3VySW5zdHJ1Y3Rpb25bMl0udS5qc0NlbGwuY2xlYXIoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZTogeworICAgICAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8SlNBY3RpdmF0aW9uPiYgYWN0aXZhdGlvbiA9IGN1cklu
c3RydWN0aW9uWzVdLnUuYWN0aXZhdGlvbjsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdGl2YXRp
b24gfHwgSGVhcDo6aXNNYXJrZWQoYWN0aXZhdGlvbi5nZXQoKSkpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBkZWFkIGFjdGl2YXRpb24gJXAu
XG4iLCBhY3RpdmF0aW9uLmdldCgpKTsKKyAgICAgICAgICAgICAgICBhY3RpdmF0aW9uLmNsZWFy
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
YXNlIG9wX2dldF9mcm9tX3Njb3BlOgogICAgICAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6
IHsKICAgICAgICAgICAgICAgICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUgPQpAQCAt
MjE4Miw3ICsyMTk1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KAogICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKHN0cnVj
dHVyZS5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCJDbGVhcmluZyBMTEludCBzY29wZSBhY2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBzdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgc2Nv
cGUgYWNjZXNzIHdpdGggc3RydWN0dXJlICVwLlxuIiwgc3RydWN0dXJlLmdldCgpKTsKICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw3IEBAIHN0
cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgICAgIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIGFycmF5
QWxsb2NhdGlvblByb2ZpbGU7CiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBvYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZTsKICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNl
dDsKKyAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0FjdGl2YXRpb24+IGFjdGl2YXRpb247CiAg
ICAgICAgIHZvaWQqIHBvaW50ZXI7CiAgICAgICAgIGJvb2wqIHByZWRpY2F0ZVBvaW50ZXI7CiAg
ICAgfSB1OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2
aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
bWFjcm8ob3BfZ2V0X3BuYW1lcywgNikgXAogICAgIG1hY3JvKG9wX25leHRfcG5hbWUsIDcpIFwK
ICAgICBcCi0gICAgbWFjcm8ob3BfcmVzb2x2ZV9zY29wZSwgNSkgXAorICAgIG1hY3JvKG9wX3Jl
c29sdmVfc2NvcGUsIDYpIFwKICAgICBtYWNybyhvcF9nZXRfZnJvbV9zY29wZSwgOCkgLyogaGFz
IHZhbHVlIHByb2ZpbGluZyAqLyBcCiAgICAgbWFjcm8ob3BfcHV0X3RvX3Njb3BlLCA3KSBcCiAg
ICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5o
CShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0
Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDE5IEBAIHB1YmxpYzoKICAg
ICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBub3Rp
ZnlXcml0ZSgpCisgICAgeworICAgICAgICBpZiAoaXNGYXQoKSkgeworICAgICAgICAgICAgZmF0
KCktPm5vdGlmeVdyaXRlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGRlY29kZVN0YXRlKG1fZGF0YSkgPT0gQ2xlYXJXYXRjaHBvaW50KQorICAgICAgICAg
ICAgbV9kYXRhID0gZW5jb2RlU3RhdGUoSXNXYXRjaGVkKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9kYXRhID0gZW5jb2RlU3RhdGUoSXNJbnZhbGlkYXRlZCk7CisgICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgfQorICAgIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29u
c3QgdWludHB0cl90IElzVGhpbkZsYWcgICAgICAgID0gMTsKICAgICBzdGF0aWMgY29uc3QgdWlu
dHB0cl90IFN0YXRlTWFzayAgICAgICAgID0gNjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxMiw2ICsxMjEyLDggQEAgUmVz
b2x2ZVR5cGUgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVUeQogCiBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CisgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKwogICAgIEFTU0VSVCghbV9z
eW1ib2xUYWJsZSB8fCAhbV9zeW1ib2xUYWJsZS0+Y29udGFpbnMoaWRlbnRpZmllci5pbXBsKCkp
IHx8IHJlc29sdmVUeXBlKCkgPT0gRHluYW1pYyk7CiAKICAgICAvLyByZXNvbHZlX3Njb3BlIGRz
dCwgaWQsIFJlc29sdmVUeXBlLCBkZXB0aApAQCAtMTIyMCw2ICsxMjIyLDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbAogICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJl
c29sdmVUeXBlKCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ1LDYg
KzExNDUsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgICAgICBtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVP
cmlnaW4pLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBtX3N0YXRlLnNldEhhdmVT
dHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBBY3Rp
dmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6CisgICAgICAgIGJyZWFrOwogICAgIAogICAgIGNh
c2UgQ3JlYXRlQXJndW1lbnRzOgogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Fy
Z3VtZW50cyk7CkBAIC0xMjUwLDEwICsxMjUzLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldENsb3N1cmVW
YXI6CisgICAgY2FzZSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyOgogICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBQdXRDbG9zdXJlVmFyOgorICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjoKICAgICAg
ICAgY2xvYmJlckNhcHR1cmVkVmFycyhub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkRGR0pJVENv
ZGUuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiSlNBY3RpdmF0aW9u
LmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0
cy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKQEAgLTE3OSw2ICsxODAsMTkgQEAgcHJp
dmF0ZToKIAogICAgIE5vZGUqIGdldFNjb3BlKGJvb2wgc2tpcFRvcCwgdW5zaWduZWQgc2tpcENv
dW50KTsKICAgICAKKyAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiB0cnlHZXRSZWdpc3Rl
cnMoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZS0+aGFzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24g
PQorICAgICAgICAgICAganNEeW5hbWljQ2FzdDxKU0FjdGl2YXRpb24qPihtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgaWYgKCFhY3RpdmF0aW9uKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGlmICghYWN0aXZhdGlvbi0+aXNUb3JuT2ZmKCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGFjdGl2YXRpb24tPnJlZ2lzdGVycygp
OworICAgIH0KKyAgICAKICAgICAvLyBQcmVwYXJlIHRvIHBhcnNlIGEgYmxvY2suCiAgICAgdm9p
ZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgLy8gUGFyc2UgYSBzaW5nbGUgYmFzaWMgYmxv
Y2sgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgpAQCAtMzA0Niw5ICszMDYwLDE4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxDb25zdGFudChtX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihk
c3QpLCBnZXRTY29wZShtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bmVlZHNBY3RpdmF0
aW9uKCksIGRlcHRoKSk7CisgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0g
Y3VycmVudEluc3RydWN0aW9uWzVdLnUuYWN0aXZhdGlvbi5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoYWN0aXZhdGlvbgorICAgICAgICAgICAgICAgICAgICAmJiBhY3RpdmF0aW9uLT5zeW1i
b2xUYWJsZSgpLT5tX2FjdGl2YXRpb25BbGxvY2F0ZWRPbmNlLmlzU3RpbGxWYWxpZCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBv
aW50LCBPcEluZm8oYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKSkpOworICAgICAgICAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxDb25zdGFudChhY3RpdmF0aW9uKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksCisgICAgICAgICAgICAgICAgICAgIGdl
dFNjb3BlKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSwg
ZGVwdGgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzA2MywxMSArMzA4NiwxNSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBTdHJp
bmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAg
ICAgICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlwZShj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKS50eXBlKCk7CiAKLSAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSAw
OworICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludHMgPSAwOwogICAgICAgICAg
ICAgdWludHB0cl90IG9wZXJhbmQ7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5tX2xvY2spOwotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bls1XS51LnN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpCisgICAgICAgICAgICAgICAgICAgIHdhdGNocG9pbnRzID0gY3VycmVudEluc3RydWN0
aW9uWzVdLnUud2F0Y2hwb2ludFNldDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5n
ZXQoKTsKICAgICAgICAgICAgICAgICBvcGVyYW5kID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGN1cnJlbnRJbnN0cnVjdGlvbls2XS51LnBvaW50ZXIpOwogICAgICAgICAgICAgfQogCkBA
IC0zMTA4LDExICszMTM1LDIyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CisgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CisgICAgICAgICAgICAgICAgTm9kZSogc2NvcGVOb2RlID0gZ2V0KFZpcnR1YWxS
ZWdpc3RlcihzY29wZSkpOworICAgICAgICAgICAgICAgIGlmIChXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiByZWdpc3RlcnMgPSB0cnlHZXRSZWdpc3RlcnMoc2NvcGVOb2RlKSkgeworICAgICAg
ICAgICAgICAgICAgICBTaW5nbGV0b25DbG9zdXJlVmFyRGF0YSogZGF0YSA9ICZtX2dyYXBoLm1f
c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEuYWxsb2MoKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YS0+cmVnaXN0ZXJzID0gcmVnaXN0ZXJzOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5vcGVy
YW5kID0gb3BlcmFuZDsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBz
Y29wZU5vZGUpOworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCks
CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldFNpbmdsZXRvbkNsb3N1cmVW
YXIsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRzdCksCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0Q2xvc3Vy
ZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbiksIAotICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRDbG9zdXJlUmVnaXN0ZXJzLCBnZXQoVmlydHVhbFJl
Z2lzdGVyKHNjb3BlKSkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdl
dENsb3N1cmVSZWdpc3RlcnMsIHNjb3BlTm9kZSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzE3MCw2ICszMjA4LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBOb2RlKiBz
Y29wZU5vZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSk7CisgICAgICAgICAgICAgICAg
aWYgKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZ2lzdGVycyA9IHRyeUdldFJlZ2lzdGVy
cyhzY29wZU5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIFNpbmdsZXRvbkNsb3N1cmVWYXJE
YXRhKiBkYXRhID0gJm1fZ3JhcGgubV9zaW5nbGV0b25DbG9zdXJlVmFyRGF0YS5hbGxvYygpOwor
ICAgICAgICAgICAgICAgICAgICBkYXRhLT5yZWdpc3RlcnMgPSByZWdpc3RlcnM7CisgICAgICAg
ICAgICAgICAgICAgIGRhdGEtPm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dFNpbmdsZXRvbkNsb3N1cmVWYXIsIE9wSW5mbyhkYXRhKSwgc2NvcGVO
b2RlLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSogc2NvcGVSZWdp
c3RlcnMgPSBhZGRUb0dyYXBoKEdldENsb3N1cmVSZWdpc3RlcnMsIHNjb3BlTm9kZSk7CiAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRDbG9zdXJlVmFyLCBPcEluZm8ob3BlcmFuZCksIHNj
b3BlTm9kZSwgc2NvcGVSZWdpc3RlcnMsIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw3ICsyMjcsNyBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogc2NvcGVk
VmFyTG9hZEVsaW1pbmF0aW9uKE5vZGUqIHJlZ2lzdGVycywgdW5zaWduZWQgdmFyTnVtYmVyKQor
ICAgIE5vZGUqIHNjb3BlZFZhckxvYWRFbGltaW5hdGlvbihOb2RlKiByZWdpc3RlcnMsIGludCB2
YXJOdW1iZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChp
KTsKQEAgLTI0NCw2ICsyNDQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjogewor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVy
YW5kICE9IHZhck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFNldExvY2Fs
OiB7CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICBpZiAodmFy
aWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkKQEAgLTI2MCw2ICsyNjUsNDQgQEAgcHJpdmF0
ZToKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAorICAgIE5vZGUqIHNpbmdsZXRvblNj
b3BlZFZhckxvYWRFbGltaW5hdGlvbihTaW5nbGV0b25DbG9zdXJlVmFyRGF0YSogZGF0YSkKKyAg
ICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7Cisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldFNpbmdsZXRvbkNs
b3N1cmVWYXI6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZh
ckRhdGEoKS0+cmVnaXN0ZXJzID09IGRhdGEtPnJlZ2lzdGVycworICAgICAgICAgICAgICAgICAg
ICAmJiBub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kID09IGRhdGEtPm9w
ZXJhbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjog
eworICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJOdW1iZXIoKSAhPSBkYXRhLT5vcGVyYW5k
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjog
eworICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5y
ZWdpc3RlcnMgPT0gZGF0YS0+cmVnaXN0ZXJzCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUt
PnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQgPT0gZGF0YS0+b3BlcmFuZCkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6
IHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQorICAgICAgICAgICAgICAgICAgICAmJiB2YXJp
YWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihk
YXRhLT5vcGVyYW5kKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
Y2xvYmJlcnNXb3JsZChub2RlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCiAgICAgYm9vbCBnbG9iYWxWYXJXYXRjaHBv
aW50RWxpbWluYXRpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpCiAg
ICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewpA
QCAtMzE4LDcgKzM2MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAg
ICAKLSAgICBOb2RlKiBzY29wZWRWYXJTdG9yZUVsaW1pbmF0aW9uKE5vZGUqIHNjb3BlLCBOb2Rl
KiByZWdpc3RlcnMsIHVuc2lnbmVkIHZhck51bWJlcikKKyAgICBOb2RlKiBzY29wZWRWYXJTdG9y
ZUVsaW1pbmF0aW9uKE5vZGUqIHNjb3BlLCBOb2RlKiByZWdpc3RlcnMsIGludCB2YXJOdW1iZXIp
CiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykg
ewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKQEAgLTMz
MSw2ICszNzQsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U2luZ2xldG9u
Q2xvc3VyZVZhcjogeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaW5nbGV0b25DbG9zdXJl
VmFyRGF0YSgpLT5vcGVyYW5kICE9IHZhck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6IHsKICAgICAgICAgICAgICAg
ICAvLyBMZXQncyBiZSBjb25zZXJ2YXRpdmUuCiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZh
ck51bWJlcigpID09IHZhck51bWJlcikKQEAgLTMzOCw3ICszODcsMTUgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgIGNhc2UgR2V0U2luZ2xldG9u
Q2xvc3VyZVZhcjogeworICAgICAgICAgICAgICAgIC8vIENvbnNlcnZhdGl2ZS4gTGV0J3MgYmUg
aXQuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCkt
Pm9wZXJhbmQgPT0gdmFyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CiAg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVB
Y2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkKICAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFibGVB
Y2Nlc3NEYXRhLT5sb2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4odmFyTnVt
YmVyKSkKQEAgLTM1NSw2ICs0MTIsNTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogICAgIAorICAgIE5vZGUqIHNpbmdsZXRvblNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24o
U2luZ2xldG9uQ2xvc3VyZVZhckRhdGEqIGRhdGEpCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG1fY3VycmVudEJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7CisgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPnZhck51bWJlcigpICE9IGRhdGEtPm9wZXJhbmQpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPnJlZ2lz
dGVycyA9PSBkYXRhLT5yZWdpc3RlcnMKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+c2lu
Z2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+b3BlcmFuZCA9PSBkYXRhLT5vcGVyYW5kKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZh
cjogeworICAgICAgICAgICAgICAgIC8vIExldCdzIGJlIGNvbnNlcnZhdGl2ZS4KKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+dmFyTnVtYmVyKCkgPT0gZGF0YS0+b3BlcmFuZCkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEdldFNpbmdsZXRvbkNsb3N1
cmVWYXI6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRh
dGEoKS0+cmVnaXN0ZXJzID09IGRhdGEtPnJlZ2lzdGVycworICAgICAgICAgICAgICAgICAgICAm
JiBub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kID09IGRhdGEtPm9wZXJh
bmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBHZXRM
b2NhbDoKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVy
ZWQoKQorICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkg
PT0gVmlydHVhbFJlZ2lzdGVyKGRhdGEtPm9wZXJhbmQpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkgfHwgbm9kZS0+Y2FuRXhp
dCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICAKICAgICBOb2RlKiBnZXRCeVZhbExvYWRFbGltaW5hdGlvbihOb2Rl
KiBjaGlsZDEsIE5vZGUqIGNoaWxkMikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CkBAIC04NTEsMTEgKzk1OCwxOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgUHV0
Q2xvc3VyZVZhcjoKICAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihub2RlLT52YXJOdW1iZXIoKSkgPT0gbG9jYWwpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgY2FzZSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyOgorICAgICAgICAgICAgY2FzZSBQdXRT
aW5nbGV0b25DbG9zdXJlVmFyOgorICAgICAgICAgICAgICAgIGlmIChWaXJ0dWFsUmVnaXN0ZXIo
bm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+b3BlcmFuZCkgPT0gbG9jYWwpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAoY2Fy
ZUFib3V0Q2xvYmJlcmluZyAmJiBtX2dyYXBoLmNsb2JiZXJzV29ybGQobm9kZSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtOTA0LDEwICsxMDE4LDE3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldENsb3N1
cmVWYXI6CisgICAgICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAgICAgICAgICAgICAg
aWYgKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+dmFyTnVtYmVyKCkpID09IGxv
Y2FsKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVBY2Nlc3NlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNl
IEdldFNpbmdsZXRvbkNsb3N1cmVWYXI6CisgICAgICAgICAgICBjYXNlIFB1dFNpbmdsZXRvbkNs
b3N1cmVWYXI6CisgICAgICAgICAgICAgICAgaWYgKFZpcnR1YWxSZWdpc3Rlcihub2RlLT5zaW5n
bGV0b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgICAg
ICAgICAgY2FzZSBTa2lwVG9wU2NvcGU6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKQpAQCAtMTIyOSw2ICsxMzUwLDEzIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgR2V0U2luZ2xldG9u
Q2xvc3VyZVZhcjogeworICAgICAgICAgICAgaWYgKGNzZU1vZGUgPT0gU3RvcmVFbGltaW5hdGlv
bikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KHNp
bmdsZXRvblNjb3BlZFZhckxvYWRFbGltaW5hdGlvbihub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFy
RGF0YSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2Ug
R2xvYmFsVmFyV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGlmIChjc2VNb2RlID09IFN0b3JlRWxp
bWluYXRpb24pCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjU2LDYgKzEzODQsMTMgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBQ
dXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7CisgICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBOb3Jt
YWxDU0UpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlbGltaW5hdGUoc2lu
Z2xldG9uU2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbihub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFy
RGF0YSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2Ug
R2V0QnlWYWw6CiAgICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBTdG9yZUVsaW1pbmF0aW9uKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE1OTczNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTQgKzE0NSwyMCBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIAogICAg
IGNhc2UgTm90aWZ5UHV0R2xvYmFsVmFyOgogICAgICAgICB3cml0ZShXYXRjaHBvaW50X2ZpcmUp
OworICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNl
IENyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6CiAgICAgICAgIHdy
aXRlKFNpZGVTdGF0ZSk7CisgICAgICAgIHdyaXRlKFdhdGNocG9pbnRfZmlyZSk7CiAgICAgICAg
IHJlYWQoR0NTdGF0ZSk7CiAgICAgICAgIHdyaXRlKEdDU3RhdGUpOwogICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50OgorICAg
ICAgICByZWFkKFdhdGNocG9pbnRfZmlyZSk7CisgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRo
ZXNlIGFyZSBmb3J3YXJkLWV4aXRpbmcgbm9kZXMgdGhhdCBhc3N1bWUgdGhhdCB0aGUgc3Vic2Vx
dWVudCBpbnN0cnVjdGlvbgogICAgIC8vIGlzIGEgTW92SGludCwgYW5kIHRoZXkgdHJ5IHRvIHJv
bGwgZm9yd2FyZCBvdmVyIHRoaXMgTW92SGludCBpbiB0aGVpcgpAQCAtNTE1LDEwICs1MjEsMTgg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCisgICAgY2FzZSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyOgorICAgICAg
ICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJE
YXRhKCktPm9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIFB1
dENsb3N1cmVWYXI6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUt
PnZhck51bWJlcigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBQdXRT
aW5nbGV0b25DbG9zdXJlVmFyOgorICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFyaWFibGVz
LCBub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgY2FzZSBHbG9iYWxW
YXJXYXRjaHBvaW50OgogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChBYnNvbHV0ZSwgbm9kZS0+
cmVnaXN0ZXJQb2ludGVyKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY3LDcgKzc2Nyw4
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICBjYXNlIEFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6Ci0gICAgICAgIGNhc2UgR2V0U2NvcGU6IHsKKyAgICAgICAgY2FzZSBHZXRTY29wZToK
KyAgICAgICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7CiAgICAgICAgICAgICBmaXhF
ZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTkwMSw2ICs5MDIsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldExv
Y2FsVW5saW5rZWQ6CiAgICAgICAgIGNhc2UgR2V0TXlTY29wZToKICAgICAgICAgY2FzZSBHZXRD
bG9zdXJlVmFyOgorICAgICAgICBjYXNlIEdldFNpbmdsZXRvbkNsb3N1cmVWYXI6CiAgICAgICAg
IGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAg
Y2FzZSBOb3RpZnlQdXRHbG9iYWxWYXI6CkBAIC05MzksNiArOTQxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2Nh
bDoKICAgICAgICAgY2FzZSBMb29wSGludDoKKyAgICAgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2Nh
dGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1
bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTk3
MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgxMCw2ICs4MTAsNyBAQCBwdWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPFN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhLCA4PiBtX3N0cnVjdHVyZVRyYW5zaXRpb25EYXRhOwogICAgIFNl
Z21lbnRlZFZlY3RvcjxOZXdBcnJheUJ1ZmZlckRhdGEsIDQ+IG1fbmV3QXJyYXlCdWZmZXJEYXRh
OwogICAgIFNlZ21lbnRlZFZlY3RvcjxTd2l0Y2hEYXRhLCA0PiBtX3N3aXRjaERhdGE7CisgICAg
U2VnbWVudGVkVmVjdG9yPFNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhLCA0PiBtX3NpbmdsZXRvbkNs
b3N1cmVWYXJEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5l
VmFyaWFibGVEYXRhOwogICAgIE93blB0cjxJbmxpbmVDYWxsRnJhbWVTZXQ+IG1faW5saW5lQ2Fs
bEZyYW1lczsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0
ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSwxMSBAQCBzdHJ1
Y3QgU3dpdGNoRGF0YSB7CiAgICAgYm9vbCBkaWRVc2VKdW1wVGFibGU7CiB9OwogCitzdHJ1Y3Qg
U2luZ2xldG9uQ2xvc3VyZVZhckRhdGEgeworICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4q
IHJlZ2lzdGVyczsKKyAgICBpbnQgb3BlcmFuZDsKK307CisKIC8vIFRoaXMgdHlwZSB1c2VkIGlu
IHBhc3NpbmcgYW4gaW1tZWRpYXRlIGFyZ3VtZW50IHRvIE5vZGUgY29uc3RydWN0b3I7CiAvLyBk
aXN0aW5ndWlzaGVzIGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8g
YSBDb2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmUgLSAKIC8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3Vt
ZW50LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCkBAIC03NDIsNyArNzQ3LDcgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRDbG9zdXJlVmFyIHx8IG9wKCkg
PT0gUHV0Q2xvc3VyZVZhcjsKICAgICB9CiAKLSAgICB1bnNpZ25lZCB2YXJOdW1iZXIoKQorICAg
IGludCB2YXJOdW1iZXIoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1Zhck51bWJlcigpKTsK
ICAgICAgICAgcmV0dXJuIG1fb3BJbmZvOwpAQCAtNzY4LDYgKzc3MywxNiBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgewogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtu
b3duPio+KG1fb3BJbmZvKTsKICAgICB9CisgICAgCisgICAgYm9vbCBoYXNTaW5nbGV0b25DbG9z
dXJlVmFyRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRTaW5nbGV0b25D
bG9zdXJlVmFyIHx8IG9wKCkgPT0gUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjsKKyAgICB9CisgICAg
CisgICAgU2luZ2xldG9uQ2xvc3VyZVZhckRhdGEqIHNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U2luZ2xldG9uQ2xvc3VyZVZhckRh
dGEqPihtX29wSW5mbyk7CisgICAgfQogCiAgICAgYm9vbCBoYXNSZXN1bHQoKQogICAgIHsKQEAg
LTkyMSw2ICs5MzYsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Ogog
ICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6Cisg
ICAgICAgIGNhc2UgR2V0U2luZ2xldG9uQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBBcnJheVBv
cDoKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKQEAg
LTEwNjIsNiArMTA3OCwxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5m
bzsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNTeW1ib2xUYWJsZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gb3AoKSA9PSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ7CisgICAgfQor
ICAgIAorICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgpCisgICAgeworICAgICAgICBBU1NF
UlQoaGFzU3ltYm9sVGFibGUoKSk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFN5
bWJvbFRhYmxlKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKICAgICBib29sIGhhc0FycmF5TW9k
ZSgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1OTczNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDExICsx
ODIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldENs
b3N1cmVSZWdpc3RlcnMsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0Q2xvc3Vy
ZVZhciwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUHV0Q2xvc3VyZVZhciwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAorICAgIG1hY3JvKEdldFNpbmdsZXRvbkNsb3N1cmVWYXIsIE5vZGVSZXN1bHRK
UykgXAorICAgIG1hY3JvKFB1dFNpbmdsZXRvbkNsb3N1cmVWYXIsIE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBtYWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFB1
dEdsb2JhbFZhciwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5vdGlmeVB1dEdsb2Jh
bFZhciwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdsb2JhbFZhcldhdGNocG9pbnQs
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhWYXJJbmplY3Rpb25XYXRjaHBvaW50LCBO
b2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBv
aW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tGdW5jdGlvbiwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludCwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDcgKzE5MSw4IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAg
ICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6IHsKKyAg
ICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgorICAgICAgICBjYXNlIEdldFNpbmdsZXRvbkNsb3N1
cmVWYXI6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC01NTMs
NiArNTU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICAg
ICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgorICAgICAgICBj
YXNlIFB1dFNpbmdsZXRvbkNsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAg
ICBjYXNlIFRocm93OgogICAgICAgICBjYXNlIFB1dEJ5SWQ6CkBAIC01ODMsNiArNTg1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgY2FzZSBMb29wSGlu
dDoKICAgICAgICAgY2FzZSBOb3RpZnlQdXRHbG9iYWxWYXI6CisgICAgICAgIGNhc2UgQWN0aXZh
dGlvbkFsbG9jYXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICAgICAgLy8gVGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBhbHJlYWR5IGhhcyBh
IHByZWRpY3Rpb24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksOSBAQCBi
b29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBTa2lwU2Nv
cGU6CiAgICAgY2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOgogICAgIGNhc2UgR2V0Q2xvc3VyZVZh
cjoKKyAgICBjYXNlIEdldFNpbmdsZXRvbkNsb3N1cmVWYXI6CiAgICAgY2FzZSBQdXRDbG9zdXJl
VmFyOgorICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjoKICAgICBjYXNlIEdldEdsb2Jh
bFZhcjoKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9p
bnQ6CkBAIC0yNDMsNiArMjQ1LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVU
eXBlJiBzdAogICAgIGNhc2UgSW50NTJUb1ZhbHVlOgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9p
bnQ6CiAgICAgY2FzZSBOb3RpZnlQdXRHbG9iYWxWYXI6CisgICAgY2FzZSBBY3RpdmF0aW9uQWxs
b2NhdGlvbldhdGNocG9pbnQ6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBj
YXNlIEdldEJ5VmFsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzA3LDYgKzM3MDcsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5
bG9hZEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIEdldFNpbmds
ZXRvbkNsb3N1cmVWYXI6IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRQ
YXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKCZi
aXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KG5vZGUtPnNpbmdsZXRvbkNsb3N1
cmVWYXJEYXRhKCktPnJlZ2lzdGVycyArIG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCkt
Pm9wZXJhbmQpLT5hc0JpdHMudGFnLCByZXN1bHRUYWdHUFIpOworICAgICAgICBtX2ppdC5sb2Fk
MzIoJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4obm9kZS0+c2luZ2xldG9u
Q2xvc3VyZVZhckRhdGEoKS0+cmVnaXN0ZXJzICsgbm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRh
dGEoKS0+b3BlcmFuZCktPmFzQml0cy5wYXlsb2FkLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7CiAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgcmVnaXN0ZXJzKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAgLTM3
MjAsNiArMzczMCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAKICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OkFkZHJl
c3MocmVnaXN0ZXJzR1BSLCBub2RlLT52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAg
ICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHJlZ2lzdGVyc0dQUiwgbm9kZS0+dmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwor
ICAgICAgICB3cml0ZUJhcnJpZXIoc2NvcGVHUFIsIHZhbHVlVGFnR1BSLCBub2RlLT5jaGlsZDMo
KSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgICAgICBu
b1Jlc3VsdChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHV0U2luZ2xl
dG9uQ2xvc3VyZVZhcjogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hSZWdpc3Rlcih0aGlz
KTsKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOworICAgICAgICBHUFJSZWcgdmFsdWVQYXls
b2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2hSZWdpc3Rlci5ncHIoKTsKKworICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFn
R1BSLCAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihub2RlLT5zaW5nbGV0
b25DbG9zdXJlVmFyRGF0YSgpLT5yZWdpc3RlcnMgKyBub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFy
RGF0YSgpLT5vcGVyYW5kKS0+YXNCaXRzLnRhZyk7CisgICAgICAgIG1faml0LnN0b3JlMzIodmFs
dWVQYXlsb2FkR1BSLCAmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihub2Rl
LT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5yZWdpc3RlcnMgKyBub2RlLT5zaW5nbGV0b25D
bG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kKS0+YXNCaXRzLnBheWxvYWQpOwogICAgICAgICB3cml0
ZUJhcnJpZXIoc2NvcGVHUFIsIHZhbHVlVGFnR1BSLCBub2RlLT5jaGlsZDIoKSwgV3JpdGVCYXJy
aWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub1Jlc3VsdChub2Rl
KTsKICAgICAgICAgYnJlYWs7CkBAIC00MzE0LDYgKzQzMzksMTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAorICAgIGNhc2UgQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50OiB7CisgICAgICAgIG5v
UmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2Ug
Q3JlYXRlQXJndW1lbnRzOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwg
dmFsdWUsIFBheWxvYWRXb3JkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAwOSw2ICs0MDA5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CisgICAgY2FzZSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIG1faml0LmxvYWQ2NChub2RlLT5zaW5nbGV0b25DbG9z
dXJlVmFyRGF0YSgpLT5yZWdpc3RlcnMgKyBub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgp
LT5vcGVyYW5kLCByZXN1bHRHUFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIFB1dENsb3N1cmVWYXI6IHsK
ICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBTdG9yYWdlT3BlcmFuZCByZWdpc3RlcnModGhpcywgbm9kZS0+Y2hpbGQyKCkp
OwpAQCAtNDAyNSw2ICs0MDMyLDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
KyAgICBjYXNlIFB1dFNpbmdsZXRvbkNsb3N1cmVWYXI6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoUmVnaXN0ZXIodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2hSZWdpc3Rlci5ncHIoKTsKKyAgICAgICAgCisgICAg
ICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRh
KCktPnJlZ2lzdGVycyArIG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQp
OworICAgICAgICB3cml0ZUJhcnJpZXIoc2NvcGVHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIo
KSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgICAgICBu
b1Jlc3VsdChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgR2V0QnlJZDog
ewogICAgICAgICBBU1NFUlQobm9kZS0+cHJlZGljdGlvbigpKTsKIApAQCAtNDU5NSw2ICs0NjE2
LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEFjdGl2YXRpb25BbGxvY2F0aW9uV2F0
Y2hwb2ludDogeworICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czogewogICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBv
aW50Q29sbGVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCwxMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgYWRkTGF6aWx5KGdsb2JhbE9iamVjdCgpLT52YXJJbmpl
Y3Rpb25XYXRjaHBvaW50KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6CisgICAgICAgICAgICBh
ZGRMYXppbHkobV9ub2RlLT5zeW1ib2xUYWJsZSgpLT5tX2FjdGl2YXRpb25BbGxvY2F0ZWRPbmNl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDQsNiArMTA0LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUq
IAogICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CiAg
ICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICBjYXNlIEFjdGl2YXRpb25BbGxv
Y2F0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVh
azsKICAgICBjYXNlIEdldEJ5SWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwMCw2ICs0MDAsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9p
bnQ6CiAgICAgICAgICAgICBjb21waWxlR2xvYmFsVmFyV2F0Y2hwb2ludCgpOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50Ogor
ICAgICAgICAgICAgY29tcGlsZUFjdGl2YXRpb25BbGxvY2F0aW9uV2F0Y2hwb2ludCgpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0TXlTY29wZToKICAgICAgICAgICAgIGNv
bXBpbGVHZXRNeVNjb3BlKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTQxMiw5ICs0MTUsMTUg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICAgICAgY29t
cGlsZUdldENsb3N1cmVWYXIoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdl
dFNpbmdsZXRvbkNsb3N1cmVWYXI6CisgICAgICAgICAgICBjb21waWxlR2V0U2luZ2xldG9uQ2xv
c3VyZVZhcigpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZh
cjoKICAgICAgICAgICAgIGNvbXBpbGVQdXRDbG9zdXJlVmFyKCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJlVmFyOgorICAgICAgICAgICAgY29t
cGlsZVB1dENsb3N1cmVWYXIoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENv
bXBhcmVFcToKICAgICAgICAgICAgIGNvbXBpbGVDb21wYXJlRXEoKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjE5OSw2ICsyMjA4LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhZGRyZXNz
Rm9yKGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDEoKSksIG1fbm9kZS0+dmFyTnVtYmVyKCkpKSk7
CiAgICAgfQogICAgIAorICAgIHZvaWQgY29tcGlsZUdldFNpbmdsZXRvbkNsb3N1cmVWYXIoKQor
ICAgIHsKKyAgICAgICAgU2luZ2xldG9uQ2xvc3VyZVZhckRhdGEqIGRhdGEgPSBtX2RhdGEtPnNp
bmdsZXRvbkNsb3N1cmVWYXJEYXRhKCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0
KAorICAgICAgICAgICAgYWRkcmVzc0ZvcihtX291dC5jb25zdEludFB0cihkYXRhLT5yZWdpc3Rl
cnMpLCBkYXRhLT5vcGVyYW5kKSkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNvbXBpbGVQdXRD
bG9zdXJlVmFyKCkKICAgICB7CiAgICAgICAgIG1fb3V0LnN0b3JlNjQoCkBAIC0yMjA2LDYgKzIy
MjIsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFkZHJlc3NGb3IobG93U3RvcmFnZShtX25v
ZGUtPmNoaWxkMigpKSwgbV9ub2RlLT52YXJOdW1iZXIoKSkpOwogICAgIH0KICAgICAKKyAgICB2
b2lkIGNvbXBpbGVQdXRTaW5nbGV0b25DbG9zdXJlVmFyKCkKKyAgICB7CisgICAgICAgIFNpbmds
ZXRvbkNsb3N1cmVWYXJEYXRhKiBkYXRhID0gbV9kYXRhLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0
YSgpOworICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMygpKSwKKyAgICAgICAgICAgIGFkZHJlc3NGb3IobV9vdXQuY29uc3RJbnRQdHIo
ZGF0YS0+cmVnaXN0ZXJzKSwgZGF0YS0+b3BlcmFuZCkpOworICAgIH0KKyAgICAKICAgICB2b2lk
IGNvbXBpbGVDb21wYXJlRXEoKQogICAgIHsKICAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKEludDMyVXNlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE1OTczNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDA2LDM5ICsyMDA2LDM5IEBAIF9sbGludF9vcF9yZXNv
bHZlX3Njb3BlOgogI3JHbG9iYWxQcm9wZXJ0eToKICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVy
dHksIC5yR2xvYmFsVmFyCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNSkK
KyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFZhcjoKICAgICBiaW5lcSB0MCwgR2xvYmFsVmFy
LCAuckNsb3N1cmVWYXIKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg1KQor
ICAgIGRpc3BhdGNoKDYpCiAKIC5yQ2xvc3VyZVZhcjoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZh
ciwgLnJHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICByZXNvbHZlU2Nv
cGUoKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2goNikKIAogLnJHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5V2l0
aFZhckluamVjdGlvbkNoZWNrcywgLnJHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAg
ICAgdmFySW5qZWN0aW9uQ2hlY2soLnJEeW5hbWljKQogICAgIGdldEdsb2JhbE9iamVjdCgxKQot
ICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2goNikKIAogLnJHbG9iYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQwLCBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzLCAuckNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgdmFySW5qZWN0aW9u
Q2hlY2soLnJEeW5hbWljKQogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDUp
CisgICAgZGlzcGF0Y2goNikKIAogLnJDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
ICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5yRHluYW1p
YwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAgICByZXNvbHZlU2NvcGUoKQot
ICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2goNikKIAogLnJEeW5hbWljOgogICAgIGNhbGxT
bG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpCi0gICAgZGlzcGF0Y2goNSkK
KyAgICBkaXNwYXRjaCg2KQogCiAKIG1hY3JvIGxvYWRXaXRoU3RydWN0dXJlQ2hlY2sob3BlcmFu
ZCwgc2xvd1BhdGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTE4MzEsMzkgKzE4MzEsMzkgQEAgX2xsaW50X29wX3Jlc29sdmVfc2NvcGU6CiAj
ckdsb2JhbFByb3BlcnR5OgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLnJHbG9iYWxW
YXIKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3BhdGNo
KDYpCiAKIC5yR2xvYmFsVmFyOgogICAgIGJpbmVxIHQwLCBHbG9iYWxWYXIsIC5yQ2xvc3VyZVZh
cgogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2go
NikKIAogLnJDbG9zdXJlVmFyOgogICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyLCAuckdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHJlc29sdmVTY29wZSgpCi0gICAgZGlz
cGF0Y2goNSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzLCAuckdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICB2YXJJbmplY3Rp
b25DaGVjayguckR5bmFtaWMpCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2go
NSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CiAgICAgYmluZXEgdDAsIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5yQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFt
aWMpCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNSkKKyAgICBkaXNwYXRj
aCg2KQogCiAuckNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQw
LCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJEeW5hbWljCiAgICAgdmFySW5q
ZWN0aW9uQ2hlY2soLnJEeW5hbWljKQogICAgIHJlc29sdmVTY29wZSgpCi0gICAgZGlzcGF0Y2go
NSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckR5bmFtaWM6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGlu
dF9zbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3BhdGNo
KDYpCiAKIAogbWFjcm8gbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhvcGVyYW5kLCBzbG93UGF0aCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCShy
ZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIEpTQWN0aXZhdGlvbiogY3JlYXRlKFZNJiB2bSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIFJl
Z2lzdGVyKiByZWdpc3RlcnMsIENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIHsKICAgICAgICAg
U3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOworICAg
ICAgICBzeW1ib2xUYWJsZS0+bV9hY3RpdmF0aW9uQWxsb2NhdGVkT25jZS5ub3RpZnlXcml0ZSgp
OwogICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKAogICAgICAgICAgICAg
Tm90TnVsbCwKICAgICAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0FjdGl2YXRpb24+KApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDE1OTcz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MywxOSArNTMsMTkgQEAgc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNj
ZXNzKEV4ZWNTdAogICAgIGlmIChKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBqc0R5bmFtaWND
YXN0PEpTQWN0aXZhdGlvbio+KHNjb3BlKSkgewogICAgICAgICBpZiAoaWRlbnQgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewogICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUg
cHJvcGVydHkgd2lsbCBiZSBhdCB0aGlzIGFjdGl2YXRpb24gc2NvcGUsIGJ1dCB3ZSBkb24ndCBr
bm93IGhvdyB0byBjYWNoZSBpdC4KLSAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMs
IDAsIDAsIDAsIDApOworICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywgMCwgMCwg
MCwgMCwgMCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAg
IFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpLT5nZXQo
aWRlbnQuaW1wbCgpKTsKICAgICAgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHkoKSAmJiBnZXRPclB1
dCA9PSBQdXQpIHsKICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHByb3BlcnR5IHdpbGwgYmUg
YXQgdGhpcyBhY3RpdmF0aW9uIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25vdyBob3cgdG8gY2FjaGUg
aXQuCi0gICAgICAgICAgICBvcCA9IFJlc29sdmVPcChEeW5hbWljLCAwLCAwLCAwLCAwKTsKKyAg
ICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDAsIDApOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWVudHJ5LmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShDbG9zdXJlVmFyLCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCBhY3RpdmF0aW9uLT5zdHJ1Y3R1cmUoKSwg
MCwgZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlw
ZShDbG9zdXJlVmFyLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAwLCBhY3RpdmF0
aW9uLCAwLCBlbnRyeS5nZXRJbmRleCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAKQEAgLTc5LDEyICs3OSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RB
Y2Nlc3MoRXhlY1N0CiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKICAgICAgICAgICAg
IGlmIChnZXRPclB1dCA9PSBQdXQgJiYgZW50cnkuaXNSZWFkT25seSgpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gV2Uga25vdyB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCBnbG9iYWwgc2NvcGUsIGJ1
dCB3ZSBkb24ndCBrbm93IGhvdyB0byBjYWNoZSBpdC4KLSAgICAgICAgICAgICAgICBvcCA9IFJl
c29sdmVPcChEeW5hbWljLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBvcCA9IFJlc29s
dmVPcChEeW5hbWljLCAwLCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AoCi0gICAgICAg
ICAgICAgICAgbWFrZVR5cGUoR2xvYmFsVmFyLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRl
cHRoLCAwLCBlbnRyeS53YXRjaHBvaW50U2V0KCksCisgICAgICAgICAgICAgICAgbWFrZVR5cGUo
R2xvYmFsVmFyLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAwLCAwLCBlbnRyeS53
YXRjaHBvaW50U2V0KCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgpKS5zbG90KCkpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC05NiwxNSArOTYsMTUgQEAg
c3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNTdAogICAgICAgICAgICAgfHwg
KGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCktPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9w
ZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSAmJiBnZXRPclB1dCA9PSBQdXQpKSB7CiAgICAgICAgICAg
ICAvLyBXZSBrbm93IHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGF0IGdsb2JhbCBzY29wZSwgYnV0IHdl
IGRvbid0IGtub3cgaG93IHRvIGNhY2hlIGl0LgogICAgICAgICAgICAgQVNTRVJUKCFzY29wZS0+
bmV4dCgpKTsKLSAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKEdsb2JhbFByb3Bl
cnR5LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAwLCAwLCAwKTsKKyAgICAgICAg
ICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKEdsb2JhbFByb3BlcnR5LCBuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyksIGRlcHRoLCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAKLSAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoR2xvYmFsUHJv
cGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIGdsb2JhbE9iamVjdC0+c3Ry
dWN0dXJlKCksIDAsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICBvcCA9IFJlc29sdmVP
cChtYWtlVHlwZShHbG9iYWxQcm9wZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0
aCwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgMCwgMCwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIG9wID0gUmVzb2x2ZU9wKER5bmFt
aWMsIDAsIDAsIDAsIDApOworICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDAs
IDApOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDIsNyArMTQyLDcgQEAgSlNWYWx1ZSBK
U1Njb3BlOjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYwogCiBSZXNvbHZlT3AgSlNTY29wZTo6YWJz
dHJhY3RSZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBHZXRPclB1dCBnZXRPclB1dCwgUmVzb2x2ZVR5cGUgdW5saW5rZWRUeXBl
KQogewotICAgIFJlc29sdmVPcCBvcChEeW5hbWljLCAwLCAwLCAwLCAwKTsKKyAgICBSZXNvbHZl
T3Agb3AoRHluYW1pYywgMCwgMCwgMCwgMCwgMCk7CiAgICAgaWYgKHVubGlua2VkVHlwZSA9PSBE
eW5hbWljKQogICAgICAgICByZXR1cm4gb3A7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Njb3BlLmgJKHJldmlzaW9uIDE1OTczNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsMTAgKzk2LDExIEBA
IGlubGluZSBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKFJlc28KIH0KIAogc3RydWN0IFJl
c29sdmVPcCB7Ci0gICAgUmVzb2x2ZU9wKFJlc29sdmVUeXBlIHR5cGUsIHNpemVfdCBkZXB0aCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIHVpbnRw
dHJfdCBvcGVyYW5kKQorICAgIFJlc29sdmVPcChSZXNvbHZlVHlwZSB0eXBlLCBzaXplX3QgZGVw
dGgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24sIFdhdGNo
cG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIHVpbnRwdHJfdCBvcGVyYW5kKQogICAgICAgICA6IHR5
cGUodHlwZSkKICAgICAgICAgLCBkZXB0aChkZXB0aCkKICAgICAgICAgLCBzdHJ1Y3R1cmUoc3Ry
dWN0dXJlKQorICAgICAgICAsIGFjdGl2YXRpb24oYWN0aXZhdGlvbikKICAgICAgICAgLCB3YXRj
aHBvaW50U2V0KHdhdGNocG9pbnRTZXQpCiAgICAgICAgICwgb3BlcmFuZChvcGVyYW5kKQogICAg
IHsKQEAgLTEwOCw2ICsxMDksNyBAQCBzdHJ1Y3QgUmVzb2x2ZU9wIHsKICAgICBSZXNvbHZlVHlw
ZSB0eXBlOwogICAgIHNpemVfdCBkZXB0aDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAg
ICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb247CiAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2lu
dFNldDsKICAgICB1aW50cHRyX3Qgb3BlcmFuZDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxNTk3MzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgY2xhc3MgSlNWYXJpYWJsZU9iamVjdCA6IHB1
YmxpYyBKU1N5bWJvbAogcHVibGljOgogICAgIHR5cGVkZWYgSlNTeW1ib2xUYWJsZU9iamVjdCBC
YXNlOwogCisgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogcmVnaXN0ZXJzKCkgeyByZXR1
cm4gbV9yZWdpc3RlcnM7IH0KICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiByZWdpc3Rl
ckF0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CiAKICAg
ICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBjb25zdCAqIGFkZHJlc3NPZlJlZ2lzdGVycygp
IGNvbnN0IHsgcmV0dXJuICZtX3JlZ2lzdGVyczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTU5NzM2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQsNiArMTA0LDcgQEAgU3ltYm9sVGFibGU6OlN5bWJvbFRhYmxlKFZNJiB2bSkKICAg
ICAsIG1fdXNlc05vblN0cmljdEV2YWwoZmFsc2UpCiAgICAgLCBtX2NhcHR1cmVTdGFydCgwKQog
ICAgICwgbV9jYXB0dXJlRW5kKDApCisgICAgLCBtX2FjdGl2YXRpb25BbGxvY2F0ZWRPbmNlKENs
ZWFyV2F0Y2hwb2ludCkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjUsNyArNDY1
LDcgQEAgcHVibGljOgogICAgIC8vIDAgaWYgd2UgZG9uJ3QgY2FwdHVyZSBhbnkgYXJndW1lbnRz
OyBwYXJhbWV0ZXJDb3VudCgpIGluIGxlbmd0aCBpZiB3ZSBkby4KICAgICBjb25zdCBTbG93QXJn
dW1lbnQqIHNsb3dBcmd1bWVudHMoKSB7IHJldHVybiBtX3Nsb3dBcmd1bWVudHMuZ2V0KCk7IH0K
ICAgICB2b2lkIHNldFNsb3dBcmd1bWVudHMoc3RkOjp1bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtd
PiBzbG93QXJndW1lbnRzKSB7IG1fc2xvd0FyZ3VtZW50cyA9IHN0ZDo6bW92ZShzbG93QXJndW1l
bnRzKTsgfQotCisgICAgCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKQEAg
LTQ4MSw4ICs0ODEsMTAgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9jYXB0dXJlRW5kOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPFNsb3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1bWVudHM7Ci0KKyAgICAK
IHB1YmxpYzoKKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fYWN0aXZhdGlvbkFsbG9jYXRlZE9u
Y2U7CisgICAgCiAgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7CiB9OwogCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNTk3MzgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMy0xMS0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgorCisgICAgICAgIEluZmVyIG9uZS10aW1lIHNjb3BlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODEyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL2luZmVy
LW9uZS10aW1lLWNsb3N1cmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdy
ZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBqcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMuaHRt
bDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXR3
by12YXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1v
bmUtdGltZS1jbG9zdXJlLXR3by12YXJzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jl
c3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXRlbi12YXJzLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9z
dXJlLXR3by12YXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLmpzOiBBZGRlZC4KKwogMjAxMy0xMS0yNCAgSmlud29v
IFNvbmcgIDxqaW53b283LnNvbmdAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBF
RkwgZ2FyZGVuaW5nLiBSZWJhc2VsaW5pbmcgYWZ0ZXIgcjE1OTU3OS4KSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXIt
b25lLXRpbWUtY2xvc3VyZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MCBAQAorSlNSZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJl
LXRlbi12YXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycy1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1
cmUtdGVuLXZhcnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhj
ZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xv
c3VyZS10ZW4tdmFycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
aW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXRlbi12YXJzLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9u
ZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10d28tdmFycy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10
aW1lLWNsb3N1cmUtdHdvLXZhcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTAgQEAKK0pTUmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXR3by12YXJzCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNs
b3N1cmUtdHdvLXZhcnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10d28tdmFycy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3Rz
L2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1j
bG9zdXJlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVy
LW9uZS10aW1lLWNsb3N1cmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1j
bG9zdXJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItb25l
LXRpbWUtY2xvc3VyZS10ZW4tdmFycy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMSBAQAorZnVuY3Rpb24gZm9vTWFrZXIoeFBhcmFt
KSB7CisgICAgdmFyIHggPSB4UGFyYW07CisgICAgdmFyIHgyID0geFBhcmFtICsgMTsKKyAgICB2
YXIgeDMgPSB4UGFyYW0gKyAyOworICAgIHZhciB4NCA9IHhQYXJhbSArIDM7CisgICAgdmFyIHg1
ID0geFBhcmFtICsgNDsKKyAgICB2YXIgeDYgPSB4UGFyYW0gKyA1OworICAgIHZhciB4NyA9IHhQ
YXJhbSArIDY7CisgICAgdmFyIHg4ID0geFBhcmFtICsgNzsKKyAgICB2YXIgeDkgPSB4UGFyYW0g
KyA4OworICAgIHZhciB4MTAgPSB4UGFyYW0gKyA5OworICAgIHJldHVybiBmdW5jdGlvbiAoeSkg
eworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkKKyAgICAgICAgICAgIHkg
Kz0geCArIHgyICsgeDMgKyB4NCArIHg1ICsgeDYgKyB4NyArIHg4ICsgeDkgKyB4MTA7CisgICAg
ICAgIHJldHVybiB5OworICAgIH0KK30KKwordmFyIGZvbyA9IGZvb01ha2VyKDQyKTsKKworbm9J
bmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFy
IHJlc3VsdCA9IGZvbyg1KTsKKyAgICBpZiAocmVzdWx0ICE9IDQ2NTAwNSkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9v
TWFrZXIoMjMpKDUpOworaWYgKHJlc3VsdCAhPSAyNzUwMDUpCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10d28tdmFycy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9z
dXJlLXR3by12YXJzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10d28tdmFycy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIzIEBACitmdW5jdGlvbiBmb29NYWtlcih4UGFyYW0pIHsKKyAgICB2
YXIgeCA9IHhQYXJhbTsKKyAgICB2YXIgeDIgPSB4UGFyYW0gKyAxOworICAgIHJldHVybiBmdW5j
dGlvbiAoeSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkKKyAgICAg
ICAgICAgIHkgKz0geCArIHgyOworICAgICAgICByZXR1cm4geTsKKyAgICB9Cit9CisKK3ZhciBm
b28gPSBmb29NYWtlcig0Mik7CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28oNSk7CisgICAgaWYgKHJlc3Vs
dCAhPSAoNDIgKyA0MykgKiAxMDAwICsgNSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0OiAiICsgcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vTWFrZXIoMjMpKDUpOworaWYg
KHJlc3VsdCAhPSAoMjMgKyAyNCkgKiAxMDAwICsgNSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1vbmUt
dGltZS1jbG9zdXJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAKK2Z1bmN0aW9u
IGZvb01ha2VyKHhQYXJhbSkgeworICAgIHZhciB4ID0geFBhcmFtOworICAgIHJldHVybiBmdW5j
dGlvbiAoeSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkKKyAgICAg
ICAgICAgIHkgKz0geDsKKyAgICAgICAgcmV0dXJuIHk7CisgICAgfQorfQorCit2YXIgZm9vID0g
Zm9vTWFrZXIoNDIpOworCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKDUpOworICAgIGlmIChyZXN1bHQgIT0g
NDIgKiAxMDAwICsgNSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVz
dWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vTWFrZXIoMjMpKDUpOworaWYgKHJlc3VsdCAhPSAy
MyAqIDEwMDAgKyA1KQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
</data>
<flag name="commit-queue"
          id="240957"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217769</attachid>
            <date>2013-11-24 17:22:20 -0800</date>
            <delta_ts>2013-11-27 19:10:07 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59153</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5NzM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBA
CisyMDEzLTExLTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5mZXIgb25lLXRpbWUgc2NvcGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjQ4MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZGV0ZWN0cyBKU0FjdGl2YXRpb25zIHRoYXQgYXJl
IGNyZWF0ZWQgb25seSBvbmNlLiBUaGUgSlNBY3RpdmF0aW9uIHBvaW50ZXIgaXMgdGhlbgorICAg
ICAgICBiYWtlZCBpbnRvIHRoZSBtYWNoaW5lIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlz
IHRha2VzIGFkdmFudGFnZSBvZiB0aGUgb25lLXRpbWUgc2NvcGUgaW5mZXJlbmNlIHRvIHJlZHVj
ZSB0aGUgbnVibWVyIG9mCisgICAgICAgIGluZGlyZWN0aW9ucyBuZWVkZWQgdG8gZ2V0IHRvIGEg
Y2xvc3VyZSB2YXJpYWJsZSBpbiBjYXNlIHdoZXJlIHRoZSBzY29wZSBpcyBvbmx5CisgICAgICAg
IGFsbG9jYXRlZCBvbmNlLiBUaGlzIGlzbid0IHJlYWxseSBhIHNwZWVkLXVwIHNpbmNlIGluIHRo
ZSBjb21tb24gY2FzZSB0aGUgdG90YWwgbnVtYmVyCisgICAgICAgIG9mIGluc3RydWN0aW9uIGJ5
dGVzIG5lZWRlZCB0byBsb2FkIHRoZSBzY29wZSBmcm9tIHRoZSBzdGFjayBpcyBhYm91dCBlcXVh
bCB0byB0aGUKKyAgICAgICAgbnVtYmVyIG9mIGluc3RydWN0aW9uIGJ5dGVzIG5lZWRlZCB0byBt
YXRlcmlhbGl6ZSB0aGUgYWJzb2x1dGUgYWRkcmVzcyBvZiBhIHNjb3BlZAorICAgICAgICB2YXJp
YWJsZS4gQnV0LCB0aGlzIGlzIGEgbmVjZXNzYXJ5IHByZXJlcXVpc2l0ZSB0bworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0NjMwLCBzbyBpdCdzIHBy
b2JhYmx5IGEgZ29vZCBpZGVhIGFueXdheS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5o
OgorICAgICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOgorICAgICAgICAoSlNDOjpwYWRPcGNvZGVO
YW1lKToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50Lmg6CisgICAgICAgIChKU0M6Oklu
bGluZVdhdGNocG9pbnRTZXQ6Om5vdGlmeVdyaXRlKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFJlc29sdmVTY29wZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6dHJ5R2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6c2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6c2luZ2xldG9uU2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6c2NvcGVkVmFyU3RvcmVFbGltaW5hdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnNpbmdsZXRvblNjb3BlZFZhclN0b3Jl
RWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRMb2NhbExvYWRF
bGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnNldExvY2FsU3RvcmVF
bGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NF
KToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNs
b2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5o
OgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFy
TnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTaW5nbGV0b25DbG9zdXJlVmFy
RGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpoYXNTeW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6c3ltYm9sVGFibGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OmhhbmRsZSk6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0U2luZ2xldG9uQ2xvc3VyZVZhcik6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVQdXRTaW5nbGV0b25DbG9zdXJlVmFy
KToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAg
ICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9K
U0FjdGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmFic3RyYWN0QWNjZXNz
KToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKToKKyAgICAgICAgKiBy
dW50aW1lL0pTU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU9wOjpSZXNvbHZlT3ApOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1Zh
cmlhYmxlT2JqZWN0OjpyZWdpc3RlcnMpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUu
Y3BwOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6U3ltYm9sVGFibGUpOgorICAgICAgICAq
IHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoKKwogMjAxMy0xMS0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBtb3JlIGZhbGxvdXQgZnJvbSBmYWlsZWQgYXR0
ZW1wdHMgYXQgZGl2L21vZCBERkcgc3RyZW5ndGggcmVkdWN0aW9ucwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1OTczNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzY1LDYgKzEzNjUsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2Rl
KFByaW50U3RyZWFtCiAgICAgICAgICAgICArK2l0OyAvLyBkZXB0aAogICAgICAgICAgICAgcHJp
bnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAicmVzb2x2ZV9zY29wZSIp
OwogICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlZCIsIHJlZ2lzdGVyTmFtZShyMCku
ZGF0YSgpLCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwgcmVzb2x2ZU1vZGVB
bmRUeXBlKTsKKyAgICAgICAgICAgICsraXQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOiB7CkBAIC0xNzUzLDYgKzE3NTQsOCBA
QCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBS
ZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKSwgc2NvcGUsIGlkZW50LCBHZXQsIHR5cGUpOwogICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zW2kgKyAzXS51Lm9wZXJhbmQgPSBvcC50eXBlOwogICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zW2kgKyA0XS51Lm9wZXJhbmQgPSBvcC5kZXB0aDsKKyAgICAgICAgICAgIGlmIChvcC5hY3Rp
dmF0aW9uKQorICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5hY3RpdmF0aW9u
LnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5hY3RpdmF0aW9uKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKQEAgLTE3NzAsNyArMTc3Myw5IEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpT
U2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBzY29w
ZSwgaWRlbnQsIEdldCwgbW9kZUFuZFR5cGUudHlwZSgpKTsKIAogICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9kZUFuZFR5cGUobW9kZUFuZFR5cGUu
bW9kZSgpLCBvcC50eXBlKS5vcGVyYW5kKCk7Ci0gICAgICAgICAgICBpZiAob3Auc3RydWN0dXJl
KQorICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyIHx8IG9wLnR5cGUgPT0gR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IG9wLndhdGNocG9pbnRTZXQ7CisgICAgICAgICAg
ICBlbHNlIGlmIChvcC5zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA1XS51LnN0cnVjdHVyZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJl
KTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ob3Aub3BlcmFuZCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE3ODMs
MTAgKzE3ODgsOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAg
ICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9i
YWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgc2NvcGUsIGlkZW50LCBQdXQsIG1vZGVBbmRUeXBlLnR5
cGUoKSk7CiAKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gUmVz
b2x2ZU1vZGVBbmRUeXBlKG1vZGVBbmRUeXBlLm1vZGUoKSwgb3AudHlwZSkub3BlcmFuZCgpOwot
ICAgICAgICAgICAgaWYgKG9wLnR5cGUgPT0gR2xvYmFsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICAgICAgICAgIEFTU0VSVCghb3Au
c3RydWN0dXJlKTsKKyAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50
eXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0Owot
ICAgICAgICAgICAgfSBlbHNlIGlmIChvcC5zdHJ1Y3R1cmUpCisgICAgICAgICAgICBlbHNlIGlm
IChvcC5zdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0
cnVjdHVyZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3Auc3RydWN0dXJlKTsKICAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ob3Aub3BlcmFuZCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTIxNzIsNiArMjE3Niwx
NSBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBMTEludCBnZXQgY2FsbGVlIHdpdGggZnVuY3Rp
b24gJXAuXG4iLCBjdXJJbnN0cnVjdGlvblsyXS51LmpzQ2VsbC5nZXQoKSk7CiAgICAgICAgICAg
ICAgICAgY3VySW5zdHJ1Y3Rpb25bMl0udS5qc0NlbGwuY2xlYXIoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZTogeworICAgICAgICAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8SlNBY3RpdmF0aW9uPiYgYWN0aXZhdGlvbiA9IGN1cklu
c3RydWN0aW9uWzVdLnUuYWN0aXZhdGlvbjsKKyAgICAgICAgICAgICAgICBpZiAoIWFjdGl2YXRp
b24gfHwgSGVhcDo6aXNNYXJrZWQoYWN0aXZhdGlvbi5nZXQoKSkpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBkZWFkIGFjdGl2YXRpb24gJXAu
XG4iLCBhY3RpdmF0aW9uLmdldCgpKTsKKyAgICAgICAgICAgICAgICBhY3RpdmF0aW9uLmNsZWFy
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
YXNlIG9wX2dldF9mcm9tX3Njb3BlOgogICAgICAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6
IHsKICAgICAgICAgICAgICAgICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUgPQpAQCAt
MjE4Miw3ICsyMTk1LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5
KAogICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlIHx8IEhlYXA6OmlzTWFya2VkKHN0cnVj
dHVyZS5nZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCJDbGVhcmluZyBMTEludCBzY29wZSBhY2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBzdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgc2Nv
cGUgYWNjZXNzIHdpdGggc3RydWN0dXJlICVwLlxuIiwgc3RydWN0dXJlLmdldCgpKTsKICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw3IEBAIHN0
cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgICAgIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIGFycmF5
QWxsb2NhdGlvblByb2ZpbGU7CiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBvYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZTsKICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNl
dDsKKyAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0FjdGl2YXRpb24+IGFjdGl2YXRpb247CiAg
ICAgICAgIHZvaWQqIHBvaW50ZXI7CiAgICAgICAgIGJvb2wqIHByZWRpY2F0ZVBvaW50ZXI7CiAg
ICAgfSB1OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2
aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
bWFjcm8ob3BfZ2V0X3BuYW1lcywgNikgXAogICAgIG1hY3JvKG9wX25leHRfcG5hbWUsIDcpIFwK
ICAgICBcCi0gICAgbWFjcm8ob3BfcmVzb2x2ZV9zY29wZSwgNSkgXAorICAgIG1hY3JvKG9wX3Jl
c29sdmVfc2NvcGUsIDYpIFwKICAgICBtYWNybyhvcF9nZXRfZnJvbV9zY29wZSwgOCkgLyogaGFz
IHZhbHVlIHByb2ZpbGluZyAqLyBcCiAgICAgbWFjcm8ob3BfcHV0X3RvX3Njb3BlLCA3KSBcCiAg
ICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5o
CShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0
Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDE5IEBAIHB1YmxpYzoKICAg
ICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBub3Rp
ZnlXcml0ZSgpCisgICAgeworICAgICAgICBpZiAoaXNGYXQoKSkgeworICAgICAgICAgICAgZmF0
KCktPm5vdGlmeVdyaXRlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGRlY29kZVN0YXRlKG1fZGF0YSkgPT0gQ2xlYXJXYXRjaHBvaW50KQorICAgICAgICAg
ICAgbV9kYXRhID0gZW5jb2RlU3RhdGUoSXNXYXRjaGVkKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9kYXRhID0gZW5jb2RlU3RhdGUoSXNJbnZhbGlkYXRlZCk7CisgICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgfQorICAgIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29u
c3QgdWludHB0cl90IElzVGhpbkZsYWcgICAgICAgID0gMTsKICAgICBzdGF0aWMgY29uc3QgdWlu
dHB0cl90IFN0YXRlTWFzayAgICAgICAgID0gNjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxMiw2ICsxMjEyLDggQEAgUmVz
b2x2ZVR5cGUgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlc29sdmVUeQogCiBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CisgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNj
ZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKwogICAgIEFTU0VSVCghbV9z
eW1ib2xUYWJsZSB8fCAhbV9zeW1ib2xUYWJsZS0+Y29udGFpbnMoaWRlbnRpZmllci5pbXBsKCkp
IHx8IHJlc29sdmVUeXBlKCkgPT0gRHluYW1pYyk7CiAKICAgICAvLyByZXNvbHZlX3Njb3BlIGRz
dCwgaWQsIFJlc29sdmVUeXBlLCBkZXB0aApAQCAtMTIyMCw2ICsxMjIyLDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbAogICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJl
c29sdmVUeXBlKCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKKyAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ1LDYg
KzExNDUsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgICAgICBtX2dyYXBoLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVP
cmlnaW4pLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwogICAgICAgICBtX3N0YXRlLnNldEhhdmVT
dHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBBY3Rp
dmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6CisgICAgICAgIGJyZWFrOwogICAgIAogICAgIGNh
c2UgQ3JlYXRlQXJndW1lbnRzOgogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Fy
Z3VtZW50cyk7CkBAIC0xMjUwLDEwICsxMjUzLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEdldENsb3N1cmVW
YXI6CisgICAgY2FzZSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyOgogICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBQdXRDbG9zdXJlVmFyOgorICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjoKICAgICAg
ICAgY2xvYmJlckNhcHR1cmVkVmFycyhub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkRGR0pJVENv
ZGUuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiSlNBY3RpdmF0aW9u
LmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0
cy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKQEAgLTE3OSw2ICsxODAsMTkgQEAgcHJp
dmF0ZToKIAogICAgIE5vZGUqIGdldFNjb3BlKGJvb2wgc2tpcFRvcCwgdW5zaWduZWQgc2tpcENv
dW50KTsKICAgICAKKyAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiB0cnlHZXRSZWdpc3Rl
cnMoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZS0+aGFzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24g
PQorICAgICAgICAgICAganNEeW5hbWljQ2FzdDxKU0FjdGl2YXRpb24qPihtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgaWYgKCFhY3RpdmF0aW9uKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGlmICghYWN0aXZhdGlvbi0+aXNUb3JuT2ZmKCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGFjdGl2YXRpb24tPnJlZ2lzdGVycygp
OworICAgIH0KKyAgICAKICAgICAvLyBQcmVwYXJlIHRvIHBhcnNlIGEgYmxvY2suCiAgICAgdm9p
ZCBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiAgICAgLy8gUGFyc2UgYSBzaW5nbGUgYmFzaWMgYmxv
Y2sgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgpAQCAtMzA0Niw5ICszMDYwLDE4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxDb25zdGFudChtX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihk
c3QpLCBnZXRTY29wZShtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bmVlZHNBY3RpdmF0
aW9uKCksIGRlcHRoKSk7CisgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICAgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0g
Y3VycmVudEluc3RydWN0aW9uWzVdLnUuYWN0aXZhdGlvbi5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoYWN0aXZhdGlvbgorICAgICAgICAgICAgICAgICAgICAmJiBhY3RpdmF0aW9uLT5zeW1i
b2xUYWJsZSgpLT5tX2FjdGl2YXRpb25BbGxvY2F0ZWRPbmNlLmlzU3RpbGxWYWxpZCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBv
aW50LCBPcEluZm8oYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKSkpOworICAgICAgICAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxDb25zdGFudChhY3RpdmF0aW9uKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksCisgICAgICAgICAgICAgICAgICAgIGdl
dFNjb3BlKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSwg
ZGVwdGgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzA2MywxNCArMzA4NiwyMCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBTdHJp
bmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CiAg
ICAgICAgICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IFJlc29sdmVNb2RlQW5kVHlwZShj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKS50eXBlKCk7CiAKLSAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSAw
OworICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludHMgPSAwOwogICAgICAgICAg
ICAgdWludHB0cl90IG9wZXJhbmQ7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5tX2xvY2spOwotICAgICAgICAgICAgICAgIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bls1XS51LnN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUg
PT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MpCisgICAgICAgICAgICAgICAgICAgIHdhdGNocG9pbnRzID0gY3VycmVudEluc3RydWN0
aW9uWzVdLnUud2F0Y2hwb2ludFNldDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5n
ZXQoKTsKICAgICAgICAgICAgICAgICBvcGVyYW5kID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGN1cnJlbnRJbnN0cnVjdGlvbls2XS51LnBvaW50ZXIpOwogICAgICAgICAgICAgfQogCisg
ICAgICAgICAgICBVTlVTRURfUEFSQU0od2F0Y2hwb2ludHMpOyAvLyBXZSB3aWxsIHVzZSB0aGlz
IGluIHRoZSBmdXR1cmUuIEZvciBub3cgd2Ugc2V0IGl0IGFzIGEgd2F5IG9mIGRvY3VtZW50aW5n
IHRoZSBmYWN0IHRoYXQgdGhhdCdzIHdoYXQgaW5kZXggNSBpcyBpbiBHbG9iYWxWYXIgbW9kZS4K
KwogICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24o
KTsKICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CiAKQEAgLTMxMDgsMTEgKzMxMzcs
MjIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFy
OgotICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAg
ICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAg
ICAgICAgICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSk7
CisgICAgICAgICAgICAgICAgaWYgKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZ2lzdGVy
cyA9IHRyeUdldFJlZ2lzdGVycyhzY29wZU5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIFNp
bmdsZXRvbkNsb3N1cmVWYXJEYXRhKiBkYXRhID0gJm1fZ3JhcGgubV9zaW5nbGV0b25DbG9zdXJl
VmFyRGF0YS5hbGxvYygpOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5yZWdpc3RlcnMgPSBy
ZWdpc3RlcnM7CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPm9wZXJhbmQgPSBvcGVyYW5kOwor
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIHNjb3BlTm9kZSk7CisgICAg
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoR2V0U2luZ2xldG9uQ2xvc3VyZVZhciwgT3BJbmZvKGRhdGEp
LCBPcEluZm8ocHJlZGljdGlvbikpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwK
ICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRDbG9zdXJlVmFyLCBPcEluZm8ob3Bl
cmFuZCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKEdldENsb3N1cmVSZWdpc3RlcnMsIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0Q2xvc3VyZVJlZ2lzdGVy
cywgc2NvcGVOb2RlKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMTcwLDYgKzMyMTAs
MTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgICAgIE5vZGUqIHNjb3BlTm9kZSA9IGdldChW
aXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKTsKKyAgICAgICAgICAgICAgICBpZiAoV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogcmVnaXN0ZXJzID0gdHJ5R2V0UmVnaXN0ZXJzKHNjb3BlTm9kZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgU2luZ2xldG9uQ2xvc3VyZVZhckRhdGEqIGRhdGEgPSAmbV9n
cmFwaC5tX3NpbmdsZXRvbkNsb3N1cmVWYXJEYXRhLmFsbG9jKCk7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGEtPnJlZ2lzdGVycyA9IHJlZ2lzdGVyczsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YS0+b3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0
U2luZ2xldG9uQ2xvc3VyZVZhciwgT3BJbmZvKGRhdGEpLCBzY29wZU5vZGUsIGdldChWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBOb2RlKiBzY29wZVJlZ2lzdGVycyA9IGFkZFRvR3Jh
cGgoR2V0Q2xvc3VyZVJlZ2lzdGVycywgc2NvcGVOb2RlKTsKICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFB1dENsb3N1cmVWYXIsIE9wSW5mbyhvcGVyYW5kKSwgc2NvcGVOb2RlLCBzY29wZVJl
Z2lzdGVycywgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDcgKzIyNyw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBzY29wZWRWYXJMb2FkRWxpbWluYXRp
b24oTm9kZSogcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAgTm9kZSogc2NvcGVk
VmFyTG9hZEVsaW1pbmF0aW9uKE5vZGUqIHJlZ2lzdGVycywgaW50IHZhck51bWJlcikKICAgICB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CiAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwpAQCAtMjQ0LDYgKzI0
NCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQz
KCkubm9kZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQgIT0gdmFyTnVtYmVy
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEt
PmlzQ2FwdHVyZWQoKQpAQCAtMjYwLDYgKzI2NSw0NCBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAgICAgCisgICAgTm9kZSogc2luZ2xldG9uU2NvcGVkVmFyTG9hZEVsaW1p
bmF0aW9uKFNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKiBkYXRhKQorICAgIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKKyAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0U2luZ2xldG9uQ2xvc3VyZVZhcjogeworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5yZWdpc3Rl
cnMgPT0gZGF0YS0+cmVnaXN0ZXJzCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnNpbmds
ZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQgPT0gZGF0YS0+b3BlcmFuZCkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9IAorICAgICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPnZhck51bWJlcigpICE9IGRhdGEtPm9wZXJhbmQpCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPnJlZ2lzdGVycyA9PSBkYXRh
LT5yZWdpc3RlcnMKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+c2luZ2xldG9uQ2xvc3Vy
ZVZhckRhdGEoKS0+b3BlcmFuZCA9PSBkYXRhLT5vcGVyYW5kKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+
aXNDYXB0dXJlZCgpCisgICAgICAgICAgICAgICAgICAgICYmIHZhcmlhYmxlQWNjZXNzRGF0YS0+
bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGRhdGEtPm9wZXJhbmQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5v
ZGUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICAKICAgICBib29sIGdsb2JhbFZhcldhdGNocG9pbnRFbGltaW5hdGlvbihX
cml0ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikKICAgICB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CkBAIC0zMTgsNyArMzYxLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGUqIHNj
b3BlZFZhclN0b3JlRWxpbWluYXRpb24oTm9kZSogc2NvcGUsIE5vZGUqIHJlZ2lzdGVycywgdW5z
aWduZWQgdmFyTnVtYmVyKQorICAgIE5vZGUqIHNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24oTm9k
ZSogc2NvcGUsIE5vZGUqIHJlZ2lzdGVycywgaW50IHZhck51bWJlcikKICAgICB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CiAgICAgICAgICAgICBO
b2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwpAQCAtMzMxLDYgKzM3NCwxMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJh
bmQgIT0gdmFyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogewogICAgICAgICAgICAgICAgIC8vIExldCdzIGJlIGNv
bnNlcnZhdGl2ZS4KICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyTnVtYmVyKCkgPT0gdmFy
TnVtYmVyKQpAQCAtMzM4LDcgKzM4NywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBH
ZXRMb2NhbDogeworICAgICAgICAgICAgY2FzZSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7Cisg
ICAgICAgICAgICAgICAgLy8gQ29uc2VydmF0aXZlLiBMZXQncyBiZSBpdC4KKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+b3BlcmFuZCA9PSB2YXJO
dW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBH
ZXRMb2NhbDoKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKQogICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2Fs
KCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPih2YXJOdW1iZXIpKQpAQCAtMzU1LDYg
KzQxMiw1NiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCisgICAg
Tm9kZSogc2luZ2xldG9uU2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbihTaW5nbGV0b25DbG9zdXJl
VmFyRGF0YSogZGF0YSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJ
bkJsb2NrOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBj
YXNlIFB1dENsb3N1cmVWYXI6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyTnVtYmVy
KCkgIT0gZGF0YS0+b3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIFB1dFNpbmdsZXRvbkNsb3N1cmVWYXI6IHsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+cmVnaXN0ZXJzID09IGRhdGEtPnJl
Z2lzdGVycworICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFy
RGF0YSgpLT5vcGVyYW5kID09IGRhdGEtPm9wZXJhbmQpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBub2RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOiB7CisgICAgICAgICAg
ICAgICAgLy8gTGV0J3MgYmUgY29uc2VydmF0aXZlLgorICAgICAgICAgICAgICAgIGlmIChub2Rl
LT52YXJOdW1iZXIoKSA9PSBkYXRhLT5vcGVyYW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0U2luZ2xldG9uQ2xvc3VyZVZhcjogeworICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5yZWdpc3RlcnMg
PT0gZGF0YS0+cmVnaXN0ZXJzCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnNpbmdsZXRv
bkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQgPT0gZGF0YS0+b3BlcmFuZCkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpCisgICAgICAgICAg
ICAgICAgICAgICYmIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBWaXJ0dWFsUmVnaXN0
ZXIoZGF0YS0+b3BlcmFuZCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1f
Z3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSB8fCBub2RlLT5jYW5FeGl0KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IAogICAgIE5vZGUqIGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKE5vZGUqIGNoaWxkMSwgTm9kZSog
Y2hpbGQyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7
IGktLTspIHsKQEAgLTg1MSwxMSArOTU4LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAg
ICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGUtPnZhck51
bWJlcigpKSA9PSBsb2NhbCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEdldFNp
bmdsZXRvbkNsb3N1cmVWYXI6CisgICAgICAgICAgICBjYXNlIFB1dFNpbmdsZXRvbkNsb3N1cmVW
YXI6CisgICAgICAgICAgICAgICAgaWYgKFZpcnR1YWxSZWdpc3Rlcihub2RlLT5zaW5nbGV0b25D
bG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGlmIChjYXJlQWJvdXRDbG9iYmVyaW5n
ICYmIG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2RlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CkBAIC05MDQsMTAgKzEwMTgsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKKyAgICAgICAg
ICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihub2RlLT52YXJOdW1iZXIoKSkgPT0gbG9jYWwpCiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5tYXlCZUFjY2Vzc2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0U2luZ2xldG9uQ2xv
c3VyZVZhcjoKKyAgICAgICAgICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjoKKyAgICAg
ICAgICAgICAgICBpZiAoVmlydHVhbFJlZ2lzdGVyKG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJE
YXRhKCktPm9wZXJhbmQpID09IGxvY2FsKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5
QmVBY2Nlc3NlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgICAgICAgICBjYXNlIFNraXBU
b3BTY29wZToKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpCkBAIC0xMjI5LDYgKzEzNTAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7Cisg
ICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBTdG9yZUVsaW1pbmF0aW9uKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoc2luZ2xldG9uU2NvcGVkVmFy
TG9hZEVsaW1pbmF0aW9uKG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBHbG9iYWxWYXJXYXRjaHBv
aW50OgogICAgICAgICAgICAgaWYgKGNzZU1vZGUgPT0gU3RvcmVFbGltaW5hdGlvbikKICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTEyNTYsNiArMTM4NCwxMyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIFB1dFNpbmdsZXRvbkNsb3N1
cmVWYXI6IHsKKyAgICAgICAgICAgIGlmIChjc2VNb2RlID09IE5vcm1hbENTRSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVsaW1pbmF0ZShzaW5nbGV0b25TY29wZWRWYXJT
dG9yZUVsaW1pbmF0aW9uKG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCkpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAg
ICAgICAgIGlmIChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCiAgICAgICAgICAgICAgICAg
YnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAko
cmV2aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxNCArMTQ1LDIwIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgCiAgICAgY2FzZSBOb3RpZnlQdXRH
bG9iYWxWYXI6CiAgICAgICAgIHdyaXRlKFdhdGNocG9pbnRfZmlyZSk7CisgICAgICAgIHdyaXRl
KFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlv
bjoKICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsK
KyAgICAgICAgd3JpdGUoV2F0Y2hwb2ludF9maXJlKTsKICAgICAgICAgcmVhZChHQ1N0YXRlKTsK
ICAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6CisgICAgICAgIHJlYWQoV2F0Y2hw
b2ludF9maXJlKTsKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlc2UgYXJlIGZvcndhcmQt
ZXhpdGluZyBub2RlcyB0aGF0IGFzc3VtZSB0aGF0IHRoZSBzdWJzZXF1ZW50IGluc3RydWN0aW9u
CiAgICAgLy8gaXMgYSBNb3ZIaW50LCBhbmQgdGhleSB0cnkgdG8gcm9sbCBmb3J3YXJkIG92ZXIg
dGhpcyBNb3ZIaW50IGluIHRoZWlyCkBAIC01MTUsMTAgKzUyMSwxOCBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZh
cmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
KyAgICBjYXNlIEdldFNpbmdsZXRvbkNsb3N1cmVWYXI6CisgICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKFZhcmlhYmxlcywgbm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+b3BlcmFuZCkp
OworICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+dmFyTnVtYmVyKCkpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIFB1dFNpbmdsZXRvbkNsb3N1cmVW
YXI6CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnNpbmdsZXRv
bkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
ICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICBjYXNlIEdsb2JhbFZhcldhdGNocG9pbnQ6CiAg
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIo
KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjcsNyArNzY3LDggQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CiAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAg
Y2FzZSBHZXRTY29wZTogeworICAgICAgICBjYXNlIEdldFNjb3BlOgorICAgICAgICBjYXNlIFB1
dFNpbmdsZXRvbkNsb3N1cmVWYXI6IHsKICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNl
Pihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtOTAx
LDYgKzkwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKICAg
ICAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CisgICAg
ICAgIGNhc2UgR2V0U2luZ2xldG9uQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBHZXRHbG9iYWxW
YXI6CiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgogICAgICAgICBjYXNlIE5vdGlmeVB1dEds
b2JhbFZhcjoKQEAgLTkzOSw2ICs5NDEsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFVucmVh
Y2hhYmxlOgogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgICAgICBjYXNl
IExvb3BIaW50OgorICAgICAgICBjYXNlIEFjdGl2YXRpb25BbGxvY2F0aW9uV2F0Y2hwb2ludDoK
ICAgICAgICAgICAgIGJyZWFrOwogI2Vsc2UKICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE1OTczNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtODEwLDYgKzgx
MCw3IEBAIHB1YmxpYzoKICAgICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEsIDg+IG1fc3RydWN0dXJlVHJhbnNpdGlvbkRhdGE7CiAgICAgU2VnbWVudGVkVmVjdG9yPE5l
d0FycmF5QnVmZmVyRGF0YSwgND4gbV9uZXdBcnJheUJ1ZmZlckRhdGE7CiAgICAgU2VnbWVudGVk
VmVjdG9yPFN3aXRjaERhdGEsIDQ+IG1fc3dpdGNoRGF0YTsKKyAgICBTZWdtZW50ZWRWZWN0b3I8
U2luZ2xldG9uQ2xvc3VyZVZhckRhdGEsIDQ+IG1fc2luZ2xldG9uQ2xvc3VyZVZhckRhdGE7CiAg
ICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAg
ICAgT3duUHRyPElubGluZUNhbGxGcmFtZVNldD4gbV9pbmxpbmVDYWxsRnJhbWVzOwogICAgIEhh
c2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4g
bV9ieXRlY29kZUxpdmVuZXNzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHJldmlzaW9uIDE1OTczNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNiArMTM5LDExIEBAIHN0cnVjdCBTd2l0Y2hEYXRhIHsK
ICAgICBib29sIGRpZFVzZUp1bXBUYWJsZTsKIH07CiAKK3N0cnVjdCBTaW5nbGV0b25DbG9zdXJl
VmFyRGF0YSB7CisgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogcmVnaXN0ZXJzOworICAg
IGludCBvcGVyYW5kOworfTsKKwogLy8gVGhpcyB0eXBlIHVzZWQgaW4gcGFzc2luZyBhbiBpbW1l
ZGlhdGUgYXJndW1lbnQgdG8gTm9kZSBjb25zdHJ1Y3RvcjsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4g
aW1tZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkgYW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRh
IHN0cnVjdHVyZSAtIAogLy8gYSBjb25zdGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZp
ZXIpIGZyb20gYSBOb2RlKi4KQEAgLTc0Miw3ICs3NDcsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIHJldHVybiBvcCgpID09IEdldENsb3N1cmVWYXIgfHwgb3AoKSA9PSBQdXRDbG9zdXJlVmFy
OwogICAgIH0KIAotICAgIHVuc2lnbmVkIHZhck51bWJlcigpCisgICAgaW50IHZhck51bWJlcigp
CiAgICAgewogICAgICAgICBBU1NFUlQoaGFzVmFyTnVtYmVyKCkpOwogICAgICAgICByZXR1cm4g
bV9vcEluZm87CkBAIC03NjgsNiArNzczLDE2IEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4obV9vcEluZm8p
OwogICAgIH0KKyAgICAKKyAgICBib29sIGhhc1NpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBvcCgpID09IEdldFNpbmdsZXRvbkNsb3N1cmVWYXIgfHwgb3Ao
KSA9PSBQdXRTaW5nbGV0b25DbG9zdXJlVmFyOworICAgIH0KKyAgICAKKyAgICBTaW5nbGV0b25D
bG9zdXJlVmFyRGF0YSogc2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxTaW5nbGV0b25DbG9zdXJlVmFyRGF0YSo+KG1fb3BJbmZvKTsK
KyAgICB9CiAKICAgICBib29sIGhhc1Jlc3VsdCgpCiAgICAgewpAQCAtOTIxLDYgKzkzNiw3IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgR2V0
QnlPZmZzZXQ6CiAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBHZXRT
aW5nbGV0b25DbG9zdXJlVmFyOgogICAgICAgICBjYXNlIEFycmF5UG9wOgogICAgICAgICBjYXNl
IEFycmF5UHVzaDoKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgpAQCAtMTA2Miw2ICsxMDc4LDE3
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvOwogICAgIH0KICAgICAK
KyAgICBib29sIGhhc1N5bWJvbFRhYmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCgpID09
IEFjdGl2YXRpb25BbGxvY2F0aW9uV2F0Y2hwb2ludDsKKyAgICB9CisgICAgCisgICAgU3ltYm9s
VGFibGUqIHN5bWJvbFRhYmxlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTeW1ib2xUYWJs
ZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3ltYm9sVGFibGUqPihtX29w
SW5mbyk7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzQXJyYXlNb2RlKCkKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAob3AoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsMTEgKzE4MiwxNCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0Q2xvc3VyZVJlZ2lzdGVycywg
Tm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhHZXRDbG9zdXJlVmFyLCBOb2RlUmVzdWx0
SlMpIFwKICAgICBtYWNybyhQdXRDbG9zdXJlVmFyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oR2V0U2luZ2xldG9uQ2xvc3VyZVZhciwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8o
UHV0U2luZ2xldG9uQ2xvc3VyZVZhciwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdl
dEdsb2JhbFZhciwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUHV0R2xvYmFsVmFyLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTm90aWZ5UHV0R2xvYmFsVmFyLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oR2xvYmFsVmFyV2F0Y2hwb2ludCwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKFZhckluamVjdGlvbldhdGNocG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUp
IFwKKyAgICBtYWNybyhBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhDaGVja0Z1bmN0aW9uLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1OTczNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDggQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBHZXRHbG9i
YWxWYXI6Ci0gICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjogeworICAgICAgICBjYXNlIEdldENs
b3N1cmVWYXI6CisgICAgICAgIGNhc2UgR2V0U2luZ2xldG9uQ2xvc3VyZVZhcjogewogICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU1Myw2ICs1NTQsNyBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgICAgICBjYXNlIFB1dEJ5VmFs
OgogICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CisgICAgICAgIGNhc2UgUHV0U2luZ2xldG9u
Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIGNhc2UgVGhyb3c6CiAg
ICAgICAgIGNhc2UgUHV0QnlJZDoKQEAgLTU4Myw2ICs1ODUsNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIFVucmVhY2hhYmxlOgogICAgICAgICBjYXNlIExvb3BIaW50OgogICAgICAgICBjYXNl
IE5vdGlmeVB1dEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldh
dGNocG9pbnQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAvLyBU
aGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IGFscmVhZHkgaGFzIGEgcHJlZGljdGlvbi4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZp
c2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2OSw5IEBAIGJvb2wgc2FmZVRvRXhlY3V0
ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIFNraXBTY29wZToKICAgICBjYXNlIEdl
dENsb3N1cmVSZWdpc3RlcnM6CiAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgorICAgIGNhc2UgR2V0
U2luZ2xldG9uQ2xvc3VyZVZhcjoKICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CisgICAgY2FzZSBQ
dXRTaW5nbGV0b25DbG9zdXJlVmFyOgogICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAgIGNhc2Ug
UHV0R2xvYmFsVmFyOgogICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKQEAgLTI0Myw2ICsy
NDUsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2Fz
ZSBJbnQ1MlRvVmFsdWU6CiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICBjYXNlIE5v
dGlmeVB1dEdsb2JhbFZhcjoKKyAgICBjYXNlIEFjdGl2YXRpb25BbGxvY2F0aW9uV2F0Y2hwb2lu
dDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHJldmlzaW9uIDE1OTczNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MDcsNiAr
MzcwNywxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgR2V0U2luZ2xldG9uQ2xvc3VyZVZhcjog
eworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9
IHJlc3VsdFRhZy5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1
bHRQYXlsb2FkLmdwcigpOworICAgICAgICBtX2ppdC5sb2FkMzIoJmJpdHdpc2VfY2FzdDxFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yKj4obm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+cmVn
aXN0ZXJzICsgbm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+b3BlcmFuZCktPmFzQml0
cy50YWcsIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIG1faml0LmxvYWQzMigmYml0d2lzZV9jYXN0
PEVuY29kZWRWYWx1ZURlc2NyaXB0b3IqPihub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgp
LT5yZWdpc3RlcnMgKyBub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kKS0+
YXNCaXRzLnBheWxvYWQsIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KICAgICBjYXNlIFB1dENsb3N1cmVWYXI6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTdG9yYWdlT3BlcmFu
ZCByZWdpc3RlcnModGhpcywgbm9kZS0+Y2hpbGQyKCkpOwpAQCAtMzcyMCw2ICszNzMwLDIxIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgICAgICBtX2pp
dC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIs
IG5vZGUtPnZhck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSkpOwogICAgICAgICBtX2ppdC5zdG9y
ZTMyKHZhbHVlUGF5bG9hZEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBu
b2RlLT52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHdyaXRlQmFy
cmllcihzY29wZUdQUiwgdmFsdWVUYWdHUFIsIG5vZGUtPmNoaWxkMygpLCBXcml0ZUJhcnJpZXJG
b3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaEdQUik7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7
CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaFJlZ2lzdGVyKHRoaXMpOworICAgICAgICBHUFJS
ZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0g
dmFsdWUudGFnR1BSKCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5w
YXlsb2FkR1BSKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaFJlZ2lzdGVy
LmdwcigpOworCisgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdHUFIsICZiaXR3aXNlX2Nh
c3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRh
KCktPnJlZ2lzdGVycyArIG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQp
LT5hc0JpdHMudGFnKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRHUFIsICZi
aXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVlRGVzY3JpcHRvcio+KG5vZGUtPnNpbmdsZXRvbkNsb3N1
cmVWYXJEYXRhKCktPnJlZ2lzdGVycyArIG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCkt
Pm9wZXJhbmQpLT5hc0JpdHMucGF5bG9hZCk7CiAgICAgICAgIHdyaXRlQmFycmllcihzY29wZUdQ
UiwgdmFsdWVUYWdHUFIsIG5vZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFj
Y2Vzcywgc2NyYXRjaEdQUik7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVh
azsKQEAgLTQzMTQsNiArNDMzOSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBBY3Rp
dmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6IHsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6
IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCB2YWx1ZSwgUGF5bG9hZFdv
cmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDA5LDYgKzQw
MDksMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
KyAgICBjYXNlIEdldFNpbmdsZXRvbkNsb3N1cmVWYXI6IHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgbV9qaXQubG9hZDY0KG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPnJl
Z2lzdGVycyArIG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQsIHJlc3Vs
dEdQUik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogewogICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHJlZ2lzdGVycyh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC00MDI1LDYgKzQw
MzIsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgUHV0U2lu
Z2xldG9uQ2xvc3VyZVZhcjogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hSZWdpc3Rlcih0
aGlzKTsKKworICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaFJlZ2lzdGVyLmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmU2
NCh2YWx1ZUdQUiwgbm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+cmVnaXN0ZXJzICsg
bm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+b3BlcmFuZCk7CisgICAgICAgIHdyaXRl
QmFycmllcihzY29wZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJG
b3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaEdQUik7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBHZXRCeUlkOiB7CiAgICAgICAgIEFTU0VS
VChub2RlLT5wcmVkaWN0aW9uKCkpOwogCkBAIC00NTk1LDYgKzQ2MTYsMTEgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAorICAgIGNhc2UgQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50OiB7CisgICAg
ICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAg
IGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBS
ZXVzZSwgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBv
aW50Q29sbGVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTk3MzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDEwIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBhZGRMYXppbHkoZ2xvYmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQo
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFjdGl2
YXRpb25BbGxvY2F0aW9uV2F0Y2hwb2ludDoKKyAgICAgICAgICAgIGFkZExhemlseShtX25vZGUt
PnN5bWJvbFRhYmxlKCktPm1fYWN0aXZhdGlvbkFsbG9jYXRlZE9uY2UpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBA
QCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBDaGVj
a0Z1bmN0aW9uOgogICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKICAgICBjYXNlIEFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2UgQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50
OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0
QnlJZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAwLDYgKzQwMCw4IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2F0Y2hwb2ludDoKICAgICAgICAgICAg
IGNvbXBpbGVHbG9iYWxWYXJXYXRjaHBvaW50KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgogICAgICAgICAgICAgY29tcGlsZUdldE15U2Nv
cGUoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDEyLDkgKzQxNCwxNSBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgICAgICAgICBjb21waWxlR2V0Q2xvc3Vy
ZVZhcigpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0U2luZ2xldG9uQ2xv
c3VyZVZhcjoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRTaW5nbGV0b25DbG9zdXJlVmFyKCk7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgICAgICAg
ICAgY29tcGlsZVB1dENsb3N1cmVWYXIoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFB1dFNpbmdsZXRvbkNsb3N1cmVWYXI6CisgICAgICAgICAgICBjb21waWxlUHV0Q2xvc3Vy
ZVZhcigpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29tcGFyZUVxOgogICAg
ICAgICAgICAgY29tcGlsZUNvbXBhcmVFcSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTk5
LDYgKzIyMDcsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFkZHJlc3NGb3IobG93U3RvcmFn
ZShtX25vZGUtPmNoaWxkMSgpKSwgbV9ub2RlLT52YXJOdW1iZXIoKSkpKTsKICAgICB9CiAgICAg
CisgICAgdm9pZCBjb21waWxlR2V0U2luZ2xldG9uQ2xvc3VyZVZhcigpCisgICAgeworICAgICAg
ICBTaW5nbGV0b25DbG9zdXJlVmFyRGF0YSogZGF0YSA9IG1fbm9kZS0+c2luZ2xldG9uQ2xvc3Vy
ZVZhckRhdGEoKTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoCisgICAgICAgICAg
ICBhZGRyZXNzRm9yKG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPnJlZ2lzdGVycyksIGRhdGEtPm9w
ZXJhbmQpKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29tcGlsZVB1dENsb3N1cmVWYXIoKQog
ICAgIHsKICAgICAgICAgbV9vdXQuc3RvcmU2NCgKQEAgLTIyMDYsNiArMjIyMSwxNCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgYWRkcmVzc0Zvcihsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQyKCkp
LCBtX25vZGUtPnZhck51bWJlcigpKSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29tcGlsZVB1
dFNpbmdsZXRvbkNsb3N1cmVWYXIoKQorICAgIHsKKyAgICAgICAgU2luZ2xldG9uQ2xvc3VyZVZh
ckRhdGEqIGRhdGEgPSBtX25vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCk7CisgICAgICAg
IG1fb3V0LnN0b3JlNjQoCisgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkp
LAorICAgICAgICAgICAgYWRkcmVzc0ZvcihtX291dC5jb25zdEludFB0cihkYXRhLT5yZWdpc3Rl
cnMpLCBkYXRhLT5vcGVyYW5kKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29tcGlsZUNvbXBh
cmVFcSgpCiAgICAgewogICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJV
c2UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTIwMDYsMzkgKzIwMDYsMzkgQEAgX2xsaW50X29wX3Jlc29sdmVfc2NvcGU6CiAj
ckdsb2JhbFByb3BlcnR5OgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLnJHbG9iYWxW
YXIKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3BhdGNo
KDYpCiAKIC5yR2xvYmFsVmFyOgogICAgIGJpbmVxIHQwLCBHbG9iYWxWYXIsIC5yQ2xvc3VyZVZh
cgogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2go
NikKIAogLnJDbG9zdXJlVmFyOgogICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyLCAuckdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHJlc29sdmVTY29wZSgpCi0gICAgZGlz
cGF0Y2goNSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzLCAuckdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICB2YXJJbmplY3Rp
b25DaGVjayguckR5bmFtaWMpCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2go
NSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CiAgICAgYmluZXEgdDAsIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5yQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFt
aWMpCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNSkKKyAgICBkaXNwYXRj
aCg2KQogCiAuckNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQw
LCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJEeW5hbWljCiAgICAgdmFySW5q
ZWN0aW9uQ2hlY2soLnJEeW5hbWljKQogICAgIHJlc29sdmVTY29wZSgpCi0gICAgZGlzcGF0Y2go
NSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckR5bmFtaWM6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGlu
dF9zbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3BhdGNo
KDYpCiAKIAogbWFjcm8gbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhvcGVyYW5kLCBzbG93UGF0aCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTgz
MSwzOSArMTgzMSwzOSBAQCBfbGxpbnRfb3BfcmVzb2x2ZV9zY29wZToKICNyR2xvYmFsUHJvcGVy
dHk6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAuckdsb2JhbFZhcgogICAgIGdldEds
b2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2goNikKIAogLnJHbG9i
YWxWYXI6CiAgICAgYmluZXEgdDAsIEdsb2JhbFZhciwgLnJDbG9zdXJlVmFyCiAgICAgZ2V0R2xv
YmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckNsb3N1
cmVWYXI6CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXIsIC5yR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzCiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBkaXNwYXRjaCg1KQorICAg
IGRpc3BhdGNoKDYpCiAKIC5yR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgog
ICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5yR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHlu
YW1pYykKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3Bh
dGNoKDYpCiAKIC5yR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0
MCwgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAgICBnZXRH
bG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckR5bmFtaWMKICAgICB2YXJJbmplY3Rpb25DaGVjaygu
ckR5bmFtaWMpCiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3Bh
dGNoKDYpCiAKIC5yRHluYW1pYzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9y
ZXNvbHZlX3Njb3BlKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2goNikKIAogCiBtYWNy
byBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKG9wZXJhbmQsIHNsb3dQYXRoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHJldmlzaW9uIDE1OTcz
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSlNBY3RpdmF0
aW9uKiBjcmVhdGUoVk0mIHZtLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUmVnaXN0ZXIqIHJlZ2lz
dGVycywgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgewogICAgICAgICBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUgPSBjb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7CisgICAgICAgIHN5bWJvbFRh
YmxlLT5tX2FjdGl2YXRpb25BbGxvY2F0ZWRPbmNlLm5vdGlmeVdyaXRlKCk7CiAgICAgICAgIEpT
QWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IG5ldyAoCiAgICAgICAgICAgICBOb3ROdWxsLAogICAg
ICAgICAgICAgYWxsb2NhdGVDZWxsPEpTQWN0aXZhdGlvbj4oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDE5ICs1MywxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoRXhlY1N0CiAg
ICAgaWYgKEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNBY3RpdmF0
aW9uKj4oc2NvcGUpKSB7CiAgICAgICAgIGlmIChpZGVudCA9PSBleGVjLT5wcm9wZXJ0eU5hbWVz
KCkuYXJndW1lbnRzKSB7CiAgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBwcm9wZXJ0eSB3aWxs
IGJlIGF0IHRoaXMgYWN0aXZhdGlvbiBzY29wZSwgYnV0IHdlIGRvbid0IGtub3cgaG93IHRvIGNh
Y2hlIGl0LgotICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywgMCwgMCwgMCwgMCk7
CisgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChEeW5hbWljLCAwLCAwLCAwLCAwLCAwKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgU3ltYm9sVGFibGVF
bnRyeSBlbnRyeSA9IGFjdGl2YXRpb24tPnN5bWJvbFRhYmxlKCktPmdldChpZGVudC5pbXBsKCkp
OwogICAgICAgICBpZiAoZW50cnkuaXNSZWFkT25seSgpICYmIGdldE9yUHV0ID09IFB1dCkgewog
ICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCB0aGlzIGFjdGl2
YXRpb24gc2NvcGUsIGJ1dCB3ZSBkb24ndCBrbm93IGhvdyB0byBjYWNoZSBpdC4KLSAgICAgICAg
ICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDApOworICAgICAgICAgICAgb3Ag
PSBSZXNvbHZlT3AoRHluYW1pYywgMCwgMCwgMCwgMCwgMCk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAg
ICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKENsb3N1cmVWYXIsIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKSwgZGVwdGgsIGFjdGl2YXRpb24tPnN0cnVjdHVyZSgpLCAwLCBlbnRyeS5nZXRJ
bmRleCgpKTsKKyAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKENsb3N1cmVWYXIs
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIGFjdGl2YXRpb24sIDAsIGVudHJ5
LmdldEluZGV4KCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAt
NzksMTIgKzc5LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhFeGVjU3QK
ICAgICAgICAgaWYgKCFlbnRyeS5pc051bGwoKSkgewogICAgICAgICAgICAgaWYgKGdldE9yUHV0
ID09IFB1dCAmJiBlbnRyeS5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBr
bm93IHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGF0IGdsb2JhbCBzY29wZSwgYnV0IHdlIGRvbid0IGtu
b3cgaG93IHRvIGNhY2hlIGl0LgotICAgICAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKER5bmFt
aWMsIDAsIDAsIDAsIDApOworICAgICAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMs
IDAsIDAsIDAsIDAsIDApOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBvcCA9IFJlc29sdmVPcCgKLSAgICAgICAgICAgICAgICBtYWtl
VHlwZShHbG9iYWxWYXIsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIGVudHJ5
LndhdGNocG9pbnRTZXQoKSwKKyAgICAgICAgICAgICAgICBtYWtlVHlwZShHbG9iYWxWYXIsIG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIDAsIGVudHJ5LndhdGNocG9pbnRTZXQo
KSwKICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZ2xvYmFsT2Jq
ZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNsb3QoKSkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTk2LDE1ICs5NiwxNSBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgYWJzdHJhY3RBY2Nlc3MoRXhlY1N0CiAgICAgICAgICAgICB8fCAoZ2xvYmFsT2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+aGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRp
bmdQcm90bygpICYmIGdldE9yUHV0ID09IFB1dCkpIHsKICAgICAgICAgICAgIC8vIFdlIGtub3cg
dGhlIHByb3BlcnR5IHdpbGwgYmUgYXQgZ2xvYmFsIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25vdyBo
b3cgdG8gY2FjaGUgaXQuCiAgICAgICAgICAgICBBU1NFUlQoIXNjb3BlLT5uZXh0KCkpOwotICAg
ICAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoR2xvYmFsUHJvcGVydHksIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIDAsIDApOworICAgICAgICAgICAgb3AgPSBSZXNv
bHZlT3AobWFrZVR5cGUoR2xvYmFsUHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwg
ZGVwdGgsIDAsIDAsIDAsIDApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
IAotICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9wZXJ0eSwgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgMCwg
c2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKEds
b2JhbFByb3BlcnR5LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCBnbG9iYWxPYmpl
Y3QtPnN0cnVjdHVyZSgpLCAwLCAwLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywgMCwgMCwgMCwg
MCk7CisgICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywgMCwgMCwgMCwgMCwgMCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTE0Miw3ICsxNDIsNyBAQCBKU1ZhbHVlIEpTU2NvcGU6OnJlc29s
dmUoRXhlY1N0YXRlKiBleGVjCiAKIFJlc29sdmVPcCBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUo
RXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IEdldE9yUHV0IGdldE9yUHV0LCBSZXNvbHZlVHlwZSB1bmxpbmtlZFR5cGUpCiB7Ci0gICAgUmVz
b2x2ZU9wIG9wKER5bmFtaWMsIDAsIDAsIDAsIDApOworICAgIFJlc29sdmVPcCBvcChEeW5hbWlj
LCAwLCAwLCAwLCAwLCAwKTsKICAgICBpZiAodW5saW5rZWRUeXBlID09IER5bmFtaWMpCiAgICAg
ICAgIHJldHVybiBvcDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
Y29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Nv
cGUuaAkocmV2aXNpb24gMTU5NzM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMCArOTYsMTEgQEAgaW5saW5lIGJvb2wg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MoUmVzbwogfQogCiBzdHJ1Y3QgUmVzb2x2ZU9wIHsKLSAg
ICBSZXNvbHZlT3AoUmVzb2x2ZVR5cGUgdHlwZSwgc2l6ZV90IGRlcHRoLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCwgdWludHB0cl90IG9wZXJhbmQp
CisgICAgUmVzb2x2ZU9wKFJlc29sdmVUeXBlIHR5cGUsIHNpemVfdCBkZXB0aCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiwgV2F0Y2hwb2ludFNldCogd2F0
Y2hwb2ludFNldCwgdWludHB0cl90IG9wZXJhbmQpCiAgICAgICAgIDogdHlwZSh0eXBlKQogICAg
ICAgICAsIGRlcHRoKGRlcHRoKQogICAgICAgICAsIHN0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAg
ICAgICwgYWN0aXZhdGlvbihhY3RpdmF0aW9uKQogICAgICAgICAsIHdhdGNocG9pbnRTZXQod2F0
Y2hwb2ludFNldCkKICAgICAgICAgLCBvcGVyYW5kKG9wZXJhbmQpCiAgICAgewpAQCAtMTA4LDYg
KzEwOSw3IEBAIHN0cnVjdCBSZXNvbHZlT3AgewogICAgIFJlc29sdmVUeXBlIHR5cGU7CiAgICAg
c2l6ZV90IGRlcHRoOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOworICAgIEpTQWN0aXZhdGlv
biogYWN0aXZhdGlvbjsKICAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0OwogICAgIHVp
bnRwdHJfdCBvcGVyYW5kOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE1OTczNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsNiArNDYsNyBAQCBjbGFzcyBKU1ZhcmlhYmxlT2JqZWN0IDogcHVibGljIEpTU3ltYm9s
CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0IEJhc2U7CiAKKyAgICBX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWdpc3RlcnMoKSB7IHJldHVybiBtX3JlZ2lzdGVy
czsgfQogICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIHJlZ2lzdGVyQXQoaW50IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVyc1tpbmRleF07IH0KIAogICAgIFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4qIGNvbnN0ICogYWRkcmVzc09mUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1
cm4gJm1fcmVnaXN0ZXJzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
eW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAxNTk3MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsx
MDQsNyBAQCBTeW1ib2xUYWJsZTo6U3ltYm9sVGFibGUoVk0mIHZtKQogICAgICwgbV91c2VzTm9u
U3RyaWN0RXZhbChmYWxzZSkKICAgICAsIG1fY2FwdHVyZVN0YXJ0KDApCiAgICAgLCBtX2NhcHR1
cmVFbmQoMCkKKyAgICAsIG1fYWN0aXZhdGlvbkFsbG9jYXRlZE9uY2UoQ2xlYXJXYXRjaHBvaW50
KQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmgJKHJldmlzaW9uIDE1OTczNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2NSw3ICs0NjUsNyBAQCBwdWJsaWM6
CiAgICAgLy8gMCBpZiB3ZSBkb24ndCBjYXB0dXJlIGFueSBhcmd1bWVudHM7IHBhcmFtZXRlckNv
dW50KCkgaW4gbGVuZ3RoIGlmIHdlIGRvLgogICAgIGNvbnN0IFNsb3dBcmd1bWVudCogc2xvd0Fy
Z3VtZW50cygpIHsgcmV0dXJuIG1fc2xvd0FyZ3VtZW50cy5nZXQoKTsgfQogICAgIHZvaWQgc2V0
U2xvd0FyZ3VtZW50cyhzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IHNsb3dBcmd1bWVu
dHMpIHsgbV9zbG93QXJndW1lbnRzID0gc3RkOjptb3ZlKHNsb3dBcmd1bWVudHMpOyB9Ci0KKyAg
ICAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgpAQCAtNDgxLDggKzQ4MSwx
MCBAQCBwcml2YXRlOgogICAgIGludCBtX2NhcHR1cmVFbmQ7CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2xvd0FyZ3VtZW50W10+IG1fc2xvd0FyZ3VtZW50czsKLQorICAgIAogcHVibGljOgorICAg
IElubGluZVdhdGNocG9pbnRTZXQgbV9hY3RpdmF0aW9uQWxsb2NhdGVkT25jZTsKKyAgICAKICAg
ICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKIH07CiAKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE1OTczOCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIwIEBACisyMDEzLTExLTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CisKKyAgICAgICAgSW5mZXIgb25lLXRpbWUgc2NvcGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4MTIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xv
c3VyZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItb25l
LXRpbWUtY2xvc3VyZS10ZW4tdmFycy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1
cmUtdHdvLXZhcnMuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1vbmUt
dGltZS1jbG9zdXJlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMuanM6IEFkZGVkLgorICAgICAgICAq
IGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMu
anM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9uZS10
aW1lLWNsb3N1cmUuanM6IEFkZGVkLgorCiAyMDEzLTExLTI0ICBKaW53b28gU29uZyAgPGppbndv
bzcuc29uZ0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEVGTCBnYXJkZW5pbmcu
IFJlYmFzZWxpbmluZyBhZnRlciByMTU5NTc5LgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9z
dXJlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jl
c3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZl
ci1vbmUtdGltZS1jbG9zdXJlLXRlbi12YXJzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1v
bmUtdGltZS1jbG9zdXJlLXRlbi12YXJzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycwor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3du
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXRlbi12YXJz
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGlt
ZS1jbG9zdXJlLXRlbi12YXJzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXRlbi12YXJzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3Vy
ZS10d28tdmFycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXR3by12YXJzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10
d28tdmFycy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNS
ZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10d28tdmFycy5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10d28tdmFy
cy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUt
dGltZS1jbG9zdXJlLXR3by12YXJzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3Mt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItb25lLXRp
bWUtY2xvc3VyZS10d28tdmFycy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xv
c3VyZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9zdXJl
LXRlbi12YXJzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDMxIEBACitmdW5jdGlvbiBmb29NYWtlcih4UGFyYW0pIHsKKyAgICB2YXIg
eCA9IHhQYXJhbTsKKyAgICB2YXIgeDIgPSB4UGFyYW0gKyAxOworICAgIHZhciB4MyA9IHhQYXJh
bSArIDI7CisgICAgdmFyIHg0ID0geFBhcmFtICsgMzsKKyAgICB2YXIgeDUgPSB4UGFyYW0gKyA0
OworICAgIHZhciB4NiA9IHhQYXJhbSArIDU7CisgICAgdmFyIHg3ID0geFBhcmFtICsgNjsKKyAg
ICB2YXIgeDggPSB4UGFyYW0gKyA3OworICAgIHZhciB4OSA9IHhQYXJhbSArIDg7CisgICAgdmFy
IHgxMCA9IHhQYXJhbSArIDk7CisgICAgcmV0dXJuIGZ1bmN0aW9uICh5KSB7CisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKQorICAgICAgICAgICAgeSArPSB4ICsgeDIgKyB4
MyArIHg0ICsgeDUgKyB4NiArIHg3ICsgeDggKyB4OSArIHgxMDsKKyAgICAgICAgcmV0dXJuIHk7
CisgICAgfQorfQorCit2YXIgZm9vID0gZm9vTWFrZXIoNDIpOworCitub0lubGluZShmb28pOwor
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9v
KDUpOworICAgIGlmIChyZXN1bHQgIT0gNDY1MDA1KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb29NYWtlcigyMykoNSk7
CitpZiAocmVzdWx0ICE9IDI3NTAwNSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIg
KyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZl
ci1vbmUtdGltZS1jbG9zdXJlLXR3by12YXJzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9p
bmZlci1vbmUtdGltZS1jbG9zdXJlLXR3by12YXJzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjMgQEAKK2Z1bmN0aW9uIGZvb01ha2VyKHhQYXJhbSkgeworICAgIHZhciB4ID0geFBhcmFt
OworICAgIHZhciB4MiA9IHhQYXJhbSArIDE7CisgICAgcmV0dXJuIGZ1bmN0aW9uICh5KSB7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKQorICAgICAgICAgICAgeSArPSB4
ICsgeDI7CisgICAgICAgIHJldHVybiB5OworICAgIH0KK30KKwordmFyIGZvbyA9IGZvb01ha2Vy
KDQyKTsKKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyg1KTsKKyAgICBpZiAocmVzdWx0ICE9ICg0MiArIDQz
KSAqIDEwMDAgKyA1KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1
bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb29NYWtlcigyMykoNSk7CitpZiAocmVzdWx0ICE9ICgy
MyArIDI0KSAqIDEwMDAgKyA1KQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJl
c3VsdDsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9u
ZS10aW1lLWNsb3N1cmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvaW5mZXItb25lLXRpbWUtY2xvc3VyZS5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMiBAQAorZnVuY3Rpb24gZm9vTWFrZXIoeFBh
cmFtKSB7CisgICAgdmFyIHggPSB4UGFyYW07CisgICAgcmV0dXJuIGZ1bmN0aW9uICh5KSB7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKQorICAgICAgICAgICAgeSArPSB4
OworICAgICAgICByZXR1cm4geTsKKyAgICB9Cit9CisKK3ZhciBmb28gPSBmb29NYWtlcig0Mik7
CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgIHZhciByZXN1bHQgPSBmb28oNSk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiAqIDEwMDAgKyA1
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3Zh
ciByZXN1bHQgPSBmb29NYWtlcigyMykoNSk7CitpZiAocmVzdWx0ICE9IDIzICogMTAwMCArIDUp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217974</attachid>
            <date>2013-11-27 19:10:07 -0800</date>
            <delta_ts>2013-11-27 21:50:52 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>61774</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5ODI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBA
CisyMDEzLTExLTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5mZXIgb25lLXRpbWUgc2NvcGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjQ4MTIKKworICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgZGV0ZWN0cyBKU0FjdGl2YXRpb25zIHRoYXQgYXJlIGNy
ZWF0ZWQgb25seSBvbmNlLiBUaGUgSlNBY3RpdmF0aW9uIHBvaW50ZXIgaXMgdGhlbgorICAgICAg
ICBiYWtlZCBpbnRvIHRoZSBtYWNoaW5lIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIHRh
a2VzIGFkdmFudGFnZSBvZiB0aGUgb25lLXRpbWUgc2NvcGUgaW5mZXJlbmNlIHRvIHJlZHVjZSB0
aGUgbnVtYmVyIG9mCisgICAgICAgIGluZGlyZWN0aW9ucyBuZWVkZWQgdG8gZ2V0IHRvIGEgY2xv
c3VyZSB2YXJpYWJsZSBpbiBjYXNlIHdoZXJlIHRoZSBzY29wZSBpcyBvbmx5CisgICAgICAgIGFs
bG9jYXRlZCBvbmNlLiBUaGlzIGlzbid0IHJlYWxseSBhIHNwZWVkLXVwIHNpbmNlIGluIHRoZSBj
b21tb24gY2FzZSB0aGUgdG90YWwgbnVtYmVyCisgICAgICAgIG9mIGluc3RydWN0aW9uIGJ5dGVz
IG5lZWRlZCB0byBsb2FkIHRoZSBzY29wZSBmcm9tIHRoZSBzdGFjayBpcyBhYm91dCBlcXVhbCB0
byB0aGUKKyAgICAgICAgbnVtYmVyIG9mIGluc3RydWN0aW9uIGJ5dGVzIG5lZWRlZCB0byBtYXRl
cmlhbGl6ZSB0aGUgYWJzb2x1dGUgYWRkcmVzcyBvZiBhIHNjb3BlZAorICAgICAgICB2YXJpYWJs
ZS4gQnV0LCB0aGlzIGlzIGEgbmVjZXNzYXJ5IHByZXJlcXVpc2l0ZSB0bworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0NjMwLCBzbyBpdCdzIHByb2Jh
Ymx5IGEgZ29vZCBpZGVhIGFueXdheS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgor
ICAgICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOgorICAgICAgICAoSlNDOjpwYWRPcGNvZGVOYW1l
KToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50Lmg6CisgICAgICAgIChKU0M6OklubGlu
ZVdhdGNocG9pbnRTZXQ6Om5vdGlmeVdyaXRlKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFJlc29sdmVTY29wZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6dHJ5R2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6c2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6c2luZ2xldG9uU2NvcGVkVmFyTG9hZEVsaW1pbmF0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6c2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnNpbmdsZXRvblNjb3BlZFZhclN0b3JlRWxp
bWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRMb2NhbExvYWRFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnNldExvY2FsU3RvcmVFbGlt
aW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToK
KyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2Ji
ZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgor
ICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFyTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTaW5nbGV0b25DbG9zdXJlVmFyRGF0
YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNTeW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
c3ltYm9sVGFibGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OmhhbmRsZSk6CisgICAgICAg
ICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGls
ZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjpjb21waWxlR2V0U2luZ2xldG9uQ2xvc3VyZVZhcik6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVQdXRTaW5nbGV0b25DbG9zdXJlVmFyKToK
KyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9KU0Fj
dGl2YXRpb24uaDoKKyAgICAgICAgKEpTQzo6SlNBY3RpdmF0aW9uOjpjcmVhdGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmFic3RyYWN0QWNjZXNzKToK
KyAgICAgICAgKEpTQzo6SlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKToKKyAgICAgICAgKiBydW50
aW1lL0pTU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU9wOjpSZXNvbHZlT3ApOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1Zhcmlh
YmxlT2JqZWN0OjpyZWdpc3RlcnMpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3Bw
OgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6U3ltYm9sVGFibGUpOgorICAgICAgICAqIHJ1
bnRpbWUvU3ltYm9sVGFibGUuaDoKKwogMjAxMy0xMS0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIEZpbmFsbHkgZml4IHNvbWUgb2J2aW91cyBCYXJ0bGV0dCBi
dWdzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMTU5ODI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjUsNiArMTM2NSw3IEBAIHZvaWQgQ29k
ZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgICAgICsraXQ7IC8vIGRl
cHRoCiAgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJyZXNvbHZlX3Njb3BlIik7CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVk
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQwKSku
ZGF0YSgpLCByZXNvbHZlTW9kZUFuZFR5cGUpOworICAgICAgICAgICAgKytpdDsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6IHsK
QEAgLTE3NjQsNiArMTc2NSw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFi
bGUqIG8KICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2
ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBzY29wZSwgaWRlbnQsIEdldCwgdHlwZSk7
CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDNdLnUub3BlcmFuZCA9IG9wLnR5cGU7CiAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IG9wLmRlcHRoOworICAg
ICAgICAgICAgaWYgKG9wLmFjdGl2YXRpb24pCisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA1XS51LmFjdGl2YXRpb24uc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLmFjdGl2
YXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTc4MSw3ICsxNzg0
LDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAg
ICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0
LT5nbG9iYWxFeGVjKCksIHNjb3BlLCBpZGVudCwgR2V0LCBtb2RlQW5kVHlwZS50eXBlKCkpOwog
CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IFJlc29sdmVNb2Rl
QW5kVHlwZShtb2RlQW5kVHlwZS5tb2RlKCksIG9wLnR5cGUpLm9wZXJhbmQoKTsKLSAgICAgICAg
ICAgIGlmIChvcC5zdHJ1Y3R1cmUpCisgICAgICAgICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxW
YXIgfHwgb3AudHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hw
b2ludFNldDsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkKICAgICAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUuc3RydWN0dXJlLnNldCgqdm0oKSwgb3duZXJFeGVj
dXRhYmxlLCBvcC5zdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51
LnBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcC5vcGVyYW5kKTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTc5NCwxMCArMTc5OSw5IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFi
c3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBzY29wZSwgaWRlbnQs
IFB1dCwgbW9kZUFuZFR5cGUudHlwZSgpKTsKIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9kZUFuZFR5cGUobW9kZUFuZFR5cGUubW9kZSgpLCBv
cC50eXBlKS5vcGVyYW5kKCk7Ci0gICAgICAgICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIg
fHwgb3AudHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKCFvcC5zdHJ1Y3R1cmUpOworICAgICAgICAgICAgaWYgKG9wLnR5cGUg
PT0gR2xvYmFsVmFyIHx8IG9wLnR5cGUgPT0gR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykKICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9
IG9wLndhdGNocG9pbnRTZXQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkK
KyAgICAgICAgICAgIGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDVdLnUuc3RydWN0dXJlLnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBv
cC5zdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcC5vcGVyYW5kKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMjE4Myw2ICsyMTg3LDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IGdl
dCBjYWxsZWUgd2l0aCBmdW5jdGlvbiAlcC5cbiIsIGN1ckluc3RydWN0aW9uWzJdLnUuanNDZWxs
LmdldCgpKTsKICAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlvblsyXS51LmpzQ2VsbC5jbGVh
cigpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBvcF9yZXNvbHZl
X3Njb3BlOiB7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0FjdGl2YXRpb24+
JiBhY3RpdmF0aW9uID0gY3VySW5zdHJ1Y3Rpb25bNV0udS5hY3RpdmF0aW9uOworICAgICAgICAg
ICAgICAgIGlmICghYWN0aXZhdGlvbiB8fCBIZWFwOjppc01hcmtlZChhY3RpdmF0aW9uLmdldCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5n
IGRlYWQgYWN0aXZhdGlvbiAlcC5cbiIsIGFjdGl2YXRpb24uZ2V0KCkpOworICAgICAgICAgICAg
ICAgIGFjdGl2YXRpb24uY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CiAgICAgICAgICAgICBj
YXNlIG9wX3B1dF90b19zY29wZTogewogICAgICAgICAgICAgICAgIFJlc29sdmVNb2RlQW5kVHlw
ZSBtb2RlQW5kVHlwZSA9CkBAIC0yMTkzLDcgKzIyMDYsNyBAQCB2b2lkIENvZGVCbG9jazo6Zmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoCiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUgfHwg
SGVhcDo6aXNNYXJrZWQoc3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIExMSW50IHNjb3BlIGFjY2VzcyB3aXRoIHN0
cnVjdHVyZSAlcC5cbiIsIHN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dGKCJDbGVhcmluZyBzY29wZSBhY2Nlc3Mgd2l0aCBzdHJ1Y3R1cmUgJXAuXG4iLCBzdHJ1
Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgICAgIHN0cnVjdHVyZS5jbGVhcigpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTcsNiArMTE3LDcgQEAgc3RydWN0IEluc3RydWN0aW9uIHsKICAgICAgICAgQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSogYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKICAgICAgICAgT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUqIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwogICAgICAgICBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CisgICAgICAgIFdyaXRlQmFycmllckJhc2U8
SlNBY3RpdmF0aW9uPiBhY3RpdmF0aW9uOwogICAgICAgICB2b2lkKiBwb2ludGVyOwogICAgICAg
ICBib29sKiBwcmVkaWNhdGVQb2ludGVyOwogICAgIH0gdTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcgKzE2
OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3JvKG9wX2dldF9wbmFtZXMsIDYpIFwKICAg
ICBtYWNybyhvcF9uZXh0X3BuYW1lLCA3KSBcCiAgICAgXAotICAgIG1hY3JvKG9wX3Jlc29sdmVf
c2NvcGUsIDUpIFwKKyAgICBtYWNybyhvcF9yZXNvbHZlX3Njb3BlLCA2KSBcCiAgICAgbWFjcm8o
b3BfZ2V0X2Zyb21fc2NvcGUsIDgpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAogICAgIG1h
Y3JvKG9wX3B1dF90b19zY29wZSwgNykgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTU5ODI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA4LDYgKzEwOCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIGZpcmVBbGxTbG93KCk7CiAgICAgfQog
ICAgIAorICAgIHZvaWQgbm90aWZ5V3JpdGUoKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXRlKCkg
PT0gQ2xlYXJXYXRjaHBvaW50KQorICAgICAgICAgICAgc3RhcnRXYXRjaGluZygpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBmaXJlQWxsKCk7CisgICAgfQorCiAgICAgaW50OF90KiBhZGRy
ZXNzT2ZTdGF0ZSgpIHsgcmV0dXJuICZtX3N0YXRlOyB9CiAgICAgaW50OF90KiBhZGRyZXNzT2ZT
ZXRJc05vdEVtcHR5KCkgeyByZXR1cm4gJm1fc2V0SXNOb3RFbXB0eTsgfQogICAgIApAQCAtMjAx
LDYgKzIwOSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAg
ICAgfQogICAgIAorICAgIHZvaWQgbm90aWZ5V3JpdGUoKQorICAgIHsKKyAgICAgICAgaWYgKGlz
RmF0KCkpIHsKKyAgICAgICAgICAgIGZhdCgpLT5ub3RpZnlXcml0ZSgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChkZWNvZGVTdGF0ZShtX2RhdGEpID09IENs
ZWFyV2F0Y2hwb2ludCkKKyAgICAgICAgICAgIG1fZGF0YSA9IGVuY29kZVN0YXRlKElzV2F0Y2hl
ZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGF0YSA9IGVuY29kZVN0YXRlKElzSW52
YWxpZGF0ZWQpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIH0KKyAgICAK
IHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBJc1RoaW5GbGFnICAgICAgICA9
IDE7CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBTdGF0ZU1hc2sgICAgICAgICA9IDY7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTU5ODI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMTIsNiArMTIxMiw4IEBAIFJlc29sdmVUeXBlIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNv
bHZlVHkKIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbHZlU2NvcGUo
UmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogeworICAgIG1f
Y29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNp
emUoKSk7CisKICAgICBBU1NFUlQoIW1fc3ltYm9sVGFibGUgfHwgIW1fc3ltYm9sVGFibGUtPmNv
bnRhaW5zKGlkZW50aWZpZXIuaW1wbCgpKSB8fCByZXNvbHZlVHlwZSgpID09IER5bmFtaWMpOwog
CiAgICAgLy8gcmVzb2x2ZV9zY29wZSBkc3QsIGlkLCBSZXNvbHZlVHlwZSwgZGVwdGgKQEAgLTEy
MjAsNiArMTIyMiw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2wK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQoaWRlbnRpZmllcikpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChyZXNvbHZlVHlwZSgpKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoMCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgIHJldHVybiBk
c3Q7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE1OTgyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE0NSw2ICsxMTQ1LDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgbV9ncmFwaCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsK
ICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgIGNhc2UgQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50OgorICAg
ICAgICBicmVhazsKICAgICAKICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czoKICAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNBcmd1bWVudHMpOwpAQCAtMTI1MCwxMCArMTI1MywxMiBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgorICAgIGNhc2UgR2V0U2luZ2xldG9uQ2xvc3Vy
ZVZhcjoKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKKyAgICBjYXNlIFB1dFNp
bmdsZXRvbkNsb3N1cmVWYXI6CiAgICAgICAgIGNsb2JiZXJDYXB0dXJlZFZhcnMobm9kZS0+Y29k
ZU9yaWdpbik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTU5
ODI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJERkdDYXBhYmlsaXRp
ZXMuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5o
IgorI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgi
CkBAIC0xNzksNiArMTgwLDE5IEBAIHByaXZhdGU6CiAKICAgICBOb2RlKiBnZXRTY29wZShib29s
IHNraXBUb3AsIHVuc2lnbmVkIHNraXBDb3VudCk7CiAgICAgCisgICAgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogdHJ5R2V0UmVnaXN0ZXJzKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBp
ZiAoIW5vZGUtPmhhc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
SlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0KKyAgICAgICAgICAgIGpzRHluYW1pY0Nhc3Q8SlNB
Y3RpdmF0aW9uKj4obV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIGlm
ICghYWN0aXZhdGlvbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoIWFjdGl2
YXRpb24tPmlzVG9ybk9mZigpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBhY3RpdmF0aW9uLT5yZWdpc3RlcnMoKTsKKyAgICB9CisgICAgCiAgICAgLy8gUHJlcGFyZSB0
byBwYXJzZSBhIGJsb2NrLgogICAgIHZvaWQgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgIC8v
IFBhcnNlIGEgc2luZ2xlIGJhc2ljIGJsb2NrIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KQEAg
LTMwNDYsOSArMzA2MCwxOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3Rh
bnQobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgZ2V0U2NvcGUobV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2stPm5lZWRzQWN0aXZhdGlvbigpLCBkZXB0aCkpOworICAgICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgICAgIEpT
QWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LmFjdGl2YXRp
b24uZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYgKGFjdGl2YXRpb24KKyAgICAgICAgICAgICAg
ICAgICAgJiYgYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKS0+bV9hY3RpdmF0aW9uQWxsb2NhdGVk
T25jZS5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEFj
dGl2YXRpb25BbGxvY2F0aW9uV2F0Y2hwb2ludCwgT3BJbmZvKGFjdGl2YXRpb24tPnN5bWJvbFRh
YmxlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBj
ZWxsQ29uc3RhbnQoYWN0aXZhdGlvbikpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3Qp
LAorICAgICAgICAgICAgICAgICAgICBnZXRTY29wZShtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+bmVlZHNBY3RpdmF0aW9uKCksIGRlcHRoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIER5bmFtaWM6CiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTMwNjMsMTQgKzMwODYsMjAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVy
cygpW2lkZW50aWZpZXJOdW1iZXJdOwogICAgICAgICAgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCku
dHlwZSgpOwogCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gMDsKKyAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHdh
dGNocG9pbnRzID0gMDsKICAgICAgICAgICAgIHVpbnRwdHJfdCBvcGVyYW5kOwogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5zdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAg
ICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICAgICAgICAgICAgICB3YXRj
aHBvaW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQ7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNV0udS5zdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgb3BlcmFuZCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5wb2lu
dGVyKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgVU5VU0VEX1BBUkFNKHdhdGNocG9p
bnRzKTsgLy8gV2Ugd2lsbCB1c2UgdGhpcyBpbiB0aGUgZnV0dXJlLiBGb3Igbm93IHdlIHNldCBp
dCBhcyBhIHdheSBvZiBkb2N1bWVudGluZyB0aGUgZmFjdCB0aGF0IHRoYXQncyB3aGF0IGluZGV4
IDUgaXMgaW4gR2xvYmFsVmFyIG1vZGUuCisKICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpOwogCkBAIC0zMTAxLDcgKzMxMzAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0
KSwgYWRkVG9HcmFwaChHZXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKHByZWRp
Y3Rpb24pKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
LQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVX
YXRjaHBvaW50LCBPcEluZm8od2F0Y2hwb2ludFNldCkpOwogICAgICAgICAgICAgICAgIGlmIChz
cGVjaWZpY1ZhbHVlLmlzQ2VsbCgpKQogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGRzdCksIGNlbGxDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7CkBAIC0z
MTEwLDExICszMTM5LDIyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6CisgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CisgICAgICAgICAgICAgICAgTm9kZSogc2NvcGVOb2RlID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihzY29wZSkpOworICAgICAgICAgICAgICAgIGlmIChXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiByZWdpc3RlcnMgPSB0cnlHZXRSZWdpc3RlcnMoc2NvcGVOb2RlKSkgeworICAgICAgICAg
ICAgICAgICAgICBTaW5nbGV0b25DbG9zdXJlVmFyRGF0YSogZGF0YSA9ICZtX2dyYXBoLm1fc2lu
Z2xldG9uQ2xvc3VyZVZhckRhdGEuYWxsb2MoKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+
cmVnaXN0ZXJzID0gcmVnaXN0ZXJzOworICAgICAgICAgICAgICAgICAgICBkYXRhLT5vcGVyYW5k
ID0gb3BlcmFuZDsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBzY29w
ZU5vZGUpOworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksCisg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldFNpbmdsZXRvbkNsb3N1cmVWYXIs
IE9wSW5mbyhkYXRhKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGRzdCksCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0Q2xvc3VyZVZh
ciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbiksIAotICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChHZXRDbG9zdXJlUmVnaXN0ZXJzLCBnZXQoVmlydHVhbFJlZ2lz
dGVyKHNjb3BlKSkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldENs
b3N1cmVSZWdpc3RlcnMsIHNjb3BlTm9kZSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MzE3Myw2ICszMjEzLDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBOb2RlKiBzY29w
ZU5vZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSk7CisgICAgICAgICAgICAgICAgaWYg
KFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZ2lzdGVycyA9IHRyeUdldFJlZ2lzdGVycyhz
Y29wZU5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIFNpbmdsZXRvbkNsb3N1cmVWYXJEYXRh
KiBkYXRhID0gJm1fZ3JhcGgubV9zaW5nbGV0b25DbG9zdXJlVmFyRGF0YS5hbGxvYygpOworICAg
ICAgICAgICAgICAgICAgICBkYXRhLT5yZWdpc3RlcnMgPSByZWdpc3RlcnM7CisgICAgICAgICAg
ICAgICAgICAgIGRhdGEtPm9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dFNpbmdsZXRvbkNsb3N1cmVWYXIsIE9wSW5mbyhkYXRhKSwgc2NvcGVOb2Rl
LCBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSogc2NvcGVSZWdpc3Rl
cnMgPSBhZGRUb0dyYXBoKEdldENsb3N1cmVSZWdpc3RlcnMsIHNjb3BlTm9kZSk7CiAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQdXRDbG9zdXJlVmFyLCBPcEluZm8ob3BlcmFuZCksIHNjb3Bl
Tm9kZSwgc2NvcGVSZWdpc3RlcnMsIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAkocmV2aXNpb24gMTU5ODI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw3ICsyMjcsNyBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogc2NvcGVkVmFy
TG9hZEVsaW1pbmF0aW9uKE5vZGUqIHJlZ2lzdGVycywgdW5zaWduZWQgdmFyTnVtYmVyKQorICAg
IE5vZGUqIHNjb3BlZFZhckxvYWRFbGltaW5hdGlvbihOb2RlKiByZWdpc3RlcnMsIGludCB2YXJO
dW1iZXIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsg
aS0tOykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
QEAgLTI0NCw2ICsyNDQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGUtPmNoaWxkMygpLm5vZGUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjogeworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5k
ICE9IHZhck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7
CiAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFi
bGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkKQEAgLTI2MCw2ICsyNjUsNDQgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAorICAgIE5vZGUqIHNpbmdsZXRvblNjb3Bl
ZFZhckxvYWRFbGltaW5hdGlvbihTaW5nbGV0b25DbG9zdXJlVmFyRGF0YSogZGF0YSkKKyAgICB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEdldFNpbmdsZXRvbkNsb3N1
cmVWYXI6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRh
dGEoKS0+cmVnaXN0ZXJzID09IGRhdGEtPnJlZ2lzdGVycworICAgICAgICAgICAgICAgICAgICAm
JiBub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kID09IGRhdGEtPm9wZXJh
bmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogewor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJOdW1iZXIoKSAhPSBkYXRhLT5vcGVyYW5kKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjogewor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5yZWdp
c3RlcnMgPT0gZGF0YS0+cmVnaXN0ZXJzCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnNp
bmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQgPT0gZGF0YS0+b3BlcmFuZCkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsK
KyAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQorICAgICAgICAgICAgICAgICAgICAmJiB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihkYXRh
LT5vcGVyYW5kKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xv
YmJlcnNXb3JsZChub2RlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCiAgICAgYm9vbCB2YXJJbmplY3Rpb25XYXRjaHBv
aW50RWxpbWluYXRpb24oKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRl
eEluQmxvY2s7IGktLTspIHsKQEAgLTI5Niw3ICszMzksNyBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogc2NvcGVkVmFyU3RvcmVFbGltaW5hdGlv
bihOb2RlKiBzY29wZSwgTm9kZSogcmVnaXN0ZXJzLCB1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAg
Tm9kZSogc2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbihOb2RlKiBzY29wZSwgTm9kZSogcmVnaXN0
ZXJzLCBpbnQgdmFyTnVtYmVyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9p
bmRleEluQmxvY2s7IGktLTspIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRC
bG9jay0+YXQoaSk7CkBAIC0zMDksNiArMzUyLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIFB1dFNpbmdsZXRvbkNsb3N1cmVWYXI6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+b3BlcmFuZCAhPSB2YXJOdW1iZXIpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFy
OiB7CiAgICAgICAgICAgICAgICAgLy8gTGV0J3MgYmUgY29uc2VydmF0aXZlLgogICAgICAgICAg
ICAgICAgIGlmIChub2RlLT52YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIpCkBAIC0zMTYsNyArMzY1
LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgICAg
ICBjYXNlIEdldFNpbmdsZXRvbkNsb3N1cmVWYXI6IHsKKyAgICAgICAgICAgICAgICAvLyBDb25z
ZXJ2YXRpdmUuIExldCdzIGJlIGl0LgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaW5nbGV0
b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kID09IHZhck51bWJlcikKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAg
Y2FzZSBTZXRMb2NhbDogewogICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpCiAgICAgICAgICAgICAg
ICAgICAgICYmIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KHZhck51bWJlcikpCkBAIC0zMzMsNiArMzkwLDU2IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKKyAgICBOb2RlKiBzaW5nbGV0b25TY29wZWRW
YXJTdG9yZUVsaW1pbmF0aW9uKFNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKiBkYXRhKQorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKKyAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogewor
ICAgICAgICAgICAgICAgIGlmIChub2RlLT52YXJOdW1iZXIoKSAhPSBkYXRhLT5vcGVyYW5kKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U2luZ2xl
dG9uQ2xvc3VyZVZhcjogeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaW5nbGV0b25DbG9z
dXJlVmFyRGF0YSgpLT5yZWdpc3RlcnMgPT0gZGF0YS0+cmVnaXN0ZXJzCisgICAgICAgICAgICAg
ICAgICAgICYmIG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQgPT0gZGF0
YS0+b3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlIEdldENsb3N1cmVWYXI6IHsKKyAgICAgICAgICAgICAgICAvLyBMZXQncyBiZSBjb25z
ZXJ2YXRpdmUuCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhck51bWJlcigpID09IGRhdGEt
Pm9wZXJhbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fz
ZSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNp
bmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPnJlZ2lzdGVycyA9PSBkYXRhLT5yZWdpc3RlcnMKKyAg
ICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+b3Bl
cmFuZCA9PSBkYXRhLT5vcGVyYW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7Cisg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVB
Y2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgdmFyaWFibGVB
Y2Nlc3NEYXRhLT5sb2NhbCgpID09IFZpcnR1YWxSZWdpc3RlcihkYXRhLT5vcGVyYW5kKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5v
ZGUpIHx8IG5vZGUtPmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCiAgICAgTm9kZSogZ2V0QnlWYWxM
b2FkRWxpbWluYXRpb24oTm9kZSogY2hpbGQxLCBOb2RlKiBjaGlsZDIpCiAgICAgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewpAQCAtODI5LDExICs5
MzYsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAg
ICAgICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAgICAgICAgICAgICAgaWYgKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+dmFyTnVtYmVyKCkpID09IGxvY2FsKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0U2luZ2xldG9uQ2xvc3VyZVZhcjoKKyAg
ICAgICAgICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjoKKyAgICAgICAgICAgICAgICBp
ZiAoVmlydHVhbFJlZ2lzdGVyKG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJh
bmQpID09IGxvY2FsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgaWYgKGNhcmVBYm91dENsb2JiZXJpbmcgJiYgbV9ncmFwaC5jbG9iYmVyc1dv
cmxkKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTg4MiwxMCArOTk2
LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIEdldENsb3N1cmVWYXI6CisgICAgICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6
CiAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZS0+
dmFyTnVtYmVyKCkpID09IGxvY2FsKQogICAgICAgICAgICAgICAgICAgICByZXN1bHQubWF5QmVB
Y2Nlc3NlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIEdldFNpbmdsZXRvbkNsb3N1cmVWYXI6CisgICAgICAgICAgICBj
YXNlIFB1dFNpbmdsZXRvbkNsb3N1cmVWYXI6CisgICAgICAgICAgICAgICAgaWYgKFZpcnR1YWxS
ZWdpc3Rlcihub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kKSA9PSBsb2Nh
bCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBH
ZXRNeVNjb3BlOgogICAgICAgICAgICAgY2FzZSBTa2lwVG9wU2NvcGU6CiAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQpAQCAtMTIwNyw2ICsxMzI4
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAg
IGNhc2UgR2V0U2luZ2xldG9uQ2xvc3VyZVZhcjogeworICAgICAgICAgICAgaWYgKGNzZU1vZGUg
PT0gU3RvcmVFbGltaW5hdGlvbikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHNldFJlcGxhY2VtZW50KHNpbmdsZXRvblNjb3BlZFZhckxvYWRFbGltaW5hdGlvbihub2RlLT5z
aW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCiAgICAgICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGlm
IChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xMjI3LDYgKzEzNTUsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKKyAgICAgICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7CisgICAgICAgICAg
ICBpZiAoY3NlTW9kZSA9PSBOb3JtYWxDU0UpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBlbGltaW5hdGUoc2luZ2xldG9uU2NvcGVkVmFyU3RvcmVFbGltaW5hdGlvbihub2Rl
LT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICBpZiAoY3NlTW9kZSA9
PSBTdG9yZUVsaW1pbmF0aW9uKQogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE1OTgyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTUsOSArMTU1LDE0IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBDcmVhdGVBcmd1bWVu
dHM6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgIHdyaXRlKFdhdGNocG9pbnRf
ZmlyZSk7CiAgICAgICAgIHJlYWQoR0NTdGF0ZSk7CiAgICAgICAgIHdyaXRlKEdDU3RhdGUpOwog
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQWN0aXZhdGlvbkFsbG9jYXRpb25X
YXRjaHBvaW50OgorICAgICAgICByZWFkKFdhdGNocG9pbnRfZmlyZSk7CisgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIFRoZXNlIGFyZSBmb3J3YXJkLWV4aXRpbmcgbm9kZXMgdGhhdCBhc3N1bWUg
dGhhdCB0aGUgc3Vic2VxdWVudCBpbnN0cnVjdGlvbgogICAgIC8vIGlzIGEgTW92SGludCwgYW5k
IHRoZXkgdHJ5IHRvIHJvbGwgZm9yd2FyZCBvdmVyIHRoaXMgTW92SGludCBpbiB0aGVpcgpAQCAt
NTIwLDEwICs1MjUsMTggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZQogICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigp
KSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBHZXRTaW5nbGV0b25DbG9z
dXJlVmFyOgorICAgICAgICByZWFkKEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPnNpbmds
ZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQpKTsKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChW
YXJpYWJsZXMsIG5vZGUtPnZhck51bWJlcigpKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CisgICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJlVmFyOgorICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoVmFyaWFibGVzLCBub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5k
KSk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAg
ICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKEFic29sdXRlLCBub2RlLT5yZWdpc3RlclBvaW50ZXIo
KSkpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4Miw3ICs3ODIs
OCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgY2FzZSBB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlOgotICAgICAgICBjYXNlIEdldFNjb3BlOiB7CisgICAgICAgIGNhc2UgR2V0U2NvcGU6
CisgICAgICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjogewogICAgICAgICAgICAgZml4
RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC05MTYsNiArOTE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRM
b2NhbFVubGlua2VkOgogICAgICAgICBjYXNlIEdldE15U2NvcGU6CiAgICAgICAgIGNhc2UgR2V0
Q2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyOgogICAgICAg
ICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAg
IGNhc2UgTm90aWZ5V3JpdGU6CkBAIC05NTQsNiArOTU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAg
ICAgICAgY2FzZSBMb29wSGludDoKKyAgICAgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldh
dGNocG9pbnQ6CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAgICAgIGRlZmF1bHQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTk4MjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgxMCw2ICs4MTAsNyBAQCBwdWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhLCA4PiBtX3N0cnVjdHVyZVRyYW5zaXRpb25EYXRhOwogICAgIFNlZ21lbnRl
ZFZlY3RvcjxOZXdBcnJheUJ1ZmZlckRhdGEsIDQ+IG1fbmV3QXJyYXlCdWZmZXJEYXRhOwogICAg
IFNlZ21lbnRlZFZlY3RvcjxTd2l0Y2hEYXRhLCA0PiBtX3N3aXRjaERhdGE7CisgICAgU2VnbWVu
dGVkVmVjdG9yPFNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhLCA0PiBtX3NpbmdsZXRvbkNsb3N1cmVW
YXJEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFi
bGVEYXRhOwogICAgIE93blB0cjxJbmxpbmVDYWxsRnJhbWVTZXQ+IG1faW5saW5lQ2FsbEZyYW1l
czsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVM
aXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiAxNTk4MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSwxMSBAQCBzdHJ1Y3QgU3dp
dGNoRGF0YSB7CiAgICAgYm9vbCBkaWRVc2VKdW1wVGFibGU7CiB9OwogCitzdHJ1Y3QgU2luZ2xl
dG9uQ2xvc3VyZVZhckRhdGEgeworICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZ2lz
dGVyczsKKyAgICBpbnQgb3BlcmFuZDsKK307CisKIC8vIFRoaXMgdHlwZSB1c2VkIGluIHBhc3Np
bmcgYW4gaW1tZWRpYXRlIGFyZ3VtZW50IHRvIE5vZGUgY29uc3RydWN0b3I7CiAvLyBkaXN0aW5n
dWlzaGVzIGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBDb2Rl
QmxvY2sgZGF0YSBzdHJ1Y3R1cmUgLSAKIC8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBv
ciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZSouCkBAIC03NDIsNyArNzQ3LDcgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRDbG9zdXJlVmFyIHx8IG9wKCkgPT0gUHV0
Q2xvc3VyZVZhcjsKICAgICB9CiAKLSAgICB1bnNpZ25lZCB2YXJOdW1iZXIoKQorICAgIGludCB2
YXJOdW1iZXIoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1Zhck51bWJlcigpKTsKICAgICAg
ICAgcmV0dXJuIG1fb3BJbmZvOwpAQCAtNzU3LDYgKzc2MiwxNiBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgewogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+
KG1fb3BJbmZvKTsKICAgICB9CisgICAgCisgICAgYm9vbCBoYXNTaW5nbGV0b25DbG9zdXJlVmFy
RGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBHZXRTaW5nbGV0b25DbG9zdXJl
VmFyIHx8IG9wKCkgPT0gUHV0U2luZ2xldG9uQ2xvc3VyZVZhcjsKKyAgICB9CisgICAgCisgICAg
U2luZ2xldG9uQ2xvc3VyZVZhckRhdGEqIHNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U2luZ2xldG9uQ2xvc3VyZVZhckRhdGEqPiht
X29wSW5mbyk7CisgICAgfQogCiAgICAgYm9vbCBoYXNSZXN1bHQoKQogICAgIHsKQEAgLTkxMCw2
ICs5MjUsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAg
ICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CisgICAgICAg
IGNhc2UgR2V0U2luZ2xldG9uQ2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBBcnJheVBvcDoKICAg
ICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKQEAgLTEwNjEs
NiArMTA3NywxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzsKICAg
ICB9CiAgICAgCisgICAgYm9vbCBoYXNTeW1ib2xUYWJsZSgpCisgICAgeworICAgICAgICByZXR1
cm4gb3AoKSA9PSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ7CisgICAgfQorICAgIAor
ICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFz
U3ltYm9sVGFibGUoKSk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFN5bWJvbFRh
YmxlKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKICAgICBib29sIGhhc0FycmF5TW9kZSgpCiAg
ICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDExICsxODIsMTQg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldENsb3N1cmVS
ZWdpc3RlcnMsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0Q2xvc3VyZVZhciwg
Tm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oUHV0Q2xvc3VyZVZhciwgTm9kZU11c3RHZW5lcmF0
ZSkgXAorICAgIG1hY3JvKEdldFNpbmdsZXRvbkNsb3N1cmVWYXIsIE5vZGVSZXN1bHRKUykgXAor
ICAgIG1hY3JvKFB1dFNpbmdsZXRvbkNsb3N1cmVWYXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFB1dEdsb2Jh
bFZhciwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5vdGlmeVdyaXRlLCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oVmFyaWFibGVXYXRjaHBvaW50LCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgbWFjcm8oVmFySW5qZWN0aW9uV2F0Y2hwb2ludCwgTm9kZU11c3RHZW5lcmF0
ZSkgXAorICAgIG1hY3JvKEFjdGl2YXRpb25BbGxvY2F0aW9uV2F0Y2hwb2ludCwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKENoZWNrRnVuY3Rpb24sIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU5ODI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw3ICsxOTEsOCBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBjYXNlIEdldEds
b2JhbFZhcjoKLSAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOiB7CisgICAgICAgIGNhc2UgR2V0
Q2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7CiAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24o
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTUzLDYgKzU1NCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgIGNhc2UgUHV0QnlW
YWw6CiAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBQdXRTaW5nbGV0
b25DbG9zdXJlVmFyOgogICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBUaHJvdzoK
ICAgICAgICAgY2FzZSBQdXRCeUlkOgpAQCAtNTgzLDYgKzU4NSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIGNh
c2UgTm90aWZ5V3JpdGU6CisgICAgICAgIGNhc2UgQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBv
aW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgLy8gVGhpcyBn
ZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBhbHJlYWR5IGhhcyBhIHByZWRpY3Rpb24uCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24g
MTU5ODI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksOSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJz
dHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBTa2lwU2NvcGU6CiAgICAgY2FzZSBHZXRDbG9z
dXJlUmVnaXN0ZXJzOgogICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKKyAgICBjYXNlIEdldFNpbmds
ZXRvbkNsb3N1cmVWYXI6CiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgorICAgIGNhc2UgUHV0U2lu
Z2xldG9uQ2xvc3VyZVZhcjoKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICBjYXNlIFB1dEds
b2JhbFZhcjoKICAgICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2ludDoKQEAgLTI0Myw2ICsyNDUsNyBA
QCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBJbnQ1
MlRvVmFsdWU6CiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICBjYXNlIE5vdGlmeVdy
aXRlOgorICAgIGNhc2UgQWN0aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50OgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
cmV2aXNpb24gMTU5ODI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcwNyw2ICszNzA3LDE2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CisgICAgY2FzZSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyOiB7CisgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQ
YXlsb2FkKHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdw
cigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3By
KCk7CisgICAgICAgIG1faml0LmxvYWQzMigmYml0d2lzZV9jYXN0PEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IqPihub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5yZWdpc3RlcnMgKyBub2Rl
LT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kKS0+YXNCaXRzLnRhZywgcmVzdWx0
VGFnR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKCZiaXR3aXNlX2Nhc3Q8RW5jb2RlZFZhbHVl
RGVzY3JpcHRvcio+KG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPnJlZ2lzdGVycyAr
IG5vZGUtPnNpbmdsZXRvbkNsb3N1cmVWYXJEYXRhKCktPm9wZXJhbmQpLT5hc0JpdHMucGF5bG9h
ZCwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BS
LCByZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNh
c2UgUHV0Q2xvc3VyZVZhcjogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHJlZ2lzdGVycyh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC0zNzIwLDYgKzM3MzAsMjEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgICAgIG1faml0LnN0b3JlMzIodmFs
dWVUYWdHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS0+dmFyTnVt
YmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXls
b2FkR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZhck51bWJl
cigpICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgd3JpdGVCYXJyaWVyKHNjb3BlR1BS
LCB2YWx1ZVRhZ0dQUiwgbm9kZS0+Y2hpbGQzKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNj
ZXNzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIFB1dFNpbmdsZXRvbkNsb3N1cmVWYXI6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoUmVnaXN0ZXIodGhpcyk7CisgICAgICAgIEdQUlJlZyBzY29wZUdQUiA9
IHNjb3BlLmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIo
KTsKKyAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsK
KyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoUmVnaXN0ZXIuZ3ByKCk7CisKKyAg
ICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yKj4obm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+cmVnaXN0ZXJz
ICsgbm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+b3BlcmFuZCktPmFzQml0cy50YWcp
OworICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZEdQUiwgJmJpdHdpc2VfY2FzdDxF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yKj4obm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+
cmVnaXN0ZXJzICsgbm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+b3BlcmFuZCktPmFz
Qml0cy5wYXlsb2FkKTsKICAgICAgICAgd3JpdGVCYXJyaWVyKHNjb3BlR1BSLCB2YWx1ZVRhZ0dQ
Uiwgbm9kZS0+Y2hpbGQyKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDM0NSw2
ICs0MzcwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEFjdGl2YXRpb25BbGxvY2F0
aW9uV2F0Y2hwb2ludDogeworICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czogewogICAgICAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlLCBQYXlsb2FkV29yZCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMDksNiArNDAwOSwxMyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2UgR2V0
U2luZ2xldG9uQ2xvc3VyZVZhcjogeworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBtX2pp
dC5sb2FkNjQobm9kZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+cmVnaXN0ZXJzICsgbm9k
ZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKS0+b3BlcmFuZCwgcmVzdWx0R1BSKTsKKyAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9
CiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgcmVn
aXN0ZXJzKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAgLTQwMjUsNiArNDAzMiwyMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIG5vUmVzdWx0KG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBQdXRTaW5nbGV0b25DbG9zdXJl
VmFyOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaFJlZ2lzdGVyKHRoaXMpOworCisgICAg
ICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoUmVn
aXN0ZXIuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBu
b2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpLT5yZWdpc3RlcnMgKyBub2RlLT5zaW5nbGV0
b25DbG9zdXJlVmFyRGF0YSgpLT5vcGVyYW5kKTsKKyAgICAgICAgd3JpdGVCYXJyaWVyKHNjb3Bl
R1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNj
ZXNzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KICAgICBjYXNlIEdldEJ5SWQ6IHsKICAgICAgICAgQVNTRVJUKG5vZGUtPnByZWRp
Y3Rpb24oKSk7CiAKQEAgLTQ2MjAsNiArNDY0MSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAg
Y2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6IHsKKyAgICAgICAgbm9SZXN1bHQo
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDcmVhdGVB
cmd1bWVudHM6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCB2YWx1ZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0
Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNiw2ICsxMjYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFkZExh
emlseShnbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQWN0aXZhdGlvbkFsbG9jYXRp
b25XYXRjaHBvaW50OgorICAgICAgICAgICAgYWRkTGF6aWx5KG1fbm9kZS0+c3ltYm9sVGFibGUo
KS0+bV9hY3RpdmF0aW9uQWxsb2NhdGVkT25jZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBAIGlubGluZSBDYXBh
YmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIENoZWNrRnVuY3Rpb246CiAg
ICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6CisgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6CiAgICAgY2FzZSBW
YXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICAgICAgLy8gVGhl
c2UgYXJlIE9LLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTksNiArMzk5
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFZhcmlhYmxl
V2F0Y2hwb2ludDoKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFjdGl2YXRpb25B
bGxvY2F0aW9uV2F0Y2hwb2ludDoKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdl
dE15U2NvcGU6CiAgICAgICAgICAgICBjb21waWxlR2V0TXlTY29wZSgpOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC00MTEsOSArNDEzLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0Q2xv
c3VyZVZhcjoKICAgICAgICAgICAgIGNvbXBpbGVHZXRDbG9zdXJlVmFyKCk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRTaW5nbGV0b25DbG9zdXJlVmFyOgorICAgICAgICAg
ICAgY29tcGlsZUdldFNpbmdsZXRvbkNsb3N1cmVWYXIoKTsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAgICAgICAgICBjb21waWxlUHV0Q2xvc3Vy
ZVZhcigpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0U2luZ2xldG9uQ2xv
c3VyZVZhcjoKKyAgICAgICAgICAgIGNvbXBpbGVQdXRDbG9zdXJlVmFyKCk7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBDb21wYXJlRXE6CiAgICAgICAgICAgICBjb21waWxlQ29t
cGFyZUVxKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTIyMDIsNiArMjIxMCwxMyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgYWRkcmVzc0Zvcihsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQxKCkp
LCBtX25vZGUtPnZhck51bWJlcigpKSkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVH
ZXRTaW5nbGV0b25DbG9zdXJlVmFyKCkKKyAgICB7CisgICAgICAgIFNpbmdsZXRvbkNsb3N1cmVW
YXJEYXRhKiBkYXRhID0gbV9ub2RlLT5zaW5nbGV0b25DbG9zdXJlVmFyRGF0YSgpOworICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NCgKKyAgICAgICAgICAgIGFkZHJlc3NGb3IobV9vdXQu
Y29uc3RJbnRQdHIoZGF0YS0+cmVnaXN0ZXJzKSwgZGF0YS0+b3BlcmFuZCkpKTsKKyAgICB9Cisg
ICAgCiAgICAgdm9pZCBjb21waWxlUHV0Q2xvc3VyZVZhcigpCiAgICAgewogICAgICAgICBtX291
dC5zdG9yZTY0KApAQCAtMjIwOSw2ICsyMjI0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBh
ZGRyZXNzRm9yKGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDIoKSksIG1fbm9kZS0+dmFyTnVtYmVy
KCkpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb21waWxlUHV0U2luZ2xldG9uQ2xvc3VyZVZh
cigpCisgICAgeworICAgICAgICBTaW5nbGV0b25DbG9zdXJlVmFyRGF0YSogZGF0YSA9IG1fbm9k
ZS0+c2luZ2xldG9uQ2xvc3VyZVZhckRhdGEoKTsKKyAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAg
ICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSksCisgICAgICAgICAgICBhZGRy
ZXNzRm9yKG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPnJlZ2lzdGVycyksIGRhdGEtPm9wZXJhbmQp
KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjb21waWxlQ29tcGFyZUVxKCkKICAgICB7CiAgICAg
ICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtCShyZXZpc2lvbiAxNTk4MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjAwNiwzOSAr
MjAwNiwzOSBAQCBfbGxpbnRfb3BfcmVzb2x2ZV9zY29wZToKICNyR2xvYmFsUHJvcGVydHk6CiAg
ICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAuckdsb2JhbFZhcgogICAgIGdldEdsb2JhbE9i
amVjdCgxKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2goNikKIAogLnJHbG9iYWxWYXI6
CiAgICAgYmluZXEgdDAsIEdsb2JhbFZhciwgLnJDbG9zdXJlVmFyCiAgICAgZ2V0R2xvYmFsT2Jq
ZWN0KDEpCi0gICAgZGlzcGF0Y2goNSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckNsb3N1cmVWYXI6
CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXIsIC5yR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzCiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3Bh
dGNoKDYpCiAKIC5yR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJp
bmVxIHQwLCBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5yR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHluYW1pYykK
ICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3BhdGNoKDYp
CiAKIC5yR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgR2xv
YmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAgICBnZXRHbG9iYWxP
YmplY3QoMSkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yQ2xvc3VyZVZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCAuckR5bmFtaWMKICAgICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFt
aWMpCiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRpc3BhdGNoKDYp
CiAKIC5yRHluYW1pYzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9yZXNvbHZl
X3Njb3BlKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2goNikKIAogCiBtYWNybyBsb2Fk
V2l0aFN0cnVjdHVyZUNoZWNrKG9wZXJhbmQsIHNsb3dQYXRoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJl
dmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xODMxLDM5ICsxODMxLDM5IEBAIF9s
bGludF9vcF9yZXNvbHZlX3Njb3BlOgogI3JHbG9iYWxQcm9wZXJ0eToKICAgICBiaW5lcSB0MCwg
R2xvYmFsUHJvcGVydHksIC5yR2xvYmFsVmFyCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAg
ZGlzcGF0Y2goNSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFZhcjoKICAgICBiaW5lcSB0
MCwgR2xvYmFsVmFyLCAuckNsb3N1cmVWYXIKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBk
aXNwYXRjaCg1KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yQ2xvc3VyZVZhcjoKICAgICBiaW5lcSB0
MCwgQ2xvc3VyZVZhciwgLnJHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MKICAg
ICByZXNvbHZlU2NvcGUoKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2goNikKIAogLnJH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJHbG9iYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnJEeW5hbWljKQogICAgIGdldEdsb2Jh
bE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2goNikKIAogLnJHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQwLCBHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzLCAuckNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAg
dmFySW5qZWN0aW9uQ2hlY2soLnJEeW5hbWljKQogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAg
IGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2goNikKIAogLnJDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MsIC5yRHluYW1pYwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAgICByZXNv
bHZlU2NvcGUoKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlzcGF0Y2goNikKIAogLnJEeW5hbWlj
OgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpCi0gICAg
ZGlzcGF0Y2goNSkKKyAgICBkaXNwYXRjaCg2KQogCiAKIG1hY3JvIGxvYWRXaXRoU3RydWN0dXJl
Q2hlY2sob3BlcmFuZCwgc2xvd1BhdGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FjdGl2YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FjdGl2YXRpb24uaAkocmV2aXNpb24gMTU5ODI2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYg
KzUwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxl
ID0gY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwogICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5j
b2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSk7CisgICAgICAgIHN5bWJvbFRhYmxlLT5tX2FjdGl2
YXRpb25BbGxvY2F0ZWRPbmNlLm5vdGlmeVdyaXRlKCk7CiAgICAgICAgIEpTQWN0aXZhdGlvbiog
YWN0aXZhdGlvbiA9IG5ldyAoCiAgICAgICAgICAgICBOb3ROdWxsLAogICAgICAgICAgICAgYWxs
b2NhdGVDZWxsPEpTQWN0aXZhdGlvbj4oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMTU5ODI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDE5ICs1MywxOSBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoRXhlY1N0CiAgICAgaWYgKEpTQWN0
aXZhdGlvbiogYWN0aXZhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNBY3RpdmF0aW9uKj4oc2NvcGUp
KSB7CiAgICAgICAgIGlmIChpZGVudCA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRz
KSB7CiAgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGF0IHRoaXMg
YWN0aXZhdGlvbiBzY29wZSwgYnV0IHdlIGRvbid0IGtub3cgaG93IHRvIGNhY2hlIGl0LgotICAg
ICAgICAgICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywgMCwgMCwgMCwgMCk7CisgICAgICAgICAg
ICBvcCA9IFJlc29sdmVPcChEeW5hbWljLCAwLCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9
IGFjdGl2YXRpb24tPnN5bWJvbFRhYmxlKCktPmdldChpZGVudC5pbXBsKCkpOwogICAgICAgICBp
ZiAoZW50cnkuaXNSZWFkT25seSgpICYmIGdldE9yUHV0ID09IFB1dCkgewogICAgICAgICAgICAg
Ly8gV2Uga25vdyB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCB0aGlzIGFjdGl2YXRpb24gc2NvcGUs
IGJ1dCB3ZSBkb24ndCBrbm93IGhvdyB0byBjYWNoZSBpdC4KLSAgICAgICAgICAgIG9wID0gUmVz
b2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDApOworICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3Ao
RHluYW1pYywgMCwgMCwgMCwgMCwgMCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG9wID0g
UmVzb2x2ZU9wKG1ha2VUeXBlKENsb3N1cmVWYXIsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwg
ZGVwdGgsIGFjdGl2YXRpb24tPnN0cnVjdHVyZSgpLCAwLCBlbnRyeS5nZXRJbmRleCgpKTsKKyAg
ICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKENsb3N1cmVWYXIsIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIGFjdGl2YXRpb24sIDAsIGVudHJ5LmdldEluZGV4KCkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtNzksMTIgKzc5LDEy
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhFeGVjU3QKICAgICAgICAgaWYg
KCFlbnRyeS5pc051bGwoKSkgewogICAgICAgICAgICAgaWYgKGdldE9yUHV0ID09IFB1dCAmJiBl
bnRyeS5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBwcm9w
ZXJ0eSB3aWxsIGJlIGF0IGdsb2JhbCBzY29wZSwgYnV0IHdlIGRvbid0IGtub3cgaG93IHRvIGNh
Y2hlIGl0LgotICAgICAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAs
IDApOworICAgICAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDAs
IDApOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBvcCA9IFJlc29sdmVPcCgKLSAgICAgICAgICAgICAgICBtYWtlVHlwZShHbG9iYWxW
YXIsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIGVudHJ5LndhdGNocG9pbnRT
ZXQoKSwKKyAgICAgICAgICAgICAgICBtYWtlVHlwZShHbG9iYWxWYXIsIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIDAsIGVudHJ5LndhdGNocG9pbnRTZXQoKSwKICAgICAgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oZ2xvYmFsT2JqZWN0LT5yZWdpc3Rl
ckF0KGVudHJ5LmdldEluZGV4KCkpLnNsb3QoKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KQEAgLTk2LDE1ICs5NiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJh
Y3RBY2Nlc3MoRXhlY1N0CiAgICAgICAgICAgICB8fCAoZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+aGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpICYm
IGdldE9yUHV0ID09IFB1dCkpIHsKICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHByb3BlcnR5
IHdpbGwgYmUgYXQgZ2xvYmFsIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25vdyBob3cgdG8gY2FjaGUg
aXQuCiAgICAgICAgICAgICBBU1NFUlQoIXNjb3BlLT5uZXh0KCkpOwotICAgICAgICAgICAgb3Ag
PSBSZXNvbHZlT3AobWFrZVR5cGUoR2xvYmFsUHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKSwgZGVwdGgsIDAsIDAsIDApOworICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5
cGUoR2xvYmFsUHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIDAs
IDAsIDApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBv
cCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9wZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpLCBkZXB0aCwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgMCwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CisgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKEdsb2JhbFByb3BlcnR5
LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCBnbG9iYWxPYmplY3QtPnN0cnVjdHVy
ZSgpLCAwLCAwLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgb3AgPSBSZXNvbHZlT3AoRHluYW1pYywgMCwgMCwgMCwgMCk7CisgICAgb3Ag
PSBSZXNvbHZlT3AoRHluYW1pYywgMCwgMCwgMCwgMCwgMCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTE0Miw3ICsxNDIsNyBAQCBKU1ZhbHVlIEpTU2NvcGU6OnJlc29sdmUoRXhlY1N0YXRl
KiBleGVjCiAKIFJlc29sdmVPcCBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUoRXhlY1N0YXRlKiBl
eGVjLCBKU1Njb3BlKiBzY29wZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIEdldE9yUHV0IGdl
dE9yUHV0LCBSZXNvbHZlVHlwZSB1bmxpbmtlZFR5cGUpCiB7Ci0gICAgUmVzb2x2ZU9wIG9wKER5
bmFtaWMsIDAsIDAsIDAsIDApOworICAgIFJlc29sdmVPcCBvcChEeW5hbWljLCAwLCAwLCAwLCAw
LCAwKTsKICAgICBpZiAodW5saW5rZWRUeXBlID09IER5bmFtaWMpCiAgICAgICAgIHJldHVybiBv
cDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkocmV2aXNp
b24gMTU5ODI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NiwxMCArOTYsMTEgQEAgaW5saW5lIGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MoUmVzbwogfQogCiBzdHJ1Y3QgUmVzb2x2ZU9wIHsKLSAgICBSZXNvbHZlT3Ao
UmVzb2x2ZVR5cGUgdHlwZSwgc2l6ZV90IGRlcHRoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgVmFy
aWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCB1aW50cHRyX3Qgb3BlcmFuZCkKKyAg
ICBSZXNvbHZlT3AoUmVzb2x2ZVR5cGUgdHlwZSwgc2l6ZV90IGRlcHRoLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQq
IHdhdGNocG9pbnRTZXQsIHVpbnRwdHJfdCBvcGVyYW5kKQogICAgICAgICA6IHR5cGUodHlwZSkK
ICAgICAgICAgLCBkZXB0aChkZXB0aCkKICAgICAgICAgLCBzdHJ1Y3R1cmUoc3RydWN0dXJlKQor
ICAgICAgICAsIGFjdGl2YXRpb24oYWN0aXZhdGlvbikKICAgICAgICAgLCB3YXRjaHBvaW50U2V0
KHdhdGNocG9pbnRTZXQpCiAgICAgICAgICwgb3BlcmFuZChvcGVyYW5kKQogICAgIHsKQEAgLTEw
OCw2ICsxMDksNyBAQCBzdHJ1Y3QgUmVzb2x2ZU9wIHsKICAgICBSZXNvbHZlVHlwZSB0eXBlOwog
ICAgIHNpemVfdCBkZXB0aDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICBKU0FjdGl2
YXRpb24qIGFjdGl2YXRpb247CiAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50
U2V0OwogICAgIHVpbnRwdHJfdCBvcGVyYW5kOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE1OTgyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBjbGFzcyBKU1ZhcmlhYmxlT2JqZWN0IDogcHVi
bGljIEpTU3ltYm9sCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU1N5bWJvbFRhYmxlT2JqZWN0IEJh
c2U7CiAKKyAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWdpc3RlcnMoKSB7IHJldHVy
biBtX3JlZ2lzdGVyczsgfQogICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4mIHJlZ2lzdGVy
QXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVyc1tpbmRleF07IH0KIAogICAg
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIGNvbnN0ICogYWRkcmVzc09mUmVnaXN0ZXJzKCkg
Y29uc3QgeyByZXR1cm4gJm1fcmVnaXN0ZXJzOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAxNTk4MjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk5LDYgKzk5LDcgQEAgU3ltYm9sVGFibGU6OlN5bWJvbFRhYmxlKFZNJiB2bSkKICAgICAs
IG1fdXNlc05vblN0cmljdEV2YWwoZmFsc2UpCiAgICAgLCBtX2NhcHR1cmVTdGFydCgwKQogICAg
ICwgbV9jYXB0dXJlRW5kKDApCisgICAgLCBtX2FjdGl2YXRpb25BbGxvY2F0ZWRPbmNlKENsZWFy
V2F0Y2hwb2ludCkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNTk4MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTcsNiArNDk3LDgg
QEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1fd2F0
Y2hwb2ludENsZWFudXA7CiAKIHB1YmxpYzoKKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fYWN0
aXZhdGlvbkFsbG9jYXRlZE9uY2U7CisgICAgCiAgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9j
ayBtX2xvY2s7CiB9OwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTk4MjYpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMy0xMS0yNCAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEluZmVyIG9uZS10aW1l
IHNjb3BlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI0ODEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCisKKyAgICAgICAgKiBq
cy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1
cmUtdGVuLXZhcnMuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1vbmUt
dGltZS1jbG9zdXJlLXR3by12YXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMv
cmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXR3by12YXJzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXRl
bi12YXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZl
ci1vbmUtdGltZS1jbG9zdXJlLXR3by12YXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLmpzOiBBZGRlZC4KKwogMjAx
My0xMS0yNyAgVGhpYWdvIGRlIEJhcnJvcyBMYWNlcmRhICA8dGhpYWdvLmxhY2VyZGFAb3BlbmJv
c3NhLm9yZz4KIAogICAgICAgICBBZGRpbmcgTWVkaWFDb25zdHJhaW50c01vY2sgY2xhc3MKSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGlt
ZS1jbG9zdXJlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUt
dGltZS1jbG9zdXJlLXRlbi12YXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycy1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2luZmVyLW9u
ZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXIt
b25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycy5odG1sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXRl
bi12YXJzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4t
dmFycy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10d28t
dmFycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXR3
by12YXJzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlv
biB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUt
dHdvLXZhcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVy
LW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10d28tdmFycy5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGlt
ZS1jbG9zdXJlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZl
ci1vbmUtdGltZS1jbG9zdXJlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
cmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmZl
ci1vbmUtdGltZS1jbG9zdXJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
cmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtZGVlcC1jbG9zdXJlLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWRl
ZXAtY2xvc3VyZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2luZmVyLW9uZS10aW1lLWRlZXAtY2xvc3VyZS1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2luZmVyLW9uZS10aW1lLWRlZXAtY2xv
c3VyZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24g
dGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1kZWVwLWNsb3N1
cmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10
aW1lLWRlZXAtY2xvc3VyZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9pbmZlci1vbmUtdGltZS1kZWVwLWNsb3N1cmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9p
bmZlci1vbmUtdGltZS1kZWVwLWNsb3N1cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItb25lLXRpbWUtY2xv
c3VyZS10ZW4tdmFycy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXRlbi12YXJzLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItb25lLXRpbWUt
Y2xvc3VyZS10ZW4tdmFycy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxIEBACitmdW5j
dGlvbiBmb29NYWtlcih4UGFyYW0pIHsKKyAgICB2YXIgeCA9IHhQYXJhbTsKKyAgICB2YXIgeDIg
PSB4UGFyYW0gKyAxOworICAgIHZhciB4MyA9IHhQYXJhbSArIDI7CisgICAgdmFyIHg0ID0geFBh
cmFtICsgMzsKKyAgICB2YXIgeDUgPSB4UGFyYW0gKyA0OworICAgIHZhciB4NiA9IHhQYXJhbSAr
IDU7CisgICAgdmFyIHg3ID0geFBhcmFtICsgNjsKKyAgICB2YXIgeDggPSB4UGFyYW0gKyA3Owor
ICAgIHZhciB4OSA9IHhQYXJhbSArIDg7CisgICAgdmFyIHgxMCA9IHhQYXJhbSArIDk7CisgICAg
cmV0dXJuIGZ1bmN0aW9uICh5KSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsg
KytpKQorICAgICAgICAgICAgeSArPSB4ICsgeDIgKyB4MyArIHg0ICsgeDUgKyB4NiArIHg3ICsg
eDggKyB4OSArIHgxMDsKKyAgICAgICAgcmV0dXJuIHk7CisgICAgfQorfQorCit2YXIgZm9vID0g
Zm9vTWFrZXIoNDIpOworCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKDUpOworICAgIGlmIChyZXN1bHQgIT0g
NDY1MDA1KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9
CisKK3ZhciByZXN1bHQgPSBmb29NYWtlcigyMykoNSk7CitpZiAocmVzdWx0ICE9IDI3NTAwNSkK
KyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXR3by12
YXJzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMuanMJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXR3
by12YXJzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK2Z1bmN0aW9uIGZvb01h
a2VyKHhQYXJhbSkgeworICAgIHZhciB4ID0geFBhcmFtOworICAgIHZhciB4MiA9IHhQYXJhbSAr
IDE7CisgICAgcmV0dXJuIGZ1bmN0aW9uICh5KSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDsgKytpKQorICAgICAgICAgICAgeSArPSB4ICsgeDI7CisgICAgICAgIHJldHVybiB5
OworICAgIH0KK30KKwordmFyIGZvbyA9IGZvb01ha2VyKDQyKTsKKworbm9JbmxpbmUoZm9vKTsK
KworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZv
byg1KTsKKyAgICBpZiAocmVzdWx0ICE9ICg0MiArIDQzKSAqIDEwMDAgKyA1KQorICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBm
b29NYWtlcigyMykoNSk7CitpZiAocmVzdWx0ICE9ICgyMyArIDI0KSAqIDEwMDAgKyA1KQorICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItb25lLXRp
bWUtY2xvc3VyZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMiBAQAorZnVuY3Rpb24gZm9vTWFrZXIoeFBhcmFtKSB7CisgICAgdmFyIHggPSB4UGFy
YW07CisgICAgcmV0dXJuIGZ1bmN0aW9uICh5KSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDsgKytpKQorICAgICAgICAgICAgeSArPSB4OworICAgICAgICByZXR1cm4geTsKKyAg
ICB9Cit9CisKK3ZhciBmb28gPSBmb29NYWtlcig0Mik7CisKK25vSW5saW5lKGZvbyk7CisKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28oNSk7
CisgICAgaWYgKHJlc3VsdCAhPSA0MiAqIDEwMDAgKyA1KQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb29NYWtlcigyMyko
NSk7CitpZiAocmVzdWx0ICE9IDIzICogMTAwMCArIDUpCisgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvaW5mZXItb25lLXRpbWUtZGVlcC1jbG9zdXJlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWRlZXAtY2xvc3Vy
ZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L2luZmVyLW9uZS10aW1lLWRlZXAtY2xvc3VyZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM1IEBACitmdW5jdGlvbiBmb29NYWtlcihhUGFyYW0pIHsKKyAgICB2YXIgYSA9IGFQYXJhbTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oYlBhcmFtKSB7CisgICAgICAgIHZhciBiID0gYlBhcmFtOwor
ICAgICAgICByZXR1cm4gZnVuY3Rpb24oY1BhcmFtKSB7CisgICAgICAgICAgICB2YXIgYyA9IGNQ
YXJhbTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihkUGFyYW0pIHsKKyAgICAgICAgICAg
ICAgICB2YXIgZCA9IGRQYXJhbTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZVBh
cmFtKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBlID0gZVBhcmFtOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZQYXJhbSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyIGYgPSBhICsgYiArIGMgKyBkICsgZSArIGZQYXJhbTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGYgKz0gYTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmOworICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9Owor
ICAgICAgICB9OworICAgIH07Cit9CisKK3ZhciBmb28gPSBmb29NYWtlcig0MikoMSkoMikoMyko
NCk7CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDA7ICsraSkg
eworICAgIHZhciByZXN1bHQgPSBmb28oNSk7CisgICAgaWYgKHJlc3VsdCAhPSA0MjA1NykKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCit2YXIgcmVz
dWx0ID0gZm9vTWFrZXIoMjMpKDIpKDMpKDQpKDUpKDUpOworaWYgKHJlc3VsdCAhPSAyMzA0MikK
KyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217980</attachid>
            <date>2013-11-27 21:50:52 -0800</date>
            <delta_ts>2013-11-27 21:50:52 -0800</delta_ts>
            <desc>patch for landing?</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>47276</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5ODMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBA
CisyMDEzLTExLTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5mZXIgb25lLXRpbWUgc2NvcGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjQ4MTIKKworICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4K
KyAgICAgICAgCisgICAgICAgIFRoaXMgZGV0ZWN0cyBKU0FjdGl2YXRpb25zIHRoYXQgYXJlIGNy
ZWF0ZWQgb25seSBvbmNlLiBUaGUgSlNBY3RpdmF0aW9uIHBvaW50ZXIgaXMgdGhlbgorICAgICAg
ICBiYWtlZCBpbnRvIHRoZSBtYWNoaW5lIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIHRh
a2VzIGFkdmFudGFnZSBvZiB0aGUgb25lLXRpbWUgc2NvcGUgaW5mZXJlbmNlIHRvIHJlZHVjZSB0
aGUgbnVtYmVyIG9mCisgICAgICAgIGluZGlyZWN0aW9ucyBuZWVkZWQgdG8gZ2V0IHRvIGEgY2xv
c3VyZSB2YXJpYWJsZSBpbiBjYXNlIHdoZXJlIHRoZSBzY29wZSBpcyBvbmx5CisgICAgICAgIGFs
bG9jYXRlZCBvbmNlLiBUaGlzIGlzbid0IHJlYWxseSBhIHNwZWVkLXVwIHNpbmNlIGluIHRoZSBj
b21tb24gY2FzZSB0aGUgdG90YWwgbnVtYmVyCisgICAgICAgIG9mIGluc3RydWN0aW9uIGJ5dGVz
IG5lZWRlZCB0byBsb2FkIHRoZSBzY29wZSBmcm9tIHRoZSBzdGFjayBpcyBhYm91dCBlcXVhbCB0
byB0aGUKKyAgICAgICAgbnVtYmVyIG9mIGluc3RydWN0aW9uIGJ5dGVzIG5lZWRlZCB0byBtYXRl
cmlhbGl6ZSB0aGUgYWJzb2x1dGUgYWRkcmVzcyBvZiBhIHNjb3BlZAorICAgICAgICB2YXJpYWJs
ZS4gQnV0LCB0aGlzIGlzIGEgbmVjZXNzYXJ5IHByZXJlcXVpc2l0ZSB0bworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI0NjMwLCBzbyBpdCdzIHByb2Jh
Ymx5IGEgZ29vZCBpZGVhIGFueXdheS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgor
ICAgICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOgorICAgICAgICAoSlNDOjpwYWRPcGNvZGVOYW1l
KToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50Lmg6CisgICAgICAgIChKU0M6OldhdGNo
cG9pbnRTZXQ6Om5vdGlmeVdyaXRlKToKKyAgICAgICAgKEpTQzo6SW5saW5lV2F0Y2hwb2ludFNl
dDo6bm90aWZ5V3JpdGUpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2x2ZVNjb3Bl
KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjo6OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkNTRVBoYXNlOjpzY29wZWRWYXJMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6
OkNTRVBoYXNlOjpzY29wZWRWYXJTdG9yZUVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6Z2V0TG9jYWxMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6
OkNTRVBoYXNlOjpzZXRMb2NhbFN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICog
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZp
eHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6dHJ5R2V0UmVnaXN0ZXJzKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAg
ICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhck51bWJl
cik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzU3ltYm9sVGFibGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnN5bWJvbFRhYmxlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2Fm
ZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlOjpo
YW5kbGUpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlND
OjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldENsb3N1cmVSZWdpc3RlcnMp
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0pT
QWN0aXZhdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmNyZWF0ZSk6CisgICAg
ICAgICogcnVudGltZS9KU1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6YWJzdHJhY3RBY2Nlc3Mp
OgorICAgICAgICAoSlNDOjpKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTY29wZS5oOgorICAgICAgICAoSlNDOjpSZXNvbHZlT3A6OlJlc29sdmVPcCk6Cisg
ICAgICAgICogcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTVmFy
aWFibGVPYmplY3Q6OnJlZ2lzdGVycyk6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJsZS5j
cHA6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpTeW1ib2xUYWJsZSk6CisgICAgICAgICog
cnVudGltZS9TeW1ib2xUYWJsZS5oOgorCiAyMDEzLTExLTI3ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgRmluYWxseSBmaXggc29tZSBvYnZpb3VzIEJhcnRsZXR0
IGJ1Z3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCShyZXZpc2lvbiAxNTk4MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2NSw2ICsxMzY1LDcgQEAgdm9pZCBD
b2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAgICAgICAgKytpdDsgLy8g
ZGVwdGgKICAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgInJlc29sdmVfc2NvcGUiKTsKICAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcywg
JWQiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDAp
KS5kYXRhKCksIHJlc29sdmVNb2RlQW5kVHlwZSk7CisgICAgICAgICAgICArK2l0OwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZTog
ewpAQCAtMTc2NCw2ICsxNzY1LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0
YWJsZSogbwogICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNv
bHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHNjb3BlLCBpZGVudCwgR2V0LCB0eXBl
KTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgM10udS5vcGVyYW5kID0gb3AudHlwZTsK
ICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gb3AuZGVwdGg7Cisg
ICAgICAgICAgICBpZiAob3AuYWN0aXZhdGlvbikKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDVdLnUuYWN0aXZhdGlvbi5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3AuYWN0
aXZhdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xNzgxLDcgKzE3
ODQsOSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAg
ICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFjdFJlc29sdmUobV9nbG9iYWxPYmpl
Y3QtPmdsb2JhbEV4ZWMoKSwgc2NvcGUsIGlkZW50LCBHZXQsIG1vZGVBbmRUeXBlLnR5cGUoKSk7
CiAKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gUmVzb2x2ZU1v
ZGVBbmRUeXBlKG1vZGVBbmRUeXBlLm1vZGUoKSwgb3AudHlwZSkub3BlcmFuZCgpOwotICAgICAg
ICAgICAgaWYgKG9wLnN0cnVjdHVyZSkKKyAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2Jh
bFZhciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAg
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRj
aHBvaW50U2V0OworICAgICAgICAgICAgZWxzZSBpZiAob3Auc3RydWN0dXJlKQogICAgICAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4
ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZd
LnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xNzk0LDEwICsxNzk5LDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2so
U2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0gSlNTY29wZTo6
YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIHNjb3BlLCBpZGVu
dCwgUHV0LCBtb2RlQW5kVHlwZS50eXBlKCkpOwogCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNb
aSArIDRdLnUub3BlcmFuZCA9IFJlc29sdmVNb2RlQW5kVHlwZShtb2RlQW5kVHlwZS5tb2RlKCks
IG9wLnR5cGUpLm9wZXJhbmQoKTsKLSAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZh
ciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoIW9wLnN0cnVjdHVyZSk7CisgICAgICAgICAgICBpZiAob3AudHlw
ZSA9PSBHbG9iYWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKQogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0
ID0gb3Aud2F0Y2hwb2ludFNldDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAob3Auc3RydWN0dXJl
KQorICAgICAgICAgICAgZWxzZSBpZiAob3Auc3RydWN0dXJlKQogICAgICAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUs
IG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRl
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0yMTgzLDYgKzIxODcsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KAogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQg
Z2V0IGNhbGxlZSB3aXRoIGZ1bmN0aW9uICVwLlxuIiwgY3VySW5zdHJ1Y3Rpb25bMl0udS5qc0Nl
bGwuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzJdLnUuanNDZWxsLmNs
ZWFyKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIG9wX3Jlc29s
dmVfc2NvcGU6IHsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQWN0aXZhdGlv
bj4mIGFjdGl2YXRpb24gPSBjdXJJbnN0cnVjdGlvbls1XS51LmFjdGl2YXRpb247CisgICAgICAg
ICAgICAgICAgaWYgKCFhY3RpdmF0aW9uIHx8IEhlYXA6OmlzTWFya2VkKGFjdGl2YXRpb24uZ2V0
KCkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJp
bmcgZGVhZCBhY3RpdmF0aW9uICVwLlxuIiwgYWN0aXZhdGlvbi5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgYWN0aXZhdGlvbi5jbGVhcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKICAgICAgICAgICAg
IGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAgICAgICAgICAgUmVzb2x2ZU1vZGVBbmRU
eXBlIG1vZGVBbmRUeXBlID0KQEAgLTIxOTMsNyArMjIwNiw3IEBAIHZvaWQgQ29kZUJsb2NrOjpm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSB8
fCBIZWFwOjppc01hcmtlZChzdHJ1Y3R1cmUuZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgTExJbnQgc2NvcGUgYWNjZXNzIHdpdGgg
c3RydWN0dXJlICVwLlxuIiwgc3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIkNsZWFyaW5nIHNjb3BlIGFjY2VzcyB3aXRoIHN0cnVjdHVyZSAlcC5cbiIsIHN0
cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgc3RydWN0dXJlLmNsZWFyKCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gMTU5ODI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExNyw2ICsxMTcsNyBAQCBzdHJ1Y3QgSW5zdHJ1Y3Rpb24gewogICAgICAgICBBcnJheUFs
bG9jYXRpb25Qcm9maWxlKiBhcnJheUFsbG9jYXRpb25Qcm9maWxlOwogICAgICAgICBPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZSogb2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7CiAgICAgICAgIFZhcmlh
YmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsKKyAgICAgICAgV3JpdGVCYXJyaWVyQmFz
ZTxKU0FjdGl2YXRpb24+IGFjdGl2YXRpb247CiAgICAgICAgIHZvaWQqIHBvaW50ZXI7CiAgICAg
ICAgIGJvb2wqIHByZWRpY2F0ZVBvaW50ZXI7CiAgICAgfSB1OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24gMTU5ODI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyAr
MTY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ob3BfZ2V0X3BuYW1lcywgNikgXAog
ICAgIG1hY3JvKG9wX25leHRfcG5hbWUsIDcpIFwKICAgICBcCi0gICAgbWFjcm8ob3BfcmVzb2x2
ZV9zY29wZSwgNSkgXAorICAgIG1hY3JvKG9wX3Jlc29sdmVfc2NvcGUsIDYpIFwKICAgICBtYWNy
byhvcF9nZXRfZnJvbV9zY29wZSwgOCkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCiAgICAg
bWFjcm8ob3BfcHV0X3RvX3Njb3BlLCA3KSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxNTk4MjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDgsNiArMTA4LDE0IEBAIHB1YmxpYzoKICAgICAgICAgZmlyZUFsbFNsb3coKTsKICAgICB9
CiAgICAgCisgICAgdm9pZCBub3RpZnlXcml0ZSgpCisgICAgeworICAgICAgICBpZiAoc3RhdGUo
KSA9PSBDbGVhcldhdGNocG9pbnQpCisgICAgICAgICAgICBzdGFydFdhdGNoaW5nKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGZpcmVBbGwoKTsKKyAgICB9CisKICAgICBpbnQ4X3QqIGFk
ZHJlc3NPZlN0YXRlKCkgeyByZXR1cm4gJm1fc3RhdGU7IH0KICAgICBpbnQ4X3QqIGFkZHJlc3NP
ZlNldElzTm90RW1wdHkoKSB7IHJldHVybiAmbV9zZXRJc05vdEVtcHR5OyB9CiAgICAgCkBAIC0y
MDEsNiArMjA5LDE5IEBAIHB1YmxpYzoKICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
ICAgICB9CiAgICAgCisgICAgdm9pZCBub3RpZnlXcml0ZSgpCisgICAgeworICAgICAgICBpZiAo
aXNGYXQoKSkgeworICAgICAgICAgICAgZmF0KCktPm5vdGlmeVdyaXRlKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlY29kZVN0YXRlKG1fZGF0YSkgPT0g
Q2xlYXJXYXRjaHBvaW50KQorICAgICAgICAgICAgbV9kYXRhID0gZW5jb2RlU3RhdGUoSXNXYXRj
aGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kYXRhID0gZW5jb2RlU3RhdGUoSXNJ
bnZhbGlkYXRlZCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgfQorICAg
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IElzVGhpbkZsYWcgICAgICAg
ID0gMTsKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IFN0YXRlTWFzayAgICAgICAgID0gNjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNTk4MjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIxMiw2ICsxMjEyLDggQEAgUmVzb2x2ZVR5cGUgQnl0ZWNvZGVHZW5lcmF0b3I6OnJl
c29sdmVUeQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sdmVTY29w
ZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CisgICAg
bV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpKTsKKwogICAgIEFTU0VSVCghbV9zeW1ib2xUYWJsZSB8fCAhbV9zeW1ib2xUYWJsZS0+
Y29udGFpbnMoaWRlbnRpZmllci5pbXBsKCkpIHx8IHJlc29sdmVUeXBlKCkgPT0gRHluYW1pYyk7
CiAKICAgICAvLyByZXNvbHZlX3Njb3BlIGRzdCwgaWQsIFJlc29sdmVUeXBlLCBkZXB0aApAQCAt
MTIyMCw2ICsxMjIyLDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNv
bAogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudChpZGVudGlmaWVyKSk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVUeXBlKCkpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZCgwKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgcmV0dXJu
IGRzdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTU5ODI2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ1LDYgKzExNDUsOSBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBtX2dyYXBoLCBtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkp
OwogICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBicmVh
azsKKyAgICAgICAgCisgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6Cisg
ICAgICAgIGJyZWFrOwogICAgIAogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgogICAgICAgICBm
b3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0FyZ3VtZW50cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTU5ODI2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMu
aCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgor
I2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCkBA
IC0zMDQ2LDkgKzMwNDcsMTggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgY2VsbENvbnN0
YW50KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGdldFNjb3BlKG1faW5saW5lU3RhY2tUb3At
Pm1fY29kZUJsb2NrLT5uZWVkc0FjdGl2YXRpb24oKSwgZGVwdGgpKTsKKyAgICAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgICAgICBK
U0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5hY3RpdmF0
aW9uLmdldCgpOworICAgICAgICAgICAgICAgIGlmIChhY3RpdmF0aW9uCisgICAgICAgICAgICAg
ICAgICAgICYmIGFjdGl2YXRpb24tPnN5bWJvbFRhYmxlKCktPm1fYWN0aXZhdGlvbkFsbG9jYXRl
ZE9uY2UuaXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChB
Y3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQsIE9wSW5mbyhhY3RpdmF0aW9uLT5zeW1ib2xU
YWJsZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwg
Y2VsbENvbnN0YW50KGFjdGl2YXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0
KSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0U2NvcGUobV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2stPm5lZWRzQWN0aXZhdGlvbigpLCBkZXB0aCkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBEeW5hbWljOgogICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0zMDYzLDE0ICszMDczLDIwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmll
cnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKICAgICAgICAgICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gUmVzb2x2ZU1vZGVBbmRUeXBlKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQp
LnR5cGUoKTsKIAotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IDA7CisgICAgICAgICAgICBXYXRjaHBvaW50U2V0KiB3
YXRjaHBvaW50cyA9IDA7CiAgICAgICAgICAgICB1aW50cHRyX3Qgb3BlcmFuZDsKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgc3Ry
dWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUuc3RydWN0dXJlLmdldCgpOworICAgICAg
ICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0g
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgICAgICAgICAgICAgd2F0
Y2hwb2ludHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0OworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlID0gY3VycmVudElu
c3RydWN0aW9uWzVdLnUuc3RydWN0dXJlLmdldCgpOwogICAgICAgICAgICAgICAgIG9wZXJhbmQg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY3VycmVudEluc3RydWN0aW9uWzZdLnUucG9p
bnRlcik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTSh3YXRjaHBv
aW50cyk7IC8vIFdlIHdpbGwgdXNlIHRoaXMgaW4gdGhlIGZ1dHVyZS4gRm9yIG5vdyB3ZSBzZXQg
aXQgYXMgYSB3YXkgb2YgZG9jdW1lbnRpbmcgdGhlIGZhY3QgdGhhdCB0aGF0J3Mgd2hhdCBpbmRl
eCA1IGlzIGluIEdsb2JhbFZhciBtb2RlLgorCiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKTsKIApAQCAtMzEwMSw3ICszMTE3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVk
aWN0aW9uKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
Ci0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFZhcmlhYmxl
V2F0Y2hwb2ludCwgT3BJbmZvKHdhdGNocG9pbnRTZXQpKTsKICAgICAgICAgICAgICAgICBpZiAo
c3BlY2lmaWNWYWx1ZS5pc0NlbGwoKSkKICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZS5hc0NlbGwoKSkpOwpAQCAt
MzExMCwxMSArMzEyNiwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
YXNlIENsb3N1cmVWYXI6Ci0gICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOgorICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczogeworICAgICAgICAgICAgICAgIE5vZGUqIHNjb3BlTm9kZSA9IGdldChWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUpKTsKICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCks
CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0Q2xvc3VyZVZhciwgT3BJbmZvKG9w
ZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbiksIAotICAgICAgICAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChHZXRDbG9zdXJlUmVnaXN0ZXJzLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldENsb3N1cmVSZWdpc3Rl
cnMsIHNjb3BlTm9kZSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGNhc2UgRHluYW1pYzoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE1OTgyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjcsNyArMjI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAg
IAotICAgIE5vZGUqIHNjb3BlZFZhckxvYWRFbGltaW5hdGlvbihOb2RlKiByZWdpc3RlcnMsIHVu
c2lnbmVkIHZhck51bWJlcikKKyAgICBOb2RlKiBzY29wZWRWYXJMb2FkRWxpbWluYXRpb24oTm9k
ZSogcmVnaXN0ZXJzLCBpbnQgdmFyTnVtYmVyKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2N1cnJlbnRCbG9jay0+YXQoaSk7CkBAIC0yOTYsNyArMjk2LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIE5vZGUqIHNjb3BlZFZhclN0b3JlRWxpbWlu
YXRpb24oTm9kZSogc2NvcGUsIE5vZGUqIHJlZ2lzdGVycywgdW5zaWduZWQgdmFyTnVtYmVyKQor
ICAgIE5vZGUqIHNjb3BlZFZhclN0b3JlRWxpbWluYXRpb24oTm9kZSogc2NvcGUsIE5vZGUqIHJl
Z2lzdGVycywgaW50IHZhck51bWJlcikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJy
ZW50QmxvY2stPmF0KGkpOwpAQCAtMzE2LDcgKzMxNiw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpCiAgICAgICAgICAg
ICAgICAgICAgICYmIHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KHZhck51bWJlcikpCkBAIC04MjksNiArODMwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgICAgICAgICBjYXNlIFB1
dENsb3N1cmVWYXI6CiAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4obm9kZS0+dmFyTnVtYmVyKCkpID09IGxvY2FsKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKQEAgLTg4Miw2ICs4ODQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgorICAgICAgICAg
ICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KG5vZGUtPnZhck51bWJlcigpKSA9PSBsb2NhbCkKICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0Lm1heUJlQWNjZXNzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJl
dmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsOSArMTU1LDE0IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CiAgICAg
Y2FzZSBDcmVhdGVBcmd1bWVudHM6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAg
IHdyaXRlKFdhdGNocG9pbnRfZmlyZSk7CiAgICAgICAgIHJlYWQoR0NTdGF0ZSk7CiAgICAgICAg
IHdyaXRlKEdDU3RhdGUpOwogICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgQWN0
aXZhdGlvbkFsbG9jYXRpb25XYXRjaHBvaW50OgorICAgICAgICByZWFkKFdhdGNocG9pbnRfZmly
ZSk7CisgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZXNlIGFyZSBmb3J3YXJkLWV4aXRpbmcg
bm9kZXMgdGhhdCBhc3N1bWUgdGhhdCB0aGUgc3Vic2VxdWVudCBpbnN0cnVjdGlvbgogICAgIC8v
IGlzIGEgTW92SGludCwgYW5kIHRoZXkgdHJ5IHRvIHJvbGwgZm9yd2FyZCBvdmVyIHRoaXMgTW92
SGludCBpbiB0aGVpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCShyZXZpc2lvbiAxNTk4MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTQsNiArOTU0LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgY2FzZSBFeHRyYWN0T1NS
RW50cnlMb2NhbDoKICAgICAgICAgY2FzZSBMb29wSGludDoKKyAgICAgICAgY2FzZSBBY3RpdmF0
aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICBicmVhazsKICNlbHNlCiAgICAg
ICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTU5ODI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJGdWxsQnl0ZWNv
ZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCIKICNpbmNs
dWRlICJKSVQuaCIKKyNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJPcGVyYW5k
c0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1h
UHJpbnRlci5oPgpAQCAtNzIyLDYgKzcyMywxOCBAQCB1bnNpZ25lZCBHcmFwaDo6cmVxdWlyZWRS
ZWdpc3RlckNvdW50Rm9yCiAgICAgcmV0dXJuIHN0ZDo6bWF4KGZyYW1lUmVnaXN0ZXJDb3VudCgp
LCByZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCkpOwogfQogCitXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KiBHcmFwaDo6dHJ5R2V0UmVnaXN0ZXJzKE5vZGUqIG5vZGUpCit7CisgICAgaWYg
KCFub2RlLT5oYXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBKU0FjdGl2YXRp
b24qIGFjdGl2YXRpb24gPSBqc0R5bmFtaWNDYXN0PEpTQWN0aXZhdGlvbio+KHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGUpKTsKKyAgICBpZiAoIWFjdGl2YXRpb24pCisgICAgICAgIHJldHVybiAwOwor
ICAgIGlmICghYWN0aXZhdGlvbi0+aXNUb3JuT2ZmKCkpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBhY3RpdmF0aW9uLT5yZWdpc3RlcnMoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtNzkxLDYgKzc5MSw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCByZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCk7CiAgICAgdW5zaWduZWQgcmVxdWlyZWRS
ZWdpc3RlckNvdW50Rm9yRXhlY3V0aW9uQW5kRXhpdCgpOwogICAgIAorICAgIFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4qIHRyeUdldFJlZ2lzdGVycyhOb2RlKik7CisgICAgCiAgICAgVk0mIG1f
dm07CiAgICAgUGxhbiYgbV9wbGFuOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTU5ODI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0Miw3
ICs3NDIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBvcCgpID09IEdldENsb3N1
cmVWYXIgfHwgb3AoKSA9PSBQdXRDbG9zdXJlVmFyOwogICAgIH0KIAotICAgIHVuc2lnbmVkIHZh
ck51bWJlcigpCisgICAgaW50IHZhck51bWJlcigpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFz
VmFyTnVtYmVyKCkpOwogICAgICAgICByZXR1cm4gbV9vcEluZm87CkBAIC03NTcsNyArNzU3LDcg
QEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0
ZUJhcnJpZXI8VW5rbm93bj4qPihtX29wSW5mbyk7CiAgICAgfQotCisgICAgCiAgICAgYm9vbCBo
YXNSZXN1bHQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZmxhZ3MgJiBOb2RlUmVzdWx0TWFz
azsKQEAgLTEwNjEsNiArMTA2MSwxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBt
X29wSW5mbzsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNTeW1ib2xUYWJsZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gb3AoKSA9PSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ7Cisg
ICAgfQorICAgIAorICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgpCisgICAgeworICAgICAg
ICBBU1NFUlQoaGFzU3ltYm9sVGFibGUoKSk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PFN5bWJvbFRhYmxlKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKICAgICBib29sIGhhc0Fy
cmF5TW9kZSgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTg3
LDYgKzE4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhO
b3RpZnlXcml0ZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFZhcmlhYmxlV2F0Y2hw
b2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFZhckluamVjdGlvbldhdGNocG9p
bnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhBY3RpdmF0aW9uQWxsb2NhdGlvbldh
dGNocG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDaGVja0Z1bmN0aW9uLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODMsNiArNTgzLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgY2FzZSBMb29w
SGludDoKICAgICAgICAgY2FzZSBOb3RpZnlXcml0ZToKKyAgICAgICAgY2FzZSBBY3RpdmF0aW9u
QWxsb2NhdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICAvLyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IGFscmVhZHkgaGFzIGEgcHJl
ZGljdGlvbi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCShyZXZpc2lvbiAxNTk4MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQzLDYgKzI0Myw3IEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEludDUyVG9WYWx1
ZToKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6Cisg
ICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFsOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lv
biAxNTk4MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjg2LDYgKzM2ODYsMTQgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBHZXRDbG9zdXJlUmVnaXN0ZXJzOiB7CisgICAgICAgIGlmIChXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiByZWdpc3RlcnMgPSBtX2ppdC5ncmFwaCgpLnRyeUdldFJlZ2lzdGVycyhub2RlLT5j
aGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihyZWdpc3RlcnMpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
ICAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CkBAIC0zNzIwLDcgKzM3Mjgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICAgICAg
bV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVnaXN0ZXJz
R1BSLCBub2RlLT52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpKTsKICAgICAgICAgbV9qaXQu
c3RvcmUzMih2YWx1ZVBheWxvYWRHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQ
Uiwgbm9kZS0+dmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICB3cml0
ZUJhcnJpZXIoc2NvcGVHUFIsIHZhbHVlVGFnR1BSLCBub2RlLT5jaGlsZDIoKSwgV3JpdGVCYXJy
aWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOworICAgICAgICB3cml0ZUJhcnJpZXIo
c2NvcGVHUFIsIHZhbHVlVGFnR1BSLCBub2RlLT5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yVmFy
aWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtNDM0NSw2ICs0MzUzLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
KyAgICBjYXNlIEFjdGl2YXRpb25BbGxvY2F0aW9uV2F0Y2hwb2ludDogeworICAgICAgICBub1Jl
c3VsdChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIENy
ZWF0ZUFyZ3VtZW50czogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZh
bHVlLCBQYXlsb2FkV29yZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5OTAsNiArMzk5MCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6IHsK
KyAgICAgICAgaWYgKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZ2lzdGVycyA9IG1faml0
LmdyYXBoKCkudHJ5R2V0UmVnaXN0ZXJzKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyKHJlZ2lzdGVycyksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzdG9yYWdlUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgc2Nv
cGVHUFIgPSBzY29wZS5ncHIoKTsKQEAgLTQ2MjAsNiArNDYyOCwxMSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCisgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6IHsKKyAgICAgICAg
bm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2Fz
ZSBDcmVhdGVBcmd1bWVudHM6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNl
LCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRD
b2xsZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1OTgyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw2ICsxMjYsMTAgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGFkZExhemlseShnbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQWN0aXZhdGlv
bkFsbG9jYXRpb25XYXRjaHBvaW50OgorICAgICAgICAgICAgYWRkTGF6aWx5KG1fbm9kZS0+c3lt
Ym9sVGFibGUoKS0+bV9hY3RpdmF0aW9uQWxsb2NhdGVkT25jZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAJKHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBAIGlu
bGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIENoZWNrRnVu
Y3Rpb246CiAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgogICAgIGNhc2UgQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6CisgICAgY2FzZSBBY3RpdmF0aW9uQWxsb2NhdGlvbldhdGNocG9pbnQ6CiAg
ICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICAg
ICAgLy8gVGhlc2UgYXJlIE9LLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTksNiArMzk5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IFZhcmlhYmxlV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFj
dGl2YXRpb25BbGxvY2F0aW9uV2F0Y2hwb2ludDoKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEdldE15U2NvcGU6CiAgICAgICAgICAgICBjb21waWxlR2V0TXlTY29wZSgpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yMTkyLDYgKzIxOTQsMTEgQEAgcHJpdmF0ZToKICAgICAKICAg
ICB2b2lkIGNvbXBpbGVHZXRDbG9zdXJlUmVnaXN0ZXJzKCkKICAgICB7CisgICAgICAgIGlmIChX
cml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWdpc3RlcnMgPSBtX2dyYXBoLnRyeUdldFJlZ2lz
dGVycyhtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIHNldFN0b3JhZ2Uo
bV9vdXQuY29uc3RJbnRQdHIocmVnaXN0ZXJzKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIHNldFN0b3JhZ2UobV9vdXQubG9hZFB0cigKICAgICAg
ICAgICAgIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNWYXJpYWJsZU9iamVj
dF9yZWdpc3RlcnMpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTU5
ODI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTIwMDYsMzkgKzIwMDYsMzkgQEAgX2xsaW50X29w
X3Jlc29sdmVfc2NvcGU6CiAjckdsb2JhbFByb3BlcnR5OgogICAgIGJpbmVxIHQwLCBHbG9iYWxQ
cm9wZXJ0eSwgLnJHbG9iYWxWYXIKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRj
aCg1KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yR2xvYmFsVmFyOgogICAgIGJpbmVxIHQwLCBHbG9i
YWxWYXIsIC5yQ2xvc3VyZVZhcgogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNo
KDUpCisgICAgZGlzcGF0Y2goNikKIAogLnJDbG9zdXJlVmFyOgogICAgIGJpbmVxIHQwLCBDbG9z
dXJlVmFyLCAuckdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHJlc29s
dmVTY29wZSgpCi0gICAgZGlzcGF0Y2goNSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MKICAgICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFtaWMpCiAgICAgZ2V0R2xvYmFsT2JqZWN0
KDEpCi0gICAgZGlzcGF0Y2goNSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3MsIC5yQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICB2YXJJbmpl
Y3Rpb25DaGVjayguckR5bmFtaWMpCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0
Y2goNSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgogICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJE
eW5hbWljCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnJEeW5hbWljKQogICAgIHJlc29sdmVTY29w
ZSgpCi0gICAgZGlzcGF0Y2goNSkKKyAgICBkaXNwYXRjaCg2KQogCiAuckR5bmFtaWM6CiAgICAg
Y2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKLSAgICBkaXNwYXRj
aCg1KQorICAgIGRpc3BhdGNoKDYpCiAKIAogbWFjcm8gbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhv
cGVyYW5kLCBzbG93UGF0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxNTk4MjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29y
a2luZyBjb3B5KQpAQCAtMTgzMSwzOSArMTgzMSwzOSBAQCBfbGxpbnRfb3BfcmVzb2x2ZV9zY29w
ZToKICNyR2xvYmFsUHJvcGVydHk6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAuckds
b2JhbFZhcgogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlz
cGF0Y2goNikKIAogLnJHbG9iYWxWYXI6CiAgICAgYmluZXEgdDAsIEdsb2JhbFZhciwgLnJDbG9z
dXJlVmFyCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNSkKKyAgICBkaXNw
YXRjaCg2KQogCiAuckNsb3N1cmVWYXI6CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXIsIC5yR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAg
ICBkaXNwYXRjaCg1KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yR2xvYmFsUHJvcGVydHlXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MsIC5yR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZhcklu
amVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNw
YXRjaCg1KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKICAgICBiaW5lcSB0MCwgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5y
RHluYW1pYykKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg1KQorICAgIGRp
c3BhdGNoKDYpCiAKIC5yQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmlu
ZXEgdDAsIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckR5bmFtaWMKICAgICB2
YXJJbmplY3Rpb25DaGVjayguckR5bmFtaWMpCiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBkaXNw
YXRjaCg1KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yRHluYW1pYzoKICAgICBjYWxsU2xvd1BhdGgo
X2xsaW50X3Nsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKQotICAgIGRpc3BhdGNoKDUpCisgICAgZGlz
cGF0Y2goNikKIAogCiBtYWNybyBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKG9wZXJhbmQsIHNsb3dQ
YXRoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9u
LmgJKHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QWN0aXZhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGNvZGVCbG9jay0+c3ltYm9s
VGFibGUoKTsKICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUpOworICAgICAgICBzeW1ib2xUYWJsZS0+bV9hY3RpdmF0aW9uQWxsb2NhdGVkT25jZS5u
b3RpZnlXcml0ZSgpOwogICAgICAgICBKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBuZXcgKAog
ICAgICAgICAgICAgTm90TnVsbCwKICAgICAgICAgICAgIGFsbG9jYXRlQ2VsbDxKU0FjdGl2YXRp
b24+KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJl
dmlzaW9uIDE1OTgyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxOSArNTMsMTkgQEAgc3RhdGljIGlubGluZSBib29s
IGFic3RyYWN0QWNjZXNzKEV4ZWNTdAogICAgIGlmIChKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24g
PSBqc0R5bmFtaWNDYXN0PEpTQWN0aXZhdGlvbio+KHNjb3BlKSkgewogICAgICAgICBpZiAoaWRl
bnQgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cykgewogICAgICAgICAgICAgLy8g
V2Uga25vdyB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCB0aGlzIGFjdGl2YXRpb24gc2NvcGUsIGJ1
dCB3ZSBkb24ndCBrbm93IGhvdyB0byBjYWNoZSBpdC4KLSAgICAgICAgICAgIG9wID0gUmVzb2x2
ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDApOworICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AoRHlu
YW1pYywgMCwgMCwgMCwgMCwgMCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
fQogCiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBhY3RpdmF0aW9uLT5zeW1ib2xU
YWJsZSgpLT5nZXQoaWRlbnQuaW1wbCgpKTsKICAgICAgICAgaWYgKGVudHJ5LmlzUmVhZE9ubHko
KSAmJiBnZXRPclB1dCA9PSBQdXQpIHsKICAgICAgICAgICAgIC8vIFdlIGtub3cgdGhlIHByb3Bl
cnR5IHdpbGwgYmUgYXQgdGhpcyBhY3RpdmF0aW9uIHNjb3BlLCBidXQgd2UgZG9uJ3Qga25vdyBo
b3cgdG8gY2FjaGUgaXQuCi0gICAgICAgICAgICBvcCA9IFJlc29sdmVPcChEeW5hbWljLCAwLCAw
LCAwLCAwKTsKKyAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDAs
IDApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
IWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShD
bG9zdXJlVmFyLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCBhY3RpdmF0aW9uLT5z
dHJ1Y3R1cmUoKSwgMCwgZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgICAgICAgICBvcCA9IFJlc29s
dmVPcChtYWtlVHlwZShDbG9zdXJlVmFyLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRo
LCAwLCBhY3RpdmF0aW9uLCAwLCBlbnRyeS5nZXRJbmRleCgpKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAKQEAgLTc5LDEyICs3OSwxMiBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgYWJzdHJhY3RBY2Nlc3MoRXhlY1N0CiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsK
ICAgICAgICAgICAgIGlmIChnZXRPclB1dCA9PSBQdXQgJiYgZW50cnkuaXNSZWFkT25seSgpKSB7
CiAgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgcHJvcGVydHkgd2lsbCBiZSBhdCBnbG9i
YWwgc2NvcGUsIGJ1dCB3ZSBkb24ndCBrbm93IGhvdyB0byBjYWNoZSBpdC4KLSAgICAgICAgICAg
ICAgICBvcCA9IFJlc29sdmVPcChEeW5hbWljLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICBvcCA9IFJlc29sdmVPcChEeW5hbWljLCAwLCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgb3AgPSBSZXNvbHZl
T3AoCi0gICAgICAgICAgICAgICAgbWFrZVR5cGUoR2xvYmFsVmFyLCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyksIGRlcHRoLCAwLCBlbnRyeS53YXRjaHBvaW50U2V0KCksCisgICAgICAgICAgICAg
ICAgbWFrZVR5cGUoR2xvYmFsVmFyLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAw
LCAwLCBlbnRyeS53YXRjaHBvaW50U2V0KCksCiAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGdsb2JhbE9iamVjdC0+cmVnaXN0ZXJBdChlbnRyeS5nZXRJbmRleCgp
KS5zbG90KCkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC05Niwx
NSArOTYsMTUgQEAgc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNTdAogICAg
ICAgICAgICAgfHwgKGdsb2JhbE9iamVjdC0+c3RydWN0dXJlKCktPmhhc1JlYWRPbmx5T3JHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSAmJiBnZXRPclB1dCA9PSBQdXQpKSB7
CiAgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBwcm9wZXJ0eSB3aWxsIGJlIGF0IGdsb2JhbCBz
Y29wZSwgYnV0IHdlIGRvbid0IGtub3cgaG93IHRvIGNhY2hlIGl0LgogICAgICAgICAgICAgQVNT
RVJUKCFzY29wZS0+bmV4dCgpKTsKLSAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBl
KEdsb2JhbFByb3BlcnR5LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAwLCAwLCAw
KTsKKyAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKEdsb2JhbFByb3BlcnR5LCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5
cGUoR2xvYmFsUHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIGdsb2Jh
bE9iamVjdC0+c3RydWN0dXJlKCksIDAsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICBv
cCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9wZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25D
aGVja3MpLCBkZXB0aCwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgMCwgMCwgc2xvdC5jYWNo
ZWRPZmZzZXQoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIG9wID0gUmVz
b2x2ZU9wKER5bmFtaWMsIDAsIDAsIDAsIDApOworICAgIG9wID0gUmVzb2x2ZU9wKER5bmFtaWMs
IDAsIDAsIDAsIDAsIDApOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNDIsNyArMTQyLDcg
QEAgSlNWYWx1ZSBKU1Njb3BlOjpyZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYwogCiBSZXNvbHZlT3Ag
SlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUs
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBHZXRPclB1dCBnZXRPclB1dCwgUmVzb2x2ZVR5cGUg
dW5saW5rZWRUeXBlKQogewotICAgIFJlc29sdmVPcCBvcChEeW5hbWljLCAwLCAwLCAwLCAwKTsK
KyAgICBSZXNvbHZlT3Agb3AoRHluYW1pYywgMCwgMCwgMCwgMCwgMCk7CiAgICAgaWYgKHVubGlu
a2VkVHlwZSA9PSBEeW5hbWljKQogICAgICAgICByZXR1cm4gb3A7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJldmlzaW9uIDE1OTgyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTYs
MTAgKzk2LDExIEBAIGlubGluZSBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKFJlc28KIH0K
IAogc3RydWN0IFJlc29sdmVPcCB7Ci0gICAgUmVzb2x2ZU9wKFJlc29sdmVUeXBlIHR5cGUsIHNp
emVfdCBkZXB0aCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCog
d2F0Y2hwb2ludFNldCwgdWludHB0cl90IG9wZXJhbmQpCisgICAgUmVzb2x2ZU9wKFJlc29sdmVU
eXBlIHR5cGUsIHNpemVfdCBkZXB0aCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTQWN0aXZhdGlv
biogYWN0aXZhdGlvbiwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCB1aW50
cHRyX3Qgb3BlcmFuZCkKICAgICAgICAgOiB0eXBlKHR5cGUpCiAgICAgICAgICwgZGVwdGgoZGVw
dGgpCiAgICAgICAgICwgc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAgLCBhY3RpdmF0aW9u
KGFjdGl2YXRpb24pCiAgICAgICAgICwgd2F0Y2hwb2ludFNldCh3YXRjaHBvaW50U2V0KQogICAg
ICAgICAsIG9wZXJhbmQob3BlcmFuZCkKICAgICB7CkBAIC0xMDgsNiArMTA5LDcgQEAgc3RydWN0
IFJlc29sdmVPcCB7CiAgICAgUmVzb2x2ZVR5cGUgdHlwZTsKICAgICBzaXplX3QgZGVwdGg7CiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uOwog
ICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsKICAgICB1aW50cHRyX3Qg
b3BlcmFuZDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zhcmlh
YmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxNTk4MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1ZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYg
KzQ2LDcgQEAgY2xhc3MgSlNWYXJpYWJsZU9iamVjdCA6IHB1YmxpYyBKU1N5bWJvbAogcHVibGlj
OgogICAgIHR5cGVkZWYgSlNTeW1ib2xUYWJsZU9iamVjdCBCYXNlOwogCisgICAgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiogcmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9yZWdpc3RlcnM7IH0KICAg
ICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiByZWdpc3RlckF0KGludCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9yZWdpc3RlcnNbaW5kZXhdOyB9CiAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiBjb25zdCAqIGFkZHJlc3NPZlJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuICZtX3Jl
Z2lzdGVyczsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmNwcAkocmV2aXNpb24gMTU5ODI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw3IEBAIFN5
bWJvbFRhYmxlOjpTeW1ib2xUYWJsZShWTSYgdm0pCiAgICAgLCBtX3VzZXNOb25TdHJpY3RFdmFs
KGZhbHNlKQogICAgICwgbV9jYXB0dXJlU3RhcnQoMCkKICAgICAsIG1fY2FwdHVyZUVuZCgwKQor
ICAgICwgbV9hY3RpdmF0aW9uQWxsb2NhdGVkT25jZShDbGVhcldhdGNocG9pbnQpCiB7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2
aXNpb24gMTU5ODI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDk3LDYgKzQ5Nyw4IEBAIHByaXZhdGU6CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdhdGNocG9pbnRDbGVhbnVwPiBtX3dhdGNocG9pbnRDbGVhbnVwOwogCiBw
dWJsaWM6CisgICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2FjdGl2YXRpb25BbGxvY2F0ZWRPbmNl
OworICAgIAogICAgIG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOwogfTsKIApJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTU5ODI2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTMtMTEtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KKworICAgICAgICBJbmZlciBvbmUtdGltZSBzY29wZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDgxMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE9saXZlciBIdW50LgorCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1vbmUt
dGltZS1jbG9zdXJlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9p
bmZlci1vbmUtdGltZS1jbG9zdXJlLXRlbi12YXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXRlbi12YXJzLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10d28tdmFy
cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItb25lLXRp
bWUtY2xvc3VyZS10d28tdmFycy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2lu
ZmVyLW9uZS10aW1lLWNsb3N1cmUuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycy5qczogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10
d28tdmFycy5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5m
ZXItb25lLXRpbWUtY2xvc3VyZS5qczogQWRkZWQuCisKIDIwMTMtMTEtMjcgIFRoaWFnbyBkZSBC
YXJyb3MgTGFjZXJkYSAgPHRoaWFnby5sYWNlcmRhQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAg
QWRkaW5nIE1lZGlhQ29uc3RyYWludHNNb2NrIGNsYXNzCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10aW1l
LWNsb3N1cmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pT
UmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFy
cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lu
ZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXRlbi12
YXJzCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0
aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVu
LXZhcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLW9u
ZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10ZW4tdmFycy5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1j
bG9zdXJlLXR3by12YXJzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9z
dXJlLXR3by12YXJzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBA
CitKU1JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10d28tdmFycworCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXR3by12YXJzLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLXR3
by12YXJzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVy
LW9uZS10aW1lLWNsb3N1cmUtdHdvLXZhcnMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVn
cmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmZlci1v
bmUtdGltZS1jbG9zdXJlLXR3by12YXJzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtY2xvc3VyZS5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGlt
ZS1jbG9zdXJlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItb25lLXRpbWUtY2xvc3VyZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lu
ZmVyLW9uZS10aW1lLWRlZXAtY2xvc3VyZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1kZWVwLWNsb3N1cmUtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGlt
ZS1kZWVwLWNsb3N1cmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAg
QEAKK0pTUmVncmVzcy9pbmZlci1vbmUtdGltZS1kZWVwLWNsb3N1cmUKKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUtZGVlcC1jbG9zdXJlLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1vbmUtdGltZS1kZWVwLWNsb3N1cmUuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItb25lLXRpbWUt
ZGVlcC1jbG9zdXJlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItb25lLXRpbWUtZGVlcC1j
bG9zdXJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItb25l
LXRpbWUtY2xvc3VyZS10ZW4tdmFycy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUtdGVuLXZhcnMuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMSBAQAorZnVuY3Rpb24gZm9vTWFrZXIoeFBhcmFt
KSB7CisgICAgdmFyIHggPSB4UGFyYW07CisgICAgdmFyIHgyID0geFBhcmFtICsgMTsKKyAgICB2
YXIgeDMgPSB4UGFyYW0gKyAyOworICAgIHZhciB4NCA9IHhQYXJhbSArIDM7CisgICAgdmFyIHg1
ID0geFBhcmFtICsgNDsKKyAgICB2YXIgeDYgPSB4UGFyYW0gKyA1OworICAgIHZhciB4NyA9IHhQ
YXJhbSArIDY7CisgICAgdmFyIHg4ID0geFBhcmFtICsgNzsKKyAgICB2YXIgeDkgPSB4UGFyYW0g
KyA4OworICAgIHZhciB4MTAgPSB4UGFyYW0gKyA5OworICAgIHJldHVybiBmdW5jdGlvbiAoeSkg
eworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkKKyAgICAgICAgICAgIHkg
Kz0geCArIHgyICsgeDMgKyB4NCArIHg1ICsgeDYgKyB4NyArIHg4ICsgeDkgKyB4MTA7CisgICAg
ICAgIHJldHVybiB5OworICAgIH0KK30KKwordmFyIGZvbyA9IGZvb01ha2VyKDQyKTsKKworbm9J
bmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFy
IHJlc3VsdCA9IGZvbyg1KTsKKyAgICBpZiAocmVzdWx0ICE9IDQ2NTAwNSkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9v
TWFrZXIoMjMpKDUpOworaWYgKHJlc3VsdCAhPSAyNzUwMDUpCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10d28tdmFycy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9z
dXJlLXR3by12YXJzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvaW5mZXItb25lLXRpbWUtY2xvc3VyZS10d28tdmFycy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIzIEBACitmdW5jdGlvbiBmb29NYWtlcih4UGFyYW0pIHsKKyAgICB2
YXIgeCA9IHhQYXJhbTsKKyAgICB2YXIgeDIgPSB4UGFyYW0gKyAxOworICAgIHJldHVybiBmdW5j
dGlvbiAoeSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkKKyAgICAg
ICAgICAgIHkgKz0geCArIHgyOworICAgICAgICByZXR1cm4geTsKKyAgICB9Cit9CisKK3ZhciBm
b28gPSBmb29NYWtlcig0Mik7CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28oNSk7CisgICAgaWYgKHJlc3Vs
dCAhPSAoNDIgKyA0MykgKiAxMDAwICsgNSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0OiAiICsgcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vTWFrZXIoMjMpKDUpOworaWYg
KHJlc3VsdCAhPSAoMjMgKyAyNCkgKiAxMDAwICsgNSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9pbmZlci1vbmUtdGltZS1jbG9zdXJlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1lLWNsb3N1cmUuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1vbmUt
dGltZS1jbG9zdXJlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAKK2Z1bmN0aW9u
IGZvb01ha2VyKHhQYXJhbSkgeworICAgIHZhciB4ID0geFBhcmFtOworICAgIHJldHVybiBmdW5j
dGlvbiAoeSkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkKKyAgICAg
ICAgICAgIHkgKz0geDsKKyAgICAgICAgcmV0dXJuIHk7CisgICAgfQorfQorCit2YXIgZm9vID0g
Zm9vTWFrZXIoNDIpOworCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKDUpOworICAgIGlmIChyZXN1bHQgIT0g
NDIgKiAxMDAwICsgNSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVz
dWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vTWFrZXIoMjMpKDUpOworaWYgKHJlc3VsdCAhPSAy
MyAqIDEwMDAgKyA1KQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLW9uZS10aW1l
LWRlZXAtY2xvc3VyZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1kZWVwLWNsb3N1cmUuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1vbmUtdGltZS1kZWVw
LWNsb3N1cmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorZnVuY3Rpb24gZm9v
TWFrZXIoYVBhcmFtKSB7CisgICAgdmFyIGEgPSBhUGFyYW07CisgICAgcmV0dXJuIGZ1bmN0aW9u
KGJQYXJhbSkgeworICAgICAgICB2YXIgYiA9IGJQYXJhbTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uKGNQYXJhbSkgeworICAgICAgICAgICAgdmFyIGMgPSBjUGFyYW07CisgICAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24oZFBhcmFtKSB7CisgICAgICAgICAgICAgICAgdmFyIGQgPSBkUGFyYW07
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVQYXJhbSkgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgZSA9IGVQYXJhbTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0
aW9uIChmUGFyYW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0gYSArIGIgKyBj
ICsgZCArIGUgKyBmUGFyYW07CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDA7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmICs9IGE7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZjsKKyAgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKyAgICB9Owor
fQorCit2YXIgZm9vID0gZm9vTWFrZXIoNDIpKDEpKDIpKDMpKDQpOworCitub0lubGluZShmb28p
OworCitmb3IgKHZhciBpID0gMDsgaSA8IDIwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0g
Zm9vKDUpOworICAgIGlmIChyZXN1bHQgIT0gNDIwNTcpCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvb01ha2VyKDIzKSgy
KSgzKSg0KSg1KSg1KTsKK2lmIChyZXN1bHQgIT0gMjMwNDIpCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0OiAiICsgcmVzdWx0Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>