<?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>114762</bug_id>
          
          <creation_ts>2013-04-17 13:37:22 -0700</creation_ts>
          <short_desc>fourthTier: all inline caches should thread-safe enough to allow a concurrent compilation thread to read them safely</short_desc>
          <delta_ts>2013-08-06 21:31:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>112839</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>xinchao.peng</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>877462</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-17 13:37:22 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877479</commentid>
    <comment_count>1</comment_count>
      <attachid>198609</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-17 14:06:36 -0700</bug_when>
    <thetext>Created attachment 198609
the patch

Not yet ready for review since I&apos;m still running perf tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877480</commentid>
    <comment_count>2</comment_count>
      <attachid>198609</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-17 14:07:56 -0700</bug_when>
    <thetext>Comment on attachment 198609
the patch

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

&gt; Source/JavaScriptCore/jit/JITStubs.cpp:2178
&gt; +    else {

I will revert this style goof.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877495</commentid>
    <comment_count>3</comment_count>
      <attachid>198611</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-17 14:21:03 -0700</bug_when>
    <thetext>Created attachment 198611
the patch

Still not ready for review.  I just did a few fixes, like implementing the generic version of weakCompareAndSwap over bytes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>877507</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-17 14:46:17 -0700</bug_when>
    <thetext>Looks sufficiently neutralish.

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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/fourthTier/OpenSource/WebKitBuild/Release/jsc (r148622)
&quot;Conf#2&quot; at /Volumes/Data/fromMiniMe/fourthTier/primary/OpenSource/WebKitBuild/Release/jsc (r148622)

Collected 12 samples per benchmark/VM, with 4 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                   Conf#2                                      
SunSpider:
   3d-cube                                        10.7732+-0.7529     ?     10.8990+-0.9224        ? might be 1.0117x slower
   3d-morph                                        9.9823+-0.8885     ?     10.5479+-0.8095        ? might be 1.0567x slower
   3d-raytrace                                    12.7587+-0.9596           12.3760+-0.8274          might be 1.0309x faster
   access-binary-trees                             2.4409+-0.5366            2.3562+-0.5066          might be 1.0360x faster
   access-fannkuch                                 9.4951+-0.7698            8.5674+-0.5061          might be 1.1083x faster
   access-nbody                                    4.9198+-0.3752     ?      5.5967+-0.6018        ? might be 1.1376x slower
   access-nsieve                                   5.1594+-0.3121     ?      5.7071+-0.6323        ? might be 1.1061x slower
   bitops-3bit-bits-in-byte                        2.2412+-0.3776            2.1458+-0.4400          might be 1.0444x faster
   bitops-bits-in-byte                             7.7304+-0.4993     ?      7.7334+-0.5442        ?
   bitops-bitwise-and                              3.2975+-0.6362     ?      3.4661+-0.6822        ? might be 1.0511x slower
   bitops-nsieve-bits                              4.8339+-0.5006     ?      5.2027+-0.7069        ? might be 1.0763x slower
   controlflow-recursive                           3.5442+-0.4818     ?      4.3113+-0.7373        ? might be 1.2164x slower
   crypto-aes                                      8.9056+-0.6071     ?      9.4226+-0.6975        ? might be 1.0581x slower
   crypto-md5                                      4.2070+-0.0690     !      5.1098+-0.5744        ! definitely 1.2146x slower
   crypto-sha1                                     3.9989+-0.6133            3.9405+-0.6392          might be 1.0148x faster
   date-format-tofte                              17.3577+-1.3181     ?     18.3363+-1.5610        ? might be 1.0564x slower
   date-format-xparb                              10.6231+-0.7370     ?     11.1372+-1.2858        ? might be 1.0484x slower
   math-cordic                                     4.5687+-0.5623            4.1780+-0.2841          might be 1.0935x faster
   math-partial-sums                              14.0246+-1.3121     ?     15.5887+-0.7774        ? might be 1.1115x slower
   math-spectral-norm                              3.7217+-0.5433            3.6799+-0.4566          might be 1.0114x faster
   regexp-dna                                     13.4874+-0.9232           13.2055+-0.8186          might be 1.0213x faster
   string-base64                                   5.8741+-0.7326            5.5280+-0.7045          might be 1.0626x faster
   string-fasta                                   12.5830+-0.8348     ?     12.6457+-0.9810        ?
   string-tagcloud                                17.0785+-1.2532     ?     17.3610+-0.8267        ? might be 1.0165x slower
   string-unpack-code                             32.5443+-2.2888           30.3825+-1.9038          might be 1.0712x faster
   string-validate-input                           9.5832+-0.5710     ^      8.1781+-0.6308        ^ definitely 1.1718x faster

   &lt;arithmetic&gt; *                                  9.0667+-0.3284     ?      9.1386+-0.2873        ? might be 1.0079x slower
   &lt;geometric&gt;                                     7.2184+-0.2548     ?      7.3315+-0.2477        ? might be 1.0157x slower
   &lt;harmonic&gt;                                      5.7588+-0.2265     ?      5.8350+-0.2167        ? might be 1.0132x slower

                                                     TipOfTree                   Conf#2                                      
V8Spider:
   crypto                                         98.2067+-2.2626     !    104.2140+-2.8089        ! definitely 1.0612x slower
   deltablue                                     142.8194+-9.2890     ?    150.9483+-8.1493        ? might be 1.0569x slower
   earley-boyer                                   89.3803+-5.0535     ?     90.9872+-4.8304        ? might be 1.0180x slower
   raytrace                                       72.6136+-3.5272           69.5225+-3.9035          might be 1.0445x faster
   regexp                                        113.4736+-6.3801     ?    113.7722+-5.4376        ?
   richards                                      134.9424+-6.5422          133.4757+-5.8802          might be 1.0110x faster
   splay                                          50.5034+-2.0854     ?     52.7329+-2.6118        ? might be 1.0441x slower

   &lt;arithmetic&gt;                                  100.2771+-2.6839     ?    102.2361+-1.9171        ? might be 1.0195x slower
   &lt;geometric&gt; *                                  94.9037+-2.3333     ?     96.5785+-1.5952        ? might be 1.0176x slower
   &lt;harmonic&gt;                                     89.1866+-2.0660     ?     90.6574+-1.5417        ? might be 1.0165x slower

                                                     TipOfTree                   Conf#2                                      
Octane and V8v7:
   encrypt                                        0.52861+-0.01990          0.49864+-0.01720         might be 1.0601x faster
   decrypt                                       10.77387+-0.16534    ?    10.90941+-0.17941       ? might be 1.0126x slower
   deltablue                             x2       0.68750+-0.01796    ?     0.68863+-0.01681       ?
   earley                                         0.93213+-0.01255    ?     0.96996+-0.03889       ? might be 1.0406x slower
   boyer                                         13.65013+-0.65114         12.94433+-0.15999         might be 1.0545x faster
   raytrace                              x2       4.68156+-0.21498    ?     4.74780+-0.24781       ? might be 1.0141x slower
   regexp                                x2      36.74121+-0.83399    ?    37.24425+-1.13091       ? might be 1.0137x slower
   richards                              x2       0.37891+-0.00634    ?     0.38478+-0.00909       ? might be 1.0155x slower
   splay                                 x2       0.65758+-0.02612    ?     0.66659+-0.03335       ? might be 1.0137x slower
   navier-stokes                         x2      12.46268+-0.15495    ?    12.80540+-0.31373       ? might be 1.0275x slower
   closure                                        0.35169+-0.05558    ?     0.35659+-0.05839       ? might be 1.0139x slower
   jquery                                         5.01616+-0.69583    ?     5.10675+-0.76303       ? might be 1.0181x slower
   gbemu                                 x2     287.18190+-17.21174       285.78391+-17.74520      
   box2d                                 x2      36.43667+-0.94683         36.22425+-0.84636       

V8v7:
   &lt;arithmetic&gt;                                   8.56898+-0.13079    ?     8.64983+-0.12523       ? might be 1.0094x slower
   &lt;geometric&gt; *                                  2.73193+-0.02610    ?     2.75016+-0.02116       ? might be 1.0067x slower
   &lt;harmonic&gt;                                     1.06501+-0.01425    ?     1.06880+-0.01532       ? might be 1.0036x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                  35.89585+-1.63302         35.81259+-1.66363         might be 1.0023x faster
   &lt;geometric&gt; *                                  4.93247+-0.09883    ?     4.95755+-0.09884       ? might be 1.0051x slower
   &lt;harmonic&gt;                                     1.20386+-0.03107    ?     1.21003+-0.03595       ? might be 1.0051x slower

                                                     TipOfTree                   Conf#2                                      
Kraken:
   ai-astar                                       564.016+-22.741           548.852+-26.473          might be 1.0276x faster
   audio-beat-detection                           271.087+-13.166           267.935+-15.064          might be 1.0118x faster
   audio-dft                                      359.598+-13.298     ?     387.805+-29.153        ? might be 1.0784x slower
   audio-fft                                      163.107+-6.692      ?     164.352+-4.663         ?
   audio-oscillator                               262.675+-12.257           258.578+-10.941          might be 1.0158x faster
   imaging-darkroom                               322.852+-14.686     ?     331.091+-13.220        ? might be 1.0255x slower
   imaging-desaturate                             189.341+-7.705            180.871+-10.651          might be 1.0468x faster
   imaging-gaussian-blur                          449.468+-31.862           438.416+-16.551          might be 1.0252x faster
   json-parse-financial                            89.767+-4.353      ?      91.340+-4.658         ? might be 1.0175x slower
   json-stringify-tinderbox                       117.635+-2.998      ?     118.585+-3.430         ?
   stanford-crypto-aes                            274.929+-9.222            263.918+-16.025          might be 1.0417x faster
   stanford-crypto-ccm                            119.097+-6.197      ?     124.912+-4.557         ? might be 1.0488x slower
   stanford-crypto-pbkdf2                         289.861+-13.921     ?     291.108+-13.613        ?
   stanford-crypto-sha256-iterative               127.304+-7.241      ?     130.271+-4.828         ? might be 1.0233x slower

   &lt;arithmetic&gt; *                                 257.196+-3.358            257.002+-3.752           might be 1.0008x faster
   &lt;geometric&gt;                                    223.973+-2.605      ?     224.630+-2.758         ? might be 1.0029x slower
   &lt;harmonic&gt;                                     194.187+-2.128      ?     195.746+-2.284         ? might be 1.0080x slower

                                                     TipOfTree                   Conf#2                                      
JSRegress:
   adapt-to-double-divide                         25.3017+-2.0167     ?     25.5738+-2.0607        ? might be 1.0108x slower
   aliased-arguments-getbyval                      1.0736+-0.2077            1.0026+-0.1462          might be 1.0708x faster
   allocate-big-object                             3.1486+-0.5895            2.8882+-0.4687          might be 1.0902x faster
   arity-mismatch-inlining                         0.9315+-0.2269            0.8802+-0.2071          might be 1.0582x faster
   array-access-polymorphic-structure              8.2992+-0.7990            7.9141+-0.7346          might be 1.0487x faster
   array-with-double-add                           6.8133+-0.7338            6.5764+-0.6513          might be 1.0360x faster
   array-with-double-increment                     4.7634+-0.6554            4.6154+-0.4589          might be 1.0321x faster
   array-with-double-mul-add                       8.1105+-0.5581     ?      8.5930+-0.3939        ? might be 1.0595x slower
   array-with-double-sum                           8.9950+-0.7045     ?      9.0182+-0.5771        ?
   array-with-int32-add-sub                       12.6781+-0.9069           12.3052+-0.4419          might be 1.0303x faster
   array-with-int32-or-double-sum                  8.7711+-0.7163     ?      8.7902+-0.5434        ?
   big-int-mul                                     5.5825+-0.6763            5.4768+-0.6071          might be 1.0193x faster
   boolean-test                                    5.0977+-0.5875     ?      5.1502+-0.5915        ? might be 1.0103x slower
   cast-int-to-double                             14.8425+-1.1230     ?     16.0399+-1.0950        ? might be 1.0807x slower
   cell-argument                                  16.0172+-1.1938           15.6231+-0.9089          might be 1.0252x faster
   cfg-simplify                                    4.2933+-0.4263     ?      4.7271+-0.6268        ? might be 1.1010x slower
   cmpeq-obj-to-obj-other                         11.8893+-0.9601     ?     12.7418+-0.8596        ? might be 1.0717x slower
   constant-test                                   9.7388+-0.5613            9.6625+-0.6959        
   direct-arguments-getbyval                       1.0562+-0.3271            0.9729+-0.1991          might be 1.0856x faster
   double-pollution-getbyval                      12.8150+-1.1972           12.0079+-0.7601          might be 1.0672x faster
   double-pollution-putbyoffset                    6.0374+-0.7701            6.0309+-0.6917        
   empty-string-plus-int                          12.6062+-0.8203     !     14.3878+-0.8777        ! definitely 1.1413x slower
   external-arguments-getbyval                     2.7412+-0.5916            2.4407+-0.3284          might be 1.1231x faster
   external-arguments-putbyval                     3.8867+-0.5553     ?      4.0535+-0.5437        ? might be 1.0429x slower
   Float32Array-matrix-mult                       15.8385+-0.6888     ?     16.3619+-1.1122        ? might be 1.0331x slower
   fold-double-to-int                             24.7382+-1.2906           23.5455+-1.3652          might be 1.0507x faster
   function-dot-apply                              3.9800+-0.6518            3.7141+-0.6022          might be 1.0716x faster
   function-test                                   5.7699+-0.6511     ?      5.9686+-0.7408        ? might be 1.0344x slower
   get-by-id-chain-from-try-block                  8.0133+-0.5624     ?      8.9817+-0.6651        ? might be 1.1208x slower
   HashMap-put-get-iterate-keys                  102.2048+-5.0722     ?    109.6164+-6.3441        ? might be 1.0725x slower
   HashMap-put-get-iterate                       107.1619+-6.1954     ?    110.7891+-4.5439        ? might be 1.0338x slower
   HashMap-string-put-get-iterate                 82.7761+-4.5444           80.2078+-4.8661          might be 1.0320x faster
   indexed-properties-in-objects                   5.2805+-0.6568            4.9070+-0.4738          might be 1.0761x faster
   inline-arguments-access                         1.4816+-0.2234     ?      1.6259+-0.4115        ? might be 1.0974x slower
   inline-arguments-local-escape                  25.8086+-1.9293     ?     26.8575+-1.4942        ? might be 1.0406x slower
   inline-get-scoped-var                           7.7334+-0.5407            7.2062+-0.7153          might be 1.0732x faster
   inlined-put-by-id-transition                   16.6553+-0.2585     ?     17.0550+-0.7717        ? might be 1.0240x slower
   int-or-other-abs-then-get-by-val               10.8286+-0.8712            9.7244+-0.7090          might be 1.1136x faster
   int-or-other-abs-zero-then-get-by-val          40.5876+-2.7099     ?     41.7003+-2.9785        ? might be 1.0274x slower
   int-or-other-add-then-get-by-val               10.6907+-0.5346     !     12.5845+-0.4341        ! definitely 1.1772x slower
   int-or-other-add                               12.1626+-0.7466           12.1310+-0.8930        
   int-or-other-div-then-get-by-val                8.3704+-0.5576     ?      8.7899+-0.6522        ? might be 1.0501x slower
   int-or-other-max-then-get-by-val               11.1460+-0.6125     ?     11.3571+-0.8223        ? might be 1.0189x slower
   int-or-other-min-then-get-by-val                9.5575+-0.6996     ?      9.9255+-0.6154        ? might be 1.0385x slower
   int-or-other-mod-then-get-by-val                9.2831+-0.4987            9.0938+-0.3757          might be 1.0208x faster
   int-or-other-mul-then-get-by-val                8.2409+-0.5250            8.1759+-0.6603        
   int-or-other-neg-then-get-by-val                9.8055+-0.4325            9.5058+-0.6032          might be 1.0315x faster
   int-or-other-neg-zero-then-get-by-val          40.9331+-2.5917           40.6453+-2.9694        
   int-or-other-sub-then-get-by-val               11.0429+-0.7352     ?     11.1979+-0.8853        ? might be 1.0140x slower
   int-or-other-sub                                9.3172+-0.7569            9.2757+-0.7517        
   int-overflow-local                             15.1200+-1.1562     ?     15.6340+-0.7867        ? might be 1.0340x slower
   Int16Array-bubble-sort                         54.2952+-2.9049     ?     57.5772+-0.9861        ? might be 1.0604x slower
   Int16Array-load-int-mul                         2.4510+-0.5453     ?      2.6050+-0.6645        ? might be 1.0628x slower
   Int8Array-load                                  5.4719+-0.6333     ?      5.8526+-0.6967        ? might be 1.0696x slower
   integer-divide                                 16.3649+-0.8985     ?     16.8948+-1.0491        ? might be 1.0324x slower
   integer-modulo                                  2.5957+-0.4867            2.4641+-0.4221          might be 1.0534x faster
   make-indexed-storage                            4.5676+-0.6015            4.4355+-0.4995          might be 1.0298x faster
   method-on-number                               26.8215+-1.8931           24.9067+-1.1704          might be 1.0769x faster
   nested-function-parsing-random                420.2076+-27.4093    ?    424.9766+-29.3867       ? might be 1.0113x slower
   nested-function-parsing                        52.3087+-3.4263     ?     53.2750+-4.5216        ? might be 1.0185x slower
   new-array-buffer-dead                           4.3082+-0.5686            4.0262+-0.5919          might be 1.0700x faster
   new-array-buffer-push                          12.3439+-1.0000           11.8319+-1.1610          might be 1.0433x faster
   new-array-dead                                 33.4362+-0.9490           32.5353+-2.6809          might be 1.0277x faster
   new-array-push                                  8.2143+-0.6605     ?      8.7602+-0.6099        ? might be 1.0665x slower
   number-test                                     5.0777+-0.6558            4.9625+-0.6016          might be 1.0232x faster
   object-closure-call                             8.6807+-0.4051     !     10.1376+-0.8897        ! definitely 1.1678x slower
   object-test                                     6.0050+-0.6591     ?      6.1622+-0.7019        ? might be 1.0262x slower
   poly-stricteq                                 110.2450+-2.0018          109.8285+-3.3010        
   polymorphic-structure                          21.7346+-1.3504     ?     23.7902+-1.1342        ? might be 1.0946x slower
   polyvariant-monomorphic-get-by-id              15.4141+-0.9650           14.8617+-0.6667          might be 1.0372x faster
   rare-osr-exit-on-local                         22.0829+-1.5925     !     24.4667+-0.6956        ! definitely 1.1080x slower
   register-pressure-from-osr                     36.8713+-1.5757     ^     32.8851+-1.4277        ^ definitely 1.1212x faster
   simple-activation-demo                         38.5390+-2.7533     ?     41.2185+-1.2459        ? might be 1.0695x slower
   slow-array-profile-convergence                  5.0100+-0.6991     ?      5.1050+-0.6707        ? might be 1.0190x slower
   slow-convergence                                4.7688+-0.7602            4.1473+-0.4916          might be 1.1499x faster
   sparse-conditional                              1.5460+-0.3089     ?      1.6908+-0.2650        ? might be 1.0937x slower
   splice-to-remove                               57.7990+-3.7626     ?     59.0822+-2.8042        ? might be 1.0222x slower
   string-concat-object                            2.9805+-0.4187     ?      3.0939+-0.2808        ? might be 1.0380x slower
   string-concat-pair-object                       3.1770+-0.5265            2.7198+-0.0424          might be 1.1681x faster
   string-concat-pair-simple                      18.6781+-1.3768           18.0079+-1.3392          might be 1.0372x faster
   string-concat-simple                           17.3103+-0.1950     !     18.9641+-1.3489        ! definitely 1.0955x slower
   string-cons-repeat                             11.6338+-0.9880           11.1892+-0.8615          might be 1.0397x faster
   string-cons-tower                              12.1271+-0.8269     ?     12.8342+-1.0835        ? might be 1.0583x slower
   string-equality                               120.8965+-9.1981     ?    125.2224+-3.3817        ? might be 1.0358x slower
   string-hash                                     2.8263+-0.1812     ?      3.1405+-0.4257        ? might be 1.1112x slower
   string-repeat-arith                            53.5491+-0.6551           53.5349+-2.8296        
   string-sub                                     95.1613+-4.3599     !    104.7923+-4.7190        ! definitely 1.1012x slower
   string-test                                     5.0047+-0.6573            4.9646+-0.6174        
   structure-hoist-over-transitions                3.8305+-0.5905            3.7142+-0.4848          might be 1.0313x faster
   tear-off-arguments-simple                       2.2737+-0.5667            2.1894+-0.4130          might be 1.0385x faster
   tear-off-arguments                              3.6298+-0.3333     ?      4.2440+-0.6852        ? might be 1.1692x slower
   temporal-structure                             23.2880+-1.0497     ?     23.7900+-1.2156        ? might be 1.0216x slower
   to-int32-boolean                               34.1202+-2.4273     ?     34.1966+-1.5382        ?
   undefined-test                                  5.1342+-0.6350            4.9934+-0.5581          might be 1.0282x faster

   &lt;arithmetic&gt;                                   23.4340+-0.5584     ?     23.8736+-0.5201        ? might be 1.0188x slower
   &lt;geometric&gt; *                                  10.6473+-0.3040     ?     10.7392+-0.2830        ? might be 1.0086x slower
   &lt;harmonic&gt;                                      5.8342+-0.1597            5.8334+-0.1966          might be 1.0001x faster

                                                     TipOfTree                   Conf#2                                      
All benchmarks:
   &lt;arithmetic&gt;                                   46.2020+-0.6356     ?     46.5232+-0.7133        ? might be 1.0070x slower
   &lt;geometric&gt;                                    12.8693+-0.3133     ?     12.9877+-0.2960        ? might be 1.0092x slower
   &lt;harmonic&gt;                                      4.1725+-0.1058     ?      4.1878+-0.1152        ? might be 1.0037x slower

                                                     TipOfTree                   Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                25.8772+-0.4952     ?     26.0788+-0.4600        ? might be 1.0078x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878085</commentid>
    <comment_count>5</comment_count>
      <attachid>198611</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-04-18 14:40:34 -0700</bug_when>
    <thetext>Comment on attachment 198611
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878089</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-18 14:47:40 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/148703</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914813</commentid>
    <comment_count>7</comment_count>
    <who name="Peng Xinchao">xinchao.peng</who>
    <bug_when>2013-08-06 02:46:01 -0700</bug_when>
    <thetext>at 32 bit ARM_THUMB2 ,Implement concurrent compilation thread , how i should do ?Do i need to add lock at writing profiler ?Where?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914845</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-06 06:40:54 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; at 32 bit ARM_THUMB2 ,Implement concurrent compilation thread , how i should do ?Do i need to add lock at writing profiler ?Where?

I don&apos;t think that concurrent compilation would be a speed up on 32-bit systems. You&apos;d have to add locking to value profiles. That&apos;s almost certainly a terrible idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915024</commentid>
    <comment_count>9</comment_count>
    <who name="Peng Xinchao">xinchao.peng</who>
    <bug_when>2013-08-06 20:25:36 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; at 32 bit ARM_THUMB2 ,Implement concurrent compilation thread , how i should do ?Do i need to add lock at writing profiler ?Where?
&gt; 
&gt; I don&apos;t think that concurrent compilation would be a speed up on 32-bit systems. You&apos;d have to add locking to value profiles. That&apos;s almost certainly a terrible idea

I try to add locking to value profile:
at function CodeBlock:CodeBlock()
  
    m_instructions = WTF::RefCountedArray&lt;Instruction&gt;(instructions);

---&gt;
   {
     ConcurrentJITLocker locker(m_lock);
     m_instructions = WTF::RefCountedArray&lt;Instruction&gt;(instructions);
  }

but it still happened crash。Where do I still need to motify ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915025</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-06 20:30:58 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; at 32 bit ARM_THUMB2 ,Implement concurrent compilation thread , how i should do ?Do i need to add lock at writing profiler ?Where?
&gt; &gt; 
&gt; &gt; I don&apos;t think that concurrent compilation would be a speed up on 32-bit systems. You&apos;d have to add locking to value profiles. That&apos;s almost certainly a terrible idea
&gt; 
&gt; I try to add locking to value profile:
&gt; at function CodeBlock:CodeBlock()
&gt; 
&gt;     m_instructions = WTF::RefCountedArray&lt;Instruction&gt;(instructions);
&gt; 
&gt; ---&gt;
&gt;    {
&gt;      ConcurrentJITLocker locker(m_lock);
&gt;      m_instructions = WTF::RefCountedArray&lt;Instruction&gt;(instructions);
&gt;   }
&gt; 
&gt; but it still happened crash。Where do I still need to motify ?

I&apos;m really confused.  How does your fix resolve the word-tearing problems when generated assembly code in the LLInt and baseline JIT attempts to store a 64-bit value into a value profile using two 32-bit stores?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915028</commentid>
    <comment_count>11</comment_count>
    <who name="Peng Xinchao">xinchao.peng</who>
    <bug_when>2013-08-06 20:41:01 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; at 32 bit ARM_THUMB2 ,Implement concurrent compilation thread , how i should do ?Do i need to add lock at writing profiler ?Where?
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t think that concurrent compilation would be a speed up on 32-bit systems. You&apos;d have to add locking to value profiles. That&apos;s almost certainly a terrible idea
&gt; &gt; 
&gt; &gt; I try to add locking to value profile:
&gt; &gt; at function CodeBlock:CodeBlock()
&gt; &gt; 
&gt; &gt;     m_instructions = WTF::RefCountedArray&lt;Instruction&gt;(instructions);
&gt; &gt; 
&gt; &gt; ---&gt;
&gt; &gt;    {
&gt; &gt;      ConcurrentJITLocker locker(m_lock);
&gt; &gt;      m_instructions = WTF::RefCountedArray&lt;Instruction&gt;(instructions);
&gt; &gt;   }
&gt; &gt; 
&gt; &gt; but it still happened crash。Where do I still need to motify ?
&gt; 
&gt; I&apos;m really confused.  How does your fix resolve the word-tearing problems when generated assembly code in the LLInt and baseline JIT attempts to store a 64-bit value into a value profile using two 32-bit stores

My fix is that i need to implement DFG thread in the 32 bit ARM_THUMB2 .
I think i need add lock to value profiles .so i do that .
do my doing have issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915030</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-06 21:01:50 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; at 32 bit ARM_THUMB2 ,Implement concurrent compilation thread , how i should do ?Do i need to add lock at writing profiler ?Where?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I don&apos;t think that concurrent compilation would be a speed up on 32-bit systems. You&apos;d have to add locking to value profiles. That&apos;s almost certainly a terrible idea
&gt; &gt; &gt; 
&gt; &gt; &gt; I try to add locking to value profile:
&gt; &gt; &gt; at function CodeBlock:CodeBlock()
&gt; &gt; &gt; 
&gt; &gt; &gt;     m_instructions = WTF::RefCountedArray&lt;Instruction&gt;(instructions);
&gt; &gt; &gt; 
&gt; &gt; &gt; ---&gt;
&gt; &gt; &gt;    {
&gt; &gt; &gt;      ConcurrentJITLocker locker(m_lock);
&gt; &gt; &gt;      m_instructions = WTF::RefCountedArray&lt;Instruction&gt;(instructions);
&gt; &gt; &gt;   }
&gt; &gt; &gt; 
&gt; &gt; &gt; but it still happened crash。Where do I still need to motify ?
&gt; &gt; 
&gt; &gt; I&apos;m really confused.  How does your fix resolve the word-tearing problems when generated assembly code in the LLInt and baseline JIT attempts to store a 64-bit value into a value profile using two 32-bit stores
&gt; 
&gt; My fix is that i need to implement DFG thread in the 32 bit ARM_THUMB2 .
&gt; I think i need add lock to value profiles .so i do that .
&gt; do my doing have issue?

Yes.  The issue is that the concurrent JIT depends on being on a 64-bit system, or more broadly, systems where doing atomic 64-bit stores to memory is cheap.  The 32-bit JIT and 32-bit LLInt have code that stores to value profiles using two 32-bit stores.  You would need to fix that, either by placing a lock in JITed code (and the LLInt) around stores to value profiles, or convert those stores to using 64-bit atomic stores (probably double strex would do it).  But that&apos;s probably not a good idea: the cost of doing locked/atomic 64-bit stores on 32-bit systems probably outweighs any benefit of doing concurrent JITing.  But, you&apos;re welcome to experiment with this; maybe it will work for you.  Certainly, your proposed fix doesn&apos;t accomplish what I&apos;m suggesting.

An alternative would be to drastically refactor the concurrent JIT to scrape all value profiles synchronously.  This would be a huge change, and I don&apos;t recommend it: again, the cost of doing this would probably outweigh the benefits of concurrent JIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915031</commentid>
    <comment_count>13</comment_count>
    <who name="Peng Xinchao">xinchao.peng</who>
    <bug_when>2013-08-06 21:27:27 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; &gt; at 32 bit ARM_THUMB2 ,Implement concurrent compilation thread , how i should do ?Do i need to add lock at writing profiler ?Where?
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; I don&apos;t think that concurrent compilation would be a speed up on 32-bit systems. You&apos;d have to add locking to value profiles. That&apos;s almost certainly a terrible idea
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I try to add locking to value profile:
&gt; &gt; &gt; &gt; at function CodeBlock:CodeBlock()
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt;     m_instructions = WTF::RefCountedArray&lt;Instruction&gt;(instructions);
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; ---&gt;
&gt; &gt; &gt; &gt;    {
&gt; &gt; &gt; &gt;      ConcurrentJITLocker locker(m_lock);
&gt; &gt; &gt; &gt;      m_instructions = WTF::RefCountedArray&lt;Instruction&gt;(instructions);
&gt; &gt; &gt; &gt;   }
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; but it still happened crash。Where do I still need to motify ?
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m really confused.  How does your fix resolve the word-tearing problems when generated assembly code in the LLInt and baseline JIT attempts to store a 64-bit value into a value profile using two 32-bit stores
&gt; &gt; 
&gt; &gt; My fix is that i need to implement DFG thread in the 32 bit ARM_THUMB2 .
&gt; &gt; I think i need add lock to value profiles .so i do that .
&gt; &gt; do my doing have issue?
&gt; 
&gt; Yes.  The issue is that the concurrent JIT depends on being on a 64-bit system, or more broadly, systems where doing atomic 64-bit stores to memory is cheap.  The 32-bit JIT and 32-bit LLInt have code that stores to value profiles using two 32-bit stores.  You would need to fix that, either by placing a lock in JITed code (and the LLInt) around stores to value profiles, or convert those stores to using 64-bit atomic stores (probably double strex would do it).  But that&apos;s probably not a good idea: the cost of doing locked/atomic 64-bit stores on 32-bit systems probably outweighs any benefit of doing concurrent JITing.  But, you&apos;re welcome to experiment with this; maybe it will work for you.  Certainly, your proposed fix doesn&apos;t accomplish what I&apos;m suggesting.
&gt; 
&gt; An alternative would be to drastically refactor the concurrent JIT to scrape all value profiles synchronously.  This would be a huge change, and I don&apos;t recommend it: again, the cost of doing this would probably outweigh the benefits of concurrent JIT.

If i do motification that you think , i guess that  performance of motified javascriptcore are not better than now .
Is my idea unnecessary? Do you thinks i have necessary to motify ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915032</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-06 21:31:01 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; at 32 bit ARM_THUMB2 ,Implement concurrent compilation thread , how i should do ?Do i need to add lock at writing profiler ?Where?
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; I don&apos;t think that concurrent compilation would be a speed up on 32-bit systems. You&apos;d have to add locking to value profiles. That&apos;s almost certainly a terrible idea
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; I try to add locking to value profile:
&gt; &gt; &gt; &gt; &gt; at function CodeBlock:CodeBlock()
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt;     m_instructions = WTF::RefCountedArray&lt;Instruction&gt;(instructions);
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; ---&gt;
&gt; &gt; &gt; &gt; &gt;    {
&gt; &gt; &gt; &gt; &gt;      ConcurrentJITLocker locker(m_lock);
&gt; &gt; &gt; &gt; &gt;      m_instructions = WTF::RefCountedArray&lt;Instruction&gt;(instructions);
&gt; &gt; &gt; &gt; &gt;   }
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; but it still happened crash。Where do I still need to motify ?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I&apos;m really confused.  How does your fix resolve the word-tearing problems when generated assembly code in the LLInt and baseline JIT attempts to store a 64-bit value into a value profile using two 32-bit stores
&gt; &gt; &gt; 
&gt; &gt; &gt; My fix is that i need to implement DFG thread in the 32 bit ARM_THUMB2 .
&gt; &gt; &gt; I think i need add lock to value profiles .so i do that .
&gt; &gt; &gt; do my doing have issue?
&gt; &gt; 
&gt; &gt; Yes.  The issue is that the concurrent JIT depends on being on a 64-bit system, or more broadly, systems where doing atomic 64-bit stores to memory is cheap.  The 32-bit JIT and 32-bit LLInt have code that stores to value profiles using two 32-bit stores.  You would need to fix that, either by placing a lock in JITed code (and the LLInt) around stores to value profiles, or convert those stores to using 64-bit atomic stores (probably double strex would do it).  But that&apos;s probably not a good idea: the cost of doing locked/atomic 64-bit stores on 32-bit systems probably outweighs any benefit of doing concurrent JITing.  But, you&apos;re welcome to experiment with this; maybe it will work for you.  Certainly, your proposed fix doesn&apos;t accomplish what I&apos;m suggesting.
&gt; &gt; 
&gt; &gt; An alternative would be to drastically refactor the concurrent JIT to scrape all value profiles synchronously.  This would be a huge change, and I don&apos;t recommend it: again, the cost of doing this would probably outweigh the benefits of concurrent JIT.
&gt; 
&gt; If i do motification that you think , i guess that  performance of motified javascriptcore are not better than now .
&gt; Is my idea unnecessary? Do you thinks i have necessary to motify ?

Let me put it this way: concurrent JIT is a modest speed-up (around 8%) on SunSpider.  It&apos;s about an 11% speed-up when you run V8v6 under the SunSpider harness.  It&apos;s not a speed-up on Octane or V8v6/v7 when run using Google&apos;s harness.  It&apos;s not a speed-up on other benchmarks to my knowledge.

It&apos;s probably not a good idea to do major architectural work entirely based on benchmarks, but what this tells us is that you&apos;re at best looking at a 10% speed-up.  That&apos;s great, but it&apos;s not worth it if you have to introduce horrible bugs in the process or put locks around basic operations in the LLInt and Baseline JIT.

But I may be wrong, and attempting to switch the baseline JIT to use two-word ldrex/strex for value profiles would be easy.  If that turns out to have low overhead then maybe this whole thing would be worth a shot.  I recommend performing that experiment, but only if you think that 10% speed-up is worth it for your purposes ... and only if you&apos;re willing to deal with the bug fallout.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198609</attachid>
            <date>2013-04-17 14:06:36 -0700</date>
            <delta_ts>2013-04-17 14:21:03 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35439</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4NjMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDEzLTA0LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogYWxsIGlubGluZSBjYWNoZXMgc2hvdWxkIHRocmVhZC1zYWZlIGVub3VnaCB0
byBhbGxvdyBhIGNvbmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkIHRvIHJlYWQgdGhlbSBzYWZl
bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDc2
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgRm9yIG1vc3QgaW5saW5lIGNhY2hlcyB0aGlzIGlzIGVhc3k6IHRoZSBpbmxpbmUgY2FjaGUg
aGFzIGEgY2xlYW4gdGVtcG9yYWwKKyAgICAgICAgc2VwYXJhdGlvbiBiZXR3ZWVuIGRvaW5nIHRo
ZSByZXF1ZXN0ZWQgYWN0aW9uICh3aGljaCBtYXkgdGFrZSBhbiB1bmJvdW5kZWQKKyAgICAgICAg
YW1vdW50IG9mIHRpbWUsIG1heSByZWN1cnNlLCBhbmQgbWF5IGRvIGFyYml0cmFyeSB0aGluZ3Mp
IGFuZCByZWNvcmRpbmcgdGhlCisgICAgICAgIHJlbGV2YW50IGluZm9ybWF0aW9uIGluIHRoZSBj
YWNoZS4gU28sIHdlIGp1c3QgcHV0IGxvY2tzIGFyb3VuZCB0aGUKKyAgICAgICAgcmVjb3JkaW5n
IGJpdC4gVGhhdCBwYXJ0IGlzIGFsd2F5cyBPKDEpIGFuZCBkb2VzIG5vdCByZWN1cnNlLiBUaGUg
bG9jayB3ZQorICAgICAgICB1c2UgaXMgcGVyLUNvZGVCbG9jayB0byBhY2hpZXZlIGEgZ29vZCBi
YWxhbmNlIGJldHdlZW4gbG9ja2luZyBncmFudWxhcml0eQorICAgICAgICBhbmQgbG93IHNwYWNl
IG92ZXJoZWFkLiBTbyBhIGNvbmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkIHdpbGwgb25seSBi
bG9jaworICAgICAgICBpZiBhbiBpbmxpbmUgY2FjaGUgcGluZy1wb25ncyBpbiB0aGUgY29kZSBi
bG9jayBiZWluZyBjb21waWxlZCAob3IgaW5saW5lZCkKKyAgICAgICAgYW5kIG5ldmVyIHdoZW4g
b3RoZXIgaW5saW5lIGNhY2hlcyBkbyB0aGluZ3MuCisgICAgICAgIAorICAgICAgICBGb3IgcmVz
b2x2ZSBvcGVyYXRpb25zLCBpdCdzIGEgYml0IHRyaWNreS4gVGhlIGdsb2JhbCByZXNvbHZlIGJp
dCB3b3JrcworICAgICAgICBsaWtlIGFueSBvdGhlciBJQyBpbiB0aGF0IGl0IGhhcyB0aGUgY2xl
YW4gdGVtcG9yYWwgc2VwYXJhdGlvbi4gQnV0IHRoZQorICAgICAgICBvcGVyYXRpb25zIHZlY3Rv
ciBpdHNlbGYgZG9lc24ndCBoYXZlIHRoaXMgc2VwYXJhdGlvbiwgc2luY2Ugd2Ugd2lsbCBiZQor
ICAgICAgICBmaWxsaW5nIGl0IGluIHRhbmRlbSB3aXRoIGFjdGlvbnMgdGhhdCBtYXkgdGFrZSBh
IGxvbmcgdGltZS4gVGhpcyBwYXRjaAorICAgICAgICBnZXRzIGFyb3VuZCB0aGlzIGJ5IGhhdmlu
ZyBhIG1fcmVhZHkgYml0IGluIHRoZSBSZXNvbHZlT3BlcmF0aW9ucyBhbmQKKyAgICAgICAgUHV0
VG9CYXNlT3BlcmF0aW9uLiBUaGlzIGlzIHNldCB3aGlsZSBob2xkaW5nIHRoZSBDb2RlQmxvY2sn
cyBsb2NrLiBJZiB0aGUKKyAgICAgICAgREZHIG9ic2VydmVzIHRoZSBtX3JlYWR5IGJpdCBub3Qg
c2V0ICh3aGlsZSBob2xkaW5nIHRoZSBsb2NrKSB0aGVuIGl0CisgICAgICAgIGNvbnNlcnZhdGl2
ZWx5IGFzc3VtZXMgdGhhdCB0aGUgcmVzb2x2ZSBoYXNuJ3QgaGFwcGVuZWQgeWV0IGFuZCBqdXN0
CisgICAgICAgIHBsYW50cyBhIEZvcmNlT1NSRXhpdC4KKworICAgICAgICAqIGJ5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVG
b3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2Nr
KToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpS
ZXNvbHZlR2xvYmFsU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9SZXNv
bHZlT3BlcmF0aW9uLmg6CisgICAgICAgIChKU0M6OlJlc29sdmVPcGVyYXRpb25zOjpSZXNvbHZl
T3BlcmF0aW9ucyk6CisgICAgICAgIChSZXNvbHZlT3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6
OlB1dFRvQmFzZU9wZXJhdGlvbjo6UHV0VG9CYXNlT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZVJlc29sdmVPcGVyYXRpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAg
KEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToK
KyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAoSlNDOjpsYXp5
TGlua0Zvcik6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAo
SlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6
c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTU2NvcGUuY3BwOgorICAgICAgICAoSlND
OjpKU1Njb3BlOjpyZXNvbHZlQ29udGFpbmluZ1Njb3BlSW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpKU1Njb3BlOjpyZXNvbHZlQ29udGFpbmluZ1Njb3BlKToKKyAgICAgICAgKEpTQzo6SlNTY29w
ZTo6cmVzb2x2ZVB1dCk6CisKIDIwMTMtMDQtMTYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBmb3VydGhUaWVyOiBERkcgc2hvdWxkIGJlIGFibGUgdG8gcXVlcnkg
U3RydWN0dXJlIHdpdGhvdXQgbW9kaWZ5aW5nIGl0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE0ODYyMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDggQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGcgogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZv
cihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7Cisg
ICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAg
CiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIFVOVVNFRF9QQVJBTShieXRl
Y29kZUluZGV4KTsKICNpZiBFTkFCTEUoSklUKSAmJiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAxNDg2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSAiV2F0Y2hw
b2ludC5oIgorI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgpAQCAtOTA3LDYgKzkwOCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgaW50IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgICAgICBpbnQgbV9udW1WYXJz
OwogICAgICAgICBib29sIG1faXNDb25zdHJ1Y3RvcjsKKyAgICAgICAgCisgICAgICAgIC8vIFRo
aXMgaXMgaW50ZW50aW9uYWxseSBwdWJsaWM7IGl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGFu
eW9uZSBkb2luZyBhbnkKKyAgICAgICAgLy8gb2YgdGhlIGZvbGxvd2luZyB0byBob2xkIHRoZSBs
b2NrOgorICAgICAgICAvLworICAgICAgICAvLyAtIE1vZGlmeWluZyBhbnkgaW5saW5lIGNhY2hl
IGluIHRoaXMgY29kZSBibG9jay4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBRdWVyaW5nIGFu
eSBpbmxpbmUgY2FjaGUgaW4gdGhpcyBjb2RlIGJsb2NrLCBmcm9tIGEgdGhyZWFkIG90aGVyIHRo
YW4KKyAgICAgICAgLy8gICB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIC8vCisgICAgICAgIC8v
IEFkZGl0aW9uYWxseSwgaXQncyBvbmx5IGxlZ2FsIHRvIG1vZGlmeSB0aGUgaW5saW5lIGNhY2hl
IG9uIHRoZSBtYWluCisgICAgICAgIC8vIHRocmVhZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBtYWlu
IHRocmVhZCBjYW4gcXVlcnkgdGhlIGlubGluZSBjYWNoZSB3aXRob3V0CisgICAgICAgIC8vIGxv
Y2tpbmcuIFRoaXMgaXMgY3J1Y2lhbCBzaW5jZSBleGVjdXRpbmcgdGhlIGlubGluZSBjYWNoZSBp
cyBlZmZlY3RpdmVseQorICAgICAgICAvLyAicXVlcnlpbmciIGl0LgorICAgICAgICAvLworICAg
ICAgICAvLyBBbm90aGVyIGV4Y2VwdGlvbiB0byB0aGUgcnVsZXMgaXMgdGhhdCB0aGUgR0MgY2Fu
IGRvIHdoYXRldmVyIGl0IHdhbnRzCisgICAgICAgIC8vIHdpdGhvdXQgaG9sZGluZyBhbnkgbG9j
a3MsIGJlY2F1c2UgdGhlIEdDIGlzIGd1YXJhbnRlZWQgdG8gd2FpdCB1bnRpbCBhbnkKKyAgICAg
ICAgLy8gY29uY3VycmVudCBjb21waWxhdGlvbiB0aHJlYWRzIGZpbmlzaCB3aGF0IHRoZXkncmUg
ZG9pbmcuCisgICAgICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrIExvY2s7CisgICAgICAgIHR5cGVk
ZWYgQnl0ZVNwaW5Mb2NrZXIgTG9ja2VyOworICAgICAgICBMb2NrIG1fbG9jazsKIAogICAgIHBy
b3RlY3RlZDoKICNpZiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ4NjIyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIsNiArMTEyLDggQEAgdm9pZCBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hh
aW4oR2V0QgogCiBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJZGVudGlmaWVyJiBp
ZGVudCkKIHsKKyAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9s
b2NrKTsKKyAgICAKICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CiAgICAgVU5VU0VE
X1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwogICAgIFVOVVNFRF9QQVJBTShpZGVudCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAxNDg2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDggQEAgUHV0QnlJZFN0YXR1
cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBJZGVudGlmaWVyJiBpZGVudCkKIHsKKyAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2Nr
ZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAKICAgICBVTlVTRURfUEFSQU0ocHJvZmls
ZWRCbG9jayk7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwogICAgIFVOVVNFRF9Q
QVJBTShpZGVudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2
ZUdsb2JhbFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuY3BwCShyZXZpc2lvbiAxNDg2MjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDYgKzQ4LDggQEAgc3RhdGljIFJlc29sdmVHbG9iYWxTdGF0dXMgY29t
cHV0ZUZvclN0cgogCiBSZXNvbHZlR2xvYmFsU3RhdHVzIFJlc29sdmVHbG9iYWxTdGF0dXM6OmNv
bXB1dGVGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCwgUmVzb2x2ZU9wZXJhdGlvbiogb3Bl
cmF0aW9uLCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogeworICAgIENvZGVCbG9jazo6TG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgCiAgICAgQVNTRVJUKG9wZXJhdGlvbi0+
bV9vcGVyYXRpb24gPT0gUmVzb2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVy
dHkpOwogICAgIGlmICghb3BlcmF0aW9uLT5tX3N0cnVjdHVyZSkKICAgICAgICAgcmV0dXJuIFJl
c29sdmVHbG9iYWxTdGF0dXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9SZXNvbHZlT3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1Jlc29sdmVPcGVyYXRpb24uaAkocmV2aXNpb24gMTQ4NjIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVPcGVyYXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTM5LDcgKzEzOSwxMSBAQCBzdHJ1Y3QgUmVzb2x2ZU9wZXJhdGlvbiB7CiAgICAgfQog
fTsKIAotdHlwZWRlZiBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbj4gUmVzb2x2ZU9wZXJhdGlvbnM7
CitzdHJ1Y3QgUmVzb2x2ZU9wZXJhdGlvbnMgOiBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbj4gewor
ICAgIFJlc29sdmVPcGVyYXRpb25zKCkgOiBtX3JlYWR5KGZhbHNlKSB7IH0KKyAgICAKKyAgICBi
b29sIG1fcmVhZHk7Cit9OwogCiBzdHJ1Y3QgUHV0VG9CYXNlT3BlcmF0aW9uIHsKICAgICBQdXRU
b0Jhc2VPcGVyYXRpb24oYm9vbCBpc1N0cmljdCkKQEAgLTE0Nyw2ICsxNTEsNyBAQCBzdHJ1Y3Qg
UHV0VG9CYXNlT3BlcmF0aW9uIHsKICAgICAgICAgLCBtX2lzRHluYW1pYyhmYWxzZSkKICAgICAg
ICAgLCBtX2lzU3RyaWN0KGlzU3RyaWN0KQogICAgICAgICAsIG1fcHJlZGljYXRlUG9pbnRlcigw
KQorICAgICAgICAsIG1fcmVhZHkoZmFsc2UpCiAgICAgewogCiAgICAgfQpAQCAtMTcyLDYgKzE3
Nyw3IEBAIHN0cnVjdCBQdXRUb0Jhc2VPcGVyYXRpb24gewogICAgICAgICAgICAgaW50MzJfdCBt
X29mZnNldEluQnV0dGVyZmx5OwogICAgICAgICB9OwogICAgIH07CisgICAgYm9vbCBtX3JlYWR5
OwogfTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0ODYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc4LDEwICsx
Nzc4LDE3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZShib29sIHNraXAKIAogYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBSZXNvbHZlT3BlcmF0aW9ucyogcmVzb2x2
ZU9wZXJhdGlvbnMsIFB1dFRvQmFzZU9wZXJhdGlvbiogcHV0VG9CYXNlT3BlcmF0aW9uLCBOb2Rl
KiogYmFzZSwgTm9kZSoqIHZhbHVlKQogewotICAgIGlmIChyZXNvbHZlT3BlcmF0aW9ucy0+aXNF
bXB0eSgpKSB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHsKKyAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgCisgICAgICAgIGlm
ICghcmVzb2x2ZU9wZXJhdGlvbnMtPm1fcmVhZHkpIHsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgo
Rm9yY2VPU1JFeGl0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAg
IH0KKworICAgIEFTU0VSVCghcmVzb2x2ZU9wZXJhdGlvbnMtPmlzRW1wdHkoKSk7CisKICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpOwogICAgIGludCBza2lwQ291bnQgPSAwOwogICAgIGJvb2wgc2tp
cFRvcCA9IGZhbHNlOwpAQCAtMzE2OCw2ICszMTc1LDE3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBt
X2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kXTsKICAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgIFB1dFRvQmFzZU9wZXJhdGlvbiogcHV0VG9C
YXNlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUucHV0VG9CYXNlT3BlcmF0aW9uOworICAgICAg
ICAgICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIg
bG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIXB1dFRvQmFzZS0+bV9yZWFkeSkgewor
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CisgICAgICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KGJhc2UpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfcHV0X3RvX2Jhc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHB1dFRvQmFzZS0+bV9pc0R5bmFtaWMpIHsKICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgZ2V0
KGJhc2UpLCBnZXQodmFsdWUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCShyZXZpc2lvbiAxNDg2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ0LDYgKzg0NCw4IEBAIHZvaWQgcGVyZm9y
bVBsYXRmb3JtU3BlY2lmaWNKSVRBc3NlcnRpb24KIAogTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lk
IHRyeUNhY2hlUHV0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBi
b29sIGRpcmVjdCkKIHsKKyAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2spOworICAgIAogICAgIC8vIFRoZSBpbnRlcnByZXRlciBjaGVja3MgZm9yIHJlY3Vyc2lv
biBoZXJlOyBJIGRvIG5vdCBiZWxpZXZlIHRoaXMgY2FuIG9jY3VyIGluIENUSS4KIAogICAgIGlm
ICghYmFzZVZhbHVlLmlzQ2VsbCgpKQpAQCAtODk4LDYgKzkwMCw4IEBAIE5FVkVSX0lOTElORSBz
dGF0aWMgdm9pZCB0cnlDYWNoZVB1dEJ5SUQKIAogTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIHRy
eUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCiB7CisgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2Vy
KGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAKICAgICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRo
YXQgcHJvdmVzIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QKICAgICAv
LyBsaWtlIHRoZSBpbnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNp
b24uCiAKQEAgLTE1ODYsNiArMTU5MCw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF8KIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIAorICAgIENvZGVCbG9j
azo6TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgCiAgICAgaWYgKGJhc2VW
YWx1ZS5pc0NlbGwoKQogICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlKCkKICAgICAgICAgJiYg
IWJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5
KCkKQEAgLTE3MDMsNiArMTcwOSw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0K
IAorICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAg
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSgpOwogCiAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS5pc09iamVjdCgpKTsKQEAgLTIxNjQs
MTAgKzIxNzIsMTIgQEAgaW5saW5lIHZvaWQqIGxhenlMaW5rRm9yKENhbGxGcmFtZSogY2FsbAog
ICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29k
ZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKICAgICB9CiAKKyAgICBDb2RlQmxvY2s6Okxv
Y2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+bV9sb2Nr
KTsKICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRTZWVuKCk7Ci0gICAgZWxzZQorICAgIGVsc2UgewogICAgICAgICBKSVQ6OmxpbmtG
b3IoY2FsbGVlLCBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLCBjb2RlQmxv
Y2ssIGNvZGVQdHIsIGNhbGxMaW5rSW5mbywgJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBraW5k
KTsKKyAgICB9CiAKICAgICByZXR1cm4gY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpOwogfQpA
QCAtMjIzOSw2ICsyMjQ5LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIHZtX2xhenlM
aW5rQwogICAgIAogICAgIGlmIChzaG91bGRMaW5rKSB7CiAgICAgICAgIEFTU0VSVChjb2RlUHRy
KTsKKyAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNhbGxlckNvZGVCbG9jay0+bV9s
b2NrKTsKICAgICAgICAgSklUOjpjb21waWxlQ2xvc3VyZUNhbGwoZ2xvYmFsRGF0YSwgY2FsbExp
bmtJbmZvLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZUNvZGVCbG9jaywgc3RydWN0dXJlLCBleGVj
dXRhYmxlLCBjb2RlUHRyKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5oYXNTZWVuQ2xvc3VyZSA9
IHRydWU7CiAgICAgfSBlbHNlCkBAIC0yMzc4LDggKzIzODksMTcgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFj
a0ZyYW1lKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJh
bWU7Ci0KLSAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmUoY2FsbEZyYW1lLCBz
dGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCBzdGFja0ZyYW1lLmFyZ3NbMV0ucmVzb2x2
ZU9wZXJhdGlvbnMoKSk7CisgICAgCisgICAgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMg
PSBzdGFja0ZyYW1lLmFyZ3NbMV0ucmVzb2x2ZU9wZXJhdGlvbnMoKTsKKyAgICBib29sIHdpbGxS
ZWlmeSA9IG9wZXJhdGlvbnMtPmlzRW1wdHkoKTsKKyAgICAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IEpTU2NvcGU6OnJlc29sdmUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmll
cigpLCBvcGVyYXRpb25zKTsKKyAgICAKKyAgICBpZiAod2lsbFJlaWZ5KSB7CisgICAgICAgIENv
ZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOwor
ICAgICAgICBvcGVyYXRpb25zLT5tX3JlYWR5ID0gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgQ0hF
Q0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CkBAIC0yMzkxLDcgKzI0MTEsMTUgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3BfcHV0X3RvX2JhcwogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWU7CiAgICAgSlNWYWx1ZSBiYXNlID0gY2FsbEZyYW1lLT5yKHN0YWNrRnJhbWUuYXJn
c1swXS5pbnQzMigpKS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxGcmFtZS0+
cihzdGFja0ZyYW1lLmFyZ3NbMl0uaW50MzIoKSkuanNWYWx1ZSgpOwotICAgIEpTU2NvcGU6OnJl
c29sdmVQdXQoY2FsbEZyYW1lLCBiYXNlLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigp
LCB2YWx1ZSwgc3RhY2tGcmFtZS5hcmdzWzNdLnB1dFRvQmFzZU9wZXJhdGlvbigpKTsKKyAgICBQ
dXRUb0Jhc2VPcGVyYXRpb24qIG9wZXJhdGlvbiA9IHN0YWNrRnJhbWUuYXJnc1szXS5wdXRUb0Jh
c2VPcGVyYXRpb24oKTsKKyAgICBib29sIGZpcnN0VGltZSA9ICFvcGVyYXRpb24tPm1fcmVhZHk7
CisgICAgSlNTY29wZTo6cmVzb2x2ZVB1dChjYWxsRnJhbWUsIGJhc2UsIHN0YWNrRnJhbWUuYXJn
c1sxXS5pZGVudGlmaWVyKCksIHZhbHVlLCBvcGVyYXRpb24pOworICAgIAorICAgIGlmIChmaXJz
dFRpbWUpIHsKKyAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgIG9wZXJhdGlvbi0+bV9yZWFkeSA9IHRydWU7Cisg
ICAgfQorCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIH0KIApAQCAtMjcxOCwx
NiArMjc0NiwzNiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiBE
RUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfcmVzb2x2ZV9iYXNlKQogewog
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKLQotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNTY29wZTo6cmVzb2x2ZUJhc2Uoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0
YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksIGZhbHNlLCBzdGFja0ZyYW1lLmFyZ3NbMV0u
cmVzb2x2ZU9wZXJhdGlvbnMoKSwgc3RhY2tGcmFtZS5hcmdzWzJdLnB1dFRvQmFzZU9wZXJhdGlv
bigpKSk7CisgICAgCisgICAgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSBzdGFja0Zy
YW1lLmFyZ3NbMV0ucmVzb2x2ZU9wZXJhdGlvbnMoKTsKKyAgICBib29sIHdpbGxSZWlmeSA9IG9w
ZXJhdGlvbnMtPmlzRW1wdHkoKTsKKyAgICAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6
OnJlc29sdmVCYXNlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRl
bnRpZmllcigpLCBmYWxzZSwgb3BlcmF0aW9ucywgc3RhY2tGcmFtZS5hcmdzWzJdLnB1dFRvQmFz
ZU9wZXJhdGlvbigpKTsKKyAgICAKKyAgICBpZiAod2lsbFJlaWZ5KSB7CisgICAgICAgIENvZGVC
bG9jazo6TG9ja2VyIGxvY2tlcihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1f
bG9jayk7CisgICAgICAgIG9wZXJhdGlvbnMtPm1fcmVhZHkgPSB0cnVlOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIERFRklORV9TVFVCX0ZV
TkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9yZXNvbHZlX2Jhc2Vfc3RyaWN0X3B1dCkKIHsKICAg
ICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICBpZiAoSlNWYWx1ZSBy
ZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlQmFzZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tG
cmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgdHJ1ZSwgc3RhY2tGcmFtZS5hcmdzWzFdLnJlc29s
dmVPcGVyYXRpb25zKCksIHN0YWNrRnJhbWUuYXJnc1syXS5wdXRUb0Jhc2VPcGVyYXRpb24oKSkp
CisgICAgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSBzdGFja0ZyYW1lLmFyZ3NbMV0u
cmVzb2x2ZU9wZXJhdGlvbnMoKTsKKyAgICBib29sIHdpbGxSZWlmeSA9IG9wZXJhdGlvbnMtPmlz
RW1wdHkoKTsKKyAgICAKKyAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZl
QmFzZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIo
KSwgdHJ1ZSwgb3BlcmF0aW9ucywgc3RhY2tGcmFtZS5hcmdzWzJdLnB1dFRvQmFzZU9wZXJhdGlv
bigpKSkgeworICAgICAgICAKKyAgICAgICAgaWYgKHdpbGxSZWlmeSkgeworICAgICAgICAgICAg
Q29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+bV9sb2NrKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbnMtPm1fcmVhZHkgPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgfQogICAgIFZNX1RIUk9XX0VYQ0VQVElPTigpOwogfQogCkBAIC0zMDI1LDcgKzMwNzMs
MTMgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIFNUVUJf
SU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1l
ID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpy
ZXNvbHZlV2l0aEJhc2UoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigp
LCAmY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIoKV0sIHN0
YWNrRnJhbWUuYXJnc1syXS5yZXNvbHZlT3BlcmF0aW9ucygpLCBzdGFja0ZyYW1lLmFyZ3NbM10u
cHV0VG9CYXNlT3BlcmF0aW9uKCkpOworICAgIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25z
ID0gc3RhY2tGcmFtZS5hcmdzWzJdLnJlc29sdmVPcGVyYXRpb25zKCk7CisgICAgYm9vbCB3aWxs
UmVpZnkgPSBvcGVyYXRpb25zLT5pc0VtcHR5KCk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Nj
b3BlOjpyZXNvbHZlV2l0aEJhc2UoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRp
ZmllcigpLCAmY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIo
KV0sIG9wZXJhdGlvbnMsIHN0YWNrRnJhbWUuYXJnc1szXS5wdXRUb0Jhc2VPcGVyYXRpb24oKSk7
CisgICAgaWYgKHdpbGxSZWlmeSkgeworICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIo
c3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBvcGVy
YXRpb25zLT5tX3JlYWR5ID0gdHJ1ZTsKKyAgICB9CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9B
VF9FTkQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0zMDM1
LDcgKzMwODksMTMgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwog
ICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBK
U1Njb3BlOjpyZXNvbHZlV2l0aFRoaXMoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRl
bnRpZmllcigpLCAmY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzdGFja0ZyYW1lLmFyZ3NbMV0uaW50
MzIoKV0sIHN0YWNrRnJhbWUuYXJnc1syXS5yZXNvbHZlT3BlcmF0aW9ucygpKTsKKyAgICBSZXNv
bHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucyA9IHN0YWNrRnJhbWUuYXJnc1syXS5yZXNvbHZlT3Bl
cmF0aW9ucygpOworICAgIGJvb2wgd2lsbFJlaWZ5ID0gb3BlcmF0aW9ucy0+aXNFbXB0eSgpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZVdpdGhUaGlzKGNhbGxGcmFtZSwg
c3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgJmNhbGxGcmFtZS0+cmVnaXN0ZXJzKClb
c3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCldLCBvcGVyYXRpb25zKTsKKyAgICBpZiAod2lsbFJl
aWZ5KSB7CisgICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihzdGFja0ZyYW1lLmNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgIG9wZXJhdGlvbnMtPm1fcmVhZHkg
PSB0cnVlOworICAgIH0KICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTQ4NjIyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODEzLDYgKzgxMywxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
cmVzb2x2ZSkKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CisgICAgCisgICAg
eworICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1f
bG9jayk7CisgICAgICAgIG9wZXJhdGlvbnMtPm1fcmVhZHkgPSB0cnVlOworICAgIH0KKyAgICAK
ICAgICBMTElOVF9SRVRVUk5fUFJPRklMRUQob3BfcmVzb2x2ZSwgcmVzdWx0KTsKIH0KIApAQCAt
ODI5LDYgKzgzNSwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3RvX2Jh
CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgeworICAgICAgICBD
b2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAg
ICAgIG9wZXJhdGlvbi0+bV9yZWFkeSA9IHRydWU7CisgICAgfQorICAgIAogICAgIExMSU5UX0VO
RCgpOwogfQogCkBAIC04NjEsNiArODczLDEyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9yZXNvbHZlX2IKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CisgICAg
CisgICAgeworICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2Nr
KCktPm1fbG9jayk7CisgICAgICAgIG9wZXJhdGlvbnMtPm1fcmVhZHkgPSB0cnVlOworICAgIH0K
KyAgICAKICAgICBMTElOVF9QUk9GSUxFX1ZBTFVFKG9wX3Jlc29sdmVfYmFzZSwgcmVzdWx0KTsK
ICAgICBMTElOVF9SRVRVUk4ocmVzdWx0KTsKIH0KQEAgLTg4MCw3ICs4OTgsMTIgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfdwogewogICAgIExMSU5UX0JFR0lOKCk7
CiAgICAgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSBwY1s0XS51LnJlc29sdmVPcGVy
YXRpb25zOworICAgIGJvb2wgd2lsbFJlaWZ5ID0gb3BlcmF0aW9ucy0+aXNFbXB0eSgpOwogICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZVdpdGhCYXNlKGV4ZWMsIGV4ZWMtPmNv
ZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCksICZMTElOVF9PUCgxKSwgb3Bl
cmF0aW9ucywgcGNbNV0udS5wdXRUb0Jhc2VPcGVyYXRpb24pOworICAgIGlmICh3aWxsUmVpZnkp
IHsKKyAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5t
X2xvY2spOworICAgICAgICBvcGVyYXRpb25zLT5tX3JlYWR5ID0gdHJ1ZTsKKyAgICB9CiAgICAg
TExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgTExJTlRfT1AoMikgPSByZXN1bHQ7CiAgICAg
TExJTlRfUFJPRklMRV9WQUxVRShvcF9yZXNvbHZlX3dpdGhfYmFzZSwgcmVzdWx0KTsKQEAgLTg5
MSw3ICs5MTQsMTIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfdwog
ewogICAgIExMSU5UX0JFR0lOKCk7CiAgICAgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMg
PSBwY1s0XS51LnJlc29sdmVPcGVyYXRpb25zOworICAgIGJvb2wgd2lsbFJlaWZ5ID0gb3BlcmF0
aW9ucy0+aXNFbXB0eSgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZVdp
dGhUaGlzKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzNdLnUub3BlcmFu
ZCksICZMTElOVF9PUCgxKSwgb3BlcmF0aW9ucyk7CisgICAgaWYgKHdpbGxSZWlmeSkgeworICAg
ICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7
CisgICAgICAgIG9wZXJhdGlvbnMtPm1fcmVhZHkgPSB0cnVlOworICAgIH0KICAgICBMTElOVF9D
SEVDS19FWENFUFRJT04oKTsKICAgICBMTElOVF9PUCgyKSA9IHJlc3VsdDsKICAgICBMTElOVF9Q
Uk9GSUxFX1ZBTFVFKG9wX3Jlc29sdmVfd2l0aF90aGlzLCByZXN1bHQpOwpAQCAtOTI5LDYgKzk1
Nyw4IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICAgICAg
CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpCiAgICAg
ICAgICAgICAmJiAhc3RydWN0dXJlLT50eXBlSW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGlu
ZygpKSB7CisgICAgICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2spOworICAgICAgICAgICAgCiAgICAgICAgICAgICBwY1s0XS51LnN0cnVjdHVyZS5zZXQo
CiAgICAgICAgICAgICAgICAgZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hl
ZE9mZnNldCgpKSkgewpAQCAtOTk0LDYgKzEwMjQsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAmJiBiYXNlQ2VsbCA9PSBzbG90LmJhc2Uo
KSkgewogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJv
cGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIENvZGVCbG9jazo6TG9j
a2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgJiYgc3RydWN0dXJlLT5wcmV2aW91
c0lEKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIApAQCAtMTQzMSw5ICsxNDYzLDEyIEBAIGlubGluZSBTbG93UGF0aFJldHVy
blR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICB9CiAgICAgCiAgICAgaWYgKCFMTElOVF9BTFdBWVNf
QUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJbmZvKSB7CisgICAgICAgIEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlciA9IGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCk7CisKKyAgICAgICAgQ29kZUJsb2NrOjpM
b2NrZXIgbG9ja2VyKGV4ZWNDYWxsZXItPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICAK
ICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby0+aXNPbkxpc3QoKSkKICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+cmVtb3ZlKCk7Ci0gICAgICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlciA9IGV4ZWND
YWxsZWUtPmNhbGxlckZyYW1lKCk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+Y2FsbGVlLnNldChn
bG9iYWxEYXRhLCBleGVjQ2FsbGVyLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGNh
bGxlZSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUuc2V0KGdsb2JhbERh
dGEsIGV4ZWNDYWxsZXItPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsK
ICAgICAgICAgY2FsbExpbmtJbmZvLT5tYWNoaW5lQ29kZVRhcmdldCA9IGNvZGVQdHI7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMTQ4
NjIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5Niw3ICsxOTYsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlUmVzb2x2ZU9w
ZXJhdGlvbnMoQ2FsCiAgICAgfQogfQogCi10ZW1wbGF0ZSA8SlNTY29wZTo6TG9va3VwTW9kZSBt
b2RlLCBKU1Njb3BlOjpSZXR1cm5WYWx1ZXMgcmV0dXJuVmFsdWVzPiBKU09iamVjdCogSlNTY29w
ZTo6cmVzb2x2ZUNvbnRhaW5pbmdTY29wZUludGVybmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFZlY3RvcjxS
ZXNvbHZlT3BlcmF0aW9uPiogb3BlcmF0aW9ucywgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jh
c2VPcGVyYXRpb24sIGJvb2wgKQordGVtcGxhdGUgPEpTU2NvcGU6Okxvb2t1cE1vZGUgbW9kZSwg
SlNTY29wZTo6UmV0dXJuVmFsdWVzIHJldHVyblZhbHVlcz4gSlNPYmplY3QqIEpTU2NvcGU6OnJl
c29sdmVDb250YWluaW5nU2NvcGVJbnRlcm5hbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnRpZmllciwgUHJvcGVydHlTbG90JiBzbG90LCBSZXNvbHZlT3BlcmF0
aW9ucyogb3BlcmF0aW9ucywgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb24s
IGJvb2wgKQogewogICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwogICAg
IEFTU0VSVChzY29wZSk7CkBAIC0zMDEsNiArMzAxLDggQEAgdGVtcGxhdGUgPEpTU2NvcGU6Okxv
b2t1cE1vZGUgbW9kZSwgSlNTYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv
bnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpjaGVja0ZvckR5bmFtaWNFbnRyaWVzQmVmb3Jl
R2xvYmFsU2NvcGUoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdXRUb0Jhc2VP
cGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2s6OkxvY2tl
ciBsb2NrZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVy
YXRpb24tPm1faXNEeW5hbWljID0gcmVxdWlyZXNEeW5hbWljQ2hlY2tzOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9raW5kID0gUHV0VG9CYXNlT3Bl
cmF0aW9uOjpHbG9iYWxQcm9wZXJ0eVB1dDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXRUb0Jhc2VPcGVyYXRpb24tPm1fc3RydWN0dXJlLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGdsb2JhbE9iamVj
dC0+c3RydWN0dXJlKCkpOwpAQCAtMzQ1LDYgKzM0Nyw4IEBAIHRlbXBsYXRlIDxKU1Njb3BlOjpM
b29rdXBNb2RlIG1vZGUsIEpTU2MKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsK
IAogICAgICAgICAgICAgICAgICAgICBpZiAocHV0VG9CYXNlT3BlcmF0aW9uKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX2tpbmQgPSBlbnRyeS5pc1JlYWRPbmx5
KCkgPyBQdXRUb0Jhc2VPcGVyYXRpb246OlJlYWRvbmx5IDogUHV0VG9CYXNlT3BlcmF0aW9uOjpW
YXJpYWJsZVB1dDsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+
bV9zdHJ1Y3R1cmUuc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXRU
b0Jhc2VPcGVyYXRpb24tPm1fb2Zmc2V0ID0gZW50cnkuZ2V0SW5kZXgoKTsKQEAgLTQyMSw3ICs0
MjUsNyBAQCB0ZW1wbGF0ZSA8SlNTY29wZTo6TG9va3VwTW9kZSBtb2RlLCBKU1NjCiAgICAgcmV0
dXJuIDA7CiB9CiAKLXRlbXBsYXRlIDxKU1Njb3BlOjpSZXR1cm5WYWx1ZXMgcmV0dXJuVmFsdWVz
PiBKU09iamVjdCogSlNTY29wZTo6cmVzb2x2ZUNvbnRhaW5pbmdTY29wZShDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUHJvcGVydHlTbG90JiBzbG90
LCBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbj4qIG9wZXJhdGlvbnMsIFB1dFRvQmFzZU9wZXJhdGlv
biogcHV0VG9CYXNlT3BlcmF0aW9uLCBib29sIGlzU3RyaWN0KQordGVtcGxhdGUgPEpTU2NvcGU6
OlJldHVyblZhbHVlcyByZXR1cm5WYWx1ZXM+IEpTT2JqZWN0KiBKU1Njb3BlOjpyZXNvbHZlQ29u
dGFpbmluZ1Njb3BlKENhbGxGcmFtZSogY2FsbEZyYW1lLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyLCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRpb25z
LCBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbiwgYm9vbCBpc1N0cmljdCkK
IHsKICAgICBpZiAob3BlcmF0aW9ucy0+c2l6ZSgpKQogICAgICAgICByZXR1cm4gcmVzb2x2ZUNv
bnRhaW5pbmdTY29wZUludGVybmFsPEtub3duUmVzb2x2ZSwgcmV0dXJuVmFsdWVzPihjYWxsRnJh
bWUsIGlkZW50aWZpZXIsIHNsb3QsIG9wZXJhdGlvbnMsIHB1dFRvQmFzZU9wZXJhdGlvbiwgaXNT
dHJpY3QpOwpAQCAtNjA3LDYgKzYxMSw4IEBAIHZvaWQgSlNTY29wZTo6cmVzb2x2ZVB1dChDYWxs
RnJhbWUqIGNhbGwKICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZU9iamVjdCkKICAgICAgICAg
cmV0dXJuOwogICAgIEFTU0VSVCghYmFzZU9iamVjdC0+aGFzSW5saW5lU3RvcmFnZSgpKTsKKyAg
ICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2Nr
KTsKKyAgICAKICAgICBvcGVyYXRpb24tPm1fc3RydWN0dXJlLnNldChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGJhc2VP
YmplY3QtPnN0cnVjdHVyZSgpKTsKICAgICBzZXRQdXRQcm9wZXJ0eUFjY2Vzc09mZnNldChvcGVy
YXRpb24sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lv
biAxNDg2MzIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDMyIEBACisyMDEzLTA0LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgZm91cnRoVGllcjogYWxsIGlubGluZSBjYWNoZXMgc2hvdWxkIHRocmVhZC1zYWZl
IGVub3VnaCB0byBhbGxvdyBhIGNvbmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkIHRvIHJlYWQg
dGhlbSBzYWZlbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExNDc2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgSW1wbGVtZW50ZWQgYSBuZXcgc3BpbmxvY2sgdGhhdCBpcyBvcHRpbWl6ZWQg
Zm9yIGNvbXBhY3RuZXNzLCBieSB1c2luZyBqdXN0IGEgYnl0ZS4KKyAgICAgICAgVGhpcyB3aWxs
IGJlIHVzZWZ1bCBhcyB3ZSBzdGFydCB1c2luZyBmaW5lLWdyYWluZWQgbG9ja2luZyBvbiBhIGJ1
bmNoIG9mIHBsYWNlcy4KKyAgICAgICAgCisgICAgICAgIEF0IHNvbWUgcG9pbnQgSSdsbCBtYWtl
IHRoZXNlIGJ5dGUtc2l6ZWQgc3BpbmxvY2tzIGludG8gYWRhcHRpdmUgbXV0ZXhlcywgYnV0IGZv
cgorICAgICAgICBub3cgSSB0aGluayBpdCdzIGZpbmUgdG8gZG8gdGhlIGV2aWwgdGhpbmcgYW5k
IHVzZSBzcGlubmluZyBwYXJ0aWN1bGFybHkgc2luY2Ugd2UKKyAgICAgICAgb25seSB1c2UgdGhl
bSBmb3Igc2hvcnQgY3JpdGljYWwgc2VjdGlvbnMuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQXRvbWljcy5oOgorICAgICAgICAoV1RG
KToKKyAgICAgICAgKFdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKToKKyAgICAgICAgKiB3dGYvQnl0
ZVNwaW5Mb2NrLmg6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKEJ5dGVTcGluTG9j
ayk6CisgICAgICAgIChXVEY6OkJ5dGVTcGluTG9jazo6Qnl0ZVNwaW5Mb2NrKToKKyAgICAgICAg
KFdURjo6Qnl0ZVNwaW5Mb2NrOjpsb2NrKToKKyAgICAgICAgKFdURjo6Qnl0ZVNwaW5Mb2NrOjp1
bmxvY2spOgorICAgICAgICAoV1RGOjpCeXRlU3BpbkxvY2s6OmlzSGVsZCk6CisgICAgICAgICog
d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaDoKKyAgICAgICAgKFdURjo6cGF1c2VCcmllZmx5KToK
KyAgICAgICAgKFdURik6CisKIDIwMTMtMDQtMTIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBmb3VydGhUaWVyOiBGVEwgc2hvdWxkIGhhdmUgT1NSIGV4aXQKSW5k
ZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQ4
NjIyKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQAogCQkxNDY5NDE5MjE2RUFBRjZEMDAyNEUxNDYgLyog
UnVuTG9vcFRpbWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDY5NDE5MDE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ2OTQxOTMxNkVBQUY2
RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lckNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Njk0MTkxMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29w
VGltZXJDRi5jcHAgKi87IH07CiAJCTE0Njk0MTk2MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVs
ZVBhaXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
Njk0MTk0MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNDY5NDE5OTE2RUFCMDQxMDAyNEUx
NDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ2OTQxOTgxNkVBQjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNG
LmNwcCAqLzsgfTsKIAkJMTQ2OTQxOTcxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Njk0
MTk1MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi87IH07CisJCTE0Njk0
MTk5MTZFQUIwNDEwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJDRi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDY5NDE5ODE2RUFCMDQxMDAyNEUxNDYg
LyogU2NoZWR1bGVQYWlyQ0YuY3BwICovOyB9OwogCQkxNDY5NDE5QzE2RUFCMTBBMDAyNEUxNDYg
LyogQXV0b2RyYWluZWRQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDY5NDE5QTE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ2OTQx
OUQxNkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFpbmVkUG9vbE1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Njk0MTlCMTZFQUIxMEEwMDI0RTE0
NiAvKiBBdXRvZHJhaW5lZFBvb2xNYWMubW0gKi87IH07CiAJCTE0OUVGMTYzMTZCQkZFMEQwMDBB
NDMzMSAvKiBUcmlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQ5RUYxNjIxNkJCRkUwRDAwMEE0MzMxIC8qIFRyaVN0YXRlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKQEAgLTM0MCwxMyArMzQwLDE0IEBACiAJCTBG
RDgxQUM0MTU0RkIyMkUwMDk4M0U3MiAvKiBGYXN0Qml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1ByaW50U3RyZWFt
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEREJGQTYxNjY2REZBMzAwQzU1
RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0cmluZ1ByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUMzRUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qnl0ZVNwaW5Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFEMTU2
NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJBTVNpemUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDNG
NjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSQU1TaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0Njk0
MTkwMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUnVuTG9vcFRpbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0Njk0MTkxMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXJDRi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdW5Mb29wVGltZXJDRi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0Njk0MTk0MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hl
ZHVsZVBhaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NoZWR1bGVQYWly
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0Njk0MTk4MTZFQUIwNDEwMDI0RTE0
NiAvKiBTY2hlZHVsZVBhaXJDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTY2hlZHVsZVBhaXJDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
Njk0MTk1MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY2hlZHVsZVBhaXJNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0Njk0MTk4MTZFQUIwNDEwMDI0RTE0NiAvKiBTY2hlZHVs
ZVBhaXJDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY2hlZHVs
ZVBhaXJDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0Njk0MTlBMTZFQUIx
MEEwMDI0RTE0NiAvKiBBdXRvZHJhaW5lZFBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXV0b2RyYWluZWRQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0Njk0MTlCMTZFQUIxMEEwMDI0RTE0NiAvKiBBdXRvZHJhaW5lZFBvb2xNYWMubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdXRvZHJhaW5lZFBvb2xNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0OUVGMTYyMTZCQkZFMEQwMDBBNDMzMSAv
KiBUcmlTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmlTdGF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE5LDYgKzcyMCw3IEBACiAJCQkJQThB
NDcyNjYxNTFBODI1QTAwNDEyM0ZGIC8qIEJvdW5kc0NoZWNrZWRQb2ludGVyLmggKi8sCiAJCQkJ
QThBNDcyNjcxNTFBODI1QTAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVyQWxsb2NhdG9yLmggKi8sCiAJ
CQkJRUI5NUUxRUYxNjFBNzI0MTAwODlBMkY1IC8qIEJ5dGVPcmRlci5oICovLAorCQkJCTBGRUMz
RUU0MTcxQjgzNDcwMEZEQUM4RCAvKiBCeXRlU3BpbkxvY2suaCAqLywKIAkJCQlBOEE0NzI2QTE1
MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEFyaXRobWV0aWMuaCAqLywKIAkJCQlBOEE0NzI2QjE1
MUE4MjVBMDA0MTIzRkYgLyogQ2hlY2tlZEJvb2xlYW4uaCAqLywKIAkJCQkwRkM0RURFNTE2OTYx
NDk2MDBGNjUwNDEgLyogQ29tbWFQcmludGVyLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9B
dG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZpc2lv
biAxNDg2MjIpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyNiw2ICsyMjYsMzUgQEAgaW5saW5lIHZvaWQgbWVtb3J5QmFycmllckJlZm9yZVVubG9jaygp
IAogCiAjZW5kaWYKIAorI2lmIENPTVBJTEVSKEdDQykgJiYgIUNPTVBJTEVSKENMQU5HKQoraW5s
aW5lIGJvb2wgd2Vha0NvbXBhcmVBbmRTd2FwKHZvbGF0aWxlIHVpbnQ4X3QqIGxvY2F0aW9uLCB1
aW50OF90IGV4cGVjdGVkLCB1aW50OF90IG5ld1ZhbHVlKQorI2Vsc2UKK2lubGluZSBib29sIHdl
YWtDb21wYXJlQW5kU3dhcCh1aW50OF90KiBsb2NhdGlvbiwgdWludDhfdCBleHBlY3RlZCwgdWlu
dDhfdCBuZXdWYWx1ZSkKKyNlbmRpZgoreworI2lmIEVOQUJMRShDT01QQVJFX0FORF9TV0FQKQor
I2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgdW5zaWduZWQgY2hhciByZXN1bHQ7Cisg
ICAgYXNtIHZvbGF0aWxlKAorICAgICAgICAibG9jazsgY21weGNoZ2IgJTMsICUyXG5cdCIKKyAg
ICAgICAgInNldGUgJTEiCisgICAgICAgIDogIithIihleHBlY3RlZCksICI9cSIocmVzdWx0KSwg
IittIigqbG9jYXRpb24pCisgICAgICAgIDogInIiKG5ld1ZhbHVlKQorICAgICAgICA6ICJtZW1v
cnkiCisgICAgICAgICk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisjZXJyb3IgIkltcGxl
bWVudCB0aGlzIGJ5IGNhbGxpbmcgd29yZC13aWRlIGNvbXBhcmUgYW5kIHN3YXAiCisjZW5kaWYK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZXhw
ZWN0ZWQpOworICAgIFVOVVNFRF9QQVJBTShuZXdWYWx1ZSk7CisgICAgQ1JBU0goKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNpZiBVU0Uo
TE9DS0ZSRUVfVEhSRUFEU0FGRVJFRkNPVU5URUQpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CeXRl
U3BpbkxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CeXRlU3BpbkxvY2suaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0J5dGVTcGluTG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCeXRlU3BpbkxvY2tfaAorI2RlZmluZSBCeXRlU3BpbkxvY2tf
aAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5o
PgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIEJ5
dGVTcGluTG9jayB7CitwdWJsaWM6CisgICAgQnl0ZVNwaW5Mb2NrKCkKKyAgICAgICAgOiBtX2xv
Y2soMCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBsb2NrKCkKKyAgICB7CisgICAgICAgIHdo
aWxlICghd2Vha0NvbXBhcmVBbmRTd2FwKCZtX2xvY2ssIDAsIDEpKQorICAgICAgICAgICAgcGF1
c2VCcmllZmx5KCk7CisgICAgICAgIG1lbW9yeUJhcnJpZXJBZnRlckxvY2soKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgbWVtb3J5QmFycmllckJlZm9y
ZVVubG9jaygpOworICAgICAgICBtX2xvY2sgPSAwOworICAgIH0KKyAgICAKKyAgICBib29sIGlz
SGVsZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9sb2NrOyB9CisgICAgCitwcml2YXRlOgorICAgIHVp
bnQ4X3QgbV9sb2NrOworfTsKKwordHlwZWRlZiBMb2NrZXI8Qnl0ZVNwaW5Mb2NrPiBCeXRlU3Bp
bkxvY2tlcjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Qnl0ZVNwaW5Mb2Nr
OwordXNpbmcgV1RGOjpCeXRlU3BpbkxvY2tlcjsKKworI2VuZGlmIC8vIEJ5dGVTcGluTG9ja19o
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oCShyZXZpc2lvbiAxNDg2MjIp
CisrKyBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzMCwxMiArMTMwLDIyIEBAIHByaXZhdGU6CiBXVEZfRVhQT1JUX1BSSVZBVEUgRFdPUkQg
YWJzb2x1dGVUaW1lVG9XYWl0VGltZW91dEludGVydmFsKGRvdWJsZSBhYnNvbHV0ZVRpbWUpOwog
I2VuZGlmCiAKK2lubGluZSB2b2lkIHBhdXNlQnJpZWZseSgpCit7CisjaWYgT1MoV0lORE9XUykK
KyAgICBTbGVlcCgwKTsKKyNlbHNlCisgICAgc2NoZWRfeWllbGQoKTsKKyNlbmRpZgorfQorCiB9
IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpNdXRleDsKIHVzaW5nIFdURjo6TXV0ZXhM
b2NrZXI7CiB1c2luZyBXVEY6Ok11dGV4VHJ5TG9ja2VyOwogdXNpbmcgV1RGOjpUaHJlYWRDb25k
aXRpb247Cit1c2luZyBXVEY6OnBhdXNlQnJpZWZseTsKIAogI2lmIE9TKFdJTkRPV1MpCiB1c2lu
ZyBXVEY6OmFic29sdXRlVGltZVRvV2FpdFRpbWVvdXRJbnRlcnZhbDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198611</attachid>
            <date>2013-04-17 14:21:03 -0700</date>
            <delta_ts>2013-04-18 14:40:34 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35877</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4NjMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDEzLTA0LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogYWxsIGlubGluZSBjYWNoZXMgc2hvdWxkIHRocmVhZC1zYWZlIGVub3VnaCB0
byBhbGxvdyBhIGNvbmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkIHRvIHJlYWQgdGhlbSBzYWZl
bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNDc2
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgRm9yIG1vc3QgaW5saW5lIGNhY2hlcyB0aGlzIGlzIGVhc3k6IHRoZSBpbmxpbmUgY2FjaGUg
aGFzIGEgY2xlYW4gdGVtcG9yYWwKKyAgICAgICAgc2VwYXJhdGlvbiBiZXR3ZWVuIGRvaW5nIHRo
ZSByZXF1ZXN0ZWQgYWN0aW9uICh3aGljaCBtYXkgdGFrZSBhbiB1bmJvdW5kZWQKKyAgICAgICAg
YW1vdW50IG9mIHRpbWUsIG1heSByZWN1cnNlLCBhbmQgbWF5IGRvIGFyYml0cmFyeSB0aGluZ3Mp
IGFuZCByZWNvcmRpbmcgdGhlCisgICAgICAgIHJlbGV2YW50IGluZm9ybWF0aW9uIGluIHRoZSBj
YWNoZS4gU28sIHdlIGp1c3QgcHV0IGxvY2tzIGFyb3VuZCB0aGUKKyAgICAgICAgcmVjb3JkaW5n
IGJpdC4gVGhhdCBwYXJ0IGlzIGFsd2F5cyBPKDEpIGFuZCBkb2VzIG5vdCByZWN1cnNlLiBUaGUg
bG9jayB3ZQorICAgICAgICB1c2UgaXMgcGVyLUNvZGVCbG9jayB0byBhY2hpZXZlIGEgZ29vZCBi
YWxhbmNlIGJldHdlZW4gbG9ja2luZyBncmFudWxhcml0eQorICAgICAgICBhbmQgbG93IHNwYWNl
IG92ZXJoZWFkLiBTbyBhIGNvbmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkIHdpbGwgb25seSBi
bG9jaworICAgICAgICBpZiBhbiBpbmxpbmUgY2FjaGUgcGluZy1wb25ncyBpbiB0aGUgY29kZSBi
bG9jayBiZWluZyBjb21waWxlZCAob3IgaW5saW5lZCkKKyAgICAgICAgYW5kIG5ldmVyIHdoZW4g
b3RoZXIgaW5saW5lIGNhY2hlcyBkbyB0aGluZ3MuCisgICAgICAgIAorICAgICAgICBGb3IgcmVz
b2x2ZSBvcGVyYXRpb25zLCBpdCdzIGEgYml0IHRyaWNreS4gVGhlIGdsb2JhbCByZXNvbHZlIGJp
dCB3b3JrcworICAgICAgICBsaWtlIGFueSBvdGhlciBJQyBpbiB0aGF0IGl0IGhhcyB0aGUgY2xl
YW4gdGVtcG9yYWwgc2VwYXJhdGlvbi4gQnV0IHRoZQorICAgICAgICBvcGVyYXRpb25zIHZlY3Rv
ciBpdHNlbGYgZG9lc24ndCBoYXZlIHRoaXMgc2VwYXJhdGlvbiwgc2luY2Ugd2Ugd2lsbCBiZQor
ICAgICAgICBmaWxsaW5nIGl0IGluIHRhbmRlbSB3aXRoIGFjdGlvbnMgdGhhdCBtYXkgdGFrZSBh
IGxvbmcgdGltZS4gVGhpcyBwYXRjaAorICAgICAgICBnZXRzIGFyb3VuZCB0aGlzIGJ5IGhhdmlu
ZyBhIG1fcmVhZHkgYml0IGluIHRoZSBSZXNvbHZlT3BlcmF0aW9ucyBhbmQKKyAgICAgICAgUHV0
VG9CYXNlT3BlcmF0aW9uLiBUaGlzIGlzIHNldCB3aGlsZSBob2xkaW5nIHRoZSBDb2RlQmxvY2sn
cyBsb2NrLiBJZiB0aGUKKyAgICAgICAgREZHIG9ic2VydmVzIHRoZSBtX3JlYWR5IGJpdCBub3Qg
c2V0ICh3aGlsZSBob2xkaW5nIHRoZSBsb2NrKSB0aGVuIGl0CisgICAgICAgIGNvbnNlcnZhdGl2
ZWx5IGFzc3VtZXMgdGhhdCB0aGUgcmVzb2x2ZSBoYXNuJ3QgaGFwcGVuZWQgeWV0IGFuZCBqdXN0
CisgICAgICAgIHBsYW50cyBhIEZvcmNlT1NSRXhpdC4KKworICAgICAgICAqIGJ5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVG
b3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoQ29kZUJsb2Nr
KToKKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpS
ZXNvbHZlR2xvYmFsU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9SZXNv
bHZlT3BlcmF0aW9uLmg6CisgICAgICAgIChKU0M6OlJlc29sdmVPcGVyYXRpb25zOjpSZXNvbHZl
T3BlcmF0aW9ucyk6CisgICAgICAgIChSZXNvbHZlT3BlcmF0aW9ucyk6CisgICAgICAgIChKU0M6
OlB1dFRvQmFzZU9wZXJhdGlvbjo6UHV0VG9CYXNlT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZVJlc29sdmVPcGVyYXRpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAg
KEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToK
KyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAoSlNDOjpsYXp5
TGlua0Zvcik6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAo
SlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6
c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0pTU2NvcGUuY3BwOgorICAgICAgICAoSlND
OjpKU1Njb3BlOjpyZXNvbHZlQ29udGFpbmluZ1Njb3BlSW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpKU1Njb3BlOjpyZXNvbHZlQ29udGFpbmluZ1Njb3BlKToKKyAgICAgICAgKEpTQzo6SlNTY29w
ZTo6cmVzb2x2ZVB1dCk6CisKIDIwMTMtMDQtMTYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBmb3VydGhUaWVyOiBERkcgc2hvdWxkIGJlIGFibGUgdG8gcXVlcnkg
U3RydWN0dXJlIHdpdGhvdXQgbW9kaWZ5aW5nIGl0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE0ODYyMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDggQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGcgogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZv
cihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7Cisg
ICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAg
CiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIFVOVVNFRF9QQVJBTShieXRl
Y29kZUluZGV4KTsKICNpZiBFTkFCTEUoSklUKSAmJiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAxNDg2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFs
RmluYWxpemVyLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSAiV2F0Y2hw
b2ludC5oIgorI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgpAQCAtOTA3LDYgKzkwOCwyNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgaW50IG1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwogICAgICAgICBpbnQgbV9udW1WYXJz
OwogICAgICAgICBib29sIG1faXNDb25zdHJ1Y3RvcjsKKyAgICAgICAgCisgICAgICAgIC8vIFRo
aXMgaXMgaW50ZW50aW9uYWxseSBwdWJsaWM7IGl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGFu
eW9uZSBkb2luZyBhbnkKKyAgICAgICAgLy8gb2YgdGhlIGZvbGxvd2luZyB0byBob2xkIHRoZSBs
b2NrOgorICAgICAgICAvLworICAgICAgICAvLyAtIE1vZGlmeWluZyBhbnkgaW5saW5lIGNhY2hl
IGluIHRoaXMgY29kZSBibG9jay4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBRdWVyaW5nIGFu
eSBpbmxpbmUgY2FjaGUgaW4gdGhpcyBjb2RlIGJsb2NrLCBmcm9tIGEgdGhyZWFkIG90aGVyIHRo
YW4KKyAgICAgICAgLy8gICB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIC8vCisgICAgICAgIC8v
IEFkZGl0aW9uYWxseSwgaXQncyBvbmx5IGxlZ2FsIHRvIG1vZGlmeSB0aGUgaW5saW5lIGNhY2hl
IG9uIHRoZSBtYWluCisgICAgICAgIC8vIHRocmVhZC4gVGhpcyBtZWFucyB0aGF0IHRoZSBtYWlu
IHRocmVhZCBjYW4gcXVlcnkgdGhlIGlubGluZSBjYWNoZSB3aXRob3V0CisgICAgICAgIC8vIGxv
Y2tpbmcuIFRoaXMgaXMgY3J1Y2lhbCBzaW5jZSBleGVjdXRpbmcgdGhlIGlubGluZSBjYWNoZSBp
cyBlZmZlY3RpdmVseQorICAgICAgICAvLyAicXVlcnlpbmciIGl0LgorICAgICAgICAvLworICAg
ICAgICAvLyBBbm90aGVyIGV4Y2VwdGlvbiB0byB0aGUgcnVsZXMgaXMgdGhhdCB0aGUgR0MgY2Fu
IGRvIHdoYXRldmVyIGl0IHdhbnRzCisgICAgICAgIC8vIHdpdGhvdXQgaG9sZGluZyBhbnkgbG9j
a3MsIGJlY2F1c2UgdGhlIEdDIGlzIGd1YXJhbnRlZWQgdG8gd2FpdCB1bnRpbCBhbnkKKyAgICAg
ICAgLy8gY29uY3VycmVudCBjb21waWxhdGlvbiB0aHJlYWRzIGZpbmlzaCB3aGF0IHRoZXkncmUg
ZG9pbmcuCisgICAgICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrIExvY2s7CisgICAgICAgIHR5cGVk
ZWYgQnl0ZVNwaW5Mb2NrZXIgTG9ja2VyOworICAgICAgICBMb2NrIG1fbG9jazsKIAogICAgIHBy
b3RlY3RlZDoKICNpZiBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ4NjIyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIsNiArMTEyLDggQEAgdm9pZCBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hh
aW4oR2V0QgogCiBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJZGVudGlmaWVyJiBp
ZGVudCkKIHsKKyAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9s
b2NrKTsKKyAgICAKICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CiAgICAgVU5VU0VE
X1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwogICAgIFVOVVNFRF9QQVJBTShpZGVudCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAxNDg2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDggQEAgUHV0QnlJZFN0YXR1
cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBJZGVudGlmaWVyJiBpZGVudCkKIHsKKyAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2Nr
ZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAKICAgICBVTlVTRURfUEFSQU0ocHJvZmls
ZWRCbG9jayk7CiAgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwogICAgIFVOVVNFRF9Q
QVJBTShpZGVudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2
ZUdsb2JhbFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuY3BwCShyZXZpc2lvbiAxNDg2MjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDYgKzQ4LDggQEAgc3RhdGljIFJlc29sdmVHbG9iYWxTdGF0dXMgY29t
cHV0ZUZvclN0cgogCiBSZXNvbHZlR2xvYmFsU3RhdHVzIFJlc29sdmVHbG9iYWxTdGF0dXM6OmNv
bXB1dGVGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCwgUmVzb2x2ZU9wZXJhdGlvbiogb3Bl
cmF0aW9uLCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogeworICAgIENvZGVCbG9jazo6TG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgCiAgICAgQVNTRVJUKG9wZXJhdGlvbi0+
bV9vcGVyYXRpb24gPT0gUmVzb2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVy
dHkpOwogICAgIGlmICghb3BlcmF0aW9uLT5tX3N0cnVjdHVyZSkKICAgICAgICAgcmV0dXJuIFJl
c29sdmVHbG9iYWxTdGF0dXMoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9SZXNvbHZlT3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1Jlc29sdmVPcGVyYXRpb24uaAkocmV2aXNpb24gMTQ4NjIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29sdmVPcGVyYXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTM5LDcgKzEzOSwxMSBAQCBzdHJ1Y3QgUmVzb2x2ZU9wZXJhdGlvbiB7CiAgICAgfQog
fTsKIAotdHlwZWRlZiBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbj4gUmVzb2x2ZU9wZXJhdGlvbnM7
CitzdHJ1Y3QgUmVzb2x2ZU9wZXJhdGlvbnMgOiBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbj4gewor
ICAgIFJlc29sdmVPcGVyYXRpb25zKCkgOiBtX3JlYWR5KGZhbHNlKSB7IH0KKyAgICAKKyAgICBi
b29sIG1fcmVhZHk7Cit9OwogCiBzdHJ1Y3QgUHV0VG9CYXNlT3BlcmF0aW9uIHsKICAgICBQdXRU
b0Jhc2VPcGVyYXRpb24oYm9vbCBpc1N0cmljdCkKQEAgLTE0Nyw2ICsxNTEsNyBAQCBzdHJ1Y3Qg
UHV0VG9CYXNlT3BlcmF0aW9uIHsKICAgICAgICAgLCBtX2lzRHluYW1pYyhmYWxzZSkKICAgICAg
ICAgLCBtX2lzU3RyaWN0KGlzU3RyaWN0KQogICAgICAgICAsIG1fcHJlZGljYXRlUG9pbnRlcigw
KQorICAgICAgICAsIG1fcmVhZHkoZmFsc2UpCiAgICAgewogCiAgICAgfQpAQCAtMTcyLDYgKzE3
Nyw3IEBAIHN0cnVjdCBQdXRUb0Jhc2VPcGVyYXRpb24gewogICAgICAgICAgICAgaW50MzJfdCBt
X29mZnNldEluQnV0dGVyZmx5OwogICAgICAgICB9OwogICAgIH07CisgICAgYm9vbCBtX3JlYWR5
OwogfTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0ODYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc4LDEwICsx
Nzc4LDE3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZShib29sIHNraXAKIAogYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZlT3BlcmF0aW9ucyhTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBSZXNvbHZlT3BlcmF0aW9ucyogcmVzb2x2
ZU9wZXJhdGlvbnMsIFB1dFRvQmFzZU9wZXJhdGlvbiogcHV0VG9CYXNlT3BlcmF0aW9uLCBOb2Rl
KiogYmFzZSwgTm9kZSoqIHZhbHVlKQogewotICAgIGlmIChyZXNvbHZlT3BlcmF0aW9ucy0+aXNF
bXB0eSgpKSB7Ci0gICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHsKKyAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgCisgICAgICAgIGlm
ICghcmVzb2x2ZU9wZXJhdGlvbnMtPm1fcmVhZHkpIHsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgo
Rm9yY2VPU1JFeGl0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAg
IH0KKworICAgIEFTU0VSVCghcmVzb2x2ZU9wZXJhdGlvbnMtPmlzRW1wdHkoKSk7CisKICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpOwogICAgIGludCBza2lwQ291bnQgPSAwOwogICAgIGJvb2wgc2tp
cFRvcCA9IGZhbHNlOwpAQCAtMzE2OCw2ICszMTc1LDE3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBt
X2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kXTsKICAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgICAgIFB1dFRvQmFzZU9wZXJhdGlvbiogcHV0VG9C
YXNlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUucHV0VG9CYXNlT3BlcmF0aW9uOworICAgICAg
ICAgICAgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIg
bG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIXB1dFRvQmFzZS0+bV9yZWFkeSkgewor
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CisgICAgICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KGJhc2UpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfcHV0X3RvX2Jhc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHB1dFRvQmFzZS0+bV9pc0R5bmFtaWMpIHsKICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgZ2V0
KGJhc2UpLCBnZXQodmFsdWUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCShyZXZpc2lvbiAxNDg2MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ0LDYgKzg0NCw4IEBAIHZvaWQgcGVyZm9y
bVBsYXRmb3JtU3BlY2lmaWNKSVRBc3NlcnRpb24KIAogTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lk
IHRyeUNhY2hlUHV0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNv
bnN0IFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBi
b29sIGRpcmVjdCkKIHsKKyAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2spOworICAgIAogICAgIC8vIFRoZSBpbnRlcnByZXRlciBjaGVja3MgZm9yIHJlY3Vyc2lv
biBoZXJlOyBJIGRvIG5vdCBiZWxpZXZlIHRoaXMgY2FuIG9jY3VyIGluIENUSS4KIAogICAgIGlm
ICghYmFzZVZhbHVlLmlzQ2VsbCgpKQpAQCAtODk4LDYgKzkwMCw4IEBAIE5FVkVSX0lOTElORSBz
dGF0aWMgdm9pZCB0cnlDYWNoZVB1dEJ5SUQKIAogTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIHRy
eUNhY2hlR2V0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8pCiB7CisgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2Vy
KGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAKICAgICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRo
YXQgcHJvdmVzIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QKICAgICAv
LyBsaWtlIHRoZSBpbnRlcnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNp
b24uCiAKQEAgLTE1ODYsNiArMTU5MCw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF8KIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIAorICAgIENvZGVCbG9j
azo6TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgCiAgICAgaWYgKGJhc2VW
YWx1ZS5pc0NlbGwoKQogICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlKCkKICAgICAgICAgJiYg
IWJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCktPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5
KCkKQEAgLTE3MDMsNiArMTcwOSw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1Zh
bHVlLCBvcF8KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0K
IAorICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAg
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSgpOwogCiAgICAgQVNTRVJUKHNsb3Quc2xvdEJhc2UoKS5pc09iamVjdCgpKTsKQEAgLTIxNjQs
NiArMjE3Miw3IEBAIGlubGluZSB2b2lkKiBsYXp5TGlua0ZvcihDYWxsRnJhbWUqIGNhbGwKICAg
ICAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVG
b3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgfQogCisgICAgQ29kZUJsb2NrOjpMb2Nr
ZXIgbG9ja2VyKGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPm1fbG9jayk7
CiAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5m
by0+c2V0U2VlbigpOwogICAgIGVsc2UKQEAgLTIyMzksNiArMjI0OCw3IEBAIERFRklORV9TVFVC
X0ZVTkNUSU9OKHZvaWQqLCB2bV9sYXp5TGlua0MKICAgICAKICAgICBpZiAoc2hvdWxkTGluaykg
ewogICAgICAgICBBU1NFUlQoY29kZVB0cik7CisgICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxv
Y2tlcihjYWxsZXJDb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIEpJVDo6Y29tcGlsZUNsb3N1
cmVDYWxsKGdsb2JhbERhdGEsIGNhbGxMaW5rSW5mbywgY2FsbGVyQ29kZUJsb2NrLCBjYWxsZWVD
b2RlQmxvY2ssIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY29kZVB0cik7CiAgICAgICAgIGNhbGxM
aW5rSW5mby0+aGFzU2VlbkNsb3N1cmUgPSB0cnVlOwogICAgIH0gZWxzZQpAQCAtMjM3OCw4ICsy
Mzg4LDE3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBT
VFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Nj
b3BlOjpyZXNvbHZlKGNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwg
c3RhY2tGcmFtZS5hcmdzWzFdLnJlc29sdmVPcGVyYXRpb25zKCkpOworICAgIAorICAgIFJlc29s
dmVPcGVyYXRpb25zKiBvcGVyYXRpb25zID0gc3RhY2tGcmFtZS5hcmdzWzFdLnJlc29sdmVPcGVy
YXRpb25zKCk7CisgICAgYm9vbCB3aWxsUmVpZnkgPSBvcGVyYXRpb25zLT5pc0VtcHR5KCk7Cisg
ICAgCisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlKGNhbGxGcmFtZSwgc3Rh
Y2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgb3BlcmF0aW9ucyk7CisgICAgCisgICAgaWYg
KHdpbGxSZWlmeSkgeworICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAgb3BlcmF0aW9ucy0+bV9yZWFkeSA9IHRy
dWU7CisgICAgfQorICAgIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQpAQCAtMjM5MSw3ICsyNDEwLDE1IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF90b19iYXMKICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogICAgIEpTVmFsdWUgYmFzZSA9IGNh
bGxGcmFtZS0+cihzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKSkuanNWYWx1ZSgpOwogICAgIEpT
VmFsdWUgdmFsdWUgPSBjYWxsRnJhbWUtPnIoc3RhY2tGcmFtZS5hcmdzWzJdLmludDMyKCkpLmpz
VmFsdWUoKTsKLSAgICBKU1Njb3BlOjpyZXNvbHZlUHV0KGNhbGxGcmFtZSwgYmFzZSwgc3RhY2tG
cmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgdmFsdWUsIHN0YWNrRnJhbWUuYXJnc1szXS5wdXRU
b0Jhc2VPcGVyYXRpb24oKSk7CisgICAgUHV0VG9CYXNlT3BlcmF0aW9uKiBvcGVyYXRpb24gPSBz
dGFja0ZyYW1lLmFyZ3NbM10ucHV0VG9CYXNlT3BlcmF0aW9uKCk7CisgICAgYm9vbCBmaXJzdFRp
bWUgPSAhb3BlcmF0aW9uLT5tX3JlYWR5OworICAgIEpTU2NvcGU6OnJlc29sdmVQdXQoY2FsbEZy
YW1lLCBiYXNlLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCB2YWx1ZSwgb3BlcmF0
aW9uKTsKKyAgICAKKyAgICBpZiAoZmlyc3RUaW1lKSB7CisgICAgICAgIENvZGVCbG9jazo6TG9j
a2VyIGxvY2tlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBvcGVy
YXRpb24tPm1fcmVhZHkgPSB0cnVlOworICAgIH0KKwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05f
QVRfRU5EKCk7CiB9CiAKQEAgLTI3MTgsMTYgKzI3NDUsMzYgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04oRW5jb2RlZEpTVmFsdWUsIG9wXwogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFs
dWUsIG9wX3Jlc29sdmVfYmFzZSkKIHsKICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTU2NvcGU6OnJlc29sdmVCYXNl
KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCBm
YWxzZSwgc3RhY2tGcmFtZS5hcmdzWzFdLnJlc29sdmVPcGVyYXRpb25zKCksIHN0YWNrRnJhbWUu
YXJnc1syXS5wdXRUb0Jhc2VPcGVyYXRpb24oKSkpOworICAgIAorICAgIFJlc29sdmVPcGVyYXRp
b25zKiBvcGVyYXRpb25zID0gc3RhY2tGcmFtZS5hcmdzWzFdLnJlc29sdmVPcGVyYXRpb25zKCk7
CisgICAgYm9vbCB3aWxsUmVpZnkgPSBvcGVyYXRpb25zLT5pc0VtcHR5KCk7CisgICAgCisgICAg
SlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlQmFzZShzdGFja0ZyYW1lLmNhbGxGcmFt
ZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgZmFsc2UsIG9wZXJhdGlvbnMsIHN0
YWNrRnJhbWUuYXJnc1syXS5wdXRUb0Jhc2VPcGVyYXRpb24oKSk7CisgICAgCisgICAgaWYgKHdp
bGxSZWlmeSkgeworICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoc3RhY2tGcmFtZS5j
YWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBvcGVyYXRpb25zLT5tX3Jl
YWR5ID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfcmVzb2x2
ZV9iYXNlX3N0cmljdF9wdXQpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJh
bWUpOwogCi0gICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZUJhc2Uoc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksIHRydWUs
IHN0YWNrRnJhbWUuYXJnc1sxXS5yZXNvbHZlT3BlcmF0aW9ucygpLCBzdGFja0ZyYW1lLmFyZ3Nb
Ml0ucHV0VG9CYXNlT3BlcmF0aW9uKCkpKQorICAgIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRp
b25zID0gc3RhY2tGcmFtZS5hcmdzWzFdLnJlc29sdmVPcGVyYXRpb25zKCk7CisgICAgYm9vbCB3
aWxsUmVpZnkgPSBvcGVyYXRpb25zLT5pc0VtcHR5KCk7CisgICAgCisgICAgaWYgKEpTVmFsdWUg
cmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZUJhc2Uoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNr
RnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksIHRydWUsIG9wZXJhdGlvbnMsIHN0YWNrRnJhbWUu
YXJnc1syXS5wdXRUb0Jhc2VPcGVyYXRpb24oKSkpIHsKKyAgICAgICAgCisgICAgICAgIGlmICh3
aWxsUmVpZnkpIHsKKyAgICAgICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihzdGFja0Zy
YW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgICAgICBvcGVyYXRp
b25zLT5tX3JlYWR5ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIH0KICAgICBWTV9USFJPV19FWENFUFRJT04o
KTsKIH0KIApAQCAtMzAyNSw3ICszMDcyLDEzIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF8KICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAK
ICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwotICAgIEpT
VmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZVdpdGhCYXNlKGNhbGxGcmFtZSwgc3RhY2tG
cmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgJmNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3RhY2tG
cmFtZS5hcmdzWzFdLmludDMyKCldLCBzdGFja0ZyYW1lLmFyZ3NbMl0ucmVzb2x2ZU9wZXJhdGlv
bnMoKSwgc3RhY2tGcmFtZS5hcmdzWzNdLnB1dFRvQmFzZU9wZXJhdGlvbigpKTsKKyAgICBSZXNv
bHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucyA9IHN0YWNrRnJhbWUuYXJnc1syXS5yZXNvbHZlT3Bl
cmF0aW9ucygpOworICAgIGJvb2wgd2lsbFJlaWZ5ID0gb3BlcmF0aW9ucy0+aXNFbXB0eSgpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZVdpdGhCYXNlKGNhbGxGcmFtZSwg
c3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgJmNhbGxGcmFtZS0+cmVnaXN0ZXJzKClb
c3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCldLCBvcGVyYXRpb25zLCBzdGFja0ZyYW1lLmFyZ3Nb
M10ucHV0VG9CYXNlT3BlcmF0aW9uKCkpOworICAgIGlmICh3aWxsUmVpZnkpIHsKKyAgICAgICAg
Q29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+bV9sb2NrKTsKKyAgICAgICAgb3BlcmF0aW9ucy0+bV9yZWFkeSA9IHRydWU7CisgICAgfQog
ICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQpAQCAtMzAzNSw3ICszMDg4LDEzIEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBTVFVCX0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tG
cmFtZSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1l
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZVdpdGhUaGlzKGNhbGxGcmFt
ZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgJmNhbGxGcmFtZS0+cmVnaXN0ZXJz
KClbc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCldLCBzdGFja0ZyYW1lLmFyZ3NbMl0ucmVzb2x2
ZU9wZXJhdGlvbnMoKSk7CisgICAgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMgPSBzdGFj
a0ZyYW1lLmFyZ3NbMl0ucmVzb2x2ZU9wZXJhdGlvbnMoKTsKKyAgICBib29sIHdpbGxSZWlmeSA9
IG9wZXJhdGlvbnMtPmlzRW1wdHkoKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJl
c29sdmVXaXRoVGhpcyhjYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCks
ICZjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3N0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpXSwgb3Bl
cmF0aW9ucyk7CisgICAgaWYgKHdpbGxSZWlmeSkgeworICAgICAgICBDb2RlQmxvY2s6OkxvY2tl
ciBsb2NrZXIoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAg
ICAgICBvcGVyYXRpb25zLT5tX3JlYWR5ID0gdHJ1ZTsKKyAgICB9CiAgICAgQ0hFQ0tfRk9SX0VY
Q0VQVElPTl9BVF9FTkQoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAJKHJldmlzaW9uIDE0ODYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxMyw2ICs4MTMsMTIgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmUpCiAgICAgZGVmYXVsdDoKICAgICAgICAg
YnJlYWs7CiAgICAgfQorICAgIAorICAgIHsKKyAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9j
a2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBvcGVyYXRpb25zLT5tX3Jl
YWR5ID0gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgTExJTlRfUkVUVVJOX1BST0ZJTEVEKG9wX3Jl
c29sdmUsIHJlc3VsdCk7CiB9CiAKQEAgLTgyOSw2ICs4MzUsMTIgQEAgTExJTlRfU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3B1dF90b19iYQogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KKworICAgIHsKKyAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGV4ZWMtPmNv
ZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBvcGVyYXRpb24tPm1fcmVhZHkgPSB0cnVlOwor
ICAgIH0KKyAgICAKICAgICBMTElOVF9FTkQoKTsKIH0KIApAQCAtODYxLDYgKzg3MywxMiBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV9iCiAgICAgZGVmYXVsdDoKICAg
ICAgICAgYnJlYWs7CiAgICAgfQorICAgIAorICAgIHsKKyAgICAgICAgQ29kZUJsb2NrOjpMb2Nr
ZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBvcGVyYXRpb25z
LT5tX3JlYWR5ID0gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgTExJTlRfUFJPRklMRV9WQUxVRShv
cF9yZXNvbHZlX2Jhc2UsIHJlc3VsdCk7CiAgICAgTExJTlRfUkVUVVJOKHJlc3VsdCk7CiB9CkBA
IC04ODAsNyArODk4LDEyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZl
X3cKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIFJlc29sdmVPcGVyYXRpb25zKiBvcGVyYXRp
b25zID0gcGNbNF0udS5yZXNvbHZlT3BlcmF0aW9uczsKKyAgICBib29sIHdpbGxSZWlmeSA9IG9w
ZXJhdGlvbnMtPmlzRW1wdHkoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29s
dmVXaXRoQmFzZShleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1szXS51Lm9w
ZXJhbmQpLCAmTExJTlRfT1AoMSksIG9wZXJhdGlvbnMsIHBjWzVdLnUucHV0VG9CYXNlT3BlcmF0
aW9uKTsKKyAgICBpZiAod2lsbFJlaWZ5KSB7CisgICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxv
Y2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAgb3BlcmF0aW9ucy0+bV9y
ZWFkeSA9IHRydWU7CisgICAgfQogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwogICAgIExM
SU5UX09QKDIpID0gcmVzdWx0OwogICAgIExMSU5UX1BST0ZJTEVfVkFMVUUob3BfcmVzb2x2ZV93
aXRoX2Jhc2UsIHJlc3VsdCk7CkBAIC04OTEsNyArOTE0LDEyIEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9yZXNvbHZlX3cKIHsKICAgICBMTElOVF9CRUdJTigpOwogICAgIFJlc29s
dmVPcGVyYXRpb25zKiBvcGVyYXRpb25zID0gcGNbNF0udS5yZXNvbHZlT3BlcmF0aW9uczsKKyAg
ICBib29sIHdpbGxSZWlmeSA9IG9wZXJhdGlvbnMtPmlzRW1wdHkoKTsKICAgICBKU1ZhbHVlIHJl
c3VsdCA9IEpTU2NvcGU6OnJlc29sdmVXaXRoVGhpcyhleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+
aWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQpLCAmTExJTlRfT1AoMSksIG9wZXJhdGlvbnMpOwor
ICAgIGlmICh3aWxsUmVpZnkpIHsKKyAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGV4
ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBvcGVyYXRpb25zLT5tX3JlYWR5ID0g
dHJ1ZTsKKyAgICB9CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgTExJTlRfT1Ao
MikgPSByZXN1bHQ7CiAgICAgTExJTlRfUFJPRklMRV9WQUxVRShvcF9yZXNvbHZlX3dpdGhfdGhp
cywgcmVzdWx0KTsKQEAgLTkyOSw2ICs5NTcsOCBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfZ2V0X2J5X2lkCiAgICAgICAgIAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNh
Y2hlYWJsZURpY3Rpb25hcnkoKQogICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+dHlwZUluZm8o
KS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKSkgeworICAgICAgICAgICAgQ29kZUJsb2NrOjpM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgcGNbNF0udS5zdHJ1Y3R1cmUuc2V0KAogICAgICAgICAgICAgICAgIGdsb2JhbERhdGEsIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKQEAgLTk5NCw2ICsxMDI0LDgg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgICAgICAgICAg
JiYgYmFzZUNlbGwgPT0gc2xvdC5iYXNlKCkpIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
aWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKKyAgICAg
ICAgICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpICYmIHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IHN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoc3RydWN0dXJlLT5wcmV2aW91c0lEKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVl
bkludmFsaWRhdGVkKCkpOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTE0MzEsOSArMTQ2Mywx
MiBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgfQogICAg
IAogICAgIGlmICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XICYmIGNhbGxMaW5rSW5mbykgewor
ICAgICAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZXIgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgp
OworCisgICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihleGVjQ2FsbGVyLT5jb2RlQmxv
Y2soKS0+bV9sb2NrKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmlzT25M
aXN0KCkpCiAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnJlbW92ZSgpOwotICAgICAgICBFeGVj
U3RhdGUqIGV4ZWNDYWxsZXIgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwogICAgICAgICBj
YWxsTGlua0luZm8tPmNhbGxlZS5zZXQoZ2xvYmFsRGF0YSwgZXhlY0NhbGxlci0+Y29kZUJsb2Nr
KCktPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwogICAgICAgICBjYWxsTGlua0luZm8tPmxh
c3RTZWVuQ2FsbGVlLnNldChnbG9iYWxEYXRhLCBleGVjQ2FsbGVyLT5jb2RlQmxvY2soKS0+b3du
ZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+bWFjaGluZUNv
ZGVUYXJnZXQgPSBjb2RlUHRyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTY29wZS5jcHAJKHJldmlzaW9uIDE0ODYyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNyArMTk2LDcgQEAgc3Rh
dGljIGJvb2wgZXhlY3V0ZVJlc29sdmVPcGVyYXRpb25zKENhbAogICAgIH0KIH0KIAotdGVtcGxh
dGUgPEpTU2NvcGU6Okxvb2t1cE1vZGUgbW9kZSwgSlNTY29wZTo6UmV0dXJuVmFsdWVzIHJldHVy
blZhbHVlcz4gSlNPYmplY3QqIEpTU2NvcGU6OnJlc29sdmVDb250YWluaW5nU2NvcGVJbnRlcm5h
bChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUHJv
cGVydHlTbG90JiBzbG90LCBWZWN0b3I8UmVzb2x2ZU9wZXJhdGlvbj4qIG9wZXJhdGlvbnMsIFB1
dFRvQmFzZU9wZXJhdGlvbiogcHV0VG9CYXNlT3BlcmF0aW9uLCBib29sICkKK3RlbXBsYXRlIDxK
U1Njb3BlOjpMb29rdXBNb2RlIG1vZGUsIEpTU2NvcGU6OlJldHVyblZhbHVlcyByZXR1cm5WYWx1
ZXM+IEpTT2JqZWN0KiBKU1Njb3BlOjpyZXNvbHZlQ29udGFpbmluZ1Njb3BlSW50ZXJuYWwoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIFByb3BlcnR5
U2xvdCYgc2xvdCwgUmVzb2x2ZU9wZXJhdGlvbnMqIG9wZXJhdGlvbnMsIFB1dFRvQmFzZU9wZXJh
dGlvbiogcHV0VG9CYXNlT3BlcmF0aW9uLCBib29sICkKIHsKICAgICBKU1Njb3BlKiBzY29wZSA9
IGNhbGxGcmFtZS0+c2NvcGUoKTsKICAgICBBU1NFUlQoc2NvcGUpOwpAQCAtMzAxLDYgKzMwMSw4
IEBAIHRlbXBsYXRlIDxKU1Njb3BlOjpMb29rdXBNb2RlIG1vZGUsIEpTU2MKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6Y2hl
Y2tGb3JEeW5hbWljRW50cmllc0JlZm9yZUdsb2JhbFNjb3BlKCkpOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocHV0VG9CYXNlT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
Pm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX2lzRHluYW1pYyA9IHJlcXVpcmVzRHlu
YW1pY0NoZWNrczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRp
b24tPm1fa2luZCA9IFB1dFRvQmFzZU9wZXJhdGlvbjo6R2xvYmFsUHJvcGVydHlQdXQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX3N0cnVjdHVyZS5z
ZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVy
RXhlY3V0YWJsZSgpLCBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpKTsKQEAgLTM0NSw2ICszNDcs
OCBAQCB0ZW1wbGF0ZSA8SlNTY29wZTo6TG9va3VwTW9kZSBtb2RlLCBKU1NjCiAgICAgICAgICAg
ICAgICAgICAgICAgICBnb3RvIGZhaWw7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHB1dFRv
QmFzZU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUJsb2NrOjpMb2Nr
ZXIgbG9ja2VyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+
bV9raW5kID0gZW50cnkuaXNSZWFkT25seSgpID8gUHV0VG9CYXNlT3BlcmF0aW9uOjpSZWFkb25s
eSA6IFB1dFRvQmFzZU9wZXJhdGlvbjo6VmFyaWFibGVQdXQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1fc3RydWN0dXJlLnNldChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxG
cmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX29mZnNldCA9IGVudHJ5
LmdldEluZGV4KCk7CkBAIC00MjEsNyArNDI1LDcgQEAgdGVtcGxhdGUgPEpTU2NvcGU6Okxvb2t1
cE1vZGUgbW9kZSwgSlNTYwogICAgIHJldHVybiAwOwogfQogCi10ZW1wbGF0ZSA8SlNTY29wZTo6
UmV0dXJuVmFsdWVzIHJldHVyblZhbHVlcz4gSlNPYmplY3QqIEpTU2NvcGU6OnJlc29sdmVDb250
YWluaW5nU2NvcGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIsIFByb3BlcnR5U2xvdCYgc2xvdCwgVmVjdG9yPFJlc29sdmVPcGVyYXRpb24+KiBvcGVy
YXRpb25zLCBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbiwgYm9vbCBpc1N0
cmljdCkKK3RlbXBsYXRlIDxKU1Njb3BlOjpSZXR1cm5WYWx1ZXMgcmV0dXJuVmFsdWVzPiBKU09i
amVjdCogSlNTY29wZTo6cmVzb2x2ZUNvbnRhaW5pbmdTY29wZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgUHJvcGVydHlTbG90JiBzbG90LCBSZXNv
bHZlT3BlcmF0aW9ucyogb3BlcmF0aW9ucywgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VP
cGVyYXRpb24sIGJvb2wgaXNTdHJpY3QpCiB7CiAgICAgaWYgKG9wZXJhdGlvbnMtPnNpemUoKSkK
ICAgICAgICAgcmV0dXJuIHJlc29sdmVDb250YWluaW5nU2NvcGVJbnRlcm5hbDxLbm93blJlc29s
dmUsIHJldHVyblZhbHVlcz4oY2FsbEZyYW1lLCBpZGVudGlmaWVyLCBzbG90LCBvcGVyYXRpb25z
LCBwdXRUb0Jhc2VPcGVyYXRpb24sIGlzU3RyaWN0KTsKQEAgLTYwNyw2ICs2MTEsOCBAQCB2b2lk
IEpTU2NvcGU6OnJlc29sdmVQdXQoQ2FsbEZyYW1lKiBjYWxsCiAgICAgaWYgKHNsb3QuYmFzZSgp
ICE9IGJhc2VPYmplY3QpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIWJhc2VPYmplY3Qt
Pmhhc0lubGluZVN0b3JhZ2UoKSk7CisgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgCiAgICAgb3BlcmF0aW9uLT5tX3N0cnVj
dHVyZS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
Pm93bmVyRXhlY3V0YWJsZSgpLCBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKSk7CiAgICAgc2V0UHV0
UHJvcGVydHlBY2Nlc3NPZmZzZXQob3BlcmF0aW9uLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4NjMyKQorKysgU291cmNlL1dURi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAxMy0wNC0xNyAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIGZvdXJ0aFRpZXI6IGFsbCBpbmxpbmUg
Y2FjaGVzIHNob3VsZCB0aHJlYWQtc2FmZSBlbm91Z2ggdG8gYWxsb3cgYSBjb25jdXJyZW50IGNv
bXBpbGF0aW9uIHRocmVhZCB0byByZWFkIHRoZW0gc2FmZWx5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ3NjIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudGVkIGEgbmV3IHNw
aW5sb2NrIHRoYXQgaXMgb3B0aW1pemVkIGZvciBjb21wYWN0bmVzcywgYnkgdXNpbmcganVzdCBh
IGJ5dGUuCisgICAgICAgIFRoaXMgd2lsbCBiZSB1c2VmdWwgYXMgd2Ugc3RhcnQgdXNpbmcgZmlu
ZS1ncmFpbmVkIGxvY2tpbmcgb24gYSBidW5jaCBvZiBwbGFjZXMuCisgICAgICAgIAorICAgICAg
ICBBdCBzb21lIHBvaW50IEknbGwgbWFrZSB0aGVzZSBieXRlLXNpemVkIHNwaW5sb2NrcyBpbnRv
IGFkYXB0aXZlIG11dGV4ZXMsIGJ1dCBmb3IKKyAgICAgICAgbm93IEkgdGhpbmsgaXQncyBmaW5l
IHRvIGRvIHRoZSBldmlsIHRoaW5nIGFuZCB1c2Ugc3Bpbm5pbmcgcGFydGljdWxhcmx5IHNpbmNl
IHdlCisgICAgICAgIG9ubHkgdXNlIHRoZW0gZm9yIHNob3J0IGNyaXRpY2FsIHNlY3Rpb25zLgor
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L0F0b21pY3MuaDoKKyAgICAgICAgKFdURik6CisgICAgICAgIChXVEY6OndlYWtDb21wYXJlQW5k
U3dhcCk6CisgICAgICAgICogd3RmL0J5dGVTcGluTG9jay5oOiBBZGRlZC4KKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChCeXRlU3BpbkxvY2spOgorICAgICAgICAoV1RGOjpCeXRlU3BpbkxvY2s6
OkJ5dGVTcGluTG9jayk6CisgICAgICAgIChXVEY6OkJ5dGVTcGluTG9jazo6bG9jayk6CisgICAg
ICAgIChXVEY6OkJ5dGVTcGluTG9jazo6dW5sb2NrKToKKyAgICAgICAgKFdURjo6Qnl0ZVNwaW5M
b2NrOjppc0hlbGQpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg6CisgICAg
ICAgIChXVEY6OnBhdXNlQnJpZWZseSk6CisgICAgICAgIChXVEYpOgorCiAyMDEzLTA0LTEyICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGllcjogRlRM
IHNob3VsZCBoYXZlIE9TUiBleGl0CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE0ODYyMikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAKIAkJMTQ2
OTQxOTIxNkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2OTQxOTAxNkVBQUY2RDAwMjRFMTQ2IC8q
IFJ1bkxvb3BUaW1lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTE0Njk0MTkzMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXJDRi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDY5NDE5MTE2
RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyQ0YuY3BwICovOyB9OwogCQkxNDY5NDE5NjE2
RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDY5NDE5NDE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1
bGVQYWlyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMTQ2OTQxOTkxNkVBQjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Njk0MTk4MTZFQUIwNDEw
MDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJDRi5jcHAgKi87IH07CiAJCTE0Njk0MTk3MTZFQUFGRjgw
MDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDY5NDE5NTE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQ
YWlyTWFjLm1tICovOyB9OworCQkxNDY5NDE5OTE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQ
YWlyQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQ2OTQxOTgxNkVBQjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLzsgfTsKIAkJ
MTQ2OTQxOUMxNkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFpbmVkUG9vbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2OTQxOUExNkVBQjEwQTAwMjRF
MTQ2IC8qIEF1dG9kcmFpbmVkUG9vbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTE0Njk0MTlEMTZFQUIxMEEwMDI0RTE0NiAvKiBBdXRvZHJhaW5l
ZFBvb2xNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDY5NDE5QjE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sTWFjLm1tICovOyB9
OwogCQkxNDlFRjE2MzE2QkJGRTBEMDAwQTQzMzEgLyogVHJpU3RhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OUVGMTYyMTZCQkZFMEQwMDBBNDMz
MSAvKiBUcmlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CkBA
IC0zNDAsMTMgKzM0MCwxNCBAQAogCQkwRkQ4MUFDNDE1NEZCMjJFMDA5ODNFNzIgLyogRmFzdEJp
dFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGYXN0Qml0VmVjdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRERCRkE1MTY2NkRGQTMwMEM1NUZF
RiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRERCRkE2MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdQcmludFN0cmVhbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDM0VFNDE3MUI4MzQ3MDBGREFDOEQgLyogQnl0ZVNw
aW5Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVTcGluTG9jay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSQU1TaXplLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRjYxMUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUkFNU2l6ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDY5NDE5MDE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRp
bWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bkxvb3BUaW1lci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDY5NDE5MTE2RUFBRjZEMDAyNEUxNDYgLyog
UnVuTG9vcFRpbWVyQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UnVuTG9vcFRpbWVyQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDY5NDE5
NDE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNjaGVkdWxlUGFpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkxNDY5NDE5ODE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NoZWR1bGVQYWlyQ0YuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDY5NDE5NTE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1
bGVQYWlyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2No
ZWR1bGVQYWlyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDY5NDE5ODE2
RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2NoZWR1bGVQYWlyQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDY5NDE5QTE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1dG9kcmFpbmVkUG9vbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDY5NDE5QjE2RUFCMTBBMDAyNEUxNDYgLyogQXV0
b2RyYWluZWRQb29sTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gQXV0b2RyYWluZWRQb29sTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDlFRjE2MjE2QkJGRTBEMDAwQTQzMzEgLyogVHJpU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHJpU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTcxOSw2ICs3MjAsNyBAQAogCQkJCUE4QTQ3MjY2MTUxQTgyNUEwMDQxMjNGRiAvKiBCb3VuZHND
aGVja2VkUG9pbnRlci5oICovLAogCQkJCUE4QTQ3MjY3MTUxQTgyNUEwMDQxMjNGRiAvKiBCdW1w
UG9pbnRlckFsbG9jYXRvci5oICovLAogCQkJCUVCOTVFMUVGMTYxQTcyNDEwMDg5QTJGNSAvKiBC
eXRlT3JkZXIuaCAqLywKKwkJCQkwRkVDM0VFNDE3MUI4MzQ3MDBGREFDOEQgLyogQnl0ZVNwaW5M
b2NrLmggKi8sCiAJCQkJQThBNDcyNkExNTFBODI1QTAwNDEyM0ZGIC8qIENoZWNrZWRBcml0aG1l
dGljLmggKi8sCiAJCQkJQThBNDcyNkIxNTFBODI1QTAwNDEyM0ZGIC8qIENoZWNrZWRCb29sZWFu
LmggKi8sCiAJCQkJMEZDNEVERTUxNjk2MTQ5NjAwRjY1MDQxIC8qIENvbW1hUHJpbnRlci5oICov
LApJbmRleDogU291cmNlL1dURi93dGYvQXRvbWljcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0F0b21pY3MuaAkocmV2aXNpb24gMTQ4NjIyKQorKysgU291cmNlL1dURi93dGYvQXRv
bWljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNiArMjI2LDQ3IEBAIGlubGluZSB2b2lkIG1l
bW9yeUJhcnJpZXJCZWZvcmVVbmxvY2soKSAKIAogI2VuZGlmCiAKK2lubGluZSBib29sIHdlYWtD
b21wYXJlQW5kU3dhcCh1aW50OF90KiBsb2NhdGlvbiwgdWludDhfdCBleHBlY3RlZCwgdWludDhf
dCBuZXdWYWx1ZSkKK3sKKyNpZiBFTkFCTEUoQ09NUEFSRV9BTkRfU1dBUCkKKyNpZiBDUFUoWDg2
KSB8fCBDUFUoWDg2XzY0KQorICAgIHVuc2lnbmVkIGNoYXIgcmVzdWx0OworICAgIGFzbSB2b2xh
dGlsZSgKKyAgICAgICAgImxvY2s7IGNtcHhjaGdiICUzLCAlMlxuXHQiCisgICAgICAgICJzZXRl
ICUxIgorICAgICAgICA6ICIrYSIoZXhwZWN0ZWQpLCAiPXEiKHJlc3VsdCksICIrbSIoKmxvY2F0
aW9uKQorICAgICAgICA6ICJyIihuZXdWYWx1ZSkKKyAgICAgICAgOiAibWVtb3J5IgorICAgICAg
ICApOworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIHVpbnRwdHJfdCBsb2NhdGlvblZh
bHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obG9jYXRpb24pOworICAgIHVpbnRwdHJfdCBh
bGlnbmVkTG9jYXRpb25WYWx1ZSA9IGxvY2F0aW9uVmFsdWUgJiB+KHNpemVvZih1bnNpZ25lZCkg
LSAxKTsKKyAgICB1aW50cHRyX3QgbG9jYXRpb25PZmZzZXQgPSBsb2NhdGlvblZhbHVlIC0gYWxp
Z25lZExvY2F0aW9uVmFsdWU7CisgICAgQVNTRVJUKGxvY2F0aW9uT2Zmc2V0IDwgc2l6ZW9mKHVu
c2lnbmVkKSk7CisgICAgdW5zaWduZWQqIGFsaWduZWRMb2NhdGlvbiA9IGJpdHdpc2VfY2FzdDx1
bnNpZ25lZCo+KGFsaWduZWRMb2NhdGlvblZhbHVlKTsKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGlzIGxvYWQgaXMgYWx3YXlzIGlzc3VlZCBhbmQgbmV2ZXIgb3B0aW1pemVkIGF3YXkuCisgICAg
dW5zaWduZWQgb2xkQWxpZ25lZFZhbHVlID0gKmNvbnN0X2Nhc3Q8dm9sYXRpbGUgdW5zaWduZWQq
PihhbGlnbmVkTG9jYXRpb24pOworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDhfdCBieXRlc1tz
aXplb2YodW5zaWduZWQpXTsKKyAgICAgICAgdW5zaWduZWQgd29yZDsKKyAgICB9IHU7CisgICAg
dS53b3JkID0gb2xkQWxpZ25lZFZhbHVlOworICAgIGlmICh1LmJ5dGVzW2xvY2F0aW9uT2Zmc2V0
XSAhPSBleHBlY3RlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHUuYnl0ZXNbbG9jYXRp
b25PZmZzZXRdID0gbmV3VmFsdWU7CisgICAgdW5zaWduZWQgbmV3QWxpZ25lZFZhbHVlID0gdS53
b3JkOworICAgIHJldHVybiB3ZWFrQ29tcGFyZUFuZFN3YXAoYWxpZ25lZExvY2F0aW9uLCBvbGRB
bGlnbmVkVmFsdWUsIG5ld0FsaWduZWRWYWx1ZSk7CisjZW5kaWYKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGxvY2F0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZXhwZWN0ZWQpOworICAgIFVOVVNF
RF9QQVJBTShuZXdWYWx1ZSk7CisgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5k
aWYKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNpZiBVU0UoTE9DS0ZSRUVfVEhSRUFEU0FG
RVJFRkNPVU5URUQpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CeXRlU3BpbkxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CeXRlU3BpbkxvY2suaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XVEYvd3RmL0J5dGVTcGluTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCeXRlU3BpbkxvY2tfaAorI2RlZmluZSBCeXRlU3BpbkxvY2tfaAorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9M
b2NrZXIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIEJ5dGVTcGluTG9jayB7CitwdWJs
aWM6CisgICAgQnl0ZVNwaW5Mb2NrKCkKKyAgICAgICAgOiBtX2xvY2soMCkKKyAgICB7CisgICAg
fQorCisgICAgdm9pZCBsb2NrKCkKKyAgICB7CisgICAgICAgIHdoaWxlICghd2Vha0NvbXBhcmVB
bmRTd2FwKCZtX2xvY2ssIDAsIDEpKQorICAgICAgICAgICAgcGF1c2VCcmllZmx5KCk7CisgICAg
ICAgIG1lbW9yeUJhcnJpZXJBZnRlckxvY2soKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB1bmxv
Y2soKQorICAgIHsKKyAgICAgICAgbWVtb3J5QmFycmllckJlZm9yZVVubG9jaygpOworICAgICAg
ICBtX2xvY2sgPSAwOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGVsZCgpIGNvbnN0IHsgcmV0
dXJuICEhbV9sb2NrOyB9CisgICAgCitwcml2YXRlOgorICAgIHVpbnQ4X3QgbV9sb2NrOworfTsK
KwordHlwZWRlZiBMb2NrZXI8Qnl0ZVNwaW5Mb2NrPiBCeXRlU3BpbkxvY2tlcjsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Qnl0ZVNwaW5Mb2NrOwordXNpbmcgV1RGOjpCeXRl
U3BpbkxvY2tlcjsKKworI2VuZGlmIC8vIEJ5dGVTcGluTG9ja19oCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
VGhyZWFkaW5nUHJpbWl0aXZlcy5oCShyZXZpc2lvbiAxNDg2MjIpCisrKyBTb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMiArMTMwLDIy
IEBAIHByaXZhdGU6CiBXVEZfRVhQT1JUX1BSSVZBVEUgRFdPUkQgYWJzb2x1dGVUaW1lVG9XYWl0
VGltZW91dEludGVydmFsKGRvdWJsZSBhYnNvbHV0ZVRpbWUpOwogI2VuZGlmCiAKK2lubGluZSB2
b2lkIHBhdXNlQnJpZWZseSgpCit7CisjaWYgT1MoV0lORE9XUykKKyAgICBTbGVlcCgwKTsKKyNl
bHNlCisgICAgc2NoZWRfeWllbGQoKTsKKyNlbmRpZgorfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAogdXNpbmcgV1RGOjpNdXRleDsKIHVzaW5nIFdURjo6TXV0ZXhMb2NrZXI7CiB1c2luZyBXVEY6
Ok11dGV4VHJ5TG9ja2VyOwogdXNpbmcgV1RGOjpUaHJlYWRDb25kaXRpb247Cit1c2luZyBXVEY6
OnBhdXNlQnJpZWZseTsKIAogI2lmIE9TKFdJTkRPV1MpCiB1c2luZyBXVEY6OmFic29sdXRlVGlt
ZVRvV2FpdFRpbWVvdXRJbnRlcnZhbDsK
</data>
<flag name="review"
          id="220300"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>