<?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>120567</bug_id>
          
          <creation_ts>2013-08-31 17:45:09 -0700</creation_ts>
          <short_desc>CodeBlock::jettison() should be implicit</short_desc>
          <delta_ts>2013-09-03 09:38:40 -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>
          <dependson>120568</dependson>
          <blocked>120608</blocked>
    
    <blocked>112838</blocked>
    
    <blocked>120615</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>923368</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-31 17:45:09 -0700</bug_when>
    <thetext>Right now if we remove all references to a CodeBlock but that CodeBlock might still be used for execution, we have to explicitly hand the CodeBlock over to the GC.  The whole mechanism is oddly similar to DeferredRefCounted except it requires more work.  This implies that we should just use DeferredRefCounted for CodeBlocks and make all CodeBlocks be part of the GC&apos;s CodeBlock sweep.  This also implies making DeferedRefCounted be thread-safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923574</commentid>
    <comment_count>1</comment_count>
      <attachid>210258</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-01 20:48:50 -0700</bug_when>
    <thetext>Created attachment 210258
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923575</commentid>
    <comment_count>2</comment_count>
      <attachid>210259</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-01 20:49:33 -0700</bug_when>
    <thetext>Created attachment 210259
the patch

Fix build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923576</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-01 20:51:40 -0700</bug_when>
    <thetext>Attachment 210259 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommonData.h&apos;, u&apos;Source/JavaScriptCore/heap/CodeBlockSet.cpp&apos;, u&apos;Source/JavaScriptCore/heap/CodeBlockSet.h&apos;, u&apos;Source/JavaScriptCore/heap/ConservativeRoots.cpp&apos;, u&apos;Source/JavaScriptCore/heap/ConservativeRoots.h&apos;, u&apos;Source/JavaScriptCore/heap/DFGCodeBlocks.cpp&apos;, u&apos;Source/JavaScriptCore/heap/DFGCodeBlocks.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/interpreter/JSStack.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/JSStack.h&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.h&apos;, u&apos;Source/JavaScriptCore/runtime/VM.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/interpreter/JSStack.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923577</commentid>
    <comment_count>4</comment_count>
      <attachid>210259</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-01 20:56:08 -0700</bug_when>
    <thetext>Comment on attachment 210259
the patch

Attachment 210259 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1641887</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923578</commentid>
    <comment_count>5</comment_count>
      <attachid>210259</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-01 21:06:52 -0700</bug_when>
    <thetext>Comment on attachment 210259
the patch

Attachment 210259 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1658851</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923579</commentid>
    <comment_count>6</comment_count>
      <attachid>210260</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-01 21:35:25 -0700</bug_when>
    <thetext>Created attachment 210260
the patch

Fix EFL build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923580</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-01 21:37:43 -0700</bug_when>
    <thetext>Attachment 210260 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommonData.h&apos;, u&apos;Source/JavaScriptCore/heap/CodeBlockSet.cpp&apos;, u&apos;Source/JavaScriptCore/heap/CodeBlockSet.h&apos;, u&apos;Source/JavaScriptCore/heap/ConservativeRoots.cpp&apos;, u&apos;Source/JavaScriptCore/heap/ConservativeRoots.h&apos;, u&apos;Source/JavaScriptCore/heap/DFGCodeBlocks.cpp&apos;, u&apos;Source/JavaScriptCore/heap/DFGCodeBlocks.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/interpreter/JSStack.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/JSStack.h&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.h&apos;, u&apos;Source/JavaScriptCore/runtime/VM.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/interpreter/JSStack.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923584</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-01 21:53:36 -0700</bug_when>
    <thetext>Results in jsc:


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

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

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              ImplicitJettison                                 
SunSpider:
   3d-cube                                                           6.7310+-0.0986            6.6723+-0.0609        
   3d-morph                                                          8.3512+-0.1268     ?      8.3860+-0.1708        ?
   3d-raytrace                                                       8.7827+-0.2134     ?      8.8293+-0.1767        ?
   access-binary-trees                                               1.8848+-0.0197            1.8752+-0.0093        
   access-fannkuch                                                   7.8991+-0.3265     ?      8.0363+-0.3866        ? might be 1.0174x slower
   access-nbody                                                      4.1599+-0.0144            4.1446+-0.0084        
   access-nsieve                                                     4.9290+-0.0539            4.8982+-0.0756        
   bitops-3bit-bits-in-byte                                          1.8296+-0.0088            1.8221+-0.0076        
   bitops-bits-in-byte                                               6.8539+-0.1442            6.8351+-0.1301        
   bitops-bitwise-and                                                2.8457+-0.0510     ?      2.8775+-0.0356        ? might be 1.0112x slower
   bitops-nsieve-bits                                                4.6632+-0.0395     ?      4.6639+-0.0103        ?
   controlflow-recursive                                             3.0170+-0.0080            3.0155+-0.0061        
   crypto-aes                                                        5.3215+-0.0477            5.2861+-0.0299        
   crypto-md5                                                        3.0448+-0.0206            3.0303+-0.0184        
   crypto-sha1                                                       2.8527+-0.0205     ?      2.8690+-0.0220        ?
   date-format-tofte                                                10.8797+-0.1054     !     11.2786+-0.1268        ! definitely 1.0367x slower
   date-format-xparb                                                 7.7909+-0.1254            7.7095+-0.1000          might be 1.0106x faster
   math-cordic                                                       3.9899+-0.0127     ?      3.9983+-0.0134        ?
   math-partial-sums                                                10.5781+-0.0905           10.5621+-0.1003        
   math-spectral-norm                                                2.8068+-0.0101     ?      2.8101+-0.0166        ?
   regexp-dna                                                       12.6640+-0.1864     ?     12.8699+-0.1285        ? might be 1.0163x slower
   string-base64                                                     5.3085+-0.0999     ?      5.3469+-0.0675        ?
   string-fasta                                                     10.9478+-0.1364     ?     11.1298+-0.1813        ? might be 1.0166x slower
   string-tagcloud                                                  14.3454+-0.1577     ?     14.4694+-0.2088        ?
   string-unpack-code                                               29.0113+-0.1417     ?     29.1129+-0.1415        ?
   string-validate-input                                             6.4946+-0.0691     ?      6.5582+-0.1419        ?

   &lt;arithmetic&gt; *                                                    7.2301+-0.0384     ?      7.2726+-0.0349        ? might be 1.0059x slower
   &lt;geometric&gt;                                                       5.7963+-0.0272     ?      5.8162+-0.0203        ? might be 1.0034x slower
   &lt;harmonic&gt;                                                        4.7449+-0.0183     ?      4.7504+-0.0093        ? might be 1.0012x slower

                                                                       TipOfTree              ImplicitJettison                                 
V8Spider:
   crypto                                                           80.6117+-0.2111     ?     80.9390+-0.7061        ?
   deltablue                                                       103.6331+-1.8900          101.6928+-0.5743          might be 1.0191x faster
   earley-boyer                                                     69.8948+-0.4027           69.8701+-0.3126        
   raytrace                                                         40.2879+-0.2596           39.9462+-0.1811        
   regexp                                                          101.2585+-0.5719     ?    101.7424+-0.5902        ?
   richards                                                        115.4621+-1.0821          113.8552+-1.2683          might be 1.0141x faster
   splay                                                            46.9685+-0.4845           46.7887+-0.4084        

   &lt;arithmetic&gt;                                                     79.7310+-0.3569           79.2621+-0.2851          might be 1.0059x faster
   &lt;geometric&gt; *                                                    74.6434+-0.3109           74.2545+-0.2353          might be 1.0052x faster
   &lt;harmonic&gt;                                                       69.2898+-0.2870           68.9463+-0.2148          might be 1.0050x faster

                                                                       TipOfTree              ImplicitJettison                                 
Octane and V8v7:
   encrypt                                                          0.46836+-0.00069          0.46832+-0.00097       
   decrypt                                                          8.62853+-0.01952          8.62709+-0.01220       
   deltablue                                               x2       0.58524+-0.00292          0.58435+-0.00254       
   earley                                                           0.87246+-0.00748    ?     0.87249+-0.00666       ?
   boyer                                                           12.44541+-0.07217         12.37393+-0.01378       
   raytrace                                                x2       4.37338+-0.02968    ^     4.29304+-0.03128       ^ definitely 1.0187x faster
   regexp                                                  x2      32.60061+-0.30234    ?    33.16659+-0.99629       ? might be 1.0174x slower
   richards                                                x2       0.31569+-0.00252          0.31496+-0.00129       
   splay                                                   x2       0.63522+-0.01816          0.63052+-0.01972       
   navier-stokes                                           x2      10.84605+-0.00634         10.82979+-0.01647       
   closure                                                          0.43911+-0.04874    ?     0.44005+-0.04764       ?
   jquery                                                           5.35372+-0.71731    ?     5.41851+-0.71117       ? might be 1.0121x slower
   gbemu                                                   x2      82.90794+-0.99159         82.03408+-1.15077         might be 1.0107x faster
   box2d                                                   x2      32.11462+-0.11916    ?    32.36345+-0.31430       ?

V8v7:
   &lt;arithmetic&gt;                                                     7.57045+-0.03930    ?     7.62377+-0.12420       ? might be 1.0070x slower
   &lt;geometric&gt; *                                                    2.42628+-0.01133          2.42083+-0.01324         might be 1.0023x faster
   &lt;harmonic&gt;                                                       0.93635+-0.00513          0.93350+-0.00493         might be 1.0031x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                                    16.22569+-0.09973         16.21063+-0.12430         might be 1.0009x faster
   &lt;geometric&gt; *                                                    4.05140+-0.04127          4.04646+-0.03842         might be 1.0012x faster
   &lt;harmonic&gt;                                                       1.11688+-0.01455          1.11447+-0.01338         might be 1.0022x faster

                                                                       TipOfTree              ImplicitJettison                                 
Kraken:
   ai-astar                                                         492.472+-0.529      ?     495.053+-4.550         ?
   audio-beat-detection                                             241.612+-1.172            241.559+-0.240         
   audio-dft                                                        306.775+-1.087      ?     308.436+-1.934         ?
   audio-fft                                                        146.032+-2.199            144.419+-0.184           might be 1.0112x faster
   audio-oscillator                                                 252.219+-4.068            252.204+-4.258         
   imaging-darkroom                                                 279.713+-1.992            279.285+-2.042         
   imaging-desaturate                                               158.572+-0.110      ^     158.273+-0.102         ^ definitely 1.0019x faster
   imaging-gaussian-blur                                            403.085+-0.161            403.054+-0.414         
   json-parse-financial                                              81.039+-0.529      !      81.811+-0.131         ! definitely 1.0095x slower
   json-stringify-tinderbox                                         111.230+-2.844      ^     104.804+-0.297         ^ definitely 1.0613x faster
   stanford-crypto-aes                                               93.672+-0.812             93.233+-0.522         
   stanford-crypto-ccm                                              101.273+-2.224             99.245+-2.086           might be 1.0204x faster
   stanford-crypto-pbkdf2                                           265.375+-1.927            262.319+-1.289           might be 1.0116x faster
   stanford-crypto-sha256-iterative                                 116.426+-0.863            115.124+-0.488           might be 1.0113x faster

   &lt;arithmetic&gt; *                                                   217.821+-0.275      ^     217.059+-0.466         ^ definitely 1.0035x faster
   &lt;geometric&gt;                                                      186.880+-0.347      ^     185.537+-0.302         ^ definitely 1.0072x faster
   &lt;harmonic&gt;                                                       161.150+-0.439      ^     159.543+-0.323         ^ definitely 1.0101x faster

                                                                       TipOfTree              ImplicitJettison                                 
JSRegress:
   adapt-to-double-divide                                           22.7295+-0.1144           22.7216+-0.1307        
   aliased-arguments-getbyval                                        0.9144+-0.0076     ?      0.9206+-0.0169        ?
   allocate-big-object                                               2.5630+-0.0312     ?      2.5655+-0.0487        ?
   arity-mismatch-inlining                                           0.8774+-0.0132     ^      0.8555+-0.0066        ^ definitely 1.0256x faster
   array-access-polymorphic-structure                                6.7848+-0.0597     ?      6.8949+-0.1193        ? might be 1.0162x slower
   array-nonarray-polymorhpic-access                               108.2388+-43.6761          82.0222+-31.8818         might be 1.3196x faster
   array-with-double-add                                             5.9435+-0.0451            5.8962+-0.0711        
   array-with-double-increment                                       4.3179+-0.0184     ?      4.3724+-0.0758        ? might be 1.0126x slower
   array-with-double-mul-add                                         6.8353+-0.0789            6.7859+-0.0822        
   array-with-double-sum                                             8.0209+-0.0767     ?      8.0355+-0.0732        ?
   array-with-int32-add-sub                                         10.5224+-0.1037     ?     10.6276+-0.1284        ?
   array-with-int32-or-double-sum                                    8.1203+-0.1114     ?      8.1361+-0.0587        ?
   ArrayBuffer-DataView-alloc-large-long-lived                     121.7792+-0.6162          120.4315+-0.8221          might be 1.0112x faster
   ArrayBuffer-DataView-alloc-long-lived                            32.2195+-0.1942           31.9228+-0.2172        
   ArrayBuffer-Int32Array-byteOffset                                 8.9260+-0.1029            8.9071+-0.0796        
   ArrayBuffer-Int8Array-alloc-huge-long-lived                     210.9330+-1.7926          210.6550+-1.8838        
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented         164.3867+-0.7260     ?    164.4619+-0.5459        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived                    120.7121+-0.8960     ?    121.4890+-1.4696        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer                    53.0750+-0.4424     ^     51.9969+-0.2407        ^ definitely 1.0207x faster
   ArrayBuffer-Int8Array-alloc-long-lived                           31.3507+-0.1446     ^     31.0107+-0.1745        ^ definitely 1.0110x faster
   ArrayBuffer-Int8Array-alloc                                      28.4317+-0.2091     ^     27.4061+-0.1507        ^ definitely 1.0374x faster
   basic-set                                                        20.0050+-0.2572           19.8899+-0.2844        
   big-int-mul                                                       4.9024+-0.0281     ?      4.9193+-0.0200        ?
   boolean-test                                                      4.4708+-0.0067     ?      4.4737+-0.0058        ?
   branch-fold                                                       4.8575+-0.0233            4.8489+-0.0417        
   cast-int-to-double                                               14.2367+-0.1032           14.1815+-0.0680        
   cell-argument                                                    14.6795+-0.1874     ?     14.9426+-0.3126        ? might be 1.0179x slower
   cfg-simplify                                                      3.9220+-0.0072     ?      3.9419+-0.0314        ?
   cmpeq-obj-to-obj-other                                           12.5765+-0.1214     !     13.1689+-0.2017        ! definitely 1.0471x slower
   constant-test                                                     8.8235+-0.1013            8.7484+-0.1054        
   DataView-custom-properties                                      128.2912+-1.1055          126.7725+-0.9743          might be 1.0120x faster
   delay-tear-off-arguments-strictmode                               3.4649+-0.0090            3.4493+-0.0086        
   direct-arguments-getbyval                                         0.8129+-0.0265            0.8002+-0.0065          might be 1.0159x faster
   double-pollution-getbyval                                        10.8762+-0.0658     ?     10.8899+-0.0772        ?
   double-pollution-putbyoffset                                      5.9747+-0.0846            5.8784+-0.1092          might be 1.0164x faster
   empty-string-plus-int                                            10.2134+-0.1546           10.1978+-0.1818        
   emscripten-cube2hash                                             51.0388+-2.9512           50.2244+-2.5065          might be 1.0162x faster
   emscripten-memops                                              9884.0700+-59.1976    ?   9912.6740+-46.2755       ?
   external-arguments-getbyval                                       1.9385+-0.0305            1.8971+-0.0146          might be 1.0218x faster
   external-arguments-putbyval                                       3.1179+-0.0116     ?      3.1769+-0.0509        ? might be 1.0189x slower
   Float32Array-matrix-mult                                          6.3141+-0.0618            6.2356+-0.0589          might be 1.0126x faster
   Float32Array-to-Float64Array-set                                 96.5028+-0.9013           95.6935+-1.2597        
   Float64Array-alloc-long-lived                                   106.3104+-0.3603     ?    106.6113+-0.6145        ?
   Float64Array-to-Int16Array-set                                  112.1501+-0.6829     ?    112.6286+-0.6905        ?
   fold-double-to-int                                               25.6385+-0.4444           25.5603+-0.3270        
   function-dot-apply                                                3.1068+-0.0142            3.1008+-0.0193        
   function-test                                                     4.9027+-0.0550     ?      4.9558+-0.0642        ? might be 1.0108x slower
   get-by-id-chain-from-try-block                                    6.7250+-0.0747            6.7197+-0.0786        
   get-by-id-proto-or-self                                          23.0021+-0.3954           22.8692+-0.3295        
   get-by-id-self-or-proto                                          23.7293+-0.2129           23.3302+-0.3824          might be 1.0171x faster
   HashMap-put-get-iterate-keys                                     42.2551+-0.1948     ?     42.6890+-0.4497        ? might be 1.0103x slower
   HashMap-put-get-iterate                                          52.3392+-0.3545     ?     52.6565+-0.3515        ?
   HashMap-string-put-get-iterate                                   49.7579+-0.2184     ?     49.8367+-0.3297        ?
   imul-double-only                                                 18.6374+-1.1599           17.6718+-0.1016          might be 1.0546x faster
   imul-int-only                                                    15.7481+-0.1629     ?     15.9239+-0.2059        ? might be 1.0112x slower
   imul-mixed                                                       22.1905+-0.1239           22.0642+-0.0812        
   in-four-cases                                                    26.2361+-0.1239     ?     26.3006+-0.1480        ?
   in-one-case-false                                                12.4449+-0.0593     ^     12.2651+-0.0825        ^ definitely 1.0147x faster
   in-one-case-true                                                 12.3972+-0.1128     ?     12.5593+-0.2455        ? might be 1.0131x slower
   in-two-cases                                                     12.7638+-0.1058           12.7635+-0.0916        
   indexed-properties-in-objects                                     4.2048+-0.0073            4.2008+-0.0154        
   inline-arguments-access                                           1.4202+-0.0059            1.4146+-0.0071        
   inline-arguments-local-escape                                    22.0736+-0.2177           21.7726+-0.1900          might be 1.0138x faster
   inline-get-scoped-var                                             6.8958+-0.1152     ?      6.9988+-0.0603        ? might be 1.0149x slower
   inlined-put-by-id-transition                                     14.7770+-0.1412     ?     14.9059+-0.1174        ?
   int-or-other-abs-then-get-by-val                                  9.2213+-0.2030     ?      9.2351+-0.1760        ?
   int-or-other-abs-zero-then-get-by-val                            36.4715+-0.1098     ?     36.4817+-0.1459        ?
   int-or-other-add-then-get-by-val                                 10.3921+-0.1162           10.3350+-0.1322        
   int-or-other-add                                                 10.5497+-0.1071           10.5198+-0.0743        
   int-or-other-div-then-get-by-val                                  6.2610+-0.0829     ?      6.3139+-0.0576        ?
   int-or-other-max-then-get-by-val                                  7.3031+-0.0840            7.2565+-0.0721        
   int-or-other-min-then-get-by-val                                  7.2094+-0.0901     ?      7.3420+-0.0764        ? might be 1.0184x slower
   int-or-other-mod-then-get-by-val                                  6.2171+-0.0626            6.1890+-0.0691        
   int-or-other-mul-then-get-by-val                                  6.6667+-0.0638            6.5637+-0.1038          might be 1.0157x faster
   int-or-other-neg-then-get-by-val                                  8.1562+-0.0696            8.1433+-0.0811        
   int-or-other-neg-zero-then-get-by-val                            36.3405+-0.1655           36.2395+-0.0947        
   int-or-other-sub-then-get-by-val                                 10.7206+-0.1071     ?     10.7883+-0.1314        ?
   int-or-other-sub                                                  8.3289+-0.0897     ?      8.4120+-0.0634        ?
   int-overflow-local                                               12.0084+-0.0933           11.9173+-0.1287        
   Int16Array-alloc-long-lived                                      69.8984+-0.8735           69.2144+-0.3685        
   Int16Array-bubble-sort-with-byteLength                           48.1597+-0.1334     ?     48.2454+-0.1057        ?
   Int16Array-bubble-sort                                           47.7109+-0.2068           47.6504+-0.1260        
   Int16Array-load-int-mul                                           2.0004+-0.0044     ?      2.0015+-0.0044        ?
   Int16Array-to-Int32Array-set                                     89.7092+-0.8492     !     94.3316+-0.5961        ! definitely 1.0515x slower
   Int32Array-alloc-huge-long-lived                                709.4386+-1.9188          709.2009+-2.0252        
   Int32Array-alloc-huge                                           810.1301+-8.1386          805.3877+-7.5012        
   Int32Array-alloc-large-long-lived                               967.4275+-6.7488     ?    969.7288+-7.1310        ?
   Int32Array-alloc-large                                           44.1471+-0.8885     ?     45.0645+-0.8774        ? might be 1.0208x slower
   Int32Array-alloc-long-lived                                      82.1567+-0.4270     ?     83.3613+-1.3752        ? might be 1.0147x slower
   Int32Array-alloc                                                  4.2937+-0.0588     ?      4.3393+-0.0286        ? might be 1.0106x slower
   Int32Array-Int8Array-view-alloc                                  15.5652+-0.1833     ^     14.9563+-0.1645        ^ definitely 1.0407x faster
   Int8Array-alloc-long-lived                                       69.4382+-0.4368           69.3611+-0.4904        
   Int8Array-load-with-byteLength                                    5.0148+-0.0466     ?      5.0238+-0.0260        ?
   Int8Array-load                                                    5.0058+-0.0594     ?      5.0219+-0.0471        ?
   integer-divide                                                   15.4819+-0.1207     ?     15.6345+-0.2415        ?
   integer-modulo                                                    1.9564+-0.0121            1.9522+-0.0196        
   lots-of-fields                                                   13.1471+-0.0819     ?     13.5041+-0.3680        ? might be 1.0272x slower
   make-indexed-storage                                              4.0718+-0.1059     ?      4.0950+-0.0550        ?
   make-rope-cse                                                     5.8955+-0.0812     ?      5.9140+-0.0753        ?
   marsaglia                                                       521.4882+-0.4368     ?    521.5699+-0.2258        ?
   method-on-number                                                 27.4703+-0.3146           27.3305+-0.5945        
   negative-zero-divide                                              0.3916+-0.0153            0.3811+-0.0107          might be 1.0276x faster
   negative-zero-modulo                                              0.3732+-0.0128            0.3707+-0.0117        
   negative-zero-negate                                              0.3594+-0.0122            0.3563+-0.0122        
   nested-function-parsing-random                                  400.8530+-13.0858         395.9552+-13.0540         might be 1.0124x faster
   nested-function-parsing                                          47.6260+-1.1822           47.4915+-1.1015        
   new-array-buffer-dead                                             3.7454+-0.0658            3.7259+-0.0310        
   new-array-buffer-push                                            10.4325+-0.1131     ?     10.4499+-0.1080        ?
   new-array-dead                                                   28.4987+-0.0857           28.4953+-0.0959        
   new-array-push                                                    7.2493+-0.1067     ^      7.0741+-0.0557        ^ definitely 1.0248x faster
   number-test                                                       4.4086+-0.0133     ?      4.4121+-0.0086        ?
   object-closure-call                                              12.8126+-1.7711           11.8959+-1.9905          might be 1.0771x faster
   object-test                                                       5.0146+-0.0428            4.9913+-0.0690        
   poly-stricteq                                                    92.9468+-0.4358           92.9266+-0.4656        
   polymorphic-structure                                            21.0209+-0.1029     ?     21.0411+-0.1085        ?
   polyvariant-monomorphic-get-by-id                                12.6814+-0.1064     ?     12.7088+-0.0910        ?
   put-by-val-large-index-blank-indexing-type                       10.4111+-0.2690     ?     10.6913+-0.2910        ? might be 1.0269x slower
   rare-osr-exit-on-local                                           20.2622+-0.1100           20.1896+-0.0693        
   register-pressure-from-osr                                       31.4579+-0.1184     ?     31.5753+-0.1543        ?
   simple-activation-demo                                           34.4386+-0.1243     ?     34.4558+-0.1172        ?
   slow-array-profile-convergence                                    4.4111+-0.1395            4.2627+-0.1093          might be 1.0348x faster
   slow-convergence                                                  3.5581+-0.0169     ?      3.5801+-0.0430        ?
   sparse-conditional                                                1.3267+-0.0292            1.3171+-0.0251        
   splice-to-remove                                                 48.2070+-0.1763     ^     47.4627+-0.1009        ^ definitely 1.0157x faster
   string-concat-object                                              2.9469+-0.0358     ?      2.9480+-0.0391        ?
   string-concat-pair-object                                         2.8484+-0.0213     ?      2.8633+-0.0227        ?
   string-concat-pair-simple                                        17.0550+-0.3590     ?     17.2311+-0.3648        ? might be 1.0103x slower
   string-concat-simple                                             17.1365+-0.4622           17.0983+-0.2976        
   string-cons-repeat                                               10.3207+-0.0313           10.3100+-0.0276        
   string-cons-tower                                                10.8125+-0.0435           10.8070+-0.0334        
   string-equality                                                  43.7153+-0.4832     !     45.0271+-0.6985        ! definitely 1.0300x slower
   string-get-by-val-big-char                                       13.6099+-0.2729           13.3129+-0.1237          might be 1.0223x faster
   string-get-by-val-out-of-bounds-insane                            5.5597+-0.0753            5.4770+-0.1011          might be 1.0151x faster
   string-get-by-val-out-of-bounds                                   5.7403+-0.7662            5.7097+-0.7667        
   string-get-by-val                                                 4.2967+-0.0440     ^      4.1655+-0.0116        ^ definitely 1.0315x faster
   string-hash                                                       2.6558+-0.0061            2.6510+-0.0035        
   string-long-ident-equality                                       38.4391+-0.0568     !     39.8944+-0.9982        ! definitely 1.0379x slower
   string-repeat-arith                                              51.7699+-0.3028           51.3869+-0.2336        
   string-sub                                                       98.5184+-1.3923     ?    100.7799+-3.2801        ? might be 1.0230x slower
   string-test                                                       4.3500+-0.0083     ?      4.3620+-0.0080        ?
   string-var-equality                                              71.5788+-0.5270     ^     70.9129+-0.0971        ^ definitely 1.0094x faster
   structure-hoist-over-transitions                                  3.2624+-0.0270            3.2467+-0.0269        
   switch-char-constant                                              3.4789+-0.0392            3.4472+-0.0081        
   switch-char                                                       8.5098+-0.2694            8.4012+-0.2804          might be 1.0129x faster
   switch-constant                                                   9.0285+-0.1235            8.9810+-0.1041        
   switch-string-basic-big-var                                      21.5043+-0.1050     ?     21.5370+-0.1134        ?
   switch-string-basic-big                                          23.5704+-1.5759           23.0696+-1.3060          might be 1.0217x faster
   switch-string-basic-var                                          21.3478+-0.1014     ?     21.3644+-0.1120        ?
   switch-string-basic                                              22.8084+-0.2827     ?     22.9000+-0.3830        ?
   switch-string-big-length-tower-var                               29.6765+-0.1455     ?     29.8417+-0.1831        ?
   switch-string-length-tower-var                                   23.3623+-0.1148           23.3395+-0.1500        
   switch-string-length-tower                                       17.8453+-0.0937           17.7534+-0.1127        
   switch-string-short                                              17.8131+-0.1124           17.8016+-0.0633        
   switch                                                           18.2348+-1.1422     ?     18.3017+-1.1724        ?
   tear-off-arguments-simple                                         2.1135+-0.0081     ?      2.1445+-0.0488        ? might be 1.0147x slower
   tear-off-arguments                                                3.4570+-0.0085            3.4524+-0.0075        
   temporal-structure                                               21.1971+-0.1227     ?     21.3150+-0.3985        ?
   to-int32-boolean                                                 21.6224+-0.0754     ?     21.7396+-0.1103        ?
   undefined-test                                                    4.5797+-0.0181            4.5705+-0.0037        

   &lt;arithmetic&gt;                                                    107.4288+-0.6148          107.4057+-0.4978          might be 1.0002x faster
   &lt;geometric&gt; *                                                    14.1928+-0.0418           14.1499+-0.0432          might be 1.0030x faster
   &lt;harmonic&gt;                                                        5.2943+-0.0481            5.2623+-0.0455          might be 1.0061x faster

                                                                       TipOfTree              ImplicitJettison                                 
All benchmarks:
   &lt;arithmetic&gt;                                                     93.1305+-0.4391           93.0565+-0.3574          might be 1.0008x faster
   &lt;geometric&gt;                                                      13.9976+-0.0441           13.9635+-0.0449          might be 1.0024x faster
   &lt;harmonic&gt;                                                        4.1150+-0.0205            4.0987+-0.0161          might be 1.0040x faster

                                                                       TipOfTree              ImplicitJettison                                 
Geomean of preferred means:
   &lt;scaled-result&gt;                                                  23.2259+-0.0855           23.1930+-0.0835          might be 1.0014x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923596</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-01 23:27:14 -0700</bug_when>
    <thetext>Results from DumpRenderTree.


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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/DumpRenderTree (r154943)
&quot;ImplicitJettison&quot; at /Volumes/Data/fromMiniMe/secondary/OpenSource/WebKitBuild/Release/DumpRenderTree (r154943)

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              ImplicitJettison                                 
SunSpider:
   3d-cube                                                           7.5951+-0.2460     ?      7.6366+-0.2587        ?
   3d-morph                                                          8.3423+-0.0494     ?      8.4626+-0.1080        ? might be 1.0144x slower
   3d-raytrace                                                       9.8186+-0.3936            9.6901+-0.3315          might be 1.0133x faster
   access-binary-trees                                               2.7398+-0.3132            2.4572+-0.3222          might be 1.1150x faster
   access-fannkuch                                                   7.6667+-0.0630     ?      7.6677+-0.0690        ?
   access-nbody                                                      4.1237+-0.0492            4.1056+-0.0514        
   access-nsieve                                                     4.8725+-0.0474     ?      4.9010+-0.0851        ?
   bitops-3bit-bits-in-byte                                          1.7689+-0.0166     ?      1.7943+-0.0186        ? might be 1.0144x slower
   bitops-bits-in-byte                                               6.6869+-0.0845     ?      6.6911+-0.0582        ?
   bitops-bitwise-and                                                2.7445+-0.0670     ?      2.8062+-0.0324        ? might be 1.0225x slower
   bitops-nsieve-bits                                                4.6971+-0.0302            4.6661+-0.0242        
   controlflow-recursive                                             2.9351+-0.0218            2.9151+-0.0167        
   crypto-aes                                                        6.1022+-0.3090            6.0884+-0.3261        
   crypto-md5                                                        3.2113+-0.0497            3.2050+-0.0570        
   crypto-sha1                                                       2.9440+-0.0495     ?      2.9454+-0.0727        ?
   date-format-tofte                                                12.7026+-0.9556     ?     13.0082+-0.9520        ? might be 1.0241x slower
   date-format-xparb                                                 9.0055+-0.6427            8.9564+-0.6398        
   math-cordic                                                       3.9034+-0.0321            3.8934+-0.0291        
   math-partial-sums                                                10.4761+-0.0464           10.4171+-0.0421        
   math-spectral-norm                                                2.8239+-0.0239            2.8176+-0.0161        
   regexp-dna                                                       12.8361+-0.5433     ?     12.9119+-0.5470        ?
   string-base64                                                     6.4690+-0.5480            6.3447+-0.4979          might be 1.0196x faster
   string-fasta                                                     12.1426+-0.1263           12.1219+-0.1332        
   string-tagcloud                                                  14.8565+-0.1583     ?     14.9036+-0.1904        ?
   string-unpack-code                                               31.7255+-0.2169     ?     31.9854+-0.3188        ?
   string-validate-input                                             8.9788+-0.1868            8.8824+-0.2160          might be 1.0109x faster

   &lt;arithmetic&gt; *                                                    7.7757+-0.1266     ?      7.7798+-0.1256        ? might be 1.0005x slower
   &lt;geometric&gt;                                                       6.1796+-0.0970            6.1586+-0.1018          might be 1.0034x faster
   &lt;harmonic&gt;                                                        5.0163+-0.0744            4.9826+-0.0838          might be 1.0068x faster

                                                                       TipOfTree              ImplicitJettison                                 
V8Spider:
   crypto                                                           81.5186+-0.3332           81.3143+-0.3364        
   deltablue                                                       102.8431+-1.4178          101.7515+-0.7921          might be 1.0107x faster
   earley-boyer                                                     72.3626+-0.7797           71.8593+-1.0147        
   raytrace                                                         45.9410+-4.9555           45.7096+-5.0562        
   regexp                                                          102.6660+-0.5261     ?    105.4219+-3.7478        ? might be 1.0268x slower
   richards                                                        116.3553+-1.9925          115.3456+-1.3269        
   splay                                                            59.6188+-2.9905     ?     60.1999+-3.0062        ?

   &lt;arithmetic&gt;                                                     83.0436+-0.8189     ?     83.0860+-1.0330        ? might be 1.0005x slower
   &lt;geometric&gt; *                                                    79.2095+-1.0514     ?     79.2237+-1.2917        ? might be 1.0002x slower
   &lt;harmonic&gt;                                                       75.0776+-1.4827           75.0586+-1.7134          might be 1.0003x faster

                                                                       TipOfTree              ImplicitJettison                                 
Octane and V8v7:
   encrypt                                                          0.47458+-0.00104          0.47369+-0.00065       
   decrypt                                                          8.64653+-0.01488    ?     8.64752+-0.00981       ?
   deltablue                                               x2       0.67905+-0.04621          0.64023+-0.04173         might be 1.0606x faster
   earley                                                           0.90597+-0.01615    ?     0.90828+-0.02166       ?
   boyer                                                           12.66932+-0.05330    ?    12.78165+-0.12093       ?
   raytrace                                                x2       4.40929+-0.05819          4.37098+-0.06797       
   regexp                                                  x2      32.65303+-0.19452    ?    32.90756+-0.22195       ?
   richards                                                x2       0.32022+-0.00365    ?     0.32207+-0.00477       ?
   splay                                                   x2       0.65106+-0.02985    ?     0.66342+-0.02567       ? might be 1.0190x slower
   navier-stokes                                           x2      10.93336+-0.01197         10.92689+-0.01076       
   closure                                                          0.43451+-0.04764    ?     0.43689+-0.04759       ?
   jquery                                                           5.31199+-0.70502    ?     5.36225+-0.68408       ?
   gbemu                                                   x2     100.58560+-7.04461         93.19069+-4.98935         might be 1.0794x faster
   mandreel                                                x2     194.41351+-0.57595    ?   195.15138+-1.19760       ?
   pdfjs                                                   x2     100.53115+-0.41920        100.12273+-0.28906       
   box2d                                                   x2      35.70191+-0.44207    ^    34.78569+-0.27819       ^ definitely 1.0263x faster

V8v7:
   &lt;arithmetic&gt;                                                     7.62428+-0.02800    ?     7.65459+-0.03433       ? might be 1.0040x slower
   &lt;geometric&gt; *                                                    2.49846+-0.02402          2.48904+-0.02240         might be 1.0038x faster
   &lt;harmonic&gt;                                                       0.97518+-0.01268          0.97021+-0.01321         might be 1.0051x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                                    38.08459+-0.53482         37.49129+-0.39158         might be 1.0158x faster
   &lt;geometric&gt; *                                                    7.27068+-0.10129          7.20250+-0.08350         might be 1.0095x faster
   &lt;harmonic&gt;                                                       1.36425+-0.02686          1.35905+-0.02547         might be 1.0038x faster

                                                                       TipOfTree              ImplicitJettison                                 
Kraken:
   ai-astar                                                         491.114+-0.805      ?     491.817+-1.155         ?
   audio-beat-detection                                             253.646+-3.661      ?     254.415+-3.868         ?
   audio-dft                                                        312.244+-2.254      ?     312.434+-2.061         ?
   audio-fft                                                        147.648+-0.275      !     149.735+-0.427         ! definitely 1.0141x slower
   audio-oscillator                                                 247.396+-1.276      ?     249.854+-2.797         ?
   imaging-darkroom                                                 297.749+-1.231            296.989+-1.679         
   imaging-desaturate                                               160.146+-0.346            159.919+-0.381         
   imaging-gaussian-blur                                            404.286+-0.314      ?     404.411+-0.601         ?
   json-parse-financial                                              80.890+-0.197      !      82.411+-0.156         ! definitely 1.0188x slower
   json-stringify-tinderbox                                         108.888+-3.178      ^     104.737+-0.398         ^ definitely 1.0396x faster
   stanford-crypto-aes                                              109.811+-0.965      ?     110.304+-1.600         ?
   stanford-crypto-ccm                                              124.033+-4.774      ?     126.153+-2.647         ? might be 1.0171x slower
   stanford-crypto-pbkdf2                                           270.727+-1.550      ^     267.233+-0.922         ^ definitely 1.0131x faster
   stanford-crypto-sha256-iterative                                 129.409+-0.977      ^     127.324+-0.459         ^ definitely 1.0164x faster

   &lt;arithmetic&gt; *                                                   224.142+-0.705            224.124+-0.455           might be 1.0001x faster
   &lt;geometric&gt;                                                      194.980+-1.029            194.966+-0.434           might be 1.0001x faster
   &lt;harmonic&gt;                                                       170.203+-1.264      ?     170.265+-0.416         ? might be 1.0004x slower

                                                                       TipOfTree              ImplicitJettison                                 
JSBench:
   amazon                                                           10.2500+-0.2874           10.1667+-0.2473        
   facebook                                                         38.8333+-0.4560     ?     39.0833+-0.3272        ?
   google                                                           67.5833+-1.1320     ?     73.9167+-6.9096        ? might be 1.0937x slower
   twitter                                                          10.0000+-0.2709           10.0000+-0.3831        
   yahoo                                                             3.9167+-0.4248     ?      4.0000+-0.0000        ? might be 1.0213x slower

   &lt;arithmetic&gt; *                                                   26.1167+-0.2390     ?     27.4333+-1.4324        ? might be 1.0504x slower
   &lt;geometric&gt;                                                      15.9719+-0.3189     ?     16.3378+-0.3531        ? might be 1.0229x slower
   &lt;harmonic&gt;                                                       10.0480+-0.5397     ?     10.2435+-0.0858        ? might be 1.0195x slower

                                                                       TipOfTree              ImplicitJettison                                 
JSRegress:
   adapt-to-double-divide                                           22.5226+-0.0326     ?     22.5402+-0.0275        ?
   aliased-arguments-getbyval                                        0.9740+-0.0293            0.9611+-0.0288          might be 1.0134x faster
   allocate-big-object                                               4.5158+-1.4020            4.4659+-1.3977          might be 1.0112x faster
   arity-mismatch-inlining                                           0.8842+-0.0224     ?      0.8962+-0.0144        ? might be 1.0136x slower
   array-access-polymorphic-structure                                9.1883+-2.0403            9.0790+-2.0382          might be 1.0120x faster
   array-nonarray-polymorhpic-access                                72.0378+-25.0587          72.0252+-25.2256       
   array-with-double-add                                             5.3734+-0.0267            5.3672+-0.0277        
   array-with-double-increment                                       4.1932+-0.0896            4.1407+-0.0383          might be 1.0127x faster
   array-with-double-mul-add                                         7.5316+-0.2637            7.3138+-0.2932          might be 1.0298x faster
   array-with-double-sum                                             7.9121+-0.0585            7.8987+-0.0576        
   array-with-int32-add-sub                                          9.3335+-0.0229            9.3201+-0.0280        
   array-with-int32-or-double-sum                                    7.9636+-0.0103            7.9515+-0.0146        
   ArrayBuffer-DataView-alloc-large-long-lived                     128.3597+-1.0644          128.2792+-0.7614        
   ArrayBuffer-DataView-alloc-long-lived                            42.5926+-3.9298           42.0928+-3.9301          might be 1.0119x faster
   ArrayBuffer-Int32Array-byteOffset                                 8.7477+-0.0345     ?      8.7510+-0.0321        ?
   ArrayBuffer-Int8Array-alloc-huge-long-lived                     215.6943+-2.6555     ?    216.1692+-2.7050        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented         172.4124+-2.7736     ?    172.9145+-3.4948        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived                    129.3531+-0.7187     !    131.1205+-0.8901        ! definitely 1.0137x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer                    82.2377+-11.0199    ?     82.5188+-10.9438       ?
   ArrayBuffer-Int8Array-alloc-long-lived                           41.3304+-3.7990           40.9854+-3.9636        
   ArrayBuffer-Int8Array-alloc                                      36.7696+-4.0365           36.2233+-4.0579          might be 1.0151x faster
   basic-set                                                        21.5403+-0.2659           21.4645+-0.3575        
   big-int-mul                                                       4.7773+-0.0295     ?      4.8273+-0.0715        ? might be 1.0105x slower
   boolean-test                                                      4.3347+-0.0226     ?      4.3833+-0.0433        ? might be 1.0112x slower
   branch-fold                                                       4.7587+-0.0273            4.7280+-0.0259        
   cast-int-to-double                                               14.0774+-0.0352     ?     14.1351+-0.0694        ?
   cell-argument                                                    14.6883+-0.2602           14.4904+-0.2065          might be 1.0137x faster
   cfg-simplify                                                      3.7809+-0.0437     ?      3.8118+-0.0532        ?
   cmpeq-obj-to-obj-other                                           12.3112+-0.2551     ?     12.8173+-0.4062        ? might be 1.0411x slower
   constant-test                                                     8.5999+-0.0813     ?      8.6657+-0.0926        ?
   DataView-custom-properties                                      137.3200+-0.5732          136.8535+-0.3435        
   delay-tear-off-arguments-strictmode                               3.4080+-0.0357            3.4008+-0.0330        
   direct-arguments-getbyval                                         0.7766+-0.0125     ?      0.8011+-0.0248        ? might be 1.0316x slower
   double-pollution-getbyval                                        10.8673+-0.0916           10.7947+-0.0348        
   double-pollution-putbyoffset                                      7.0240+-0.5379     ?      7.1600+-0.5363        ? might be 1.0194x slower
   empty-string-plus-int                                            14.0569+-0.1565           13.7742+-0.2760          might be 1.0205x faster
   emscripten-cube2hash                                             50.0387+-2.8182           49.3852+-2.7279          might be 1.0132x faster
   emscripten-memops                                             10473.8541+-527.7147       9971.5525+-16.0172         might be 1.0504x faster
   external-arguments-getbyval                                       2.4440+-0.1534            2.4255+-0.1559        
   external-arguments-putbyval                                       4.1157+-0.2179            4.0130+-0.2781          might be 1.0256x faster
   Float32Array-matrix-mult                                          6.7376+-0.2213            6.6934+-0.1986        
   Float32Array-to-Float64Array-set                                 96.3377+-0.4383           96.1248+-0.2235        
   Float64Array-alloc-long-lived                                   108.6737+-0.3271     ?    108.7195+-0.5212        ?
   Float64Array-to-Int16Array-set                                  113.8095+-1.1725     ^    110.4962+-0.6149        ^ definitely 1.0300x faster
   fold-double-to-int                                               25.4607+-0.3178     ?     25.6097+-0.4606        ?
   function-dot-apply                                                3.0623+-0.0311            3.0556+-0.0231        
   function-test                                                     4.8850+-0.1008     ?      4.9626+-0.0708        ? might be 1.0159x slower
   get-by-id-chain-from-try-block                                    6.5871+-0.0378     ?      6.6087+-0.0715        ?
   get-by-id-proto-or-self                                          22.9574+-0.3339           22.9313+-0.3528        
   get-by-id-self-or-proto                                          23.2488+-0.3801           23.1340+-0.3473        
   HashMap-put-get-iterate-keys                                     44.0658+-0.6565     ?     44.4095+-0.7349        ?
   HashMap-put-get-iterate                                          53.5758+-0.8227     ?     53.9581+-0.7337        ?
   HashMap-string-put-get-iterate                                   64.7815+-0.6651     ?     65.2264+-0.2025        ?
   imul-double-only                                                 17.7917+-0.7160           17.4531+-0.0218          might be 1.0194x faster
   imul-int-only                                                    15.6453+-0.1332           15.5404+-0.0249        
   imul-mixed                                                       22.5634+-0.7266           22.0130+-0.0693          might be 1.0250x faster
   in-four-cases                                                    26.0649+-0.0283     ?     26.1115+-0.0496        ?
   in-one-case-false                                                12.2151+-0.0467           12.1967+-0.0264        
   in-one-case-true                                                 12.2353+-0.0312           12.2234+-0.0265        
   in-two-cases                                                     12.6854+-0.0473           12.6199+-0.0417        
   indexed-properties-in-objects                                     4.0213+-0.0184     ?      4.0830+-0.0503        ? might be 1.0154x slower
   inline-arguments-access                                           1.4298+-0.0300            1.4288+-0.0268        
   inline-arguments-local-escape                                    27.6906+-1.6241     ?     29.2193+-3.0046        ? might be 1.0552x slower
   inline-get-scoped-var                                             6.7943+-0.0707            6.7755+-0.0706        
   inlined-put-by-id-transition                                     14.7850+-0.2691     ?     14.8822+-0.1833        ?
   int-or-other-abs-then-get-by-val                                  9.0760+-0.1866            8.9408+-0.1909          might be 1.0151x faster
   int-or-other-abs-zero-then-get-by-val                            36.6385+-0.2885           36.5436+-0.1522        
   int-or-other-add-then-get-by-val                                 10.1831+-0.0224     ?     10.1893+-0.0236        ?
   int-or-other-add                                                 10.5068+-0.0802           10.4716+-0.0285        
   int-or-other-div-then-get-by-val                                  6.0727+-0.0185     ?      6.1063+-0.0551        ?
   int-or-other-max-then-get-by-val                                  7.0612+-0.0357     ?      7.0858+-0.0345        ?
   int-or-other-min-then-get-by-val                                  7.1163+-0.0304     ?      7.1425+-0.0291        ?
   int-or-other-mod-then-get-by-val                                  5.9551+-0.0185     ?      5.9696+-0.0313        ?
   int-or-other-mul-then-get-by-val                                  6.4977+-0.0270     ^      6.4314+-0.0162        ^ definitely 1.0103x faster
   int-or-other-neg-then-get-by-val                                  7.9766+-0.0565     ?      8.0298+-0.0453        ?
   int-or-other-neg-zero-then-get-by-val                            36.3046+-0.1116           36.2521+-0.0405        
   int-or-other-sub-then-get-by-val                                 10.6540+-0.1455           10.5935+-0.0805        
   int-or-other-sub                                                  8.1351+-0.0250     ?      8.1855+-0.1210        ?
   int-overflow-local                                               11.8368+-0.0457           11.7985+-0.0313        
   Int16Array-alloc-long-lived                                      73.8782+-3.9323           72.1762+-0.4786          might be 1.0236x faster
   Int16Array-bubble-sort-with-byteLength                           48.3020+-0.1431           48.2202+-0.0865        
   Int16Array-bubble-sort                                           47.7373+-0.1611           47.6802+-0.1497        
   Int16Array-load-int-mul                                           2.0045+-0.0214            1.9862+-0.0235        
   Int16Array-to-Int32Array-set                                     88.3237+-0.5409     !     94.7397+-0.4268        ! definitely 1.0726x slower
   Int32Array-alloc-huge-long-lived                                721.0853+-16.8061         719.5396+-16.1431       
   Int32Array-alloc-huge                                           814.6523+-7.4074     ?    821.2698+-5.5331        ?
   Int32Array-alloc-large-long-lived                               997.0221+-21.2716         976.9168+-4.8704          might be 1.0206x faster
   Int32Array-alloc-large                                           45.7577+-0.6850     ?     46.3812+-0.9874        ? might be 1.0136x slower
   Int32Array-alloc-long-lived                                      85.2814+-1.1880     ?     87.4004+-4.3374        ? might be 1.0248x slower
   Int32Array-alloc                                                  7.4654+-3.0013     ?      7.4658+-2.9932        ?
   Int32Array-Int8Array-view-alloc                                  23.5858+-2.1231           22.4122+-1.9312          might be 1.0524x faster
   Int8Array-alloc-long-lived                                       71.5198+-2.0273     ?     71.5946+-1.6632        ?
   Int8Array-load-with-byteLength                                    4.8269+-0.0353     ?      4.8483+-0.0644        ?
   Int8Array-load                                                    4.8125+-0.0204     ?      4.8155+-0.0188        ?
   integer-divide                                                   15.3475+-0.0238     ?     15.3698+-0.1037        ?
   integer-modulo                                                    1.9474+-0.0439            1.9288+-0.0306        
   lots-of-fields                                                   16.1719+-2.6171     ?     16.3209+-2.3011        ?
   make-indexed-storage                                              5.3562+-0.6940            5.3405+-0.6582        
   make-rope-cse                                                    16.8043+-2.9843           16.7422+-3.0500        
   marsaglia                                                       521.1511+-0.1622     ?    521.5169+-0.3360        ?
   method-on-number                                                 28.9251+-4.1357           26.7226+-0.0995          might be 1.0824x faster
   negative-zero-divide                                              0.3177+-0.0134            0.3126+-0.0070          might be 1.0162x faster
   negative-zero-modulo                                              0.2977+-0.0085     ?      0.2997+-0.0089        ?
   negative-zero-negate                                              0.2892+-0.0102            0.2863+-0.0098          might be 1.0101x faster
   nested-function-parsing-random                                  408.6868+-12.5641         404.3013+-12.3672         might be 1.0108x faster
   nested-function-parsing                                          57.1633+-3.9474           56.8753+-3.3288        
   new-array-buffer-dead                                             3.9565+-0.1052     ?      3.9808+-0.1156        ?
   new-array-buffer-push                                            14.8124+-2.3661     ?     14.8563+-2.3444        ?
   new-array-dead                                                   28.3887+-0.0495     ?     28.3950+-0.0350        ?
   new-array-push                                                   12.5934+-2.0541     ?     12.6260+-2.0511        ?
   number-test                                                       4.2914+-0.0235     ?      4.2989+-0.0432        ?
   object-closure-call                                               8.7912+-0.1844            8.7629+-0.1605        
   object-test                                                       4.7967+-0.0749            4.7582+-0.0806        
   poly-stricteq                                                    94.2469+-1.4947     ?     94.2988+-1.2063        ?
   polymorphic-structure                                            21.1510+-0.0563     ^     21.0148+-0.0625        ^ definitely 1.0065x faster
   polyvariant-monomorphic-get-by-id                                12.5111+-0.0371           12.4924+-0.0224        
   put-by-val-large-index-blank-indexing-type                       16.3551+-3.1554     ?     16.4591+-3.1825        ?
   rare-osr-exit-on-local                                           20.1927+-0.1205           20.0806+-0.0394        
   register-pressure-from-osr                                       31.4718+-0.1618           31.3778+-0.0530        
   simple-activation-demo                                           34.7961+-0.2085           34.7390+-0.2230        
   slow-array-profile-convergence                                    4.8832+-0.2195     ?      4.8943+-0.2486        ?
   slow-convergence                                                  3.5593+-0.0418     ?      3.6036+-0.0673        ? might be 1.0125x slower
   sparse-conditional                                                1.3260+-0.0220            1.3249+-0.0208        
   splice-to-remove                                                 48.0334+-0.1434     ^     47.4716+-0.1199        ^ definitely 1.0118x faster
   string-concat-object                                              5.0944+-1.4456            5.0806+-1.4277        
   string-concat-pair-object                                         4.9943+-1.4074     ?      5.0147+-1.4209        ?
   string-concat-pair-simple                                        19.3892+-0.6262     ?     19.7908+-0.7088        ? might be 1.0207x slower
   string-concat-simple                                             19.4889+-0.6099           19.3228+-0.8514        
   string-cons-repeat                                               15.0765+-1.1016           14.9790+-1.0306        
   string-cons-tower                                                15.5112+-0.8975     ?     15.7347+-1.0560        ? might be 1.0144x slower
   string-equality                                                  43.1771+-0.0342           43.1415+-0.0319        
   string-get-by-val-big-char                                       17.4077+-0.1756     ?     17.4952+-0.1820        ?
   string-get-by-val-out-of-bounds-insane                            5.1687+-0.1134            5.1034+-0.0780          might be 1.0128x faster
   string-get-by-val-out-of-bounds                                   4.7914+-0.0457            4.7478+-0.0238        
   string-get-by-val                                                 4.0000+-0.0292     ?      4.0395+-0.0492        ?
   string-hash                                                       2.6087+-0.0498            2.5772+-0.0175          might be 1.0122x faster
   string-long-ident-equality                                       39.0984+-0.7547           38.8856+-0.6335        
   string-repeat-arith                                              51.5123+-0.4364     ?     51.7334+-0.3194        ?
   string-sub                                                       99.1273+-1.0387     ?    105.0453+-8.2549        ? might be 1.0597x slower
   string-test                                                       4.2719+-0.0213     ?      4.3040+-0.0668        ?
   string-var-equality                                              71.1151+-0.2075     ?     71.4160+-0.5158        ?
   structure-hoist-over-transitions                                  4.0563+-0.6060     ?      4.7221+-0.6055        ? might be 1.1641x slower
   switch-char-constant                                              3.3203+-0.0167     ?      3.3231+-0.0214        ?
   switch-char                                                       7.9512+-0.0244     ?      7.9594+-0.0251        ?
   switch-constant                                                  12.9296+-2.8182           12.5393+-2.9026          might be 1.0311x faster
   switch-string-basic-big-var                                      21.3698+-0.0386     ?     21.4817+-0.2042        ?
   switch-string-basic-big                                          24.9259+-1.6754     ?     25.8716+-1.5127        ? might be 1.0379x slower
   switch-string-basic-var                                          21.2466+-0.0422     ?     21.4128+-0.2072        ?
   switch-string-basic                                              19.8098+-0.0398     ?     19.8561+-0.0715        ?
   switch-string-big-length-tower-var                               29.5251+-0.0569     ?     29.7221+-0.4141        ?
   switch-string-length-tower-var                                   23.2785+-0.0384     ?     23.2837+-0.0270        ?
   switch-string-length-tower                                       17.6213+-0.0413     ?     17.6310+-0.0515        ?
   switch-string-short                                              17.6026+-0.0416     ?     17.6260+-0.0387        ?
   switch                                                           16.5227+-2.4066     ?     19.0886+-2.7866        ? might be 1.1553x slower
   tear-off-arguments-simple                                         2.2398+-0.0281     !      2.3175+-0.0390        ! definitely 1.0347x slower
   tear-off-arguments                                                3.5263+-0.0606            3.4810+-0.0466          might be 1.0130x faster
   temporal-structure                                               21.1038+-0.0532     ?     21.1809+-0.0257        ?
   to-int32-boolean                                                 21.5557+-0.1219     ?     21.5861+-0.0372        ?
   undefined-test                                                    4.4033+-0.0245     ?      4.4759+-0.0612        ? might be 1.0165x slower

   &lt;arithmetic&gt;                                                     90.6843+-20.7318    ?    109.3433+-0.1556        ? might be 1.2058x slower
   &lt;geometric&gt; *                                                    14.6957+-0.2876     ?     14.9178+-0.1828        ? might be 1.0151x slower
   &lt;harmonic&gt;                                                        5.1139+-0.0730     ?      5.1267+-0.0439        ? might be 1.0025x slower

                                                                       TipOfTree              ImplicitJettison                                 
DSP:
   filtrr-posterize-tint                                            43.9508+-1.3214           43.9267+-1.2619        
   filtrr-tint-contrast-sat-bright                                  71.5490+-0.6528     ?     71.6434+-0.9266        ?
   filtrr-tint-sat-adj-contr-mult                                   84.0754+-3.0583     ?     85.4399+-3.8969        ? might be 1.0162x slower
   filtrr-blur-overlay-sat-contr                                   217.9256+-5.5972     ?    218.6326+-5.7842        ?
   filtrr-sat-blur-mult-sharpen-contr                              259.5659+-1.9255          259.4555+-3.0487        
   filtrr-sepia-bias                                                33.7107+-3.4453     ?     34.0226+-3.7959        ?
   route9-vp8                                              x5     1089.1167+-6.5145         1086.6357+-5.4747        
   starfield                                               x5     1188.0352+-4.7514     ?   1189.8242+-4.8399        ?
   bellard-jslinux                                         x5     2876.9167+-11.0961    ?   2879.5833+-12.9689       ?
   zynaps-quake3                                           x5     1402.8430+-24.6813        1395.7394+-26.8810       
   zynaps-mandelbrot                                       x5     1104.4173+-4.5716     ?   1108.0282+-5.1562        ?
   ammojs-asm-js                                           x5      263.4845+-14.9334         260.3958+-15.5206         might be 1.0119x faster
   ammojs-regular-js                                       x5      249.6488+-10.7496         249.4342+-11.6734       

   &lt;arithmetic&gt;                                                   1014.2217+-2.5813         1013.6908+-3.4395          might be 1.0005x faster
   &lt;geometric&gt; *                                                   623.2525+-8.1087          622.5162+-8.7120          might be 1.0012x faster
   &lt;harmonic&gt;                                                      283.0167+-10.8120    ?    283.3185+-11.7130       ? might be 1.0011x slower

                                                                       TipOfTree              ImplicitJettison                                 
All benchmarks:
   &lt;arithmetic&gt;                                                    219.7613+-11.5731    ?    230.1455+-0.4676        ? might be 1.0473x slower
   &lt;geometric&gt;                                                      26.2591+-0.2800     ?     26.4436+-0.2286        ? might be 1.0070x slower
   &lt;harmonic&gt;                                                        4.9485+-0.0461            4.9478+-0.0430          might be 1.0001x faster

                                                                       TipOfTree              ImplicitJettison                                 
Geomean of preferred means:
   &lt;scaled-result&gt;                                                  42.2361+-0.1244     ?     42.5510+-0.3536        ? might be 1.0075x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923598</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-01 23:29:09 -0700</bug_when>
    <thetext>The JSBench/google slow-down looks real, I&apos;ll investigate more.  Here&apos;s a rerun:

Benchmark report for JSBench on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/DumpRenderTree (r154943)
&quot;ImplicitJettison&quot; at /Volumes/Data/fromMiniMe/secondary/OpenSource/WebKitBuild/Release/DumpRenderTree (r154943)

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              ImplicitJettison                                 

amazon               10.0833+-0.1834           10.0833+-0.1834        
facebook             38.7500+-0.5502     ?     38.9167+-0.7399        ?
google               67.0833+-1.0991     ?     73.7500+-7.2348        ? might be 1.0994x slower
twitter              10.1667+-0.2473            9.9167+-0.3272          might be 1.0252x faster
yahoo                 3.8333+-0.3668     ?      3.9167+-0.3272        ? might be 1.0217x slower

&lt;arithmetic&gt; *       25.9833+-0.1913     ?     27.3167+-1.5166        ? might be 1.0513x slower
&lt;geometric&gt;          15.8834+-0.2865     ?     16.1718+-0.4609        ? might be 1.0182x slower
&lt;harmonic&gt;            9.9554+-0.4904     ?     10.0539+-0.4415        ? might be 1.0099x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923770</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-02 11:01:39 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; The JSBench/google slow-down looks real, I&apos;ll investigate more.  Here&apos;s a rerun:
&gt; 
&gt; Benchmark report for JSBench on oldmac (MacPro4,1).
&gt; 
&gt; VMs tested:
&gt; &quot;TipOfTree&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/DumpRenderTree (r154943)
&gt; &quot;ImplicitJettison&quot; at /Volumes/Data/fromMiniMe/secondary/OpenSource/WebKitBuild/Release/DumpRenderTree (r154943)
&gt; 
&gt; Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to
&gt; gc() between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used
&gt; the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark
&gt; execution times with 95% confidence intervals in milliseconds.
&gt; 
&gt;                         TipOfTree              ImplicitJettison                                 
&gt; 
&gt; amazon               10.0833+-0.1834           10.0833+-0.1834        
&gt; facebook             38.7500+-0.5502     ?     38.9167+-0.7399        ?
&gt; google               67.0833+-1.0991     ?     73.7500+-7.2348        ? might be 1.0994x slower

This is entirely because of this change:

+    m_heap-&gt;reportExtraMemoryCost(sizeof(CodeBlock) + m_instructions.size() * sizeof(Instruction));

Removing it makes the regression go away.  Previously we didn&apos;t count the size of the instruction stream towards the memory usage incurred by CodeBlocks.  This patch does count them.  The way this affects the google benchmark is that it GC&apos;s somewhat more frequently.  That&apos;s partly why you see &quot;might be 10% slower&quot; - GCs incur a ton of variance because they don&apos;t happen on every run, but they do happen on some runs - so you get a bimodal distribution of run-times.

I think it&apos;s wise to eat this regression.  I don&apos;t like the idea of us getting better performance by sometimes pretending that we didn&apos;t allocate memory. ;-)

&gt; twitter              10.1667+-0.2473            9.9167+-0.3272          might be 1.0252x faster
&gt; yahoo                 3.8333+-0.3668     ?      3.9167+-0.3272        ? might be 1.0217x slower
&gt; 
&gt; &lt;arithmetic&gt; *       25.9833+-0.1913     ?     27.3167+-1.5166        ? might be 1.0513x slower
&gt; &lt;geometric&gt;          15.8834+-0.2865     ?     16.1718+-0.4609        ? might be 1.0182x slower
&gt; &lt;harmonic&gt;            9.9554+-0.4904     ?     10.0539+-0.4415        ? might be 1.0099x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923781</commentid>
    <comment_count>12</comment_count>
      <attachid>210303</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-02 11:44:11 -0700</bug_when>
    <thetext>Created attachment 210303
the patch

Updated patch that more rigorously tracks CodeBlock memory footprint.  I discovered bugs in our memory footprint tracking when trying to track down the JSBench/google regression.  This version of the patch is very precise - CodeBlocks will report extra memory cost on allocation, and then again when setJITCode() is called, and then again during GC to remind it that we&apos;re still using memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923782</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-02 11:46:04 -0700</bug_when>
    <thetext>Attachment 210303 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommonData.h&apos;, u&apos;Source/JavaScriptCore/heap/CodeBlockSet.cpp&apos;, u&apos;Source/JavaScriptCore/heap/CodeBlockSet.h&apos;, u&apos;Source/JavaScriptCore/heap/ConservativeRoots.cpp&apos;, u&apos;Source/JavaScriptCore/heap/ConservativeRoots.h&apos;, u&apos;Source/JavaScriptCore/heap/DFGCodeBlocks.cpp&apos;, u&apos;Source/JavaScriptCore/heap/DFGCodeBlocks.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/interpreter/JSStack.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/JSStack.h&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.h&apos;, u&apos;Source/JavaScriptCore/runtime/VM.h&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/RefCountedArray.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/interpreter/JSStack.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923788</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-02 12:03:15 -0700</bug_when>
    <thetext>Final perf numbers:


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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/DumpRenderTree (r154943)
&quot;ImplicitJettison&quot; at /Volumes/Data/fromMiniMe/secondary/OpenSource/WebKitBuild/Release/DumpRenderTree (r154943)

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              ImplicitJettison                                 
SunSpider:
   3d-cube                                                           7.5772+-0.2675            7.5515+-0.2977        
   3d-morph                                                          8.3541+-0.1250            8.3220+-0.0851        
   3d-raytrace                                                       9.5204+-0.2656     ?      9.7745+-0.3732        ? might be 1.0267x slower
   access-binary-trees                                               2.7388+-0.3031            2.4257+-0.3239          might be 1.1291x faster
   access-fannkuch                                                   7.6904+-0.0451     ?      7.7251+-0.0703        ?
   access-nbody                                                      4.1301+-0.0555     ?      4.1605+-0.0564        ?
   access-nsieve                                                     4.8283+-0.0367            4.8267+-0.0276        
   bitops-3bit-bits-in-byte                                          1.8116+-0.0159     ?      1.8148+-0.0154        ?
   bitops-bits-in-byte                                               6.6706+-0.0694            6.6569+-0.0663        
   bitops-bitwise-and                                                2.7759+-0.0717     ?      2.7797+-0.0560        ?
   bitops-nsieve-bits                                                4.6408+-0.0349     ?      4.6643+-0.0373        ?
   controlflow-recursive                                             2.9477+-0.0324            2.9041+-0.0161          might be 1.0150x faster
   crypto-aes                                                        6.0573+-0.2684            5.9654+-0.3151          might be 1.0154x faster
   crypto-md5                                                        3.2302+-0.0685            3.2166+-0.0615        
   crypto-sha1                                                       2.9176+-0.0323     ?      2.9218+-0.0524        ?
   date-format-tofte                                                12.6460+-0.9473     ?     12.8812+-0.9693        ? might be 1.0186x slower
   date-format-xparb                                                 9.4717+-0.5930            8.8675+-0.6215          might be 1.0681x faster
   math-cordic                                                       3.8912+-0.0262     ?      3.9123+-0.0323        ?
   math-partial-sums                                                10.4616+-0.0660     ?     10.7140+-0.2142        ? might be 1.0241x slower
   math-spectral-norm                                                2.8880+-0.0365            2.8576+-0.0483          might be 1.0106x faster
   regexp-dna                                                       12.7901+-0.5535           12.7745+-0.5377        
   string-base64                                                     6.4729+-0.5067     ?      6.7753+-0.4914        ? might be 1.0467x slower
   string-fasta                                                     12.1680+-0.0904           12.1047+-0.0767        
   string-tagcloud                                                  14.7868+-0.1954     ?     14.8587+-0.2404        ?
   string-unpack-code                                               31.9109+-0.2661           31.7173+-0.2941        
   string-validate-input                                             8.9537+-0.2023            8.8332+-0.2238          might be 1.0136x faster

   &lt;arithmetic&gt; *                                                    7.7820+-0.1274            7.7695+-0.1503          might be 1.0016x faster
   &lt;geometric&gt;                                                       6.1899+-0.0969            6.1600+-0.1113          might be 1.0049x faster
   &lt;harmonic&gt;                                                        5.0378+-0.0747            4.9863+-0.0826          might be 1.0103x faster

                                                                       TipOfTree              ImplicitJettison                                 
V8Spider:
   crypto                                                           81.3337+-0.3650           81.2854+-0.3767        
   deltablue                                                       102.7304+-1.2137          102.3248+-1.7007        
   earley-boyer                                                     72.3858+-0.9708     ?     72.4182+-0.8841        ?
   raytrace                                                         44.5000+-4.6406     ?     45.5569+-4.8826        ? might be 1.0238x slower
   regexp                                                          102.6822+-0.3878          102.1736+-0.2897        
   richards                                                        116.3986+-1.6155          115.3811+-1.9082        
   splay                                                            59.8808+-3.0978           59.5411+-3.2722        

   &lt;arithmetic&gt;                                                     82.8445+-0.9124           82.6687+-0.7806          might be 1.0021x faster
   &lt;geometric&gt; *                                                    78.8874+-1.1497           78.8664+-1.1121          might be 1.0003x faster
   &lt;harmonic&gt;                                                       74.5889+-1.5308     ?     74.7546+-1.6029        ? might be 1.0022x slower

                                                                       TipOfTree              ImplicitJettison                                 
Octane and V8v7:
   encrypt                                                          0.47381+-0.00049          0.47345+-0.00039       
   decrypt                                                          8.64355+-0.01117          8.64303+-0.01193       
   deltablue                                               x2       0.61595+-0.01993          0.61305+-0.02505       
   earley                                                           0.90053+-0.00926    !     0.93205+-0.01523       ! definitely 1.0350x slower
   boyer                                                           12.72051+-0.19821    ?    12.73262+-0.05977       ?
   raytrace                                                x2       4.38239+-0.03528    ?     4.40353+-0.03277       ?
   regexp                                                  x2      33.02072+-0.22762         32.79667+-0.34209       
   richards                                                x2       0.32362+-0.00543    ^     0.31484+-0.00312       ^ definitely 1.0279x faster
   splay                                                   x2       0.63675+-0.00789    ?     0.63882+-0.00743       ?
   navier-stokes                                           x2      10.93067+-0.00811         10.92758+-0.00840       
   closure                                                          0.43247+-0.04703    ?     0.43618+-0.04699       ?
   jquery                                                           5.30279+-0.70601    ?     5.37115+-0.68983       ? might be 1.0129x slower
   gbemu                                                   x2      98.01298+-7.73358         95.49285+-2.48679         might be 1.0264x faster
   mandreel                                                x2     194.24757+-0.69189    ?   194.44718+-0.98367       ?
   pdfjs                                                   x2     100.02497+-0.32473    ?   100.62253+-0.35900       ?
   box2d                                                   x2      35.45050+-0.53370         35.07193+-0.42922         might be 1.0108x faster

V8v7:
   &lt;arithmetic&gt;                                                     7.65991+-0.04088          7.63563+-0.04494         might be 1.0032x faster
   &lt;geometric&gt; *                                                    2.46719+-0.01324          2.46272+-0.01258         might be 1.0018x faster
   &lt;harmonic&gt;                                                       0.95847+-0.00784          0.95038+-0.00724         might be 1.0085x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                                    37.83715+-0.62535         37.66332+-0.18580         might be 1.0046x faster
   &lt;geometric&gt; *                                                    7.19136+-0.11718          7.17528+-0.06212         might be 1.0022x faster
   &lt;harmonic&gt;                                                       1.34321+-0.02250          1.33487+-0.01978         might be 1.0062x faster

                                                                       TipOfTree              ImplicitJettison                                 
Kraken:
   ai-astar                                                         490.889+-0.528      ?     491.727+-0.629         ?
   audio-beat-detection                                             253.203+-3.086      ?     253.383+-2.897         ?
   audio-dft                                                        311.763+-1.546      ?     311.985+-1.939         ?
   audio-fft                                                        147.769+-0.222      !     149.817+-0.376         ! definitely 1.0139x slower
   audio-oscillator                                                 248.309+-1.568      ?     249.609+-2.706         ?
   imaging-darkroom                                                 296.887+-1.618      ?     296.993+-1.752         ?
   imaging-desaturate                                               159.907+-0.267            159.749+-0.308         
   imaging-gaussian-blur                                            404.812+-1.831            403.932+-0.373         
   json-parse-financial                                              81.055+-0.452      !      82.640+-0.164         ! definitely 1.0196x slower
   json-stringify-tinderbox                                         110.785+-2.382      ^     104.534+-0.438         ^ definitely 1.0598x faster
   stanford-crypto-aes                                              109.845+-0.926            108.539+-0.621           might be 1.0120x faster
   stanford-crypto-ccm                                              126.020+-2.100            122.910+-7.396           might be 1.0253x faster
   stanford-crypto-pbkdf2                                           270.788+-1.885      ^     266.060+-1.196         ^ definitely 1.0178x faster
   stanford-crypto-sha256-iterative                                 128.662+-0.804      ^     127.327+-0.465         ^ definitely 1.0105x faster

   &lt;arithmetic&gt; *                                                   224.335+-0.370            223.515+-0.661           might be 1.0037x faster
   &lt;geometric&gt;                                                      195.388+-0.448            194.166+-0.901           might be 1.0063x faster
   &lt;harmonic&gt;                                                       170.799+-0.500            169.342+-1.071           might be 1.0086x faster

                                                                       TipOfTree              ImplicitJettison                                 
JSBench:
   amazon                                                           10.0833+-0.1834     ?     10.3333+-0.3128        ? might be 1.0248x slower
   facebook                                                         38.7500+-0.3949           37.9167+-0.9171          might be 1.0220x faster
   google                                                           67.9167+-1.0991     ?     72.1667+-5.1677        ? might be 1.0626x slower
   twitter                                                          10.0000+-0.0000           10.0000+-0.0000        
   yahoo                                                             3.9167+-0.1834     ?      4.0833+-0.1834        ? might be 1.0426x slower

   &lt;arithmetic&gt; *                                                   26.1333+-0.2673     ?     26.9000+-1.1501        ? might be 1.0293x slower
   &lt;geometric&gt;                                                      15.9631+-0.2046     ?     16.2883+-0.3315        ? might be 1.0204x slower
   &lt;harmonic&gt;                                                       10.0857+-0.2789     ?     10.3570+-0.2200        ? might be 1.0269x slower

                                                                       TipOfTree              ImplicitJettison                                 
JSRegress:
   adapt-to-double-divide                                           22.5321+-0.0331           22.5153+-0.0331        
   aliased-arguments-getbyval                                        0.9733+-0.0282            0.9669+-0.0336        
   allocate-big-object                                               4.2350+-1.3558            4.0942+-1.3207          might be 1.0344x faster
   arity-mismatch-inlining                                           0.9012+-0.0339            0.8661+-0.0262          might be 1.0405x faster
   array-access-polymorphic-structure                                9.5719+-2.1450            9.0308+-2.0628          might be 1.0599x faster
   array-nonarray-polymorhpic-access                                60.4786+-0.1646     ?     83.5236+-33.9695       ? might be 1.3810x slower
   array-with-double-add                                             5.3788+-0.0225            5.3540+-0.0244        
   array-with-double-increment                                       4.1264+-0.0470     ?      4.1590+-0.0296        ?
   array-with-double-mul-add                                         7.4213+-0.2645            7.3572+-0.3296        
   array-with-double-sum                                             7.8876+-0.0190            7.8746+-0.0316        
   array-with-int32-add-sub                                          9.3150+-0.0355            9.3079+-0.0280        
   array-with-int32-or-double-sum                                    7.9653+-0.0222     ?      8.0040+-0.0504        ?
   ArrayBuffer-DataView-alloc-large-long-lived                     128.3822+-0.8954          127.9946+-0.7156        
   ArrayBuffer-DataView-alloc-long-lived                            42.0366+-3.9421           41.5764+-3.8905          might be 1.0111x faster
   ArrayBuffer-Int32Array-byteOffset                                 8.7690+-0.0265            8.7641+-0.0136        
   ArrayBuffer-Int8Array-alloc-huge-long-lived                     214.4182+-2.8831     ?    218.4404+-4.0591        ? might be 1.0188x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented         173.3457+-3.2215          172.5032+-2.8373        
   ArrayBuffer-Int8Array-alloc-large-long-lived                    131.2046+-1.8644     ?    132.0404+-1.3432        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer                    82.8584+-11.1824          80.5351+-10.7322         might be 1.0288x faster
   ArrayBuffer-Int8Array-alloc-long-lived                           41.1541+-3.9065           40.6021+-3.8956          might be 1.0136x faster
   ArrayBuffer-Int8Array-alloc                                      36.6418+-3.9564           35.9480+-4.0597          might be 1.0193x faster
   basic-set                                                        21.7550+-0.5359           21.1033+-0.3600          might be 1.0309x faster
   big-int-mul                                                       4.7868+-0.0312            4.7748+-0.0299        
   boolean-test                                                      4.3481+-0.0285            4.3301+-0.0224        
   branch-fold                                                       4.7642+-0.0525            4.7056+-0.0306          might be 1.0124x faster
   cast-int-to-double                                               14.1155+-0.0462           14.0806+-0.0371        
   cell-argument                                                    14.6631+-0.2425           14.5931+-0.2319        
   cfg-simplify                                                      3.8558+-0.0718            3.8015+-0.0442          might be 1.0143x faster
   cmpeq-obj-to-obj-other                                           12.3155+-0.2647     ?     12.4804+-0.1903        ? might be 1.0134x slower
   constant-test                                                     8.5537+-0.0956     ?      8.6478+-0.0277        ? might be 1.0110x slower
   DataView-custom-properties                                      136.0959+-0.6971     ?    136.5311+-0.8152        ?
   delay-tear-off-arguments-strictmode                               3.3816+-0.0333     ?      3.4324+-0.0513        ? might be 1.0150x slower
   direct-arguments-getbyval                                         0.7901+-0.0158     ?      0.7920+-0.0200        ?
   double-pollution-getbyval                                        10.8126+-0.0411           10.7642+-0.0341        
   double-pollution-putbyoffset                                      7.1357+-0.6794            6.9062+-0.6246          might be 1.0332x faster
   empty-string-plus-int                                            13.8711+-0.2353           13.7065+-0.2602          might be 1.0120x faster
   emscripten-cube2hash                                             49.7315+-2.9598           48.4989+-2.6819          might be 1.0254x faster
   emscripten-memops                                             10472.3305+-531.3944   ?  10849.9673+-1381.4535     ? might be 1.0361x slower
   external-arguments-getbyval                                       2.3694+-0.1489     ?      2.3932+-0.1482        ? might be 1.0101x slower
   external-arguments-putbyval                                       3.9622+-0.2550     ?      3.9638+-0.2604        ?
   Float32Array-matrix-mult                                          6.7174+-0.2015     ?      6.7348+-0.2103        ?
   Float32Array-to-Float64Array-set                                 96.1479+-0.2889     ?     96.7853+-1.1169        ?
   Float64Array-alloc-long-lived                                   108.4501+-0.4895     ?    110.1404+-1.6324        ? might be 1.0156x slower
   Float64Array-to-Int16Array-set                                  112.7396+-0.4804     ^    111.8948+-0.2655        ^ definitely 1.0076x faster
   fold-double-to-int                                               25.3360+-0.0889     ?     25.3605+-0.2320        ?
   function-dot-apply                                                3.0473+-0.0290            3.0473+-0.0434        
   function-test                                                     4.9190+-0.0990            4.8497+-0.1076          might be 1.0143x faster
   get-by-id-chain-from-try-block                                    6.5924+-0.0608            6.5755+-0.0489        
   get-by-id-proto-or-self                                          22.9274+-0.3798     ?     23.0477+-0.3516        ?
   get-by-id-self-or-proto                                          23.3653+-0.3464           23.3446+-0.3560        
   HashMap-put-get-iterate-keys                                     44.8670+-1.0121           43.7765+-0.6513          might be 1.0249x faster
   HashMap-put-get-iterate                                          53.7902+-0.7637     ?     53.8910+-0.5889        ?
   HashMap-string-put-get-iterate                                   64.3819+-0.7515     ?     65.0015+-0.2300        ?
   imul-double-only                                                 17.5215+-0.1070           17.4410+-0.0221        
   imul-int-only                                                    15.5842+-0.0366     ?     15.5850+-0.0286        ?
   imul-mixed                                                       22.0165+-0.0204           22.0147+-0.0321        
   in-four-cases                                                    26.0791+-0.0262     !     26.1346+-0.0191        ! definitely 1.0021x slower
   in-one-case-false                                                12.2241+-0.0301           12.1925+-0.0306        
   in-one-case-true                                                 12.1971+-0.0200     ?     12.2307+-0.0389        ?
   in-two-cases                                                     12.6376+-0.0389     ?     12.6556+-0.0589        ?
   indexed-properties-in-objects                                     4.0776+-0.0275            4.0667+-0.0391        
   inline-arguments-access                                           1.4872+-0.0490     ^      1.4135+-0.0197        ^ definitely 1.0522x faster
   inline-arguments-local-escape                                    28.4465+-2.6632     ?     28.9921+-2.9522        ? might be 1.0192x slower
   inline-get-scoped-var                                             6.7890+-0.0760     ?      6.8436+-0.1305        ?
   inlined-put-by-id-transition                                     14.9878+-0.1640           14.9043+-0.3319        
   int-or-other-abs-then-get-by-val                                  9.0764+-0.2210            8.9383+-0.1705          might be 1.0154x faster
   int-or-other-abs-zero-then-get-by-val                            36.2350+-0.0672     ?     36.2954+-0.1552        ?
   int-or-other-add-then-get-by-val                                 10.2061+-0.0322           10.1883+-0.0441        
   int-or-other-add                                                 10.4771+-0.1009           10.4129+-0.0597        
   int-or-other-div-then-get-by-val                                  6.1232+-0.0255            6.0954+-0.0315        
   int-or-other-max-then-get-by-val                                  7.0887+-0.0321            7.0340+-0.0237        
   int-or-other-min-then-get-by-val                                  7.1515+-0.0756            7.1303+-0.0303        
   int-or-other-mod-then-get-by-val                                  5.9886+-0.0329     ?      6.0361+-0.0494        ?
   int-or-other-mul-then-get-by-val                                  6.4927+-0.0411            6.4537+-0.0391        
   int-or-other-neg-then-get-by-val                                  7.9868+-0.0269            7.9674+-0.0307        
   int-or-other-neg-zero-then-get-by-val                            36.3819+-0.2737           36.3709+-0.2439        
   int-or-other-sub-then-get-by-val                                 10.5668+-0.0259     ?     10.5963+-0.0364        ?
   int-or-other-sub                                                  8.1510+-0.0543     ?      8.1576+-0.0712        ?
   int-overflow-local                                               11.8089+-0.0378           11.7464+-0.0966        
   Int16Array-alloc-long-lived                                      71.9502+-0.4820           71.5981+-0.3442        
   Int16Array-bubble-sort-with-byteLength                           48.3286+-0.1030           48.2471+-0.0824        
   Int16Array-bubble-sort                                           47.7080+-0.1046           47.6513+-0.1367        
   Int16Array-load-int-mul                                           1.9916+-0.0270     ?      2.0146+-0.0252        ? might be 1.0116x slower
   Int16Array-to-Int32Array-set                                     89.1196+-1.5524     !     94.2976+-0.2589        ! definitely 1.0581x slower
   Int32Array-alloc-huge-long-lived                                718.6344+-16.1892         717.8390+-17.2009       
   Int32Array-alloc-huge                                           823.8969+-5.8283          815.9898+-6.4664        
   Int32Array-alloc-large-long-lived                               977.9449+-6.0936          972.1173+-4.9341        
   Int32Array-alloc-large                                           46.0689+-1.2054           45.7415+-1.0931        
   Int32Array-alloc-long-lived                                      85.1817+-1.3147           85.1333+-1.2975        
   Int32Array-alloc                                                  7.4203+-2.9471     ?      7.4226+-2.9809        ?
   Int32Array-Int8Array-view-alloc                                  22.6554+-1.9874           22.5249+-1.9791        
   Int8Array-alloc-long-lived                                       74.0958+-4.6020           71.3239+-1.8159          might be 1.0389x faster
   Int8Array-load-with-byteLength                                    4.8471+-0.0534     ?      4.8699+-0.0613        ?
   Int8Array-load                                                    4.8083+-0.0162            4.7961+-0.0187        
   integer-divide                                                   15.4020+-0.0409           15.3604+-0.0254        
   integer-modulo                                                    1.9058+-0.0186     ?      1.9063+-0.0253        ?
   lots-of-fields                                                   16.2878+-2.4060           15.3368+-2.2646          might be 1.0620x faster
   make-indexed-storage                                              5.0476+-0.6276     ?      5.2915+-0.6570        ? might be 1.0483x slower
   make-rope-cse                                                    16.7825+-3.0361     ?     16.8796+-2.9110        ?
   marsaglia                                                       521.3164+-0.3604          521.1319+-0.2852        
   method-on-number                                                 27.4553+-0.4535           27.3361+-0.2615        
   negative-zero-divide                                              0.3188+-0.0126            0.3132+-0.0077          might be 1.0179x faster
   negative-zero-modulo                                              0.3097+-0.0162            0.2996+-0.0099          might be 1.0339x faster
   negative-zero-negate                                              0.2920+-0.0124     ?      0.2960+-0.0131        ? might be 1.0137x slower
   nested-function-parsing-random                                  408.4075+-12.5558         402.5014+-12.3849         might be 1.0147x faster
   nested-function-parsing                                          56.7902+-3.9412           56.2834+-3.1137        
   new-array-buffer-dead                                             3.9547+-0.0870            3.9533+-0.0709        
   new-array-buffer-push                                            14.8819+-2.4573           14.7503+-2.3242        
   new-array-dead                                                   28.3798+-0.0447           28.3492+-0.0348        
   new-array-push                                                   12.4360+-1.9900     ?     12.4729+-2.0373        ?
   number-test                                                       4.4442+-0.3216            4.3248+-0.0335          might be 1.0276x faster
   object-closure-call                                               8.6885+-0.1751     ?      9.2203+-1.0907        ? might be 1.0612x slower
   object-test                                                       4.7650+-0.0724     ?      4.8056+-0.0967        ?
   poly-stricteq                                                    92.9704+-0.3486     ?     93.2971+-0.8929        ?
   polymorphic-structure                                            21.0709+-0.1185     ?     21.0864+-0.0846        ?
   polyvariant-monomorphic-get-by-id                                12.5332+-0.0749           12.4876+-0.0321        
   put-by-val-large-index-blank-indexing-type                       16.3695+-3.0235           16.1402+-3.0032          might be 1.0142x faster
   rare-osr-exit-on-local                                           20.0854+-0.0356     ?     20.1420+-0.1078        ?
   register-pressure-from-osr                                       31.3997+-0.0490     ?     31.4437+-0.0838        ?
   simple-activation-demo                                           35.0472+-0.5050           34.6783+-0.2331          might be 1.0106x faster
   slow-array-profile-convergence                                    4.9621+-0.2368            4.9196+-0.3122        
   slow-convergence                                                  3.6424+-0.0778            3.5775+-0.0446          might be 1.0182x faster
   sparse-conditional                                                1.2976+-0.0350     ?      1.3050+-0.0500        ?
   splice-to-remove                                                 47.9832+-0.1263     ^     47.4436+-0.0982        ^ definitely 1.0114x faster
   string-concat-object                                              5.0633+-1.4144     ?      5.8572+-1.5479        ? might be 1.1568x slower
   string-concat-pair-object                                         5.0085+-1.3998     ?      5.7935+-1.5459        ? might be 1.1567x slower
   string-concat-pair-simple                                        19.4906+-0.6911           19.3184+-0.5926        
   string-concat-simple                                             19.6532+-0.6493           19.5187+-0.8386        
   string-cons-repeat                                               14.9946+-0.9638           14.9350+-0.9996        
   string-cons-tower                                                15.5005+-0.9733     ?     15.7058+-1.0775        ? might be 1.0132x slower
   string-equality                                                  43.3847+-0.4572           43.1904+-0.0406        
   string-get-by-val-big-char                                       17.4001+-0.2075           17.2647+-0.1957        
   string-get-by-val-out-of-bounds-insane                            5.2148+-0.1702            5.1269+-0.0828          might be 1.0171x faster
   string-get-by-val-out-of-bounds                                   4.7430+-0.0124     ?      4.7464+-0.0249        ?
   string-get-by-val                                                 3.9883+-0.0347     !      4.0724+-0.0366        ! definitely 1.0211x slower
   string-hash                                                       2.5950+-0.0272     ?      2.6163+-0.0384        ?
   string-long-ident-equality                                       38.6109+-0.2759           38.4412+-0.0363        
   string-repeat-arith                                              51.5061+-0.4902     ?     51.9763+-0.6198        ?
   string-sub                                                       99.9758+-1.2785     ?    100.0079+-3.7156        ?
   string-test                                                       4.3229+-0.1005            4.2343+-0.0253          might be 1.0209x faster
   string-var-equality                                              70.9502+-0.1710     ?     71.1273+-0.2964        ?
   structure-hoist-over-transitions                                  4.0573+-0.6026     ?      4.2561+-0.6272        ? might be 1.0490x slower
   switch-char-constant                                              3.3324+-0.0234            3.3259+-0.0317        
   switch-char                                                       7.9442+-0.0243     ?      7.9693+-0.0482        ?
   switch-constant                                                  12.9281+-2.6755     ?     12.9892+-2.5679        ?
   switch-string-basic-big-var                                      21.5866+-0.4242           21.3565+-0.0483          might be 1.0108x faster
   switch-string-basic-big                                          24.9608+-1.8009     ?     27.1146+-1.7301        ? might be 1.0863x slower
   switch-string-basic-var                                          21.2753+-0.0750           21.2695+-0.0400        
   switch-string-basic                                              20.1825+-0.3847           19.8077+-0.0459          might be 1.0189x faster
   switch-string-big-length-tower-var                               29.7831+-0.6199           29.5685+-0.0874        
   switch-string-length-tower-var                                   23.2907+-0.0519           23.2852+-0.0507        
   switch-string-length-tower                                       17.6455+-0.0576     ?     17.6620+-0.0458        ?
   switch-string-short                                              17.6218+-0.0350     ?     17.6589+-0.0737        ?
   switch                                                           19.3067+-2.8221     ?     19.3574+-2.7740        ?
   tear-off-arguments-simple                                         2.3117+-0.0435     ?      2.3781+-0.0286        ? might be 1.0287x slower
   tear-off-arguments                                                3.4755+-0.0340     ?      3.5369+-0.0477        ? might be 1.0176x slower
   temporal-structure                                               21.3210+-0.3743           21.2023+-0.0517        
   to-int32-boolean                                                 21.5763+-0.0396     ?     21.7357+-0.1625        ?
   undefined-test                                                    4.4589+-0.0314            4.4303+-0.0379        

   &lt;arithmetic&gt;                                                     90.5312+-20.6522    ?     92.1376+-22.0489       ? might be 1.0177x slower
   &lt;geometric&gt; *                                                    14.6974+-0.2928     ?     14.7137+-0.3248        ? might be 1.0011x slower
   &lt;harmonic&gt;                                                        5.1456+-0.0794            5.1248+-0.0807          might be 1.0040x faster

                                                                       TipOfTree              ImplicitJettison                                 
DSP:
   filtrr-posterize-tint                                            44.2134+-1.3306           43.9242+-1.3151        
   filtrr-tint-contrast-sat-bright                                  71.7637+-0.8685           71.2836+-0.3472        
   filtrr-tint-sat-adj-contr-mult                                   85.7292+-3.7008           83.8413+-3.1712          might be 1.0225x faster
   filtrr-blur-overlay-sat-contr                                   217.7817+-5.7239          217.0554+-5.9783        
   filtrr-sat-blur-mult-sharpen-contr                              259.7598+-2.0965     ?    263.2921+-4.5074        ? might be 1.0136x slower
   filtrr-sepia-bias                                                33.7648+-3.5145           33.6503+-3.5694        
   route9-vp8                                              x5     1090.6045+-10.1558        1078.6572+-9.2724          might be 1.0111x faster
   starfield                                               x5     1185.4922+-5.3854     ?   1187.0004+-3.7362        ?
   bellard-jslinux                                         x5     2879.1667+-9.2980         2872.1667+-11.1600       
   zynaps-quake3                                           x5     1401.0389+-22.8425        1399.7315+-24.1886       
   zynaps-mandelbrot                                       x5     1106.2737+-5.5673         1106.2389+-4.9541        
   ammojs-asm-js                                           x5      260.8441+-13.2576    ?    262.8664+-14.8387       ?
   ammojs-regular-js                                       x5      244.6981+-11.5234    ?    250.6587+-12.0301       ? might be 1.0244x slower

   &lt;arithmetic&gt;                                                   1013.5025+-3.0629         1012.1865+-2.2018          might be 1.0013x faster
   &lt;geometric&gt; *                                                   621.4527+-7.6916     ?    622.3740+-8.0204        ? might be 1.0015x slower
   &lt;harmonic&gt;                                                      282.7200+-11.0262         282.6506+-10.9849         might be 1.0002x faster

                                                                       TipOfTree              ImplicitJettison                                 
All benchmarks:
   &lt;arithmetic&gt;                                                    219.5496+-11.6277    ?    220.2248+-12.4186       ? might be 1.0031x slower
   &lt;geometric&gt;                                                      26.2264+-0.2780     ?     26.2329+-0.3531        ? might be 1.0002x slower
   &lt;harmonic&gt;                                                        4.9417+-0.0512            4.9170+-0.0565          might be 1.0050x faster

                                                                       TipOfTree              ImplicitJettison                                 
Geomean of preferred means:
   &lt;scaled-result&gt;                                                  42.1420+-0.1530     ?     42.2802+-0.5278        ? might be 1.0033x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923827</commentid>
    <comment_count>15</comment_count>
      <attachid>210303</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-09-02 18:06:48 -0700</bug_when>
    <thetext>Comment on attachment 210303
the patch

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

Refactoring looks good to me, but I&apos;d like to see the performance change split into a separate patch.

&gt; Source/JavaScriptCore/ChangeLog:37
&gt; +        This change has some small performance implications. JSBench/google
&gt; +        shows a ~9% regression because it GC&apos;s more frequently. However, that
&gt; +        regression is not due to the jettison refactoring - instead it&apos;s due to
&gt; +        the fact that this change also makes us more precisely track CodeBlock
&gt; +        memory footprint. Previously, we ignored the size of the bytecode stream.
&gt; +        Now we don&apos;t ignore it anyway. This causes some benchmarks to GC more
&gt; +        frequently. It&apos;s a bug to have the GC ignore the memory footprint of
&gt; +        CodeBlocks, and if that bug causes some benchmark to run a bit faster
&gt; +        while using a bit more memory, then it&apos;s still a bug and we should still
&gt; +        fix it. There are no other performance changes due to this change.

Can you submit the change to count the size of the bytecode stream as a separate patch? That would confirm your theory that this new way of scanning code blocks is performance-neutral. It would also make for clearer svn history, and a clearer patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923828</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-02 18:34:00 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 210303 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=210303&amp;action=review
&gt; 
&gt; Refactoring looks good to me, but I&apos;d like to see the performance change split into a separate patch.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:37
&gt; &gt; +        This change has some small performance implications. JSBench/google
&gt; &gt; +        shows a ~9% regression because it GC&apos;s more frequently. However, that
&gt; &gt; +        regression is not due to the jettison refactoring - instead it&apos;s due to
&gt; &gt; +        the fact that this change also makes us more precisely track CodeBlock
&gt; &gt; +        memory footprint. Previously, we ignored the size of the bytecode stream.
&gt; &gt; +        Now we don&apos;t ignore it anyway. This causes some benchmarks to GC more
&gt; &gt; +        frequently. It&apos;s a bug to have the GC ignore the memory footprint of
&gt; &gt; +        CodeBlocks, and if that bug causes some benchmark to run a bit faster
&gt; &gt; +        while using a bit more memory, then it&apos;s still a bug and we should still
&gt; &gt; +        fix it. There are no other performance changes due to this change.
&gt; 
&gt; Can you submit the change to count the size of the bytecode stream as a separate patch? That would confirm your theory 

To clarify, this isn&apos;t a theory - I already confirmed it. 

&gt; that this new way of scanning code blocks is performance-neutral. It would also make for clearer svn history, and a clearer patch.

Sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923841</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-02 21:49:58 -0700</bug_when>
    <thetext>Results without the reportExtraMemoryCost() change.  Note that JSBench no longer shows a 3% regression in the arithmetic mean.


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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/DumpRenderTree (r154964)
&quot;ImplicitJettison&quot; at /Volumes/Data/fromMiniMe/secondary/OpenSource/WebKitBuild/Release/DumpRenderTree (r154964)

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              ImplicitJettison                                 
SunSpider:
   3d-cube                                                           7.6092+-0.2599     ?      7.6923+-0.2637        ? might be 1.0109x slower
   3d-morph                                                          8.5404+-0.1659            8.3645+-0.0755          might be 1.0210x faster
   3d-raytrace                                                       9.8103+-0.3123            9.6302+-0.2153          might be 1.0187x faster
   access-binary-trees                                               2.7199+-0.2865            2.7152+-0.2905        
   access-fannkuch                                                   7.7220+-0.0840            7.6520+-0.0521        
   access-nbody                                                      4.1087+-0.0300            4.1063+-0.0453        
   access-nsieve                                                     4.8093+-0.0696     ?      4.8269+-0.0529        ?
   bitops-3bit-bits-in-byte                                          1.8094+-0.0196     ?      1.8241+-0.0238        ?
   bitops-bits-in-byte                                               6.6906+-0.0907     ?      6.7012+-0.0714        ?
   bitops-bitwise-and                                                2.7965+-0.0219            2.7838+-0.0403        
   bitops-nsieve-bits                                                4.6360+-0.0369     ?      4.6578+-0.0363        ?
   controlflow-recursive                                             2.9509+-0.0269     ?      2.9549+-0.0119        ?
   crypto-aes                                                        6.0345+-0.2717     ?      6.0586+-0.2989        ?
   crypto-md5                                                        3.1875+-0.0495     ?      3.2804+-0.0562        ? might be 1.0291x slower
   crypto-sha1                                                       2.9337+-0.0481     ?      2.9650+-0.0343        ? might be 1.0107x slower
   date-format-tofte                                                12.6566+-0.9516     ?     13.0299+-1.0430        ? might be 1.0295x slower
   date-format-xparb                                                 9.1078+-0.6258     ?      9.1693+-0.6579        ?
   math-cordic                                                       3.8672+-0.0257     ?      3.9419+-0.0612        ? might be 1.0193x slower
   math-partial-sums                                                10.4909+-0.0607     ?     10.4975+-0.0793        ?
   math-spectral-norm                                                2.8854+-0.0246            2.8732+-0.0842        
   regexp-dna                                                       12.7883+-0.5695     ?     12.7938+-0.5092        ?
   string-base64                                                     6.7566+-0.5090     ?      6.8600+-0.4901        ? might be 1.0153x slower
   string-fasta                                                     12.1271+-0.1521     ?     12.1993+-0.1333        ?
   string-tagcloud                                                  14.8122+-0.1676     ?     14.8172+-0.2136        ?
   string-unpack-code                                               32.0134+-0.5174           31.5321+-0.3647          might be 1.0153x faster
   string-validate-input                                             8.8170+-0.2111     ?      8.8352+-0.2553        ?

   &lt;arithmetic&gt; *                                                    7.7954+-0.1076     ?      7.7986+-0.1264        ? might be 1.0004x slower
   &lt;geometric&gt;                                                       6.1963+-0.0844     ?      6.2150+-0.0949        ? might be 1.0030x slower
   &lt;harmonic&gt;                                                        5.0392+-0.0646     ?      5.0607+-0.0719        ? might be 1.0043x slower

                                                                       TipOfTree              ImplicitJettison                                 
V8Spider:
   crypto                                                           81.4630+-0.3098           81.3337+-0.3441        
   deltablue                                                       102.1397+-1.7780     ?    102.1652+-1.5412        ?
   earley-boyer                                                     71.9896+-0.9835     ?     72.8013+-1.2106        ? might be 1.0113x slower
   raytrace                                                         43.7062+-3.7618     ?     45.9620+-4.9641        ? might be 1.0516x slower
   regexp                                                          102.2680+-0.3074     ?    102.5945+-0.3803        ?
   richards                                                        115.8428+-1.4996     ?    116.8501+-1.2253        ?
   splay                                                            60.0478+-3.0382     ?     60.3149+-2.9320        ?

   &lt;arithmetic&gt;                                                     82.4939+-0.7044     ?     83.1460+-0.6556        ? might be 1.0079x slower
   &lt;geometric&gt; *                                                    78.5446+-0.9613     ?     79.3534+-0.9787        ? might be 1.0103x slower
   &lt;harmonic&gt;                                                       74.2602+-1.3328     ?     75.2602+-1.4837        ? might be 1.0135x slower

                                                                       TipOfTree              ImplicitJettison                                 
Octane and V8v7:
   encrypt                                                          0.47715+-0.00435          0.47441+-0.00082       
   decrypt                                                          8.65572+-0.01505    ?     8.67222+-0.04087       ?
   deltablue                                               x2       0.63853+-0.02896    ?     0.64364+-0.04636       ?
   earley                                                           0.90738+-0.01559          0.90693+-0.01918       
   boyer                                                           12.83705+-0.19705         12.66959+-0.04757         might be 1.0132x faster
   raytrace                                                x2       4.40987+-0.07078    ?     4.42154+-0.05389       ?
   regexp                                                  x2      33.22945+-0.52463         32.94922+-0.27870       
   richards                                                x2       0.32194+-0.00447    ?     0.32249+-0.00508       ?
   splay                                                   x2       0.65980+-0.03371    ?     0.66043+-0.02941       ?
   navier-stokes                                           x2      10.93885+-0.02862         10.92387+-0.00781       
   closure                                                          0.43232+-0.04701    ?     0.43375+-0.04699       ?
   jquery                                                           5.31228+-0.70639    ?     5.33513+-0.70840       ?
   gbemu                                                   x2     101.34195+-7.26352         93.31950+-4.98609         might be 1.0860x faster
   mandreel                                                x2     194.31791+-1.08132    ?   194.98320+-1.26498       ?
   pdfjs                                                   x2     100.17874+-0.37535         99.63650+-0.25724       
   box2d                                                   x2      35.34444+-0.49458    ?    35.40152+-0.48689       ?

V8v7:
   &lt;arithmetic&gt;                                                     7.70464+-0.07417          7.66035+-0.03549         might be 1.0058x faster
   &lt;geometric&gt; *                                                    2.49459+-0.02085          2.49244+-0.03066         might be 1.0009x faster
   &lt;harmonic&gt;                                                       0.97006+-0.01010    ?     0.97104+-0.01761       ? might be 1.0010x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                                    38.13019+-0.59071         37.50061+-0.41403         might be 1.0168x faster
   &lt;geometric&gt; *                                                    7.25919+-0.11712          7.21189+-0.09384         might be 1.0066x faster
   &lt;harmonic&gt;                                                       1.35715+-0.02340    ?     1.35885+-0.02994       ? might be 1.0012x slower

                                                                       TipOfTree              ImplicitJettison                                 
Kraken:
   ai-astar                                                         491.329+-0.649      ?     491.897+-0.827         ?
   audio-beat-detection                                             254.760+-3.132            252.638+-2.871         
   audio-dft                                                        311.981+-1.664      ?     312.704+-2.104         ?
   audio-fft                                                        147.581+-0.213      ?     148.186+-0.831         ?
   audio-oscillator                                                 247.649+-1.385            247.496+-1.514         
   imaging-darkroom                                                 296.796+-1.105      ?     298.189+-1.471         ?
   imaging-desaturate                                               159.777+-0.278      ?     159.800+-0.303         ?
   imaging-gaussian-blur                                            408.465+-5.370            404.853+-1.170         
   json-parse-financial                                              81.074+-0.258      !      82.604+-0.161         ! definitely 1.0189x slower
   json-stringify-tinderbox                                         108.889+-2.752      ^     105.004+-0.507         ^ definitely 1.0370x faster
   stanford-crypto-aes                                              110.419+-1.251            109.401+-0.852         
   stanford-crypto-ccm                                              119.257+-6.738      ?     122.181+-6.297         ? might be 1.0245x slower
   stanford-crypto-pbkdf2                                           271.469+-1.609            269.812+-2.985         
   stanford-crypto-sha256-iterative                                 128.541+-0.346      ^     127.356+-0.312         ^ definitely 1.0093x faster

   &lt;arithmetic&gt; *                                                   224.142+-0.868            223.723+-0.478           might be 1.0019x faster
   &lt;geometric&gt;                                                      194.591+-1.107            194.280+-0.728           might be 1.0016x faster
   &lt;harmonic&gt;                                                       169.584+-1.329            169.433+-0.945           might be 1.0009x faster

                                                                       TipOfTree              ImplicitJettison                                 
JSBench:
   amazon                                                           10.0000+-0.0000     ?     10.1667+-0.2473        ? might be 1.0167x slower
   facebook                                                         38.5833+-0.4248     ?     39.0000+-0.6636        ? might be 1.0108x slower
   google                                                           68.0833+-1.3936           68.0833+-0.9939        
   twitter                                                           9.9167+-0.3272     ?     10.1667+-0.2473        ? might be 1.0252x slower
   yahoo                                                             3.8333+-0.2473            3.8333+-0.2473        

   &lt;arithmetic&gt; *                                                   26.0833+-0.2787     ?     26.2500+-0.2107        ? might be 1.0064x slower
   &lt;geometric&gt;                                                      15.8245+-0.2039     ?     15.9907+-0.2130        ? might be 1.0105x slower
   &lt;harmonic&gt;                                                        9.9188+-0.3437     ?     10.0060+-0.3479        ? might be 1.0088x slower

                                                                       TipOfTree              ImplicitJettison                                 
JSRegress:
   adapt-to-double-divide                                           22.5453+-0.0330           22.5322+-0.0330        
   aliased-arguments-getbyval                                        0.9640+-0.0294     ?      0.9997+-0.0318        ? might be 1.0370x slower
   allocate-big-object                                               4.4868+-1.3899            4.0390+-1.2788          might be 1.1109x faster
   arity-mismatch-inlining                                           0.8884+-0.0343            0.8809+-0.0234        
   array-access-polymorphic-structure                                9.0436+-1.9957     ?      9.2468+-2.0873        ? might be 1.0225x slower
   array-nonarray-polymorhpic-access                                72.0459+-25.1076          60.4826+-0.0896          might be 1.1912x faster
   array-with-double-add                                             5.3684+-0.0243     ?      5.4059+-0.0404        ?
   array-with-double-increment                                       4.1749+-0.0689            4.1430+-0.0396        
   array-with-double-mul-add                                         7.3663+-0.2581     ?      7.4556+-0.2328        ? might be 1.0121x slower
   array-with-double-sum                                             7.8983+-0.0513            7.8593+-0.0248        
   array-with-int32-add-sub                                          9.3619+-0.0361            9.3075+-0.0200        
   array-with-int32-or-double-sum                                    7.9602+-0.0158     ?      7.9645+-0.0167        ?
   ArrayBuffer-DataView-alloc-large-long-lived                     130.0518+-0.9105          129.3100+-0.6274        
   ArrayBuffer-DataView-alloc-long-lived                            42.4460+-3.8454           41.8191+-3.8378          might be 1.0150x faster
   ArrayBuffer-Int32Array-byteOffset                                 8.7189+-0.0227     ?      8.7478+-0.0662        ?
   ArrayBuffer-Int8Array-alloc-huge-long-lived                     217.6167+-2.2998          216.4716+-2.8280        
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented         172.8489+-3.9112     ?    173.4783+-3.2949        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived                    132.1901+-1.4942          131.6699+-1.5067        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer                    83.2396+-11.4100          81.0640+-10.7675         might be 1.0268x faster
   ArrayBuffer-Int8Array-alloc-long-lived                           41.1225+-3.7190           40.8107+-3.9050        
   ArrayBuffer-Int8Array-alloc                                      36.6668+-3.9373           36.0413+-3.9775          might be 1.0174x faster
   basic-set                                                        21.4052+-0.3236     ?     21.4517+-0.3436        ?
   big-int-mul                                                       4.7613+-0.0377            4.7365+-0.0259        
   boolean-test                                                      4.4033+-0.0514            4.3524+-0.0295          might be 1.0117x faster
   branch-fold                                                       4.7016+-0.0137     !      4.7474+-0.0271        ! definitely 1.0097x slower
   cast-int-to-double                                               14.1181+-0.0388     ?     14.1222+-0.0348        ?
   cell-argument                                                    14.5110+-0.1947           14.4967+-0.2027        
   cfg-simplify                                                      3.8113+-0.0261            3.7941+-0.0340        
   cmpeq-obj-to-obj-other                                           12.3427+-0.2227     ?     12.4859+-0.2672        ? might be 1.0116x slower
   constant-test                                                     8.6309+-0.0688     ?      8.6375+-0.0558        ?
   DataView-custom-properties                                      136.7026+-0.6207          136.1101+-0.8427        
   delay-tear-off-arguments-strictmode                               3.4095+-0.0404            3.3802+-0.0357        
   direct-arguments-getbyval                                         0.7991+-0.0128            0.7945+-0.0302        
   double-pollution-getbyval                                        10.7627+-0.0395     ?     10.7853+-0.0341        ?
   double-pollution-putbyoffset                                      7.2864+-0.5209            7.1524+-0.5339          might be 1.0187x faster
   empty-string-plus-int                                            13.9536+-0.2308           13.8622+-0.1696        
   emscripten-cube2hash                                             49.5278+-2.7986     ?     52.3181+-2.7973        ? might be 1.0563x slower
   emscripten-memops                                             10476.5049+-528.3420   ?  10505.1029+-483.2218      ?
   external-arguments-getbyval                                       2.3837+-0.1488            2.3692+-0.1378        
   external-arguments-putbyval                                       3.9258+-0.2622     ?      4.0134+-0.2460        ? might be 1.0223x slower
   Float32Array-matrix-mult                                          6.6930+-0.1898     ?      6.7130+-0.1785        ?
   Float32Array-to-Float64Array-set                                 97.2792+-0.8390           96.5809+-0.6334        
   Float64Array-alloc-long-lived                                   108.7377+-0.5336          108.4215+-0.5352        
   Float64Array-to-Int16Array-set                                  112.2077+-0.6930          111.9416+-0.9850        
   fold-double-to-int                                               25.6047+-0.4813           25.4989+-0.3424        
   function-dot-apply                                                3.0417+-0.0233            3.0291+-0.0219        
   function-test                                                     4.9188+-0.1117            4.8155+-0.0983          might be 1.0214x faster
   get-by-id-chain-from-try-block                                    6.5887+-0.0224     ?      6.5907+-0.0567        ?
   get-by-id-proto-or-self                                          22.9899+-0.3069     ?     23.0391+-0.3854        ?
   get-by-id-self-or-proto                                          23.2573+-0.3932     ?     23.3561+-0.3269        ?
   HashMap-put-get-iterate-keys                                     43.9475+-0.6076           43.7813+-0.5548        
   HashMap-put-get-iterate                                          53.7388+-0.6084     ?     54.3502+-1.3796        ? might be 1.0114x slower
   HashMap-string-put-get-iterate                                   64.9091+-0.8361           64.4281+-0.5766        
   imul-double-only                                                 17.4542+-0.0226     ?     17.8201+-0.7227        ? might be 1.0210x slower
   imul-int-only                                                    15.5818+-0.0368     ?     15.5860+-0.0430        ?
   imul-mixed                                                       22.3935+-0.7166           22.0179+-0.0249          might be 1.0171x faster
   in-four-cases                                                    26.0535+-0.0229     !     26.2182+-0.1111        ! definitely 1.0063x slower
   in-one-case-false                                                12.2280+-0.0303     ?     12.2516+-0.0376        ?
   in-one-case-true                                                 12.2181+-0.0316     ?     12.2938+-0.1117        ?
   in-two-cases                                                     12.6373+-0.0239           12.6127+-0.0395        
   indexed-properties-in-objects                                     4.0797+-0.0298     ?      4.1638+-0.0846        ? might be 1.0206x slower
   inline-arguments-access                                           1.4024+-0.0156     ?      1.4066+-0.0343        ?
   inline-arguments-local-escape                                    27.3204+-0.6930           26.4215+-0.3232          might be 1.0340x faster
   inline-get-scoped-var                                             6.8362+-0.0379            6.7595+-0.0650          might be 1.0114x faster
   inlined-put-by-id-transition                                     14.7154+-0.1737     ?     14.8836+-0.1758        ? might be 1.0114x slower
   int-or-other-abs-then-get-by-val                                  8.9078+-0.1603     ?      8.9583+-0.1840        ?
   int-or-other-abs-zero-then-get-by-val                            36.4547+-0.1060     ?     36.5175+-0.1575        ?
   int-or-other-add-then-get-by-val                                 10.2180+-0.0365     ?     10.2670+-0.0912        ?
   int-or-other-add                                                 10.4069+-0.0441           10.3878+-0.0372        
   int-or-other-div-then-get-by-val                                  6.1195+-0.0261     ?      6.1215+-0.0393        ?
   int-or-other-max-then-get-by-val                                  7.1088+-0.0916            7.0618+-0.0312        
   int-or-other-min-then-get-by-val                                  7.1803+-0.0613            7.1676+-0.0404        
   int-or-other-mod-then-get-by-val                                  6.0450+-0.1057            5.9676+-0.0252          might be 1.0130x faster
   int-or-other-mul-then-get-by-val                                  6.5628+-0.0880     ^      6.4209+-0.0378        ^ definitely 1.0221x faster
   int-or-other-neg-then-get-by-val                                  8.0006+-0.0518            7.9679+-0.0380        
   int-or-other-neg-zero-then-get-by-val                            36.9265+-0.7394           36.2842+-0.0664          might be 1.0177x faster
   int-or-other-sub-then-get-by-val                                 10.5784+-0.0847     ?     10.5808+-0.0251        ?
   int-or-other-sub                                                  8.1335+-0.0327     ?      8.1359+-0.0296        ?
   int-overflow-local                                               11.7926+-0.0367     ?     11.8599+-0.0436        ?
   Int16Array-alloc-long-lived                                      71.7590+-0.3805           71.7106+-0.5310        
   Int16Array-bubble-sort-with-byteLength                           48.2921+-0.1260     ?     48.5295+-0.3186        ?
   Int16Array-bubble-sort                                           47.7671+-0.2194           47.6770+-0.1348        
   Int16Array-load-int-mul                                           2.0065+-0.0187            2.0014+-0.0221        
   Int16Array-to-Int32Array-set                                     88.5658+-0.7033     !     93.7748+-0.5168        ! definitely 1.0588x slower
   Int32Array-alloc-huge-long-lived                                725.1355+-14.1244         720.8295+-15.6631       
   Int32Array-alloc-huge                                           818.4932+-6.8506          810.2781+-6.5496          might be 1.0101x faster
   Int32Array-alloc-large-long-lived                               973.5072+-9.2513     ?    983.5853+-7.6258        ? might be 1.0104x slower
   Int32Array-alloc-large                                           46.7437+-0.8107           45.7942+-0.6759          might be 1.0207x faster
   Int32Array-alloc-long-lived                                      85.1979+-1.1622           85.0947+-1.2663        
   Int32Array-alloc                                                  7.3815+-2.9606     ?      7.4424+-2.9916        ?
   Int32Array-Int8Array-view-alloc                                  22.9276+-1.9769           22.2734+-1.7833          might be 1.0294x faster
   Int8Array-alloc-long-lived                                       71.8527+-1.8866           71.3330+-1.4488        
   Int8Array-load-with-byteLength                                    4.8385+-0.0283            4.8181+-0.0194        
   Int8Array-load                                                    4.8288+-0.0201            4.8119+-0.0220        
   integer-divide                                                   15.4233+-0.0893           15.3596+-0.0231        
   integer-modulo                                                    1.9604+-0.0886            1.9079+-0.0220          might be 1.0275x faster
   lots-of-fields                                                   15.9912+-2.4697     ?     16.1531+-2.3912        ? might be 1.0101x slower
   make-indexed-storage                                              4.8751+-0.5807     ?      5.0185+-0.6283        ? might be 1.0294x slower
   make-rope-cse                                                    16.7977+-2.9695           16.7855+-2.9516        
   marsaglia                                                       521.0994+-0.5673     ?    521.1359+-0.3132        ?
   method-on-number                                                 26.7612+-0.1477     ?     27.0664+-0.3683        ? might be 1.0114x slower
   negative-zero-divide                                              0.3203+-0.0136            0.3123+-0.0087          might be 1.0255x faster
   negative-zero-modulo                                              0.3025+-0.0116     ?      0.3031+-0.0093        ?
   negative-zero-negate                                              0.2889+-0.0111     ?      0.2908+-0.0107        ?
   nested-function-parsing-random                                  408.6951+-12.3142         404.9318+-12.3736       
   nested-function-parsing                                          57.0143+-4.0261     ?     57.0505+-3.9748        ?
   new-array-buffer-dead                                             3.9359+-0.1247     ?      3.9951+-0.0892        ? might be 1.0150x slower
   new-array-buffer-push                                            14.8644+-2.4003     ?     15.0474+-2.4038        ? might be 1.0123x slower
   new-array-dead                                                   28.3854+-0.0312     ?     28.5239+-0.2078        ?
   new-array-push                                                   12.4008+-1.9994     ?     12.4728+-2.0136        ?
   number-test                                                       4.3299+-0.0525            4.3021+-0.0314        
   object-closure-call                                               9.2589+-1.1204     ?      9.7386+-1.3953        ? might be 1.0518x slower
   object-test                                                       4.8022+-0.1057            4.7449+-0.0777          might be 1.0121x faster
   poly-stricteq                                                    93.0923+-0.3415     ?     93.1412+-0.3196        ?
   polymorphic-structure                                            21.1069+-0.0542           21.0592+-0.0592        
   polyvariant-monomorphic-get-by-id                                12.4600+-0.0150     ?     12.5305+-0.0569        ?
   put-by-val-large-index-blank-indexing-type                       16.2878+-3.1001     ?     16.3387+-3.0675        ?
   rare-osr-exit-on-local                                           20.1345+-0.0277           20.0802+-0.0382        
   register-pressure-from-osr                                       31.3923+-0.0418           31.3694+-0.0357        
   simple-activation-demo                                           34.7484+-0.2487     ?     34.8054+-0.1997        ?
   slow-array-profile-convergence                                    4.9100+-0.2456            4.8144+-0.2431          might be 1.0199x faster
   slow-convergence                                                  3.5933+-0.0502            3.5881+-0.0627        
   sparse-conditional                                                1.3272+-0.0212            1.3224+-0.0295        
   splice-to-remove                                                 47.8836+-0.0849     ^     47.4467+-0.1239        ^ definitely 1.0092x faster
   string-concat-object                                              5.2163+-1.4868            5.0887+-1.4358          might be 1.0251x faster
   string-concat-pair-object                                         4.9793+-1.4071     ?      5.0482+-1.4662        ? might be 1.0138x slower
   string-concat-pair-simple                                        19.3862+-0.8865     ?     19.5129+-0.7701        ?
   string-concat-simple                                             19.4484+-0.7129           19.2956+-0.6422        
   string-cons-repeat                                               15.0039+-1.0009     ?     15.0624+-1.1299        ?
   string-cons-tower                                                15.7162+-1.0716           15.3684+-0.9535          might be 1.0226x faster
   string-equality                                                  43.4599+-0.3870           43.1770+-0.0457        
   string-get-by-val-big-char                                       17.2520+-0.2343     ?     17.2725+-0.1957        ?
   string-get-by-val-out-of-bounds-insane                            5.1425+-0.0649            5.0750+-0.0658          might be 1.0133x faster
   string-get-by-val-out-of-bounds                                   4.7369+-0.0225            4.7321+-0.0225        
   string-get-by-val                                                 3.9964+-0.0265     !      4.1042+-0.0391        ! definitely 1.0270x slower
   string-hash                                                       2.5952+-0.0271            2.5867+-0.0253        
   string-long-ident-equality                                       38.4670+-0.2296     ?     38.9421+-0.7073        ? might be 1.0124x slower
   string-repeat-arith                                              52.3725+-0.9391           51.6423+-0.4045          might be 1.0141x faster
   string-sub                                                       99.1375+-0.7746     ?    104.5398+-7.1642        ? might be 1.0545x slower
   string-test                                                       4.2218+-0.0205     ?      4.2333+-0.0239        ?
   string-var-equality                                              71.1598+-0.3313           71.0704+-0.3784        
   structure-hoist-over-transitions                                  4.0612+-0.6031            4.0506+-0.5820        
   switch-char-constant                                              3.3309+-0.0349     ?      3.3473+-0.0230        ?
   switch-char                                                       7.9525+-0.0256     ?      7.9705+-0.0348        ?
   switch-constant                                                  13.1070+-2.8166           12.7950+-2.6698          might be 1.0244x faster
   switch-string-basic-big-var                                      21.3973+-0.0489           21.3438+-0.0381        
   switch-string-basic-big                                          24.2545+-1.4830     ?     26.1890+-1.8757        ? might be 1.0798x slower
   switch-string-basic-var                                          21.2496+-0.0530     !     21.6655+-0.3239        ! definitely 1.0196x slower
   switch-string-basic                                              19.8133+-0.0548     ?     19.8622+-0.0759        ?
   switch-string-big-length-tower-var                               29.7427+-0.2075           29.5266+-0.0967        
   switch-string-length-tower-var                                   23.2948+-0.0695     ?     23.2960+-0.0384        ?
   switch-string-length-tower                                       17.6173+-0.0330     ?     17.7102+-0.0993        ?
   switch-string-short                                              17.6302+-0.0587     ?     17.6347+-0.0569        ?
   switch                                                           17.2043+-2.6394           16.5340+-2.4195          might be 1.0405x faster
   tear-off-arguments-simple                                         2.3016+-0.0440     ?      2.3138+-0.0399        ?
   tear-off-arguments                                                3.4644+-0.0251     ?      3.4736+-0.0492        ?
   temporal-structure                                               21.0933+-0.0439           21.0855+-0.0561        
   to-int32-boolean                                                 21.5533+-0.0260     ?     21.5673+-0.0480        ?
   undefined-test                                                    4.4470+-0.0232     ?      4.4662+-0.0625        ?

   &lt;arithmetic&gt;                                                     90.5983+-20.7758    ?     90.6297+-20.7755       ? might be 1.0003x slower
   &lt;geometric&gt; *                                                    14.6796+-0.3048           14.6669+-0.3553          might be 1.0009x faster
   &lt;harmonic&gt;                                                        5.1246+-0.0831            5.1158+-0.0907          might be 1.0017x faster

                                                                       TipOfTree              ImplicitJettison                                 
DSP:
   filtrr-posterize-tint                                            44.0309+-1.3639     ?     44.0596+-1.4119        ?
   filtrr-tint-contrast-sat-bright                                  71.2073+-0.3948     ?     71.6827+-0.8522        ?
   filtrr-tint-sat-adj-contr-mult                                   86.0472+-3.6161           85.7312+-3.7417        
   filtrr-blur-overlay-sat-contr                                   219.7635+-5.9953          218.3678+-5.7187        
   filtrr-sat-blur-mult-sharpen-contr                              260.1861+-1.9079          258.5276+-1.6658        
   filtrr-sepia-bias                                                33.9601+-3.5925           33.5398+-3.4420          might be 1.0125x faster
   route9-vp8                                              x5     1089.1169+-8.1935         1086.1057+-6.1966        
   starfield                                               x5     1188.6717+-3.0951     ?   1188.9186+-5.7830        ?
   bellard-jslinux                                         x5     2881.8333+-16.1644        2877.5833+-9.5227        
   zynaps-quake3                                           x5     1396.8693+-25.6225        1395.7904+-23.1548       
   zynaps-mandelbrot                                       x5     1106.4576+-5.3028         1105.4316+-4.3344        
   ammojs-asm-js                                           x5      263.4510+-14.3026         257.5503+-14.0830         might be 1.0229x faster
   ammojs-regular-js                                       x5      251.8095+-11.2739         246.7334+-10.3089         might be 1.0206x faster

   &lt;arithmetic&gt;                                                   1014.7864+-2.2201         1012.2555+-2.5921          might be 1.0025x faster
   &lt;geometric&gt; *                                                   624.4404+-7.5139          620.4609+-8.1379          might be 1.0064x faster
   &lt;harmonic&gt;                                                      284.1913+-10.3974         281.9868+-11.1326         might be 1.0078x faster

                                                                       TipOfTree              ImplicitJettison                                 
All benchmarks:
   &lt;arithmetic&gt;                                                    219.7869+-11.7053         219.3710+-11.6034         might be 1.0019x faster
   &lt;geometric&gt;                                                      26.2403+-0.3062           26.2019+-0.3373          might be 1.0015x faster
   &lt;harmonic&gt;                                                        4.9477+-0.0597            4.9464+-0.0593          might be 1.0003x faster

                                                                       TipOfTree              ImplicitJettison                                 
Geomean of preferred means:
   &lt;scaled-result&gt;                                                  42.1887+-0.2058     ?     42.1959+-0.1839        ? might be 1.0002x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923843</commentid>
    <comment_count>18</comment_count>
      <attachid>210321</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-02 21:52:01 -0700</bug_when>
    <thetext>Created attachment 210321
the patch

Updated patch without the fix for https://bugs.webkit.org/show_bug.cgi?id=120615</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923845</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-02 21:53:35 -0700</bug_when>
    <thetext>Attachment 210321 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommonData.h&apos;, u&apos;Source/JavaScriptCore/heap/CodeBlockSet.cpp&apos;, u&apos;Source/JavaScriptCore/heap/CodeBlockSet.h&apos;, u&apos;Source/JavaScriptCore/heap/ConservativeRoots.cpp&apos;, u&apos;Source/JavaScriptCore/heap/ConservativeRoots.h&apos;, u&apos;Source/JavaScriptCore/heap/DFGCodeBlocks.cpp&apos;, u&apos;Source/JavaScriptCore/heap/DFGCodeBlocks.h&apos;, u&apos;Source/JavaScriptCore/heap/Heap.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/interpreter/JSStack.cpp&apos;, u&apos;Source/JavaScriptCore/interpreter/JSStack.h&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.h&apos;, u&apos;Source/JavaScriptCore/runtime/VM.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/interpreter/JSStack.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924041</commentid>
    <comment_count>20</comment_count>
      <attachid>210321</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-09-03 09:31:55 -0700</bug_when>
    <thetext>Comment on attachment 210321
the patch

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

&gt; Source/JavaScriptCore/CMakeLists.txt:-174
&gt; -    heap/CopiedSpace.cpp
&gt; -    heap/CopyVisitor.cpp
&gt; -    heap/ConservativeRoots.cpp

It seems wrong to remove these?  Or is this a duplicated include?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924042</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-03 09:35:39 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 210321 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=210321&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/CMakeLists.txt:-174
&gt; &gt; -    heap/CopiedSpace.cpp
&gt; &gt; -    heap/CopyVisitor.cpp
&gt; &gt; -    heap/ConservativeRoots.cpp
&gt; 
&gt; It seems wrong to remove these?  Or is this a duplicated include?

They&apos;re duplicates.  I&apos;m removing them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924044</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-09-03 09:38:40 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/154986</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210258</attachid>
            <date>2013-09-01 20:48:50 -0700</date>
            <delta_ts>2013-09-01 20:49:33 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56831</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDEzLTA5LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZUJsb2NrOjpqZXR0aXNvbigpIHNob3VsZCBiZSBpbXBsaWNpdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNTY3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgcmlza3kg
Y2hhbmdlIGZyb20gYSBwZXJmb3JtYW5jZSBzdGFuZHBvaW50LCBidXQgSSBiZWxpZXZlIGl0J3MK
KyAgICAgICAgbmVjZXNzYXJ5LiBUaGlzIG1ha2VzIGFsbCBDb2RlQmxvY2tzIGdldCBzd2VwdCBi
eSBHQy4gTm9ib2R5IGJ1dCB0aGUgR0MKKyAgICAgICAgY2FuIGRlbGV0ZSBDb2RlQmxvY2tzIGJl
Y2F1c2UgdGhlIEdDIGFsd2F5cyBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGVtLgorICAgICAgICBP
bmNlIGEgQ29kZUJsb2NrIHJlYWNoZXMganVzdCBvbmUgcmVmZXJlbmNlIChpLmUuIHRoZSBvbmUg
ZnJvbSB0aGUgR0MpCisgICAgICAgIHRoZW4gdGhlIEdDIHdpbGwgZnJlZSBpdCBvbmx5IGlmIGl0
J3Mgbm90IG9uIHRoZSBzdGFjay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxsb3dzIG1lIHRv
IGdldCByaWQgb2YgdGhlIGpldHRpc29uaW5nIGxvZ2ljLiBXZSBuZWVkIHRoaXMgZm9yIEZUTAor
ICAgICAgICB0aWVyLXVwLiBXZWxsOyB3ZSBkb24ndCBuZWVkIGl0LCBidXQgaXQgd2lsbCBoZWxw
IHByZXZlbnQgYSBsb3Qgb2YgYnVncy4KKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRl
ZCB0byB0byByZXBsYWNlIG9uZSBjb2RlIGJsb2NrIHdpdGggYW5vdGhlciwgeW91CisgICAgICAg
IGhhZCB0byByZW1lbWJlciB0byB0ZWxsIHRoZSBHQyB0aGF0IHRoZSBwcmV2aW91cyBjb2RlIGJs
b2NrIGlzCisgICAgICAgICJqZXR0aXNvbmVkIi4gV2Ugd291bGQgbmVlZCB0byBkbyB0aGlzIHdo
ZW4gdGllcmluZyB1cCBmcm9tIERGRyB0byBGVEwKKyAgICAgICAgYW5kIHdoZW4gZGVhbGluZyB3
aXRoIERGRy10by1GVEwgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLiBUaGVyZSBhcmUgYSBsb3QKKyAg
ICAgICAgb2YgcGVybXV0YXRpb25zIGhlcmUgLSB0aWVyaW5nIHVwIHRvIHRoZSBGVEwsIE9TUiBl
bnRlcmluZyBpbnRvIHRoZSBGVEwsCisgICAgICAgIGRlY2lkaW5nIHRoYXQgYW4gT1NSIGVudHJ5
IGNvZGUgYmxvY2sgaXMgbm90IHJlbGV2YW50IGFueW1vcmUgLSBqdXN0IHRvCisgICAgICAgIG5h
bWUgYSBmZXcuIEluIGVhY2ggb2YgdGhlc2UgY2FzZXMgd2UnZCBoYXZlIHRvIGpldHRpc29uIHRo
ZSBwcmV2aW91cworICAgICAgICBjb2RlIGJsb2NrLiBJdCBzbWVsbHMgbGlrZSBhIGh1Z2Ugc291
cmNlIG9mIGZ1dHVyZSBidWdzLgorICAgICAgICAKKyAgICAgICAgU28gSSBtYWRlIGpldHRpc29u
aW5nIGltcGxpY2l0IGJ5IG1ha2luZyB0aGUgR0MgYWx3YXlzIHdhdGNoIG91dCBmb3IgYQorICAg
ICAgICBDb2RlQmxvY2sgYmVpbmcgb3duZWQgc29sZWx5IGJ5IHRoZSBHQy4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
VGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6fkNv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2Nh
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6bWFyayk6CisgICAgICAgICogZGZnL0RG
R0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpDb21tb25EYXRh
KToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1Nl
dDo6fkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6YWRkKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQpOgorICAgICAgICAqIGhlYXAvQ29kZUJsb2NrU2V0
Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAg
ICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBoZWFwL0RGR0NvZGVCbG9ja3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBoZWFw
L0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAoSlND
OjpIZWFwOjpkZWxldGVBbGxDb21waWxlZENvZGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWxl
dGVVbm1hcmtlZENvbXBpbGVkQ29kZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAg
ICogaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNrLmg6Cisg
ICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhl
Y3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0wOC0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIENvZGVCbG9jayByZWZhY3RvcmluZyBicm9rZSBwcm9m
aWxlIGR1bXBpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMTY5LDEwICsxNjksMTAgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAogCiAgICAgaGVhcC9CbG9j
a0FsbG9jYXRvci5jcHAKKyAgICBoZWFwL0NvZGVCbG9ja1NldC5jcHAKICAgICBoZWFwL0NvcGll
ZFNwYWNlLmNwcAogICAgIGhlYXAvQ29weVZpc2l0b3IuY3BwCiAgICAgaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5jcHAKLSAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwCiAgICAgaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCiAgICAgaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCiAgICAg
aGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00
NDIsNiArNDQyLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZyb21CbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExWYWx1ZVNvdXJjZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tT
ZXQuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oIFwKQEAgLTQ1Niw4ICs0NTgsNiBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2
YXRpdmVSb290cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2
ZVJvb3RzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaCBcCi0JU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAgXAotCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NBc3NlcnRpb25zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21p
bmdSZWZDb3VudGVkSW5saW5lcy5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJn
ZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShy
ZXZpc2lvbiAxNTQ5NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29y
a2luZyBjb3B5KQpAQCAtODIsMTEgKzgyLDExIEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5dGVjb2Rl
L1dhdGNocG9pbnQuY3BwIFwKICAgICBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
IFwKICAgICBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBcCisgICAgaGVhcC9Db2RlQmxv
Y2tTZXQuY3BwIFwKICAgICBoZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oIFwKICAgICBoZWFwL0Nv
cGllZFNwYWNlLmNwcCBcCiAgICAgaGVhcC9Db3B5VmlzaXRvci5jcHAgXAogICAgIGhlYXAvQ29u
c2VydmF0aXZlUm9vdHMuY3BwIFwKLSAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwIFwKICAgICBo
ZWFwL1dlYWsuY3BwIFwKICAgICBoZWFwL1dlYWtCbG9jay5jcHAgXAogICAgIGhlYXAvV2Vha0hh
bmRsZU93bmVyLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMz
MCwxMCArMzMwLDEwIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRHJpdmVy
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkaXNhc3NlbWJsZXJcRGlzYXNz
ZW1ibGVyLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEJsb2NrQWxs
b2NhdG9yLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXENvZGVCbG9j
a1NldC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb25zZXJ2YXRp
dmVSb290cy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb3BpZWRT
cGFjZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb3B5VmlzaXRv
ci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxERkdDb2RlQmxvY2tz
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFkLmNwcCIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFkU2hhcmVkRGF0YS5j
cHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVTZXQuY3BwIiAv
Pg0KQEAgLTY3OSw2ICs2NzksNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R09TUkVudHJ5LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVy
XERpc2Fzc2VtYmxlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQmxv
Y2tBbGxvY2F0b3IuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvZGVC
bG9ja1NldC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29uc2VydmF0
aXZlUm9vdHMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvcGllZEFs
bG9jYXRvci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29waWVkQmxv
Y2suaCIgLz4NCkBAIC02ODksNyArNjkwLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcQ29weVZpc2l0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFw
XENvcHlWaXNpdG9ySW5saW5lcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhl
YXBcQ29weVdvcmtMaXN0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxE
RkdDb2RlQmxvY2tzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ0Fz
c2VydGlvbnMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFk
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVhZFNoYXJlZERh
dGEuaCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU0
OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw4ICsxNzgsNiBAQAogCQkwRjJC
REM0RDE1MjI4MTg2MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzRDMTUyMjgxODMwMENEODkx
MCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovOyB9OwogCQkwRjJCREM0RjE1MjI4QkYzMDBDRDg5
MTAgLyogREZHVmFsdWVTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNl
LmNwcCAqLzsgfTsKIAkJMEYyQkRDNTExNTIyOEZGRDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QkRDNTAxNTIyOEZGQTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovOyB9OwotCQkw
RjJDNTU2RjE0NzM4RjMxMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRG
IC8qIERGR0NvZGVCbG9ja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2
RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi87IH07CiAJCTBGMkU4OTJD
MTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyRjE2ODI4QTdFMDAzQzJGOEQgLyogVW51
c2VkUG9pbnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMkU4OTJEMTZEMDJCQUYwMDlFNEZEMiAvKiBERkdNaW5pZmllZElELmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxMDE2QjNBOTY0
MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJGQzc3MDE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovOyB9OwpAQCAtMzY5
LDYgKzM2Nyw4IEBACiAJCTBGRDgyRTU2MTQxREFGMDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU1
MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwICovOyB9OwogCQkwRkQ4MkU1NzE0
MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JF
bnRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAx
NzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwICovOyB9OworCQkwRkQ4QTMxMzE3RDQzMjZDMDBD
QTJDNDAgLyogQ29kZUJsb2NrU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDhBMzExMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQu
Y3BwICovOyB9OworCQkwRkQ4QTMxNDE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMxMjE3
RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDQzkxNzNEQTUyMDAwN0IzQzFCIC8qIEZU
TEFiYnJldmlhdGVkVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGREIyQ0M3MTczREE1MUUwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZE
QjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDODE3M0RBNTFFMDA3QjND
MUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRkRCMkNFNzE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xp
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
QjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLzsgfTsKQEAgLTEzNTQs
OCArMTM1NCw2IEBACiAJCTBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5v
ZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWluaWZpZWRO
b2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdNaW5pZmllZE5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjJCREM0RTE1MjI4QkU3MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsdWVTb3VyY2Uu
Y3BwOyBwYXRoID0gZGZnL0RGR1ZhbHVlU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYyQkRDNTAxNTIyOEZGQTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyaWFibGVFdmVudC5j
cHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyog
REZHQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdDb2Rl
QmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkZDNzcwMTZFMTJGNkYw
MDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdEQ0VQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHRENFUGhhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZH
RENFUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRENFUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdEQ0VQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdV
c2VLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NTgsNiArMTU1Niw4
IEBACiAJCTBGRDgyRTUyMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFbnRyeS5jcHA7IHBhdGggPSBk
ZmcvREZHT1NSRW50cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU1
MzE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHT1NSRW50cnkuaDsgcGF0aCA9IGRmZy9ERkdPU1JFbnRyeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogU3Bl
Y3VsYXRlZFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Bl
Y3VsYXRlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMxMTE3
RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja1NldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrU2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGREIyQ0M3MTczREE1MUUwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRl
ZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFiYnJldmlhdGVkVHlwZXMuaDsgcGF0aCA9IGZ0
bC9GVExBYmJyZXZpYXRlZFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
REIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExWYWx1ZUZyb21CbG9jay5oOyBwYXRoID0gZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAv
KiBERkdXb3JrbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdXb3JrbGlzdC5jcHA7IHBhdGggPSBkZmcvREZHV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjcxNSw2ICsyNzE1LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJ
CTE0ODE2RTE5MTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgKi8sCiAJCQkJ
MTQ4MTZFMUExNTRDQzU2QzAwQjgwNTRDIC8qIEJsb2NrQWxsb2NhdG9yLmggKi8sCisJCQkJMEZE
OEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi8sCisJCQkJMEZEOEEz
MTIxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oICovLAogCQkJCTE0NkIxNERCMTJF
QjVCMTIwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIx
MkVCNTU5RDAwODNCMTJCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggKi8sCiAJCQkJQzJFQUQyRkIx
NEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRvci5oICovLApAQCAtMjcyOSw4ICsyNzMx
LDYgQEAKIAkJCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVz
LmggKi8sCiAJCQkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICov
LAogCQkJCTBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCi0JCQkJMEYy
QzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovLAotCQkJCTBGMkM1
NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8sCiAJCQkJQkNCRTJDQUQx
NEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oICovLAogCQkJCTBGMkI2NkE4MTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovLAogCQkJCTBGMkI2NkE5MTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLywKQEAgLTM4
OTEsNyArMzg5MSw2IEBACiAJCQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQwMTdBMEJCRkQw
MEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MjE3
QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYy
QzU1NkYxNDczOEYzMTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25L
ZXkuaCBpbiBIZWFkZXJzICovLApAQCAtMzk2NCw2ICszOTYzLDcgQEAKIAkJCQlBNzdBNDI0MzE3
QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRo
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcg
LyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMTQxN0Q0MzI2QzAw
Q0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZENDYxNUIz
NzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2
ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBE
RkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC00ODI1LDcgKzQ4MjUsNiBA
QAogCQkJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAvKiBE
RkdDbG9iYmVyaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjQxMTdBMEJCRkQwMEE4
REI4MSAvKiBERkdDbG9iYmVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGMkM1NTcwMTQ3
MzhGMzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RjBGMTlEMTZCNzJBMDgwMDVERjk1QiAvKiBERkdDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQTBBMzExNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYzOEIwMTcxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDk4Nyw2ICs0OTg2LDcgQEAKIAkJCQkxNDdGMzlENjEw
N0VDMzc2MDA0MjdBNDggLyogSlNDSlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQw
RkNFNDBBNTFFNDZCMDAwNUYwNjEgLyogSlNDbGFzc1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZEOEEzMTMxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNEJENUEzMDBBM0U5MUY2MDBCQUY1OUMgLyogSlNDb250ZXh0UmVmLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjAyOEI2MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NUZXN0
UnVubmVyVXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RUIxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU0OTQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MDQsNiArMTUwNCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRC
bG9ja1RhZywKICAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2
ZWxOb3RTZXQpCiAjZW5kaWYKIHsKKyAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwog
ICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRpbWl6
ZUFmdGVyV2FybVVwKCk7CiAgICAgaml0QWZ0ZXJXYXJtVXAoKTsKQEAgLTE1MTYsNiArMTUxNyw5
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAgICAgbV9y
YXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zd2l0Y2hK
dW1wVGFibGVzOwogICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMg
PSBvdGhlci5tX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgfQorICAg
IAorICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hlYXAtPnJlcG9y
dEV4dHJhTWVtb3J5Q29zdChzaXplb2YoQ29kZUJsb2NrKSk7CiB9CiAKIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQ
cm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQg
Zmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQpAQCAtMTU0NCw3ICsxNTQ4LDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0
ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKICNlbmRpZgogewotICAgIG1fdm0tPnN0YXJ0
ZWRDb21waWxpbmcodGhpcyk7CisgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJlZCgpKTsKIAog
ICAgIEFTU0VSVChtX3NvdXJjZSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpKTsKQEAgLTE4NDIsNyArMTg0Niw4IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgIGlmIChPcHRpb25zOjpkdW1wR2Vu
ZXJhdGVkQnl0ZWNvZGVzKCkpCiAgICAgICAgIGR1bXBCeXRlY29kZSgpOwotICAgIG1fdm0tPmZp
bmlzaGVkQ29tcGlsaW5nKHRoaXMpOworICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlz
KTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoQ29kZUJsb2NrKSAr
IG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpOwogfQogCiBDb2Rl
QmxvY2s6On5Db2RlQmxvY2soKQpAQCAtMTg1MCwxMiArMTg1NSw2IEBAIENvZGVCbG9jazo6fkNv
ZGVCbG9jaygpCiAgICAgaWYgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKICAgICAgICAg
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5ub3RpZnlEZXN0cnVjdGlvbih0aGlzKTsKICAg
ICAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAvLyBSZW1vdmUgbXlzZWxmIGZyb20gdGhlIHNl
dCBvZiBERkcgY29kZSBibG9ja3MuIE5vdGUgdGhhdCBJIG1heSBub3QgYmUgaW4gdGhpcyBzZXQK
LSAgICAvLyAoYmVjYXVzZSBJJ20gbm90IGEgREZHIGNvZGUgYmxvY2spLCBpbiB3aGljaCBjYXNl
IHRoaXMgaXMgYSBuby1vcCBhbnl3YXkuCi0gICAgbV92bS0+aGVhcC5tX2RmZ0NvZGVCbG9ja3Mu
bV9zZXQucmVtb3ZlKHRoaXMpOwotI2VuZGlmCi0gICAgCiAjaWYgRU5BQkxFKFZFUkJPU0VfVkFM
VUVfUFJPRklMRSkKICAgICBkdW1wVmFsdWVQcm9maWxlcygpOwogI2VuZGlmCkBAIC0xOTA1LDMz
ICsxOTA0LDI5IEBAIHZvaWQgRXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFYKIAog
dm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewot
I2lmIEVOQUJMRShQQVJBTExFTF9HQykgJiYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7Ci0gICAgICAgIERGRzo6Q29tbW9uRGF0
YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAgICAgCi0gICAgICAg
IC8vIEkgbWF5IGJlIGFza2VkIHRvIHNjYW4gbXlzZWxmIG1vcmUgdGhhbiBvbmNlLCBhbmQgaXQg
bWF5IGV2ZW4gaGFwcGVuIGNvbmN1cnJlbnRseS4KLSAgICAgICAgLy8gVG8gdGhpcyBlbmQsIHVz
ZSBhIENBUyBsb29wIHRvIGNoZWNrIGlmIEkndmUgYmVlbiBjYWxsZWQgYWxyZWFkeS4gT25seSBv
bmUgdGhyZWFkCi0gICAgICAgIC8vIG1heSBwcm9jZWVkIHBhc3QgdGhpcyBwb2ludCAtIHdoaWNo
ZXZlciBvbmUgd2lucyB0aGUgQ0FTIHJhY2UuCi0gICAgICAgIHVuc2lnbmVkIG9sZFZhbHVlOwot
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICBvbGRWYWx1ZSA9IGRmZ0NvbW1vbi0+dmlzaXRBZ2dy
ZWdhdGVIYXNCZWVuQ2FsbGVkOwotICAgICAgICAgICAgaWYgKG9sZFZhbHVlKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gTG9va3MgbGlrZSBzb21lb25lIGVsc2Ugd29uISBSZXR1cm4gaW1tZWRpYXRl
bHkgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QKLSAgICAgICAgICAgICAgICAvLyB0cmFjZSB0aGUg
c2FtZSBDb2RlQmxvY2sgY29uY3VycmVudGx5LiBEb2luZyBzbyBpcyBoYXphcmRvdXMgc2luY2Ug
d2Ugd2lsbAotICAgICAgICAgICAgICAgIC8vIGJlIG11dGF0aW5nIHRoZSBzdGF0ZSBvZiBWYWx1
ZVByb2ZpbGVzLCB3aGljaCBjb250YWluIEpTVmFsdWVzLCB3aGljaCBjYW4KLSAgICAgICAgICAg
ICAgICAvLyBoYXZlIHdvcmQtdGVhcmluZyBvbiAzMi1iaXQsIGxlYWRpbmcgdG8gYXdlc29tZSB0
aW1pbmctZGVwZW5kZW50IGNyYXNoZXMKLSAgICAgICAgICAgICAgICAvLyB0aGF0IGFyZSBuZWFy
bHkgaW1wb3NzaWJsZSB0byB0cmFjayBkb3duLgotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIC8vIEFsc28gbm90ZSB0aGF0IGl0IG11c3QgYmUgc2FmZSB0byByZXR1cm4gZWFybHkg
YXMgc29vbiBhcyB3ZSBzZWUgdGhlCi0gICAgICAgICAgICAgICAgLy8gdmFsdWUgdHJ1ZSAod2Vs
bCwgKHVuc2lnbmVkKTEpLCBzaW5jZSBvbmNlIGEgR0MgdGhyZWFkIGlzIGluIHRoaXMgbWV0aG9k
Ci0gICAgICAgICAgICAgICAgLy8gYW5kIGhhcyB3b24gdGhlIENBUyByYWNlIChpLmUuIHdhcyBy
ZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUgdmFsdWUgdHJ1ZSkKLSAgICAgICAgICAgICAgICAv
LyBpdCB3aWxsIGRlZmluaXRlbHkgY29tcGxldGUgdGhlIHJlc3Qgb2YgdGhpcyBtZXRob2QgYmVm
b3JlIGRlY2xhcmluZwotICAgICAgICAgICAgICAgIC8vIHRlcm1pbmF0aW9uLgotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoIVdURjo6d2Vh
a0NvbXBhcmVBbmRTd2FwKCZkZmdDb21tb24tPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZCwg
MCwgMSkpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoUEFSQUxMRUxfR0MpICYmIEVOQUJMRShE
RkdfSklUKQorI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICAvLyBJIG1heSBiZSBhc2tlZCB0
byBzY2FuIG15c2VsZiBtb3JlIHRoYW4gb25jZSwgYW5kIGl0IG1heSBldmVuIGhhcHBlbiBjb25j
dXJyZW50bHkuCisgICAgLy8gVG8gdGhpcyBlbmQsIHVzZSBhIENBUyBsb29wIHRvIGNoZWNrIGlm
IEkndmUgYmVlbiBjYWxsZWQgYWxyZWFkeS4gT25seSBvbmUgdGhyZWFkCisgICAgLy8gbWF5IHBy
b2NlZWQgcGFzdCB0aGlzIHBvaW50IC0gd2hpY2hldmVyIG9uZSB3aW5zIHRoZSBDQVMgcmFjZS4K
KyAgICB1bnNpZ25lZCBvbGRWYWx1ZTsKKyAgICBkbyB7CisgICAgICAgIG9sZFZhbHVlID0gbV92
aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQ7CisgICAgICAgIGlmIChvbGRWYWx1ZSkgeworICAg
ICAgICAgICAgLy8gTG9va3MgbGlrZSBzb21lb25lIGVsc2Ugd29uISBSZXR1cm4gaW1tZWRpYXRl
bHkgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIHRyYWNlIHRoZSBzYW1l
IENvZGVCbG9jayBjb25jdXJyZW50bHkuIERvaW5nIHNvIGlzIGhhemFyZG91cyBzaW5jZSB3ZSB3
aWxsCisgICAgICAgICAgICAvLyBiZSBtdXRhdGluZyB0aGUgc3RhdGUgb2YgVmFsdWVQcm9maWxl
cywgd2hpY2ggY29udGFpbiBKU1ZhbHVlcywgd2hpY2ggY2FuCisgICAgICAgICAgICAvLyBoYXZl
IHdvcmQtdGVhcmluZyBvbiAzMi1iaXQsIGxlYWRpbmcgdG8gYXdlc29tZSB0aW1pbmctZGVwZW5k
ZW50IGNyYXNoZXMKKyAgICAgICAgICAgIC8vIHRoYXQgYXJlIG5lYXJseSBpbXBvc3NpYmxlIHRv
IHRyYWNrIGRvd24uCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEFsc28gbm90ZSB0aGF0
IGl0IG11c3QgYmUgc2FmZSB0byByZXR1cm4gZWFybHkgYXMgc29vbiBhcyB3ZSBzZWUgdGhlCisg
ICAgICAgICAgICAvLyB2YWx1ZSB0cnVlICh3ZWxsLCAodW5zaWduZWQpMSksIHNpbmNlIG9uY2Ug
YSBHQyB0aHJlYWQgaXMgaW4gdGhpcyBtZXRob2QKKyAgICAgICAgICAgIC8vIGFuZCBoYXMgd29u
IHRoZSBDQVMgcmFjZSAoaS5lLiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIHZhbHVl
IHRydWUpCisgICAgICAgICAgICAvLyBpdCB3aWxsIGRlZmluaXRlbHkgY29tcGxldGUgdGhlIHJl
c3Qgb2YgdGhpcyBtZXRob2QgYmVmb3JlIGRlY2xhcmluZworICAgICAgICAgICAgLy8gdGVybWlu
YXRpb24uCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IHdoaWxlICghV1RG
Ojp3ZWFrQ29tcGFyZUFuZFN3YXAoJm1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkLCAwLCAx
KSk7CisjZW5kaWYgLy8gRU5BQkxFKFBBUkFMTEVMX0dDKQogICAgIAogICAgIGlmICghIW1fYWx0
ZXJuYXRpdmUpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwpAQCAtMjc0MCwyOCArMjczNSwxNCBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5jdGlvbkNv
ZGVCbG9jazo6CiAKIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbigpCiB7CisgICAgRGVmZXJHQyBk
ZWZlckdDKCptX2hlYXApOwogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0
VHlwZSgpKSk7CiAgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7CiAgICAgYWx0ZXJu
YXRpdmUoKS0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgIHRhbGx5RnJlcXVlbnRFeGl0U2l0
ZXMoKTsKICAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0
YUxvZygiSmV0dGlzb25pbmcgIiwgKnRoaXMsICIuXG4iKTsKLSAgICBqZXR0aXNvbkltcGwoKTsK
LX0KLQotdm9pZCBQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbkltcGwoKQotewotICAgIHN0YXRp
Y19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9w
dGltaXplZENvZGUoKnZtKCkpOwotfQotCi12b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29uSW1w
bCgpCi17Ci0gICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUo
KSktPmpldHRpc29uT3B0aW1pemVkQ29kZSgqdm0oKSk7Ci19Ci0KLXZvaWQgRnVuY3Rpb25Db2Rl
QmxvY2s6OmpldHRpc29uSW1wbCgpCi17Ci0gICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoKnZtKCks
IG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CisgICAg
YWx0ZXJuYXRpdmUoKS0+aW5zdGFsbCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsMTEgKzM2LDExIEBACiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAi
Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tI
YXNoLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJ
VExvY2suaCIKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIK
ICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgotI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3Mu
aCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAj
aW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKQEAgLTgzLDcgKzgzLDYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIERGR0NvZGVCbG9ja3M7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBSZXBhdGNoQnVmZmVyOwpAQCAtMjczLDE0ICsy
NzIsMTIgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgc2V0SklUQ29kZShQYXNzUmVmUHRyPEpJ
VENvZGU+IGNvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlV2l0aEFyaXR5Q2hlY2spCiAg
ICAgeworICAgICAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOworICAgICAgICBtX2hl
YXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjb2RlLT5zaXplKCkpOwogICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOyAvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgbG9jayB3aWxs
IGFsc28gZG8gc29tZXRoaW5nIHNpbWlsYXIsIGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQu
CiAgICAgICAgIG1faml0Q29kZSA9IGNvZGU7CiAgICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNo
ZWNrID0gY29kZVdpdGhBcml0eUNoZWNrOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICBp
ZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKEpJVENvZGU6OmppdFR5cGVGb3IobV9qaXRDb2Rl
KSkpCi0gICAgICAgICAgICBtX3ZtLT5oZWFwLm1fZGZnQ29kZUJsb2Nrcy5tX3NldC5hZGQodGhp
cyk7Ci0jZW5kaWYKICAgICB9CiAgICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBqaXRDb2RlKCkgeyBy
ZXR1cm4gbV9qaXRDb2RlOyB9CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGppdENvZGVXaXRo
QXJpdHlDaGVjaygpIHsgcmV0dXJuIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOyB9CkBAIC05NjEs
OSArOTU4LDYgQEAgcHVibGljOgogICAgIGJvb2wgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFy
a2VkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KICAgICAKIHByb3RlY3Rl
ZDoKLSNpZiBFTkFCTEUoSklUKQotICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKSA9IDA7
Ci0jZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRv
ciYpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOwogCkBAIC05
NzQsNyArOTY4LDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIERGR0NvZGVCbG9ja3M7CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKICAg
ICAKICAgICB2b2lkIG5vdGljZUluY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lKTsK
ICAgICAKQEAgLTEwMTcsMTcgKzEwMTEsMTYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkK
ICAgICB7Ci0gICAgICAgIC8vIE51bGwgbV9kZmdEYXRhIG1lYW5zIHRoYXQgdGhpcyBpcyBhIGJh
c2VsaW5lIEpJVCBDb2RlQmxvY2suIEJhc2VsaW5lIEpJVAotICAgICAgICAvLyBDb2RlQmxvY2tz
IGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuIHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBn
bwotICAgICAgICAvLyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cyBz
Y2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQKLSAgICAgICAgLy8gdGhpcyBtZWFucyB0aGF0IGl0
J3MgbGl2ZS4KKyAgICAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxv
Y2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCisgICAgICAgIC8vIHRoZWlyIHdl
YWsgcmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0
cworICAgICAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0
IGl0J3MgbGl2ZS4KICAgICAgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIC8vIEZvciBzaW1wbGlj
aXR5LCB3ZSBkb24ndCBhdHRlbXB0IHRvIGpldHRpc29uIGNvZGUgYmxvY2tzIGR1cmluZyBHQyBp
ZgogICAgICAgICAvLyB0aGV5IGFyZSBleGVjdXRpbmcuIEluc3RlYWQgd2Ugc3Ryb25nbHkgbWFy
ayB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgdG8KICAgICAgICAgLy8gYWxsb3cgdGhlbSB0byBjb250
aW51ZSB0byBleGVjdXRlIHNvdW5kbHkuCi0gICAgICAgIGlmIChtX2ppdENvZGUtPmRmZ0NvbW1v
bigpLT5tYXlCZUV4ZWN1dGluZykKKyAgICAgICAgaWYgKG1fbWF5QmVFeGVjdXRpbmcpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBpZiAoT3B0aW9uczo6Zm9yY2VERkdDb2Rl
QmxvY2tMaXZlbmVzcygpKQpAQCAtMTA2Nyw2ICsxMDYwLDggQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgbV9pc1N0cmljdE1vZGU7CiAgICAgYm9vbCBtX25lZWRzQWN0aXZhdGlvbjsKKyAgICBib29s
IG1fbWF5QmVFeGVjdXRpbmc7CisgICAgdWludDhfdCBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNh
bGxlZDsKIAogICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gbV9zb3VyY2U7CiAgICAgdW5zaWdu
ZWQgbV9zb3VyY2VPZmZzZXQ7CkBAIC0xMTg2LDcgKzExODEsNiBAQCBwdWJsaWM6CiAKICNpZiBF
TkFCTEUoSklUKQogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKTsK
ICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICB2aXJ0dWFsIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7CiAjZW5kaWYKQEAgLTEy
MDksNyArMTIwMyw2IEBAIHB1YmxpYzoKICAgICAKICNpZiBFTkFCTEUoSklUKQogcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKTsKICAgICB2aXJ0dWFsIENvZGVCbG9j
ayogcmVwbGFjZW1lbnQoKTsKICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFi
aWxpdHlMZXZlbEludGVybmFsKCk7CiAjZW5kaWYKQEAgLTEyMzIsNyArMTIyNSw2IEBAIHB1Ymxp
YzoKICAgICAKICNpZiBFTkFCTEUoSklUKQogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBq
ZXR0aXNvbkltcGwoKTsKICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAg
ICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7
CiAjZW5kaWYKQEAgLTEyOTEsOCArMTI4Myw3IEBAIGlubGluZSBKU1ZhbHVlIEV4ZWNTdGF0ZTo6
YXJndW1lbnRBZnRlckMKICAgICByZXR1cm4gdGhpc1tjb2RlQmxvY2soKS0+YXJndW1lbnRJbmRl
eEFmdGVyQ2FwdHVyZShhcmd1bWVudCldLmpzVmFsdWUoKTsKIH0KIAotI2lmIEVOQUJMRShERkdf
SklUKQotaW5saW5lIHZvaWQgREZHQ29kZUJsb2Nrczo6bWFyayh2b2lkKiBjYW5kaWRhdGVDb2Rl
QmxvY2spCitpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsodm9pZCogY2FuZGlkYXRlQ29k
ZUJsb2NrKQogewogICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIDAgYW5kIC0xIGJlY2F1c2Ug
dGhvc2UgYXJlIHVzZWQgYnkgdGhlIEhhc2hNYXAgYXMgbWFya2Vycy4KICAgICB1aW50cHRyX3Qg
dmFsdWUgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2FuZGlkYXRlQ29kZUJsb2NrKTsK
QEAgLTEzMDcsOSArMTI5OCw4IEBAIGlubGluZSB2b2lkIERGR0NvZGVCbG9ja3M6Om1hcmsodm9p
ZCogY2EKICAgICBpZiAoaXRlciA9PSBtX3NldC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgICgqaXRlciktPm1faml0Q29kZS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nID0g
dHJ1ZTsKKyAgICAoKml0ZXIpLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKIH0KLSNlbmRpZgog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMSArNjYsNyBAQCBz
dHJ1Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24gewogY2xhc3MgQ29tbW9uRGF0YSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6Ci0gICAgQ29tbW9uRGF0
YSgpCi0gICAgICAgIDogbWF5QmVFeGVjdXRpbmcoZmFsc2UpCi0gICAgICAgICwgaXNKZXR0aXNv
bmVkKGZhbHNlKQotICAgIHsKLSAgICB9CisgICAgQ29tbW9uRGF0YSgpIHsgfQogICAgIAogICAg
IHZvaWQgbm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihQbGFuJiwgQ29kZUJsb2Nr
KiwgTm9kZSopOwogICAgIApAQCAtODEsMTEgKzc3LDggQEAgcHVibGljOgogICAgIFZlY3RvcjxX
cml0ZUJhcnJpZXI8SlNDZWxsPiA+IHdlYWtSZWZlcmVuY2VzOwogICAgIAogICAgIFJlZlB0cjxQ
cm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwotICAgIGJvb2wgbWF5QmVFeGVjdXRp
bmc7Ci0gICAgYm9vbCBpc0pldHRpc29uZWQ7CiAgICAgYm9vbCBsaXZlbmVzc0hhc0JlZW5Qcm92
ZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgogICAgIGJvb2wgYWxsVHJh
bnNpdGlvbnNIYXZlQmVlbk1hcmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkg
R0MuCi0gICAgdW5zaWduZWQgdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOyAvLyBVbnNpZ25l
ZCB0byBtYWtlIGl0IHdvcmsgc2VhbWxlc3NseSB3aXRoIHRoZSBicm9hZGVzdCBzZXQgb2YgQ0FT
IGltcGxlbWVudGF0aW9ucy4KIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
a1NldC5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3Iu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0NvZGVCbG9ja1NldDo6Q29kZUJsb2NrU2V0KCkgeyB9
CisKK0NvZGVCbG9ja1NldDo6fkNvZGVCbG9ja1NldCgpCit7CisgICAgSGFzaFNldDxDb2RlQmxv
Y2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgSGFzaFNldDxDb2RlQmxv
Y2sqPjo6aXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPmRlcmVmKCk7Cit9CisKK3ZvaWQgQ29kZUJsb2Nr
U2V0OjphZGQoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykKK3sKKyAgICBib29sIGlz
TmV3RW50cnkgPSBtX3NldC5hZGQoY29kZUJsb2NrLmxlYWtSZWYoKSkuaXNOZXdFbnRyeTsKKyAg
ICBBU1NFUlQoaXNOZXdFbnRyeSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0OjpjbGVhck1hcmtz
KCkKK3sKKyAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVn
aW4oKTsKKyAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBlbmQgPSBtX3NldC5lbmQo
KTsKKyAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9ICppdGVyOworICAgICAgICBjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcg
PSBmYWxzZTsKKyAgICAgICAgY29kZUJsb2NrLT5tX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxl
ZCA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBDb2RlQmxvY2tTZXQ6OmRlbGV0ZVVubWFya2Vk
QW5kVW5yZWZlcmVuY2VkKCkKK3sKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGEgZml4cG9pbnQg
YmVjYXVzZSBjb2RlIGJsb2NrcyB0aGF0IGFyZSB1bm1hcmtlZCBtYXkKKyAgICAvLyByZWZlciB0
byBlYWNoIG90aGVyLiBGb3IgZXhhbXBsZSwgYSBERkcgY29kZSBibG9jayB0aGF0IGlzIG93bmVk
IGJ5CisgICAgLy8gdGhlIEdDIG1heSByZWZlciB0byBhbiBGVEwgZm9yLWVudHJ5IGNvZGUgYmxv
Y2sgdGhhdCBpcyBhbHNvIG93bmVkIGJ5CisgICAgLy8gdGhlIEdDLgorICAgIFZlY3RvcjxDb2Rl
QmxvY2sqLCAxNj4gdG9SZW1vdmU7CisgICAgZm9yICg7OykgeworICAgICAgICBIYXNoU2V0PENv
ZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsKKyAgICAgICAgSGFzaFNl
dDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7CisgICAgICAgIGZvciAo
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9ICppdGVyOworICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2stPmhhc09uZVJlZigpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+bV9tYXlC
ZUV4ZWN1dGluZykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRvUmVt
b3ZlLmFwcGVuZChjb2RlQmxvY2spOworICAgICAgICB9CisgICAgICAgIGlmICh0b1JlbW92ZS5p
c0VtcHR5KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
dG9SZW1vdmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IHRvUmVtb3ZlW2ldOworICAgICAgICAgICAgbV9zZXQucmVtb3ZlKGNvZGVCbG9jayk7Cisg
ICAgICAgICAgICBjb2RlQmxvY2stPmRlcmVmKCk7CisgICAgICAgIH0KKyAgICAgICAgdG9SZW1v
dmUucmVzaXplKDApOworICAgIH0KK30KKwordm9pZCBDb2RlQmxvY2tTZXQ6OnRyYWNlTWFya2Vk
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJh
dG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gKml0ZXI7CisgICAgICAgIGlmICghY29k
ZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGNvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CisgICAgfQorfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2Nr
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2Nr
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxv
Y2tTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ29kZUJsb2NrU2V0X2gKKyNk
ZWZpbmUgQ29kZUJsb2NrU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7
CitjbGFzcyBTbG90VmlzaXRvcjsKKworLy8gQ29kZUJsb2NrU2V0IHRyYWNrcyBhbGwgQ29kZUJs
b2Nrcy4gRXZlcnkgQ29kZUJsb2NrIHN0YXJ0cyBvdXQgd2l0aCBvbmUKKy8vIHJlZmVyZW5jZSBj
b21pbmcgaW4gZnJvbSBHQy4gVGhlIEdDIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIENvZGVC
bG9ja3MKKy8vIG9uY2UgdGhleSBoYXNPbmVSZWYoKSBhbmQgbm9ib2R5IGlzIHJ1bm5pbmcgY29k
ZSBmcm9tIHRoYXQgQ29kZUJsb2NrLgorCitjbGFzcyBDb2RlQmxvY2tTZXQgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvZGVCbG9ja1NldCk7CisKK3B1YmxpYzoKKyAgICBDb2RlQmxvY2tT
ZXQoKTsKKyAgICB+Q29kZUJsb2NrU2V0KCk7CisgICAgCisgICAgLy8gQWRkIGEgQ29kZUJsb2Nr
LiBUaGlzIGlzIG9ubHkgY2FsbGVkIGJ5IENvZGVCbG9jayBjb25zdHJ1Y3RvcnMuCisgICAgdm9p
ZCBhZGQoUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKKyAgICAKKyAgICAvLyBDbGVhciBhbGwgbWFy
ayBiaXRzIGFzc29jaWF0ZWQgd2l0aCBERkcgY29kZSBibG9ja3MuCisgICAgdm9pZCBjbGVhck1h
cmtzKCk7CisgICAgCisgICAgLy8gTWFyayBhIHBvaW50ZXIgdGhhdCBtYXkgYmUgYSBDb2RlQmxv
Y2sgdGhhdCBiZWxvbmdzIHRvIHRoZSBzZXQgb2YgREZHCisgICAgLy8gYmxvY2tzLiBUaGlzIGlz
IGRlZmluZWQgaW4gQ29kZUJsb2NrLmguCisgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUNv
ZGVCbG9jayk7CisgICAgCisgICAgLy8gRGVsZXRlIGFsbCBjb2RlIGJsb2NrcyB0aGF0IGFyZSBv
bmx5IHJlZmVyZW5jZWQgYnkgdGhpcyBzZXQgKGkuZS4gb3duZWQKKyAgICAvLyBieSB0aGlzIHNl
dCksIGFuZCB0aGF0IGhhdmUgbm90IGJlZW4gbWFya2VkLgorICAgIHZvaWQgZGVsZXRlVW5tYXJr
ZWRBbmRVbnJlZmVyZW5jZWQoKTsKKyAgICAKKyAgICAvLyBUcmFjZSBhbGwgbWFya2VkIGNvZGUg
YmxvY2tzLiBUaGUgQ29kZUJsb2NrIGlzIGZyZWUgdG8gbWFrZSB1c2Ugb2YKKyAgICAvLyBtYXlC
ZUV4ZWN1dGluZy4KKyAgICB2b2lkIHRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJik7CisKK3ByaXZh
dGU6CisgICAgLy8gVGhpcyBpcyBub3QgYSBzZXQgb2YgUmVmUHRyPENvZGVCbG9jaz4gYmVjYXVz
ZSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZmluZAorICAgIC8vIGFyYml0cmFyeSBib2d1cyBwb2lu
dGVycy4gSSBjb3VsZCBoYXZlIHdyaXR0ZW4gYSB0aGluZ3kgdGhhdCBoYWQgcGVlayB0eXBlcwor
ICAgIC8vIGFuZCBhbGwsIGJ1dCB0aGF0IHNlZW1lZCBsaWtlIG92ZXJraWxsLgorICAgIEhhc2hT
ZXQ8Q29kZUJsb2NrKiA+IG1fc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBDb2RlQmxvY2tTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiAxNTQ5NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDkgKzI3LDkgQEAKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAi
Q29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKLSNpbmNsdWRl
ICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKQEAgLTE0MCwxMCArMTQwLDkgQEAgcHJpdmF0
ZToKIH07CiAKIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCgKLSAgICB2b2lkKiBiZWdpbiwg
dm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBERkdDb2RlQmxv
Y2tzJiBkZmdDb2RlQmxvY2tzKQorICAgIHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJS
b3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsK
LSAgICBDb21wb3NpdGVNYXJrSG9vazxKSVRTdHViUm91dGluZVNldCwgREZHQ29kZUJsb2Nrcz4g
bWFya0hvb2soCi0gICAgICAgIGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAg
Q29tcG9zaXRlTWFya0hvb2s8SklUU3R1YlJvdXRpbmVTZXQsIENvZGVCbG9ja1NldD4gbWFya0hv
b2soaml0U3R1YlJvdXRpbmVzLCBjb2RlQmxvY2tzKTsKICAgICBnZW5lcmljQWRkU3BhbihiZWdp
biwgZW5kLCBtYXJrSG9vayk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvbnNlcnZhdGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgREZHQ29kZUJsb2NrczsK
K2NsYXNzIENvZGVCbG9ja1NldDsKIGNsYXNzIEhlYXA7CiBjbGFzcyBKSVRTdHViUm91dGluZVNl
dDsKIGNsYXNzIEpTQ2VsbDsKQEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBh
ZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCk7CiAgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZv
aWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmKTsKLSAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwg
dm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYsIERGR0NvZGVCbG9ja3MmKTsKKyAgICB2b2lk
IGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYsIENvZGVCbG9j
a1NldCYpOwogICAgIAogICAgIHNpemVfdCBzaXplKCk7CiAgICAgSlNDZWxsKiogcm9vdHMoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuY3BwCShy
ZXZpc2lvbiAxNTQ5NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxv
Y2tzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiREZHQ29kZUJsb2Nrcy5oIgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVk
ZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBK
U0MgewotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0KLURGR0NvZGVCbG9ja3M6OkRGR0NvZGVCbG9j
a3MoKSB7IH0KLQotREZHQ29kZUJsb2Nrczo6fkRGR0NvZGVCbG9ja3MoKQotewotICAgIFZlY3Rv
cjxSZWZQdHI8Q29kZUJsb2NrPiwgMTY+IHRvUmVtb3ZlOwotICAgIAotICAgIGZvciAoSGFzaFNl
dDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9z
ZXQuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVyKS0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+aXNKZXR0aXNvbmVkKQotICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGFkb3B0
UmVmKCppdGVyKSk7Ci0gICAgfQotfQotCi12b2lkIERGR0NvZGVCbG9ja3M6OmpldHRpc29uKFBh
c3NSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2tQdHIpCi17Ci0gICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBkZWxldGUgaXQgbm93OyB3ZSBqdXN0IHdhbnQgaXRzIHBvaW50ZXIuCi0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjb2RlQmxvY2tQdHIubGVha1JlZigpOwotICAgIAotICAgIEFTU0VS
VChjb2RlQmxvY2spOwotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJs
b2NrLT5qaXRUeXBlKCkpKTsKLSAgICAKLSAgICAvLyBJdCBzaG91bGQgbm90IGhhdmUgYWxyZWFk
eSBiZWVuIGpldHRpc29uZWQuCi0gICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZn
Q29tbW9uKCktPmlzSmV0dGlzb25lZCk7Ci0KLSAgICAvLyBXZSBzaG91bGQgaGF2ZSB0aGlzIGJs
b2NrIGFscmVhZHkuCi0gICAgQVNTRVJUKG1fc2V0LmZpbmQoY29kZUJsb2NrKSAhPSBtX3NldC5l
bmQoKSk7Ci0gICAgCi0gICAgY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc0pl
dHRpc29uZWQgPSB0cnVlOwotfQotCi12b2lkIERGR0NvZGVCbG9ja3M6OmNsZWFyTWFya3MoKQot
ewotICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJl
Z2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRlcikgewotICAgICAgICAoKml0ZXIpLT5q
aXRDb2RlKCktPmRmZ0NvbW1vbigpLT5tYXlCZUV4ZWN1dGluZyA9IGZhbHNlOwotICAgICAgICAo
Kml0ZXIpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT52aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxs
ZWQgPSBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgREZHQ29kZUJsb2Nrczo6ZGVsZXRlVW5tYXJr
ZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpCi17Ci0gICAgVmVjdG9yPFJlZlB0cjxDb2RlQmxvY2s+
LCAxNj4gdG9SZW1vdmU7Ci0gICAgCi0gICAgZm9yIChIYXNoU2V0PENvZGVCbG9jayo+OjppdGVy
YXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsgaXRlciAhPSBtX3NldC5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgIGlmICgoKml0ZXIpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc0pldHRpc29u
ZWQgJiYgISgqaXRlciktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nKQot
ICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGFkb3B0UmVmKCppdGVyKSk7Ci0gICAgfQotfQot
Ci12b2lkIERGR0NvZGVCbG9ja3M6OnRyYWNlTWFya2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYg
dmlzaXRvcikKLXsKLSAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3NldC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAg
aWYgKCgqaXRlciktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nKQotICAg
ICAgICAgICAgKCppdGVyKS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0gICAgfQotfQotCi0j
ZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKLQotdm9pZCBERkdDb2RlQmxvY2tzOjpqZXR0aXNvbihQ
YXNzUmVmUHRyPENvZGVCbG9jaz4pCi17Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvREZHQ29kZUJsb2Nrcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0RGR0NvZGVCbG9ja3MuaAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBERkdDb2RlQmxvY2tzX2gKLSNkZWZpbmUgREZHQ29kZUJsb2Nrc19oCi0KLSNpbmNsdWRlIDx3
dGYvRmFzdEFsbG9jQmFzZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVCbG9jazsK
LWNsYXNzIFNsb3RWaXNpdG9yOwotCi0vLyBERkdDb2RlQmxvY2tzIG5vdGlmaWVzIHRoZSBnYXJi
YWdlIGNvbGxlY3RvciBhYm91dCBvcHRpbWl6ZWQgY29kZSBibG9ja3MgdGhhdAotLy8gaGF2ZSBk
aWZmZXJlbnQgbWFya2luZyBiZWhhdmlvciBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgdGhl
eSBhcmUgb24gdGhlCi0vLyBzdGFjaywgYW5kIHRoYXQgbWF5IGJlIGpldHRpc29uZWQuIEpldHRp
c29uaW5nIGlzIHRoZSBwcm9jZXNzIG9mIGRpc2NhcmRpbmcKLS8vIGEgY29kZSBibG9jayBhZnRl
ciBhbGwgY2FsbHMgdG8gaXQgaGF2ZSBiZWVuIHVubGlua2VkLiBUaGlzIGNsYXNzIHRha2VzIHNw
ZWNpYWwKLS8vIGNhcmUgdG8gZW5zdXJlIHRoYXQgaWYgdGhlcmUgYXJlIHN0aWxsIGNhbGwgZnJh
bWVzIHRoYXQgYXJlIHVzaW5nIHRoZSBjb2RlCi0vLyBibG9jaywgdGhlbiBpdCBzaG91bGQgbm90
IGJlIGltbWVkaWF0ZWx5IGRlbGV0ZWQsIGJ1dCByYXRoZXIsIGl0IHNob3VsZCBiZQotLy8gZGVs
ZXRlZCBvbmNlIHdlIGtub3cgdGhhdCB0aGVyZSBhcmUgbm8gbG9uZ2VyIGFueSByZWZlcmVuY2Vz
IHRvIGl0IGZyb20gYW55Ci0vLyBjYWxsIGZyYW1lcy4gVGhpcyBjbGFzcyB0YWtlcyBpdHMgbmFt
ZSBmcm9tIHRoZSBERkcgY29tcGlsZXI7IG9ubHkgY29kZSBibG9ja3MKLS8vIGNvbXBpbGVkIGJ5
IHRoZSBERkcgbmVlZCBzcGVjaWFsIG1hcmtpbmcgYmVoYXZpb3IgaWYgdGhleSBhcmUgb24gdGhl
IHN0YWNrLCBhbmQKLS8vIG9ubHkgdGhvc2UgY29kZSBibG9ja3MgbWF5IGJlIGpldHRpc29uZWQu
Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLWNsYXNzIERGR0NvZGVCbG9ja3MgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgREZHQ29kZUJsb2NrcygpOwotICAg
IH5ERkdDb2RlQmxvY2tzKCk7Ci0gICAgCi0gICAgLy8gSW5mb3JtIHRoZSBjb2xsZWN0b3IgdGhh
dCBhIGNvZGUgYmxvY2sgaGFzIGJlZW4gamV0dGlzb25lZCBmb3JtIGl0cwotICAgIC8vIGV4ZWN1
dGFibGUgYW5kIHNob3VsZCBvbmx5IGJlIGtlcHQgYWxpdmUgaWYgdGhlcmUgYXJlIGNhbGwgZnJh
bWVzIHRoYXQgdXNlCi0gICAgLy8gaXQuIFRoaXMgaXMgdHlwaWNhbGx5IGNhbGxlZCBlaXRoZXIg
ZnJvbSBhIHJlY29tcGlsYXRpb24gdHJpZ2dlciwgb3IgZnJvbQotICAgIC8vIGFuIHVuY29uZGl0
aW9uYWwgZmluYWxpemVyIGFzc29jaWF0ZWQgd2l0aCBhIENvZGVCbG9jayB0aGF0IGhhZCB3ZWFr
Ci0gICAgLy8gcmVmZXJlbmNlcywgd2hlcmUgc29tZSBzdWJzZXQgb2YgdGhvc2UgcmVmZXJlbmNl
cyB3ZXJlIGRlYWQuCi0gICAgdm9pZCBqZXR0aXNvbihQYXNzUmVmUHRyPENvZGVCbG9jaz4pOwot
ICAgIAotICAgIC8vIENsZWFyIGFsbCBtYXJrIGJpdHMgYXNzb2NpYXRlZCB3aXRoIERGRyBjb2Rl
IGJsb2Nrcy4KLSAgICB2b2lkIGNsZWFyTWFya3MoKTsKLSAgICAKLSAgICAvLyBNYXJrIGEgcG9p
bnRlciB0aGF0IG1heSBiZSBhIENvZGVCbG9jayB0aGF0IGJlbG9uZ3MgdG8gdGhlIHNldCBvZiBE
RkcgY29kZQotICAgIC8vIGJsb2Nrcy4gVGhpcyBpcyBkZWZpbmVkIGlubGluZSBpbiBDb2RlQmxv
Y2suaAotICAgIHZvaWQgbWFyayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spOwotICAgIAotICAg
IC8vIERlbGV0ZSBhbGwgamV0dGlzb25lZCBjb2RlIGJsb2NrcyB0aGF0IGhhdmUgbm90IGJlZW4g
bWFya2VkIChpLmUuIGFyZSBub3QgcmVmZXJlbmNlZAotICAgIC8vIGZyb20gY2FsbCBmcmFtZXMp
LgotICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOwotICAgIAot
ICAgIC8vIFRyYWNlIGFsbCBtYXJrZWQgY29kZSBibG9ja3MgKGkuZS4gYXJlIHJlZmVyZW5jZWQg
ZnJvbSBjYWxsIGZyYW1lcykuIFRoZSBDb2RlQmxvY2sKLSAgICAvLyBpcyBmcmVlIHRvIG1ha2Ug
dXNlIG9mIG1fZGZnRGF0YS0+aXNNYXJrZWQgYW5kIG1fZGZnRGF0YS0+aXNKZXR0aXNvbmVkLgot
ICAgIHZvaWQgdHJhY2VNYXJrZWRDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7Ci0KLXByaXZhdGU6
Ci0gICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKLSAgICAKLSAgICBIYXNoU2V0PENvZGVCbG9j
ayo+IG1fc2V0OwotfTsKLSNlbHNlCi1jbGFzcyBERkdDb2RlQmxvY2tzIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLQotcHVibGljOgotICAgIHZvaWQgamV0dGlzb24oUGFzc1JlZlB0
cjxDb2RlQmxvY2s+KTsKLSAgICB2b2lkIGNsZWFyTWFya3MoKSB7IH0KLSAgICB2b2lkIG1hcmso
dm9pZCopIHsgfQotICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2Nrcygp
IHsgfQotICAgIHZvaWQgdHJhY2VNYXJrZWRDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJikgeyB9Ci19
OwotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxNTQ5NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDExICszNTQsNiBA
QCBib29sIEhlYXA6OnVucHJvdGVjdChKU1ZhbHVlIGspCiAgICAgcmV0dXJuIG1fcHJvdGVjdGVk
VmFsdWVzLnJlbW92ZShrLmFzQ2VsbCgpKTsKIH0KIAotdm9pZCBIZWFwOjpqZXR0aXNvbkRGR0Nv
ZGVCbG9jayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrKQotewotICAgIG1fZGZnQ29k
ZUJsb2Nrcy5qZXR0aXNvbihjb2RlQmxvY2spOwotfQotCiB2b2lkIEhlYXA6OmFkZFJlZmVyZW5j
ZShKU0NlbGwqIGNlbGwsIEFycmF5QnVmZmVyKiBidWZmZXIpCiB7CiAgICAgaWYgKG1fYXJyYXlC
dWZmZXJzLmFkZFJlZmVyZW5jZShjZWxsLCBidWZmZXIpKSB7CkBAIC00NTcsMTEgKzQ1MiwxMCBA
QCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgfQogCiAgICAgQ29uc2VydmF0aXZlUm9vdHMg
c3RhY2tSb290cygmbV9vYmplY3RTcGFjZS5ibG9ja3MoKSwgJm1fc3RvcmFnZVNwYWNlKTsKLSAg
ICBtX2RmZ0NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOworICAgIG1fY29kZUJsb2Nrcy5jbGVhck1h
cmtzKCk7CiAgICAgewogICAgICAgICBHQ1BIQVNFKEdhdGhlclN0YWNrUm9vdHMpOwotICAgICAg
ICBzdGFjaygpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKAotICAgICAgICAgICAgc3RhY2tSb290
cywgbV9qaXRTdHViUm91dGluZXMsIG1fZGZnQ29kZUJsb2Nrcyk7CisgICAgICAgIHN0YWNrKCku
Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoc3RhY2tSb290cywgbV9qaXRTdHViUm91dGluZXMsIG1f
Y29kZUJsb2Nrcyk7CiAgICAgfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC00ODUsMTIgKzQ3
OSw2IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICB7CiAgICAgICAgIFBhcmFsbGVsTW9k
ZUVuYWJsZXIgZW5hYmxlcih2aXNpdG9yKTsKIAotICAgICAgICBpZiAobV92bS0+Y29kZUJsb2Nr
c0JlaW5nQ29tcGlsZWQuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBHQ1BIQVNFKFZpc2l0QWN0aXZl
Q29kZUJsb2NrKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92bS0+Y29k
ZUJsb2Nrc0JlaW5nQ29tcGlsZWQuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAgbV92bS0+
Y29kZUJsb2Nrc0JlaW5nQ29tcGlsZWRbaV0tPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwotICAg
ICAgICB9Ci0KICAgICAgICAgbV92bS0+c21hbGxTdHJpbmdzLnZpc2l0U3Ryb25nUmVmZXJlbmNl
cyh2aXNpdG9yKTsKIAogICAgICAgICB7CkBAIC01NTgsNyArNTQ2LDcgQEAgdm9pZCBIZWFwOjpt
YXJrUm9vdHMoKQogICAgICAgICB7CiAgICAgICAgICAgICBHQ1BIQVNFKFRyYWNlQ29kZUJsb2Nr
c0FuZEpJVFN0dWJSb3V0aW5lcyk7CiAgICAgICAgICAgICBNQVJLX0xPR19ST09UKHZpc2l0b3Is
ICJUcmFjZSBDb2RlIEJsb2NrcyBhbmQgSklUIFN0dWIgUm91dGluZXMiKTsKLSAgICAgICAgICAg
IG1fZGZnQ29kZUJsb2Nrcy50cmFjZU1hcmtlZENvZGVCbG9ja3ModmlzaXRvcik7CisgICAgICAg
ICAgICBtX2NvZGVCbG9ja3MudHJhY2VNYXJrZWQodmlzaXRvcik7CiAgICAgICAgICAgICBtX2pp
dFN0dWJSb3V0aW5lcy50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyh2aXNpdG9yKTsKICAgICAgICAg
ICAgIHZpc2l0b3IuZG9uYXRlQW5kRHJhaW4oKTsKICAgICAgICAgfQpAQCAtNjgzLDggKzY3MSw4
IEBAIHZvaWQgSGVhcDo6ZGVsZXRlQWxsQ29tcGlsZWRDb2RlKCkKICAgICAgICAgc3RhdGljX2Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY3VycmVudCktPmNsZWFyQ29kZUlmTm90Q29tcGlsaW5n
KCk7CiAgICAgfQogCi0gICAgbV9kZmdDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKLSAgICBtX2Rm
Z0NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAgIG1f
Y29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CisgICAgbV9jb2RlQmxvY2tzLmRlbGV0ZVVubWFya2Vk
QW5kVW5yZWZlcmVuY2VkKCk7CiB9CiAKIHZvaWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21waWxl
ZENvZGUoKQpAQCAtNzAxLDcgKzY4OSw3IEBAIHZvaWQgSGVhcDo6ZGVsZXRlVW5tYXJrZWRDb21w
aWxlZENvZGUoKQogICAgICAgICBtX2NvbXBpbGVkQ29kZS5yZW1vdmUoY3VycmVudCk7CiAgICAg
fQogCi0gICAgbV9kZmdDb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9j
a3MoKTsKKyAgICBtX2NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoKTsK
ICAgICBtX2ppdFN0dWJSb3V0aW5lcy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRTdHViUm91dGlu
ZXMoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTU0
OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw4ICsyNCw4IEBACiAKICNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUg
IkJsb2NrQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAi
Q29weVZpc2l0b3IuaCIKLSNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKICNpbmNsdWRlICJHQ1RocmVhZFNoYXJlZERhdGEuaCIK
ICNpbmNsdWRlICJIYW5kbGVTZXQuaCIKQEAgLTE0NCw4ICsxNDQsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwcm90ZWN0KEpTVmFsdWUpOwogICAg
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHVucHJvdGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3
aGVuIHRoZSBwcm90ZWN0IGNvdW50IGRyb3BzIHRvIDAuCiAgICAgICAgIAotICAgICAgICB2b2lk
IGpldHRpc29uREZHQ29kZUJsb2NrKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7Ci0KICAgICAgICAg
c2l6ZV90IGV4dHJhU2l6ZSgpOyAvLyBleHRyYSBtZW1vcnkgdXNhZ2Ugb3V0c2lkZSBvZiBwYWdl
cyBhbGxvY2F0ZWQgYnkgdGhlIGhlYXAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90
IHNpemUoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGNhcGFjaXR5KCk7CkBA
IC0yNzMsNyArMjcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgSGFuZGxlU2V0IG1f
aGFuZGxlU2V0OwogICAgICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwotICAgICAgICBE
RkdDb2RlQmxvY2tzIG1fZGZnQ29kZUJsb2NrczsKKyAgICAgICAgQ29kZUJsb2NrU2V0IG1fY29k
ZUJsb2NrczsKICAgICAgICAgSklUU3R1YlJvdXRpbmVTZXQgbV9qaXRTdHViUm91dGluZXM7CiAg
ICAgICAgIEZpbmFsaXplck93bmVyIG1fZmluYWxpemVyT3duZXI7CiAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAkocmV2aXNp
b24gMTU0OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw5ICs5Niw5IEBAIHZvaWQgSlNTdGFjazo6Z2F0aGVy
Q29uc2VydmF0aXZlUm9vdHMoQ28KICAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwg
Z2V0VG9wT2ZTdGFjaygpKTsKIH0KIAotdm9pZCBKU1N0YWNrOjpnYXRoZXJDb25zZXJ2YXRpdmVS
b290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0aW5l
U2V0JiBqaXRTdHViUm91dGluZXMsIERGR0NvZGVCbG9ja3MmIGRmZ0NvZGVCbG9ja3MpCit2b2lk
IEpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25z
ZXJ2YXRpdmVSb290cywgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgQ29kZUJs
b2NrU2V0JiBjb2RlQmxvY2tzKQogewotICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigp
LCBnZXRUb3BPZlN0YWNrKCksIGppdFN0dWJSb3V0aW5lcywgZGZnQ29kZUJsb2Nrcyk7CisgICAg
Y29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGdldFRvcE9mU3RhY2soKSwgaml0U3R1YlJv
dXRpbmVzLCBjb2RlQmxvY2tzKTsKIH0KIAogdm9pZCBKU1N0YWNrOjpyZWxlYXNlRXhjZXNzQ2Fw
YWNpdHkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFj
ay5oCShyZXZpc2lvbiAxNTQ5NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvSlNTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCisgICAgY2xhc3MgQ29kZUJsb2NrU2V0OwogICAgIGNsYXNzIENvbnNlcnZhdGl2
ZVJvb3RzOwotICAgIGNsYXNzIERGR0NvZGVCbG9ja3M7CiAgICAgY2xhc3MgRXhlY1N0YXRlOwog
ICAgIGNsYXNzIEpJVFN0dWJSb3V0aW5lU2V0OwogICAgIGNsYXNzIFZNOwpAQCAtNzEsNyArNzEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfkpTU3RhY2soKTsKICAgICAgICAgCiAgICAg
ICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmKTsKLSAg
ICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYsIEpJ
VFN0dWJSb3V0aW5lU2V0JiwgREZHQ29kZUJsb2NrcyYpOworICAgICAgICB2b2lkIGdhdGhlckNv
bnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwgSklUU3R1YlJvdXRpbmVTZXQmLCBD
b2RlQmxvY2tTZXQmKTsKIAogICAgICAgICBSZWdpc3RlciogYmVnaW4oKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsgfQogICAgICAg
ICBSZWdpc3RlciogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNTQ5NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsMjAgKzkwLDYgQEAgSW50cmluc2ljIE5hdGl2ZUV4ZWN1dGFibGU6Omlu
dHJpbnNpYygpIAogfQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoSklUKQotLy8gVXRpbGl0eSBtZXRo
b2QgdXNlZCBmb3IgamV0dGlzb25pbmcgY29kZSBibG9ja3MuCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotc3RhdGljIHZvaWQgamV0dGlzb25Db2RlQmxvY2soVk0mIHZtLCBSZWZQdHI8VD4mIGNvZGVC
bG9jaykKLXsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+
aml0VHlwZSgpKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAg
UmVmUHRyPFQ+IGNvZGVCbG9ja1RvSmV0dGlzb24gPSBjb2RlQmxvY2sucmVsZWFzZSgpOwotICAg
IGNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8VD4oY29kZUJsb2NrVG9KZXR0aXNvbi0+
cmVsZWFzZUFsdGVybmF0aXZlKCkpOwotICAgIGNvZGVCbG9ja1RvSmV0dGlzb24tPnVubGlua0lu
Y29taW5nQ2FsbHMoKTsKLSAgICB2bS5oZWFwLmpldHRpc29uREZHQ29kZUJsb2NrKHN0YXRpY19w
b2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihjb2RlQmxvY2tUb0pldHRpc29uLnJlbGVhc2UoKSkpOwot
fQotI2VuZGlmCi0KIGNvbnN0IENsYXNzSW5mbyBTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8gPSB7
ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoU2NyaXB0RXhlY3V0YWJsZSkgfTsKIAogI2lmIEVOQUJMRShKSVQpCkBA
IC0xMjUsMTIgKzExMSw2IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29k
ZUIKICAgICAKICAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwogICAgIAotICAgIGlm
IChKSVRDb2RlOjppc0pJVChnZW5lcmljQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7Ci0gICAgICAg
IHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KAotICAgICAgICAgICAgc2l6ZW9mKENvZGVC
bG9jaykgKyBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlKCktPnNpemUoKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZihDb2RlQmxvY2sp
KTsKLSAgICAKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBnZW5lcmljQ29kZUJs
b2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKICAgICAKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBv
bGRDb2RlQmxvY2s7CkBAIC0zNzYsMTUgKzM1Niw2IEBAIGlubGluZSBjb25zdCBjaGFyKiBzYW1w
bGluZ0Rlc2NyaXB0aW9uKEoKICAgICB9CiB9CiAKLSNpZiBFTkFCTEUoSklUKQotdm9pZCBFdmFs
RXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJiB2bSkKLXsKLSAgICBqZXR0aXNv
bkNvZGVCbG9jayh2bSwgbV9ldmFsQ29kZUJsb2NrKTsKLSAgICBtX2ppdENvZGVGb3JDYWxsID0g
bV9ldmFsQ29kZUJsb2NrLT5qaXRDb2RlKCk7Ci0gICAgQVNTRVJUKCFtX2ppdENvZGVGb3JDYWxs
V2l0aEFyaXR5Q2hlY2spOwotfQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KIHZvaWQgRXZhbEV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICBFdmFsRXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxFdmFsRXhlY3V0
YWJsZSo+KGNlbGwpOwpAQCAtNDI2LDE1ICszOTcsNiBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1
dGFibGU6OmNoZWNrU3ludGF4CiAgICAgcmV0dXJuIGVycm9yLnRvRXJyb3JPYmplY3QobGV4aWNh
bEdsb2JhbE9iamVjdCwgbV9zb3VyY2UpOwogfQogCi0jaWYgRU5BQkxFKEpJVCkKLXZvaWQgUHJv
Z3JhbUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShWTSYgdm0pCi17Ci0gICAgamV0
dGlzb25Db2RlQmxvY2sodm0sIG1fcHJvZ3JhbUNvZGVCbG9jayk7Ci0gICAgbV9qaXRDb2RlRm9y
Q2FsbCA9IG1fcHJvZ3JhbUNvZGVCbG9jay0+aml0Q29kZSgpOwotICAgIEFTU0VSVCghbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLX0KLSNlbmRpZgotCiB2b2lkIFByb2dyYW1FeGVj
dXRhYmxlOjp1bmxpbmtDYWxscygpCiB7CiAjaWYgRU5BQkxFKEpJVCkKQEAgLTUxOCwyMiArNDgw
LDYgQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YgogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLSNpZiBFTkFCTEUoSklUKQotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6
OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoVk0mIHZtKQotewotICAgIGpldHRpc29uQ29k
ZUJsb2NrKHZtLCBtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAgIG1faml0Q29kZUZvckNhbGwgPSBt
X2NvZGVCbG9ja0ZvckNhbGwtPmppdENvZGUoKTsKLSAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFy
aXR5Q2hlY2sgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPmppdENvZGVXaXRoQXJpdHlDaGVjaygpOwot
fQotCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29u
c3RydWN0KFZNJiB2bSkKLXsKLSAgICBqZXR0aXNvbkNvZGVCbG9jayh2bSwgbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QpOwotICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LT5qaXRDb2RlKCk7Ci0gICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2sgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCk7
Ci19Ci0jZW5kaWYKLQogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBGdW5jdGlvbkV4ZWN1dGFi
bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAx
NTQ5NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0NSwxMCArNDQ1LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKIAotI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBqZXR0aXNv
bk9wdGltaXplZENvZGUoVk0mKTsKLSNlbmRpZgotCiAgICAgRXZhbENvZGVCbG9jayogY29kZUJs
b2NrKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2V2YWxDb2RlQmxvY2suZ2V0KCk7CkBAIC01
MDYsMTAgKzUwMiw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxs
Kik7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKFZN
Jik7Ci0jZW5kaWYKLQogICAgIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaygpCiAgICAgewog
ICAgICAgICByZXR1cm4gbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpOwpAQCAtNTgxLDEwICs1NzMs
NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQo
KTsKICAgICB9CiAgICAgICAgIAotI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBqZXR0aXNvbk9w
dGltaXplZENvZGVGb3JDYWxsKFZNJik7Ci0jZW5kaWYKLQogICAgIGJvb2wgaXNHZW5lcmF0ZWRG
b3JDYWxsKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGw7
CkBAIC01OTUsMTAgKzU4Myw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nr
Rm9yQ2FsbC5nZXQoKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgamV0dGlz
b25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KFZNJik7Ci0jZW5kaWYKLQogICAgIGJvb2wgaXNH
ZW5lcmF0ZWRGb3JDb25zdHJ1Y3QoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0OwpAQCAtNjA5LDE4ICs1OTMsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKTsKICAgICB9CiAgICAgICAgIAot
I2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3IoVk0mIHZt
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAgICAgICBpZiAoa2luZCA9
PSBDb2RlRm9yQ2FsbCkgCi0gICAgICAgICAgICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxs
KHZtKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9y
Q29uc3RydWN0KTsKLSAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVj
dCh2bSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICAgICAgCiAgICAgYm9vbCBpc0dl
bmVyYXRlZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgewogICAgICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDE3ICsyNzQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgTnVtZXJpY1N0cmluZ3MgbnVtZXJpY1N0cmluZ3M7CiAgICAgICAgIERhdGVJbnN0YW5j
ZUNhY2hlIGRhdGVJbnN0YW5jZUNhY2hlOwogICAgICAgICBXVEY6OlNpbXBsZVN0YXRzIG1hY2hp
bmVDb2RlQnl0ZXNQZXJCeXRlY29kZVdvcmRGb3JCYXNlbGluZUpJVDsKLSAgICAgICAgVmVjdG9y
PENvZGVCbG9jayo+IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkOwotICAgICAgICB2b2lkIHN0YXJ0
ZWRDb21waWxpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLmFwcGVuZChjb2RlQmxvY2spOwotICAgICAgICB9Ci0K
LSAgICAgICAgdm9pZCBmaW5pc2hlZENvbXBpbGluZyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChjb2RlQmxvY2ssIGNvZGVCbG9jayA9
PSBjb2RlQmxvY2tzQmVpbmdDb21waWxlZC5sYXN0KCkpOwotICAgICAgICAgICAgY29kZUJsb2Nr
c0JlaW5nQ29tcGlsZWQucmVtb3ZlTGFzdCgpOwotICAgICAgICB9CiAKICAgICAgICAgdm9pZCBz
ZXRJbkRlZmluZU93blByb3BlcnR5KGJvb2wgaW5EZWZpbmVPd25Qcm9wZXJ0eSkKICAgICAgICAg
ewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210259</attachid>
            <date>2013-09-01 20:49:33 -0700</date>
            <delta_ts>2013-09-01 21:35:25 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56850</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDEzLTA5LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZUJsb2NrOjpqZXR0aXNvbigpIHNob3VsZCBiZSBpbXBsaWNpdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNTY3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgcmlza3kg
Y2hhbmdlIGZyb20gYSBwZXJmb3JtYW5jZSBzdGFuZHBvaW50LCBidXQgSSBiZWxpZXZlIGl0J3MK
KyAgICAgICAgbmVjZXNzYXJ5LiBUaGlzIG1ha2VzIGFsbCBDb2RlQmxvY2tzIGdldCBzd2VwdCBi
eSBHQy4gTm9ib2R5IGJ1dCB0aGUgR0MKKyAgICAgICAgY2FuIGRlbGV0ZSBDb2RlQmxvY2tzIGJl
Y2F1c2UgdGhlIEdDIGFsd2F5cyBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGVtLgorICAgICAgICBP
bmNlIGEgQ29kZUJsb2NrIHJlYWNoZXMganVzdCBvbmUgcmVmZXJlbmNlIChpLmUuIHRoZSBvbmUg
ZnJvbSB0aGUgR0MpCisgICAgICAgIHRoZW4gdGhlIEdDIHdpbGwgZnJlZSBpdCBvbmx5IGlmIGl0
J3Mgbm90IG9uIHRoZSBzdGFjay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxsb3dzIG1lIHRv
IGdldCByaWQgb2YgdGhlIGpldHRpc29uaW5nIGxvZ2ljLiBXZSBuZWVkIHRoaXMgZm9yIEZUTAor
ICAgICAgICB0aWVyLXVwLiBXZWxsOyB3ZSBkb24ndCBuZWVkIGl0LCBidXQgaXQgd2lsbCBoZWxw
IHByZXZlbnQgYSBsb3Qgb2YgYnVncy4KKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRl
ZCB0byB0byByZXBsYWNlIG9uZSBjb2RlIGJsb2NrIHdpdGggYW5vdGhlciwgeW91CisgICAgICAg
IGhhZCB0byByZW1lbWJlciB0byB0ZWxsIHRoZSBHQyB0aGF0IHRoZSBwcmV2aW91cyBjb2RlIGJs
b2NrIGlzCisgICAgICAgICJqZXR0aXNvbmVkIi4gV2Ugd291bGQgbmVlZCB0byBkbyB0aGlzIHdo
ZW4gdGllcmluZyB1cCBmcm9tIERGRyB0byBGVEwKKyAgICAgICAgYW5kIHdoZW4gZGVhbGluZyB3
aXRoIERGRy10by1GVEwgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLiBUaGVyZSBhcmUgYSBsb3QKKyAg
ICAgICAgb2YgcGVybXV0YXRpb25zIGhlcmUgLSB0aWVyaW5nIHVwIHRvIHRoZSBGVEwsIE9TUiBl
bnRlcmluZyBpbnRvIHRoZSBGVEwsCisgICAgICAgIGRlY2lkaW5nIHRoYXQgYW4gT1NSIGVudHJ5
IGNvZGUgYmxvY2sgaXMgbm90IHJlbGV2YW50IGFueW1vcmUgLSBqdXN0IHRvCisgICAgICAgIG5h
bWUgYSBmZXcuIEluIGVhY2ggb2YgdGhlc2UgY2FzZXMgd2UnZCBoYXZlIHRvIGpldHRpc29uIHRo
ZSBwcmV2aW91cworICAgICAgICBjb2RlIGJsb2NrLiBJdCBzbWVsbHMgbGlrZSBhIGh1Z2Ugc291
cmNlIG9mIGZ1dHVyZSBidWdzLgorICAgICAgICAKKyAgICAgICAgU28gSSBtYWRlIGpldHRpc29u
aW5nIGltcGxpY2l0IGJ5IG1ha2luZyB0aGUgR0MgYWx3YXlzIHdhdGNoIG91dCBmb3IgYQorICAg
ICAgICBDb2RlQmxvY2sgYmVpbmcgb3duZWQgc29sZWx5IGJ5IHRoZSBHQy4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
VGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6fkNv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2Nh
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6bWFyayk6CisgICAgICAgICogZGZnL0RG
R0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpDb21tb25EYXRh
KToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1Nl
dDo6fkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6YWRkKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQpOgorICAgICAgICAqIGhlYXAvQ29kZUJsb2NrU2V0
Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAg
ICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBoZWFwL0RGR0NvZGVCbG9ja3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBoZWFw
L0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAoSlND
OjpIZWFwOjpkZWxldGVBbGxDb21waWxlZENvZGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWxl
dGVVbm1hcmtlZENvbXBpbGVkQ29kZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAg
ICogaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNrLmg6Cisg
ICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhl
Y3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0wOC0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIENvZGVCbG9jayByZWZhY3RvcmluZyBicm9rZSBwcm9m
aWxlIGR1bXBpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMTY5LDEwICsxNjksMTAgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAogCiAgICAgaGVhcC9CbG9j
a0FsbG9jYXRvci5jcHAKKyAgICBoZWFwL0NvZGVCbG9ja1NldC5jcHAKICAgICBoZWFwL0NvcGll
ZFNwYWNlLmNwcAogICAgIGhlYXAvQ29weVZpc2l0b3IuY3BwCiAgICAgaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5jcHAKLSAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwCiAgICAgaGVhcC9HQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oCiAgICAgaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCiAgICAg
aGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00
NDIsNiArNDQyLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZyb21CbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExWYWx1ZVNvdXJjZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tT
ZXQuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2NrLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZEJsb2NrSW5saW5lcy5oIFwKQEAgLTQ1Niw4ICs0NTgsNiBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2
YXRpdmVSb290cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2
ZVJvb3RzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaCBcCi0JU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAgXAotCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvR0NBc3NlcnRpb25zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5j
b21pbmdSZWZDb3VudGVkLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21p
bmdSZWZDb3VudGVkSW5saW5lcy5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJn
ZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShy
ZXZpc2lvbiAxNTQ5NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29y
a2luZyBjb3B5KQpAQCAtODIsMTEgKzgyLDExIEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5dGVjb2Rl
L1dhdGNocG9pbnQuY3BwIFwKICAgICBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
IFwKICAgICBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBcCisgICAgaGVhcC9Db2RlQmxv
Y2tTZXQuY3BwIFwKICAgICBoZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oIFwKICAgICBoZWFwL0Nv
cGllZFNwYWNlLmNwcCBcCiAgICAgaGVhcC9Db3B5VmlzaXRvci5jcHAgXAogICAgIGhlYXAvQ29u
c2VydmF0aXZlUm9vdHMuY3BwIFwKLSAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwIFwKICAgICBo
ZWFwL1dlYWsuY3BwIFwKICAgICBoZWFwL1dlYWtCbG9jay5jcHAgXAogICAgIGhlYXAvV2Vha0hh
bmRsZU93bmVyLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMz
MCwxMCArMzMwLDEwIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRHJpdmVy
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkaXNhc3NlbWJsZXJcRGlzYXNz
ZW1ibGVyLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEJsb2NrQWxs
b2NhdG9yLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXENvZGVCbG9j
a1NldC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb25zZXJ2YXRp
dmVSb290cy5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb3BpZWRT
cGFjZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb3B5VmlzaXRv
ci5jcHAiIC8+DQotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxERkdDb2RlQmxvY2tz
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFkLmNwcCIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFkU2hhcmVkRGF0YS5j
cHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVTZXQuY3BwIiAv
Pg0KQEAgLTY3OSw2ICs2NzksNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R09TUkVudHJ5LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVy
XERpc2Fzc2VtYmxlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQmxv
Y2tBbGxvY2F0b3IuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvZGVC
bG9ja1NldC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29uc2VydmF0
aXZlUm9vdHMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvcGllZEFs
bG9jYXRvci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29waWVkQmxv
Y2suaCIgLz4NCkBAIC02ODksNyArNjkwLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcQ29weVZpc2l0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFw
XENvcHlWaXNpdG9ySW5saW5lcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhl
YXBcQ29weVdvcmtMaXN0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxE
RkdDb2RlQmxvY2tzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ0Fz
c2VydGlvbnMuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFk
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVhZFNoYXJlZERh
dGEuaCIgLz4NCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU0
OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw4ICsxNzgsNiBAQAogCQkwRjJC
REM0RDE1MjI4MTg2MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzRDMTUyMjgxODMwMENEODkx
MCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovOyB9OwogCQkwRjJCREM0RjE1MjI4QkYzMDBDRDg5
MTAgLyogREZHVmFsdWVTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNl
LmNwcCAqLzsgfTsKIAkJMEYyQkRDNTExNTIyOEZGRDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QkRDNTAxNTIyOEZGQTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovOyB9OwotCQkw
RjJDNTU2RjE0NzM4RjMxMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRG
IC8qIERGR0NvZGVCbG9ja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2
RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi87IH07CiAJCTBGMkU4OTJD
MTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTk4N0YyRjE2ODI4QTdFMDAzQzJGOEQgLyogVW51
c2VkUG9pbnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGMkU4OTJEMTZEMDJCQUYwMDlFNEZEMiAvKiBERkdNaW5pZmllZElELmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxMDE2QjNBOTY0
MDAzRjY5NkIgLyogREZHTWluaWZpZWRJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQ
aGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjJGQzc3MDE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovOyB9OwpAQCAtMzY5
LDYgKzM2Nyw4IEBACiAJCTBGRDgyRTU2MTQxREFGMDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU1
MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwICovOyB9OwogCQkwRkQ4MkU1NzE0
MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JF
bnRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAx
NzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwICovOyB9OworCQkwRkQ4QTMxMzE3RDQzMjZDMDBD
QTJDNDAgLyogQ29kZUJsb2NrU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRDhBMzExMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQu
Y3BwICovOyB9OworCQkwRkQ4QTMxNDE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMxMjE3
RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDQzkxNzNEQTUyMDAwN0IzQzFCIC8qIEZU
TEFiYnJldmlhdGVkVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGREIyQ0M3MTczREE1MUUwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZE
QjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDODE3M0RBNTFFMDA3QjND
MUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRkRCMkNFNzE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xp
c3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
QjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLzsgfTsKQEAgLTEzNTQs
OCArMTM1NCw2IEBACiAJCTBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5v
ZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWluaWZpZWRO
b2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdNaW5pZmllZE5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjJCREM0RTE1MjI4QkU3MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsdWVTb3VyY2Uu
Y3BwOyBwYXRoID0gZGZnL0RGR1ZhbHVlU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYyQkRDNTAxNTIyOEZGQTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyaWFibGVFdmVudC5j
cHA7IHBhdGggPSBkZmcvREZHVmFyaWFibGVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyog
REZHQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdDb2Rl
QmxvY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkZDNzcwMTZFMTJGNkYw
MDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdEQ0VQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHRENFUGhhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZH
RENFUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRENFUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdEQ0VQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdV
c2VLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NTgsNiArMTU1Niw4
IEBACiAJCTBGRDgyRTUyMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFbnRyeS5jcHA7IHBhdGggPSBk
ZmcvREZHT1NSRW50cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU1
MzE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHT1NSRW50cnkuaDsgcGF0aCA9IGRmZy9ERkdPU1JFbnRyeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogU3Bl
Y3VsYXRlZFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Bl
Y3VsYXRlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMxMTE3
RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvZGVCbG9ja1NldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRDhBMzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrU2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGREIyQ0M3MTczREE1MUUwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRl
ZFR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEFiYnJldmlhdGVkVHlwZXMuaDsgcGF0aCA9IGZ0
bC9GVExBYmJyZXZpYXRlZFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
REIyQ0M4MTczREE1MUUwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExWYWx1ZUZyb21CbG9jay5oOyBwYXRoID0gZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAv
KiBERkdXb3JrbGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdXb3JrbGlzdC5jcHA7IHBhdGggPSBkZmcvREZHV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjcxNSw2ICsyNzE1LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJ
CTE0ODE2RTE5MTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgKi8sCiAJCQkJ
MTQ4MTZFMUExNTRDQzU2QzAwQjgwNTRDIC8qIEJsb2NrQWxsb2NhdG9yLmggKi8sCisJCQkJMEZE
OEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi8sCisJCQkJMEZEOEEz
MTIxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oICovLAogCQkJCTE0NkIxNERCMTJF
QjVCMTIwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIx
MkVCNTU5RDAwODNCMTJCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggKi8sCiAJCQkJQzJFQUQyRkIx
NEYwMjQ5ODAwQTRCMTU5IC8qIENvcGllZEFsbG9jYXRvci5oICovLApAQCAtMjcyOSw4ICsyNzMx
LDYgQEAKIAkJCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVz
LmggKi8sCiAJCQkJQzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICov
LAogCQkJCTBGMTM2RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCi0JCQkJMEYy
QzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovLAotCQkJCTBGMkM1
NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8sCiAJCQkJQkNCRTJDQUQx
NEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oICovLAogCQkJCTBGMkI2NkE4MTdCNkI1
M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovLAogCQkJCTBGMkI2NkE5MTdC
NkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLywKQEAgLTM4
OTEsNyArMzg5MSw2IEBACiAJCQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQwMTdBMEJCRkQw
MEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MjE3
QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYy
QzU1NkYxNDczOEYzMTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25L
ZXkuaCBpbiBIZWFkZXJzICovLApAQCAtMzk2NCw2ICszOTYzLDcgQEAKIAkJCQlBNzdBNDI0MzE3
QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRo
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcg
LyogREZHU2NvcmVCb2FyZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMTQxN0Q0MzI2QzAw
Q0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZENDYxNUIz
NzAxRjAwOEYzNjNFIC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2
ZVBsYW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBE
RkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC00ODI1LDcgKzQ4MjUsNiBA
QAogCQkJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAvKiBE
RkdDbG9iYmVyaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjQxMTdBMEJCRkQwMEE4
REI4MSAvKiBERkdDbG9iYmVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGMkM1NTcwMTQ3
MzhGMzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RjBGMTlEMTZCNzJBMDgwMDVERjk1QiAvKiBERkdDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQTBBMzExNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYzOEIwMTcxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDk4Nyw2ICs0OTg2LDcgQEAKIAkJCQkxNDdGMzlENjEw
N0VDMzc2MDA0MjdBNDggLyogSlNDSlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQw
RkNFNDBBNTFFNDZCMDAwNUYwNjEgLyogSlNDbGFzc1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZEOEEzMTMxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNEJENUEzMDBBM0U5MUY2MDBCQUY1OUMgLyogSlNDb250ZXh0UmVmLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjAyOEI2MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NUZXN0
UnVubmVyVXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RUIxN0I2QjVBQjAwQTdB
RTNGIC8qIEpTRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU0OTQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MDQsNiArMTUwNCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRC
bG9ja1RhZywKICAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2
ZWxOb3RTZXQpCiAjZW5kaWYKIHsKKyAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwog
ICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRpbWl6
ZUFmdGVyV2FybVVwKCk7CiAgICAgaml0QWZ0ZXJXYXJtVXAoKTsKQEAgLTE1MTYsNiArMTUxNyw5
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAgICAgbV9y
YXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zd2l0Y2hK
dW1wVGFibGVzOwogICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMg
PSBvdGhlci5tX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgfQorICAg
IAorICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hlYXAtPnJlcG9y
dEV4dHJhTWVtb3J5Q29zdChzaXplb2YoQ29kZUJsb2NrKSk7CiB9CiAKIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQ
cm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQg
Zmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQpAQCAtMTU0NCw3ICsxNTQ4LDcgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0
ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKICNlbmRpZgogewotICAgIG1fdm0tPnN0YXJ0
ZWRDb21waWxpbmcodGhpcyk7CisgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJlZCgpKTsKIAog
ICAgIEFTU0VSVChtX3NvdXJjZSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpKTsKQEAgLTE4NDIsNyArMTg0Niw4IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgIGlmIChPcHRpb25zOjpkdW1wR2Vu
ZXJhdGVkQnl0ZWNvZGVzKCkpCiAgICAgICAgIGR1bXBCeXRlY29kZSgpOwotICAgIG1fdm0tPmZp
bmlzaGVkQ29tcGlsaW5nKHRoaXMpOworICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlz
KTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoQ29kZUJsb2NrKSAr
IG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpOwogfQogCiBDb2Rl
QmxvY2s6On5Db2RlQmxvY2soKQpAQCAtMTg1MCwxMiArMTg1NSw2IEBAIENvZGVCbG9jazo6fkNv
ZGVCbG9jaygpCiAgICAgaWYgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKICAgICAgICAg
bV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLT5ub3RpZnlEZXN0cnVjdGlvbih0aGlzKTsKICAg
ICAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAvLyBSZW1vdmUgbXlzZWxmIGZyb20gdGhlIHNl
dCBvZiBERkcgY29kZSBibG9ja3MuIE5vdGUgdGhhdCBJIG1heSBub3QgYmUgaW4gdGhpcyBzZXQK
LSAgICAvLyAoYmVjYXVzZSBJJ20gbm90IGEgREZHIGNvZGUgYmxvY2spLCBpbiB3aGljaCBjYXNl
IHRoaXMgaXMgYSBuby1vcCBhbnl3YXkuCi0gICAgbV92bS0+aGVhcC5tX2RmZ0NvZGVCbG9ja3Mu
bV9zZXQucmVtb3ZlKHRoaXMpOwotI2VuZGlmCi0gICAgCiAjaWYgRU5BQkxFKFZFUkJPU0VfVkFM
VUVfUFJPRklMRSkKICAgICBkdW1wVmFsdWVQcm9maWxlcygpOwogI2VuZGlmCkBAIC0xOTA1LDMz
ICsxOTA0LDI5IEBAIHZvaWQgRXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFYKIAog
dm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewot
I2lmIEVOQUJMRShQQVJBTExFTF9HQykgJiYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENv
ZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7Ci0gICAgICAgIERGRzo6Q29tbW9uRGF0
YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAgICAgCi0gICAgICAg
IC8vIEkgbWF5IGJlIGFza2VkIHRvIHNjYW4gbXlzZWxmIG1vcmUgdGhhbiBvbmNlLCBhbmQgaXQg
bWF5IGV2ZW4gaGFwcGVuIGNvbmN1cnJlbnRseS4KLSAgICAgICAgLy8gVG8gdGhpcyBlbmQsIHVz
ZSBhIENBUyBsb29wIHRvIGNoZWNrIGlmIEkndmUgYmVlbiBjYWxsZWQgYWxyZWFkeS4gT25seSBv
bmUgdGhyZWFkCi0gICAgICAgIC8vIG1heSBwcm9jZWVkIHBhc3QgdGhpcyBwb2ludCAtIHdoaWNo
ZXZlciBvbmUgd2lucyB0aGUgQ0FTIHJhY2UuCi0gICAgICAgIHVuc2lnbmVkIG9sZFZhbHVlOwot
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICBvbGRWYWx1ZSA9IGRmZ0NvbW1vbi0+dmlzaXRBZ2dy
ZWdhdGVIYXNCZWVuQ2FsbGVkOwotICAgICAgICAgICAgaWYgKG9sZFZhbHVlKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gTG9va3MgbGlrZSBzb21lb25lIGVsc2Ugd29uISBSZXR1cm4gaW1tZWRpYXRl
bHkgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QKLSAgICAgICAgICAgICAgICAvLyB0cmFjZSB0aGUg
c2FtZSBDb2RlQmxvY2sgY29uY3VycmVudGx5LiBEb2luZyBzbyBpcyBoYXphcmRvdXMgc2luY2Ug
d2Ugd2lsbAotICAgICAgICAgICAgICAgIC8vIGJlIG11dGF0aW5nIHRoZSBzdGF0ZSBvZiBWYWx1
ZVByb2ZpbGVzLCB3aGljaCBjb250YWluIEpTVmFsdWVzLCB3aGljaCBjYW4KLSAgICAgICAgICAg
ICAgICAvLyBoYXZlIHdvcmQtdGVhcmluZyBvbiAzMi1iaXQsIGxlYWRpbmcgdG8gYXdlc29tZSB0
aW1pbmctZGVwZW5kZW50IGNyYXNoZXMKLSAgICAgICAgICAgICAgICAvLyB0aGF0IGFyZSBuZWFy
bHkgaW1wb3NzaWJsZSB0byB0cmFjayBkb3duLgotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIC8vIEFsc28gbm90ZSB0aGF0IGl0IG11c3QgYmUgc2FmZSB0byByZXR1cm4gZWFybHkg
YXMgc29vbiBhcyB3ZSBzZWUgdGhlCi0gICAgICAgICAgICAgICAgLy8gdmFsdWUgdHJ1ZSAod2Vs
bCwgKHVuc2lnbmVkKTEpLCBzaW5jZSBvbmNlIGEgR0MgdGhyZWFkIGlzIGluIHRoaXMgbWV0aG9k
Ci0gICAgICAgICAgICAgICAgLy8gYW5kIGhhcyB3b24gdGhlIENBUyByYWNlIChpLmUuIHdhcyBy
ZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUgdmFsdWUgdHJ1ZSkKLSAgICAgICAgICAgICAgICAv
LyBpdCB3aWxsIGRlZmluaXRlbHkgY29tcGxldGUgdGhlIHJlc3Qgb2YgdGhpcyBtZXRob2QgYmVm
b3JlIGRlY2xhcmluZwotICAgICAgICAgICAgICAgIC8vIHRlcm1pbmF0aW9uLgotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoIVdURjo6d2Vh
a0NvbXBhcmVBbmRTd2FwKCZkZmdDb21tb24tPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZCwg
MCwgMSkpOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoUEFSQUxMRUxfR0MpICYmIEVOQUJMRShE
RkdfSklUKQorI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICAvLyBJIG1heSBiZSBhc2tlZCB0
byBzY2FuIG15c2VsZiBtb3JlIHRoYW4gb25jZSwgYW5kIGl0IG1heSBldmVuIGhhcHBlbiBjb25j
dXJyZW50bHkuCisgICAgLy8gVG8gdGhpcyBlbmQsIHVzZSBhIENBUyBsb29wIHRvIGNoZWNrIGlm
IEkndmUgYmVlbiBjYWxsZWQgYWxyZWFkeS4gT25seSBvbmUgdGhyZWFkCisgICAgLy8gbWF5IHBy
b2NlZWQgcGFzdCB0aGlzIHBvaW50IC0gd2hpY2hldmVyIG9uZSB3aW5zIHRoZSBDQVMgcmFjZS4K
KyAgICB1bnNpZ25lZCBvbGRWYWx1ZTsKKyAgICBkbyB7CisgICAgICAgIG9sZFZhbHVlID0gbV92
aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQ7CisgICAgICAgIGlmIChvbGRWYWx1ZSkgeworICAg
ICAgICAgICAgLy8gTG9va3MgbGlrZSBzb21lb25lIGVsc2Ugd29uISBSZXR1cm4gaW1tZWRpYXRl
bHkgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIHRyYWNlIHRoZSBzYW1l
IENvZGVCbG9jayBjb25jdXJyZW50bHkuIERvaW5nIHNvIGlzIGhhemFyZG91cyBzaW5jZSB3ZSB3
aWxsCisgICAgICAgICAgICAvLyBiZSBtdXRhdGluZyB0aGUgc3RhdGUgb2YgVmFsdWVQcm9maWxl
cywgd2hpY2ggY29udGFpbiBKU1ZhbHVlcywgd2hpY2ggY2FuCisgICAgICAgICAgICAvLyBoYXZl
IHdvcmQtdGVhcmluZyBvbiAzMi1iaXQsIGxlYWRpbmcgdG8gYXdlc29tZSB0aW1pbmctZGVwZW5k
ZW50IGNyYXNoZXMKKyAgICAgICAgICAgIC8vIHRoYXQgYXJlIG5lYXJseSBpbXBvc3NpYmxlIHRv
IHRyYWNrIGRvd24uCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEFsc28gbm90ZSB0aGF0
IGl0IG11c3QgYmUgc2FmZSB0byByZXR1cm4gZWFybHkgYXMgc29vbiBhcyB3ZSBzZWUgdGhlCisg
ICAgICAgICAgICAvLyB2YWx1ZSB0cnVlICh3ZWxsLCAodW5zaWduZWQpMSksIHNpbmNlIG9uY2Ug
YSBHQyB0aHJlYWQgaXMgaW4gdGhpcyBtZXRob2QKKyAgICAgICAgICAgIC8vIGFuZCBoYXMgd29u
IHRoZSBDQVMgcmFjZSAoaS5lLiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIHZhbHVl
IHRydWUpCisgICAgICAgICAgICAvLyBpdCB3aWxsIGRlZmluaXRlbHkgY29tcGxldGUgdGhlIHJl
c3Qgb2YgdGhpcyBtZXRob2QgYmVmb3JlIGRlY2xhcmluZworICAgICAgICAgICAgLy8gdGVybWlu
YXRpb24uCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IHdoaWxlICghV1RG
Ojp3ZWFrQ29tcGFyZUFuZFN3YXAoJm1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkLCAwLCAx
KSk7CisjZW5kaWYgLy8gRU5BQkxFKFBBUkFMTEVMX0dDKQogICAgIAogICAgIGlmICghIW1fYWx0
ZXJuYXRpdmUpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwpAQCAtMjc0MCwyOCArMjczNSwxNCBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5jdGlvbkNv
ZGVCbG9jazo6CiAKIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbigpCiB7CisgICAgRGVmZXJHQyBk
ZWZlckdDKCptX2hlYXApOwogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0
VHlwZSgpKSk7CiAgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7CiAgICAgYWx0ZXJu
YXRpdmUoKS0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgIHRhbGx5RnJlcXVlbnRFeGl0U2l0
ZXMoKTsKICAgICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0
YUxvZygiSmV0dGlzb25pbmcgIiwgKnRoaXMsICIuXG4iKTsKLSAgICBqZXR0aXNvbkltcGwoKTsK
LX0KLQotdm9pZCBQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbkltcGwoKQotewotICAgIHN0YXRp
Y19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9w
dGltaXplZENvZGUoKnZtKCkpOwotfQotCi12b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29uSW1w
bCgpCi17Ci0gICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUo
KSktPmpldHRpc29uT3B0aW1pemVkQ29kZSgqdm0oKSk7Ci19Ci0KLXZvaWQgRnVuY3Rpb25Db2Rl
QmxvY2s6OmpldHRpc29uSW1wbCgpCi17Ci0gICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoKnZtKCks
IG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CisgICAg
YWx0ZXJuYXRpdmUoKS0+aW5zdGFsbCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsMTEgKzM2LDExIEBACiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAi
Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tI
YXNoLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJ
VExvY2suaCIKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIK
ICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgotI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3Mu
aCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAj
aW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKQEAgLTgzLDcgKzgzLDYgQEAKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIERGR0NvZGVCbG9ja3M7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBSZXBhdGNoQnVmZmVyOwpAQCAtMjczLDE0ICsy
NzIsMTIgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgc2V0SklUQ29kZShQYXNzUmVmUHRyPEpJ
VENvZGU+IGNvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlV2l0aEFyaXR5Q2hlY2spCiAg
ICAgeworICAgICAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOworICAgICAgICBtX2hl
YXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjb2RlLT5zaXplKCkpOwogICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOyAvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgbG9jayB3aWxs
IGFsc28gZG8gc29tZXRoaW5nIHNpbWlsYXIsIGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQu
CiAgICAgICAgIG1faml0Q29kZSA9IGNvZGU7CiAgICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNo
ZWNrID0gY29kZVdpdGhBcml0eUNoZWNrOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICBp
ZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKEpJVENvZGU6OmppdFR5cGVGb3IobV9qaXRDb2Rl
KSkpCi0gICAgICAgICAgICBtX3ZtLT5oZWFwLm1fZGZnQ29kZUJsb2Nrcy5tX3NldC5hZGQodGhp
cyk7Ci0jZW5kaWYKICAgICB9CiAgICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBqaXRDb2RlKCkgeyBy
ZXR1cm4gbV9qaXRDb2RlOyB9CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGppdENvZGVXaXRo
QXJpdHlDaGVjaygpIHsgcmV0dXJuIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOyB9CkBAIC05NjEs
OSArOTU4LDYgQEAgcHVibGljOgogICAgIGJvb2wgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFy
a2VkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KICAgICAKIHByb3RlY3Rl
ZDoKLSNpZiBFTkFCTEUoSklUKQotICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKSA9IDA7
Ci0jZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRv
ciYpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOwogCkBAIC05
NzQsNyArOTY4LDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgZnJpZW5k
IGNsYXNzIERGR0NvZGVCbG9ja3M7CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKICAg
ICAKICAgICB2b2lkIG5vdGljZUluY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lKTsK
ICAgICAKQEAgLTEwMTcsMTcgKzEwMTEsMTYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkK
ICAgICB7Ci0gICAgICAgIC8vIE51bGwgbV9kZmdEYXRhIG1lYW5zIHRoYXQgdGhpcyBpcyBhIGJh
c2VsaW5lIEpJVCBDb2RlQmxvY2suIEJhc2VsaW5lIEpJVAotICAgICAgICAvLyBDb2RlQmxvY2tz
IGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuIHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBn
bwotICAgICAgICAvLyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cyBz
Y2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQKLSAgICAgICAgLy8gdGhpcyBtZWFucyB0aGF0IGl0
J3MgbGl2ZS4KKyAgICAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxv
Y2tzIGRvbid0IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCisgICAgICAgIC8vIHRoZWlyIHdl
YWsgcmVmZXJlbmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0
cworICAgICAgICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0
IGl0J3MgbGl2ZS4KICAgICAgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIC8vIEZvciBzaW1wbGlj
aXR5LCB3ZSBkb24ndCBhdHRlbXB0IHRvIGpldHRpc29uIGNvZGUgYmxvY2tzIGR1cmluZyBHQyBp
ZgogICAgICAgICAvLyB0aGV5IGFyZSBleGVjdXRpbmcuIEluc3RlYWQgd2Ugc3Ryb25nbHkgbWFy
ayB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgdG8KICAgICAgICAgLy8gYWxsb3cgdGhlbSB0byBjb250
aW51ZSB0byBleGVjdXRlIHNvdW5kbHkuCi0gICAgICAgIGlmIChtX2ppdENvZGUtPmRmZ0NvbW1v
bigpLT5tYXlCZUV4ZWN1dGluZykKKyAgICAgICAgaWYgKG1fbWF5QmVFeGVjdXRpbmcpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBpZiAoT3B0aW9uczo6Zm9yY2VERkdDb2Rl
QmxvY2tMaXZlbmVzcygpKQpAQCAtMTA2Nyw2ICsxMDYwLDggQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgbV9pc1N0cmljdE1vZGU7CiAgICAgYm9vbCBtX25lZWRzQWN0aXZhdGlvbjsKKyAgICBib29s
IG1fbWF5QmVFeGVjdXRpbmc7CisgICAgdWludDhfdCBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNh
bGxlZDsKIAogICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gbV9zb3VyY2U7CiAgICAgdW5zaWdu
ZWQgbV9zb3VyY2VPZmZzZXQ7CkBAIC0xMTg2LDcgKzExODEsNiBAQCBwdWJsaWM6CiAKICNpZiBF
TkFCTEUoSklUKQogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKTsK
ICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICB2aXJ0dWFsIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7CiAjZW5kaWYKQEAgLTEy
MDksNyArMTIwMyw2IEBAIHB1YmxpYzoKICAgICAKICNpZiBFTkFCTEUoSklUKQogcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKTsKICAgICB2aXJ0dWFsIENvZGVCbG9j
ayogcmVwbGFjZW1lbnQoKTsKICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFi
aWxpdHlMZXZlbEludGVybmFsKCk7CiAjZW5kaWYKQEAgLTEyMzIsNyArMTIyNSw2IEBAIHB1Ymxp
YzoKICAgICAKICNpZiBFTkFCTEUoSklUKQogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBq
ZXR0aXNvbkltcGwoKTsKICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAg
ICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7
CiAjZW5kaWYKQEAgLTEyOTEsOCArMTI4Myw3IEBAIGlubGluZSBKU1ZhbHVlIEV4ZWNTdGF0ZTo6
YXJndW1lbnRBZnRlckMKICAgICByZXR1cm4gdGhpc1tjb2RlQmxvY2soKS0+YXJndW1lbnRJbmRl
eEFmdGVyQ2FwdHVyZShhcmd1bWVudCldLmpzVmFsdWUoKTsKIH0KIAotI2lmIEVOQUJMRShERkdf
SklUKQotaW5saW5lIHZvaWQgREZHQ29kZUJsb2Nrczo6bWFyayh2b2lkKiBjYW5kaWRhdGVDb2Rl
QmxvY2spCitpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsodm9pZCogY2FuZGlkYXRlQ29k
ZUJsb2NrKQogewogICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIDAgYW5kIC0xIGJlY2F1c2Ug
dGhvc2UgYXJlIHVzZWQgYnkgdGhlIEhhc2hNYXAgYXMgbWFya2Vycy4KICAgICB1aW50cHRyX3Qg
dmFsdWUgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2FuZGlkYXRlQ29kZUJsb2NrKTsK
QEAgLTEzMDcsOSArMTI5OCw4IEBAIGlubGluZSB2b2lkIERGR0NvZGVCbG9ja3M6Om1hcmsodm9p
ZCogY2EKICAgICBpZiAoaXRlciA9PSBtX3NldC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgICgqaXRlciktPm1faml0Q29kZS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nID0g
dHJ1ZTsKKyAgICAoKml0ZXIpLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKIH0KLSNlbmRpZgog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMSArNjYsNyBAQCBz
dHJ1Y3QgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24gewogY2xhc3MgQ29tbW9uRGF0YSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6Ci0gICAgQ29tbW9uRGF0
YSgpCi0gICAgICAgIDogbWF5QmVFeGVjdXRpbmcoZmFsc2UpCi0gICAgICAgICwgaXNKZXR0aXNv
bmVkKGZhbHNlKQotICAgIHsKLSAgICB9CisgICAgQ29tbW9uRGF0YSgpIHsgfQogICAgIAogICAg
IHZvaWQgbm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihQbGFuJiwgQ29kZUJsb2Nr
KiwgTm9kZSopOwogICAgIApAQCAtODEsMTEgKzc3LDggQEAgcHVibGljOgogICAgIFZlY3RvcjxX
cml0ZUJhcnJpZXI8SlNDZWxsPiA+IHdlYWtSZWZlcmVuY2VzOwogICAgIAogICAgIFJlZlB0cjxQ
cm9maWxlcjo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwotICAgIGJvb2wgbWF5QmVFeGVjdXRp
bmc7Ci0gICAgYm9vbCBpc0pldHRpc29uZWQ7CiAgICAgYm9vbCBsaXZlbmVzc0hhc0JlZW5Qcm92
ZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgogICAgIGJvb2wgYWxsVHJh
bnNpdGlvbnNIYXZlQmVlbk1hcmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkg
R0MuCi0gICAgdW5zaWduZWQgdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOyAvLyBVbnNpZ25l
ZCB0byBtYWtlIGl0IHdvcmsgc2VhbWxlc3NseSB3aXRoIHRoZSBicm9hZGVzdCBzZXQgb2YgQ0FT
IGltcGxlbWVudGF0aW9ucy4KIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
a1NldC5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3Iu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0NvZGVCbG9ja1NldDo6Q29kZUJsb2NrU2V0KCkgeyB9
CisKK0NvZGVCbG9ja1NldDo6fkNvZGVCbG9ja1NldCgpCit7CisgICAgSGFzaFNldDxDb2RlQmxv
Y2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgSGFzaFNldDxDb2RlQmxv
Y2sqPjo6aXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCisgICAgICAgICgqaXRlciktPmRlcmVmKCk7Cit9CisKK3ZvaWQgQ29kZUJsb2Nr
U2V0OjphZGQoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykKK3sKKyAgICBib29sIGlz
TmV3RW50cnkgPSBtX3NldC5hZGQoY29kZUJsb2NrLmxlYWtSZWYoKSkuaXNOZXdFbnRyeTsKKyAg
ICBBU1NFUlRfVU5VU0VEKGlzTmV3RW50cnksIGlzTmV3RW50cnkpOworfQorCit2b2lkIENvZGVC
bG9ja1NldDo6Y2xlYXJNYXJrcygpCit7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0
b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0
b3IgZW5kID0gbV9zZXQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
KyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqaXRlcjsKKyAgICAgICAgY29kZUJsb2Nr
LT5tX21heUJlRXhlY3V0aW5nID0gZmFsc2U7CisgICAgICAgIGNvZGVCbG9jay0+bV92aXNpdEFn
Z3JlZ2F0ZUhhc0JlZW5DYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJsb2Nr
U2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCgpCit7CisgICAgLy8gVGhpcyBuZWVk
cyB0byBiZSBhIGZpeHBvaW50IGJlY2F1c2UgY29kZSBibG9ja3MgdGhhdCBhcmUgdW5tYXJrZWQg
bWF5CisgICAgLy8gcmVmZXIgdG8gZWFjaCBvdGhlci4gRm9yIGV4YW1wbGUsIGEgREZHIGNvZGUg
YmxvY2sgdGhhdCBpcyBvd25lZCBieQorICAgIC8vIHRoZSBHQyBtYXkgcmVmZXIgdG8gYW4gRlRM
IGZvci1lbnRyeSBjb2RlIGJsb2NrIHRoYXQgaXMgYWxzbyBvd25lZCBieQorICAgIC8vIHRoZSBH
Qy4KKyAgICBWZWN0b3I8Q29kZUJsb2NrKiwgMTY+IHRvUmVtb3ZlOworICAgIGZvciAoOzspIHsK
KyAgICAgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2lu
KCk7CisgICAgICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVu
ZCgpOworICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqaXRlcjsKKyAgICAgICAgICAgIGlmICghY29kZUJsb2Nr
LT5oYXNPbmVSZWYoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlm
IChjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoY29kZUJsb2NrKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAodG9SZW1vdmUuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHRvUmVtb3ZlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0b1JlbW92ZVtpXTsKKyAgICAgICAgICAgIG1fc2V0LnJl
bW92ZShjb2RlQmxvY2spOworICAgICAgICAgICAgY29kZUJsb2NrLT5kZXJlZigpOworICAgICAg
ICB9CisgICAgICAgIHRvUmVtb3ZlLnJlc2l6ZSgwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJs
b2NrU2V0Ojp0cmFjZU1hcmtlZChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBIYXNoU2V0
PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsKKyAgICBIYXNoU2V0
PENvZGVCbG9jayo+OjppdGVyYXRvciBlbmQgPSBtX3NldC5lbmQoKTsKKyAgICBmb3IgKDsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICppdGVy
OworICAgICAgICBpZiAoIWNvZGVCbG9jay0+bV9tYXlCZUV4ZWN1dGluZykKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBjb2RlQmxvY2stPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IENvZGVCbG9ja1NldF9oCisjZGVmaW5lIENvZGVCbG9ja1NldF9oCisKKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgU2xvdFZpc2l0b3I7CisKKy8vIENvZGVCbG9ja1Nl
dCB0cmFja3MgYWxsIENvZGVCbG9ja3MuIEV2ZXJ5IENvZGVCbG9jayBzdGFydHMgb3V0IHdpdGgg
b25lCisvLyByZWZlcmVuY2UgY29taW5nIGluIGZyb20gR0MuIFRoZSBHQyBpcyByZXNwb25zaWJs
ZSBmb3IgZnJlZWluZyBDb2RlQmxvY2tzCisvLyBvbmNlIHRoZXkgaGFzT25lUmVmKCkgYW5kIG5v
Ym9keSBpcyBydW5uaW5nIGNvZGUgZnJvbSB0aGF0IENvZGVCbG9jay4KKworY2xhc3MgQ29kZUJs
b2NrU2V0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2RlQmxvY2tTZXQpOworCitwdWJs
aWM6CisgICAgQ29kZUJsb2NrU2V0KCk7CisgICAgfkNvZGVCbG9ja1NldCgpOworICAgIAorICAg
IC8vIEFkZCBhIENvZGVCbG9jay4gVGhpcyBpcyBvbmx5IGNhbGxlZCBieSBDb2RlQmxvY2sgY29u
c3RydWN0b3JzLgorICAgIHZvaWQgYWRkKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7CisgICAgCisg
ICAgLy8gQ2xlYXIgYWxsIG1hcmsgYml0cyBhc3NvY2lhdGVkIHdpdGggREZHIGNvZGUgYmxvY2tz
LgorICAgIHZvaWQgY2xlYXJNYXJrcygpOworICAgIAorICAgIC8vIE1hcmsgYSBwb2ludGVyIHRo
YXQgbWF5IGJlIGEgQ29kZUJsb2NrIHRoYXQgYmVsb25ncyB0byB0aGUgc2V0IG9mIERGRworICAg
IC8vIGJsb2Nrcy4gVGhpcyBpcyBkZWZpbmVkIGluIENvZGVCbG9jay5oLgorICAgIHZvaWQgbWFy
ayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spOworICAgIAorICAgIC8vIERlbGV0ZSBhbGwgY29k
ZSBibG9ja3MgdGhhdCBhcmUgb25seSByZWZlcmVuY2VkIGJ5IHRoaXMgc2V0IChpLmUuIG93bmVk
CisgICAgLy8gYnkgdGhpcyBzZXQpLCBhbmQgdGhhdCBoYXZlIG5vdCBiZWVuIG1hcmtlZC4KKyAg
ICB2b2lkIGRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKCk7CisgICAgCisgICAgLy8gVHJh
Y2UgYWxsIG1hcmtlZCBjb2RlIGJsb2Nrcy4gVGhlIENvZGVCbG9jayBpcyBmcmVlIHRvIG1ha2Ug
dXNlIG9mCisgICAgLy8gbWF5QmVFeGVjdXRpbmcuCisgICAgdm9pZCB0cmFjZU1hcmtlZChTbG90
VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgbm90IGEgc2V0IG9mIFJlZlB0
cjxDb2RlQmxvY2s+IGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIGZpbmQKKyAgICAvLyBh
cmJpdHJhcnkgYm9ndXMgcG9pbnRlcnMuIEkgY291bGQgaGF2ZSB3cml0dGVuIGEgdGhpbmd5IHRo
YXQgaGFkIHBlZWsgdHlwZXMKKyAgICAvLyBhbmQgYWxsLCBidXQgdGhhdCBzZWVtZWQgbGlrZSBv
dmVya2lsbC4KKyAgICBIYXNoU2V0PENvZGVCbG9jayogPiBtX3NldDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ29kZUJsb2NrU2V0X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2aXNpb24g
MTU0OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAjaW5jbHVkZSAiQ29uc2VydmF0
aXZlUm9vdHMuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
a1NldC5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIkpTQ2VsbC5o
IgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCkBAIC0xNDAs
MTAgKzE0MCw5IEBAIHByaXZhdGU6CiB9OwogCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQo
Ci0gICAgdm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJS
b3V0aW5lcywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKKyAgICB2b2lkKiBiZWdpbiwg
dm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBDb2RlQmxvY2tT
ZXQmIGNvZGVCbG9ja3MpCiB7Ci0gICAgQ29tcG9zaXRlTWFya0hvb2s8SklUU3R1YlJvdXRpbmVT
ZXQsIERGR0NvZGVCbG9ja3M+IG1hcmtIb29rKAotICAgICAgICBqaXRTdHViUm91dGluZXMsIGRm
Z0NvZGVCbG9ja3MpOworICAgIENvbXBvc2l0ZU1hcmtIb29rPEpJVFN0dWJSb3V0aW5lU2V0LCBD
b2RlQmxvY2tTZXQ+IG1hcmtIb29rKGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7CiAgICAg
Z2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgbWFya0hvb2spOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9uIDE1
NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIERGR0NvZGVCbG9ja3M7CitjbGFzcyBDb2RlQmxvY2tTZXQ7CiBjbGFzcyBIZWFwOwogY2xh
c3MgSklUU3R1YlJvdXRpbmVTZXQ7CiBjbGFzcyBKU0NlbGw7CkBAIC00NCw3ICs0NCw3IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQpOwogICAgIHZvaWQg
YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0Jik7Ci0gICAgdm9p
ZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmLCBERkdDb2Rl
QmxvY2tzJik7CisgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJv
dXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQmKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpOwogICAg
IEpTQ2VsbCoqIHJvb3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdD
b2RlQmxvY2tzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9E
RkdDb2RlQmxvY2tzLmNwcAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKLQotI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi1ERkdDb2Rl
QmxvY2tzOjpERkdDb2RlQmxvY2tzKCkgeyB9Ci0KLURGR0NvZGVCbG9ja3M6On5ERkdDb2RlQmxv
Y2tzKCkKLXsKLSAgICBWZWN0b3I8UmVmUHRyPENvZGVCbG9jaz4sIDE2PiB0b1JlbW92ZTsKLSAg
ICAKLSAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5i
ZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRl
ciktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzSmV0dGlzb25lZCkKLSAgICAgICAgICAgIHRv
UmVtb3ZlLmFwcGVuZChhZG9wdFJlZigqaXRlcikpOwotICAgIH0KLX0KLQotdm9pZCBERkdDb2Rl
QmxvY2tzOjpqZXR0aXNvbihQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrUHRyKQotewot
ICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZGVsZXRlIGl0IG5vdzsgd2UganVzdCB3YW50IGl0cyBw
b2ludGVyLgotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJsb2NrUHRyLmxlYWtSZWYo
KTsKLSAgICAKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0gICAgCi0gICAgLy8gSXQgc2hv
dWxkIG5vdCBoYXZlIGFscmVhZHkgYmVlbiBqZXR0aXNvbmVkLgotICAgIEFTU0VSVCghY29kZUJs
b2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc0pldHRpc29uZWQpOwotCi0gICAgLy8gV2Ug
c2hvdWxkIGhhdmUgdGhpcyBibG9jayBhbHJlYWR5LgotICAgIEFTU0VSVChtX3NldC5maW5kKGNv
ZGVCbG9jaykgIT0gbV9zZXQuZW5kKCkpOwotICAgIAotICAgIGNvZGVCbG9jay0+aml0Q29kZSgp
LT5kZmdDb21tb24oKS0+aXNKZXR0aXNvbmVkID0gdHJ1ZTsKLX0KLQotdm9pZCBERkdDb2RlQmxv
Y2tzOjpjbGVhck1hcmtzKCkKLXsKLSAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJh
dG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsK
LSAgICAgICAgKCppdGVyKS0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcg
PSBmYWxzZTsKLSAgICAgICAgKCppdGVyKS0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+dmlzaXRB
Z2dyZWdhdGVIYXNCZWVuQ2FsbGVkID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIERGR0NvZGVC
bG9ja3M6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKQotewotICAgIFZlY3Rv
cjxSZWZQdHI8Q29kZUJsb2NrPiwgMTY+IHRvUmVtb3ZlOwotICAgIAotICAgIGZvciAoSGFzaFNl
dDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9z
ZXQuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVyKS0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+aXNKZXR0aXNvbmVkICYmICEoKml0ZXIpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigp
LT5tYXlCZUV4ZWN1dGluZykKLSAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChhZG9wdFJlZigq
aXRlcikpOwotICAgIH0KLX0KLQotdm9pZCBERkdDb2RlQmxvY2tzOjp0cmFjZU1hcmtlZENvZGVC
bG9ja3MoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgZm9yIChIYXNoU2V0PENvZGVCbG9j
ayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsgaXRlciAhPSBtX3NldC5lbmQoKTsg
KytpdGVyKSB7Ci0gICAgICAgIGlmICgoKml0ZXIpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5t
YXlCZUV4ZWN1dGluZykKLSAgICAgICAgICAgICgqaXRlciktPnZpc2l0QWdncmVnYXRlKHZpc2l0
b3IpOwotICAgIH0KLX0KLQotI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCi0KLXZvaWQgREZHQ29k
ZUJsb2Nrczo6amV0dGlzb24oUGFzc1JlZlB0cjxDb2RlQmxvY2s+KQotewotfQotCi0jZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmgJKHJldmlzaW9uIDE1NDk0MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpZm5kZWYgREZHQ29kZUJsb2Nrc19oCi0jZGVmaW5lIERGR0NvZGVCbG9j
a3NfaAotCi0jaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBTbG90VmlzaXRvcjsKLQotLy8gREZHQ29kZUJsb2Nr
cyBub3RpZmllcyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgYWJvdXQgb3B0aW1pemVkIGNvZGUgYmxv
Y2tzIHRoYXQKLS8vIGhhdmUgZGlmZmVyZW50IG1hcmtpbmcgYmVoYXZpb3IgZGVwZW5kaW5nIG9u
IHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIG9uIHRoZQotLy8gc3RhY2ssIGFuZCB0aGF0IG1heSBi
ZSBqZXR0aXNvbmVkLiBKZXR0aXNvbmluZyBpcyB0aGUgcHJvY2VzcyBvZiBkaXNjYXJkaW5nCi0v
LyBhIGNvZGUgYmxvY2sgYWZ0ZXIgYWxsIGNhbGxzIHRvIGl0IGhhdmUgYmVlbiB1bmxpbmtlZC4g
VGhpcyBjbGFzcyB0YWtlcyBzcGVjaWFsCi0vLyBjYXJlIHRvIGVuc3VyZSB0aGF0IGlmIHRoZXJl
IGFyZSBzdGlsbCBjYWxsIGZyYW1lcyB0aGF0IGFyZSB1c2luZyB0aGUgY29kZQotLy8gYmxvY2ss
IHRoZW4gaXQgc2hvdWxkIG5vdCBiZSBpbW1lZGlhdGVseSBkZWxldGVkLCBidXQgcmF0aGVyLCBp
dCBzaG91bGQgYmUKLS8vIGRlbGV0ZWQgb25jZSB3ZSBrbm93IHRoYXQgdGhlcmUgYXJlIG5vIGxv
bmdlciBhbnkgcmVmZXJlbmNlcyB0byBpdCBmcm9tIGFueQotLy8gY2FsbCBmcmFtZXMuIFRoaXMg
Y2xhc3MgdGFrZXMgaXRzIG5hbWUgZnJvbSB0aGUgREZHIGNvbXBpbGVyOyBvbmx5IGNvZGUgYmxv
Y2tzCi0vLyBjb21waWxlZCBieSB0aGUgREZHIG5lZWQgc3BlY2lhbCBtYXJraW5nIGJlaGF2aW9y
IGlmIHRoZXkgYXJlIG9uIHRoZSBzdGFjaywgYW5kCi0vLyBvbmx5IHRob3NlIGNvZGUgYmxvY2tz
IG1heSBiZSBqZXR0aXNvbmVkLgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi1jbGFzcyBERkdDb2Rl
QmxvY2tzIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLQotcHVibGljOgotICAgIERG
R0NvZGVCbG9ja3MoKTsKLSAgICB+REZHQ29kZUJsb2NrcygpOwotICAgIAotICAgIC8vIEluZm9y
bSB0aGUgY29sbGVjdG9yIHRoYXQgYSBjb2RlIGJsb2NrIGhhcyBiZWVuIGpldHRpc29uZWQgZm9y
bSBpdHMKLSAgICAvLyBleGVjdXRhYmxlIGFuZCBzaG91bGQgb25seSBiZSBrZXB0IGFsaXZlIGlm
IHRoZXJlIGFyZSBjYWxsIGZyYW1lcyB0aGF0IHVzZQotICAgIC8vIGl0LiBUaGlzIGlzIHR5cGlj
YWxseSBjYWxsZWQgZWl0aGVyIGZyb20gYSByZWNvbXBpbGF0aW9uIHRyaWdnZXIsIG9yIGZyb20K
LSAgICAvLyBhbiB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBhc3NvY2lhdGVkIHdpdGggYSBDb2Rl
QmxvY2sgdGhhdCBoYWQgd2VhawotICAgIC8vIHJlZmVyZW5jZXMsIHdoZXJlIHNvbWUgc3Vic2V0
IG9mIHRob3NlIHJlZmVyZW5jZXMgd2VyZSBkZWFkLgotICAgIHZvaWQgamV0dGlzb24oUGFzc1Jl
ZlB0cjxDb2RlQmxvY2s+KTsKLSAgICAKLSAgICAvLyBDbGVhciBhbGwgbWFyayBiaXRzIGFzc29j
aWF0ZWQgd2l0aCBERkcgY29kZSBibG9ja3MuCi0gICAgdm9pZCBjbGVhck1hcmtzKCk7Ci0gICAg
Ci0gICAgLy8gTWFyayBhIHBvaW50ZXIgdGhhdCBtYXkgYmUgYSBDb2RlQmxvY2sgdGhhdCBiZWxv
bmdzIHRvIHRoZSBzZXQgb2YgREZHIGNvZGUKLSAgICAvLyBibG9ja3MuIFRoaXMgaXMgZGVmaW5l
ZCBpbmxpbmUgaW4gQ29kZUJsb2NrLmgKLSAgICB2b2lkIG1hcmsodm9pZCogY2FuZGlkYXRlQ29k
ZUJsb2NrKTsKLSAgICAKLSAgICAvLyBEZWxldGUgYWxsIGpldHRpc29uZWQgY29kZSBibG9ja3Mg
dGhhdCBoYXZlIG5vdCBiZWVuIG1hcmtlZCAoaS5lLiBhcmUgbm90IHJlZmVyZW5jZWQKLSAgICAv
LyBmcm9tIGNhbGwgZnJhbWVzKS4KLSAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENv
ZGVCbG9ja3MoKTsKLSAgICAKLSAgICAvLyBUcmFjZSBhbGwgbWFya2VkIGNvZGUgYmxvY2tzIChp
LmUuIGFyZSByZWZlcmVuY2VkIGZyb20gY2FsbCBmcmFtZXMpLiBUaGUgQ29kZUJsb2NrCi0gICAg
Ly8gaXMgZnJlZSB0byBtYWtlIHVzZSBvZiBtX2RmZ0RhdGEtPmlzTWFya2VkIGFuZCBtX2RmZ0Rh
dGEtPmlzSmV0dGlzb25lZC4KLSAgICB2b2lkIHRyYWNlTWFya2VkQ29kZUJsb2NrcyhTbG90Vmlz
aXRvciYpOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0g
ICAgSGFzaFNldDxDb2RlQmxvY2sqPiBtX3NldDsKLX07Ci0jZWxzZQotY2xhc3MgREZHQ29kZUJs
b2NrcyB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAgICB2b2lk
IGpldHRpc29uKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7Ci0gICAgdm9pZCBjbGVhck1hcmtzKCkg
eyB9Ci0gICAgdm9pZCBtYXJrKHZvaWQqKSB7IH0KLSAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0
dGlzb25lZENvZGVCbG9ja3MoKSB7IH0KLSAgICB2b2lkIHRyYWNlTWFya2VkQ29kZUJsb2NrcyhT
bG90VmlzaXRvciYpIHsgfQotfTsKLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTU0OTQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1NCwxMSArMzU0LDYgQEAgYm9vbCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZSBrKQogICAg
IHJldHVybiBtX3Byb3RlY3RlZFZhbHVlcy5yZW1vdmUoay5hc0NlbGwoKSk7CiB9CiAKLXZvaWQg
SGVhcDo6amV0dGlzb25ERkdDb2RlQmxvY2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9j
aykKLXsKLSAgICBtX2RmZ0NvZGVCbG9ja3MuamV0dGlzb24oY29kZUJsb2NrKTsKLX0KLQogdm9p
ZCBIZWFwOjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcnJheUJ1ZmZlciogYnVmZmVyKQog
ewogICAgIGlmIChtX2FycmF5QnVmZmVycy5hZGRSZWZlcmVuY2UoY2VsbCwgYnVmZmVyKSkgewpA
QCAtNDU3LDExICs0NTIsMTAgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIH0KIAogICAg
IENvbnNlcnZhdGl2ZVJvb3RzIHN0YWNrUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCksICZt
X3N0b3JhZ2VTcGFjZSk7Ci0gICAgbV9kZmdDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKKyAgICBt
X2NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOwogICAgIHsKICAgICAgICAgR0NQSEFTRShHYXRoZXJT
dGFja1Jvb3RzKTsKLSAgICAgICAgc3RhY2soKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cygKLSAg
ICAgICAgICAgIHN0YWNrUm9vdHMsIG1faml0U3R1YlJvdXRpbmVzLCBtX2RmZ0NvZGVCbG9ja3Mp
OworICAgICAgICBzdGFjaygpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHN0YWNrUm9vdHMsIG1f
aml0U3R1YlJvdXRpbmVzLCBtX2NvZGVCbG9ja3MpOwogICAgIH0KIAogI2lmIEVOQUJMRShERkdf
SklUKQpAQCAtNDg1LDEyICs0NzksNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgewog
ICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIodmlzaXRvcik7CiAKLSAgICAgICAg
aWYgKG1fdm0tPmNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLnNpemUoKSkgewotICAgICAgICAgICAg
R0NQSEFTRShWaXNpdEFjdGl2ZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fdm0tPmNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLnNpemUoKTsgaSsrKQotICAg
ICAgICAgICAgICAgIG1fdm0tPmNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkW2ldLT52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKLSAgICAgICAgfQotCiAgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52
aXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CiAKICAgICAgICAgewpAQCAtNTU4LDcgKzU0
Niw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICAgICAgewogICAgICAgICAgICAgR0NQ
SEFTRShUcmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMpOwogICAgICAgICAgICAgTUFS
S19MT0dfUk9PVCh2aXNpdG9yLCAiVHJhY2UgQ29kZSBCbG9ja3MgYW5kIEpJVCBTdHViIFJvdXRp
bmVzIik7Ci0gICAgICAgICAgICBtX2RmZ0NvZGVCbG9ja3MudHJhY2VNYXJrZWRDb2RlQmxvY2tz
KHZpc2l0b3IpOworICAgICAgICAgICAgbV9jb2RlQmxvY2tzLnRyYWNlTWFya2VkKHZpc2l0b3Ip
OwogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMudHJhY2VNYXJrZWRTdHViUm91dGluZXMo
dmlzaXRvcik7CiAgICAgICAgICAgICB2aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CiAgICAgICAg
IH0KQEAgLTY4Myw4ICs2NzEsOCBAQCB2b2lkIEhlYXA6OmRlbGV0ZUFsbENvbXBpbGVkQ29kZSgp
CiAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGN1cnJlbnQpLT5jbGVh
ckNvZGVJZk5vdENvbXBpbGluZygpOwogICAgIH0KIAotICAgIG1fZGZnQ29kZUJsb2Nrcy5jbGVh
ck1hcmtzKCk7Ci0gICAgbV9kZmdDb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENv
ZGVCbG9ja3MoKTsKKyAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOworICAgIG1fY29kZUJs
b2Nrcy5kZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCgpOwogfQogCiB2b2lkIEhlYXA6OmRl
bGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCkKQEAgLTcwMSw3ICs2ODksNyBAQCB2b2lkIEhlYXA6
OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCkKICAgICAgICAgbV9jb21waWxlZENvZGUucmVt
b3ZlKGN1cnJlbnQpOwogICAgIH0KIAotICAgIG1fZGZnQ29kZUJsb2Nrcy5kZWxldGVVbm1hcmtl
ZEpldHRpc29uZWRDb2RlQmxvY2tzKCk7CisgICAgbV9jb2RlQmxvY2tzLmRlbGV0ZVVubWFya2Vk
QW5kVW5yZWZlcmVuY2VkKCk7CiAgICAgbV9qaXRTdHViUm91dGluZXMuZGVsZXRlVW5tYXJrZWRK
ZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBAQAogCiAjaW5jbHVkZSAiQXJyYXlC
dWZmZXIuaCIKICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
a1NldC5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCi0jaW5jbHVkZSAiREZHQ29kZUJsb2Nr
cy5oIgogI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgiCiAjaW5jbHVkZSAiR0NU
aHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0xNDQsOCArMTQ0
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJv
dGVjdChKU1ZhbHVlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB1bnByb3RlY3Qo
SlNWYWx1ZSk7IC8vIFRydWUgd2hlbiB0aGUgcHJvdGVjdCBjb3VudCBkcm9wcyB0byAwLgogICAg
ICAgICAKLSAgICAgICAgdm9pZCBqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUHRyPENvZGVC
bG9jaz4pOwotCiAgICAgICAgIHNpemVfdCBleHRyYVNpemUoKTsgLy8gZXh0cmEgbWVtb3J5IHVz
YWdlIG91dHNpZGUgb2YgcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBoZWFwCiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNp
emVfdCBjYXBhY2l0eSgpOwpAQCAtMjczLDcgKzI3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIEhhbmRsZVNldCBtX2hhbmRsZVNldDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9oYW5k
bGVTdGFjazsKLSAgICAgICAgREZHQ29kZUJsb2NrcyBtX2RmZ0NvZGVCbG9ja3M7CisgICAgICAg
IENvZGVCbG9ja1NldCBtX2NvZGVCbG9ja3M7CiAgICAgICAgIEpJVFN0dWJSb3V0aW5lU2V0IG1f
aml0U3R1YlJvdXRpbmVzOwogICAgICAgICBGaW5hbGl6ZXJPd25lciBtX2ZpbmFsaXplck93bmVy
OwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SlNTdGFjay5jcHAJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9KU1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsOSArOTYsOSBAQCB2
b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvCiAgICAgY29uc2VydmF0aXZl
Um9vdHMuYWRkKGJlZ2luKCksIGdldFRvcE9mU3RhY2soKSk7CiB9CiAKLXZvaWQgSlNTdGFjazo6
Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJv
b3RzLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBERkdDb2RlQmxvY2tzJiBk
ZmdDb2RlQmxvY2tzKQordm9pZCBKU1N0YWNrOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25z
ZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRT
dHViUm91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsKLSAgICBjb25zZXJ2YXRp
dmVSb290cy5hZGQoYmVnaW4oKSwgZ2V0VG9wT2ZTdGFjaygpLCBqaXRTdHViUm91dGluZXMsIGRm
Z0NvZGVCbG9ja3MpOworICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBnZXRUb3BP
ZlN0YWNrKCksIGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7CiB9CiAKIHZvaWQgSlNTdGFj
azo6cmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9KU1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0pTU3RhY2suaAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCAr
NDEsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIENvZGVCbG9ja1NldDsKICAg
ICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKLSAgICBjbGFzcyBERkdDb2RlQmxvY2tzOwogICAg
IGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKICAgICBjbGFz
cyBWTTsKQEAgLTcxLDcgKzcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH5KU1N0YWNr
KCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNl
cnZhdGl2ZVJvb3RzJik7Ci0gICAgICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29u
c2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIERGR0NvZGVCbG9ja3MmKTsKKyAg
ICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYsIEpJ
VFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0Jik7CiAKICAgICAgICAgUmVnaXN0ZXIqIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9u
LmJhc2UoKSk7IH0KICAgICAgICAgUmVnaXN0ZXIqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDIwICs5MCw2IEBAIEludHJpbnNpYyBO
YXRpdmVFeGVjdXRhYmxlOjppbnRyaW5zaWMoKSAKIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKEpJ
VCkKLS8vIFV0aWxpdHkgbWV0aG9kIHVzZWQgZm9yIGpldHRpc29uaW5nIGNvZGUgYmxvY2tzLgot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyB2b2lkIGpldHRpc29uQ29kZUJsb2NrKFZNJiB2
bSwgUmVmUHRyPFQ+JiBjb2RlQmxvY2spCi17Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCkpOwotICAgIFJlZlB0cjxUPiBjb2RlQmxvY2tUb0pldHRpc29uID0gY29kZUJs
b2NrLnJlbGVhc2UoKTsKLSAgICBjb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFQ+KGNv
ZGVCbG9ja1RvSmV0dGlzb24tPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICBjb2RlQmxvY2tU
b0pldHRpc29uLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0gICAgdm0uaGVhcC5qZXR0aXNvbkRG
R0NvZGVCbG9jayhzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4oY29kZUJsb2NrVG9KZXR0
aXNvbi5yZWxlYXNlKCkpKTsKLX0KLSNlbmRpZgotCiBjb25zdCBDbGFzc0luZm8gU2NyaXB0RXhl
Y3V0YWJsZTo6c19pbmZvID0geyAiU2NyaXB0RXhlY3V0YWJsZSIsICZFeGVjdXRhYmxlQmFzZTo6
c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNjcmlwdEV4ZWN1dGFibGUpIH07CiAK
ICNpZiBFTkFCTEUoSklUKQpAQCAtMTI1LDEyICsxMTEsNiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFi
bGU6Omluc3RhbGxDb2RlKENvZGVCCiAgICAgCiAgICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJl
ZCgpKTsKICAgICAKLSAgICBpZiAoSklUQ29kZTo6aXNKSVQoZ2VuZXJpY0NvZGVCbG9jay0+aml0
VHlwZSgpKSkgewotICAgICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgKLSAgICAg
ICAgICAgIHNpemVvZihDb2RlQmxvY2spICsgZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZSgpLT5z
aXplKCkpOwotICAgIH0gZWxzZQotICAgICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29z
dChzaXplb2YoQ29kZUJsb2NrKSk7Ci0gICAgCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kID0gZ2VuZXJpY0NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CiAgICAgCiAgICAg
UmVmUHRyPENvZGVCbG9jaz4gb2xkQ29kZUJsb2NrOwpAQCAtMzc2LDE1ICszNTYsNiBAQCBpbmxp
bmUgY29uc3QgY2hhciogc2FtcGxpbmdEZXNjcmlwdGlvbihKCiAgICAgfQogfQogCi0jaWYgRU5B
QkxFKEpJVCkKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShWTSYg
dm0pCi17Ci0gICAgamV0dGlzb25Db2RlQmxvY2sodm0sIG1fZXZhbENvZGVCbG9jayk7Ci0gICAg
bV9qaXRDb2RlRm9yQ2FsbCA9IG1fZXZhbENvZGVCbG9jay0+aml0Q29kZSgpOwotICAgIEFTU0VS
VCghbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUo
SklUKQotCiB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsKQEAgLTQyNiwxNSArMzk3LDYgQEAgSlNP
YmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheAogICAgIHJldHVybiBlcnJvci50
b0Vycm9yT2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNlKTsKIH0KIAotI2lmIEVO
QUJMRShKSVQpCi12b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUo
Vk0mIHZtKQotewotICAgIGpldHRpc29uQ29kZUJsb2NrKHZtLCBtX3Byb2dyYW1Db2RlQmxvY2sp
OwotICAgIG1faml0Q29kZUZvckNhbGwgPSBtX3Byb2dyYW1Db2RlQmxvY2stPmppdENvZGUoKTsK
LSAgICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Ci19Ci0jZW5kaWYK
LQogdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMoKQogewogI2lmIEVOQUJMRShK
SVQpCkBAIC01MTgsMjIgKzQ4MCw2IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jaWYgRU5BQkxFKEpJVCkKLXZvaWQg
RnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKFZNJiB2bSkK
LXsKLSAgICBqZXR0aXNvbkNvZGVCbG9jayh2bSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAgICBt
X2ppdENvZGVGb3JDYWxsID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5qaXRDb2RlKCk7Ci0gICAgbV9q
aXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5qaXRDb2Rl
V2l0aEFyaXR5Q2hlY2soKTsKLX0KLQotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29u
T3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChWTSYgdm0pCi17Ci0gICAgamV0dGlzb25Db2RlQmxv
Y2sodm0sIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKLSAgICBtX2ppdENvZGVGb3JDb25zdHJ1
Y3QgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+aml0Q29kZSgpOwotICAgIG1faml0Q29kZUZv
ckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmppdENv
ZGVXaXRoQXJpdHlDaGVjaygpOwotfQotI2VuZGlmCi0KIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsMTAgKzQ0NSw2IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSNpZiBFTkFCTEUoSklU
KQotICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJik7Ci0jZW5kaWYKLQogICAgIEV2
YWxDb2RlQmxvY2sqIGNvZGVCbG9jaygpCiAgICAgewogICAgICAgICByZXR1cm4gbV9ldmFsQ29k
ZUJsb2NrLmdldCgpOwpAQCAtNTA2LDEwICs1MDIsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGpldHRp
c29uT3B0aW1pemVkQ29kZShWTSYpOwotI2VuZGlmCi0KICAgICBQcm9ncmFtQ29kZUJsb2NrKiBj
b2RlQmxvY2soKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQo
KTsKQEAgLTU4MSwxMCArNTczLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3QuZ2V0KCk7CiAgICAgfQogICAgICAgICAKLSNpZiBFTkFCTEUoSklUKQot
ICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYpOwotI2VuZGlmCi0KICAg
ICBib29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
bV9jb2RlQmxvY2tGb3JDYWxsOwpAQCAtNTk1LDEwICs1ODMsNiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CiAgICAgfQogCi0jaWYgRU5BQkxFKEpJ
VCkKLSAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChWTSYpOwotI2Vu
ZGlmCi0KICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKQEAgLTYwOSwxOCArNTkzLDYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7
CiAgICAgfQogICAgICAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgamV0dGlzb25PcHRp
bWl6ZWRDb2RlRm9yKFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsK
LSAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIAotICAgICAgICAgICAgamV0dGlzb25P
cHRpbWl6ZWRDb2RlRm9yQ2FsbCh2bSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNT
RVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgICAgICBqZXR0aXNvbk9wdGlt
aXplZENvZGVGb3JDb25zdHJ1Y3Qodm0pOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0gICAg
ICAgIAogICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQogICAgIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCwxNyArMjc0LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE51bWVyaWNTdHJpbmdzIG51bWVyaWNTdHJpbmdzOwog
ICAgICAgICBEYXRlSW5zdGFuY2VDYWNoZSBkYXRlSW5zdGFuY2VDYWNoZTsKICAgICAgICAgV1RG
OjpTaW1wbGVTdGF0cyBtYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVK
SVQ7Ci0gICAgICAgIFZlY3RvcjxDb2RlQmxvY2sqPiBjb2RlQmxvY2tzQmVpbmdDb21waWxlZDsK
LSAgICAgICAgdm9pZCBzdGFydGVkQ29tcGlsaW5nKENvZGVCbG9jayogY29kZUJsb2NrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb2RlQmxvY2tzQmVpbmdDb21waWxlZC5hcHBlbmQoY29kZUJs
b2NrKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZmluaXNoZWRDb21waWxpbmcoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY29k
ZUJsb2NrLCBjb2RlQmxvY2sgPT0gY29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQubGFzdCgpKTsKLSAg
ICAgICAgICAgIGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLnJlbW92ZUxhc3QoKTsKLSAgICAgICAg
fQogCiAgICAgICAgIHZvaWQgc2V0SW5EZWZpbmVPd25Qcm9wZXJ0eShib29sIGluRGVmaW5lT3du
UHJvcGVydHkpCiAgICAgICAgIHsK
</data>
<flag name="commit-queue"
          id="232360"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210260</attachid>
            <date>2013-09-01 21:35:25 -0700</date>
            <delta_ts>2013-09-02 11:44:11 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>57630</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDEzLTA5LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZUJsb2NrOjpqZXR0aXNvbigpIHNob3VsZCBiZSBpbXBsaWNpdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNTY3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgcmlza3kg
Y2hhbmdlIGZyb20gYSBwZXJmb3JtYW5jZSBzdGFuZHBvaW50LCBidXQgSSBiZWxpZXZlIGl0J3MK
KyAgICAgICAgbmVjZXNzYXJ5LiBUaGlzIG1ha2VzIGFsbCBDb2RlQmxvY2tzIGdldCBzd2VwdCBi
eSBHQy4gTm9ib2R5IGJ1dCB0aGUgR0MKKyAgICAgICAgY2FuIGRlbGV0ZSBDb2RlQmxvY2tzIGJl
Y2F1c2UgdGhlIEdDIGFsd2F5cyBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGVtLgorICAgICAgICBP
bmNlIGEgQ29kZUJsb2NrIHJlYWNoZXMganVzdCBvbmUgcmVmZXJlbmNlIChpLmUuIHRoZSBvbmUg
ZnJvbSB0aGUgR0MpCisgICAgICAgIHRoZW4gdGhlIEdDIHdpbGwgZnJlZSBpdCBvbmx5IGlmIGl0
J3Mgbm90IG9uIHRoZSBzdGFjay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxsb3dzIG1lIHRv
IGdldCByaWQgb2YgdGhlIGpldHRpc29uaW5nIGxvZ2ljLiBXZSBuZWVkIHRoaXMgZm9yIEZUTAor
ICAgICAgICB0aWVyLXVwLiBXZWxsOyB3ZSBkb24ndCBuZWVkIGl0LCBidXQgaXQgd2lsbCBoZWxw
IHByZXZlbnQgYSBsb3Qgb2YgYnVncy4KKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRl
ZCB0byB0byByZXBsYWNlIG9uZSBjb2RlIGJsb2NrIHdpdGggYW5vdGhlciwgeW91CisgICAgICAg
IGhhZCB0byByZW1lbWJlciB0byB0ZWxsIHRoZSBHQyB0aGF0IHRoZSBwcmV2aW91cyBjb2RlIGJs
b2NrIGlzCisgICAgICAgICJqZXR0aXNvbmVkIi4gV2Ugd291bGQgbmVlZCB0byBkbyB0aGlzIHdo
ZW4gdGllcmluZyB1cCBmcm9tIERGRyB0byBGVEwKKyAgICAgICAgYW5kIHdoZW4gZGVhbGluZyB3
aXRoIERGRy10by1GVEwgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLiBUaGVyZSBhcmUgYSBsb3QKKyAg
ICAgICAgb2YgcGVybXV0YXRpb25zIGhlcmUgLSB0aWVyaW5nIHVwIHRvIHRoZSBGVEwsIE9TUiBl
bnRlcmluZyBpbnRvIHRoZSBGVEwsCisgICAgICAgIGRlY2lkaW5nIHRoYXQgYW4gT1NSIGVudHJ5
IGNvZGUgYmxvY2sgaXMgbm90IHJlbGV2YW50IGFueW1vcmUgLSBqdXN0IHRvCisgICAgICAgIG5h
bWUgYSBmZXcuIEluIGVhY2ggb2YgdGhlc2UgY2FzZXMgd2UnZCBoYXZlIHRvIGpldHRpc29uIHRo
ZSBwcmV2aW91cworICAgICAgICBjb2RlIGJsb2NrLiBJdCBzbWVsbHMgbGlrZSBhIGh1Z2Ugc291
cmNlIG9mIGZ1dHVyZSBidWdzLgorICAgICAgICAKKyAgICAgICAgU28gSSBtYWRlIGpldHRpc29u
aW5nIGltcGxpY2l0IGJ5IG1ha2luZyB0aGUgR0MgYWx3YXlzIHdhdGNoIG91dCBmb3IgYQorICAg
ICAgICBDb2RlQmxvY2sgYmVpbmcgb3duZWQgc29sZWx5IGJ5IHRoZSBHQy4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
VGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6fkNv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2Nh
bik6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6bWFyayk6CisgICAgICAgICogZGZnL0RG
R0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpDb21tb25EYXRh
KToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpDb2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1Nl
dDo6fkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6YWRkKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQpOgorICAgICAgICAqIGhlYXAvQ29kZUJsb2NrU2V0
Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAg
ICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBoZWFwL0RGR0NvZGVCbG9ja3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBoZWFw
L0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAoSlND
OjpIZWFwOjpkZWxldGVBbGxDb21waWxlZENvZGUpOgorICAgICAgICAoSlNDOjpIZWFwOjpkZWxl
dGVVbm1hcmtlZENvbXBpbGVkQ29kZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAg
ICogaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhY2s6OmdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNrLmg6Cisg
ICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhl
Y3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0wOC0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIENvZGVCbG9jayByZWZhY3RvcmluZyBicm9rZSBwcm9m
aWxlIGR1bXBpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMTY5LDMwICsxNjksMTAgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAogCiAgICAgaGVhcC9CbG9j
a0FsbG9jYXRvci5jcHAKLSAgICBoZWFwL0NvcGllZFNwYWNlLmNwcAotICAgIGhlYXAvQ29weVZp
c2l0b3IuY3BwCi0gICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKLSAgICBoZWFwL0RGR0Nv
ZGVCbG9ja3MuY3BwCi0gICAgaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCi0gICAgaGVh
cC9HQ0luY29taW5nUmVmQ291bnRlZC5oCi0gICAgaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNl
dElubGluZXMuaAotICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgKLSAgICBo
ZWFwL0dDVGhyZWFkLmNwcAotICAgIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAotICAgIGhl
YXAvSGFuZGxlU2V0LmNwcAotICAgIGhlYXAvSGFuZGxlU3RhY2suY3BwCi0gICAgaGVhcC9IZWFw
LmNwcAotICAgIGhlYXAvSGVhcFN0YXRpc3RpY3MuY3BwCi0gICAgaGVhcC9IZWFwVGltZXIuY3Bw
Ci0gICAgaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCi0gICAgaGVhcC9KSVRTdHViUm91dGlu
ZVNldC5jcHAKLSAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKLQotICAgIGhlYXAvQmxv
Y2tBbGxvY2F0b3IuY3BwCisgICAgaGVhcC9Db2RlQmxvY2tTZXQuY3BwCiAgICAgaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFwL0NvcGllZFNwYWNlLmNwcAogICAgIGhlYXAvQ29w
eVZpc2l0b3IuY3BwCi0gICAgaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAogICAgIGhlYXAvR0NUaHJl
YWQuY3BwCiAgICAgaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCiAgICAgaGVhcC9IYW5kbGVT
ZXQuY3BwCkBAIC0yMDAsNiArMTgwLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAg
ICBoZWFwL0hlYXAuY3BwCiAgICAgaGVhcC9IZWFwU3RhdGlzdGljcy5jcHAKICAgICBoZWFwL0hl
YXBUaW1lci5jcHAKKyAgICBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKICAgICBoZWFwL0pJ
VFN0dWJSb3V0aW5lU2V0LmNwcAogICAgIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNwcAogICAg
IGhlYXAvTWFya1N0YWNrLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00NDIsNiArNDQyLDggQEAgamF2
YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExW
YWx1ZUZyb21CbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291
cmNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvcGllZEJsb2NrLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGllZEJsb2Nr
SW5saW5lcy5oIFwKQEAgLTQ1Niw4ICs0NTgsNiBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaCBcCi0JU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RG
R0NvZGVCbG9ja3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBc3NlcnRpb25z
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkSW5saW5l
cy5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNTQ5NDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtODIs
MTEgKzgyLDExIEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5dGVjb2RlL1dhdGNocG9pbnQuY3BwIFwK
ICAgICBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIFwKICAgICBieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcCBcCisgICAgaGVhcC9Db2RlQmxvY2tTZXQuY3BwIFwKICAgICBo
ZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oIFwKICAgICBoZWFwL0NvcGllZFNwYWNlLmNwcCBcCiAg
ICAgaGVhcC9Db3B5VmlzaXRvci5jcHAgXAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3Bw
IFwKLSAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwIFwKICAgICBoZWFwL1dlYWsuY3BwIFwKICAg
ICBoZWFwL1dlYWtCbG9jay5jcHAgXAogICAgIGhlYXAvV2Vha0hhbmRsZU93bmVyLmNwcCBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE1NDk0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzMCwxMCArMzMwLDEwIEBACiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRHJpdmVyLmNwcCIgLz4NCiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkaXNhc3NlbWJsZXJcRGlzYXNzZW1ibGVyLmNwcCIgLz4NCiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEJsb2NrQWxsb2NhdG9yLmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXENvZGVCbG9ja1NldC5jcHAiIC8+DQogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb25zZXJ2YXRpdmVSb290cy5jcHAiIC8+DQog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb3BpZWRTcGFjZS5jcHAiIC8+DQogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb3B5VmlzaXRvci5jcHAiIC8+DQotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxERkdDb2RlQmxvY2tzLmNwcCIgLz4NCiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFkLmNwcCIgLz4NCiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVTZXQuY3BwIiAvPg0KQEAgLTY3OSw2ICs2Nzks
NyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkVudHJ5LmgiIC8+DQog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVyXERpc2Fzc2VtYmxlci5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQmxvY2tBbGxvY2F0b3IuaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvZGVCbG9ja1NldC5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29uc2VydmF0aXZlUm9vdHMuaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvcGllZEFsbG9jYXRvci5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29waWVkQmxvY2suaCIgLz4NCkBAIC02ODks
NyArNjkwLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29weVZpc2l0b3Iu
aCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvcHlWaXNpdG9ySW5saW5l
cy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29weVdvcmtMaXN0Lmgi
IC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxERkdDb2RlQmxvY2tzLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ0Fzc2VydGlvbnMuaCIgLz4NCiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFkLmgiIC8+DQogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVhZFNoYXJlZERhdGEuaCIgLz4NCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTE3OCw4ICsxNzgsNiBAQAogCQkwRjJCREM0RDE1MjI4MTg2MDBDRDg5
MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5v
ZGUuY3BwICovOyB9OwogCQkwRjJCREM0RjE1MjI4QkYzMDBDRDg5MTAgLyogREZHVmFsdWVTb3Vy
Y2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCAqLzsgfTsKIAkJMEYy
QkRDNTExNTIyOEZGRDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNTAxNTIyOEZGQTAwQ0Q4
OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovOyB9OwotCQkwRjJDNTU2RjE0NzM4RjMxMDAx
MjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3Mu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjJD
NTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5jcHAgKi87IH07CiAJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAv
KiBVbnVzZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NTk4N0YyRjE2ODI4QTdFMDAzQzJGOEQgLyogVW51c2VkUG9pbnRlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkU4OTJEMTZE
MDJCQUYwMDlFNEZEMiAvKiBERkdNaW5pZmllZElELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWlu
aWZpZWRJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJGQzc3MDE2RTEyRjZGMDAz
OEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovOyB9OwpAQCAtMzY5LDYgKzM2Nyw4IEBACiAJCTBG
RDgyRTU2MTQxREFGMDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQg
LyogREZHT1NSRW50cnkuY3BwICovOyB9OwogCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyog
REZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTg2MTQxRjNGRjEw
MDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRl
ZFR5cGUuY3BwICovOyB9OworCQkwRkQ4QTMxMzE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2Nr
U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDhBMzExMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovOyB9OworCQkwRkQ4
QTMxNDE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMxMjE3RDQzMjZDMDBDQTJDNDAgLyog
Q29kZUJsb2NrU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZEQjJDQzkxNzNEQTUyMDAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVkVHlwZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0M3
MTczREE1MUUwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDQ0ExNzNEQTUyMzAwN0Iz
QzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDODE3M0RBNTFFMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9t
QmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkRCMkNFNzE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTUxNzQ4MzBBMjAwN0Iz
QzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLzsgfTsKQEAgLTEzNTQsOCArMTM1NCw2IEBACiAJCTBG
MkJEQzRDMTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWluaWZpZWROb2RlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdNaW5pZmllZE5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJC
REM0RTE1MjI4QkU3MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsdWVTb3VyY2UuY3BwOyBwYXRoID0gZGZnL0RG
R1ZhbHVlU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDNTAx
NTIyOEZGQTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyaWFibGVFdmVudC5jcHA7IHBhdGggPSBkZmcvREZH
VmFyaWFibGVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMkM1NTZE
MTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdDb2RlQmxvY2tzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQ
aGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEQ0VQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHRENFUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRENFUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdE
Q0VQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0NzE2RDQyMDBF
MDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NTgsNiArMTU1Niw4IEBACiAJCTBGRDgyRTUyMTQx
REFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdPU1JFbnRyeS5jcHA7IHBhdGggPSBkZmcvREZHT1NSRW50cnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQg
LyogREZHT1NSRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NS
RW50cnkuaDsgcGF0aCA9IGRmZy9ERkdPU1JFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlY3VsYXRlZFR5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMxMTE3RDQzMjZDMDBDQTJDNDAgLyog
Q29kZUJsb2NrU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENv
ZGVCbG9ja1NldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhBMzEyMTdE
NDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29kZUJsb2NrU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
REIyQ0M3MTczREE1MUUwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTEFiYnJldmlhdGVkVHlwZXMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZpYXRlZFR5
cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0M4MTczREE1MUUwMDdC
M0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZUZyb21C
bG9jay5oOyBwYXRoID0gZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdXb3JrbGlzdC5jcHA7IHBh
dGggPSBkZmcvREZHV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjcxNSw2ICsyNzE1LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTE0ODE2RTE5MTU0Q0M1NkMw
MEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgKi8sCiAJCQkJMTQ4MTZFMUExNTRDQzU2QzAw
QjgwNTRDIC8qIEJsb2NrQWxsb2NhdG9yLmggKi8sCisJCQkJMEZEOEEzMTExN0Q0MzI2QzAwQ0Ey
QzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi8sCisJCQkJMEZEOEEzMTIxN0Q0MzI2QzAwQ0EyQzQw
IC8qIENvZGVCbG9ja1NldC5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMxQiAvKiBD
b25zZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIxMkVCNTU5RDAwODNCMTJCIC8q
IENvbnNlcnZhdGl2ZVJvb3RzLmggKi8sCiAJCQkJQzJFQUQyRkIxNEYwMjQ5ODAwQTRCMTU5IC8q
IENvcGllZEFsbG9jYXRvci5oICovLApAQCAtMjcyOSw4ICsyNzMxLDYgQEAKIAkJCQlDMjIzOUQx
NDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJQzIxOEQx
M0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICovLAogCQkJCTBGMTM2RDRCMTc0
QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCi0JCQkJMEYyQzU1NkQxNDczOEYyRTAwMTIx
RTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovLAotCQkJCTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmggKi8sCiAJCQkJQkNCRTJDQUQxNEU5ODVBQTAwMDU5M0FEIC8q
IEdDQXNzZXJ0aW9ucy5oICovLAogCQkJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0lu
Y29taW5nUmVmQ291bnRlZC5oICovLAogCQkJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBH
Q0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLywKQEAgLTM4OTEsNyArMzg5MSw2IEBACiAJ
CQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9i
YmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MjE3QTBCQkZEMDBBOERCODEgLyog
REZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyQzU1NkYxNDczOEYzMTAwMTIx
RTRGIC8qIERGR0NvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTREMTRDM0NE
NEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM4
QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICov
LApAQCAtMzk2NCw2ICszOTYzLDcgQEAKIAkJCQlBNzdBNDI0MzE3QTBCQkZEMDBBOERCODEgLyog
REZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAw
MkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVCb2FyZC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMTQxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9j
a1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNFIC8qIERG
R1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRTNBNjcx
NTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC00ODI1LDcgKzQ4MjUsNiBAQAogCQkJCTBGM0IzQTI3MTU0
NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3N0E0MjQxMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVy
U2V0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0RiAvKiBE
RkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlEMTZCNzJBMDgwMDVE
Rjk1QiAvKiBERkdDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMzExNzBENDBC
RjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOEIw
MTcxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNDk4Nyw2ICs0OTg2LDcgQEAKIAkJCQkxNDdGMzlENjEwN0VDMzc2MDA0MjdBNDggLyog
SlNDSlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRkNFNDBBNTFFNDZCMDAwNUYw
NjEgLyogSlNDbGFzc1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxNjE2N0JBQkVF
MDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEzMTMxN0Q0
MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEJE
NUEzMDBBM0U5MUY2MDBCQUY1OUMgLyogSlNDb250ZXh0UmVmLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3MjAyOEI2MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NUZXN0UnVubmVyVXRpbHMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0YVZpZXcu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDQsNiArMTUw
NCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1f
Y2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5kaWYK
IHsKKyAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwogICAgIHNldE51bVBhcmFtZXRl
cnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAg
ICAgaml0QWZ0ZXJXYXJtVXAoKTsKQEAgLTE1MTYsNiArMTUxNyw5IEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAgICAgbV9yYXJlRGF0YS0+bV9zd2l0Y2hK
dW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzOwogICAgICAg
ICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRh
LT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgfQorICAgIAorICAgIG1faGVhcC0+bV9j
b2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChz
aXplb2YoQ29kZUJsb2NrKSk7CiB9CiAKIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJs
b2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJv
dmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zm
c2V0KQpAQCAtMTU0NCw3ICsxNTQ4LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogbwogICAgICwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlM
ZXZlbE5vdFNldCkKICNlbmRpZgogewotICAgIG1fdm0tPnN0YXJ0ZWRDb21waWxpbmcodGhpcyk7
CisgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJlZCgpKTsKIAogICAgIEFTU0VSVChtX3NvdXJj
ZSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpKTsKQEAgLTE4NDIsNyArMTg0Niw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4
ZWN1dGFibGUqIG8KIAogICAgIGlmIChPcHRpb25zOjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkp
CiAgICAgICAgIGR1bXBCeXRlY29kZSgpOwotICAgIG1fdm0tPmZpbmlzaGVkQ29tcGlsaW5nKHRo
aXMpOworICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hlYXAtPnJl
cG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoQ29kZUJsb2NrKSArIG1faW5zdHJ1Y3Rpb25zLnNp
emUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpOwogfQogCiBDb2RlQmxvY2s6On5Db2RlQmxvY2so
KQpAQCAtMTg1MCwxMiArMTg1NSw2IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAgaWYg
KG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKICAgICAgICAgbV92bS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyLT5ub3RpZnlEZXN0cnVjdGlvbih0aGlzKTsKICAgICAKLSNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICAvLyBSZW1vdmUgbXlzZWxmIGZyb20gdGhlIHNldCBvZiBERkcgY29kZSBibG9j
a3MuIE5vdGUgdGhhdCBJIG1heSBub3QgYmUgaW4gdGhpcyBzZXQKLSAgICAvLyAoYmVjYXVzZSBJ
J20gbm90IGEgREZHIGNvZGUgYmxvY2spLCBpbiB3aGljaCBjYXNlIHRoaXMgaXMgYSBuby1vcCBh
bnl3YXkuCi0gICAgbV92bS0+aGVhcC5tX2RmZ0NvZGVCbG9ja3MubV9zZXQucmVtb3ZlKHRoaXMp
OwotI2VuZGlmCi0gICAgCiAjaWYgRU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKICAgICBk
dW1wVmFsdWVQcm9maWxlcygpOwogI2VuZGlmCkBAIC0xOTA1LDMzICsxOTA0LDI5IEBAIHZvaWQg
RXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFYKIAogdm9pZCBDb2RlQmxvY2s6OnZp
c2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotI2lmIEVOQUJMRShQQVJBTExF
TF9HQykgJiYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKCkpKSB7Ci0gICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uID0gbV9q
aXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEkgbWF5IGJlIGFza2Vk
IHRvIHNjYW4gbXlzZWxmIG1vcmUgdGhhbiBvbmNlLCBhbmQgaXQgbWF5IGV2ZW4gaGFwcGVuIGNv
bmN1cnJlbnRseS4KLSAgICAgICAgLy8gVG8gdGhpcyBlbmQsIHVzZSBhIENBUyBsb29wIHRvIGNo
ZWNrIGlmIEkndmUgYmVlbiBjYWxsZWQgYWxyZWFkeS4gT25seSBvbmUgdGhyZWFkCi0gICAgICAg
IC8vIG1heSBwcm9jZWVkIHBhc3QgdGhpcyBwb2ludCAtIHdoaWNoZXZlciBvbmUgd2lucyB0aGUg
Q0FTIHJhY2UuCi0gICAgICAgIHVuc2lnbmVkIG9sZFZhbHVlOwotICAgICAgICBkbyB7Ci0gICAg
ICAgICAgICBvbGRWYWx1ZSA9IGRmZ0NvbW1vbi0+dmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVk
OwotICAgICAgICAgICAgaWYgKG9sZFZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8gTG9va3Mg
bGlrZSBzb21lb25lIGVsc2Ugd29uISBSZXR1cm4gaW1tZWRpYXRlbHkgdG8gZW5zdXJlIHRoYXQg
d2UgZG9uJ3QKLSAgICAgICAgICAgICAgICAvLyB0cmFjZSB0aGUgc2FtZSBDb2RlQmxvY2sgY29u
Y3VycmVudGx5LiBEb2luZyBzbyBpcyBoYXphcmRvdXMgc2luY2Ugd2Ugd2lsbAotICAgICAgICAg
ICAgICAgIC8vIGJlIG11dGF0aW5nIHRoZSBzdGF0ZSBvZiBWYWx1ZVByb2ZpbGVzLCB3aGljaCBj
b250YWluIEpTVmFsdWVzLCB3aGljaCBjYW4KLSAgICAgICAgICAgICAgICAvLyBoYXZlIHdvcmQt
dGVhcmluZyBvbiAzMi1iaXQsIGxlYWRpbmcgdG8gYXdlc29tZSB0aW1pbmctZGVwZW5kZW50IGNy
YXNoZXMKLSAgICAgICAgICAgICAgICAvLyB0aGF0IGFyZSBuZWFybHkgaW1wb3NzaWJsZSB0byB0
cmFjayBkb3duLgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEFsc28gbm90
ZSB0aGF0IGl0IG11c3QgYmUgc2FmZSB0byByZXR1cm4gZWFybHkgYXMgc29vbiBhcyB3ZSBzZWUg
dGhlCi0gICAgICAgICAgICAgICAgLy8gdmFsdWUgdHJ1ZSAod2VsbCwgKHVuc2lnbmVkKTEpLCBz
aW5jZSBvbmNlIGEgR0MgdGhyZWFkIGlzIGluIHRoaXMgbWV0aG9kCi0gICAgICAgICAgICAgICAg
Ly8gYW5kIGhhcyB3b24gdGhlIENBUyByYWNlIChpLmUuIHdhcyByZXNwb25zaWJsZSBmb3Igc2V0
dGluZyB0aGUgdmFsdWUgdHJ1ZSkKLSAgICAgICAgICAgICAgICAvLyBpdCB3aWxsIGRlZmluaXRl
bHkgY29tcGxldGUgdGhlIHJlc3Qgb2YgdGhpcyBtZXRob2QgYmVmb3JlIGRlY2xhcmluZwotICAg
ICAgICAgICAgICAgIC8vIHRlcm1pbmF0aW9uLgotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZk
ZmdDb21tb24tPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZCwgMCwgMSkpOwotICAgIH0KLSNl
bmRpZiAvLyBFTkFCTEUoUEFSQUxMRUxfR0MpICYmIEVOQUJMRShERkdfSklUKQorI2lmIEVOQUJM
RShQQVJBTExFTF9HQykKKyAgICAvLyBJIG1heSBiZSBhc2tlZCB0byBzY2FuIG15c2VsZiBtb3Jl
IHRoYW4gb25jZSwgYW5kIGl0IG1heSBldmVuIGhhcHBlbiBjb25jdXJyZW50bHkuCisgICAgLy8g
VG8gdGhpcyBlbmQsIHVzZSBhIENBUyBsb29wIHRvIGNoZWNrIGlmIEkndmUgYmVlbiBjYWxsZWQg
YWxyZWFkeS4gT25seSBvbmUgdGhyZWFkCisgICAgLy8gbWF5IHByb2NlZWQgcGFzdCB0aGlzIHBv
aW50IC0gd2hpY2hldmVyIG9uZSB3aW5zIHRoZSBDQVMgcmFjZS4KKyAgICB1bnNpZ25lZCBvbGRW
YWx1ZTsKKyAgICBkbyB7CisgICAgICAgIG9sZFZhbHVlID0gbV92aXNpdEFnZ3JlZ2F0ZUhhc0Jl
ZW5DYWxsZWQ7CisgICAgICAgIGlmIChvbGRWYWx1ZSkgeworICAgICAgICAgICAgLy8gTG9va3Mg
bGlrZSBzb21lb25lIGVsc2Ugd29uISBSZXR1cm4gaW1tZWRpYXRlbHkgdG8gZW5zdXJlIHRoYXQg
d2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIHRyYWNlIHRoZSBzYW1lIENvZGVCbG9jayBjb25jdXJy
ZW50bHkuIERvaW5nIHNvIGlzIGhhemFyZG91cyBzaW5jZSB3ZSB3aWxsCisgICAgICAgICAgICAv
LyBiZSBtdXRhdGluZyB0aGUgc3RhdGUgb2YgVmFsdWVQcm9maWxlcywgd2hpY2ggY29udGFpbiBK
U1ZhbHVlcywgd2hpY2ggY2FuCisgICAgICAgICAgICAvLyBoYXZlIHdvcmQtdGVhcmluZyBvbiAz
Mi1iaXQsIGxlYWRpbmcgdG8gYXdlc29tZSB0aW1pbmctZGVwZW5kZW50IGNyYXNoZXMKKyAgICAg
ICAgICAgIC8vIHRoYXQgYXJlIG5lYXJseSBpbXBvc3NpYmxlIHRvIHRyYWNrIGRvd24uCisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEFsc28gbm90ZSB0aGF0IGl0IG11c3QgYmUgc2FmZSB0
byByZXR1cm4gZWFybHkgYXMgc29vbiBhcyB3ZSBzZWUgdGhlCisgICAgICAgICAgICAvLyB2YWx1
ZSB0cnVlICh3ZWxsLCAodW5zaWduZWQpMSksIHNpbmNlIG9uY2UgYSBHQyB0aHJlYWQgaXMgaW4g
dGhpcyBtZXRob2QKKyAgICAgICAgICAgIC8vIGFuZCBoYXMgd29uIHRoZSBDQVMgcmFjZSAoaS5l
LiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIHZhbHVlIHRydWUpCisgICAgICAgICAg
ICAvLyBpdCB3aWxsIGRlZmluaXRlbHkgY29tcGxldGUgdGhlIHJlc3Qgb2YgdGhpcyBtZXRob2Qg
YmVmb3JlIGRlY2xhcmluZworICAgICAgICAgICAgLy8gdGVybWluYXRpb24uCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IHdoaWxlICghV1RGOjp3ZWFrQ29tcGFyZUFuZFN3
YXAoJm1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkLCAwLCAxKSk7CisjZW5kaWYgLy8gRU5B
QkxFKFBBUkFMTEVMX0dDKQogICAgIAogICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCiAgICAgICAg
IG1fYWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwpAQCAtMjc0MCwyOCArMjcz
NSwxNCBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5jdGlvbkNvZGVCbG9jazo6CiAKIHZvaWQg
Q29kZUJsb2NrOjpqZXR0aXNvbigpCiB7CisgICAgRGVmZXJHQyBkZWZlckdDKCptX2hlYXApOwog
ICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CiAgICAgQVNT
RVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7CiAgICAgYWx0ZXJuYXRpdmUoKS0+b3B0aW1pemVB
ZnRlcldhcm1VcCgpOwogICAgIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKICAgICBpZiAoREZH
OjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0YUxvZygiSmV0dGlzb25pbmcg
IiwgKnRoaXMsICIuXG4iKTsKLSAgICBqZXR0aXNvbkltcGwoKTsKLX0KLQotdm9pZCBQcm9ncmFt
Q29kZUJsb2NrOjpqZXR0aXNvbkltcGwoKQotewotICAgIHN0YXRpY19jYXN0PFByb2dyYW1FeGVj
dXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKnZtKCkp
OwotfQotCi12b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29uSW1wbCgpCi17Ci0gICAgc3RhdGlj
X2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1p
emVkQ29kZSgqdm0oKSk7Ci19Ci0KLXZvaWQgRnVuY3Rpb25Db2RlQmxvY2s6OmpldHRpc29uSW1w
bCgpCi17Ci0gICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRh
YmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoKnZtKCksIG1faXNDb25zdHJ1Y3RvciA/
IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CisgICAgYWx0ZXJuYXRpdmUoKS0+aW5z
dGFsbCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDExIEBA
CiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ2FsbFJldHVybk9mZnNldFRv
Qnl0ZWNvZGVPZmZzZXQuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCisjaW5jbHVkZSAi
Q29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNsdWRlICJDb21wYWN0
SklUQ29kZU1hcC5oIgotI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKICNpbmNsdWRlICJERkdD
b21tb24uaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAiREZHRXhpdFBy
b2ZpbGUuaCIKQEAgLTgzLDcgKzgzLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIERG
R0NvZGVCbG9ja3M7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiBjbGFzcyBSZXBhdGNoQnVmZmVyOwpAQCAtMjczLDE0ICsyNzIsMTIgQEAgcHVibGljOgog
ICAgIAogICAgIHZvaWQgc2V0SklUQ29kZShQYXNzUmVmUHRyPEpJVENvZGU+IGNvZGUsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjb2RlV2l0aEFyaXR5Q2hlY2spCiAgICAgeworICAgICAgICBBU1NF
UlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOworICAgICAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVt
b3J5Q29zdChjb2RlLT5zaXplKCkpOwogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIGlzIHBy
b2JhYmx5IG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgbG9jayB3aWxsIGFsc28gZG8gc29tZXRoaW5n
IHNpbWlsYXIsIGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCiAgICAgICAgIG1faml0Q29k
ZSA9IGNvZGU7CiAgICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNoZWNrID0gY29kZVdpdGhBcml0
eUNoZWNrOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICBpZiAoSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKEpJVENvZGU6OmppdFR5cGVGb3IobV9qaXRDb2RlKSkpCi0gICAgICAgICAgICBt
X3ZtLT5oZWFwLm1fZGZnQ29kZUJsb2Nrcy5tX3NldC5hZGQodGhpcyk7Ci0jZW5kaWYKICAgICB9
CiAgICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBqaXRDb2RlKCkgeyByZXR1cm4gbV9qaXRDb2RlOyB9
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGppdENvZGVXaXRoQXJpdHlDaGVjaygpIHsgcmV0
dXJuIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOyB9CkBAIC05NjEsOSArOTU4LDYgQEAgcHVibGlj
OgogICAgIGJvb2wgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkOyAvLyBJbml0aWFsaXpl
ZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KICAgICAKIHByb3RlY3RlZDoKLSNpZiBFTkFCTEUoSklU
KQotICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKSA9IDA7Ci0jZW5kaWYKICAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogICAgIHZpcnR1YWwg
dm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOwogCkBAIC05NzQsNyArOTY4LDcgQEAgcHJv
dGVjdGVkOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIERGR0NvZGVCbG9j
a3M7CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKICAgICAKICAgICB2b2lkIG5vdGlj
ZUluY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lKTsKICAgICAKQEAgLTEwMTcsMTcg
KzEwMTEsMTYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBib29sIHNob3Vs
ZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkKICAgICB7Ci0gICAgICAgIC8v
IE51bGwgbV9kZmdEYXRhIG1lYW5zIHRoYXQgdGhpcyBpcyBhIGJhc2VsaW5lIEpJVCBDb2RlQmxv
Y2suIEJhc2VsaW5lIEpJVAotICAgICAgICAvLyBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8gYmUg
amV0dGlzb25lZCB3aGVuIHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBnbwotICAgICAgICAvLyBzdGFs
ZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cyBzY2FubmVkLCB3ZSBjYW4gYXNz
dW1lIHRoYXQKLSAgICAgICAgLy8gdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KKyAgICAgICAg
Ly8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0IG5lZWQgdG8g
YmUgamV0dGlzb25lZCB3aGVuCisgICAgICAgIC8vIHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBnbyBz
dGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cworICAgICAgICAvLyBzY2Fu
bmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4KICAgICAg
ICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgICAgIC8vIEZvciBzaW1wbGljaXR5LCB3ZSBkb24ndCBhdHRl
bXB0IHRvIGpldHRpc29uIGNvZGUgYmxvY2tzIGR1cmluZyBHQyBpZgogICAgICAgICAvLyB0aGV5
IGFyZSBleGVjdXRpbmcuIEluc3RlYWQgd2Ugc3Ryb25nbHkgbWFyayB0aGVpciB3ZWFrIHJlZmVy
ZW5jZXMgdG8KICAgICAgICAgLy8gYWxsb3cgdGhlbSB0byBjb250aW51ZSB0byBleGVjdXRlIHNv
dW5kbHkuCi0gICAgICAgIGlmIChtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5tYXlCZUV4ZWN1dGlu
ZykKKyAgICAgICAgaWYgKG1fbWF5QmVFeGVjdXRpbmcpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgICAgICBpZiAoT3B0aW9uczo6Zm9yY2VERkdDb2RlQmxvY2tMaXZlbmVzcygpKQpA
QCAtMTA2Nyw2ICsxMDYwLDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pc1N0cmljdE1vZGU7
CiAgICAgYm9vbCBtX25lZWRzQWN0aXZhdGlvbjsKKyAgICBib29sIG1fbWF5QmVFeGVjdXRpbmc7
CisgICAgdWludDhfdCBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsKIAogICAgIFJlZlB0
cjxTb3VyY2VQcm92aWRlcj4gbV9zb3VyY2U7CiAgICAgdW5zaWduZWQgbV9zb3VyY2VPZmZzZXQ7
CkBAIC0xMTg2LDcgKzExODEsNiBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoSklUKQogcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKTsKICAgICB2aXJ0dWFsIENvZGVC
bG9jayogcmVwbGFjZW1lbnQoKTsKICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNh
cGFiaWxpdHlMZXZlbEludGVybmFsKCk7CiAjZW5kaWYKQEAgLTEyMDksNyArMTIwMyw2IEBAIHB1
YmxpYzoKICAgICAKICNpZiBFTkFCTEUoSklUKQogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9p
ZCBqZXR0aXNvbkltcGwoKTsKICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsK
ICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFs
KCk7CiAjZW5kaWYKQEAgLTEyMzIsNyArMTIyNSw2IEBAIHB1YmxpYzoKICAgICAKICNpZiBFTkFC
TEUoSklUKQogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKTsKICAg
ICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICB2aXJ0dWFsIERGRzo6Q2Fw
YWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7CiAjZW5kaWYKQEAgLTEyOTEs
OCArMTI4Myw3IEBAIGlubGluZSBKU1ZhbHVlIEV4ZWNTdGF0ZTo6YXJndW1lbnRBZnRlckMKICAg
ICByZXR1cm4gdGhpc1tjb2RlQmxvY2soKS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShhcmd1
bWVudCldLmpzVmFsdWUoKTsKIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQotaW5saW5lIHZvaWQg
REZHQ29kZUJsb2Nrczo6bWFyayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spCitpbmxpbmUgdm9p
ZCBDb2RlQmxvY2tTZXQ6Om1hcmsodm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKQogewogICAgIC8v
IFdlIGhhdmUgdG8gY2hlY2sgZm9yIDAgYW5kIC0xIGJlY2F1c2UgdGhvc2UgYXJlIHVzZWQgYnkg
dGhlIEhhc2hNYXAgYXMgbWFya2Vycy4KICAgICB1aW50cHRyX3QgdmFsdWUgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oY2FuZGlkYXRlQ29kZUJsb2NrKTsKQEAgLTEzMDcsOSArMTI5OCw4
IEBAIGlubGluZSB2b2lkIERGR0NvZGVCbG9ja3M6Om1hcmsodm9pZCogY2EKICAgICBpZiAoaXRl
ciA9PSBtX3NldC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgICgqaXRlciktPm1f
aml0Q29kZS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nID0gdHJ1ZTsKKyAgICAoKml0ZXIp
LT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKIH0KLSNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJl
dmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMSArNjYsNyBAQCBzdHJ1Y3QgV2Vha1JlZmVyZW5j
ZVRyYW5zaXRpb24gewogY2xhc3MgQ29tbW9uRGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6Ci0gICAgQ29tbW9uRGF0YSgpCi0gICAgICAgIDogbWF5
QmVFeGVjdXRpbmcoZmFsc2UpCi0gICAgICAgICwgaXNKZXR0aXNvbmVkKGZhbHNlKQotICAgIHsK
LSAgICB9CisgICAgQ29tbW9uRGF0YSgpIHsgfQogICAgIAogICAgIHZvaWQgbm90aWZ5Q29tcGls
aW5nU3RydWN0dXJlVHJhbnNpdGlvbihQbGFuJiwgQ29kZUJsb2NrKiwgTm9kZSopOwogICAgIApA
QCAtODEsMTEgKzc3LDggQEAgcHVibGljOgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxs
PiA+IHdlYWtSZWZlcmVuY2VzOwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6Q29tcGlsYXRp
b24+IGNvbXBpbGF0aW9uOwotICAgIGJvb2wgbWF5QmVFeGVjdXRpbmc7Ci0gICAgYm9vbCBpc0pl
dHRpc29uZWQ7CiAgICAgYm9vbCBsaXZlbmVzc0hhc0JlZW5Qcm92ZWQ7IC8vIEluaXRpYWxpemVk
IGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgogICAgIGJvb2wgYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1h
cmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCi0gICAgdW5zaWduZWQg
dmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOyAvLyBVbnNpZ25lZCB0byBtYWtlIGl0IHdvcmsg
c2VhbWxlc3NseSB3aXRoIHRoZSBicm9hZGVzdCBzZXQgb2YgQ0FTIGltcGxlbWVudGF0aW9ucy4K
IH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgorCisjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK0NvZGVCbG9ja1NldDo6Q29kZUJsb2NrU2V0KCkgeyB9CisKK0NvZGVCbG9ja1NldDo6
fkNvZGVCbG9ja1NldCgpCit7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRl
ciA9IG1fc2V0LmJlZ2luKCk7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgZW5k
ID0gbV9zZXQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAg
ICgqaXRlciktPmRlcmVmKCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0OjphZGQoUGFzc1JlZlB0
cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykKK3sKKyAgICBib29sIGlzTmV3RW50cnkgPSBtX3NldC5h
ZGQoY29kZUJsb2NrLmxlYWtSZWYoKSkuaXNOZXdFbnRyeTsKKyAgICBBU1NFUlRfVU5VU0VEKGlz
TmV3RW50cnksIGlzTmV3RW50cnkpOworfQorCit2b2lkIENvZGVCbG9ja1NldDo6Y2xlYXJNYXJr
cygpCit7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJl
Z2luKCk7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgZW5kID0gbV9zZXQuZW5k
KCk7CisgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSAqaXRlcjsKKyAgICAgICAgY29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5n
ID0gZmFsc2U7CisgICAgICAgIGNvZGVCbG9jay0+bV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxs
ZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtl
ZEFuZFVucmVmZXJlbmNlZCgpCit7CisgICAgLy8gVGhpcyBuZWVkcyB0byBiZSBhIGZpeHBvaW50
IGJlY2F1c2UgY29kZSBibG9ja3MgdGhhdCBhcmUgdW5tYXJrZWQgbWF5CisgICAgLy8gcmVmZXIg
dG8gZWFjaCBvdGhlci4gRm9yIGV4YW1wbGUsIGEgREZHIGNvZGUgYmxvY2sgdGhhdCBpcyBvd25l
ZCBieQorICAgIC8vIHRoZSBHQyBtYXkgcmVmZXIgdG8gYW4gRlRMIGZvci1lbnRyeSBjb2RlIGJs
b2NrIHRoYXQgaXMgYWxzbyBvd25lZCBieQorICAgIC8vIHRoZSBHQy4KKyAgICBWZWN0b3I8Q29k
ZUJsb2NrKiwgMTY+IHRvUmVtb3ZlOworICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFzaFNldDxD
b2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgICAgIEhhc2hT
ZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSAqaXRlcjsKKyAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNPbmVSZWYoKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPm1fbWF5
QmVFeGVjdXRpbmcpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0b1Jl
bW92ZS5hcHBlbmQoY29kZUJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodG9SZW1vdmUu
aXNFbXB0eSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHRvUmVtb3ZlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSB0b1JlbW92ZVtpXTsKKyAgICAgICAgICAgIG1fc2V0LnJlbW92ZShjb2RlQmxvY2spOwor
ICAgICAgICAgICAgY29kZUJsb2NrLT5kZXJlZigpOworICAgICAgICB9CisgICAgICAgIHRvUmVt
b3ZlLnJlc2l6ZSgwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0Ojp0cmFjZU1hcmtl
ZChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVy
YXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsKKyAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVy
YXRvciBlbmQgPSBtX3NldC5lbmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikg
eworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICppdGVyOworICAgICAgICBpZiAoIWNv
ZGVCbG9jay0+bV9tYXlCZUV4ZWN1dGluZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBjb2RlQmxvY2stPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOworICAgIH0KK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9j
a1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9j
a1NldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJs
b2NrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENvZGVCbG9ja1NldF9oCisj
ZGVmaW5lIENvZGVCbG9ja1NldF9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2Nr
OworY2xhc3MgU2xvdFZpc2l0b3I7CisKKy8vIENvZGVCbG9ja1NldCB0cmFja3MgYWxsIENvZGVC
bG9ja3MuIEV2ZXJ5IENvZGVCbG9jayBzdGFydHMgb3V0IHdpdGggb25lCisvLyByZWZlcmVuY2Ug
Y29taW5nIGluIGZyb20gR0MuIFRoZSBHQyBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBDb2Rl
QmxvY2tzCisvLyBvbmNlIHRoZXkgaGFzT25lUmVmKCkgYW5kIG5vYm9keSBpcyBydW5uaW5nIGNv
ZGUgZnJvbSB0aGF0IENvZGVCbG9jay4KKworY2xhc3MgQ29kZUJsb2NrU2V0IHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDb2RlQmxvY2tTZXQpOworCitwdWJsaWM6CisgICAgQ29kZUJsb2Nr
U2V0KCk7CisgICAgfkNvZGVCbG9ja1NldCgpOworICAgIAorICAgIC8vIEFkZCBhIENvZGVCbG9j
ay4gVGhpcyBpcyBvbmx5IGNhbGxlZCBieSBDb2RlQmxvY2sgY29uc3RydWN0b3JzLgorICAgIHZv
aWQgYWRkKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7CisgICAgCisgICAgLy8gQ2xlYXIgYWxsIG1h
cmsgYml0cyBhc3NvY2lhdGVkIHdpdGggREZHIGNvZGUgYmxvY2tzLgorICAgIHZvaWQgY2xlYXJN
YXJrcygpOworICAgIAorICAgIC8vIE1hcmsgYSBwb2ludGVyIHRoYXQgbWF5IGJlIGEgQ29kZUJs
b2NrIHRoYXQgYmVsb25ncyB0byB0aGUgc2V0IG9mIERGRworICAgIC8vIGJsb2Nrcy4gVGhpcyBp
cyBkZWZpbmVkIGluIENvZGVCbG9jay5oLgorICAgIHZvaWQgbWFyayh2b2lkKiBjYW5kaWRhdGVD
b2RlQmxvY2spOworICAgIAorICAgIC8vIERlbGV0ZSBhbGwgY29kZSBibG9ja3MgdGhhdCBhcmUg
b25seSByZWZlcmVuY2VkIGJ5IHRoaXMgc2V0IChpLmUuIG93bmVkCisgICAgLy8gYnkgdGhpcyBz
ZXQpLCBhbmQgdGhhdCBoYXZlIG5vdCBiZWVuIG1hcmtlZC4KKyAgICB2b2lkIGRlbGV0ZVVubWFy
a2VkQW5kVW5yZWZlcmVuY2VkKCk7CisgICAgCisgICAgLy8gVHJhY2UgYWxsIG1hcmtlZCBjb2Rl
IGJsb2Nrcy4gVGhlIENvZGVCbG9jayBpcyBmcmVlIHRvIG1ha2UgdXNlIG9mCisgICAgLy8gbWF5
QmVFeGVjdXRpbmcuCisgICAgdm9pZCB0cmFjZU1hcmtlZChTbG90VmlzaXRvciYpOworCitwcml2
YXRlOgorICAgIC8vIFRoaXMgaXMgbm90IGEgc2V0IG9mIFJlZlB0cjxDb2RlQmxvY2s+IGJlY2F1
c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIGZpbmQKKyAgICAvLyBhcmJpdHJhcnkgYm9ndXMgcG9p
bnRlcnMuIEkgY291bGQgaGF2ZSB3cml0dGVuIGEgdGhpbmd5IHRoYXQgaGFkIHBlZWsgdHlwZXMK
KyAgICAvLyBhbmQgYWxsLCBidXQgdGhhdCBzZWVtZWQgbGlrZSBvdmVya2lsbC4KKyAgICBIYXNo
U2V0PENvZGVCbG9jayogPiBtX3NldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gQ29kZUJsb2NrU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
Q29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw5ICsyNyw5IEBACiAjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKIAogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2luY2x1ZGUg
IkNvcGllZFNwYWNlLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiREZHQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCkBAIC0xNDAsMTAgKzE0MCw5IEBAIHByaXZh
dGU6CiB9OwogCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjphZGQoCi0gICAgdm9pZCogYmVnaW4s
IHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgREZHQ29kZUJs
b2NrcyYgZGZnQ29kZUJsb2NrcykKKyAgICB2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHVi
Um91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9ja3MpCiB7
Ci0gICAgQ29tcG9zaXRlTWFya0hvb2s8SklUU3R1YlJvdXRpbmVTZXQsIERGR0NvZGVCbG9ja3M+
IG1hcmtIb29rKAotICAgICAgICBqaXRTdHViUm91dGluZXMsIGRmZ0NvZGVCbG9ja3MpOworICAg
IENvbXBvc2l0ZU1hcmtIb29rPEpJVFN0dWJSb3V0aW5lU2V0LCBDb2RlQmxvY2tTZXQ+IG1hcmtI
b29rKGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7CiAgICAgZ2VuZXJpY0FkZFNwYW4oYmVn
aW4sIGVuZCwgbWFya0hvb2spOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIERGR0NvZGVCbG9ja3M7
CitjbGFzcyBDb2RlQmxvY2tTZXQ7CiBjbGFzcyBIZWFwOwogY2xhc3MgSklUU3R1YlJvdXRpbmVT
ZXQ7CiBjbGFzcyBKU0NlbGw7CkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQpOwogICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2
b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0Jik7Ci0gICAgdm9pZCBhZGQodm9pZCogYmVnaW4s
IHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmLCBERkdDb2RlQmxvY2tzJik7CisgICAgdm9p
ZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmLCBDb2RlQmxv
Y2tTZXQmKTsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpOwogICAgIEpTQ2VsbCoqIHJvb3RzKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAko
cmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJs
b2Nrcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKLQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1
ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi1ERkdDb2RlQmxvY2tzOjpERkdDb2RlQmxv
Y2tzKCkgeyB9Ci0KLURGR0NvZGVCbG9ja3M6On5ERkdDb2RlQmxvY2tzKCkKLXsKLSAgICBWZWN0
b3I8UmVmUHRyPENvZGVCbG9jaz4sIDE2PiB0b1JlbW92ZTsKLSAgICAKLSAgICBmb3IgKEhhc2hT
ZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOyBpdGVyICE9IG1f
c2V0LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRlciktPmppdENvZGUoKS0+ZGZn
Q29tbW9uKCktPmlzSmV0dGlzb25lZCkKLSAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChhZG9w
dFJlZigqaXRlcikpOwotICAgIH0KLX0KLQotdm9pZCBERkdDb2RlQmxvY2tzOjpqZXR0aXNvbihQ
YXNzUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrUHRyKQotewotICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gZGVsZXRlIGl0IG5vdzsgd2UganVzdCB3YW50IGl0cyBwb2ludGVyLgotICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gY29kZUJsb2NrUHRyLmxlYWtSZWYoKTsKLSAgICAKLSAgICBBU1NF
UlQoY29kZUJsb2NrKTsKLSAgICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVC
bG9jay0+aml0VHlwZSgpKSk7Ci0gICAgCi0gICAgLy8gSXQgc2hvdWxkIG5vdCBoYXZlIGFscmVh
ZHkgYmVlbiBqZXR0aXNvbmVkLgotICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlKCktPmRm
Z0NvbW1vbigpLT5pc0pldHRpc29uZWQpOwotCi0gICAgLy8gV2Ugc2hvdWxkIGhhdmUgdGhpcyBi
bG9jayBhbHJlYWR5LgotICAgIEFTU0VSVChtX3NldC5maW5kKGNvZGVCbG9jaykgIT0gbV9zZXQu
ZW5kKCkpOwotICAgIAotICAgIGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNK
ZXR0aXNvbmVkID0gdHJ1ZTsKLX0KLQotdm9pZCBERkdDb2RlQmxvY2tzOjpjbGVhck1hcmtzKCkK
LXsKLSAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5i
ZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgKCppdGVyKS0+
aml0Q29kZSgpLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcgPSBmYWxzZTsKLSAgICAgICAg
KCppdGVyKS0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+dmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2Fs
bGVkID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIERGR0NvZGVCbG9ja3M6OmRlbGV0ZVVubWFy
a2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKQotewotICAgIFZlY3RvcjxSZWZQdHI8Q29kZUJsb2Nr
PiwgMTY+IHRvUmVtb3ZlOwotICAgIAotICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRl
cmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICBpZiAoKCppdGVyKS0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNKZXR0aXNv
bmVkICYmICEoKml0ZXIpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5tYXlCZUV4ZWN1dGluZykK
LSAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChhZG9wdFJlZigqaXRlcikpOwotICAgIH0KLX0K
LQotdm9pZCBERkdDb2RlQmxvY2tzOjp0cmFjZU1hcmtlZENvZGVCbG9ja3MoU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCi17Ci0gICAgZm9yIChIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVy
ID0gbV9zZXQuYmVnaW4oKTsgaXRlciAhPSBtX3NldC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAg
IGlmICgoKml0ZXIpLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5tYXlCZUV4ZWN1dGluZykKLSAg
ICAgICAgICAgICgqaXRlciktPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwotICAgIH0KLX0KLQot
I2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCi0KLXZvaWQgREZHQ29kZUJsb2Nrczo6amV0dGlzb24o
UGFzc1JlZlB0cjxDb2RlQmxvY2s+KQotewotfQotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0RGR0NvZGVCbG9ja3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9ERkdDb2RlQmxvY2tzLmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgREZHQ29kZUJsb2Nrc19oCi0jZGVmaW5lIERGR0NvZGVCbG9ja3NfaAotCi0jaW5jbHVkZSA8
d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7
Ci1jbGFzcyBTbG90VmlzaXRvcjsKLQotLy8gREZHQ29kZUJsb2NrcyBub3RpZmllcyB0aGUgZ2Fy
YmFnZSBjb2xsZWN0b3IgYWJvdXQgb3B0aW1pemVkIGNvZGUgYmxvY2tzIHRoYXQKLS8vIGhhdmUg
ZGlmZmVyZW50IG1hcmtpbmcgYmVoYXZpb3IgZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IHRo
ZXkgYXJlIG9uIHRoZQotLy8gc3RhY2ssIGFuZCB0aGF0IG1heSBiZSBqZXR0aXNvbmVkLiBKZXR0
aXNvbmluZyBpcyB0aGUgcHJvY2VzcyBvZiBkaXNjYXJkaW5nCi0vLyBhIGNvZGUgYmxvY2sgYWZ0
ZXIgYWxsIGNhbGxzIHRvIGl0IGhhdmUgYmVlbiB1bmxpbmtlZC4gVGhpcyBjbGFzcyB0YWtlcyBz
cGVjaWFsCi0vLyBjYXJlIHRvIGVuc3VyZSB0aGF0IGlmIHRoZXJlIGFyZSBzdGlsbCBjYWxsIGZy
YW1lcyB0aGF0IGFyZSB1c2luZyB0aGUgY29kZQotLy8gYmxvY2ssIHRoZW4gaXQgc2hvdWxkIG5v
dCBiZSBpbW1lZGlhdGVseSBkZWxldGVkLCBidXQgcmF0aGVyLCBpdCBzaG91bGQgYmUKLS8vIGRl
bGV0ZWQgb25jZSB3ZSBrbm93IHRoYXQgdGhlcmUgYXJlIG5vIGxvbmdlciBhbnkgcmVmZXJlbmNl
cyB0byBpdCBmcm9tIGFueQotLy8gY2FsbCBmcmFtZXMuIFRoaXMgY2xhc3MgdGFrZXMgaXRzIG5h
bWUgZnJvbSB0aGUgREZHIGNvbXBpbGVyOyBvbmx5IGNvZGUgYmxvY2tzCi0vLyBjb21waWxlZCBi
eSB0aGUgREZHIG5lZWQgc3BlY2lhbCBtYXJraW5nIGJlaGF2aW9yIGlmIHRoZXkgYXJlIG9uIHRo
ZSBzdGFjaywgYW5kCi0vLyBvbmx5IHRob3NlIGNvZGUgYmxvY2tzIG1heSBiZSBqZXR0aXNvbmVk
LgotCi0jaWYgRU5BQkxFKERGR19KSVQpCi1jbGFzcyBERkdDb2RlQmxvY2tzIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLQotcHVibGljOgotICAgIERGR0NvZGVCbG9ja3MoKTsKLSAg
ICB+REZHQ29kZUJsb2NrcygpOwotICAgIAotICAgIC8vIEluZm9ybSB0aGUgY29sbGVjdG9yIHRo
YXQgYSBjb2RlIGJsb2NrIGhhcyBiZWVuIGpldHRpc29uZWQgZm9ybSBpdHMKLSAgICAvLyBleGVj
dXRhYmxlIGFuZCBzaG91bGQgb25seSBiZSBrZXB0IGFsaXZlIGlmIHRoZXJlIGFyZSBjYWxsIGZy
YW1lcyB0aGF0IHVzZQotICAgIC8vIGl0LiBUaGlzIGlzIHR5cGljYWxseSBjYWxsZWQgZWl0aGVy
IGZyb20gYSByZWNvbXBpbGF0aW9uIHRyaWdnZXIsIG9yIGZyb20KLSAgICAvLyBhbiB1bmNvbmRp
dGlvbmFsIGZpbmFsaXplciBhc3NvY2lhdGVkIHdpdGggYSBDb2RlQmxvY2sgdGhhdCBoYWQgd2Vh
awotICAgIC8vIHJlZmVyZW5jZXMsIHdoZXJlIHNvbWUgc3Vic2V0IG9mIHRob3NlIHJlZmVyZW5j
ZXMgd2VyZSBkZWFkLgotICAgIHZvaWQgamV0dGlzb24oUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsK
LSAgICAKLSAgICAvLyBDbGVhciBhbGwgbWFyayBiaXRzIGFzc29jaWF0ZWQgd2l0aCBERkcgY29k
ZSBibG9ja3MuCi0gICAgdm9pZCBjbGVhck1hcmtzKCk7Ci0gICAgCi0gICAgLy8gTWFyayBhIHBv
aW50ZXIgdGhhdCBtYXkgYmUgYSBDb2RlQmxvY2sgdGhhdCBiZWxvbmdzIHRvIHRoZSBzZXQgb2Yg
REZHIGNvZGUKLSAgICAvLyBibG9ja3MuIFRoaXMgaXMgZGVmaW5lZCBpbmxpbmUgaW4gQ29kZUJs
b2NrLmgKLSAgICB2b2lkIG1hcmsodm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKTsKLSAgICAKLSAg
ICAvLyBEZWxldGUgYWxsIGpldHRpc29uZWQgY29kZSBibG9ja3MgdGhhdCBoYXZlIG5vdCBiZWVu
IG1hcmtlZCAoaS5lLiBhcmUgbm90IHJlZmVyZW5jZWQKLSAgICAvLyBmcm9tIGNhbGwgZnJhbWVz
KS4KLSAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKLSAgICAK
LSAgICAvLyBUcmFjZSBhbGwgbWFya2VkIGNvZGUgYmxvY2tzIChpLmUuIGFyZSByZWZlcmVuY2Vk
IGZyb20gY2FsbCBmcmFtZXMpLiBUaGUgQ29kZUJsb2NrCi0gICAgLy8gaXMgZnJlZSB0byBtYWtl
IHVzZSBvZiBtX2RmZ0RhdGEtPmlzTWFya2VkIGFuZCBtX2RmZ0RhdGEtPmlzSmV0dGlzb25lZC4K
LSAgICB2b2lkIHRyYWNlTWFya2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOwotCi1wcml2YXRl
OgotICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7Ci0gICAgCi0gICAgSGFzaFNldDxDb2RlQmxv
Y2sqPiBtX3NldDsKLX07Ci0jZWxzZQotY2xhc3MgREZHQ29kZUJsb2NrcyB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAgICB2b2lkIGpldHRpc29uKFBhc3NSZWZQ
dHI8Q29kZUJsb2NrPik7Ci0gICAgdm9pZCBjbGVhck1hcmtzKCkgeyB9Ci0gICAgdm9pZCBtYXJr
KHZvaWQqKSB7IH0KLSAgICB2b2lkIGRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3Mo
KSB7IH0KLSAgICB2b2lkIHRyYWNlTWFya2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpIHsgfQot
fTsKLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1NCwxMSArMzU0LDYg
QEAgYm9vbCBIZWFwOjp1bnByb3RlY3QoSlNWYWx1ZSBrKQogICAgIHJldHVybiBtX3Byb3RlY3Rl
ZFZhbHVlcy5yZW1vdmUoay5hc0NlbGwoKSk7CiB9CiAKLXZvaWQgSGVhcDo6amV0dGlzb25ERkdD
b2RlQmxvY2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykKLXsKLSAgICBtX2RmZ0Nv
ZGVCbG9ja3MuamV0dGlzb24oY29kZUJsb2NrKTsKLX0KLQogdm9pZCBIZWFwOjphZGRSZWZlcmVu
Y2UoSlNDZWxsKiBjZWxsLCBBcnJheUJ1ZmZlciogYnVmZmVyKQogewogICAgIGlmIChtX2FycmF5
QnVmZmVycy5hZGRSZWZlcmVuY2UoY2VsbCwgYnVmZmVyKSkgewpAQCAtNDU3LDExICs0NTIsMTAg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIH0KIAogICAgIENvbnNlcnZhdGl2ZVJvb3Rz
IHN0YWNrUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCksICZtX3N0b3JhZ2VTcGFjZSk7Ci0g
ICAgbV9kZmdDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKKyAgICBtX2NvZGVCbG9ja3MuY2xlYXJN
YXJrcygpOwogICAgIHsKICAgICAgICAgR0NQSEFTRShHYXRoZXJTdGFja1Jvb3RzKTsKLSAgICAg
ICAgc3RhY2soKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cygKLSAgICAgICAgICAgIHN0YWNrUm9v
dHMsIG1faml0U3R1YlJvdXRpbmVzLCBtX2RmZ0NvZGVCbG9ja3MpOworICAgICAgICBzdGFjaygp
LmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHN0YWNrUm9vdHMsIG1faml0U3R1YlJvdXRpbmVzLCBt
X2NvZGVCbG9ja3MpOwogICAgIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtNDg1LDEyICs0
NzksNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgewogICAgICAgICBQYXJhbGxlbE1v
ZGVFbmFibGVyIGVuYWJsZXIodmlzaXRvcik7CiAKLSAgICAgICAgaWYgKG1fdm0tPmNvZGVCbG9j
a3NCZWluZ0NvbXBpbGVkLnNpemUoKSkgewotICAgICAgICAgICAgR0NQSEFTRShWaXNpdEFjdGl2
ZUNvZGVCbG9jayk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdm0tPmNv
ZGVCbG9ja3NCZWluZ0NvbXBpbGVkLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgICAgIG1fdm0t
PmNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkW2ldLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLSAg
ICAgICAgfQotCiAgICAgICAgIG1fdm0tPnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5j
ZXModmlzaXRvcik7CiAKICAgICAgICAgewpAQCAtNTU4LDcgKzU0Niw3IEBAIHZvaWQgSGVhcDo6
bWFya1Jvb3RzKCkKICAgICAgICAgewogICAgICAgICAgICAgR0NQSEFTRShUcmFjZUNvZGVCbG9j
a3NBbmRKSVRTdHViUm91dGluZXMpOwogICAgICAgICAgICAgTUFSS19MT0dfUk9PVCh2aXNpdG9y
LCAiVHJhY2UgQ29kZSBCbG9ja3MgYW5kIEpJVCBTdHViIFJvdXRpbmVzIik7Ci0gICAgICAgICAg
ICBtX2RmZ0NvZGVCbG9ja3MudHJhY2VNYXJrZWRDb2RlQmxvY2tzKHZpc2l0b3IpOworICAgICAg
ICAgICAgbV9jb2RlQmxvY2tzLnRyYWNlTWFya2VkKHZpc2l0b3IpOwogICAgICAgICAgICAgbV9q
aXRTdHViUm91dGluZXMudHJhY2VNYXJrZWRTdHViUm91dGluZXModmlzaXRvcik7CiAgICAgICAg
ICAgICB2aXNpdG9yLmRvbmF0ZUFuZERyYWluKCk7CiAgICAgICAgIH0KQEAgLTY4Myw4ICs2NzEs
OCBAQCB2b2lkIEhlYXA6OmRlbGV0ZUFsbENvbXBpbGVkQ29kZSgpCiAgICAgICAgIHN0YXRpY19j
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGN1cnJlbnQpLT5jbGVhckNvZGVJZk5vdENvbXBpbGlu
ZygpOwogICAgIH0KIAotICAgIG1fZGZnQ29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7Ci0gICAgbV9k
ZmdDb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAgICBt
X2NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOworICAgIG1fY29kZUJsb2Nrcy5kZWxldGVVbm1hcmtl
ZEFuZFVucmVmZXJlbmNlZCgpOwogfQogCiB2b2lkIEhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGls
ZWRDb2RlKCkKQEAgLTcwMSw3ICs2ODksNyBAQCB2b2lkIEhlYXA6OmRlbGV0ZVVubWFya2VkQ29t
cGlsZWRDb2RlKCkKICAgICAgICAgbV9jb21waWxlZENvZGUucmVtb3ZlKGN1cnJlbnQpOwogICAg
IH0KIAotICAgIG1fZGZnQ29kZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxv
Y2tzKCk7CisgICAgbV9jb2RlQmxvY2tzLmRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKCk7
CiAgICAgbV9qaXRTdHViUm91dGluZXMuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRp
bmVzKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1
NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMjQsOCArMjQsOCBAQAogCiAjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRl
ICJCbG9ja0FsbG9jYXRvci5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2luY2x1ZGUg
IkNvcHlWaXNpdG9yLmgiCi0jaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIkdD
SW5jb21pbmdSZWZDb3VudGVkU2V0LmgiCiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgi
CiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCkBAIC0xNDQsOCArMTQ0LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgcHJvdGVjdChKU1ZhbHVlKTsKICAg
ICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCB1bnByb3RlY3QoSlNWYWx1ZSk7IC8vIFRydWUg
d2hlbiB0aGUgcHJvdGVjdCBjb3VudCBkcm9wcyB0byAwLgogICAgICAgICAKLSAgICAgICAgdm9p
ZCBqZXR0aXNvbkRGR0NvZGVCbG9jayhQYXNzUmVmUHRyPENvZGVCbG9jaz4pOwotCiAgICAgICAg
IHNpemVfdCBleHRyYVNpemUoKTsgLy8gZXh0cmEgbWVtb3J5IHVzYWdlIG91dHNpZGUgb2YgcGFn
ZXMgYWxsb2NhdGVkIGJ5IHRoZSBoZWFwCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVf
dCBzaXplKCk7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBjYXBhY2l0eSgpOwpA
QCAtMjczLDcgKzI3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEhhbmRsZVNldCBt
X2hhbmRsZVNldDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKLSAgICAgICAg
REZHQ29kZUJsb2NrcyBtX2RmZ0NvZGVCbG9ja3M7CisgICAgICAgIENvZGVCbG9ja1NldCBtX2Nv
ZGVCbG9ja3M7CiAgICAgICAgIEpJVFN0dWJSb3V0aW5lU2V0IG1faml0U3R1YlJvdXRpbmVzOwog
ICAgICAgICBGaW5hbGl6ZXJPd25lciBtX2ZpbmFsaXplck93bmVyOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAJKHJldmlz
aW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsOSArOTYsOSBAQCB2b2lkIEpTU3RhY2s6OmdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKENvCiAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCks
IGdldFRvcE9mU3RhY2soKSk7CiB9CiAKLXZvaWQgSlNTdGFjazo6Z2F0aGVyQ29uc2VydmF0aXZl
Um9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91dGlu
ZVNldCYgaml0U3R1YlJvdXRpbmVzLCBERkdDb2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tzKQordm9p
ZCBKU1N0YWNrOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29u
c2VydmF0aXZlUm9vdHMsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIENvZGVC
bG9ja1NldCYgY29kZUJsb2NrcykKIHsKLSAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4o
KSwgZ2V0VG9wT2ZTdGFjaygpLCBqaXRTdHViUm91dGluZXMsIGRmZ0NvZGVCbG9ja3MpOworICAg
IGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBnZXRUb3BPZlN0YWNrKCksIGppdFN0dWJS
b3V0aW5lcywgY29kZUJsb2Nrcyk7CiB9CiAKIHZvaWQgSlNTdGFjazo6cmVsZWFzZUV4Y2Vzc0Nh
cGFjaXR5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3Rh
Y2suaAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0pTU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOCBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorICAgIGNsYXNzIENvZGVCbG9ja1NldDsKICAgICBjbGFzcyBDb25zZXJ2YXRp
dmVSb290czsKLSAgICBjbGFzcyBERkdDb2RlQmxvY2tzOwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsK
ICAgICBjbGFzcyBKSVRTdHViUm91dGluZVNldDsKICAgICBjbGFzcyBWTTsKQEAgLTcxLDcgKzcx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH5KU1N0YWNrKCk7CiAgICAgICAgIAogICAg
ICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0g
ICAgICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBK
SVRTdHViUm91dGluZVNldCYsIERGR0NvZGVCbG9ja3MmKTsKKyAgICAgICAgdm9pZCBnYXRoZXJD
b25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYsIEpJVFN0dWJSb3V0aW5lU2V0Jiwg
Q29kZUJsb2NrU2V0Jik7CiAKICAgICAgICAgUmVnaXN0ZXIqIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7IH0KICAgICAg
ICAgUmVnaXN0ZXIqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTU0OTQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkwLDIwICs5MCw2IEBAIEludHJpbnNpYyBOYXRpdmVFeGVjdXRhYmxlOjpp
bnRyaW5zaWMoKSAKIH0KICNlbmRpZgogCi0jaWYgRU5BQkxFKEpJVCkKLS8vIFV0aWxpdHkgbWV0
aG9kIHVzZWQgZm9yIGpldHRpc29uaW5nIGNvZGUgYmxvY2tzLgotdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLXN0YXRpYyB2b2lkIGpldHRpc29uQ29kZUJsb2NrKFZNJiB2bSwgUmVmUHRyPFQ+JiBjb2Rl
QmxvY2spCi17Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2st
PmppdFR5cGUoKSkpOwotICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwotICAg
IFJlZlB0cjxUPiBjb2RlQmxvY2tUb0pldHRpc29uID0gY29kZUJsb2NrLnJlbGVhc2UoKTsKLSAg
ICBjb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFQ+KGNvZGVCbG9ja1RvSmV0dGlzb24t
PnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICBjb2RlQmxvY2tUb0pldHRpc29uLT51bmxpbmtJ
bmNvbWluZ0NhbGxzKCk7Ci0gICAgdm0uaGVhcC5qZXR0aXNvbkRGR0NvZGVCbG9jayhzdGF0aWNf
cG9pbnRlcl9jYXN0PENvZGVCbG9jaz4oY29kZUJsb2NrVG9KZXR0aXNvbi5yZWxlYXNlKCkpKTsK
LX0KLSNlbmRpZgotCiBjb25zdCBDbGFzc0luZm8gU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvID0g
eyAiU2NyaXB0RXhlY3V0YWJsZSIsICZFeGVjdXRhYmxlQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKFNjcmlwdEV4ZWN1dGFibGUpIH07CiAKICNpZiBFTkFCTEUoSklUKQpA
QCAtMTI1LDEyICsxMTEsNiBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENv
ZGVCCiAgICAgCiAgICAgQVNTRVJUKHZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKICAgICAKLSAgICBp
ZiAoSklUQ29kZTo6aXNKSVQoZ2VuZXJpY0NvZGVCbG9jay0+aml0VHlwZSgpKSkgewotICAgICAg
ICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdCgKLSAgICAgICAgICAgIHNpemVvZihDb2Rl
QmxvY2spICsgZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZSgpLT5zaXplKCkpOwotICAgIH0gZWxz
ZQotICAgICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoQ29kZUJsb2Nr
KSk7Ci0gICAgCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gZ2VuZXJpY0NvZGVC
bG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CiAgICAgCiAgICAgUmVmUHRyPENvZGVCbG9jaz4g
b2xkQ29kZUJsb2NrOwpAQCAtMzc2LDE1ICszNTYsNiBAQCBpbmxpbmUgY29uc3QgY2hhciogc2Ft
cGxpbmdEZXNjcmlwdGlvbihKCiAgICAgfQogfQogCi0jaWYgRU5BQkxFKEpJVCkKLXZvaWQgRXZh
bEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShWTSYgdm0pCi17Ci0gICAgamV0dGlz
b25Db2RlQmxvY2sodm0sIG1fZXZhbENvZGVCbG9jayk7Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbCA9
IG1fZXZhbENvZGVCbG9jay0+aml0Q29kZSgpOwotICAgIEFTU0VSVCghbV9qaXRDb2RlRm9yQ2Fs
bFdpdGhBcml0eUNoZWNrKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCiB2b2lkIEV2YWxF
eGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1
dGFibGUqPihjZWxsKTsKQEAgLTQyNiwxNSArMzk3LDYgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVj
dXRhYmxlOjpjaGVja1N5bnRheAogICAgIHJldHVybiBlcnJvci50b0Vycm9yT2JqZWN0KGxleGlj
YWxHbG9iYWxPYmplY3QsIG1fc291cmNlKTsKIH0KIAotI2lmIEVOQUJMRShKSVQpCi12b2lkIFBy
b2dyYW1FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mIHZtKQotewotICAgIGpl
dHRpc29uQ29kZUJsb2NrKHZtLCBtX3Byb2dyYW1Db2RlQmxvY2spOwotICAgIG1faml0Q29kZUZv
ckNhbGwgPSBtX3Byb2dyYW1Db2RlQmxvY2stPmppdENvZGUoKTsKLSAgICBBU1NFUlQoIW1faml0
Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Ci19Ci0jZW5kaWYKLQogdm9pZCBQcm9ncmFtRXhl
Y3V0YWJsZTo6dW5saW5rQ2FsbHMoKQogewogI2lmIEVOQUJMRShKSVQpCkBAIC01MTgsMjIgKzQ4
MCw2IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi0jaWYgRU5BQkxFKEpJVCkKLXZvaWQgRnVuY3Rpb25FeGVjdXRhYmxl
OjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKFZNJiB2bSkKLXsKLSAgICBqZXR0aXNvbkNv
ZGVCbG9jayh2bSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAgICBtX2ppdENvZGVGb3JDYWxsID0g
bV9jb2RlQmxvY2tGb3JDYWxsLT5qaXRDb2RlKCk7Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhB
cml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsK
LX0KLQotdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNv
bnN0cnVjdChWTSYgdm0pCi17Ci0gICAgamV0dGlzb25Db2RlQmxvY2sodm0sIG1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0KTsKLSAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC0+aml0Q29kZSgpOwotICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0
eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmppdENvZGVXaXRoQXJpdHlDaGVjaygp
OwotfQotI2VuZGlmCi0KIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24g
MTU0OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NDUsMTAgKzQ0NSw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgamV0dGlz
b25PcHRpbWl6ZWRDb2RlKFZNJik7Ci0jZW5kaWYKLQogICAgIEV2YWxDb2RlQmxvY2sqIGNvZGVC
bG9jaygpCiAgICAgewogICAgICAgICByZXR1cm4gbV9ldmFsQ29kZUJsb2NrLmdldCgpOwpAQCAt
NTA2LDEwICs1MDIsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShW
TSYpOwotI2VuZGlmCi0KICAgICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2soKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKTsKQEAgLTU4MSwxMCArNTcz
LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0
KCk7CiAgICAgfQogICAgICAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgamV0dGlzb25P
cHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYpOwotI2VuZGlmCi0KICAgICBib29sIGlzR2VuZXJhdGVk
Rm9yQ2FsbCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDYWxs
OwpAQCAtNTk1LDEwICs1ODMsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9j
a0ZvckNhbGwuZ2V0KCk7CiAgICAgfQogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGpldHRp
c29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChWTSYpOwotI2VuZGlmCi0KICAgICBib29sIGlz
R2VuZXJhdGVkRm9yQ29uc3RydWN0KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdDsKQEAgLTYwOSwxOCArNTkzLDYgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7CiAgICAgfQogICAgICAgICAK
LSNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKFZNJiB2
bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgaWYgKGtpbmQg
PT0gQ29kZUZvckNhbGwpIAotICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2Fs
bCh2bSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZv
ckNvbnN0cnVjdCk7Ci0gICAgICAgICAgICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1
Y3Qodm0pOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0gICAgICAgIAogICAgIGJvb2wgaXNH
ZW5lcmF0ZWRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgIHsKICAgICAgICAg
aWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCwxNyArMjc0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIE51bWVyaWNTdHJpbmdzIG51bWVyaWNTdHJpbmdzOwogICAgICAgICBEYXRlSW5zdGFu
Y2VDYWNoZSBkYXRlSW5zdGFuY2VDYWNoZTsKICAgICAgICAgV1RGOjpTaW1wbGVTdGF0cyBtYWNo
aW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVXb3JkRm9yQmFzZWxpbmVKSVQ7Ci0gICAgICAgIFZlY3Rv
cjxDb2RlQmxvY2sqPiBjb2RlQmxvY2tzQmVpbmdDb21waWxlZDsKLSAgICAgICAgdm9pZCBzdGFy
dGVkQ29tcGlsaW5nKENvZGVCbG9jayogY29kZUJsb2NrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBjb2RlQmxvY2tzQmVpbmdDb21waWxlZC5hcHBlbmQoY29kZUJsb2NrKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgZmluaXNoZWRDb21waWxpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2sg
PT0gY29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQubGFzdCgpKTsKLSAgICAgICAgICAgIGNvZGVCbG9j
a3NCZWluZ0NvbXBpbGVkLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgfQogCiAgICAgICAgIHZvaWQg
c2V0SW5EZWZpbmVPd25Qcm9wZXJ0eShib29sIGluRGVmaW5lT3duUHJvcGVydHkpCiAgICAgICAg
IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210303</attachid>
            <date>2013-09-02 11:44:11 -0700</date>
            <delta_ts>2013-09-02 21:52:01 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>60272</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDEzLTA5LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZUJsb2NrOjpqZXR0aXNvbigpIHNob3VsZCBiZSBpbXBsaWNpdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNTY3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgcmlza3kg
Y2hhbmdlIGZyb20gYSBwZXJmb3JtYW5jZSBzdGFuZHBvaW50LCBidXQgSSBiZWxpZXZlIGl0J3MK
KyAgICAgICAgbmVjZXNzYXJ5LiBUaGlzIG1ha2VzIGFsbCBDb2RlQmxvY2tzIGdldCBzd2VwdCBi
eSBHQy4gTm9ib2R5IGJ1dCB0aGUgR0MKKyAgICAgICAgY2FuIGRlbGV0ZSBDb2RlQmxvY2tzIGJl
Y2F1c2UgdGhlIEdDIGFsd2F5cyBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGVtLgorICAgICAgICBP
bmNlIGEgQ29kZUJsb2NrIHJlYWNoZXMganVzdCBvbmUgcmVmZXJlbmNlIChpLmUuIHRoZSBvbmUg
ZnJvbSB0aGUgR0MpCisgICAgICAgIHRoZW4gdGhlIEdDIHdpbGwgZnJlZSBpdCBvbmx5IGlmIGl0
J3Mgbm90IG9uIHRoZSBzdGFjay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxsb3dzIG1lIHRv
IGdldCByaWQgb2YgdGhlIGpldHRpc29uaW5nIGxvZ2ljLiBXZSBuZWVkIHRoaXMgZm9yIEZUTAor
ICAgICAgICB0aWVyLXVwLiBXZWxsOyB3ZSBkb24ndCBuZWVkIGl0LCBidXQgaXQgd2lsbCBoZWxw
IHByZXZlbnQgYSBsb3Qgb2YgYnVncy4KKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRl
ZCB0byB0byByZXBsYWNlIG9uZSBjb2RlIGJsb2NrIHdpdGggYW5vdGhlciwgeW91CisgICAgICAg
IGhhZCB0byByZW1lbWJlciB0byB0ZWxsIHRoZSBHQyB0aGF0IHRoZSBwcmV2aW91cyBjb2RlIGJs
b2NrIGlzCisgICAgICAgICJqZXR0aXNvbmVkIi4gV2Ugd291bGQgbmVlZCB0byBkbyB0aGlzIHdo
ZW4gdGllcmluZyB1cCBmcm9tIERGRyB0byBGVEwKKyAgICAgICAgYW5kIHdoZW4gZGVhbGluZyB3
aXRoIERGRy10by1GVEwgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLiBUaGVyZSBhcmUgYSBsb3QKKyAg
ICAgICAgb2YgcGVybXV0YXRpb25zIGhlcmUgLSB0aWVyaW5nIHVwIHRvIHRoZSBGVEwsIE9TUiBl
bnRlcmluZyBpbnRvIHRoZSBGVEwsCisgICAgICAgIGRlY2lkaW5nIHRoYXQgYW4gT1NSIGVudHJ5
IGNvZGUgYmxvY2sgaXMgbm90IHJlbGV2YW50IGFueW1vcmUgLSBqdXN0IHRvCisgICAgICAgIG5h
bWUgYSBmZXcuIEluIGVhY2ggb2YgdGhlc2UgY2FzZXMgd2UnZCBoYXZlIHRvIGpldHRpc29uIHRo
ZSBwcmV2aW91cworICAgICAgICBjb2RlIGJsb2NrLiBJdCBzbWVsbHMgbGlrZSBhIGh1Z2Ugc291
cmNlIG9mIGZ1dHVyZSBidWdzLgorICAgICAgICAKKyAgICAgICAgU28gSSBtYWRlIGpldHRpc29u
aW5nIGltcGxpY2l0IGJ5IG1ha2luZyB0aGUgR0MgYWx3YXlzIHdhdGNoIG91dCBmb3IgYQorICAg
ICAgICBDb2RlQmxvY2sgYmVpbmcgb3duZWQgc29sZWx5IGJ5IHRoZSBHQy4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgY2hhbmdlIGhhcyBzb21lIHNtYWxsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9u
cy4gSlNCZW5jaC9nb29nbGUKKyAgICAgICAgc2hvd3MgYSB+OSUgcmVncmVzc2lvbiBiZWNhdXNl
IGl0IEdDJ3MgbW9yZSBmcmVxdWVudGx5LiBIb3dldmVyLCB0aGF0CisgICAgICAgIHJlZ3Jlc3Np
b24gaXMgbm90IGR1ZSB0byB0aGUgamV0dGlzb24gcmVmYWN0b3JpbmcgLSBpbnN0ZWFkIGl0J3Mg
ZHVlIHRvCisgICAgICAgIHRoZSBmYWN0IHRoYXQgdGhpcyBjaGFuZ2UgYWxzbyBtYWtlcyB1cyBt
b3JlIHByZWNpc2VseSB0cmFjayBDb2RlQmxvY2sKKyAgICAgICAgbWVtb3J5IGZvb3RwcmludC4g
UHJldmlvdXNseSwgd2UgaWdub3JlZCB0aGUgc2l6ZSBvZiB0aGUgYnl0ZWNvZGUgc3RyZWFtLgor
ICAgICAgICBOb3cgd2UgZG9uJ3QgaWdub3JlIGl0IGFueXdheS4gVGhpcyBjYXVzZXMgc29tZSBi
ZW5jaG1hcmtzIHRvIEdDIG1vcmUKKyAgICAgICAgZnJlcXVlbnRseS4gSXQncyBhIGJ1ZyB0byBo
YXZlIHRoZSBHQyBpZ25vcmUgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YKKyAgICAgICAgQ29kZUJs
b2NrcywgYW5kIGlmIHRoYXQgYnVnIGNhdXNlcyBzb21lIGJlbmNobWFyayB0byBydW4gYSBiaXQg
ZmFzdGVyCisgICAgICAgIHdoaWxlIHVzaW5nIGEgYml0IG1vcmUgbWVtb3J5LCB0aGVuIGl0J3Mg
c3RpbGwgYSBidWcgYW5kIHdlIHNob3VsZCBzdGlsbAorICAgICAgICBmaXggaXQuIFRoZXJlIGFy
ZSBubyBvdGhlciBwZXJmb3JtYW5jZSBjaGFuZ2VzIGR1ZSB0byB0aGlzIGNoYW5nZS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6fkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRKSVRDb2RlKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVy
aW5nU2Nhbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6bWFyayk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpDb21t
b25EYXRhKToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2tTZXQ6OkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9ja1NldDo6fkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6YWRk
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1hcmtzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQpOgorICAgICAgICAqIGhlYXAvQ29kZUJs
b2NrU2V0Lmg6IEFkZGVkLgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgor
ICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRkKToKKyAgICAgICAgKiBoZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBoZWFwL0RGR0NvZGVCbG9ja3MuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAg
ICAoSlNDOjpIZWFwOjpkZWxldGVBbGxDb21waWxlZENvZGUpOgorICAgICAgICAoSlNDOjpIZWFw
OjpkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6Cisg
ICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHA6CisgICAgICAgIChKU0M6OkpTU3RhY2s6
OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9KU1N0YWNr
Lmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2Ny
aXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxMy0wOC0zMCAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIENvZGVCbG9jayByZWZhY3RvcmluZyBicm9r
ZSBwcm9maWxlIGR1bXBpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDMwICsxNjksMTAgQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1NPVVJDRVMKICAgICBkaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAogCiAgICAgaGVh
cC9CbG9ja0FsbG9jYXRvci5jcHAKLSAgICBoZWFwL0NvcGllZFNwYWNlLmNwcAotICAgIGhlYXAv
Q29weVZpc2l0b3IuY3BwCi0gICAgaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKLSAgICBoZWFw
L0RGR0NvZGVCbG9ja3MuY3BwCi0gICAgaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZFNldC5oCi0g
ICAgaGVhcC9HQ0luY29taW5nUmVmQ291bnRlZC5oCi0gICAgaGVhcC9HQ0luY29taW5nUmVmQ291
bnRlZFNldElubGluZXMuaAotICAgIGhlYXAvR0NJbmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmgK
LSAgICBoZWFwL0dDVGhyZWFkLmNwcAotICAgIGhlYXAvR0NUaHJlYWRTaGFyZWREYXRhLmNwcAot
ICAgIGhlYXAvSGFuZGxlU2V0LmNwcAotICAgIGhlYXAvSGFuZGxlU3RhY2suY3BwCi0gICAgaGVh
cC9IZWFwLmNwcAotICAgIGhlYXAvSGVhcFN0YXRpc3RpY3MuY3BwCi0gICAgaGVhcC9IZWFwVGlt
ZXIuY3BwCi0gICAgaGVhcC9JbmNyZW1lbnRhbFN3ZWVwZXIuY3BwCi0gICAgaGVhcC9KSVRTdHVi
Um91dGluZVNldC5jcHAKLSAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5jcHAKLQotICAgIGhl
YXAvQmxvY2tBbGxvY2F0b3IuY3BwCisgICAgaGVhcC9Db2RlQmxvY2tTZXQuY3BwCiAgICAgaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5jcHAKICAgICBoZWFwL0NvcGllZFNwYWNlLmNwcAogICAgIGhl
YXAvQ29weVZpc2l0b3IuY3BwCi0gICAgaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAogICAgIGhlYXAv
R0NUaHJlYWQuY3BwCiAgICAgaGVhcC9HQ1RocmVhZFNoYXJlZERhdGEuY3BwCiAgICAgaGVhcC9I
YW5kbGVTZXQuY3BwCkBAIC0yMDAsNiArMTgwLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBoZWFwL0hlYXAuY3BwCiAgICAgaGVhcC9IZWFwU3RhdGlzdGljcy5jcHAKICAgICBo
ZWFwL0hlYXBUaW1lci5jcHAKKyAgICBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAKICAgICBo
ZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAogICAgIGhlYXAvTWFjaGluZVN0YWNrTWFya2VyLmNw
cAogICAgIGhlYXAvTWFya1N0YWNrLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC00NDIsNiArNDQyLDgg
QEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExWYWx1ZUZyb21CbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZh
bHVlU291cmNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJj
ZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQ29waWVkQWxsb2NhdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0NvcGllZEJsb2NrLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcGll
ZEJsb2NrSW5saW5lcy5oIFwKQEAgLTQ1Niw4ICs0NTgsNiBAQCBqYXZhc2NyaXB0Y29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RlZmVyR0MuaCBcCi0JU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAgXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0RGR0NvZGVCbG9ja3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NBc3Nl
cnRpb25zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3Vu
dGVkLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDSW5jb21pbmdSZWZDb3VudGVk
SW5saW5lcy5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNTQ5
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpA
QCAtODIsMTEgKzgyLDExIEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5dGVjb2RlL1dhdGNocG9pbnQu
Y3BwIFwKICAgICBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIFwKICAgICBieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBcCisgICAgaGVhcC9Db2RlQmxvY2tTZXQuY3BwIFwK
ICAgICBoZWFwL0NvcGllZFNwYWNlSW5saW5lcy5oIFwKICAgICBoZWFwL0NvcGllZFNwYWNlLmNw
cCBcCiAgICAgaGVhcC9Db3B5VmlzaXRvci5jcHAgXAogICAgIGhlYXAvQ29uc2VydmF0aXZlUm9v
dHMuY3BwIFwKLSAgICBoZWFwL0RGR0NvZGVCbG9ja3MuY3BwIFwKICAgICBoZWFwL1dlYWsuY3Bw
IFwKICAgICBoZWFwL1dlYWtCbG9jay5jcHAgXAogICAgIGhlYXAvV2Vha0hhbmRsZU93bmVyLmNw
cCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9u
IDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzMCwxMCArMzMwLDEw
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRHJpdmVyLmNwcCIgLz4NCiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkaXNhc3NlbWJsZXJcRGlzYXNzZW1ibGVyLmNwcCIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEJsb2NrQWxsb2NhdG9yLmNwcCIg
Lz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXENvZGVCbG9ja1NldC5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb25zZXJ2YXRpdmVSb290cy5jcHAi
IC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb3BpZWRTcGFjZS5jcHAiIC8+
DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb3B5VmlzaXRvci5jcHAiIC8+DQot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxERkdDb2RlQmxvY2tzLmNwcCIgLz4NCiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFkLmNwcCIgLz4NCiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAiIC8+DQogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVTZXQuY3BwIiAvPg0KQEAgLTY3OSw2
ICs2NzksNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkVudHJ5Lmgi
IC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVyXERpc2Fzc2VtYmxl
ci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQmxvY2tBbGxvY2F0b3Iu
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvZGVCbG9ja1NldC5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29uc2VydmF0aXZlUm9vdHMuaCIg
Lz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvcGllZEFsbG9jYXRvci5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29waWVkQmxvY2suaCIgLz4NCkBA
IC02ODksNyArNjkwLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29weVZp
c2l0b3IuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvcHlWaXNpdG9y
SW5saW5lcy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29weVdvcmtM
aXN0LmgiIC8+DQotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxERkdDb2RlQmxvY2tz
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ0Fzc2VydGlvbnMuaCIg
Lz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFkLmgiIC8+DQogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVhZFNoYXJlZERhdGEuaCIgLz4NCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU0OTQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw4ICsxNzgsNiBAQAogCQkwRjJCREM0RDE1MjI4MTg2
MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5p
ZmllZE5vZGUuY3BwICovOyB9OwogCQkwRjJCREM0RjE1MjI4QkYzMDBDRDg5MTAgLyogREZHVmFs
dWVTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCAqLzsgfTsK
IAkJMEYyQkRDNTExNTIyOEZGRDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNTAxNTIyOEZG
QTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovOyB9OwotCQkwRjJDNTU2RjE0NzM4
RjMxMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVC
bG9ja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAx
MjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi87IH07CiAJCTBGMkU4OTJDMTZEMDI4QUQwMDlF
NEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NTk4N0YyRjE2ODI4QTdFMDAzQzJGOEQgLyogVW51c2VkUG9pbnRlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkU4
OTJEMTZEMDJCQUYwMDlFNEZEMiAvKiBERkdNaW5pZmllZElELmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyog
REZHTWluaWZpZWRJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJGQzc3MDE2RTEy
RjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovOyB9OwpAQCAtMzY5LDYgKzM2Nyw4IEBA
CiAJCTBGRDgyRTU2MTQxREFGMDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU1MjE0MURBRURFMDAx
NzlDOTQgLyogREZHT1NSRW50cnkuY3BwICovOyB9OwogCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlD
OTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDgyRTg2MTQx
RjNGRjEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogU3Bl
Y3VsYXRlZFR5cGUuY3BwICovOyB9OworCQkwRkQ4QTMxMzE3RDQzMjZDMDBDQTJDNDAgLyogQ29k
ZUJsb2NrU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDhBMzExMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovOyB9Owor
CQkwRkQ4QTMxNDE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4QTMxMjE3RDQzMjZDMDBDQTJD
NDAgLyogQ29kZUJsb2NrU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZEQjJDQzkxNzNEQTUyMDAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVk
VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
REIyQ0M3MTczREE1MUUwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEQjJDQ0ExNzNEQTUy
MzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRCMkNDODE3M0RBNTFFMDA3QjNDMUIgLyogRlRMVmFs
dWVGcm9tQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkRCMkNFNzE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEQjJDRTUxNzQ4MzBB
MjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLzsgfTsKQEAgLTEzNTQsOCArMTM1NCw2IEBA
CiAJCTBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWluaWZpZWROb2RlLmNwcDsgcGF0
aCA9IGRmZy9ERkdNaW5pZmllZE5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjJCREM0RTE1MjI4QkU3MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsdWVTb3VyY2UuY3BwOyBwYXRoID0g
ZGZnL0RGR1ZhbHVlU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
QkRDNTAxNTIyOEZGQTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyaWFibGVFdmVudC5jcHA7IHBhdGggPSBk
ZmcvREZHVmFyaWFibGVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nr
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdDb2RlQmxvY2tzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBE
RkdEQ0VQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdE
Q0VQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHRENFUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRENFUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdEQ0VQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0NzE2
RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NTgsNiArMTU1Niw4IEBACiAJCTBGRDgy
RTUyMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFbnRyeS5jcHA7IHBhdGggPSBkZmcvREZHT1NSRW50
cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU1MzE0MURBRURFMDAx
NzlDOTQgLyogREZHT1NSRW50cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHT1NSRW50cnkuaDsgcGF0aCA9IGRmZy9ERkdPU1JFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlY3VsYXRlZFR5cGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4QTMxMTE3RDQzMjZDMDBDQTJD
NDAgLyogQ29kZUJsb2NrU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvZGVCbG9ja1NldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhB
MzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGREIyQ0M3MTczREE1MUUwMDdCM0MxQiAvKiBGVExBYmJyZXZpYXRlZFR5cGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZUTEFiYnJldmlhdGVkVHlwZXMuaDsgcGF0aCA9IGZ0bC9GVExBYmJyZXZp
YXRlZFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0M4MTczREE1
MUUwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExWYWx1
ZUZyb21CbG9jay5oOyBwYXRoID0gZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlz
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdXb3JrbGlzdC5j
cHA7IHBhdGggPSBkZmcvREZHV29ya2xpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjcxNSw2ICsyNzE1LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTE0ODE2RTE5MTU0
Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgKi8sCiAJCQkJMTQ4MTZFMUExNTRD
QzU2QzAwQjgwNTRDIC8qIEJsb2NrQWxsb2NhdG9yLmggKi8sCisJCQkJMEZEOEEzMTExN0Q0MzI2
QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi8sCisJCQkJMEZEOEEzMTIxN0Q0MzI2QzAw
Q0EyQzQwIC8qIENvZGVCbG9ja1NldC5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMx
QiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgKi8sCiAJCQkJMTQ5REFBRjIxMkVCNTU5RDAwODNC
MTJCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggKi8sCiAJCQkJQzJFQUQyRkIxNEYwMjQ5ODAwQTRC
MTU5IC8qIENvcGllZEFsbG9jYXRvci5oICovLApAQCAtMjcyOSw4ICsyNzMxLDYgQEAKIAkJCQlD
MjIzOUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8sCiAJCQkJ
QzIxOEQxM0YxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oICovLAogCQkJCTBGMTM2
RDRCMTc0QUQ2OUIwMDc1QjM1NCAvKiBEZWZlckdDLmggKi8sCi0JCQkJMEYyQzU1NkQxNDczOEYy
RTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovLAotCQkJCTBGMkM1NTZFMTQ3MzhGMkUw
MDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8sCiAJCQkJQkNCRTJDQUQxNEU5ODVBQTAwMDU5
M0FEIC8qIEdDQXNzZXJ0aW9ucy5oICovLAogCQkJCTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAv
KiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovLAogCQkJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLywKQEAgLTM4OTEsNyArMzg5MSw2
IEBACiAJCQkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQwMTdBMEJCRkQwMEE4REI4MSAvKiBE
RkdDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MjE3QTBCQkZEMDBBOERC
ODEgLyogREZHQ2xvYmJlclNldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyQzU1NkYxNDczOEYz
MTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTRE
MTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEw
QTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzk2NCw2ICszOTYzLDcgQEAKIAkJCQlBNzdBNDI0MzE3QTBCQkZEMDBBOERC
ODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0MTAxN0YxNzlE
QUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkVDQTNGQTEzMkRGMjVBMDAyQjJBRDcgLyogREZHU2NvcmVC
b2FyZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEOEEzMTQxN0Q0MzI2QzAwQ0EyQzQwIC8qIENv
ZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZENDYxNUIzNzAxRjAwOEYzNjNF
IC8qIERGR1NjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYx
RTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdl
bmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC00ODI1LDcgKzQ4MjUsNiBAQAogCQkJCTBGM0Iz
QTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXpl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjQxMTdBMEJCRkQwMEE4REI4MSAvKiBERkdD
bG9iYmVyU2V0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlEMTZCNzJB
MDgwMDVERjk1QiAvKiBERkdDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMzEx
NzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYzOEIwMTcxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNDk4Nyw2ICs0OTg2LDcgQEAKIAkJCQkxNDdGMzlENjEwN0VDMzc2MDA0MjdB
NDggLyogSlNDSlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRkNFNDBBNTFFNDZC
MDAwNUYwNjEgLyogSlNDbGFzc1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxNjE2
N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEOEEz
MTMxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNEJENUEzMDBBM0U5MUY2MDBCQUY1OUMgLyogSlNDb250ZXh0UmVmLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3MjAyOEI2MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NUZXN0UnVubmVyVXRpbHMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RUIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRGF0
YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDQs
NiArMTUwNCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAg
ICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUoREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAj
ZW5kaWYKIHsKKyAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwogICAgIHNldE51bVBh
cmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVycygpKTsKICAgICBvcHRpbWl6ZUFmdGVyV2FybVVw
KCk7CiAgICAgaml0QWZ0ZXJXYXJtVXAoKTsKQEAgLTE1MTYsNiArMTUxNyw5IEBAIENvZGVCbG9j
azo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAgICAgbV9yYXJlRGF0YS0+bV9z
d2l0Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzOwog
ICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3Jh
cmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAgICAgfQorICAgIAorICAgIG1faGVh
cC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5
Q29zdChzaXplb2YoQ29kZUJsb2NrKSk7CiB9CiAKIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2Vk
Q29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291
cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29s
dW1uT2Zmc2V0KQpAQCAtMTU0NCw3ICsxNTQ4LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2Ny
aXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZShERkc6OkNhcGFi
aWxpdHlMZXZlbE5vdFNldCkKICNlbmRpZgogewotICAgIG1fdm0tPnN0YXJ0ZWRDb21waWxpbmco
dGhpcyk7CisgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJlZCgpKTsKIAogICAgIEFTU0VSVCht
X3NvdXJjZSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpKTsKQEAgLTE4NDIsNyArMTg0Niw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KIAogICAgIGlmIChPcHRpb25zOjpkdW1wR2VuZXJhdGVkQnl0ZWNv
ZGVzKCkpCiAgICAgICAgIGR1bXBCeXRlY29kZSgpOwotICAgIG1fdm0tPmZpbmlzaGVkQ29tcGls
aW5nKHRoaXMpOworICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKKyAgICBtX2hl
YXAtPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoQ29kZUJsb2NrKSArIG1faW5zdHJ1Y3Rp
b25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpOwogfQogCiBDb2RlQmxvY2s6On5Db2Rl
QmxvY2soKQpAQCAtMTg1MCwxMiArMTg1NSw2IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAg
ICAgaWYgKG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKICAgICAgICAgbV92bS0+bV9wZXJC
eXRlY29kZVByb2ZpbGVyLT5ub3RpZnlEZXN0cnVjdGlvbih0aGlzKTsKICAgICAKLSNpZiBFTkFC
TEUoREZHX0pJVCkKLSAgICAvLyBSZW1vdmUgbXlzZWxmIGZyb20gdGhlIHNldCBvZiBERkcgY29k
ZSBibG9ja3MuIE5vdGUgdGhhdCBJIG1heSBub3QgYmUgaW4gdGhpcyBzZXQKLSAgICAvLyAoYmVj
YXVzZSBJJ20gbm90IGEgREZHIGNvZGUgYmxvY2spLCBpbiB3aGljaCBjYXNlIHRoaXMgaXMgYSBu
by1vcCBhbnl3YXkuCi0gICAgbV92bS0+aGVhcC5tX2RmZ0NvZGVCbG9ja3MubV9zZXQucmVtb3Zl
KHRoaXMpOwotI2VuZGlmCi0gICAgCiAjaWYgRU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklMRSkK
ICAgICBkdW1wVmFsdWVQcm9maWxlcygpOwogI2VuZGlmCkBAIC0xOTA1LDMzICsxOTA0LDM1IEBA
IHZvaWQgRXZhbENvZGVDYWNoZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFYKIAogdm9pZCBDb2RlQmxv
Y2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotI2lmIEVOQUJMRShQ
QVJBTExFTF9HQykgJiYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1p
emluZ0pJVChqaXRUeXBlKCkpKSB7Ci0gICAgICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9u
ID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEkgbWF5IGJl
IGFza2VkIHRvIHNjYW4gbXlzZWxmIG1vcmUgdGhhbiBvbmNlLCBhbmQgaXQgbWF5IGV2ZW4gaGFw
cGVuIGNvbmN1cnJlbnRseS4KLSAgICAgICAgLy8gVG8gdGhpcyBlbmQsIHVzZSBhIENBUyBsb29w
IHRvIGNoZWNrIGlmIEkndmUgYmVlbiBjYWxsZWQgYWxyZWFkeS4gT25seSBvbmUgdGhyZWFkCi0g
ICAgICAgIC8vIG1heSBwcm9jZWVkIHBhc3QgdGhpcyBwb2ludCAtIHdoaWNoZXZlciBvbmUgd2lu
cyB0aGUgQ0FTIHJhY2UuCi0gICAgICAgIHVuc2lnbmVkIG9sZFZhbHVlOwotICAgICAgICBkbyB7
Ci0gICAgICAgICAgICBvbGRWYWx1ZSA9IGRmZ0NvbW1vbi0+dmlzaXRBZ2dyZWdhdGVIYXNCZWVu
Q2FsbGVkOwotICAgICAgICAgICAgaWYgKG9sZFZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8g
TG9va3MgbGlrZSBzb21lb25lIGVsc2Ugd29uISBSZXR1cm4gaW1tZWRpYXRlbHkgdG8gZW5zdXJl
IHRoYXQgd2UgZG9uJ3QKLSAgICAgICAgICAgICAgICAvLyB0cmFjZSB0aGUgc2FtZSBDb2RlQmxv
Y2sgY29uY3VycmVudGx5LiBEb2luZyBzbyBpcyBoYXphcmRvdXMgc2luY2Ugd2Ugd2lsbAotICAg
ICAgICAgICAgICAgIC8vIGJlIG11dGF0aW5nIHRoZSBzdGF0ZSBvZiBWYWx1ZVByb2ZpbGVzLCB3
aGljaCBjb250YWluIEpTVmFsdWVzLCB3aGljaCBjYW4KLSAgICAgICAgICAgICAgICAvLyBoYXZl
IHdvcmQtdGVhcmluZyBvbiAzMi1iaXQsIGxlYWRpbmcgdG8gYXdlc29tZSB0aW1pbmctZGVwZW5k
ZW50IGNyYXNoZXMKLSAgICAgICAgICAgICAgICAvLyB0aGF0IGFyZSBuZWFybHkgaW1wb3NzaWJs
ZSB0byB0cmFjayBkb3duLgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEFs
c28gbm90ZSB0aGF0IGl0IG11c3QgYmUgc2FmZSB0byByZXR1cm4gZWFybHkgYXMgc29vbiBhcyB3
ZSBzZWUgdGhlCi0gICAgICAgICAgICAgICAgLy8gdmFsdWUgdHJ1ZSAod2VsbCwgKHVuc2lnbmVk
KTEpLCBzaW5jZSBvbmNlIGEgR0MgdGhyZWFkIGlzIGluIHRoaXMgbWV0aG9kCi0gICAgICAgICAg
ICAgICAgLy8gYW5kIGhhcyB3b24gdGhlIENBUyByYWNlIChpLmUuIHdhcyByZXNwb25zaWJsZSBm
b3Igc2V0dGluZyB0aGUgdmFsdWUgdHJ1ZSkKLSAgICAgICAgICAgICAgICAvLyBpdCB3aWxsIGRl
ZmluaXRlbHkgY29tcGxldGUgdGhlIHJlc3Qgb2YgdGhpcyBtZXRob2QgYmVmb3JlIGRlY2xhcmlu
ZwotICAgICAgICAgICAgICAgIC8vIHRlcm1pbmF0aW9uLgotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRT
d2FwKCZkZmdDb21tb24tPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZCwgMCwgMSkpOwotICAg
IH0KLSNlbmRpZiAvLyBFTkFCTEUoUEFSQUxMRUxfR0MpICYmIEVOQUJMRShERkdfSklUKQorI2lm
IEVOQUJMRShQQVJBTExFTF9HQykKKyAgICAvLyBJIG1heSBiZSBhc2tlZCB0byBzY2FuIG15c2Vs
ZiBtb3JlIHRoYW4gb25jZSwgYW5kIGl0IG1heSBldmVuIGhhcHBlbiBjb25jdXJyZW50bHkuCisg
ICAgLy8gVG8gdGhpcyBlbmQsIHVzZSBhIENBUyBsb29wIHRvIGNoZWNrIGlmIEkndmUgYmVlbiBj
YWxsZWQgYWxyZWFkeS4gT25seSBvbmUgdGhyZWFkCisgICAgLy8gbWF5IHByb2NlZWQgcGFzdCB0
aGlzIHBvaW50IC0gd2hpY2hldmVyIG9uZSB3aW5zIHRoZSBDQVMgcmFjZS4KKyAgICB1bnNpZ25l
ZCBvbGRWYWx1ZTsKKyAgICBkbyB7CisgICAgICAgIG9sZFZhbHVlID0gbV92aXNpdEFnZ3JlZ2F0
ZUhhc0JlZW5DYWxsZWQ7CisgICAgICAgIGlmIChvbGRWYWx1ZSkgeworICAgICAgICAgICAgLy8g
TG9va3MgbGlrZSBzb21lb25lIGVsc2Ugd29uISBSZXR1cm4gaW1tZWRpYXRlbHkgdG8gZW5zdXJl
IHRoYXQgd2UgZG9uJ3QKKyAgICAgICAgICAgIC8vIHRyYWNlIHRoZSBzYW1lIENvZGVCbG9jayBj
b25jdXJyZW50bHkuIERvaW5nIHNvIGlzIGhhemFyZG91cyBzaW5jZSB3ZSB3aWxsCisgICAgICAg
ICAgICAvLyBiZSBtdXRhdGluZyB0aGUgc3RhdGUgb2YgVmFsdWVQcm9maWxlcywgd2hpY2ggY29u
dGFpbiBKU1ZhbHVlcywgd2hpY2ggY2FuCisgICAgICAgICAgICAvLyBoYXZlIHdvcmQtdGVhcmlu
ZyBvbiAzMi1iaXQsIGxlYWRpbmcgdG8gYXdlc29tZSB0aW1pbmctZGVwZW5kZW50IGNyYXNoZXMK
KyAgICAgICAgICAgIC8vIHRoYXQgYXJlIG5lYXJseSBpbXBvc3NpYmxlIHRvIHRyYWNrIGRvd24u
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEFsc28gbm90ZSB0aGF0IGl0IG11c3QgYmUg
c2FmZSB0byByZXR1cm4gZWFybHkgYXMgc29vbiBhcyB3ZSBzZWUgdGhlCisgICAgICAgICAgICAv
LyB2YWx1ZSB0cnVlICh3ZWxsLCAodW5zaWduZWQpMSksIHNpbmNlIG9uY2UgYSBHQyB0aHJlYWQg
aXMgaW4gdGhpcyBtZXRob2QKKyAgICAgICAgICAgIC8vIGFuZCBoYXMgd29uIHRoZSBDQVMgcmFj
ZSAoaS5lLiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIHZhbHVlIHRydWUpCisgICAg
ICAgICAgICAvLyBpdCB3aWxsIGRlZmluaXRlbHkgY29tcGxldGUgdGhlIHJlc3Qgb2YgdGhpcyBt
ZXRob2QgYmVmb3JlIGRlY2xhcmluZworICAgICAgICAgICAgLy8gdGVybWluYXRpb24uCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IHdoaWxlICghV1RGOjp3ZWFrQ29tcGFy
ZUFuZFN3YXAoJm1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkLCAwLCAxKSk7CisjZW5kaWYg
Ly8gRU5BQkxFKFBBUkFMTEVMX0dDKQorICAgIAorICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1v
cnlVc2FnZShzaXplb2YoQ29kZUJsb2NrKSk7CisgICAgaWYgKG1faml0Q29kZSkKKyAgICAgICAg
dmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVVzYWdlKG1faml0Q29kZS0+c2l6ZSgpKTsKKyAgICBp
ZiAobV9pbnN0cnVjdGlvbnMuc2l6ZSgpKQorICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVt
b3J5VXNhZ2UobV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSAvIG1f
aW5zdHJ1Y3Rpb25zLnJlZkNvdW50KCkpOwogICAgIAogICAgIGlmICghIW1fYWx0ZXJuYXRpdmUp
CiAgICAgICAgIG1fYWx0ZXJuYXRpdmUtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwpAQCAtMjc0
MCwyOCArMjc0MSwxNCBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBGdW5jdGlvbkNvZGVCbG9jazo6
CiAKIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbigpCiB7CisgICAgRGVmZXJHQyBkZWZlckdDKCpt
X2hlYXApOwogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7
CiAgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7CiAgICAgYWx0ZXJuYXRpdmUoKS0+
b3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKTsKICAg
ICBpZiAoREZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkoKSkKICAgICAgICAgZGF0YUxvZygiSmV0
dGlzb25pbmcgIiwgKnRoaXMsICIuXG4iKTsKLSAgICBqZXR0aXNvbkltcGwoKTsKLX0KLQotdm9p
ZCBQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbkltcGwoKQotewotICAgIHN0YXRpY19jYXN0PFBy
b2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENv
ZGUoKnZtKCkpOwotfQotCi12b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29uSW1wbCgpCi17Ci0g
ICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRp
c29uT3B0aW1pemVkQ29kZSgqdm0oKSk7Ci19Ci0KLXZvaWQgRnVuY3Rpb25Db2RlQmxvY2s6Ompl
dHRpc29uSW1wbCgpCi17Ci0gICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3du
ZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoKnZtKCksIG1faXNDb25z
dHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CisgICAgYWx0ZXJuYXRp
dmUoKS0+aW5zdGFsbCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEg
KzM2LDExIEBACiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ2FsbFJldHVy
bk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCisj
aW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIK
ICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNsdWRl
ICJDb21wYWN0SklUQ29kZU1hcC5oIgotI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKICNpbmNs
dWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRhLmgiCiAjaW5jbHVkZSAi
REZHRXhpdFByb2ZpbGUuaCIKQEAgLTgzLDcgKzgzLDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LWNsYXNzIERGR0NvZGVCbG9ja3M7CiBjbGFzcyBFeGVjU3RhdGU7CiBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiBjbGFzcyBSZXBhdGNoQnVmZmVyOwpAQCAtMjczLDE0ICsyNzIsMTIgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgc2V0SklUQ29kZShQYXNzUmVmUHRyPEpJVENvZGU+IGNv
ZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlV2l0aEFyaXR5Q2hlY2spCiAgICAgeworICAg
ICAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOworICAgICAgICBtX2hlYXAtPnJlcG9y
dEV4dHJhTWVtb3J5Q29zdChjb2RlLT5zaXplKCkpOwogICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBU
aGlzIGlzIHByb2JhYmx5IG5vdCBuZWVkZWQgYmVjYXVzZSB0aGUgbG9jayB3aWxsIGFsc28gZG8g
c29tZXRoaW5nIHNpbWlsYXIsIGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCiAgICAgICAg
IG1faml0Q29kZSA9IGNvZGU7CiAgICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNoZWNrID0gY29k
ZVdpdGhBcml0eUNoZWNrOwotI2lmIEVOQUJMRShERkdfSklUKQotICAgICAgICBpZiAoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKEpJVENvZGU6OmppdFR5cGVGb3IobV9qaXRDb2RlKSkpCi0gICAg
ICAgICAgICBtX3ZtLT5oZWFwLm1fZGZnQ29kZUJsb2Nrcy5tX3NldC5hZGQodGhpcyk7Ci0jZW5k
aWYKICAgICB9CiAgICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBqaXRDb2RlKCkgeyByZXR1cm4gbV9q
aXRDb2RlOyB9CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGppdENvZGVXaXRoQXJpdHlDaGVj
aygpIHsgcmV0dXJuIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOyB9CkBAIC05NjEsOSArOTU4LDYg
QEAgcHVibGljOgogICAgIGJvb2wgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkOyAvLyBJ
bml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KICAgICAKIHByb3RlY3RlZDoKLSNpZiBF
TkFCTEUoSklUKQotICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKSA9IDA7Ci0jZW5kaWYK
ICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpOwogICAg
IHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpOwogCkBAIC05NzQsNyArOTY4
LDcgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIERG
R0NvZGVCbG9ja3M7CisgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9ja1NldDsKICAgICAKICAgICB2
b2lkIG5vdGljZUluY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lKTsKICAgICAKQEAg
LTEwMTcsMTcgKzEwMTEsMTYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBi
b29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkKICAgICB7Ci0g
ICAgICAgIC8vIE51bGwgbV9kZmdEYXRhIG1lYW5zIHRoYXQgdGhpcyBpcyBhIGJhc2VsaW5lIEpJ
VCBDb2RlQmxvY2suIEJhc2VsaW5lIEpJVAotICAgICAgICAvLyBDb2RlQmxvY2tzIGRvbid0IG5l
ZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuIHRoZWlyIHdlYWsgcmVmZXJlbmNlcyBnbwotICAgICAg
ICAvLyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cyBzY2FubmVkLCB3
ZSBjYW4gYXNzdW1lIHRoYXQKLSAgICAgICAgLy8gdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2ZS4K
KyAgICAgICAgLy8gSW50ZXJwcmV0ZXIgYW5kIEJhc2VsaW5lIEpJVCBDb2RlQmxvY2tzIGRvbid0
IG5lZWQgdG8gYmUgamV0dGlzb25lZCB3aGVuCisgICAgICAgIC8vIHRoZWlyIHdlYWsgcmVmZXJl
bmNlcyBnbyBzdGFsZS4gU28gaWYgYSBiYXNsaW5lIEpJVCBDb2RlQmxvY2sgZ2V0cworICAgICAg
ICAvLyBzY2FubmVkLCB3ZSBjYW4gYXNzdW1lIHRoYXQgdGhpcyBtZWFucyB0aGF0IGl0J3MgbGl2
ZS4KICAgICAgICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIC8vIEZvciBzaW1wbGljaXR5LCB3ZSBk
b24ndCBhdHRlbXB0IHRvIGpldHRpc29uIGNvZGUgYmxvY2tzIGR1cmluZyBHQyBpZgogICAgICAg
ICAvLyB0aGV5IGFyZSBleGVjdXRpbmcuIEluc3RlYWQgd2Ugc3Ryb25nbHkgbWFyayB0aGVpciB3
ZWFrIHJlZmVyZW5jZXMgdG8KICAgICAgICAgLy8gYWxsb3cgdGhlbSB0byBjb250aW51ZSB0byBl
eGVjdXRlIHNvdW5kbHkuCi0gICAgICAgIGlmIChtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5tYXlC
ZUV4ZWN1dGluZykKKyAgICAgICAgaWYgKG1fbWF5QmVFeGVjdXRpbmcpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgICAgICBpZiAoT3B0aW9uczo6Zm9yY2VERkdDb2RlQmxvY2tMaXZl
bmVzcygpKQpAQCAtMTA2Nyw2ICsxMDYwLDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pc1N0
cmljdE1vZGU7CiAgICAgYm9vbCBtX25lZWRzQWN0aXZhdGlvbjsKKyAgICBib29sIG1fbWF5QmVF
eGVjdXRpbmc7CisgICAgdWludDhfdCBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsKIAog
ICAgIFJlZlB0cjxTb3VyY2VQcm92aWRlcj4gbV9zb3VyY2U7CiAgICAgdW5zaWduZWQgbV9zb3Vy
Y2VPZmZzZXQ7CkBAIC0xMTg2LDcgKzExODEsNiBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoSklU
KQogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKTsKICAgICB2aXJ0
dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0
eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7CiAjZW5kaWYKQEAgLTEyMDksNyArMTIw
Myw2IEBAIHB1YmxpYzoKICAgICAKICNpZiBFTkFCTEUoSklUKQogcHJvdGVjdGVkOgotICAgIHZp
cnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKTsKICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFj
ZW1lbnQoKTsKICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZl
bEludGVybmFsKCk7CiAjZW5kaWYKQEAgLTEyMzIsNyArMTIyNSw2IEBAIHB1YmxpYzoKICAgICAK
ICNpZiBFTkFCTEUoSklUKQogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbklt
cGwoKTsKICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICB2aXJ0dWFs
IERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7CiAjZW5kaWYK
QEAgLTEyOTEsOCArMTI4Myw3IEBAIGlubGluZSBKU1ZhbHVlIEV4ZWNTdGF0ZTo6YXJndW1lbnRB
ZnRlckMKICAgICByZXR1cm4gdGhpc1tjb2RlQmxvY2soKS0+YXJndW1lbnRJbmRleEFmdGVyQ2Fw
dHVyZShhcmd1bWVudCldLmpzVmFsdWUoKTsKIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQotaW5s
aW5lIHZvaWQgREZHQ29kZUJsb2Nrczo6bWFyayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spCitp
bmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsodm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKQog
ewogICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIDAgYW5kIC0xIGJlY2F1c2UgdGhvc2UgYXJl
IHVzZWQgYnkgdGhlIEhhc2hNYXAgYXMgbWFya2Vycy4KICAgICB1aW50cHRyX3QgdmFsdWUgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY2FuZGlkYXRlQ29kZUJsb2NrKTsKQEAgLTEzMDcs
OSArMTI5OCw4IEBAIGlubGluZSB2b2lkIERGR0NvZGVCbG9ja3M6Om1hcmsodm9pZCogY2EKICAg
ICBpZiAoaXRlciA9PSBtX3NldC5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgICgq
aXRlciktPm1faml0Q29kZS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nID0gdHJ1ZTsKKyAg
ICAoKml0ZXIpLT5tX21heUJlRXhlY3V0aW5nID0gdHJ1ZTsKIH0KLSNlbmRpZgogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25E
YXRhLmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tbW9uRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NiwxMSArNjYsNyBAQCBzdHJ1Y3QgV2Vh
a1JlZmVyZW5jZVRyYW5zaXRpb24gewogY2xhc3MgQ29tbW9uRGF0YSB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ29tbW9uRGF0YSk7CiBwdWJsaWM6Ci0gICAgQ29tbW9uRGF0YSgpCi0gICAg
ICAgIDogbWF5QmVFeGVjdXRpbmcoZmFsc2UpCi0gICAgICAgICwgaXNKZXR0aXNvbmVkKGZhbHNl
KQotICAgIHsKLSAgICB9CisgICAgQ29tbW9uRGF0YSgpIHsgfQogICAgIAogICAgIHZvaWQgbm90
aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihQbGFuJiwgQ29kZUJsb2NrKiwgTm9kZSop
OwogICAgIApAQCAtODEsMTEgKzc3LDggQEAgcHVibGljOgogICAgIFZlY3RvcjxXcml0ZUJhcnJp
ZXI8SlNDZWxsPiA+IHdlYWtSZWZlcmVuY2VzOwogICAgIAogICAgIFJlZlB0cjxQcm9maWxlcjo6
Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOwotICAgIGJvb2wgbWF5QmVFeGVjdXRpbmc7Ci0gICAg
Ym9vbCBpc0pldHRpc29uZWQ7CiAgICAgYm9vbCBsaXZlbmVzc0hhc0JlZW5Qcm92ZWQ7IC8vIElu
aXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgogICAgIGJvb2wgYWxsVHJhbnNpdGlvbnNI
YXZlQmVlbk1hcmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCi0gICAg
dW5zaWduZWQgdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOyAvLyBVbnNpZ25lZCB0byBtYWtl
IGl0IHdvcmsgc2VhbWxlc3NseSB3aXRoIHRoZSBicm9hZGVzdCBzZXQgb2YgQ0FTIGltcGxlbWVu
dGF0aW9ucy4KIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgor
CisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworQ29k
ZUJsb2NrU2V0OjpDb2RlQmxvY2tTZXQoKSB7IH0KKworQ29kZUJsb2NrU2V0Ojp+Q29kZUJsb2Nr
U2V0KCkKK3sKKyAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQu
YmVnaW4oKTsKKyAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBlbmQgPSBtX3NldC5l
bmQoKTsKKyAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgKCppdGVyKS0+
ZGVyZWYoKTsKK30KKwordm9pZCBDb2RlQmxvY2tTZXQ6OmFkZChQYXNzUmVmUHRyPENvZGVCbG9j
az4gY29kZUJsb2NrKQoreworICAgIGJvb2wgaXNOZXdFbnRyeSA9IG1fc2V0LmFkZChjb2RlQmxv
Y2subGVha1JlZigpKS5pc05ld0VudHJ5OworICAgIEFTU0VSVF9VTlVTRUQoaXNOZXdFbnRyeSwg
aXNOZXdFbnRyeSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0OjpjbGVhck1hcmtzKCkKK3sKKyAg
ICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsKKyAg
ICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBlbmQgPSBtX3NldC5lbmQoKTsKKyAgICBm
b3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9ICppdGVyOworICAgICAgICBjb2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcgPSBmYWxzZTsK
KyAgICAgICAgY29kZUJsb2NrLT5tX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZCA9IGZhbHNl
OworICAgIH0KK30KKwordm9pZCBDb2RlQmxvY2tTZXQ6OmRlbGV0ZVVubWFya2VkQW5kVW5yZWZl
cmVuY2VkKCkKK3sKKyAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGEgZml4cG9pbnQgYmVjYXVzZSBj
b2RlIGJsb2NrcyB0aGF0IGFyZSB1bm1hcmtlZCBtYXkKKyAgICAvLyByZWZlciB0byBlYWNoIG90
aGVyLiBGb3IgZXhhbXBsZSwgYSBERkcgY29kZSBibG9jayB0aGF0IGlzIG93bmVkIGJ5CisgICAg
Ly8gdGhlIEdDIG1heSByZWZlciB0byBhbiBGVEwgZm9yLWVudHJ5IGNvZGUgYmxvY2sgdGhhdCBp
cyBhbHNvIG93bmVkIGJ5CisgICAgLy8gdGhlIEdDLgorICAgIFZlY3RvcjxDb2RlQmxvY2sqLCAx
Nj4gdG9SZW1vdmU7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIkZpeHBvaW50
aW5nIG92ZXIgdW5tYXJrZWQsIHNldCBzaXplID0gIiwgbV9zZXQuc2l6ZSgpLCAiLi4uXG4iKTsK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX3NldC5iZWdpbigpOworICAgICAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRv
ciBlbmQgPSBtX3NldC5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKKyAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gKml0ZXI7CisgICAgICAgICAg
ICBpZiAoIWNvZGVCbG9jay0+aGFzT25lUmVmKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5tX21heUJlRXhlY3V0aW5nKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY29kZUJsb2NrLT5kZXJlZigpOworICAgICAg
ICAgICAgdG9SZW1vdmUuYXBwZW5kKGNvZGVCbG9jayk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgUmVtb3ZpbmcgIiwgdG9SZW1vdmUu
c2l6ZSgpLCAiIGJsb2Nrcy5cbiIpOworICAgICAgICBpZiAodG9SZW1vdmUuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHRvUmVtb3ZlLnNp
emUoKTsgaS0tOykKKyAgICAgICAgICAgIG1fc2V0LnJlbW92ZSh0b1JlbW92ZVtpXSk7CisgICAg
ICAgIHRvUmVtb3ZlLnJlc2l6ZSgwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0Ojp0
cmFjZU1hcmtlZChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZygiVHJhY2luZyAiLCBtX3NldC5zaXplKCksICIgY29kZSBibG9ja3MuXG4i
KTsKKyAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4o
KTsKKyAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBlbmQgPSBtX3NldC5lbmQoKTsK
KyAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9ICppdGVyOworICAgICAgICBpZiAoIWNvZGVCbG9jay0+bV9tYXlCZUV4ZWN1dGlu
ZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjb2RlQmxvY2stPnZpc2l0QWdncmVn
YXRlKHZpc2l0b3IpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIENvZGVCbG9ja1NldF9oCisjZGVmaW5lIENvZGVCbG9ja1NldF9oCisK
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgU2xvdFZpc2l0b3I7CisK
Ky8vIENvZGVCbG9ja1NldCB0cmFja3MgYWxsIENvZGVCbG9ja3MuIEV2ZXJ5IENvZGVCbG9jayBz
dGFydHMgb3V0IHdpdGggb25lCisvLyByZWZlcmVuY2UgY29taW5nIGluIGZyb20gR0MuIFRoZSBH
QyBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyBDb2RlQmxvY2tzCisvLyBvbmNlIHRoZXkgaGFz
T25lUmVmKCkgYW5kIG5vYm9keSBpcyBydW5uaW5nIGNvZGUgZnJvbSB0aGF0IENvZGVCbG9jay4K
KworY2xhc3MgQ29kZUJsb2NrU2V0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2RlQmxv
Y2tTZXQpOworCitwdWJsaWM6CisgICAgQ29kZUJsb2NrU2V0KCk7CisgICAgfkNvZGVCbG9ja1Nl
dCgpOworICAgIAorICAgIC8vIEFkZCBhIENvZGVCbG9jay4gVGhpcyBpcyBvbmx5IGNhbGxlZCBi
eSBDb2RlQmxvY2sgY29uc3RydWN0b3JzLgorICAgIHZvaWQgYWRkKFBhc3NSZWZQdHI8Q29kZUJs
b2NrPik7CisgICAgCisgICAgLy8gQ2xlYXIgYWxsIG1hcmsgYml0cyBhc3NvY2lhdGVkIHdpdGgg
REZHIGNvZGUgYmxvY2tzLgorICAgIHZvaWQgY2xlYXJNYXJrcygpOworICAgIAorICAgIC8vIE1h
cmsgYSBwb2ludGVyIHRoYXQgbWF5IGJlIGEgQ29kZUJsb2NrIHRoYXQgYmVsb25ncyB0byB0aGUg
c2V0IG9mIERGRworICAgIC8vIGJsb2Nrcy4gVGhpcyBpcyBkZWZpbmVkIGluIENvZGVCbG9jay5o
LgorICAgIHZvaWQgbWFyayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spOworICAgIAorICAgIC8v
IERlbGV0ZSBhbGwgY29kZSBibG9ja3MgdGhhdCBhcmUgb25seSByZWZlcmVuY2VkIGJ5IHRoaXMg
c2V0IChpLmUuIG93bmVkCisgICAgLy8gYnkgdGhpcyBzZXQpLCBhbmQgdGhhdCBoYXZlIG5vdCBi
ZWVuIG1hcmtlZC4KKyAgICB2b2lkIGRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKCk7Cisg
ICAgCisgICAgLy8gVHJhY2UgYWxsIG1hcmtlZCBjb2RlIGJsb2Nrcy4gVGhlIENvZGVCbG9jayBp
cyBmcmVlIHRvIG1ha2UgdXNlIG9mCisgICAgLy8gbWF5QmVFeGVjdXRpbmcuCisgICAgdm9pZCB0
cmFjZU1hcmtlZChTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgbm90
IGEgc2V0IG9mIFJlZlB0cjxDb2RlQmxvY2s+IGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRv
IGZpbmQKKyAgICAvLyBhcmJpdHJhcnkgYm9ndXMgcG9pbnRlcnMuIEkgY291bGQgaGF2ZSB3cml0
dGVuIGEgdGhpbmd5IHRoYXQgaGFkIHBlZWsgdHlwZXMKKyAgICAvLyBhbmQgYWxsLCBidXQgdGhh
dCBzZWVtZWQgbGlrZSBvdmVya2lsbC4KKyAgICBIYXNoU2V0PENvZGVCbG9jayogPiBtX3NldDsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ29kZUJsb2NrU2V0X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmNwcAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29u
c2VydmF0aXZlUm9vdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAjaW5j
bHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5jbHVk
ZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCi0jaW5jbHVkZSAiREZHQ29kZUJsb2Nrcy5oIgogI2lu
Y2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiU3RydWN0
dXJlLmgiCkBAIC0xNDAsMTAgKzE0MCw5IEBAIHByaXZhdGU6CiB9OwogCiB2b2lkIENvbnNlcnZh
dGl2ZVJvb3RzOjphZGQoCi0gICAgdm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRp
bmVTZXQmIGppdFN0dWJSb3V0aW5lcywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKKyAg
ICB2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRp
bmVzLCBDb2RlQmxvY2tTZXQmIGNvZGVCbG9ja3MpCiB7Ci0gICAgQ29tcG9zaXRlTWFya0hvb2s8
SklUU3R1YlJvdXRpbmVTZXQsIERGR0NvZGVCbG9ja3M+IG1hcmtIb29rKAotICAgICAgICBqaXRT
dHViUm91dGluZXMsIGRmZ0NvZGVCbG9ja3MpOworICAgIENvbXBvc2l0ZU1hcmtIb29rPEpJVFN0
dWJSb3V0aW5lU2V0LCBDb2RlQmxvY2tTZXQ+IG1hcmtIb29rKGppdFN0dWJSb3V0aW5lcywgY29k
ZUJsb2Nrcyk7CiAgICAgZ2VuZXJpY0FkZFNwYW4oYmVnaW4sIGVuZCwgbWFya0hvb2spOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLWNsYXNzIERGR0NvZGVCbG9ja3M7CitjbGFzcyBDb2RlQmxvY2tTZXQ7CiBj
bGFzcyBIZWFwOwogY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiBjbGFzcyBKU0NlbGw7CkBAIC00
NCw3ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBl
bmQpOwogICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5l
U2V0Jik7Ci0gICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1YlJvdXRp
bmVTZXQmLCBERkdDb2RlQmxvY2tzJik7CisgICAgdm9pZCBhZGQodm9pZCogYmVnaW4sIHZvaWQq
IGVuZCwgSklUU3R1YlJvdXRpbmVTZXQmLCBDb2RlQmxvY2tTZXQmKTsKICAgICAKICAgICBzaXpl
X3Qgc2l6ZSgpOwogICAgIEpTQ2VsbCoqIHJvb3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcAkocmV2aXNpb24gMTU0OTQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIK
LQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotI2lmIEVOQUJMRShERkdf
SklUKQotCi1ERkdDb2RlQmxvY2tzOjpERkdDb2RlQmxvY2tzKCkgeyB9Ci0KLURGR0NvZGVCbG9j
a3M6On5ERkdDb2RlQmxvY2tzKCkKLXsKLSAgICBWZWN0b3I8UmVmUHRyPENvZGVCbG9jaz4sIDE2
PiB0b1JlbW92ZTsKLSAgICAKLSAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9y
IGl0ZXIgPSBtX3NldC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIpIHsKLSAg
ICAgICAgaWYgKCgqaXRlciktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzSmV0dGlzb25lZCkK
LSAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChhZG9wdFJlZigqaXRlcikpOwotICAgIH0KLX0K
LQotdm9pZCBERkdDb2RlQmxvY2tzOjpqZXR0aXNvbihQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29k
ZUJsb2NrUHRyKQotewotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZGVsZXRlIGl0IG5vdzsgd2Ug
anVzdCB3YW50IGl0cyBwb2ludGVyLgotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY29kZUJs
b2NrUHRyLmxlYWtSZWYoKTsKLSAgICAKLSAgICBBU1NFUlQoY29kZUJsb2NrKTsKLSAgICBBU1NF
UlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7Ci0gICAg
Ci0gICAgLy8gSXQgc2hvdWxkIG5vdCBoYXZlIGFscmVhZHkgYmVlbiBqZXR0aXNvbmVkLgotICAg
IEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT5pc0pldHRpc29uZWQp
OwotCi0gICAgLy8gV2Ugc2hvdWxkIGhhdmUgdGhpcyBibG9jayBhbHJlYWR5LgotICAgIEFTU0VS
VChtX3NldC5maW5kKGNvZGVCbG9jaykgIT0gbV9zZXQuZW5kKCkpOwotICAgIAotICAgIGNvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNKZXR0aXNvbmVkID0gdHJ1ZTsKLX0KLQot
dm9pZCBERkdDb2RlQmxvY2tzOjpjbGVhck1hcmtzKCkKLXsKLSAgICBmb3IgKEhhc2hTZXQ8Q29k
ZUJsb2NrKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVu
ZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgKCppdGVyKS0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+
bWF5QmVFeGVjdXRpbmcgPSBmYWxzZTsKLSAgICAgICAgKCppdGVyKS0+aml0Q29kZSgpLT5kZmdD
b21tb24oKS0+dmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkID0gZmFsc2U7Ci0gICAgfQotfQot
Ci12b2lkIERGR0NvZGVCbG9ja3M6OmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3Mo
KQotewotICAgIFZlY3RvcjxSZWZQdHI8Q29kZUJsb2NrPiwgMTY+IHRvUmVtb3ZlOwotICAgIAot
ICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2lu
KCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRlcikgewotICAgICAgICBpZiAoKCppdGVyKS0+
aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aXNKZXR0aXNvbmVkICYmICEoKml0ZXIpLT5qaXRDb2Rl
KCktPmRmZ0NvbW1vbigpLT5tYXlCZUV4ZWN1dGluZykKLSAgICAgICAgICAgIHRvUmVtb3ZlLmFw
cGVuZChhZG9wdFJlZigqaXRlcikpOwotICAgIH0KLX0KLQotdm9pZCBERkdDb2RlQmxvY2tzOjp0
cmFjZU1hcmtlZENvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgZm9yIChI
YXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsgaXRlciAh
PSBtX3NldC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmICgoKml0ZXIpLT5qaXRDb2RlKCkt
PmRmZ0NvbW1vbigpLT5tYXlCZUV4ZWN1dGluZykKLSAgICAgICAgICAgICgqaXRlciktPnZpc2l0
QWdncmVnYXRlKHZpc2l0b3IpOwotICAgIH0KLX0KLQotI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQp
Ci0KLXZvaWQgREZHQ29kZUJsb2Nrczo6amV0dGlzb24oUGFzc1JlZlB0cjxDb2RlQmxvY2s+KQot
ewotfQotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
Ci0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9ja3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmgJKHJl
dmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVCbG9j
a3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgREZHQ29kZUJsb2Nrc19oCi0jZGVm
aW5lIERGR0NvZGVCbG9ja3NfaAotCi0jaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlQmxvY2s7Ci1jbGFzcyBTbG90VmlzaXRvcjsKLQot
Ly8gREZHQ29kZUJsb2NrcyBub3RpZmllcyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgYWJvdXQgb3B0
aW1pemVkIGNvZGUgYmxvY2tzIHRoYXQKLS8vIGhhdmUgZGlmZmVyZW50IG1hcmtpbmcgYmVoYXZp
b3IgZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIG9uIHRoZQotLy8gc3RhY2ss
IGFuZCB0aGF0IG1heSBiZSBqZXR0aXNvbmVkLiBKZXR0aXNvbmluZyBpcyB0aGUgcHJvY2VzcyBv
ZiBkaXNjYXJkaW5nCi0vLyBhIGNvZGUgYmxvY2sgYWZ0ZXIgYWxsIGNhbGxzIHRvIGl0IGhhdmUg
YmVlbiB1bmxpbmtlZC4gVGhpcyBjbGFzcyB0YWtlcyBzcGVjaWFsCi0vLyBjYXJlIHRvIGVuc3Vy
ZSB0aGF0IGlmIHRoZXJlIGFyZSBzdGlsbCBjYWxsIGZyYW1lcyB0aGF0IGFyZSB1c2luZyB0aGUg
Y29kZQotLy8gYmxvY2ssIHRoZW4gaXQgc2hvdWxkIG5vdCBiZSBpbW1lZGlhdGVseSBkZWxldGVk
LCBidXQgcmF0aGVyLCBpdCBzaG91bGQgYmUKLS8vIGRlbGV0ZWQgb25jZSB3ZSBrbm93IHRoYXQg
dGhlcmUgYXJlIG5vIGxvbmdlciBhbnkgcmVmZXJlbmNlcyB0byBpdCBmcm9tIGFueQotLy8gY2Fs
bCBmcmFtZXMuIFRoaXMgY2xhc3MgdGFrZXMgaXRzIG5hbWUgZnJvbSB0aGUgREZHIGNvbXBpbGVy
OyBvbmx5IGNvZGUgYmxvY2tzCi0vLyBjb21waWxlZCBieSB0aGUgREZHIG5lZWQgc3BlY2lhbCBt
YXJraW5nIGJlaGF2aW9yIGlmIHRoZXkgYXJlIG9uIHRoZSBzdGFjaywgYW5kCi0vLyBvbmx5IHRo
b3NlIGNvZGUgYmxvY2tzIG1heSBiZSBqZXR0aXNvbmVkLgotCi0jaWYgRU5BQkxFKERGR19KSVQp
Ci1jbGFzcyBERkdDb2RlQmxvY2tzIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLQot
cHVibGljOgotICAgIERGR0NvZGVCbG9ja3MoKTsKLSAgICB+REZHQ29kZUJsb2NrcygpOwotICAg
IAotICAgIC8vIEluZm9ybSB0aGUgY29sbGVjdG9yIHRoYXQgYSBjb2RlIGJsb2NrIGhhcyBiZWVu
IGpldHRpc29uZWQgZm9ybSBpdHMKLSAgICAvLyBleGVjdXRhYmxlIGFuZCBzaG91bGQgb25seSBi
ZSBrZXB0IGFsaXZlIGlmIHRoZXJlIGFyZSBjYWxsIGZyYW1lcyB0aGF0IHVzZQotICAgIC8vIGl0
LiBUaGlzIGlzIHR5cGljYWxseSBjYWxsZWQgZWl0aGVyIGZyb20gYSByZWNvbXBpbGF0aW9uIHRy
aWdnZXIsIG9yIGZyb20KLSAgICAvLyBhbiB1bmNvbmRpdGlvbmFsIGZpbmFsaXplciBhc3NvY2lh
dGVkIHdpdGggYSBDb2RlQmxvY2sgdGhhdCBoYWQgd2VhawotICAgIC8vIHJlZmVyZW5jZXMsIHdo
ZXJlIHNvbWUgc3Vic2V0IG9mIHRob3NlIHJlZmVyZW5jZXMgd2VyZSBkZWFkLgotICAgIHZvaWQg
amV0dGlzb24oUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKLSAgICAKLSAgICAvLyBDbGVhciBhbGwg
bWFyayBiaXRzIGFzc29jaWF0ZWQgd2l0aCBERkcgY29kZSBibG9ja3MuCi0gICAgdm9pZCBjbGVh
ck1hcmtzKCk7Ci0gICAgCi0gICAgLy8gTWFyayBhIHBvaW50ZXIgdGhhdCBtYXkgYmUgYSBDb2Rl
QmxvY2sgdGhhdCBiZWxvbmdzIHRvIHRoZSBzZXQgb2YgREZHIGNvZGUKLSAgICAvLyBibG9ja3Mu
IFRoaXMgaXMgZGVmaW5lZCBpbmxpbmUgaW4gQ29kZUJsb2NrLmgKLSAgICB2b2lkIG1hcmsodm9p
ZCogY2FuZGlkYXRlQ29kZUJsb2NrKTsKLSAgICAKLSAgICAvLyBEZWxldGUgYWxsIGpldHRpc29u
ZWQgY29kZSBibG9ja3MgdGhhdCBoYXZlIG5vdCBiZWVuIG1hcmtlZCAoaS5lLiBhcmUgbm90IHJl
ZmVyZW5jZWQKLSAgICAvLyBmcm9tIGNhbGwgZnJhbWVzKS4KLSAgICB2b2lkIGRlbGV0ZVVubWFy
a2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKLSAgICAKLSAgICAvLyBUcmFjZSBhbGwgbWFya2Vk
IGNvZGUgYmxvY2tzIChpLmUuIGFyZSByZWZlcmVuY2VkIGZyb20gY2FsbCBmcmFtZXMpLiBUaGUg
Q29kZUJsb2NrCi0gICAgLy8gaXMgZnJlZSB0byBtYWtlIHVzZSBvZiBtX2RmZ0RhdGEtPmlzTWFy
a2VkIGFuZCBtX2RmZ0RhdGEtPmlzSmV0dGlzb25lZC4KLSAgICB2b2lkIHRyYWNlTWFya2VkQ29k
ZUJsb2NrcyhTbG90VmlzaXRvciYpOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDb2Rl
QmxvY2s7Ci0gICAgCi0gICAgSGFzaFNldDxDb2RlQmxvY2sqPiBtX3NldDsKLX07Ci0jZWxzZQot
Y2xhc3MgREZHQ29kZUJsb2NrcyB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1
YmxpYzoKLSAgICB2b2lkIGpldHRpc29uKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7Ci0gICAgdm9p
ZCBjbGVhck1hcmtzKCkgeyB9Ci0gICAgdm9pZCBtYXJrKHZvaWQqKSB7IH0KLSAgICB2b2lkIGRl
bGV0ZVVubWFya2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKSB7IH0KLSAgICB2b2lkIHRyYWNlTWFy
a2VkQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpIHsgfQotfTsKLSNlbmRpZgotCi19IC8vIG5hbWVz
cGFjZSBKU0MKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
cmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1NCwxMSArMzU0LDYgQEAgYm9vbCBIZWFwOjp1bnByb3RlY3Qo
SlNWYWx1ZSBrKQogICAgIHJldHVybiBtX3Byb3RlY3RlZFZhbHVlcy5yZW1vdmUoay5hc0NlbGwo
KSk7CiB9CiAKLXZvaWQgSGVhcDo6amV0dGlzb25ERkdDb2RlQmxvY2soUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+IGNvZGVCbG9jaykKLXsKLSAgICBtX2RmZ0NvZGVCbG9ja3MuamV0dGlzb24oY29kZUJs
b2NrKTsKLX0KLQogdm9pZCBIZWFwOjphZGRSZWZlcmVuY2UoSlNDZWxsKiBjZWxsLCBBcnJheUJ1
ZmZlciogYnVmZmVyKQogewogICAgIGlmIChtX2FycmF5QnVmZmVycy5hZGRSZWZlcmVuY2UoY2Vs
bCwgYnVmZmVyKSkgewpAQCAtNDU3LDExICs0NTIsMTAgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMo
KQogICAgIH0KIAogICAgIENvbnNlcnZhdGl2ZVJvb3RzIHN0YWNrUm9vdHMoJm1fb2JqZWN0U3Bh
Y2UuYmxvY2tzKCksICZtX3N0b3JhZ2VTcGFjZSk7Ci0gICAgbV9kZmdDb2RlQmxvY2tzLmNsZWFy
TWFya3MoKTsKKyAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOwogICAgIHsKICAgICAgICAg
R0NQSEFTRShHYXRoZXJTdGFja1Jvb3RzKTsKLSAgICAgICAgc3RhY2soKS5nYXRoZXJDb25zZXJ2
YXRpdmVSb290cygKLSAgICAgICAgICAgIHN0YWNrUm9vdHMsIG1faml0U3R1YlJvdXRpbmVzLCBt
X2RmZ0NvZGVCbG9ja3MpOworICAgICAgICBzdGFjaygpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3Rz
KHN0YWNrUm9vdHMsIG1faml0U3R1YlJvdXRpbmVzLCBtX2NvZGVCbG9ja3MpOwogICAgIH0KIAog
I2lmIEVOQUJMRShERkdfSklUKQpAQCAtNDg1LDEyICs0NzksNiBAQCB2b2lkIEhlYXA6Om1hcmtS
b290cygpCiAgICAgewogICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIodmlzaXRv
cik7CiAKLSAgICAgICAgaWYgKG1fdm0tPmNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLnNpemUoKSkg
ewotICAgICAgICAgICAgR0NQSEFTRShWaXNpdEFjdGl2ZUNvZGVCbG9jayk7Ci0gICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdm0tPmNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLnNp
emUoKTsgaSsrKQotICAgICAgICAgICAgICAgIG1fdm0tPmNvZGVCbG9ja3NCZWluZ0NvbXBpbGVk
W2ldLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLSAgICAgICAgfQotCiAgICAgICAgIG1fdm0t
PnNtYWxsU3RyaW5ncy52aXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CiAKICAgICAgICAg
ewpAQCAtNTU4LDcgKzU0Niw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICAgICAgewog
ICAgICAgICAgICAgR0NQSEFTRShUcmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91dGluZXMpOwog
ICAgICAgICAgICAgTUFSS19MT0dfUk9PVCh2aXNpdG9yLCAiVHJhY2UgQ29kZSBCbG9ja3MgYW5k
IEpJVCBTdHViIFJvdXRpbmVzIik7Ci0gICAgICAgICAgICBtX2RmZ0NvZGVCbG9ja3MudHJhY2VN
YXJrZWRDb2RlQmxvY2tzKHZpc2l0b3IpOworICAgICAgICAgICAgbV9jb2RlQmxvY2tzLnRyYWNl
TWFya2VkKHZpc2l0b3IpOwogICAgICAgICAgICAgbV9qaXRTdHViUm91dGluZXMudHJhY2VNYXJr
ZWRTdHViUm91dGluZXModmlzaXRvcik7CiAgICAgICAgICAgICB2aXNpdG9yLmRvbmF0ZUFuZERy
YWluKCk7CiAgICAgICAgIH0KQEAgLTY4Myw4ICs2NzEsOCBAQCB2b2lkIEhlYXA6OmRlbGV0ZUFs
bENvbXBpbGVkQ29kZSgpCiAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGN1cnJlbnQpLT5jbGVhckNvZGVJZk5vdENvbXBpbGluZygpOwogICAgIH0KIAotICAgIG1fZGZn
Q29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7Ci0gICAgbV9kZmdDb2RlQmxvY2tzLmRlbGV0ZVVubWFy
a2VkSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJrcygp
OworICAgIG1fY29kZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCgpOwogfQog
CiB2b2lkIEhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCkKQEAgLTcwMSw3ICs2ODks
NyBAQCB2b2lkIEhlYXA6OmRlbGV0ZVVubWFya2VkQ29tcGlsZWRDb2RlKCkKICAgICAgICAgbV9j
b21waWxlZENvZGUucmVtb3ZlKGN1cnJlbnQpOwogICAgIH0KIAotICAgIG1fZGZnQ29kZUJsb2Nr
cy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCk7CisgICAgbV9jb2RlQmxvY2tz
LmRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKCk7CiAgICAgbV9qaXRTdHViUm91dGluZXMu
ZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkU3R1YlJvdXRpbmVzKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBAQAogCiAj
aW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJCbG9ja0FsbG9jYXRvci5oIgorI2lu
Y2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgiCi0jaW5jbHVk
ZSAiREZHQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0Lmgi
CiAjaW5jbHVkZSAiR0NUaHJlYWRTaGFyZWREYXRhLmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0Lmgi
CkBAIC0xNDQsOCArMTQ0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgcHJvdGVjdChKU1ZhbHVlKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCB1bnByb3RlY3QoSlNWYWx1ZSk7IC8vIFRydWUgd2hlbiB0aGUgcHJvdGVjdCBjb3VudCBk
cm9wcyB0byAwLgogICAgICAgICAKLSAgICAgICAgdm9pZCBqZXR0aXNvbkRGR0NvZGVCbG9jayhQ
YXNzUmVmUHRyPENvZGVCbG9jaz4pOwotCiAgICAgICAgIHNpemVfdCBleHRyYVNpemUoKTsgLy8g
ZXh0cmEgbWVtb3J5IHVzYWdlIG91dHNpZGUgb2YgcGFnZXMgYWxsb2NhdGVkIGJ5IHRoZSBoZWFw
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzaXplKCk7CiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHNpemVfdCBjYXBhY2l0eSgpOwpAQCAtMjczLDcgKzI3MSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIEhhbmRsZVNldCBtX2hhbmRsZVNldDsKICAgICAgICAgSGFu
ZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKLSAgICAgICAgREZHQ29kZUJsb2NrcyBtX2RmZ0NvZGVC
bG9ja3M7CisgICAgICAgIENvZGVCbG9ja1NldCBtX2NvZGVCbG9ja3M7CiAgICAgICAgIEpJVFN0
dWJSb3V0aW5lU2V0IG1faml0U3R1YlJvdXRpbmVzOwogICAgICAgICBGaW5hbGl6ZXJPd25lciBt
X2ZpbmFsaXplck93bmVyOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9KU1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAJKHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTYsOSArOTYsOSBAQCB2b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvCiAg
ICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGdldFRvcE9mU3RhY2soKSk7CiB9CiAK
LXZvaWQgSlNTdGFjazo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMm
IGNvbnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBE
RkdDb2RlQmxvY2tzJiBkZmdDb2RlQmxvY2tzKQordm9pZCBKU1N0YWNrOjpnYXRoZXJDb25zZXJ2
YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9vdHMsIEpJVFN0dWJS
b3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIENvZGVCbG9ja1NldCYgY29kZUJsb2NrcykKIHsK
LSAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZ2V0VG9wT2ZTdGFjaygpLCBqaXRT
dHViUm91dGluZXMsIGRmZ0NvZGVCbG9ja3MpOworICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChi
ZWdpbigpLCBnZXRUb3BPZlN0YWNrKCksIGppdFN0dWJSb3V0aW5lcywgY29kZUJsb2Nrcyk7CiB9
CiAKIHZvaWQgSlNTdGFjazo6cmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAkocmV2aXNpb24gMTU0OTQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAkod29ya2luZyBj
b3B5KQpAQCAtNDEsOCArNDEsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIENv
ZGVCbG9ja1NldDsKICAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKLSAgICBjbGFzcyBERkdD
b2RlQmxvY2tzOwogICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBjbGFzcyBKSVRTdHViUm91dGlu
ZVNldDsKICAgICBjbGFzcyBWTTsKQEAgLTcxLDcgKzcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIH5KU1N0YWNrKCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZh
dGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7Ci0gICAgICAgIHZvaWQgZ2F0aGVyQ29uc2Vy
dmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYsIERGR0Nv
ZGVCbG9ja3MmKTsKKyAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2
YXRpdmVSb290cyYsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJsb2NrU2V0Jik7CiAKICAgICAg
ICAgUmVnaXN0ZXIqIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVnaXN0ZXIq
PihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7IH0KICAgICAgICAgUmVnaXN0ZXIqIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZW5kOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDIwICs5MCw2
IEBAIEludHJpbnNpYyBOYXRpdmVFeGVjdXRhYmxlOjppbnRyaW5zaWMoKSAKIH0KICNlbmRpZgog
Ci0jaWYgRU5BQkxFKEpJVCkKLS8vIFV0aWxpdHkgbWV0aG9kIHVzZWQgZm9yIGpldHRpc29uaW5n
IGNvZGUgYmxvY2tzLgotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyB2b2lkIGpldHRpc29u
Q29kZUJsb2NrKFZNJiB2bSwgUmVmUHRyPFQ+JiBjb2RlQmxvY2spCi17Ci0gICAgQVNTRVJUKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwotICAgIEFTU0VS
VChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwotICAgIFJlZlB0cjxUPiBjb2RlQmxvY2tUb0pl
dHRpc29uID0gY29kZUJsb2NrLnJlbGVhc2UoKTsKLSAgICBjb2RlQmxvY2sgPSBzdGF0aWNfcG9p
bnRlcl9jYXN0PFQ+KGNvZGVCbG9ja1RvSmV0dGlzb24tPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsK
LSAgICBjb2RlQmxvY2tUb0pldHRpc29uLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0gICAgdm0u
aGVhcC5qZXR0aXNvbkRGR0NvZGVCbG9jayhzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4o
Y29kZUJsb2NrVG9KZXR0aXNvbi5yZWxlYXNlKCkpKTsKLX0KLSNlbmRpZgotCiBjb25zdCBDbGFz
c0luZm8gU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvID0geyAiU2NyaXB0RXhlY3V0YWJsZSIsICZF
eGVjdXRhYmxlQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNjcmlwdEV4
ZWN1dGFibGUpIH07CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMTI1LDEyICsxMTEsNiBAQCB2b2lk
IFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCCiAgICAgCiAgICAgQVNTRVJUKHZt
LmhlYXAuaXNEZWZlcnJlZCgpKTsKICAgICAKLSAgICBpZiAoSklUQ29kZTo6aXNKSVQoZ2VuZXJp
Y0NvZGVCbG9jay0+aml0VHlwZSgpKSkgewotICAgICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVt
b3J5Q29zdCgKLSAgICAgICAgICAgIHNpemVvZihDb2RlQmxvY2spICsgZ2VuZXJpY0NvZGVCbG9j
ay0+aml0Q29kZSgpLT5zaXplKCkpOwotICAgIH0gZWxzZQotICAgICAgICB2bS5oZWFwLnJlcG9y
dEV4dHJhTWVtb3J5Q29zdChzaXplb2YoQ29kZUJsb2NrKSk7Ci0gICAgCiAgICAgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kID0gZ2VuZXJpY0NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5k
KCk7CiAgICAgCiAgICAgUmVmUHRyPENvZGVCbG9jaz4gb2xkQ29kZUJsb2NrOwpAQCAtMzc2LDE1
ICszNTYsNiBAQCBpbmxpbmUgY29uc3QgY2hhciogc2FtcGxpbmdEZXNjcmlwdGlvbihKCiAgICAg
fQogfQogCi0jaWYgRU5BQkxFKEpJVCkKLXZvaWQgRXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0
aW1pemVkQ29kZShWTSYgdm0pCi17Ci0gICAgamV0dGlzb25Db2RlQmxvY2sodm0sIG1fZXZhbENv
ZGVCbG9jayk7Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1fZXZhbENvZGVCbG9jay0+aml0Q29k
ZSgpOwotICAgIEFTU0VSVCghbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKLX0KLSNl
bmRpZiAvLyBFTkFCTEUoSklUKQotCiB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgRXZhbEV4ZWN1dGFi
bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsKQEAgLTQyNiwx
NSArMzk3LDYgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjaGVja1N5bnRheAogICAg
IHJldHVybiBlcnJvci50b0Vycm9yT2JqZWN0KGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNl
KTsKIH0KIAotI2lmIEVOQUJMRShKSVQpCi12b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpqZXR0aXNv
bk9wdGltaXplZENvZGUoVk0mIHZtKQotewotICAgIGpldHRpc29uQ29kZUJsb2NrKHZtLCBtX3By
b2dyYW1Db2RlQmxvY2spOwotICAgIG1faml0Q29kZUZvckNhbGwgPSBtX3Byb2dyYW1Db2RlQmxv
Y2stPmppdENvZGUoKTsKLSAgICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVj
ayk7Ci19Ci0jZW5kaWYKLQogdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMoKQog
ewogI2lmIEVOQUJMRShKSVQpCkBAIC01MTgsMjIgKzQ4MCw2IEBAIEZ1bmN0aW9uQ29kZUJsb2Nr
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jaWYgRU5B
QkxFKEpJVCkKLXZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVG
b3JDYWxsKFZNJiB2bSkKLXsKLSAgICBqZXR0aXNvbkNvZGVCbG9jayh2bSwgbV9jb2RlQmxvY2tG
b3JDYWxsKTsKLSAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5qaXRD
b2RlKCk7Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tG
b3JDYWxsLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKLX0KLQotdm9pZCBGdW5jdGlvbkV4ZWN1
dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChWTSYgdm0pCi17Ci0gICAg
amV0dGlzb25Db2RlQmxvY2sodm0sIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKLSAgICBtX2pp
dENvZGVGb3JDb25zdHJ1Y3QgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+aml0Q29kZSgpOwot
ICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QtPmppdENvZGVXaXRoQXJpdHlDaGVjaygpOwotfQotI2VuZGlmCi0KIHZvaWQgRnVu
Y3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTU0OTQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsMTAg
KzQ0NSw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAK
LSNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJik7Ci0j
ZW5kaWYKLQogICAgIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaygpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9ldmFsQ29kZUJsb2NrLmdldCgpOwpAQCAtNTA2LDEwICs1MDIsNiBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0jaWYgRU5BQkxFKEpJVCkK
LSAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShWTSYpOwotI2VuZGlmCi0KICAgICBQcm9n
cmFtQ29kZUJsb2NrKiBjb2RlQmxvY2soKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcHJvZ3Jh
bUNvZGVCbG9jay5nZXQoKTsKQEAgLTU4MSwxMCArNTczLDYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7CiAgICAgfQogICAgICAgICAKLSNp
ZiBFTkFCTEUoSklUKQotICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYp
OwotI2VuZGlmCi0KICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDYWxsOwpAQCAtNTk1LDEwICs1ODMsNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CiAgICAgfQog
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0
cnVjdChWTSYpOwotI2VuZGlmCi0KICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKQEAg
LTYwOSwxOCArNTkzLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QuZ2V0KCk7CiAgICAgfQogICAgICAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIHZv
aWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQotICAgIHsKLSAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIAotICAgICAg
ICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbCh2bSk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgICAg
ICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3Qodm0pOwotICAgICAgICB9Ci0gICAg
fQotI2VuZGlmCi0gICAgICAgIAogICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3IoQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQogICAgIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE1NDk0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
NCwxNyArMjc0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE51bWVyaWNTdHJpbmdzIG51
bWVyaWNTdHJpbmdzOwogICAgICAgICBEYXRlSW5zdGFuY2VDYWNoZSBkYXRlSW5zdGFuY2VDYWNo
ZTsKICAgICAgICAgV1RGOjpTaW1wbGVTdGF0cyBtYWNoaW5lQ29kZUJ5dGVzUGVyQnl0ZWNvZGVX
b3JkRm9yQmFzZWxpbmVKSVQ7Ci0gICAgICAgIFZlY3RvcjxDb2RlQmxvY2sqPiBjb2RlQmxvY2tz
QmVpbmdDb21waWxlZDsKLSAgICAgICAgdm9pZCBzdGFydGVkQ29tcGlsaW5nKENvZGVCbG9jayog
Y29kZUJsb2NrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb2RlQmxvY2tzQmVpbmdDb21waWxl
ZC5hcHBlbmQoY29kZUJsb2NrKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZmluaXNoZWRD
b21waWxpbmcoQ29kZUJsb2NrKiBjb2RlQmxvY2spCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQoY29kZUJsb2NrLCBjb2RlQmxvY2sgPT0gY29kZUJsb2Nrc0JlaW5nQ29tcGls
ZWQubGFzdCgpKTsKLSAgICAgICAgICAgIGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLnJlbW92ZUxh
c3QoKTsKLSAgICAgICAgfQogCiAgICAgICAgIHZvaWQgc2V0SW5EZWZpbmVPd25Qcm9wZXJ0eShi
b29sIGluRGVmaW5lT3duUHJvcGVydHkpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTQ5
NjEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3
IEBACisyMDEzLTA5LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgQ29kZUJsb2NrOjpqZXR0aXNvbigpIHNob3VsZCBiZSBpbXBsaWNpdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNTY3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBNYWtlIGl0IHBvc3Np
YmxlIHRvIGdldCBhIFJlZkNvdW50ZWRBcnJheSdzIHJlZkNvdW50KCkgc28gdGhhdCBhIENvZGVC
bG9jaworICAgICAgICBjYW4gY29tcHV0ZSBpdHMgcGFydCBvZiB0aGUgZm9vdHByaW50IG9mIGFu
IEluc3RydWN0aW9uIGFycmF5IGJ5IGRvaW5nCisgICAgICAgIHNvbWV0aGluZyBsaWtlIHNpemUo
KSAvIHJlZkNvdW50KCkuCisKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZEFycmF5Lmg6CisgICAg
ICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6cmVmQ291bnQpOgorCiAyMDEzLTA4LTMwICBPbGl2
ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBKU1ZhbHVlIGJvb2wg
Y29udmVyc2lvbiBsZXNzIGRhbmdlcm91cwpJbmRleDogU291cmNlL1dURi93dGYvUmVmQ291bnRl
ZEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgJ
KHJldmlzaW9uIDE1NDk0MykKKysrIFNvdXJjZS9XVEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgZmFzdEZy
ZWUoSGVhZGVyOjpmcm9tUGF5bG9hZChtX2RhdGEpKTsKICAgICB9CiAgICAgCisgICAgdW5zaWdu
ZWQgcmVmQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2RhdGEpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIEhlYWRlcjo6ZnJvbVBheWxvYWQobV9kYXRh
KS0+cmVmQ291bnQ7CisgICAgfQorICAgIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7
CiAgICAgICAgIGlmICghbV9kYXRhKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210321</attachid>
            <date>2013-09-02 21:52:01 -0700</date>
            <delta_ts>2013-09-03 09:31:54 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>57916</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0OTY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBA
CisyMDEzLTA5LTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29kZUJsb2NrOjpqZXR0aXNvbigpIHNob3VsZCBiZSBpbXBsaWNpdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwNTY3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgcmlza3kg
Y2hhbmdlIGZyb20gYSBwZXJmb3JtYW5jZSBzdGFuZHBvaW50LCBidXQgSSBiZWxpZXZlIGl0J3MK
KyAgICAgICAgbmVjZXNzYXJ5LiBUaGlzIG1ha2VzIGFsbCBDb2RlQmxvY2tzIGdldCBzd2VwdCBi
eSBHQy4gTm9ib2R5IGJ1dCB0aGUgR0MKKyAgICAgICAgY2FuIGRlbGV0ZSBDb2RlQmxvY2tzIGJl
Y2F1c2UgdGhlIEdDIGFsd2F5cyBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGVtLgorICAgICAgICBP
bmNlIGEgQ29kZUJsb2NrIHJlYWNoZXMganVzdCBvbmUgcmVmZXJlbmNlIChpLmUuIHRoZSBvbmUg
ZnJvbSB0aGUgR0MpCisgICAgICAgIHRoZW4gdGhlIEdDIHdpbGwgZnJlZSBpdCBvbmx5IGlmIGl0
J3Mgbm90IG9uIHRoZSBzdGFjay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxsb3dzIG1lIHRv
IGdldCByaWQgb2YgdGhlIGpldHRpc29uaW5nIGxvZ2ljLiBXZSBuZWVkIHRoaXMgZm9yIEZUTAor
ICAgICAgICB0aWVyLXVwLiBXZWxsOyB3ZSBkb24ndCBuZWVkIGl0LCBidXQgaXQgd2lsbCBoZWxw
IHByZXZlbnQgYSBsb3Qgb2YgYnVncy4KKyAgICAgICAgUHJldmlvdXNseSwgaWYgeW91IHdhbnRl
ZCB0byB0byByZXBsYWNlIG9uZSBjb2RlIGJsb2NrIHdpdGggYW5vdGhlciwgeW91CisgICAgICAg
IGhhZCB0byByZW1lbWJlciB0byB0ZWxsIHRoZSBHQyB0aGF0IHRoZSBwcmV2aW91cyBjb2RlIGJs
b2NrIGlzCisgICAgICAgICJqZXR0aXNvbmVkIi4gV2Ugd291bGQgbmVlZCB0byBkbyB0aGlzIHdo
ZW4gdGllcmluZyB1cCBmcm9tIERGRyB0byBGVEwKKyAgICAgICAgYW5kIHdoZW4gZGVhbGluZyB3
aXRoIERGRy10by1GVEwgT1NSIGVudHJ5IGNvZGUgYmxvY2tzLiBUaGVyZSBhcmUgYSBsb3QKKyAg
ICAgICAgb2YgcGVybXV0YXRpb25zIGhlcmUgLSB0aWVyaW5nIHVwIHRvIHRoZSBGVEwsIE9TUiBl
bnRlcmluZyBpbnRvIHRoZSBGVEwsCisgICAgICAgIGRlY2lkaW5nIHRoYXQgYW4gT1NSIGVudHJ5
IGNvZGUgYmxvY2sgaXMgbm90IHJlbGV2YW50IGFueW1vcmUgLSBqdXN0IHRvCisgICAgICAgIG5h
bWUgYSBmZXcuIEluIGVhY2ggb2YgdGhlc2UgY2FzZXMgd2UnZCBoYXZlIHRvIGpldHRpc29uIHRo
ZSBwcmV2aW91cworICAgICAgICBjb2RlIGJsb2NrLiBJdCBzbWVsbHMgbGlrZSBhIGh1Z2Ugc291
cmNlIG9mIGZ1dHVyZSBidWdzLgorICAgICAgICAKKyAgICAgICAgU28gSSBtYWRlIGpldHRpc29u
aW5nIGltcGxpY2l0IGJ5IG1ha2luZyB0aGUgR0MgYWx3YXlzIHdhdGNoIG91dCBmb3IgYQorICAg
ICAgICBDb2RlQmxvY2sgYmVpbmcgb3duZWQgc29sZWx5IGJ5IHRoZSBHQy4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgY2hhbmdlIGlzIHBlcmZvcm1hbmNlIG5ldXRyYWwuCisKKyAgICAgICAgKiBD
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRh
cmdldC5wcmk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6On5Db2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0SklUQ29kZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6c2hvdWxkSW1tZWRpYXRlbHlBc3N1bWVMaXZlbmVzc0R1cmluZ1NjYW4p
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6Om1hcmspOgorICAgICAgICAqIGRmZy9ERkdD
b21tb25EYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q29tbW9uRGF0YTo6Q29tbW9uRGF0YSk6
CisgICAgICAgICogaGVhcC9Db2RlQmxvY2tTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrU2V0OjpDb2RlQmxvY2tTZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6
On5Db2RlQmxvY2tTZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OmFkZCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9ja1NldDo6Y2xlYXJNYXJrcyk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9ja1NldDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2tTZXQ6OnRyYWNlTWFya2VkKToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5o
OiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmFkZCk6CisgICAgICAgICogaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5oOgorICAgICAgICAqIGhlYXAvREZHQ29kZUJsb2Nrcy5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogaGVhcC9ERkdDb2RlQmxvY2tzLmg6IFJlbW92ZWQuCisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6ZGVsZXRlQWxsQ29tcGlsZWRDb2RlKToKKyAgICAgICAgKEpTQzo6SGVhcDo6ZGVsZXRl
VW5tYXJrZWRDb21waWxlZENvZGUpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAq
IGludGVycHJldGVyL0pTU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpKU1N0YWNrOjpnYXRoZXJD
b25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSlNTdGFjay5oOgorICAg
ICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1
dGFibGU6Omluc3RhbGxDb2RlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAg
ICAgICAgKiBydW50aW1lL1ZNLmg6CisKIDIwMTMtMDktMDIgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIE5vIG5lZWQgZm9yIEhhcmRBdXRvcmVsZWFzZSwg
d2hpY2ggaXMgc2FtZSBhcyBDRkJyaWRnaW5nUmVsZWFzZQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTU0OTY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNjksMzAgKzE2OSwxMCBAQCBz
ZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJs
ZXIuY3BwCiAKICAgICBoZWFwL0Jsb2NrQWxsb2NhdG9yLmNwcAotICAgIGhlYXAvQ29waWVkU3Bh
Y2UuY3BwCi0gICAgaGVhcC9Db3B5VmlzaXRvci5jcHAKLSAgICBoZWFwL0NvbnNlcnZhdGl2ZVJv
b3RzLmNwcAotICAgIGhlYXAvREZHQ29kZUJsb2Nrcy5jcHAKLSAgICBoZWFwL0dDSW5jb21pbmdS
ZWZDb3VudGVkU2V0LmgKLSAgICBoZWFwL0dDSW5jb21pbmdSZWZDb3VudGVkLmgKLSAgICBoZWFw
L0dDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oCi0gICAgaGVhcC9HQ0luY29taW5nUmVm
Q291bnRlZElubGluZXMuaAotICAgIGhlYXAvR0NUaHJlYWQuY3BwCi0gICAgaGVhcC9HQ1RocmVh
ZFNoYXJlZERhdGEuY3BwCi0gICAgaGVhcC9IYW5kbGVTZXQuY3BwCi0gICAgaGVhcC9IYW5kbGVT
dGFjay5jcHAKLSAgICBoZWFwL0hlYXAuY3BwCi0gICAgaGVhcC9IZWFwU3RhdGlzdGljcy5jcHAK
LSAgICBoZWFwL0hlYXBUaW1lci5jcHAKLSAgICBoZWFwL0luY3JlbWVudGFsU3dlZXBlci5jcHAK
LSAgICBoZWFwL0pJVFN0dWJSb3V0aW5lU2V0LmNwcAotICAgIGhlYXAvTWFjaGluZVN0YWNrTWFy
a2VyLmNwcAotCi0gICAgaGVhcC9CbG9ja0FsbG9jYXRvci5jcHAKKyAgICBoZWFwL0NvZGVCbG9j
a1NldC5jcHAKICAgICBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAogICAgIGhlYXAvQ29waWVk
U3BhY2UuY3BwCiAgICAgaGVhcC9Db3B5VmlzaXRvci5jcHAKLSAgICBoZWFwL0RGR0NvZGVCbG9j
a3MuY3BwCiAgICAgaGVhcC9HQ1RocmVhZC5jcHAKICAgICBoZWFwL0dDVGhyZWFkU2hhcmVkRGF0
YS5jcHAKICAgICBoZWFwL0hhbmRsZVNldC5jcHAKQEAgLTIwMCw2ICsxODAsNyBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGhlYXAvSGVhcC5jcHAKICAgICBoZWFwL0hlYXBTdGF0
aXN0aWNzLmNwcAogICAgIGhlYXAvSGVhcFRpbWVyLmNwcAorICAgIGhlYXAvSW5jcmVtZW50YWxT
d2VlcGVyLmNwcAogICAgIGhlYXAvSklUU3R1YlJvdXRpbmVTZXQuY3BwCiAgICAgaGVhcC9NYWNo
aW5lU3RhY2tNYXJrZXIuY3BwCiAgICAgaGVhcC9NYXJrU3RhY2suY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTU0OTY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkK
QEAgLTQ0Miw2ICs0NDIsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRnJvbUJsb2NrLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFZhbHVlU291cmNlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVC
bG9ja1NldC5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3BpZWRBbGxvY2F0b3IuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29waWVkQmxvY2suaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvQ29waWVkQmxvY2tJbmxpbmVzLmggXApAQCAtNDU2LDggKzQ1OCw2IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2Vy
dmF0aXZlUm9vdHMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRGVmZXJHQy5oIFwK
LQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmNwcCBcCi0JU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ0Fzc2VydGlvbnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NJbmNvbWluZ1JlZkNvdW50ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NJ
bmNvbWluZ1JlZkNvdW50ZWRJbmxpbmVzLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkJKHJldmlzaW9uIDE1NDk2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJp
CSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMSArODIsMTEgQEAgU09VUkNFUyArPSBcCiAgICAgYnl0
ZWNvZGUvV2F0Y2hwb2ludC5jcHAgXAogICAgIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAgXAogICAgIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIFwKKyAgICBoZWFwL0Nv
ZGVCbG9ja1NldC5jcHAgXAogICAgIGhlYXAvQ29waWVkU3BhY2VJbmxpbmVzLmggXAogICAgIGhl
YXAvQ29waWVkU3BhY2UuY3BwIFwKICAgICBoZWFwL0NvcHlWaXNpdG9yLmNwcCBcCiAgICAgaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5jcHAgXAotICAgIGhlYXAvREZHQ29kZUJsb2Nrcy5jcHAgXAog
ICAgIGhlYXAvV2Vhay5jcHAgXAogICAgIGhlYXAvV2Vha0Jsb2NrLmNwcCBcCiAgICAgaGVhcC9X
ZWFrSGFuZGxlT3duZXIuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagkocmV2aXNpb24gMTU0OTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzMwLDEwICszMzAsMTAgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdE
cml2ZXIuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRpc2Fzc2VtYmxlclxE
aXNhc3NlbWJsZXIuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcQmxv
Y2tBbGxvY2F0b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcQ29k
ZUJsb2NrU2V0LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXENvbnNl
cnZhdGl2ZVJvb3RzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXENv
cGllZFNwYWNlLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXENvcHlW
aXNpdG9yLmNwcCIgLz4NCi0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXERGR0NvZGVC
bG9ja3MuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWQu
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWRTaGFyZWRE
YXRhLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZVNldC5j
cHAiIC8+DQpAQCAtNjc5LDYgKzY3OSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHT1NSRW50cnkuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkaXNhc3Nl
bWJsZXJcRGlzYXNzZW1ibGVyLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVh
cFxCbG9ja0FsbG9jYXRvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBc
Q29kZUJsb2NrU2V0LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxDb25z
ZXJ2YXRpdmVSb290cy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29w
aWVkQWxsb2NhdG9yLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxDb3Bp
ZWRCbG9jay5oIiAvPg0KQEAgLTY4OSw3ICs2OTAsNiBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caGVhcFxDb3B5VmlzaXRvci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcQ29weVZpc2l0b3JJbmxpbmVzLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxDb3B5V29ya0xpc3QuaCIgLz4NCi0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXERGR0NvZGVCbG9ja3MuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFw
XEdDQXNzZXJ0aW9ucy5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NU
aHJlYWQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEdDVGhyZWFkU2hh
cmVkRGF0YS5oIiAvPg0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxNTQ5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTc4LDggKzE3OCw2IEBACiAJ
CTBGMkJEQzREMTUyMjgxODYwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNEMxNTIyODE4MzAw
Q0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAgKi87IH07CiAJCTBGMkJEQzRGMTUyMjhCRjMw
MENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREM0RTE1MjI4QkU3MDBDRDg5MTAgLyogREZHVmFsdWVT
b3VyY2UuY3BwICovOyB9OwogCQkwRjJCREM1MTE1MjI4RkZEMDBDRDg5MTAgLyogREZHVmFyaWFi
bGVFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCREM1MDE1MjI4RkZBMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5jcHAgKi87IH07
Ci0JCTBGMkM1NTZGMTQ3MzhGMzEwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RTE0NzM4RjJFMDAx
MjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0RiAvKiBERkdDb2RlQmxv
Y2tzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLzsgfTsKIAkJMEYy
RTg5MkMxNkQwMjhBRDAwOUU0RkQyIC8qIFVudXNlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1OTg3RjJGMTY4MjhBN0UwMDNDMkY4RCAv
KiBVbnVzZWRQb2ludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8qIERGR01pbmlmaWVkSUQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTEwMTZC
M0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRkM3NzIxNkUxMkY3MTAwMzhEOTc2IC8qIERG
R0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgKi87IH07CkBA
IC0zNjksNiArMzY3LDggQEAKIAkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVu
dHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDgyRTUyMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi87IH07CiAJCTBGRDgy
RTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNTMxNDFEQUVERTAwMTc5Qzk0IC8qIERG
R09TUkVudHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTg0MTQxRjNG
REEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi87IH07CisJCTBGRDhBMzEzMTdENDMy
NkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEOEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9j
a1NldC5jcHAgKi87IH07CisJCTBGRDhBMzE0MTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tT
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDhB
MzEyMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkRCMkNDOTE3M0RBNTIwMDA3QjNDMUIg
LyogRlRMQWJicmV2aWF0ZWRUeXBlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTEFiYnJldmlhdGVk
VHlwZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREIyQ0M4MTczREE1MUUw
MDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGREIyQ0U3MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdX
b3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICovOyB9OwpAQCAt
MTM1NCw4ICsxMzU0LDYgQEAKIAkJMEYyQkRDNEMxNTIyODE4MzAwQ0Q4OTEwIC8qIERGR01pbmlm
aWVkTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNaW5p
ZmllZE5vZGUuY3BwOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkTm9kZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzRFMTUyMjhCRTcwMENEODkxMCAvKiBERkdWYWx1ZVNv
dXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYWx1ZVNv
dXJjZS5jcHA7IHBhdGggPSBkZmcvREZHVmFsdWVTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjJCREM1MDE1MjI4RkZBMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUV2
ZW50LmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3Mu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZHQ29kZUJsb2Nrcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERG
R0NvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyRkM3NzAxNkUx
MkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0RDRVBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdEQ0VQaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkZDNzcxMTZFMTJGNkYwMDM4RDk3NiAv
KiBERkdEQ0VQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEQ0VQ
aGFzZS5oOyBwYXRoID0gZGZnL0RGR0RDRVBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1VzZUtpbmQuY3BwOyBwYXRoID0gZGZn
L0RGR1VzZUtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU1OCw2ICsx
NTU2LDggQEAKIAkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkVudHJ5LmNwcDsgcGF0
aCA9IGRmZy9ERkdPU1JFbnRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdPU1JFbnRyeS5oOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAv
KiBTcGVjdWxhdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTcGVjdWxhdGVkVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDhB
MzExMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZUJsb2NrU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZEOEEzMTIxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDQzcxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTEFiYnJl
dmlhdGVkVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQWJicmV2aWF0ZWRUeXBlcy5oOyBwYXRo
ID0gZnRsL0ZUTEFiYnJldmlhdGVkVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZEQjJDQzgxNzNEQTUxRTAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEZUTFZhbHVlRnJvbUJsb2NrLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVGcm9tQmxv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEQjJDRTUxNzQ4MzBBMjAwN0Iz
QzFCIC8qIERGR1dvcmtsaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1dvcmtsaXN0LmNwcDsgcGF0aCA9IGRmZy9ERkdXb3JrbGlzdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzE1LDYgKzI3MTUsOCBAQAogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJMTQ4MTZFMTkxNTRDQzU2QzAwQjgwNTRDIC8qIEJsb2NrQWxsb2NhdG9yLmNwcCAqLywK
IAkJCQkxNDgxNkUxQTE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuaCAqLywKKwkJ
CQkwRkQ4QTMxMTE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmNwcCAqLywKKwkJCQkw
RkQ4QTMxMjE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggKi8sCiAJCQkJMTQ2QjE0
REIxMkVCNUIxMjAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCAqLywKIAkJCQkxNDlE
QUFGMjEyRUI1NTlEMDA4M0IxMkIgLyogQ29uc2VydmF0aXZlUm9vdHMuaCAqLywKIAkJCQlDMkVB
RDJGQjE0RjAyNDk4MDBBNEIxNTkgLyogQ29waWVkQWxsb2NhdG9yLmggKi8sCkBAIC0yNzI5LDgg
KzI3MzEsNiBAQAogCQkJCUMyMjM5RDE0MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklu
bGluZXMuaCAqLywKIAkJCQlDMjE4RDEzRjE2NTVDRkQ1MDA2MkJCODEgLyogQ29weVdvcmtMaXN0
LmggKi8sCiAJCQkJMEYxMzZENEIxNzRBRDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywKLQkJ
CQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi8sCi0JCQkJ
MEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLywKIAkJCQlCQ0JF
MkNBRDE0RTk4NUFBMDAwNTkzQUQgLyogR0NBc3NlcnRpb25zLmggKi8sCiAJCQkJMEYyQjY2QTgx
N0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkLmggKi8sCiAJCQkJMEYyQjY2
QTkxN0I2QjUzRDAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkSW5saW5lcy5oICovLApA
QCAtMzg5MSw3ICszODkxLDYgQEAKIAkJCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyogREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDAxN0Ew
QkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0
MjQyMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyU2V0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwRjJDNTU2RjE0NzM4RjMxMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFQTBBMzIxNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMzhCMDE4MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxh
dGlvbktleS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTY0LDYgKzM5NjMsNyBAQAogCQkJCUE3N0E0
MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzQxMDE3RjE3OURBRjgwMDAyRUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xv
d1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUNBM0ZBMTMyREYyNUEwMDJC
MkFENyAvKiBERkdTY29yZUJvYXJkLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4QTMxNDE3RDQz
MjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQ0
NjE1QjM3MDFGMDA4RjM2M0UgLyogREZHU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0
ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUQxNkQwMkYzMDAwNTVBNURC
IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTQ4MjUsNyArNDgy
NSw2IEBACiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0YxN0EwQkJGRDAwQThEQjgx
IC8qIERGR0Nsb2JiZXJpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyNDExN0EwQkJG
RDAwQThEQjgxIC8qIERGR0Nsb2JiZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYyQzU1
NzAxNDczOEYzNTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGMEYxOUQxNkI3MkEwODAwNURGOTVCIC8qIERGR0NvbW1vbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkVBMEEzMTE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjM4QjAxNzE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRp
b25LZXkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00OTg3LDYgKzQ5ODYsNyBAQAogCQkJCTE0N0Yz
OUQ2MTA3RUMzNzYwMDQyN0E0OCAvKiBKU0NKU1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDBGQ0U0MEE1MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNzUmVmLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RTNDNjE2MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gaW4gU291cmNl
cyAqLywKKwkJCQkwRkQ4QTMxMzE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRS
ZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyMDI4QjYxNzk3NjAxRTAwOTgwMjhDIC8qIEpT
Q1Rlc3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZFQjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNEYXRhVmlldy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTQ5NjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUwNCw2ICsxNTA0LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBh
cnNlZEJsb2NrVGFnLAogICAgICwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxp
dHlMZXZlbE5vdFNldCkKICNlbmRpZgogeworICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJyZWQo
KSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOwogICAgIG9w
dGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICBqaXRBZnRlcldhcm1VcCgpOwpAQCAtMTUxNiw2ICsx
NTE3LDkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICAg
ICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX3N3
aXRjaEp1bXBUYWJsZXM7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRh
YmxlcyA9IG90aGVyLm1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKICAgICB9
CisgICAgCisgICAgbV9oZWFwLT5tX2NvZGVCbG9ja3MuYWRkKHRoaXMpOworICAgIG1faGVhcC0+
cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZihDb2RlQmxvY2spKTsKIH0KIAogQ29kZUJsb2Nr
OjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENv
ZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNp
Z25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCkBAIC0xNTQ0LDcgKzE1NDgsNyBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX2NhcGFiaWxpdHlMZXZl
bFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQogI2VuZGlmCiB7Ci0gICAgbV92bS0+
c3RhcnRlZENvbXBpbGluZyh0aGlzKTsKKyAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkp
OwogCiAgICAgQVNTRVJUKG1fc291cmNlKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVubGlua2Vk
Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwpAQCAtMTg0Miw3ICsxODQ2LDggQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogCiAgICAgaWYgKE9wdGlvbnM6OmR1
bXBHZW5lcmF0ZWRCeXRlY29kZXMoKSkKICAgICAgICAgZHVtcEJ5dGVjb2RlKCk7Ci0gICAgbV92
bS0+ZmluaXNoZWRDb21waWxpbmcodGhpcyk7CisgICAgbV9oZWFwLT5tX2NvZGVCbG9ja3MuYWRk
KHRoaXMpOworICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZihDb2RlQmxv
Y2spKTsKIH0KIAogQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKQEAgLTE4NTAsMTIgKzE4NTUsNiBA
QCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIGlmIChtX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIpCiAgICAgICAgIG1fdm0tPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+bm90aWZ5RGVzdHJ1
Y3Rpb24odGhpcyk7CiAgICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgLy8gUmVtb3ZlIG15
c2VsZiBmcm9tIHRoZSBzZXQgb2YgREZHIGNvZGUgYmxvY2tzLiBOb3RlIHRoYXQgSSBtYXkgbm90
IGJlIGluIHRoaXMgc2V0Ci0gICAgLy8gKGJlY2F1c2UgSSdtIG5vdCBhIERGRyBjb2RlIGJsb2Nr
KSwgaW4gd2hpY2ggY2FzZSB0aGlzIGlzIGEgbm8tb3AgYW55d2F5LgotICAgIG1fdm0tPmhlYXAu
bV9kZmdDb2RlQmxvY2tzLm1fc2V0LnJlbW92ZSh0aGlzKTsKLSNlbmRpZgotICAgIAogI2lmIEVO
QUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCiAgICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKICNl
bmRpZgpAQCAtMTkwNSwzMyArMTkwNCwyOSBAQCB2b2lkIEV2YWxDb2RlQ2FjaGU6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWCiAKIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKLSNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpICYmIEVOQUJMRShERkdfSklU
KQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewotICAgICAg
ICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7Ci0g
ICAgICAgIAotICAgICAgICAvLyBJIG1heSBiZSBhc2tlZCB0byBzY2FuIG15c2VsZiBtb3JlIHRo
YW4gb25jZSwgYW5kIGl0IG1heSBldmVuIGhhcHBlbiBjb25jdXJyZW50bHkuCi0gICAgICAgIC8v
IFRvIHRoaXMgZW5kLCB1c2UgYSBDQVMgbG9vcCB0byBjaGVjayBpZiBJJ3ZlIGJlZW4gY2FsbGVk
IGFscmVhZHkuIE9ubHkgb25lIHRocmVhZAotICAgICAgICAvLyBtYXkgcHJvY2VlZCBwYXN0IHRo
aXMgcG9pbnQgLSB3aGljaGV2ZXIgb25lIHdpbnMgdGhlIENBUyByYWNlLgotICAgICAgICB1bnNp
Z25lZCBvbGRWYWx1ZTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgb2xkVmFsdWUgPSBkZmdD
b21tb24tPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZDsKLSAgICAgICAgICAgIGlmIChvbGRW
YWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIExvb2tzIGxpa2Ugc29tZW9uZSBlbHNlIHdvbiEg
UmV0dXJuIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0Ci0gICAgICAgICAgICAg
ICAgLy8gdHJhY2UgdGhlIHNhbWUgQ29kZUJsb2NrIGNvbmN1cnJlbnRseS4gRG9pbmcgc28gaXMg
aGF6YXJkb3VzIHNpbmNlIHdlIHdpbGwKLSAgICAgICAgICAgICAgICAvLyBiZSBtdXRhdGluZyB0
aGUgc3RhdGUgb2YgVmFsdWVQcm9maWxlcywgd2hpY2ggY29udGFpbiBKU1ZhbHVlcywgd2hpY2gg
Y2FuCi0gICAgICAgICAgICAgICAgLy8gaGF2ZSB3b3JkLXRlYXJpbmcgb24gMzItYml0LCBsZWFk
aW5nIHRvIGF3ZXNvbWUgdGltaW5nLWRlcGVuZGVudCBjcmFzaGVzCi0gICAgICAgICAgICAgICAg
Ly8gdGhhdCBhcmUgbmVhcmx5IGltcG9zc2libGUgdG8gdHJhY2sgZG93bi4KLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAvLyBBbHNvIG5vdGUgdGhhdCBpdCBtdXN0IGJlIHNhZmUg
dG8gcmV0dXJuIGVhcmx5IGFzIHNvb24gYXMgd2Ugc2VlIHRoZQotICAgICAgICAgICAgICAgIC8v
IHZhbHVlIHRydWUgKHdlbGwsICh1bnNpZ25lZCkxKSwgc2luY2Ugb25jZSBhIEdDIHRocmVhZCBp
cyBpbiB0aGlzIG1ldGhvZAotICAgICAgICAgICAgICAgIC8vIGFuZCBoYXMgd29uIHRoZSBDQVMg
cmFjZSAoaS5lLiB3YXMgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIHZhbHVlIHRydWUpCi0g
ICAgICAgICAgICAgICAgLy8gaXQgd2lsbCBkZWZpbml0ZWx5IGNvbXBsZXRlIHRoZSByZXN0IG9m
IHRoaXMgbWV0aG9kIGJlZm9yZSBkZWNsYXJpbmcKLSAgICAgICAgICAgICAgICAvLyB0ZXJtaW5h
dGlvbi4KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
d2hpbGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmZGZnQ29tbW9uLT52aXNpdEFnZ3JlZ2F0
ZUhhc0JlZW5DYWxsZWQsIDAsIDEpKTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKFBBUkFMTEVM
X0dDKSAmJiBFTkFCTEUoREZHX0pJVCkKKyNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisgICAgLy8g
SSBtYXkgYmUgYXNrZWQgdG8gc2NhbiBteXNlbGYgbW9yZSB0aGFuIG9uY2UsIGFuZCBpdCBtYXkg
ZXZlbiBoYXBwZW4gY29uY3VycmVudGx5LgorICAgIC8vIFRvIHRoaXMgZW5kLCB1c2UgYSBDQVMg
bG9vcCB0byBjaGVjayBpZiBJJ3ZlIGJlZW4gY2FsbGVkIGFscmVhZHkuIE9ubHkgb25lIHRocmVh
ZAorICAgIC8vIG1heSBwcm9jZWVkIHBhc3QgdGhpcyBwb2ludCAtIHdoaWNoZXZlciBvbmUgd2lu
cyB0aGUgQ0FTIHJhY2UuCisgICAgdW5zaWduZWQgb2xkVmFsdWU7CisgICAgZG8geworICAgICAg
ICBvbGRWYWx1ZSA9IG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOworICAgICAgICBpZiAo
b2xkVmFsdWUpIHsKKyAgICAgICAgICAgIC8vIExvb2tzIGxpa2Ugc29tZW9uZSBlbHNlIHdvbiEg
UmV0dXJuIGltbWVkaWF0ZWx5IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0CisgICAgICAgICAgICAv
LyB0cmFjZSB0aGUgc2FtZSBDb2RlQmxvY2sgY29uY3VycmVudGx5LiBEb2luZyBzbyBpcyBoYXph
cmRvdXMgc2luY2Ugd2Ugd2lsbAorICAgICAgICAgICAgLy8gYmUgbXV0YXRpbmcgdGhlIHN0YXRl
IG9mIFZhbHVlUHJvZmlsZXMsIHdoaWNoIGNvbnRhaW4gSlNWYWx1ZXMsIHdoaWNoIGNhbgorICAg
ICAgICAgICAgLy8gaGF2ZSB3b3JkLXRlYXJpbmcgb24gMzItYml0LCBsZWFkaW5nIHRvIGF3ZXNv
bWUgdGltaW5nLWRlcGVuZGVudCBjcmFzaGVzCisgICAgICAgICAgICAvLyB0aGF0IGFyZSBuZWFy
bHkgaW1wb3NzaWJsZSB0byB0cmFjayBkb3duLgorICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBBbHNvIG5vdGUgdGhhdCBpdCBtdXN0IGJlIHNhZmUgdG8gcmV0dXJuIGVhcmx5IGFzIHNvb24g
YXMgd2Ugc2VlIHRoZQorICAgICAgICAgICAgLy8gdmFsdWUgdHJ1ZSAod2VsbCwgKHVuc2lnbmVk
KTEpLCBzaW5jZSBvbmNlIGEgR0MgdGhyZWFkIGlzIGluIHRoaXMgbWV0aG9kCisgICAgICAgICAg
ICAvLyBhbmQgaGFzIHdvbiB0aGUgQ0FTIHJhY2UgKGkuZS4gd2FzIHJlc3BvbnNpYmxlIGZvciBz
ZXR0aW5nIHRoZSB2YWx1ZSB0cnVlKQorICAgICAgICAgICAgLy8gaXQgd2lsbCBkZWZpbml0ZWx5
IGNvbXBsZXRlIHRoZSByZXN0IG9mIHRoaXMgbWV0aG9kIGJlZm9yZSBkZWNsYXJpbmcKKyAgICAg
ICAgICAgIC8vIHRlcm1pbmF0aW9uLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfSB3aGlsZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZtX3Zpc2l0QWdncmVnYXRlSGFz
QmVlbkNhbGxlZCwgMCwgMSkpOworI2VuZGlmIC8vIEVOQUJMRShQQVJBTExFTF9HQykKICAgICAK
ICAgICBpZiAoISFtX2FsdGVybmF0aXZlKQogICAgICAgICBtX2FsdGVybmF0aXZlLT52aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKQEAgLTI3NDAsMjggKzI3MzUsMTQgQEAgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgRnVuY3Rpb25Db2RlQmxvY2s6OgogCiB2b2lkIENvZGVCbG9jazo6amV0dGlzb24oKQog
eworICAgIERlZmVyR0MgZGVmZXJHQygqbV9oZWFwKTsKICAgICBBU1NFUlQoSklUQ29kZTo6aXNP
cHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50
KCkpOwogICAgIGFsdGVybmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICB0YWxs
eUZyZXF1ZW50RXhpdFNpdGVzKCk7CiAgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5
KCkpCiAgICAgICAgIGRhdGFMb2coIkpldHRpc29uaW5nICIsICp0aGlzLCAiLlxuIik7Ci0gICAg
amV0dGlzb25JbXBsKCk7Ci19Ci0KLXZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb25JbXBs
KCkKLXsKLSAgICBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJs
ZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlKCp2bSgpKTsKLX0KLQotdm9pZCBFdmFsQ29kZUJs
b2NrOjpqZXR0aXNvbkltcGwoKQotewotICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoKnZtKCkpOwotfQotCi12
b2lkIEZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbkltcGwoKQotewotICAgIHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6
ZWRDb2RlRm9yKCp2bSgpLCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29k
ZUZvckNhbGwpOworICAgIGFsdGVybmF0aXZlKCktPmluc3RhbGwoKTsKIH0KICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAxNTQ5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM2LDExICszNiwxMSBAQAogI2luY2x1ZGUgIkNhbGxMaW5rSW5m
by5oIgogI2luY2x1ZGUgIkNhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrSGFzaC5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2luY2x1
ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1
ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKLSNpbmNsdWRl
ICJERkdDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZH
Q29tbW9uRGF0YS5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCkBAIC04Myw3ICs4Myw2
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBERkdDb2RlQmxvY2tzOwogY2xhc3MgRXhl
Y1N0YXRlOwogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgUmVwYXRjaEJ1ZmZl
cjsKQEAgLTI3MywxNCArMjcyLDEyIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHNldEpJVENv
ZGUoUGFzc1JlZlB0cjxKSVRDb2RlPiBjb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVdp
dGhBcml0eUNoZWNrKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJlZCgp
KTsKKyAgICAgICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoY29kZS0+c2l6ZSgpKTsK
ICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBpcyBwcm9iYWJseSBub3QgbmVlZGVkIGJlY2F1
c2UgdGhlIGxvY2sgd2lsbCBhbHNvIGRvIHNvbWV0aGluZyBzaW1pbGFyLCBidXQgaXQncyBnb29k
IHRvIGJlIHBhcmFub2lkLgogICAgICAgICBtX2ppdENvZGUgPSBjb2RlOwogICAgICAgICBtX2pp
dENvZGVXaXRoQXJpdHlDaGVjayA9IGNvZGVXaXRoQXJpdHlDaGVjazsKLSNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChKSVRDb2RlOjpqaXRU
eXBlRm9yKG1faml0Q29kZSkpKQotICAgICAgICAgICAgbV92bS0+aGVhcC5tX2RmZ0NvZGVCbG9j
a3MubV9zZXQuYWRkKHRoaXMpOwotI2VuZGlmCiAgICAgfQogICAgIFBhc3NSZWZQdHI8SklUQ29k
ZT4gaml0Q29kZSgpIHsgcmV0dXJuIG1faml0Q29kZTsgfQogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBqaXRDb2RlV2l0aEFyaXR5Q2hlY2soKSB7IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlD
aGVjazsgfQpAQCAtOTYxLDkgKzk1OCw2IEBAIHB1YmxpYzoKICAgICBib29sIG1fYWxsVHJhbnNp
dGlvbnNIYXZlQmVlbk1hcmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0Mu
CiAgICAgCiBwcm90ZWN0ZWQ6Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB2aXJ0dWFsIHZvaWQgamV0
dGlzb25JbXBsKCkgPSAwOwotI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoU2xvdFZpc2l0b3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoKTsKIApAQCAtOTc0LDcgKzk2OCw3IEBAIHByb3RlY3RlZDoKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIGZyaWVuZCBjbGFzcyBERkdDb2RlQmxvY2tzOworICAgIGZyaWVuZCBjbGFzcyBD
b2RlQmxvY2tTZXQ7CiAgICAgCiAgICAgdm9pZCBub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1N0YXRl
KiBjYWxsZXJGcmFtZSk7CiAgICAgCkBAIC0xMDE3LDE3ICsxMDExLDE2IEBAIHByaXZhdGU6CiAj
aWYgRU5BQkxFKERGR19KSVQpCiAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFzc3VtZUxpdmVu
ZXNzRHVyaW5nU2NhbigpCiAgICAgewotICAgICAgICAvLyBOdWxsIG1fZGZnRGF0YSBtZWFucyB0
aGF0IHRoaXMgaXMgYSBiYXNlbGluZSBKSVQgQ29kZUJsb2NrLiBCYXNlbGluZSBKSVQKLSAgICAg
ICAgLy8gQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbiB0aGVpciB3
ZWFrIHJlZmVyZW5jZXMgZ28KLSAgICAgICAgLy8gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBKSVQg
Q29kZUJsb2NrIGdldHMgc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0Ci0gICAgICAgIC8vIHRo
aXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCisgICAgICAgIC8vIEludGVycHJldGVyIGFuZCBCYXNl
bGluZSBKSVQgQ29kZUJsb2NrcyBkb24ndCBuZWVkIHRvIGJlIGpldHRpc29uZWQgd2hlbgorICAg
ICAgICAvLyB0aGVpciB3ZWFrIHJlZmVyZW5jZXMgZ28gc3RhbGUuIFNvIGlmIGEgYmFzbGluZSBK
SVQgQ29kZUJsb2NrIGdldHMKKyAgICAgICAgLy8gc2Nhbm5lZCwgd2UgY2FuIGFzc3VtZSB0aGF0
IHRoaXMgbWVhbnMgdGhhdCBpdCdzIGxpdmUuCiAgICAgICAgIGlmICghSklUQ29kZTo6aXNPcHRp
bWl6aW5nSklUKGppdFR5cGUoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAg
ICAvLyBGb3Igc2ltcGxpY2l0eSwgd2UgZG9uJ3QgYXR0ZW1wdCB0byBqZXR0aXNvbiBjb2RlIGJs
b2NrcyBkdXJpbmcgR0MgaWYKICAgICAgICAgLy8gdGhleSBhcmUgZXhlY3V0aW5nLiBJbnN0ZWFk
IHdlIHN0cm9uZ2x5IG1hcmsgdGhlaXIgd2VhayByZWZlcmVuY2VzIHRvCiAgICAgICAgIC8vIGFs
bG93IHRoZW0gdG8gY29udGludWUgdG8gZXhlY3V0ZSBzb3VuZGx5LgotICAgICAgICBpZiAobV9q
aXRDb2RlLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAgIGlmIChtX21heUJl
RXhlY3V0aW5nKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKE9wdGlv
bnM6OmZvcmNlREZHQ29kZUJsb2NrTGl2ZW5lc3MoKSkKQEAgLTEwNjcsNiArMTA2MCw4IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIG1faXNTdHJpY3RNb2RlOwogICAgIGJvb2wgbV9uZWVkc0FjdGl2
YXRpb247CisgICAgYm9vbCBtX21heUJlRXhlY3V0aW5nOworICAgIHVpbnQ4X3QgbV92aXNpdEFn
Z3JlZ2F0ZUhhc0JlZW5DYWxsZWQ7CiAKICAgICBSZWZQdHI8U291cmNlUHJvdmlkZXI+IG1fc291
cmNlOwogICAgIHVuc2lnbmVkIG1fc291cmNlT2Zmc2V0OwpAQCAtMTE4Niw3ICsxMTgxLDYgQEAg
cHVibGljOgogCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQg
amV0dGlzb25JbXBsKCk7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAg
ICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgp
OwogI2VuZGlmCkBAIC0xMjA5LDcgKzEyMDMsNiBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxF
KEpJVCkKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7CiAgICAg
dmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjMyLDcg
KzEyMjUsNiBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSAg
ICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5
TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjkxLDggKzEyODMsNyBAQCBpbmxpbmUgSlNW
YWx1ZSBFeGVjU3RhdGU6OmFyZ3VtZW50QWZ0ZXJDCiAgICAgcmV0dXJuIHRoaXNbY29kZUJsb2Nr
KCktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoYXJndW1lbnQpXS5qc1ZhbHVlKCk7CiB9CiAK
LSNpZiBFTkFCTEUoREZHX0pJVCkKLWlubGluZSB2b2lkIERGR0NvZGVCbG9ja3M6Om1hcmsodm9p
ZCogY2FuZGlkYXRlQ29kZUJsb2NrKQoraW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKHZv
aWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykKIHsKICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAw
IGFuZCAtMSBiZWNhdXNlIHRob3NlIGFyZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMu
CiAgICAgdWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNhbmRp
ZGF0ZUNvZGVCbG9jayk7CkBAIC0xMzA3LDkgKzEyOTgsOCBAQCBpbmxpbmUgdm9pZCBERkdDb2Rl
QmxvY2tzOjptYXJrKHZvaWQqIGNhCiAgICAgaWYgKGl0ZXIgPT0gbV9zZXQuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICAoKml0ZXIpLT5tX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5t
YXlCZUV4ZWN1dGluZyA9IHRydWU7CisgICAgKCppdGVyKS0+bV9tYXlCZUV4ZWN1dGluZyA9IHRy
dWU7CiB9Ci0jZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAxNTQ5NjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
NjYsMTEgKzY2LDcgQEAgc3RydWN0IFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uIHsKIGNsYXNzIENv
bW1vbkRhdGEgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbW1vbkRhdGEpOwogcHVibGlj
OgotICAgIENvbW1vbkRhdGEoKQotICAgICAgICA6IG1heUJlRXhlY3V0aW5nKGZhbHNlKQotICAg
ICAgICAsIGlzSmV0dGlzb25lZChmYWxzZSkKLSAgICB7Ci0gICAgfQorICAgIENvbW1vbkRhdGEo
KSB7IH0KICAgICAKICAgICB2b2lkIG5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24o
UGxhbiYsIENvZGVCbG9jayosIE5vZGUqKTsKICAgICAKQEAgLTgxLDExICs3Nyw4IEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4gPiB3ZWFrUmVmZXJlbmNlczsKICAg
ICAKICAgICBSZWZQdHI8UHJvZmlsZXI6OkNvbXBpbGF0aW9uPiBjb21waWxhdGlvbjsKLSAgICBi
b29sIG1heUJlRXhlY3V0aW5nOwotICAgIGJvb2wgaXNKZXR0aXNvbmVkOwogICAgIGJvb2wgbGl2
ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4K
ICAgICBib29sIGFsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIEluaXRpYWxpemVkIGFu
ZCB1c2VkIG9uIGV2ZXJ5IEdDLgotICAgIHVuc2lnbmVkIHZpc2l0QWdncmVnYXRlSGFzQmVlbkNh
bGxlZDsgLy8gVW5zaWduZWQgdG8gbWFrZSBpdCB3b3JrIHNlYW1sZXNzbHkgd2l0aCB0aGUgYnJv
YWRlc3Qgc2V0IG9mIENBUyBpbXBsZW1lbnRhdGlvbnMuCiB9OwogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1Nl
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxv
Y2tTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIlNsb3RWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgY29uc3QgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CisKK0NvZGVCbG9ja1NldDo6Q29kZUJsb2NrU2V0KCkgeyB9CisK
K0NvZGVCbG9ja1NldDo6fkNvZGVCbG9ja1NldCgpCit7CisgICAgSGFzaFNldDxDb2RlQmxvY2sq
Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgSGFzaFNldDxDb2RlQmxvY2sq
Pjo6aXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpCisgICAgICAgICgqaXRlciktPmRlcmVmKCk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0
OjphZGQoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykKK3sKKyAgICBib29sIGlzTmV3
RW50cnkgPSBtX3NldC5hZGQoY29kZUJsb2NrLmxlYWtSZWYoKSkuaXNOZXdFbnRyeTsKKyAgICBB
U1NFUlRfVU5VU0VEKGlzTmV3RW50cnksIGlzTmV3RW50cnkpOworfQorCit2b2lkIENvZGVCbG9j
a1NldDo6Y2xlYXJNYXJrcygpCit7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3Ig
aXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9zZXQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqaXRlcjsKKyAgICAgICAgY29kZUJsb2NrLT5t
X21heUJlRXhlY3V0aW5nID0gZmFsc2U7CisgICAgICAgIGNvZGVCbG9jay0+bV92aXNpdEFnZ3Jl
Z2F0ZUhhc0JlZW5DYWxsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJsb2NrU2V0
OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCgpCit7CisgICAgLy8gVGhpcyBuZWVkcyB0
byBiZSBhIGZpeHBvaW50IGJlY2F1c2UgY29kZSBibG9ja3MgdGhhdCBhcmUgdW5tYXJrZWQgbWF5
CisgICAgLy8gcmVmZXIgdG8gZWFjaCBvdGhlci4gRm9yIGV4YW1wbGUsIGEgREZHIGNvZGUgYmxv
Y2sgdGhhdCBpcyBvd25lZCBieQorICAgIC8vIHRoZSBHQyBtYXkgcmVmZXIgdG8gYW4gRlRMIGZv
ci1lbnRyeSBjb2RlIGJsb2NrIHRoYXQgaXMgYWxzbyBvd25lZCBieQorICAgIC8vIHRoZSBHQy4K
KyAgICBWZWN0b3I8Q29kZUJsb2NrKiwgMTY+IHRvUmVtb3ZlOworICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICBkYXRhTG9nKCJGaXhwb2ludGluZyBvdmVyIHVubWFya2VkLCBzZXQgc2l6ZSA9ICIs
IG1fc2V0LnNpemUoKSwgIi4uLlxuIik7CisgICAgZm9yICg7OykgeworICAgICAgICBIYXNoU2V0
PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsKKyAgICAgICAgSGFz
aFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7CisgICAgICAgIGZv
ciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9ICppdGVyOworICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2stPmhhc09uZVJlZigpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+bV9t
YXlCZUV4ZWN1dGluZykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNv
ZGVCbG9jay0+ZGVyZWYoKTsKKyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChjb2RlQmxvY2sp
OworICAgICAgICB9CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygi
ICAgIFJlbW92aW5nICIsIHRvUmVtb3ZlLnNpemUoKSwgIiBibG9ja3MuXG4iKTsKKyAgICAgICAg
aWYgKHRvUmVtb3ZlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSB0b1JlbW92ZS5zaXplKCk7IGktLTspCisgICAgICAgICAgICBtX3NldC5y
ZW1vdmUodG9SZW1vdmVbaV0pOworICAgICAgICB0b1JlbW92ZS5yZXNpemUoMCk7CisgICAgfQor
fQorCit2b2lkIENvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlRyYWNpbmcgIiwgbV9zZXQu
c2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRl
cmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRl
cmF0b3IgZW5kID0gbV9zZXQuZW5kKCk7CisgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqaXRlcjsKKyAgICAgICAgaWYgKCFj
b2RlQmxvY2stPm1fbWF5QmVFeGVjdXRpbmcpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgY29kZUJsb2NrLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxv
Y2tTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxv
Y2tTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVC
bG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb2RlQmxvY2tTZXRfaAor
I2RlZmluZSBDb2RlQmxvY2tTZXRfaAorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9j
azsKK2NsYXNzIFNsb3RWaXNpdG9yOworCisvLyBDb2RlQmxvY2tTZXQgdHJhY2tzIGFsbCBDb2Rl
QmxvY2tzLiBFdmVyeSBDb2RlQmxvY2sgc3RhcnRzIG91dCB3aXRoIG9uZQorLy8gcmVmZXJlbmNl
IGNvbWluZyBpbiBmcm9tIEdDLiBUaGUgR0MgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgQ29k
ZUJsb2NrcworLy8gb25jZSB0aGV5IGhhc09uZVJlZigpIGFuZCBub2JvZHkgaXMgcnVubmluZyBj
b2RlIGZyb20gdGhhdCBDb2RlQmxvY2suCisKK2NsYXNzIENvZGVCbG9ja1NldCB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ29kZUJsb2NrU2V0KTsKKworcHVibGljOgorICAgIENvZGVCbG9j
a1NldCgpOworICAgIH5Db2RlQmxvY2tTZXQoKTsKKyAgICAKKyAgICAvLyBBZGQgYSBDb2RlQmxv
Y2suIFRoaXMgaXMgb25seSBjYWxsZWQgYnkgQ29kZUJsb2NrIGNvbnN0cnVjdG9ycy4KKyAgICB2
b2lkIGFkZChQYXNzUmVmUHRyPENvZGVCbG9jaz4pOworICAgIAorICAgIC8vIENsZWFyIGFsbCBt
YXJrIGJpdHMgYXNzb2NpYXRlZCB3aXRoIERGRyBjb2RlIGJsb2Nrcy4KKyAgICB2b2lkIGNsZWFy
TWFya3MoKTsKKyAgICAKKyAgICAvLyBNYXJrIGEgcG9pbnRlciB0aGF0IG1heSBiZSBhIENvZGVC
bG9jayB0aGF0IGJlbG9uZ3MgdG8gdGhlIHNldCBvZiBERkcKKyAgICAvLyBibG9ja3MuIFRoaXMg
aXMgZGVmaW5lZCBpbiBDb2RlQmxvY2suaC4KKyAgICB2b2lkIG1hcmsodm9pZCogY2FuZGlkYXRl
Q29kZUJsb2NrKTsKKyAgICAKKyAgICAvLyBEZWxldGUgYWxsIGNvZGUgYmxvY2tzIHRoYXQgYXJl
IG9ubHkgcmVmZXJlbmNlZCBieSB0aGlzIHNldCAoaS5lLiBvd25lZAorICAgIC8vIGJ5IHRoaXMg
c2V0KSwgYW5kIHRoYXQgaGF2ZSBub3QgYmVlbiBtYXJrZWQuCisgICAgdm9pZCBkZWxldGVVbm1h
cmtlZEFuZFVucmVmZXJlbmNlZCgpOworICAgIAorICAgIC8vIFRyYWNlIGFsbCBtYXJrZWQgY29k
ZSBibG9ja3MuIFRoZSBDb2RlQmxvY2sgaXMgZnJlZSB0byBtYWtlIHVzZSBvZgorICAgIC8vIG1h
eUJlRXhlY3V0aW5nLgorICAgIHZvaWQgdHJhY2VNYXJrZWQoU2xvdFZpc2l0b3ImKTsKKworcHJp
dmF0ZToKKyAgICAvLyBUaGlzIGlzIG5vdCBhIHNldCBvZiBSZWZQdHI8Q29kZUJsb2NrPiBiZWNh
dXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBmaW5kCisgICAgLy8gYXJiaXRyYXJ5IGJvZ3VzIHBv
aW50ZXJzLiBJIGNvdWxkIGhhdmUgd3JpdHRlbiBhIHRoaW5neSB0aGF0IGhhZCBwZWVrIHR5cGVz
CisgICAgLy8gYW5kIGFsbCwgYnV0IHRoYXQgc2VlbWVkIGxpa2Ugb3ZlcmtpbGwuCisgICAgSGFz
aFNldDxDb2RlQmxvY2sqID4gbV9zZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIENvZGVCbG9ja1NldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAJKHJldmlzaW9uIDE1NDk2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRl
ICJDb3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgotI2luY2x1
ZGUgIkRGR0NvZGVCbG9ja3MuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU09i
amVjdC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgpAQCAtMTQwLDEwICsxNDAsOSBAQCBwcml2
YXRlOgogfTsKIAogdm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKAotICAgIHZvaWQqIGJlZ2lu
LCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMsIERGR0NvZGVC
bG9ja3MmIGRmZ0NvZGVCbG9ja3MpCisgICAgdm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSklUU3R1
YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcywgQ29kZUJsb2NrU2V0JiBjb2RlQmxvY2tzKQog
ewotICAgIENvbXBvc2l0ZU1hcmtIb29rPEpJVFN0dWJSb3V0aW5lU2V0LCBERkdDb2RlQmxvY2tz
PiBtYXJrSG9vaygKLSAgICAgICAgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKKyAg
ICBDb21wb3NpdGVNYXJrSG9vazxKSVRTdHViUm91dGluZVNldCwgQ29kZUJsb2NrU2V0PiBtYXJr
SG9vayhqaXRTdHViUm91dGluZXMsIGNvZGVCbG9ja3MpOwogICAgIGdlbmVyaWNBZGRTcGFuKGJl
Z2luLCBlbmQsIG1hcmtIb29rKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCShyZXZpc2lvbiAxNTQ5NjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBERkdDb2RlQmxvY2tz
OworY2xhc3MgQ29kZUJsb2NrU2V0OwogY2xhc3MgSGVhcDsKIGNsYXNzIEpJVFN0dWJSb3V0aW5l
U2V0OwogY2xhc3MgSlNDZWxsOwpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kKTsKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwg
dm9pZCogZW5kLCBKSVRTdHViUm91dGluZVNldCYpOwotICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2lu
LCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiwgREZHQ29kZUJsb2NrcyYpOworICAgIHZv
aWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQsIEpJVFN0dWJSb3V0aW5lU2V0JiwgQ29kZUJs
b2NrU2V0Jik7CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBKU0NlbGwqKiByb290cygp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvREZHQ29kZUJsb2Nrcy5jcHAJ
KHJldmlzaW9uIDE1NDk2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0RGR0NvZGVC
bG9ja3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNs
dWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotREZHQ29kZUJsb2Nrczo6REZHQ29kZUJs
b2NrcygpIHsgfQotCi1ERkdDb2RlQmxvY2tzOjp+REZHQ29kZUJsb2NrcygpCi17Ci0gICAgVmVj
dG9yPFJlZlB0cjxDb2RlQmxvY2s+LCAxNj4gdG9SZW1vdmU7Ci0gICAgCi0gICAgZm9yIChIYXNo
U2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQuYmVnaW4oKTsgaXRlciAhPSBt
X3NldC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIGlmICgoKml0ZXIpLT5qaXRDb2RlKCktPmRm
Z0NvbW1vbigpLT5pc0pldHRpc29uZWQpCi0gICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoYWRv
cHRSZWYoKml0ZXIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgREZHQ29kZUJsb2Nrczo6amV0dGlzb24o
UGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9ja1B0cikKLXsKLSAgICAvLyBXZSBkb24ndCB3
YW50IHRvIGRlbGV0ZSBpdCBub3c7IHdlIGp1c3Qgd2FudCBpdHMgcG9pbnRlci4KLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGNvZGVCbG9ja1B0ci5sZWFrUmVmKCk7Ci0gICAgCi0gICAgQVNT
RVJUKGNvZGVCbG9jayk7Ci0gICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2Rl
QmxvY2stPmppdFR5cGUoKSkpOwotICAgIAotICAgIC8vIEl0IHNob3VsZCBub3QgaGF2ZSBhbHJl
YWR5IGJlZW4gamV0dGlzb25lZC4KLSAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZSgpLT5k
ZmdDb21tb24oKS0+aXNKZXR0aXNvbmVkKTsKLQotICAgIC8vIFdlIHNob3VsZCBoYXZlIHRoaXMg
YmxvY2sgYWxyZWFkeS4KLSAgICBBU1NFUlQobV9zZXQuZmluZChjb2RlQmxvY2spICE9IG1fc2V0
LmVuZCgpKTsKLSAgICAKLSAgICBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlz
SmV0dGlzb25lZCA9IHRydWU7Ci19Ci0KLXZvaWQgREZHQ29kZUJsb2Nrczo6Y2xlYXJNYXJrcygp
Ci17Ci0gICAgZm9yIChIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQu
YmVnaW4oKTsgaXRlciAhPSBtX3NldC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICgqaXRlcikt
PmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPm1heUJlRXhlY3V0aW5nID0gZmFsc2U7Ci0gICAgICAg
ICgqaXRlciktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPnZpc2l0QWdncmVnYXRlSGFzQmVlbkNh
bGxlZCA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBERkdDb2RlQmxvY2tzOjpkZWxldGVVbm1h
cmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCkKLXsKLSAgICBWZWN0b3I8UmVmUHRyPENvZGVCbG9j
az4sIDE2PiB0b1JlbW92ZTsKLSAgICAKLSAgICBmb3IgKEhhc2hTZXQ8Q29kZUJsb2NrKj46Oml0
ZXJhdG9yIGl0ZXIgPSBtX3NldC5iZWdpbigpOyBpdGVyICE9IG1fc2V0LmVuZCgpOyArK2l0ZXIp
IHsKLSAgICAgICAgaWYgKCgqaXRlciktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlzSmV0dGlz
b25lZCAmJiAhKCppdGVyKS0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcp
Ci0gICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoYWRvcHRSZWYoKml0ZXIpKTsKLSAgICB9Ci19
Ci0KLXZvaWQgREZHQ29kZUJsb2Nrczo6dHJhY2VNYXJrZWRDb2RlQmxvY2tzKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIGZvciAoSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRl
ciA9IG1fc2V0LmJlZ2luKCk7IGl0ZXIgIT0gbV9zZXQuZW5kKCk7ICsraXRlcikgewotICAgICAg
ICBpZiAoKCppdGVyKS0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+bWF5QmVFeGVjdXRpbmcpCi0g
ICAgICAgICAgICAoKml0ZXIpLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKLSAgICB9Ci19Ci0K
LSNlbHNlIC8vIEVOQUJMRShERkdfSklUKQotCi12b2lkIERGR0NvZGVCbG9ja3M6OmpldHRpc29u
KFBhc3NSZWZQdHI8Q29kZUJsb2NrPikKLXsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9ERkdDb2RlQmxvY2tzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvREZHQ29kZUJsb2Nrcy5oCShyZXZpc2lvbiAxNTQ5NjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9ERkdDb2RlQmxvY2tzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIERGR0NvZGVCbG9ja3NfaAotI2RlZmluZSBERkdDb2RlQmxvY2tzX2gKLQotI2luY2x1ZGUg
PHd0Zi9GYXN0QWxsb2NCYXNlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZUJsb2Nr
OwotY2xhc3MgU2xvdFZpc2l0b3I7Ci0KLS8vIERGR0NvZGVCbG9ja3Mgbm90aWZpZXMgdGhlIGdh
cmJhZ2UgY29sbGVjdG9yIGFib3V0IG9wdGltaXplZCBjb2RlIGJsb2NrcyB0aGF0Ci0vLyBoYXZl
IGRpZmZlcmVudCBtYXJraW5nIGJlaGF2aW9yIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0
aGV5IGFyZSBvbiB0aGUKLS8vIHN0YWNrLCBhbmQgdGhhdCBtYXkgYmUgamV0dGlzb25lZC4gSmV0
dGlzb25pbmcgaXMgdGhlIHByb2Nlc3Mgb2YgZGlzY2FyZGluZwotLy8gYSBjb2RlIGJsb2NrIGFm
dGVyIGFsbCBjYWxscyB0byBpdCBoYXZlIGJlZW4gdW5saW5rZWQuIFRoaXMgY2xhc3MgdGFrZXMg
c3BlY2lhbAotLy8gY2FyZSB0byBlbnN1cmUgdGhhdCBpZiB0aGVyZSBhcmUgc3RpbGwgY2FsbCBm
cmFtZXMgdGhhdCBhcmUgdXNpbmcgdGhlIGNvZGUKLS8vIGJsb2NrLCB0aGVuIGl0IHNob3VsZCBu
b3QgYmUgaW1tZWRpYXRlbHkgZGVsZXRlZCwgYnV0IHJhdGhlciwgaXQgc2hvdWxkIGJlCi0vLyBk
ZWxldGVkIG9uY2Ugd2Uga25vdyB0aGF0IHRoZXJlIGFyZSBubyBsb25nZXIgYW55IHJlZmVyZW5j
ZXMgdG8gaXQgZnJvbSBhbnkKLS8vIGNhbGwgZnJhbWVzLiBUaGlzIGNsYXNzIHRha2VzIGl0cyBu
YW1lIGZyb20gdGhlIERGRyBjb21waWxlcjsgb25seSBjb2RlIGJsb2NrcwotLy8gY29tcGlsZWQg
YnkgdGhlIERGRyBuZWVkIHNwZWNpYWwgbWFya2luZyBiZWhhdmlvciBpZiB0aGV5IGFyZSBvbiB0
aGUgc3RhY2ssIGFuZAotLy8gb25seSB0aG9zZSBjb2RlIGJsb2NrcyBtYXkgYmUgamV0dGlzb25l
ZC4KLQotI2lmIEVOQUJMRShERkdfSklUKQotY2xhc3MgREZHQ29kZUJsb2NrcyB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0KLXB1YmxpYzoKLSAgICBERkdDb2RlQmxvY2tzKCk7Ci0g
ICAgfkRGR0NvZGVCbG9ja3MoKTsKLSAgICAKLSAgICAvLyBJbmZvcm0gdGhlIGNvbGxlY3RvciB0
aGF0IGEgY29kZSBibG9jayBoYXMgYmVlbiBqZXR0aXNvbmVkIGZvcm0gaXRzCi0gICAgLy8gZXhl
Y3V0YWJsZSBhbmQgc2hvdWxkIG9ubHkgYmUga2VwdCBhbGl2ZSBpZiB0aGVyZSBhcmUgY2FsbCBm
cmFtZXMgdGhhdCB1c2UKLSAgICAvLyBpdC4gVGhpcyBpcyB0eXBpY2FsbHkgY2FsbGVkIGVpdGhl
ciBmcm9tIGEgcmVjb21waWxhdGlvbiB0cmlnZ2VyLCBvciBmcm9tCi0gICAgLy8gYW4gdW5jb25k
aXRpb25hbCBmaW5hbGl6ZXIgYXNzb2NpYXRlZCB3aXRoIGEgQ29kZUJsb2NrIHRoYXQgaGFkIHdl
YWsKLSAgICAvLyByZWZlcmVuY2VzLCB3aGVyZSBzb21lIHN1YnNldCBvZiB0aG9zZSByZWZlcmVu
Y2VzIHdlcmUgZGVhZC4KLSAgICB2b2lkIGpldHRpc29uKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7
Ci0gICAgCi0gICAgLy8gQ2xlYXIgYWxsIG1hcmsgYml0cyBhc3NvY2lhdGVkIHdpdGggREZHIGNv
ZGUgYmxvY2tzLgotICAgIHZvaWQgY2xlYXJNYXJrcygpOwotICAgIAotICAgIC8vIE1hcmsgYSBw
b2ludGVyIHRoYXQgbWF5IGJlIGEgQ29kZUJsb2NrIHRoYXQgYmVsb25ncyB0byB0aGUgc2V0IG9m
IERGRyBjb2RlCi0gICAgLy8gYmxvY2tzLiBUaGlzIGlzIGRlZmluZWQgaW5saW5lIGluIENvZGVC
bG9jay5oCi0gICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jayk7Ci0gICAgCi0g
ICAgLy8gRGVsZXRlIGFsbCBqZXR0aXNvbmVkIGNvZGUgYmxvY2tzIHRoYXQgaGF2ZSBub3QgYmVl
biBtYXJrZWQgKGkuZS4gYXJlIG5vdCByZWZlcmVuY2VkCi0gICAgLy8gZnJvbSBjYWxsIGZyYW1l
cykuCi0gICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCk7Ci0gICAg
Ci0gICAgLy8gVHJhY2UgYWxsIG1hcmtlZCBjb2RlIGJsb2NrcyAoaS5lLiBhcmUgcmVmZXJlbmNl
ZCBmcm9tIGNhbGwgZnJhbWVzKS4gVGhlIENvZGVCbG9jawotICAgIC8vIGlzIGZyZWUgdG8gbWFr
ZSB1c2Ugb2YgbV9kZmdEYXRhLT5pc01hcmtlZCBhbmQgbV9kZmdEYXRhLT5pc0pldHRpc29uZWQu
Ci0gICAgdm9pZCB0cmFjZU1hcmtlZENvZGVCbG9ja3MoU2xvdFZpc2l0b3ImKTsKLQotcHJpdmF0
ZToKLSAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwotICAgIAotICAgIEhhc2hTZXQ8Q29kZUJs
b2NrKj4gbV9zZXQ7Ci19OwotI2Vsc2UKLWNsYXNzIERGR0NvZGVCbG9ja3MgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotCi1wdWJsaWM6Ci0gICAgdm9pZCBqZXR0aXNvbihQYXNzUmVm
UHRyPENvZGVCbG9jaz4pOwotICAgIHZvaWQgY2xlYXJNYXJrcygpIHsgfQotICAgIHZvaWQgbWFy
ayh2b2lkKikgeyB9Ci0gICAgdm9pZCBkZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tz
KCkgeyB9Ci0gICAgdm9pZCB0cmFjZU1hcmtlZENvZGVCbG9ja3MoU2xvdFZpc2l0b3ImKSB7IH0K
LX07Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE1NDk2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTQsMTEgKzM1NCw2
IEBAIGJvb2wgSGVhcDo6dW5wcm90ZWN0KEpTVmFsdWUgaykKICAgICByZXR1cm4gbV9wcm90ZWN0
ZWRWYWx1ZXMucmVtb3ZlKGsuYXNDZWxsKCkpOwogfQogCi12b2lkIEhlYXA6OmpldHRpc29uREZH
Q29kZUJsb2NrKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCi17Ci0gICAgbV9kZmdD
b2RlQmxvY2tzLmpldHRpc29uKGNvZGVCbG9jayk7Ci19Ci0KIHZvaWQgSGVhcDo6YWRkUmVmZXJl
bmNlKEpTQ2VsbCogY2VsbCwgQXJyYXlCdWZmZXIqIGJ1ZmZlcikKIHsKICAgICBpZiAobV9hcnJh
eUJ1ZmZlcnMuYWRkUmVmZXJlbmNlKGNlbGwsIGJ1ZmZlcikpIHsKQEAgLTQ1NywxMSArNDUyLDEw
IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAgICB9CiAKICAgICBDb25zZXJ2YXRpdmVSb290
cyBzdGFja1Jvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpLCAmbV9zdG9yYWdlU3BhY2UpOwot
ICAgIG1fZGZnQ29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CisgICAgbV9jb2RlQmxvY2tzLmNsZWFy
TWFya3MoKTsKICAgICB7CiAgICAgICAgIEdDUEhBU0UoR2F0aGVyU3RhY2tSb290cyk7Ci0gICAg
ICAgIHN0YWNrKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoCi0gICAgICAgICAgICBzdGFja1Jv
b3RzLCBtX2ppdFN0dWJSb3V0aW5lcywgbV9kZmdDb2RlQmxvY2tzKTsKKyAgICAgICAgc3RhY2so
KS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhzdGFja1Jvb3RzLCBtX2ppdFN0dWJSb3V0aW5lcywg
bV9jb2RlQmxvY2tzKTsKICAgICB9CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTQ4NSwxMiAr
NDc5LDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIHsKICAgICAgICAgUGFyYWxsZWxN
b2RlRW5hYmxlciBlbmFibGVyKHZpc2l0b3IpOwogCi0gICAgICAgIGlmIChtX3ZtLT5jb2RlQmxv
Y2tzQmVpbmdDb21waWxlZC5zaXplKCkpIHsKLSAgICAgICAgICAgIEdDUEhBU0UoVmlzaXRBY3Rp
dmVDb2RlQmxvY2spOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZtLT5j
b2RlQmxvY2tzQmVpbmdDb21waWxlZC5zaXplKCk7IGkrKykKLSAgICAgICAgICAgICAgICBtX3Zt
LT5jb2RlQmxvY2tzQmVpbmdDb21waWxlZFtpXS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0g
ICAgICAgIH0KLQogICAgICAgICBtX3ZtLT5zbWFsbFN0cmluZ3MudmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKHZpc2l0b3IpOwogCiAgICAgICAgIHsKQEAgLTU1OCw3ICs1NDYsNyBAQCB2b2lkIEhlYXA6
Om1hcmtSb290cygpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdDUEhBU0UoVHJhY2VDb2RlQmxv
Y2tzQW5kSklUU3R1YlJvdXRpbmVzKTsKICAgICAgICAgICAgIE1BUktfTE9HX1JPT1QodmlzaXRv
ciwgIlRyYWNlIENvZGUgQmxvY2tzIGFuZCBKSVQgU3R1YiBSb3V0aW5lcyIpOwotICAgICAgICAg
ICAgbV9kZmdDb2RlQmxvY2tzLnRyYWNlTWFya2VkQ29kZUJsb2Nrcyh2aXNpdG9yKTsKKyAgICAg
ICAgICAgIG1fY29kZUJsb2Nrcy50cmFjZU1hcmtlZCh2aXNpdG9yKTsKICAgICAgICAgICAgIG1f
aml0U3R1YlJvdXRpbmVzLnRyYWNlTWFya2VkU3R1YlJvdXRpbmVzKHZpc2l0b3IpOwogICAgICAg
ICAgICAgdmlzaXRvci5kb25hdGVBbmREcmFpbigpOwogICAgICAgICB9CkBAIC02ODMsOCArNjcx
LDggQEAgdm9pZCBIZWFwOjpkZWxldGVBbGxDb21waWxlZENvZGUoKQogICAgICAgICBzdGF0aWNf
Y2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjdXJyZW50KS0+Y2xlYXJDb2RlSWZOb3RDb21waWxp
bmcoKTsKICAgICB9CiAKLSAgICBtX2RmZ0NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOwotICAgIG1f
ZGZnQ29kZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEpldHRpc29uZWRDb2RlQmxvY2tzKCk7CisgICAg
bV9jb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKKyAgICBtX2NvZGVCbG9ja3MuZGVsZXRlVW5tYXJr
ZWRBbmRVbnJlZmVyZW5jZWQoKTsKIH0KIAogdm9pZCBIZWFwOjpkZWxldGVVbm1hcmtlZENvbXBp
bGVkQ29kZSgpCkBAIC03MDEsNyArNjg5LDcgQEAgdm9pZCBIZWFwOjpkZWxldGVVbm1hcmtlZENv
bXBpbGVkQ29kZSgpCiAgICAgICAgIG1fY29tcGlsZWRDb2RlLnJlbW92ZShjdXJyZW50KTsKICAg
ICB9CiAKLSAgICBtX2RmZ0NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRKZXR0aXNvbmVkQ29kZUJs
b2NrcygpOworICAgIG1fY29kZUJsb2Nrcy5kZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZCgp
OwogICAgIG1faml0U3R1YlJvdXRpbmVzLmRlbGV0ZVVubWFya2VkSmV0dGlzb25lZFN0dWJSb3V0
aW5lcygpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAx
NTQ5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDggKzI0LDggQEAKIAogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVk
ZSAiQmxvY2tBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRl
ICJDb3B5VmlzaXRvci5oIgotI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKICNpbmNsdWRlICJH
Q0luY29taW5nUmVmQ291bnRlZFNldC5oIgogI2luY2x1ZGUgIkdDVGhyZWFkU2hhcmVkRGF0YS5o
IgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgpAQCAtMTQ0LDggKzE0NCw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHByb3RlY3QoSlNWYWx1ZSk7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgdW5wcm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVl
IHdoZW4gdGhlIHByb3RlY3QgY291bnQgZHJvcHMgdG8gMC4KICAgICAgICAgCi0gICAgICAgIHZv
aWQgamV0dGlzb25ERkdDb2RlQmxvY2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKLQogICAgICAg
ICBzaXplX3QgZXh0cmFTaXplKCk7IC8vIGV4dHJhIG1lbW9yeSB1c2FnZSBvdXRzaWRlIG9mIHBh
Z2VzIGFsbG9jYXRlZCBieSB0aGUgaGVhcAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXpl
X3Qgc2l6ZSgpOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3QgY2FwYWNpdHkoKTsK
QEAgLTI3Myw3ICsyNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBIYW5kbGVTZXQg
bV9oYW5kbGVTZXQ7CiAgICAgICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7Ci0gICAgICAg
IERGR0NvZGVCbG9ja3MgbV9kZmdDb2RlQmxvY2tzOworICAgICAgICBDb2RlQmxvY2tTZXQgbV9j
b2RlQmxvY2tzOwogICAgICAgICBKSVRTdHViUm91dGluZVNldCBtX2ppdFN0dWJSb3V0aW5lczsK
ICAgICAgICAgRmluYWxpemVyT3duZXIgbV9maW5hbGl6ZXJPd25lcjsKICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suY3BwCShyZXZp
c2lvbiAxNTQ5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDkgKzk2LDkgQEAgdm9pZCBKU1N0YWNrOjpnYXRo
ZXJDb25zZXJ2YXRpdmVSb290cyhDbwogICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigp
LCBnZXRUb3BPZlN0YWNrKCkpOwogfQogCi12b2lkIEpTU3RhY2s6OmdhdGhlckNvbnNlcnZhdGl2
ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSklUU3R1YlJvdXRp
bmVTZXQmIGppdFN0dWJSb3V0aW5lcywgREZHQ29kZUJsb2NrcyYgZGZnQ29kZUJsb2NrcykKK3Zv
aWQgSlNTdGFjazo6Z2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmIGNv
bnNlcnZhdGl2ZVJvb3RzLCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzLCBDb2Rl
QmxvY2tTZXQmIGNvZGVCbG9ja3MpCiB7Ci0gICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2lu
KCksIGdldFRvcE9mU3RhY2soKSwgaml0U3R1YlJvdXRpbmVzLCBkZmdDb2RlQmxvY2tzKTsKKyAg
ICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZ2V0VG9wT2ZTdGFjaygpLCBqaXRTdHVi
Um91dGluZXMsIGNvZGVCbG9ja3MpOwogfQogCiB2b2lkIEpTU3RhY2s6OnJlbGVhc2VFeGNlc3ND
YXBhY2l0eSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFj
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9KU1N0
YWNrLmgJKHJldmlzaW9uIDE1NDk2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9KU1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDggQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKKyAgICBjbGFzcyBDb2RlQmxvY2tTZXQ7CiAgICAgY2xhc3MgQ29uc2VydmF0
aXZlUm9vdHM7Ci0gICAgY2xhc3MgREZHQ29kZUJsb2NrczsKICAgICBjbGFzcyBFeGVjU3RhdGU7
CiAgICAgY2xhc3MgSklUU3R1YlJvdXRpbmVTZXQ7CiAgICAgY2xhc3MgVk07CkBAIC03MSw3ICs3
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB+SlNTdGFjaygpOwogICAgICAgICAKICAg
ICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYpOwot
ICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJiwg
SklUU3R1YlJvdXRpbmVTZXQmLCBERkdDb2RlQmxvY2tzJik7CisgICAgICAgIHZvaWQgZ2F0aGVy
Q29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKSVRTdHViUm91dGluZVNldCYs
IENvZGVCbG9ja1NldCYpOwogCiAgICAgICAgIFJlZ2lzdGVyKiBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOyB9CiAgICAg
ICAgIFJlZ2lzdGVyKiBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE1NDk2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MCwyMCArOTAsNiBAQCBJbnRyaW5zaWMgTmF0aXZlRXhlY3V0YWJsZTo6
aW50cmluc2ljKCkgCiB9CiAjZW5kaWYKIAotI2lmIEVOQUJMRShKSVQpCi0vLyBVdGlsaXR5IG1l
dGhvZCB1c2VkIGZvciBqZXR0aXNvbmluZyBjb2RlIGJsb2Nrcy4KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1zdGF0aWMgdm9pZCBqZXR0aXNvbkNvZGVCbG9jayhWTSYgdm0sIFJlZlB0cjxUPiYgY29k
ZUJsb2NrKQotewotICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29kZUJsb2Nr
LT5qaXRUeXBlKCkpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKLSAg
ICBSZWZQdHI8VD4gY29kZUJsb2NrVG9KZXR0aXNvbiA9IGNvZGVCbG9jay5yZWxlYXNlKCk7Ci0g
ICAgY29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxUPihjb2RlQmxvY2tUb0pldHRpc29u
LT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Ci0gICAgY29kZUJsb2NrVG9KZXR0aXNvbi0+dW5saW5r
SW5jb21pbmdDYWxscygpOwotICAgIHZtLmhlYXAuamV0dGlzb25ERkdDb2RlQmxvY2soc3RhdGlj
X3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KGNvZGVCbG9ja1RvSmV0dGlzb24ucmVsZWFzZSgpKSk7
Ci19Ci0jZW5kaWYKLQogY29uc3QgQ2xhc3NJbmZvIFNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbyA9
IHsgIlNjcmlwdEV4ZWN1dGFibGUiLCAmRXhlY3V0YWJsZUJhc2U6OnNfaW5mbywgMCwgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShTY3JpcHRFeGVjdXRhYmxlKSB9OwogCiAjaWYgRU5BQkxFKEpJVCkK
QEAgLTEyNSwxMiArMTExLDYgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShD
b2RlQgogICAgIAogICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7CiAgICAgCi0gICAg
aWYgKEpJVENvZGU6OmlzSklUKGdlbmVyaWNDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKLSAgICAg
ICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoCi0gICAgICAgICAgICBzaXplb2YoQ29k
ZUJsb2NrKSArIGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGUoKS0+c2l6ZSgpKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKENvZGVCbG9j
aykpOwotICAgIAogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGdlbmVyaWNDb2Rl
QmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpOwogICAgIAogICAgIFJlZlB0cjxDb2RlQmxvY2s+
IG9sZENvZGVCbG9jazsKQEAgLTM3NiwxNSArMzU2LDYgQEAgaW5saW5lIGNvbnN0IGNoYXIqIHNh
bXBsaW5nRGVzY3JpcHRpb24oSgogICAgIH0KIH0KIAotI2lmIEVOQUJMRShKSVQpCi12b2lkIEV2
YWxFeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mIHZtKQotewotICAgIGpldHRp
c29uQ29kZUJsb2NrKHZtLCBtX2V2YWxDb2RlQmxvY2spOwotICAgIG1faml0Q29kZUZvckNhbGwg
PSBtX2V2YWxDb2RlQmxvY2stPmppdENvZGUoKTsKLSAgICBBU1NFUlQoIW1faml0Q29kZUZvckNh
bGxXaXRoQXJpdHlDaGVjayk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQogdm9pZCBFdmFs
RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEV2YWxFeGVjdXRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEV2YWxFeGVj
dXRhYmxlKj4oY2VsbCk7CkBAIC00MjYsMTUgKzM5Nyw2IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhl
Y3V0YWJsZTo6Y2hlY2tTeW50YXgKICAgICByZXR1cm4gZXJyb3IudG9FcnJvck9iamVjdChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBtX3NvdXJjZSk7CiB9CiAKLSNpZiBFTkFCTEUoSklUKQotdm9pZCBQ
cm9ncmFtRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJiB2bSkKLXsKLSAgICBq
ZXR0aXNvbkNvZGVCbG9jayh2bSwgbV9wcm9ncmFtQ29kZUJsb2NrKTsKLSAgICBtX2ppdENvZGVG
b3JDYWxsID0gbV9wcm9ncmFtQ29kZUJsb2NrLT5qaXRDb2RlKCk7Ci0gICAgQVNTRVJUKCFtX2pp
dENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwotfQotI2VuZGlmCi0KIHZvaWQgUHJvZ3JhbUV4
ZWN1dGFibGU6OnVubGlua0NhbGxzKCkKIHsKICNpZiBFTkFCTEUoSklUKQpAQCAtNTE4LDIyICs0
ODAsNiBAQCBGdW5jdGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotI2lmIEVOQUJMRShKSVQpCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYgdm0pCi17Ci0gICAgamV0dGlzb25D
b2RlQmxvY2sodm0sIG1fY29kZUJsb2NrRm9yQ2FsbCk7Ci0gICAgbV9qaXRDb2RlRm9yQ2FsbCA9
IG1fY29kZUJsb2NrRm9yQ2FsbC0+aml0Q29kZSgpOwotICAgIG1faml0Q29kZUZvckNhbGxXaXRo
QXJpdHlDaGVjayA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCk7
Ci19Ci0KLXZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JD
b25zdHJ1Y3QoVk0mIHZtKQotewotICAgIGpldHRpc29uQ29kZUJsb2NrKHZtLCBtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdCk7Ci0gICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QtPmppdENvZGUoKTsKLSAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJp
dHlDaGVjayA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2so
KTsKLX0KLSNlbmRpZgotCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9u
IDE1NDk2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDQ1LDEwICs0NDUsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
dm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGpldHRp
c29uT3B0aW1pemVkQ29kZShWTSYpOwotI2VuZGlmCi0KICAgICBFdmFsQ29kZUJsb2NrKiBjb2Rl
QmxvY2soKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZXZhbENvZGVCbG9jay5nZXQoKTsKQEAg
LTUwNiwxMCArNTAyLDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0Nl
bGwqKTsKIAotI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUo
Vk0mKTsKLSNlbmRpZgotCiAgICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrKCkKICAgICB7
CiAgICAgICAgIHJldHVybiBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCk7CkBAIC01ODEsMTAgKzU3
Myw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0Lmdl
dCgpOwogICAgIH0KICAgICAgICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGpldHRpc29u
T3B0aW1pemVkQ29kZUZvckNhbGwoVk0mKTsKLSNlbmRpZgotCiAgICAgYm9vbCBpc0dlbmVyYXRl
ZEZvckNhbGwoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ2Fs
bDsKQEAgLTU5NSwxMCArNTgzLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jb2RlQmxv
Y2tGb3JDYWxsLmdldCgpOwogICAgIH0KIAotI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBqZXR0
aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoVk0mKTsKLSNlbmRpZgotCiAgICAgYm9vbCBp
c0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CkBAIC02MDksMTggKzU5Myw2IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpOwogICAgIH0KICAgICAgICAg
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvcihWTSYg
dm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIGlmIChraW5k
ID09IENvZGVGb3JDYWxsKSAKLSAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNh
bGwodm0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVG
b3JDb25zdHJ1Y3QpOwotICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3Ry
dWN0KHZtKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgICAgICAKICAgICBib29sIGlz
R2VuZXJhdGVkRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICB7CiAgICAgICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCShyZXZpc2lvbiAxNTQ5NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsMTcgKzI3NCw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBOdW1lcmljU3RyaW5ncyBudW1lcmljU3RyaW5nczsKICAgICAgICAgRGF0ZUluc3Rh
bmNlQ2FjaGUgZGF0ZUluc3RhbmNlQ2FjaGU7CiAgICAgICAgIFdURjo6U2ltcGxlU3RhdHMgbWFj
aGluZUNvZGVCeXRlc1BlckJ5dGVjb2RlV29yZEZvckJhc2VsaW5lSklUOwotICAgICAgICBWZWN0
b3I8Q29kZUJsb2NrKj4gY29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQ7Ci0gICAgICAgIHZvaWQgc3Rh
cnRlZENvbXBpbGluZyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICAgICAgewotICAgICAgICAg
ICAgY29kZUJsb2Nrc0JlaW5nQ29tcGlsZWQuYXBwZW5kKGNvZGVCbG9jayk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGZpbmlzaGVkQ29tcGlsaW5nKENvZGVCbG9jayogY29kZUJsb2NrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNvZGVCbG9jaywgY29kZUJsb2Nr
ID09IGNvZGVCbG9ja3NCZWluZ0NvbXBpbGVkLmxhc3QoKSk7Ci0gICAgICAgICAgICBjb2RlQmxv
Y2tzQmVpbmdDb21waWxlZC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0KIAogICAgICAgICB2b2lk
IHNldEluRGVmaW5lT3duUHJvcGVydHkoYm9vbCBpbkRlZmluZU93blByb3BlcnR5KQogICAgICAg
ICB7Cg==
</data>
<flag name="review"
          id="232417"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>