<?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>140660</bug_id>
          
          <creation_ts>2015-01-19 20:06:15 -0800</creation_ts>
          <short_desc>Polymorphic call inlining should be based on polymorphic call inline caching rather than logging</short_desc>
          <delta_ts>2015-02-06 09:45:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>140659</dependson>
    
    <dependson>140959</dependson>
    
    <dependson>140980</dependson>
    
    <dependson>141062</dependson>
    
    <dependson>141107</dependson>
          <blocked>140685</blocked>
    
    <blocked>140975</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1062617</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-19 20:06:15 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062828</commentid>
    <comment_count>1</comment_count>
      <attachid>245005</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-20 11:41:01 -0800</bug_when>
    <thetext>Created attachment 245005
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062844</commentid>
    <comment_count>2</comment_count>
      <attachid>245010</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-20 12:33:42 -0800</bug_when>
    <thetext>Created attachment 245010
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062855</commentid>
    <comment_count>3</comment_count>
      <attachid>245012</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-20 13:01:17 -0800</bug_when>
    <thetext>Created attachment 245012
almost done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062924</commentid>
    <comment_count>4</comment_count>
      <attachid>245031</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-20 16:02:04 -0800</bug_when>
    <thetext>Created attachment 245031
it builds!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063204</commentid>
    <comment_count>5</comment_count>
      <attachid>245094</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-21 15:19:52 -0800</bug_when>
    <thetext>Created attachment 245094
it passes most tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064320</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-26 17:59:27 -0800</bug_when>
    <thetext>I made this pass all tests, but in its current form it is not a speed-up.  I need to investigate what is going on.  Part of the problem is that right now I&apos;m testing on a relatively noisy machine; I&apos;ll need to switch to a quieter machine for the rest of my experiments.


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

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

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree                FixPolyCall                                    
SunSpider:
   3d-cube                                            4.8558+-0.0721     ?      4.9723+-0.4128        ? might be 1.0240x slower
   3d-morph                                           6.0593+-0.0953            6.0163+-0.0730        
   3d-raytrace                                        6.3211+-0.0614     ?      6.5042+-0.4535        ? might be 1.0290x slower
   access-binary-trees                                2.0788+-0.0598     ^      1.9854+-0.0326        ^ definitely 1.0471x faster
   access-fannkuch                                    5.9025+-0.3382            5.8666+-0.3605        
   access-nbody                                       2.8342+-0.0864     ?      2.8611+-0.1857        ?
   access-nsieve                                      3.5344+-0.0818            3.5312+-0.0662        
   bitops-3bit-bits-in-byte                           1.5518+-0.0302     ?      1.5601+-0.0492        ?
   bitops-bits-in-byte                                3.6075+-0.2641            3.6074+-0.1971        
   bitops-bitwise-and                                 2.0337+-0.0810     ?      2.7629+-1.9379        ? might be 1.3586x slower
   bitops-nsieve-bits                                 3.6860+-0.1130            3.6228+-0.0621          might be 1.0174x faster
   controlflow-recursive                              2.1583+-0.1528            2.0998+-0.1337          might be 1.0279x faster
   crypto-aes                                         4.0738+-0.0963     ?      4.1367+-0.1704        ? might be 1.0154x slower
   crypto-md5                                         2.3341+-0.0371            2.2906+-0.0264          might be 1.0190x faster
   crypto-sha1                                        2.7106+-0.1998            2.6374+-0.2598          might be 1.0278x faster
   date-format-tofte                                  9.6587+-0.5001            9.5047+-0.6546          might be 1.0162x faster
   date-format-xparb                                  5.2814+-0.2546     ?      5.3512+-0.2784        ? might be 1.0132x slower
   math-cordic                                        3.0581+-0.0361            3.0430+-0.0566        
   math-partial-sums                                  5.0774+-0.0708            4.9861+-0.0696          might be 1.0183x faster
   math-spectral-norm                                 1.9101+-0.0442     ?      1.9120+-0.0901        ?
   regexp-dna                                         7.7842+-1.2425     ?      8.1080+-1.3190        ? might be 1.0416x slower
   string-base64                                      4.3015+-0.1596            4.2791+-0.1802        
   string-fasta                                       6.7238+-0.4960     ?      7.0305+-0.8661        ? might be 1.0456x slower
   string-tagcloud                                    9.6505+-0.1322     ?     10.1047+-0.5070        ? might be 1.0471x slower
   string-unpack-code                                20.4137+-0.1169           20.3167+-1.4290        
   string-validate-input                              4.5991+-0.0677            4.5395+-0.0827          might be 1.0131x faster

   &lt;arithmetic&gt; *                                     5.0846+-0.0637     ?      5.1396+-0.1146        ? might be 1.0108x slower
   &lt;geometric&gt;                                        4.2010+-0.0374     ?      4.2315+-0.0910        ? might be 1.0073x slower
   &lt;harmonic&gt;                                         3.5930+-0.0236     ?      3.6010+-0.0863        ? might be 1.0022x slower

                                                        TipOfTree                FixPolyCall                                    
LongSpider:
   3d-cube                                          854.7516+-10.6600    ?    875.7804+-34.7338       ? might be 1.0246x slower
   3d-morph                                        1569.9261+-56.7171    ?   1593.7264+-82.2804       ? might be 1.0152x slower
   3d-raytrace                                      781.3981+-32.3612         741.8986+-8.2863          might be 1.0532x faster
   access-binary-trees                             1005.5844+-17.7382    ?   1006.5353+-12.1762       ?
   access-fannkuch                                  331.7889+-11.1695    ?    337.5868+-13.8001       ? might be 1.0175x slower
   access-nbody                                     615.7902+-3.8148     ?    625.5809+-29.9598       ? might be 1.0159x slower
   access-nsieve                                    934.9967+-8.8635     ?    944.0406+-28.6616       ?
   bitops-3bit-bits-in-byte                          46.8556+-0.8666     ?     49.0632+-1.5896        ? might be 1.0471x slower
   bitops-bits-in-byte                              109.4880+-9.7351     ?    111.2798+-10.1379       ? might be 1.0164x slower
   bitops-nsieve-bits                               721.0316+-32.4553         694.7774+-4.1978          might be 1.0378x faster
   controlflow-recursive                            495.0665+-19.3433         488.2212+-5.6572          might be 1.0140x faster
   crypto-aes                                       704.0070+-11.7194    ?    707.4647+-7.9522        ?
   crypto-md5                                       626.0496+-22.7878         619.1036+-11.5709         might be 1.0112x faster
   crypto-sha1                                      683.0887+-27.7961         674.4854+-25.7800         might be 1.0128x faster
   date-format-tofte                                806.1702+-9.5200     ?    851.0765+-51.9804       ? might be 1.0557x slower
   date-format-xparb                                767.0769+-24.4380    ?    773.2832+-12.9653       ?
   math-cordic                                      630.7135+-30.3916         602.8797+-24.3067         might be 1.0462x faster
   math-partial-sums                                556.0626+-26.0133    ?    556.4766+-22.8071       ?
   math-spectral-norm                               581.1031+-27.3986         574.4264+-10.5647         might be 1.0116x faster
   string-base64                                    369.6418+-11.6243         366.1196+-2.3382        
   string-fasta                                     439.6733+-14.7963    ?    441.8207+-7.7052        ?
   string-tagcloud                                  225.3708+-7.4796          225.0334+-7.6755        

   &lt;arithmetic&gt;                                     629.8016+-5.6205     ?    630.0300+-6.2366        ? might be 1.0004x slower
   &lt;geometric&gt; *                                    517.4642+-5.9397     ?    518.0108+-3.8257        ? might be 1.0011x slower
   &lt;harmonic&gt;                                       336.9593+-5.5629     ?    342.2204+-4.8509        ? might be 1.0156x slower

                                                        TipOfTree                FixPolyCall                                    
V8Spider:
   crypto                                            55.8490+-1.6561           54.9303+-1.5342          might be 1.0167x faster
   deltablue                                        109.4323+-7.9379     ^     83.7924+-6.7757        ^ definitely 1.3060x faster
   earley-boyer                                      47.2363+-3.6520     ?     47.6353+-2.1398        ?
   raytrace                                          43.1516+-0.5055     ^     41.2514+-0.8062        ^ definitely 1.0461x faster
   regexp                                            71.8124+-2.9425     ?     73.7677+-1.9984        ? might be 1.0272x slower
   richards                                         102.7402+-26.5313          79.0120+-3.0887          might be 1.3003x faster
   splay                                             36.7013+-1.7106           36.0933+-3.0978          might be 1.0168x faster

   &lt;arithmetic&gt;                                      66.7033+-4.7709     ^     59.4975+-0.9404        ^ definitely 1.1211x faster
   &lt;geometric&gt; *                                     61.4480+-3.2161     ^     56.7256+-0.9052        ^ definitely 1.0833x faster
   &lt;harmonic&gt;                                        57.0414+-2.3076           54.0350+-0.9939          might be 1.0556x faster

                                                        TipOfTree                FixPolyCall                                    
Octane:
   encrypt                                           0.23607+-0.00746          0.23540+-0.00751       
   decrypt                                           4.11038+-0.18736    ?     4.12621+-0.18494       ?
   deltablue                                x2       0.20546+-0.00494          0.20379+-0.00315       
   earley                                            0.69655+-0.00649    ?     0.71070+-0.01568       ? might be 1.0203x slower
   boyer                                             5.42812+-0.11748          5.37849+-0.03850       
   navier-stokes                            x2       5.37391+-0.20773          5.19521+-0.01944         might be 1.0344x faster
   raytrace                                 x2       1.34170+-0.03551    ?     1.37496+-0.09865       ? might be 1.0248x slower
   richards                                 x2       0.13704+-0.00557    ?     0.15011+-0.01255       ? might be 1.0954x slower
   splay                                    x2       0.39117+-0.00307    ?     0.39671+-0.00740       ? might be 1.0142x slower
   regexp                                   x2      34.67763+-1.37195         33.48366+-0.51511         might be 1.0357x faster
   pdfjs                                    x2      51.43245+-0.51229    ?    51.46683+-0.34558       ?
   mandreel                                 x2      54.33918+-1.02912         54.07859+-0.36252       
   gbemu                                    x2      44.86952+-0.73534    !    47.37845+-1.07666       ! definitely 1.0559x slower
   closure                                           0.57350+-0.00715          0.56479+-0.01064         might be 1.0154x faster
   jquery                                            7.59473+-0.35511          7.20646+-0.06271         might be 1.0539x faster
   box2d                                    x2      15.99452+-0.14954    ?    16.33539+-0.43363       ? might be 1.0213x slower
   zlib                                     x2     477.97645+-2.72988    ?   503.23821+-33.84595      ? might be 1.0529x slower
   typescript                               x2     859.27669+-10.16573       847.97827+-11.97219        might be 1.0133x faster

   &lt;arithmetic&gt;                                    103.68903+-0.64792    ?   104.69275+-2.67564       ? might be 1.0097x slower
   &lt;geometric&gt; *                                     7.30687+-0.03588    ?     7.37068+-0.07083       ? might be 1.0087x slower
   &lt;harmonic&gt;                                        0.75740+-0.01094    ?     0.78177+-0.02638       ? might be 1.0322x slower

                                                        TipOfTree                FixPolyCall                                    
Kraken:
   ai-astar                                          274.138+-5.178      ?     279.253+-12.471        ? might be 1.0187x slower
   audio-beat-detection                              114.156+-2.080            112.965+-4.623           might be 1.0105x faster
   audio-dft                                         163.293+-5.969            156.085+-1.414           might be 1.0462x faster
   audio-fft                                          93.559+-23.371            83.208+-2.484           might be 1.1244x faster
   audio-oscillator                                  239.754+-6.020            237.256+-3.454           might be 1.0105x faster
   imaging-darkroom                                  181.792+-8.301      ?     186.695+-9.071         ? might be 1.0270x slower
   imaging-desaturate                                 62.888+-1.672             62.168+-0.453           might be 1.0116x faster
   imaging-gaussian-blur                             112.747+-2.846      ?     114.454+-4.416         ? might be 1.0151x slower
   json-parse-financial                               48.209+-3.360             47.308+-2.103           might be 1.0190x faster
   json-stringify-tinderbox                           60.807+-2.832             59.560+-3.421           might be 1.0209x faster
   stanford-crypto-aes                                58.515+-1.533      ?      60.197+-2.711         ? might be 1.0288x slower
   stanford-crypto-ccm                                56.344+-6.099      ?      62.606+-3.959         ? might be 1.1111x slower
   stanford-crypto-pbkdf2                            176.011+-4.383            172.458+-3.269           might be 1.0206x faster
   stanford-crypto-sha256-iterative                   56.009+-2.462             55.028+-2.161           might be 1.0178x faster

   &lt;arithmetic&gt; *                                    121.302+-2.765            120.660+-1.258           might be 1.0053x faster
   &lt;geometric&gt;                                       102.278+-2.603            101.844+-1.252           might be 1.0043x faster
   &lt;harmonic&gt;                                         87.582+-2.485             87.546+-1.455           might be 1.0004x faster

                                                        TipOfTree                FixPolyCall                                    
JSRegress:
   abs-boolean                                        2.6049+-0.0677            2.5647+-0.0306          might be 1.0156x faster
   adapt-to-double-divide                            16.9186+-0.3066           16.5565+-0.1070          might be 1.0219x faster
   aliased-arguments-getbyval                         1.1918+-0.1035            1.1116+-0.0355          might be 1.0721x faster
   allocate-big-object                                2.5558+-0.4302            2.4336+-0.1182          might be 1.0502x faster
   arity-mismatch-inlining                            0.8627+-0.0694            0.8506+-0.0687          might be 1.0142x faster
   array-access-polymorphic-structure                 6.6723+-0.7541     ?      6.8214+-1.0141        ? might be 1.0223x slower
   array-nonarray-polymorhpic-access                 39.8150+-12.0110          35.5320+-0.9976          might be 1.1205x faster
   array-prototype-every                             76.2627+-2.3596     !     83.3018+-2.4938        ! definitely 1.0923x slower
   array-prototype-forEach                           74.7880+-2.9860     !     82.9992+-2.6629        ! definitely 1.1098x slower
   array-prototype-map                               93.3985+-2.1734     !    100.6982+-3.8273        ! definitely 1.0782x slower
   array-prototype-some                              76.9130+-3.0117     ?     83.7532+-4.6873        ? might be 1.0889x slower
   array-splice-contiguous                           41.6426+-2.2368           41.0195+-2.1454          might be 1.0152x faster
   array-with-double-add                              4.0129+-0.0710            4.0056+-0.0448        
   array-with-double-increment                        3.2922+-0.1901     ?      3.5830+-0.9336        ? might be 1.0883x slower
   array-with-double-mul-add                          4.9202+-0.0449     ?      4.9234+-0.0678        ?
   array-with-double-sum                              3.2391+-0.0157            3.2382+-0.1135        
   array-with-int32-add-sub                           6.6977+-0.1013            6.6814+-0.2090        
   array-with-int32-or-double-sum                     3.3183+-0.0937            3.2527+-0.0440          might be 1.0202x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     33.6755+-1.8291           32.6456+-1.6186          might be 1.0315x faster
   ArrayBuffer-DataView-alloc-long-lived             13.7045+-1.0870           13.4375+-1.4760          might be 1.0199x faster
   ArrayBuffer-Int32Array-byteOffset                  3.4444+-0.0684     ?      3.5673+-0.2831        ? might be 1.0357x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     33.3881+-1.4565           32.3429+-1.9763          might be 1.0323x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.9961+-1.6458           22.6314+-2.0743          might be 1.0161x faster
   ArrayBuffer-Int8Array-alloc-long-lived            13.9967+-1.5317           12.2891+-0.5588          might be 1.1390x faster
   ArrayBuffer-Int8Array-alloc                       12.2901+-1.5505           11.0680+-1.2785          might be 1.1104x faster
   asmjs_bool_bug                                     7.2844+-0.0654     ?      7.4041+-0.2901        ? might be 1.0164x slower
   assign-custom-setter-polymorphic                   3.2333+-0.0379     ^      2.9891+-0.0500        ^ definitely 1.0817x faster
   assign-custom-setter                               4.8489+-0.5299            4.1934+-0.1572          might be 1.1563x faster
   basic-set                                          9.7010+-0.1444     ?     10.0443+-0.4641        ? might be 1.0354x slower
   big-int-mul                                        3.9959+-0.0968            3.9931+-0.0636        
   boolean-test                                       2.9200+-0.0593     ?      2.9530+-0.0454        ? might be 1.0113x slower
   branch-fold                                        3.6387+-0.0489     ?      3.6564+-0.1138        ?
   by-val-generic                                     8.5134+-0.3697     ?      8.5792+-0.0806        ?
   call-spread-apply                                 20.7251+-1.8108           18.9203+-1.1110          might be 1.0954x faster
   call-spread-call                                  15.3475+-0.3227     ?     16.4271+-1.4629        ? might be 1.0703x slower
   captured-assignments                               0.4463+-0.0227            0.4328+-0.0112          might be 1.0312x faster
   cast-int-to-double                                 5.3556+-0.2399            5.3299+-0.3069        
   cell-argument                                      8.2843+-0.1661     ?      8.4526+-0.2442        ? might be 1.0203x slower
   cfg-simplify                                       2.8669+-0.0354     ?      2.9221+-0.0909        ? might be 1.0193x slower
   chain-getter-access                                9.7006+-0.2536            9.6702+-0.3387        
   cmpeq-obj-to-obj-other                            10.5999+-1.0832     ?     10.7236+-1.1801        ? might be 1.0117x slower
   constant-test                                      4.8171+-0.0195            4.8051+-0.0281        
   DataView-custom-properties                        39.6448+-2.4336           39.1651+-0.9497          might be 1.0122x faster
   delay-tear-off-arguments-strictmode                9.2396+-0.8645            8.3322+-0.6098          might be 1.1089x faster
   destructuring-arguments                            5.6628+-0.1177            5.6363+-0.0654        
   destructuring-swap                                 4.9360+-0.0456     ?      4.9422+-0.0409        ?
   direct-arguments-getbyval                          1.1482+-0.0917     ?      1.1575+-0.0566        ?
   div-boolean-double                                 5.2026+-0.1001            5.1766+-0.0866        
   div-boolean                                        7.7222+-0.0770     ?      7.7245+-0.1022        ?
   double-get-by-val-out-of-bounds                    4.2112+-0.0255     !      4.4477+-0.0444        ! definitely 1.0561x slower
   double-pollution-getbyval                          8.7473+-0.0646     ?      8.8260+-0.1981        ?
   double-pollution-putbyoffset                       4.1319+-0.1219     ?      4.1700+-0.1400        ?
   double-to-int32-typed-array-no-inline              2.2651+-0.1717            2.1342+-0.0427          might be 1.0614x faster
   double-to-int32-typed-array                        1.9797+-0.1547     ?      1.9797+-0.2214        ?
   double-to-uint32-typed-array-no-inline             2.5753+-0.6664            2.1806+-0.0403          might be 1.1810x faster
   double-to-uint32-typed-array                       2.0083+-0.0378            2.0072+-0.1096        
   elidable-new-object-dag                           43.5420+-1.4718           41.9149+-2.6828          might be 1.0388x faster
   elidable-new-object-roflcopter                   173.7063+-3.5263          173.6252+-1.9137        
   elidable-new-object-then-call                     40.1200+-3.7072           38.7590+-1.3740          might be 1.0351x faster
   elidable-new-object-tree                          45.3626+-1.1883           44.8440+-1.3154          might be 1.0116x faster
   empty-string-plus-int                              5.4471+-0.2963            5.3599+-0.2293          might be 1.0163x faster
   emscripten-cube2hash                              36.2364+-1.6329     ?     36.5983+-1.8590        ?
   external-arguments-getbyval                        1.3615+-0.1170            1.2933+-0.0318          might be 1.0527x faster
   external-arguments-putbyval                        2.0293+-0.0934     ?      2.0793+-0.1029        ? might be 1.0246x slower
   fixed-typed-array-storage-var-index                1.2185+-0.0287     ?      1.2506+-0.0690        ? might be 1.0263x slower
   fixed-typed-array-storage                          0.9441+-0.1331            0.8691+-0.0133          might be 1.0863x faster
   Float32Array-matrix-mult                           4.5580+-0.5131            4.4146+-0.2761          might be 1.0325x faster
   Float32Array-to-Float64Array-set                  56.0017+-3.3237           53.4372+-1.0345          might be 1.0480x faster
   Float64Array-alloc-long-lived                     66.2747+-1.7408     ?     66.5922+-1.9978        ?
   Float64Array-to-Int16Array-set                    67.0790+-0.9843     ?     67.1090+-1.5051        ?
   fold-double-to-int                                14.6191+-0.5399           14.4402+-1.4539          might be 1.0124x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     17.6242+-0.3059     ^     14.9293+-0.5075        ^ definitely 1.1805x faster
   fold-get-by-id-to-multi-get-by-offset             17.7137+-0.7415     ^     14.7365+-0.6530        ^ definitely 1.2020x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                     12.1895+-0.4597     ?     12.6613+-1.2188        ? might be 1.0387x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     13.5758+-1.4191           11.7904+-1.3551          might be 1.1514x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     12.4886+-0.5201           12.2031+-1.9613          might be 1.0234x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     12.7851+-1.2997           10.8551+-0.7792          might be 1.1778x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     16.1974+-1.0587     ^     13.0218+-0.8406        ^ definitely 1.2439x faster
   fold-put-by-id-to-multi-put-by-offset             18.1560+-0.6844     ^     14.6327+-0.1678        ^ definitely 1.2408x faster
   fold-put-structure                                11.8010+-0.2994           11.5566+-1.3592          might be 1.0211x faster
   for-of-iterate-array-entries                       5.8132+-0.3832            5.5607+-0.1503          might be 1.0454x faster
   for-of-iterate-array-keys                          2.7125+-0.0586     ?      2.7813+-0.1777        ? might be 1.0254x slower
   for-of-iterate-array-values                        2.4795+-0.1348     ?      2.4809+-0.0968        ?
   fround                                            19.3899+-0.6530           19.3670+-0.6622        
   ftl-library-inlining-dataview                     71.6540+-2.7304           69.4315+-2.0358          might be 1.0320x faster
   ftl-library-inlining                              84.4565+-16.2125    ?     96.8886+-20.4333       ? might be 1.1472x slower
   function-dot-apply                                 1.5692+-0.0589            1.5165+-0.0494          might be 1.0347x faster
   function-test                                      3.3249+-0.0604     ?      3.3411+-0.1718        ?
   function-with-eval                               115.9856+-5.7224          112.6545+-4.8517          might be 1.0296x faster
   gcse-poly-get-less-obvious                        19.5771+-1.7588     ?     19.9500+-1.6427        ? might be 1.0190x slower
   gcse-poly-get                                     22.2209+-1.3414     ?     22.9461+-2.3563        ? might be 1.0326x slower
   gcse                                               4.2405+-0.1065            4.2034+-0.0355        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7132+-0.0585            2.6760+-0.0734          might be 1.0139x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.3677+-0.1292            6.1943+-0.1923          might be 1.0280x faster
   get-by-id-chain-from-try-block                     9.2748+-0.8685            8.9945+-0.1592          might be 1.0312x faster
   get-by-id-check-structure-elimination              5.1655+-0.0239     ?      5.2098+-0.1419        ?
   get-by-id-proto-or-self                           18.5611+-1.0215           17.8597+-2.0172          might be 1.0393x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.0062+-0.2669     ?      3.3507+-1.1622        ? might be 1.1146x slower
   get-by-id-self-or-proto                           17.7912+-1.2727           17.2415+-0.8768          might be 1.0319x faster
   get-by-val-out-of-bounds                           4.1284+-0.1272     ?      4.1603+-0.2651        ?
   get_callee_monomorphic                             4.1012+-0.6618            3.6544+-0.0675          might be 1.1223x faster
   get_callee_polymorphic                             4.0809+-0.0271     ?      4.1392+-0.1232        ? might be 1.0143x slower
   getter-no-activation                               4.4222+-0.4633     ?      4.4950+-0.2663        ? might be 1.0165x slower
   getter-richards                                  136.6946+-9.3738     ^    122.2817+-2.2576        ^ definitely 1.1179x faster
   getter                                             5.0229+-0.0482     ?      5.0430+-0.1408        ?
   global-var-const-infer-fire-from-opt               0.8567+-0.1081     ?      0.8822+-0.1047        ? might be 1.0298x slower
   global-var-const-infer                             0.9192+-0.0650            0.8480+-0.0625          might be 1.0840x faster
   HashMap-put-get-iterate-keys                      26.4805+-0.7582     ?     29.0417+-5.5071        ? might be 1.0967x slower
   HashMap-put-get-iterate                           26.3799+-0.4008     ?     26.7995+-0.4108        ? might be 1.0159x slower
   HashMap-string-put-get-iterate                    27.2003+-0.6643     ?     27.2336+-1.5220        ?
   hoist-make-rope                                   11.6169+-0.8343           11.5478+-1.0306        
   hoist-poly-check-structure-effectful-loop   
                                                      4.9361+-0.1230     ?      5.6876+-1.6168        ? might be 1.1522x slower
   hoist-poly-check-structure                         3.6498+-0.0718            3.6466+-0.0445        
   imul-double-only                                   7.7137+-0.5618     ?      8.3614+-0.3174        ? might be 1.0840x slower
   imul-int-only                                      9.7094+-0.0701     ?      9.7491+-0.1159        ?
   imul-mixed                                         7.6849+-0.1759            7.6145+-0.0631        
   in-four-cases                                     18.8474+-0.1938     ?     19.1661+-0.5741        ? might be 1.0169x slower
   in-one-case-false                                  9.9693+-0.4435            9.7517+-0.0324          might be 1.0223x faster
   in-one-case-true                                   9.8102+-0.0472     ?     10.1263+-0.5623        ? might be 1.0322x slower
   in-two-cases                                      10.0985+-0.0672     ?     10.1007+-0.1022        ?
   indexed-properties-in-objects                      2.8373+-0.0392     ?      2.8435+-0.0357        ?
   infer-closure-const-then-mov-no-inline             3.7801+-0.1581     ?      3.8242+-0.1401        ? might be 1.0117x slower
   infer-closure-const-then-mov                      18.9110+-1.5171           18.0459+-0.2999          might be 1.0479x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     12.1744+-0.1630           11.9859+-0.1549          might be 1.0157x faster
   infer-closure-const-then-put-to-scope             20.4838+-1.7558           19.5442+-0.9822          might be 1.0481x faster
   infer-closure-const-then-reenter-no-inline   
                                                     50.9416+-2.1743     ?     51.9684+-3.5951        ? might be 1.0202x slower
   infer-closure-const-then-reenter                  19.1571+-1.4938           18.9400+-0.9545          might be 1.0115x faster
   infer-constant-global-property                     3.5693+-0.1194            3.4856+-0.0299          might be 1.0240x faster
   infer-constant-property                            2.6448+-0.0569     ?      2.6635+-0.0957        ?
   infer-one-time-closure-ten-vars                   12.8719+-1.8219           12.0554+-0.4227          might be 1.0677x faster
   infer-one-time-closure-two-vars                   12.1540+-1.4230           11.8880+-0.9912          might be 1.0224x faster
   infer-one-time-closure                            12.7484+-1.6343           12.3360+-1.0155          might be 1.0334x faster
   infer-one-time-deep-closure                       20.4493+-0.4741     ?     21.5289+-1.6734        ? might be 1.0528x slower
   inline-arguments-access                            1.9062+-0.0743            1.8636+-0.0462          might be 1.0229x faster
   inline-arguments-aliased-access                    1.7187+-0.1321            1.6523+-0.0407          might be 1.0402x faster
   inline-arguments-local-escape                     12.9386+-1.2555           12.8108+-1.2361        
   inline-get-scoped-var                              4.0952+-0.0252     ?      4.1209+-0.0370        ?
   inlined-put-by-id-transition                      10.8613+-0.6601           10.2812+-0.4419          might be 1.0564x faster
   int-or-other-abs-then-get-by-val                   4.8861+-0.0454            4.8814+-0.0548        
   int-or-other-abs-zero-then-get-by-val             17.4480+-1.3536     ?     17.9751+-2.0289        ? might be 1.0302x slower
   int-or-other-add-then-get-by-val                   4.2500+-0.0359     ?      5.2919+-2.2765        ? might be 1.2451x slower
   int-or-other-add                                   5.1728+-0.0486     ?      5.2887+-0.2863        ? might be 1.0224x slower
   int-or-other-div-then-get-by-val                   4.2227+-0.0328     ?      4.3116+-0.1462        ? might be 1.0211x slower
   int-or-other-max-then-get-by-val                   4.3625+-0.0449     ?      4.5452+-0.2622        ? might be 1.0419x slower
   int-or-other-min-then-get-by-val                   4.4128+-0.0294     ?      4.4677+-0.1552        ? might be 1.0124x slower
   int-or-other-mod-then-get-by-val                   3.9094+-0.0229            3.8742+-0.0217        
   int-or-other-mul-then-get-by-val                   3.9744+-0.2843            3.8763+-0.1171          might be 1.0253x faster
   int-or-other-neg-then-get-by-val                   4.7166+-0.0627            4.6831+-0.0180        
   int-or-other-neg-zero-then-get-by-val             17.1496+-0.4988     ?     17.5130+-1.2416        ? might be 1.0212x slower
   int-or-other-sub-then-get-by-val                   5.2218+-2.5297            4.3506+-0.2910          might be 1.2003x faster
   int-or-other-sub                                   3.4583+-0.0390     ?      3.4927+-0.0803        ?
   int-overflow-local                                 4.2684+-0.0361     ?      4.4541+-0.4804        ? might be 1.0435x slower
   Int16Array-alloc-long-lived                       48.8264+-2.6135     ?     48.9718+-1.7517        ?
   Int16Array-bubble-sort-with-byteLength            20.8721+-0.9930     ?     21.0953+-1.4596        ? might be 1.0107x slower
   Int16Array-bubble-sort                            21.9623+-0.5351     ?     22.1095+-0.8242        ?
   Int16Array-load-int-mul                            1.5120+-0.0723     ?      1.5522+-0.1090        ? might be 1.0266x slower
   Int16Array-to-Int32Array-set                      51.5733+-1.8543     ?     58.0252+-13.7398       ? might be 1.1251x slower
   Int32Array-alloc-large                            26.2203+-0.6322     ?     26.4393+-1.0306        ?
   Int32Array-alloc-long-lived                       54.5660+-0.6658           53.9912+-1.5750          might be 1.0106x faster
   Int32Array-alloc                                   3.1350+-0.3421     ?      3.3247+-0.5444        ? might be 1.0605x slower
   Int32Array-Int8Array-view-alloc                    7.1949+-0.8625            7.0646+-0.7978          might be 1.0184x faster
   int52-spill                                        7.4267+-0.9127            6.3667+-0.1968          might be 1.1665x faster
   Int8Array-alloc-long-lived                        46.3942+-1.5728           45.9552+-0.8630        
   Int8Array-load-with-byteLength                     3.3898+-0.1268            3.3509+-0.0557          might be 1.0116x faster
   Int8Array-load                                     3.3340+-0.0491            3.3210+-0.0492        
   integer-divide                                    11.6283+-0.1189     ?     12.2227+-1.0833        ? might be 1.0511x slower
   integer-modulo                                     2.0492+-0.0626     ?      2.0613+-0.0904        ?
   large-int-captured                                 6.4569+-0.1172     ?      6.7437+-0.9490        ? might be 1.0444x slower
   large-int-neg                                     17.2897+-1.2777           16.6168+-0.8426          might be 1.0405x faster
   large-int                                         15.2902+-0.1054     ?     15.8517+-0.9536        ? might be 1.0367x slower
   logical-not                                        4.6142+-0.1806     ?      4.7382+-0.2123        ? might be 1.0269x slower
   lots-of-fields                                    10.0887+-0.3176     ?     10.4023+-1.0792        ? might be 1.0311x slower
   make-indexed-storage                               2.9175+-0.1193     ?      2.9600+-0.1032        ? might be 1.0146x slower
   make-rope-cse                                      4.4353+-0.3996            4.1667+-0.1809          might be 1.0645x faster
   marsaglia-larger-ints                             38.3720+-0.5328     ?     38.5032+-0.6003        ?
   marsaglia-osr-entry                               24.5290+-2.6522           24.0444+-2.3899          might be 1.0202x faster
   max-boolean                                        2.4333+-0.0300     ?      2.4634+-0.0684        ? might be 1.0124x slower
   method-on-number                                  16.9022+-0.9349     ?     17.4259+-0.8304        ? might be 1.0310x slower
   min-boolean                                        2.4477+-0.0473     ?      2.4863+-0.1481        ? might be 1.0158x slower
   minus-boolean-double                               3.1052+-0.0582            3.0781+-0.0468        
   minus-boolean                                      2.4006+-0.1715            2.2879+-0.0620          might be 1.0493x faster
   misc-strict-eq                                    37.3159+-0.8508     ?     38.4224+-1.3396        ? might be 1.0297x slower
   mod-boolean-double                                10.9810+-0.5061     ?     11.0183+-0.3008        ?
   mod-boolean                                        7.7192+-0.0146     ?      7.7893+-0.0953        ?
   mul-boolean-double                                 3.7732+-0.1671     ?      3.8206+-0.2789        ? might be 1.0126x slower
   mul-boolean                                        2.8488+-0.0651            2.7854+-0.0328          might be 1.0228x faster
   neg-boolean                                        3.1118+-0.0453     ?      3.1460+-0.1007        ? might be 1.0110x slower
   negative-zero-divide                               0.3488+-0.0281            0.3261+-0.0153          might be 1.0694x faster
   negative-zero-modulo                               0.3314+-0.0087     ?      0.3413+-0.0202        ? might be 1.0300x slower
   negative-zero-negate                               0.3183+-0.0190            0.3016+-0.0175          might be 1.0556x faster
   nested-function-parsing                           24.0308+-1.3673     ?     24.8972+-1.9170        ? might be 1.0361x slower
   new-array-buffer-dead                              2.7240+-0.0582     ?      2.7277+-0.0646        ?
   new-array-buffer-push                              7.3053+-0.7457     ?      7.6665+-0.8677        ? might be 1.0494x slower
   new-array-dead                                    11.8805+-0.2619     ?     12.7213+-1.1686        ? might be 1.0708x slower
   new-array-push                                     5.1517+-0.2445            5.0889+-0.1182          might be 1.0123x faster
   number-test                                        2.8902+-0.0314            2.8855+-0.0381        
   object-closure-call                                5.4802+-0.0298     ?      5.5620+-0.1204        ? might be 1.0149x slower
   object-test                                        2.9828+-0.0607     ?      3.0443+-0.0715        ? might be 1.0206x slower
   obvious-sink-pathology-taken                     148.3119+-8.6280          144.5269+-2.0287          might be 1.0262x faster
   obvious-sink-pathology                           141.7208+-1.3928          140.9859+-3.3288        
   obviously-elidable-new-object                     34.5907+-1.1907     ?     35.5520+-1.5682        ? might be 1.0278x slower
   plus-boolean-arith                                 2.4513+-0.0288            2.4360+-0.0244        
   plus-boolean-double                                3.1918+-0.1348            3.1234+-0.0592          might be 1.0219x faster
   plus-boolean                                       2.3343+-0.0824            2.3328+-0.0520        
   poly-chain-access-different-prototypes-simple   
                                                      3.2361+-0.0455     ?      3.2546+-0.1000        ?
   poly-chain-access-different-prototypes             2.5638+-0.2838     ?      2.6535+-0.2987        ? might be 1.0350x slower
   poly-chain-access-simpler                          3.3602+-0.3052            3.2679+-0.0707          might be 1.0282x faster
   poly-chain-access                                  2.6897+-0.2584            2.6052+-0.2897          might be 1.0324x faster
   poly-stricteq                                     59.8027+-3.4198     ?     60.7222+-4.0278        ? might be 1.0154x slower
   polymorphic-array-call                             1.6940+-0.0939            1.6844+-0.0418        
   polymorphic-get-by-id                              3.0804+-0.0777     ?      3.1163+-0.1403        ? might be 1.0117x slower
   polymorphic-put-by-id                             30.7161+-3.6300           29.3763+-2.4264          might be 1.0456x faster
   polymorphic-structure                             15.0584+-0.4832           15.0066+-0.4231        
   polyvariant-monomorphic-get-by-id                  8.6912+-0.2956            8.4338+-0.0492          might be 1.0305x faster
   proto-getter-access                                9.6438+-0.0977     ?      9.6527+-0.1413        ?
   put-by-id-replace-and-transition                   8.8872+-0.6357            8.6499+-0.2435          might be 1.0274x faster
   put-by-id-slightly-polymorphic                     2.8848+-0.0709            2.8387+-0.0410          might be 1.0163x faster
   put-by-id                                         13.2398+-0.3698           13.1303+-0.3772        
   put-by-val-direct                                  0.5466+-0.0245     ?      0.5735+-0.1556        ? might be 1.0493x slower
   put-by-val-large-index-blank-indexing-type   
                                                      6.0163+-0.7143            5.8521+-0.7485          might be 1.0281x faster
   put-by-val-machine-int                             2.4974+-0.0346            2.4784+-0.0433        
   rare-osr-exit-on-local                            15.0212+-0.2546     ?     15.0340+-0.5378        ?
   register-pressure-from-osr                        22.3055+-0.8415           22.1149+-0.8654        
   setter                                             5.3951+-0.0491            5.3849+-0.0894        
   simple-activation-demo                            25.7234+-0.9541     ?     26.9574+-1.8811        ? might be 1.0480x slower
   simple-getter-access                              13.2102+-2.1809           12.7567+-0.9280          might be 1.0355x faster
   simple-poly-call-nested                           15.4377+-0.7211     ^      7.7977+-0.1761        ^ definitely 1.9798x faster
   simple-poly-call                                   1.2827+-0.0179            1.2245+-0.0861          might be 1.0475x faster
   sin-boolean                                       21.2543+-2.3209     ?     21.4231+-1.7895        ?
   sinkable-new-object-dag                           70.0524+-2.1562           69.8431+-1.7089        
   sinkable-new-object-taken                         49.9705+-2.3624     ?     50.6995+-2.4632        ? might be 1.0146x slower
   sinkable-new-object                               39.1710+-0.9024     ?     39.7083+-2.0279        ? might be 1.0137x slower
   slow-array-profile-convergence                     2.6998+-0.0400            2.6559+-0.0572          might be 1.0165x faster
   slow-convergence                                   3.1071+-0.0490     ?      3.1219+-0.0471        ?
   sparse-conditional                                 1.1255+-0.0587            1.0966+-0.0313          might be 1.0264x faster
   splice-to-remove                                  18.3586+-1.9581           17.5758+-1.4759          might be 1.0445x faster
   string-char-code-at                               17.3532+-1.2162           16.6620+-0.3681          might be 1.0415x faster
   string-concat-object                               2.0837+-0.0556     ?      2.1720+-0.1932        ? might be 1.0423x slower
   string-concat-pair-object                          2.1786+-0.1958            2.0755+-0.1352          might be 1.0497x faster
   string-concat-pair-simple                         10.9543+-0.3651           10.7103+-0.3179          might be 1.0228x faster
   string-concat-simple                              11.0822+-0.2624     ?     11.1250+-0.4205        ?
   string-cons-repeat                                 7.7448+-0.6293            7.5123+-0.5663          might be 1.0310x faster
   string-cons-tower                                  7.8068+-0.3923            7.4906+-0.5982          might be 1.0422x faster
   string-equality                                   18.3364+-1.0866           17.7820+-0.8115          might be 1.0312x faster
   string-get-by-val-big-char                         7.1576+-0.2517            7.0474+-0.2871          might be 1.0156x faster
   string-get-by-val-out-of-bounds-insane             3.7957+-0.0735            3.7852+-0.1266        
   string-get-by-val-out-of-bounds                    5.8351+-1.4429     ?      5.8614+-1.4421        ?
   string-get-by-val                                  3.5206+-0.0285     ^      3.2395+-0.0302        ^ definitely 1.0868x faster
   string-hash                                        2.0826+-0.0794            2.0683+-0.2102        
   string-long-ident-equality                        16.6316+-2.4595           15.7700+-1.9074          might be 1.0546x faster
   string-repeat-arith                               33.8362+-3.2219           32.9402+-1.9035          might be 1.0272x faster
   string-sub                                        66.7640+-3.9407     ?     68.1994+-2.0446        ? might be 1.0215x slower
   string-test                                        2.8356+-0.0733            2.8059+-0.0464          might be 1.0106x faster
   string-var-equality                               30.7239+-0.5379           30.5293+-0.2405        
   structure-hoist-over-transitions                   2.4953+-0.1239     ?      2.5002+-0.1325        ?
   substring-concat-weird                            39.3398+-1.9475     ?     40.2207+-1.8132        ? might be 1.0224x slower
   substring-concat                                  42.8111+-3.1394           40.5611+-1.6172          might be 1.0555x faster
   substring                                         45.8837+-3.0508     ?     45.9677+-2.2315        ?
   switch-char-constant                               2.6961+-0.0618            2.6659+-0.0966          might be 1.0113x faster
   switch-char                                        6.5530+-0.3849     ?      6.5992+-0.5026        ?
   switch-constant                                    9.9723+-0.7087            9.9130+-0.4805        
   switch-string-basic-big-var                       15.6877+-1.7898           14.6914+-0.3270          might be 1.0678x faster
   switch-string-basic-big                           15.5298+-1.6479           15.0079+-1.4100          might be 1.0348x faster
   switch-string-basic-var                           16.9318+-1.7600           15.2917+-1.6183          might be 1.1073x faster
   switch-string-basic                               14.6938+-1.9253     ?     15.0055+-1.8105        ? might be 1.0212x slower
   switch-string-big-length-tower-var                21.3973+-2.8714           20.0861+-0.6103          might be 1.0653x faster
   switch-string-length-tower-var                    14.7623+-0.4733     ?     16.3682+-1.6108        ? might be 1.1088x slower
   switch-string-length-tower                        13.1365+-1.3770     ?     13.8285+-1.8967        ? might be 1.0527x slower
   switch-string-short                               12.4461+-0.2447     ?     12.9090+-1.4015        ? might be 1.0372x slower
   switch                                            12.4585+-1.4431     ?     13.1562+-1.0668        ? might be 1.0560x slower
   tear-off-arguments-simple                          2.4137+-0.1236            2.3795+-0.1139          might be 1.0144x faster
   tear-off-arguments                                 3.7255+-0.1610            3.6297+-0.1590          might be 1.0264x faster
   temporal-structure                                12.5828+-0.6364           12.0783+-0.1749          might be 1.0418x faster
   to-int32-boolean                                  13.6977+-0.2859     ?     14.3160+-1.9184        ? might be 1.0451x slower
   undefined-property-access                        389.8842+-9.6853          388.6372+-14.8223       
   undefined-test                                     2.9333+-0.0526            2.8903+-0.0457          might be 1.0149x faster
   unprofiled-licm                                   22.8466+-1.3804           22.5964+-0.5660          might be 1.0111x faster
   weird-inlining-const-prop                          2.0200+-0.0920            1.9810+-0.1197          might be 1.0197x faster

   &lt;arithmetic&gt;                                      17.8317+-0.0779           17.7639+-0.0823          might be 1.0038x faster
   &lt;geometric&gt; *                                      8.2205+-0.0320     ^      8.1295+-0.0213        ^ definitely 1.0112x faster
   &lt;harmonic&gt;                                         4.1167+-0.0266            4.0559+-0.0346          might be 1.0150x faster

                                                        TipOfTree                FixPolyCall                                    
AsmBench:
   bigfib.cpp                                       500.6852+-5.0778          495.8510+-3.2542        
   cray.c                                           480.9032+-11.9170         468.1924+-2.1892          might be 1.0271x faster
   dry.c                                            492.6243+-12.5120    ?    515.2286+-15.5100       ? might be 1.0459x slower
   FloatMM.c                                        776.3303+-45.9828         734.4489+-5.0235          might be 1.0570x faster
   gcc-loops.cpp                                   4316.7029+-221.0614       4264.4427+-168.2738        might be 1.0123x faster
   n-body.c                                        1020.4313+-45.0425         998.0839+-6.5351          might be 1.0224x faster
   Quicksort.c                                      450.1820+-9.0885     ?    464.3783+-21.6487       ? might be 1.0315x slower
   stepanov_container.cpp                          3745.5236+-355.0059       3604.2242+-23.2952         might be 1.0392x faster
   Towers.c                                         263.8844+-2.4640     ?    266.0249+-10.0289       ?

   &lt;arithmetic&gt;                                    1338.5853+-42.9698        1312.3194+-19.3890         might be 1.0200x faster
   &lt;geometric&gt; *                                    826.2439+-15.2109         819.1920+-7.0102          might be 1.0086x faster
   &lt;harmonic&gt;                                       604.3393+-7.5653     ?    604.4607+-6.3356        ? might be 1.0002x slower

                                                        TipOfTree                FixPolyCall                                    
CompressionBench:
   huffman                                          516.0573+-22.4937         505.2410+-4.1904          might be 1.0214x faster
   arithmetic-simple                                449.3128+-11.0331         448.0127+-15.6114       
   arithmetic-precise                               327.9791+-8.6538          327.7670+-6.4686        
   arithmetic-complex-precise                       327.0308+-8.6137     ?    328.9188+-11.2624       ?
   arithmetic-precise-order-0                       466.0970+-4.5364     ?    480.9045+-11.1181       ? might be 1.0318x slower
   arithmetic-precise-order-1                       369.3030+-11.5207    ?    371.6289+-14.0879       ?
   arithmetic-precise-order-2                       415.0593+-26.3274    ?    461.6051+-143.6895      ? might be 1.1121x slower
   arithmetic-simple-order-1                        487.5367+-15.7168         478.5391+-5.3785          might be 1.0188x faster
   arithmetic-simple-order-2                        539.6783+-20.9272         529.0524+-9.5843          might be 1.0201x faster
   lz-string                                        348.9992+-14.6386    ?    350.7224+-4.3016        ?

   &lt;arithmetic&gt;                                     424.7053+-1.3866     ?    428.2392+-16.9090       ? might be 1.0083x slower
   &lt;geometric&gt; *                                    417.8795+-1.4564     ?    420.7981+-14.2070       ? might be 1.0070x slower
   &lt;harmonic&gt;                                       411.1027+-2.1486     ?    413.5972+-12.1648       ? might be 1.0061x slower

                                                        TipOfTree                FixPolyCall                                    
All benchmarks:
   &lt;arithmetic&gt;                                     102.3111+-1.2242          101.6980+-0.5453          might be 1.0060x faster
   &lt;geometric&gt;                                       13.6317+-0.0343     ^     13.5203+-0.0547        ^ definitely 1.0082x faster
   &lt;harmonic&gt;                                         3.4505+-0.0266     ?      3.4568+-0.0459        ? might be 1.0018x slower

                                                        TipOfTree                FixPolyCall                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                   67.0029+-0.4776           66.3624+-0.5757          might be 1.0097x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064359</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-26 19:48:50 -0800</bug_when>
    <thetext>Here is a less noisy run.  It clearly shows that we&apos;re doing something wrong in Richards.  Richards has some polymorphic calls.  I&apos;ll have to investigate what we&apos;re doing there.  Also, SunSpider isn&apos;t showing a speed-up, which is strange - the main purpose of this was to improve SunSpider.  But other compiler start-up time benchmarks are showing improvements, which is promising.


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

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

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree                FixPolyCall                                    
SunSpider:
   3d-cube                                            7.5815+-0.1623     ?      7.7526+-0.1068        ? might be 1.0226x slower
   3d-morph                                           9.8092+-0.1107     ^      9.6370+-0.0549        ^ definitely 1.0179x faster
   3d-raytrace                                        9.9220+-0.1417     ?     10.0169+-0.1330        ?
   access-binary-trees                                3.0205+-0.0465     ?      3.0626+-0.0883        ? might be 1.0139x slower
   access-fannkuch                                   10.0365+-0.0928     ?     10.0987+-0.1317        ?
   access-nbody                                       4.9386+-0.0250            4.9195+-0.0887        
   access-nsieve                                      5.5632+-0.0997     ?      5.6114+-0.0852        ?
   bitops-3bit-bits-in-byte                           2.0557+-0.0533            2.0222+-0.0374          might be 1.0165x faster
   bitops-bits-in-byte                                6.9560+-0.0665            6.9181+-0.1392        
   bitops-bitwise-and                                 3.3794+-0.0096            3.3430+-0.1112          might be 1.0109x faster
   bitops-nsieve-bits                                 5.7636+-0.0884     ?      5.8485+-0.0274        ? might be 1.0147x slower
   controlflow-recursive                              3.2107+-0.0456     ?      3.2297+-0.0522        ?
   crypto-aes                                         6.3582+-0.0500            6.3381+-0.0321        
   crypto-md5                                         3.8226+-0.1215     ?      3.9580+-0.0523        ? might be 1.0354x slower
   crypto-sha1                                        3.8964+-0.0907            3.8750+-0.0858        
   date-format-tofte                                 13.9573+-0.7264     ?     13.9841+-0.2716        ?
   date-format-xparb                                  8.3298+-0.2130            8.1357+-0.1388          might be 1.0239x faster
   math-cordic                                        5.0111+-0.0787            4.9473+-0.0409          might be 1.0129x faster
   math-partial-sums                                 10.5314+-0.2331     ?     10.5389+-0.1006        ?
   math-spectral-norm                                 3.3203+-0.0305            3.2592+-0.0845          might be 1.0187x faster
   regexp-dna                                        11.9778+-0.1338           11.9537+-0.1819        
   string-base64                                      6.5921+-0.0476            6.5726+-0.1355        
   string-fasta                                      10.4513+-0.1017           10.3003+-0.1578          might be 1.0147x faster
   string-tagcloud                                   15.6632+-0.2695           15.5046+-0.1058          might be 1.0102x faster
   string-unpack-code                                31.7536+-0.6477           31.5404+-0.2875        
   string-validate-input                              7.4191+-0.1034     ?      7.4209+-0.1229        ?

   &lt;arithmetic&gt; *                                     8.1277+-0.0287            8.1073+-0.0290          might be 1.0025x faster
   &lt;geometric&gt;                                        6.7176+-0.0192            6.7085+-0.0184          might be 1.0013x faster
   &lt;harmonic&gt;                                         5.6723+-0.0295            5.6642+-0.0201          might be 1.0014x faster

                                                        TipOfTree                FixPolyCall                                    
LongSpider:
   3d-cube                                         1361.5319+-8.9989         1355.0175+-9.2741        
   3d-morph                                        2281.1131+-1.5369     ?   2287.5930+-11.1696       ?
   3d-raytrace                                     1281.7066+-19.7997        1274.9945+-11.8870       
   access-binary-trees                             1623.4429+-5.2031     ?   1638.7830+-52.2495       ?
   access-fannkuch                                  527.6164+-14.4061    ?    528.7609+-15.8620       ?
   access-nbody                                    1230.3524+-3.9376         1229.6328+-1.3139        
   access-nsieve                                   1534.3455+-1.4296         1531.6598+-4.4802        
   bitops-3bit-bits-in-byte                          57.1425+-0.3988           57.0953+-0.2071        
   bitops-bits-in-byte                              388.0894+-8.7618          385.9900+-7.2083        
   bitops-nsieve-bits                              1145.9926+-0.7123         1145.9567+-5.4090        
   controlflow-recursive                            885.9849+-0.6954     ?    886.5292+-0.6564        ?
   crypto-aes                                      1108.9457+-13.4468        1099.0426+-4.0424        
   crypto-md5                                       951.2662+-10.4669    ?    965.2819+-14.9148       ? might be 1.0147x slower
   crypto-sha1                                     1157.5897+-12.6367        1153.8704+-3.0046        
   date-format-tofte                               1221.3362+-9.8889     ?   1242.6692+-20.7652       ? might be 1.0175x slower
   date-format-xparb                               1173.3985+-26.9964    ?   1178.6465+-15.5854       ?
   math-cordic                                      820.7515+-0.6929          819.7214+-1.8062        
   math-partial-sums                               1309.5774+-2.1018     ?   1309.9017+-3.2197        ?
   math-spectral-norm                              1302.8190+-11.5240        1297.9260+-0.8491        
   string-base64                                    568.8195+-2.3222     ?    568.8405+-2.5863        ?
   string-fasta                                     710.4099+-5.5257     ^    697.2695+-2.5474        ^ definitely 1.0188x faster
   string-tagcloud                                  368.6283+-6.6334          361.6895+-2.2190          might be 1.0192x faster

   &lt;arithmetic&gt;                                    1045.9482+-1.6816     ?   1046.2215+-2.7473        ? might be 1.0003x slower
   &lt;geometric&gt; *                                    874.8948+-1.7992          874.0253+-2.1656          might be 1.0010x faster
   &lt;harmonic&gt;                                       534.9330+-2.2282          533.8218+-1.8425          might be 1.0021x faster

                                                        TipOfTree                FixPolyCall                                    
V8Spider:
   crypto                                            81.9673+-1.0641     ?     83.0882+-1.7375        ? might be 1.0137x slower
   deltablue                                        122.7781+-1.9660     ^     97.3098+-2.0512        ^ definitely 1.2617x faster
   earley-boyer                                      72.4917+-0.2813           72.2585+-0.7101        
   raytrace                                          53.5066+-0.9923     ^     49.4819+-0.8061        ^ definitely 1.0813x faster
   regexp                                           116.8440+-0.6929     ?    117.0502+-0.6449        ?
   richards                                         113.1674+-0.9047     ^    105.7589+-1.4353        ^ definitely 1.0701x faster
   splay                                             57.9990+-2.5130           56.3223+-1.6640          might be 1.0298x faster

   &lt;arithmetic&gt;                                      88.3934+-0.4904     ^     83.0385+-0.4789        ^ definitely 1.0645x faster
   &lt;geometric&gt; *                                     84.1618+-0.5207     ^     79.5389+-0.4536        ^ definitely 1.0581x faster
   &lt;harmonic&gt;                                        80.0056+-0.5779     ^     75.9743+-0.5274        ^ definitely 1.0531x faster

                                                        TipOfTree                FixPolyCall                                    
Octane:
   encrypt                                           0.38764+-0.00559    ?     0.38879+-0.00517       ?
   decrypt                                           6.81660+-0.00576    ?     6.82924+-0.02685       ?
   deltablue                                x2       0.31960+-0.00099    ?     0.32190+-0.00335       ?
   earley                                            1.23142+-0.01274          1.22760+-0.00612       
   boyer                                            10.54749+-0.02812         10.41545+-0.13390         might be 1.0127x faster
   navier-stokes                            x2       7.74534+-0.00532          7.74429+-0.01088       
   raytrace                                 x2       2.27275+-0.09353    ?     2.27535+-0.11742       ?
   richards                                 x2       0.20282+-0.00366    !     0.23787+-0.01840       ! definitely 1.1728x slower
   splay                                    x2       0.61542+-0.00481    ?     0.62202+-0.00803       ? might be 1.0107x slower
   regexp                                   x2      59.08863+-0.29472         58.61115+-0.30563       
   pdfjs                                    x2      84.39290+-0.30881         84.20211+-0.78989       
   mandreel                                 x2      88.58676+-0.52712         88.09275+-0.32743       
   gbemu                                    x2      75.22039+-1.06138    !    82.26167+-1.53264       ! definitely 1.0936x slower
   closure                                           0.91824+-0.00257          0.91568+-0.00171       
   jquery                                           11.92135+-0.01924         11.89289+-0.13603       
   box2d                                    x2      28.09959+-0.31097         28.04878+-0.29651       
   zlib                                     x2     790.62085+-2.97169        775.36279+-42.36094        might be 1.0197x faster
   typescript                               x2    1277.91634+-16.49183      1271.45736+-18.04910      

   &lt;arithmetic&gt;                                    162.06618+-1.22661        161.00486+-2.81174         might be 1.0066x faster
   &lt;geometric&gt; *                                    11.85432+-0.03897    ?    12.02470+-0.13914       ? might be 1.0144x slower
   &lt;harmonic&gt;                                        1.17656+-0.00825    !     1.25074+-0.03760       ! definitely 1.0630x slower

                                                        TipOfTree                FixPolyCall                                    
Kraken:
   ai-astar                                          528.422+-1.142      ?     528.449+-1.562         ?
   audio-beat-detection                              200.986+-0.673            199.525+-3.547         
   audio-dft                                         259.561+-23.398           251.181+-1.361           might be 1.0334x faster
   audio-fft                                         131.952+-0.828      ?     132.254+-0.730         ?
   audio-oscillator                                  356.559+-0.997      ?     357.245+-1.329         ?
   imaging-darkroom                                  286.378+-0.375      ?     286.842+-0.943         ?
   imaging-desaturate                                112.803+-0.288      ?     112.835+-0.209         ?
   imaging-gaussian-blur                             183.544+-0.665      ?     183.635+-0.429         ?
   json-parse-financial                               86.921+-0.619      ^      82.171+-0.575         ^ definitely 1.0578x faster
   json-stringify-tinderbox                          103.267+-1.143            101.750+-0.625           might be 1.0149x faster
   stanford-crypto-aes                                98.924+-1.052      ?      99.443+-1.052         ?
   stanford-crypto-ccm                                87.515+-10.963     ?      95.975+-4.247         ? might be 1.0967x slower
   stanford-crypto-pbkdf2                            272.576+-2.429      ?     275.023+-1.520         ?
   stanford-crypto-sha256-iterative                  107.730+-0.972            107.164+-0.570         

   &lt;arithmetic&gt; *                                    201.224+-2.229            200.964+-0.508           might be 1.0013x faster
   &lt;geometric&gt;                                       170.404+-2.188      ?     170.452+-0.751         ? might be 1.0003x slower
   &lt;harmonic&gt;                                        147.795+-2.416      ?     148.153+-0.965         ? might be 1.0024x slower

                                                        TipOfTree                FixPolyCall                                    
JSRegress:
   abs-boolean                                        4.4034+-0.0527     ?      4.4085+-0.0574        ?
   adapt-to-double-divide                            20.3856+-0.4091           20.2237+-0.3619        
   aliased-arguments-getbyval                         1.8081+-0.0113            1.7943+-0.0271        
   allocate-big-object                                3.9622+-0.1399     ?      4.0366+-0.0522        ? might be 1.0188x slower
   arity-mismatch-inlining                            1.2097+-0.0148            1.1830+-0.0168          might be 1.0226x faster
   array-access-polymorphic-structure                11.0122+-0.2241     ?     11.1973+-0.1668        ? might be 1.0168x slower
   array-nonarray-polymorhpic-access                 57.6248+-0.2487           57.5643+-0.2313        
   array-prototype-every                            125.1196+-0.8436     !    132.3649+-1.8905        ! definitely 1.0579x slower
   array-prototype-forEach                          124.2053+-1.0871     !    130.0935+-1.7421        ! definitely 1.0474x slower
   array-prototype-map                              149.4895+-2.5467     !    158.2474+-2.6354        ! definitely 1.0586x slower
   array-prototype-some                             125.3059+-1.8168     !    132.4377+-1.6100        ! definitely 1.0569x slower
   array-splice-contiguous                           68.5832+-0.4377           67.9850+-0.7215        
   array-with-double-add                              6.4950+-0.1471     ?      6.5256+-0.0607        ?
   array-with-double-increment                        4.7965+-0.0676     ?      4.8455+-0.1000        ? might be 1.0102x slower
   array-with-double-mul-add                          8.3687+-0.1078     ?      8.4645+-0.1031        ? might be 1.0115x slower
   array-with-double-sum                              5.1441+-0.0685            5.0917+-0.0487          might be 1.0103x faster
   array-with-int32-add-sub                          11.1366+-0.0699     ?     11.3333+-0.1595        ? might be 1.0177x slower
   array-with-int32-or-double-sum                     5.2172+-0.0607            5.1490+-0.0553          might be 1.0132x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     59.3319+-0.8240     ?     59.6520+-1.1811        ?
   ArrayBuffer-DataView-alloc-long-lived             23.9583+-0.2827     ?     24.0300+-0.3848        ?
   ArrayBuffer-Int32Array-byteOffset                  5.5673+-0.1114     ?      5.6662+-0.0275        ? might be 1.0178x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     61.9939+-1.7986     ?     62.4517+-0.6124        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     40.7150+-0.6543           40.1014+-0.1143          might be 1.0153x faster
   ArrayBuffer-Int8Array-alloc-long-lived            23.5614+-1.1643           23.0718+-0.3132          might be 1.0212x faster
   ArrayBuffer-Int8Array-alloc                       20.1064+-0.4768           19.9118+-0.2162        
   asmjs_bool_bug                                    10.3083+-0.1224     ?     10.4773+-0.1311        ? might be 1.0164x slower
   assign-custom-setter-polymorphic                   5.1355+-0.1876            5.0064+-0.0304          might be 1.0258x faster
   assign-custom-setter                               6.6882+-0.1071     ?      6.8825+-0.3012        ? might be 1.0291x slower
   basic-set                                         15.8947+-0.2218           15.6545+-0.1990          might be 1.0153x faster
   big-int-mul                                        6.7691+-0.1894     ?      6.7691+-0.1631        ?
   boolean-test                                       5.0315+-0.0649            5.0009+-0.0483        
   branch-fold                                        5.4591+-0.0394            5.4098+-0.0369        
   by-val-generic                                    12.6405+-0.2689     ?     12.7661+-0.4698        ?
   call-spread-apply                                 29.2950+-0.2775     ?     29.3957+-0.2642        ?
   call-spread-call                                  25.3347+-0.1400     !     29.8722+-0.3581        ! definitely 1.1791x slower
   captured-assignments                               0.6483+-0.0058            0.6385+-0.0053          might be 1.0154x faster
   cast-int-to-double                                 9.6417+-0.1787            9.5950+-0.1289        
   cell-argument                                     11.2107+-0.3723     ?     11.3278+-0.0787        ? might be 1.0104x slower
   cfg-simplify                                       4.3442+-0.1882            4.3095+-0.0346        
   chain-getter-access                               13.8563+-0.2066     ?     13.9326+-0.1152        ?
   cmpeq-obj-to-obj-other                            13.9104+-0.3735           13.8570+-0.3058        
   constant-test                                      9.0547+-0.1745     ?      9.0676+-0.2008        ?
   DataView-custom-properties                        67.3010+-0.8402           66.9647+-0.5664        
   delay-tear-off-arguments-strictmode               14.2341+-0.2316     !     14.9486+-0.1825        ! definitely 1.0502x slower
   destructuring-arguments                           10.4858+-0.0599     ?     10.5466+-0.1202        ?
   destructuring-swap                                 9.2591+-0.1299            9.0770+-0.1246          might be 1.0201x faster
   direct-arguments-getbyval                          1.7957+-0.0212     ?      1.7975+-0.0238        ?
   div-boolean-double                                 6.5337+-0.1133     ?      6.5499+-0.1538        ?
   div-boolean                                       11.7613+-0.1810           11.7094+-0.1627        
   double-get-by-val-out-of-bounds                    6.7611+-0.1389     ?      7.0837+-0.3989        ? might be 1.0477x slower
   double-pollution-getbyval                         11.3762+-0.2762           11.3294+-0.2074        
   double-pollution-putbyoffset                       6.3781+-0.0914            6.3370+-0.1762        
   double-to-int32-typed-array-no-inline              3.2343+-0.0686     ?      3.2760+-0.0416        ? might be 1.0129x slower
   double-to-int32-typed-array                        2.8285+-0.1008     ?      2.8741+-0.0531        ? might be 1.0161x slower
   double-to-uint32-typed-array-no-inline             3.4023+-0.0567     ^      3.3009+-0.0403        ^ definitely 1.0307x faster
   double-to-uint32-typed-array                       3.0218+-0.0610            2.9689+-0.0538          might be 1.0178x faster
   elidable-new-object-dag                           63.0132+-1.0829           62.4923+-0.8702        
   elidable-new-object-roflcopter                   244.0214+-2.2848          243.1897+-2.6869        
   elidable-new-object-then-call                     57.0220+-1.4296           56.8922+-1.2225        
   elidable-new-object-tree                          70.3890+-0.8029     ?     70.5164+-1.8963        ?
   empty-string-plus-int                              8.8884+-0.1133     ?      8.9207+-0.1201        ?
   emscripten-cube2hash                              53.8701+-0.4382           53.4736+-0.3737        
   external-arguments-getbyval                        2.2084+-0.0258     ?      2.2712+-0.0643        ? might be 1.0284x slower
   external-arguments-putbyval                        3.3680+-0.0172            3.3366+-0.0309        
   fixed-typed-array-storage-var-index                1.6372+-0.0280            1.6268+-0.0298        
   fixed-typed-array-storage                          1.2558+-0.0323            1.2176+-0.0106          might be 1.0314x faster
   Float32Array-matrix-mult                           6.8122+-0.0535            6.7735+-0.0908        
   Float32Array-to-Float64Array-set                  90.2367+-2.1576           89.8655+-2.2028        
   Float64Array-alloc-long-lived                    101.7918+-1.0985     ?    101.9213+-0.7797        ?
   Float64Array-to-Int16Array-set                   112.7216+-0.7609          112.5348+-1.0762        
   fold-double-to-int                                20.1327+-0.1763     ?     20.2313+-0.2828        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     24.4086+-0.2492     ^     18.7358+-0.5021        ^ definitely 1.3028x faster
   fold-get-by-id-to-multi-get-by-offset             23.0310+-0.3361     ^     17.2620+-0.2660        ^ definitely 1.3342x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                     17.9065+-0.0974     ^     12.9003+-0.1680        ^ definitely 1.3881x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     17.9795+-0.3341     ^     12.7849+-0.1570        ^ definitely 1.4063x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     16.9926+-0.1267     ^     12.4724+-0.2531        ^ definitely 1.3624x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     15.9093+-0.1715     ^     11.5390+-0.3743        ^ definitely 1.3787x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     22.6215+-0.1233     ^     17.7499+-0.3477        ^ definitely 1.2745x faster
   fold-put-by-id-to-multi-put-by-offset             23.4626+-0.3731     ^     18.3753+-0.3678        ^ definitely 1.2769x faster
   fold-put-structure                                16.9591+-0.1113     ^     12.7107+-0.7837        ^ definitely 1.3342x faster
   for-of-iterate-array-entries                       8.5702+-0.1989     ?      8.7860+-0.1125        ? might be 1.0252x slower
   for-of-iterate-array-keys                          4.0304+-0.0902     ?      4.0523+-0.0510        ?
   for-of-iterate-array-values                        3.5007+-0.0342            3.4681+-0.0536        
   fround                                            23.7790+-0.4236           23.7212+-0.3142        
   ftl-library-inlining-dataview                    107.8218+-6.8432     ?    107.9261+-5.7013        ?
   ftl-library-inlining                             141.0395+-21.3123         130.3971+-11.5483         might be 1.0816x faster
   function-dot-apply                                 2.7243+-0.0654     ?      2.7443+-0.0424        ?
   function-test                                      5.4431+-0.0929            5.4399+-0.0854        
   function-with-eval                               181.0358+-1.1848     ?    184.8003+-8.5852        ? might be 1.0208x slower
   gcse-poly-get-less-obvious                        29.2733+-0.2691     ?     29.3977+-0.4543        ?
   gcse-poly-get                                     29.7768+-0.1722           29.6702+-0.1838        
   gcse                                               7.6545+-0.1549     ?      7.6794+-0.0750        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.9118+-0.0929            3.8987+-0.0656        
   get-by-id-bimorphic-check-structure-elimination   
                                                      9.7928+-0.1061     ?      9.9357+-0.1193        ? might be 1.0146x slower
   get-by-id-chain-from-try-block                    19.3918+-0.2014           19.2956+-0.0504        
   get-by-id-check-structure-elimination              8.8954+-0.0901            8.8353+-0.1574        
   get-by-id-proto-or-self                           25.7747+-2.6243           24.9370+-1.6388          might be 1.0336x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      4.6125+-0.0632     ?      4.6138+-0.0512        ?
   get-by-id-self-or-proto                           25.4762+-1.7482     ?     25.6415+-2.7473        ?
   get-by-val-out-of-bounds                           6.6827+-0.2402     ?      6.9101+-0.1139        ? might be 1.0340x slower
   get_callee_monomorphic                             5.9041+-0.1093     ?      6.0079+-0.1356        ? might be 1.0176x slower
   get_callee_polymorphic                             6.0200+-0.0791            5.9029+-0.1017          might be 1.0198x faster
   getter-no-activation                               6.8717+-0.0586     ?      6.9696+-0.0958        ? might be 1.0143x slower
   getter-richards                                  156.2186+-7.6846     ^    144.1081+-3.6898        ^ definitely 1.0840x faster
   getter                                             7.7855+-0.2198     ?      7.8150+-0.1012        ?
   global-var-const-infer-fire-from-opt               1.3440+-0.0805            1.3072+-0.0928          might be 1.0282x faster
   global-var-const-infer                             1.2848+-0.0324     ?      1.2893+-0.0310        ?
   HashMap-put-get-iterate-keys                      40.7632+-0.4200     ?     41.2675+-0.7746        ? might be 1.0124x slower
   HashMap-put-get-iterate                           40.0997+-0.5484     ?     40.2276+-0.9885        ?
   HashMap-string-put-get-iterate                    39.7029+-0.2828     ?     39.7985+-0.8728        ?
   hoist-make-rope                                   14.0520+-1.2434     ?     15.1226+-0.2043        ? might be 1.0762x slower
   hoist-poly-check-structure-effectful-loop   
                                                      7.8809+-0.2188     ?      7.9463+-0.2216        ?
   hoist-poly-check-structure                         5.7093+-0.0761            5.6996+-0.0670        
   imul-double-only                                  10.1100+-0.3188     ?     10.1849+-0.2018        ?
   imul-int-only                                     13.0698+-0.1875           13.0590+-0.1780        
   imul-mixed                                         9.8538+-0.7520     ?      9.9960+-0.6092        ? might be 1.0144x slower
   in-four-cases                                     28.6838+-0.1025     ?     28.7319+-0.2741        ?
   in-one-case-false                                 14.8882+-0.0848     ?     14.9156+-0.1571        ?
   in-one-case-true                                  14.9108+-0.0733           14.8749+-0.1111        
   in-two-cases                                      15.4172+-0.1741     ?     15.5855+-0.1516        ? might be 1.0109x slower
   indexed-properties-in-objects                      4.3853+-0.1387     ?      4.4346+-0.0617        ? might be 1.0112x slower
   infer-closure-const-then-mov-no-inline             5.1926+-0.1278     ?      5.2007+-0.0742        ?
   infer-closure-const-then-mov                      29.4766+-0.1191     ?     29.5035+-0.1232        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.7720+-0.2902           17.7305+-0.1544        
   infer-closure-const-then-put-to-scope             35.5169+-0.0876     ?     35.6212+-0.1137        ?
   infer-closure-const-then-reenter-no-inline   
                                                     81.1805+-0.3176           81.0754+-0.1099        
   infer-closure-const-then-reenter                  35.0501+-0.2376           34.8089+-0.3926        
   infer-constant-global-property                     5.5928+-0.0578     ?      5.6057+-0.0555        ?
   infer-constant-property                            3.8763+-0.0689            3.8607+-0.0748        
   infer-one-time-closure-ten-vars                   16.5282+-0.1816     ?     16.6178+-0.2955        ?
   infer-one-time-closure-two-vars                   16.0394+-0.2331           15.9242+-0.2211        
   infer-one-time-closure                            15.9484+-0.2987           15.7686+-0.2045          might be 1.0114x faster
   infer-one-time-deep-closure                       28.2682+-0.2297     ?     28.2984+-0.2719        ?
   inline-arguments-access                            3.0078+-0.0445            2.9217+-0.0662          might be 1.0295x faster
   inline-arguments-aliased-access                    2.8220+-0.0303            2.8117+-0.0539        
   inline-arguments-local-escape                     21.7090+-0.2720     ^     20.6118+-0.1864        ^ definitely 1.0532x faster
   inline-get-scoped-var                              6.7216+-0.0357     ?      6.7505+-0.0708        ?
   inlined-put-by-id-transition                      18.3134+-0.4426           17.6666+-0.7248          might be 1.0366x faster
   int-or-other-abs-then-get-by-val                   8.0928+-0.1854     ?      8.2449+-0.0776        ? might be 1.0188x slower
   int-or-other-abs-zero-then-get-by-val             30.6063+-0.2556     ?     30.7075+-0.1709        ?
   int-or-other-add-then-get-by-val                   6.9610+-0.1211     ?      6.9681+-0.0550        ?
   int-or-other-add                                   9.2728+-0.1620            9.2485+-0.1527        
   int-or-other-div-then-get-by-val                   6.1310+-0.0679            6.0581+-0.1854          might be 1.0120x faster
   int-or-other-max-then-get-by-val                   7.7955+-0.1717            7.7401+-0.3330        
   int-or-other-min-then-get-by-val                   6.2766+-0.0675            6.2382+-0.0684        
   int-or-other-mod-then-get-by-val                   5.9243+-0.2088     ?      6.0086+-0.1553        ? might be 1.0142x slower
   int-or-other-mul-then-get-by-val                   5.9270+-0.1199     ?      5.9280+-0.1285        ?
   int-or-other-neg-then-get-by-val                   7.4115+-0.0510            7.3302+-0.0695          might be 1.0111x faster
   int-or-other-neg-zero-then-get-by-val             30.5800+-0.1710     ?     30.6747+-0.1747        ?
   int-or-other-sub-then-get-by-val                   6.9369+-0.1227     ?      6.9496+-0.1175        ?
   int-or-other-sub                                   5.9583+-0.2879     ?      6.0190+-0.2397        ? might be 1.0102x slower
   int-overflow-local                                 6.8895+-0.0996            6.8888+-0.0541        
   Int16Array-alloc-long-lived                       73.7036+-1.2096           73.3246+-0.5092        
   Int16Array-bubble-sort-with-byteLength            43.8259+-0.1227     ?     43.8784+-0.4619        ?
   Int16Array-bubble-sort                            42.3573+-0.3010     ?     42.4847+-0.1244        ?
   Int16Array-load-int-mul                            2.2148+-0.0432            2.2027+-0.0393        
   Int16Array-to-Int32Array-set                      84.0289+-1.9929           83.2220+-0.5603        
   Int32Array-alloc-large                            42.9993+-1.2904           42.5151+-1.2739          might be 1.0114x faster
   Int32Array-alloc-long-lived                       80.6552+-0.5656     ?     81.0398+-0.4786        ?
   Int32Array-alloc                                   4.8960+-0.1885     ?      4.9203+-0.0615        ?
   Int32Array-Int8Array-view-alloc                   12.3295+-0.2148           12.0706+-0.2464          might be 1.0214x faster
   int52-spill                                        9.9876+-0.2265            9.6867+-0.2357          might be 1.0311x faster
   Int8Array-alloc-long-lived                        66.8200+-0.5778           65.8551+-0.6214          might be 1.0147x faster
   Int8Array-load-with-byteLength                     5.6347+-0.0683            5.5768+-0.0618          might be 1.0104x faster
   Int8Array-load                                     5.6127+-0.0714     ?      5.6601+-0.0956        ?
   integer-divide                                    17.0110+-0.1457     ?     17.0370+-0.1641        ?
   integer-modulo                                     3.0484+-0.0761            2.9958+-0.0723          might be 1.0175x faster
   large-int-captured                                12.8605+-0.2808     ?     13.1573+-0.1386        ? might be 1.0231x slower
   large-int-neg                                     24.0554+-0.5072     ?     24.3747+-0.4146        ? might be 1.0133x slower
   large-int                                         21.4970+-0.3571     ?     21.7906+-0.4251        ? might be 1.0137x slower
   logical-not                                        7.9027+-0.4658            7.4226+-0.1493          might be 1.0647x faster
   lots-of-fields                                    18.2312+-0.1145     ?     18.3298+-0.2104        ?
   make-indexed-storage                               4.6942+-0.4122     ?      4.7663+-0.2861        ? might be 1.0154x slower
   make-rope-cse                                      6.2630+-0.0300     ?      6.2693+-0.0610        ?
   marsaglia-larger-ints                             64.0637+-0.6226     ?     64.1947+-0.8197        ?
   marsaglia-osr-entry                               31.2587+-0.3349     ?     31.6539+-0.5360        ? might be 1.0126x slower
   max-boolean                                        3.9037+-0.0677            3.8855+-0.0437        
   method-on-number                                  27.6343+-0.3032     !     28.4398+-0.2556        ! definitely 1.0291x slower
   min-boolean                                        3.7740+-0.0681     ?      3.8137+-0.0857        ? might be 1.0105x slower
   minus-boolean-double                               4.9151+-0.0985     ?      4.9517+-0.0287        ?
   minus-boolean                                      3.8144+-0.0490            3.7889+-0.0475        
   misc-strict-eq                                    57.2335+-3.5239     ?     57.4887+-3.2569        ?
   mod-boolean-double                                13.8448+-0.1437     ?     14.0500+-0.2710        ? might be 1.0148x slower
   mod-boolean                                       10.6334+-0.1791     ?     10.7529+-0.2175        ? might be 1.0112x slower
   mul-boolean-double                                 5.7734+-0.0483            5.7378+-0.0307        
   mul-boolean                                        4.1329+-0.0469            4.0835+-0.0378          might be 1.0121x faster
   neg-boolean                                        5.0416+-0.0685            5.0236+-0.0382        
   negative-zero-divide                               0.4674+-0.0032            0.4653+-0.0059        
   negative-zero-modulo                               0.4719+-0.0026            0.4685+-0.0048        
   negative-zero-negate                               0.4414+-0.0072            0.4389+-0.0034        
   nested-function-parsing                           40.0349+-0.1638     ?     40.1733+-0.2155        ?
   new-array-buffer-dead                              4.3928+-0.0808     ?      4.4230+-0.1359        ?
   new-array-buffer-push                             10.7449+-0.2050     ?     10.8024+-0.2667        ?
   new-array-dead                                    14.9914+-0.2331           14.7856+-0.3395          might be 1.0139x faster
   new-array-push                                     7.3912+-0.1724            7.3869+-0.2498        
   number-test                                        4.8704+-0.0497     ?      4.8722+-0.0340        ?
   object-closure-call                                9.0166+-0.0720            9.0077+-0.0353        
   object-test                                        5.2528+-0.0662            5.2255+-0.0632        
   obvious-sink-pathology-taken                     207.8750+-1.5401          206.5188+-0.8723        
   obvious-sink-pathology                           198.9239+-2.2818          196.9643+-1.7760        
   obviously-elidable-new-object                     51.5151+-1.1394     ?     51.5998+-0.3645        ?
   plus-boolean-arith                                 3.8391+-0.0543            3.8382+-0.0497        
   plus-boolean-double                                4.9907+-0.0233            4.9806+-0.0357        
   plus-boolean                                       3.7338+-0.0606     ?      3.7657+-0.0478        ?
   poly-chain-access-different-prototypes-simple   
                                                      4.5207+-0.0555     ?      4.5854+-0.0539        ? might be 1.0143x slower
   poly-chain-access-different-prototypes             2.9885+-0.0644     ?      3.0852+-0.1416        ? might be 1.0323x slower
   poly-chain-access-simpler                          4.5160+-0.0516            4.5120+-0.0593        
   poly-chain-access                                  3.0717+-0.3408            2.9342+-0.0155          might be 1.0468x faster
   poly-stricteq                                     85.7221+-0.5835           84.9334+-1.5628        
   polymorphic-array-call                             2.3772+-0.0421     ?      2.4541+-0.0437        ? might be 1.0324x slower
   polymorphic-get-by-id                              4.9237+-0.0555     ?      4.9903+-0.2014        ? might be 1.0135x slower
   polymorphic-put-by-id                             45.6350+-5.2817           44.3319+-1.8418          might be 1.0294x faster
   polymorphic-structure                             29.6200+-0.1921     ?     29.8777+-0.6132        ?
   polyvariant-monomorphic-get-by-id                 13.0732+-0.1326           12.9604+-0.2771        
   proto-getter-access                               13.8151+-0.2484     ?     13.9161+-0.2005        ?
   put-by-id-replace-and-transition                  12.8161+-0.2448     ?     12.8690+-0.0812        ?
   put-by-id-slightly-polymorphic                     4.1845+-0.0433            4.1661+-0.0347        
   put-by-id                                         21.4096+-0.1765     ?     21.6488+-0.4165        ? might be 1.0112x slower
   put-by-val-direct                                  0.8338+-0.0107            0.8253+-0.0129          might be 1.0103x faster
   put-by-val-large-index-blank-indexing-type   
                                                     10.4066+-0.2836            9.9341+-0.2864          might be 1.0476x faster
   put-by-val-machine-int                             4.2558+-0.1647     ?      4.2651+-0.2319        ?
   rare-osr-exit-on-local                            21.8853+-0.1549           21.8109+-0.0802        
   register-pressure-from-osr                        31.9952+-0.1778     ?     32.0128+-0.2576        ?
   setter                                             7.6802+-0.0888            7.6266+-0.1509        
   simple-activation-demo                            39.1651+-0.1808     ?     39.2475+-0.1056        ?
   simple-getter-access                              19.9055+-0.2273     ?     19.9231+-0.2430        ?
   simple-poly-call-nested                           22.7512+-0.3884     ^     10.9276+-0.0788        ^ definitely 2.0820x faster
   simple-poly-call                                   1.7993+-0.0393     ^      1.7212+-0.0317        ^ definitely 1.0454x faster
   sin-boolean                                       23.9953+-1.0165           23.8555+-0.9317        
   sinkable-new-object-dag                           94.6180+-0.9197     ?     95.0242+-0.9176        ?
   sinkable-new-object-taken                         79.3456+-1.0662     ?     79.5811+-0.7475        ?
   sinkable-new-object                               56.3257+-1.8549           55.9158+-4.1539        
   slow-array-profile-convergence                     4.3966+-0.1306            4.2683+-0.1784          might be 1.0301x faster
   slow-convergence                                   5.1195+-0.0715            5.1038+-0.0527        
   sparse-conditional                                 1.7051+-0.0193            1.6800+-0.0372          might be 1.0150x faster
   splice-to-remove                                  27.4496+-0.2081     ?     27.5444+-0.2284        ?
   string-char-code-at                               23.6293+-0.1073           23.6223+-0.2634        
   string-concat-object                               3.2587+-0.0380            3.2351+-0.0325        
   string-concat-pair-object                          3.1864+-0.0593            3.1777+-0.0683        
   string-concat-pair-simple                         18.4221+-0.2847     ?     18.6420+-0.2183        ? might be 1.0119x slower
   string-concat-simple                              18.6597+-0.4171           18.6533+-0.3637        
   string-cons-repeat                                12.0290+-0.0978           12.0212+-0.0706        
   string-cons-tower                                 11.0943+-0.0470           11.0676+-0.0376        
   string-equality                                   26.4648+-0.1424     ?     26.7231+-0.5822        ?
   string-get-by-val-big-char                        12.6775+-0.2054           12.5449+-0.2514          might be 1.0106x faster
   string-get-by-val-out-of-bounds-insane             6.6756+-0.0439     ?      6.7731+-0.2022        ? might be 1.0146x slower
   string-get-by-val-out-of-bounds                    8.0020+-0.1288            8.0000+-0.2360        
   string-get-by-val                                  5.7049+-0.0171            5.6837+-0.0264        
   string-hash                                        3.1087+-0.0664            3.0671+-0.0483          might be 1.0136x faster
   string-long-ident-equality                        21.3425+-0.2398     ?     21.6949+-0.1132        ? might be 1.0165x slower
   string-repeat-arith                               61.4371+-6.3206     ^     49.2359+-0.4752        ^ definitely 1.2478x faster
   string-sub                                        99.3842+-6.4919           96.9591+-0.5538          might be 1.0250x faster
   string-test                                        4.8473+-0.0321     ?      4.8865+-0.0672        ?
   string-var-equality                               52.4665+-0.5950     ?     52.8529+-1.2817        ?
   structure-hoist-over-transitions                   3.8976+-0.0409     ?      3.9044+-0.0255        ?
   substring-concat-weird                            62.4399+-0.6087     ?     63.2601+-0.6042        ? might be 1.0131x slower
   substring-concat                                  65.9036+-0.4505     ?     66.0607+-0.2561        ?
   substring                                         74.6895+-0.3204           74.2843+-0.1658        
   switch-char-constant                               3.9087+-0.0449     ?      3.9139+-0.0230        ?
   switch-char                                        9.4338+-0.1715            9.4010+-0.0966        
   switch-constant                                   17.0259+-0.4924           16.9674+-1.6811        
   switch-string-basic-big-var                       25.4707+-1.6434     ?     26.3865+-0.6814        ? might be 1.0360x slower
   switch-string-basic-big                           27.2079+-2.8004           25.5811+-1.5607          might be 1.0636x faster
   switch-string-basic-var                           34.5253+-1.9558           34.4420+-1.4975        
   switch-string-basic                               27.1927+-0.7025     ?     28.2575+-0.7094        ? might be 1.0392x slower
   switch-string-big-length-tower-var                29.9479+-0.1943     ?     30.0149+-0.3035        ?
   switch-string-length-tower-var                    23.4742+-0.1777           23.4081+-0.1064        
   switch-string-length-tower                        16.9856+-0.0619     ?     17.0097+-0.0859        ?
   switch-string-short                               16.9697+-0.0550           16.8655+-0.1372        
   switch                                            20.1232+-2.3705     ?     21.1620+-0.3886        ? might be 1.0516x slower
   tear-off-arguments-simple                          3.9004+-0.0201     ?      3.9143+-0.0485        ?
   tear-off-arguments                                 6.1397+-0.0420            6.1224+-0.0696        
   temporal-structure                                20.7074+-0.3519           20.6839+-0.5234        
   to-int32-boolean                                  24.7980+-0.2476           24.6857+-0.1793        
   undefined-property-access                        559.7302+-0.9276          559.0930+-0.7187        
   undefined-test                                     5.0421+-0.0884     ?      5.0533+-0.0491        ?
   unprofiled-licm                                   31.4230+-0.4654           31.2461+-0.6115        
   weird-inlining-const-prop                          3.0376+-0.0964            3.0340+-0.0870        

   &lt;arithmetic&gt;                                      27.0357+-0.1150     ^     26.8123+-0.0422        ^ definitely 1.0083x faster
   &lt;geometric&gt; *                                     12.5903+-0.0271     ^     12.4363+-0.0153        ^ definitely 1.0124x faster
   &lt;harmonic&gt;                                         6.1900+-0.0135     ^      6.1396+-0.0143        ^ definitely 1.0082x faster

                                                        TipOfTree                FixPolyCall                                    
AsmBench:
   bigfib.cpp                                       805.9876+-6.9381          800.5723+-3.9880        
   cray.c                                           805.3544+-23.0839         800.1622+-2.3662        
   dry.c                                            786.6480+-11.0617    ?    787.6781+-0.7275        ?
   FloatMM.c                                       1145.8517+-1.1145         1145.2922+-0.9563        
   gcc-loops.cpp                                   7038.9987+-12.7575        7029.1763+-10.3793       
   n-body.c                                        2026.4683+-5.6897         2023.2705+-2.9121        
   Quicksort.c                                      707.2682+-0.4682     ^    705.9633+-0.7616        ^ definitely 1.0018x faster
   stepanov_container.cpp                          5774.0280+-18.4893    ?   5780.0971+-33.2748       ?
   Towers.c                                         483.1687+-11.8870    ^    468.7030+-2.0440        ^ definitely 1.0309x faster

   &lt;arithmetic&gt;                                    2174.8637+-4.5945         2171.2128+-4.5745          might be 1.0017x faster
   &lt;geometric&gt; *                                   1365.0641+-5.1374     ^   1358.1061+-1.2796        ^ definitely 1.0051x faster
   &lt;harmonic&gt;                                      1008.9290+-5.9826     ^    999.8683+-0.7743        ^ definitely 1.0091x faster

                                                        TipOfTree                FixPolyCall                                    
CompressionBench:
   huffman                                          723.0393+-11.8776    ?    723.0950+-10.2764       ?
   arithmetic-simple                                687.3353+-1.1337          685.5412+-2.2894        
   arithmetic-precise                               530.0193+-1.7648          526.4399+-3.3300        
   arithmetic-complex-precise                       528.7227+-1.4596     ^    524.4205+-2.0636        ^ definitely 1.0082x faster
   arithmetic-precise-order-0                       753.3258+-8.4710     ?    761.9788+-7.3901        ? might be 1.0115x slower
   arithmetic-precise-order-1                       565.1217+-5.4848          564.8609+-7.1305        
   arithmetic-precise-order-2                       628.8137+-2.6847     ?    631.1237+-5.4744        ?
   arithmetic-simple-order-1                        706.3149+-3.4002     ?    709.1667+-5.3332        ?
   arithmetic-simple-order-2                        787.8340+-2.6070     ?    793.0290+-5.8016        ?
   lz-string                                        537.0835+-4.1636          529.8291+-3.6942          might be 1.0137x faster

   &lt;arithmetic&gt;                                     644.7610+-1.4807     ?    644.9485+-1.9503        ? might be 1.0003x slower
   &lt;geometric&gt; *                                    637.8047+-1.3499          637.4292+-1.8455          might be 1.0006x faster
   &lt;harmonic&gt;                                       630.8767+-1.2719          629.9395+-1.7510          might be 1.0015x faster

                                                        TipOfTree                FixPolyCall                                    
All benchmarks:
   &lt;arithmetic&gt;                                     164.2863+-0.1453          163.8808+-0.3137          might be 1.0025x faster
   &lt;geometric&gt;                                       21.2008+-0.0252     ^     21.0147+-0.0331        ^ definitely 1.0089x faster
   &lt;harmonic&gt;                                         5.2630+-0.0140     !      5.3427+-0.0563        ! definitely 1.0151x slower

                                                        TipOfTree                FixPolyCall                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                  105.7560+-0.1344     ^    104.8999+-0.2376        ^ definitely 1.0082x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064366</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-26 19:59:27 -0800</bug_when>
    <thetext>The 13% richards slow-down is easy enough to reproduce with concurrent JIT enabled.  It reproduces on two different machines (an old Mac Pro and a relatively new MacBook Pro).  Oddly, if you disabled concurrent JIT, the results flip on the MBP.  Not on the Mac Pro - disabling concurrent JIT still results in a slow-down on that machine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064370</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-26 20:03:40 -0800</bug_when>
    <thetext>Super interesting: we still get a slow-down even with FTL JIT disabled.  This suggests that this has nothing to do with poly inlining per se.  The presence of the poly IC&apos;s appears to perturb performance of normal call sites.

Reassuringly, if you disable the DFG JIT, then this becomes a speed-up.  So this isn&apos;t about the poly IC itself being slow - it&apos;s actually a progression for baseline performance, which is what we would have hoped.  What appears to be happening is that the profiling generated from the poly IC has lower fidelity even when the call is actually monomorphic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064382</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-26 20:35:03 -0800</bug_when>
    <thetext>It seems that part of the slow down has to do with a polyvariant call not getting inlined when this patch is applied.  Disabling polyvariant call inlining doesn&apos;t eliminate the slow-down; this is consistent with there still being a slow-down with FTL disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064595</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-27 12:01:41 -0800</bug_when>
    <thetext>Found the issue.  It&apos;s not a polyvariant call - it&apos;s actually a polymorphic call.  In richards, there is a call to the task run method call that can go to one of 4 task run methods (IdleTask, DeviceTask, WorkerTask, or HandlerTask).  The DeviceTask ends up being the most commonly called, but it&apos;s the last to be called.  So with call edge profiling we detect that we should emit:

if (callee = DeviceTask run)
    inline DeviceTask run
else
    polymorphic call

This ends up producing a healthy speed-up.  But with the new polymorphic call inline caching, we see the first three device types to be called (IdleTask, WorkerTask, and HandlerTask) and then we see a very high slow path count because the DeviceTask is what we usually end up calling.

This *might* be an example of why we want per-callee frequencies.  But it might also just be a good reason to increase the number of callees we allow in the poly call IC.  I&apos;ll mess with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064613</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-27 12:43:29 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Found the issue.  It&apos;s not a polyvariant call - it&apos;s actually a polymorphic
&gt; call.  In richards, there is a call to the task run method call that can go
&gt; to one of 4 task run methods (IdleTask, DeviceTask, WorkerTask, or
&gt; HandlerTask).  The DeviceTask ends up being the most commonly called, but
&gt; it&apos;s the last to be called.  So with call edge profiling we detect that we
&gt; should emit:
&gt; 
&gt; if (callee = DeviceTask run)
&gt;     inline DeviceTask run
&gt; else
&gt;     polymorphic call
&gt; 
&gt; This ends up producing a healthy speed-up.  But with the new polymorphic
&gt; call inline caching, we see the first three device types to be called
&gt; (IdleTask, WorkerTask, and HandlerTask) and then we see a very high slow
&gt; path count because the DeviceTask is what we usually end up calling.
&gt; 
&gt; This *might* be an example of why we want per-callee frequencies.  But it
&gt; might also just be a good reason to increase the number of callees we allow
&gt; in the poly call IC.  I&apos;ll mess with that.

Setting the poly call IC size to 4 appears to fix it.  I&apos;m going to do a search over a variety of poly call IC sizes and see what effect it has on other programs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064658</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-27 14:29:06 -0800</bug_when>
    <thetext>Ok - I&apos;m on to something.  I tried IC size limits 3, 4, and 5.  5 appears best, but 4 is almost as good.  This removes the richards regression.  But there is still a gbemu regression and SunSpider isn&apos;t really seeing a progression.  I&apos;ll try to fix both of those issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064681</commentid>
    <comment_count>14</comment_count>
      <attachid>245478</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-27 15:02:01 -0800</bug_when>
    <thetext>Created attachment 245478
rebased

Getting ready for the final bit of stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064687</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-27 15:09:30 -0800</bug_when>
    <thetext>I want to do two things: introduce fast path counts and allow the IC size to grow large, and mitigate the latter by using a binary switch instead of a linear branch chain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064767</commentid>
    <comment_count>16</comment_count>
      <attachid>245503</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-27 19:01:31 -0800</bug_when>
    <thetext>Created attachment 245503
more refinements

This introduces a binary switch and fast path counts.  Haven&apos;t tried it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064971</commentid>
    <comment_count>17</comment_count>
      <attachid>245558</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-28 11:45:20 -0800</bug_when>
    <thetext>Created attachment 245558
getting there

This patch passes tests but is still a regression on gbemu.  I believe that gbemu really wants one of its calls to be a normal virtual call rather than a cached polymorphic call.  I&apos;m going to experiment with making the polymorphic call machinery adapt to calls that are megamorphic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065143</commentid>
    <comment_count>18</comment_count>
      <attachid>245605</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-28 20:32:39 -0800</bug_when>
    <thetext>Created attachment 245605
the patch

Done!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065144</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-28 20:34:31 -0800</bug_when>
    <thetext>Attachment 245605 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:18:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:19:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:25:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:28:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1705:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1871:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1873:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkStatus.cpp:168:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:62:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:62:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:63:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:63:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
Total errors found: 12 in 32 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>1065145</commentid>
    <comment_count>20</comment_count>
      <attachid>245606</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-28 20:35:14 -0800</bug_when>
    <thetext>Created attachment 245606
the patch

And now, without tabs!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065146</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-28 20:36:25 -0800</bug_when>
    <thetext>Here&apos;s a large-sample-count run of SunSpider on my MBP, showing a speed-up on SunSpider:

Benchmark report for SunSpider on dethklok (MacBookPro9,1).

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

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

3d-cube                         4.8866+-0.0376            4.8543+-0.0329        
3d-morph                        6.1824+-0.0436            6.1446+-0.0255        
3d-raytrace                     6.5977+-0.1845     ?      6.6014+-0.1960        ?
access-binary-trees             2.0885+-0.0399     ?      2.0977+-0.0381        ?
access-fannkuch                 5.8915+-0.0707     ?      5.9083+-0.1113        ?
access-nbody                    2.9811+-0.0979            2.9460+-0.0688          might be 1.0119x faster
access-nsieve                   3.6582+-0.0313            3.6398+-0.0432        
bitops-3bit-bits-in-byte        1.5962+-0.0179     ?      1.6017+-0.0192        ?
bitops-bits-in-byte             3.5769+-0.0389            3.5665+-0.0495        
bitops-bitwise-and              2.1190+-0.0531            2.0994+-0.0409        
bitops-nsieve-bits              3.7544+-0.0254     ?      3.7556+-0.0812        ?
controlflow-recursive           2.2437+-0.0595            2.1926+-0.0300          might be 1.0233x faster
crypto-aes                      4.1764+-0.0714     ?      4.2196+-0.0923        ? might be 1.0103x slower
crypto-md5                      2.4286+-0.0490            2.4253+-0.0506        
crypto-sha1                     2.7617+-0.0580            2.6770+-0.0474          might be 1.0316x faster
date-format-tofte               9.6993+-0.2640            9.4475+-0.1622          might be 1.0266x faster
date-format-xparb               5.4870+-0.1100            5.2813+-0.1062          might be 1.0390x faster
math-cordic                     3.1769+-0.0844            3.1148+-0.0449          might be 1.0200x faster
math-partial-sums               5.2267+-0.1075            5.1950+-0.0707        
math-spectral-norm              2.0129+-0.0673            1.9388+-0.0321          might be 1.0382x faster
regexp-dna                      8.0691+-0.2355            7.9427+-0.2030          might be 1.0159x faster
string-base64                   4.5848+-0.1194            4.5166+-0.0832          might be 1.0151x faster
string-fasta                    6.5762+-0.0534            6.5541+-0.0689        
string-tagcloud                10.1092+-0.0843           10.0951+-0.1729        
string-unpack-code             20.6961+-0.1538           20.5455+-0.2921        
string-validate-input           4.7125+-0.0752            4.6599+-0.0345          might be 1.0113x faster

&lt;arithmetic&gt; *                  5.2036+-0.0215     ^      5.1547+-0.0197        ^ definitely 1.0095x faster
&lt;geometric&gt;                     4.2997+-0.0134     ^      4.2611+-0.0117        ^ definitely 1.0091x faster
&lt;harmonic&gt;                      3.6758+-0.0109     ^      3.6458+-0.0097        ^ definitely 1.0082x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065147</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-28 20:36:48 -0800</bug_when>
    <thetext>Here&apos;s a SunSpider, Octane, AsmBench run on my MBP (fewer samples):

Benchmark report for SunSpider, Octane, and AsmBench on dethklok (MacBookPro9,1).

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

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime()
function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in
milliseconds.

                                        TipOfTree                FixPolyCall                                    
SunSpider:
   3d-cube                            4.8197+-0.0372     ?      4.9838+-0.6028        ? might be 1.0340x slower
   3d-morph                           6.4103+-0.6248            6.0075+-0.0367          might be 1.0670x faster
   3d-raytrace                        6.3250+-0.0850            6.2930+-0.2369        
   access-binary-trees                2.0028+-0.0260     ?      2.0251+-0.0933        ? might be 1.0112x slower
   access-fannkuch                    5.7402+-0.0383     ?      6.0172+-0.5350        ? might be 1.0482x slower
   access-nbody                       2.8374+-0.0662     ?      2.8810+-0.1253        ? might be 1.0154x slower
   access-nsieve                      3.5441+-0.0811     ?      3.6455+-0.0369        ? might be 1.0286x slower
   bitops-3bit-bits-in-byte           1.5651+-0.0455     ?      1.6098+-0.1236        ? might be 1.0286x slower
   bitops-bits-in-byte                3.5492+-0.1183            3.4893+-0.0326          might be 1.0172x faster
   bitops-bitwise-and                 2.0168+-0.0639     ?      2.0762+-0.1334        ? might be 1.0294x slower
   bitops-nsieve-bits                 3.7328+-0.2706            3.6347+-0.0286          might be 1.0270x faster
   controlflow-recursive              2.2379+-0.1940     ?      2.4342+-0.6340        ? might be 1.0877x slower
   crypto-aes                         4.0303+-0.0771            3.9875+-0.0688          might be 1.0107x faster
   crypto-md5                         2.4823+-0.2840            2.3923+-0.1226          might be 1.0376x faster
   crypto-sha1                        2.5816+-0.1007            2.5734+-0.1213        
   date-format-tofte                  9.4643+-0.2728     ?     10.7980+-3.1211        ? might be 1.1409x slower
   date-format-xparb                  5.5444+-0.5303     ?      5.7240+-0.9754        ? might be 1.0324x slower
   math-cordic                        3.0561+-0.0422     ?      3.0608+-0.0376        ?
   math-partial-sums                  5.1626+-0.0902            5.0476+-0.0891          might be 1.0228x faster
   math-spectral-norm                 1.8896+-0.0290     ?      2.0972+-0.5773        ? might be 1.1099x slower
   regexp-dna                         7.7404+-1.3290            7.3598+-0.2031          might be 1.0517x faster
   string-base64                      4.3940+-0.2608            4.2830+-0.0998          might be 1.0259x faster
   string-fasta                       6.4015+-0.0859     ?      6.7855+-0.6364        ? might be 1.0600x slower
   string-tagcloud                   10.1041+-0.3371     ?     10.3594+-0.6874        ? might be 1.0253x slower
   string-unpack-code                21.4417+-1.5241           20.4969+-1.5277          might be 1.0461x faster
   string-validate-input              4.6207+-0.1930     ?      4.6427+-0.1659        ?

   &lt;arithmetic&gt; *                     5.1421+-0.0914     ?      5.1810+-0.1442        ? might be 1.0076x slower
   &lt;geometric&gt;                        4.2193+-0.0456     ?      4.2613+-0.0784        ? might be 1.0100x slower
   &lt;harmonic&gt;                         3.5988+-0.0313     ?      3.6415+-0.0694        ? might be 1.0118x slower

                                        TipOfTree                FixPolyCall                                    
Octane:
   encrypt                           0.24821+-0.03876          0.23258+-0.00301         might be 1.0672x faster
   decrypt                           4.01782+-0.01861    ?     4.06039+-0.08587       ? might be 1.0106x slower
   deltablue                x2       0.20643+-0.00522          0.20511+-0.00285       
   earley                            0.72621+-0.08309          0.71169+-0.01280         might be 1.0204x faster
   boyer                             5.50676+-0.31650          5.40778+-0.06060         might be 1.0183x faster
   navier-stokes            x2       5.36930+-0.49714          5.18544+-0.04820         might be 1.0355x faster
   raytrace                 x2       1.31065+-0.03534    ?     1.31643+-0.04533       ?
   richards                 x2       0.13420+-0.00252          0.13415+-0.00153       
   splay                    x2       0.39231+-0.00931          0.38217+-0.00136         might be 1.0265x faster
   regexp                   x2      34.42388+-2.07032         34.42273+-0.59373       
   pdfjs                    x2      52.11575+-0.49626    ?    52.55593+-0.69477       ?
   mandreel                 x2      55.28892+-2.71486         53.79518+-0.27819         might be 1.0278x faster
   gbemu                    x2      44.72125+-0.77128    ?    47.06019+-2.34015       ? might be 1.0523x slower
   closure                           0.56806+-0.00241          0.56651+-0.00691       
   jquery                            8.20949+-1.43832          7.88236+-1.20685         might be 1.0415x faster
   box2d                    x2      13.40057+-0.08366    ?    13.53902+-0.16069       ? might be 1.0103x slower
   zlib                     x2     478.10385+-17.17574   ?   505.18743+-54.06191      ? might be 1.0566x slower
   typescript               x2     867.49902+-13.16426   ?   919.75391+-116.79714     ? might be 1.0602x slower

   &lt;arithmetic&gt;                    104.17363+-1.07316    ?   109.53122+-7.81338       ? might be 1.0514x slower
   &lt;geometric&gt; *                     7.24684+-0.07389    ?     7.26045+-0.08612       ? might be 1.0019x slower
   &lt;harmonic&gt;                        0.75519+-0.00824          0.74697+-0.00285         might be 1.0110x faster

                                        TipOfTree                FixPolyCall                                    
AsmBench:
   bigfib.cpp                       530.3802+-87.8702         501.4757+-4.4827          might be 1.0576x faster
   cray.c                           470.5333+-5.6511          469.3772+-2.3721        
   dry.c                            495.7466+-12.3185         493.5306+-10.6363       
   FloatMM.c                        728.5669+-2.5297     ?    736.6958+-9.0387        ? might be 1.0112x slower
   gcc-loops.cpp                   4173.6727+-9.7069     ?   4244.0462+-159.3924      ? might be 1.0169x slower
   n-body.c                         997.3752+-6.2489     ?   1000.8542+-23.6847       ?
   Quicksort.c                      451.1179+-18.8434         451.0982+-18.0806       
   stepanov_container.cpp          3602.4000+-22.0552        3593.6665+-17.3052       
   Towers.c                         262.7042+-1.9439     ?    281.6958+-47.6332       ? might be 1.0723x slower

   &lt;arithmetic&gt;                    1301.3886+-8.0324     ?   1308.0489+-21.5429       ? might be 1.0051x slower
   &lt;geometric&gt; *                    815.0658+-13.8666    ?    818.2437+-16.1845       ? might be 1.0039x slower
   &lt;harmonic&gt;                       600.9678+-10.6785    ?    606.5304+-23.3536       ? might be 1.0093x slower

                                        TipOfTree                FixPolyCall                                    
All benchmarks:
   &lt;arithmetic&gt;                     230.3292+-1.3863     ?    233.7397+-3.7608        ? might be 1.0148x slower
   &lt;geometric&gt;                       11.2243+-0.0586     ?     11.2842+-0.0626        ? might be 1.0053x slower
   &lt;harmonic&gt;                         1.3840+-0.0127            1.3737+-0.0068          might be 1.0075x faster

                                        TipOfTree                FixPolyCall                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                   67.2149+-0.5190     ?     67.5088+-0.5563        ? might be 1.0044x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065148</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-28 20:37:16 -0800</bug_when>
    <thetext>Here&apos;s a run of all benchmarks on an older Mac Pro:


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

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

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree                FixPolyCall                                    
SunSpider:
   3d-cube                                            7.7431+-0.0613            7.6078+-0.1873          might be 1.0178x faster
   3d-morph                                           9.7134+-0.0904            9.6610+-0.1086        
   3d-raytrace                                        9.9838+-0.2051            9.8059+-0.1622          might be 1.0181x faster
   access-binary-trees                                3.1146+-0.0928            3.0540+-0.0779          might be 1.0199x faster
   access-fannkuch                                    9.9098+-0.1095     ?     10.1375+-0.3287        ? might be 1.0230x slower
   access-nbody                                       4.9222+-0.0513            4.9096+-0.0920        
   access-nsieve                                      5.5474+-0.1166     ?      5.5666+-0.1132        ?
   bitops-3bit-bits-in-byte                           2.0453+-0.0301     ?      2.0477+-0.0310        ?
   bitops-bits-in-byte                                6.9119+-0.1437            6.9077+-0.0892        
   bitops-bitwise-and                                 3.3750+-0.0152            3.3726+-0.0329        
   bitops-nsieve-bits                                 5.8400+-0.0423     ?      5.8576+-0.0461        ?
   controlflow-recursive                              3.1855+-0.0522     ?      3.2242+-0.0247        ? might be 1.0121x slower
   crypto-aes                                         6.3446+-0.2069     ?      6.3929+-0.0552        ?
   crypto-md5                                         3.9052+-0.0548            3.8197+-0.1498          might be 1.0224x faster
   crypto-sha1                                        3.8910+-0.0717            3.8712+-0.0837        
   date-format-tofte                                 13.7430+-0.2134     ?     13.9942+-0.3587        ? might be 1.0183x slower
   date-format-xparb                                  8.3760+-0.1299     ?      8.3846+-0.3068        ?
   math-cordic                                        4.9564+-0.0722            4.9110+-0.0909        
   math-partial-sums                                 10.5095+-0.2157     ?     10.6978+-0.2103        ? might be 1.0179x slower
   math-spectral-norm                                 3.2673+-0.0650     ?      3.2719+-0.0696        ?
   regexp-dna                                        12.0131+-0.2420     ?     12.0291+-0.1901        ?
   string-base64                                      6.5761+-0.0455     ?      6.5859+-0.0351        ?
   string-fasta                                      10.2776+-0.0762     ?     10.3318+-0.1295        ?
   string-tagcloud                                   15.4904+-0.2454           15.4272+-0.3401        
   string-unpack-code                                31.2062+-0.2590     !     32.4849+-0.5851        ! definitely 1.0410x slower
   string-validate-input                              7.4541+-0.0912            7.4288+-0.0370        

   &lt;arithmetic&gt; *                                     8.0886+-0.0263     ?      8.1455+-0.0311        ? might be 1.0070x slower
   &lt;geometric&gt;                                        6.7076+-0.0306     ?      6.7145+-0.0213        ? might be 1.0010x slower
   &lt;harmonic&gt;                                         5.6734+-0.0338            5.6643+-0.0244          might be 1.0016x faster

                                                        TipOfTree                FixPolyCall                                    
LongSpider:
   3d-cube                                         1374.4176+-12.7866        1370.0026+-20.9700       
   3d-morph                                        2282.9271+-3.5690     ?   2287.3702+-14.9360       ?
   3d-raytrace                                     1274.6424+-6.4620     ?   1286.4902+-30.3278       ?
   access-binary-trees                             1627.0184+-15.6320    ?   1628.7638+-8.9347        ?
   access-fannkuch                                  538.1798+-11.7588         530.0782+-13.5937         might be 1.0153x faster
   access-nbody                                    1232.4153+-4.0531         1229.9505+-1.4659        
   access-nsieve                                   1532.0018+-3.8758     ?   1545.9462+-38.5735       ?
   bitops-3bit-bits-in-byte                          57.0533+-0.2970     ?     57.2030+-0.3200        ?
   bitops-bits-in-byte                              392.4292+-6.1271          387.8375+-4.5169          might be 1.0118x faster
   bitops-nsieve-bits                              1148.3881+-6.4115         1144.3465+-4.8341        
   controlflow-recursive                            886.5205+-1.3441     ?    886.8161+-1.3665        ?
   crypto-aes                                      1095.0660+-1.9928     ?   1103.0529+-6.2945        ?
   crypto-md5                                       953.2603+-10.5879    ?    954.5077+-1.7423        ?
   crypto-sha1                                     1158.5999+-9.0525         1153.4832+-4.4243        
   date-format-tofte                               1209.8842+-14.9429    ?   1239.4604+-18.3103       ? might be 1.0244x slower
   date-format-xparb                               1236.8608+-45.0332        1222.9519+-72.6632         might be 1.0114x faster
   math-cordic                                      820.5909+-1.0322     ?    857.9649+-83.4131       ? might be 1.0455x slower
   math-partial-sums                               1311.3398+-3.1623         1309.8267+-3.6937        
   math-spectral-norm                              1304.6534+-13.3148        1299.4845+-1.7255        
   string-base64                                    570.6387+-4.4966     ?    571.2506+-2.1206        ?
   string-fasta                                     695.2519+-2.9267     ?    696.1490+-3.0236        ?
   string-tagcloud                                  362.1212+-1.9623     ?    366.1341+-6.3042        ? might be 1.0111x slower

   &lt;arithmetic&gt;                                    1048.3755+-3.2786     ?   1051.3214+-6.9806        ? might be 1.0028x slower
   &lt;geometric&gt; *                                    876.4548+-2.4190     ?    878.6154+-6.0346        ? might be 1.0025x slower
   &lt;harmonic&gt;                                       534.9611+-1.6363     ?    536.0557+-2.7610        ? might be 1.0020x slower

                                                        TipOfTree                FixPolyCall                                    
V8Spider:
   crypto                                            82.8378+-1.1365     ?     83.0167+-1.0180        ?
   deltablue                                        122.4006+-1.1134     ^     98.0278+-3.3151        ^ definitely 1.2486x faster
   earley-boyer                                      71.5969+-0.1246     !     72.3028+-0.5213        ! definitely 1.0099x slower
   raytrace                                          46.0900+-0.8624     ^     44.2883+-0.5730        ^ definitely 1.0407x faster
   regexp                                           115.8741+-0.8046     ?    116.6085+-1.0933        ?
   richards                                         114.4447+-2.9166     ^    104.0122+-1.2366        ^ definitely 1.1003x faster
   splay                                             56.2960+-1.7855           55.3670+-2.5617          might be 1.0168x faster

   &lt;arithmetic&gt;                                      87.0772+-0.3895     ^     81.9462+-0.6460        ^ definitely 1.0626x faster
   &lt;geometric&gt; *                                     82.0143+-0.4481     ^     77.9436+-0.6134        ^ definitely 1.0522x faster
   &lt;harmonic&gt;                                        76.8731+-0.5533     ^     73.7254+-0.6200        ^ definitely 1.0427x faster

                                                        TipOfTree                FixPolyCall                                    
Octane:
   encrypt                                           0.38660+-0.00506          0.38637+-0.00552       
   decrypt                                           6.94315+-0.21103          6.87493+-0.15471       
   deltablue                                x2       0.32203+-0.00685          0.32138+-0.00528       
   earley                                            1.22231+-0.00647    ?     1.24053+-0.01802       ? might be 1.0149x slower
   boyer                                            10.53766+-0.17992    ?    10.58220+-0.18963       ?
   navier-stokes                            x2       7.83037+-0.19437    ?     7.83939+-0.17682       ?
   raytrace                                 x2       2.27615+-0.03651          2.24910+-0.03183         might be 1.0120x faster
   richards                                 x2       0.20444+-0.00555          0.19952+-0.00054         might be 1.0247x faster
   splay                                    x2       0.62316+-0.00672          0.62252+-0.00845       
   regexp                                   x2      58.14070+-0.15416    ?    58.43748+-0.25022       ?
   pdfjs                                    x2      84.44214+-2.15521         84.25630+-0.81482       
   mandreel                                 x2      89.67196+-3.16487         88.35662+-0.29480         might be 1.0149x faster
   gbemu                                    x2      76.10458+-1.45601    !    78.57249+-0.83842       ! definitely 1.0324x slower
   closure                                           0.90053+-0.00420    !     0.90639+-0.00099       ! definitely 1.0065x slower
   jquery                                           11.68140+-0.30185    ?    11.80463+-0.10170       ? might be 1.0105x slower
   box2d                                    x2      23.08769+-0.21190    ?    23.40268+-0.62259       ? might be 1.0136x slower
   zlib                                     x2     778.19476+-43.33999   ?   792.58366+-6.54982       ? might be 1.0185x slower
   typescript                               x2    1303.17761+-55.44990      1286.68213+-18.10337        might be 1.0128x faster

   &lt;arithmetic&gt;                                    162.66076+-1.45877        162.62805+-1.61621         might be 1.0002x faster
   &lt;geometric&gt; *                                    11.72610+-0.04746    ?    11.73906+-0.04694       ? might be 1.0011x slower
   &lt;harmonic&gt;                                        1.18205+-0.01458          1.17076+-0.00571         might be 1.0096x faster

                                                        TipOfTree                FixPolyCall                                    
Kraken:
   ai-astar                                          528.180+-1.389      ?     529.118+-0.664         ?
   audio-beat-detection                              196.142+-4.532      ?     199.746+-3.955         ? might be 1.0184x slower
   audio-dft                                         253.224+-3.014      ?     256.755+-13.086        ? might be 1.0139x slower
   audio-fft                                         133.385+-1.527            132.329+-0.778         
   audio-oscillator                                  356.545+-0.796            356.356+-0.766         
   imaging-darkroom                                  287.724+-1.398      ?     288.111+-3.388         ?
   imaging-desaturate                                112.953+-0.234      ?     113.889+-2.939         ?
   imaging-gaussian-blur                             183.878+-0.628      ?     184.415+-3.481         ?
   json-parse-financial                               83.813+-2.139             82.414+-0.559           might be 1.0170x faster
   json-stringify-tinderbox                          100.826+-1.883      ?     102.970+-0.933         ? might be 1.0213x slower
   stanford-crypto-aes                               100.375+-3.731            100.196+-1.165         
   stanford-crypto-ccm                                93.216+-8.858      ?      94.284+-9.832         ? might be 1.0115x slower
   stanford-crypto-pbkdf2                            277.476+-6.572            276.994+-2.584         
   stanford-crypto-sha256-iterative                  107.448+-0.851      ?     108.038+-1.775         ?

   &lt;arithmetic&gt; *                                    201.085+-0.589      ?     201.830+-1.421         ? might be 1.0037x slower
   &lt;geometric&gt;                                       170.462+-1.410      ?     171.126+-1.667         ? might be 1.0039x slower
   &lt;harmonic&gt;                                        148.064+-2.254      ?     148.565+-2.110         ? might be 1.0034x slower

                                                        TipOfTree                FixPolyCall                                    
JSRegress:
   abs-boolean                                        4.3472+-0.0393     ?      4.4998+-0.2113        ? might be 1.0351x slower
   adapt-to-double-divide                            20.5409+-0.2379           20.4342+-0.3717        
   aliased-arguments-getbyval                         1.7630+-0.0400     ?      1.8052+-0.0254        ? might be 1.0239x slower
   allocate-big-object                                3.9596+-0.1061     ?      4.0835+-0.1058        ? might be 1.0313x slower
   arity-mismatch-inlining                            1.1994+-0.0255     ?      1.2054+-0.0348        ?
   array-access-polymorphic-structure                10.9436+-0.0574     ?     11.0904+-0.3211        ? might be 1.0134x slower
   array-nonarray-polymorhpic-access                 57.9485+-0.4345     ?     59.6107+-3.1039        ? might be 1.0287x slower
   array-prototype-every                            125.8075+-3.6432     !    146.7563+-1.6053        ! definitely 1.1665x slower
   array-prototype-forEach                          124.0273+-2.7556     !    142.4324+-1.6292        ! definitely 1.1484x slower
   array-prototype-map                              151.1400+-3.8483     !    173.7982+-0.9184        ! definitely 1.1499x slower
   array-prototype-some                             123.1647+-0.6726     !    145.2794+-1.5977        ! definitely 1.1796x slower
   array-splice-contiguous                           68.6637+-1.1688           68.1704+-0.5791        
   array-with-double-add                              6.4715+-0.1306     ?      6.5418+-0.1592        ? might be 1.0109x slower
   array-with-double-increment                        4.8363+-0.0642            4.8184+-0.0817        
   array-with-double-mul-add                          8.3795+-0.1971     ?      8.4421+-0.1210        ?
   array-with-double-sum                              5.1440+-0.0965            5.1290+-0.0471        
   array-with-int32-add-sub                          11.3419+-0.2369     ?     11.3944+-0.2377        ?
   array-with-int32-or-double-sum                     5.1804+-0.0523     ?      5.2124+-0.0604        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     57.4015+-1.5342     ?     59.3450+-2.3559        ? might be 1.0339x slower
   ArrayBuffer-DataView-alloc-long-lived             22.3796+-0.3986     !     24.2474+-0.6756        ! definitely 1.0835x slower
   ArrayBuffer-Int32Array-byteOffset                  5.6307+-0.0756     ?      5.6878+-0.0346        ? might be 1.0101x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     62.5754+-3.0025     ?     63.0499+-1.1020        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     37.8843+-0.8595     !     40.7436+-1.6740        ! definitely 1.0755x slower
   ArrayBuffer-Int8Array-alloc-long-lived            21.5275+-0.3219     !     23.0908+-0.6299        ! definitely 1.0726x slower
   ArrayBuffer-Int8Array-alloc                       18.6761+-0.3352     !     20.3300+-0.6417        ! definitely 1.0886x slower
   asmjs_bool_bug                                    10.2980+-0.2024     ?     10.4688+-0.2092        ? might be 1.0166x slower
   assign-custom-setter-polymorphic                   4.8110+-0.0185     ?      5.0101+-0.2941        ? might be 1.0414x slower
   assign-custom-setter                               6.7861+-0.2700            6.7684+-0.2407        
   basic-set                                         15.5647+-0.2726     ?     15.8498+-0.2689        ? might be 1.0183x slower
   big-int-mul                                        6.7995+-0.0484     ?      6.8053+-0.2036        ?
   boolean-test                                       5.0341+-0.0705            4.9993+-0.0559        
   branch-fold                                        5.4204+-0.0492     ?      5.4421+-0.0754        ?
   by-val-generic                                    12.7389+-0.3446           12.6557+-0.3160        
   call-spread-apply                                 20.8071+-0.2530     ?     21.0218+-0.3777        ? might be 1.0103x slower
   call-spread-call                                   8.9637+-0.1108            8.8973+-0.1781        
   captured-assignments                               0.6314+-0.0072     ?      0.6431+-0.0083        ? might be 1.0185x slower
   cast-int-to-double                                 9.4862+-0.1542     ?      9.6041+-0.1293        ? might be 1.0124x slower
   cell-argument                                     11.0897+-0.1723     ?     11.2362+-0.2438        ? might be 1.0132x slower
   cfg-simplify                                       4.3013+-0.0226     ?      4.3023+-0.0411        ?
   chain-getter-access                               13.8110+-0.1947     ?     13.9080+-0.2074        ?
   cmpeq-obj-to-obj-other                            13.8167+-0.2586     ?     14.0962+-0.3048        ? might be 1.0202x slower
   constant-test                                      9.0841+-0.1192            9.0122+-0.0486        
   DataView-custom-properties                        64.1408+-2.0208     !     70.2617+-1.4871        ! definitely 1.0954x slower
   delay-tear-off-arguments-strictmode                3.8832+-0.0462     ?      3.8944+-0.0488        ?
   destructuring-arguments                            9.1615+-0.0849            9.0510+-0.1593          might be 1.0122x faster
   destructuring-swap                                 9.2425+-0.0979            9.1685+-0.2009        
   direct-arguments-getbyval                          1.0373+-0.0142     ?      1.0507+-0.0146        ? might be 1.0129x slower
   div-boolean-double                                 6.5591+-0.0750     ?      6.5722+-0.0679        ?
   div-boolean                                       11.6874+-0.1388           11.6134+-0.1582        
   double-get-by-val-out-of-bounds                    6.7202+-0.1096     ?      6.8459+-0.1394        ? might be 1.0187x slower
   double-pollution-getbyval                         11.5002+-0.2181     ?     11.5086+-0.2034        ?
   double-pollution-putbyoffset                       6.2913+-0.1810     ?      6.3912+-0.1551        ? might be 1.0159x slower
   double-to-int32-typed-array-no-inline              3.2243+-0.0319     ?      3.2272+-0.0542        ?
   double-to-int32-typed-array                        2.8384+-0.0706            2.8046+-0.0627          might be 1.0121x faster
   double-to-uint32-typed-array-no-inline             3.3144+-0.0814     ?      3.3680+-0.1028        ? might be 1.0162x slower
   double-to-uint32-typed-array                       2.9898+-0.0698            2.9674+-0.0692        
   elidable-new-object-dag                           63.8998+-1.4894           63.3593+-0.6021        
   elidable-new-object-roflcopter                   244.1246+-1.6831          243.5238+-2.4515        
   elidable-new-object-then-call                     57.9811+-1.2739           57.6588+-0.5420        
   elidable-new-object-tree                          70.1278+-1.1543     ?     70.6317+-0.7282        ?
   empty-string-plus-int                              8.5554+-0.1358     !      8.8743+-0.1492        ! definitely 1.0373x slower
   emscripten-cube2hash                              53.7476+-0.8138           53.3005+-0.6383        
   external-arguments-getbyval                        2.1479+-0.0474     !      2.2213+-0.0242        ! definitely 1.0342x slower
   external-arguments-putbyval                        3.3895+-0.0204            3.2999+-0.0729          might be 1.0271x faster
   fixed-typed-array-storage-var-index                1.6397+-0.0389            1.6272+-0.0064        
   fixed-typed-array-storage                          1.2459+-0.0577            1.2301+-0.0267          might be 1.0128x faster
   Float32Array-matrix-mult                           6.7474+-0.0554     ?      6.9147+-0.3922        ? might be 1.0248x slower
   Float32Array-to-Float64Array-set                  92.5581+-0.5212     ^     89.9178+-1.4837        ^ definitely 1.0294x faster
   Float64Array-alloc-long-lived                    103.5635+-1.7044          101.9898+-1.1035          might be 1.0154x faster
   Float64Array-to-Int16Array-set                   112.2249+-0.7159     ?    112.3964+-1.2198        ?
   fold-double-to-int                                20.3447+-0.3990     ?     20.3851+-0.1462        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     24.5426+-0.1289     ^     12.3510+-0.2910        ^ definitely 1.9871x faster
   fold-get-by-id-to-multi-get-by-offset             23.2840+-0.4085     ^     11.0652+-0.2909        ^ definitely 2.1043x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                     17.6646+-0.4747     ^     10.5139+-1.6353        ^ definitely 1.6801x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     17.8997+-0.4430     ^     10.7834+-0.6866        ^ definitely 1.6599x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     16.9428+-0.2338     ^      9.2050+-0.5001        ^ definitely 1.8406x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     15.8894+-0.1560     ^      7.5765+-0.5975        ^ definitely 2.0972x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     22.4945+-0.1286     ^     15.0210+-1.3938        ^ definitely 1.4975x faster
   fold-put-by-id-to-multi-put-by-offset             23.9040+-0.3779     ^     11.2602+-0.9230        ^ definitely 2.1229x faster
   fold-put-structure                                16.7803+-0.5084     ^      7.9063+-0.5863        ^ definitely 2.1224x faster
   for-of-iterate-array-entries                       8.6227+-0.3015     ?      8.6943+-0.2137        ?
   for-of-iterate-array-keys                          3.9689+-0.0991     ?      4.0623+-0.0984        ? might be 1.0235x slower
   for-of-iterate-array-values                        3.4840+-0.0826     ?      3.5066+-0.0872        ?
   fround                                            23.7209+-0.2487           23.6256+-0.2147        
   ftl-library-inlining-dataview                    106.3356+-2.7316     ?    107.2389+-5.3141        ?
   ftl-library-inlining                             128.4596+-17.4214    ?    142.9221+-0.2203        ? might be 1.1126x slower
   function-dot-apply                                 2.5901+-0.0447     ?      2.6113+-0.0366        ?
   function-test                                      5.4725+-0.1111            5.4388+-0.0920        
   function-with-eval                               181.7540+-0.5742          180.9929+-1.0972        
   gcse-poly-get-less-obvious                        29.1089+-0.4746     ?     29.6518+-0.3851        ? might be 1.0187x slower
   gcse-poly-get                                     29.7091+-0.1294     ?     29.9956+-0.7462        ?
   gcse                                               7.6549+-0.1188            7.5594+-0.1684          might be 1.0126x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.9093+-0.0436     ?      3.9123+-0.0865        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      9.8397+-0.2734     ?      9.8498+-0.1012        ?
   get-by-id-chain-from-try-block                    19.5870+-0.2454           19.4104+-0.1819        
   get-by-id-check-structure-elimination              8.9693+-0.1599            8.7669+-0.1783          might be 1.0231x faster
   get-by-id-proto-or-self                           25.8743+-2.4313           24.9679+-1.1596          might be 1.0363x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      4.6613+-0.0528            4.6513+-0.0755        
   get-by-id-self-or-proto                           25.4169+-0.7213           25.3053+-1.6580        
   get-by-val-out-of-bounds                           6.8379+-0.2359     ?      7.2094+-0.4222        ? might be 1.0543x slower
   get_callee_monomorphic                             5.8807+-0.1072     ?      5.9951+-0.1497        ? might be 1.0195x slower
   get_callee_polymorphic                             5.1165+-0.1087     ?      5.1418+-0.1249        ?
   getter-no-activation                               6.8623+-0.0480     ?      6.9453+-0.0607        ? might be 1.0121x slower
   getter-richards                                  163.6601+-8.7209          151.0332+-4.0713          might be 1.0836x faster
   getter                                             7.8403+-0.2371            7.6878+-0.1701          might be 1.0198x faster
   global-var-const-infer-fire-from-opt               1.3392+-0.0688     ?      1.3412+-0.1246        ?
   global-var-const-infer                             1.2929+-0.0472            1.2873+-0.0415        
   HashMap-put-get-iterate-keys                      40.9592+-0.4455     ?     41.0598+-0.3746        ?
   HashMap-put-get-iterate                           40.4697+-0.5826           40.3741+-0.5479        
   HashMap-string-put-get-iterate                    40.1143+-2.2264           39.8031+-0.3401        
   hoist-make-rope                                   14.0476+-1.0652           13.7897+-0.9542          might be 1.0187x faster
   hoist-poly-check-structure-effectful-loop   
                                                      8.0020+-0.1547     ?      8.0597+-0.1512        ?
   hoist-poly-check-structure                         5.7042+-0.0480            5.6742+-0.0667        
   imul-double-only                                  10.0771+-0.3462     ?     10.1142+-0.2501        ?
   imul-int-only                                     13.1656+-0.4187           12.8553+-0.5091          might be 1.0241x faster
   imul-mixed                                         9.6145+-0.5832     ?     10.1410+-0.5252        ? might be 1.0548x slower
   in-four-cases                                     28.6674+-0.1880     ?     28.7503+-0.0981        ?
   in-one-case-false                                 14.8816+-0.2234     ?     14.9885+-0.0829        ?
   in-one-case-true                                  14.8643+-0.0924     ?     14.9337+-0.2184        ?
   in-two-cases                                      15.5200+-0.1244     ?     15.6124+-0.1464        ?
   indexed-properties-in-objects                      4.3986+-0.0595     ?      4.3992+-0.0760        ?
   infer-closure-const-then-mov-no-inline             5.2253+-0.0231            5.1587+-0.1135          might be 1.0129x faster
   infer-closure-const-then-mov                      29.4488+-0.0474     ?     29.6029+-0.1386        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.6587+-0.1570     ?     17.7229+-0.3379        ?
   infer-closure-const-then-put-to-scope             35.8828+-0.5366           35.6579+-0.1111        
   infer-closure-const-then-reenter-no-inline   
                                                     81.0774+-0.1201     ?     81.1822+-0.1174        ?
   infer-closure-const-then-reenter                  34.6437+-0.2010           34.6389+-0.2467        
   infer-constant-global-property                     5.5492+-0.0221     ?      5.5999+-0.0556        ?
   infer-constant-property                            3.8892+-0.0567            3.8728+-0.0531        
   infer-one-time-closure-ten-vars                   16.7299+-0.1695     ?     16.8703+-0.1652        ?
   infer-one-time-closure-two-vars                   15.9514+-0.1502           15.7939+-0.2704        
   infer-one-time-closure                            15.7604+-0.3001     ?     15.9677+-0.0983        ? might be 1.0132x slower
   infer-one-time-deep-closure                       28.5570+-0.1734           28.4137+-0.1586        
   inline-arguments-access                            2.4738+-0.0322            2.4677+-0.0303        
   inline-arguments-aliased-access                    2.8352+-0.0075            2.8005+-0.0515          might be 1.0124x faster
   inline-arguments-local-escape                     21.8341+-0.2238     ?     22.1306+-0.1697        ? might be 1.0136x slower
   inline-get-scoped-var                              6.6786+-0.1361     ?      6.7233+-0.1456        ?
   inlined-put-by-id-transition                      18.4785+-0.2834           17.7625+-0.7768          might be 1.0403x faster
   int-or-other-abs-then-get-by-val                   8.1552+-0.1561            8.0565+-0.1175          might be 1.0122x faster
   int-or-other-abs-zero-then-get-by-val             30.6173+-0.2326     ?     30.8746+-0.5417        ?
   int-or-other-add-then-get-by-val                   6.9277+-0.1686     ?      7.0263+-0.1478        ? might be 1.0142x slower
   int-or-other-add                                   9.2705+-0.1454     ?      9.3211+-0.1128        ?
   int-or-other-div-then-get-by-val                   6.1370+-0.0738            6.1005+-0.1296        
   int-or-other-max-then-get-by-val                   7.4832+-0.1894     ?      7.5845+-0.2465        ? might be 1.0135x slower
   int-or-other-min-then-get-by-val                   6.2349+-0.0844     ?      6.2472+-0.0803        ?
   int-or-other-mod-then-get-by-val                   5.9661+-0.1549     ?      6.0859+-0.0502        ? might be 1.0201x slower
   int-or-other-mul-then-get-by-val                   5.9008+-0.1245     ?      5.9507+-0.1448        ?
   int-or-other-neg-then-get-by-val                   7.3807+-0.1597     ?      7.3897+-0.0870        ?
   int-or-other-neg-zero-then-get-by-val             30.9039+-0.7138           30.6108+-0.2211        
   int-or-other-sub-then-get-by-val                   6.9970+-0.0936            6.9847+-0.1019        
   int-or-other-sub                                   6.0735+-0.0513     ?      6.0960+-0.0730        ?
   int-overflow-local                                 6.8700+-0.0694            6.8273+-0.0728        
   Int16Array-alloc-long-lived                       73.7884+-1.5848           73.2537+-1.0115        
   Int16Array-bubble-sort-with-byteLength            43.7412+-0.0426           43.5420+-0.2596        
   Int16Array-bubble-sort                            43.2946+-1.9388           42.5194+-0.2127          might be 1.0182x faster
   Int16Array-load-int-mul                            2.2039+-0.0405     ?      2.2463+-0.0441        ? might be 1.0192x slower
   Int16Array-to-Int32Array-set                      82.6978+-1.3404     ?     83.6757+-1.5284        ? might be 1.0118x slower
   Int32Array-alloc-large                            42.6249+-0.9592     ?     42.6949+-1.7607        ?
   Int32Array-alloc-long-lived                       80.9175+-0.6305           80.7850+-1.0012        
   Int32Array-alloc                                   4.8780+-0.1095     ?      4.9430+-0.0605        ? might be 1.0133x slower
   Int32Array-Int8Array-view-alloc                   11.4331+-0.1068     !     12.2927+-0.2256        ! definitely 1.0752x slower
   int52-spill                                       10.0249+-0.0520     ?     10.1704+-0.2367        ? might be 1.0145x slower
   Int8Array-alloc-long-lived                        66.8451+-0.5106     ?     66.9681+-0.4506        ?
   Int8Array-load-with-byteLength                     5.6129+-0.0492            5.5898+-0.0597        
   Int8Array-load                                     5.5825+-0.0592     ?      5.6357+-0.0538        ?
   integer-divide                                    17.1477+-0.1326           17.0951+-0.0380        
   integer-modulo                                     3.0382+-0.0366            3.0072+-0.0538          might be 1.0103x faster
   large-int-captured                                13.1444+-0.0717           13.1287+-0.3447        
   large-int-neg                                     23.9643+-0.5267     ?     24.0327+-0.4878        ?
   large-int                                         21.8397+-0.2974           21.6537+-0.3080        
   logical-not                                        7.6494+-0.2964     ?      7.7212+-0.2477        ?
   lots-of-fields                                    18.3398+-0.2845     ?     18.3975+-0.2129        ?
   make-indexed-storage                               4.6823+-0.1155     ?      4.8034+-0.1243        ? might be 1.0259x slower
   make-rope-cse                                      6.2931+-0.1679     ?      6.4735+-0.4205        ? might be 1.0287x slower
   marsaglia-larger-ints                             64.3240+-0.5589     ?     64.4481+-0.7294        ?
   marsaglia-osr-entry                               31.3440+-0.7265     ?     31.4425+-0.3234        ?
   max-boolean                                        3.8555+-0.0499     ?      3.9737+-0.1993        ? might be 1.0307x slower
   method-on-number                                  28.7893+-0.8798           27.8940+-0.4873          might be 1.0321x faster
   min-boolean                                        3.8103+-0.0421     ?      3.8463+-0.0631        ?
   minus-boolean-double                               4.9498+-0.0390     ?      4.9578+-0.0369        ?
   minus-boolean                                      3.8210+-0.0893            3.8003+-0.0457        
   misc-strict-eq                                    60.2197+-11.8673          56.2010+-0.6960          might be 1.0715x faster
   mod-boolean-double                                13.8989+-0.1462     ?     13.9332+-0.1526        ?
   mod-boolean                                       10.5380+-0.1635           10.5100+-0.1500        
   mul-boolean-double                                 5.7339+-0.0518            5.7002+-0.1380        
   mul-boolean                                        4.1059+-0.0425     ?      4.1393+-0.0254        ?
   neg-boolean                                        5.0192+-0.0425     ?      5.0222+-0.0250        ?
   negative-zero-divide                               0.4617+-0.0074     ?      0.4659+-0.0039        ?
   negative-zero-modulo                               0.4643+-0.0054     ?      0.4665+-0.0027        ?
   negative-zero-negate                               0.4328+-0.0064     ?      0.4426+-0.0062        ? might be 1.0226x slower
   nested-function-parsing                           39.8116+-0.4351           38.6211+-0.8223          might be 1.0308x faster
   new-array-buffer-dead                              4.3975+-0.0998            4.3805+-0.1127        
   new-array-buffer-push                             10.8094+-0.2426           10.7107+-0.1853        
   new-array-dead                                    14.8610+-0.2176           14.6556+-0.2601          might be 1.0140x faster
   new-array-push                                     7.4779+-0.3515            7.3801+-0.2083          might be 1.0132x faster
   number-test                                        4.8671+-0.0346     ?      4.8938+-0.0445        ?
   object-closure-call                                8.9688+-0.1238     ?      8.9757+-0.1293        ?
   object-test                                        5.1766+-0.0615     ?      5.2937+-0.1052        ? might be 1.0226x slower
   obvious-sink-pathology-taken                     206.9022+-2.2729     ?    209.9453+-2.4941        ? might be 1.0147x slower
   obvious-sink-pathology                           195.8888+-2.0261     ?    199.4840+-3.5559        ? might be 1.0184x slower
   obviously-elidable-new-object                     51.5020+-1.1499     ?     51.9724+-1.3882        ?
   plus-boolean-arith                                 3.8365+-0.0418     ?      3.8530+-0.0613        ?
   plus-boolean-double                                4.9637+-0.0464     ?      5.0070+-0.0194        ?
   plus-boolean                                       3.7435+-0.0426            3.7375+-0.0523        
   poly-chain-access-different-prototypes-simple   
                                                      4.5566+-0.0557     ?      4.6199+-0.0381        ? might be 1.0139x slower
   poly-chain-access-different-prototypes             3.0354+-0.0914     ?      3.1280+-0.3025        ? might be 1.0305x slower
   poly-chain-access-simpler                          4.5218+-0.0745     ?      4.5529+-0.0696        ?
   poly-chain-access                                  2.9218+-0.0188     ?      3.1248+-0.3186        ? might be 1.0695x slower
   poly-stricteq                                     85.5696+-0.3393           85.5165+-0.2905        
   polymorphic-array-call                             2.3422+-0.0630     ?      2.3644+-0.0285        ?
   polymorphic-get-by-id                              4.9021+-0.0502     ?      4.9279+-0.0487        ?
   polymorphic-put-by-id                             45.0473+-3.6918     ?     45.3674+-1.4568        ?
   polymorphic-structure                             29.8420+-0.3768           29.7926+-0.2445        
   polyvariant-monomorphic-get-by-id                 12.9873+-0.3139     ?     13.0556+-0.3654        ?
   proto-getter-access                               14.0427+-0.3021           13.9965+-0.1277        
   put-by-id-replace-and-transition                  12.9687+-0.2833           12.9395+-0.2227        
   put-by-id-slightly-polymorphic                     4.1800+-0.0441            4.1602+-0.0488        
   put-by-id                                         21.0468+-0.4665     ?     21.2009+-0.4680        ?
   put-by-val-direct                                  0.8373+-0.0105            0.8325+-0.0050        
   put-by-val-large-index-blank-indexing-type   
                                                     10.0974+-0.2479            9.9545+-0.3082          might be 1.0143x faster
   put-by-val-machine-int                             4.3242+-0.1422            4.2310+-0.2150          might be 1.0220x faster
   rare-osr-exit-on-local                            21.9405+-0.1759           21.5299+-0.7719          might be 1.0191x faster
   register-pressure-from-osr                        32.2351+-0.3857           31.9899+-0.1414        
   setter                                             7.7150+-0.1643     ?      7.7475+-0.1924        ?
   simple-activation-demo                            39.2698+-0.1748     ?     39.2871+-0.1365        ?
   simple-getter-access                              19.9213+-0.2453           19.8409+-0.2640        
   simple-poly-call-nested                           22.5692+-0.2577     ^     11.3383+-0.1577        ^ definitely 1.9905x faster
   simple-poly-call                                   1.7791+-0.0100     ^      1.7402+-0.0216        ^ definitely 1.0223x faster
   sin-boolean                                       24.1276+-0.7492           23.5147+-0.4069          might be 1.0261x faster
   sinkable-new-object-dag                           95.9856+-2.3565           95.2555+-1.2453        
   sinkable-new-object-taken                         78.4886+-0.3070     ?     79.1586+-1.1438        ?
   sinkable-new-object                               55.0026+-1.0377     ?     56.1707+-3.2494        ? might be 1.0212x slower
   slow-array-profile-convergence                     4.3970+-0.1459            4.3807+-0.1248        
   slow-convergence                                   5.0880+-0.0537     ?      5.1067+-0.1050        ?
   sparse-conditional                                 1.7146+-0.0435     ?      1.7634+-0.1100        ? might be 1.0285x slower
   splice-to-remove                                  27.7640+-0.1504           27.5532+-0.4976        
   string-char-code-at                               23.5731+-0.1608     ?     23.6212+-0.1126        ?
   string-concat-object                               3.2631+-0.0924            3.2587+-0.0826        
   string-concat-pair-object                          3.1648+-0.1759            3.1549+-0.0331        
   string-concat-pair-simple                         18.2897+-0.4822     ?     18.3336+-0.3986        ?
   string-concat-simple                              18.6144+-0.4285     ?     18.8547+-0.4067        ? might be 1.0129x slower
   string-cons-repeat                                11.9548+-0.0524     ?     12.0766+-0.1155        ? might be 1.0102x slower
   string-cons-tower                                 11.0198+-0.0554     ?     11.1592+-0.1908        ? might be 1.0127x slower
   string-equality                                   26.7115+-0.5686           26.3701+-0.2054          might be 1.0129x faster
   string-get-by-val-big-char                        11.8064+-0.3169     !     12.5473+-0.2081        ! definitely 1.0628x slower
   string-get-by-val-out-of-bounds-insane             6.6931+-0.1303            6.6220+-0.1753          might be 1.0107x faster
   string-get-by-val-out-of-bounds                    8.0543+-0.3164            8.0090+-0.1869        
   string-get-by-val                                  5.6907+-0.0255            5.6717+-0.0440        
   string-hash                                        3.0720+-0.0644     ?      3.0821+-0.0601        ?
   string-long-ident-equality                        21.5580+-0.1906     ?     21.5872+-0.1910        ?
   string-repeat-arith                               49.2934+-0.5730     ?     49.3681+-0.6784        ?
   string-sub                                        95.5723+-0.9011     ?     97.4448+-1.4576        ? might be 1.0196x slower
   string-test                                        4.8590+-0.0745     ?      4.9137+-0.0458        ? might be 1.0113x slower
   string-var-equality                               52.4305+-0.4248     ?     52.4655+-0.4735        ?
   structure-hoist-over-transitions                   3.8220+-0.0421     ?      3.8468+-0.0939        ?
   substring-concat-weird                            62.7062+-0.3840     !     63.7391+-0.6251        ! definitely 1.0165x slower
   substring-concat                                  66.4360+-0.4295     ?     67.0146+-1.0875        ?
   substring                                         75.8142+-0.8509     ?     76.0374+-0.2187        ?
   switch-char-constant                               3.9180+-0.0691            3.9145+-0.0431        
   switch-char                                        9.3968+-0.1262            9.3870+-0.1186        
   switch-constant                                   16.3839+-1.6327           15.6190+-2.1479          might be 1.0490x faster
   switch-string-basic-big-var                       25.9536+-1.5609           25.1650+-1.9630          might be 1.0313x faster
   switch-string-basic-big                           25.7962+-1.1930     ?     26.3020+-3.1272        ? might be 1.0196x slower
   switch-string-basic-var                           34.5800+-1.6242     ?     35.1563+-1.9271        ? might be 1.0167x slower
   switch-string-basic                               27.5215+-0.6448     ?     27.7345+-0.3099        ?
   switch-string-big-length-tower-var                29.9933+-0.2222     ?     30.2907+-0.6778        ?
   switch-string-length-tower-var                    23.7891+-0.5660           23.7535+-0.8447        
   switch-string-length-tower                        17.0098+-0.0678     ?     17.0283+-0.1025        ?
   switch-string-short                               17.0376+-0.1609     ?     17.0702+-0.1649        ?
   switch                                            18.5686+-3.1825     ?     19.7286+-3.0320        ? might be 1.0625x slower
   tear-off-arguments-simple                          3.8773+-0.0498     ?      3.8960+-0.0337        ?
   tear-off-arguments                                 6.0628+-0.0909     ?      6.1207+-0.0403        ?
   temporal-structure                                20.6108+-0.5045           20.4831+-0.1218        
   to-int32-boolean                                  25.2767+-0.5445           24.8662+-0.4313          might be 1.0165x faster
   undefined-property-access                        558.3659+-0.7923     ?    559.8681+-0.9548        ?
   undefined-test                                     5.0676+-0.0650     ?      5.0821+-0.0391        ?
   unprofiled-licm                                   31.4823+-0.3637           31.1967+-0.5602        
   weird-inlining-const-prop                          3.0217+-0.0979            2.9689+-0.1542          might be 1.0178x faster

   &lt;arithmetic&gt;                                      26.7797+-0.0566     ?     26.8319+-0.0498        ? might be 1.0019x slower
   &lt;geometric&gt; *                                     12.3680+-0.0203     ^     12.1640+-0.0204        ^ definitely 1.0168x faster
   &lt;harmonic&gt;                                         6.0419+-0.0122     ^      6.0168+-0.0083        ^ definitely 1.0042x faster

                                                        TipOfTree                FixPolyCall                                    
AsmBench:
   bigfib.cpp                                       805.4345+-5.1748          799.2900+-4.2405        
   cray.c                                           794.8741+-3.0957     !    800.3571+-1.8107        ! definitely 1.0069x slower
   dry.c                                            787.4051+-13.0942         787.2689+-21.7158       
   FloatMM.c                                       1146.3075+-0.5622         1145.6097+-1.1621        
   gcc-loops.cpp                                   7033.9452+-10.0536    ?   7047.0699+-15.4229       ?
   n-body.c                                        2027.0303+-7.3026         2025.3682+-4.3534        
   Quicksort.c                                      702.5670+-2.1375     ?    702.7419+-5.7202        ?
   stepanov_container.cpp                          5813.1728+-69.0546        5782.6385+-15.3021       
   Towers.c                                         469.1574+-1.5392     !    474.9974+-2.9617        ! definitely 1.0124x slower

   &lt;arithmetic&gt;                                    2175.5438+-7.2932         2173.9268+-2.5388          might be 1.0007x faster
   &lt;geometric&gt; *                                   1358.7397+-2.0738     ?   1359.7553+-5.2654        ? might be 1.0007x slower
   &lt;harmonic&gt;                                       999.4826+-2.8460     ?   1002.0937+-5.4217        ? might be 1.0026x slower

                                                        TipOfTree                FixPolyCall                                    
CompressionBench:
   huffman                                          718.9412+-8.9648     ?    721.8475+-2.4491        ?
   arithmetic-simple                                687.3184+-2.3016     ?    687.4087+-2.5082        ?
   arithmetic-precise                               525.7948+-3.4266     ?    529.7552+-14.2001       ?
   arithmetic-complex-precise                       525.7145+-5.0058          523.1427+-1.8896        
   arithmetic-precise-order-0                       755.0008+-18.7412    ?    764.0262+-4.7342        ? might be 1.0120x slower
   arithmetic-precise-order-1                       559.7933+-2.9261     ?    563.4202+-5.2493        ?
   arithmetic-precise-order-2                       624.5126+-3.3595     ?    634.7485+-11.7355       ? might be 1.0164x slower
   arithmetic-simple-order-1                        706.9583+-2.7381     ?    712.5033+-12.2267       ?
   arithmetic-simple-order-2                        791.9235+-8.1264          789.9486+-4.8329        
   lz-string                                        526.4965+-7.3729     ?    542.0887+-12.9866       ? might be 1.0296x slower

   &lt;arithmetic&gt;                                     642.2454+-3.0335     ?    646.8889+-2.3550        ? might be 1.0072x slower
   &lt;geometric&gt; *                                    634.7794+-2.7807     ?    639.5922+-2.3510        ? might be 1.0076x slower
   &lt;harmonic&gt;                                       627.3571+-2.5601     !    632.3072+-2.3667        ! definitely 1.0079x slower

                                                        TipOfTree                FixPolyCall                                    
All benchmarks:
   &lt;arithmetic&gt;                                     164.2076+-0.1480     ?    164.4253+-0.3087        ? might be 1.0013x slower
   &lt;geometric&gt;                                       20.9061+-0.0260     ^     20.6579+-0.0291        ^ definitely 1.0120x faster
   &lt;harmonic&gt;                                         5.1949+-0.0213     ^      5.1647+-0.0061        ^ definitely 1.0058x faster

                                                        TipOfTree                FixPolyCall                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                  104.8656+-0.1221     ^    104.2773+-0.1201        ^ definitely 1.0056x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065149</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-28 20:37:44 -0800</bug_when>
    <thetext>Attachment 245606 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1705:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1871:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1873:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/JavaScriptCore/bytecode/CallLinkStatus.cpp:168:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:62:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:62:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:63:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:63:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
Total errors found: 8 in 32 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>1065150</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-28 20:38:14 -0800</bug_when>
    <thetext>Here&apos;s a high-sample-count run of SunSpider on my Mac Pro.  Notice that this reports a slow-down where my MBP reported a speed-up.  I believe that the MBP is more representative, also the MBP&apos;s speed-up is larger than the Mac Pro&apos;s slow-down.


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

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

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

3d-cube                         7.7170+-0.0340     ?      7.7181+-0.0326        ?
3d-morph                        9.7831+-0.0261            9.7388+-0.0354        
3d-raytrace                    10.0348+-0.0471            9.9964+-0.0382        
access-binary-trees             3.0732+-0.0189     ?      3.1182+-0.0287        ? might be 1.0146x slower
access-fannkuch                10.0455+-0.0322     ?     10.0678+-0.0339        ?
access-nbody                    4.9420+-0.0142     ?      4.9446+-0.0179        ?
access-nsieve                   5.5936+-0.0206     ?      5.6146+-0.0213        ?
bitops-3bit-bits-in-byte        2.0516+-0.0085     !      2.0834+-0.0221        ! definitely 1.0155x slower
bitops-bits-in-byte             6.9174+-0.0234     ?      6.9257+-0.0283        ?
bitops-bitwise-and              3.3669+-0.0034     ?      3.3755+-0.0090        ?
bitops-nsieve-bits              5.8508+-0.0123     ?      5.8626+-0.0150        ?
controlflow-recursive           3.2179+-0.0180     ?      3.2433+-0.0265        ?
crypto-aes                      6.3771+-0.0258     !      6.4364+-0.0283        ! definitely 1.0093x slower
crypto-md5                      3.8777+-0.0236     ?      3.9033+-0.0194        ?
crypto-sha1                     3.9060+-0.0268            3.8842+-0.0198        
date-format-tofte              13.8654+-0.0652     !     14.0650+-0.0663        ! definitely 1.0144x slower
date-format-xparb               8.4498+-0.0353     ^      8.2310+-0.0455        ^ definitely 1.0266x faster
math-cordic                     4.9779+-0.0240            4.9636+-0.0154        
math-partial-sums              10.5462+-0.0322     ?     10.5859+-0.0363        ?
math-spectral-norm              3.2844+-0.0135     ?      3.2957+-0.0113        ?
regexp-dna                     11.9974+-0.0444           11.9734+-0.0456        
string-base64                   6.5849+-0.0187     ?      6.6124+-0.0181        ?
string-fasta                   10.3796+-0.0540           10.3683+-0.0414        
string-tagcloud                15.4755+-0.0611           15.4274+-0.0524        
string-unpack-code             31.3835+-0.1273     !     32.3859+-0.1398        ! definitely 1.0319x slower
string-validate-input           7.4339+-0.0281     ?      7.4824+-0.0320        ?

&lt;arithmetic&gt; *                  8.1205+-0.0082     !      8.1655+-0.0083        ! definitely 1.0055x slower
&lt;geometric&gt;                     6.7273+-0.0053     !      6.7478+-0.0062        ! definitely 1.0030x slower
&lt;harmonic&gt;                      5.6840+-0.0052     !      5.7057+-0.0079        ! definitely 1.0038x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065152</commentid>
    <comment_count>26</comment_count>
      <attachid>245607</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-28 20:39:59 -0800</bug_when>
    <thetext>Created attachment 245607
the patch

Fix style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065153</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-28 20:42:57 -0800</bug_when>
    <thetext>Attachment 245607 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/Repatch.cpp:1705:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/bytecode/CallLinkStatus.cpp:168:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:62:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:62:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/jit/PolymorphicCallStubRoutine.cpp:63:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 5 in 32 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>1065292</commentid>
    <comment_count>28</comment_count>
      <attachid>245607</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-01-29 11:16:29 -0800</bug_when>
    <thetext>Comment on attachment 245607
the patch

r=me

Do we know why we got a 2X speedup on those regress tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065293</commentid>
    <comment_count>29</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-29 11:17:53 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; Comment on attachment 245607 [details]
&gt; the patch
&gt; 
&gt; r=me
&gt; 
&gt; Do we know why we got a 2X speedup on those regress tests?

Perfect storm: remove the overhead of call edge profiling and polymorphic calls in the first three tiers become faster thanks to inline caching.  Those are the only short-running (i.e. no FTL or less FTL) tests that hammer poly call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065309</commentid>
    <comment_count>30</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-29 12:31:40 -0800</bug_when>
    <thetext>I&apos;m not getting EWS bubbles.  I&apos;ll rageland and watch the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065311</commentid>
    <comment_count>31</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-29 12:35:07 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/179357</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065425</commentid>
    <comment_count>32</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-29 17:12:13 -0800</bug_when>
    <thetext>Several WebGL tests started to flakily fail around the time of this change. Can it be the culprit?

http://webkit-test-results.appspot.com/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=webgl%2F1.0.2%2Fconformance%2Fglsl%2Ffunctions%2Fglsl-function-cos.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065434</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-29 17:26:23 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 141062</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065439</commentid>
    <comment_count>34</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-01-29 17:30:25 -0800</bug_when>
    <thetext>I&apos;m rolling this out to see if it fixes the WebGL problem. Will roll back in if problem remains.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065577</commentid>
    <comment_count>35</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-30 09:50:29 -0800</bug_when>
    <thetext>The issue no longer occurs, so it must have been this patch indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065669</commentid>
    <comment_count>36</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-30 15:23:42 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; The issue no longer occurs, so it must have been this patch indeed.

To clarify, is it just these two tests: glsl-function-cos and glsl-function-sin?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065692</commentid>
    <comment_count>37</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-30 16:01:02 -0800</bug_when>
    <thetext>Also this one:

webgl/1.0.2/conformance/glsl/functions/glsl-function-smoothstep-float.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065754</commentid>
    <comment_count>38</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-01-30 19:05:18 -0800</bug_when>
    <thetext>I&apos;ve confirmed that with the fix for https://bugs.webkit.org/show_bug.cgi?id=141107, this can be rolled back in without breaking the WebGL tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065760</commentid>
    <comment_count>39</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-30 19:29:56 -0800</bug_when>
    <thetext>It&apos;s exciting that flakiness only seen in debug builds on a few seemingly unrelated tests has helped identify a real issue!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1066145</commentid>
    <comment_count>40</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-02 10:43:08 -0800</bug_when>
    <thetext>Relanded in http://trac.webkit.org/changeset/179478</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067370</commentid>
    <comment_count>41</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2015-02-06 09:45:28 -0800</bug_when>
    <thetext>&lt;rdar://problem/18777722&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245005</attachid>
            <date>2015-01-20 11:41:01 -0800</date>
            <delta_ts>2015-01-20 12:33:42 -0800</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30431</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
Y3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCB2b2lkIENh
bGxMaW5rSW5mbzo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZmCiB7CiAgICAgaWYgKGlzTGlua2VkKCkp
IHsKICAgICAgICAgaWYgKHN0dWIpIHsKLSAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQo
c3R1Yi0+ZXhlY3V0YWJsZSgpKSkgeworICAgICAgICAgICAgaWYgKCFzdHViLT52aXNpdFdlYWso
KSkgewogICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICJDbGVhcmlu
ZyBjbG9zdXJlIGNhbGwgZnJvbSAiLCAqcmVwYXRjaEJ1ZmZlci5jb2RlQmxvY2soKSwgIiB0byAi
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
aAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTIgQEAKICNkZWZpbmUg
Q2FsbExpbmtJbmZvX2gKIAogI2luY2x1ZGUgIkNhbGxFZGdlUHJvZmlsZS5oIgotI2luY2x1ZGUg
IkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKICNp
bmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiSklUV3JpdGVCYXJy
aWVyLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2lu
Y2x1ZGUgIlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJy
aWVyLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExp
bmtlZExpc3QuaD4KQEAgLTgyLDcgKzgyLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1Ymxp
YyBCYXNpY1Jhd1NlbgogICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlcjsKICAg
ICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwogICAgIFdyaXRlQmFycmllcjxK
U0Z1bmN0aW9uPiBsYXN0U2VlbkNhbGxlZTsKLSAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91
dGluZT4gc3R1YjsKKyAgICBSZWZQdHI8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+IHN0dWI7
CiAgICAgYm9vbCBpc0ZUTCA6IDE7CiAgICAgYm9vbCBoYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7
CiAgICAgYm9vbCBoYXNTZWVuQ2xvc3VyZSA6IDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUwLDUgKzUwLDI0IEBAIHZvaWQgQ2FsbFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkKICAgICBvdXQucHJpbnQoIkV4ZWN1dGFibGU6ICIsICpleGVjdXRhYmxlKCkpOwogfQogCitD
YWxsVmFyaWFudExpc3QgdmFyaWF0TGlzdFdpdGhWYXJpYW50KGNvbnN0IENhbGxWYXJpYW50TGlz
dCYgbGlzdCwgQ2FsbFZhcmlhbnQgdmFyaWFudFRvQWRkKQoreworICAgIEFTU0VSVCh2YXJpYW50
VG9BZGQpOworICAgIENhbGxWYXJpYW50TGlzdCByZXN1bHQ7CisgICAgZm9yIChDYWxsVmFyaWFu
dCB2YXJpYW50IDogbGlzdCkgeworICAgICAgICBBU1NFUlQodmFyaWFudCk7CisgICAgICAgIGlm
ICh2YXJpYW50ID09IHZhcmlhbnRUb0FkZCkKKyAgICAgICAgICAgIHZhcmlhbnRUb0FkZCA9IENh
bGxWYXJpYW50KCk7CisgICAgICAgIGVsc2UgaWYgKHZhcmlhbnQuZGVzcGVjaWZpZWRDbG9zdXJl
KCkgPT0gdmFyaWFudFRvQWRkLmRlc3BlY2lmaWVkQ2xvc3VyZSgpKSB7CisgICAgICAgICAgICB2
YXJpYW50ID0gdmFyaWFudC5kZXNwZWNpZmllZENsb3N1cmUoKTsKKyAgICAgICAgICAgIHZhcmlh
bnRUb0FkZCA9IENhbGxWYXJpYW50KCk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmFwcGVu
ZCh2YXJpYW50KTsKKyAgICB9CisgICAgaWYgKCEhdmFyaWFudFRvQWRkKQorICAgICAgICByZXN1
bHQuYXBwZW5kKHZhcmlhbnRUb0FkZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
VmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsVmFyaWFudC5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTczLDEzICsxNzMsMTcgQEAg
cHJpdmF0ZToKICAgICBKU0NlbGwqIG1fY2FsbGVlOwogfTsKIAorLy8gUmV0dXJucyBhIG5ldyB2
YXJpYW50IGxpc3QgYnkgYXR0ZW1wdGluZyB0byBlaXRoZXIgYXBwZW5kIHRoZSBnaXZlbiB2YXJp
YW50IG9yIG1lcmdlIGl0IHdpdGggb25lCisvLyBvZiB0aGUgdmFyaWFudHMgd2UgYWxyZWFkeSBo
YXZlIGJ5IGRlc3BlY2lmeWluZyBjbG9zdXJlcy4KK0NhbGxWYXJpYW50TGlzdCB2YXJpYW50TGlz
dFdpdGhWYXJpYW50KGNvbnN0IENhbGxWYXJpYW50TGlzdCYsIENhbGxWYXJpYW50KTsKKwogc3Ry
dWN0IENhbGxWYXJpYW50SGFzaCB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2Fs
bFZhcmlhbnQmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQogICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IENhbGxWYXJpYW50JiBhLCBjb25zdCBDYWxsVmFyaWFudCYgYikgeyByZXR1cm4g
YSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOwogfTsKIAotdHlwZWRlZiBWZWN0b3I8Q2FsbFZhcmlhbnQsIDE+IENhbGxW
YXJpYW50TGlzdDsKK3R5cGVkZWYgVmVjdG9yPENhbGxWYXJpYW50LCAyPiBDYWxsVmFyaWFudExp
c3Q7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEzICs3OSwxMyBAQCBz
dGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgaWYgKG1vZGUgPT0gREZH
TW9kZSkgewogICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwog
ICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7Ci0gICAg
ICAgIHZtLmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICB2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7CiAgICAg
ICAgIHZtLmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHZt
LmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dl
bmVyYXRvcik7CiAgICAgICAgIHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2
ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOwotICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDbG9zdXJl
Q2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOworICAgICAgICB2bS5nZXRDVElT
dHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsK
ICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtH
ZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJl
c2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc3Niw3ICs3NzYsNyBAQCBpbmxpbmUgY2hhciogdmlydHVhbEZvcigKICAgICByZXR1cm4gdmly
dHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBraW5kLCByZWdpc3RlcnMsIGNhbGxlZUFz
RnVuY3Rpb25DZWxsSWdub3JlZCk7CiB9CiAKLXN0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXpl
Q2xvc3VyZUNhbGwoCitzdGF0aWMgYm9vbCBhdHRlbXB0VG9PcHRpbWl6ZVBvbHltb3JwaGljQ2Fs
bCgKICAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSBy
ZWdpc3RlcnMsIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGwsCiAgICAgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8pCiB7CkBAIC03OTUsMjcgKzc5NSwyNCBAQCBzdGF0aWMgYm9vbCBhdHRl
bXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsCiAgICAgICAgICAgICAqZXhlY0NhbGxlZS0+Y2FsbGVy
RnJhbWUoKS0+Y29kZUJsb2NrKCktPnZtKCksIGNhbGxlZS0+ZXhlY3V0YWJsZSgpLAogICAgICAg
ICAgICAgQXJpdHlDaGVja05vdFJlcXVpcmVkLCByZWdpc3RlcnMpOwogICAgIAotICAgIENvZGVC
bG9jayogY29kZUJsb2NrOwotICAgIGlmIChjYWxsZWUtPmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVu
Y3Rpb24oKSkKLSAgICAgICAgY29kZUJsb2NrID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAgY29k
ZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNhbGxlZS0+ZXhlY3V0YWJsZSgp
KS0+Y29kZUJsb2NrRm9yQ2FsbCgpOworICAgIGlmICghY2FsbGVlLT5leGVjdXRhYmxlKCktPmlz
SG9zdEZ1bmN0aW9uKCkpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2FsbGVlLT5leGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tGb3JD
YWxsKCk7CiAgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwg
Y2FsbExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MgfHwgY2Fs
bExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncykKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgbGlua0Nsb3N1cmVDYWxs
KAorICAgIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAgIGV4ZWNDYWxsZWUsIGNhbGxMaW5r
SW5mbywgY29kZUJsb2NrLCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwgY29kZVB0ciwgcmVnaXN0ZXJz
KTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbykKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua1BvbHltb3Jw
aGljQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
KQogewogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGw7CiAgICAgY2hhciogcmVzdWx0
ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogCi0gICAg
aWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTm90UmVxdWlyZWQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCAqY2FsbExpbmtJbmZv
KSkKKyAgICBpZiAoIWF0dGVtcHRUb09wdGltaXplUG9seW1vcnBoaWNDYWxsKGV4ZWNDYWxsZWUs
IFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCAq
Y2FsbExpbmtJbmZvKSkKICAgICAgICAgbGlua1Nsb3dGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5r
SW5mbywgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogICAg
IAogICAgIHJldHVybiByZXN1bHQ7CkBAIC04MzEsNyArODI4LDcgQEAgY2hhciogSklUX09QRVJB
VElPTiBvcGVyYXRpb25WaXJ0dWFsQ29ucwogICAgIHJldHVybiB2aXJ0dWFsRm9yKGV4ZWNDYWxs
ZWUsIENvZGVGb3JDb25zdHJ1Y3QsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwog
fQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVz
ZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8pCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGxUaGF0
UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvKQogewogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNlbGw7CiAgICAgY2hhciog
cmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBDb2RlRm9yQ2FsbCwg
TXVzdFByZXNlcnZlUmVnaXN0ZXJzLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTc4NjkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI0NiwxMiArMjQ2LDEyIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbEdlbmUKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVy
aWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25DYWxsRXZhbChFeGVjU3RhdGUqLCBFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyop
IFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVD
YWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlu
a0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1
YWxDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqLCBDYWxsTGlu
a0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtD
b25zdHJ1Y3QoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0
ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwgQ2FsbExp
bmtJbmZvKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5r
UG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZv
KikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2Fs
bFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5B
TDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdFRoYXRQcmVz
ZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4
ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKQEAgLTM5MSwxMyArMzkxLDEz
IEBAIGlubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvblZpcnQKICAgICByZXR1cm4g
MDsKIH0KIAotaW5saW5lIFBfSklUT3BlcmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlua0Nsb3N1cmVD
YWxsRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCitpbmxpbmUgUF9KSVRP
cGVyYXRpb25fRUNsaSBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsRm9yKFJlZ2lzdGVyUHJl
c2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKICAg
ICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6Ci0gICAgICAgIHJldHVybiBv
cGVyYXRpb25MaW5rQ2xvc3VyZUNhbGw7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rUG9s
eW1vcnBoaWNDYWxsOwogICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgotICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAg
IHJldHVybiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CiAg
ICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitQb2x5bW9ycGhpY0NhbGxOb2RlOjp+UG9seW1v
cnBoaWNDYWxsTm9kZSgpCit7CisgICAgaWYgKGlzT25MaXN0KCkpCisgICAgICAgIHJlbW92ZSgp
OworfQorCitQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmsoUmVwYXRjaEJ1ZmZlciYgcmVwYXRj
aEJ1ZmZlcikKK3sKKyAgICBtX2NhbGxMaW5rSW5mby0+dW5saW5rKHJlcGF0Y2hCdWZmZXIpOwor
ICAgIAorICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICByZW1vdmUoKTsKK30KKworUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmU6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAorICAgIGNv
bnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZVJlZiwgVk0mIHZtLCBjb25zdCBKU0NlbGwq
IG93bmVyLCBDYWxsTGlua0luZm8mIGluZm8sCisgICAgY29uc3QgVmVjdG9yPFBvbHltb3JwaGlj
Q2FsbENhc2U+JiBjYXNlcykKKyAgICA6IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCB2bSkK
K3sKKyAgICBmb3IgKFBvbHltb3JwaGljQ2FsbENhc2UgY2FsbENhc2UgOiBjYXNlcykgeworICAg
ICAgICBtX3ZhcmlhbnRzLmFwcGVuZChjYWxsQ2FzZS52YXJpYW50KCkpOworICAgICAgICBpZiAo
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsQ2FzZS5jb2RlQmxvY2soKSkKKyAgICAgICAgICAg
IGNvZGVCbG9jay0+bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKG1fY2FsbE5vZGVzLmFkZCgm
aW5mbykpOworICAgIH0KK30KKworYm9vbCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6dmlz
aXRXZWFrKCkKK3sKKyAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7
CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodmFyaWFudC5yYXdDYWxsZWVDZWxsKCkpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVy
bmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFu
dCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWFyZWRSZWFkT25s
eVBvaW50ZXIodmFyaWFudC5yYXdDYWxsZWVDZWxsKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lX2gKKyNkZWZpbmUgUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmVfaAorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNv
ZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBQb2x5bW9ycGhpY0NhbGxOb2RlIDogQmFzaWNSYXdTZW50aW5lbE5v
ZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBvbHlt
b3JwaGljQ2FsbE5vZGUpOworcHVibGljOgorICAgIFBvbHltb3JwaGljQ2FsbE5vZGUoQ2FsbExp
bmtJbmZvKiBpbmZvKQorICAgICAgICA6IG1fY2FsbExpbmtJbmZvKGluZm8pCisgICAgeworICAg
IH0KKyAgICAKKyAgICB+UG9seW1vcnBoaWNDYWxsTm9kZSgpOworICAgIAorICAgIHZvaWQgdW5s
aW5rKFJlcGF0Y2hCdWZmZXImKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQ2FsbExpbmtJbmZvKiBt
X2NhbGxMaW5rSW5mbzsKK307CisKK2NsYXNzIFBvbHltb3JwaGljQ2FsbENhc2UgeworcHVibGlj
OgorICAgIFBvbHltb3JwaGljQ2FsbENhc2UoKQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxw
dHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQb2x5bW9ycGhpY0NhbGxDYXNlKENhbGxWYXJp
YW50IHZhcmlhbnQsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICA6IG1fdmFyaWFudCh2
YXJpYW50KQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICB7CisgICAgfQor
ICAgIAorICAgIENhbGxWYXJpYW50IHZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnQ7
IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2Nr
OyB9CisgICAgCitwcml2YXRlOgorICAgIENhbGxWYXJpYW50IG1fdmFyaWFudDsKKyAgICBDb2Rl
QmxvY2sqIG1fY29kZUJsb2NrOworfTsKKworY2xhc3MgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUgOiBwdWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKK3B1YmxpYzoKKyAgICBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZSgKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
JiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLAorICAgICAgICBDYWxsTGlua0luZm8mLCBjb25z
dCBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4mKTsKKyAgICAKKyAgICB2aXJ0dWFsIH5Qb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZSgpOworICAgIAorICAgIEV4ZWN1dGFibGVCYXNlKiBleGVj
dXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRhYmxlLmdldCgpOyB9CisgICAgY29uc3Qg
Q2FsbFZhcmlhbnRMaXN0JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0K
KyAgICAKKyAgICBib29sIHZpc2l0V2VhaygpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2
b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIENhbGxWYXJpYW50TGlzdCBtX3ZhcmlhbnRzOworICAgIEJhZzxQb2x5
bW9ycGhpY0NhbGxOb2RlPiBtX2NhbGxOb2RlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZp
c2lvbiAxNzg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjE4LDcgKzE2MTgsNyBAQCB2b2lkIGxpbmtGb3IoCiAgICAgICAg
IGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLT5jYWxsZXJGcmFtZSgpLCAm
Y2FsbExpbmtJbmZvKTsKICAgICAKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9u
LCB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvckZvcihyZWdpc3Rl
cnMpKS5jb2RlKCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1
bmtHZW5lcmF0b3JGb3IocmVnaXN0ZXJzKSkuY29kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKQEAgLTE2MzgsMTIgKzE2MzgsMTUgQEAgdm9pZCBsaW5rU2xvd0ZvcigKICAgICBs
aW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBraW5kLCByZWdpc3Rl
cnMpOwogfQogCi12b2lkIGxpbmtDbG9zdXJlQ2FsbCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgCi0g
ICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2Rl
UHRyLAotICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCit2b2lkIGxpbmtQ
b2x5bW9ycGhpY0NhbGwoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxM
aW5rSW5mbywgIENhbGxWYXJpYW50IG5ld1ZhcmlhbnQsCisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGNvZGVQdHIsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7Ci0gICAg
QVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7CisgICAgLy8gQ3VycmVudGx5LCB3ZSB3aWxsIG5l
dmVyIHNlZSBhIG5vbi1mdW5jdGlvbiB2YXJpYW50LCBzaW5jZSB0aGF0J3MgaG93IEpJVE9wZXJh
dGlvbnMuY3BwCisgICAgLy8gaGFuZGxlcyBpdC4gQWxzbywgd2Ugd291bGRuJ3QgYmUgYWJsZSB0
byBkbyBhbnl0aGluZyB3aXRoIG5vbi1mdW5jdGlvbiBjYWxsZWVzIGJlY2F1c2Ugd2UKKyAgICAv
LyBqdXN0IGRvbid0IGhhdmUgdGhhdCBmdW5jdGlvbmFsaXR5LCB5ZXQuIFRoYXQncyB3b3J0aCBm
aXhpbmcuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MDY4NQorICAgIFJFTEVBU0VfQVNTRVJUKG5ld1ZhcmlhbnQuZXhlY3V0YWJsZSgpKTsKICAgICAK
ICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNv
ZGVCbG9jaygpOwogICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKQEAgLTE2NjIs
NTAgKzE2NjUsMTEwIEBAIHZvaWQgbGlua0Nsb3N1cmVDYWxsKAogICAgICAgICBzdHViSml0LmFi
b3J0V2l0aFJlYXNvbihSZXBhdGNoSW5zYW5lQXJndW1lbnRDb3VudCk7CiAgICAgICAgIG9rQXJn
dW1lbnRDb3VudC5saW5rKCZzdHViSml0KTsKICAgICB9CisgICAgCisgICAgQ2FsbFZhcmlhbnRM
aXN0IGxpc3Q7CisgICAgaWYgKFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKiBzdHViID0gY2Fs
bExpbmtJbmZvLnN0dWIuZ2V0KCkpCisgICAgICAgIGxpc3QgPSBzdHViLT52YXJpYW50cygpOwor
ICAgIGVsc2UgaWYgKEpTRnVuY3Rpb24qIG9sZENhbGxlZSA9IGNhbGxMaW5rSW5mby5jYWxsZWUu
Z2V0KCkpCisgICAgICAgIGxpc3QgPSBDYWxsVmFyaWFudExpc3R7Q2FsbFZhcmlhbnQob2xkQ2Fs
bGVlKX07CisgICAgCisgICAgbGlzdCA9IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQobGlzdCwgbmV3
VmFyaWFudCk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIC8vIFdlIGNhbiBzYWZlbHkgY2xv
YmJlciBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgY2FsbGVlR1BSLiBXZSBjYW4ndCByZWx5IG9uIHRh
Z01hc2tSZWdpc3RlcgotICAgIC8vIGJlaW5nIHNldC4gU28gd2UgZG8gdGhpcyB0aGUgaGFyZCB3
YXkuCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgbGlua2VkIHRoZSBzbG93IHBhdGggdG8gdGhlIHZp
cnR1YWwgY2FsbCB0aHVuayBpZiB3ZSB3ZXJlIGFwcHJvYWNoaW5nIHRoZQorICAgIC8vIGxpbWl0
LgorICAgIEFTU0VSVChsaXN0LnNpemUoKSA8PSBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlz
dFNpemUpOworICAgIAorICAgIGJvb2wgaGF2ZUNsb3N1cmVDYWxsID0gZmFsc2U7CisgICAgZm9y
IChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkKKyAgICAgICAgaGF2ZUNsb3N1cmVDYWxsIHw9
IHZhcmlhbnQuaXNDbG9zdXJlQ2FsbCgpOworICAgIAogICAgIEdQUlJlZyBzY3JhdGNoID0gQXNz
ZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUik7Ci0gICAgc3R1YkppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIHNjcmF0Y2gpOwotICAg
IHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblpl
cm8sIGNhbGxlZUdQUiwgc2NyYXRjaCkpOworICAgIAorICAgIGlmIChoYXZlQ2xvc3VyZUNhbGwp
IHsKKyAgICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9uIGFuZCBzdGFzaCB0
aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNoLgorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
Ly8gV2UgY2FuIHNhZmVseSBjbG9iYmVyIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBjYWxsZWVHUFIu
IFdlIGNhbid0IHJlbHkgb24gdGFnTWFza1JlZ2lzdGVyCisgICAgICAgIC8vIGJlaW5nIHNldC4g
U28gd2UgZG8gdGhpcyB0aGUgaGFyZCB3YXkuCisgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ01hc2spLCBzY3JhdGNoKTsKKyAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6Tm9uWmVybywgY2Fs
bGVlR1BSLCBzY3JhdGNoKSk7CiAjZWxzZQotICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBj
aGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCisgICAgICAgIC8vIFdlIHdvdWxkIGhh
dmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCiAjZW5kaWYKICAg
ICAKLSAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgIHN0dWJKaXQuYnJhbmNoOCgKLSAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKLSAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwotICAg
IAotICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgc3R1YkppdC5icmFuY2hQdHIoCi0gICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICBzbG93UGF0aC5hcHBlbmQo
CisgICAgICAgICAgICBzdHViSml0LmJyYW5jaDgoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2Fs
bGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uVHlwZSkpKTsKKyAgICAKKyAgICAg
ICAgc3R1YkppdC5sb2FkUHRyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNh
bGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAotICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpKSk7CisgICAgICAgICAgICBz
Y3JhdGNoKTsKKyAgICB9CiAgICAgCi0gICAgc3R1YkppdC5sb2FkUHRyKAotICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hh
aW4oKSksCi0gICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBWZWN0b3I8UG9s
eW1vcnBoaWNDYWxsQ2FzZT4gY2FsbENhc2VzOwogICAgIAorICAgIENDYWxsSGVscGVyczo6SnVt
cCBza2lwVG9OZXh0OworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0IGNhbGw7CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDog
bGlzdCkgeworICAgICAgICBpZiAoc2tpcFRvTmV4dC5pc1NldCgpKQorICAgICAgICAgICAgc2tp
cFRvTmV4dC5saW5rKCZzdHViSml0KTsKKyAgICAgICAgCisgICAgICAgIC8vIE5ldyB2YXJpYW50
cyBzaG91bGQgaGF2ZSBKSVQgY29kZSBmb3IgY2FsbCBzaW5jZSB3ZSBhcmUgYWJvdXQgdG8gbWFr
ZSB0aGF0IGNhbGwgYW5kCisgICAgICAgIC8vIEpJVE9wZXJhdGlvbnMuY3BwIHNob3VsZCBoYXZl
IGVuc3VyZWQgdGhhdCB0aGUgSklUIGNvZGUgd2FzIHByZXNlbnQuIE9sZCB2YXJpYW50cyBzaG91
bGQKKyAgICAgICAgLy8gaGF2ZSBKSVQgY29kZSBmb3IgY2FsbCBzaW5jZSB0aGUgaW5saW5lIGNh
Y2hlIHdvdWxkIGhhdmUgYmVlbiBjbGVhcmVkIGlmIHRoZWlyIGNvZGUgd2FzCisgICAgICAgIC8v
IGRlc3Ryb3llZC4KKyAgICAgICAgQVNTRVJUKHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5oYXNKSVRD
b2RlRm9yQ2FsbCgpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPQor
ICAgICAgICAgICAgdmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxs
KCktPmFkZHJlc3NGb3JDYWxsKAorICAgICAgICAgICAgICAgICpleGVjQ2FsbGVlLT5jYWxsZXJG
cmFtZSgpLT5jb2RlQmxvY2soKS0+dm0oKSwgY2FsbGVlLT5leGVjdXRhYmxlKCksCisgICAgICAg
ICAgICAgICAgQXJpdHlDaGVja05vdFJlcXVpcmVkLCByZWdpc3RlcnMpOworICAgICAgICAKKyAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgICAgIGlmICh2YXJpYW50LmV4ZWN1dGFi
bGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgICAgIGNvZGVCbG9jayA9IG51bGxwdHI7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGNhbGxlZS0+ZXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwor
ICAgICAgICAgICAgQVNTRVJUKGV4ZWNDYWxsZWUtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
KCkgPj0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgJiYg
Y2FsbExpbmtJbmZvLmNhbGxUeXBlICE9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MgJiYgY2Fs
bExpbmtJbmZvLmNhbGxUeXBlICE9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncyk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2YXJpYW50LmlzQ2xvc3VyZUNhbGwoKSkg
eworICAgICAgICAgICAgc2tpcFRvTmV4dCA9CisgICAgICAgICAgICAgICAgc3R1YkppdC5icmFu
Y2hQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0
Y2gsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2YXJp
YW50LmV4ZWN1dGFibGUoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2tpcFRv
TmV4dCA9CisgICAgICAgICAgICAgICAgc3R1YkppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGNhbGxlZUdQUiwKKyAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZhcmlhbnQuZnVuY3Rpb24oKSkpOwor
ICAgICAgICB9CisgICAgCisgICAgICAgIHN0dWJKaXQubG9hZFB0cigKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVD
aGFpbigpKSwKKyAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAg
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdHViSml0LnN0b3JlNjQoCi0gICAgICAgIEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIG9mZnNldFRvRnJhbWUpKTsK
KyAgICAgICAgc3R1YkppdC5zdG9yZTY0KAorICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdp
c3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIG9mZnNldFRvRnJhbWUpKTsKICNlbHNlCi0g
ICAgc3R1YkppdC5zdG9yZVB0cigKLSAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCi0g
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3Rh
Y2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSArIG9mZnNldFRvRnJhbWUpKTsKLSAgICBzdHViSml0LnN0b3JlMzIo
Ci0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAot
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBKU1N0
YWNrOjpTY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSArIG9mZnNldFRvRnJhbWUpKTsKKyAgICAgICAgc3R1YkppdC5zdG9yZVB0
cigKKyAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAorICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwg
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVD
aGFpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpICsgb2Zmc2V0VG9GcmFtZSkpOworICAgICAgICBzdHViSml0LnN0b3JlMzIoCisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpT
U3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpICsgb2Zmc2V0VG9GcmFtZSkpOwogI2VuZGlmCi0gICAgCi0gICAgQXNz
ZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7Ci0gICAgQXNzZW1i
bHlIZWxwZXJzOjpKdW1wIGRvbmUgPSBzdHViSml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAg
IGNhbGwuYXBwZW5kKHN0dWJKaXQubmVhckNhbGwoKSk7CisgICAgICAgIGRvbmUuYXBwZW5kKHN0
dWJKaXQuanVtcCgpKTsKKyAgICB9CiAgICAgCiAgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7
CisgICAgc2tpcFRvTmV4dC5saW5rKCZzdHViSml0KTsKICAgICBzdHViSml0Lm1vdmUoY2FsbGVl
R1BSLCBHUFJJbmZvOjpyZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdHViSml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUklu
Zm86OnJlZ1QxKTsKQEAgLTE3MTUsNyArMTc3OCw3IEBAIHZvaWQgbGlua0Nsb3N1cmVDYWxsKAog
ICAgIAogICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5m
bzo6cmVnVDQpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93ID0gc3R1YkppdC5qdW1w
KCk7Ci0gICAgCisgICAgICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHVi
Sml0LCBjYWxsZXJDb2RlQmxvY2spOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbCwg
RnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAi
Q2FsbFZhcmlhbnQuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtNDEsNyArNDIsNyBAQCB2b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiwg
SlNWYWx1CiB2b2lkIHJlcGF0Y2hJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVudGlm
aWVyJiwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKIHZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sq
LCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKTsKIHZvaWQgbGlua1Nsb3dGb3Io
RXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Nb2RlKTsKLXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENh
bGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwordm9pZCBsaW5rUG9seW1vcnBoaWND
YWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIENhbGxWYXJpYW50LCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7CiB2b2lkIHJl
c2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVz
ZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXNl
dEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMTc4Njky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzcsMjcgKzEzNywyNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a0NvbnN0cnVjdFRoYXRQCiAgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29k
ZUZvckNvbnN0cnVjdCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKIH0KIAotc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcigKK3N0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbEZvclRodW5rR2VuZXJh
dG9yKAogICAgIFZNKiB2bSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsK
ICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZt
LCBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IocmVnaXN0ZXJzKSk7CisgICAgc2xvd1BhdGhG
b3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbEZvcihyZWdpc3RlcnMpKTsK
ICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2xvc3Vy
ZSBjYWxsICVzIHNsb3cgcGF0aCB0aHVuayIsIHJlZ2lzdGVycyA9PSBNdXN0UHJlc2VydmVSZWdp
c3RlcnMgPyAiIHRoYXQgcHJlc2VydmVzIHJlZ2lzdGVycyIgOiAiIikpOworICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgcG9seW1vcnBoaWMgY2FsbCAlcyBzbG93
IHBhdGggdGh1bmsiLCByZWdpc3RlcnMgPT0gTXVzdFByZXNlcnZlUmVnaXN0ZXJzID8gIiB0aGF0
IHByZXNlcnZlcyByZWdpc3RlcnMiIDogIiIpKTsKIH0KIAogLy8gRm9yIGNsb3N1cmUgb3B0aW1p
emF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUgdXNpbmcgY2xv
c3VyZXMgZm9yCiAvLyBvYmplY3QgY29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdvaW5nIHRvIGxv
c2UgYmlnIHRpbWUgYW55d2F5LgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2Fs
bFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1v
cnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rQ2xvc3Vy
ZUNhbGxGb3JUaHVua0dlbmVyYXRvcih2bSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJl
ZCk7CisgICAgcmV0dXJuIGxpbmtQb2x5bW9ycGhpY0NhbGxGb3JUaHVua0dlbmVyYXRvcih2bSwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZNKiB2
bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZl
c1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtDbG9zdXJlQ2Fs
bEZvclRodW5rR2VuZXJhdG9yKHZtLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworICAgIHJldHVy
biBsaW5rUG9seW1vcnBoaWNDYWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIE11c3RQcmVzZXJ2ZVJl
Z2lzdGVycyk7CiB9CiAKIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclRo
dW5rR2VuZXJhdG9yKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxNiArNjUsMTYgQEAgaW5s
aW5lIFRodW5rR2VuZXJhdG9yIGxpbmtUaHVua0dlbmVyYXRvcgogICAgIHJldHVybiAwOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0q
KTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVn
c1RodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3Jw
aGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1Bv
bHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAotaW5s
aW5lIFRodW5rR2VuZXJhdG9yIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9yKFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCitpbmxpbmUgVGh1bmtHZW5lcmF0b3IgbGlu
a1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9k
ZSByZWdpc3RlcnMpCiB7CiAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKICAgICBjYXNlIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6Ci0gICAgICAgIHJldHVybiBsaW5rQ2xvc3VyZUNh
bGxUaHVua0dlbmVyYXRvcjsKKyAgICAgICAgcmV0dXJuIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVu
a0dlbmVyYXRvcjsKICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKLSAgICAgICAgcmV0
dXJuIGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7CisgICAg
ICAgIHJldHVybiBsaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVy
YXRvcjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlz
aW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTcwLDYgKzE3MCw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0
aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnREZXZpcnR1YWxpemF0aW9u
LCB0cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nLCB0
cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5bW9ycGhpY0NhbGxJbmxpbmluZywgdHJ1ZSkg
XAorICAgIHYoYm9vbCwgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplLCAzKSBcCiAg
ICAgdihib29sLCBjYWxsU3RhdHVzU2hvdWxkVXNlQ2FsbEVkZ2VQcm9maWxlLCB0cnVlKSBcCiAg
ICAgdihib29sLCBjYWxsRWRnZVByb2ZpbGVSZWFsbHlQcm9jZXNzZXNMb2csIHRydWUpIFwKICAg
ICB2KGJvb2wsIGJhc2VsaW5lRG9lc0NhbGxFZGdlUHJvZmlsaW5nLCBmYWxzZSkgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245010</attachid>
            <date>2015-01-20 12:33:42 -0800</date>
            <delta_ts>2015-01-20 13:01:17 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>47303</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
Y3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCB2b2lkIENh
bGxMaW5rSW5mbzo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZmCiB7CiAgICAgaWYgKGlzTGlua2VkKCkp
IHsKICAgICAgICAgaWYgKHN0dWIpIHsKLSAgICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQo
c3R1Yi0+ZXhlY3V0YWJsZSgpKSkgeworICAgICAgICAgICAgaWYgKCFzdHViLT52aXNpdFdlYWso
KSkgewogICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICJDbGVhcmlu
ZyBjbG9zdXJlIGNhbGwgZnJvbSAiLCAqcmVwYXRjaEJ1ZmZlci5jb2RlQmxvY2soKSwgIiB0byAi
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
aAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMiArMjcsMTIgQEAKICNkZWZpbmUg
Q2FsbExpbmtJbmZvX2gKIAogI2luY2x1ZGUgIkNhbGxFZGdlUHJvZmlsZS5oIgotI2luY2x1ZGUg
IkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKICNp
bmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiSklUV3JpdGVCYXJy
aWVyLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2lu
Y2x1ZGUgIlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJy
aWVyLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExp
bmtlZExpc3QuaD4KQEAgLTgyLDcgKzgyLDcgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1Ymxp
YyBCYXNpY1Jhd1NlbgogICAgIENvZGVMb2NhdGlvbk5lYXJDYWxsIGhvdFBhdGhPdGhlcjsKICAg
ICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwogICAgIFdyaXRlQmFycmllcjxK
U0Z1bmN0aW9uPiBsYXN0U2VlbkNhbGxlZTsKLSAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91
dGluZT4gc3R1YjsKKyAgICBSZWZQdHI8UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU+IHN0dWI7
CiAgICAgYm9vbCBpc0ZUTCA6IDE7CiAgICAgYm9vbCBoYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7
CiAgICAgYm9vbCBoYXNTZWVuQ2xvc3VyZSA6IDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE3ODY5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgQ2FsbExpbmtTdGF0dXM6OkNhbGxMaW5rU3Rh
dHVzKEpTVmFsdWUgdgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIG1fZWRnZXMu
YXBwZW5kKENhbGxFZGdlKENhbGxWYXJpYW50KHZhbHVlLmFzQ2VsbCgpKSwgMSkpOworICAgIG1f
dmFyaWFudHMuYXBwZW5kKENhbGxWYXJpYW50KHZhbHVlLmFzQ2VsbCgpKSk7CiB9CiAKIENhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJl
bnRKSVRMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KQpAQCAtMTI4LDIzICsxMjgsNiBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUZvCiAgICAgLy8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0
IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNwZW5z
YWJsZS4KICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgaWYgKE9w
dGlvbnM6OmNhbGxTdGF0dXNTaG91bGRVc2VDYWxsRWRnZVByb2ZpbGUoKSkgewotICAgICAgICAv
LyBBbHdheXMgdHJ1c3QgdGhlIGNhbGwgZWRnZSBwcm9maWxlIG92ZXIgYW55dGhpbmcgZWxzZSBz
aW5jZSB0aGlzIGhhcyBwcmVjaXNlIGNvdW50cy4KLSAgICAgICAgLy8gSXQgY2FuIG1ha2UgdGhl
IGJlc3QgcG9zc2libGUgZGVjaXNpb24gYmVjYXVzZSBpdCBuZXZlciAiZm9yZ2V0cyIgd2hhdCBo
YXBwZW5lZCBmb3IgYW55Ci0gICAgICAgIC8vIGNhbGwsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBm
YWRpbmcgb3V0IHRoZSBjb3VudHMgb2Ygb2xkIGNhbGxzIChmb3IgZXhhbXBsZSBpZiB0aGUKLSAg
ICAgICAgLy8gY291bnRlciB0eXBlIGlzIDE2LWJpdCB0aGVuIGNhbGxzIHRoYXQgaGFwcGVuZWQg
bW9yZSB0aGFuIDJeMTYgY2FsbHMgYWdvIGFyZSBnaXZlbiBoYWxmCi0gICAgICAgIC8vIHdlaWdo
dCwgYW5kIHRoaXMgY29tcG91bmRzIGZvciBldmVyeSAyXjE1IFtzaWNdIGNhbGxzIGFmdGVyIHRo
YXQpLiBUaGUgY29tYmluYXRpb24gb2YKLSAgICAgICAgLy8gaGlnaCBmaWRlbGl0eSBmb3IgcmVj
ZW50IGNhbGxzIGFuZCBmYWRpbmcgZm9yIG9sZGVyIGNhbGxzIG1ha2VzIHRoaXMgdGhlIG1vc3Qg
dXNlZnVsCi0gICAgICAgIC8vIG1lY2hhbWlzbSBvZiBjaG9vc2luZyBob3cgdG8gb3B0aW1pemUg
ZnV0dXJlIGNhbGxzLgotICAgICAgICBDYWxsRWRnZVByb2ZpbGUqIGVkZ2VQcm9maWxlID0gY2Fs
bExpbmtJbmZvLmNhbGxFZGdlUHJvZmlsZS5nZXQoKTsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZl
bmNlKCk7Ci0gICAgICAgIGlmIChlZGdlUHJvZmlsZSkgewotICAgICAgICAgICAgQ2FsbExpbmtT
dGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZyb21DYWxsRWRnZVByb2ZpbGUoZWRnZVByb2ZpbGUpOwot
ICAgICAgICAgICAgaWYgKCEhcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgcmV0dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJ
bmZvKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKIH0KIApAQCAtMTY3LDggKzE1MCwxMSBAQCBDYWxs
TGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyCiAgICAgaWYgKGNhbGxMaW5rSW5m
by5zbG93UGF0aENvdW50ID49IE9wdGlvbnM6OmNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50
KCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCi0gICAgaWYgKENsb3N1
cmVDYWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8uc3R1Yi5nZXQoKSkKLSAgICAg
ICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKHN0dWItPmV4ZWN1dGFibGUoKSk7CisgICAgaWYgKFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKiBzdHViID0gY2FsbExpbmtJbmZvLnN0dWIuZ2V0KCkp
IHsKKyAgICAgICAgQ2FsbExpbmtTdGF0dXMgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YXJp
YW50cyA9IHN0dWItPnZhcmlhbnRzKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQog
ICAgIAogICAgIEpTRnVuY3Rpb24qIHRhcmdldCA9IGNhbGxMaW5rSW5mby5sYXN0U2VlbkNhbGxl
ZS5nZXQoKTsKICAgICBpZiAoIXRhcmdldCkKQEAgLTE4MCwzNCArMTY2LDYgQEAgQ2FsbExpbmtT
dGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcgogICAgIHJldHVybiBDYWxsTGlua1N0YXR1
cyh0YXJnZXQpOwogfQogCi1DYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZy
b21DYWxsRWRnZVByb2ZpbGUoQ2FsbEVkZ2VQcm9maWxlKiBlZGdlUHJvZmlsZSkKLXsKLSAgICAv
LyBJbiBjYXNlcyB3aGVyZSB0aGUgY2FsbCBlZGdlIHByb2ZpbGUgc2F3IG5vdGhpbmcsIHVzZSB0
aGUgQ2FsbExpbmtJbmZvIGluc3RlYWQuCi0gICAgaWYgKCFlZGdlUHJvZmlsZS0+dG90YWxDYWxs
cygpKQotICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsKLSAgICAKLSAgICAvLyBUbyBk
byBhbnl0aGluZyBtZWFuaW5nZnVsLCB3ZSByZXF1aXJlIHRoYXQgdGhlIG1ham9yaXR5IG9mIGNh
bGxzIGFyZSB0byBzb21ldGhpbmcgd2UKLSAgICAvLyBrbm93IGhvdyB0byBoYW5kbGUuCi0gICAg
dW5zaWduZWQgbnVtQ2FsbHNUb0tub3duID0gZWRnZVByb2ZpbGUtPm51bUNhbGxzVG9Lbm93bkNl
bGxzKCk7Ci0gICAgdW5zaWduZWQgbnVtQ2FsbHNUb1Vua25vd24gPSBlZGdlUHJvZmlsZS0+bnVt
Q2FsbHNUb05vdENlbGwoKSArIGVkZ2VQcm9maWxlLT5udW1DYWxsc1RvVW5rbm93bkNlbGwoKTsK
LSAgICAKLSAgICAvLyBXZSByZXF1aXJlIHRoYXQgdGhlIG1ham9yaXR5IG9mIGNhbGxzIHdlcmUg
dG8gc29tZXRoaW5nIHRoYXQgd2UgY291bGQgcG9zc2libHkgaW5saW5lLgotICAgIGlmIChudW1D
YWxsc1RvS25vd24gPD0gbnVtQ2FsbHNUb1Vua25vd24pCi0gICAgICAgIHJldHVybiB0YWtlc1Ns
b3dQYXRoKCk7Ci0gICAgCi0gICAgLy8gV2UgcmVxdWlyZSB0aGF0IHRoZSBudW1iZXIgb2Ygc3Vj
aCBjYWxscyBpcyBncmVhdGVyIHRoYW4gc29tZSBtaW5pbWFsIHRocmVzaG9sZCwgc28gdGhhdCB3
ZQotICAgIC8vIGF2b2lkIGlubGluaW5nIGNvbXBsZXRlbHkgY29sZCBjYWxscy4KLSAgICBpZiAo
bnVtQ2FsbHNUb0tub3duIDwgT3B0aW9uczo6ZnJlcXVlbnRDYWxsVGhyZXNob2xkKCkpCi0gICAg
ICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7Ci0gICAgCi0gICAgQ2FsbExpbmtTdGF0dXMgcmVz
dWx0OwotICAgIHJlc3VsdC5tX2VkZ2VzID0gZWRnZVByb2ZpbGUtPmNhbGxFZGdlcygpOwotICAg
IHJlc3VsdC5tX2NvdWxkVGFrZVNsb3dQYXRoID0gISFudW1DYWxsc1RvVW5rbm93bjsKLSAgICBy
ZXN1bHQubV9jYW5UcnVzdENvdW50cyA9IHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLAogICAgIEV4aXRTaXRlRGF0YSBleGl0U2l0ZURh
dGEpCkBAIC0yODEsOCArMjM5LDggQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVGbwogCiBib29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxsKCkgY29uc3QKIHsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2VkZ2VzLnNpemUoKTsgaS0tOykgewotICAgICAgICBp
ZiAobV9lZGdlc1tpXS5jYWxsZWUoKS5pc0Nsb3N1cmVDYWxsKCkpCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKG1fdmFyaWFudHNb
aV0uaXNDbG9zdXJlQ2FsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKQEAgLTI5MCwxOCArMjQ4LDcgQEAgYm9vbCBDYWxsTGlua1N0YXR1czo6
aXNDbG9zdXJlQ2FsbCgpIGNvbgogCiB2b2lkIENhbGxMaW5rU3RhdHVzOjptYWtlQ2xvc3VyZUNh
bGwoKQogewotICAgIEFTU0VSVCghbV9pc1Byb3ZlZCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
bV9lZGdlcy5zaXplKCk7IGktLTspCi0gICAgICAgIG1fZWRnZXNbaV0gPSBtX2VkZ2VzW2ldLmRl
c3BlY2lmaWVkQ2xvc3VyZSgpOwotICAgIAotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0g
ICAgICAgIC8vIERvaW5nIHRoaXMgc2hvdWxkIG5vdCBoYXZlIGNyZWF0ZWQgZHVwbGljYXRlcywg
YmVjYXVzZSB0aGUgQ2FsbEVkZ2VQcm9maWxlCi0gICAgICAgIC8vIHNob3VsZCBkZXNwZWNpZnkg
Y2xvc3VyZXMgaWYgZG9pbmcgc28gd291bGQgcmVkdWNlIHRoZSBudW1iZXIgb2Yga25vd24gY2Fs
bGVlcy4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZWRnZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgbV9lZGdlcy5z
aXplKCk7ICsraikKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9lZGdlc1tpXS5jYWxsZWUoKSAh
PSBtX2VkZ2VzW2pdLmNhbGxlZSgpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBtX3ZhcmlhbnRz
ID0gZGVzcGVjaWZpZWRWYXJpYW50TGlzdChtX3ZhcmlhbnRzKTsKIH0KIAogdm9pZCBDYWxsTGlu
a1N0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtMzE5LDcgKzI2Niw3IEBA
IHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICBpZiAobV9jb3Vs
ZFRha2VTbG93UGF0aCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiQ291bGQgVGFrZSBTbG93
IFBhdGgiKTsKICAgICAKLSAgICBvdXQucHJpbnQobGlzdER1bXAobV9lZGdlcykpOworICAgIG91
dC5wcmludChsaXN0RHVtcChtX3ZhcmlhbnRzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVz
LmgJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5l
IENhbGxMaW5rU3RhdHVzX2gKIAogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1ZGUg
IkNhbGxWYXJpYW50LmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNvZGVT
cGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgpAQCAt
NDgsNyArNDksNiBAQCBwdWJsaWM6CiAgICAgQ2FsbExpbmtTdGF0dXMoKQogICAgICAgICA6IG1f
Y291bGRUYWtlU2xvd1BhdGgoZmFsc2UpCiAgICAgICAgICwgbV9pc1Byb3ZlZChmYWxzZSkKLSAg
ICAgICAgLCBtX2NhblRydXN0Q291bnRzKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCkBAIC02
MiwxMCArNjIsOSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ2FsbExpbmtTdGF0dXMoSlNWYWx1
ZSk7CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0dXMoQ2FsbFZhcmlhbnQgdmFyaWFudCkKLSAgICAg
ICAgOiBtX2VkZ2VzKDEsIENhbGxFZGdlKHZhcmlhbnQsIDEpKQorICAgICAgICA6IG1fdmFyaWFu
dHMoMSwgdmFyaWFudCkKICAgICAgICAgLCBtX2NvdWxkVGFrZVNsb3dQYXRoKGZhbHNlKQogICAg
ICAgICAsIG1faXNQcm92ZWQoZmFsc2UpCi0gICAgICAgICwgbV9jYW5UcnVzdENvdW50cyhmYWxz
ZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtMTA5LDE5ICsxMDgsMTggQEAgcHVibGljOgogICAg
IHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxvY2sqLCBD
b2RlT3JpZ2luLCBjb25zdCBDYWxsTGlua0luZm9NYXAmLCBjb25zdCBDb250ZXh0TWFwJik7CiAg
ICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICFtX2VkZ2VzLmlzRW1wdHkoKSB8
fCBtX2NvdWxkVGFrZVNsb3dQYXRoOyB9CisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJu
ICFtX3ZhcmlhbnRzLmlzRW1wdHkoKSB8fCBtX2NvdWxkVGFrZVNsb3dQYXRoOyB9CiAgICAgCiAg
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIAogICAg
IGJvb2wgY291bGRUYWtlU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX2NvdWxkVGFrZVNsb3dQ
YXRoOyB9CiAgICAgCi0gICAgQ2FsbEVkZ2VMaXN0IGVkZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9l
ZGdlczsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VzLnNpemUo
KTsgfQotICAgIENhbGxFZGdlIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZXNb
aV07IH0KLSAgICBDYWxsRWRnZSBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJu
IGF0KGkpOyB9CisgICAgQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4g
bV92YXJpYW50czsgfQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Zhcmlh
bnRzLnNpemUoKTsgfQorICAgIENhbGxWYXJpYW50IGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0
dXJuIG1fdmFyaWFudHNbaV07IH0KKyAgICBDYWxsVmFyaWFudCBvcGVyYXRvcltdKHVuc2lnbmVk
IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgYm9vbCBpc1Byb3ZlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNQcm92ZWQ7IH0KLSAgICBib29sIGNhbk9wdGltaXplKCkgY29uc3QgeyByZXR1
cm4gIW1fZWRnZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBjYW5UcnVzdENvdW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fY2FuVHJ1c3RDb3VudHM7IH0KKyAgICBib29sIGNhbk9wdGltaXplKCkgY29u
c3QgeyByZXR1cm4gIW1fdmFyaWFudHMuaXNFbXB0eSgpOyB9CiAgICAgCiAgICAgYm9vbCBpc0Ns
b3N1cmVDYWxsKCkgY29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xv
c3VyZSBjYWxsLgogICAgIApAQCAtMTM3LDEwICsxMzUsOSBAQCBwcml2YXRlOgogICAgICAgICBj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ2FsbExpbmtJbmZvJik7CiAjZW5kaWYKICAgICAK
LSAgICBDYWxsRWRnZUxpc3QgbV9lZGdlczsKKyAgICBDYWxsVmFyaWFudExpc3QgbV92YXJpYW50
czsKICAgICBib29sIG1fY291bGRUYWtlU2xvd1BhdGg7CiAgICAgYm9vbCBtX2lzUHJvdmVkOwot
ICAgIGJvb2wgbV9jYW5UcnVzdENvdW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuY3BwCShy
ZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZh
cmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw1ICs1MCwzMiBAQCB2b2lkIENhbGxWYXJpYW50
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgb3V0LnByaW50KCJFeGVjdXRhYmxlOiAiLCAq
ZXhlY3V0YWJsZSgpKTsKIH0KIAorQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRMaXN0V2l0aFZhcmlh
bnQoY29uc3QgQ2FsbFZhcmlhbnRMaXN0JiBsaXN0LCBDYWxsVmFyaWFudCB2YXJpYW50VG9BZGQp
Cit7CisgICAgQVNTRVJUKHZhcmlhbnRUb0FkZCk7CisgICAgQ2FsbFZhcmlhbnRMaXN0IHJlc3Vs
dDsKKyAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KSB7CisgICAgICAgIEFTU0VS
VCh2YXJpYW50KTsKKyAgICAgICAgaWYgKHZhcmlhbnQgPT0gdmFyaWFudFRvQWRkKQorICAgICAg
ICAgICAgdmFyaWFudFRvQWRkID0gQ2FsbFZhcmlhbnQoKTsKKyAgICAgICAgZWxzZSBpZiAodmFy
aWFudC5kZXNwZWNpZmllZENsb3N1cmUoKSA9PSB2YXJpYW50VG9BZGQuZGVzcGVjaWZpZWRDbG9z
dXJlKCkpIHsKKyAgICAgICAgICAgIHZhcmlhbnQgPSB2YXJpYW50LmRlc3BlY2lmaWVkQ2xvc3Vy
ZSgpOworICAgICAgICAgICAgdmFyaWFudFRvQWRkID0gQ2FsbFZhcmlhbnQoKTsKKyAgICAgICAg
fQorICAgICAgICByZXN1bHQuYXBwZW5kKHZhcmlhbnQpOworICAgIH0KKyAgICBpZiAoISF2YXJp
YW50VG9BZGQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQodmFyaWFudFRvQWRkKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitDYWxsVmFyaWFudExpc3QgZGVzcGVjaWZpZWRWYXJpYW50TGlzdChj
b25zdCBDYWxsVmFyaWFudExpc3QmIGxpc3QpCit7CisgICAgQ2FsbFZhcmlhbnRMaXN0IHJlc3Vs
dDsKKyAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KQorICAgICAgICByZXN1bHQg
PSB2YXJpYW50TGlzdFdpdGhWYXJpYW50KHJlc3VsdCwgdmFyaWFudC5kZXNwZWNpZmllZENsb3N1
cmUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5oCShyZXZp
c2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlh
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTczLDEzICsxNzMsMTkgQEAgcHJpdmF0ZToKICAgICBKU0Nl
bGwqIG1fY2FsbGVlOwogfTsKIAorLy8gUmV0dXJucyBhIG5ldyB2YXJpYW50IGxpc3QgYnkgYXR0
ZW1wdGluZyB0byBlaXRoZXIgYXBwZW5kIHRoZSBnaXZlbiB2YXJpYW50IG9yIG1lcmdlIGl0IHdp
dGggb25lCisvLyBvZiB0aGUgdmFyaWFudHMgd2UgYWxyZWFkeSBoYXZlIGJ5IGRlc3BlY2lmeWlu
ZyBjbG9zdXJlcy4KK0NhbGxWYXJpYW50TGlzdCB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGNvbnN0
IENhbGxWYXJpYW50TGlzdCYsIENhbGxWYXJpYW50KTsKKworQ2FsbFZhcmlhbnRMaXN0IGRlc3Bl
Y2lmaWVkVmFyaWFudExpc3QoY29uc3QgQ2FsbFZhcmlhbnRMaXN0Jik7CisKIHN0cnVjdCBDYWxs
VmFyaWFudEhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENhbGxWYXJpYW50
JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBDYWxsVmFyaWFudCYgYSwgY29uc3QgQ2FsbFZhcmlhbnQmIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
dHJ1ZTsKIH07CiAKLXR5cGVkZWYgVmVjdG9yPENhbGxWYXJpYW50LCAxPiBDYWxsVmFyaWFudExp
c3Q7Cit0eXBlZGVmIFZlY3RvcjxDYWxsVmFyaWFudCwgMj4gQ2FsbFZhcmlhbnRMaXN0OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxMCwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0yMTc4LDYgKzIxNzgsOCBAQCBDb2RlQmxvY2s6On5Db2RlQmxv
Y2soKQogICAgIC8vIGRlc3RydWN0b3Igd2lsbCB0cnkgdG8gcmVtb3ZlIG5vZGVzIGZyb20gb3Vy
IChubyBsb25nZXIgdmFsaWQpIGxpbmtlZCBsaXN0LgogICAgIHdoaWxlIChtX2luY29taW5nQ2Fs
bHMuYmVnaW4oKSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCkpCiAgICAgICAgIG1faW5jb21pbmdD
YWxscy5iZWdpbigpLT5yZW1vdmUoKTsKKyAgICB3aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGlj
Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKKyAgICAg
ICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+cmVtb3ZlKCk7CiAgICAgCiAg
ICAgLy8gTm90ZSB0aGF0IG91ciBvdXRnb2luZyBjYWxscyB3aWxsIGJlIHJlbW92ZWQgZnJvbSBv
dGhlciBDb2RlQmxvY2tzJwogICAgIC8vIG1faW5jb21pbmdDYWxscyBsaW5rZWQgbGlzdHMgdGhy
b3VnaCB0aGUgZXhlY3V0aW9uIG9mIHRoZSB+Q2FsbExpbmtJbmZvCkBAIC0zMDQ0LDYgKzMwNDYs
MTIgQEAgdm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YQogICAgIG5vdGlj
ZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7CiAgICAgbV9pbmNvbWluZ0NhbGxzLnB1c2goaW5j
b21pbmcpOwogfQorCit2b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxs
KEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqIGluY29taW5nKQor
eworICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFtZSk7CisgICAgbV9pbmNvbWluZ1Bv
bHltb3JwaGljQ2FsbHMucHVzaChpbmNvbWluZyk7Cit9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IAogdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQpAQCAtMzA1MSwxMSArMzA1
OSwxMyBAQCB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygpCiAgICAgd2hpbGUg
KG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0xMSW50Q2FsbHMuZW5k
KCkpCiAgICAgICAgIG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCktPnVubGluaygpOwogI2lm
IEVOQUJMRShKSVQpCi0gICAgaWYgKG1faW5jb21pbmdDYWxscy5pc0VtcHR5KCkpCisgICAgaWYg
KG1faW5jb21pbmdDYWxscy5pc0VtcHR5KCkgfHwgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKHRoaXMpOwogICAgIHdoaWxlIChtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29t
aW5nQ2FsbHMuZW5kKCkpCiAgICAgICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmso
cmVwYXRjaEJ1ZmZlcik7CisgICAgd2hpbGUgKG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJl
Z2luKCkgIT0gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuZW5kKCkpCisgICAgICAgIG1faW5j
b21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnVubGluayhyZXBhdGNoQnVmZmVyKTsKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNzg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOSwxMSArMjI5
LDcgQEAgcHVibGljOgogICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKICAgICAgICAgCiAgICAgdm9p
ZCBsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyop
OwotICAgICAgICAKLSAgICBib29sIGlzSW5jb21pbmdDYWxsQWxyZWFkeUxpbmtlZChDYWxsTGlu
a0luZm8qIGluY29taW5nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5jb21pbmdDYWxscy5p
c09uTGlzdChpbmNvbWluZyk7Ci0gICAgfQorICAgIHZvaWQgbGlua0luY29taW5nUG9seW1vcnBo
aWNDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqKTsKICNl
bmRpZiAvLyBFTkFCTEUoSklUKQogCiAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0
ZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZvKik7CkBAIC0xMDc3LDYgKzEwNzMsNyBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKICAgICBCYWc8
Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PENh
bGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWlu
Z0NhbGxzOworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNp
Y1Jhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3Jw
aGljQ2FsbHM7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+
IG1faml0Q29kZU1hcDsKICNpZiBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzg2OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA3Niw3ICsxMDc2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlQ2FsbCgKICAgICAKICNpZiBFTkFCTEUoRlRMX05BVElWRV9DQUxMX0lOTElOSU5HKQogICAg
IGlmIChpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSAmJiBPcHRpb25zOjpvcHRpbWl6ZU5hdGl2
ZUNhbGxzKCkgJiYgY2FsbExpbmtTdGF0dXMuc2l6ZSgpID09IDEgJiYgIWNhbGxMaW5rU3RhdHVz
LmNvdWxkVGFrZVNsb3dQYXRoKCkpIHsKLSAgICAgICAgQ2FsbFZhcmlhbnQgY2FsbGVlID0gY2Fs
bExpbmtTdGF0dXNbMF0uY2FsbGVlKCk7CisgICAgICAgIENhbGxWYXJpYW50IGNhbGxlZSA9IGNh
bGxMaW5rU3RhdHVzWzBdOwogICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS5m
dW5jdGlvbigpOwogICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9u
S2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAg
ICAgICBpZiAoZnVuY3Rpb24gJiYgZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpIHsKQEAgLTE0
MjYsMTMgKzE0MjYsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9k
ZQogICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCBjb250cm9sIGZsb3cg
ZGlhbW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxlZS4KICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNv
dWxkVGFrZVNsb3dQYXRoKCkgJiYgY2FsbExpbmtTdGF0dXMuc2l6ZSgpID09IDEpIHsKICAgICAg
ICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAgICAgICAgICAgY2FsbExpbmtTdGF0dXNbMF0uY2Fs
bGVlKCksIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwgc3BlY2lhbGl6YXRpb25LaW5k
KTsKKyAgICAgICAgICAgIGNhbGxMaW5rU3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0
ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gYXR0
ZW1wdFRvSW5saW5lQ2FsbCgKLSAgICAgICAgICAgIGNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVy
YW5kLCBjYWxsTGlua1N0YXR1c1swXS5jYWxsZWUoKSwgcmVnaXN0ZXJPZmZzZXQsCisgICAgICAg
ICAgICBjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0sIHJl
Z2lzdGVyT2Zmc2V0LAogICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5l
eHRPZmZzZXQsIGtpbmQsIENhbGxlckRvZXNOb3JtYWxMaW5raW5nLCBwcmVkaWN0aW9uLAogICAg
ICAgICAgICAgaW5saW5pbmdCYWxhbmNlKTsKICAgICAgICAgaWYgKCFyZXN1bHQgJiYgIWNhbGxM
aW5rU3RhdHVzLmlzUHJvdmVkKCkpCi0gICAgICAgICAgICB1bmRvRnVuY3Rpb25DaGVja3MoY2Fs
bExpbmtTdGF0dXNbMF0uY2FsbGVlKCkpOworICAgICAgICAgICAgdW5kb0Z1bmN0aW9uQ2hlY2tz
KGNhbGxMaW5rU3RhdHVzWzBdKTsKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAg
IGRhdGFMb2coIkRvbmUgaW5saW5pbmcgKHNpbXBsZSkuXG4iKTsKICAgICAgICAgICAgIGRhdGFM
b2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKQEAgLTE0NjIsNyArMTQ2
Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICBib29s
IGFsbEFyZUNsb3N1cmVDYWxscyA9IHRydWU7CiAgICAgYm9vbCBhbGxBcmVEaXJlY3RDYWxscyA9
IHRydWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gY2FsbExpbmtTdGF0dXMuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgIGlmIChjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKS5pc0Nsb3N1cmVDYWxs
KCkpCisgICAgICAgIGlmIChjYWxsTGlua1N0YXR1c1tpXS5pc0Nsb3N1cmVDYWxsKCkpCiAgICAg
ICAgICAgICBhbGxBcmVEaXJlY3RDYWxscyA9IGZhbHNlOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBhbGxBcmVDbG9zdXJlQ2FsbHMgPSBmYWxzZTsKQEAgLTE1MzMsNyArMTUzMyw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgTm9kZSogbXlD
YWxsVGFyZ2V0Tm9kZSA9IGdldERpcmVjdChjYWxsZWVSZWcpOwogICAgICAgICAKICAgICAgICAg
Ym9vbCBpbmxpbmluZ1Jlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCi0gICAgICAgICAgICBt
eUNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUo
KSwgcmVnaXN0ZXJPZmZzZXQsCisgICAgICAgICAgICBteUNhbGxUYXJnZXROb2RlLCByZXN1bHRP
cGVyYW5kLCBjYWxsTGlua1N0YXR1c1tpXSwgcmVnaXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyTGlua3NN
YW51YWxseSwgcHJlZGljdGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSk7CiAgICAg
ICAgIApAQCAtMTU1MiwxMCArMTU1MiwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhOb2RlCiAgICAgICAgIAogICAgICAgICBKU0NlbGwqIHRoaW5nVG9DYXNlT247CiAg
ICAgICAgIGlmIChhbGxBcmVEaXJlY3RDYWxscykKLSAgICAgICAgICAgIHRoaW5nVG9DYXNlT24g
PSBjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKS5ub25FeGVjdXRhYmxlQ2FsbGVlKCk7CisgICAg
ICAgICAgICB0aGluZ1RvQ2FzZU9uID0gY2FsbExpbmtTdGF0dXNbaV0ubm9uRXhlY3V0YWJsZUNh
bGxlZSgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChhbGxBcmVDbG9zdXJl
Q2FsbHMpOwotICAgICAgICAgICAgdGhpbmdUb0Nhc2VPbiA9IGNhbGxMaW5rU3RhdHVzW2ldLmNh
bGxlZSgpLmV4ZWN1dGFibGUoKTsKKyAgICAgICAgICAgIHRoaW5nVG9DYXNlT24gPSBjYWxsTGlu
a1N0YXR1c1tpXS5leGVjdXRhYmxlKCk7CiAgICAgICAgIH0KICAgICAgICAgZGF0YS5jYXNlcy5h
cHBlbmQoU3dpdGNoQ2FzZShtX2dyYXBoLmZyZWV6ZSh0aGluZ1RvQ2FzZU9uKSwgYmxvY2suZ2V0
KCkpKTsKICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBuZXh0T2Zmc2V0OwpAQCAtMTU2Nyw3ICsx
NTY3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAg
ICBsYW5kaW5nQmxvY2tzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CiAKICAgICAgICAgaWYgKHZl
cmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJGaW5pc2hlZCBpbmxpbmluZyAiLCBjYWxsTGlu
a1N0YXR1c1tpXS5jYWxsZWUoKSwgIiBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiLlxuIik7
CisgICAgICAgICAgICBkYXRhTG9nKCJGaW5pc2hlZCBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1
c1tpXSwgIiBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiLlxuIik7CiAgICAgfQogICAgIAog
ICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBzbG93UGF0aEJsb2NrID0gYWRvcHRSZWYoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNzg2OTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc5LDEzICs3OSwxMyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwo
CiAgICAgaWYgKG1vZGUgPT0gREZHTW9kZSkgewogICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RU
aHVua0dlbmVyYXRvcik7Ci0gICAgICAgIHZtLmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1
bmtHZW5lcmF0b3IpOworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxU
aHVua0dlbmVyYXRvcik7CiAgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dl
bmVyYXRvcik7CiAgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2Vu
ZXJhdG9yKTsKICAgICB9IGVsc2UgewogICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGhh
dFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHZtLmdldENUSVN0dWIobGlu
a0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOwotICAgICAgICB2bS5n
ZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3Ip
OworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKTsKICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRo
YXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRDVElTdHViKHZp
cnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc3Niw3ICs3NzYsNyBAQCBpbmxpbmUgY2hhciogdmlydHVh
bEZvcigKICAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVlLCBraW5k
LCByZWdpc3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7CiB9CiAKLXN0YXRpYyBi
b29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoCitzdGF0aWMgYm9vbCBhdHRlbXB0VG9P
cHRpbWl6ZVBvbHltb3JwaGljQ2FsbCgKICAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMsIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNl
bGwsCiAgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCiB7CkBAIC03OTUsMjcgKzc5NSwy
NCBAQCBzdGF0aWMgYm9vbCBhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsCiAgICAgICAgICAg
ICAqZXhlY0NhbGxlZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPnZtKCksIGNhbGxlZS0+
ZXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgQXJpdHlDaGVja05vdFJlcXVpcmVkLCByZWdpc3Rl
cnMpOwogICAgIAotICAgIENvZGVCbG9jayogY29kZUJsb2NrOwotICAgIGlmIChjYWxsZWUtPmV4
ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZUJsb2NrID0gMDsKLSAg
ICBlbHNlIHsKLSAgICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KGNhbGxlZS0+ZXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOworICAgIGlmICghY2Fs
bGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpIHsKKyAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2FsbGVlLT5leGVjdXRh
YmxlKCkpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CiAgICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5m
bzo6Q2FsbFZhcmFyZ3MgfHwgY2FsbExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6
Q29uc3RydWN0VmFyYXJncykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
Ci0gICAgbGlua0Nsb3N1cmVDYWxsKAorICAgIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgICAg
IGV4ZWNDYWxsZWUsIGNhbGxMaW5rSW5mbywgY29kZUJsb2NrLCBjYWxsZWUtPmV4ZWN1dGFibGUo
KSwgY29kZVB0ciwgcmVnaXN0ZXJzKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKK2NoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvKQogewogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5jdGlvbkNl
bGw7CiAgICAgY2hhciogcmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2FsbGVl
LCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNG
dW5jdGlvbkNlbGwpOwogCi0gICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4
ZWNDYWxsZWUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQsIGNhbGxlZUFzRnVuY3Rp
b25DZWxsLCAqY2FsbExpbmtJbmZvKSkKKyAgICBpZiAoIWF0dGVtcHRUb09wdGltaXplUG9seW1v
cnBoaWNDYWxsKGV4ZWNDYWxsZWUsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQsIGNh
bGxlZUFzRnVuY3Rpb25DZWxsLCAqY2FsbExpbmtJbmZvKSkKICAgICAgICAgbGlua1Nsb3dGb3Io
ZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTm90UmVxdWlyZWQpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC04MzEsNyArODI4
LDcgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ29ucwogICAgIHJldHVy
biB2aXJ0dWFsRm9yKGV4ZWNDYWxsZWUsIENvZGVGb3JDb25zdHJ1Y3QsIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdWlyZWQpOwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxp
bmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8pCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxp
bmtQb2x5bW9ycGhpY0NhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUs
IENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQogewogICAgIEpTQ2VsbCogY2FsbGVlQXNGdW5j
dGlvbkNlbGw7CiAgICAgY2hhciogcmVzdWx0ID0gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVj
Q2FsbGVlLCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzLCBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NiwxMiArMjQ2LDEyIEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEdlbmUKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsRXZhbChFeGVjU3RhdGUqLCBFeGVjU3RhdGUqKSBX
VEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNT
dGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9J
TlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2Fs
bChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdU
Rl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVj
dChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikg
V1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQ
cmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKLWNo
YXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1Jl
Z3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhl
Y1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxM
aW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmly
dHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyop
IFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVj
dFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5B
TDsKQEAgLTM5MSwxMyArMzkxLDEzIEBAIGlubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJh
dGlvblZpcnQKICAgICByZXR1cm4gMDsKIH0KIAotaW5saW5lIFBfSklUT3BlcmF0aW9uX0VDbGkg
b3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdp
c3RlcnMpCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRpb25MaW5rUG9seW1vcnBo
aWNDYWxsRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgc3dp
dGNoIChyZWdpc3RlcnMpIHsKICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWly
ZWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGw7CisgICAgICAgIHJl
dHVybiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsOwogICAgIGNhc2UgTXVzdFByZXNlcnZl
UmVnaXN0ZXJzOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFBy
ZXNlcnZlc1JlZ3M7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxs
VGhhdFByZXNlcnZlc1JlZ3M7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitQb2x5bW9y
cGhpY0NhbGxOb2RlOjp+UG9seW1vcnBoaWNDYWxsTm9kZSgpCit7CisgICAgaWYgKGlzT25MaXN0
KCkpCisgICAgICAgIHJlbW92ZSgpOworfQorCitQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmso
UmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikKK3sKKyAgICBtX2NhbGxMaW5rSW5mby0+dW5s
aW5rKHJlcGF0Y2hCdWZmZXIpOworICAgIAorICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICBy
ZW1vdmUoKTsKK30KKworUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OlBvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lKAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZVJlZiwg
Vk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGNhbGxlckZyYW1lLAorICAg
IENhbGxMaW5rSW5mbyYgaW5mbywgY29uc3QgVmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+JiBj
YXNlcykKKyAgICA6IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCB2bSkKK3sKKyAgICBmb3Ig
KFBvbHltb3JwaGljQ2FsbENhc2UgY2FsbENhc2UgOiBjYXNlcykgeworICAgICAgICBtX3Zhcmlh
bnRzLmFwcGVuZChjYWxsQ2FzZS52YXJpYW50KCkpOworICAgICAgICBpZiAoQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBjYWxsQ2FzZS5jb2RlQmxvY2soKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+
bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKGNhbGxlckZyYW1lLCBtX2NhbGxOb2Rlcy5hZGQo
JmluZm8pKTsKKyAgICB9Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZp
c2l0V2VhaygpCit7CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbV92YXJpYW50cykg
eworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHZhcmlhbnQucmF3Q2FsbGVlQ2VsbCgpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRl
cm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlh
bnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmlhcmVkUmVhZE9u
bHlQb2ludGVyKHZhcmlhbnQucmF3Q2FsbGVlQ2VsbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZV9oCisjZGVmaW5lIFBvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lX2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJD
b2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY2xhc3MgUG9seW1vcnBoaWNDYWxsTm9kZSA6IEJhc2ljUmF3U2VudGluZWxO
b2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQb2x5
bW9ycGhpY0NhbGxOb2RlKTsKK3B1YmxpYzoKKyAgICBQb2x5bW9ycGhpY0NhbGxOb2RlKENhbGxM
aW5rSW5mbyogaW5mbykKKyAgICAgICAgOiBtX2NhbGxMaW5rSW5mbyhpbmZvKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgflBvbHltb3JwaGljQ2FsbE5vZGUoKTsKKyAgICAKKyAgICB2b2lkIHVu
bGluayhSZXBhdGNoQnVmZmVyJik7CisgICAgCitwcml2YXRlOgorICAgIENhbGxMaW5rSW5mbyog
bV9jYWxsTGlua0luZm87Cit9OworCitjbGFzcyBQb2x5bW9ycGhpY0NhbGxDYXNlIHsKK3B1Ymxp
YzoKKyAgICBQb2x5bW9ycGhpY0NhbGxDYXNlKCkKKyAgICAgICAgOiBtX2NvZGVCbG9jayhudWxs
cHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUG9seW1vcnBoaWNDYWxsQ2FzZShDYWxsVmFy
aWFudCB2YXJpYW50LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICAgICAgOiBtX3ZhcmlhbnQo
dmFyaWFudCkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgeworICAgIH0K
KyAgICAKKyAgICBDYWxsVmFyaWFudCB2YXJpYW50KCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50
OyB9CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
azsgfQorICAgIAorcHJpdmF0ZToKKyAgICBDYWxsVmFyaWFudCBtX3ZhcmlhbnQ7CisgICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKK307CisKK2NsYXNzIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lIDogcHVibGljIEdDQXdhcmVKSVRTdHViUm91dGluZSB7CitwdWJsaWM6CisgICAgUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUoCisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwKKyAgICAgICAgRXhlY1N0YXRlKiBjYWxsZXJG
cmFtZSwgQ2FsbExpbmtJbmZvJiwgY29uc3QgVmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+Jik7
CisgICAgCisgICAgdmlydHVhbCB+UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoKTsKKyAgICAK
KyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0
YWJsZS5nZXQoKTsgfQorICAgIGNvbnN0IENhbGxWYXJpYW50TGlzdCYgdmFyaWFudHMoKSBjb25z
dCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9CisgICAgCisgICAgYm9vbCB2aXNpdFdlYWsoKTsKKwor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBtYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwo
U2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBDYWxsVmFyaWFudExpc3Qg
bV92YXJpYW50czsKKyAgICBCYWc8UG9seW1vcnBoaWNDYWxsTm9kZT4gbV9jYWxsTm9kZXM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRp
ZiAvLyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTc4NjkzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxOCw3ICsxNjE4LDcg
QEAgdm9pZCBsaW5rRm9yKAogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0Nh
bGwoZXhlYy0+Y2FsbGVyRnJhbWUoKSwgJmNhbGxMaW5rSW5mbyk7CiAgICAgCiAgICAgaWYgKGtp
bmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExp
bmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxs
VGh1bmtHZW5lcmF0b3JGb3IocmVnaXN0ZXJzKSkuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0
dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yRm9yKHJlZ2lzdGVycykpLmNvZGUo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xNjM4LDEyICsxNjM4LDIyIEBA
IHZvaWQgbGlua1Nsb3dGb3IoCiAgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNh
bGxMaW5rSW5mbywga2luZCwgcmVnaXN0ZXJzKTsKIH0KIAotdm9pZCBsaW5rQ2xvc3VyZUNhbGwo
Ci0gICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJs
b2NrKiBjYWxsZWVDb2RlQmxvY2ssIAotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwKLSAgICBSZWdpc3RlclByZXNlcnZhdGlvbk1v
ZGUgcmVnaXN0ZXJzKQorbmFtZXNwYWNlIHsKK3N0cnVjdCBDYWxsVG9Db2RlUHRyIHsKKyAgICBD
Q2FsbEhlbHBlcnM6OkNhbGwgY2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0
cjsKK307Cit9IC8vIGFubm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbGlua1BvbHltb3JwaGlj
Q2FsbCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCAg
Q2FsbFZhcmlhbnQgbmV3VmFyaWFudCwKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0
ciwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKLSAgICBBU1NFUlQoIWNh
bGxMaW5rSW5mby5zdHViKTsKKyAgICAvLyBDdXJyZW50bHksIHdlIHdpbGwgbmV2ZXIgc2VlIGEg
bm9uLWZ1bmN0aW9uIHZhcmlhbnQsIHNpbmNlIHRoYXQncyBob3cgSklUT3BlcmF0aW9ucy5jcHAK
KyAgICAvLyBoYW5kbGVzIGl0LiBBbHNvLCB3ZSB3b3VsZG4ndCBiZSBhYmxlIHRvIGRvIGFueXRo
aW5nIHdpdGggbm9uLWZ1bmN0aW9uIGNhbGxlZXMgYmVjYXVzZSB3ZQorICAgIC8vIGp1c3QgZG9u
J3QgaGF2ZSB0aGF0IGZ1bmN0aW9uYWxpdHksIHlldC4gVGhhdCdzIHdvcnRoIGZpeGluZy4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwNjg1CisgICAg
UkVMRUFTRV9BU1NFUlQobmV3VmFyaWFudC5leGVjdXRhYmxlKCkpOwogICAgIAogICAgIENvZGVC
bG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7
CiAgICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwpAQCAtMTY2Miw1MCArMTY3Miwx
MDAgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCiAgICAgICAgIHN0dWJKaXQuYWJvcnRXaXRoUmVh
c29uKFJlcGF0Y2hJbnNhbmVBcmd1bWVudENvdW50KTsKICAgICAgICAgb2tBcmd1bWVudENvdW50
LmxpbmsoJnN0dWJKaXQpOwogICAgIH0KKyAgICAKKyAgICBDYWxsVmFyaWFudExpc3QgbGlzdDsK
KyAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8u
c3R1Yi5nZXQoKSkKKyAgICAgICAgbGlzdCA9IHN0dWItPnZhcmlhbnRzKCk7CisgICAgZWxzZSBp
ZiAoSlNGdW5jdGlvbiogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZvLmNhbGxlZS5nZXQoKSkKKyAg
ICAgICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdHtDYWxsVmFyaWFudChvbGRDYWxsZWUpfTsKKyAg
ICAKKyAgICBsaXN0ID0gdmFyaWFudExpc3RXaXRoVmFyaWFudChsaXN0LCBuZXdWYXJpYW50KTsK
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gV2UgY2FuIHNhZmVseSBjbG9iYmVyIGV2ZXJ5
dGhpbmcgZXhjZXB0IHRoZSBjYWxsZWVHUFIuIFdlIGNhbid0IHJlbHkgb24gdGFnTWFza1JlZ2lz
dGVyCi0gICAgLy8gYmVpbmcgc2V0LiBTbyB3ZSBkbyB0aGlzIHRoZSBoYXJkIHdheS4KKyAgICAv
LyBXZSBzaG91bGQgaGF2ZSBsaW5rZWQgdGhlIHNsb3cgcGF0aCB0byB0aGUgdmlydHVhbCBjYWxs
IHRodW5rIGlmIHdlIHdlcmUgYXBwcm9hY2hpbmcgdGhlCisgICAgLy8gbGltaXQuCisgICAgQVNT
RVJUKGxpc3Quc2l6ZSgpIDw9IG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSk7Cisg
ICAgCisgICAgYm9vbCBoYXZlQ2xvc3VyZUNhbGwgPSBmYWxzZTsKKyAgICBmb3IgKENhbGxWYXJp
YW50IHZhcmlhbnQgOiBsaXN0KQorICAgICAgICBoYXZlQ2xvc3VyZUNhbGwgfD0gdmFyaWFudC5p
c0Nsb3N1cmVDYWxsKCk7CisgICAgCiAgICAgR1BSUmVnIHNjcmF0Y2ggPSBBc3NlbWJseUhlbHBl
cnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKTsKLSAgICBzdHViSml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwgc2NyYXRjaCk7Ci0gICAgc2xvd1BhdGgu
YXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVl
R1BSLCBzY3JhdGNoKSk7CisgICAgCisgICAgaWYgKGhhdmVDbG9zdXJlQ2FsbCkgeworICAgICAg
ICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEgZnVuY3Rpb24gYW5kIHN0YXNoIHRoZSBleGVjdXRh
YmxlIGluIHNjcmF0Y2guCisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAvLyBXZSBjYW4g
c2FmZWx5IGNsb2JiZXIgZXZlcnl0aGluZyBleGNlcHQgdGhlIGNhbGxlZUdQUi4gV2UgY2FuJ3Qg
cmVseSBvbiB0YWdNYXNrUmVnaXN0ZXIKKyAgICAgICAgLy8gYmVpbmcgc2V0LiBTbyB3ZSBkbyB0
aGlzIHRoZSBoYXJkIHdheS4KKyAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoVGFnTWFzayksIHNjcmF0Y2gpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQo
c3R1YkppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVHUFIsIHNj
cmF0Y2gpKTsKICNlbHNlCi0gICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhh
dCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5
IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KICNlbmRpZgogICAgIAotICAgIHNs
b3dQYXRoLmFwcGVuZCgKLSAgICAgICAgc3R1YkppdC5icmFuY2g4KAotICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhj
YWxsZWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvblR5cGUpKSk7Ci0gICAgCi0gICAgc2xv
d1BhdGguYXBwZW5kKAotICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAg
ICAgIHN0dWJKaXQuYnJhbmNoOCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOworICAgIAorICAgICAgICBzdHViSml0
LmxvYWRQdHIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBK
U0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpKTsKKyAgICAgICAgICAgIHNjcmF0Y2gpOwor
ICAgIH0KICAgICAKLSAgICBzdHViSml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKLSAg
ICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIFZlY3RvcjxQb2x5bW9ycGhpY0Nh
bGxDYXNlPiBjYWxsQ2FzZXM7CiAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdHViSml0
LnN0b3JlNjQoCi0gICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNo
YWluKSArIG9mZnNldFRvRnJhbWUpKTsKLSNlbHNlCi0gICAgc3R1YkppdC5zdG9yZVB0cigKLSAg
ICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSArIG9mZnNl
dFRvRnJhbWUpKTsKLSAgICBzdHViSml0LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxw
dHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSArIG9mZnNldFRv
RnJhbWUpKTsKLSNlbmRpZgorICAgIENDYWxsSGVscGVyczo6SnVtcCBza2lwVG9OZXh0OworICAg
IENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICAKKyAgICBWZWN0b3I8Q2FsbFRvQ29k
ZVB0cj4gY2FsbHM7CiAgICAgCi0gICAgQXNzZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBzdHVi
Sml0Lm5lYXJDYWxsKCk7Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGRvbmUgPSBzdHViSml0
Lmp1bXAoKTsKKyAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KSB7CisgICAgICAg
IGlmIChza2lwVG9OZXh0LmlzU2V0KCkpCisgICAgICAgICAgICBza2lwVG9OZXh0LmxpbmsoJnN0
dWJKaXQpOworICAgICAgICAKKyAgICAgICAgLy8gTmV3IHZhcmlhbnRzIHNob3VsZCBoYXZlIEpJ
VCBjb2RlIGZvciBjYWxsIHNpbmNlIHdlIGFyZSBhYm91dCB0byBtYWtlIHRoYXQgY2FsbCBhbmQK
KyAgICAgICAgLy8gSklUT3BlcmF0aW9ucy5jcHAgc2hvdWxkIGhhdmUgZW5zdXJlZCB0aGF0IHRo
ZSBKSVQgY29kZSB3YXMgcHJlc2VudC4gT2xkIHZhcmlhbnRzIHNob3VsZAorICAgICAgICAvLyBo
YXZlIEpJVCBjb2RlIGZvciBjYWxsIHNpbmNlIHRoZSBpbmxpbmUgY2FjaGUgd291bGQgaGF2ZSBi
ZWVuIGNsZWFyZWQgaWYgdGhlaXIgY29kZSB3YXMKKyAgICAgICAgLy8gZGVzdHJveWVkLgorICAg
ICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9CisgICAgICAgICAgICB2YXJp
YW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNh
bGwoCisgICAgICAgICAgICAgICAgKmV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9j
aygpLT52bSgpLCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICBBcml0eUNo
ZWNrTm90UmVxdWlyZWQsIHJlZ2lzdGVycyk7CisgICAgICAgIAorICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jazsKKyAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5j
dGlvbigpKQorICAgICAgICAgICAgY29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2Fs
bGVlLT5leGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgICAgICBBU1NF
UlQoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA+PSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSAmJiBjYWxsTGlua0luZm8uY2Fs
bFR5cGUgIT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncyAmJiBjYWxsTGlua0luZm8uY2FsbFR5
cGUgIT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgY2FsbENhc2VzLmFwcGVuZChQb2x5bW9ycGhpY0NhbGxDYXNlKHZhcmlhbnQs
IGNvZGVCbG9jaykpOworICAgICAgICAKKyAgICAgICAgaWYgKHZhcmlhbnQuaXNDbG9zdXJlQ2Fs
bCgpKSB7CisgICAgICAgICAgICBza2lwVG9OZXh0ID0KKyAgICAgICAgICAgICAgICBzdHViSml0
LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwg
c2NyYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHZhcmlhbnQuZXhlY3V0YWJsZSgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBz
a2lwVG9OZXh0ID0KKyAgICAgICAgICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodmFyaWFudC5mdW5jdGlvbigp
KSk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgQ2FsbFRvQ29kZVB0ciBjYWxsVG9Db2RlUHRy
OworICAgICAgICBjYWxsVG9Db2RlUHRyLmNhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7CisgICAg
ICAgIGNhbGxUb0NvZGVQdHIuY29kZVB0ciA9IGNvZGVQdHI7CisgICAgICAgIGNhbGxzLmFwcGVu
ZChjYWxsVG9Db2RlUHRyKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOwor
ICAgIH0KICAgICAKICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsKKyAgICBza2lwVG9OZXh0
LmxpbmsoJnN0dWJKaXQpOwogICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJl
Z1QwKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwpAQCAt
MTcxNSwyMyArMTc3NSwzMCBAQCB2b2lkIGxpbmtDbG9zdXJlQ2FsbCgKICAgICAKICAgICBzdHVi
Sml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKICAg
ICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwotICAgIAorICAg
ICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgY2FsbGVyQ29k
ZUJsb2NrKTsKICAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxDYXNl
cy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKENhbGxUb0NvZGVQdHIgY2FsbFRv
Q29kZVB0ciA6IGNhbGxzKSB7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoCisgICAgICAgICAg
ICBjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyKGNhbGxUb0NvZGVQdHIuY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgfQogICAgIGlmIChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgw
KSk7CiAgICAgZWxzZQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5m
by5ob3RQYXRoT3RoZXIubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhz
bG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsVGh1bmtHZW5lcmF0
b3JGb3IoQ29kZUZvckNhbGwsIHJlZ2lzdGVycykpLmNvZGUoKSkpOworICAgIGlmIChsaXN0LnNp
emUoKSA9PSBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUpCisgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIodmlydHVh
bFRodW5rR2VuZXJhdG9yRm9yKENvZGVGb3JDYWxsLCByZWdpc3RlcnMpKS5jb2RlKCkpKTsKKyAg
ICBlbHNlCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwo
dm0tPmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yRm9yKHJlZ2lz
dGVycykpLmNvZGUoKSkpOwogICAgIAotICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAorICAg
IFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJl
ZihuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREVf
Rk9SKAogICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAg
ICAgICgiQ2xvc3VyZSBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldCAl
cCAoJXMpIiwKKyAgICAgICAgICAgICgiQ2xvc3VyZSBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4g
cG9pbnQgJXAsIHRhcmdldHMgJXMiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqY2FsbGVy
Q29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIGNvZGVQdHIu
ZXhlY3V0YWJsZUFkZHJlc3MoKSwgdG9DU3RyaW5nKHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9j
aykpLmRhdGEoKSkpLAotICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGV4ZWN1dGFibGUpKTsKKyAgICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAobGlz
dCkpLmRhdGEoKSkpLAorICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGV4ZWMtPmNhbGxlckZyYW1lKCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzKSk7CiAg
ICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CiAg
ICAgCkBAIC0xNzQwLDkgKzE4MDcsOSBAQCB2b2lkIGxpbmtDbG9zdXJlQ2FsbCgKICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICBsaW5r
U2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCwgcmVn
aXN0ZXJzKTsKICAgICAKKyAgICAvLyBJZiB0aGVyZSBoYWQgYmVlbiBhIHByZXZpb3VzIHN0dWIg
cm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29vbiBhcyB0aGUgR0MgcnVucyBhbmQgc2Vl
cworICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24gc3RhY2suCiAgICAgY2FsbExpbmtJbmZv
LnN0dWIgPSBzdHViUm91dGluZS5yZWxlYXNlKCk7Ci0gICAgCi0gICAgQVNTRVJUKCFjYWxsZWVD
b2RlQmxvY2sgfHwgY2FsbGVlQ29kZUJsb2NrLT5pc0luY29taW5nQ2FsbEFscmVhZHlMaW5rZWQo
JmNhbGxMaW5rSW5mbykpOwogfQogCiB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiBy
ZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAi
Q2FsbFZhcmlhbnQuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtNDEsNyArNDIsNyBAQCB2b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiwg
SlNWYWx1CiB2b2lkIHJlcGF0Y2hJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVudGlm
aWVyJiwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKIHZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sq
LCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKTsKIHZvaWQgbGlua1Nsb3dGb3Io
RXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Nb2RlKTsKLXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENh
bGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwordm9pZCBsaW5rUG9seW1vcnBoaWND
YWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIENhbGxWYXJpYW50LCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7CiB2b2lkIHJl
c2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVz
ZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXNl
dEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMTc4Njky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzcsMjcgKzEzNywyNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a0NvbnN0cnVjdFRoYXRQCiAgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwgQ29k
ZUZvckNvbnN0cnVjdCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKIH0KIAotc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcigKK3N0YXRp
YyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbEZvclRodW5rR2VuZXJh
dG9yKAogICAgIFZNKiB2bSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsK
ICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQsIHZt
LCBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IocmVnaXN0ZXJzKSk7CisgICAgc2xvd1BhdGhG
b3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbEZvcihyZWdpc3RlcnMpKTsK
ICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktf
SUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2xvc3Vy
ZSBjYWxsICVzIHNsb3cgcGF0aCB0aHVuayIsIHJlZ2lzdGVycyA9PSBNdXN0UHJlc2VydmVSZWdp
c3RlcnMgPyAiIHRoYXQgcHJlc2VydmVzIHJlZ2lzdGVycyIgOiAiIikpOworICAgIHJldHVybiBG
SU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgcG9seW1vcnBoaWMgY2FsbCAlcyBzbG93
IHBhdGggdGh1bmsiLCByZWdpc3RlcnMgPT0gTXVzdFByZXNlcnZlUmVnaXN0ZXJzID8gIiB0aGF0
IHByZXNlcnZlcyByZWdpc3RlcnMiIDogIiIpKTsKIH0KIAogLy8gRm9yIGNsb3N1cmUgb3B0aW1p
emF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUgdXNpbmcgY2xv
c3VyZXMgZm9yCiAvLyBvYmplY3QgY29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdvaW5nIHRvIGxv
c2UgYmlnIHRpbWUgYW55d2F5LgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2Fs
bFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1v
cnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rQ2xvc3Vy
ZUNhbGxGb3JUaHVua0dlbmVyYXRvcih2bSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJl
ZCk7CisgICAgcmV0dXJuIGxpbmtQb2x5bW9ycGhpY0NhbGxGb3JUaHVua0dlbmVyYXRvcih2bSwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZNKiB2
bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZl
c1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtDbG9zdXJlQ2Fs
bEZvclRodW5rR2VuZXJhdG9yKHZtLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworICAgIHJldHVy
biBsaW5rUG9seW1vcnBoaWNDYWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIE11c3RQcmVzZXJ2ZVJl
Z2lzdGVycyk7CiB9CiAKIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZvclRo
dW5rR2VuZXJhdG9yKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxNiArNjUsMTYgQEAgaW5s
aW5lIFRodW5rR2VuZXJhdG9yIGxpbmtUaHVua0dlbmVyYXRvcgogICAgIHJldHVybiAwOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0q
KTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVn
c1RodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3Jw
aGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1Bv
bHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAotaW5s
aW5lIFRodW5rR2VuZXJhdG9yIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9yKFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCitpbmxpbmUgVGh1bmtHZW5lcmF0b3IgbGlu
a1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9k
ZSByZWdpc3RlcnMpCiB7CiAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKICAgICBjYXNlIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6Ci0gICAgICAgIHJldHVybiBsaW5rQ2xvc3VyZUNh
bGxUaHVua0dlbmVyYXRvcjsKKyAgICAgICAgcmV0dXJuIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVu
a0dlbmVyYXRvcjsKICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKLSAgICAgICAgcmV0
dXJuIGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7CisgICAg
ICAgIHJldHVybiBsaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVy
YXRvcjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlz
aW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTcwLDYgKzE3MCw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0
aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnREZXZpcnR1YWxpemF0aW9u
LCB0cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nLCB0
cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5bW9ycGhpY0NhbGxJbmxpbmluZywgdHJ1ZSkg
XAorICAgIHYoYm9vbCwgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplLCAzKSBcCiAg
ICAgdihib29sLCBjYWxsU3RhdHVzU2hvdWxkVXNlQ2FsbEVkZ2VQcm9maWxlLCB0cnVlKSBcCiAg
ICAgdihib29sLCBjYWxsRWRnZVByb2ZpbGVSZWFsbHlQcm9jZXNzZXNMb2csIHRydWUpIFwKICAg
ICB2KGJvb2wsIGJhc2VsaW5lRG9lc0NhbGxFZGdlUHJvZmlsaW5nLCBmYWxzZSkgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245012</attachid>
            <date>2015-01-20 13:01:17 -0800</date>
            <delta_ts>2015-01-20 16:02:04 -0800</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>106331</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzg2OTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgyLDkgKzI4Miw2IEBACiAJCTBGM0IzQTJCMTU0NzUw
MDAwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRh
dGUuY3BwICovOyB9OwogCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTJB
MTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0I3RTI2MTlBMTFCODAwMEQ5QkM1NiAvKiBD
YWxsRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzQjdFMjAxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYzQjdFMjcxOUExMUI4MDAwRDlCQzU2
IC8qIENhbGxFZGdlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjNCN0UyMTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxl
LmNwcCAqLzsgfTsKLQkJMEYzQjdFMjgxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdF
MjIxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGM0I3RTI5MTlBMTFCODAwMEQ5QkM1
NiAvKiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyMzE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQ
cm9maWxlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGM0I3RTJBMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTEx
QjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuY3BwICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgw
MDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI1MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0I3
RTJEMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyQzE5QTEyQUFFMDBEOUJDNTYgLyogQ2Fs
bEVkZ2UuY3BwICovOyB9OwpAQCAtMzg0LDggKzM4MSw2IEBACiAJCTBGNzAyNUFBMTcxNEIwRkMw
MDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAvKiBE
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5jcHAgKi87IH07CiAJCTBGNzE0Q0E1MTZFQTkyRjIwMEYzRUJFQiAvKiBE
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0
dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzNEN0FCMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNw
cCAqLzsgfTsKLQkJMEY3M0Q3QUYxNjVBMTQzMDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJv
dXRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NzNEN0FDMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NDNCQUExNkI4
ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIwMTY1MUM2NjEwMEE4MEFGRSAvKiBB
Uk02NERpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGNzU3NkQyMThFMUZFRTkwMDJFRjRDRCAv
KiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1NzZEMDE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OwogCQkwRjc1NzZEMzE4RTFGRUU5MDAyRUY0
Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzU3NkQxMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nl
c3NvckNhbGxKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC02MDAsNiArNTk1LDggQEAKIAkJMEZFMjI4RUUxNDM2QUIyQzAw
MTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9
OwogCQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3MjExQjE5M0I5QzU5
MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgKi87IH07CiAJCTBGRTcyMTFFMTkzQjlDNTkw
MDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkU3MjExQzE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
RTgzNDE3MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4MzQxNTFB
NkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwICovOyB9Owor
CQkwRkU4MzQxODFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTgzNDE2
MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NE
QTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8q
IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2
MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkU5NUY3OTE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFOTVGNzcx
OEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCAqLzsgfTsKQEAgLTE5NDksOSAr
MTk0Niw2IEBACiAJCTBGM0IzQTI5MTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYWxpZGF0ZS5jcHA7IHBh
dGggPSBkZmcvREZHVmFsaWRhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsaWRhdGUuaDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCN0UyMDE5QTExQjgwMDBEOUJDNTYg
LyogQ2FsbEVkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzQjdFMjExOUExMUI4MDAwRDlCQzU2
IC8qIENhbGxFZGdlUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWxsRWRnZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjNCN0UyMjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxFZGdlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjNCN0UyMzE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxl
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRWRnZVByb2Zp
bGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0I3RTI0MTlBMTFC
ODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDYWxsVmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGM0I3RTI1MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsVmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjNCN0UyQzE5QTEyQUFFMDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjA1Miw4ICsyMDQ2LDYgQEAKIAkJMEY3MDI1QTgxNzE0QjBGODAw
MzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDsgcGF0aCA9IGRmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFn
YXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJF
QiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9E
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGNzNEN0FCMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsb3N1cmVDYWxsU3R1YlJv
dXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjczRDdBQzE2NUExNDJB
MDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNzU3NkQwMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nl
c3NvckNhbGxKSVRTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzU3NkQxMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4
RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyODAs
NiArMjI3Miw4IEBACiAJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFNzIxMUIxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVHJhbnNpdGlvbi5j
cHA7IHBhdGggPSBkZmcvREZHVHJhbnNpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTcyMTFDMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RyYW5zaXRpb24uaDsgcGF0aCA9IGRmZy9E
RkdUcmFuc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTgzNDE1MUE2
RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0
NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8q
IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFOTVGNzcxOEI1Njk0NzAwQjUz
MUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTERhdGFTZWN0aW9uLmNwcDsgcGF0aCA9IGZ0bC9GVExEYXRhU2VjdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzQwLDggKzM3MzQsNiBAQAogCQkJCTBG
MjRFNTNCMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuY3BwICovLAogCQkJCTBG
MjRFNTNDMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuaCAqLywKIAkJCQkwRjI0
RTUzRDE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggKi8sCi0JCQkJMEY3M0Q3QUIx
NjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwICovLAotCQkJCTBG
NzNEN0FDMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggKi8sCiAJ
CQkJMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8sCiAJ
CQkJQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICov
LAogCQkJCUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmgg
Ki8sCkBAIC0zNzgwLDggKzM3NzIsOCBAQAogCQkJCTE0QTY1ODFBMEY0RTM2RjQwMDAxNTBGRCAv
KiBKSVRTdHVicy5oICovLAogCQkJCUZFRjY4MzVBMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVi
c0FSTS5oICovLAogCQkJCUZFRjY4MzVCMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTXY3
LmggKi8sCi0JCQkJRkVGNjgzNUQxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2LmggKi8s
CiAJCQkJRkVGNjgzNUMxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2XzY0LmggKi8sCisJ
CQkJRkVGNjgzNUQxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2LmggKi8sCiAJCQkJQTdB
NEFFMEMxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzWDg2Q29tbW9uLmggKi8sCiAJCQkJMEY1
RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8sCiAJCQkJMEY1RUY5MUMx
Njg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5oICovLApAQCAtMzc4OSw2ICszNzgxLDggQEAK
IAkJCQkwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCAqLywKIAkJCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3Jp
dGVCYXJyaWVyLmggKi8sCiAJCQkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJm
YWNlSklULmggKi8sCisJCQkJMEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmNwcCAqLywKKwkJCQkwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4NDcgLyog
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRkE3QThFOTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmNwcCAqLywKIAkJCQkwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVn
LmggKi8sCiAJCQkJMEY2QjFDQkIxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0
aW9uV3JhcHBlckdlbmVyYXRvci5jcHAgKi8sCkBAIC01MDIxLDkgKzUwMTUsNiBAQAogCQkJCTBG
ODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLywKIAkJCQkwRjNCN0UyQzE5
QTEyQUFFMDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovLAogCQkJCTBGM0I3RTIwMTlBMTFCODAw
MEQ5QkM1NiAvKiBDYWxsRWRnZS5oICovLAotCQkJCTBGM0I3RTIxMTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsRWRnZVByb2ZpbGUuY3BwICovLAotCQkJCTBGM0I3RTIyMTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsRWRnZVByb2ZpbGUuaCAqLywKLQkJCQkwRjNCN0UyMzE5QTExQjgwMDBEOUJDNTYgLyog
Q2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oICovLAogCQkJCTBGMEI4M0FFMTRCQ0Y3MTQwMDg4NUI0
RiAvKiBDYWxsTGlua0luZm8uY3BwICovLAogCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4NUI0RiAv
KiBDYWxsTGlua0luZm8uaCAqLywKIAkJCQkwRjkzMzI5MzE0Q0E3REMxMDA4NUYzQzYgLyogQ2Fs
bExpbmtTdGF0dXMuY3BwICovLApAQCAtNTQ3NCw3ICs1NDY1LDYgQEAKIAkJCQkwRjY5Q0M4OTE5
M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MjRFNTQyMTdFQTlGNTkwMEFCQjIxNyAvKiBDQ2FsbEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDNkFBQUU1MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICov
LAotCQkJCTBGNzNEN0FGMTY1QTE0MzAwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5NzBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJs
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGOTQ0MTE2Njc2MzMyMDBENjE5NzEgLyogQ29k
ZUJsb2NrSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDOTdGMzQxODIwMjBENzAwMkM5QjI2
IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC01
NTY2LDcgKzU1NTYsNiBAQAogCQkJCTBGRkZDOTVBMTRFRjkwQTkwMEM3MjUzMiAvKiBERkdDU0VQ
aGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkM3NzMxNkUxMkY3NDAwMzhEOTc2IC8qIERG
R0RDRVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5QTE3MkYwNTAxMDA3REJEQTUg
LyogREZHRGVzaXJlZElkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjNCN0UyODE5
QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MkMwRjdDRTE3QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjk4MUZEOTE3QkFFRTRCMDBBM0JDOTggLyog
REZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTU4NTcsNyArNTg0
Niw2IEBACiAJCQkJQTc2RjU0QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTGV4aWNh
bEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdG
MDEgLyogSlNBUElWYWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0I3RTI5MTlB
MTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzYxNDBEMjE4Mjk4MkNCMDA3NTA2MjQgLyogSlNBcmd1bWVudHNJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTcwRTE2RjVDRDAwQjM0NDYwIC8q
IEpTQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNjIyNyw2ICs2MjE1LDcgQEAKIAkJCQkwRkY0
Mjc0OTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0U1QUIzOTE3OTlFNEIyMDBEMjgzM0QgLyogVURpczg2RGlzYXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0E4QUY0MTE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRTgzNDE4MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDMxM0JGREU3MTAw
MjNEODdDIC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFG
NDIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0E4QUYzRjE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NzY1LDcgKzY3NTQsNiBAQAogCQkJCTBGMEI4M0IwMTRCQ0Y3MTYwMDg4NUI0RiAvKiBDYWxs
TGlua0luZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2
IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0U0MTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkwRjczRDdBRTE2NUExNDJEMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGlu
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NjlBMDc5NjBFRDFEM0FFMDBGMUY2ODEgLyogQ29k
ZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQwMTY2NzYzMzAwMEQ2MTk3MSAv
KiBDb2RlQmxvY2tIYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzk3RjMzMTgyMDIwRDcw
MDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC02OTUyLDggKzY5NDAsOCBAQAogCQkJCTBGMjM1QkQ1MTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1
QkQ4MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyMzVCREExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRjNCN0UyNzE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQ
cm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RjI5OTZCMTdBMEJCNjcwMDEwNDE3QSAv
KiBGVExGYWlsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTgzNDE3MUE2RUY5N0IwMEQwNDg0
NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkQ4QTMxOTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjVGMUFGMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNo
ZVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMjgxNzA5NjIzQjAwQkI3MjJDIC8q
IEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmNwcAkocmV2
aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdl
UHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzYwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkNhbGxFZGdlUHJvZmlsZS5oIgotCi0jaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
Ci0jaW5jbHVkZSAiQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpJVE9wZXJh
dGlvbnMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1D
YWxsRWRnZUxpc3QgQ2FsbEVkZ2VQcm9maWxlOjpjYWxsRWRnZXMoKSBjb25zdAotewotICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgQ2FsbEVkZ2VMaXN0
IHJlc3VsdDsKLSAgICAKLSAgICBDYWxsVmFyaWFudCBwcmltYXJ5Q2FsbGVlID0gbV9wcmltYXJ5
Q2FsbGVlOwotICAgIENhbGxFZGdlQ291bnRUeXBlIG51bUNhbGxzVG9QcmltYXJ5ID0gbV9udW1D
YWxsc1RvUHJpbWFyeTsKLSAgICAvLyBEZWZlbmQgYWdhaW5zdCByYWNlcy4gVGhlc2UgZmllbGRz
IGFyZSBtb2RpZmllZCBieSB0aGUgbG9nIHByb2Nlc3NvciB3aXRob3V0IGxvY2tpbmcuCi0gICAg
aWYgKCEhcHJpbWFyeUNhbGxlZSAmJiBudW1DYWxsc1RvUHJpbWFyeSkKLSAgICAgICAgcmVzdWx0
LmFwcGVuZChDYWxsRWRnZShwcmltYXJ5Q2FsbGVlLCBudW1DYWxsc1RvUHJpbWFyeSkpOwotICAg
IAotICAgIGlmIChtX290aGVyQ2FsbGVlcykgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBp
ZiB0aGUgcHJpbWFyeSB0aHJlYWQgaGFkIGp1c3QgY3JlYXRlZCBhIG1fb3RoZXJDYWxsZXMgd2hp
bGUgbG9nCi0gICAgICAgIC8vIHByb2Nlc3NpbmcsIHdlIHNlZSBhIGNvbnNpc3RlbnRseSBjcmVh
dGVkIG9uZS4gVGhlIGxvY2sgYmVpbmcgaGVsZCBpcyBpbnN1ZmZpY2llbnQgZm9yCi0gICAgICAg
IC8vIHRoaXMsIHNpbmNlIHRoZSBsb2cgcHJvY2Vzc29yIHdpbGwgb25seSBncmFiIHRoZSBsb2Nr
IHdoZW4gbWVyZ2luZyB0aGUgc2Vjb25kYXJ5Ci0gICAgICAgIC8vIHNwZWN0cnVtIGludG8gdGhl
IHByaW1hcnkgb25lIGJ1dCBtYXkgc3RpbGwgY3JlYXRlIHRoZSBkYXRhIHN0cnVjdHVyZSB3aXRo
b3V0IGhvbGRpbmcKLSAgICAgICAgLy8gbG9ja3MuCi0gICAgICAgIFdURjo6bG9hZExvYWRGZW5j
ZSgpOwotICAgICAgICBmb3IgKENhbGxFZGdlJiBlbnRyeSA6IG1fb3RoZXJDYWxsZWVzLT5tX3By
b2Nlc3NlZCkgewotICAgICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIHBvc3NpYmlsaXR5
IHRoYXQgdGhlIHByaW1hcnkgZHVwbGljYXRlcyBhbiBlbnRyeSBpbiB0aGUgc2Vjb25kYXJ5Ci0g
ICAgICAgICAgICAvLyBzcGVjdHJ1bS4gVGhhdCBjYW4gaGFwcGVuIHdoZW4gdGhlIEdDIHJlbW92
ZXMgdGhlIHByaW1hcnkuIFdlIGNvdWxkIGhhdmUgdGhlIEdDIGZpeAotICAgICAgICAgICAgLy8g
dGhlIHNpdHVhdGlvbiBieSBjaGFuZ2luZyB0aGUgcHJpbWFyeSB0byBiZSBzb21ldGhpbmcgZnJv
bSB0aGUgc2Vjb25kYXJ5IHNwZWN0cnVtLAotICAgICAgICAgICAgLy8gYnV0IHRoaXMgZml4IHNl
ZW1zIHNpbXBsZXIgdG8gaW1wbGVtZW50IGFuZCBhbHNvIGNoZWFwZXIuCi0gICAgICAgICAgICBp
ZiAoZW50cnkuY2FsbGVlKCkgPT0gcmVzdWx0WzBdLmNhbGxlZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0WzBdID0gQ2FsbEVkZ2UocmVzdWx0WzBdLmNhbGxlZSgpLCBlbnRyeS5jb3VudCgp
ICsgcmVzdWx0WzBdLmNvdW50KCkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGVudHJ5KTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzdGQ6OnNvcnQocmVzdWx0LmJlZ2luKCksIHJl
c3VsdC5lbmQoKSwgW10gKGNvbnN0IENhbGxFZGdlJiBhLCBjb25zdCBDYWxsRWRnZSYgYikgLT4g
Ym9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gYS5jb3VudCgpID4gYi5jb3VudCgpOwotICAgICAg
ICB9KTsKLSAgICAKLSAgICBpZiAocmVzdWx0LnNpemUoKSA+PSAyKQotICAgICAgICBBU1NFUlQo
cmVzdWx0WzBdLmNvdW50KCkgPj0gcmVzdWx0Lmxhc3QoKS5jb3VudCgpKTsKLSAgICAKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1DYWxsRWRnZUNvdW50VHlwZSBDYWxsRWRnZVByb2ZpbGU6Om51
bUNhbGxzVG9Lbm93bkNlbGxzKCkgY29uc3QKLXsKLSAgICBDYWxsRWRnZUNvdW50VHlwZSByZXN1
bHQgPSAwOwotICAgIGZvciAoQ2FsbEVkZ2UmIGVkZ2UgOiBjYWxsRWRnZXMoKSkKLSAgICAgICAg
cmVzdWx0ICs9IGVkZ2UuY291bnQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMg
Ym9vbCB3b3J0aERlc3BlY2lmeWluZyhjb25zdCBDYWxsVmFyaWFudCYgdmFyaWFudCkKLXsKLSAg
ICByZXR1cm4gIUhlYXA6OmlzTWFya2VkKHZhcmlhbnQucmF3Q2FsbGVlQ2VsbCgpKQotICAgICAg
ICAmJiBIZWFwOjppc01hcmtlZCh2YXJpYW50LmRlc3BlY2lmaWVkQ2xvc3VyZSgpLnJhd0NhbGxl
ZUNlbGwoKSk7Ci19Ci0KLWJvb2wgQ2FsbEVkZ2VQcm9maWxlOjp3b3J0aERlc3BlY2lmeWluZygp
Ci17Ci0gICAgaWYgKG1fY2xvc3VyZXNBcmVEZXNwZWNpZmllZCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIGJvb2wgZGlkU2VlRW50cnkgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAo
ISFtX3ByaW1hcnlDYWxsZWUpIHsKLSAgICAgICAgZGlkU2VlRW50cnkgPSB0cnVlOwotICAgICAg
ICBpZiAoIUpTQzo6d29ydGhEZXNwZWNpZnlpbmcobV9wcmltYXJ5Q2FsbGVlKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fb3RoZXJDYWxsZWVzKSB7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGRpZFNlZUVudHJ5ID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGlmICghSlNDOjp3b3J0aERlc3BlY2lmeWluZyhtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNz
ZWRbaV0uY2FsbGVlKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZGlkU2VlRW50cnk7Ci19Ci0KLXZvaWQgQ2FsbEVk
Z2VQcm9maWxlOjp2aXNpdFdlYWsoKQotewotICAgIGlmICghbV9wcmltYXJ5Q2FsbGVlICYmICFt
X290aGVyQ2FsbGVlcykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgLy8gU2VlIGlmIGFueXRoaW5nIGlzIGRl
YWQgYW5kIGlmIHRoYXQgY2FuIGJlIHJlY3RpZmllZCBieSBkZXNwZWNpZnlpbmcuCi0gICAgaWYg
KHdvcnRoRGVzcGVjaWZ5aW5nKCkpIHsKLSAgICAgICAgQ2FsbFNwZWN0cnVtIG5ld1NwZWN0cnVt
OwotICAgICAgICAKLSAgICAgICAgaWYgKCEhbV9wcmltYXJ5Q2FsbGVlKQotICAgICAgICAgICAg
bmV3U3BlY3RydW0uYWRkKG1fcHJpbWFyeUNhbGxlZS5kZXNwZWNpZmllZENsb3N1cmUoKSwgbV9u
dW1DYWxsc1RvUHJpbWFyeSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9vdGhlckNhbGxlZXMp
IHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nl
c3NlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBuZXdTcGVjdHJ1bS5hZGQoCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jYWxsZWUo
KS5kZXNwZWNpZmllZENsb3N1cmUoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdGhlckNhbGxl
ZXMtPm1fcHJvY2Vzc2VkW2ldLmNvdW50KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBWZWN0b3I8Q2FsbFNwZWN0cnVtOjpLZXlBbmRDb3VudD4gbGlzdCA9
IG5ld1NwZWN0cnVtLmJ1aWxkTGlzdCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChsaXN0LnNp
emUoKSk7Ci0gICAgICAgIG1fcHJpbWFyeUNhbGxlZSA9IGxpc3QubGFzdCgpLmtleTsKLSAgICAg
ICAgbV9udW1DYWxsc1RvUHJpbWFyeSA9IGxpc3QubGFzdCgpLmNvdW50OwotICAgICAgICAKLSAg
ICAgICAgaWYgKG1fb3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+
bV9wcm9jZXNzZWQuY2xlYXIoKTsKLQotICAgICAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhIHNp
dHVhdGlvbiB3aGVyZSB0aGUgR0MgY2xlYXJzIHRoZSBwcmltYXJ5IGFuZCB0aGVuIGxvZyBwcm9j
ZXNzaW5nCi0gICAgICAgICAgICAvLyByZWluc3RhdGVzIGl0IHdpdGhvdXQgZXZlciBkb2luZyBh
biBhZGRTbG93IGFuZCBzdWJzZXF1ZW50IG1lcmdlQmFjay4gSW4gc3VjaCBhIGNhc2UKLSAgICAg
ICAgICAgIC8vIHRoZSBwcmltYXJ5IGNvdWxkIGR1cGxpY2F0ZSBhbiBlbnRyeSBpbiBvdGhlckNh
bGxlZXMsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiB0aG91Z2ggd2UKLSAgICAgICAgICAgIC8vIGhh
ZCBhbiBvdGhlckNhbGxlZXMgb2JqZWN0LCB0aGUgbGlzdCBzaXplIGlzIGp1c3QgMS4KLSAgICAg
ICAgICAgIGlmIChsaXN0LnNpemUoKSA+PSAyKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbGlzdC5zaXplKCkgLSAxOyBpLS07KQotICAgICAgICAgICAgICAgICAgICBtX290
aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuYXBwZW5kKENhbGxFZGdlKGxpc3RbaV0ua2V5LCBsaXN0
W2ldLmNvdW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IG1fY2xvc3VyZXNBcmVEZXNwZWNpZmllZCA9IHRydWU7Ci0gICAgICAgIAotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIGlmICghIW1fcHJpbWFyeUNhbGxlZSAmJiAhSGVhcDo6aXNN
YXJrZWQobV9wcmltYXJ5Q2FsbGVlLnJhd0NhbGxlZUNlbGwoKSkpIHsKLSAgICAgICAgbV9udW1D
YWxsc1RvVW5rbm93bkNlbGwgKz0gbV9udW1DYWxsc1RvUHJpbWFyeTsKLSAgICAgICAgCi0gICAg
ICAgIG1fcHJpbWFyeUNhbGxlZSA9IENhbGxWYXJpYW50KCk7Ci0gICAgICAgIG1fbnVtQ2FsbHNU
b1ByaW1hcnkgPSAwOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9vdGhlckNhbGxlZXMpIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3Nl
ZC5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKG1fb3RoZXJD
YWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jYWxsZWUoKS5yYXdDYWxsZWVDZWxsKCkpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX251bUNhbGxz
VG9Vbmtub3duQ2VsbCArPSBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY291bnQoKTsK
LSAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpLS1dID0gbV9vdGhlckNh
bGxlZXMtPm1fcHJvY2Vzc2VkLmxhc3QoKTsKLSAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5t
X3Byb2Nlc3NlZC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8v
IE9ubHkgZXhpc3RzIHdoaWxlIHdlIGFyZSBwcm9jZXNzaW5nIHRoZSBsb2cuCi0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSk7Ci0gICAg
fQotfQotCi12b2lkIENhbGxFZGdlUHJvZmlsZTo6YWRkU2xvdyhDYWxsVmFyaWFudCBjYWxsZWUs
IENhbGxFZGdlUHJvZmlsZVZlY3RvciYgbWVyZ2VCYWNrTG9nKQotewotICAgIC8vIFRoaXMgZXhp
c3RzIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgc3BlY3RydW0gd2Fzbid0IGNyZWF0ZWQgeWV0
LCBvciB3ZSdyZSBzdG9yaW5nIHRvIGEKLSAgICAvLyBwYXJ0aWN1bGFyIHNwZWN0cnVtIGZvciB0
aGUgZmlyc3QgdGltZSBkdXJpbmcgYSBsb2cgcHJvY2Vzc2luZyBpdGVyYXRpb24uCi0gICAgCi0g
ICAgaWYgKCFtX290aGVyQ2FsbGVlcykgewotICAgICAgICBtX290aGVyQ2FsbGVlcyA9IHN0ZDo6
bWFrZV91bmlxdWU8U2Vjb25kYXJ5PigpOwotICAgICAgICAvLyBJZiBhIGNvbXBpbGVyIHRocmVh
ZCBub3RpY2VzIHRoZSBtX290aGVyQ2FsbGVlcyBiZWluZyBub24tbnVsbCwgd2Ugd2FudCB0byBt
YWtlIHN1cmUKLSAgICAgICAgLy8gdGhhdCBpdCBzZWVzIGEgZnVsbHkgY3JlYXRlZCBvbmUuCi0g
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgfQotICAgIAotICAgIGlmICghbV9v
dGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0pIHsKLSAgICAgICAgbV9vdGhlckNhbGxl
ZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0gPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxTcGVjdHJ1bT4o
KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2Vk
LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5
U3BlY3RydW0tPmFkZCgKLSAgICAgICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNz
ZWRbaV0uY2FsbGVlKCksCi0gICAgICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vz
c2VkW2ldLmNvdW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSdyZSBzZWVpbmcgdGhpcyBwcm9maWxl
IGR1cmluZyB0aGlzIGxvZwotICAgICAgICAvLyBwcm9jZXNzaW5nIGl0ZXJhdGlvbi4KLSAgICAg
ICAgbWVyZ2VCYWNrTG9nLmFwcGVuZCh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgbV9vdGhlckNh
bGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0tPmFkZChjYWxsZWUpOwotfQotCi12b2lkIENhbGxF
ZGdlUHJvZmlsZTo6bWVyZ2VCYWNrKCkKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihtX2xvY2spOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKG1fb3RoZXJDYWxsZWVzKTsKLSAg
ICBSRUxFQVNFX0FTU0VSVChtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSk7Ci0g
ICAgCi0gICAgaWYgKCEhbV9wcmltYXJ5Q2FsbGVlKQotICAgICAgICBtX290aGVyQ2FsbGVlcy0+
bV90ZW1wb3JhcnlTcGVjdHJ1bS0+YWRkKG1fcHJpbWFyeUNhbGxlZSwgbV9udW1DYWxsc1RvUHJp
bWFyeSk7Ci0gICAgCi0gICAgaWYgKCFtX2Nsb3N1cmVzQXJlRGVzcGVjaWZpZWQpIHsKLSAgICAg
ICAgQ2FsbFNwZWN0cnVtIG5ld1NwZWN0cnVtOwotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDog
Km1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtKQotICAgICAgICAgICAgbmV3U3Bl
Y3RydW0uYWRkKGVudHJ5LmtleS5kZXNwZWNpZmllZENsb3N1cmUoKSwgZW50cnkudmFsdWUpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKG5ld1NwZWN0cnVtLnNpemUoKSA8IG1fb3RoZXJDYWxsZWVz
LT5tX3RlbXBvcmFyeVNwZWN0cnVtLT5zaXplKCkpIHsKLSAgICAgICAgICAgICptX290aGVyQ2Fs
bGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSA9IG5ld1NwZWN0cnVtOwotICAgICAgICAgICAgbV9j
bG9zdXJlc0FyZURlc3BlY2lmaWVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAg
ICBWZWN0b3I8Q2FsbFNwZWN0cnVtOjpLZXlBbmRDb3VudD4gbGlzdCA9IG1fb3RoZXJDYWxsZWVz
LT5tX3RlbXBvcmFyeVNwZWN0cnVtLT5idWlsZExpc3QoKTsKLSAgICBtX290aGVyQ2FsbGVlcy0+
bV90ZW1wb3JhcnlTcGVjdHJ1bSA9IG51bGxwdHI7Ci0gICAgCi0gICAgbV9wcmltYXJ5Q2FsbGVl
ID0gbGlzdC5sYXN0KCkua2V5OwotICAgIG1fbnVtQ2FsbHNUb1ByaW1hcnkgPSBsaXN0Lmxhc3Qo
KS5jb3VudDsKLSAgICBsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAKLSAgICBtX290aGVyQ2FsbGVl
cy0+bV9wcm9jZXNzZWQuY2xlYXIoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGNvdW50ID0gbWF4S25v
d25DYWxsZWVzOyBjb3VudC0tICYmICFsaXN0LmlzRW1wdHkoKTspIHsKLSAgICAgICAgbV9vdGhl
ckNhbGxlZXMtPm1fcHJvY2Vzc2VkLmFwcGVuZChDYWxsRWRnZShsaXN0Lmxhc3QoKS5rZXksIGxp
c3QubGFzdCgpLmNvdW50KSk7Ci0gICAgICAgIGxpc3QucmVtb3ZlTGFzdCgpOwotICAgIH0KLSAg
ICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaXN0LnNpemUoKTsgaS0tOykKLSAgICAgICAgbV9u
dW1DYWxsc1RvVW5rbm93bkNlbGwgKz0gbGlzdFtpXS5jb3VudDsKLX0KLQotdm9pZCBDYWxsRWRn
ZVByb2ZpbGU6OmZhZGVCeUhhbGYoKQotewotICAgIG1fbnVtQ2FsbHNUb1ByaW1hcnkgPj49IDE7
Ci0gICAgbV9udW1DYWxsc1RvTm90Q2VsbCA+Pj0gMTsKLSAgICBtX251bUNhbGxzVG9Vbmtub3du
Q2VsbCA+Pj0gMTsKLSAgICBtX3RvdGFsQ291bnQgPj49IDE7Ci0gICAgCi0gICAgaWYgKG1fb3Ro
ZXJDYWxsZWVzKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fb3RoZXJDYWxsZWVzLT5t
X3Byb2Nlc3NlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5t
X3Byb2Nlc3NlZFtpXSA9IENhbGxFZGdlKAotICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVz
LT5tX3Byb2Nlc3NlZFtpXS5jYWxsZWUoKSwKLSAgICAgICAgICAgICAgICBtX290aGVyQ2FsbGVl
cy0+bV9wcm9jZXNzZWRbaV0uY291bnQoKSA+PiAxKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtKSB7Ci0gICAgICAg
ICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKm1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0
cnVtKQotICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlID4+PSAxOwotICAgICAgICB9Ci0gICAg
fQotfQotCi1DYWxsRWRnZUxvZzo6Q2FsbEVkZ2VMb2coKQotICAgIDogbV9zY2FsZWRMb2dJbmRl
eChsb2dTaXplICogc2l6ZW9mKEVudHJ5KSkKLXsKLSAgICBBU1NFUlQoIShtX3NjYWxlZExvZ0lu
ZGV4ICUgc2l6ZW9mKEVudHJ5KSkpOwotfQotCi1DYWxsRWRnZUxvZzo6fkNhbGxFZGdlTG9nKCkg
eyB9Ci0KLWJvb2wgQ2FsbEVkZ2VMb2c6OmlzRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIE9wdGlv
bnM6OmVuYWJsZUNhbGxFZGdlUHJvZmlsaW5nKCkgJiYgT3B0aW9uczo6dXNlRlRMSklUKCk7Ci19
Ci0KLSNpZiBFTkFCTEUoSklUKQotCi1leHRlcm4gIkMiIEpJVF9PUEVSQVRJT04gdm9pZCBvcGVy
YXRpb25Qcm9jZXNzQ2FsbEVkZ2VMb2coQ2FsbEVkZ2VMb2cqKSBXVEZfSU5URVJOQUw7Ci1leHRl
cm4gIkMiIEpJVF9PUEVSQVRJT04gdm9pZCBvcGVyYXRpb25Qcm9jZXNzQ2FsbEVkZ2VMb2coQ2Fs
bEVkZ2VMb2cqIGxvZykKLXsKLSAgICBsb2ctPnByb2Nlc3NMb2coKTsKLX0KLQotdm9pZCBDYWxs
RWRnZUxvZzo6ZW1pdExvZ0NvZGUoQ0NhbGxIZWxwZXJzJiBqaXQsIENhbGxFZGdlUHJvZmlsZSYg
cHJvZmlsZSwgSlNWYWx1ZVJlZ3MgY2FsbGVlUmVncykKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBu
dW1iZXJPZkFyZ3VtZW50cyA9IDE7Ci0gICAgCi0gICAgR1BSUmVnIHNjcmF0Y2hHUFI7Ci0gICAg
aWYgKCFjYWxsZWVSZWdzLnVzZXMoR1BSSW5mbzo6cmVnVDApKQotICAgICAgICBzY3JhdGNoR1BS
ID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgZWxzZSBpZiAoIWNhbGxlZVJlZ3MudXNlcyhHUFJJbmZv
OjpyZWdUMSkpCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdUMTsKLSAgICBlbHNl
Ci0gICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdUMjsKLSAgICAKLSAgICBqaXQubG9h
ZDMyKCZtX3NjYWxlZExvZ0luZGV4LCBzY3JhdGNoR1BSKTsKLSAgICAKLSAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAgb2sgPSBqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVyczo6Tm9uWmVybywgc2Ny
YXRjaEdQUik7Ci0gICAgCi0gICAgQVNTRVJUX1VOVVNFRChudW1iZXJPZkFyZ3VtZW50cywgc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSA+PSAxICsgbnVtYmVyT2ZBcmd1bWVudHMpOwotICAgIAot
ICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRC
eXRlcygpKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgCi0gICAg
aml0LnN0b3JlVmFsdWUoY2FsbGVlUmVncywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIGppdC5z
ZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcykpOwotICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9w
ZXJhdGlvblByb2Nlc3NDYWxsRWRnZUxvZykpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBq
aXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2Yo
SlNWYWx1ZSkpLCBjYWxsZWVSZWdzKTsKLSAgICAKLSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSksIENDYWxsSGVscGVyczo6c3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIAotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGxvZ1NpemUgKiBzaXplb2YoRW50cnkpKSwgc2NyYXRjaEdQUik7Ci0gICAgb2su
bGluaygmaml0KTsKLQotICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihz
aXplb2YoRW50cnkpKSwgc2NyYXRjaEdQUik7Ci0gICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUiwg
Jm1fc2NhbGVkTG9nSW5kZXgpOwotICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKG1fbG9nKSwgc2NyYXRjaEdQUik7Ci0gICAgaml0LnN0b3JlVmFsdWUoY2FsbGVlUmVn
cywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihFbnRy
eSwgbV92YWx1ZSkpKTsKLSAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKCZwcm9maWxlKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9P
RkZTRVRPRihFbnRyeSwgbV9wcm9maWxlKSkpOwotfQotCi12b2lkIENhbGxFZGdlTG9nOjplbWl0
TG9nQ29kZSgKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCwgT3duUHRyPENhbGxFZGdlUHJvZmlsZT4m
IHByb2ZpbGVQb2ludGVyLCBKU1ZhbHVlUmVncyBjYWxsZWVSZWdzKQotewotICAgIGlmICghaXNF
bmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBwcm9maWxlUG9pbnRlci5jcmVh
dGVUcmFuc2FjdGlvbmFsbHkoKTsKLSAgICBlbWl0TG9nQ29kZShqaXQsICpwcm9maWxlUG9pbnRl
ciwgY2FsbGVlUmVncyk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi12b2lkIENhbGxF
ZGdlTG9nOjpwcm9jZXNzTG9nKCkKLXsKLSAgICBBU1NFUlQoIShtX3NjYWxlZExvZ0luZGV4ICUg
c2l6ZW9mKEVudHJ5KSkpOwotICAgIAotICAgIGlmIChPcHRpb25zOjpjYWxsRWRnZVByb2ZpbGVS
ZWFsbHlQcm9jZXNzZXNMb2coKSkgewotICAgICAgICBDYWxsRWRnZVByb2ZpbGVWZWN0b3IgbWVy
Z2VCYWNrTG9nOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9zY2FsZWRM
b2dJbmRleCAvIHNpemVvZihFbnRyeSk7IGkgPCBsb2dTaXplOyArK2kpCi0gICAgICAgICAgICBt
X2xvZ1tpXS5tX3Byb2ZpbGUtPmFkZChtX2xvZ1tpXS5tX3ZhbHVlLCBtZXJnZUJhY2tMb2cpOwot
ICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWVyZ2VCYWNrTG9nLnNpemUoKTsg
aS0tOykKLSAgICAgICAgICAgIG1lcmdlQmFja0xvZ1tpXS0+bWVyZ2VCYWNrKCk7Ci0gICAgfQot
ICAgIAotICAgIG1fc2NhbGVkTG9nSW5kZXggPSBsb2dTaXplICogc2l6ZW9mKEVudHJ5KTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsRWRnZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmgJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIENhbGxFZGdlUHJvZmlsZV9oCi0jZGVmaW5lIENhbGxFZGdlUHJv
ZmlsZV9oCi0KLSNpbmNsdWRlICJDYWxsRWRnZS5oIgotI2luY2x1ZGUgIkNhbGxWYXJpYW50Lmgi
Ci0jaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKLSNpbmNsdWRlICJHUFJJbmZvLmgiCi0j
aW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotY2xhc3MgQ0NhbGxIZWxwZXJzOwotY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9y
OwotCi1jbGFzcyBDYWxsRWRnZUxvZzsKLWNsYXNzIENhbGxFZGdlUHJvZmlsZTsKLXR5cGVkZWYg
VmVjdG9yPENhbGxFZGdlUHJvZmlsZSosIDEwPiBDYWxsRWRnZVByb2ZpbGVWZWN0b3I7Ci0KLWNs
YXNzIENhbGxFZGdlUHJvZmlsZSB7Ci1wdWJsaWM6Ci0gICAgQ2FsbEVkZ2VQcm9maWxlKCk7Ci0g
ICAgCi0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbnVtQ2FsbHNUb05vdENlbGwoKSBjb25zdCB7IHJl
dHVybiBtX251bUNhbGxzVG9Ob3RDZWxsOyB9Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbnVtQ2Fs
bHNUb1Vua25vd25DZWxsKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsc1RvVW5rbm93bkNlbGw7
IH0KLSAgICBDYWxsRWRnZUNvdW50VHlwZSBudW1DYWxsc1RvS25vd25DZWxscygpIGNvbnN0Owot
ICAgIAotICAgIENhbGxFZGdlQ291bnRUeXBlIHRvdGFsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBt
X3RvdGFsQ291bnQ7IH0KLSAgICAKLSAgICAvLyBDYWxsIHdoaWxlIGhvbGRpbmcgdGhlIG93bmlu
ZyBDb2RlQmxvY2sncyBsb2NrLgotICAgIENhbGxFZGdlTGlzdCBjYWxsRWRnZXMoKSBjb25zdDsK
LSAgICAKLSAgICB2b2lkIHZpc2l0V2VhaygpOwotICAgIAotcHJpdmF0ZToKLSAgICBmcmllbmQg
Y2xhc3MgQ2FsbEVkZ2VMb2c7Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heEtu
b3duQ2FsbGVlcyA9IDU7Ci0gICAgCi0gICAgdm9pZCBhZGQoSlNWYWx1ZSwgQ2FsbEVkZ2VQcm9m
aWxlVmVjdG9yJiBtZXJnZUJhY2tMb2cpOwotICAgIAotICAgIGJvb2wgd29ydGhEZXNwZWNpZnlp
bmcoKTsKLSAgICB2b2lkIGFkZFNsb3coQ2FsbFZhcmlhbnQsIENhbGxFZGdlUHJvZmlsZVZlY3Rv
ciYgbWVyZ2VCYWNrTG9nKTsKLSAgICB2b2lkIG1lcmdlQmFjaygpOwotICAgIHZvaWQgZmFkZUJ5
SGFsZigpOwotICAgIAotICAgIC8vIEl0J3MgY2hlYXBlciB0byBsZXQgdGhpcyBoYXZlIGl0cyBv
d24gbG9jay4gSXQgbmVlZHMgdG8gYmUgYWJsZSB0byBmaW5kIHdoaWNoIGxvY2sgdG8KLSAgICAv
LyBsb2NrLiBOb3JtYWxseSBpdCB3b3VsZCBsb2NrIHRoZSBvd25pbmcgQ29kZUJsb2NrJ3MgbG9j
aywgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBhCi0gICAgLy8gcG9pbnRlci13aWR0aCB3b3JkIHRv
IHBvaW50IGF0IHRoZSBDb2RlQmxvY2suIEhhdmluZyB0aGUgYnl0ZS1zaXplZCBsb2NrIGhlcmUg
aXMKLSAgICAvLyBjaGVhcGVyLiBIb3dldmVyLCB0aGlzIG1lYW5zIHRoYXQgdGhlIHJlbGF0aW9u
c2hpcCB3aXRoIHRoZSBDb2RlQmxvY2sgbG9jayBpczoKLSAgICAvLyBhY3F1aXJlIHRoZSBDb2Rl
QmxvY2sgbG9jayBiZWZvcmUgdGhpcyBvbmUuCi0gICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9j
ayBtX2xvY2s7Ci0gICAgCi0gICAgYm9vbCBtX2Nsb3N1cmVzQXJlRGVzcGVjaWZpZWQ7Ci0gICAg
Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV9udW1DYWxsc1RvUHJpbWFyeTsKLSAgICBDYWxsRWRn
ZUNvdW50VHlwZSBtX251bUNhbGxzVG9Ob3RDZWxsOwotICAgIENhbGxFZGdlQ291bnRUeXBlIG1f
bnVtQ2FsbHNUb1Vua25vd25DZWxsOwotICAgIENhbGxFZGdlQ291bnRUeXBlIG1fdG90YWxDb3Vu
dDsKLSAgICBDYWxsVmFyaWFudCBtX3ByaW1hcnlDYWxsZWU7Ci0gICAgCi0gICAgdHlwZWRlZiBT
cGVjdHJ1bTxDYWxsVmFyaWFudCwgQ2FsbEVkZ2VDb3VudFR5cGU+IENhbGxTcGVjdHJ1bTsKLSAg
ICAKLSAgICBzdHJ1Y3QgU2Vjb25kYXJ5IHsKLSAgICAgICAgVmVjdG9yPENhbGxFZGdlPiBtX3By
b2Nlc3NlZDsgLy8gUHJvY2Vzc2VkIGJ1dCBub3QgbmVjZXNzYXJpbHkgc29ydGVkLgotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbFNwZWN0cnVtPiBtX3RlbXBvcmFyeVNwZWN0cnVtOwotICAg
IH07Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNlY29uZGFyeT4gbV9vdGhlckNhbGxlZXM7
Ci19OwotCi1jbGFzcyBDYWxsRWRnZUxvZyB7Ci1wdWJsaWM6Ci0gICAgQ2FsbEVkZ2VMb2coKTsK
LSAgICB+Q2FsbEVkZ2VMb2coKTsKLQotICAgIHN0YXRpYyBib29sIGlzRW5hYmxlZCgpOwotICAg
IAotI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBlbWl0TG9nQ29kZShDQ2FsbEhlbHBlcnMmLCBD
YWxsRWRnZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyBjYWxsZWVSZWdzKTsgLy8gQXNzdW1lcyB0aGF0
IHN0YWNrIGlzIGFsaWduZWQsIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMgLSBvdGhlciB0aGFuIGNh
bGxlZUdQUiAtIGFyZSBjbG9iYmVyYWJsZSwgYW5kIHRoZSBwYXJhbWV0ZXIgc3BhY2UgaXMgaW4g
dXNlLgotICAgIAotICAgIC8vIFNhbWUgYXMgYWJvdmUgYnV0IGNyZWF0ZXMgYSBDYWxsRWRnZVBy
b2ZpbGUgaW5zdGFuY2UgaWYgb25lIGRpZCBub3QgYWxyZWFkeSBleGlzdC4gRG9lcwotICAgIC8v
IHRoaXMgaW4gYSB0aHJlYWQtc2FmZSBtYW5uZXIgYnkgY2FsbGluZyBPd25QdHI6OmNyZWF0ZVRy
YW5zYWN0aW9uYWxseS4KLSAgICB2b2lkIGVtaXRMb2dDb2RlKENDYWxsSGVscGVycyYsIE93blB0
cjxDYWxsRWRnZVByb2ZpbGU+JiwgSlNWYWx1ZVJlZ3MgY2FsbGVlUmVncyk7Ci0jZW5kaWYgLy8g
RU5BQkxFKEpJVCkKLSAgICAKLSAgICB2b2lkIHByb2Nlc3NMb2coKTsKLSAgICAKLXByaXZhdGU6
Ci0gICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBsb2dTaXplID0gMTAwMDA7Ci0gICAgCi0gICAgc3RydWN0IEVudHJ5IHsK
LSAgICAgICAgSlNWYWx1ZSBtX3ZhbHVlOwotICAgICAgICBDYWxsRWRnZVByb2ZpbGUqIG1fcHJv
ZmlsZTsKLSAgICB9OwotICAgIAotICAgIHVuc2lnbmVkIG1fc2NhbGVkTG9nSW5kZXg7Ci0gICAg
RW50cnkgbV9sb2dbbG9nU2l6ZV07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIENhbGxFZGdlUHJvZmlsZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZUlubGluZXMuaAkocmV2aXNpb24gMTc4
NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2FsbEVkZ2VQcm9maWxlSW5s
aW5lc19oCi0jZGVmaW5lIENhbGxFZGdlUHJvZmlsZUlubGluZXNfaAotCi0jaW5jbHVkZSAiQ2Fs
bEVkZ2VQcm9maWxlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1pbmxpbmUgQ2FsbEVkZ2VQcm9m
aWxlOjpDYWxsRWRnZVByb2ZpbGUoKQotICAgIDogbV9jbG9zdXJlc0FyZURlc3BlY2lmaWVkKGZh
bHNlKQotICAgICwgbV9udW1DYWxsc1RvUHJpbWFyeSgwKQotICAgICwgbV9udW1DYWxsc1RvTm90
Q2VsbCgwKQotICAgICwgbV9udW1DYWxsc1RvVW5rbm93bkNlbGwoMCkKLSAgICAsIG1fdG90YWxD
b3VudCgwKQotICAgICwgbV9wcmltYXJ5Q2FsbGVlKG51bGxwdHIpCi17Ci19Ci0KLUFMV0FZU19J
TkxJTkUgdm9pZCBDYWxsRWRnZVByb2ZpbGU6OmFkZChKU1ZhbHVlIHZhbHVlLCBDYWxsRWRnZVBy
b2ZpbGVWZWN0b3ImIG1lcmdlQmFja0xvZykKLXsKLSAgICB1bnNpZ25lZCBuZXdUb3RhbENvdW50
ID0gbV90b3RhbENvdW50ICsgMTsKLSAgICBpZiAoVU5MSUtFTFkoIW5ld1RvdGFsQ291bnQpKSB7
Ci0gICAgICAgIGZhZGVCeUhhbGYoKTsgLy8gVGFja2xlIG92ZXJmbG93cyBieSBkaXZpZGluZyBh
bGwgY291bnRzIGJ5IHR3by4KLSAgICAgICAgbmV3VG90YWxDb3VudCA9IG1fdG90YWxDb3VudCAr
IDE7Ci0gICAgfQotICAgIEFTU0VSVChuZXdUb3RhbENvdW50KTsKLSAgICBtX3RvdGFsQ291bnQg
PSBuZXdUb3RhbENvdW50OwotICAgIAotICAgIGlmIChVTkxJS0VMWSghdmFsdWUuaXNDZWxsKCkp
KSB7Ci0gICAgICAgIG1fbnVtQ2FsbHNUb05vdENlbGwrKzsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIENhbGxWYXJpYW50IGNhbGxlZSA9IENhbGxWYXJpYW50KHZhbHVlLmFzQ2VsbCgp
KTsKLSAgICAKLSAgICBpZiAobV9jbG9zdXJlc0FyZURlc3BlY2lmaWVkKQotICAgICAgICBjYWxs
ZWUgPSBjYWxsZWUuZGVzcGVjaWZpZWRDbG9zdXJlKCk7Ci0gICAgCi0gICAgaWYgKFVOTElLRUxZ
KCFtX3ByaW1hcnlDYWxsZWUpKSB7Ci0gICAgICAgIG1fcHJpbWFyeUNhbGxlZSA9IGNhbGxlZTsK
LSAgICAgICAgbV9udW1DYWxsc1RvUHJpbWFyeSA9IDE7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgICAgIAotICAgIGlmIChMSUtFTFkobV9wcmltYXJ5Q2FsbGVlID09IGNhbGxlZSkpIHsK
LSAgICAgICAgbV9udW1DYWxsc1RvUHJpbWFyeSsrOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgICAgICAKLSAgICBpZiAoVU5MSUtFTFkoIW1fb3RoZXJDYWxsZWVzKSkgewotICAgICAgICBh
ZGRTbG93KGNhbGxlZSwgbWVyZ2VCYWNrTG9nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAgICAgCi0gICAgQ2FsbFNwZWN0cnVtKiBzZWNvbmRhcnkgPSBtX290aGVyQ2FsbGVlcy0+bV90
ZW1wb3JhcnlTcGVjdHJ1bS5nZXQoKTsKLSAgICBpZiAoIXNlY29uZGFyeSkgewotICAgICAgICBh
ZGRTbG93KGNhbGxlZSwgbWVyZ2VCYWNrTG9nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAgICAgCi0gICAgc2Vjb25kYXJ5LT5hZGQoY2FsbGVlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
SlNDCi0KLSNlbmRpZiAvLyBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzX2gKLQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9u
IDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp2
aXNpdFdlYWsoUmVwYXRjaEJ1ZmYKIHsKICAgICBpZiAoaXNMaW5rZWQoKSkgewogICAgICAgICBp
ZiAoc3R1YikgewotICAgICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChzdHViLT5leGVjdXRh
YmxlKCkpKSB7CisgICAgICAgICAgICBpZiAoIXN0dWItPnZpc2l0V2VhaygpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgIkNsZWFyaW5nIGNsb3N1cmUgY2Fs
bCBmcm9tICIsICpyZXBhdGNoQnVmZmVyLmNvZGVCbG9jaygpLCAiIHRvICIsCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAx
Nzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxMiBAQAogI2lmbmRlZiBDYWxsTGlua0luZm9f
aAogI2RlZmluZSBDYWxsTGlua0luZm9faAogCi0jaW5jbHVkZSAiQ2FsbEVkZ2VQcm9maWxlLmgi
Ci0jaW5jbHVkZSAiQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkNvZGVMb2Nh
dGlvbi5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNsdWRlICJK
SVRXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiT3Bj
b2RlLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRl
ICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1NlbnRpbmVsTGlua2VkTGlzdC5oPgpAQCAtODIsNyArODEsNyBAQCBzdHJ1Y3QgQ2FsbExpbmtJ
bmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0
aE90aGVyOwogICAgIEpJVFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBjYWxsZWU7CiAgICAgV3Jp
dGVCYXJyaWVyPEpTRnVuY3Rpb24+IGxhc3RTZWVuQ2FsbGVlOwotICAgIFJlZlB0cjxDbG9zdXJl
Q2FsbFN0dWJSb3V0aW5lPiBzdHViOworICAgIFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZT4gc3R1YjsKICAgICBib29sIGlzRlRMIDogMTsKICAgICBib29sIGhhc1NlZW5TaG91bGRS
ZXBhdGNoIDogMTsKICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKQEAgLTkwLDcgKzg5LDYg
QEAgc3RydWN0IENhbGxMaW5rSW5mbyA6IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIHVuc2lnbmVk
IGNhbGxlZUdQUiA6IDg7CiAgICAgdW5zaWduZWQgc2xvd1BhdGhDb3VudDsKICAgICBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW47Ci0gICAgT3duUHRyPENhbGxFZGdlUHJvZmlsZT4gY2FsbEVkZ2VQcm9m
aWxlOwogCiAgICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIHN0dWIgfHwgY2FsbGVlOyB9CiAg
ICAgdm9pZCB1bmxpbmsoUmVwYXRjaEJ1ZmZlciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCShyZXZpc2lvbiAxNzg2OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIENhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0
YXR1cyhKU1ZhbHVlIHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBtX2VkZ2Vz
LmFwcGVuZChDYWxsRWRnZShDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSksIDEpKTsKKyAgICBt
X3ZhcmlhbnRzLmFwcGVuZChDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSkpOwogfQogCiBDYWxs
TGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJy
ZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCkKQEAgLTEyOCwyMyArMTI4LDYgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVGbwogICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoaXMsIGJ1
dCBhbnl0aW1lIHdlIGhhdmUgdG8gZGVidWcgdGhpcyBjb2RlLCBpdCBiZWNvbWVzIGluZGlzcGVu
c2FibGUuCiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIAotICAgIGlmIChP
cHRpb25zOjpjYWxsU3RhdHVzU2hvdWxkVXNlQ2FsbEVkZ2VQcm9maWxlKCkpIHsKLSAgICAgICAg
Ly8gQWx3YXlzIHRydXN0IHRoZSBjYWxsIGVkZ2UgcHJvZmlsZSBvdmVyIGFueXRoaW5nIGVsc2Ug
c2luY2UgdGhpcyBoYXMgcHJlY2lzZSBjb3VudHMuCi0gICAgICAgIC8vIEl0IGNhbiBtYWtlIHRo
ZSBiZXN0IHBvc3NpYmxlIGRlY2lzaW9uIGJlY2F1c2UgaXQgbmV2ZXIgImZvcmdldHMiIHdoYXQg
aGFwcGVuZWQgZm9yIGFueQotICAgICAgICAvLyBjYWxsLCB3aXRoIHRoZSBleGNlcHRpb24gb2Yg
ZmFkaW5nIG91dCB0aGUgY291bnRzIG9mIG9sZCBjYWxscyAoZm9yIGV4YW1wbGUgaWYgdGhlCi0g
ICAgICAgIC8vIGNvdW50ZXIgdHlwZSBpcyAxNi1iaXQgdGhlbiBjYWxscyB0aGF0IGhhcHBlbmVk
IG1vcmUgdGhhbiAyXjE2IGNhbGxzIGFnbyBhcmUgZ2l2ZW4gaGFsZgotICAgICAgICAvLyB3ZWln
aHQsIGFuZCB0aGlzIGNvbXBvdW5kcyBmb3IgZXZlcnkgMl4xNSBbc2ljXSBjYWxscyBhZnRlciB0
aGF0KS4gVGhlIGNvbWJpbmF0aW9uIG9mCi0gICAgICAgIC8vIGhpZ2ggZmlkZWxpdHkgZm9yIHJl
Y2VudCBjYWxscyBhbmQgZmFkaW5nIGZvciBvbGRlciBjYWxscyBtYWtlcyB0aGlzIHRoZSBtb3N0
IHVzZWZ1bAotICAgICAgICAvLyBtZWNoYW1pc20gb2YgY2hvb3NpbmcgaG93IHRvIG9wdGltaXpl
IGZ1dHVyZSBjYWxscy4KLSAgICAgICAgQ2FsbEVkZ2VQcm9maWxlKiBlZGdlUHJvZmlsZSA9IGNh
bGxMaW5rSW5mby5jYWxsRWRnZVByb2ZpbGUuZ2V0KCk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRG
ZW5jZSgpOwotICAgICAgICBpZiAoZWRnZVByb2ZpbGUpIHsKLSAgICAgICAgICAgIENhbGxMaW5r
U3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKGVkZ2VQcm9maWxlKTsK
LSAgICAgICAgICAgIGlmICghIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIHJldHVybiBjb21wdXRlRnJvbUNhbGxMaW5r
SW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CiB9CiAKQEAgLTE2Nyw4ICsxNTAsMTEgQEAgQ2Fs
bExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcgogICAgIGlmIChjYWxsTGlua0lu
Zm8uc2xvd1BhdGhDb3VudCA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3Vu
dCgpKQogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIAotICAgIGlmIChDbG9z
dXJlQ2FsbFN0dWJSb3V0aW5lKiBzdHViID0gY2FsbExpbmtJbmZvLnN0dWIuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBDYWxsTGlua1N0YXR1cyhzdHViLT5leGVjdXRhYmxlKCkpOworICAgIGlmIChQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViLmdldCgp
KSB7CisgICAgICAgIENhbGxMaW5rU3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFy
aWFudHMgPSBzdHViLT52YXJpYW50cygpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
ICAgICAKICAgICBKU0Z1bmN0aW9uKiB0YXJnZXQgPSBjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxs
ZWUuZ2V0KCk7CiAgICAgaWYgKCF0YXJnZXQpCkBAIC0xODAsMzQgKzE2Niw2IEBAIENhbGxMaW5r
U3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnIKICAgICByZXR1cm4gQ2FsbExpbmtTdGF0
dXModGFyZ2V0KTsKIH0KIAotQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVG
cm9tQ2FsbEVkZ2VQcm9maWxlKENhbGxFZGdlUHJvZmlsZSogZWRnZVByb2ZpbGUpCi17Ci0gICAg
Ly8gSW4gY2FzZXMgd2hlcmUgdGhlIGNhbGwgZWRnZSBwcm9maWxlIHNhdyBub3RoaW5nLCB1c2Ug
dGhlIENhbGxMaW5rSW5mbyBpbnN0ZWFkLgotICAgIGlmICghZWRnZVByb2ZpbGUtPnRvdGFsQ2Fs
bHMoKSkKLSAgICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7Ci0gICAgCi0gICAgLy8gVG8g
ZG8gYW55dGhpbmcgbWVhbmluZ2Z1bCwgd2UgcmVxdWlyZSB0aGF0IHRoZSBtYWpvcml0eSBvZiBj
YWxscyBhcmUgdG8gc29tZXRoaW5nIHdlCi0gICAgLy8ga25vdyBob3cgdG8gaGFuZGxlLgotICAg
IHVuc2lnbmVkIG51bUNhbGxzVG9Lbm93biA9IGVkZ2VQcm9maWxlLT5udW1DYWxsc1RvS25vd25D
ZWxscygpOwotICAgIHVuc2lnbmVkIG51bUNhbGxzVG9Vbmtub3duID0gZWRnZVByb2ZpbGUtPm51
bUNhbGxzVG9Ob3RDZWxsKCkgKyBlZGdlUHJvZmlsZS0+bnVtQ2FsbHNUb1Vua25vd25DZWxsKCk7
Ci0gICAgCi0gICAgLy8gV2UgcmVxdWlyZSB0aGF0IHRoZSBtYWpvcml0eSBvZiBjYWxscyB3ZXJl
IHRvIHNvbWV0aGluZyB0aGF0IHdlIGNvdWxkIHBvc3NpYmx5IGlubGluZS4KLSAgICBpZiAobnVt
Q2FsbHNUb0tub3duIDw9IG51bUNhbGxzVG9Vbmtub3duKQotICAgICAgICByZXR1cm4gdGFrZXNT
bG93UGF0aCgpOwotICAgIAotICAgIC8vIFdlIHJlcXVpcmUgdGhhdCB0aGUgbnVtYmVyIG9mIHN1
Y2ggY2FsbHMgaXMgZ3JlYXRlciB0aGFuIHNvbWUgbWluaW1hbCB0aHJlc2hvbGQsIHNvIHRoYXQg
d2UKLSAgICAvLyBhdm9pZCBpbmxpbmluZyBjb21wbGV0ZWx5IGNvbGQgY2FsbHMuCi0gICAgaWYg
KG51bUNhbGxzVG9Lbm93biA8IE9wdGlvbnM6OmZyZXF1ZW50Q2FsbFRocmVzaG9sZCgpKQotICAg
ICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwotICAgIAotICAgIENhbGxMaW5rU3RhdHVzIHJl
c3VsdDsKLSAgICByZXN1bHQubV9lZGdlcyA9IGVkZ2VQcm9maWxlLT5jYWxsRWRnZXMoKTsKLSAg
ICByZXN1bHQubV9jb3VsZFRha2VTbG93UGF0aCA9ICEhbnVtQ2FsbHNUb1Vua25vd247Ci0gICAg
cmVzdWx0Lm1fY2FuVHJ1c3RDb3VudHMgPSB0cnVlOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIGNv
bnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
LCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywKICAgICBFeGl0U2l0ZURhdGEgZXhpdFNpdGVE
YXRhKQpAQCAtMjgxLDggKzIzOSw4IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpj
b21wdXRlRm8KIAogYm9vbCBDYWxsTGlua1N0YXR1czo6aXNDbG9zdXJlQ2FsbCgpIGNvbnN0CiB7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9lZGdlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
aWYgKG1fZWRnZXNbaV0uY2FsbGVlKCkuaXNDbG9zdXJlQ2FsbCgpKQorICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX3ZhcmlhbnRz
W2ldLmlzQ2xvc3VyZUNhbGwoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0yOTAsMTggKzI0OCw3IEBAIGJvb2wgQ2FsbExpbmtTdGF0dXM6
OmlzQ2xvc3VyZUNhbGwoKSBjb24KIAogdm9pZCBDYWxsTGlua1N0YXR1czo6bWFrZUNsb3N1cmVD
YWxsKCkKIHsKLSAgICBBU1NFUlQoIW1faXNQcm92ZWQpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IG1fZWRnZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICBtX2VkZ2VzW2ldID0gbV9lZGdlc1tpXS5k
ZXNwZWNpZmllZENsb3N1cmUoKTsKLSAgICAKLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewot
ICAgICAgICAvLyBEb2luZyB0aGlzIHNob3VsZCBub3QgaGF2ZSBjcmVhdGVkIGR1cGxpY2F0ZXMs
IGJlY2F1c2UgdGhlIENhbGxFZGdlUHJvZmlsZQotICAgICAgICAvLyBzaG91bGQgZGVzcGVjaWZ5
IGNsb3N1cmVzIGlmIGRvaW5nIHNvIHdvdWxkIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGtub3duIGNh
bGxlZXMuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VkZ2VzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IG1fZWRnZXMu
c2l6ZSgpOyArK2opCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1fZWRnZXNbaV0uY2FsbGVlKCkg
IT0gbV9lZGdlc1tqXS5jYWxsZWUoKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV92YXJpYW50
cyA9IGRlc3BlY2lmaWVkVmFyaWFudExpc3QobV92YXJpYW50cyk7CiB9CiAKIHZvaWQgQ2FsbExp
bmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTMxOSw3ICsyNjYsNyBA
QCB2b2lkIENhbGxMaW5rU3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvCiAgICAgaWYgKG1fY291
bGRUYWtlU2xvd1BhdGgpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIkNvdWxkIFRha2UgU2xv
dyBQYXRoIik7CiAgICAgCi0gICAgb3V0LnByaW50KGxpc3REdW1wKG1fZWRnZXMpKTsKKyAgICBv
dXQucHJpbnQobGlzdER1bXAobV92YXJpYW50cykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1
cy5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmlu
ZSBDYWxsTGlua1N0YXR1c19oCiAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRl
ICJDYWxsVmFyaWFudC5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKQEAg
LTQ4LDcgKzQ5LDYgQEAgcHVibGljOgogICAgIENhbGxMaW5rU3RhdHVzKCkKICAgICAgICAgOiBt
X2NvdWxkVGFrZVNsb3dQYXRoKGZhbHNlKQogICAgICAgICAsIG1faXNQcm92ZWQoZmFsc2UpCi0g
ICAgICAgICwgbV9jYW5UcnVzdENvdW50cyhmYWxzZSkKICAgICB7CiAgICAgfQogICAgIApAQCAt
NjIsMTAgKzYyLDkgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IENhbGxMaW5rU3RhdHVzKEpTVmFs
dWUpOwogICAgIAogICAgIENhbGxMaW5rU3RhdHVzKENhbGxWYXJpYW50IHZhcmlhbnQpCi0gICAg
ICAgIDogbV9lZGdlcygxLCBDYWxsRWRnZSh2YXJpYW50LCAxKSkKKyAgICAgICAgOiBtX3Zhcmlh
bnRzKDEsIHZhcmlhbnQpCiAgICAgICAgICwgbV9jb3VsZFRha2VTbG93UGF0aChmYWxzZSkKICAg
ICAgICAgLCBtX2lzUHJvdmVkKGZhbHNlKQotICAgICAgICAsIG1fY2FuVHJ1c3RDb3VudHMoZmFs
c2UpCiAgICAgewogICAgIH0KICAgICAKQEAgLTEwOSwxOSArMTA4LDE4IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwg
Q29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwog
ICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhbV9lZGdlcy5pc0VtcHR5KCkg
fHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVy
biAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQogICAgIAog
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICAKICAg
ICBib29sIGNvdWxkVGFrZVNsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jb3VsZFRha2VTbG93
UGF0aDsgfQogICAgIAotICAgIENhbGxFZGdlTGlzdCBlZGdlcygpIGNvbnN0IHsgcmV0dXJuIG1f
ZWRnZXM7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlcy5zaXpl
KCk7IH0KLSAgICBDYWxsRWRnZSBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2VkZ2Vz
W2ldOyB9Ci0gICAgQ2FsbEVkZ2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVy
biBhdChpKTsgfQorICAgIENhbGxWYXJpYW50TGlzdCB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFyaWFudHM7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YXJp
YW50cy5zaXplKCk7IH0KKyAgICBDYWxsVmFyaWFudCBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiBtX3ZhcmlhbnRzW2ldOyB9CisgICAgQ2FsbFZhcmlhbnQgb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogICAgIGJvb2wgaXNQcm92ZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzUHJvdmVkOyB9Ci0gICAgYm9vbCBjYW5PcHRpbWl6ZSgpIGNvbnN0IHsgcmV0
dXJuICFtX2VkZ2VzLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgY2FuVHJ1c3RDb3VudHMoKSBjb25z
dCB7IHJldHVybiBtX2NhblRydXN0Q291bnRzOyB9CisgICAgYm9vbCBjYW5PcHRpbWl6ZSgpIGNv
bnN0IHsgcmV0dXJuICFtX3ZhcmlhbnRzLmlzRW1wdHkoKTsgfQogICAgIAogICAgIGJvb2wgaXND
bG9zdXJlQ2FsbCgpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgYW55IGNhbGxlZSBpcyBhIGNs
b3N1cmUgY2FsbC4KICAgICAKQEAgLTEzMiwxNSArMTMwLDEzIEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogI2lmIEVO
QUJMRShKSVQpCi0gICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9tQ2FsbEVkZ2VQ
cm9maWxlKENhbGxFZGdlUHJvZmlsZSopOwogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21w
dXRlRnJvbUNhbGxMaW5rSW5mbygKICAgICAgICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYs
IENhbGxMaW5rSW5mbyYpOwogI2VuZGlmCiAgICAgCi0gICAgQ2FsbEVkZ2VMaXN0IG1fZWRnZXM7
CisgICAgQ2FsbFZhcmlhbnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNs
b3dQYXRoOwogICAgIGJvb2wgbV9pc1Byb3ZlZDsKLSAgICBib29sIG1fY2FuVHJ1c3RDb3VudHM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmNwcAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTAsNSArNTAsMzIgQEAgdm9pZCBDYWxsVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQog
ICAgIG91dC5wcmludCgiRXhlY3V0YWJsZTogIiwgKmV4ZWN1dGFibGUoKSk7CiB9CiAKK0NhbGxW
YXJpYW50TGlzdCB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGNvbnN0IENhbGxWYXJpYW50TGlzdCYg
bGlzdCwgQ2FsbFZhcmlhbnQgdmFyaWFudFRvQWRkKQoreworICAgIEFTU0VSVCh2YXJpYW50VG9B
ZGQpOworICAgIENhbGxWYXJpYW50TGlzdCByZXN1bHQ7CisgICAgZm9yIChDYWxsVmFyaWFudCB2
YXJpYW50IDogbGlzdCkgeworICAgICAgICBBU1NFUlQodmFyaWFudCk7CisgICAgICAgIGlmICh2
YXJpYW50ID09IHZhcmlhbnRUb0FkZCkKKyAgICAgICAgICAgIHZhcmlhbnRUb0FkZCA9IENhbGxW
YXJpYW50KCk7CisgICAgICAgIGVsc2UgaWYgKHZhcmlhbnQuZGVzcGVjaWZpZWRDbG9zdXJlKCkg
PT0gdmFyaWFudFRvQWRkLmRlc3BlY2lmaWVkQ2xvc3VyZSgpKSB7CisgICAgICAgICAgICB2YXJp
YW50ID0gdmFyaWFudC5kZXNwZWNpZmllZENsb3N1cmUoKTsKKyAgICAgICAgICAgIHZhcmlhbnRU
b0FkZCA9IENhbGxWYXJpYW50KCk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmFwcGVuZCh2
YXJpYW50KTsKKyAgICB9CisgICAgaWYgKCEhdmFyaWFudFRvQWRkKQorICAgICAgICByZXN1bHQu
YXBwZW5kKHZhcmlhbnRUb0FkZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQ2FsbFZhcmlh
bnRMaXN0IGRlc3BlY2lmaWVkVmFyaWFudExpc3QoY29uc3QgQ2FsbFZhcmlhbnRMaXN0JiBsaXN0
KQoreworICAgIENhbGxWYXJpYW50TGlzdCByZXN1bHQ7CisgICAgZm9yIChDYWxsVmFyaWFudCB2
YXJpYW50IDogbGlzdCkKKyAgICAgICAgcmVzdWx0ID0gdmFyaWFudExpc3RXaXRoVmFyaWFudChy
ZXN1bHQsIHZhcmlhbnQuZGVzcGVjaWZpZWRDbG9zdXJlKCkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuaAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDEx
ICs1Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gICAgIHRoYW4gdGhlIGZhY3QgdGhhdCB0aGV5
IGRvbid0IGZhbGwgaW50byBhbnkgb2YgdGhlIGFib3ZlIGNhdGVnb3JpZXMuCiAvLwogLy8gVGhp
cyBjbGFzcyBzZXJ2ZXMgYXMgYSBraW5kIG9mIHVuaW9uIG92ZXIgdGhlc2UgZm91ciB0aGluZ3Mu
IEl0IGRvZXMgc28gYnkganVzdCBob2xkaW5nIGEKLS8vIEpTQ2VsbCouIFdlIGRldGVybWluZSB3
aGljaCBvZiB0aGUgbW9kZXMgaXRzIGluIGJ5IGRvaW5nIHR5cGUgY2hlY2tzIG9uIHRoZSBjZWxs
LiBOb3RlIHRoYXQgdGhlcmUKLS8vIGlzIG5vIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGZvciB0aGUg
Y2VsbCBiZWNhdXNlIHRoaXMgY2xhc3MgaXMgYWx3YXlzIHVzZWQgaW4gY29udGV4dHMgd2hlcmUg
d2UKLS8vIGVpdGhlciBkbyBjdXN0b20gd2VhayByZWZlcmVuY2UgbG9naWMgb3ZlciBpbnN0YW5j
ZXMgb2YgdGhpcyBjbGFzcyAoc2VlIENhbGxFZGdlUHJvZmlsZSksIG9yIHdlCi0vLyBhcmUgaW5z
aWRlIHRoZSBjb21waWxlciBhbmQgd2UgYXNzdW1lIHRoYXQgdGhlIGNvbXBpbGVyIHJ1bnMgaW4g
YmV0d2VlbiBjb2xsZWN0aW9ucyBhbmQgc28gY2FuCi0vLyB0b3VjaCB0aGUgaGVhcCB3aXRob3V0
IG5vdGlmeWluZyBhbnlvbmUuCisvLyBKU0NlbGwqLiBXZSBkZXRlcm1pbmUgd2hpY2ggb2YgdGhl
IG1vZGVzIGl0cyBpbiBieSBkb2luZyB0eXBlIGNoZWNrcyBvbiB0aGUgY2VsbC4gTm90ZSB0aGF0
IHdlCisvLyBjYW5ub3QgdXNlIFdyaXRlQmFycmllcjw+IGhlcmUgYmVjYXVzZSB0aGlzIGdldHMg
dXNlZCBpbnNpZGUgdGhlIGNvbXBpbGVyLgogCiBjbGFzcyBDYWxsVmFyaWFudCB7CiBwdWJsaWM6
CkBAIC0xNzMsMTMgKzE3MCwxOSBAQCBwcml2YXRlOgogICAgIEpTQ2VsbCogbV9jYWxsZWU7CiB9
OwogCisvLyBSZXR1cm5zIGEgbmV3IHZhcmlhbnQgbGlzdCBieSBhdHRlbXB0aW5nIHRvIGVpdGhl
ciBhcHBlbmQgdGhlIGdpdmVuIHZhcmlhbnQgb3IgbWVyZ2UgaXQgd2l0aCBvbmUKKy8vIG9mIHRo
ZSB2YXJpYW50cyB3ZSBhbHJlYWR5IGhhdmUgYnkgZGVzcGVjaWZ5aW5nIGNsb3N1cmVzLgorQ2Fs
bFZhcmlhbnRMaXN0IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQoY29uc3QgQ2FsbFZhcmlhbnRMaXN0
JiwgQ2FsbFZhcmlhbnQpOworCitDYWxsVmFyaWFudExpc3QgZGVzcGVjaWZpZWRWYXJpYW50TGlz
dChjb25zdCBDYWxsVmFyaWFudExpc3QmKTsKKwogc3RydWN0IENhbGxWYXJpYW50SGFzaCB7CiAg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ2FsbFZhcmlhbnQmIGtleSkgeyByZXR1cm4g
a2V5Lmhhc2goKTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENhbGxWYXJpYW50JiBh
LCBjb25zdCBDYWxsVmFyaWFudCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAotdHlw
ZWRlZiBWZWN0b3I8Q2FsbFZhcmlhbnQsIDE+IENhbGxWYXJpYW50TGlzdDsKK3R5cGVkZWYgVmVj
dG9yPENhbGxWYXJpYW50LCAyPiBDYWxsVmFyaWFudExpc3Q7CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwLCAyMDEyLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENh
bWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
QEAgLTIxNzgsNiArMjE3OCw4IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAgLy8gZGVz
dHJ1Y3RvciB3aWxsIHRyeSB0byByZW1vdmUgbm9kZXMgZnJvbSBvdXIgKG5vIGxvbmdlciB2YWxp
ZCkgbGlua2VkIGxpc3QuCiAgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1f
aW5jb21pbmdDYWxscy5lbmQoKSkKICAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnJl
bW92ZSgpOworICAgIHdoaWxlIChtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9
IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5nUG9s
eW1vcnBoaWNDYWxscy5iZWdpbigpLT5yZW1vdmUoKTsKICAgICAKICAgICAvLyBOb3RlIHRoYXQg
b3VyIG91dGdvaW5nIGNhbGxzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3Mn
CiAgICAgLy8gbV9pbmNvbWluZ0NhbGxzIGxpbmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRp
b24gb2YgdGhlIH5DYWxsTGlua0luZm8KQEAgLTMwNDQsNiArMzA0NiwxMiBAQCB2b2lkIENvZGVC
bG9jazo6bGlua0luY29taW5nQ2FsbChFeGVjU3RhCiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNh
bGxlckZyYW1lKTsKICAgICBtX2luY29taW5nQ2FsbHMucHVzaChpbmNvbWluZyk7CiB9CisKK3Zv
aWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiBjYWxs
ZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSogaW5jb21pbmcpCit7CisgICAgbm90aWNlSW5j
b21pbmdDYWxsKGNhbGxlckZyYW1lKTsKKyAgICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5w
dXNoKGluY29taW5nKTsKK30KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB2b2lkIENvZGVCbG9j
azo6dW5saW5rSW5jb21pbmdDYWxscygpCkBAIC0zMDUxLDExICszMDU5LDEzIEBAIHZvaWQgQ29k
ZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKICAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50
Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKICAgICAgICAgbV9p
bmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAg
ICBpZiAobV9pbmNvbWluZ0NhbGxzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9pbmNvbWluZ0NhbGxz
LmlzRW1wdHkoKSB8fCBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIodGhpcyk7CiAgICAg
d2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkK
ICAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluayhyZXBhdGNoQnVmZmVyKTsK
KyAgICB3aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ1BvbHltb3JwaGlj
Q2FsbHMuYmVnaW4oKS0+dW5saW5rKHJlcGF0Y2hCdWZmZXIpOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDE3ODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDExICsyMjksNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB1bmxpbmtDYWxscygpOwogICAgICAgICAKICAgICB2b2lkIGxpbmtJbmNvbWluZ0Nh
bGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKik7Ci0gICAgICAgIAotICAg
IGJvb2wgaXNJbmNvbWluZ0NhbGxBbHJlYWR5TGlua2VkKENhbGxMaW5rSW5mbyogaW5jb21pbmcp
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbmNvbWluZ0NhbGxzLmlzT25MaXN0KGluY29taW5n
KTsKLSAgICB9CisgICAgdm9pZCBsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRl
KiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSopOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiAKICAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwg
TExJbnRDYWxsTGlua0luZm8qKTsKQEAgLTEwNzcsNiArMTA3Myw3IEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1f
Y2FsbExpbmtJbmZvczsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNp
Y1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2FsbHM7CisgICAgU2Vu
dGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIEJhc2ljUmF3U2VudGluZWxOb2Rl
PFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxsczsKICNlbmRp
ZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOwog
I2lmIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTc4
NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY4LDE0ICsxOTY4LDYgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBQcm9maWxlZENhbGw6Ci0g
ICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKLSAgICAgICAgaWYgKGZvck5vZGUobV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKSkubV92YWx1ZSkKLSAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3Ao
KTsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIENo
ZWNrQmFkQ2VsbDoKICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjc1LDcgKzY3NSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmIChwYXJhbWV0ZXJTbG90cyA+IG1fcGFyYW1ldGVyU2xvdHMpCiAgICAgICAgICAgICBt
X3BhcmFtZXRlclNsb3RzID0gcGFyYW1ldGVyU2xvdHM7CiAKLSAgICAgICAgaW50IGR1bW15VGhp
c0FyZ3VtZW50ID0gb3AgPT0gQ2FsbCB8fCBvcCA9PSBOYXRpdmVDYWxsIHx8IG9wID09IFByb2Zp
bGVkQ2FsbCA/IDAgOiAxOworICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBvcCA9PSBD
YWxsIHx8IG9wID09IE5hdGl2ZUNhbGwgPyAwIDogMTsKICAgICAgICAgZm9yIChpbnQgaSA9IDAg
KyBkdW1teVRoaXNBcmd1bWVudDsgaSA8IGFyZ0NvdW50OyArK2kpCiAgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZz
ZXQpKSk7CiAKQEAgLTEwNDQsMTggKzEwNDQsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVDYWxsKAogICAgIGlmIChjYWxsVGFyZ2V0LT5oYXNDb25zdGFudCgpKQogICAgICAgICBjYWxs
TGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKS5zZXRJ
c1Byb3ZlZCh0cnVlKTsKICAgICAKLSAgICBpZiAoKCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6
ZSgpIHx8IGNhbGxMaW5rU3RhdHVzLnNpemUoKSAhPSAxKQotICAgICAgICAmJiAhaXNGVEwobV9n
cmFwaC5tX3BsYW4ubW9kZSkgJiYgT3B0aW9uczo6dXNlRlRMSklUKCkKLSAgICAgICAgJiYgSW5s
aW5lQ2FsbEZyYW1lOjppc05vcm1hbENhbGwoa2luZCkKLSAgICAgICAgJiYgQ2FsbEVkZ2VMb2c6
OmlzRW5hYmxlZCgpCi0gICAgICAgICYmIE9wdGlvbnM6OmRmZ0RvZXNDYWxsRWRnZVByb2ZpbGlu
ZygpKSB7Ci0gICAgICAgIEFTU0VSVChvcCA9PSBDYWxsIHx8IG9wID09IENvbnN0cnVjdCk7Ci0g
ICAgICAgIGlmIChvcCA9PSBDYWxsKQotICAgICAgICAgICAgb3AgPSBQcm9maWxlZENhbGw7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wID0gUHJvZmlsZWRDb25zdHJ1Y3Q7Ci0gICAgfQot
ICAgIAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewogICAgICAgICAv
LyBPZGRseSwgdGhpcyBjb25mbGF0ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVkIHdpdGgg
Y2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2llbnRseSBwb2x5bW9ycGhpY2FsbHkKICAgICAgICAg
Ly8gdGhhdCB3ZSBjYW5ub3Qgb3B0aW1pemUgdGhlbS4KQEAgLTEwNzYsMTcgKzEwNjQsMTcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICAKICNpZiBFTkFCTEUoRlRMX05B
VElWRV9DQUxMX0lOTElOSU5HKQogICAgIGlmIChpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSAm
JiBPcHRpb25zOjpvcHRpbWl6ZU5hdGl2ZUNhbGxzKCkgJiYgY2FsbExpbmtTdGF0dXMuc2l6ZSgp
ID09IDEgJiYgIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCkpIHsKLSAgICAgICAg
Q2FsbFZhcmlhbnQgY2FsbGVlID0gY2FsbExpbmtTdGF0dXNbMF0uY2FsbGVlKCk7CisgICAgICAg
IENhbGxWYXJpYW50IGNhbGxlZSA9IGNhbGxMaW5rU3RhdHVzWzBdOwogICAgICAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS5mdW5jdGlvbigpOwogICAgICAgICBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6
YXRpb25LaW5kRm9yKGtpbmQpOwogICAgICAgICBpZiAoZnVuY3Rpb24gJiYgZnVuY3Rpb24tPmlz
SG9zdEZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsZWUs
IGNhbGxUYXJnZXQsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAg
ICAgICAgY2FsbE9wSW5mbyA9IE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShmdW5jdGlvbikpOwogCi0g
ICAgICAgICAgICBpZiAob3AgPT0gQ2FsbCB8fCBvcCA9PSBQcm9maWxlZENhbGwpCisgICAgICAg
ICAgICBpZiAob3AgPT0gQ2FsbCkKICAgICAgICAgICAgICAgICBvcCA9IE5hdGl2ZUNhbGw7CiAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQob3AgPT0gQ29uc3RydWN0
IHx8IG9wID09IFByb2ZpbGVkQ29uc3RydWN0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3Ag
PT0gQ29uc3RydWN0KTsKICAgICAgICAgICAgICAgICBvcCA9IE5hdGl2ZUNvbnN0cnVjdDsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTQyNiwxMyArMTQxNCwxMyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gdGhpcyBpbiBjYXNlcyB3aGVy
ZSB3ZSBkb24ndCBuZWVkIGNvbnRyb2wgZmxvdyBkaWFtb25kcyB0byBjaGVjayB0aGUgY2FsbGVl
LgogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKSAmJiBjYWxsTGlu
a1N0YXR1cy5zaXplKCkgPT0gMSkgewogICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoCi0gICAg
ICAgICAgICBjYWxsTGlua1N0YXR1c1swXS5jYWxsZWUoKSwgY2FsbFRhcmdldE5vZGUsIHJlZ2lz
dGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOworICAgICAgICAgICAgY2FsbExpbmtTdGF0
dXNbMF0sIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwgc3BlY2lhbGl6YXRpb25LaW5k
KTsKICAgICAgICAgYm9vbCByZXN1bHQgPSBhdHRlbXB0VG9JbmxpbmVDYWxsKAotICAgICAgICAg
ICAgY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzWzBdLmNhbGxl
ZSgpLCByZWdpc3Rlck9mZnNldCwKKyAgICAgICAgICAgIGNhbGxUYXJnZXROb2RlLCByZXN1bHRP
cGVyYW5kLCBjYWxsTGlua1N0YXR1c1swXSwgcmVnaXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyRG9lc05v
cm1hbExpbmtpbmcsIHByZWRpY3Rpb24sCiAgICAgICAgICAgICBpbmxpbmluZ0JhbGFuY2UpOwog
ICAgICAgICBpZiAoIXJlc3VsdCAmJiAhY2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkKLSAgICAg
ICAgICAgIHVuZG9GdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1swXS5jYWxsZWUoKSk7Cisg
ICAgICAgICAgICB1bmRvRnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXNbMF0pOwogICAgICAg
ICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgZGF0YUxvZygiRG9uZSBpbmxpbmluZyAoc2lt
cGxlKS5cbiIpOwogICAgICAgICAgICAgZGF0YUxvZygiU3RhY2s6ICIsIGN1cnJlbnRDb2RlT3Jp
Z2luKCksICJcbiIpOwpAQCAtMTQ2Miw3ICsxNDUwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIGJvb2wgYWxsQXJlQ2xvc3VyZUNhbGxzID0gdHJ1ZTsK
ICAgICBib29sIGFsbEFyZURpcmVjdENhbGxzID0gdHJ1ZTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBjYWxsTGlua1N0YXR1cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKGNhbGxMaW5rU3Rh
dHVzW2ldLmNhbGxlZSgpLmlzQ2xvc3VyZUNhbGwoKSkKKyAgICAgICAgaWYgKGNhbGxMaW5rU3Rh
dHVzW2ldLmlzQ2xvc3VyZUNhbGwoKSkKICAgICAgICAgICAgIGFsbEFyZURpcmVjdENhbGxzID0g
ZmFsc2U7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFsbEFyZUNsb3N1cmVDYWxscyA9IGZh
bHNlOwpAQCAtMTUzMyw3ICsxNTIxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5s
aW5pbmcoTm9kZQogICAgICAgICBOb2RlKiBteUNhbGxUYXJnZXROb2RlID0gZ2V0RGlyZWN0KGNh
bGxlZVJlZyk7CiAgICAgICAgIAogICAgICAgICBib29sIGlubGluaW5nUmVzdWx0ID0gYXR0ZW1w
dFRvSW5saW5lQ2FsbCgKLSAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJh
bmQsIGNhbGxMaW5rU3RhdHVzW2ldLmNhbGxlZSgpLCByZWdpc3Rlck9mZnNldCwKKyAgICAgICAg
ICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzW2ldLCBy
ZWdpc3Rlck9mZnNldCwKICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBu
ZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJMaW5rc01hbnVhbGx5LCBwcmVkaWN0aW9uLAogICAgICAg
ICAgICAgaW5saW5pbmdCYWxhbmNlKTsKICAgICAgICAgCkBAIC0xNTUyLDEwICsxNTQwLDEwIEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgCiAgICAg
ICAgIEpTQ2VsbCogdGhpbmdUb0Nhc2VPbjsKICAgICAgICAgaWYgKGFsbEFyZURpcmVjdENhbGxz
KQotICAgICAgICAgICAgdGhpbmdUb0Nhc2VPbiA9IGNhbGxMaW5rU3RhdHVzW2ldLmNhbGxlZSgp
Lm5vbkV4ZWN1dGFibGVDYWxsZWUoKTsKKyAgICAgICAgICAgIHRoaW5nVG9DYXNlT24gPSBjYWxs
TGlua1N0YXR1c1tpXS5ub25FeGVjdXRhYmxlQ2FsbGVlKCk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgQVNTRVJUKGFsbEFyZUNsb3N1cmVDYWxscyk7Ci0gICAgICAgICAgICB0aGluZ1Rv
Q2FzZU9uID0gY2FsbExpbmtTdGF0dXNbaV0uY2FsbGVlKCkuZXhlY3V0YWJsZSgpOworICAgICAg
ICAgICAgdGhpbmdUb0Nhc2VPbiA9IGNhbGxMaW5rU3RhdHVzW2ldLmV4ZWN1dGFibGUoKTsKICAg
ICAgICAgfQogICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKG1fZ3JhcGguZnJl
ZXplKHRoaW5nVG9DYXNlT24pLCBibG9jay5nZXQoKSkpOwogICAgICAgICBtX2N1cnJlbnRJbmRl
eCA9IG5leHRPZmZzZXQ7CkBAIC0xNTY3LDcgKzE1NTUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIGxhbmRpbmdCbG9ja3MuYXBwZW5kKG1fY3Vy
cmVudEJsb2NrKTsKIAogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2co
IkZpbmlzaGVkIGlubGluaW5nICIsIGNhbGxMaW5rU3RhdHVzW2ldLmNhbGxlZSgpLCAiIGF0ICIs
IGN1cnJlbnRDb2RlT3JpZ2luKCksICIuXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkZpbmlz
aGVkIGlubGluaW5nICIsIGNhbGxMaW5rU3RhdHVzW2ldLCAiIGF0ICIsIGN1cnJlbnRDb2RlT3Jp
Z2luKCksICIuXG4iKTsKICAgICB9CiAgICAgCiAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IHNsb3dQ
YXRoQmxvY2sgPSBhZG9wdFJlZigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDggKzM2Myw2IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEFycmF5UG9w
OgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoKLSAgICBjYXNlIFByb2ZpbGVk
Q2FsbDoKLSAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoK
ICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsMjAgKzQy
MCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAg
ICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3Rh
dGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5tX3ZhbHVlKQotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAv
LyBJZiB3ZSB3ZXJlIGFibGUgdG8gcHJvdmUgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY29uc3RhbnQg
dGhlbiB0aGUgbm9ybWFsIGNhbGwKLSAgICAgICAgICAgICAgICAvLyBpbmxpbmUgY2FjaGUgd2ls
bCByZWNvcmQgdGhpcyBjYWxsZWUuIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRv
IGRvIGFueQotICAgICAgICAgICAgICAgIC8vIGFkZGl0aW9uYWwgcHJvZmlsaW5nLgotICAgICAg
ICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOwotICAgICAgICAg
ICAgICAgIG5vZGUtPnNldE9wKG5vZGUtPm9wKCkgPT0gUHJvZmlsZWRDYWxsID8gQ2FsbCA6IENv
bnN0cnVjdCk7Ci0gICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgs
NiBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBDb25z
dHJ1Y3Q6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0Ogot
ICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6CiAgICAg
Y2FzZSBCcmVha3BvaW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJv
ZmlsZURpZENhbGw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3Bw
CShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDIwICs3OSwxNyBAQCBzdGF0aWMgQ29tcGlsYXRp
b25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgaWYgKG1vZGUgPT0gREZHTW9kZSkgewogICAgICAg
ICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRD
VElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7Ci0gICAgICAgIHZtLmdldENUSVN0
dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAgICB2bS5nZXRDVElTdHVi
KGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHZtLmdldENUSVN0
dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHZtLmdldENUSVN0dWIodmly
dHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKTsKICAgICB9IGVsc2UgewogICAgICAgICB2bS5n
ZXRDVElTdHViKGxpbmtDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7CiAgICAg
ICAgIHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5l
cmF0b3IpOwotICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2
ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9y
cGhpY0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKICAgICAgICAgdm0uZ2V0
Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOwogICAg
ICAgICB2bS5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5r
R2VuZXJhdG9yKTsKICAgICB9CiAgICAgCi0gICAgaWYgKENhbGxFZGdlTG9nOjppc0VuYWJsZWQo
KSkKLSAgICAgICAgdm0uZW5zdXJlQ2FsbEVkZ2VMb2coKS5wcm9jZXNzTG9nKCk7Ci0KICAgICBp
ZiAodm0udHlwZVByb2ZpbGVyKCkpCiAgICAgICAgIHZtLnR5cGVQcm9maWxlckxvZygpLT5wcm9j
ZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIlByZXBhcmluZyBmb3IgREZHIGNvbXBpbGF0aW9u
LiIpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwMiw4ICsxMjAyLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CiAgICAgICAg
IGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgICAgIGNhc2UgUHJvZmls
ZWRDYWxsOgotICAgICAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OgogICAgICAgICBjYXNlIFBy
b2ZpbGVDb250cm9sRmxvdzoKICAgICAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgICAgICBjYXNl
IE5hdGl2ZUNvbnN0cnVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDggKzIxNyw2IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBDYWxscy4gKi9cCiAgICAgbWFjcm8oQ2FsbCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNs
b2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCi0gICAg
bWFjcm8oUHJvZmlsZWRDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAotICAgIG1hY3JvKFByb2ZpbGVkQ29u
c3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3Mg
fCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKE5hdGl2ZUNhbGwsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxk
KSBcCiAgICAgbWFjcm8oTmF0aXZlQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg4LDggKzE4OCw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0RGly
ZWN0UG5hbWU6CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0g
ICAgICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgICAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0
OgogICAgICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0
OgogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTg5LDggKzE4OSw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QK
ICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25z
dHJ1Y3Q6Ci0gICAgY2FzZSBQcm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVj
dDoKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2UgTmV3
QXJyYXlXaXRoU2l6ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjM4LDkgKzYzOCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNj
U3RyaWN0RXEKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsK
LSAgICBib29sIGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbCB8fCBub2RlLT5vcCgpID09IFBy
b2ZpbGVkQ2FsbDsKKyAgICBib29sIGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbDsKICAgICBp
ZiAoIWlzQ2FsbCkKLSAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0IHx8IG5v
ZGUtPm9wKCkgPT0gUHJvZmlsZWRDb25zdHJ1Y3QpOworICAgICAgICBBU1NFUlQobm9kZS0+b3Ao
KSA9PSBDb25zdHJ1Y3QpOwogCiAgICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJn
dW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCiAgICAgLy8gZm9y
IGl0LgpAQCAtNjg5LDExICs2ODksNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlCiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9qaXQuY29kZUJsb2Nr
KCktPmFkZENhbGxMaW5rSW5mbygpOwogCi0gICAgaWYgKG5vZGUtPm9wKCkgPT0gUHJvZmlsZWRD
YWxsIHx8IG5vZGUtPm9wKCkgPT0gUHJvZmlsZWRDb25zdHJ1Y3QpIHsKLSAgICAgICAgbV9qaXQu
dm0oKS0+Y2FsbEVkZ2VMb2ctPmVtaXRMb2dDb2RlKAotICAgICAgICAgICAgbV9qaXQsIGluZm8t
PmNhbGxFZGdlUHJvZmlsZSwgY2FsbGVlLmpzVmFsdWVSZWdzKCkpOwotICAgIH0KLSAgICAKICAg
ICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoTm90Q2VsbChjYWxsZWUuanNWYWx1ZVJlZ3MoKSkpOwog
ICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBjYWxsZWVQYXlsb2FkR1BSLCB0YXJnZXRUb0NoZWNrKSk7CiAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVQYXlsb2FkR1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZXN1bHRQYXlsb2FkR1BSKTsKQEAg
LTQxNzIsOCArNDE2Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoKLSAgICBjYXNlIFByb2Zp
bGVkQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OgogICAgICAgICBlbWl0Q2FsbChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTc4NjkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjI0LDkgKzYyNCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNj
U3RyaWN0RXEKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsK
LSAgICBib29sIGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbCB8fCBub2RlLT5vcCgpID09IFBy
b2ZpbGVkQ2FsbDsKKyAgICBib29sIGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbDsKICAgICBp
ZiAoIWlzQ2FsbCkKLSAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2Rl
LT5vcCgpID09IENvbnN0cnVjdCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KTsK
KyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENv
bnN0cnVjdCk7CiAgICAgCiAgICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1l
bnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCiAgICAgLy8gZm9yIGl0
LgpAQCAtNjY5LDExICs2NjksNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBtX2ppdC5jb2Rl
QmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7CiAgICAgCi0gICAgaWYgKG5vZGUtPm9wKCkgPT0g
UHJvZmlsZWRDYWxsIHx8IG5vZGUtPm9wKCkgPT0gUHJvZmlsZWRDb25zdHJ1Y3QpIHsKLSAgICAg
ICAgbV9qaXQudm0oKS0+Y2FsbEVkZ2VMb2ctPmVtaXRMb2dDb2RlKAotICAgICAgICAgICAgbV9q
aXQsIGNhbGxMaW5rSW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBKU1ZhbHVlUmVncyhjYWxsZWVHUFIp
KTsKLSAgICB9Ci0KICAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpOwogCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Nj
b3BlKSksIHJlc3VsdEdQUik7CkBAIC00MjMzLDggKzQyMjgsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25z
dHJ1Y3Q6Ci0gICAgY2FzZSBQcm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVj
dDoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBD
aGVja0luamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAsMTcgKzUwLDEzIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFPcHRpb25zOjp1
c2VGVExKSVQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAg
IGlmIChtX2dyYXBoLm1fcHJvZmlsZWRCbG9jay0+bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pIHsK
LSAgICAgICAgICAgIHJlbW92ZUZUTFByb2ZpbGluZygpOworICAgICAgICBpZiAobV9ncmFwaC5t
X3Byb2ZpbGVkQmxvY2stPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9CiAgICAgICAgIAogI2lmIEVOQUJMRShGVExfSklUKQogICAg
ICAgICBGVEw6OkNhcGFiaWxpdHlMZXZlbCBsZXZlbCA9IEZUTDo6Y2FuQ29tcGlsZShtX2dyYXBo
KTsKLSAgICAgICAgaWYgKGxldmVsID09IEZUTDo6Q2Fubm90Q29tcGlsZSkgewotICAgICAgICAg
ICAgcmVtb3ZlRlRMUHJvZmlsaW5nKCk7CisgICAgICAgIGlmIChsZXZlbCA9PSBGVEw6OkNhbm5v
dENvbXBpbGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmICghT3B0aW9uczo6ZW5hYmxlT1NSRW50cnlUb0ZUTCgpKQogICAgICAgICAg
ICAgbGV2ZWwgPSBGVEw6OkNhbkNvbXBpbGU7CkBAIC0xMjIsMzIgKzExOCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogICAgIH0K
LQotcHJpdmF0ZToKLSAgICB2b2lkIHJlbW92ZUZUTFByb2ZpbGluZygpCi0gICAgewotICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2Nr
SW5kZXgtLTspIHsKLSAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKLSAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBQcm9maWxl
ZENhbGw6Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKENhbGwpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Y2FzZSBQcm9maWxlZENvbnN0cnVjdDoKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3Ao
Q29uc3RydWN0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KIH07
CiAKIGJvb2wgcGVyZm9ybVRpZXJVcENoZWNrSW5qZWN0aW9uKEdyYXBoJiBncmFwaCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlz
aW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDExICsxNzYsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0
eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoK
ICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICBicmVhazsKLSAgICBjYXNlIFByb2Zp
bGVkQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OgotICAgICAgICAvLyBUaGVzZSBh
cmUgT0sgbm90IGJlY2F1c2UgdGhlIEZUTCBjYW4gc3VwcG9ydCB0aGVtLCBidXQgYmVjYXVzZSBp
ZiB0aGUgREZHIHNlZXMgb25lIG9mCi0gICAgICAgIC8vIHRoZXNlIHRoZW4gdGhlIEZUTCB3aWxs
IHNlZSBhIG5vcm1hbCBDYWxsL0NvbnN0cnVjdC4KLSAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJ
ZGVudGl0eToKICAgICAgICAgLy8gTm8gYmFja2VuZCBoYW5kbGVzIHRoaXMgYmVjYXVzZSBpdCB3
aWxsIGJlIG9wdGltaXplZCBvdXQuIEJ1dCB3ZSBtYXkgY2hlY2sKICAgICAgICAgLy8gZm9yIGNh
cGFiaWxpdGllcyBiZWZvcmUgb3B0aW1pemF0aW9uLiBJdCB3b3VsZCBiZSBhIGRlZXAgZXJyb3Ig
dG8gcmVtb3ZlIHRoaXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2xvc3VyZUNh
bGxTdHViUm91dGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMTc4NjkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgiCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAi
RXhlY3V0YWJsZS5oIgotI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJWTS5oIgotI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotQ2xvc3VyZUNhbGxTdHViUm91dGluZTo6
Q2xvc3VyZUNhbGxTdHViUm91dGluZSgKLSAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYm
IGNvZGUsIFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwKLSAgICBFeGVjdXRhYmxlQmFzZSog
ZXhlY3V0YWJsZSkKLSAgICA6IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlLCB2bSkKLSAgICAs
IG1fZXhlY3V0YWJsZSh2bSwgb3duZXIsIGV4ZWN1dGFibGUpCi17Ci19Ci0KLUNsb3N1cmVDYWxs
U3R1YlJvdXRpbmU6On5DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKCkKLXsKLX0KLQotdm9pZCBDbG9z
dXJlQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCi17Ci0gICAgdmlzaXRvci5hcHBlbmQoJm1fZXhlY3V0YWJsZSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgJ
KHJldmlzaW9uIDE3ODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2xvc3VyZUNh
bGxTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lX2gKLSNkZWZpbmUgQ2xvc3VyZUNhbGxTdHViUm91dGlu
ZV9oCi0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgotI2luY2x1
ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
Q2xvc3VyZUNhbGxTdHViUm91dGluZSA6IHB1YmxpYyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUgewot
cHVibGljOgotICAgIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCi0gICAgICAgIGNvbnN0IE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwKLSAgICAgICAgRXhl
Y3V0YWJsZUJhc2UqKTsKLSAgICAKLSAgICB2aXJ0dWFsIH5DbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
KCk7Ci0gICAgCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVy
biBtX2V4ZWN1dGFibGUuZ2V0KCk7IH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBXcml0ZUJhcnJpZXI8RXhlY3V0YWJsZUJhc2U+IG1fZXhlY3V0YWJsZTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotI2VuZGlm
IC8vIENsb3N1cmVDYWxsU3R1YlJvdXRpbmVfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMSwx
MiArMzAxLDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogCiAg
ICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwog
Ci0gICAgaWYgKENhbGxFZGdlTG9nOjppc0VuYWJsZWQoKSAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkKLSAgICAgICAgJiYgT3B0aW9uczo6YmFzZWxpbmVEb2VzQ2FsbEVkZ2VQcm9maWxpbmcoKSkg
ewotICAgICAgICBtX3ZtLT5lbnN1cmVDYWxsRWRnZUxvZygpLmVtaXRMb2dDb2RlKAotICAgICAg
ICAgICAgKnRoaXMsIGluZm8tPmNhbGxFZGdlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7Ci0gICAgfQotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAg
ICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxNSwxMCArMjE1LDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2Rl
SQogICAgIAogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlu
a0luZm8oKTsKIAotICAgIGlmIChDYWxsRWRnZUxvZzo6aXNFbmFibGVkKCkgJiYgc2hvdWxkRW1p
dFByb2ZpbGluZygpCi0gICAgICAgICYmIE9wdGlvbnM6OmJhc2VsaW5lRG9lc0NhbGxFZGdlUHJv
ZmlsaW5nKCkpCi0gICAgICAgIG1fdm0tPmVuc3VyZUNhbGxFZGdlTG9nKCkuZW1pdExvZ0NvZGUo
KnRoaXMsIGluZm8tPmNhbGxFZGdlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLQogICAg
IGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKICAgICAgICAgY29tcGlsZUNhbGxFdmFs
KGluc3RydWN0aW9uKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NzYsNyArNzc2LDcgQEAgaW5saW5lIGNoYXIqIHZpcnR1YWxGb3IoCiAgICAgcmV0dXJuIHZpcnR1
YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwga2luZCwgcmVnaXN0ZXJzLCBjYWxsZWVBc0Z1
bmN0aW9uQ2VsbElnbm9yZWQpOwogfQogCi1zdGF0aWMgYm9vbCBhdHRlbXB0VG9PcHRpbWl6ZUNs
b3N1cmVDYWxsKAorc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVQb2x5bW9ycGhpY0NhbGwo
CiAgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVn
aXN0ZXJzLCBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsLAogICAgIENhbGxMaW5rSW5mbyYg
Y2FsbExpbmtJbmZvKQogewpAQCAtNzk1LDI3ICs3OTUsMjQgQEAgc3RhdGljIGJvb2wgYXR0ZW1w
dFRvT3B0aW1pemVDbG9zdXJlQ2FsbAogICAgICAgICAgICAgKmV4ZWNDYWxsZWUtPmNhbGxlckZy
YW1lKCktPmNvZGVCbG9jaygpLT52bSgpLCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwKICAgICAgICAg
ICAgIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCwgcmVnaXN0ZXJzKTsKICAgICAKLSAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jazsKLSAgICBpZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0
aW9uKCkpCi0gICAgICAgIGNvZGVCbG9jayA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvZGVC
bG9jayA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUoKSkt
PmNvZGVCbG9ja0ZvckNhbGwoKTsKKyAgICBpZiAoIWNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5pc0hv
c3RGdW5jdGlvbigpKSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0ganNDYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGNhbGxlZS0+ZXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yQ2Fs
bCgpOwogICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNh
bGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzIHx8IGNhbGxM
aW5rSW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3MpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGxpbmtDbG9zdXJlQ2FsbCgK
KyAgICBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgICAgICBleGVjQ2FsbGVlLCBjYWxsTGlua0lu
Zm8sIGNvZGVCbG9jaywgY2FsbGVlLT5leGVjdXRhYmxlKCksIGNvZGVQdHIsIHJlZ2lzdGVycyk7
CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBj
YWxsTGlua0luZm8pCitjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhp
Y0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykK
IHsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsOwogICAgIGNoYXIqIHJlc3VsdCA9
IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVy
UHJlc2VydmF0aW9uTm90UmVxdWlyZWQsIGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKIAotICAgIGlm
ICghYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBSZWdpc3RlclByZXNl
cnZhdGlvbk5vdFJlcXVpcmVkLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgKmNhbGxMaW5rSW5mbykp
CisgICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZVBvbHltb3JwaGljQ2FsbChleGVjQ2FsbGVlLCBS
ZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgKmNh
bGxMaW5rSW5mbykpCiAgICAgICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlua0lu
Zm8sIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAgICAK
ICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODMxLDcgKzgyOCw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmlydHVhbENvbnMKICAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVl
LCBDb2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0K
IAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2Vy
dmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
KQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFBy
ZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbykKIHsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsOwogICAgIGNoYXIqIHJl
c3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11
c3RQcmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3ODY5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDYsMTIgKzI0NiwxMiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxHZW5lCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmlj
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q2FsbEV2YWwoRXhlY1N0YXRlKiwgRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBX
VEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2Fs
bChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFs
Q2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29u
c3RydWN0KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUq
LCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5r
SW5mbyopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua1Bv
bHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyop
IFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGxU
aGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7
CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2Vy
dmVzUmVncyhFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVj
U3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CkBAIC0zOTEsMTMgKzM5MSwxMyBA
QCBpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRpb25WaXJ0CiAgICAgcmV0dXJuIDA7
CiB9CiAKLWlubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2Fs
bEZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoraW5saW5lIFBfSklUT3Bl
cmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbEZvcihSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CiAgICAg
Y2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uTGlua0Nsb3N1cmVDYWxsOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua1BvbHlt
b3JwaGljQ2FsbDsKICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOwogICAg
IH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUG9seW1vcnBoaWNDYWxsTm9kZTo6flBvbHltb3Jw
aGljQ2FsbE5vZGUoKQoreworICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICByZW1vdmUoKTsK
K30KKworUG9seW1vcnBoaWNDYWxsTm9kZTo6dW5saW5rKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hC
dWZmZXIpCit7CisgICAgbV9jYWxsTGlua0luZm8tPnVubGluayhyZXBhdGNoQnVmZmVyKTsKKyAg
ICAKKyAgICBpZiAoaXNPbkxpc3QoKSkKKyAgICAgICAgcmVtb3ZlKCk7Cit9CisKK1BvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lOjpQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKKyAgICBjb25z
dCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIGNvZGVSZWYsIFZNJiB2bSwgY29uc3QgSlNDZWxsKiBv
d25lciwgRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwKKyAgICBDYWxsTGlua0luZm8mIGluZm8sIGNv
bnN0IFZlY3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNlPiYgY2FzZXMpCisgICAgOiBHQ0F3YXJlSklU
U3R1YlJvdXRpbmUoY29kZSwgdm0pCit7CisgICAgZm9yIChQb2x5bW9ycGhpY0NhbGxDYXNlIGNh
bGxDYXNlIDogY2FzZXMpIHsKKyAgICAgICAgbV92YXJpYW50cy5hcHBlbmQoY2FsbENhc2UudmFy
aWFudCgpKTsKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbENhc2UuY29k
ZUJsb2NrKCkpCisgICAgICAgICAgICBjb2RlQmxvY2stPmxpbmtJbmNvbWluZ1BvbHltb3JwaGlj
Q2FsbChjYWxsZXJGcmFtZSwgbV9jYWxsTm9kZXMuYWRkKCZpbmZvKSk7CisgICAgfQorfQorCiti
b29sIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdlYWsoKQoreworICAgIGZvciAo
Q2FsbFZhcmlhbnQgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKKyAgICAgICAgaWYgKCFIZWFwOjpp
c01hcmtlZCh2YXJpYW50LnJhd0NhbGxlZUNlbGwoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit7CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpYXJlZFJlYWRPbmx5UG9pbnRlcih2YXJpYW50LnJhd0Nh
bGxlZUNlbGwoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmVfaAorI2RlZmluZSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZV9o
CisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUg
IkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFBvbHlt
b3JwaGljQ2FsbE5vZGUgOiBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2Rl
PiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUG9seW1vcnBoaWNDYWxsTm9kZSk7CitwdWJs
aWM6CisgICAgUG9seW1vcnBoaWNDYWxsTm9kZShDYWxsTGlua0luZm8qIGluZm8pCisgICAgICAg
IDogbV9jYWxsTGlua0luZm8oaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIH5Qb2x5bW9y
cGhpY0NhbGxOb2RlKCk7CisgICAgCisgICAgdm9pZCB1bmxpbmsoUmVwYXRjaEJ1ZmZlciYpOwor
ICAgIAorcHJpdmF0ZToKKyAgICBDYWxsTGlua0luZm8qIG1fY2FsbExpbmtJbmZvOworfTsKKwor
Y2xhc3MgUG9seW1vcnBoaWNDYWxsQ2FzZSB7CitwdWJsaWM6CisgICAgUG9seW1vcnBoaWNDYWxs
Q2FzZSgpCisgICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKKyAgICB7CisgICAgfQorICAg
IAorICAgIFBvbHltb3JwaGljQ2FsbENhc2UoQ2FsbFZhcmlhbnQgdmFyaWFudCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCisgICAgICAgIDogbV92YXJpYW50KHZhcmlhbnQpCisgICAgICAgICwgbV9j
b2RlQmxvY2soY29kZUJsb2NrKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2FsbFZhcmlhbnQg
dmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudDsgfQorICAgIENvZGVCbG9jayogY29k
ZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KKyAgICAKK3ByaXZhdGU6Cisg
ICAgQ2FsbFZhcmlhbnQgbV92YXJpYW50OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9
OworCitjbGFzcyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSA6IHB1YmxpYyBHQ0F3YXJlSklU
U3R1YlJvdXRpbmUgeworcHVibGljOgorICAgIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAor
ICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBWTSYsIGNvbnN0IEpTQ2VsbCog
b3duZXIsCisgICAgICAgIEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyYsIGNv
bnN0IFZlY3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNlPiYpOworICAgIAorICAgIHZpcnR1YWwgflBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKCk7CisgICAgCisgICAgRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGFibGUuZ2V0KCk7IH0KKyAgICBjb25z
dCBDYWxsVmFyaWFudExpc3QmIHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsg
fQorICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgQ2FsbFZhcmlhbnRMaXN0IG1fdmFyaWFudHM7CisgICAgQmFnPFBv
bHltb3JwaGljQ2FsbE5vZGU+IG1fY2FsbE5vZGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDE3ODY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2MTgsNyArMTYxOCw3IEBAIHZvaWQgbGlua0ZvcigKICAgICAg
ICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGV4ZWMtPmNhbGxlckZyYW1lKCks
ICZjYWxsTGlua0luZm8pOwogICAgIAogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0g
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9yKHJlZ2lz
dGVycykpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxU
aHVua0dlbmVyYXRvckZvcihyZWdpc3RlcnMpKS5jb2RlKCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIApAQCAtMTYzOCwxMiArMTYzOCwyMiBAQCB2b2lkIGxpbmtTbG93Rm9yKAogICAg
IGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGtpbmQsIHJlZ2lz
dGVycyk7CiB9CiAKLXZvaWQgbGlua0Nsb3N1cmVDYWxsKAotICAgIEV4ZWNTdGF0ZSogZXhlYywg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCAK
LSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHIsCi0gICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK25hbWVzcGFj
ZSB7CitzdHJ1Y3QgQ2FsbFRvQ29kZVB0ciB7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7Cit9OworfSAvLyBhbm5vbnltb3Vz
IG5hbWVzcGFjZQorCit2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCisgICAgRXhlY1N0YXRlKiBl
eGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgIENhbGxWYXJpYW50IG5ld1ZhcmlhbnQs
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsIFJlZ2lzdGVyUHJlc2VydmF0aW9u
TW9kZSByZWdpc3RlcnMpCiB7Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7CisgICAg
Ly8gQ3VycmVudGx5LCB3ZSB3aWxsIG5ldmVyIHNlZSBhIG5vbi1mdW5jdGlvbiB2YXJpYW50LCBz
aW5jZSB0aGF0J3MgaG93IEpJVE9wZXJhdGlvbnMuY3BwCisgICAgLy8gaGFuZGxlcyBpdC4gQWxz
bywgd2Ugd291bGRuJ3QgYmUgYWJsZSB0byBkbyBhbnl0aGluZyB3aXRoIG5vbi1mdW5jdGlvbiBj
YWxsZWVzIGJlY2F1c2Ugd2UKKyAgICAvLyBqdXN0IGRvbid0IGhhdmUgdGhhdCBmdW5jdGlvbmFs
aXR5LCB5ZXQuIFRoYXQncyB3b3J0aCBmaXhpbmcuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDY4NQorICAgIFJFTEVBU0VfQVNTRVJUKG5ld1Zhcmlh
bnQuZXhlY3V0YWJsZSgpKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9
IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwogICAgIFZNKiB2bSA9IGNhbGxlckNv
ZGVCbG9jay0+dm0oKTsKQEAgLTE2NjIsNTAgKzE2NzIsMTAwIEBAIHZvaWQgbGlua0Nsb3N1cmVD
YWxsKAogICAgICAgICBzdHViSml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5zYW5lQXJndW1l
bnRDb3VudCk7CiAgICAgICAgIG9rQXJndW1lbnRDb3VudC5saW5rKCZzdHViSml0KTsKICAgICB9
CisgICAgCisgICAgQ2FsbFZhcmlhbnRMaXN0IGxpc3Q7CisgICAgaWYgKFBvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lKiBzdHViID0gY2FsbExpbmtJbmZvLnN0dWIuZ2V0KCkpCisgICAgICAgIGxp
c3QgPSBzdHViLT52YXJpYW50cygpOworICAgIGVsc2UgaWYgKEpTRnVuY3Rpb24qIG9sZENhbGxl
ZSA9IGNhbGxMaW5rSW5mby5jYWxsZWUuZ2V0KCkpCisgICAgICAgIGxpc3QgPSBDYWxsVmFyaWFu
dExpc3R7Q2FsbFZhcmlhbnQob2xkQ2FsbGVlKX07CisgICAgCisgICAgbGlzdCA9IHZhcmlhbnRM
aXN0V2l0aFZhcmlhbnQobGlzdCwgbmV3VmFyaWFudCk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIC8vIFdlIGNhbiBzYWZlbHkgY2xvYmJlciBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgY2FsbGVl
R1BSLiBXZSBjYW4ndCByZWx5IG9uIHRhZ01hc2tSZWdpc3RlcgotICAgIC8vIGJlaW5nIHNldC4g
U28gd2UgZG8gdGhpcyB0aGUgaGFyZCB3YXkuCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgbGlua2Vk
IHRoZSBzbG93IHBhdGggdG8gdGhlIHZpcnR1YWwgY2FsbCB0aHVuayBpZiB3ZSB3ZXJlIGFwcHJv
YWNoaW5nIHRoZQorICAgIC8vIGxpbWl0LgorICAgIEFTU0VSVChsaXN0LnNpemUoKSA8PSBtYXhQ
b2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUpOworICAgIAorICAgIGJvb2wgaGF2ZUNsb3N1
cmVDYWxsID0gZmFsc2U7CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkKKyAg
ICAgICAgaGF2ZUNsb3N1cmVDYWxsIHw9IHZhcmlhbnQuaXNDbG9zdXJlQ2FsbCgpOworICAgIAog
ICAgIEdQUlJlZyBzY3JhdGNoID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNh
bGxlZUdQUik7Ci0gICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
VGFnTWFzayksIHNjcmF0Y2gpOwotICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFRl
c3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZUdQUiwgc2NyYXRjaCkpOworICAgIAor
ICAgIGlmIChoYXZlQ2xvc3VyZUNhbGwpIHsKKyAgICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2
ZSBhIGZ1bmN0aW9uIGFuZCBzdGFzaCB0aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNoLgorCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgLy8gV2UgY2FuIHNhZmVseSBjbG9iYmVyIGV2ZXJ5dGhp
bmcgZXhjZXB0IHRoZSBjYWxsZWVHUFIuIFdlIGNhbid0IHJlbHkgb24gdGFnTWFza1JlZ2lzdGVy
CisgICAgICAgIC8vIGJlaW5nIHNldC4gU28gd2UgZG8gdGhpcyB0aGUgaGFyZCB3YXkuCisgICAg
ICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ01hc2spLCBz
Y3JhdGNoKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDY0KEND
YWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVlR1BSLCBzY3JhdGNoKSk7CiAjZWxzZQotICAgIC8v
IFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwu
CisgICAgICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxl
ZSBpcyBhIGNlbGwuCiAjZW5kaWYKICAgICAKLSAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAg
IHN0dWJKaXQuYnJhbmNoOCgKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTRnVuY3Rpb25UeXBlKSkpOwotICAgIAotICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAg
c3R1YkppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAor
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgICAgICBzdHViSml0LmJyYW5jaDgoCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0
aW9uVHlwZSkpKTsKKyAgICAKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKAogICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVj
dXRhYmxlKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1
dGFibGUpKSk7CisgICAgICAgICAgICBzY3JhdGNoKTsKKyAgICB9CiAgICAgCi0gICAgc3R1Ykpp
dC5sb2FkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1
bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksCi0gICAgICAgIEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4gY2FsbENhc2VzOwogICAg
IAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3R1YkppdC5zdG9yZTY0KAotICAgICAgICBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikgKyBvZmZzZXRUb0ZyYW1lKSk7
Ci0jZWxzZQotICAgIHN0dWJKaXQuc3RvcmVQdHIoCi0gICAgICAgIEdQUkluZm86OnJldHVyblZh
bHVlR1BSLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3Rl
cikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkgKyBvZmZzZXRUb0ZyYW1lKSk7Ci0gICAgc3R1Ykpp
dC5zdG9yZTMyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0
ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVl
RGVzY3JpcHRvciwgYXNCaXRzLnRhZykgKyBvZmZzZXRUb0ZyYW1lKSk7Ci0jZW5kaWYKKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgc2tpcFRvTmV4dDsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
IGRvbmU7CisgICAgCisgICAgVmVjdG9yPENhbGxUb0NvZGVQdHI+IGNhbGxzOwogICAgIAotICAg
IEFzc2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwotICAgIEFz
c2VtYmx5SGVscGVyczo6SnVtcCBkb25lID0gc3R1YkppdC5qdW1wKCk7CisgICAgZm9yIChDYWxs
VmFyaWFudCB2YXJpYW50IDogbGlzdCkgeworICAgICAgICBpZiAoc2tpcFRvTmV4dC5pc1NldCgp
KQorICAgICAgICAgICAgc2tpcFRvTmV4dC5saW5rKCZzdHViSml0KTsKKyAgICAgICAgCisgICAg
ICAgIC8vIE5ldyB2YXJpYW50cyBzaG91bGQgaGF2ZSBKSVQgY29kZSBmb3IgY2FsbCBzaW5jZSB3
ZSBhcmUgYWJvdXQgdG8gbWFrZSB0aGF0IGNhbGwgYW5kCisgICAgICAgIC8vIEpJVE9wZXJhdGlv
bnMuY3BwIHNob3VsZCBoYXZlIGVuc3VyZWQgdGhhdCB0aGUgSklUIGNvZGUgd2FzIHByZXNlbnQu
IE9sZCB2YXJpYW50cyBzaG91bGQKKyAgICAgICAgLy8gaGF2ZSBKSVQgY29kZSBmb3IgY2FsbCBz
aW5jZSB0aGUgaW5saW5lIGNhY2hlIHdvdWxkIGhhdmUgYmVlbiBjbGVhcmVkIGlmIHRoZWlyIGNv
ZGUgd2FzCisgICAgICAgIC8vIGRlc3Ryb3llZC4KKyAgICAgICAgQVNTRVJUKHZhcmlhbnQuZXhl
Y3V0YWJsZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGVQdHIgPQorICAgICAgICAgICAgdmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVy
YXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKAorICAgICAgICAgICAgICAgICpl
eGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+dm0oKSwgY2FsbGVlLT5leGVj
dXRhYmxlKCksCisgICAgICAgICAgICAgICAgQXJpdHlDaGVja05vdFJlcXVpcmVkLCByZWdpc3Rl
cnMpOworICAgICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgICAgIGlm
ICh2YXJpYW50LmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgICAgIGNv
ZGVCbG9jayA9IG51bGxwdHI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29kZUJsb2Nr
ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNhbGxlZS0+ZXhlY3V0YWJsZSgpKS0+Y29k
ZUJsb2NrRm9yQ2FsbCgpOworICAgICAgICAgICAgQVNTRVJUKGV4ZWNDYWxsZWUtPmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkgPj0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSkgJiYgY2FsbExpbmtJbmZvLmNhbGxUeXBlICE9IENhbGxMaW5rSW5mbzo6
Q2FsbFZhcmFyZ3MgJiYgY2FsbExpbmtJbmZvLmNhbGxUeXBlICE9IENhbGxMaW5rSW5mbzo6Q29u
c3RydWN0VmFyYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhbGxDYXNlcy5h
cHBlbmQoUG9seW1vcnBoaWNDYWxsQ2FzZSh2YXJpYW50LCBjb2RlQmxvY2spKTsKKyAgICAgICAg
CisgICAgICAgIGlmICh2YXJpYW50LmlzQ2xvc3VyZUNhbGwoKSkgeworICAgICAgICAgICAgc2tp
cFRvTmV4dCA9CisgICAgICAgICAgICAgICAgc3R1YkppdC5icmFuY2hQdHIoCisgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2YXJpYW50LmV4ZWN1dGFibGUoKSkp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2tpcFRvTmV4dCA9CisgICAgICAgICAg
ICAgICAgc3R1YkppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6Tm90RXF1YWwsIGNhbGxlZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHZhcmlhbnQuZnVuY3Rpb24oKSkpOworICAgICAgICB9CisgICAgCisg
ICAgICAgIENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0cjsKKyAgICAgICAgY2FsbFRvQ29kZVB0
ci5jYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOworICAgICAgICBjYWxsVG9Db2RlUHRyLmNvZGVQ
dHIgPSBjb2RlUHRyOworICAgICAgICBjYWxscy5hcHBlbmQoY2FsbFRvQ29kZVB0cik7CisgICAg
ICAgIGRvbmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKKyAgICB9CiAgICAgCiAgICAgc2xvd1Bh
dGgubGluaygmc3R1YkppdCk7CisgICAgc2tpcFRvTmV4dC5saW5rKCZzdHViSml0KTsKICAgICBz
dHViSml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKQEAgLTE3MTUsMjMgKzE3NzUsMzAgQEAgdm9p
ZCBsaW5rQ2xvc3VyZUNhbGwoCiAgICAgCiAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1w
IHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAKKyAgICAgICAgCiAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNhbGxlckNvZGVCbG9jayk7CiAgICAgCi0gICAgcGF0
Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhbGxzLnNpemUo
KSk7CisgICAgZm9yIChDYWxsVG9Db2RlUHRyIGNhbGxUb0NvZGVQdHIgOiBjYWxscykgeworICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKAorICAgICAgICAgICAgY2FsbFRvQ29kZVB0ci5jYWxsLCBG
dW5jdGlvblB0cihjYWxsVG9Db2RlUHRyLmNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwor
ICAgIH0KICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+
aml0VHlwZSgpKSkKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkpOwogICAgIGVsc2UKICAgICAgICAg
cGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyLmxhYmVsQXRP
ZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwo
dm0tPmdldENUSVN0dWIodmlydHVhbFRodW5rR2VuZXJhdG9yRm9yKENvZGVGb3JDYWxsLCByZWdp
c3RlcnMpKS5jb2RlKCkpKTsKKyAgICBpZiAobGlzdC5zaXplKCkgPT0gbWF4UG9seW1vcnBoaWND
YWxsVmFyaWFudExpc3RTaXplKQorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVM
b2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKHZpcnR1YWxUaHVua0dlbmVyYXRvckZvcihDb2Rl
Rm9yQ2FsbCwgcmVnaXN0ZXJzKSkuY29kZSgpKSk7CisgICAgZWxzZQorICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKGxpbmtQb2x5
bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvckZvcihyZWdpc3RlcnMpKS5jb2RlKCkpKTsKICAgICAK
LSAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJl
ZihuZXcgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKKyAgICBSZWZQdHI8UG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFX0ZPUigKICAgICAgICAgICAgIGNhbGxl
ckNvZGVCbG9jaywgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkNsb3N1cmUgY2FsbCBzdHVi
IGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXQgJXAgKCVzKSIsCisgICAgICAgICAgICAo
IkNsb3N1cmUgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwK
ICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxs
TGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwKLSAgICAgICAgICAgICAgICBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRv
Q1N0cmluZyhwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spKS5kYXRhKCkpKSwKLSAgICAgICAg
KnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjdXRhYmxlKSk7Cisg
ICAgICAgICAgICAgdG9DU3RyaW5nKGxpc3REdW1wKGxpc3QpKS5kYXRhKCkpKSwKKyAgICAgICAg
KnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLT5jYWxsZXJGcmFt
ZSgpLCBjYWxsTGlua0luZm8sIGNhbGxDYXNlcykpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogICAgIApAQCAtMTc0MCw5ICsxODA3LDkg
QEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwg
dm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIHJlZ2lzdGVycyk7CiAgICAgCisgICAgLy8g
SWYgdGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBzdHViIHJvdXRpbmUsIHRoYXQgb25lIHdpbGwg
ZGllIGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5kIHNlZXMKKyAgICAvLyB0aGF0IGl0J3Mgbm8g
bG9uZ2VyIG9uIHN0YWNrLgogICAgIGNhbGxMaW5rSW5mby5zdHViID0gc3R1YlJvdXRpbmUucmVs
ZWFzZSgpOwotICAgIAotICAgIEFTU0VSVCghY2FsbGVlQ29kZUJsb2NrIHx8IGNhbGxlZUNvZGVC
bG9jay0+aXNJbmNvbWluZ0NhbGxBbHJlYWR5TGlua2VkKCZjYWxsTGlua0luZm8pKTsKIH0KIAog
dm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJ
KHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2lu
Y2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNhbGxWYXJpYW50LmgiCiAjaW5jbHVk
ZSAiSklUT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQxLDcgKzQyLDcgQEAg
dm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdQogdm9pZCByZXBhdGNoSW4o
RXhlY1N0YXRlKiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYsIGJvb2wgd2FzRm91bmQsIGNv
bnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGxpbmtGb3IoRXhl
Y1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTW9kZSk7CiB2b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5m
byYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7Ci12
b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sq
LCBFeGVjdXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlKTsKK3ZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlu
a0luZm8mLCBDb2RlQmxvY2sqLCBDYWxsVmFyaWFudCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBS
ZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwogdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZl
ciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVy
JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3Ry
dWN0dXJlU3R1YkluZm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDI3ICsx
MzcsMjcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaGF0UAogICAgIHJl
dHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVz
ZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Ns
b3N1cmVDYWxsRm9yVGh1bmtHZW5lcmF0b3IoCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGxpbmtQb2x5bW9ycGhpY0NhbGxGb3JUaHVua0dlbmVyYXRvcigKICAgICBWTSogdm0sIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2
bSk7CiAgICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVD
YWxsRm9yKHJlZ2lzdGVycykpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxp
bmtQb2x5bW9ycGhpY0NhbGxGb3IocmVnaXN0ZXJzKSk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJ
WkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5rIGNsb3N1cmUgY2FsbCAlcyBzbG93IHBhdGggdGh1
bmsiLCByZWdpc3RlcnMgPT0gTXVzdFByZXNlcnZlUmVnaXN0ZXJzID8gIiB0aGF0IHByZXNlcnZl
cyByZWdpc3RlcnMiIDogIiIpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZl
ciwgKCJMaW5rIHBvbHltb3JwaGljIGNhbGwgJXMgc2xvdyBwYXRoIHRodW5rIiwgcmVnaXN0ZXJz
ID09IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyA/ICIgdGhhdCBwcmVzZXJ2ZXMgcmVnaXN0ZXJzIiA6
ICIiKSk7CiB9CiAKIC8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVk
ZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgogLy8gb2JqZWN0IGNv
bnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4KLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSogdm0p
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9y
KFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsRm9yVGh1bmtHZW5lcmF0b3Io
dm0sIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworICAgIHJldHVybiBsaW5rUG9s
eW1vcnBoaWNDYWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90
UmVxdWlyZWQpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGhh
dFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua1BvbHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQogewotICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcih2bSwg
TXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKKyAgICByZXR1cm4gbGlua1BvbHltb3JwaGljQ2FsbEZv
clRodW5rR2VuZXJhdG9yKHZtLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOwogfQogCiBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMTc4
NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsMTYgKzY1LDE2IEBAIGlubGluZSBUaHVua0dlbmVyYXRvciBsaW5r
VGh1bmtHZW5lcmF0b3IKICAgICByZXR1cm4gMDsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihW
TSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaGF0UHJlc2Vy
dmVzUmVnc1RodW5rR2VuZXJhdG9yKFZNKik7CiAKLWlubGluZSBUaHVua0dlbmVyYXRvciBsaW5r
Q2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvckZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVn
aXN0ZXJzKQoraW5saW5lIFRodW5rR2VuZXJhdG9yIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dl
bmVyYXRvckZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIHN3
aXRjaCAocmVnaXN0ZXJzKSB7CiAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVp
cmVkOgotICAgICAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3I7CisgICAg
ICAgIHJldHVybiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3I7CiAgICAgY2FzZSBN
dXN0UHJlc2VydmVSZWdpc3RlcnM6Ci0gICAgICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxUaGF0
UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yOworICAgICAgICByZXR1cm4gbGlua1BvbHltb3Jw
aGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7CiAgICAgfQogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwx
MiArMTcwLDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29s
LCBlbmFibGVQb2x5dmFyaWFudERldmlydHVhbGl6YXRpb24sIHRydWUpIFwKICAgICB2KGJvb2ws
IGVuYWJsZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcsIHRydWUpIFwKICAgICB2KGJvb2wsIGVu
YWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5nLCB0cnVlKSBcCi0gICAgdihib29sLCBjYWxsU3Rh
dHVzU2hvdWxkVXNlQ2FsbEVkZ2VQcm9maWxlLCB0cnVlKSBcCi0gICAgdihib29sLCBjYWxsRWRn
ZVByb2ZpbGVSZWFsbHlQcm9jZXNzZXNMb2csIHRydWUpIFwKLSAgICB2KGJvb2wsIGJhc2VsaW5l
RG9lc0NhbGxFZGdlUHJvZmlsaW5nLCBmYWxzZSkgXAotICAgIHYoYm9vbCwgZGZnRG9lc0NhbGxF
ZGdlUHJvZmlsaW5nLCB0cnVlKSBcCi0gICAgdihib29sLCBlbmFibGVDYWxsRWRnZVByb2ZpbGlu
ZywgdHJ1ZSkgXAotICAgIHYodW5zaWduZWQsIGZyZXF1ZW50Q2FsbFRocmVzaG9sZCwgMikgXAor
ICAgIHYoYm9vbCwgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplLCAzKSBcCiAgICAg
dihib29sLCBvcHRpbWl6ZU5hdGl2ZUNhbGxzLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgZW5hYmxl
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmcsIHRydWUpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSwxMyArMzY5LDYg
QEAgVk0qJiBWTTo6c2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpCiAgICAgcmV0dXJuIHNoYXJlZElu
c3RhbmNlOwogfQogCi1DYWxsRWRnZUxvZyYgVk06OmVuc3VyZUNhbGxFZGdlTG9nKCkKLXsKLSAg
ICBpZiAoIWNhbGxFZGdlTG9nKQotICAgICAgICBjYWxsRWRnZUxvZyA9IHN0ZDo6bWFrZV91bmlx
dWU8Q2FsbEVkZ2VMb2c+KCk7Ci0gICAgcmV0dXJuICpjYWxsRWRnZUxvZzsKLX0KLQogI2lmIEVO
QUJMRShKSVQpCiBzdGF0aWMgVGh1bmtHZW5lcmF0b3IgdGh1bmtHZW5lcmF0b3JGb3JJbnRyaW5z
aWMoSW50cmluc2ljIGludHJpbnNpYykKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3M7CiBjbGFzcyBCdWlsdGluRXhlY3V0YWJs
ZXM7Ci1jbGFzcyBDYWxsRWRnZUxvZzsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNo
ZTsKIGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwpAQCAtMjM4LDkgKzIzNyw2IEBAIHB1YmxpYzoK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gZGZnU3RhdGU7CiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEVkZ2VMb2c+
IGNhbGxFZGdlTG9nOwotICAgIENhbGxFZGdlTG9nJiBlbnN1cmVDYWxsRWRnZUxvZygpOwotCiAg
ICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGllbnREYXRhKiBjbGllbnREYXRhOwogICAgIFZNRW50
cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245031</attachid>
            <date>2015-01-20 16:02:04 -0800</date>
            <delta_ts>2015-01-21 15:19:52 -0800</delta_ts>
            <desc>it builds!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>125616</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc4NzYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMSBA
QAorMjAxNS0wMS0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcgc2hvdWxkIGJlIGJhc2VkIG9uIHBvbHltb3JwaGlj
IGNhbGwgaW5saW5lIGNhY2hpbmcgcmF0aGVyIHRoYW4gbG9nZ2luZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwNjYwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNz
LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBieXRlY29kZS9DYWxsRWRnZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvQ2FsbEVkZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxsRWRnZVBy
b2ZpbGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5o
OiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZUlubGluZXMuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OnZpc2l0V2Vhayk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Q2FsbExpbmtTdGF0dXMpOgorICAgICAgICAoSlNDOjpD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRnJvbUNhbGxMaW5rSW5mbyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVz
Ojppc0Nsb3N1cmVDYWxsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6Om1ha2VDbG9z
dXJlQ2FsbCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpkdW1wKToKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oOgorICAgICAgICAoSlNDOjpD
YWxsTGlua1N0YXR1czo6Q2FsbExpbmtTdGF0dXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0
YXR1czo6aXNTZXQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6dmFyaWFudHMpOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6c2l6ZSk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rU3RhdHVzOjphdCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpvcGVyYXRvcltd
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNhbk9wdGltaXplKToKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtTdGF0dXM6OmVkZ2VzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtTdGF0dXM6OmNhblRydXN0Q291bnRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29k
ZS9DYWxsVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OnZhcmlhbnRMaXN0V2l0aFZhcmlhbnQp
OgorICAgICAgICAoSlNDOjpkZXNwZWNpZmllZFZhcmlhbnRMaXN0KToKKyAgICAgICAgKiBieXRl
Y29kZS9DYWxsVmFyaWFudC5oOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2su
aDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0luY29taW5nQ2FsbEFscmVhZHlMaW5rZWQp
OiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkQ2FsbFdpdGhvdXRTZXR0
aW5nUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2Fs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToK
KyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2Ji
ZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAg
ICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6Cisg
ICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZUlt
cGwpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9E
RkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnBy
b3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpUaWVyVXBDaGVja0luamVjdGlvblBoYXNlOjpydW4pOgorICAg
ICAgICAoSlNDOjpERkc6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2U6OnJlbW92ZUZUTFByb2Zp
bGluZyk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAg
ICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgICogaml0L0Nsb3N1cmVDYWxsU3R1
YlJvdXRpbmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0
aW5lLmg6IFJlbW92ZWQuCisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAqIGppdC9KSVRPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlND
OjpvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsRm9yKToKKyAgICAgICAgKEpTQzo6b3BlcmF0
aW9uTGlua0Nsb3N1cmVDYWxsRm9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUU3R1YlJv
dXRpbmUuaDoKKyAgICAgICAgKiBqaXQvSklUV3JpdGVCYXJyaWVyLmg6CisgICAgICAgICogaml0
L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlBv
bHltb3JwaGljQ2FsbE5vZGU6On5Qb2x5bW9ycGhpY0NhbGxOb2RlKToKKyAgICAgICAgKEpTQzo6
UG9seW1vcnBoaWNDYWxsTm9kZTo6dW5saW5rKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmU6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKToKKyAgICAgICAgKEpT
Qzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6On5Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2YXJpYW50cyk6
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdlYWspOgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKToKKyAgICAgICAgKiBqaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbE5vZGU6OlBvbHltb3JwaGlj
Q2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxDYXNlOjpQb2x5bW9ycGhp
Y0NhbGxDYXNlKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsQ2FzZTo6dmFyaWFudCk6
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbENhc2U6OmNvZGVCbG9jayk6CisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpsaW5rRm9yKToKKyAgICAgICAgKEpT
Qzo6bGlua1BvbHltb3JwaGljQ2FsbCk6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbCk6
IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2guaDoKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbEZvclRodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdz
VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dl
bmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbFRodW5rR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsVGhhdFByZXNl
cnZlc1JlZ3NUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1RodW5rR2Vu
ZXJhdG9ycy5oOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0
b3JGb3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvckZvcik6
IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGlt
ZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpwcmVwYXJlVG9EaXNjYXJkQ29kZSk6CisgICAg
ICAgIChKU0M6OlZNOjplbnN1cmVDYWxsRWRnZUxvZyk6IERlbGV0ZWQuCisgICAgICAgICogcnVu
dGltZS9WTS5oOgorCiAyMDE1LTAxLTIwICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTc4NzUxLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yODEsMTMgKzI4MSw4IEBACiAJCTBGM0IzQTI4MTU0NEM5OTcw
MDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYgLyog
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGM0IzQTJCMTU0NzUwMDAwMDNFRDBGRiAvKiBERkdWYWxp
ZGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwICovOyB9OwogCQkwRjNC
M0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBE
RkdWYWxpZGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTBGM0I3RTI2MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjAxOUExMUI4MDAwRDlC
QzU2IC8qIENhbGxFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEYzQjdFMjcxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0Uy
MTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmNwcCAqLzsgfTsKLQkJMEYzQjdF
MjgxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjIxOUExMUI4MDAwRDlCQzU2IC8q
IENhbGxFZGdlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTBGM0I3RTI5MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGVJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNCN0UyMzE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0I3RTJBMTlB
MTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZh
cmlhbnQuY3BwICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3
RTI1MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGM0I3RTJEMTlBMTJBQUUwMEQ5QkM1NiAv
KiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNCN0UyQzE5QTEyQUFFMDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkw
RjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0
MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi87IH07CiAJCTBGM0Qw
QkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBG
QzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBE
RkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVy
aW5nLmNwcCAqLzsgfTsKQEAgLTM4NCw4ICszNzksNiBAQAogCQkwRjcwMjVBQTE3MTRCMEZDMDAz
ODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY3MTRDQTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjcxNENBNTE2RUE5MkYyMDBGM0VCRUIgLyogREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjczRDdBRTE2NUExNDJEMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHVi
Um91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjczRDdBQjE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAg
Ki87IH07Ci0JCTBGNzNEN0FGMTY1QTE0MzAwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcz
RDdBQzE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzQzQkFBMTZCODgy
NDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMDE2NTFDNjYxMDBBODBBRkUgLyogQVJN
NjREaXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRjc1NzZEMjE4RTFGRUU5MDAyRUY0Q0QgLyog
QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKIAkJMEY3NTc2RDMxOEUxRkVFOTAwMkVGNENE
IC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNjAwLDYgKzU5Myw4IEBACiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5
NkM0OCAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsK
IAkJMEZFNzIxMUQxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzIxMUIxOTNCOUM1OTAw
MzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovOyB9OwogCQkwRkU3MjExRTE5M0I5QzU5MDAz
MUY2RUQgLyogREZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU4
MzQxNzFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODM0MTUxQTZF
Rjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKKwkJ
MEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4MzQxNjFB
NkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU4NTM0QjE3MjNDREE1
MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBE
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4
RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZFOTVGNzkxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTk1Rjc3MThC
NTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgKi87IH07CkBAIC0xOTQ4LDEzICsx
OTQzLDggQEAKIAkJMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0ZHU2ltcGxp
ZmljYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8q
IERGR1ZhbGlkYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R1ZhbGlkYXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYWxpZGF0ZS5oOyBwYXRoID0g
ZGZnL0RGR1ZhbGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0I3RTIw
MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWxsRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNCN0Uy
MTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxFZGdlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGM0I3RTIyMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2Zp
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2VQcm9maWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0I3RTIzMTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENhbGxFZGdlUHJvZmlsZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0I3RTJDMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxs
RWRnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0QwQkJBMTk0QTQxNDMwMEZDOUNG
OSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE4MTlEMzUz
QTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBwYXRoID0gZGZnL0RG
R1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA1
Miw4ICsyMDQyLDYgQEAKIAkJMEY3MDI1QTgxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRD
b21waWxlckNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVC
IC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHBhdGgg
PSBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNzNEN0FCMTY1QTE0MkEw
MEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjczRDdBQzE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNh
bGxTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbG9zdXJl
Q2FsbFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzU3NkQw
MThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzU3NkQxMThFMUZFRTkwMDJF
RjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyODAsNiArMjI2OCw4IEBACiAJCTBGRTIy
OEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNzIx
MUIxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHVHJhbnNpdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHVHJh
bnNpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcyMTFDMTkzQjlD
NTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1RyYW5zaXRpb24uaDsgcGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0
OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBh
dGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFOTVGNzcxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTERhdGFTZWN0aW9u
LmNwcDsgcGF0aCA9IGZ0bC9GVExEYXRhU2VjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zNzQwLDggKzM3MzAsNiBAQAogCQkJCTBGMjRFNTNCMTdFQTlGNTkwMEFCQjIx
NyAvKiBBc3NlbWJseUhlbHBlcnMuY3BwICovLAogCQkJCTBGMjRFNTNDMTdFQTlGNTkwMEFCQjIx
NyAvKiBBc3NlbWJseUhlbHBlcnMuaCAqLywKIAkJCQkwRjI0RTUzRDE3RUE5RjU5MDBBQkIyMTcg
LyogQ0NhbGxIZWxwZXJzLmggKi8sCi0JCQkJMEY3M0Q3QUIxNjVBMTQyQTAwQUNBQjcxIC8qIENs
b3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwICovLAotCQkJCTBGNzNEN0FDMTY1QTE0MkEwMEFDQUI3
MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEZEODJFMzcxNDFBQjE0MjAw
MTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8sCiAJCQkJQTdCNDhEQjYwRUU3NENGQzAw
RENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovLAogCQkJCUE3QjQ4REI1MEVFNzRD
RkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi8sCkBAIC0zNzgwLDggKzM3Njgs
OCBAQAogCQkJCTE0QTY1ODFBMEY0RTM2RjQwMDAxNTBGRCAvKiBKSVRTdHVicy5oICovLAogCQkJ
CUZFRjY4MzVBMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTS5oICovLAogCQkJCUZFRjY4
MzVCMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic0FSTXY3LmggKi8sCi0JCQkJRkVGNjgzNUQx
NzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2LmggKi8sCiAJCQkJRkVGNjgzNUMxNzQzNDND
QzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2XzY0LmggKi8sCisJCQkJRkVGNjgzNUQxNzQzNDNDQzAw
QTMyRTI1IC8qIEpJVFN0dWJzWDg2LmggKi8sCiAJCQkJQTdBNEFFMEMxNzk3M0I0RDAwNTYxMkIx
IC8qIEpJVFN0dWJzWDg2Q29tbW9uLmggKi8sCiAJCQkJMEY1RUY5MUIxNjg3OEY3ODAwM0U1QzI1
IC8qIEpJVFRodW5rcy5jcHAgKi8sCiAJCQkJMEY1RUY5MUMxNjg3OEY3ODAwM0U1QzI1IC8qIEpJ
VFRodW5rcy5oICovLApAQCAtMzc4OSw2ICszNzc3LDggQEAKIAkJCQkwRkM3MTJFMTE3Q0Q4NzhG
MDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKIAkJ
CQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJ
QTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1IC8qIEpTSW50ZXJmYWNlSklULmggKi8sCisJCQkJMEZF
ODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAq
LywKKwkJCQkwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUuaCAqLywKIAkJCQkwRkE3QThFOTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLywK
IAkJCQkwRkE3QThFQTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmggKi8sCiAJCQkJMEY2QjFDQkIx
ODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5j
cHAgKi8sCkBAIC01MDE5LDExICs1MDA5LDYgQEAKIAkJCQkwRjY2NkVCRTE4MzU2NkY5MDBEMDE3
RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oICovLAogCQkJCTBGODg1RTEw
MTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oICovLAogCQkJCTBGODAyM0U5MTYx
MzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLywKLQkJCQkwRjNCN0UyQzE5QTEyQUFFMDBE
OUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovLAotCQkJCTBGM0I3RTIwMTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsRWRnZS5oICovLAotCQkJCTBGM0I3RTIxMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRn
ZVByb2ZpbGUuY3BwICovLAotCQkJCTBGM0I3RTIyMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRn
ZVByb2ZpbGUuaCAqLywKLQkJCQkwRjNCN0UyMzE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQ
cm9maWxlSW5saW5lcy5oICovLAogCQkJCTBGMEI4M0FFMTRCQ0Y3MTQwMDg4NUI0RiAvKiBDYWxs
TGlua0luZm8uY3BwICovLAogCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4NUI0RiAvKiBDYWxsTGlu
a0luZm8uaCAqLywKIAkJCQkwRjkzMzI5MzE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0
dXMuY3BwICovLApAQCAtNTQ3NCw3ICs1NDU5LDYgQEAKIAkJCQkwRjY5Q0M4OTE5M0FDNjBBMDA0
NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQyMTdF
QTlGNTkwMEFCQjIxNyAvKiBDQ2FsbEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFB
QUU1MEUxRjQyNjUwMEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
NzNEN0FGMTY1QTE0MzAwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NjlBMDc5NzBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjhGOTQ0MTE2Njc2MzMyMDBENjE5NzEgLyogQ29kZUJsb2NrSGFz
aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDOTdGMzQxODIwMjBENzAwMkM5QjI2IC8qIENvZGVC
bG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC01NTY2LDcgKzU1
NTAsNiBAQAogCQkJCTBGRkZDOTVBMTRFRjkwQTkwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyRkM3NzMxNkUxMkY3NDAwMzhEOTc2IC8qIERGR0RDRVBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5QTE3MkYwNTAxMDA3REJEQTUgLyogREZHRGVz
aXJlZElkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjNCN0UyODE5QTExQjgwMDBE
OUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkMwRjdDRTE3
QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMjk4MUZEOTE3QkFFRTRCMDBBM0JDOTggLyogREZHRGVzaXJl
ZFdlYWtSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTU4NTcsNyArNTg0MCw2IEBACiAJ
CQkJQTc2RjU0QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MTYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTGV4aWNhbEVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdGMDEgLyogSlNB
UElWYWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0I3RTI5MTlBMTFCODAwMEQ5
QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkNG
MzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzYxNDBEMjE4Mjk4MkNCMDA3NTA2MjQgLyogSlNBcmd1bWVudHNJdGVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQXJyYXku
aCBpbiBIZWFkZXJzICovLApAQCAtNjE4MCw3ICs2MTYyLDYgQEAKIAkJCQlFNDlEQzE2QzEyRUYy
OTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkI3RjM5RTE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlW
YWx1ZU1hcC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYzQjdFMjYxOUExMUI4MDAwRDlCQzU2IC8q
IENhbGxFZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkg
LyogU3BlY2lhbGl6ZWRUaHVua0pJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEz
QzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4
MkU1NDE0MURBRUVFMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuaCBpbiBIZWFkZXJzICovLApA
QCAtNjIyNyw2ICs2MjA4LDcgQEAKIAkJCQkwRkY0Mjc0OTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRp
czg2X3R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QUIzOTE3OTlFNEIyMDBEMjgzM0Qg
LyogVURpczg2RGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0MTE3QURC
NUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTgzNDE4
MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODY2NzM5RDMxM0JGREU3MTAwMjNEODdDIC8qIFVpbnQxNldpdGhGcmFjdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGNDIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQz
MkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIxNzQgLyog
VWludDhBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzY1LDcgKzY3NDcsNiBAQAogCQkJCTBG
MEI4M0IwMTRCQ0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0U0MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JI
aW50c0ZvclVwZGF0ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjczRDdBRTE2NUExNDJEMDBB
Q0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
NjlBMDc5NjBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGOEY5NDQwMTY2NzYzMzAwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQzk3RjMzMTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02OTUyLDggKzY5MzMsOCBAQAog
CQkJCTBGMjM1QkQ1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5k
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkQ4MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExF
eGl0VGh1bmtHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCREExNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjNCN0Uy
NzE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3RjI5OTZCMTdBMEJCNjcwMDEwNDE3QSAvKiBGVExGYWlsLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRTgzNDE3MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxOTE3RDUxRjIyMDBDQTJDNDAgLyog
RlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjVGMUFGMTgx
NjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQTBBMjgxNzA5NjIzQjAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC03MTQ0LDcgKzcxMjUsNiBAQAogCQkJCTBGNDY4MEQyMTRCQkQx
NjUwMEJGRTI3MiAvKiBMTEludERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOEIwMTEx
N0NGMDc4MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjQ2ODBBODE0QkE3RkFCMDBCRkUyNzIgLyogTExJbnRFeGNlcHRpb25zLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTBGM0I3RTJEMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0
aHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzOUMxNEJDRjQ2MzAwODg1QjRGIC8qIExM
SW50VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUNEMTgwNUU3NTUwMDQ3MkNF
NCAvKiBMTFZNQVBJLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxFZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhbGxFZGdlLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi12b2lkIENhbGxFZGdlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17
Ci0gICAgb3V0LnByaW50KCI8IiwgbV9jYWxsZWUsICIsIGNvdW50OiAiLCBtX2NvdW50LCAiPiIp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxFZGdlLmgJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDczICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBDYWxsRWRnZV9oCi0jZGVmaW5lIENhbGxFZGdlX2gKLQotI2luY2x1ZGUgIkNhbGxWYXJpYW50
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi10eXBlZGVmIHVpbnQxNl90IENhbGxFZGdlQ291bnRU
eXBlOwotCi1jbGFzcyBDYWxsRWRnZSB7Ci1wdWJsaWM6Ci0gICAgQ2FsbEVkZ2UoKTsKLSAgICBD
YWxsRWRnZShDYWxsVmFyaWFudCwgQ2FsbEVkZ2VDb3VudFR5cGUpOwotICAgIAotICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY2FsbGVlOyB9Ci0gICAgCi0gICAgQ2FsbFZh
cmlhbnQgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWU7IH0KLSAgICBDYWxsRWRnZUNv
dW50VHlwZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0KLSAgICAKLSAgICBDYWxs
RWRnZSBkZXNwZWNpZmllZENsb3N1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIENh
bGxFZGdlKG1fY2FsbGVlLmRlc3BlY2lmaWVkQ2xvc3VyZSgpLCBtX2NvdW50KTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Ci0gICAgCi1wdWJsaWM6Ci0g
ICAgQ2FsbFZhcmlhbnQgbV9jYWxsZWU7Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV9jb3VudDsK
LX07Ci0KLWlubGluZSBDYWxsRWRnZTo6Q2FsbEVkZ2UoQ2FsbFZhcmlhbnQgY2FsbGVlLCBDYWxs
RWRnZUNvdW50VHlwZSBjb3VudCkKLSAgICA6IG1fY2FsbGVlKGNhbGxlZSkKLSAgICAsIG1fY291
bnQoY291bnQpCi17Ci19Ci0KLWlubGluZSBDYWxsRWRnZTo6Q2FsbEVkZ2UoKQotICAgIDogQ2Fs
bEVkZ2UoQ2FsbFZhcmlhbnQoKSwgMCkKLXsKLX0KLQotdHlwZWRlZiBWZWN0b3I8Q2FsbEVkZ2Us
IDE+IENhbGxFZGdlTGlzdDsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBDYWxs
RWRnZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVBy
b2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsRWRnZVByb2ZpbGUuY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwz
NjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FsbEVkZ2VQcm9maWxlLmgiCi0KLSNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJDYWxsRWRnZVByb2ZpbGVJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLUNhbGxFZGdlTGlzdCBDYWxsRWRnZVByb2ZpbGU6OmNhbGxF
ZGdlcygpIGNvbnN0Ci17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsK
LSAgICAKLSAgICBDYWxsRWRnZUxpc3QgcmVzdWx0OwotICAgIAotICAgIENhbGxWYXJpYW50IHBy
aW1hcnlDYWxsZWUgPSBtX3ByaW1hcnlDYWxsZWU7Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbnVt
Q2FsbHNUb1ByaW1hcnkgPSBtX251bUNhbGxzVG9QcmltYXJ5OwotICAgIC8vIERlZmVuZCBhZ2Fp
bnN0IHJhY2VzLiBUaGVzZSBmaWVsZHMgYXJlIG1vZGlmaWVkIGJ5IHRoZSBsb2cgcHJvY2Vzc29y
IHdpdGhvdXQgbG9ja2luZy4KLSAgICBpZiAoISFwcmltYXJ5Q2FsbGVlICYmIG51bUNhbGxzVG9Q
cmltYXJ5KQotICAgICAgICByZXN1bHQuYXBwZW5kKENhbGxFZGdlKHByaW1hcnlDYWxsZWUsIG51
bUNhbGxzVG9QcmltYXJ5KSk7Ci0gICAgCi0gICAgaWYgKG1fb3RoZXJDYWxsZWVzKSB7Ci0gICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGlmIHRoZSBwcmltYXJ5IHRocmVhZCBoYWQganVzdCBjcmVh
dGVkIGEgbV9vdGhlckNhbGxlcyB3aGlsZSBsb2cKLSAgICAgICAgLy8gcHJvY2Vzc2luZywgd2Ug
c2VlIGEgY29uc2lzdGVudGx5IGNyZWF0ZWQgb25lLiBUaGUgbG9jayBiZWluZyBoZWxkIGlzIGlu
c3VmZmljaWVudCBmb3IKLSAgICAgICAgLy8gdGhpcywgc2luY2UgdGhlIGxvZyBwcm9jZXNzb3Ig
d2lsbCBvbmx5IGdyYWIgdGhlIGxvY2sgd2hlbiBtZXJnaW5nIHRoZSBzZWNvbmRhcnkKLSAgICAg
ICAgLy8gc3BlY3RydW0gaW50byB0aGUgcHJpbWFyeSBvbmUgYnV0IG1heSBzdGlsbCBjcmVhdGUg
dGhlIGRhdGEgc3RydWN0dXJlIHdpdGhvdXQgaG9sZGluZwotICAgICAgICAvLyBsb2Nrcy4KLSAg
ICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIGZvciAoQ2FsbEVkZ2UmIGVudHJ5
IDogbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkKSB7Ci0gICAgICAgICAgICAvLyBEZWZlbmQg
YWdhaW5zdCB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGUgcHJpbWFyeSBkdXBsaWNhdGVzIGFuIGVu
dHJ5IGluIHRoZSBzZWNvbmRhcnkKLSAgICAgICAgICAgIC8vIHNwZWN0cnVtLiBUaGF0IGNhbiBo
YXBwZW4gd2hlbiB0aGUgR0MgcmVtb3ZlcyB0aGUgcHJpbWFyeS4gV2UgY291bGQgaGF2ZSB0aGUg
R0MgZml4Ci0gICAgICAgICAgICAvLyB0aGUgc2l0dWF0aW9uIGJ5IGNoYW5naW5nIHRoZSBwcmlt
YXJ5IHRvIGJlIHNvbWV0aGluZyBmcm9tIHRoZSBzZWNvbmRhcnkgc3BlY3RydW0sCi0gICAgICAg
ICAgICAvLyBidXQgdGhpcyBmaXggc2VlbXMgc2ltcGxlciB0byBpbXBsZW1lbnQgYW5kIGFsc28g
Y2hlYXBlci4KLSAgICAgICAgICAgIGlmIChlbnRyeS5jYWxsZWUoKSA9PSByZXN1bHRbMF0uY2Fs
bGVlKCkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSBDYWxsRWRnZShyZXN1bHRbMF0u
Y2FsbGVlKCksIGVudHJ5LmNvdW50KCkgKyByZXN1bHRbMF0uY291bnQoKSk7Ci0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoZW50cnkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0ZDo6
c29ydChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpLCBbXSAoY29uc3QgQ2FsbEVkZ2UmIGEs
IGNvbnN0IENhbGxFZGdlJiBiKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiBhLmNvdW50
KCkgPiBiLmNvdW50KCk7Ci0gICAgICAgIH0pOwotICAgIAotICAgIGlmIChyZXN1bHQuc2l6ZSgp
ID49IDIpCi0gICAgICAgIEFTU0VSVChyZXN1bHRbMF0uY291bnQoKSA+PSByZXN1bHQubGFzdCgp
LmNvdW50KCkpOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUNhbGxFZGdlQ291bnRU
eXBlIENhbGxFZGdlUHJvZmlsZTo6bnVtQ2FsbHNUb0tub3duQ2VsbHMoKSBjb25zdAotewotICAg
IENhbGxFZGdlQ291bnRUeXBlIHJlc3VsdCA9IDA7Ci0gICAgZm9yIChDYWxsRWRnZSYgZWRnZSA6
IGNhbGxFZGdlcygpKQotICAgICAgICByZXN1bHQgKz0gZWRnZS5jb3VudCgpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBib29sIHdvcnRoRGVzcGVjaWZ5aW5nKGNvbnN0IENhbGxW
YXJpYW50JiB2YXJpYW50KQotewotICAgIHJldHVybiAhSGVhcDo6aXNNYXJrZWQodmFyaWFudC5y
YXdDYWxsZWVDZWxsKCkpCi0gICAgICAgICYmIEhlYXA6OmlzTWFya2VkKHZhcmlhbnQuZGVzcGVj
aWZpZWRDbG9zdXJlKCkucmF3Q2FsbGVlQ2VsbCgpKTsKLX0KLQotYm9vbCBDYWxsRWRnZVByb2Zp
bGU6OndvcnRoRGVzcGVjaWZ5aW5nKCkKLXsKLSAgICBpZiAobV9jbG9zdXJlc0FyZURlc3BlY2lm
aWVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgYm9vbCBkaWRTZWVFbnRyeSA9
IGZhbHNlOwotICAgIAotICAgIGlmICghIW1fcHJpbWFyeUNhbGxlZSkgewotICAgICAgICBkaWRT
ZWVFbnRyeSA9IHRydWU7Ci0gICAgICAgIGlmICghSlNDOjp3b3J0aERlc3BlY2lmeWluZyhtX3By
aW1hcnlDYWxsZWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAg
ICBpZiAobV9vdGhlckNhbGxlZXMpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vdGhl
ckNhbGxlZXMtPm1fcHJvY2Vzc2VkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgZGlkU2Vl
RW50cnkgPSB0cnVlOwotICAgICAgICAgICAgaWYgKCFKU0M6OndvcnRoRGVzcGVjaWZ5aW5nKG1f
b3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jYWxsZWUoKSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBkaWRTZWVF
bnRyeTsKLX0KLQotdm9pZCBDYWxsRWRnZVByb2ZpbGU6OnZpc2l0V2VhaygpCi17Ci0gICAgaWYg
KCFtX3ByaW1hcnlDYWxsZWUgJiYgIW1fb3RoZXJDYWxsZWVzKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAKLSAgICAv
LyBTZWUgaWYgYW55dGhpbmcgaXMgZGVhZCBhbmQgaWYgdGhhdCBjYW4gYmUgcmVjdGlmaWVkIGJ5
IGRlc3BlY2lmeWluZy4KLSAgICBpZiAod29ydGhEZXNwZWNpZnlpbmcoKSkgewotICAgICAgICBD
YWxsU3BlY3RydW0gbmV3U3BlY3RydW07Ci0gICAgICAgIAotICAgICAgICBpZiAoISFtX3ByaW1h
cnlDYWxsZWUpCi0gICAgICAgICAgICBuZXdTcGVjdHJ1bS5hZGQobV9wcmltYXJ5Q2FsbGVlLmRl
c3BlY2lmaWVkQ2xvc3VyZSgpLCBtX251bUNhbGxzVG9QcmltYXJ5KTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChtX290aGVyQ2FsbGVlcykgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAg
ICAgIG5ld1NwZWN0cnVtLmFkZCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMt
Pm1fcHJvY2Vzc2VkW2ldLmNhbGxlZSgpLmRlc3BlY2lmaWVkQ2xvc3VyZSgpLAotICAgICAgICAg
ICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY291bnQoKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxDYWxsU3BlY3Ry
dW06OktleUFuZENvdW50PiBsaXN0ID0gbmV3U3BlY3RydW0uYnVpbGRMaXN0KCk7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKGxpc3Quc2l6ZSgpKTsKLSAgICAgICAgbV9wcmltYXJ5Q2FsbGVlID0g
bGlzdC5sYXN0KCkua2V5OwotICAgICAgICBtX251bUNhbGxzVG9QcmltYXJ5ID0gbGlzdC5sYXN0
KCkuY291bnQ7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9vdGhlckNhbGxlZXMpIHsKLSAgICAg
ICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5jbGVhcigpOwotCi0gICAgICAgICAg
ICAvLyBXZSBjb3VsZCBoYXZlIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBHQyBjbGVhcnMgdGhlIHBy
aW1hcnkgYW5kIHRoZW4gbG9nIHByb2Nlc3NpbmcKLSAgICAgICAgICAgIC8vIHJlaW5zdGF0ZXMg
aXQgd2l0aG91dCBldmVyIGRvaW5nIGFuIGFkZFNsb3cgYW5kIHN1YnNlcXVlbnQgbWVyZ2VCYWNr
LiBJbiBzdWNoIGEgY2FzZQotICAgICAgICAgICAgLy8gdGhlIHByaW1hcnkgY291bGQgZHVwbGlj
YXRlIGFuIGVudHJ5IGluIG90aGVyQ2FsbGVlcywgd2hpY2ggbWVhbnMgdGhhdCBldmVuIHRob3Vn
aCB3ZQotICAgICAgICAgICAgLy8gaGFkIGFuIG90aGVyQ2FsbGVlcyBvYmplY3QsIHRoZSBsaXN0
IHNpemUgaXMganVzdCAxLgotICAgICAgICAgICAgaWYgKGxpc3Quc2l6ZSgpID49IDIpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaXN0LnNpemUoKSAtIDE7IGktLTspCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5hcHBlbmQoQ2Fs
bEVkZ2UobGlzdFtpXS5rZXksIGxpc3RbaV0uY291bnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgbV9jbG9zdXJlc0FyZURlc3BlY2lmaWVkID0gdHJ1ZTsK
LSAgICAgICAgCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCEhbV9wcmlt
YXJ5Q2FsbGVlICYmICFIZWFwOjppc01hcmtlZChtX3ByaW1hcnlDYWxsZWUucmF3Q2FsbGVlQ2Vs
bCgpKSkgewotICAgICAgICBtX251bUNhbGxzVG9Vbmtub3duQ2VsbCArPSBtX251bUNhbGxzVG9Q
cmltYXJ5OwotICAgICAgICAKLSAgICAgICAgbV9wcmltYXJ5Q2FsbGVlID0gQ2FsbFZhcmlhbnQo
KTsKLSAgICAgICAgbV9udW1DYWxsc1RvUHJpbWFyeSA9IDA7Ci0gICAgfQotICAgIAotICAgIGlm
IChtX290aGVyQ2FsbGVlcykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9v
dGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAo
SGVhcDo6aXNNYXJrZWQobV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNhbGxlZSgpLnJh
d0NhbGxlZUNlbGwoKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIG1fbnVtQ2FsbHNUb1Vua25vd25DZWxsICs9IG1fb3RoZXJDYWxsZWVzLT5t
X3Byb2Nlc3NlZFtpXS5jb3VudCgpOwotICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJv
Y2Vzc2VkW2ktLV0gPSBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQubGFzdCgpOwotICAgICAg
ICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLnJlbW92ZUxhc3QoKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgLy8gT25seSBleGlzdHMgd2hpbGUgd2UgYXJlIHByb2Nlc3Np
bmcgdGhlIGxvZy4KLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fb3RoZXJDYWxsZWVzLT5tX3Rl
bXBvcmFyeVNwZWN0cnVtKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ2FsbEVkZ2VQcm9maWxlOjphZGRT
bG93KENhbGxWYXJpYW50IGNhbGxlZSwgQ2FsbEVkZ2VQcm9maWxlVmVjdG9yJiBtZXJnZUJhY2tM
b2cpCi17Ci0gICAgLy8gVGhpcyBleGlzdHMgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBzcGVj
dHJ1bSB3YXNuJ3QgY3JlYXRlZCB5ZXQsIG9yIHdlJ3JlIHN0b3JpbmcgdG8gYQotICAgIC8vIHBh
cnRpY3VsYXIgc3BlY3RydW0gZm9yIHRoZSBmaXJzdCB0aW1lIGR1cmluZyBhIGxvZyBwcm9jZXNz
aW5nIGl0ZXJhdGlvbi4KLSAgICAKLSAgICBpZiAoIW1fb3RoZXJDYWxsZWVzKSB7Ci0gICAgICAg
IG1fb3RoZXJDYWxsZWVzID0gc3RkOjptYWtlX3VuaXF1ZTxTZWNvbmRhcnk+KCk7Ci0gICAgICAg
IC8vIElmIGEgY29tcGlsZXIgdGhyZWFkIG5vdGljZXMgdGhlIG1fb3RoZXJDYWxsZWVzIGJlaW5n
IG5vbi1udWxsLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZQotICAgICAgICAvLyB0aGF0IGl0IHNlZXMg
YSBmdWxseSBjcmVhdGVkIG9uZS4KLSAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAg
ICB9Ci0gICAgCi0gICAgaWYgKCFtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSkg
ewotICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q2FsbFNwZWN0cnVtPigpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX290
aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX290
aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bS0+YWRkKAotICAgICAgICAgICAgICAgIG1f
b3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jYWxsZWUoKSwKLSAgICAgICAgICAgICAgICBt
X290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY291bnQoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdl
J3JlIHNlZWluZyB0aGlzIHByb2ZpbGUgZHVyaW5nIHRoaXMgbG9nCi0gICAgICAgIC8vIHByb2Nl
c3NpbmcgaXRlcmF0aW9uLgotICAgICAgICBtZXJnZUJhY2tMb2cuYXBwZW5kKHRoaXMpOwotICAg
IH0KLSAgICAKLSAgICBtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bS0+YWRkKGNh
bGxlZSk7Ci19Ci0KLXZvaWQgQ2FsbEVkZ2VQcm9maWxlOjptZXJnZUJhY2soKQotewotICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NF
UlQobV9vdGhlckNhbGxlZXMpOwotICAgIFJFTEVBU0VfQVNTRVJUKG1fb3RoZXJDYWxsZWVzLT5t
X3RlbXBvcmFyeVNwZWN0cnVtKTsKLSAgICAKLSAgICBpZiAoISFtX3ByaW1hcnlDYWxsZWUpCi0g
ICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtLT5hZGQobV9wcmltYXJ5
Q2FsbGVlLCBtX251bUNhbGxzVG9QcmltYXJ5KTsKLSAgICAKLSAgICBpZiAoIW1fY2xvc3VyZXNB
cmVEZXNwZWNpZmllZCkgewotICAgICAgICBDYWxsU3BlY3RydW0gbmV3U3BlY3RydW07Ci0gICAg
ICAgIGZvciAoYXV0byYgZW50cnkgOiAqbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3Ry
dW0pCi0gICAgICAgICAgICBuZXdTcGVjdHJ1bS5hZGQoZW50cnkua2V5LmRlc3BlY2lmaWVkQ2xv
c3VyZSgpLCBlbnRyeS52YWx1ZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobmV3U3BlY3RydW0u
c2l6ZSgpIDwgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0tPnNpemUoKSkgewot
ICAgICAgICAgICAgKm1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtID0gbmV3U3Bl
Y3RydW07Ci0gICAgICAgICAgICBtX2Nsb3N1cmVzQXJlRGVzcGVjaWZpZWQgPSB0cnVlOwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIFZlY3RvcjxDYWxsU3BlY3RydW06OktleUFuZENvdW50
PiBsaXN0ID0gbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0tPmJ1aWxkTGlzdCgp
OwotICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtID0gbnVsbHB0cjsKLSAg
ICAKLSAgICBtX3ByaW1hcnlDYWxsZWUgPSBsaXN0Lmxhc3QoKS5rZXk7Ci0gICAgbV9udW1DYWxs
c1RvUHJpbWFyeSA9IGxpc3QubGFzdCgpLmNvdW50OwotICAgIGxpc3QucmVtb3ZlTGFzdCgpOwot
ICAgIAotICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5jbGVhcigpOwotICAgIGZvciAo
dW5zaWduZWQgY291bnQgPSBtYXhLbm93bkNhbGxlZXM7IGNvdW50LS0gJiYgIWxpc3QuaXNFbXB0
eSgpOykgewotICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuYXBwZW5kKENhbGxF
ZGdlKGxpc3QubGFzdCgpLmtleSwgbGlzdC5sYXN0KCkuY291bnQpKTsKLSAgICAgICAgbGlzdC5y
ZW1vdmVMYXN0KCk7Ci0gICAgfQotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IGxpc3Quc2l6
ZSgpOyBpLS07KQotICAgICAgICBtX251bUNhbGxzVG9Vbmtub3duQ2VsbCArPSBsaXN0W2ldLmNv
dW50OwotfQotCi12b2lkIENhbGxFZGdlUHJvZmlsZTo6ZmFkZUJ5SGFsZigpCi17Ci0gICAgbV9u
dW1DYWxsc1RvUHJpbWFyeSA+Pj0gMTsKLSAgICBtX251bUNhbGxzVG9Ob3RDZWxsID4+PSAxOwot
ICAgIG1fbnVtQ2FsbHNUb1Vua25vd25DZWxsID4+PSAxOwotICAgIG1fdG90YWxDb3VudCA+Pj0g
MTsKLSAgICAKLSAgICBpZiAobV9vdGhlckNhbGxlZXMpIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldID0gQ2FsbEVkZ2UoCi0gICAgICAg
ICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNhbGxlZSgpLAotICAgICAg
ICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jb3VudCgpID4+IDEpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9vdGhlckNhbGxlZXMtPm1fdGVtcG9y
YXJ5U3BlY3RydW0pIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqbV9vdGhlckNh
bGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0pCi0gICAgICAgICAgICAgICAgZW50cnkudmFsdWUg
Pj49IDE7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUNhbGxFZGdlTG9nOjpDYWxsRWRnZUxvZygp
Ci0gICAgOiBtX3NjYWxlZExvZ0luZGV4KGxvZ1NpemUgKiBzaXplb2YoRW50cnkpKQotewotICAg
IEFTU0VSVCghKG1fc2NhbGVkTG9nSW5kZXggJSBzaXplb2YoRW50cnkpKSk7Ci19Ci0KLUNhbGxF
ZGdlTG9nOjp+Q2FsbEVkZ2VMb2coKSB7IH0KLQotYm9vbCBDYWxsRWRnZUxvZzo6aXNFbmFibGVk
KCkKLXsKLSAgICByZXR1cm4gT3B0aW9uczo6ZW5hYmxlQ2FsbEVkZ2VQcm9maWxpbmcoKSAmJiBP
cHRpb25zOjp1c2VGVExKSVQoKTsKLX0KLQotI2lmIEVOQUJMRShKSVQpCi0KLWV4dGVybiAiQyIg
SklUX09QRVJBVElPTiB2b2lkIG9wZXJhdGlvblByb2Nlc3NDYWxsRWRnZUxvZyhDYWxsRWRnZUxv
ZyopIFdURl9JTlRFUk5BTDsKLWV4dGVybiAiQyIgSklUX09QRVJBVElPTiB2b2lkIG9wZXJhdGlv
blByb2Nlc3NDYWxsRWRnZUxvZyhDYWxsRWRnZUxvZyogbG9nKQotewotICAgIGxvZy0+cHJvY2Vz
c0xvZygpOwotfQotCi12b2lkIENhbGxFZGdlTG9nOjplbWl0TG9nQ29kZShDQ2FsbEhlbHBlcnMm
IGppdCwgQ2FsbEVkZ2VQcm9maWxlJiBwcm9maWxlLCBKU1ZhbHVlUmVncyBjYWxsZWVSZWdzKQot
ewotICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzID0gMTsKLSAgICAKLSAgICBH
UFJSZWcgc2NyYXRjaEdQUjsKLSAgICBpZiAoIWNhbGxlZVJlZ3MudXNlcyhHUFJJbmZvOjpyZWdU
MCkpCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdUMDsKLSAgICBlbHNlIGlmICgh
Y2FsbGVlUmVncy51c2VzKEdQUkluZm86OnJlZ1QxKSkKLSAgICAgICAgc2NyYXRjaEdQUiA9IEdQ
UkluZm86OnJlZ1QxOwotICAgIGVsc2UKLSAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnJl
Z1QyOwotICAgIAotICAgIGppdC5sb2FkMzIoJm1fc2NhbGVkTG9nSW5kZXgsIHNjcmF0Y2hHUFIp
OwotICAgIAotICAgIENDYWxsSGVscGVyczo6SnVtcCBvayA9IGppdC5icmFuY2hUZXN0MzIoQ0Nh
bGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSKTsKLSAgICAKLSAgICBBU1NFUlRfVU5VU0VE
KG51bWJlck9mQXJndW1lbnRzLCBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpID49IDEgKyBudW1i
ZXJPZkFyZ3VtZW50cyk7Ci0gICAgCi0gICAgaml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMihzdGFja0FsaWdubWVudEJ5dGVzKCkpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLSAgICAKLSAgICBqaXQuc3RvcmVWYWx1ZShjYWxsZWVSZWdzLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9m
KEpTVmFsdWUpKSk7Ci0gICAgaml0LnNldHVwQXJndW1lbnRzKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cih0aGlzKSk7Ci0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uUHJvY2Vzc0NhbGxFZGdlTG9nKSksIEdQUklu
Zm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAg
IGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHNpemVvZihKU1ZhbHVlKSksIGNhbGxlZVJlZ3MpOwotICAgIAotICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRCeXRl
cygpKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgCi0gICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9nU2l6ZSAqIHNpemVvZihFbnRyeSkp
LCBzY3JhdGNoR1BSKTsKLSAgICBvay5saW5rKCZqaXQpOwotCi0gICAgaml0LnN1YjMyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihFbnRyeSkpLCBzY3JhdGNoR1BSKTsKLSAgICBq
aXQuc3RvcmUzMihzY3JhdGNoR1BSLCAmbV9zY2FsZWRMb2dJbmRleCk7Ci0gICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9sb2cpLCBzY3JhdGNoR1BSKTsKLSAgICBq
aXQuc3RvcmVWYWx1ZShjYWxsZWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgT0JKRUNUX09GRlNFVE9GKEVudHJ5LCBtX3ZhbHVlKSkpOwotICAgIGppdC5zdG9yZVB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnByb2ZpbGUpLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEVudHJ5LCBtX3Byb2ZpbGUpKSk7Ci19Ci0K
LXZvaWQgQ2FsbEVkZ2VMb2c6OmVtaXRMb2dDb2RlKAotICAgIENDYWxsSGVscGVycyYgaml0LCBP
d25QdHI8Q2FsbEVkZ2VQcm9maWxlPiYgcHJvZmlsZVBvaW50ZXIsIEpTVmFsdWVSZWdzIGNhbGxl
ZVJlZ3MpCi17Ci0gICAgaWYgKCFpc0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIHByb2ZpbGVQb2ludGVyLmNyZWF0ZVRyYW5zYWN0aW9uYWxseSgpOwotICAgIGVtaXRMb2dD
b2RlKGppdCwgKnByb2ZpbGVQb2ludGVyLCBjYWxsZWVSZWdzKTsKLX0KLQotI2VuZGlmIC8vIEVO
QUJMRShKSVQpCi0KLXZvaWQgQ2FsbEVkZ2VMb2c6OnByb2Nlc3NMb2coKQotewotICAgIEFTU0VS
VCghKG1fc2NhbGVkTG9nSW5kZXggJSBzaXplb2YoRW50cnkpKSk7Ci0gICAgCi0gICAgaWYgKE9w
dGlvbnM6OmNhbGxFZGdlUHJvZmlsZVJlYWxseVByb2Nlc3Nlc0xvZygpKSB7Ci0gICAgICAgIENh
bGxFZGdlUHJvZmlsZVZlY3RvciBtZXJnZUJhY2tMb2c7Ci0gICAgICAgIAotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX3NjYWxlZExvZ0luZGV4IC8gc2l6ZW9mKEVudHJ5KTsgaSA8IGxvZ1Np
emU7ICsraSkKLSAgICAgICAgICAgIG1fbG9nW2ldLm1fcHJvZmlsZS0+YWRkKG1fbG9nW2ldLm1f
dmFsdWUsIG1lcmdlQmFja0xvZyk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtZXJnZUJhY2tMb2cuc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgbWVyZ2VCYWNrTG9nW2ld
LT5tZXJnZUJhY2soKTsKLSAgICB9Ci0gICAgCi0gICAgbV9zY2FsZWRMb2dJbmRleCA9IGxvZ1Np
emUgKiBzaXplb2YoRW50cnkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuaAkocmV2
aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdl
UHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2FsbEVkZ2VQcm9maWxl
X2gKLSNkZWZpbmUgQ2FsbEVkZ2VQcm9maWxlX2gKLQotI2luY2x1ZGUgIkNhbGxFZGdlLmgiCi0j
aW5jbHVkZSAiQ2FsbFZhcmlhbnQuaCIKLSNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgot
I2luY2x1ZGUgIkdQUkluZm8uaCIKLSNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDQ2FsbEhlbHBlcnM7Ci1jbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci0KLWNsYXNzIENhbGxFZGdlTG9nOwotY2xhc3MgQ2Fs
bEVkZ2VQcm9maWxlOwotdHlwZWRlZiBWZWN0b3I8Q2FsbEVkZ2VQcm9maWxlKiwgMTA+IENhbGxF
ZGdlUHJvZmlsZVZlY3RvcjsKLQotY2xhc3MgQ2FsbEVkZ2VQcm9maWxlIHsKLXB1YmxpYzoKLSAg
ICBDYWxsRWRnZVByb2ZpbGUoKTsKLSAgICAKLSAgICBDYWxsRWRnZUNvdW50VHlwZSBudW1DYWxs
c1RvTm90Q2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbHNUb05vdENlbGw7IH0KLSAgICBD
YWxsRWRnZUNvdW50VHlwZSBudW1DYWxsc1RvVW5rbm93bkNlbGwoKSBjb25zdCB7IHJldHVybiBt
X251bUNhbGxzVG9Vbmtub3duQ2VsbDsgfQotICAgIENhbGxFZGdlQ291bnRUeXBlIG51bUNhbGxz
VG9Lbm93bkNlbGxzKCkgY29uc3Q7Ci0gICAgCi0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgdG90YWxD
YWxscygpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxDb3VudDsgfQotICAgIAotICAgIC8vIENhbGwg
d2hpbGUgaG9sZGluZyB0aGUgb3duaW5nIENvZGVCbG9jaydzIGxvY2suCi0gICAgQ2FsbEVkZ2VM
aXN0IGNhbGxFZGdlcygpIGNvbnN0OwotICAgIAotICAgIHZvaWQgdmlzaXRXZWFrKCk7Ci0gICAg
Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDYWxsRWRnZUxvZzsKLSAgICAKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbWF4S25vd25DYWxsZWVzID0gNTsKLSAgICAKLSAgICB2b2lkIGFk
ZChKU1ZhbHVlLCBDYWxsRWRnZVByb2ZpbGVWZWN0b3ImIG1lcmdlQmFja0xvZyk7Ci0gICAgCi0g
ICAgYm9vbCB3b3J0aERlc3BlY2lmeWluZygpOwotICAgIHZvaWQgYWRkU2xvdyhDYWxsVmFyaWFu
dCwgQ2FsbEVkZ2VQcm9maWxlVmVjdG9yJiBtZXJnZUJhY2tMb2cpOwotICAgIHZvaWQgbWVyZ2VC
YWNrKCk7Ci0gICAgdm9pZCBmYWRlQnlIYWxmKCk7Ci0gICAgCi0gICAgLy8gSXQncyBjaGVhcGVy
IHRvIGxldCB0aGlzIGhhdmUgaXRzIG93biBsb2NrLiBJdCBuZWVkcyB0byBiZSBhYmxlIHRvIGZp
bmQgd2hpY2ggbG9jayB0bwotICAgIC8vIGxvY2suIE5vcm1hbGx5IGl0IHdvdWxkIGxvY2sgdGhl
IG93bmluZyBDb2RlQmxvY2sncyBsb2NrLCBidXQgdGhhdCB3b3VsZCByZXF1aXJlIGEKLSAgICAv
LyBwb2ludGVyLXdpZHRoIHdvcmQgdG8gcG9pbnQgYXQgdGhlIENvZGVCbG9jay4gSGF2aW5nIHRo
ZSBieXRlLXNpemVkIGxvY2sgaGVyZSBpcwotICAgIC8vIGNoZWFwZXIuIEhvd2V2ZXIsIHRoaXMg
bWVhbnMgdGhhdCB0aGUgcmVsYXRpb25zaGlwIHdpdGggdGhlIENvZGVCbG9jayBsb2NrIGlzOgot
ICAgIC8vIGFjcXVpcmUgdGhlIENvZGVCbG9jayBsb2NrIGJlZm9yZSB0aGlzIG9uZS4KLSAgICBt
dXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsKLSAgICAKLSAgICBib29sIG1fY2xvc3Vy
ZXNBcmVEZXNwZWNpZmllZDsKLSAgICAKLSAgICBDYWxsRWRnZUNvdW50VHlwZSBtX251bUNhbGxz
VG9QcmltYXJ5OwotICAgIENhbGxFZGdlQ291bnRUeXBlIG1fbnVtQ2FsbHNUb05vdENlbGw7Ci0g
ICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV9udW1DYWxsc1RvVW5rbm93bkNlbGw7Ci0gICAgQ2FsbEVk
Z2VDb3VudFR5cGUgbV90b3RhbENvdW50OwotICAgIENhbGxWYXJpYW50IG1fcHJpbWFyeUNhbGxl
ZTsKLSAgICAKLSAgICB0eXBlZGVmIFNwZWN0cnVtPENhbGxWYXJpYW50LCBDYWxsRWRnZUNvdW50
VHlwZT4gQ2FsbFNwZWN0cnVtOwotICAgIAotICAgIHN0cnVjdCBTZWNvbmRhcnkgewotICAgICAg
ICBWZWN0b3I8Q2FsbEVkZ2U+IG1fcHJvY2Vzc2VkOyAvLyBQcm9jZXNzZWQgYnV0IG5vdCBuZWNl
c3NhcmlseSBzb3J0ZWQuCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsU3BlY3RydW0+IG1f
dGVtcG9yYXJ5U3BlY3RydW07Ci0gICAgfTsKLSAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Vj
b25kYXJ5PiBtX290aGVyQ2FsbGVlczsKLX07Ci0KLWNsYXNzIENhbGxFZGdlTG9nIHsKLXB1Ymxp
YzoKLSAgICBDYWxsRWRnZUxvZygpOwotICAgIH5DYWxsRWRnZUxvZygpOwotCi0gICAgc3RhdGlj
IGJvb2wgaXNFbmFibGVkKCk7Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICB2b2lkIGVtaXRM
b2dDb2RlKENDYWxsSGVscGVycyYsIENhbGxFZGdlUHJvZmlsZSYsIEpTVmFsdWVSZWdzIGNhbGxl
ZVJlZ3MpOyAvLyBBc3N1bWVzIHRoYXQgc3RhY2sgaXMgYWxpZ25lZCwgYWxsIHZvbGF0aWxlIHJl
Z2lzdGVycyAtIG90aGVyIHRoYW4gY2FsbGVlR1BSIC0gYXJlIGNsb2JiZXJhYmxlLCBhbmQgdGhl
IHBhcmFtZXRlciBzcGFjZSBpcyBpbiB1c2UuCi0gICAgCi0gICAgLy8gU2FtZSBhcyBhYm92ZSBi
dXQgY3JlYXRlcyBhIENhbGxFZGdlUHJvZmlsZSBpbnN0YW5jZSBpZiBvbmUgZGlkIG5vdCBhbHJl
YWR5IGV4aXN0LiBEb2VzCi0gICAgLy8gdGhpcyBpbiBhIHRocmVhZC1zYWZlIG1hbm5lciBieSBj
YWxsaW5nIE93blB0cjo6Y3JlYXRlVHJhbnNhY3Rpb25hbGx5LgotICAgIHZvaWQgZW1pdExvZ0Nv
ZGUoQ0NhbGxIZWxwZXJzJiwgT3duUHRyPENhbGxFZGdlUHJvZmlsZT4mLCBKU1ZhbHVlUmVncyBj
YWxsZWVSZWdzKTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotICAgIAotICAgIHZvaWQgcHJvY2Vz
c0xvZygpOwotICAgIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvZ1NpemUgPSAxMDAwMDsKLSAg
ICAKLSAgICBzdHJ1Y3QgRW50cnkgewotICAgICAgICBKU1ZhbHVlIG1fdmFsdWU7Ci0gICAgICAg
IENhbGxFZGdlUHJvZmlsZSogbV9wcm9maWxlOwotICAgIH07Ci0gICAgCi0gICAgdW5zaWduZWQg
bV9zY2FsZWRMb2dJbmRleDsKLSAgICBFbnRyeSBtX2xvZ1tsb2dTaXplXTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQ2FsbEVkZ2VQcm9maWxlX2gKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZUlubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxl
SW5saW5lcy5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzX2gKLSNkZWZpbmUgQ2FsbEVkZ2VQcm9maWxlSW5s
aW5lc19oCi0KLSNpbmNsdWRlICJDYWxsRWRnZVByb2ZpbGUuaCIKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLWlubGluZSBDYWxsRWRnZVByb2ZpbGU6OkNhbGxFZGdlUHJvZmlsZSgpCi0gICAgOiBtX2Ns
b3N1cmVzQXJlRGVzcGVjaWZpZWQoZmFsc2UpCi0gICAgLCBtX251bUNhbGxzVG9QcmltYXJ5KDAp
Ci0gICAgLCBtX251bUNhbGxzVG9Ob3RDZWxsKDApCi0gICAgLCBtX251bUNhbGxzVG9Vbmtub3du
Q2VsbCgwKQotICAgICwgbV90b3RhbENvdW50KDApCi0gICAgLCBtX3ByaW1hcnlDYWxsZWUobnVs
bHB0cikKLXsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIENhbGxFZGdlUHJvZmlsZTo6YWRkKEpT
VmFsdWUgdmFsdWUsIENhbGxFZGdlUHJvZmlsZVZlY3RvciYgbWVyZ2VCYWNrTG9nKQotewotICAg
IHVuc2lnbmVkIG5ld1RvdGFsQ291bnQgPSBtX3RvdGFsQ291bnQgKyAxOwotICAgIGlmIChVTkxJ
S0VMWSghbmV3VG90YWxDb3VudCkpIHsKLSAgICAgICAgZmFkZUJ5SGFsZigpOyAvLyBUYWNrbGUg
b3ZlcmZsb3dzIGJ5IGRpdmlkaW5nIGFsbCBjb3VudHMgYnkgdHdvLgotICAgICAgICBuZXdUb3Rh
bENvdW50ID0gbV90b3RhbENvdW50ICsgMTsKLSAgICB9Ci0gICAgQVNTRVJUKG5ld1RvdGFsQ291
bnQpOwotICAgIG1fdG90YWxDb3VudCA9IG5ld1RvdGFsQ291bnQ7Ci0gICAgCi0gICAgaWYgKFVO
TElLRUxZKCF2YWx1ZS5pc0NlbGwoKSkpIHsKLSAgICAgICAgbV9udW1DYWxsc1RvTm90Q2VsbCsr
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ2FsbFZhcmlhbnQgY2FsbGVlID0gQ2Fs
bFZhcmlhbnQodmFsdWUuYXNDZWxsKCkpOwotICAgIAotICAgIGlmIChtX2Nsb3N1cmVzQXJlRGVz
cGVjaWZpZWQpCi0gICAgICAgIGNhbGxlZSA9IGNhbGxlZS5kZXNwZWNpZmllZENsb3N1cmUoKTsK
LSAgICAKLSAgICBpZiAoVU5MSUtFTFkoIW1fcHJpbWFyeUNhbGxlZSkpIHsKLSAgICAgICAgbV9w
cmltYXJ5Q2FsbGVlID0gY2FsbGVlOwotICAgICAgICBtX251bUNhbGxzVG9QcmltYXJ5ID0gMTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gICAgaWYgKExJS0VMWShtX3ByaW1h
cnlDYWxsZWUgPT0gY2FsbGVlKSkgewotICAgICAgICBtX251bUNhbGxzVG9QcmltYXJ5Kys7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIGlmIChVTkxJS0VMWSghbV9vdGhl
ckNhbGxlZXMpKSB7Ci0gICAgICAgIGFkZFNsb3coY2FsbGVlLCBtZXJnZUJhY2tMb2cpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBDYWxsU3BlY3RydW0qIHNlY29uZGFy
eSA9IG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtLmdldCgpOwotICAgIGlmICgh
c2Vjb25kYXJ5KSB7Ci0gICAgICAgIGFkZFNsb3coY2FsbGVlLCBtZXJnZUJhY2tMb2cpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBzZWNvbmRhcnktPmFkZChjYWxsZWUp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIENhbGxFZGdlUHJvZmlsZUlu
bGluZXNfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJ
bmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmNwcAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJERkdUaHVua3MuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTYxLDEyICs2
MiwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZmCiB7CiAgICAg
aWYgKGlzTGlua2VkKCkpIHsKICAgICAgICAgaWYgKHN0dWIpIHsKLSAgICAgICAgICAgIGlmICgh
SGVhcDo6aXNNYXJrZWQoc3R1Yi0+ZXhlY3V0YWJsZSgpKSkgeworICAgICAgICAgICAgaWYgKCFz
dHViLT52aXNpdFdlYWsocmVwYXRjaEJ1ZmZlcikpIHsKICAgICAgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coCiAgICAg
ICAgICAgICAgICAgICAgICAgICAiQ2xlYXJpbmcgY2xvc3VyZSBjYWxsIGZyb20gIiwgKnJlcGF0
Y2hCdWZmZXIuY29kZUJsb2NrKCksICIgdG8gIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
dWItPmV4ZWN1dGFibGUoKS0+aGFzaEZvcihzcGVjaWFsaXphdGlvbktpbmQoKSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAiLCBzdHViIHJvdXRpbmUgIiwgUmF3UG9pbnRlcihzdHViLmdldCgp
KSwgIi5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdER1bXAoc3R1Yi0+dmFyaWFu
dHMoKSksICIsIHN0dWIgcm91dGluZSAiLCBSYXdQb2ludGVyKHN0dWIuZ2V0KCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIi5cbiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB1bmxpbmsocmVwYXRjaEJ1ZmZlcik7CiAgICAgICAgICAgICB9CkBAIC04MywxMSArODQs
NiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZmCiAgICAgfQogICAg
IGlmICghIWxhc3RTZWVuQ2FsbGVlICYmICFIZWFwOjppc01hcmtlZChsYXN0U2VlbkNhbGxlZS5n
ZXQoKSkpCiAgICAgICAgIGxhc3RTZWVuQ2FsbGVlLmNsZWFyKCk7Ci0gICAgCi0gICAgaWYgKGNh
bGxFZGdlUHJvZmlsZSkgewotICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAg
Y2FsbEVkZ2VQcm9maWxlLT52aXNpdFdlYWsoKTsKLSAgICB9CiB9CiAKIENhbGxMaW5rSW5mbyYg
Q2FsbExpbmtJbmZvOjpkdW1teSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEz
ICsyNiwxMiBAQAogI2lmbmRlZiBDYWxsTGlua0luZm9faAogI2RlZmluZSBDYWxsTGlua0luZm9f
aAogCi0jaW5jbHVkZSAiQ2FsbEVkZ2VQcm9maWxlLmgiCi0jaW5jbHVkZSAiQ2xvc3VyZUNhbGxT
dHViUm91dGluZS5oIgogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkNvZGVT
cGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNsdWRlICJKSVRXcml0ZUJhcnJpZXIuaCIKICNpbmNs
dWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1NlbnRpbmVsTGlua2VkTGlzdC5oPgpA
QCAtODIsNyArODEsNyBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2Vu
CiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyOwogICAgIEpJVFdyaXRlQmFy
cmllcjxKU0Z1bmN0aW9uPiBjYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGxh
c3RTZWVuQ2FsbGVlOwotICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViOwor
ICAgIFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gc3R1YjsKICAgICBib29sIGlz
RlRMIDogMTsKICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKICAgICBib29sIGhh
c1NlZW5DbG9zdXJlIDogMTsKQEAgLTkwLDcgKzg5LDYgQEAgc3RydWN0IENhbGxMaW5rSW5mbyA6
IHB1YmxpYyBCYXNpY1Jhd1NlbgogICAgIHVuc2lnbmVkIGNhbGxlZUdQUiA6IDg7CiAgICAgdW5z
aWduZWQgc2xvd1BhdGhDb3VudDsKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47Ci0gICAgT3du
UHRyPENhbGxFZGdlUHJvZmlsZT4gY2FsbEVkZ2VQcm9maWxlOwogCiAgICAgYm9vbCBpc0xpbmtl
ZCgpIHsgcmV0dXJuIHN0dWIgfHwgY2FsbGVlOyB9CiAgICAgdm9pZCB1bmxpbmsoUmVwYXRjaEJ1
ZmZlciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3Rh
dHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtTdGF0dXMuY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ3LDcgKzQ3LDcgQEAgQ2FsbExpbmtTdGF0dXM6OkNhbGxMaW5rU3RhdHVzKEpTVmFsdWUgdgog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIG1fZWRnZXMuYXBwZW5kKENhbGxFZGdl
KENhbGxWYXJpYW50KHZhbHVlLmFzQ2VsbCgpKSwgMSkpOworICAgIG1fdmFyaWFudHMuYXBwZW5k
KENhbGxWYXJpYW50KHZhbHVlLmFzQ2VsbCgpKSk7CiB9CiAKIENhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxv
Y2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQpA
QCAtMTI4LDIzICsxMjgsNiBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZvCiAgICAgLy8gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcywgYnV0IGFueXRpbWUgd2UgaGF2
ZSB0byBkZWJ1ZyB0aGlzIGNvZGUsIGl0IGJlY29tZXMgaW5kaXNwZW5zYWJsZS4KICAgICBVTlVT
RURfUEFSQU0ocHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6OmNhbGxTdGF0
dXNTaG91bGRVc2VDYWxsRWRnZVByb2ZpbGUoKSkgewotICAgICAgICAvLyBBbHdheXMgdHJ1c3Qg
dGhlIGNhbGwgZWRnZSBwcm9maWxlIG92ZXIgYW55dGhpbmcgZWxzZSBzaW5jZSB0aGlzIGhhcyBw
cmVjaXNlIGNvdW50cy4KLSAgICAgICAgLy8gSXQgY2FuIG1ha2UgdGhlIGJlc3QgcG9zc2libGUg
ZGVjaXNpb24gYmVjYXVzZSBpdCBuZXZlciAiZm9yZ2V0cyIgd2hhdCBoYXBwZW5lZCBmb3IgYW55
Ci0gICAgICAgIC8vIGNhbGwsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBmYWRpbmcgb3V0IHRoZSBj
b3VudHMgb2Ygb2xkIGNhbGxzIChmb3IgZXhhbXBsZSBpZiB0aGUKLSAgICAgICAgLy8gY291bnRl
ciB0eXBlIGlzIDE2LWJpdCB0aGVuIGNhbGxzIHRoYXQgaGFwcGVuZWQgbW9yZSB0aGFuIDJeMTYg
Y2FsbHMgYWdvIGFyZSBnaXZlbiBoYWxmCi0gICAgICAgIC8vIHdlaWdodCwgYW5kIHRoaXMgY29t
cG91bmRzIGZvciBldmVyeSAyXjE1IFtzaWNdIGNhbGxzIGFmdGVyIHRoYXQpLiBUaGUgY29tYmlu
YXRpb24gb2YKLSAgICAgICAgLy8gaGlnaCBmaWRlbGl0eSBmb3IgcmVjZW50IGNhbGxzIGFuZCBm
YWRpbmcgZm9yIG9sZGVyIGNhbGxzIG1ha2VzIHRoaXMgdGhlIG1vc3QgdXNlZnVsCi0gICAgICAg
IC8vIG1lY2hhbWlzbSBvZiBjaG9vc2luZyBob3cgdG8gb3B0aW1pemUgZnV0dXJlIGNhbGxzLgot
ICAgICAgICBDYWxsRWRnZVByb2ZpbGUqIGVkZ2VQcm9maWxlID0gY2FsbExpbmtJbmZvLmNhbGxF
ZGdlUHJvZmlsZS5nZXQoKTsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAg
IGlmIChlZGdlUHJvZmlsZSkgewotICAgICAgICAgICAgQ2FsbExpbmtTdGF0dXMgcmVzdWx0ID0g
Y29tcHV0ZUZyb21DYWxsRWRnZVByb2ZpbGUoZWRnZVByb2ZpbGUpOwotICAgICAgICAgICAgaWYg
KCEhcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCiAgICAgcmV0dXJuIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKGxvY2tlciwgY2Fs
bExpbmtJbmZvKTsKIH0KIApAQCAtMTY3LDggKzE1MCwxNiBAQCBDYWxsTGlua1N0YXR1cyBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZUZyCiAgICAgaWYgKGNhbGxMaW5rSW5mby5zbG93UGF0aENvdW50
ID49IE9wdGlvbnM6OmNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCkpCiAgICAgICAgIHJl
dHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCi0gICAgaWYgKENsb3N1cmVDYWxsU3R1YlJvdXRp
bmUqIHN0dWIgPSBjYWxsTGlua0luZm8uc3R1Yi5nZXQoKSkKLSAgICAgICAgcmV0dXJuIENhbGxM
aW5rU3RhdHVzKHN0dWItPmV4ZWN1dGFibGUoKSk7CisgICAgLy8gUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUgaXMgYSBHQ0F3YXJlSklUU3R1YlJvdXRpbmUsIHNvIGlmIG5vbi1udWxsLCBpdCB3
aWxsIHN0YXkgYWxpdmUKKyAgICAvLyB1bnRpbCBuZXh0IEdDIGV2ZW4gaWYgdGhlIENhbGxMaW5r
SW5mbyBpcyBjb25jdXJyZW50bHkgY2xlYXJlZC4gQWxzbywgdGhlIHZhcmlhbnRzIGxpc3QgaXMK
KyAgICAvLyBuZXZlciBtdXRhdGVkIGFmdGVyIHRoZSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZSBpcyBpbnN0YW50aWF0ZWQuIFdlIGhhdmUgc29tZSBjb25zZXJ2YXRpdmUKKyAgICAvLyBmZW5j
aW5nIGluIHBsYWNlIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHNlZSB0aGUgdmFyaWFudHMgbGlzdCBh
ZnRlciBjb25zdHJ1Y3Rpb24uCisgICAgaWYgKFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKiBz
dHViID0gY2FsbExpbmtJbmZvLnN0dWIuZ2V0KCkpIHsKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZl
bmNlKCk7CisgICAgICAgIENhbGxMaW5rU3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
dmFyaWFudHMgPSBzdHViLT52YXJpYW50cygpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KICAgICAKICAgICBKU0Z1bmN0aW9uKiB0YXJnZXQgPSBjYWxsTGlua0luZm8ubGFzdFNlZW5D
YWxsZWUuZ2V0KCk7CiAgICAgaWYgKCF0YXJnZXQpCkBAIC0xODAsMzQgKzE3MSw2IEBAIENhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnIKICAgICByZXR1cm4gQ2FsbExpbmtT
dGF0dXModGFyZ2V0KTsKIH0KIAotQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1
dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKENhbGxFZGdlUHJvZmlsZSogZWRnZVByb2ZpbGUpCi17Ci0g
ICAgLy8gSW4gY2FzZXMgd2hlcmUgdGhlIGNhbGwgZWRnZSBwcm9maWxlIHNhdyBub3RoaW5nLCB1
c2UgdGhlIENhbGxMaW5rSW5mbyBpbnN0ZWFkLgotICAgIGlmICghZWRnZVByb2ZpbGUtPnRvdGFs
Q2FsbHMoKSkKLSAgICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7Ci0gICAgCi0gICAgLy8g
VG8gZG8gYW55dGhpbmcgbWVhbmluZ2Z1bCwgd2UgcmVxdWlyZSB0aGF0IHRoZSBtYWpvcml0eSBv
ZiBjYWxscyBhcmUgdG8gc29tZXRoaW5nIHdlCi0gICAgLy8ga25vdyBob3cgdG8gaGFuZGxlLgot
ICAgIHVuc2lnbmVkIG51bUNhbGxzVG9Lbm93biA9IGVkZ2VQcm9maWxlLT5udW1DYWxsc1RvS25v
d25DZWxscygpOwotICAgIHVuc2lnbmVkIG51bUNhbGxzVG9Vbmtub3duID0gZWRnZVByb2ZpbGUt
Pm51bUNhbGxzVG9Ob3RDZWxsKCkgKyBlZGdlUHJvZmlsZS0+bnVtQ2FsbHNUb1Vua25vd25DZWxs
KCk7Ci0gICAgCi0gICAgLy8gV2UgcmVxdWlyZSB0aGF0IHRoZSBtYWpvcml0eSBvZiBjYWxscyB3
ZXJlIHRvIHNvbWV0aGluZyB0aGF0IHdlIGNvdWxkIHBvc3NpYmx5IGlubGluZS4KLSAgICBpZiAo
bnVtQ2FsbHNUb0tub3duIDw9IG51bUNhbGxzVG9Vbmtub3duKQotICAgICAgICByZXR1cm4gdGFr
ZXNTbG93UGF0aCgpOwotICAgIAotICAgIC8vIFdlIHJlcXVpcmUgdGhhdCB0aGUgbnVtYmVyIG9m
IHN1Y2ggY2FsbHMgaXMgZ3JlYXRlciB0aGFuIHNvbWUgbWluaW1hbCB0aHJlc2hvbGQsIHNvIHRo
YXQgd2UKLSAgICAvLyBhdm9pZCBpbmxpbmluZyBjb21wbGV0ZWx5IGNvbGQgY2FsbHMuCi0gICAg
aWYgKG51bUNhbGxzVG9Lbm93biA8IE9wdGlvbnM6OmZyZXF1ZW50Q2FsbFRocmVzaG9sZCgpKQot
ICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwotICAgIAotICAgIENhbGxMaW5rU3RhdHVz
IHJlc3VsdDsKLSAgICByZXN1bHQubV9lZGdlcyA9IGVkZ2VQcm9maWxlLT5jYWxsRWRnZXMoKTsK
LSAgICByZXN1bHQubV9jb3VsZFRha2VTbG93UGF0aCA9ICEhbnVtQ2FsbHNUb1Vua25vd247Ci0g
ICAgcmVzdWx0Lm1fY2FuVHJ1c3RDb3VudHMgPSB0cnVlOwotICAgIAotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAogICAg
IGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywKICAgICBFeGl0U2l0ZURhdGEgZXhpdFNp
dGVEYXRhKQpAQCAtMjgxLDggKzI0NCw4IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRm8KIAogYm9vbCBDYWxsTGlua1N0YXR1czo6aXNDbG9zdXJlQ2FsbCgpIGNvbnN0
CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9lZGdlcy5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgaWYgKG1fZWRnZXNbaV0uY2FsbGVlKCkuaXNDbG9zdXJlQ2FsbCgpKQorICAgIGZvciAodW5z
aWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX3Zhcmlh
bnRzW2ldLmlzQ2xvc3VyZUNhbGwoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTAsMTggKzI1Myw3IEBAIGJvb2wgQ2FsbExpbmtTdGF0
dXM6OmlzQ2xvc3VyZUNhbGwoKSBjb24KIAogdm9pZCBDYWxsTGlua1N0YXR1czo6bWFrZUNsb3N1
cmVDYWxsKCkKIHsKLSAgICBBU1NFUlQoIW1faXNQcm92ZWQpOwotICAgIGZvciAodW5zaWduZWQg
aSA9IG1fZWRnZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICBtX2VkZ2VzW2ldID0gbV9lZGdlc1tp
XS5kZXNwZWNpZmllZENsb3N1cmUoKTsKLSAgICAKLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkg
ewotICAgICAgICAvLyBEb2luZyB0aGlzIHNob3VsZCBub3QgaGF2ZSBjcmVhdGVkIGR1cGxpY2F0
ZXMsIGJlY2F1c2UgdGhlIENhbGxFZGdlUHJvZmlsZQotICAgICAgICAvLyBzaG91bGQgZGVzcGVj
aWZ5IGNsb3N1cmVzIGlmIGRvaW5nIHNvIHdvdWxkIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGtub3du
IGNhbGxlZXMuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VkZ2VzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IG1fZWRn
ZXMuc2l6ZSgpOyArK2opCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1fZWRnZXNbaV0uY2FsbGVl
KCkgIT0gbV9lZGdlc1tqXS5jYWxsZWUoKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV92YXJp
YW50cyA9IGRlc3BlY2lmaWVkVmFyaWFudExpc3QobV92YXJpYW50cyk7CiB9CiAKIHZvaWQgQ2Fs
bExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTMxOSw3ICsyNzEs
NyBAQCB2b2lkIENhbGxMaW5rU3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvCiAgICAgaWYgKG1f
Y291bGRUYWtlU2xvd1BhdGgpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIkNvdWxkIFRha2Ug
U2xvdyBQYXRoIik7CiAgICAgCi0gICAgb3V0LnByaW50KGxpc3REdW1wKG1fZWRnZXMpKTsKKyAg
ICBvdXQucHJpbnQobGlzdER1bXAobV92YXJpYW50cykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0
YXR1cy5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIENhbGxMaW5rU3RhdHVzX2gKIAogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5o
IgorI2luY2x1ZGUgIkNhbGxWYXJpYW50LmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklU
TG9jay5oIgpAQCAtNDgsNyArNDksNiBAQCBwdWJsaWM6CiAgICAgQ2FsbExpbmtTdGF0dXMoKQog
ICAgICAgICA6IG1fY291bGRUYWtlU2xvd1BhdGgoZmFsc2UpCiAgICAgICAgICwgbV9pc1Byb3Zl
ZChmYWxzZSkKLSAgICAgICAgLCBtX2NhblRydXN0Q291bnRzKGZhbHNlKQogICAgIHsKICAgICB9
CiAgICAgCkBAIC02MiwxMCArNjIsOSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ2FsbExpbmtT
dGF0dXMoSlNWYWx1ZSk7CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0dXMoQ2FsbFZhcmlhbnQgdmFy
aWFudCkKLSAgICAgICAgOiBtX2VkZ2VzKDEsIENhbGxFZGdlKHZhcmlhbnQsIDEpKQorICAgICAg
ICA6IG1fdmFyaWFudHMoMSwgdmFyaWFudCkKICAgICAgICAgLCBtX2NvdWxkVGFrZVNsb3dQYXRo
KGZhbHNlKQogICAgICAgICAsIG1faXNQcm92ZWQoZmFsc2UpCi0gICAgICAgICwgbV9jYW5UcnVz
dENvdW50cyhmYWxzZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtMTA5LDE5ICsxMDgsMTggQEAg
cHVibGljOgogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBD
b2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBjb25zdCBDYWxsTGlua0luZm9NYXAmLCBjb25zdCBDb250
ZXh0TWFwJik7CiAgICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICFtX2VkZ2Vz
LmlzRW1wdHkoKSB8fCBtX2NvdWxkVGFrZVNsb3dQYXRoOyB9CisgICAgYm9vbCBpc1NldCgpIGNv
bnN0IHsgcmV0dXJuICFtX3ZhcmlhbnRzLmlzRW1wdHkoKSB8fCBtX2NvdWxkVGFrZVNsb3dQYXRo
OyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsg
fQogICAgIAogICAgIGJvb2wgY291bGRUYWtlU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX2Nv
dWxkVGFrZVNsb3dQYXRoOyB9CiAgICAgCi0gICAgQ2FsbEVkZ2VMaXN0IGVkZ2VzKCkgY29uc3Qg
eyByZXR1cm4gbV9lZGdlczsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2VkZ2VzLnNpemUoKTsgfQotICAgIENhbGxFZGdlIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0
dXJuIG1fZWRnZXNbaV07IH0KLSAgICBDYWxsRWRnZSBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIGF0KGkpOyB9CisgICAgQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRzKCkgY29u
c3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQorICAgIENhbGxWYXJpYW50IGF0KHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaV07IH0KKyAgICBDYWxsVmFyaWFudCBvcGVyYXRv
cltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgYm9vbCBpc1Byb3Zl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQcm92ZWQ7IH0KLSAgICBib29sIGNhbk9wdGltaXplKCkg
Y29uc3QgeyByZXR1cm4gIW1fZWRnZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBjYW5UcnVzdENv
dW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FuVHJ1c3RDb3VudHM7IH0KKyAgICBib29sIGNhbk9w
dGltaXplKCkgY29uc3QgeyByZXR1cm4gIW1fdmFyaWFudHMuaXNFbXB0eSgpOyB9CiAgICAgCiAg
ICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2Fs
bGVlIGlzIGEgY2xvc3VyZSBjYWxsLgogICAgIApAQCAtMTMyLDE1ICsxMzAsMTMgQEAgcHJpdmF0
ZToKICAgICAKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZyb21MTEludChjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZy
b21DYWxsRWRnZVByb2ZpbGUoQ2FsbEVkZ2VQcm9maWxlKik7CiAgICAgc3RhdGljIENhbGxMaW5r
U3RhdHVzIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKAogICAgICAgICBjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiwgQ2FsbExpbmtJbmZvJik7CiAjZW5kaWYKICAgICAKLSAgICBDYWxsRWRnZUxp
c3QgbV9lZGdlczsKKyAgICBDYWxsVmFyaWFudExpc3QgbV92YXJpYW50czsKICAgICBib29sIG1f
Y291bGRUYWtlU2xvd1BhdGg7CiAgICAgYm9vbCBtX2lzUHJvdmVkOwotICAgIGJvb2wgbV9jYW5U
cnVzdENvdW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxNzg2OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MCw1ICs1MCwzMiBAQCB2b2lkIENhbGxWYXJpYW50OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpCiAgICAgb3V0LnByaW50KCJFeGVjdXRhYmxlOiAiLCAqZXhlY3V0YWJsZSgpKTsK
IH0KIAorQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQoY29uc3QgQ2FsbFZh
cmlhbnRMaXN0JiBsaXN0LCBDYWxsVmFyaWFudCB2YXJpYW50VG9BZGQpCit7CisgICAgQVNTRVJU
KHZhcmlhbnRUb0FkZCk7CisgICAgQ2FsbFZhcmlhbnRMaXN0IHJlc3VsdDsKKyAgICBmb3IgKENh
bGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KSB7CisgICAgICAgIEFTU0VSVCh2YXJpYW50KTsKKyAg
ICAgICAgaWYgKHZhcmlhbnQgPT0gdmFyaWFudFRvQWRkKQorICAgICAgICAgICAgdmFyaWFudFRv
QWRkID0gQ2FsbFZhcmlhbnQoKTsKKyAgICAgICAgZWxzZSBpZiAodmFyaWFudC5kZXNwZWNpZmll
ZENsb3N1cmUoKSA9PSB2YXJpYW50VG9BZGQuZGVzcGVjaWZpZWRDbG9zdXJlKCkpIHsKKyAgICAg
ICAgICAgIHZhcmlhbnQgPSB2YXJpYW50LmRlc3BlY2lmaWVkQ2xvc3VyZSgpOworICAgICAgICAg
ICAgdmFyaWFudFRvQWRkID0gQ2FsbFZhcmlhbnQoKTsKKyAgICAgICAgfQorICAgICAgICByZXN1
bHQuYXBwZW5kKHZhcmlhbnQpOworICAgIH0KKyAgICBpZiAoISF2YXJpYW50VG9BZGQpCisgICAg
ICAgIHJlc3VsdC5hcHBlbmQodmFyaWFudFRvQWRkKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitDYWxsVmFyaWFudExpc3QgZGVzcGVjaWZpZWRWYXJpYW50TGlzdChjb25zdCBDYWxsVmFyaWFu
dExpc3QmIGxpc3QpCit7CisgICAgQ2FsbFZhcmlhbnRMaXN0IHJlc3VsdDsKKyAgICBmb3IgKENh
bGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KQorICAgICAgICByZXN1bHQgPSB2YXJpYW50TGlzdFdp
dGhWYXJpYW50KHJlc3VsdCwgdmFyaWFudC5kZXNwZWNpZmllZENsb3N1cmUoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5oCShyZXZpc2lvbiAxNzg2OTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTYsMTEgKzU2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyAgICAgdGhhbiB0aGUgZmFj
dCB0aGF0IHRoZXkgZG9uJ3QgZmFsbCBpbnRvIGFueSBvZiB0aGUgYWJvdmUgY2F0ZWdvcmllcy4K
IC8vCiAvLyBUaGlzIGNsYXNzIHNlcnZlcyBhcyBhIGtpbmQgb2YgdW5pb24gb3ZlciB0aGVzZSBm
b3VyIHRoaW5ncy4gSXQgZG9lcyBzbyBieSBqdXN0IGhvbGRpbmcgYQotLy8gSlNDZWxsKi4gV2Ug
ZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZSBtb2RlcyBpdHMgaW4gYnkgZG9pbmcgdHlwZSBjaGVja3Mg
b24gdGhlIGNlbGwuIE5vdGUgdGhhdCB0aGVyZQotLy8gaXMgbm8gbGlmZWN5Y2xlIG1hbmFnZW1l
bnQgZm9yIHRoZSBjZWxsIGJlY2F1c2UgdGhpcyBjbGFzcyBpcyBhbHdheXMgdXNlZCBpbiBjb250
ZXh0cyB3aGVyZSB3ZQotLy8gZWl0aGVyIGRvIGN1c3RvbSB3ZWFrIHJlZmVyZW5jZSBsb2dpYyBv
dmVyIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIChzZWUgQ2FsbEVkZ2VQcm9maWxlKSwgb3Igd2UK
LS8vIGFyZSBpbnNpZGUgdGhlIGNvbXBpbGVyIGFuZCB3ZSBhc3N1bWUgdGhhdCB0aGUgY29tcGls
ZXIgcnVucyBpbiBiZXR3ZWVuIGNvbGxlY3Rpb25zIGFuZCBzbyBjYW4KLS8vIHRvdWNoIHRoZSBo
ZWFwIHdpdGhvdXQgbm90aWZ5aW5nIGFueW9uZS4KKy8vIEpTQ2VsbCouIFdlIGRldGVybWluZSB3
aGljaCBvZiB0aGUgbW9kZXMgaXRzIGluIGJ5IGRvaW5nIHR5cGUgY2hlY2tzIG9uIHRoZSBjZWxs
LiBOb3RlIHRoYXQgd2UKKy8vIGNhbm5vdCB1c2UgV3JpdGVCYXJyaWVyPD4gaGVyZSBiZWNhdXNl
IHRoaXMgZ2V0cyB1c2VkIGluc2lkZSB0aGUgY29tcGlsZXIuCiAKIGNsYXNzIENhbGxWYXJpYW50
IHsKIHB1YmxpYzoKQEAgLTE4MSw2ICsxNzgsMTMgQEAgc3RydWN0IENhbGxWYXJpYW50SGFzaCB7
CiAKIHR5cGVkZWYgVmVjdG9yPENhbGxWYXJpYW50LCAxPiBDYWxsVmFyaWFudExpc3Q7CiAKKy8v
IFJldHVybnMgYSBuZXcgdmFyaWFudCBsaXN0IGJ5IGF0dGVtcHRpbmcgdG8gZWl0aGVyIGFwcGVu
ZCB0aGUgZ2l2ZW4gdmFyaWFudCBvciBtZXJnZSBpdCB3aXRoIG9uZQorLy8gb2YgdGhlIHZhcmlh
bnRzIHdlIGFscmVhZHkgaGF2ZSBieSBkZXNwZWNpZnlpbmcgY2xvc3VyZXMuCitDYWxsVmFyaWFu
dExpc3QgdmFyaWFudExpc3RXaXRoVmFyaWFudChjb25zdCBDYWxsVmFyaWFudExpc3QmLCBDYWxs
VmFyaWFudCk7CisKKy8vIFJldHVybnMgYSBuZXcgbGlzdCB3aGVyZSBldmVyeSBlbGVtZW50IGlz
IGRlc3BlY2lmaWVkLCBhbmQgdGhlIGxpc3QgaXMgZGVkdXBsaWNhdGVkLgorQ2FsbFZhcmlhbnRM
aXN0IGRlc3BlY2lmaWVkVmFyaWFudExpc3QoY29uc3QgQ2FsbFZhcmlhbnRMaXN0Jik7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAs
IDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMTAsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hA
dXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjE3OCw2ICsyMTc4LDggQEAgQ29k
ZUJsb2NrOjp+Q29kZUJsb2NrKCkKICAgICAvLyBkZXN0cnVjdG9yIHdpbGwgdHJ5IHRvIHJlbW92
ZSBub2RlcyBmcm9tIG91ciAobm8gbG9uZ2VyIHZhbGlkKSBsaW5rZWQgbGlzdC4KICAgICB3aGls
ZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQogICAg
ICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+cmVtb3ZlKCk7CisgICAgd2hpbGUgKG1faW5j
b21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2Fs
bHMuZW5kKCkpCisgICAgICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnJl
bW92ZSgpOwogICAgIAogICAgIC8vIE5vdGUgdGhhdCBvdXIgb3V0Z29pbmcgY2FsbHMgd2lsbCBi
ZSByZW1vdmVkIGZyb20gb3RoZXIgQ29kZUJsb2NrcycKICAgICAvLyBtX2luY29taW5nQ2FsbHMg
bGlua2VkIGxpc3RzIHRocm91Z2ggdGhlIGV4ZWN1dGlvbiBvZiB0aGUgfkNhbGxMaW5rSW5mbwpA
QCAtMzA0NCw2ICszMDQ2LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKEV4
ZWNTdGEKICAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwogICAgIG1faW5jb21p
bmdDYWxscy5wdXNoKGluY29taW5nKTsKIH0KKwordm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWlu
Z1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxO
b2RlKiBpbmNvbWluZykKK3sKKyAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwor
ICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLnB1c2goaW5jb21pbmcpOworfQogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkK
QEAgLTMwNTEsMTEgKzMwNTksMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2Fs
bHMoKQogICAgIHdoaWxlIChtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpICE9IG1faW5jb21p
bmdMTEludENhbGxzLmVuZCgpKQogICAgICAgICBtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigp
LT51bmxpbmsoKTsKICNpZiBFTkFCTEUoSklUKQotICAgIGlmIChtX2luY29taW5nQ2FsbHMuaXNF
bXB0eSgpKQorICAgIGlmIChtX2luY29taW5nQ2FsbHMuaXNFbXB0eSgpIHx8IG1faW5jb21pbmdQ
b2x5bW9ycGhpY0NhbGxzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcih0aGlzKTsKICAgICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJl
Z2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQogICAgICAgICBtX2luY29taW5nQ2FsbHMu
YmVnaW4oKS0+dW5saW5rKHJlcGF0Y2hCdWZmZXIpOworICAgIHdoaWxlIChtX2luY29taW5nUG9s
eW1vcnBoaWNDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmVuZCgp
KQorICAgICAgICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpLT51bmxpbmsocmVw
YXRjaEJ1ZmZlcik7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTc4NjkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjksMTEgKzIyOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAg
ICAgICAgIAogICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1l
LCBDYWxsTGlua0luZm8qKTsKLSAgICAgICAgCi0gICAgYm9vbCBpc0luY29taW5nQ2FsbEFscmVh
ZHlMaW5rZWQoQ2FsbExpbmtJbmZvKiBpbmNvbWluZykKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2luY29taW5nQ2FsbHMuaXNPbkxpc3QoaW5jb21pbmcpOwotICAgIH0KKyAgICB2b2lkIGxpbmtJ
bmNvbWluZ1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhp
Y0NhbGxOb2RlKik7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogICAgIHZvaWQgbGlua0luY29t
aW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyopOwpAQCAt
MTA3Nyw2ICsxMDczLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8QnlWYWxJbmZvPiBtX2J5VmFs
SW5mb3M7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAgIFNlbnRp
bmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPENhbGxMaW5r
SW5mbz4+IG1faW5jb21pbmdDYWxsczsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9seW1vcnBo
aWNDYWxsTm9kZSwgQmFzaWNSYXdTZW50aW5lbE5vZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4+IG1f
aW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzOwogI2VuZGlmCiAgICAgc3RkOjp1bmlxdWVfcHRyPENv
bXBhY3RKSVRDb2RlTWFwPiBtX2ppdENvZGVNYXA7CiAjaWYgRU5BQkxFKERGR19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5NjgsMTQgKzE5NjgsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJl
YWs7CiAKLSAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0
OgotICAgICAgICBpZiAoZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5tX3Zh
bHVlKQotICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAg
ICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKLSAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwotICAgICAgICBicmVhazsKLQogICAg
IGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgogICAgICAgICBtX3N0
YXRlLnNldElzVmFsaWQoZmFsc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02NzUsNyArNjc1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHBh
cmFtZXRlclNsb3RzID4gbV9wYXJhbWV0ZXJTbG90cykKICAgICAgICAgICAgIG1fcGFyYW1ldGVy
U2xvdHMgPSBwYXJhbWV0ZXJTbG90czsKIAotICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQg
PSBvcCA9PSBDYWxsIHx8IG9wID09IE5hdGl2ZUNhbGwgfHwgb3AgPT0gUHJvZmlsZWRDYWxsID8g
MCA6IDE7CisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG9wID09IENhbGwgfHwgb3Ag
PT0gTmF0aXZlQ2FsbCA/IDAgOiAxOwogICAgICAgICBmb3IgKGludCBpID0gMCArIGR1bW15VGhp
c0FyZ3VtZW50OyBpIDwgYXJnQ291bnQ7ICsraSkKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdpc3Rlck9mZnNldCkpKTsKIApA
QCAtMTA0NCwxOCArMTA0NCw2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAg
ICAgaWYgKGNhbGxUYXJnZXQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgIGNhbGxMaW5rU3RhdHVz
ID0gQ2FsbExpbmtTdGF0dXMoY2FsbFRhcmdldC0+YXNKU1ZhbHVlKCkpLnNldElzUHJvdmVkKHRy
dWUpOwogICAgIAotICAgIGlmICgoIWNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkgfHwgY2Fs
bExpbmtTdGF0dXMuc2l6ZSgpICE9IDEpCi0gICAgICAgICYmICFpc0ZUTChtX2dyYXBoLm1fcGxh
bi5tb2RlKSAmJiBPcHRpb25zOjp1c2VGVExKSVQoKQotICAgICAgICAmJiBJbmxpbmVDYWxsRnJh
bWU6OmlzTm9ybWFsQ2FsbChraW5kKQotICAgICAgICAmJiBDYWxsRWRnZUxvZzo6aXNFbmFibGVk
KCkKLSAgICAgICAgJiYgT3B0aW9uczo6ZGZnRG9lc0NhbGxFZGdlUHJvZmlsaW5nKCkpIHsKLSAg
ICAgICAgQVNTRVJUKG9wID09IENhbGwgfHwgb3AgPT0gQ29uc3RydWN0KTsKLSAgICAgICAgaWYg
KG9wID09IENhbGwpCi0gICAgICAgICAgICBvcCA9IFByb2ZpbGVkQ2FsbDsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgb3AgPSBQcm9maWxlZENvbnN0cnVjdDsKLSAgICB9Ci0gICAgCiAgICAg
aWYgKCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpKSB7CiAgICAgICAgIC8vIE9kZGx5LCB0
aGlzIGNvbmZsYXRlcyBjYWxscyB0aGF0IGhhdmVuJ3QgZXhlY3V0ZWQgd2l0aCBjYWxscyB0aGF0
IGJlaGF2ZWQgc3VmZmljaWVudGx5IHBvbHltb3JwaGljYWxseQogICAgICAgICAvLyB0aGF0IHdl
IGNhbm5vdCBvcHRpbWl6ZSB0aGVtLgpAQCAtMTA3NiwxNyArMTA2NCwxNyBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIAogI2lmIEVOQUJMRShGVExfTkFUSVZFX0NBTExf
SU5MSU5JTkcpCiAgICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpICYmIE9wdGlvbnM6
Om9wdGltaXplTmF0aXZlQ2FsbHMoKSAmJiBjYWxsTGlua1N0YXR1cy5zaXplKCkgPT0gMSAmJiAh
Y2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKSkgewotICAgICAgICBDYWxsVmFyaWFu
dCBjYWxsZWUgPSBjYWxsTGlua1N0YXR1c1swXS5jYWxsZWUoKTsKKyAgICAgICAgQ2FsbFZhcmlh
bnQgY2FsbGVlID0gY2FsbExpbmtTdGF0dXNbMF07CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uID0gY2FsbGVlLmZ1bmN0aW9uKCk7CiAgICAgICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
c3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRG
b3Ioa2luZCk7CiAgICAgICAgIGlmIChmdW5jdGlvbiAmJiBmdW5jdGlvbi0+aXNIb3N0RnVuY3Rp
b24oKSkgewogICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxlZSwgY2FsbFRhcmdl
dCwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAgICBjYWxs
T3BJbmZvID0gT3BJbmZvKG1fZ3JhcGguZnJlZXplKGZ1bmN0aW9uKSk7CiAKLSAgICAgICAgICAg
IGlmIChvcCA9PSBDYWxsIHx8IG9wID09IFByb2ZpbGVkQ2FsbCkKKyAgICAgICAgICAgIGlmIChv
cCA9PSBDYWxsKQogICAgICAgICAgICAgICAgIG9wID0gTmF0aXZlQ2FsbDsKICAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9PSBDb25zdHJ1Y3QgfHwgb3AgPT0g
UHJvZmlsZWRDb25zdHJ1Y3QpOworICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9PSBDb25zdHJ1
Y3QpOwogICAgICAgICAgICAgICAgIG9wID0gTmF0aXZlQ29uc3RydWN0OwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0xNDI2LDEzICsxNDE0LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyB0aGlzIGluIGNhc2VzIHdoZXJlIHdlIGRvbid0
IG5lZWQgY29udHJvbCBmbG93IGRpYW1vbmRzIHRvIGNoZWNrIHRoZSBjYWxsZWUuCiAgICAgaWYg
KCFjYWxsTGlua1N0YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpICYmIGNhbGxMaW5rU3RhdHVzLnNp
emUoKSA9PSAxKSB7CiAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcygKLSAgICAgICAgICAgIGNh
bGxMaW5rU3RhdHVzWzBdLmNhbGxlZSgpLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZzZXQs
IHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgICAgICAgICBjYWxsTGlua1N0YXR1c1swXSwgY2Fs
bFRhcmdldE5vZGUsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAg
ICBib29sIHJlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCi0gICAgICAgICAgICBjYWxsVGFy
Z2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0uY2FsbGVlKCksIHJlZ2lz
dGVyT2Zmc2V0LAorICAgICAgICAgICAgY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNh
bGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rlck9mZnNldCwKICAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJEb2VzTm9ybWFsTGlua2lu
ZywgcHJlZGljdGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSk7CiAgICAgICAgIGlm
ICghcmVzdWx0ICYmICFjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpKQotICAgICAgICAgICAgdW5k
b0Z1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdLmNhbGxlZSgpKTsKKyAgICAgICAgICAg
IHVuZG9GdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1swXSk7CiAgICAgICAgIGlmICh2ZXJi
b3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJEb25lIGlubGluaW5nIChzaW1wbGUpLlxuIik7
CiAgICAgICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxu
Iik7CkBAIC0xNDYyLDcgKzE0NTAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxp
bmluZyhOb2RlCiAgICAgYm9vbCBhbGxBcmVDbG9zdXJlQ2FsbHMgPSB0cnVlOwogICAgIGJvb2wg
YWxsQXJlRGlyZWN0Q2FsbHMgPSB0cnVlOwogICAgIGZvciAodW5zaWduZWQgaSA9IGNhbGxMaW5r
U3RhdHVzLnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoY2FsbExpbmtTdGF0dXNbaV0uY2Fs
bGVlKCkuaXNDbG9zdXJlQ2FsbCgpKQorICAgICAgICBpZiAoY2FsbExpbmtTdGF0dXNbaV0uaXND
bG9zdXJlQ2FsbCgpKQogICAgICAgICAgICAgYWxsQXJlRGlyZWN0Q2FsbHMgPSBmYWxzZTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgYWxsQXJlQ2xvc3VyZUNhbGxzID0gZmFsc2U7CkBAIC0x
NTMzLDcgKzE1MjEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2Rl
CiAgICAgICAgIE5vZGUqIG15Q2FsbFRhcmdldE5vZGUgPSBnZXREaXJlY3QoY2FsbGVlUmVnKTsK
ICAgICAgICAgCiAgICAgICAgIGJvb2wgaW5saW5pbmdSZXN1bHQgPSBhdHRlbXB0VG9JbmxpbmVD
YWxsKAotICAgICAgICAgICAgbXlDYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExp
bmtTdGF0dXNbaV0uY2FsbGVlKCksIHJlZ2lzdGVyT2Zmc2V0LAorICAgICAgICAgICAgbXlDYWxs
VGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbaV0sIHJlZ2lzdGVyT2Zm
c2V0LAogICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQs
IGtpbmQsIENhbGxlckxpbmtzTWFudWFsbHksIHByZWRpY3Rpb24sCiAgICAgICAgICAgICBpbmxp
bmluZ0JhbGFuY2UpOwogICAgICAgICAKQEAgLTE1NTIsMTAgKzE1NDAsMTAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICAKICAgICAgICAgSlNDZWxs
KiB0aGluZ1RvQ2FzZU9uOwogICAgICAgICBpZiAoYWxsQXJlRGlyZWN0Q2FsbHMpCi0gICAgICAg
ICAgICB0aGluZ1RvQ2FzZU9uID0gY2FsbExpbmtTdGF0dXNbaV0uY2FsbGVlKCkubm9uRXhlY3V0
YWJsZUNhbGxlZSgpOworICAgICAgICAgICAgdGhpbmdUb0Nhc2VPbiA9IGNhbGxMaW5rU3RhdHVz
W2ldLm5vbkV4ZWN1dGFibGVDYWxsZWUoKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBB
U1NFUlQoYWxsQXJlQ2xvc3VyZUNhbGxzKTsKLSAgICAgICAgICAgIHRoaW5nVG9DYXNlT24gPSBj
YWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKS5leGVjdXRhYmxlKCk7CisgICAgICAgICAgICB0aGlu
Z1RvQ2FzZU9uID0gY2FsbExpbmtTdGF0dXNbaV0uZXhlY3V0YWJsZSgpOwogICAgICAgICB9CiAg
ICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9ncmFwaC5mcmVlemUodGhpbmdU
b0Nhc2VPbiksIGJsb2NrLmdldCgpKSk7CiAgICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9m
ZnNldDsKQEAgLTE1NjcsNyArMTU1NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKE5vZGUKICAgICAgICAgbGFuZGluZ0Jsb2Nrcy5hcHBlbmQobV9jdXJyZW50QmxvY2sp
OwogCiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiRmluaXNoZWQg
aW5saW5pbmcgIiwgY2FsbExpbmtTdGF0dXNbaV0uY2FsbGVlKCksICIgYXQgIiwgY3VycmVudENv
ZGVPcmlnaW4oKSwgIi5cbiIpOworICAgICAgICAgICAgZGF0YUxvZygiRmluaXNoZWQgaW5saW5p
bmcgIiwgY2FsbExpbmtTdGF0dXNbaV0sICIgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIi5c
biIpOwogICAgIH0KICAgICAKICAgICBSZWZQdHI8QmFzaWNCbG9jaz4gc2xvd1BhdGhCbG9jayA9
IGFkb3B0UmVmKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsOCArMzYzLDYgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQXJyYXlQb3A6CiAgICAgY2Fz
ZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAg
IGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2Ug
TmF0aXZlQ29uc3RydWN0OgogICAgIGNhc2UgVG9QcmltaXRpdmU6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAko
cmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMCwyMCArNDIwLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgICAgICAgICAgY2FzZSBQ
cm9maWxlZENvbnN0cnVjdDogewotICAgICAgICAgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLm1fdmFsdWUpCi0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIElmIHdlIHdl
cmUgYWJsZSB0byBwcm92ZSB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjb25zdGFudCB0aGVuIHRoZSBu
b3JtYWwgY2FsbAotICAgICAgICAgICAgICAgIC8vIGlubGluZSBjYWNoZSB3aWxsIHJlY29yZCB0
aGlzIGNhbGxlZS4gVGhpcyBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIG5lZWQgdG8gZG8gYW55Ci0g
ICAgICAgICAgICAgICAgLy8gYWRkaXRpb25hbCBwcm9maWxpbmcuCi0gICAgICAgICAgICAgICAg
bV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICAgICAgbm9k
ZS0+c2V0T3Aobm9kZS0+b3AoKSA9PSBQcm9maWxlZENhbGwgPyBDYWxsIDogQ29uc3RydWN0KTsK
LSAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDggKzExOCw2IEBAIGJvb2wg
ZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENvbnN0cnVjdDoKICAg
ICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6Ci0gICAgY2FzZSBQ
cm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICBjYXNlIEJyZWFr
cG9pbnQ6CiAgICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CiAgICAgY2FzZSBQcm9maWxlRGlkQ2Fs
bDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9u
IDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzksMjAgKzc5LDE3IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBj
b21waWxlSW1wbCgKICAgICBpZiAobW9kZSA9PSBERkdNb2RlKSB7CiAgICAgICAgIHZtLmdldENU
SVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHZtLmdldENUSVN0dWIobGlu
a0NvbnN0cnVjdFRodW5rR2VuZXJhdG9yKTsKLSAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xv
c3VyZUNhbGxUaHVua0dlbmVyYXRvcik7CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua1BvbHlt
b3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFs
Q2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3Ry
dWN0VGh1bmtHZW5lcmF0b3IpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHZtLmdldENUSVN0dWIo
bGlua0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKICAgICAgICAgdm0uZ2V0
Q1RJU3R1YihsaW5rQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7Ci0g
ICAgICAgIHZtLmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVu
a0dlbmVyYXRvcik7CisgICAgICAgIHZtLmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRo
YXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRDVElTdHViKHZp
cnR1YWxDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHZtLmdl
dENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3Ip
OwogICAgIH0KICAgICAKLSAgICBpZiAoQ2FsbEVkZ2VMb2c6OmlzRW5hYmxlZCgpKQotICAgICAg
ICB2bS5lbnN1cmVDYWxsRWRnZUxvZygpLnByb2Nlc3NMb2coKTsKLQogICAgIGlmICh2bS50eXBl
UHJvZmlsZXIoKSkKICAgICAgICAgdm0udHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dFbnRy
aWVzKEFTQ0lJTGl0ZXJhbCgiUHJlcGFyaW5nIGZvciBERkcgY29tcGlsYXRpb24uIikpOwogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAyLDggKzEyMDIsNiBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIEFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBDYWxs
OgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKLSAgICAgICAgY2FzZSBQcm9maWxlZENhbGw6Ci0g
ICAgICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgUHJvZmlsZUNvbnRy
b2xGbG93OgogICAgICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgICAgIGNhc2UgTmF0aXZlQ29u
c3RydWN0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE3
ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDU3LDggKzEwNTcsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgR2V0
TXlBcmd1bWVudEJ5VmFsU2FmZToKICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENv
bnN0cnVjdDoKLSAgICAgICAgY2FzZSBQcm9maWxlZENhbGw6Ci0gICAgICAgIGNhc2UgUHJvZmls
ZWRDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICAgICAgY2FzZSBOYXRp
dmVDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw4
ICsyMTcsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogQ2FsbHMu
ICovXAogICAgIG1hY3JvKENhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oQ29uc3RydWN0
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2Rl
Q2xvYmJlcnNXb3JsZCkgXAotICAgIG1hY3JvKFByb2ZpbGVkQ2FsbCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwK
LSAgICBtYWNybyhQcm9maWxlZENvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhO
YXRpdmVDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFy
Z3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKE5hdGl2ZUNvbnN0cnVjdCwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2Ji
ZXJzV29ybGQpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw4ICsxODgsNiBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgICAgICBjYXNlIENhbGw6CiAgICAg
ICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAg
Y2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgICAg
ICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNp
b24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw4ICsxODksNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUo
QWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2Fz
ZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAg
IGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBO
ZXdBcnJheToKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlz
aW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzOCw5ICs2MzgsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKE5vZGUqIG5vZGUpCiB7Ci0gICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENh
bGwgfHwgbm9kZS0+b3AoKSA9PSBQcm9maWxlZENhbGw7CisgICAgYm9vbCBpc0NhbGwgPSBub2Rl
LT5vcCgpID09IENhbGw7CiAgICAgaWYgKCFpc0NhbGwpCi0gICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IENvbnN0cnVjdCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KTsKKyAg
ICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsKIAogICAgIC8vIEZvciBjb25z
dHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8g
bWFrZSBzcGFjZQogICAgIC8vIGZvciBpdC4KQEAgLTY4OSwxMSArNjg5LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENhbGxMaW5rSW5mbyog
aW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKIAotICAgIGlmIChu
b2RlLT5vcCgpID09IFByb2ZpbGVkQ2FsbCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3Ry
dWN0KSB7Ci0gICAgICAgIG1faml0LnZtKCktPmNhbGxFZGdlTG9nLT5lbWl0TG9nQ29kZSgKLSAg
ICAgICAgICAgIG1faml0LCBpbmZvLT5jYWxsRWRnZVByb2ZpbGUsIGNhbGxlZS5qc1ZhbHVlUmVn
cygpKTsKLSAgICB9Ci0gICAgCiAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaE5vdENlbGwoY2Fs
bGVlLmpzVmFsdWVSZWdzKCkpKTsKICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRy
V2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlUGF5bG9hZEdQUiwgdGFy
Z2V0VG9DaGVjaykpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
Y2FsbGVlUGF5bG9hZEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwg
cmVzdWx0UGF5bG9hZEdQUik7CkBAIC00MTcyLDggKzQxNjcsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25z
dHJ1Y3Q6Ci0gICAgY2FzZSBQcm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVj
dDoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNCw5ICs2MjQsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKE5vZGUqIG5vZGUpCiB7Ci0gICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENh
bGwgfHwgbm9kZS0+b3AoKSA9PSBQcm9maWxlZENhbGw7CisgICAgYm9vbCBpc0NhbGwgPSBub2Rl
LT5vcCgpID09IENhbGw7CiAgICAgaWYgKCFpc0NhbGwpCi0gICAgICAgIERGR19BU1NFUlQobV9q
aXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QgfHwgbm9kZS0+b3AoKSA9
PSBQcm9maWxlZENvbnN0cnVjdCk7CisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QpOwogICAgIAogICAgIC8vIEZvciBjb25zdHJ1
Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFr
ZSBzcGFjZQogICAgIC8vIGZvciBpdC4KQEAgLTY2OSwxMSArNjY5LDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENhbGxMaW5rSW5mbyogY2Fs
bExpbmtJbmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwogICAgIAot
ICAgIGlmIChub2RlLT5vcCgpID09IFByb2ZpbGVkQ2FsbCB8fCBub2RlLT5vcCgpID09IFByb2Zp
bGVkQ29uc3RydWN0KSB7Ci0gICAgICAgIG1faml0LnZtKCktPmNhbGxFZGdlTG9nLT5lbWl0TG9n
Q29kZSgKLSAgICAgICAgICAgIG1faml0LCBjYWxsTGlua0luZm8tPmNhbGxFZGdlUHJvZmlsZSwg
SlNWYWx1ZVJlZ3MoY2FsbGVlR1BSKSk7Ci0gICAgfQotCiAgICAgc2xvd1BhdGggPSBtX2ppdC5i
cmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRh
cmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKIAogICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZXN1bHRHUFIpOwpAQCAtNDIzMyw4ICs0MjI4
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2Fz
ZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAg
IGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Rp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3
ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE3ICs1MCwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIGlmICghT3B0aW9uczo6dXNlRlRMSklUKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2stPm1fZGlk
RmFpbEZUTENvbXBpbGF0aW9uKSB7Ci0gICAgICAgICAgICByZW1vdmVGVExQcm9maWxpbmcoKTsK
KyAgICAgICAgaWYgKG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrLT5tX2RpZEZhaWxGVExDb21waWxh
dGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQogICAgICAgICAKICNp
ZiBFTkFCTEUoRlRMX0pJVCkKICAgICAgICAgRlRMOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBG
VEw6OmNhbkNvbXBpbGUobV9ncmFwaCk7Ci0gICAgICAgIGlmIChsZXZlbCA9PSBGVEw6OkNhbm5v
dENvbXBpbGUpIHsKLSAgICAgICAgICAgIHJlbW92ZUZUTFByb2ZpbGluZygpOworICAgICAgICBp
ZiAobGV2ZWwgPT0gRlRMOjpDYW5ub3RDb21waWxlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIU9wdGlvbnM6OmVuYWJsZU9TUkVu
dHJ5VG9GVEwoKSkKICAgICAgICAgICAgIGxldmVsID0gRlRMOjpDYW5Db21waWxlOwpAQCAtMTIy
LDMyICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKICAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCByZW1vdmVGVExQcm9m
aWxpbmcoKQotICAgIHsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJs
b2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7
ICsrbm9kZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAg
ICAgICAgICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRPcChDYWxsKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6Ci0gICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wKENvbnN0cnVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9CiB9OwogCiBib29sIHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlv
bihHcmFwaCYgZ3JhcGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMSArMTc2
LDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2Ug
TWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBQcm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVj
dDoKLSAgICAgICAgLy8gVGhlc2UgYXJlIE9LIG5vdCBiZWNhdXNlIHRoZSBGVEwgY2FuIHN1cHBv
cnQgdGhlbSwgYnV0IGJlY2F1c2UgaWYgdGhlIERGRyBzZWVzIG9uZSBvZgotICAgICAgICAvLyB0
aGVzZSB0aGVuIHRoZSBGVEwgd2lsbCBzZWUgYSBub3JtYWwgQ2FsbC9Db25zdHJ1Y3QuCi0gICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgICAgIC8vIE5vIGJhY2tlbmQgaGFu
ZGxlcyB0aGlzIGJlY2F1c2UgaXQgd2lsbCBiZSBvcHRpbWl6ZWQgb3V0LiBCdXQgd2UgbWF5IGNo
ZWNrCiAgICAgICAgIC8vIGZvciBjYXBhYmlsaXRpZXMgYmVmb3JlIG9wdGltaXphdGlvbi4gSXQg
d291bGQgYmUgYSBkZWVwIGVycm9yIHRvIHJlbW92ZSB0aGlzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5MSwxMSArOTkxLDYgQEAgdm9p
ZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29sbGVjdAogICAgICAgICB2bSgpLT50eXBl
UHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJHQyIpKTsKICAg
ICB9CiAgICAgCi0gICAgaWYgKHZtKCktPmNhbGxFZGdlTG9nKSB7Ci0gICAgICAgIERlZmVyR0NG
b3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgdm0oKS0+Y2FsbEVkZ2VMb2ctPnByb2Nl
c3NMb2coKTsKLSAgICB9Ci0gICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fZGVmZXJyYWxEZXB0
aCk7CiAgICAgQVNTRVJUKHZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhyZWFk
RGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAxNzg2
OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaCIKLQotI2lmIEVOQUJMRShKSVQp
Ci0KLSNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUg
IlZNLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgi
Ci0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1DbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lOjpDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiYgY29kZSwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLAotICAgIEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQotICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNv
ZGUsIHZtKQotICAgICwgbV9leGVjdXRhYmxlKHZtLCBvd25lciwgZXhlY3V0YWJsZSkKLXsKLX0K
LQotQ2xvc3VyZUNhbGxTdHViUm91dGluZTo6fkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUoKQotewot
fQotCi12b2lkIENsb3N1cmVDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRl
cm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICB2aXNpdG9yLmFwcGVuZCgmbV9leGVj
dXRhYmxlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklU
KQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRp
bmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxs
U3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMTc4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIENsb3N1cmVDYWxsU3R1YlJvdXRpbmVfaAotI2RlZmluZSBDbG9zdXJl
Q2FsbFN0dWJSb3V0aW5lX2gKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlT3Jp
Z2luLmgiCi0jaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1jbGFzcyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lIDogcHVibGljIEdDQXdhcmVKSVRT
dHViUm91dGluZSB7Ci1wdWJsaWM6Ci0gICAgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKLSAgICAg
ICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVy
LAotICAgICAgICBFeGVjdXRhYmxlQmFzZSopOwotICAgIAotICAgIHZpcnR1YWwgfkNsb3N1cmVD
YWxsU3R1YlJvdXRpbmUoKTsKLSAgICAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0YWJsZS5nZXQoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
dmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92
ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFzZT4gbV9l
eGVjdXRhYmxlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUo
SklUKQotCi0jZW5kaWYgLy8gQ2xvc3VyZUNhbGxTdHViUm91dGluZV9oCi0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDE3ODY5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAxLDEyICszMDEsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJ
RCBvcGNvZGVJCiAKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2Fs
bExpbmtJbmZvKCk7CiAKLSAgICBpZiAoQ2FsbEVkZ2VMb2c6OmlzRW5hYmxlZCgpICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKQotICAgICAgICAmJiBPcHRpb25zOjpiYXNlbGluZURvZXNDYWxsRWRn
ZVByb2ZpbGluZygpKSB7Ci0gICAgICAgIG1fdm0tPmVuc3VyZUNhbGxFZGdlTG9nKCkuZW1pdExv
Z0NvZGUoCi0gICAgICAgICAgICAqdGhpcywgaW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApKTsKLSAgICB9Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2Fs
bF9ldmFsKSB7CiAgICAgICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0cnVjdGlvbik7CiAgICAgICAg
IHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNp
b24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjE1LDEwICsyMTUsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChP
cGNvZGVJRCBvcGNvZGVJCiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxv
Y2stPmFkZENhbGxMaW5rSW5mbygpOwogCi0gICAgaWYgKENhbGxFZGdlTG9nOjppc0VuYWJsZWQo
KSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkKLSAgICAgICAgJiYgT3B0aW9uczo6YmFzZWxpbmVE
b2VzQ2FsbEVkZ2VQcm9maWxpbmcoKSkKLSAgICAgICAgbV92bS0+ZW5zdXJlQ2FsbEVkZ2VMb2co
KS5lbWl0TG9nQ29kZSgqdGhpcywgaW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBKU1ZhbHVlUmVncyhy
ZWdUMCkpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAgICBj
b21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3ODY5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNzc2LDcgKzc3Niw3IEBAIGlubGluZSBjaGFyKiB2aXJ0dWFsRm9yKAog
ICAgIHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGtpbmQsIHJlZ2lz
dGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKIH0KIAotc3RhdGljIGJvb2wgYXR0
ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbCgKK3N0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXpl
UG9seW1vcnBoaWNDYWxsKAogICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycywgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwKICAg
ICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKQEAgLTc4NCwzOCArNzg0LDI0IEBAIHN0
YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIEpTRnVuY3Rpb24qIG9sZENhbGxlZSA9IGNhbGxM
aW5rSW5mby5jYWxsZWUuZ2V0KCk7CiAgICAgCi0gICAgaWYgKCFvbGRDYWxsZWUgfHwgb2xkQ2Fs
bGVlLT5leGVjdXRhYmxlKCkgIT0gY2FsbGVlLT5leGVjdXRhYmxlKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoY2FsbGVlLT5leGVjdXRhYmxlKCktPmhhc0pJVENv
ZGVGb3JDYWxsKCkpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0KLSAgICAg
ICAgY2FsbGVlLT5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJl
c3NGb3JDYWxsKAotICAgICAgICAgICAgKmV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCktPmNvZGVC
bG9jaygpLT52bSgpLCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIEFyaXR5Q2hl
Y2tOb3RSZXF1aXJlZCwgcmVnaXN0ZXJzKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
azsKLSAgICBpZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAg
ICAgIGNvZGVCbG9jayA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9jayA9IGpzQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0Zv
ckNhbGwoKTsKKyAgICBpZiAoIWNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigp
KSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KGNhbGxlZS0+ZXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwogICAgICAg
ICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19j
YXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5j
YWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzIHx8IGNhbGxMaW5rSW5mby5jYWxs
VHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3MpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGxpbmtDbG9zdXJlQ2FsbCgKLSAgICAgICAgZXhl
Y0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZS0+ZXhlY3V0YWJsZSgpLCBj
b2RlUHRyLCByZWdpc3RlcnMpOworICAgIGxpbmtQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwg
Y2FsbExpbmtJbmZvLCBDYWxsVmFyaWFudChjYWxsZWUpLCByZWdpc3RlcnMpOwogICAgIAogICAg
IHJldHVybiB0cnVlOwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9z
dXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
KQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNT
dGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7CiAgICAgSlND
ZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKICAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9y
V2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlv
bk5vdFJlcXVpcmVkLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAKLSAgICBpZiAoIWF0dGVtcHRU
b09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RS
ZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8pKQorICAgIGlmICgh
YXR0ZW1wdFRvT3B0aW1pemVQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8p
KQogICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBDb2RlRm9y
Q2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgCiAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTgzMSwxMiArODE3LDEyIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVmlydHVhbENvbnMKICAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9y
Q29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAotY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVncyhF
eGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQorY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1Jl
Z3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsK
ICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsOwogICAgIGNoYXIqIHJlc3VsdCA9IHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2
ZVJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogCi0gICAgaWYgKCFhdHRlbXB0VG9P
cHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycywgY2Fs
bGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8pKQorICAgIGlmICghYXR0ZW1wdFRvT3B0
aW1pemVQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzLCBj
YWxsZWVBc0Z1bmN0aW9uQ2VsbCwgKmNhbGxMaW5rSW5mbykpCiAgICAgICAgIGxpbmtTbG93Rm9y
KGV4ZWNDYWxsZWUsICpjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdp
c3RlcnMpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Niwx
MiArMjQ2LDEyIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEdlbmUKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsRXZhbChF
eGVjU3RhdGUqLCBFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5B
TDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0
ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZf
SU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNT
dGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZf
SU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhl
Y1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5r
SW5mbyopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Ns
b3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RG
X0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWND
YWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVS
TkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2
ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4
ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENh
bGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKQEAgLTM5MSwxMyArMzkxLDEzIEBAIGlubGluZSBQ
X0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvblZpcnQKICAgICByZXR1cm4gMDsKIH0KIAotaW5s
aW5lIFBfSklUT3BlcmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsRm9yKFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNs
aSBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9k
ZSByZWdpc3RlcnMpCiB7CiAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKICAgICBjYXNlIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5r
Q2xvc3VyZUNhbGw7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxs
OwogICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CiAgICAgfQogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAxNzg2OTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MSw2ICsxNDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB5b3UgYXJlIHN0aWxsIHZhbGlkIGFmdGVy
LiBSZXR1cm4gZmFsc2UgaWYgeW91IGFyZSBub3cgaW52YWxpZC4gSWYgeW91IHJldHVybgorICAg
IC8vIGZhbHNlLCB5b3Ugd2lsbCB1c3VhbGx5IG5vdCBkbyBhbnkgY2xlYXJpbmcgYmVjYXVzZSB0
aGUgaWRlYSBpcyB0aGF0IHlvdSB3aWxsIHNpbXBseSBiZQorICAgIC8vIGRlc3Ryb3llZC4KICAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImKTsKIAogcHJvdGVjdGVkOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCShyZXZp
c2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXIuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50
ZXIuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmUuaCIKKworI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUG9seW1vcnBoaWNDYWxsTm9k
ZTo6flBvbHltb3JwaGljQ2FsbE5vZGUoKQoreworICAgIGlmIChpc09uTGlzdCgpKQorICAgICAg
ICByZW1vdmUoKTsKK30KKwordm9pZCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmsoUmVwYXRj
aEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikKK3sKKyAgICBtX2NhbGxMaW5rSW5mby0+dW5saW5rKHJl
cGF0Y2hCdWZmZXIpOworICAgIAorICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICByZW1vdmUo
KTsKK30KKworUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OlBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lKAorICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZVJlZiwgVk0mIHZt
LCBjb25zdCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGNhbGxlckZyYW1lLAorICAgIENhbGxM
aW5rSW5mbyYgaW5mbywgY29uc3QgVmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+JiBjYXNlcykK
KyAgICA6IEdDQXdhcmVKSVRTdHViUm91dGluZShjb2RlUmVmLCB2bSkKK3sKKyAgICBmb3IgKFBv
bHltb3JwaGljQ2FsbENhc2UgY2FsbENhc2UgOiBjYXNlcykgeworICAgICAgICBtX3ZhcmlhbnRz
LmFwcGVuZChXcml0ZUJhcnJpZXI8SlNDZWxsPih2bSwgb3duZXIsIGNhbGxDYXNlLnZhcmlhbnQo
KS5yYXdDYWxsZWVDZWxsKCkpKTsKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0g
Y2FsbENhc2UuY29kZUJsb2NrKCkpCisgICAgICAgICAgICBjb2RlQmxvY2stPmxpbmtJbmNvbWlu
Z1BvbHltb3JwaGljQ2FsbChjYWxsZXJGcmFtZSwgbV9jYWxsTm9kZXMuYWRkKCZpbmZvKSk7Cisg
ICAgfQorICAgIG1fdmFyaWFudHMuc2hyaW5rVG9GaXQoKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOworfQorCitQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6flBvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lKCkgeyB9CisKK0NhbGxWYXJpYW50TGlzdCBQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZTo6dmFyaWFudHMoKSBjb25zdAoreworICAgIENhbGxWYXJpYW50TGlzdCByZXN1bHQ7
CisgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChDYWxsVmFyaWFudCh2YXJpYW50LmdldCgpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworYm9vbCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZm
ZXImKQoreworICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKKyAgICAgICAg
aWYgKCFIZWFwOjppc01hcmtlZCh2YXJpYW50LmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlz
aXRvcikKK3sKKyAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmdmFyaWFudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmVfaAorI2RlZmluZSBQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZV9oCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ2FsbFZhcmlhbnQu
aCIKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IENhbGxMaW5rSW5mbzsKKworY2xhc3Mg
UG9seW1vcnBoaWNDYWxsTm9kZSA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxQb2x5bW9y
cGhpY0NhbGxOb2RlPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUG9seW1vcnBoaWNDYWxs
Tm9kZSk7CitwdWJsaWM6CisgICAgUG9seW1vcnBoaWNDYWxsTm9kZShDYWxsTGlua0luZm8qIGlu
Zm8pCisgICAgICAgIDogbV9jYWxsTGlua0luZm8oaW5mbykKKyAgICB7CisgICAgfQorICAgIAor
ICAgIH5Qb2x5bW9ycGhpY0NhbGxOb2RlKCk7CisgICAgCisgICAgdm9pZCB1bmxpbmsoUmVwYXRj
aEJ1ZmZlciYpOworICAgIAorcHJpdmF0ZToKKyAgICBDYWxsTGlua0luZm8qIG1fY2FsbExpbmtJ
bmZvOworfTsKKworY2xhc3MgUG9seW1vcnBoaWNDYWxsQ2FzZSB7CitwdWJsaWM6CisgICAgUG9s
eW1vcnBoaWNDYWxsQ2FzZSgpCisgICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKKyAgICB7
CisgICAgfQorICAgIAorICAgIFBvbHltb3JwaGljQ2FsbENhc2UoQ2FsbFZhcmlhbnQgdmFyaWFu
dCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgICAgIDogbV92YXJpYW50KHZhcmlhbnQpCisg
ICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Q2FsbFZhcmlhbnQgdmFyaWFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudDsgfQorICAgIENv
ZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KKyAgICAK
K3ByaXZhdGU6CisgICAgQ2FsbFZhcmlhbnQgbV92YXJpYW50OworICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7Cit9OworCitjbGFzcyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSA6IHB1Ymxp
YyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUgeworcHVibGljOgorICAgIFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lKAorICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBWTSYsIGNv
bnN0IEpTQ2VsbCogb3duZXIsCisgICAgICAgIEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIENhbGxM
aW5rSW5mbyYsIGNvbnN0IFZlY3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNlPiYpOworICAgIAorICAg
IHZpcnR1YWwgflBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKCk7CisgICAgCisgICAgQ2FsbFZh
cmlhbnRMaXN0IHZhcmlhbnRzKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCB2aXNpdFdlYWsoUmVw
YXRjaEJ1ZmZlciYpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIG1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPiwgMj4gbV92YXJpYW50czsKKyAg
ICBCYWc8UG9seW1vcnBoaWNDYWxsTm9kZT4gbV9jYWxsTm9kZXM7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCisKKyNlbmRpZiAvLyBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAkocmV2aXNpb24gMTc4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxOCw3ICsxNjE4LDcgQEAgdm9pZCBsaW5rRm9y
KAogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoZXhlYy0+Y2FsbGVy
RnJhbWUoKSwgJmNhbGxMaW5rSW5mbyk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNh
bGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3JG
b3IocmVnaXN0ZXJzKSkuY29kZSgpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2Fs
bExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua1BvbHltb3Jw
aGljQ2FsbFRodW5rR2VuZXJhdG9yRm9yKHJlZ2lzdGVycykpLmNvZGUoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCkBAIC0xNjM4LDEyICsxNjM4LDIyIEBAIHZvaWQgbGlua1Nsb3dG
b3IoCiAgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywga2lu
ZCwgcmVnaXN0ZXJzKTsKIH0KIAotdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCi0gICAgRXhlY1N0YXRl
KiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2Rl
QmxvY2ssIAotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY29kZVB0ciwKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ2FsbFRvQ29kZVB0ciB7CisgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQ
dHI7Cit9OworfSAvLyBhbm5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGxpbmtQb2x5bW9ycGhp
Y0NhbGwoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywg
Q2FsbFZhcmlhbnQgbmV3VmFyaWFudCwKICAgICBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVn
aXN0ZXJzKQogewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0dWIpOworICAgIC8vIEN1cnJl
bnRseSwgd2Ugd2lsbCBuZXZlciBzZWUgYSBub24tZnVuY3Rpb24gdmFyaWFudCwgc2luY2UgdGhh
dCdzIGhvdyBKSVRPcGVyYXRpb25zLmNwcAorICAgIC8vIGhhbmRsZXMgaXQuIEFsc28sIHdlIHdv
dWxkbid0IGJlIGFibGUgdG8gZG8gYW55dGhpbmcgd2l0aCBub24tZnVuY3Rpb24gY2FsbGVlcyBi
ZWNhdXNlIHdlCisgICAgLy8ganVzdCBkb24ndCBoYXZlIHRoYXQgZnVuY3Rpb25hbGl0eSwgeWV0
LiBUaGF0J3Mgd29ydGggZml4aW5nLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDA2ODUKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdWYXJpYW50LmV4ZWN1
dGFibGUoKSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5j
YWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKICAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2st
PnZtKCk7CkBAIC0xNjYyLDUwICsxNjcyLDk5IEBAIHZvaWQgbGlua0Nsb3N1cmVDYWxsKAogICAg
ICAgICBzdHViSml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5zYW5lQXJndW1lbnRDb3VudCk7
CiAgICAgICAgIG9rQXJndW1lbnRDb3VudC5saW5rKCZzdHViSml0KTsKICAgICB9CisgICAgCisg
ICAgQ2FsbFZhcmlhbnRMaXN0IGxpc3Q7CisgICAgaWYgKFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lKiBzdHViID0gY2FsbExpbmtJbmZvLnN0dWIuZ2V0KCkpCisgICAgICAgIGxpc3QgPSBzdHVi
LT52YXJpYW50cygpOworICAgIGVsc2UgaWYgKEpTRnVuY3Rpb24qIG9sZENhbGxlZSA9IGNhbGxM
aW5rSW5mby5jYWxsZWUuZ2V0KCkpCisgICAgICAgIGxpc3QgPSBDYWxsVmFyaWFudExpc3R7Q2Fs
bFZhcmlhbnQob2xkQ2FsbGVlKX07CisgICAgCisgICAgbGlzdCA9IHZhcmlhbnRMaXN0V2l0aFZh
cmlhbnQobGlzdCwgbmV3VmFyaWFudCk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIC8vIFdl
IGNhbiBzYWZlbHkgY2xvYmJlciBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgY2FsbGVlR1BSLiBXZSBj
YW4ndCByZWx5IG9uIHRhZ01hc2tSZWdpc3RlcgotICAgIC8vIGJlaW5nIHNldC4gU28gd2UgZG8g
dGhpcyB0aGUgaGFyZCB3YXkuCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgbGlua2VkIHRoZSBzbG93
IHBhdGggdG8gdGhlIHZpcnR1YWwgY2FsbCB0aHVuayBpZiB3ZSB3ZXJlIGFwcHJvYWNoaW5nIHRo
ZQorICAgIC8vIGxpbWl0LgorICAgIEFTU0VSVChsaXN0LnNpemUoKSA8PSBPcHRpb25zOjptYXhQ
b2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUoKSk7CisgICAgCisgICAgYm9vbCBoYXZlQ2xv
c3VyZUNhbGwgPSBmYWxzZTsKKyAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KQor
ICAgICAgICBoYXZlQ2xvc3VyZUNhbGwgfD0gdmFyaWFudC5pc0Nsb3N1cmVDYWxsKCk7CisgICAg
CiAgICAgR1BSUmVnIHNjcmF0Y2ggPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIo
Y2FsbGVlR1BSKTsKLSAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChUYWdNYXNrKSwgc2NyYXRjaCk7Ci0gICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNo
VGVzdDY0KENDYWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVlR1BSLCBzY3JhdGNoKSk7CisgICAg
CisgICAgaWYgKGhhdmVDbG9zdXJlQ2FsbCkgeworICAgICAgICAvLyBWZXJpZnkgdGhhdCB3ZSBo
YXZlIGEgZnVuY3Rpb24gYW5kIHN0YXNoIHRoZSBleGVjdXRhYmxlIGluIHNjcmF0Y2guCisKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAvLyBXZSBjYW4gc2FmZWx5IGNsb2JiZXIgZXZlcnl0
aGluZyBleGNlcHQgdGhlIGNhbGxlZUdQUi4gV2UgY2FuJ3QgcmVseSBvbiB0YWdNYXNrUmVnaXN0
ZXIKKyAgICAgICAgLy8gYmVpbmcgc2V0LiBTbyB3ZSBkbyB0aGlzIHRoZSBoYXJkIHdheS4KKyAg
ICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnTWFzayks
IHNjcmF0Y2gpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0NjQo
Q0NhbGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVHUFIsIHNjcmF0Y2gpKTsKICNlbHNlCi0gICAg
Ly8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2Vs
bC4KKyAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2Fs
bGVlIGlzIGEgY2VsbC4KICNlbmRpZgogICAgIAotICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAg
ICAgc3R1YkppdC5icmFuY2g4KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNGdW5jdGlvblR5cGUpKSk7Ci0gICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAg
ICBzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWws
CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgICAgIHN0dWJKaXQuYnJhbmNoOCgK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVu
Y3Rpb25UeXBlKSkpOworICAgIAorICAgICAgICBzdHViSml0LmxvYWRQdHIoCiAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhl
Y3V0YWJsZSkpKTsKKyAgICAgICAgICAgIHNjcmF0Y2gpOworICAgIH0KICAgICAKLSAgICBzdHVi
Sml0LmxvYWRQdHIoCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpT
RnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKLSAgICAgICAgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgIFZlY3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNlPiBjYWxsQ2FzZXM7CiAg
ICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdHViSml0LnN0b3JlNjQoCi0gICAgICAgIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIG9mZnNldFRvRnJhbWUp
KTsKLSNlbHNlCi0gICAgc3R1YkppdC5zdG9yZVB0cigKLSAgICAgICAgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lz
dGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSArIG9mZnNldFRvRnJhbWUpKTsKLSAgICBzdHVi
Sml0LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdp
c3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSArIG9mZnNldFRvRnJhbWUpKTsKLSNlbmRpZgorICAg
IENDYWxsSGVscGVyczo6SnVtcCBza2lwVG9OZXh0OworICAgIENDYWxsSGVscGVyczo6SnVtcExp
c3QgZG9uZTsKICAgICAKLSAgICBBc3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IHN0dWJKaXQu
bmVhckNhbGwoKTsKLSAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgZG9uZSA9IHN0dWJKaXQuanVt
cCgpOworICAgIFZlY3RvcjxDYWxsVG9Db2RlUHRyPiBjYWxsczsKKyAgICAKKyAgICBmb3IgKENh
bGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KSB7CisgICAgICAgIGlmIChza2lwVG9OZXh0LmlzU2V0
KCkpCisgICAgICAgICAgICBza2lwVG9OZXh0LmxpbmsoJnN0dWJKaXQpOworICAgICAgICAKKyAg
ICAgICAgLy8gTmV3IHZhcmlhbnRzIHNob3VsZCBoYXZlIEpJVCBjb2RlIGZvciBjYWxsIHNpbmNl
IHdlIGFyZSBhYm91dCB0byBtYWtlIHRoYXQgY2FsbCBhbmQKKyAgICAgICAgLy8gSklUT3BlcmF0
aW9ucy5jcHAgc2hvdWxkIGhhdmUgZW5zdXJlZCB0aGF0IHRoZSBKSVQgY29kZSB3YXMgcHJlc2Vu
dC4gT2xkIHZhcmlhbnRzIHNob3VsZAorICAgICAgICAvLyBoYXZlIEpJVCBjb2RlIGZvciBjYWxs
IHNpbmNlIHRoZSBpbmxpbmUgY2FjaGUgd291bGQgaGF2ZSBiZWVuIGNsZWFyZWQgaWYgdGhlaXIg
Y29kZSB3YXMKKyAgICAgICAgLy8gZGVzdHJveWVkLgorICAgICAgICBBU1NFUlQodmFyaWFudC5l
eGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZVB0ciA9CisgICAgICAgICAgICB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2Vu
ZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoCisgICAgICAgICAgICAgICAg
KnZtLCB2YXJpYW50LmV4ZWN1dGFibGUoKSwgQXJpdHlDaGVja05vdFJlcXVpcmVkLCByZWdpc3Rl
cnMpOworICAgICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgICAgIGlm
ICh2YXJpYW50LmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgICAgIGNv
ZGVCbG9jayA9IG51bGxwdHI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29kZUJsb2Nr
ID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHZhcmlhbnQuZXhlY3V0YWJsZSgpKS0+Y29k
ZUJsb2NrRm9yQ2FsbCgpOworICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkgPj0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSkgJiYgY2FsbExpbmtJbmZvLmNhbGxUeXBlICE9IENhbGxMaW5rSW5mbzo6Q2FsbFZh
cmFyZ3MgJiYgY2FsbExpbmtJbmZvLmNhbGxUeXBlICE9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0
VmFyYXJncyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhbGxDYXNlcy5hcHBlbmQo
UG9seW1vcnBoaWNDYWxsQ2FzZSh2YXJpYW50LCBjb2RlQmxvY2spKTsKKyAgICAgICAgCisgICAg
ICAgIGlmICh2YXJpYW50LmlzQ2xvc3VyZUNhbGwoKSkgeworICAgICAgICAgICAgc2tpcFRvTmV4
dCA9CisgICAgICAgICAgICAgICAgc3R1YkppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2gsCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih2YXJpYW50LmV4ZWN1dGFibGUoKSkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2tpcFRvTmV4dCA9CisgICAgICAgICAgICAgICAg
c3R1YkppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIGNhbGxlZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHZhcmlhbnQuZnVuY3Rpb24oKSkpOworICAgICAgICB9CisgICAgCisgICAgICAg
IENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0cjsKKyAgICAgICAgY2FsbFRvQ29kZVB0ci5jYWxs
ID0gc3R1YkppdC5uZWFyQ2FsbCgpOworICAgICAgICBjYWxsVG9Db2RlUHRyLmNvZGVQdHIgPSBj
b2RlUHRyOworICAgICAgICBjYWxscy5hcHBlbmQoY2FsbFRvQ29kZVB0cik7CisgICAgICAgIGRv
bmUuYXBwZW5kKHN0dWJKaXQuanVtcCgpKTsKKyAgICB9CiAgICAgCiAgICAgc2xvd1BhdGgubGlu
aygmc3R1YkppdCk7CisgICAgc2tpcFRvTmV4dC5saW5rKCZzdHViSml0KTsKICAgICBzdHViSml0
Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkK
ICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIEdQUkluZm86OnJlZ1QxKTsKQEAgLTE3MTUsMjMgKzE3NzQsMzAgQEAgdm9pZCBsaW5r
Q2xvc3VyZUNhbGwoCiAgICAgCiAgICAgc3R1YkppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9y
ZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cg
PSBzdHViSml0Lmp1bXAoKTsKLSAgICAKKyAgICAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sIHN0dWJKaXQsIGNhbGxlckNvZGVCbG9jayk7CiAgICAgCi0gICAgcGF0Y2hCdWZm
ZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChjYWxsQ2FzZXMuc2l6ZSgpID09IGNhbGxzLnNpemUoKSk7Cisg
ICAgZm9yIChDYWxsVG9Db2RlUHRyIGNhbGxUb0NvZGVQdHIgOiBjYWxscykgeworICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKAorICAgICAgICAgICAgY2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlv
blB0cihjYWxsVG9Db2RlUHRyLmNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIH0K
ICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlw
ZSgpKSkKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkpOwogICAgIGVsc2UKICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8uaG90UGF0aE90aGVyLmxhYmVsQXRPZmZzZXQo
MCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdl
dENUSVN0dWIodmlydHVhbFRodW5rR2VuZXJhdG9yRm9yKENvZGVGb3JDYWxsLCByZWdpc3RlcnMp
KS5jb2RlKCkpKTsKKyAgICBpZiAobGlzdC5zaXplKCkgPT0gT3B0aW9uczo6bWF4UG9seW1vcnBo
aWNDYWxsVmFyaWFudExpc3RTaXplKCkpCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywg
Q29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIodmlydHVhbFRodW5rR2VuZXJhdG9yRm9y
KENvZGVGb3JDYWxsLCByZWdpc3RlcnMpKS5jb2RlKCkpKTsKKyAgICBlbHNlCisgICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIobGlu
a1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yRm9yKHJlZ2lzdGVycykpLmNvZGUoKSkpOwog
ICAgIAotICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFk
b3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAorICAgIFJlZlB0cjxQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAogICAgICAgICAgICAg
Y2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiQ2xvc3VyZSBjYWxs
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldCAlcCAoJXMpIiwKKyAgICAgICAg
ICAgICgiQ2xvc3VyZSBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldHMg
JXMiLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCks
IGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgwKS5leGVjdXRh
YmxlQWRkcmVzcygpLAotICAgICAgICAgICAgICAgIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3Mo
KSwgdG9DU3RyaW5nKHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jaykpLmRhdGEoKSkpLAotICAg
ICAgICAqdm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWN1dGFibGUp
KTsKKyAgICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAobGlzdCkpLmRhdGEoKSkpLAorICAg
ICAgICAqdm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMtPmNhbGxl
ckZyYW1lKCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzKSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CiAgICAgCkBAIC0xNzQwLDkgKzE4
MDYsMTUgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1
ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIHJlZ2lzdGVycyk7CiAgICAgCisg
ICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBzdHViIHJvdXRpbmUsIHRoYXQgb25l
IHdpbGwgZGllIGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5kIHNlZXMKKyAgICAvLyB0aGF0IGl0
J3Mgbm8gbG9uZ2VyIG9uIHN0YWNrLgogICAgIGNhbGxMaW5rSW5mby5zdHViID0gc3R1YlJvdXRp
bmUucmVsZWFzZSgpOwogICAgIAotICAgIEFTU0VSVCghY2FsbGVlQ29kZUJsb2NrIHx8IGNhbGxl
ZUNvZGVCbG9jay0+aXNJbmNvbWluZ0NhbGxBbHJlYWR5TGlua2VkKCZjYWxsTGlua0luZm8pKTsK
KyAgICAvLyBUaGUgY2FsbCBsaW5rIGluZm8gbm8gbG9uZ2VyIGhhcyBhIGNhbGwgY2FjaGUgYXBh
cnQgZnJvbSB0aGUganVtcCB0byB0aGUgcG9seW1vcnBoaWMgY2FsbAorICAgIC8vIHN0dWIuCisg
ICAgY2FsbExpbmtJbmZvLmNhbGxlZS5jbGVhcigpOworICAgIGlmIChjYWxsTGlua0luZm8uaXNP
bkxpc3QoKSkKKyAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOwogfQogCiB2b2lkIHJlc2V0
R2V0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYg
c3R1YkluZm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24g
MTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ0NhbGxI
ZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2FsbFZhcmlhbnQuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRp
b25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDEsNyArNDIsNyBAQCB2b2lkIGJ1aWxkUHV0
QnlJZExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1CiB2b2lkIHJlcGF0Y2hJbihFeGVjU3RhdGUqLCBK
U0NlbGwqLCBjb25zdCBJZGVudGlmaWVyJiwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlT
bG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBDYWxs
TGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2Rl
KTsKIHZvaWQgbGlua1Nsb3dGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKTsKLXZvaWQgbGlua0Nsb3N1
cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEV4ZWN1dGFibGVC
YXNlKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwor
dm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENhbGxW
YXJpYW50LCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwogdm9pZCByZXNldEdldEJ5SUQoUmVw
YXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIHJlc2V0UHV0QnlJRChSZXBh
dGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVzZXRJbihSZXBhdGNoQnVm
ZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM3LDI3ICsxMzcsMjcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaGF0
UAogICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3Qs
IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua0Nsb3N1cmVDYWxsRm9yVGh1bmtHZW5lcmF0b3IoCitzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxGb3JUaHVua0dlbmVyYXRvcigKICAgICBWTSog
dm0sIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgQ0NhbGxIZWxw
ZXJzIGppdCh2bSk7CiAgICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlu
a0Nsb3N1cmVDYWxsRm9yKHJlZ2lzdGVycykpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9w
ZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGxGb3IocmVnaXN0ZXJzKSk7CiAgICAgCiAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1
cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5rIGNsb3N1cmUgY2FsbCAlcyBzbG93
IHBhdGggdGh1bmsiLCByZWdpc3RlcnMgPT0gTXVzdFByZXNlcnZlUmVnaXN0ZXJzID8gIiB0aGF0
IHByZXNlcnZlcyByZWdpc3RlcnMiIDogIiIpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgKCJMaW5rIHBvbHltb3JwaGljIGNhbGwgJXMgc2xvdyBwYXRoIHRodW5rIiwg
cmVnaXN0ZXJzID09IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyA/ICIgdGhhdCBwcmVzZXJ2ZXMgcmVn
aXN0ZXJzIiA6ICIiKSk7CiB9CiAKIC8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9u
bHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgogLy8g
b2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFu
eXdheS4KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRv
cihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRodW5r
R2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsRm9yVGh1bmtH
ZW5lcmF0b3Iodm0sIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworICAgIHJldHVy
biBsaW5rUG9seW1vcnBoaWNDYWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdWlyZWQpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1
cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVy
YXRvcih2bSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKKyAgICByZXR1cm4gbGlua1BvbHltb3Jw
aGljQ2FsbEZvclRodW5rR2VuZXJhdG9yKHZtLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOwogfQog
CiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2
aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTYgKzY1LDE2IEBAIGlubGluZSBUaHVua0dlbmVy
YXRvciBsaW5rVGh1bmtHZW5lcmF0b3IKICAgICByZXR1cm4gMDsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRv
cihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dl
bmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxU
aGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZNKik7CiAKLWlubGluZSBUaHVua0dlbmVy
YXRvciBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvckZvcihSZWdpc3RlclByZXNlcnZhdGlv
bk1vZGUgcmVnaXN0ZXJzKQoraW5saW5lIFRodW5rR2VuZXJhdG9yIGxpbmtQb2x5bW9ycGhpY0Nh
bGxUaHVua0dlbmVyYXRvckZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQog
ewogICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CiAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlv
bk5vdFJlcXVpcmVkOgotICAgICAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0
b3I7CisgICAgICAgIHJldHVybiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3I7CiAg
ICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6Ci0gICAgICAgIHJldHVybiBsaW5rQ2xvc3Vy
ZUNhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yOworICAgICAgICByZXR1cm4gbGlu
a1BvbHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7CiAgICAgfQog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNzg2OTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3MCwxMiArMTcwLDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAg
ICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudERldmlydHVhbGl6YXRpb24sIHRydWUpIFwKICAg
ICB2KGJvb2wsIGVuYWJsZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcsIHRydWUpIFwKICAgICB2
KGJvb2wsIGVuYWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5nLCB0cnVlKSBcCi0gICAgdihib29s
LCBjYWxsU3RhdHVzU2hvdWxkVXNlQ2FsbEVkZ2VQcm9maWxlLCB0cnVlKSBcCi0gICAgdihib29s
LCBjYWxsRWRnZVByb2ZpbGVSZWFsbHlQcm9jZXNzZXNMb2csIHRydWUpIFwKLSAgICB2KGJvb2ws
IGJhc2VsaW5lRG9lc0NhbGxFZGdlUHJvZmlsaW5nLCBmYWxzZSkgXAotICAgIHYoYm9vbCwgZGZn
RG9lc0NhbGxFZGdlUHJvZmlsaW5nLCB0cnVlKSBcCi0gICAgdihib29sLCBlbmFibGVDYWxsRWRn
ZVByb2ZpbGluZywgdHJ1ZSkgXAotICAgIHYodW5zaWduZWQsIGZyZXF1ZW50Q2FsbFRocmVzaG9s
ZCwgMikgXAorICAgIHYoYm9vbCwgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplLCAz
KSBcCiAgICAgdihib29sLCBvcHRpbWl6ZU5hdGl2ZUNhbGxzLCBmYWxzZSkgXAogICAgIHYoYm9v
bCwgZW5hYmxlT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcsIHRydWUpIFwKICAgICBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSwx
MyArMzY5LDYgQEAgVk0qJiBWTTo6c2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpCiAgICAgcmV0dXJu
IHNoYXJlZEluc3RhbmNlOwogfQogCi1DYWxsRWRnZUxvZyYgVk06OmVuc3VyZUNhbGxFZGdlTG9n
KCkKLXsKLSAgICBpZiAoIWNhbGxFZGdlTG9nKQotICAgICAgICBjYWxsRWRnZUxvZyA9IHN0ZDo6
bWFrZV91bmlxdWU8Q2FsbEVkZ2VMb2c+KCk7Ci0gICAgcmV0dXJuICpjYWxsRWRnZUxvZzsKLX0K
LQogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgVGh1bmtHZW5lcmF0b3IgdGh1bmtHZW5lcmF0b3JG
b3JJbnRyaW5zaWMoSW50cmluc2ljIGludHJpbnNpYykKIHsKQEAgLTQ1OSw5ICs0NTIsNiBAQCB2
b2lkIFZNOjpzdG9wU2FtcGxpbmcoKQogCiB2b2lkIFZNOjpwcmVwYXJlVG9EaXNjYXJkQ29kZSgp
CiB7Ci0gICAgaWYgKGNhbGxFZGdlTG9nKQotICAgICAgICBjYWxsRWRnZUxvZy0+cHJvY2Vzc0xv
ZygpOwotICAgIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGZvciAodW5zaWduZWQgaSA9IERG
Rzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgewogICAgICAgICBpZiAoREZHOjpXb3JrbGlz
dCogd29ya2xpc3QgPSBERkc6OndvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzOwogY2xh
c3MgQnVpbHRpbkV4ZWN1dGFibGVzOwotY2xhc3MgQ2FsbEVkZ2VMb2c7CiBjbGFzcyBDb2RlQmxv
Y2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKQEAgLTIzOCw5
ICsyMzcsNiBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPERGRzo6TG9uZ0xpdmVkU3Rh
dGU+IGRmZ1N0YXRlOwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCi0gICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxFZGdlTG9nPiBjYWxsRWRnZUxvZzsKLSAgICBDYWxsRWRnZUxvZyYgZW5zdXJl
Q2FsbEVkZ2VMb2coKTsKLQogICAgIFZNVHlwZSB2bVR5cGU7CiAgICAgQ2xpZW50RGF0YSogY2xp
ZW50RGF0YTsKICAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245094</attachid>
            <date>2015-01-21 15:19:52 -0800</date>
            <delta_ts>2015-01-27 15:02:01 -0800</delta_ts>
            <desc>it passes most tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>133880</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc4ODYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NCBA
QAorMjAxNS0wMS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcgc2hvdWxkIGJlIGJhc2VkIG9uIHBvbHltb3JwaGlj
IGNhbGwgaW5saW5lIGNhY2hpbmcgcmF0aGVyIHRoYW4gbG9nZ2luZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwNjYwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXaGVuIHdlIGZpcnN0IGlt
cGxlbWVudGVkIHBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcsIHdlIGRpZCB0aGUgcHJvZmlsaW5n
IGJhc2VkIG9uIGEgY2FsbAorICAgICAgICBlZGdlIGxvZy4gVGhlIGlkZWEgd2FzIHRvIHN0b3Jl
IGVhY2ggY2FsbCBlZGdlIChhIHR1cGxlIG9mIGNhbGwgc2l0ZSBhbmQgY2FsbGVlKSBpbnRvIGEK
KyAgICAgICAgZ2xvYmFsIGxvZyB0aGF0IHdhcyBwcm9jZXNzZWQgbGF6aWx5LiBQcm9jZXNzaW5n
IHRoZSBsb2cgd291bGQgZ2l2ZSBwcmVjaXNlIGNvdW50cyBvZiBjYWxsCisgICAgICAgIGVkZ2Vz
LCBhbmQgY291bGQgYmUgdXNlZCB0byBkcml2ZSB3ZWxsLWluZm9ybWVkIGlubGluaW5nIGRlY2lz
aW9ucyAtIHBvbHltb3JwaGljIG9yIG5vdC4KKyAgICAgICAgVGhpcyB3YXMgYSBzcGVlZC11cCBv
biB0aHJvdWdocHV0IHRlc3RzIGJ1dCBhIHNsb3ctZG93biBmb3IgbGF0ZW5jeSB0ZXN0cy4gSXQg
d2FzIGEgbmV0IHdpbgorICAgICAgICBub25ldGhlbGVzcy4KKyAgICAgICAgCisgICAgICAgIEV4
cGVyaWVuY2Ugd2l0aCB0aGlzIGNvZGUgc2hvd3MgdGhyZWUgdGhpbmdzLiBGaXJzdCwgdGhlIGNh
bGwgZWRnZSBwcm9maWxlciBpcyBidWdneSBhbmQKKyAgICAgICAgY29tcGxleC4gSXQgd291bGQg
dGFrZSB3b3JrIHRvIGZpeCB0aGUgYnVncy4gU2Vjb25kLCB0aGUgY2FsbCBlZGdlIHByb2ZpbGVy
IGluY3VycyBsb3RzIG9mCisgICAgICAgIG92ZXJoZWFkIGZvciBsYXRlbmN5IGNvZGUgdGhhdCB3
ZSBjYXJlIGRlZXBseSBhYm91dC4gVGhpcmQsIGl0J3Mgbm90IGF0IGFsbCBjbGVhciB0aGF0IHRo
ZQorICAgICAgICBwcmVjaWRlIGNhbGwgZWRnZSBjb3VudHMgYXJlIGFueSBtb3JlIHVzZWZ1bCB0
aGFuIGp1c3Qga25vd2luZyB0aGF0IGEgY2FsbCBzaXRlIGhhZCBhIGZpbml0ZQorICAgICAgICBu
dW1iZXIgb2YgY2FsbGVlcy4KKyAgICAgICAgCisgICAgICAgIFNvLCB0aGlzIHBhdGNoIHJlbW92
ZXMgdGhlIGNhbGwgZWRnZSBwcm9maWxlciBhbmQgcmVwbGFjZXMgaXQgd2l0aCBhIHBvbHltb3Jw
aGljIGNhbGwgaW5saW5lCisgICAgICAgIGNhY2hlLiBJZiB3ZSBtaXNzIHRoZSBiYXNpYyBjYWxs
IGlubGluZSBjYWNoZSwgd2UgaW5mbGF0ZSB0aGUgY2FjaGUgdG8gYmUgYSBqdW1wIHRvIGFuCisg
ICAgICAgIG91dC1vZi1saW5lIHN0dWIgdGhhdCBjYXNlcyBvbiB0aGUgcHJldmlvdXNseSBrbm93
biBjYWxsZWVzLiBJZiB0aGF0IG1pc3NlcyBhZ2FpbiwgdGhlbiB3ZQorICAgICAgICByZXdyaXRl
IHRoYXQgc3R1YiB0byBpbmNsdWRlIHRoZSBuZXcgY2FsbGVlLiBXZSBkbyB0aGlzIHVwIHRvIHRo
cmVlIGNhbGxlZXMuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBieXRlY29kZS9DYWxsRWRnZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2Fs
bEVkZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZUlubGluZXMuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OnVubGluayk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dmlzaXRXZWFr
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKiBieXRlY29k
ZS9DYWxsTGlua1N0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpDYWxs
TGlua1N0YXR1cyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKToK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKToK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua1N0YXR1czo6bWFrZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtTdGF0dXM6OmR1bXApOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZyb21DYWxsRWRnZVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmg6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1
cyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjppc1NldCk6CisgICAgICAgIChKU0M6
OkNhbGxMaW5rU3RhdHVzOjp2YXJpYW50cyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVz
OjpzaXplKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmF0KToKKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtTdGF0dXM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0
YXR1czo6Y2FuT3B0aW1pemUpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6ZWRnZXMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y2FuVHJ1c3RDb3VudHMp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxWYXJpYW50LmNwcDoKKyAgICAgICAg
KEpTQzo6dmFyaWFudExpc3RXaXRoVmFyaWFudCk6CisgICAgICAgIChKU0M6OmRlc3BlY2lmaWVk
VmFyaWFudExpc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxWYXJpYW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp+Q29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhp
Y0NhbGwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5vdGljZUluY29taW5nQ2FsbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aXNJbmNvbWlu
Z0NhbGxBbHJlYWR5TGlua2VkKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmFkZENhbGxXaXRob3V0U2V0dGluZ1Jlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpm
b2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9u
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0
aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFn
YXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
IChKU0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZTo6cmVtb3ZlRlRMUHJvZmlsaW5n
KTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKiBqaXQvQ2xvc3VyZUNhbGxTdHViUm91
dGluZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6Om9w
ZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGxGb3IpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25M
aW5rQ2xvc3VyZUNhbGxGb3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRTdHViUm91dGlu
ZS5oOgorICAgICAgICAqIGppdC9KSVRXcml0ZUJhcnJpZXIuaDoKKyAgICAgICAgKiBqaXQvUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1v
cnBoaWNDYWxsTm9kZTo6flBvbHltb3JwaGljQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpQb2x5
bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmspOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZTo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6flBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKToK
KyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZhcmlhbnRzKToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZpc2l0V2Vhayk6CisgICAg
ICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwpOgorICAgICAgICAqIGppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsTm9kZTo6UG9seW1vcnBoaWNDYWxs
Tm9kZSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbENhc2U6OlBvbHltb3JwaGljQ2Fs
bENhc2UpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxDYXNlOjp2YXJpYW50KToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsQ2FzZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKiBq
aXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjps
aW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAgICAgICAqIGppdC9UaHVua0dlbmVy
YXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsRm9yVGh1bmtHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbEZvclRodW5rR2VuZXJh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0
b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0
b3JzLmg6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvckZv
cik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAgICAgICogcnVudGltZS9P
cHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpw
cmVwYXJlVG9EaXNjYXJkQ29kZSk6CisgICAgICAgIChKU0M6OlZNOjplbnN1cmVDYWxsRWRnZUxv
Zyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE1LTAxLTIxICBNYXR0
aGV3IE1pcm1hbiAgPG1taXJtYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZWQgc3BsaXQg
c3VjaCB0aGF0IGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGVtcHR5IGVuZCBvZiBpbnB1dCBzdHJp
bmcgbWF0Y2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTc4
NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4MSwxMyArMjgxLDggQEAKIAkJMEYz
QjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTI1MTU0NEM5
OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VE
MEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGM0IzQTI5MTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAg
Ki87IH07CiAJCTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZG
NDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYzQjdFMjYxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0Uy
MDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjNCN0UyNzE5QTExQjgwMDBEOUJDNTYgLyogQ2Fs
bEVkZ2VQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGM0I3RTIxMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUuY3BwICov
OyB9OwotCQkwRjNCN0UyODE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyMjE5QTEx
QjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYzQjdFMjkxOUExMUI4MDAwRDlCQzU2IC8qIENh
bGxFZGdlUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGM0I3RTIzMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGVJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYzQjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI0MTlBMTFCODAwMEQ5
QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBGM0I3RTJCMTlBMTFCODAwMEQ5QkM1
NiAvKiBDYWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYzQjdFMkQxOUEx
MkFBRTAwRDlCQzU2IC8qIENhbGxFZGdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTJDMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5j
cHAgKi87IH07CiAJCTBGM0QwQkJDMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVy
ZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGM0QwQkJBMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCAq
LzsgfTsKIAkJMEYzRDBCQkQxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hl
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0Qw
QkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzRTAxQUExOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERG
R1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OwpAQCAtMzg0LDggKzM3OSw2IEBACiAJCTBGNzAy
NUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzAyNUE4MTcxNEIwRjgw
MDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIg
LyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi87IH07CiAJCTBGNzE0Q0E1MTZFQTkyRjIw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIg
LyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNzNEN0FCMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0
dWJSb3V0aW5lLmNwcCAqLzsgfTsKLQkJMEY3M0Q3QUYxNjVBMTQzMDAwQUNBQjcxIC8qIENsb3N1
cmVDYWxsU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNzNEN0FDMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0
aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY3NDNCQUExNkI4ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIwMTY1MUM2NjEw
MEE4MEFGRSAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGNzU3NkQyMThFMUZF
RTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1NzZEMDE4RTFGRUU5MDAyRUY0
Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OwogCQkwRjc1NzZEMzE4
RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzU3NkQxMThFMUZFRTkwMDJF
RjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MDAsNiArNTkzLDggQEAKIAkJMEZFMjI4
RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlv
bnMuY3BwICovOyB9OwogCQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3
MjExQjE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgKi87IH07CiAJCTBGRTcy
MTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3MjExQzE5M0I5QzU5MDAzMUY2RUQgLyog
REZHVHJhbnNpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGRTgzNDE3MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkU4MzQxNTFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUu
Y3BwICovOyB9OworCQkwRkU4MzQxODFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
RTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUzNDkxNzIzQ0RB
NTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi87IH07CiAJCTBGRTg1MzRD
MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzRBMTcyM0NEQTUwMEI2MThG
NSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU5NUY3OTE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0
YVNlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFOTVGNzcxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCAqLzsgfTsK
QEAgLTE5NDgsMTMgKzE5NDMsOCBAQAogCQkwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYgLyogREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCM0EyOTE1NDc0
RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHVmFsaWRhdGUuY3BwOyBwYXRoID0gZGZnL0RGR1ZhbGlkYXRlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8q
IERGR1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlk
YXRlLmg7IHBhdGggPSBkZmcvREZHVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEYzQjdFMjAxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGM0I3RTIxMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2VQcm9maWxlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzQjdFMjIxOUExMUI4MDAwRDlCQzU2IC8q
IENhbGxFZGdlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxs
RWRnZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzQjdFMjMxOUEx
MUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbFZhcmlhbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCN0UyNTE5QTExQjgwMDBEOUJDNTYg
LyogQ2FsbFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbFZh
cmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzQjdFMkMxOUExMkFBRTAw
RDlCQzU2IC8qIENhbGxFZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhbGxFZGdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRDBCQkEx
OTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBD
b25zdGFudFN0cnVjdHVyZUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbnN0YW50U3RydWN0dXJlQ2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5jcHA7
IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yMDUyLDggKzIwNDIsNiBAQAogCQkwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUg
LyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcxNENBMTE2
RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERG
R0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3
M0Q3QUIxNjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xvc3VyZUNhbGxTdHViUm91dGluZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNzNEN0FDMTY1QTE0MkEwMEFDQUI3
MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0
aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc29yQ2Fs
bEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NTc2
RDExOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAv
KiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRT
dHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI4MCw2ICsyMjY4
LDggQEAKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkU3MjExQjE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdUcmFuc2l0aW9uLmNwcDsgcGF0
aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVHJhbnNpdGlvbi5oOyBwYXRoID0gZGZnL0RGR1RyYW5z
aXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFODM0MTUxQTZFRjk3QjAw
RDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8qIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVz
aXJlZFdhdGNocG9pbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU5NUY3NzE4QjU2OTQ3MDBCNTMxRkIgLyog
RlRMRGF0YVNlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RlRMRGF0YVNlY3Rpb24uY3BwOyBwYXRoID0gZnRsL0ZUTERhdGFTZWN0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NDAsOCArMzczMCw2IEBACiAJCQkJMEYyNEU1M0Ix
N0VBOUY1OTAwQUJCMjE3IC8qIEFzc2VtYmx5SGVscGVycy5jcHAgKi8sCiAJCQkJMEYyNEU1M0Mx
N0VBOUY1OTAwQUJCMjE3IC8qIEFzc2VtYmx5SGVscGVycy5oICovLAogCQkJCTBGMjRFNTNEMTdF
QTlGNTkwMEFCQjIxNyAvKiBDQ2FsbEhlbHBlcnMuaCAqLywKLQkJCQkwRjczRDdBQjE2NUExNDJB
MDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAgKi8sCi0JCQkJMEY3M0Q3QUMx
NjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRkQ4
MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLywKIAkJCQlBN0I0
OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJ
QTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKQEAg
LTM3ODAsOCArMzc2OCw4IEBACiAJCQkJMTRBNjU4MUEwRjRFMzZGNDAwMDE1MEZEIC8qIEpJVFN0
dWJzLmggKi8sCiAJCQkJRkVGNjgzNUExNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNLmgg
Ki8sCiAJCQkJRkVGNjgzNUIxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzQVJNdjcuaCAqLywK
LQkJCQlGRUY2ODM1RDE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNYODYuaCAqLywKIAkJCQlG
RUY2ODM1QzE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNYODZfNjQuaCAqLywKKwkJCQlGRUY2
ODM1RDE3NDM0M0NDMDBBMzJFMjUgLyogSklUU3R1YnNYODYuaCAqLywKIAkJCQlBN0E0QUUwQzE3
OTczQjREMDA1NjEyQjEgLyogSklUU3R1YnNYODZDb21tb24uaCAqLywKIAkJCQkwRjVFRjkxQjE2
ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCAqLywKIAkJCQkwRjVFRjkxQzE2ODc4Rjc4
MDAzRTVDMjUgLyogSklUVGh1bmtzLmggKi8sCkBAIC0zNzg5LDYgKzM3NzcsOCBAQAogCQkJCTBG
QzcxMkUxMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJp
ZXIuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQu
aCAqLywKKwkJCQkwRkU4MzQxNTFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUuY3BwICovLAorCQkJCTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZS5oICovLAogCQkJCTBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAv
KiBSZWcuY3BwICovLAogCQkJCTBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLywK
IAkJCQkwRjZCMUNCQjE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFw
cGVyR2VuZXJhdG9yLmNwcCAqLywKQEAgLTUwMTksMTEgKzUwMDksNiBAQAogCQkJCTBGNjY2RUJF
MTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8s
CiAJCQkJMEY4ODVFMTAxODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggKi8sCiAJ
CQkJMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovLAotCQkJCTBGM0I3
RTJDMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAgKi8sCi0JCQkJMEYzQjdFMjAxOUEx
MUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlLmggKi8sCi0JCQkJMEYzQjdFMjExOUExMUI4MDAwRDlC
QzU2IC8qIENhbGxFZGdlUHJvZmlsZS5jcHAgKi8sCi0JCQkJMEYzQjdFMjIxOUExMUI4MDAwRDlC
QzU2IC8qIENhbGxFZGdlUHJvZmlsZS5oICovLAotCQkJCTBGM0I3RTIzMTlBMTFCODAwMEQ5QkM1
NiAvKiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmggKi8sCiAJCQkJMEYwQjgzQUUxNEJDRjcxNDAw
ODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8sCiAJCQkJMEYwQjgzQUYxNEJDRjcxNDAwODg1
QjRGIC8qIENhbGxMaW5rSW5mby5oICovLAogCQkJCTBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAv
KiBDYWxsTGlua1N0YXR1cy5jcHAgKi8sCkBAIC01NDc0LDcgKzU0NTksNiBAQAogCQkJCTBGNjlD
Qzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyNEU1NDIxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM2QUFBRTUwRTFGNDI2NTAwQUQ4N0Q4IC8qIENsYXNzSW5mby5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMEY3M0Q3QUYxNjVBMTQzMDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJv
dXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4MSAvKiBD
b2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEY5NDQxMTY2NzYzMzIwMEQ2MTk3MSAv
KiBDb2RlQmxvY2tIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0YzNDE4MjAyMEQ3MDAy
QzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywK
QEAgLTU1NjYsNyArNTU1MCw2IEBACiAJCQkJMEZGRkM5NUExNEVGOTBBOTAwQzcyNTMyIC8qIERG
R0NTRVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJGQzc3MzE2RTEyRjc0MDAzOEQ5NzYg
LyogREZHRENFUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjlBMTcyRjA1MDEwMDdE
QkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0I3
RTI4MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyQzBGN0NFMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNpdGlvbnMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVk
V2F0Y2hwb2ludHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyOTgxRkQ5MTdCQUVFNEIwMEEzQkM5
OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNTg1Nyw3
ICs1ODQwLDYgQEAKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJy
aWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNM
ZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUExRDkw
MDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYzQjdF
MjkxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyQ0YzOUMyMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NjE0MEQyMTgyOTgyQ0IwMDc1MDYyNCAvKiBKU0FyZ3Vt
ZW50c0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNzBFMTZGNUNEMDBCMzQ0
NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTgwLDcgKzYxNjIsNiBAQAogCQkJ
CUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJD
YWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAv
KiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjNCN0UyNjE5QTEx
QjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU0MTE4
Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02MjI3LDYgKzYyMDgsNyBAQAogCQkJCTBGRjQyNzQ5MTU4RUJFOTEw
MDRDQjlGRiAvKiB1ZGlzODZfdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM5MTc5
OUU0QjIwMEQyODMzRCAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMzEzQkZERTcxMDAyM0Q4N0MgLyogVWlu
dDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0MjE3QURCNUYzMDA1
QUIxNzQgLyogVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjNGMTdBREI1
RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTY3NjUsNyArNjc0
Nyw2IEBACiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExpbmtT
dGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRTQxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNzNE
N0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDAxNjY3NjMzMDAwRDYxOTcxIC8qIENvZGVCbG9ja0hh
c2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDOTdGMzMxODIwMjBENzAwMkM5QjI2IC8qIENv
ZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY5NTIs
OCArNjkzMyw4IEBACiAJCQkJMEYyMzVCRDUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1
bWVudEZvck9wZXJhbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRDgxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjIzNUJEQTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTBGM0I3RTI3MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTdGMjk5NkIxN0EwQkI2NzAwMTA0MTdBIC8qIEZUTEZhaWwuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFODM0MTcxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzE5MTdENTFG
MjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50cmluc2lj
UmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTcxNDQsNyArNzEyNSw2IEBACiAJCQkJ
MEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExMSW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3MiAvKiBMTEludEV4Y2VwdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYzQjdFMkQxOUExMkFBRTAwRDlCQzU2IC8qIENh
bGxFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE0MTRCQTdGOEQwMEJGRTI3MiAv
KiBMTEludFNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBCODM5QzE0QkNGNDYz
MDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBQ0Qx
ODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZS5jcHAJKHJldmlzaW9uIDE3ODY5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FsbEVkZ2Uu
aCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgQ2FsbEVkZ2U6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQoIjwiLCBtX2NhbGxlZSwgIiwgY291bnQ6ICIs
IG1fY291bnQsICI+Iik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuaAkocmV2aXNpb24gMTc4NjkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIENhbGxFZGdlX2gKLSNkZWZpbmUgQ2FsbEVkZ2VfaAotCi0jaW5jbHVk
ZSAiQ2FsbFZhcmlhbnQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXR5cGVkZWYgdWludDE2X3Qg
Q2FsbEVkZ2VDb3VudFR5cGU7Ci0KLWNsYXNzIENhbGxFZGdlIHsKLXB1YmxpYzoKLSAgICBDYWxs
RWRnZSgpOwotICAgIENhbGxFZGdlKENhbGxWYXJpYW50LCBDYWxsRWRnZUNvdW50VHlwZSk7Ci0g
ICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jYWxsZWU7IH0KLSAg
ICAKLSAgICBDYWxsVmFyaWFudCBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlZTsgfQot
ICAgIENhbGxFZGdlQ291bnRUeXBlIGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb3VudDsgfQot
ICAgIAotICAgIENhbGxFZGdlIGRlc3BlY2lmaWVkQ2xvc3VyZSgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gQ2FsbEVkZ2UobV9jYWxsZWUuZGVzcGVjaWZpZWRDbG9zdXJlKCksIG1fY291
bnQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKLSAg
ICAKLXB1YmxpYzoKLSAgICBDYWxsVmFyaWFudCBtX2NhbGxlZTsKLSAgICBDYWxsRWRnZUNvdW50
VHlwZSBtX2NvdW50OwotfTsKLQotaW5saW5lIENhbGxFZGdlOjpDYWxsRWRnZShDYWxsVmFyaWFu
dCBjYWxsZWUsIENhbGxFZGdlQ291bnRUeXBlIGNvdW50KQotICAgIDogbV9jYWxsZWUoY2FsbGVl
KQotICAgICwgbV9jb3VudChjb3VudCkKLXsKLX0KLQotaW5saW5lIENhbGxFZGdlOjpDYWxsRWRn
ZSgpCi0gICAgOiBDYWxsRWRnZShDYWxsVmFyaWFudCgpLCAwKQotewotfQotCi10eXBlZGVmIFZl
Y3RvcjxDYWxsRWRnZSwgMT4gQ2FsbEVkZ2VMaXN0OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQot
I2VuZGlmIC8vIENhbGxFZGdlX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxFZGdlUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDM2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWxsRWRnZVBy
b2ZpbGUuaCIKLQotI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkNhbGxFZGdl
UHJvZmlsZUlubGluZXMuaCIKLSNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotQ2FsbEVkZ2VMaXN0IENhbGxFZGdl
UHJvZmlsZTo6Y2FsbEVkZ2VzKCkgY29uc3QKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2xvY2spOwotICAgIAotICAgIENhbGxFZGdlTGlzdCByZXN1bHQ7Ci0gICAgCi0gICAg
Q2FsbFZhcmlhbnQgcHJpbWFyeUNhbGxlZSA9IG1fcHJpbWFyeUNhbGxlZTsKLSAgICBDYWxsRWRn
ZUNvdW50VHlwZSBudW1DYWxsc1RvUHJpbWFyeSA9IG1fbnVtQ2FsbHNUb1ByaW1hcnk7Ci0gICAg
Ly8gRGVmZW5kIGFnYWluc3QgcmFjZXMuIFRoZXNlIGZpZWxkcyBhcmUgbW9kaWZpZWQgYnkgdGhl
IGxvZyBwcm9jZXNzb3Igd2l0aG91dCBsb2NraW5nLgotICAgIGlmICghIXByaW1hcnlDYWxsZWUg
JiYgbnVtQ2FsbHNUb1ByaW1hcnkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoQ2FsbEVkZ2UocHJp
bWFyeUNhbGxlZSwgbnVtQ2FsbHNUb1ByaW1hcnkpKTsKLSAgICAKLSAgICBpZiAobV9vdGhlckNh
bGxlZXMpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgaWYgdGhlIHByaW1hcnkgdGhyZWFk
IGhhZCBqdXN0IGNyZWF0ZWQgYSBtX290aGVyQ2FsbGVzIHdoaWxlIGxvZwotICAgICAgICAvLyBw
cm9jZXNzaW5nLCB3ZSBzZWUgYSBjb25zaXN0ZW50bHkgY3JlYXRlZCBvbmUuIFRoZSBsb2NrIGJl
aW5nIGhlbGQgaXMgaW5zdWZmaWNpZW50IGZvcgotICAgICAgICAvLyB0aGlzLCBzaW5jZSB0aGUg
bG9nIHByb2Nlc3NvciB3aWxsIG9ubHkgZ3JhYiB0aGUgbG9jayB3aGVuIG1lcmdpbmcgdGhlIHNl
Y29uZGFyeQotICAgICAgICAvLyBzcGVjdHJ1bSBpbnRvIHRoZSBwcmltYXJ5IG9uZSBidXQgbWF5
IHN0aWxsIGNyZWF0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmUgd2l0aG91dCBob2xkaW5nCi0gICAgICAg
IC8vIGxvY2tzLgotICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAgZm9yIChD
YWxsRWRnZSYgZW50cnkgOiBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQpIHsKLSAgICAgICAg
ICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBwcmltYXJ5IGR1
cGxpY2F0ZXMgYW4gZW50cnkgaW4gdGhlIHNlY29uZGFyeQotICAgICAgICAgICAgLy8gc3BlY3Ry
dW0uIFRoYXQgY2FuIGhhcHBlbiB3aGVuIHRoZSBHQyByZW1vdmVzIHRoZSBwcmltYXJ5LiBXZSBj
b3VsZCBoYXZlIHRoZSBHQyBmaXgKLSAgICAgICAgICAgIC8vIHRoZSBzaXR1YXRpb24gYnkgY2hh
bmdpbmcgdGhlIHByaW1hcnkgdG8gYmUgc29tZXRoaW5nIGZyb20gdGhlIHNlY29uZGFyeSBzcGVj
dHJ1bSwKLSAgICAgICAgICAgIC8vIGJ1dCB0aGlzIGZpeCBzZWVtcyBzaW1wbGVyIHRvIGltcGxl
bWVudCBhbmQgYWxzbyBjaGVhcGVyLgotICAgICAgICAgICAgaWYgKGVudHJ5LmNhbGxlZSgpID09
IHJlc3VsdFswXS5jYWxsZWUoKSkgewotICAgICAgICAgICAgICAgIHJlc3VsdFswXSA9IENhbGxF
ZGdlKHJlc3VsdFswXS5jYWxsZWUoKSwgZW50cnkuY291bnQoKSArIHJlc3VsdFswXS5jb3VudCgp
KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChlbnRyeSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgc3RkOjpzb3J0KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIFtdIChjb25z
dCBDYWxsRWRnZSYgYSwgY29uc3QgQ2FsbEVkZ2UmIGIpIC0+IGJvb2wgewotICAgICAgICAgICAg
cmV0dXJuIGEuY291bnQoKSA+IGIuY291bnQoKTsKLSAgICAgICAgfSk7Ci0gICAgCi0gICAgaWYg
KHJlc3VsdC5zaXplKCkgPj0gMikKLSAgICAgICAgQVNTRVJUKHJlc3VsdFswXS5jb3VudCgpID49
IHJlc3VsdC5sYXN0KCkuY291bnQoKSk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
Q2FsbEVkZ2VDb3VudFR5cGUgQ2FsbEVkZ2VQcm9maWxlOjpudW1DYWxsc1RvS25vd25DZWxscygp
IGNvbnN0Ci17Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgcmVzdWx0ID0gMDsKLSAgICBmb3IgKENh
bGxFZGdlJiBlZGdlIDogY2FsbEVkZ2VzKCkpCi0gICAgICAgIHJlc3VsdCArPSBlZGdlLmNvdW50
KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGJvb2wgd29ydGhEZXNwZWNpZnlp
bmcoY29uc3QgQ2FsbFZhcmlhbnQmIHZhcmlhbnQpCi17Ci0gICAgcmV0dXJuICFIZWFwOjppc01h
cmtlZCh2YXJpYW50LnJhd0NhbGxlZUNlbGwoKSkKLSAgICAgICAgJiYgSGVhcDo6aXNNYXJrZWQo
dmFyaWFudC5kZXNwZWNpZmllZENsb3N1cmUoKS5yYXdDYWxsZWVDZWxsKCkpOwotfQotCi1ib29s
IENhbGxFZGdlUHJvZmlsZTo6d29ydGhEZXNwZWNpZnlpbmcoKQotewotICAgIGlmIChtX2Nsb3N1
cmVzQXJlRGVzcGVjaWZpZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBib29s
IGRpZFNlZUVudHJ5ID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCEhbV9wcmltYXJ5Q2FsbGVlKSB7
Ci0gICAgICAgIGRpZFNlZUVudHJ5ID0gdHJ1ZTsKLSAgICAgICAgaWYgKCFKU0M6OndvcnRoRGVz
cGVjaWZ5aW5nKG1fcHJpbWFyeUNhbGxlZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIAotICAgIGlmIChtX290aGVyQ2FsbGVlcykgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAg
ICAgICAgICBkaWRTZWVFbnRyeSA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6d29ydGhE
ZXNwZWNpZnlpbmcobV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNhbGxlZSgpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIGRpZFNlZUVudHJ5OwotfQotCi12b2lkIENhbGxFZGdlUHJvZmlsZTo6dmlzaXRXZWFr
KCkKLXsKLSAgICBpZiAoIW1fcHJpbWFyeUNhbGxlZSAmJiAhbV9vdGhlckNhbGxlZXMpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2sp
OwotICAgIAotICAgIC8vIFNlZSBpZiBhbnl0aGluZyBpcyBkZWFkIGFuZCBpZiB0aGF0IGNhbiBi
ZSByZWN0aWZpZWQgYnkgZGVzcGVjaWZ5aW5nLgotICAgIGlmICh3b3J0aERlc3BlY2lmeWluZygp
KSB7Ci0gICAgICAgIENhbGxTcGVjdHJ1bSBuZXdTcGVjdHJ1bTsKLSAgICAgICAgCi0gICAgICAg
IGlmICghIW1fcHJpbWFyeUNhbGxlZSkKLSAgICAgICAgICAgIG5ld1NwZWN0cnVtLmFkZChtX3By
aW1hcnlDYWxsZWUuZGVzcGVjaWZpZWRDbG9zdXJlKCksIG1fbnVtQ2FsbHNUb1ByaW1hcnkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKG1fb3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgICAgICAgICAgbmV3U3BlY3RydW0uYWRkKAotICAgICAgICAgICAgICAgICAgICBt
X290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY2FsbGVlKCkuZGVzcGVjaWZpZWRDbG9zdXJl
KCksCi0gICAgICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5j
b3VudCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVmVj
dG9yPENhbGxTcGVjdHJ1bTo6S2V5QW5kQ291bnQ+IGxpc3QgPSBuZXdTcGVjdHJ1bS5idWlsZExp
c3QoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlzdC5zaXplKCkpOwotICAgICAgICBtX3By
aW1hcnlDYWxsZWUgPSBsaXN0Lmxhc3QoKS5rZXk7Ci0gICAgICAgIG1fbnVtQ2FsbHNUb1ByaW1h
cnkgPSBsaXN0Lmxhc3QoKS5jb3VudDsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX290aGVyQ2Fs
bGVlcykgewotICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLmNsZWFyKCk7
Ci0KLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYSBzaXR1YXRpb24gd2hlcmUgdGhlIEdD
IGNsZWFycyB0aGUgcHJpbWFyeSBhbmQgdGhlbiBsb2cgcHJvY2Vzc2luZwotICAgICAgICAgICAg
Ly8gcmVpbnN0YXRlcyBpdCB3aXRob3V0IGV2ZXIgZG9pbmcgYW4gYWRkU2xvdyBhbmQgc3Vic2Vx
dWVudCBtZXJnZUJhY2suIEluIHN1Y2ggYSBjYXNlCi0gICAgICAgICAgICAvLyB0aGUgcHJpbWFy
eSBjb3VsZCBkdXBsaWNhdGUgYW4gZW50cnkgaW4gb3RoZXJDYWxsZWVzLCB3aGljaCBtZWFucyB0
aGF0IGV2ZW4gdGhvdWdoIHdlCi0gICAgICAgICAgICAvLyBoYWQgYW4gb3RoZXJDYWxsZWVzIG9i
amVjdCwgdGhlIGxpc3Qgc2l6ZSBpcyBqdXN0IDEuCi0gICAgICAgICAgICBpZiAobGlzdC5zaXpl
KCkgPj0gMikgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxpc3Quc2l6ZSgp
IC0gMTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vz
c2VkLmFwcGVuZChDYWxsRWRnZShsaXN0W2ldLmtleSwgbGlzdFtpXS5jb3VudCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2Nsb3N1cmVzQXJlRGVzcGVj
aWZpZWQgPSB0cnVlOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAg
ICBpZiAoISFtX3ByaW1hcnlDYWxsZWUgJiYgIUhlYXA6OmlzTWFya2VkKG1fcHJpbWFyeUNhbGxl
ZS5yYXdDYWxsZWVDZWxsKCkpKSB7Ci0gICAgICAgIG1fbnVtQ2FsbHNUb1Vua25vd25DZWxsICs9
IG1fbnVtQ2FsbHNUb1ByaW1hcnk7Ci0gICAgICAgIAotICAgICAgICBtX3ByaW1hcnlDYWxsZWUg
PSBDYWxsVmFyaWFudCgpOwotICAgICAgICBtX251bUNhbGxzVG9QcmltYXJ5ID0gMDsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKG1fb3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRb
aV0uY2FsbGVlKCkucmF3Q2FsbGVlQ2VsbCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9udW1DYWxsc1RvVW5rbm93bkNlbGwgKz0gbV9v
dGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNvdW50KCk7Ci0gICAgICAgICAgICBtX290aGVy
Q2FsbGVlcy0+bV9wcm9jZXNzZWRbaS0tXSA9IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5s
YXN0KCk7Ci0gICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQucmVtb3ZlTGFz
dCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBPbmx5IGV4aXN0cyB3aGlsZSB3
ZSBhcmUgcHJvY2Vzc2luZyB0aGUgbG9nLgotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9vdGhl
ckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0pOwotICAgIH0KLX0KLQotdm9pZCBDYWxsRWRn
ZVByb2ZpbGU6OmFkZFNsb3coQ2FsbFZhcmlhbnQgY2FsbGVlLCBDYWxsRWRnZVByb2ZpbGVWZWN0
b3ImIG1lcmdlQmFja0xvZykKLXsKLSAgICAvLyBUaGlzIGV4aXN0cyB0byBoYW5kbGUgY2FzZXMg
d2hlcmUgdGhlIHNwZWN0cnVtIHdhc24ndCBjcmVhdGVkIHlldCwgb3Igd2UncmUgc3RvcmluZyB0
byBhCi0gICAgLy8gcGFydGljdWxhciBzcGVjdHJ1bSBmb3IgdGhlIGZpcnN0IHRpbWUgZHVyaW5n
IGEgbG9nIHByb2Nlc3NpbmcgaXRlcmF0aW9uLgotICAgIAotICAgIGlmICghbV9vdGhlckNhbGxl
ZXMpIHsKLSAgICAgICAgbV9vdGhlckNhbGxlZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPFNlY29uZGFy
eT4oKTsKLSAgICAgICAgLy8gSWYgYSBjb21waWxlciB0aHJlYWQgbm90aWNlcyB0aGUgbV9vdGhl
ckNhbGxlZXMgYmVpbmcgbm9uLW51bGwsIHdlIHdhbnQgdG8gbWFrZSBzdXJlCi0gICAgICAgIC8v
IHRoYXQgaXQgc2VlcyBhIGZ1bGx5IGNyZWF0ZWQgb25lLgotICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoIW1fb3RoZXJDYWxsZWVzLT5tX3RlbXBv
cmFyeVNwZWN0cnVtKSB7Ci0gICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0
cnVtID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsU3BlY3RydW0+KCk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5zaXplKCk7IGktLTspIHsKLSAg
ICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtLT5hZGQoCi0gICAg
ICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNhbGxlZSgpLAotICAg
ICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jb3VudCgpKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoaXMgaXMgdGhl
IGZpcnN0IHRpbWUgd2UncmUgc2VlaW5nIHRoaXMgcHJvZmlsZSBkdXJpbmcgdGhpcyBsb2cKLSAg
ICAgICAgLy8gcHJvY2Vzc2luZyBpdGVyYXRpb24uCi0gICAgICAgIG1lcmdlQmFja0xvZy5hcHBl
bmQodGhpcyk7Ci0gICAgfQotICAgIAotICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNw
ZWN0cnVtLT5hZGQoY2FsbGVlKTsKLX0KLQotdm9pZCBDYWxsRWRnZVByb2ZpbGU6Om1lcmdlQmFj
aygpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAKLSAg
ICBSRUxFQVNFX0FTU0VSVChtX290aGVyQ2FsbGVlcyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9v
dGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0pOwotICAgIAotICAgIGlmICghIW1fcHJp
bWFyeUNhbGxlZSkKLSAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0t
PmFkZChtX3ByaW1hcnlDYWxsZWUsIG1fbnVtQ2FsbHNUb1ByaW1hcnkpOwotICAgIAotICAgIGlm
ICghbV9jbG9zdXJlc0FyZURlc3BlY2lmaWVkKSB7Ci0gICAgICAgIENhbGxTcGVjdHJ1bSBuZXdT
cGVjdHJ1bTsKLSAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6ICptX290aGVyQ2FsbGVlcy0+bV90
ZW1wb3JhcnlTcGVjdHJ1bSkKLSAgICAgICAgICAgIG5ld1NwZWN0cnVtLmFkZChlbnRyeS5rZXku
ZGVzcGVjaWZpZWRDbG9zdXJlKCksIGVudHJ5LnZhbHVlKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChuZXdTcGVjdHJ1bS5zaXplKCkgPCBtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1
bS0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICAqbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3Bl
Y3RydW0gPSBuZXdTcGVjdHJ1bTsKLSAgICAgICAgICAgIG1fY2xvc3VyZXNBcmVEZXNwZWNpZmll
ZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPENhbGxTcGVjdHJ1
bTo6S2V5QW5kQ291bnQ+IGxpc3QgPSBtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1
bS0+YnVpbGRMaXN0KCk7Ci0gICAgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0g
PSBudWxscHRyOwotICAgIAotICAgIG1fcHJpbWFyeUNhbGxlZSA9IGxpc3QubGFzdCgpLmtleTsK
LSAgICBtX251bUNhbGxzVG9QcmltYXJ5ID0gbGlzdC5sYXN0KCkuY291bnQ7Ci0gICAgbGlzdC5y
ZW1vdmVMYXN0KCk7Ci0gICAgCi0gICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLmNsZWFy
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBjb3VudCA9IG1heEtub3duQ2FsbGVlczsgY291bnQtLSAm
JiAhbGlzdC5pc0VtcHR5KCk7KSB7Ci0gICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3Nl
ZC5hcHBlbmQoQ2FsbEVkZ2UobGlzdC5sYXN0KCkua2V5LCBsaXN0Lmxhc3QoKS5jb3VudCkpOwot
ICAgICAgICBsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gbGlzdC5zaXplKCk7IGktLTspCi0gICAgICAgIG1fbnVtQ2FsbHNUb1Vua25vd25DZWxs
ICs9IGxpc3RbaV0uY291bnQ7Ci19Ci0KLXZvaWQgQ2FsbEVkZ2VQcm9maWxlOjpmYWRlQnlIYWxm
KCkKLXsKLSAgICBtX251bUNhbGxzVG9QcmltYXJ5ID4+PSAxOwotICAgIG1fbnVtQ2FsbHNUb05v
dENlbGwgPj49IDE7Ci0gICAgbV9udW1DYWxsc1RvVW5rbm93bkNlbGwgPj49IDE7Ci0gICAgbV90
b3RhbENvdW50ID4+PSAxOwotICAgIAotICAgIGlmIChtX290aGVyQ2FsbGVlcykgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0gPSBDYWxs
RWRnZSgKLSAgICAgICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY2Fs
bGVlKCksCi0gICAgICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNv
dW50KCkgPj4gMSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX290aGVyQ2Fs
bGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRy
eSA6ICptX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSkKLSAgICAgICAgICAgICAg
ICBlbnRyeS52YWx1ZSA+Pj0gMTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotQ2FsbEVkZ2VMb2c6
OkNhbGxFZGdlTG9nKCkKLSAgICA6IG1fc2NhbGVkTG9nSW5kZXgobG9nU2l6ZSAqIHNpemVvZihF
bnRyeSkpCi17Ci0gICAgQVNTRVJUKCEobV9zY2FsZWRMb2dJbmRleCAlIHNpemVvZihFbnRyeSkp
KTsKLX0KLQotQ2FsbEVkZ2VMb2c6On5DYWxsRWRnZUxvZygpIHsgfQotCi1ib29sIENhbGxFZGdl
TG9nOjppc0VuYWJsZWQoKQotewotICAgIHJldHVybiBPcHRpb25zOjplbmFibGVDYWxsRWRnZVBy
b2ZpbGluZygpICYmIE9wdGlvbnM6OnVzZUZUTEpJVCgpOwotfQotCi0jaWYgRU5BQkxFKEpJVCkK
LQotZXh0ZXJuICJDIiBKSVRfT1BFUkFUSU9OIHZvaWQgb3BlcmF0aW9uUHJvY2Vzc0NhbGxFZGdl
TG9nKENhbGxFZGdlTG9nKikgV1RGX0lOVEVSTkFMOwotZXh0ZXJuICJDIiBKSVRfT1BFUkFUSU9O
IHZvaWQgb3BlcmF0aW9uUHJvY2Vzc0NhbGxFZGdlTG9nKENhbGxFZGdlTG9nKiBsb2cpCi17Ci0g
ICAgbG9nLT5wcm9jZXNzTG9nKCk7Ci19Ci0KLXZvaWQgQ2FsbEVkZ2VMb2c6OmVtaXRMb2dDb2Rl
KENDYWxsSGVscGVycyYgaml0LCBDYWxsRWRnZVByb2ZpbGUmIHByb2ZpbGUsIEpTVmFsdWVSZWdz
IGNhbGxlZVJlZ3MpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMgPSAx
OwotICAgIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSOwotICAgIGlmICghY2FsbGVlUmVncy51c2Vz
KEdQUkluZm86OnJlZ1QwKSkKLSAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnJlZ1QwOwot
ICAgIGVsc2UgaWYgKCFjYWxsZWVSZWdzLnVzZXMoR1BSSW5mbzo6cmVnVDEpKQotICAgICAgICBz
Y3JhdGNoR1BSID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgZWxzZQotICAgICAgICBzY3JhdGNoR1BS
ID0gR1BSSW5mbzo6cmVnVDI7Ci0gICAgCi0gICAgaml0LmxvYWQzMigmbV9zY2FsZWRMb2dJbmRl
eCwgc2NyYXRjaEdQUik7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG9rID0gaml0LmJy
YW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIpOwotICAgIAotICAg
IEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZBcmd1bWVudHMsIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJz
KCkgPj0gMSArIG51bWJlck9mQXJndW1lbnRzKTsKLSAgICAKLSAgICBqaXQuc3ViUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSksIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIAotICAgIGppdC5zdG9yZVZhbHVlKGNhbGxl
ZVJlZ3MsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBqaXQuc2V0dXBBcmd1bWVudHMoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25Qcm9jZXNzQ2FsbEVk
Z2VMb2cpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgaml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxI
ZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKEpTVmFsdWUpKSwgY2FsbGVlUmVn
cyk7Ci0gICAgCi0gICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFj
a0FsaWdubWVudEJ5dGVzKCkpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
LSAgICAKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2dTaXplICog
c2l6ZW9mKEVudHJ5KSksIHNjcmF0Y2hHUFIpOwotICAgIG9rLmxpbmsoJmppdCk7Ci0KLSAgICBq
aXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEVudHJ5KSksIHNjcmF0
Y2hHUFIpOwotICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIsICZtX3NjYWxlZExvZ0luZGV4KTsK
LSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2xvZyksIHNjcmF0
Y2hHUFIpOwotICAgIGppdC5zdG9yZVZhbHVlKGNhbGxlZVJlZ3MsIENDYWxsSGVscGVyczo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW50cnksIG1fdmFsdWUpKSk7Ci0gICAg
aml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmcHJvZmlsZSksIENDYWxs
SGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW50cnksIG1fcHJv
ZmlsZSkpKTsKLX0KLQotdm9pZCBDYWxsRWRnZUxvZzo6ZW1pdExvZ0NvZGUoCi0gICAgQ0NhbGxI
ZWxwZXJzJiBqaXQsIE93blB0cjxDYWxsRWRnZVByb2ZpbGU+JiBwcm9maWxlUG9pbnRlciwgSlNW
YWx1ZVJlZ3MgY2FsbGVlUmVncykKLXsKLSAgICBpZiAoIWlzRW5hYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgcHJvZmlsZVBvaW50ZXIuY3JlYXRlVHJhbnNhY3Rpb25hbGx5KCk7
Ci0gICAgZW1pdExvZ0NvZGUoaml0LCAqcHJvZmlsZVBvaW50ZXIsIGNhbGxlZVJlZ3MpOwotfQot
Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotdm9pZCBDYWxsRWRnZUxvZzo6cHJvY2Vzc0xvZygp
Ci17Ci0gICAgQVNTRVJUKCEobV9zY2FsZWRMb2dJbmRleCAlIHNpemVvZihFbnRyeSkpKTsKLSAg
ICAKLSAgICBpZiAoT3B0aW9uczo6Y2FsbEVkZ2VQcm9maWxlUmVhbGx5UHJvY2Vzc2VzTG9nKCkp
IHsKLSAgICAgICAgQ2FsbEVkZ2VQcm9maWxlVmVjdG9yIG1lcmdlQmFja0xvZzsKLSAgICAgICAg
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fc2NhbGVkTG9nSW5kZXggLyBzaXplb2YoRW50
cnkpOyBpIDwgbG9nU2l6ZTsgKytpKQotICAgICAgICAgICAgbV9sb2dbaV0ubV9wcm9maWxlLT5h
ZGQobV9sb2dbaV0ubV92YWx1ZSwgbWVyZ2VCYWNrTG9nKTsKLSAgICAgICAgCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1lcmdlQmFja0xvZy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICBt
ZXJnZUJhY2tMb2dbaV0tPm1lcmdlQmFjaygpOwotICAgIH0KLSAgICAKLSAgICBtX3NjYWxlZExv
Z0luZGV4ID0gbG9nU2l6ZSAqIHNpemVvZihFbnRyeSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdl
UHJvZmlsZS5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBD
YWxsRWRnZVByb2ZpbGVfaAotI2RlZmluZSBDYWxsRWRnZVByb2ZpbGVfaAotCi0jaW5jbHVkZSAi
Q2FsbEVkZ2UuaCIKLSNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgotI2luY2x1ZGUgIkNvbmN1cnJl
bnRKSVRMb2NrLmgiCi0jaW5jbHVkZSAiR1BSSW5mby5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgot
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENDYWxs
SGVscGVyczsKLWNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotY2xhc3MgQ2FsbEVkZ2VM
b2c7Ci1jbGFzcyBDYWxsRWRnZVByb2ZpbGU7Ci10eXBlZGVmIFZlY3RvcjxDYWxsRWRnZVByb2Zp
bGUqLCAxMD4gQ2FsbEVkZ2VQcm9maWxlVmVjdG9yOwotCi1jbGFzcyBDYWxsRWRnZVByb2ZpbGUg
ewotcHVibGljOgotICAgIENhbGxFZGdlUHJvZmlsZSgpOwotICAgIAotICAgIENhbGxFZGdlQ291
bnRUeXBlIG51bUNhbGxzVG9Ob3RDZWxsKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsc1RvTm90
Q2VsbDsgfQotICAgIENhbGxFZGdlQ291bnRUeXBlIG51bUNhbGxzVG9Vbmtub3duQ2VsbCgpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtQ2FsbHNUb1Vua25vd25DZWxsOyB9Ci0gICAgQ2FsbEVkZ2VDb3Vu
dFR5cGUgbnVtQ2FsbHNUb0tub3duQ2VsbHMoKSBjb25zdDsKLSAgICAKLSAgICBDYWxsRWRnZUNv
dW50VHlwZSB0b3RhbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbENvdW50OyB9Ci0gICAg
Ci0gICAgLy8gQ2FsbCB3aGlsZSBob2xkaW5nIHRoZSBvd25pbmcgQ29kZUJsb2NrJ3MgbG9jay4K
LSAgICBDYWxsRWRnZUxpc3QgY2FsbEVkZ2VzKCkgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB2aXNp
dFdlYWsoKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENhbGxFZGdlTG9nOwot
ICAgIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhLbm93bkNhbGxlZXMgPSA1OwotICAg
IAotICAgIHZvaWQgYWRkKEpTVmFsdWUsIENhbGxFZGdlUHJvZmlsZVZlY3RvciYgbWVyZ2VCYWNr
TG9nKTsKLSAgICAKLSAgICBib29sIHdvcnRoRGVzcGVjaWZ5aW5nKCk7Ci0gICAgdm9pZCBhZGRT
bG93KENhbGxWYXJpYW50LCBDYWxsRWRnZVByb2ZpbGVWZWN0b3ImIG1lcmdlQmFja0xvZyk7Ci0g
ICAgdm9pZCBtZXJnZUJhY2soKTsKLSAgICB2b2lkIGZhZGVCeUhhbGYoKTsKLSAgICAKLSAgICAv
LyBJdCdzIGNoZWFwZXIgdG8gbGV0IHRoaXMgaGF2ZSBpdHMgb3duIGxvY2suIEl0IG5lZWRzIHRv
IGJlIGFibGUgdG8gZmluZCB3aGljaCBsb2NrIHRvCi0gICAgLy8gbG9jay4gTm9ybWFsbHkgaXQg
d291bGQgbG9jayB0aGUgb3duaW5nIENvZGVCbG9jaydzIGxvY2ssIGJ1dCB0aGF0IHdvdWxkIHJl
cXVpcmUgYQotICAgIC8vIHBvaW50ZXItd2lkdGggd29yZCB0byBwb2ludCBhdCB0aGUgQ29kZUJs
b2NrLiBIYXZpbmcgdGhlIGJ5dGUtc2l6ZWQgbG9jayBoZXJlIGlzCi0gICAgLy8gY2hlYXBlci4g
SG93ZXZlciwgdGhpcyBtZWFucyB0aGF0IHRoZSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgQ29kZUJs
b2NrIGxvY2sgaXM6Ci0gICAgLy8gYWNxdWlyZSB0aGUgQ29kZUJsb2NrIGxvY2sgYmVmb3JlIHRo
aXMgb25lLgotICAgIG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOwotICAgIAotICAg
IGJvb2wgbV9jbG9zdXJlc0FyZURlc3BlY2lmaWVkOwotICAgIAotICAgIENhbGxFZGdlQ291bnRU
eXBlIG1fbnVtQ2FsbHNUb1ByaW1hcnk7Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV9udW1DYWxs
c1RvTm90Q2VsbDsKLSAgICBDYWxsRWRnZUNvdW50VHlwZSBtX251bUNhbGxzVG9Vbmtub3duQ2Vs
bDsKLSAgICBDYWxsRWRnZUNvdW50VHlwZSBtX3RvdGFsQ291bnQ7Ci0gICAgQ2FsbFZhcmlhbnQg
bV9wcmltYXJ5Q2FsbGVlOwotICAgIAotICAgIHR5cGVkZWYgU3BlY3RydW08Q2FsbFZhcmlhbnQs
IENhbGxFZGdlQ291bnRUeXBlPiBDYWxsU3BlY3RydW07Ci0gICAgCi0gICAgc3RydWN0IFNlY29u
ZGFyeSB7Ci0gICAgICAgIFZlY3RvcjxDYWxsRWRnZT4gbV9wcm9jZXNzZWQ7IC8vIFByb2Nlc3Nl
ZCBidXQgbm90IG5lY2Vzc2FyaWx5IHNvcnRlZC4KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxTcGVjdHJ1bT4gbV90ZW1wb3JhcnlTcGVjdHJ1bTsKLSAgICB9OwotICAgIAotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTZWNvbmRhcnk+IG1fb3RoZXJDYWxsZWVzOwotfTsKLQotY2xhc3MgQ2FsbEVk
Z2VMb2cgewotcHVibGljOgotICAgIENhbGxFZGdlTG9nKCk7Ci0gICAgfkNhbGxFZGdlTG9nKCk7
Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWQoKTsKLSAgICAKLSNpZiBFTkFCTEUoSklUKQot
ICAgIHZvaWQgZW1pdExvZ0NvZGUoQ0NhbGxIZWxwZXJzJiwgQ2FsbEVkZ2VQcm9maWxlJiwgSlNW
YWx1ZVJlZ3MgY2FsbGVlUmVncyk7IC8vIEFzc3VtZXMgdGhhdCBzdGFjayBpcyBhbGlnbmVkLCBh
bGwgdm9sYXRpbGUgcmVnaXN0ZXJzIC0gb3RoZXIgdGhhbiBjYWxsZWVHUFIgLSBhcmUgY2xvYmJl
cmFibGUsIGFuZCB0aGUgcGFyYW1ldGVyIHNwYWNlIGlzIGluIHVzZS4KLSAgICAKLSAgICAvLyBT
YW1lIGFzIGFib3ZlIGJ1dCBjcmVhdGVzIGEgQ2FsbEVkZ2VQcm9maWxlIGluc3RhbmNlIGlmIG9u
ZSBkaWQgbm90IGFscmVhZHkgZXhpc3QuIERvZXMKLSAgICAvLyB0aGlzIGluIGEgdGhyZWFkLXNh
ZmUgbWFubmVyIGJ5IGNhbGxpbmcgT3duUHRyOjpjcmVhdGVUcmFuc2FjdGlvbmFsbHkuCi0gICAg
dm9pZCBlbWl0TG9nQ29kZShDQ2FsbEhlbHBlcnMmLCBPd25QdHI8Q2FsbEVkZ2VQcm9maWxlPiYs
IEpTVmFsdWVSZWdzIGNhbGxlZVJlZ3MpOwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgCi0g
ICAgdm9pZCBwcm9jZXNzTG9nKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9nU2l6
ZSA9IDEwMDAwOwotICAgIAotICAgIHN0cnVjdCBFbnRyeSB7Ci0gICAgICAgIEpTVmFsdWUgbV92
YWx1ZTsKLSAgICAgICAgQ2FsbEVkZ2VQcm9maWxlKiBtX3Byb2ZpbGU7Ci0gICAgfTsKLSAgICAK
LSAgICB1bnNpZ25lZCBtX3NjYWxlZExvZ0luZGV4OwotICAgIEVudHJ5IG1fbG9nW2xvZ1NpemVd
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBDYWxsRWRnZVByb2ZpbGVf
aAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxl
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIENhbGxFZGdlUHJvZmlsZUlubGluZXNfaAotI2RlZmluZSBDYWxs
RWRnZVByb2ZpbGVJbmxpbmVzX2gKLQotI2luY2x1ZGUgIkNhbGxFZGdlUHJvZmlsZS5oIgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIENhbGxFZGdlUHJvZmlsZTo6Q2FsbEVkZ2VQcm9maWxl
KCkKLSAgICA6IG1fY2xvc3VyZXNBcmVEZXNwZWNpZmllZChmYWxzZSkKLSAgICAsIG1fbnVtQ2Fs
bHNUb1ByaW1hcnkoMCkKLSAgICAsIG1fbnVtQ2FsbHNUb05vdENlbGwoMCkKLSAgICAsIG1fbnVt
Q2FsbHNUb1Vua25vd25DZWxsKDApCi0gICAgLCBtX3RvdGFsQ291bnQoMCkKLSAgICAsIG1fcHJp
bWFyeUNhbGxlZShudWxscHRyKQotewotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgQ2FsbEVkZ2VQ
cm9maWxlOjphZGQoSlNWYWx1ZSB2YWx1ZSwgQ2FsbEVkZ2VQcm9maWxlVmVjdG9yJiBtZXJnZUJh
Y2tMb2cpCi17Ci0gICAgdW5zaWduZWQgbmV3VG90YWxDb3VudCA9IG1fdG90YWxDb3VudCArIDE7
Ci0gICAgaWYgKFVOTElLRUxZKCFuZXdUb3RhbENvdW50KSkgewotICAgICAgICBmYWRlQnlIYWxm
KCk7IC8vIFRhY2tsZSBvdmVyZmxvd3MgYnkgZGl2aWRpbmcgYWxsIGNvdW50cyBieSB0d28uCi0g
ICAgICAgIG5ld1RvdGFsQ291bnQgPSBtX3RvdGFsQ291bnQgKyAxOwotICAgIH0KLSAgICBBU1NF
UlQobmV3VG90YWxDb3VudCk7Ci0gICAgbV90b3RhbENvdW50ID0gbmV3VG90YWxDb3VudDsKLSAg
ICAKLSAgICBpZiAoVU5MSUtFTFkoIXZhbHVlLmlzQ2VsbCgpKSkgewotICAgICAgICBtX251bUNh
bGxzVG9Ob3RDZWxsKys7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDYWxsVmFyaWFu
dCBjYWxsZWUgPSBDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSk7Ci0gICAgCi0gICAgaWYgKG1f
Y2xvc3VyZXNBcmVEZXNwZWNpZmllZCkKLSAgICAgICAgY2FsbGVlID0gY2FsbGVlLmRlc3BlY2lm
aWVkQ2xvc3VyZSgpOwotICAgIAotICAgIGlmIChVTkxJS0VMWSghbV9wcmltYXJ5Q2FsbGVlKSkg
ewotICAgICAgICBtX3ByaW1hcnlDYWxsZWUgPSBjYWxsZWU7Ci0gICAgICAgIG1fbnVtQ2FsbHNU
b1ByaW1hcnkgPSAxOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAo
TElLRUxZKG1fcHJpbWFyeUNhbGxlZSA9PSBjYWxsZWUpKSB7Ci0gICAgICAgIG1fbnVtQ2FsbHNU
b1ByaW1hcnkrKzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gICAgaWYgKFVO
TElLRUxZKCFtX290aGVyQ2FsbGVlcykpIHsKLSAgICAgICAgYWRkU2xvdyhjYWxsZWUsIG1lcmdl
QmFja0xvZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIENhbGxTcGVj
dHJ1bSogc2Vjb25kYXJ5ID0gbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0uZ2V0
KCk7Ci0gICAgaWYgKCFzZWNvbmRhcnkpIHsKLSAgICAgICAgYWRkU2xvdyhjYWxsZWUsIG1lcmdl
QmFja0xvZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIHNlY29uZGFy
eS0+YWRkKGNhbGxlZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQ2Fs
bEVkZ2VQcm9maWxlSW5saW5lc19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKICNpZiBFTkFCTEUoSklU
KQpAQCAtMzcsNyArMzgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbExpbmtJbmZv
Ojp1bmxpbmsoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikKIHsKLSAgICBBU1NFUlQoaXNM
aW5rZWQoKSk7CisgICAgaWYgKCFpc0xpbmtlZCgpKSB7CisgICAgICAgIC8vIFdlIGNvdWxkIGJl
IGNhbGxlZCBldmVuIGlmIHdlJ3JlIG5vdCBsaW5rZWQgYW55bW9yZSBiZWNhdXNlIG9mIGhvdyBw
b2x5bW9ycGhpYyBjYWxscworICAgICAgICAvLyB3b3JrLiBFYWNoIGNhbGxzaXRlIHdpdGhpbiB0
aGUgcG9seW1vcnBoaWMgY2FsbCBzdHViIG1heSBzZXBhcmF0ZWx5IGFzayB1cyB0byB1bmxpbmso
KS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOworICAgICAgICByZXR1cm47
CisgICAgfQogICAgIAogICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSkKICAgICAg
ICAgZGF0YUxvZygiVW5saW5raW5nIGNhbGwgZnJvbSAiLCBjYWxsUmV0dXJuTG9jYXRpb24sICIg
dG8gIiwgcG9pbnRlckR1bXAocmVwYXRjaEJ1ZmZlci5jb2RlQmxvY2soKSksICJcbiIpOwpAQCAt
NjEsMTIgKzY3LDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZmYK
IHsKICAgICBpZiAoaXNMaW5rZWQoKSkgewogICAgICAgICBpZiAoc3R1YikgewotICAgICAgICAg
ICAgaWYgKCFIZWFwOjppc01hcmtlZChzdHViLT5leGVjdXRhYmxlKCkpKSB7CisgICAgICAgICAg
ICBpZiAoIXN0dWItPnZpc2l0V2VhayhyZXBhdGNoQnVmZmVyKSkgewogICAgICAgICAgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygKICAgICAgICAgICAgICAgICAgICAgICAgICJDbGVhcmluZyBjbG9zdXJlIGNhbGwgZnJvbSAi
LCAqcmVwYXRjaEJ1ZmZlci5jb2RlQmxvY2soKSwgIiB0byAiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgc3R1Yi0+ZXhlY3V0YWJsZSgpLT5oYXNoRm9yKHNwZWNpYWxpemF0aW9uS2luZCgpKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICIsIHN0dWIgcm91dGluZSAiLCBSYXdQb2ludGVyKHN0
dWIuZ2V0KCkpLCAiLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0RHVtcChzdHVi
LT52YXJpYW50cygpKSwgIiwgc3R1YiByb3V0aW5lICIsIFJhd1BvaW50ZXIoc3R1Yi5nZXQoKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAiLlxuIik7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIHVubGluayhyZXBhdGNoQnVmZmVyKTsKICAgICAgICAgICAgIH0KQEAgLTgz
LDExICs4OSw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZmYKICAg
ICB9CiAgICAgaWYgKCEhbGFzdFNlZW5DYWxsZWUgJiYgIUhlYXA6OmlzTWFya2VkKGxhc3RTZWVu
Q2FsbGVlLmdldCgpKSkKICAgICAgICAgbGFzdFNlZW5DYWxsZWUuY2xlYXIoKTsKLSAgICAKLSAg
ICBpZiAoY2FsbEVkZ2VQcm9maWxlKSB7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwot
ICAgICAgICBjYWxsRWRnZVByb2ZpbGUtPnZpc2l0V2VhaygpOwotICAgIH0KIH0KIAogQ2FsbExp
bmtJbmZvJiBDYWxsTGlua0luZm86OmR1bW15KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMTMgKzI2LDEyIEBACiAjaWZuZGVmIENhbGxMaW5rSW5mb19oCiAjZGVmaW5lIENhbGxM
aW5rSW5mb19oCiAKLSNpbmNsdWRlICJDYWxsRWRnZVByb2ZpbGUuaCIKLSNpbmNsdWRlICJDbG9z
dXJlQ2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVk
ZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIkpJVFdyaXRlQmFycmllci5o
IgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKKyNpbmNsdWRl
ICJQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvU2VudGluZWxMaW5rZWRM
aXN0Lmg+CkBAIC04Miw3ICs4MSw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFz
aWNSYXdTZW4KICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXI7CiAgICAgSklU
V3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsKICAgICBXcml0ZUJhcnJpZXI8SlNGdW5j
dGlvbj4gbGFzdFNlZW5DYWxsZWU7Ci0gICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+
IHN0dWI7CisgICAgUmVmUHRyPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBzdHViOwogICAg
IGJvb2wgaXNGVEwgOiAxOwogICAgIGJvb2wgaGFzU2VlblNob3VsZFJlcGF0Y2ggOiAxOwogICAg
IGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAxOwpAQCAtOTAsNyArODksNiBAQCBzdHJ1Y3QgQ2FsbExp
bmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDogODsK
ICAgICB1bnNpZ25lZCBzbG93UGF0aENvdW50OwogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsK
LSAgICBPd25QdHI8Q2FsbEVkZ2VQcm9maWxlPiBjYWxsRWRnZVByb2ZpbGU7CiAKICAgICBib29s
IGlzTGlua2VkKCkgeyByZXR1cm4gc3R1YiB8fCBjYWxsZWU7IH0KICAgICB2b2lkIHVubGluayhS
ZXBhdGNoQnVmZmVyJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDcsNyArNDcsNyBAQCBDYWxsTGlua1N0YXR1czo6Q2FsbExpbmtTdGF0dXMoSlNW
YWx1ZSB2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgbV9lZGdlcy5hcHBlbmQo
Q2FsbEVkZ2UoQ2FsbFZhcmlhbnQodmFsdWUuYXNDZWxsKCkpLCAxKSk7CisgICAgbV92YXJpYW50
cy5hcHBlbmQoQ2FsbFZhcmlhbnQodmFsdWUuYXNDZWxsKCkpKTsKIH0KIAogQ2FsbExpbmtTdGF0
dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCkBAIC0xMjgsMjMgKzEyOCw2IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRm8KICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzLCBidXQgYW55dGlt
ZSB3ZSBoYXZlIHRvIGRlYnVnIHRoaXMgY29kZSwgaXQgYmVjb21lcyBpbmRpc3BlbnNhYmxlLgog
ICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICAKLSAgICBpZiAoT3B0aW9uczo6
Y2FsbFN0YXR1c1Nob3VsZFVzZUNhbGxFZGdlUHJvZmlsZSgpKSB7Ci0gICAgICAgIC8vIEFsd2F5
cyB0cnVzdCB0aGUgY2FsbCBlZGdlIHByb2ZpbGUgb3ZlciBhbnl0aGluZyBlbHNlIHNpbmNlIHRo
aXMgaGFzIHByZWNpc2UgY291bnRzLgotICAgICAgICAvLyBJdCBjYW4gbWFrZSB0aGUgYmVzdCBw
b3NzaWJsZSBkZWNpc2lvbiBiZWNhdXNlIGl0IG5ldmVyICJmb3JnZXRzIiB3aGF0IGhhcHBlbmVk
IGZvciBhbnkKLSAgICAgICAgLy8gY2FsbCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGZhZGluZyBv
dXQgdGhlIGNvdW50cyBvZiBvbGQgY2FsbHMgKGZvciBleGFtcGxlIGlmIHRoZQotICAgICAgICAv
LyBjb3VudGVyIHR5cGUgaXMgMTYtYml0IHRoZW4gY2FsbHMgdGhhdCBoYXBwZW5lZCBtb3JlIHRo
YW4gMl4xNiBjYWxscyBhZ28gYXJlIGdpdmVuIGhhbGYKLSAgICAgICAgLy8gd2VpZ2h0LCBhbmQg
dGhpcyBjb21wb3VuZHMgZm9yIGV2ZXJ5IDJeMTUgW3NpY10gY2FsbHMgYWZ0ZXIgdGhhdCkuIFRo
ZSBjb21iaW5hdGlvbiBvZgotICAgICAgICAvLyBoaWdoIGZpZGVsaXR5IGZvciByZWNlbnQgY2Fs
bHMgYW5kIGZhZGluZyBmb3Igb2xkZXIgY2FsbHMgbWFrZXMgdGhpcyB0aGUgbW9zdCB1c2VmdWwK
LSAgICAgICAgLy8gbWVjaGFtaXNtIG9mIGNob29zaW5nIGhvdyB0byBvcHRpbWl6ZSBmdXR1cmUg
Y2FsbHMuCi0gICAgICAgIENhbGxFZGdlUHJvZmlsZSogZWRnZVByb2ZpbGUgPSBjYWxsTGlua0lu
Zm8uY2FsbEVkZ2VQcm9maWxlLmdldCgpOwotICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsK
LSAgICAgICAgaWYgKGVkZ2VQcm9maWxlKSB7Ci0gICAgICAgICAgICBDYWxsTGlua1N0YXR1cyBy
ZXN1bHQgPSBjb21wdXRlRnJvbUNhbGxFZGdlUHJvZmlsZShlZGdlUHJvZmlsZSk7Ci0gICAgICAg
ICAgICBpZiAoISFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKICAgICByZXR1cm4gY29tcHV0ZUZyb21DYWxsTGlua0luZm8obG9j
a2VyLCBjYWxsTGlua0luZm8pOwogfQogCkBAIC0xNjcsOCArMTUwLDE2IEBAIENhbGxMaW5rU3Rh
dHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnIKICAgICBpZiAoY2FsbExpbmtJbmZvLnNsb3dQ
YXRoQ291bnQgPj0gT3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKSkKICAg
ICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAgICAKLSAgICBpZiAoQ2xvc3VyZUNhbGxT
dHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViLmdldCgpKQotICAgICAgICByZXR1
cm4gQ2FsbExpbmtTdGF0dXMoc3R1Yi0+ZXhlY3V0YWJsZSgpKTsKKyAgICAvLyBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZSBpcyBhIEdDQXdhcmVKSVRTdHViUm91dGluZSwgc28gaWYgbm9uLW51
bGwsIGl0IHdpbGwgc3RheSBhbGl2ZQorICAgIC8vIHVudGlsIG5leHQgR0MgZXZlbiBpZiB0aGUg
Q2FsbExpbmtJbmZvIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkLiBBbHNvLCB0aGUgdmFyaWFudHMg
bGlzdCBpcworICAgIC8vIG5ldmVyIG11dGF0ZWQgYWZ0ZXIgdGhlIFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lIGlzIGluc3RhbnRpYXRlZC4gV2UgaGF2ZSBzb21lIGNvbnNlcnZhdGl2ZQorICAg
IC8vIGZlbmNpbmcgaW4gcGxhY2UgdG8gbWFrZSBzdXJlIHRoYXQgd2Ugc2VlIHRoZSB2YXJpYW50
cyBsaXN0IGFmdGVyIGNvbnN0cnVjdGlvbi4KKyAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8uc3R1Yi5nZXQoKSkgeworICAgICAgICBXVEY6Omxv
YWRMb2FkRmVuY2UoKTsKKyAgICAgICAgQ2FsbExpbmtTdGF0dXMgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV92YXJpYW50cyA9IHN0dWItPnZhcmlhbnRzKCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQogICAgIAogICAgIEpTRnVuY3Rpb24qIHRhcmdldCA9IGNhbGxMaW5rSW5mby5s
YXN0U2VlbkNhbGxlZS5nZXQoKTsKICAgICBpZiAoIXRhcmdldCkKQEAgLTE4MCwzNCArMTcxLDYg
QEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcgogICAgIHJldHVybiBD
YWxsTGlua1N0YXR1cyh0YXJnZXQpOwogfQogCi1DYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1
czo6Y29tcHV0ZUZyb21DYWxsRWRnZVByb2ZpbGUoQ2FsbEVkZ2VQcm9maWxlKiBlZGdlUHJvZmls
ZSkKLXsKLSAgICAvLyBJbiBjYXNlcyB3aGVyZSB0aGUgY2FsbCBlZGdlIHByb2ZpbGUgc2F3IG5v
dGhpbmcsIHVzZSB0aGUgQ2FsbExpbmtJbmZvIGluc3RlYWQuCi0gICAgaWYgKCFlZGdlUHJvZmls
ZS0+dG90YWxDYWxscygpKQotICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsKLSAgICAK
LSAgICAvLyBUbyBkbyBhbnl0aGluZyBtZWFuaW5nZnVsLCB3ZSByZXF1aXJlIHRoYXQgdGhlIG1h
am9yaXR5IG9mIGNhbGxzIGFyZSB0byBzb21ldGhpbmcgd2UKLSAgICAvLyBrbm93IGhvdyB0byBo
YW5kbGUuCi0gICAgdW5zaWduZWQgbnVtQ2FsbHNUb0tub3duID0gZWRnZVByb2ZpbGUtPm51bUNh
bGxzVG9Lbm93bkNlbGxzKCk7Ci0gICAgdW5zaWduZWQgbnVtQ2FsbHNUb1Vua25vd24gPSBlZGdl
UHJvZmlsZS0+bnVtQ2FsbHNUb05vdENlbGwoKSArIGVkZ2VQcm9maWxlLT5udW1DYWxsc1RvVW5r
bm93bkNlbGwoKTsKLSAgICAKLSAgICAvLyBXZSByZXF1aXJlIHRoYXQgdGhlIG1ham9yaXR5IG9m
IGNhbGxzIHdlcmUgdG8gc29tZXRoaW5nIHRoYXQgd2UgY291bGQgcG9zc2libHkgaW5saW5lLgot
ICAgIGlmIChudW1DYWxsc1RvS25vd24gPD0gbnVtQ2FsbHNUb1Vua25vd24pCi0gICAgICAgIHJl
dHVybiB0YWtlc1Nsb3dQYXRoKCk7Ci0gICAgCi0gICAgLy8gV2UgcmVxdWlyZSB0aGF0IHRoZSBu
dW1iZXIgb2Ygc3VjaCBjYWxscyBpcyBncmVhdGVyIHRoYW4gc29tZSBtaW5pbWFsIHRocmVzaG9s
ZCwgc28gdGhhdCB3ZQotICAgIC8vIGF2b2lkIGlubGluaW5nIGNvbXBsZXRlbHkgY29sZCBjYWxs
cy4KLSAgICBpZiAobnVtQ2FsbHNUb0tub3duIDwgT3B0aW9uczo6ZnJlcXVlbnRDYWxsVGhyZXNo
b2xkKCkpCi0gICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7Ci0gICAgCi0gICAgQ2FsbExp
bmtTdGF0dXMgcmVzdWx0OwotICAgIHJlc3VsdC5tX2VkZ2VzID0gZWRnZVByb2ZpbGUtPmNhbGxF
ZGdlcygpOwotICAgIHJlc3VsdC5tX2NvdWxkVGFrZVNsb3dQYXRoID0gISFudW1DYWxsc1RvVW5r
bm93bjsKLSAgICByZXN1bHQubV9jYW5UcnVzdENvdW50cyA9IHRydWU7Ci0gICAgCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLAogICAgIEV4aXRTaXRlRGF0
YSBleGl0U2l0ZURhdGEpCkBAIC0yODEsOCArMjQ0LDggQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExp
bmtTdGF0dXM6OmNvbXB1dGVGbwogCiBib29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxs
KCkgY29uc3QKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2VkZ2VzLnNpemUoKTsgaS0tOykg
ewotICAgICAgICBpZiAobV9lZGdlc1tpXS5jYWxsZWUoKS5pc0Nsb3N1cmVDYWxsKCkpCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYg
KG1fdmFyaWFudHNbaV0uaXNDbG9zdXJlQ2FsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTI5MCwxOCArMjUzLDcgQEAgYm9vbCBDYWxs
TGlua1N0YXR1czo6aXNDbG9zdXJlQ2FsbCgpIGNvbgogCiB2b2lkIENhbGxMaW5rU3RhdHVzOjpt
YWtlQ2xvc3VyZUNhbGwoKQogewotICAgIEFTU0VSVCghbV9pc1Byb3ZlZCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gbV9lZGdlcy5zaXplKCk7IGktLTspCi0gICAgICAgIG1fZWRnZXNbaV0gPSBt
X2VkZ2VzW2ldLmRlc3BlY2lmaWVkQ2xvc3VyZSgpOwotICAgIAotICAgIGlmICghQVNTRVJUX0RJ
U0FCTEVEKSB7Ci0gICAgICAgIC8vIERvaW5nIHRoaXMgc2hvdWxkIG5vdCBoYXZlIGNyZWF0ZWQg
ZHVwbGljYXRlcywgYmVjYXVzZSB0aGUgQ2FsbEVkZ2VQcm9maWxlCi0gICAgICAgIC8vIHNob3Vs
ZCBkZXNwZWNpZnkgY2xvc3VyZXMgaWYgZG9pbmcgc28gd291bGQgcmVkdWNlIHRoZSBudW1iZXIg
b2Yga25vd24gY2FsbGVlcy4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZWRn
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBq
IDwgbV9lZGdlcy5zaXplKCk7ICsraikKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9lZGdlc1tp
XS5jYWxsZWUoKSAhPSBtX2VkZ2VzW2pdLmNhbGxlZSgpKTsKLSAgICAgICAgfQotICAgIH0KKyAg
ICBtX3ZhcmlhbnRzID0gZGVzcGVjaWZpZWRWYXJpYW50TGlzdChtX3ZhcmlhbnRzKTsKIH0KIAog
dm9pZCBDYWxsTGlua1N0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtMzE5
LDcgKzI3MSw3IEBAIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAg
ICBpZiAobV9jb3VsZFRha2VTbG93UGF0aCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiQ291
bGQgVGFrZSBTbG93IFBhdGgiKTsKICAgICAKLSAgICBvdXQucHJpbnQobGlzdER1bXAobV9lZGdl
cykpOworICAgIG91dC5wcmludChsaXN0RHVtcChtX3ZhcmlhbnRzKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmgJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3
LDYgKzI3LDcgQEAKICNkZWZpbmUgQ2FsbExpbmtTdGF0dXNfaAogCiAjaW5jbHVkZSAiQ2FsbExp
bmtJbmZvLmgiCisjaW5jbHVkZSAiQ2FsbFZhcmlhbnQuaCIKICNpbmNsdWRlICJDb2RlT3JpZ2lu
LmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIkNvbmN1
cnJlbnRKSVRMb2NrLmgiCkBAIC00OCw3ICs0OSw2IEBAIHB1YmxpYzoKICAgICBDYWxsTGlua1N0
YXR1cygpCiAgICAgICAgIDogbV9jb3VsZFRha2VTbG93UGF0aChmYWxzZSkKICAgICAgICAgLCBt
X2lzUHJvdmVkKGZhbHNlKQotICAgICAgICAsIG1fY2FuVHJ1c3RDb3VudHMoZmFsc2UpCiAgICAg
ewogICAgIH0KICAgICAKQEAgLTYyLDEwICs2Miw5IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBD
YWxsTGlua1N0YXR1cyhKU1ZhbHVlKTsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyhDYWxsVmFy
aWFudCB2YXJpYW50KQotICAgICAgICA6IG1fZWRnZXMoMSwgQ2FsbEVkZ2UodmFyaWFudCwgMSkp
CisgICAgICAgIDogbV92YXJpYW50cygxLCB2YXJpYW50KQogICAgICAgICAsIG1fY291bGRUYWtl
U2xvd1BhdGgoZmFsc2UpCiAgICAgICAgICwgbV9pc1Byb3ZlZChmYWxzZSkKLSAgICAgICAgLCBt
X2NhblRydXN0Q291bnRzKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCkBAIC0xMDksMTkgKzEw
OCwxOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGb3IoCiAg
ICAgICAgIENvZGVCbG9jayosIENvZGVPcmlnaW4sIGNvbnN0IENhbGxMaW5rSW5mb01hcCYsIGNv
bnN0IENvbnRleHRNYXAmKTsKICAgICAKLSAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4g
IW1fZWRnZXMuaXNFbXB0eSgpIHx8IG1fY291bGRUYWtlU2xvd1BhdGg7IH0KKyAgICBib29sIGlz
U2V0KCkgY29uc3QgeyByZXR1cm4gIW1fdmFyaWFudHMuaXNFbXB0eSgpIHx8IG1fY291bGRUYWtl
U2xvd1BhdGg7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFp
c1NldCgpOyB9CiAgICAgCiAgICAgYm9vbCBjb3VsZFRha2VTbG93UGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fY291bGRUYWtlU2xvd1BhdGg7IH0KICAgICAKLSAgICBDYWxsRWRnZUxpc3QgZWRnZXMo
KSBjb25zdCB7IHJldHVybiBtX2VkZ2VzOyB9Ci0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZWRnZXMuc2l6ZSgpOyB9Ci0gICAgQ2FsbEVkZ2UgYXQodW5zaWduZWQgaSkgY29u
c3QgeyByZXR1cm4gbV9lZGdlc1tpXTsgfQotICAgIENhbGxFZGdlIG9wZXJhdG9yW10odW5zaWdu
ZWQgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KKyAgICBDYWxsVmFyaWFudExpc3QgdmFyaWFu
dHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFyaWFudHMuc2l6ZSgpOyB9CisgICAgQ2FsbFZhcmlhbnQgYXQodW5z
aWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tpXTsgfQorICAgIENhbGxWYXJpYW50
IG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KICAgICBib29s
IGlzUHJvdmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1Byb3ZlZDsgfQotICAgIGJvb2wgY2FuT3B0
aW1pemUoKSBjb25zdCB7IHJldHVybiAhbV9lZGdlcy5pc0VtcHR5KCk7IH0KLSAgICBib29sIGNh
blRydXN0Q291bnRzKCkgY29uc3QgeyByZXR1cm4gbV9jYW5UcnVzdENvdW50czsgfQorICAgIGJv
b2wgY2FuT3B0aW1pemUoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCk7IH0K
ICAgICAKICAgICBib29sIGlzQ2xvc3VyZUNhbGwoKSBjb25zdDsgLy8gUmV0dXJucyB0cnVlIGlm
IGFueSBjYWxsZWUgaXMgYSBjbG9zdXJlIGNhbGwuCiAgICAgCkBAIC0xMzIsMTUgKzEzMCwxMyBA
QCBwcml2YXRlOgogICAgIAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRnJvbUxM
SW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4KTsKICNpZiBFTkFCTEUoSklUKQotICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBj
b21wdXRlRnJvbUNhbGxFZGdlUHJvZmlsZShDYWxsRWRnZVByb2ZpbGUqKTsKICAgICBzdGF0aWMg
Q2FsbExpbmtTdGF0dXMgY29tcHV0ZUZyb21DYWxsTGlua0luZm8oCiAgICAgICAgIGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImLCBDYWxsTGlua0luZm8mKTsKICNlbmRpZgogICAgIAotICAgIENh
bGxFZGdlTGlzdCBtX2VkZ2VzOworICAgIENhbGxWYXJpYW50TGlzdCBtX3ZhcmlhbnRzOwogICAg
IGJvb2wgbV9jb3VsZFRha2VTbG93UGF0aDsKICAgICBib29sIG1faXNQcm92ZWQ7Ci0gICAgYm9v
bCBtX2NhblRydXN0Q291bnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5jcHAJKHJldmlzaW9u
IDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDUgKzUwLDM0IEBAIHZvaWQgQ2FsbFZhcmlhbnQ6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkKICAgICBvdXQucHJpbnQoIkV4ZWN1dGFibGU6ICIsICpleGVjdXRh
YmxlKCkpOwogfQogCitDYWxsVmFyaWFudExpc3QgdmFyaWFudExpc3RXaXRoVmFyaWFudChjb25z
dCBDYWxsVmFyaWFudExpc3QmIGxpc3QsIENhbGxWYXJpYW50IHZhcmlhbnRUb0FkZCkKK3sKKyAg
ICBBU1NFUlQodmFyaWFudFRvQWRkKTsKKyAgICBDYWxsVmFyaWFudExpc3QgcmVzdWx0OworICAg
IGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpIHsKKyAgICAgICAgQVNTRVJUKHZhcmlh
bnQpOworICAgICAgICBpZiAoISF2YXJpYW50VG9BZGQpIHsKKyAgICAgICAgICAgIGlmICh2YXJp
YW50ID09IHZhcmlhbnRUb0FkZCkKKyAgICAgICAgICAgICAgICB2YXJpYW50VG9BZGQgPSBDYWxs
VmFyaWFudCgpOworICAgICAgICAgICAgZWxzZSBpZiAodmFyaWFudC5kZXNwZWNpZmllZENsb3N1
cmUoKSA9PSB2YXJpYW50VG9BZGQuZGVzcGVjaWZpZWRDbG9zdXJlKCkpIHsKKyAgICAgICAgICAg
ICAgICB2YXJpYW50ID0gdmFyaWFudC5kZXNwZWNpZmllZENsb3N1cmUoKTsKKyAgICAgICAgICAg
ICAgICB2YXJpYW50VG9BZGQgPSBDYWxsVmFyaWFudCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHJlc3VsdC5hcHBlbmQodmFyaWFudCk7CisgICAgfQorICAgIGlmICghIXZh
cmlhbnRUb0FkZCkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCh2YXJpYW50VG9BZGQpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK0NhbGxWYXJpYW50TGlzdCBkZXNwZWNpZmllZFZhcmlhbnRMaXN0
KGNvbnN0IENhbGxWYXJpYW50TGlzdCYgbGlzdCkKK3sKKyAgICBDYWxsVmFyaWFudExpc3QgcmVz
dWx0OworICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpCisgICAgICAgIHJlc3Vs
dCA9IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQocmVzdWx0LCB2YXJpYW50LmRlc3BlY2lmaWVkQ2xv
c3VyZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmgJKHJl
dmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFy
aWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01NiwxMSArNTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIC8v
ICAgICB0aGFuIHRoZSBmYWN0IHRoYXQgdGhleSBkb24ndCBmYWxsIGludG8gYW55IG9mIHRoZSBh
Ym92ZSBjYXRlZ29yaWVzLgogLy8KIC8vIFRoaXMgY2xhc3Mgc2VydmVzIGFzIGEga2luZCBvZiB1
bmlvbiBvdmVyIHRoZXNlIGZvdXIgdGhpbmdzLiBJdCBkb2VzIHNvIGJ5IGp1c3QgaG9sZGluZyBh
Ci0vLyBKU0NlbGwqLiBXZSBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlIG1vZGVzIGl0cyBpbiBieSBk
b2luZyB0eXBlIGNoZWNrcyBvbiB0aGUgY2VsbC4gTm90ZSB0aGF0IHRoZXJlCi0vLyBpcyBubyBs
aWZlY3ljbGUgbWFuYWdlbWVudCBmb3IgdGhlIGNlbGwgYmVjYXVzZSB0aGlzIGNsYXNzIGlzIGFs
d2F5cyB1c2VkIGluIGNvbnRleHRzIHdoZXJlIHdlCi0vLyBlaXRoZXIgZG8gY3VzdG9tIHdlYWsg
cmVmZXJlbmNlIGxvZ2ljIG92ZXIgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgKHNlZSBDYWxsRWRn
ZVByb2ZpbGUpLCBvciB3ZQotLy8gYXJlIGluc2lkZSB0aGUgY29tcGlsZXIgYW5kIHdlIGFzc3Vt
ZSB0aGF0IHRoZSBjb21waWxlciBydW5zIGluIGJldHdlZW4gY29sbGVjdGlvbnMgYW5kIHNvIGNh
bgotLy8gdG91Y2ggdGhlIGhlYXAgd2l0aG91dCBub3RpZnlpbmcgYW55b25lLgorLy8gSlNDZWxs
Ki4gV2UgZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZSBtb2RlcyBpdHMgaW4gYnkgZG9pbmcgdHlwZSBj
aGVja3Mgb24gdGhlIGNlbGwuIE5vdGUgdGhhdCB3ZQorLy8gY2Fubm90IHVzZSBXcml0ZUJhcnJp
ZXI8PiBoZXJlIGJlY2F1c2UgdGhpcyBnZXRzIHVzZWQgaW5zaWRlIHRoZSBjb21waWxlci4KIAog
Y2xhc3MgQ2FsbFZhcmlhbnQgewogcHVibGljOgpAQCAtMTgxLDYgKzE3OCwxMyBAQCBzdHJ1Y3Qg
Q2FsbFZhcmlhbnRIYXNoIHsKIAogdHlwZWRlZiBWZWN0b3I8Q2FsbFZhcmlhbnQsIDE+IENhbGxW
YXJpYW50TGlzdDsKIAorLy8gUmV0dXJucyBhIG5ldyB2YXJpYW50IGxpc3QgYnkgYXR0ZW1wdGlu
ZyB0byBlaXRoZXIgYXBwZW5kIHRoZSBnaXZlbiB2YXJpYW50IG9yIG1lcmdlIGl0IHdpdGggb25l
CisvLyBvZiB0aGUgdmFyaWFudHMgd2UgYWxyZWFkeSBoYXZlIGJ5IGRlc3BlY2lmeWluZyBjbG9z
dXJlcy4KK0NhbGxWYXJpYW50TGlzdCB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGNvbnN0IENhbGxW
YXJpYW50TGlzdCYsIENhbGxWYXJpYW50KTsKKworLy8gUmV0dXJucyBhIG5ldyBsaXN0IHdoZXJl
IGV2ZXJ5IGVsZW1lbnQgaXMgZGVzcGVjaWZpZWQsIGFuZCB0aGUgbGlzdCBpcyBkZWR1cGxpY2F0
ZWQuCitDYWxsVmFyaWFudExpc3QgZGVzcGVjaWZpZWRWYXJpYW50TGlzdChjb25zdCBDYWxsVmFy
aWFudExpc3QmKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCwgMjAxMi0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBDYW1lcm9uIFp3
YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yMTc4
LDYgKzIxNzgsOCBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIC8vIGRlc3RydWN0b3Ig
d2lsbCB0cnkgdG8gcmVtb3ZlIG5vZGVzIGZyb20gb3VyIChubyBsb25nZXIgdmFsaWQpIGxpbmtl
ZCBsaXN0LgogICAgIHdoaWxlIChtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5n
Q2FsbHMuZW5kKCkpCiAgICAgICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigpLT5yZW1vdmUoKTsK
KyAgICB3aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ1BvbHltb3JwaGlj
Q2FsbHMuYmVnaW4oKS0+cmVtb3ZlKCk7CiAgICAgCiAgICAgLy8gTm90ZSB0aGF0IG91ciBvdXRn
b2luZyBjYWxscyB3aWxsIGJlIHJlbW92ZWQgZnJvbSBvdGhlciBDb2RlQmxvY2tzJwogICAgIC8v
IG1faW5jb21pbmdDYWxscyBsaW5rZWQgbGlzdHMgdGhyb3VnaCB0aGUgZXhlY3V0aW9uIG9mIHRo
ZSB+Q2FsbExpbmtJbmZvCkBAIC0zMDQ0LDYgKzMwNDYsMTIgQEAgdm9pZCBDb2RlQmxvY2s6Omxp
bmtJbmNvbWluZ0NhbGwoRXhlY1N0YQogICAgIG5vdGljZUluY29taW5nQ2FsbChjYWxsZXJGcmFt
ZSk7CiAgICAgbV9pbmNvbWluZ0NhbGxzLnB1c2goaW5jb21pbmcpOwogfQorCit2b2lkIENvZGVC
bG9jazo6bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUs
IFBvbHltb3JwaGljQ2FsbE5vZGUqIGluY29taW5nKQoreworICAgIG5vdGljZUluY29taW5nQ2Fs
bChjYWxsZXJGcmFtZSk7CisgICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMucHVzaChpbmNv
bWluZyk7Cit9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogdm9pZCBDb2RlQmxvY2s6OnVubGlu
a0luY29taW5nQ2FsbHMoKQpAQCAtMzA1MSwxMSArMzA1OSwxMyBAQCB2b2lkIENvZGVCbG9jazo6
dW5saW5rSW5jb21pbmdDYWxscygpCiAgICAgd2hpbGUgKG1faW5jb21pbmdMTEludENhbGxzLmJl
Z2luKCkgIT0gbV9pbmNvbWluZ0xMSW50Q2FsbHMuZW5kKCkpCiAgICAgICAgIG1faW5jb21pbmdM
TEludENhbGxzLmJlZ2luKCktPnVubGluaygpOwogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYgKG1f
aW5jb21pbmdDYWxscy5pc0VtcHR5KCkpCisgICAgaWYgKG1faW5jb21pbmdDYWxscy5pc0VtcHR5
KCkgJiYgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKHRoaXMpOwogICAgIHdoaWxlICht
X2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCkpCiAgICAgICAg
IG1faW5jb21pbmdDYWxscy5iZWdpbigpLT51bmxpbmsocmVwYXRjaEJ1ZmZlcik7CisgICAgd2hp
bGUgKG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ1BvbHlt
b3JwaGljQ2FsbHMuZW5kKCkpCisgICAgICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJl
Z2luKCktPnVubGluayhyZXBhdGNoQnVmZmVyKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQog
CkBAIC0zMjQ5LDEyICszMjU5LDE5IEBAIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0Nh
bGwoRXhlY1MKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGNhbGxlckZyYW1lLT5j
b2RlQmxvY2soKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCi0g
ICAgICAgIGRhdGFMb2coIk5vdGljaW5nIGNhbGwgbGluayBmcm9tICIsICpjYWxsZXJDb2RlQmxv
Y2ssICIgdG8gIiwgKnRoaXMsICJcbiIpOworICAgICAgICBkYXRhTG9nKCJOb3RpY2luZyBjYWxs
IGxpbmsgZnJvbSAiLCBwb2ludGVyRHVtcChjYWxsZXJDb2RlQmxvY2spLCAiIHRvICIsICp0aGlz
LCAiXG4iKTsKICAgICAKKyNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoIW1fc2hvdWxkQWx3
YXlzQmVJbmxpbmVkKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFjYWxsZXJDb2Rl
QmxvY2spIHsKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQorICAgICAgICAgICAgZGF0YUxvZygi
ICAgIENsZWFyaW5nIFNBQkkgYmVjYXVzZSBjYWxsZXIgaXMgbmF0aXZlLlxuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoIWhhc0Jhc2Vs
aW5lSklUUHJvZmlsaW5nKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzI4Miw2ICszMjk5LDEz
IEBAIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1MKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKKyAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxl
ckNvZGVCbG9jay0+aml0VHlwZSgpKSkgeworICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCisgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiY2F1c2UgY2FsbGVyIHdhcyBhbHJl
YWR5IG9wdGltaXplZC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIGlm
IChjYWxsZXJDb2RlQmxvY2stPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlKSB7CiAgICAgICAg
IC8vIElmIHRoZSBjYWxsZXIgaXMgZWl0aGVyIGV2YWwgb3IgZ2xvYmFsIGNvZGUsIGFzc3VtZSB0
aGF0IHRoYXQgd29uJ3QgYmUKICAgICAgICAgLy8gb3B0aW1pemVkIGFueXRpbWUgc29vbi4gRm9y
IGV2YWwgY29kZSB0aGlzIGlzIHBhcnRpY3VsYXJseSB0cnVlIHNpbmNlIHdlCkBAIC0zMzAyLDgg
KzMzMjYsMTEgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29taW5nQ2FsbChFeGVjUwogICAg
ICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotCi0gICAgUkVMRUFTRV9BU1NFUlQoY2FsbGVyQ29kZUJsb2NrLT5tX2NhcGFiaWxpdHlM
ZXZlbFN0YXRlICE9IERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KTsKKyAgICAKKyAgICBpZiAo
Y2FsbGVyQ29kZUJsb2NrLT5tX2NhcGFiaWxpdHlMZXZlbFN0YXRlID09IERGRzo6Q2FwYWJpbGl0
eUxldmVsTm90U2V0KSB7CisgICAgICAgIGRhdGFMb2coIkluIGNhbGwgZnJvbSAiLCAqY2FsbGVy
Q29kZUJsb2NrLCAiICIsIGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCksICIgdG8gIiwgKnRoaXMs
ICI6IGNhbGxlcidzIERGRyBjYXBhYmlsaXR5IGxldmVsIGlzIG5vdCBzZXQuXG4iKTsKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICB9CiAgICAgCiAgICAgaWYgKGNhbkNvbXBpbGUoY2FsbGVyQ29kZUJs
b2NrLT5tX2NhcGFiaWxpdHlMZXZlbFN0YXRlKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTc4Njkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjksMTEgKzIyOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVubGlua0NhbGxz
KCk7CiAgICAgICAgIAogICAgIHZvaWQgbGlua0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxl
ckZyYW1lLCBDYWxsTGlua0luZm8qKTsKLSAgICAgICAgCi0gICAgYm9vbCBpc0luY29taW5nQ2Fs
bEFscmVhZHlMaW5rZWQoQ2FsbExpbmtJbmZvKiBpbmNvbWluZykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2luY29taW5nQ2FsbHMuaXNPbkxpc3QoaW5jb21pbmcpOwotICAgIH0KKyAgICB2b2lk
IGxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBQb2x5
bW9ycGhpY0NhbGxOb2RlKik7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogICAgIHZvaWQgbGlu
a0luY29taW5nQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBMTEludENhbGxMaW5rSW5mbyop
OwpAQCAtMTA3Nyw2ICsxMDczLDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8QnlWYWxJbmZvPiBt
X2J5VmFsSW5mb3M7CiAgICAgQmFnPENhbGxMaW5rSW5mbz4gbV9jYWxsTGlua0luZm9zOwogICAg
IFNlbnRpbmVsTGlua2VkTGlzdDxDYWxsTGlua0luZm8sIEJhc2ljUmF3U2VudGluZWxOb2RlPENh
bGxMaW5rSW5mbz4+IG1faW5jb21pbmdDYWxsczsKKyAgICBTZW50aW5lbExpbmtlZExpc3Q8UG9s
eW1vcnBoaWNDYWxsTm9kZSwgQmFzaWNSYXdTZW50aW5lbE5vZGU8UG9seW1vcnBoaWNDYWxsTm9k
ZT4+IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzOwogI2VuZGlmCiAgICAgc3RkOjp1bmlxdWVf
cHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtX2ppdENvZGVNYXA7CiAjaWYgRU5BQkxFKERGR19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE5NjgsMTQgKzE5NjgsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAg
ICAgYnJlYWs7CiAKLSAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVkQ29u
c3RydWN0OgotICAgICAgICBpZiAoZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDAp
KS5tX3ZhbHVlKQotICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsK
LSAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0
KTsKLSAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwotICAgICAgICBicmVhazsK
LQogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgogICAgICAg
ICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02NzUsNyArNjc1LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKHBhcmFtZXRlclNsb3RzID4gbV9wYXJhbWV0ZXJTbG90cykKICAgICAgICAgICAgIG1fcGFy
YW1ldGVyU2xvdHMgPSBwYXJhbWV0ZXJTbG90czsKIAotICAgICAgICBpbnQgZHVtbXlUaGlzQXJn
dW1lbnQgPSBvcCA9PSBDYWxsIHx8IG9wID09IE5hdGl2ZUNhbGwgfHwgb3AgPT0gUHJvZmlsZWRD
YWxsID8gMCA6IDE7CisgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG9wID09IENhbGwg
fHwgb3AgPT0gTmF0aXZlQ2FsbCA/IDAgOiAxOwogICAgICAgICBmb3IgKGludCBpID0gMCArIGR1
bW15VGhpc0FyZ3VtZW50OyBpIDwgYXJnQ291bnQ7ICsraSkKICAgICAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdpc3Rlck9mZnNldCkp
KTsKIApAQCAtMTA0NCwxOCArMTA0NCw2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNh
bGwoCiAgICAgaWYgKGNhbGxUYXJnZXQtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgIGNhbGxMaW5r
U3RhdHVzID0gQ2FsbExpbmtTdGF0dXMoY2FsbFRhcmdldC0+YXNKU1ZhbHVlKCkpLnNldElzUHJv
dmVkKHRydWUpOwogICAgIAotICAgIGlmICgoIWNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkg
fHwgY2FsbExpbmtTdGF0dXMuc2l6ZSgpICE9IDEpCi0gICAgICAgICYmICFpc0ZUTChtX2dyYXBo
Lm1fcGxhbi5tb2RlKSAmJiBPcHRpb25zOjp1c2VGVExKSVQoKQotICAgICAgICAmJiBJbmxpbmVD
YWxsRnJhbWU6OmlzTm9ybWFsQ2FsbChraW5kKQotICAgICAgICAmJiBDYWxsRWRnZUxvZzo6aXNF
bmFibGVkKCkKLSAgICAgICAgJiYgT3B0aW9uczo6ZGZnRG9lc0NhbGxFZGdlUHJvZmlsaW5nKCkp
IHsKLSAgICAgICAgQVNTRVJUKG9wID09IENhbGwgfHwgb3AgPT0gQ29uc3RydWN0KTsKLSAgICAg
ICAgaWYgKG9wID09IENhbGwpCi0gICAgICAgICAgICBvcCA9IFByb2ZpbGVkQ2FsbDsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgb3AgPSBQcm9maWxlZENvbnN0cnVjdDsKLSAgICB9Ci0gICAg
CiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpKSB7CiAgICAgICAgIC8vIE9k
ZGx5LCB0aGlzIGNvbmZsYXRlcyBjYWxscyB0aGF0IGhhdmVuJ3QgZXhlY3V0ZWQgd2l0aCBjYWxs
cyB0aGF0IGJlaGF2ZWQgc3VmZmljaWVudGx5IHBvbHltb3JwaGljYWxseQogICAgICAgICAvLyB0
aGF0IHdlIGNhbm5vdCBvcHRpbWl6ZSB0aGVtLgpAQCAtMTA3NiwxNyArMTA2NCwxNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIAogI2lmIEVOQUJMRShGVExfTkFUSVZF
X0NBTExfSU5MSU5JTkcpCiAgICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpICYmIE9w
dGlvbnM6Om9wdGltaXplTmF0aXZlQ2FsbHMoKSAmJiBjYWxsTGlua1N0YXR1cy5zaXplKCkgPT0g
MSAmJiAhY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKSkgewotICAgICAgICBDYWxs
VmFyaWFudCBjYWxsZWUgPSBjYWxsTGlua1N0YXR1c1swXS5jYWxsZWUoKTsKKyAgICAgICAgQ2Fs
bFZhcmlhbnQgY2FsbGVlID0gY2FsbExpbmtTdGF0dXNbMF07CiAgICAgICAgIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uID0gY2FsbGVlLmZ1bmN0aW9uKCk7CiAgICAgICAgIENvZGVTcGVjaWFsaXphdGlv
bktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlv
bktpbmRGb3Ioa2luZCk7CiAgICAgICAgIGlmIChmdW5jdGlvbiAmJiBmdW5jdGlvbi0+aXNIb3N0
RnVuY3Rpb24oKSkgewogICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxlZSwgY2Fs
bFRhcmdldCwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAg
ICBjYWxsT3BJbmZvID0gT3BJbmZvKG1fZ3JhcGguZnJlZXplKGZ1bmN0aW9uKSk7CiAKLSAgICAg
ICAgICAgIGlmIChvcCA9PSBDYWxsIHx8IG9wID09IFByb2ZpbGVkQ2FsbCkKKyAgICAgICAgICAg
IGlmIChvcCA9PSBDYWxsKQogICAgICAgICAgICAgICAgIG9wID0gTmF0aXZlQ2FsbDsKICAgICAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9PSBDb25zdHJ1Y3QgfHwg
b3AgPT0gUHJvZmlsZWRDb25zdHJ1Y3QpOworICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9PSBD
b25zdHJ1Y3QpOwogICAgICAgICAgICAgICAgIG9wID0gTmF0aXZlQ29uc3RydWN0OwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0xNDI2LDEzICsxNDE0LDEzIEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyB0aGlzIGluIGNhc2VzIHdoZXJlIHdl
IGRvbid0IG5lZWQgY29udHJvbCBmbG93IGRpYW1vbmRzIHRvIGNoZWNrIHRoZSBjYWxsZWUuCiAg
ICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpICYmIGNhbGxMaW5rU3Rh
dHVzLnNpemUoKSA9PSAxKSB7CiAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcygKLSAgICAgICAg
ICAgIGNhbGxMaW5rU3RhdHVzWzBdLmNhbGxlZSgpLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJP
ZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgICAgICAgICBjYWxsTGlua1N0YXR1c1sw
XSwgY2FsbFRhcmdldE5vZGUsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOwog
ICAgICAgICBib29sIHJlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCi0gICAgICAgICAgICBj
YWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0uY2FsbGVlKCks
IHJlZ2lzdGVyT2Zmc2V0LAorICAgICAgICAgICAgY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJh
bmQsIGNhbGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rlck9mZnNldCwKICAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJEb2VzTm9ybWFs
TGlua2luZywgcHJlZGljdGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSk7CiAgICAg
ICAgIGlmICghcmVzdWx0ICYmICFjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpKQotICAgICAgICAg
ICAgdW5kb0Z1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdLmNhbGxlZSgpKTsKKyAgICAg
ICAgICAgIHVuZG9GdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1swXSk7CiAgICAgICAgIGlm
ICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJEb25lIGlubGluaW5nIChzaW1wbGUp
LlxuIik7CiAgICAgICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4o
KSwgIlxuIik7CkBAIC0xNDYyLDcgKzE0NTAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbmxpbmluZyhOb2RlCiAgICAgYm9vbCBhbGxBcmVDbG9zdXJlQ2FsbHMgPSB0cnVlOwogICAg
IGJvb2wgYWxsQXJlRGlyZWN0Q2FsbHMgPSB0cnVlOwogICAgIGZvciAodW5zaWduZWQgaSA9IGNh
bGxMaW5rU3RhdHVzLnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoY2FsbExpbmtTdGF0dXNb
aV0uY2FsbGVlKCkuaXNDbG9zdXJlQ2FsbCgpKQorICAgICAgICBpZiAoY2FsbExpbmtTdGF0dXNb
aV0uaXNDbG9zdXJlQ2FsbCgpKQogICAgICAgICAgICAgYWxsQXJlRGlyZWN0Q2FsbHMgPSBmYWxz
ZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWxsQXJlQ2xvc3VyZUNhbGxzID0gZmFsc2U7
CkBAIC0xNDc1LDkgKzE0NjMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmlu
ZyhOb2RlCiAgICAgICAgIHRoaW5nVG9Td2l0Y2hPbiA9IGFkZFRvR3JhcGgoR2V0RXhlY3V0YWJs
ZSwgY2FsbFRhcmdldE5vZGUpOwogICAgIGVsc2UgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoaXMgY2FzZSwgYnV0IGl0J3MgdHJpY2t5IGFuZCB3ZSBk
b24ndCBrbm93IG9mIGNhc2VzCi0gICAgICAgIC8vIHdoZXJlIGl0IHdvdWxkIGJlIGJlbmVmaWNp
YWwuIEFsc28sIENhbGxMaW5rU3RhdHVzIHdvdWxkIG1ha2UgYWxsIGNhbGxlZXMgYXBwZWFyIGxp
a2UKLSAgICAgICAgLy8gY2xvc3VyZSBjYWxscyBpZiBhbnkgY2FsbHMgd2VyZSBjbG9zdXJlIGNh
bGxzIC0gZXhjZXB0IGZvciBjYWxscyB0byBpbnRlcm5hbCBmdW5jdGlvbnMuCi0gICAgICAgIC8v
IFNvIHRoaXMgd2lsbCBvbmx5IGFyaXNlIGlmIHNvbWUgY2FsbGVlcyBhcmUgaW50ZXJuYWwgZnVu
Y3Rpb25zIGFuZCBvdGhlcnMgYXJlIGNsb3N1cmVzLgorICAgICAgICAvLyB3aGVyZSBpdCB3b3Vs
ZCBiZSBiZW5lZmljaWFsLiBJdCBtaWdodCBiZSBiZXN0IHRvIGhhbmRsZSB0aGVzZSBjYXNlcyBh
cyBpZiBhbGwgY2FsbHMgd2VyZQorICAgICAgICAvLyBjbG9zdXJlIGNhbGxzLgogICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDIwCiAgICAgICAg
IGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5nIGlubGluaW5nICht
aXgpLlxuIik7CkBAIC0xNTE3LDcgKzE1MDQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbmxpbmluZyhOb2RlCiAgICAgLy8gdG8gdGhlIGNvbnRpbnVhdGlvbiBibG9jaywgd2hpY2gg
d2UgY3JlYXRlIGxhc3QuCiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBsYW5kaW5nQmxvY2tzOwog
ICAgIAotICAgIC8vIFdlIG1ha2UgZm9yY2UgdGhpcyB0cnVlIGlmIHdlIGdpdmUgdXAgb24gaW5s
aW5pbmcgYW55IG9mIHRoZSBlZGdlcy4KKyAgICAvLyBXZSBtYXkgZm9yY2UgdGhpcyB0cnVlIGlm
IHdlIGdpdmUgdXAgb24gaW5saW5pbmcgYW55IG9mIHRoZSBlZGdlcy4KICAgICBib29sIGNvdWxk
VGFrZVNsb3dQYXRoID0gY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKTsKICAgICAK
ICAgICBpZiAodmVyYm9zZSkKQEAgLTE1MzMsNyArMTUyMCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgTm9kZSogbXlDYWxsVGFyZ2V0Tm9kZSA9
IGdldERpcmVjdChjYWxsZWVSZWcpOwogICAgICAgICAKICAgICAgICAgYm9vbCBpbmxpbmluZ1Jl
c3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCi0gICAgICAgICAgICBteUNhbGxUYXJnZXROb2Rl
LCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKSwgcmVnaXN0ZXJPZmZz
ZXQsCisgICAgICAgICAgICBteUNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsTGlu
a1N0YXR1c1tpXSwgcmVnaXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyTGlua3NNYW51YWxseSwgcHJlZGlj
dGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSk7CiAgICAgICAgIApAQCAtMTU1Miwx
MCArMTUzOSwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAg
ICAgICAgIAogICAgICAgICBKU0NlbGwqIHRoaW5nVG9DYXNlT247CiAgICAgICAgIGlmIChhbGxB
cmVEaXJlY3RDYWxscykKLSAgICAgICAgICAgIHRoaW5nVG9DYXNlT24gPSBjYWxsTGlua1N0YXR1
c1tpXS5jYWxsZWUoKS5ub25FeGVjdXRhYmxlQ2FsbGVlKCk7CisgICAgICAgICAgICB0aGluZ1Rv
Q2FzZU9uID0gY2FsbExpbmtTdGF0dXNbaV0ubm9uRXhlY3V0YWJsZUNhbGxlZSgpOwogICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChhbGxBcmVDbG9zdXJlQ2FsbHMpOwotICAgICAg
ICAgICAgdGhpbmdUb0Nhc2VPbiA9IGNhbGxMaW5rU3RhdHVzW2ldLmNhbGxlZSgpLmV4ZWN1dGFi
bGUoKTsKKyAgICAgICAgICAgIHRoaW5nVG9DYXNlT24gPSBjYWxsTGlua1N0YXR1c1tpXS5leGVj
dXRhYmxlKCk7CiAgICAgICAgIH0KICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2Fz
ZShtX2dyYXBoLmZyZWV6ZSh0aGluZ1RvQ2FzZU9uKSwgYmxvY2suZ2V0KCkpKTsKICAgICAgICAg
bV9jdXJyZW50SW5kZXggPSBuZXh0T2Zmc2V0OwpAQCAtMTU2Nyw3ICsxNTU0LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBsYW5kaW5nQmxvY2tz
LmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CiAKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAg
ICAgICBkYXRhTG9nKCJGaW5pc2hlZCBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1c1tpXS5jYWxs
ZWUoKSwgIiBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiLlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKCJGaW5pc2hlZCBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1c1tpXSwgIiBhdCAiLCBj
dXJyZW50Q29kZU9yaWdpbigpLCAiLlxuIik7CiAgICAgfQogICAgIAogICAgIFJlZlB0cjxCYXNp
Y0Jsb2NrPiBzbG93UGF0aEJsb2NrID0gYWRvcHRSZWYoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw4
ICszNjMsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
Y2FzZSBBcnJheVBvcDoKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAg
Y2FzZSBQcm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICBjYXNl
IE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBUb1ByaW1p
dGl2ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIwLDIwICs0MjAsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQcm9maWxlZENh
bGw6Ci0gICAgICAgICAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkubV92
YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgLy8gSWYgd2Ugd2VyZSBhYmxlIHRvIHByb3ZlIHRoYXQgdGhlIGNhbGxlZSBp
cyBhIGNvbnN0YW50IHRoZW4gdGhlIG5vcm1hbCBjYWxsCi0gICAgICAgICAgICAgICAgLy8gaW5s
aW5lIGNhY2hlIHdpbGwgcmVjb3JkIHRoaXMgY2FsbGVlLiBUaGlzIG1lYW5zIHRoYXQgdGhlcmUg
aXMgbm8gbmVlZCB0byBkbyBhbnkKLSAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIHByb2Zp
bGluZy4KLSAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2Nr
KTsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChub2RlLT5vcCgpID09IFByb2ZpbGVkQ2Fs
bCA/IENhbGwgOiBDb25zdHJ1Y3QpOwotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTc4NjkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTgsOCArMTE4LDYgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQog
ICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2
ZUNvbnN0cnVjdDoKLSAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVkQ29u
c3RydWN0OgogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoK
ICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSwyMCArNzksMTcgQEAgc3Rh
dGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIGlmIChtb2RlID09IERGR01v
ZGUpIHsKICAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAg
ICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOwotICAgICAg
ICB2bS5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAg
dm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAg
ICB2bS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5n
ZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5l
cmF0b3IpOwogICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKTsKLSAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNh
bGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1
YihsaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7CiAg
ICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2Vu
ZXJhdG9yKTsKICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGhhdFByZXNl
cnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7CiAgICAgfQogICAgIAotICAgIGlmIChDYWxsRWRnZUxv
Zzo6aXNFbmFibGVkKCkpCi0gICAgICAgIHZtLmVuc3VyZUNhbGxFZGdlTG9nKCkucHJvY2Vzc0xv
ZygpOwotCiAgICAgaWYgKHZtLnR5cGVQcm9maWxlcigpKQogICAgICAgICB2bS50eXBlUHJvZmls
ZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJQcmVwYXJpbmcgZm9yIERG
RyBjb21waWxhdGlvbi4iKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDIsOCAr
MTIwMiw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBv
aW50OgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAg
ICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAg
ICAgICAgY2FzZSBQcm9maWxlQ29udHJvbEZsb3c6CiAgICAgICAgIGNhc2UgTmF0aXZlQ2FsbDoK
ICAgICAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNTcsOCArMTA1Nyw2IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgogICAgICAgICBjYXNl
IENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICBjYXNlIFByb2ZpbGVkQ2Fs
bDoKLSAgICAgICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBOYXRpdmVD
YWxsOgogICAgICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICAgICAgY2FzZSBHZXRCeU9m
ZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlz
aW9uIDE3ODY5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjE3LDggKzIxNyw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICAvKiBDYWxscy4gKi9cCiAgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpT
IHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQp
IFwKICAgICBtYWNybyhDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCi0gICAgbWFjcm8oUHJvZmls
ZWRDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3Mg
fCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAotICAgIG1hY3JvKFByb2ZpbGVkQ29uc3RydWN0LCBOb2Rl
UmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJl
cnNXb3JsZCkgXAogICAgIG1hY3JvKE5hdGl2ZUNhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFj
cm8oTmF0aXZlQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTc4NjkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIxOSw2ICsxMjE5LDExIEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGll
clVwTm93KEV4ZWMKICAgICBEZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOwogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgCisgICAgaWYgKGNvZGVCbG9j
ay0+aml0VHlwZSgpICE9IEpJVENvZGU6OkRGR0pJVCkgeworICAgICAgICBkYXRhTG9nKCJVbmV4
cGVjdGVkIGNvZGUgYmxvY2sgaW4gREZHLT5GVEwgdGllci11cDogIiwgKmNvZGVCbG9jaywgIlxu
Iik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAog
ICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CiAgICAg
CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewpAQCAtMTIzOCw2ICsxMjQzLDExIEBA
IGNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS0+aGVhcCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxv
Y2soKTsKICAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZH
SklUKSB7CisgICAgICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBERkctPkZU
TCB0aWVyLXVwOiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCiAgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmcoKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTc4NjkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw4ICsxODgsNiBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIEdldERpcmVjdFBuYW1lOgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29u
c3RydWN0OgotICAgICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgY2FzZSBQcm9maWxl
ZENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgICAgICBjYXNlIE5hdGl2
ZUNvbnN0cnVjdDoKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTc4NjkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4OSw4ICsxODksNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0
ZVR5cGUmIHN0CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgogICAg
IGNhc2UgQ29uc3RydWN0OgotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgIGNhc2UgUHJvZmls
ZWRDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdBcnJheToKICAg
ICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE3ODY5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzOCw5ICs2MzgsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTWlzY1N0cmljdEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUpCiB7Ci0gICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+
b3AoKSA9PSBQcm9maWxlZENhbGw7CisgICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENh
bGw7CiAgICAgaWYgKCFpc0NhbGwpCi0gICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IENvbnN0
cnVjdCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KTsKKyAgICAgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsKIAogICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRo
ZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQog
ICAgIC8vIGZvciBpdC4KQEAgLTY4OSwxMSArNjg5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1faml0
LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKIAotICAgIGlmIChub2RlLT5vcCgpID09
IFByb2ZpbGVkQ2FsbCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KSB7Ci0gICAg
ICAgIG1faml0LnZtKCktPmNhbGxFZGdlTG9nLT5lbWl0TG9nQ29kZSgKLSAgICAgICAgICAgIG1f
aml0LCBpbmZvLT5jYWxsRWRnZVByb2ZpbGUsIGNhbGxlZS5qc1ZhbHVlUmVncygpKTsKLSAgICB9
Ci0gICAgCiAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaE5vdENlbGwoY2FsbGVlLmpzVmFsdWVS
ZWdzKCkpKTsKICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlUGF5bG9hZEdQUiwgdGFyZ2V0VG9DaGVjaykp
OwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlUGF5bG9h
ZEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGUpKSwgcmVzdWx0UGF5bG9h
ZEdQUik7CkBAIC00MTcyLDggKzQxNjcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAg
Y2FzZSBQcm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAgICAg
ZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3ODY5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYyNCw5ICs2MjQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTWlzY1N0cmljdEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUpCiB7Ci0gICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+
b3AoKSA9PSBQcm9maWxlZENhbGw7CisgICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENh
bGw7CiAgICAgaWYgKCFpc0NhbGwpCi0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwg
bm9kZSwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QgfHwgbm9kZS0+b3AoKSA9PSBQcm9maWxlZENv
bnN0cnVjdCk7CisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+
b3AoKSA9PSBDb25zdHJ1Y3QpOwogICAgIAogICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0
aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQogICAg
IC8vIGZvciBpdC4KQEAgLTY2OSwxMSArNjY5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0g
bV9qaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwogICAgIAotICAgIGlmIChub2Rl
LT5vcCgpID09IFByb2ZpbGVkQ2FsbCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0
KSB7Ci0gICAgICAgIG1faml0LnZtKCktPmNhbGxFZGdlTG9nLT5lbWl0TG9nQ29kZSgKLSAgICAg
ICAgICAgIG1faml0LCBjYWxsTGlua0luZm8tPmNhbGxFZGdlUHJvZmlsZSwgSlNWYWx1ZVJlZ3Mo
Y2FsbGVlR1BSKSk7Ci0gICAgfQotCiAgICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRo
UGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ss
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKIAogICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2FsbGVlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5j
dGlvbiwgbV9zY29wZSkpLCByZXN1bHRHUFIpOwpAQCAtNDIzMyw4ICs0MjI4LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBDYWxsOgogICAg
IGNhc2UgQ29uc3RydWN0OgotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgIGNhc2UgUHJvZmls
ZWRDb25zdHJ1Y3Q6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5q
ZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDE3ICs1MCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGlmICgh
T3B0aW9uczo6dXNlRlRMSklUKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IAotICAgICAgICBpZiAobV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2stPm1fZGlkRmFpbEZUTENvbXBp
bGF0aW9uKSB7Ci0gICAgICAgICAgICByZW1vdmVGVExQcm9maWxpbmcoKTsKKyAgICAgICAgaWYg
KG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQogICAgICAgICAKICNpZiBFTkFCTEUoRlRM
X0pJVCkKICAgICAgICAgRlRMOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwgPSBGVEw6OmNhbkNvbXBp
bGUobV9ncmFwaCk7Ci0gICAgICAgIGlmIChsZXZlbCA9PSBGVEw6OkNhbm5vdENvbXBpbGUpIHsK
LSAgICAgICAgICAgIHJlbW92ZUZUTFByb2ZpbGluZygpOworICAgICAgICBpZiAobGV2ZWwgPT0g
RlRMOjpDYW5ub3RDb21waWxlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBpZiAoIU9wdGlvbnM6OmVuYWJsZU9TUkVudHJ5VG9GVEwoKSkK
ICAgICAgICAgICAgIGxldmVsID0gRlRMOjpDYW5Db21waWxlOwpAQCAtMTIyLDMyICsxMTgsNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKICAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCByZW1vdmVGVExQcm9maWxpbmcoKQotICAg
IHsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2Nr
cygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4
KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwot
ICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNh
c2UgUHJvZmlsZWRDYWxsOgotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChDYWxsKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6Ci0gICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldE9wKENvbnN0cnVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9CiB9OwogCiBib29sIHBlcmZvcm1UaWVyVXBDaGVja0luamVjdGlvbihHcmFwaCYgZ3Jh
cGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMSArMTc2LDYgQEAgaW5saW5l
IENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgTWF0ZXJpYWxpemVO
ZXdPYmplY3Q6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQcm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKLSAgICAgICAg
Ly8gVGhlc2UgYXJlIE9LIG5vdCBiZWNhdXNlIHRoZSBGVEwgY2FuIHN1cHBvcnQgdGhlbSwgYnV0
IGJlY2F1c2UgaWYgdGhlIERGRyBzZWVzIG9uZSBvZgotICAgICAgICAvLyB0aGVzZSB0aGVuIHRo
ZSBGVEwgd2lsbCBzZWUgYSBub3JtYWwgQ2FsbC9Db25zdHJ1Y3QuCi0gICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgICAgIC8vIE5vIGJhY2tlbmQgaGFuZGxlcyB0aGlzIGJl
Y2F1c2UgaXQgd2lsbCBiZSBvcHRpbWl6ZWQgb3V0LiBCdXQgd2UgbWF5IGNoZWNrCiAgICAgICAg
IC8vIGZvciBjYXBhYmlsaXRpZXMgYmVmb3JlIG9wdGltaXphdGlvbi4gSXQgd291bGQgYmUgYSBk
ZWVwIGVycm9yIHRvIHJlbW92ZSB0aGlzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5MSwxMSArOTkxLDYgQEAgdm9pZCBIZWFwOjpjb2xs
ZWN0KEhlYXBPcGVyYXRpb24gY29sbGVjdAogICAgICAgICB2bSgpLT50eXBlUHJvZmlsZXJMb2co
KS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJHQyIpKTsKICAgICB9CiAgICAgCi0g
ICAgaWYgKHZtKCktPmNhbGxFZGdlTG9nKSB7Ci0gICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdo
aWxlKCp0aGlzKTsKLSAgICAgICAgdm0oKS0+Y2FsbEVkZ2VMb2ctPnByb2Nlc3NMb2coKTsKLSAg
ICB9Ci0gICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fZGVmZXJyYWxEZXB0aCk7CiAgICAgQVNT
RVJUKHZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKHZtKCktPmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0YSgpLmF0b21p
Y1N0cmluZ1RhYmxlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJl
Q2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAxNzg2OTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRl
ICJFeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIlZNLmgiCi0jaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAi
U3RydWN0dXJlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1DbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
OjpDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiYgY29kZSwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLAotICAgIEV4ZWN1dGFibGVCYXNl
KiBleGVjdXRhYmxlKQotICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKQotICAg
ICwgbV9leGVjdXRhYmxlKHZtLCBvd25lciwgZXhlY3V0YWJsZSkKLXsKLX0KLQotQ2xvc3VyZUNh
bGxTdHViUm91dGluZTo6fkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUoKQotewotfQotCi12b2lkIENs
b3N1cmVDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90Vmlz
aXRvciYgdmlzaXRvcikKLXsKLSAgICB2aXNpdG9yLmFwcGVuZCgmbV9leGVjdXRhYmxlKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUu
aAkocmV2aXNpb24gMTc4NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJl
Q2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIENsb3N1cmVDYWxsU3R1YlJvdXRpbmVfaAotI2RlZmluZSBDbG9zdXJlQ2FsbFN0dWJSb3V0
aW5lX2gKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5j
bHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFz
cyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lIDogcHVibGljIEdDQXdhcmVKSVRTdHViUm91dGluZSB7
Ci1wdWJsaWM6Ci0gICAgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKLSAgICAgICAgY29uc3QgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLAotICAgICAgICBF
eGVjdXRhYmxlQmFzZSopOwotICAgIAotICAgIHZpcnR1YWwgfkNsb3N1cmVDYWxsU3R1YlJvdXRp
bmUoKTsKLSAgICAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZXhlY3V0YWJsZS5nZXQoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lk
IG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOwotCi1w
cml2YXRlOgotICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFzZT4gbV9leGVjdXRhYmxlOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0jZW5k
aWYgLy8gQ2xvc3VyZUNhbGxTdHViUm91dGluZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAx
LDEyICszMDEsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAK
ICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7
CiAKLSAgICBpZiAoQ2FsbEVkZ2VMb2c6OmlzRW5hYmxlZCgpICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKQotICAgICAgICAmJiBPcHRpb25zOjpiYXNlbGluZURvZXNDYWxsRWRnZVByb2ZpbGluZygp
KSB7Ci0gICAgICAgIG1fdm0tPmVuc3VyZUNhbGxFZGdlTG9nKCkuZW1pdExvZ0NvZGUoCi0gICAg
ICAgICAgICAqdGhpcywgaW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApKTsKLSAgICB9Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CiAg
ICAgICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0cnVjdGlvbik7CiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTc4NjkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE1LDEwICsyMTUsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNv
ZGVJCiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxM
aW5rSW5mbygpOwogCi0gICAgaWYgKENhbGxFZGdlTG9nOjppc0VuYWJsZWQoKSAmJiBzaG91bGRF
bWl0UHJvZmlsaW5nKCkKLSAgICAgICAgJiYgT3B0aW9uczo6YmFzZWxpbmVEb2VzQ2FsbEVkZ2VQ
cm9maWxpbmcoKSkKLSAgICAgICAgbV92bS0+ZW5zdXJlQ2FsbEVkZ2VMb2coKS5lbWl0TG9nQ29k
ZSgqdGhpcywgaW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2FsbEV2
YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNzc2LDcgKzc3Niw3IEBAIGlubGluZSBjaGFyKiB2aXJ0dWFsRm9yKAogICAgIHJldHVybiB2
aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGtpbmQsIHJlZ2lzdGVycywgY2FsbGVl
QXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKIH0KIAotc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1p
emVDbG9zdXJlQ2FsbCgKK3N0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplUG9seW1vcnBoaWND
YWxsKAogICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2Rl
IHJlZ2lzdGVycywgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwKICAgICBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbykKIHsKQEAgLTc4NCwzOCArNzg0LDI0IEBAIHN0YXRpYyBib29sIGF0
dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAog
ICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5j
dGlvbkNlbGwpOwotICAgIEpTRnVuY3Rpb24qIG9sZENhbGxlZSA9IGNhbGxMaW5rSW5mby5jYWxs
ZWUuZ2V0KCk7CiAgICAgCi0gICAgaWYgKCFvbGRDYWxsZWUgfHwgb2xkQ2FsbGVlLT5leGVjdXRh
YmxlKCkgIT0gY2FsbGVlLT5leGVjdXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBBU1NFUlQoY2FsbGVlLT5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkp
OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0KLSAgICAgICAgY2FsbGVlLT5l
eGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKAot
ICAgICAgICAgICAgKmV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT52bSgp
LCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIEFyaXR5Q2hlY2tOb3RSZXF1aXJl
ZCwgcmVnaXN0ZXJzKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKLSAgICBpZiAo
Y2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNvZGVCbG9j
ayA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKKyAg
ICBpZiAoIWNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNhbGxl
ZS0+ZXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwogICAgICAgICBpZiAoZXhlY0Nh
bGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4o
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBD
YWxsTGlua0luZm86OkNhbGxWYXJhcmdzIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxs
TGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAotICAgIGxpbmtDbG9zdXJlQ2FsbCgKLSAgICAgICAgZXhlY0NhbGxlZSwgY2Fs
bExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZS0+ZXhlY3V0YWJsZSgpLCBjb2RlUHRyLCByZWdp
c3RlcnMpOworICAgIGxpbmtQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZv
LCBDYWxsVmFyaWFudChjYWxsZWUpLCByZWdpc3RlcnMpOwogICAgIAogICAgIHJldHVybiB0cnVl
OwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVj
U3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQorY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogZXhlY0Nh
bGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7CiAgICAgSlNDZWxsKiBjYWxsZWVB
c0Z1bmN0aW9uQ2VsbDsKICAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9u
KGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVk
LCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAKLSAgICBpZiAoIWF0dGVtcHRUb09wdGltaXplQ2xv
c3VyZUNhbGwoZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2Fs
bGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8pKQorICAgIGlmICghYXR0ZW1wdFRvT3B0
aW1pemVQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RS
ZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8pKQogICAgICAgICBs
aW5rU2xvd0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTgzMSwxMiArODE3LDEyIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENv
bnMKICAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBS
ZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAotY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4
ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQorY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRl
KiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKICAgICBKU0NlbGwq
IGNhbGxlZUFzRnVuY3Rpb25DZWxsOwogICAgIGNoYXIqIHJlc3VsdCA9IHZpcnR1YWxGb3JXaXRo
RnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycywg
Y2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogCi0gICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1
cmVDYWxsKGV4ZWNDYWxsZWUsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlv
bkNlbGwsICpjYWxsTGlua0luZm8pKQorICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVQb2x5bW9y
cGhpY0NhbGwoZXhlY0NhbGxlZSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzLCBjYWxsZWVBc0Z1bmN0
aW9uQ2VsbCwgKmNhbGxMaW5rSW5mbykpCiAgICAgICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxsZWUs
ICpjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOwogICAg
IAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMDMzLDYgKzEwMTksMTAgQEAgU2xvd1BhdGhSZXR1
cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJH
Qyh2bS5oZWFwKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVC
bG9jaygpOworICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVCkgeworICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gQmFzZWxp
bmUtPkRGRyB0aWVyLXVwOiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiAgICAgCiAgICAgaWYgKGJ5dGVjb2RlSW5kZXgp
IHsKICAgICAgICAgLy8gSWYgd2UncmUgYXR0ZW1wdGluZyB0byBPU1IgZnJvbSBhIGxvb3AsIGFz
c3VtZSB0aGF0IHRoaXMgc2hvdWxkIGJlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NiwxMiArMjQ2LDEy
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEdlbmUKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwog
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsRXZhbChFeGVjU3RhdGUq
LCBFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkxpbmtDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKLWNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxM
aW5rSW5mbyopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlu
a1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7
CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSosIENh
bGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7
CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKiwg
Q2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdU
Rl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxs
VGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFM
OworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFBy
ZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOwogY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4
ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSos
IENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5m
byopIFdURl9JTlRFUk5BTDsKQEAgLTM5MSwxMyArMzkxLDEzIEBAIGlubGluZSBQX0pJVE9wZXJh
dGlvbl9FQ2xpIG9wZXJhdGlvblZpcnQKICAgICByZXR1cm4gMDsKIH0KIAotaW5saW5lIFBfSklU
T3BlcmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsRm9yKFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTW9kZSByZWdpc3RlcnMpCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRp
b25MaW5rUG9seW1vcnBoaWNDYWxsRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3Rl
cnMpCiB7CiAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKICAgICBjYXNlIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTm90UmVxdWlyZWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNh
bGw7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsOwogICAgIGNh
c2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0Ns
b3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5r
UG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CiAgICAgfQogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
MSw2ICsxNDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAK
KyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB5b3UgYXJlIHN0aWxsIHZhbGlkIGFmdGVyLiBSZXR1cm4g
ZmFsc2UgaWYgeW91IGFyZSBub3cgaW52YWxpZC4gSWYgeW91IHJldHVybgorICAgIC8vIGZhbHNl
LCB5b3Ugd2lsbCB1c3VhbGx5IG5vdCBkbyBhbnkgY2xlYXJpbmcgYmVjYXVzZSB0aGUgaWRlYSBp
cyB0aGF0IHlvdSB3aWxsIHNpbXBseSBiZQorICAgIC8vIGRlc3Ryb3llZC4KICAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImKTsKIAogcHJvdGVjdGVkOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCShyZXZpc2lvbiAxNzg2
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIK
ICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNp
bmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogCiBuYW1lc3BhY2UgSlND
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUuaCIKKworI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1Bv
bHltb3JwaGljQ2FsbE5vZGU6On5Qb2x5bW9ycGhpY0NhbGxOb2RlKCkKK3sKKyAgICBpZiAoaXNP
bkxpc3QoKSkKKyAgICAgICAgcmVtb3ZlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNDYWxsTm9k
ZTo6dW5saW5rKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpCit7CisgICAgaWYgKE9wdGlv
bnM6OnNob3dEaXNhc3NlbWJseSgpKQorICAgICAgICBkYXRhTG9nKCJVbmxpbmtpbmcgcG9seW1v
cnBoaWMgY2FsbCBhdCAiLCBtX2NhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCAiLCAi
LCBtX2NhbGxMaW5rSW5mby0+Y29kZU9yaWdpbiwgIlxuIik7CisgICAgCisgICAgbV9jYWxsTGlu
a0luZm8tPnVubGluayhyZXBhdGNoQnVmZmVyKTsKKyAgICAKKyAgICBpZiAoaXNPbkxpc3QoKSkK
KyAgICAgICAgcmVtb3ZlKCk7Cit9CisKK1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjpQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZSgKKyAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYm
IGNvZGVSZWYsIFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiBjYWxsZXJG
cmFtZSwKKyAgICBDYWxsTGlua0luZm8mIGluZm8sIGNvbnN0IFZlY3RvcjxQb2x5bW9ycGhpY0Nh
bGxDYXNlPiYgY2FzZXMpCisgICAgOiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUoY29kZVJlZiwgdm0p
Cit7CisgICAgZm9yIChQb2x5bW9ycGhpY0NhbGxDYXNlIGNhbGxDYXNlIDogY2FzZXMpIHsKKyAg
ICAgICAgbV92YXJpYW50cy5hcHBlbmQoV3JpdGVCYXJyaWVyPEpTQ2VsbD4odm0sIG93bmVyLCBj
YWxsQ2FzZS52YXJpYW50KCkucmF3Q2FsbGVlQ2VsbCgpKSk7CisgICAgICAgIGlmIChzaG91bGRT
aG93RGlzYXNzZW1ibHlGb3IoY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpKSkKKyAgICAgICAgICAg
IGRhdGFMb2coIkxpbmtpbmcgcG9seW1vcnBoaWMgY2FsbCBpbiAiLCAqY2FsbGVyRnJhbWUtPmNv
ZGVCbG9jaygpLCAiIGF0ICIsIGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCksICIgdG8gIiwgY2Fs
bENhc2UudmFyaWFudCgpLCAiLCBjb2RlQmxvY2sgPSAiLCBwb2ludGVyRHVtcChjYWxsQ2FzZS5j
b2RlQmxvY2soKSksICJcbiIpOworICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBj
YWxsQ2FzZS5jb2RlQmxvY2soKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+bGlua0luY29taW5n
UG9seW1vcnBoaWNDYWxsKGNhbGxlckZyYW1lLCBtX2NhbGxOb2Rlcy5hZGQoJmluZm8pKTsKKyAg
ICB9CisgICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOworICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7Cit9CisKK1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp+UG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmUoKSB7IH0KKworQ2FsbFZhcmlhbnRMaXN0IFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lOjp2YXJpYW50cygpIGNvbnN0Cit7CisgICAgQ2FsbFZhcmlhbnRMaXN0IHJlc3VsdDsK
KyAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICByZXN1bHQuYXBw
ZW5kKENhbGxWYXJpYW50KHZhcmlhbnQuZ2V0KCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Citib29sIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZmZl
ciYpCit7CisgICAgZm9yIChhdXRvJiB2YXJpYW50IDogbV92YXJpYW50cykgeworICAgICAgICBp
ZiAoIUhlYXA6OmlzTWFya2VkKHZhcmlhbnQuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZ2YXJpYW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Bv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZV9oCisjZGVmaW5lIFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lX2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDYWxsVmFyaWFudC5o
IgorI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRp
bmUuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgQ2FsbExpbmtJbmZvOworCitjbGFzcyBQ
b2x5bW9ycGhpY0NhbGxOb2RlIDogcHVibGljIEJhc2ljUmF3U2VudGluZWxOb2RlPFBvbHltb3Jw
aGljQ2FsbE5vZGU+IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQb2x5bW9ycGhpY0NhbGxO
b2RlKTsKK3B1YmxpYzoKKyAgICBQb2x5bW9ycGhpY0NhbGxOb2RlKENhbGxMaW5rSW5mbyogaW5m
bykKKyAgICAgICAgOiBtX2NhbGxMaW5rSW5mbyhpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgflBvbHltb3JwaGljQ2FsbE5vZGUoKTsKKyAgICAKKyAgICB2b2lkIHVubGluayhSZXBhdGNo
QnVmZmVyJik7CisgICAgCitwcml2YXRlOgorICAgIENhbGxMaW5rSW5mbyogbV9jYWxsTGlua0lu
Zm87Cit9OworCitjbGFzcyBQb2x5bW9ycGhpY0NhbGxDYXNlIHsKK3B1YmxpYzoKKyAgICBQb2x5
bW9ycGhpY0NhbGxDYXNlKCkKKyAgICAgICAgOiBtX2NvZGVCbG9jayhudWxscHRyKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgUG9seW1vcnBoaWNDYWxsQ2FzZShDYWxsVmFyaWFudCB2YXJpYW50
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICAgICAgOiBtX3ZhcmlhbnQodmFyaWFudCkKKyAg
ICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCisgICAgeworICAgIH0KKyAgICAKKyAgICBD
YWxsVmFyaWFudCB2YXJpYW50KCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50OyB9CisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQorICAgIAor
cHJpdmF0ZToKKyAgICBDYWxsVmFyaWFudCBtX3ZhcmlhbnQ7CisgICAgQ29kZUJsb2NrKiBtX2Nv
ZGVCbG9jazsKK307CisKK2NsYXNzIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lIDogcHVibGlj
IEdDQXdhcmVKSVRTdHViUm91dGluZSB7CitwdWJsaWM6CisgICAgUG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUoCisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYsIFZNJiwgY29u
c3QgSlNDZWxsKiBvd25lciwKKyAgICAgICAgRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgQ2FsbExp
bmtJbmZvJiwgY29uc3QgVmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+Jik7CisgICAgCisgICAg
dmlydHVhbCB+UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoKTsKKyAgICAKKyAgICBDYWxsVmFy
aWFudExpc3QgdmFyaWFudHMoKSBjb25zdDsKKyAgICAKKyAgICBib29sIHZpc2l0V2VhayhSZXBh
dGNoQnVmZmVyJikgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbWFy
a1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+LCAyPiBtX3ZhcmlhbnRzOworICAg
IEJhZzxQb2x5bW9ycGhpY0NhbGxOb2RlPiBtX2NhbGxOb2RlczsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAxNzg2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk5LDEwICsxNTk5LDYgQEAgdm9pZCBsaW5rRm9y
KAogICAgIAogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJh
bWUoKS0+Y29kZUJsb2NrKCk7CiAKLSAgICAvLyBJZiB5b3UncmUgYmVpbmcgY2FsbC1saW5rZWQg
ZnJvbSBhIERGRyBjYWxsZXIgdGhlbiB5b3Ugb2J2aW91c2x5IGRpZG4ndCBnZXQgaW5saW5lZC4K
LSAgICBpZiAoY2FsbGVlQ29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxs
ZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bV9zaG91
bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKLSAgICAKICAgICBWTSogdm0gPSBjYWxsZXJDb2Rl
QmxvY2stPnZtKCk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxl
ckNvZGVCbG9jayk7CkBAIC0xNjE4LDcgKzE2MTQsNyBAQCB2b2lkIGxpbmtGb3IoCiAgICAgICAg
IGNhbGxlZUNvZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLT5jYWxsZXJGcmFtZSgpLCAm
Y2FsbExpbmtJbmZvKTsKICAgICAKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9u
LCB2bS0+Z2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvckZvcihyZWdpc3Rl
cnMpKS5jb2RlKCkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8u
Y2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1
bmtHZW5lcmF0b3JGb3IocmVnaXN0ZXJzKSkuY29kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKQEAgLTE2MzgsMTIgKzE2MzQsMjIgQEAgdm9pZCBsaW5rU2xvd0ZvcigKICAgICBs
aW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBraW5kLCByZWdpc3Rl
cnMpOwogfQogCi12b2lkIGxpbmtDbG9zdXJlQ2FsbCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgCi0g
ICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2Rl
UHRyLAorbmFtZXNwYWNlIHsKK3N0cnVjdCBDYWxsVG9Db2RlUHRyIHsKKyAgICBDQ2FsbEhlbHBl
cnM6OkNhbGwgY2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKK307Cit9
IC8vIGFubm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDYWxsVmFyaWFu
dCBuZXdWYXJpYW50LAogICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7
Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7CisgICAgLy8gQ3VycmVudGx5LCB3ZSB3
aWxsIG5ldmVyIHNlZSBhIG5vbi1mdW5jdGlvbiB2YXJpYW50LCBzaW5jZSB0aGF0J3MgaG93IEpJ
VE9wZXJhdGlvbnMuY3BwCisgICAgLy8gaGFuZGxlcyBpdC4gQWxzbywgd2Ugd291bGRuJ3QgYmUg
YWJsZSB0byBkbyBhbnl0aGluZyB3aXRoIG5vbi1mdW5jdGlvbiBjYWxsZWVzIGJlY2F1c2Ugd2UK
KyAgICAvLyBqdXN0IGRvbid0IGhhdmUgdGhhdCBmdW5jdGlvbmFsaXR5LCB5ZXQuIFRoYXQncyB3
b3J0aCBmaXhpbmcuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MDY4NQorICAgIFJFTEVBU0VfQVNTRVJUKG5ld1ZhcmlhbnQuZXhlY3V0YWJsZSgpKTsK
ICAgICAKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1l
KCktPmNvZGVCbG9jaygpOwogICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKQEAg
LTE2NjIsNTAgKzE2NjgsOTkgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCiAgICAgICAgIHN0dWJK
aXQuYWJvcnRXaXRoUmVhc29uKFJlcGF0Y2hJbnNhbmVBcmd1bWVudENvdW50KTsKICAgICAgICAg
b2tBcmd1bWVudENvdW50LmxpbmsoJnN0dWJKaXQpOwogICAgIH0KKyAgICAKKyAgICBDYWxsVmFy
aWFudExpc3QgbGlzdDsKKyAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIg
PSBjYWxsTGlua0luZm8uc3R1Yi5nZXQoKSkKKyAgICAgICAgbGlzdCA9IHN0dWItPnZhcmlhbnRz
KCk7CisgICAgZWxzZSBpZiAoSlNGdW5jdGlvbiogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZvLmNh
bGxlZS5nZXQoKSkKKyAgICAgICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdHtDYWxsVmFyaWFudChv
bGRDYWxsZWUpfTsKKyAgICAKKyAgICBsaXN0ID0gdmFyaWFudExpc3RXaXRoVmFyaWFudChsaXN0
LCBuZXdWYXJpYW50KTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gV2UgY2FuIHNhZmVs
eSBjbG9iYmVyIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBjYWxsZWVHUFIuIFdlIGNhbid0IHJlbHkg
b24gdGFnTWFza1JlZ2lzdGVyCi0gICAgLy8gYmVpbmcgc2V0LiBTbyB3ZSBkbyB0aGlzIHRoZSBo
YXJkIHdheS4KKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBsaW5rZWQgdGhlIHNsb3cgcGF0aCB0byB0
aGUgdmlydHVhbCBjYWxsIHRodW5rIGlmIHdlIHdlcmUgYXBwcm9hY2hpbmcgdGhlCisgICAgLy8g
bGltaXQuCisgICAgQVNTRVJUKGxpc3Quc2l6ZSgpIDw9IE9wdGlvbnM6Om1heFBvbHltb3JwaGlj
Q2FsbFZhcmlhbnRMaXN0U2l6ZSgpKTsKKyAgICAKKyAgICBib29sIGhhdmVDbG9zdXJlQ2FsbCA9
IGZhbHNlOworICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpCisgICAgICAgIGhh
dmVDbG9zdXJlQ2FsbCB8PSB2YXJpYW50LmlzQ2xvc3VyZUNhbGwoKTsKKyAgICAKICAgICBHUFJS
ZWcgc2NyYXRjaCA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIp
OwotICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ01hc2sp
LCBzY3JhdGNoKTsKLSAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0NjQoQ0Nh
bGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVHUFIsIHNjcmF0Y2gpKTsKKyAgICAKKyAgICBpZiAo
aGF2ZUNsb3N1cmVDYWxsKSB7CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5j
dGlvbiBhbmQgc3Rhc2ggdGhlIGV4ZWN1dGFibGUgaW4gc2NyYXRjaC4KKworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgICAgIC8vIFdlIGNhbiBzYWZlbHkgY2xvYmJlciBldmVyeXRoaW5nIGV4Y2Vw
dCB0aGUgY2FsbGVlR1BSLiBXZSBjYW4ndCByZWx5IG9uIHRhZ01hc2tSZWdpc3RlcgorICAgICAg
ICAvLyBiZWluZyBzZXQuIFNvIHdlIGRvIHRoaXMgdGhlIGhhcmQgd2F5LgorICAgICAgICBzdHVi
Sml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwgc2NyYXRjaCk7
CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBl
cnM6Ok5vblplcm8sIGNhbGxlZUdQUiwgc2NyYXRjaCkpOwogI2Vsc2UKLSAgICAvLyBXZSB3b3Vs
ZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgorICAgICAg
ICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBj
ZWxsLgogI2VuZGlmCiAgICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICBzdHViSml0
LmJyYW5jaDgoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAotICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0
aW9uVHlwZSkpKTsKLSAgICAKLSAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgIHN0dWJKaXQu
YnJhbmNoUHRyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAg
c2xvd1BhdGguYXBwZW5kKAorICAgICAgICAgICAgc3R1YkppdC5icmFuY2g4KAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvblR5cGUp
KSk7CisgICAgCisgICAgICAgIHN0dWJKaXQubG9hZFB0cigKICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgp
KSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSkp
OworICAgICAgICAgICAgc2NyYXRjaCk7CisgICAgfQogICAgIAotICAgIHN0dWJKaXQubG9hZFB0
cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6
b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAotICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisgICAgVmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+IGNhbGxDYXNlczsKICAgICAKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgIHN0dWJKaXQuc3RvcmU2NCgKLSAgICAgICAgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJl
Z2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pICsgb2Zmc2V0VG9GcmFtZSkpOwotI2Vsc2UK
LSAgICBzdHViSml0LnN0b3JlUHRyKAotICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwK
LSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNT
dGFjazo6U2NvcGVDaGFpbikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpICsgb2Zmc2V0VG9GcmFtZSkpOwotICAgIHN0dWJKaXQuc3RvcmUz
MigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
Ci0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpT
U3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpICsgb2Zmc2V0VG9GcmFtZSkpOwotI2VuZGlmCisgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIHNraXBUb05leHQ7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lOwog
ICAgIAotICAgIEFzc2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgp
OwotICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBkb25lID0gc3R1YkppdC5qdW1wKCk7CisgICAg
VmVjdG9yPENhbGxUb0NvZGVQdHI+IGNhbGxzOworICAgIAorICAgIGZvciAoQ2FsbFZhcmlhbnQg
dmFyaWFudCA6IGxpc3QpIHsKKyAgICAgICAgaWYgKHNraXBUb05leHQuaXNTZXQoKSkKKyAgICAg
ICAgICAgIHNraXBUb05leHQubGluaygmc3R1YkppdCk7CisgICAgICAgIAorICAgICAgICAvLyBO
ZXcgdmFyaWFudHMgc2hvdWxkIGhhdmUgSklUIGNvZGUgZm9yIGNhbGwgc2luY2Ugd2UgYXJlIGFi
b3V0IHRvIG1ha2UgdGhhdCBjYWxsIGFuZAorICAgICAgICAvLyBKSVRPcGVyYXRpb25zLmNwcCBz
aG91bGQgaGF2ZSBlbnN1cmVkIHRoYXQgdGhlIEpJVCBjb2RlIHdhcyBwcmVzZW50LiBPbGQgdmFy
aWFudHMgc2hvdWxkCisgICAgICAgIC8vIGhhdmUgSklUIGNvZGUgZm9yIGNhbGwgc2luY2UgdGhl
IGlubGluZSBjYWNoZSB3b3VsZCBoYXZlIGJlZW4gY2xlYXJlZCBpZiB0aGVpciBjb2RlIHdhcwor
ICAgICAgICAvLyBkZXN0cm95ZWQuCisgICAgICAgIEFTU0VSVCh2YXJpYW50LmV4ZWN1dGFibGUo
KS0+aGFzSklUQ29kZUZvckNhbGwoKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b2RlUHRyID0KKyAgICAgICAgICAgIHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRD
b2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9yQ2FsbCgKKyAgICAgICAgICAgICAgICAqdm0sIHZhcmlh
bnQuZXhlY3V0YWJsZSgpLCBBcml0eUNoZWNrTm90UmVxdWlyZWQsIHJlZ2lzdGVycyk7CisgICAg
ICAgIAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICAgICAgaWYgKHZhcmlhbnQu
ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICAgICAgY29kZUJsb2NrID0g
bnVsbHB0cjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4odmFyaWFudC5leGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tGb3JD
YWxsKCk7CisgICAgICAgICAgICBBU1NFUlQoZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMoKSA+PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSAm
JiBjYWxsTGlua0luZm8uY2FsbFR5cGUgIT0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncyAmJiBj
YWxsTGlua0luZm8uY2FsbFR5cGUgIT0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2FsbENhc2VzLmFwcGVuZChQb2x5bW9ycGhp
Y0NhbGxDYXNlKHZhcmlhbnQsIGNvZGVCbG9jaykpOworICAgICAgICAKKyAgICAgICAgaWYgKHZh
cmlhbnQuaXNDbG9zdXJlQ2FsbCgpKSB7CisgICAgICAgICAgICBza2lwVG9OZXh0ID0KKyAgICAg
ICAgICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaCwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHZhcmlhbnQuZXhlY3V0YWJsZSgpKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBza2lwVG9OZXh0ID0KKyAgICAgICAgICAgICAgICBzdHViSml0LmJy
YW5jaFB0cigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2Fs
bGVlR1BSLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
dmFyaWFudC5mdW5jdGlvbigpKSk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgQ2FsbFRvQ29k
ZVB0ciBjYWxsVG9Db2RlUHRyOworICAgICAgICBjYWxsVG9Db2RlUHRyLmNhbGwgPSBzdHViSml0
Lm5lYXJDYWxsKCk7CisgICAgICAgIGNhbGxUb0NvZGVQdHIuY29kZVB0ciA9IGNvZGVQdHI7Cisg
ICAgICAgIGNhbGxzLmFwcGVuZChjYWxsVG9Db2RlUHRyKTsKKyAgICAgICAgZG9uZS5hcHBlbmQo
c3R1YkppdC5qdW1wKCkpOworICAgIH0KICAgICAKICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0
KTsKKyAgICBza2lwVG9OZXh0LmxpbmsoJnN0dWJKaXQpOwogICAgIHN0dWJKaXQubW92ZShjYWxs
ZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHN0dWJK
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BS
SW5mbzo6cmVnVDEpOwpAQCAtMTcxNSwyMyArMTc3MCwzMCBAQCB2b2lkIGxpbmtDbG9zdXJlQ2Fs
bCgKICAgICAKICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQ
UkluZm86OnJlZ1Q0KTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQu
anVtcCgpOwotICAgIAorICAgICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
c3R1YkppdCwgY2FsbGVyQ29kZUJsb2NrKTsKICAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNh
bGwsIEZ1bmN0aW9uUHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFJFTEVB
U0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKENh
bGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxzKSB7CisgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsoCisgICAgICAgICAgICBjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyKGNhbGxU
b0NvZGVQdHIuY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgfQogICAgIGlmIChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldCgwKSk7CiAgICAgZWxzZQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KGRvbmUsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAg
cGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJU3R1Yih2
aXJ0dWFsVGh1bmtHZW5lcmF0b3JGb3IoQ29kZUZvckNhbGwsIHJlZ2lzdGVycykpLmNvZGUoKSkp
OworICAgIGlmIChsaXN0LnNpemUoKSA9PSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJp
YW50TGlzdFNpemUoKSkKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRp
b25MYWJlbCh2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsVGh1bmtHZW5lcmF0b3JGb3IoQ29kZUZvckNh
bGwsIHJlZ2lzdGVycykpLmNvZGUoKSkpOworICAgIGVsc2UKKyAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJU3R1YihsaW5rUG9seW1vcnBo
aWNDYWxsVGh1bmtHZW5lcmF0b3JGb3IocmVnaXN0ZXJzKSkuY29kZSgpKSk7CiAgICAgCi0gICAg
UmVmUHRyPENsb3N1cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3
IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCisgICAgUmVmUHRyPFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBQb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZSgKICAgICAgICAgRklOQUxJWkVfQ09ERV9GT1IoCiAgICAgICAgICAgICBjYWxsZXJDb2Rl
QmxvY2ssIHBhdGNoQnVmZmVyLAotICAgICAgICAgICAgKCJDbG9zdXJlIGNhbGwgc3R1YiBmb3Ig
JXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0ICVwICglcykiLAorICAgICAgICAgICAgKCJQb2x5
bW9ycGhpYyBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldHMgJXMiLAog
ICAgICAgICAgICAgICAgIHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxM
aW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgwKS5leGVjdXRhYmxlQWRk
cmVzcygpLAotICAgICAgICAgICAgICAgIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdG9D
U3RyaW5nKHBvaW50ZXJEdW1wKGNhbGxlZUNvZGVCbG9jaykpLmRhdGEoKSkpLAotICAgICAgICAq
dm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWN1dGFibGUpKTsKKyAg
ICAgICAgICAgICB0b0NTdHJpbmcobGlzdER1bXAobGlzdCkpLmRhdGEoKSkpLAorICAgICAgICAq
dm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMtPmNhbGxlckZyYW1l
KCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzKSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CiAgICAgCkBAIC0xNzQwLDkgKzE4MDIsMTQg
QEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwg
dm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIHJlZ2lzdGVycyk7CiAgICAgCisgICAgLy8g
SWYgdGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBzdHViIHJvdXRpbmUsIHRoYXQgb25lIHdpbGwg
ZGllIGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5kIHNlZXMKKyAgICAvLyB0aGF0IGl0J3Mgbm8g
bG9uZ2VyIG9uIHN0YWNrLgogICAgIGNhbGxMaW5rSW5mby5zdHViID0gc3R1YlJvdXRpbmUucmVs
ZWFzZSgpOwogICAgIAotICAgIEFTU0VSVCghY2FsbGVlQ29kZUJsb2NrIHx8IGNhbGxlZUNvZGVC
bG9jay0+aXNJbmNvbWluZ0NhbGxBbHJlYWR5TGlua2VkKCZjYWxsTGlua0luZm8pKTsKKyAgICAv
LyBUaGUgY2FsbCBsaW5rIGluZm8gbm8gbG9uZ2VyIGhhcyBhIGNhbGwgY2FjaGUgYXBhcnQgZnJv
bSB0aGUganVtcCB0byB0aGUgcG9seW1vcnBoaWMgY2FsbAorICAgIC8vIHN0dWIuCisgICAgaWYg
KGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQorICAgICAgICBjYWxsTGlua0luZm8ucmVtb3ZlKCk7
CiB9CiAKIHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShKSVQpCiAK
ICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgogI2lu
Y2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MSw3ICs0Miw3
IEBAIHZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHUKIHZvaWQgcmVwYXRj
aEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50aWZpZXImLCBib29sIHdhc0ZvdW5k
LCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBsaW5rRm9y
KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rpb24qIGNhbGxl
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBSZWdpc3Rl
clByZXNlcnZhdGlvbk1vZGUpOwogdm9pZCBsaW5rU2xvd0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlu
a0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUp
Owotdm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJs
b2NrKiwgRXhlY3V0YWJsZUJhc2UqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTW9kZSk7Cit2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiwgQ2Fs
bExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7CiB2b2lk
IHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQg
cmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBy
ZXNldEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMTc4
NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzcsMjcgKzEzNywyNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bGlua0NvbnN0cnVjdFRoYXRQCiAgICAgcmV0dXJuIGxpbmtGb3JUaHVua0dlbmVyYXRvcih2bSwg
Q29kZUZvckNvbnN0cnVjdCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKIH0KIAotc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcigKK3N0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbEZvclRodW5rR2Vu
ZXJhdG9yKAogICAgIFZNKiB2bSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykK
IHsKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKICAgICAKLSAgICBzbG93UGF0aEZvcihqaXQs
IHZtLCBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IocmVnaXN0ZXJzKSk7CisgICAgc2xvd1Bh
dGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbEZvcihyZWdpc3RlcnMp
KTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhV
TktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgY2xv
c3VyZSBjYWxsICVzIHNsb3cgcGF0aCB0aHVuayIsIHJlZ2lzdGVycyA9PSBNdXN0UHJlc2VydmVS
ZWdpc3RlcnMgPyAiIHRoYXQgcHJlc2VydmVzIHJlZ2lzdGVycyIgOiAiIikpOworICAgIHJldHVy
biBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsgcG9seW1vcnBoaWMgY2FsbCAlcyBz
bG93IHBhdGggdGh1bmsiLCByZWdpc3RlcnMgPT0gTXVzdFByZXNlcnZlUmVnaXN0ZXJzID8gIiB0
aGF0IHByZXNlcnZlcyByZWdpc3RlcnMiIDogIiIpKTsKIH0KIAogLy8gRm9yIGNsb3N1cmUgb3B0
aW1pemF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBzaW5jZSBpZiB5b3UncmUgdXNpbmcg
Y2xvc3VyZXMgZm9yCiAvLyBvYmplY3QgY29uc3RydWN0aW9uIHRoZW4geW91J3JlIGdvaW5nIHRv
IGxvc2UgYmlnIHRpbWUgYW55d2F5LgotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJl
Q2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9s
eW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rQ2xv
c3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcih2bSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
aXJlZCk7CisgICAgcmV0dXJuIGxpbmtQb2x5bW9ycGhpY0NhbGxGb3JUaHVua0dlbmVyYXRvcih2
bSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZN
KiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNl
cnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtDbG9zdXJl
Q2FsbEZvclRodW5rR2VuZXJhdG9yKHZtLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOworICAgIHJl
dHVybiBsaW5rUG9seW1vcnBoaWNDYWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIE11c3RQcmVzZXJ2
ZVJlZ2lzdGVycyk7CiB9CiAKIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdmlydHVhbEZv
clRodW5rR2VuZXJhdG9yKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5oCShyZXZpc2lvbiAxNzg2OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxNiArNjUsMTYgQEAg
aW5saW5lIFRodW5rR2VuZXJhdG9yIGxpbmtUaHVua0dlbmVyYXRvcgogICAgIHJldHVybiAwOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHlt
b3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlu
a1BvbHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAot
aW5saW5lIFRodW5rR2VuZXJhdG9yIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9yKFJl
Z2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCitpbmxpbmUgVGh1bmtHZW5lcmF0b3Ig
bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9u
TW9kZSByZWdpc3RlcnMpCiB7CiAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKICAgICBjYXNlIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6Ci0gICAgICAgIHJldHVybiBsaW5rQ2xvc3Vy
ZUNhbGxUaHVua0dlbmVyYXRvcjsKKyAgICAgICAgcmV0dXJuIGxpbmtQb2x5bW9ycGhpY0NhbGxU
aHVua0dlbmVyYXRvcjsKICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKLSAgICAgICAg
cmV0dXJuIGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7Cisg
ICAgICAgIHJldHVybiBsaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dl
bmVyYXRvcjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBy
ZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMyLDYgKzMzMiw3IEBA
IGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKEMKICAgICAgICAgfQogICAg
IH0KICAgICBkZWZhdWx0OgorICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sg
aW4gTExJbnQ6ICIsICpjb2RlQmxvY2ssICJcbiIpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTc4NjkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzAsMTIgKzE3MCw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYo
Ym9vbCwgZW5hYmxlUG9seXZhcmlhbnREZXZpcnR1YWxpemF0aW9uLCB0cnVlKSBcCiAgICAgdihi
b29sLCBlbmFibGVQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nLCB0cnVlKSBcCiAgICAgdihib29s
LCBlbmFibGVQb2x5bW9ycGhpY0NhbGxJbmxpbmluZywgdHJ1ZSkgXAotICAgIHYoYm9vbCwgY2Fs
bFN0YXR1c1Nob3VsZFVzZUNhbGxFZGdlUHJvZmlsZSwgdHJ1ZSkgXAotICAgIHYoYm9vbCwgY2Fs
bEVkZ2VQcm9maWxlUmVhbGx5UHJvY2Vzc2VzTG9nLCB0cnVlKSBcCi0gICAgdihib29sLCBiYXNl
bGluZURvZXNDYWxsRWRnZVByb2ZpbGluZywgZmFsc2UpIFwKLSAgICB2KGJvb2wsIGRmZ0RvZXND
YWxsRWRnZVByb2ZpbGluZywgdHJ1ZSkgXAotICAgIHYoYm9vbCwgZW5hYmxlQ2FsbEVkZ2VQcm9m
aWxpbmcsIHRydWUpIFwKLSAgICB2KHVuc2lnbmVkLCBmcmVxdWVudENhbGxUaHJlc2hvbGQsIDIp
IFwKKyAgICB2KHVuc2lnbmVkLCBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUsIDMp
IFwKICAgICB2KGJvb2wsIG9wdGltaXplTmF0aXZlQ2FsbHMsIGZhbHNlKSBcCiAgICAgdihib29s
LCBlbmFibGVPYmplY3RBbGxvY2F0aW9uU2lua2luZywgdHJ1ZSkgXAogICAgIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE3ODY5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY5LDEz
ICszNjksNiBAQCBWTSomIFZNOjpzaGFyZWRJbnN0YW5jZUludGVybmFsKCkKICAgICByZXR1cm4g
c2hhcmVkSW5zdGFuY2U7CiB9CiAKLUNhbGxFZGdlTG9nJiBWTTo6ZW5zdXJlQ2FsbEVkZ2VMb2co
KQotewotICAgIGlmICghY2FsbEVkZ2VMb2cpCi0gICAgICAgIGNhbGxFZGdlTG9nID0gc3RkOjpt
YWtlX3VuaXF1ZTxDYWxsRWRnZUxvZz4oKTsKLSAgICByZXR1cm4gKmNhbGxFZGdlTG9nOwotfQot
CiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyBUaHVua0dlbmVyYXRvciB0aHVua0dlbmVyYXRvckZv
ckludHJpbnNpYyhJbnRyaW5zaWMgaW50cmluc2ljKQogewpAQCAtNDU5LDkgKzQ1Miw2IEBAIHZv
aWQgVk06OnN0b3BTYW1wbGluZygpCiAKIHZvaWQgVk06OnByZXBhcmVUb0Rpc2NhcmRDb2RlKCkK
IHsKLSAgICBpZiAoY2FsbEVkZ2VMb2cpCi0gICAgICAgIGNhbGxFZGdlTG9nLT5wcm9jZXNzTG9n
KCk7Ci0gICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gREZH
OjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CiAgICAgICAgIGlmIChERkc6OldvcmtsaXN0
KiB3b3JrbGlzdCA9IERGRzo6d29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTc4NjkyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3M7CiBjbGFz
cyBCdWlsdGluRXhlY3V0YWJsZXM7Ci1jbGFzcyBDYWxsRWRnZUxvZzsKIGNsYXNzIENvZGVCbG9j
azsKIGNsYXNzIENvZGVDYWNoZTsKIGNsYXNzIENvbW1vbklkZW50aWZpZXJzOwpAQCAtMjM4LDkg
KzIzNyw2IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8REZHOjpMb25nTGl2ZWRTdGF0
ZT4gZGZnU3RhdGU7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbEVkZ2VMb2c+IGNhbGxFZGdlTG9nOwotICAgIENhbGxFZGdlTG9nJiBlbnN1cmVD
YWxsRWRnZUxvZygpOwotCiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGllbnREYXRhKiBjbGll
bnREYXRhOwogICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245478</attachid>
            <date>2015-01-27 15:02:01 -0800</date>
            <delta_ts>2015-01-27 19:01:31 -0800</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>132875</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NCBA
QAorMjAxNS0wMS0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcgc2hvdWxkIGJlIGJhc2VkIG9uIHBvbHltb3JwaGlj
IGNhbGwgaW5saW5lIGNhY2hpbmcgcmF0aGVyIHRoYW4gbG9nZ2luZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwNjYwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXaGVuIHdlIGZpcnN0IGlt
cGxlbWVudGVkIHBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcsIHdlIGRpZCB0aGUgcHJvZmlsaW5n
IGJhc2VkIG9uIGEgY2FsbAorICAgICAgICBlZGdlIGxvZy4gVGhlIGlkZWEgd2FzIHRvIHN0b3Jl
IGVhY2ggY2FsbCBlZGdlIChhIHR1cGxlIG9mIGNhbGwgc2l0ZSBhbmQgY2FsbGVlKSBpbnRvIGEK
KyAgICAgICAgZ2xvYmFsIGxvZyB0aGF0IHdhcyBwcm9jZXNzZWQgbGF6aWx5LiBQcm9jZXNzaW5n
IHRoZSBsb2cgd291bGQgZ2l2ZSBwcmVjaXNlIGNvdW50cyBvZiBjYWxsCisgICAgICAgIGVkZ2Vz
LCBhbmQgY291bGQgYmUgdXNlZCB0byBkcml2ZSB3ZWxsLWluZm9ybWVkIGlubGluaW5nIGRlY2lz
aW9ucyAtIHBvbHltb3JwaGljIG9yIG5vdC4KKyAgICAgICAgVGhpcyB3YXMgYSBzcGVlZC11cCBv
biB0aHJvdWdocHV0IHRlc3RzIGJ1dCBhIHNsb3ctZG93biBmb3IgbGF0ZW5jeSB0ZXN0cy4gSXQg
d2FzIGEgbmV0IHdpbgorICAgICAgICBub25ldGhlbGVzcy4KKyAgICAgICAgCisgICAgICAgIEV4
cGVyaWVuY2Ugd2l0aCB0aGlzIGNvZGUgc2hvd3MgdGhyZWUgdGhpbmdzLiBGaXJzdCwgdGhlIGNh
bGwgZWRnZSBwcm9maWxlciBpcyBidWdneSBhbmQKKyAgICAgICAgY29tcGxleC4gSXQgd291bGQg
dGFrZSB3b3JrIHRvIGZpeCB0aGUgYnVncy4gU2Vjb25kLCB0aGUgY2FsbCBlZGdlIHByb2ZpbGVy
IGluY3VycyBsb3RzIG9mCisgICAgICAgIG92ZXJoZWFkIGZvciBsYXRlbmN5IGNvZGUgdGhhdCB3
ZSBjYXJlIGRlZXBseSBhYm91dC4gVGhpcmQsIGl0J3Mgbm90IGF0IGFsbCBjbGVhciB0aGF0IHRo
ZQorICAgICAgICBwcmVjaWRlIGNhbGwgZWRnZSBjb3VudHMgYXJlIGFueSBtb3JlIHVzZWZ1bCB0
aGFuIGp1c3Qga25vd2luZyB0aGF0IGEgY2FsbCBzaXRlIGhhZCBhIGZpbml0ZQorICAgICAgICBu
dW1iZXIgb2YgY2FsbGVlcy4KKyAgICAgICAgCisgICAgICAgIFNvLCB0aGlzIHBhdGNoIHJlbW92
ZXMgdGhlIGNhbGwgZWRnZSBwcm9maWxlciBhbmQgcmVwbGFjZXMgaXQgd2l0aCBhIHBvbHltb3Jw
aGljIGNhbGwgaW5saW5lCisgICAgICAgIGNhY2hlLiBJZiB3ZSBtaXNzIHRoZSBiYXNpYyBjYWxs
IGlubGluZSBjYWNoZSwgd2UgaW5mbGF0ZSB0aGUgY2FjaGUgdG8gYmUgYSBqdW1wIHRvIGFuCisg
ICAgICAgIG91dC1vZi1saW5lIHN0dWIgdGhhdCBjYXNlcyBvbiB0aGUgcHJldmlvdXNseSBrbm93
biBjYWxsZWVzLiBJZiB0aGF0IG1pc3NlcyBhZ2FpbiwgdGhlbiB3ZQorICAgICAgICByZXdyaXRl
IHRoYXQgc3R1YiB0byBpbmNsdWRlIHRoZSBuZXcgY2FsbGVlLiBXZSBkbyB0aGlzIHVwIHRvIHRo
cmVlIGNhbGxlZXMuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBieXRlY29kZS9DYWxsRWRnZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2Fs
bEVkZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZUlubGluZXMuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OnVubGluayk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dmlzaXRXZWFr
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKiBieXRlY29k
ZS9DYWxsTGlua1N0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpDYWxs
TGlua1N0YXR1cyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKToK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKToK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua1N0YXR1czo6bWFrZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtTdGF0dXM6OmR1bXApOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZyb21DYWxsRWRnZVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmg6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1
cyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjppc1NldCk6CisgICAgICAgIChKU0M6
OkNhbGxMaW5rU3RhdHVzOjp2YXJpYW50cyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVz
OjpzaXplKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmF0KToKKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtTdGF0dXM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0
YXR1czo6Y2FuT3B0aW1pemUpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6ZWRnZXMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y2FuVHJ1c3RDb3VudHMp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxWYXJpYW50LmNwcDoKKyAgICAgICAg
KEpTQzo6dmFyaWFudExpc3RXaXRoVmFyaWFudCk6CisgICAgICAgIChKU0M6OmRlc3BlY2lmaWVk
VmFyaWFudExpc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxWYXJpYW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp+Q29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhp
Y0NhbGwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5vdGljZUluY29taW5nQ2FsbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aXNJbmNvbWlu
Z0NhbGxBbHJlYWR5TGlua2VkKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmFkZENhbGxXaXRob3V0U2V0dGluZ1Jlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpm
b2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9u
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0
aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFn
YXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
IChKU0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZTo6cmVtb3ZlRlRMUHJvZmlsaW5n
KTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKiBqaXQvQ2xvc3VyZUNhbGxTdHViUm91
dGluZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6Om9w
ZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGxGb3IpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25M
aW5rQ2xvc3VyZUNhbGxGb3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRTdHViUm91dGlu
ZS5oOgorICAgICAgICAqIGppdC9KSVRXcml0ZUJhcnJpZXIuaDoKKyAgICAgICAgKiBqaXQvUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1v
cnBoaWNDYWxsTm9kZTo6flBvbHltb3JwaGljQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpQb2x5
bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmspOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZTo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6flBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKToK
KyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZhcmlhbnRzKToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZpc2l0V2Vhayk6CisgICAg
ICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwpOgorICAgICAgICAqIGppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsTm9kZTo6UG9seW1vcnBoaWNDYWxs
Tm9kZSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbENhc2U6OlBvbHltb3JwaGljQ2Fs
bENhc2UpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxDYXNlOjp2YXJpYW50KToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsQ2FzZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKiBq
aXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjps
aW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAgICAgICAqIGppdC9UaHVua0dlbmVy
YXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsRm9yVGh1bmtHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbEZvclRodW5rR2VuZXJh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0
b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0
b3JzLmg6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvckZv
cik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAgICAgICogcnVudGltZS9P
cHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpw
cmVwYXJlVG9EaXNjYXJkQ29kZSk6CisgICAgICAgIChKU0M6OlZNOjplbnN1cmVDYWxsRWRnZUxv
Zyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE1LTAxLTI3ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBERkdCaW5hcnlTd2l0
Y2ggb3V0IG9mIHRoZSBERkcgc28gdGhhdCBhbGwgb2YgdGhlIEpJVHMgY2FuIHVzZSBpdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3OTIyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yODEsMTMgKzI4MSw4IEBACiAJCTBGM0IzQTI4MTU0NEM5OTcw
MDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYgLyog
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGM0IzQTJCMTU0NzUwMDAwMDNFRDBGRiAvKiBERkdWYWxp
ZGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwICovOyB9OwogCQkwRjNC
M0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBE
RkdWYWxpZGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTBGM0I3RTI2MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjAxOUExMUI4MDAwRDlC
QzU2IC8qIENhbGxFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEYzQjdFMjcxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0Uy
MTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmNwcCAqLzsgfTsKLQkJMEYzQjdF
MjgxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjIxOUExMUI4MDAwRDlCQzU2IC8q
IENhbGxFZGdlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTBGM0I3RTI5MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGVJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNCN0UyMzE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0I3RTJBMTlB
MTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZh
cmlhbnQuY3BwICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3
RTI1MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGM0I3RTJEMTlBMTJBQUUwMEQ5QkM1NiAv
KiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNCN0UyQzE5QTEyQUFFMDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkw
RjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0
MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi87IH07CiAJCTBGM0Qw
QkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBG
QzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBE
RkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVy
aW5nLmNwcCAqLzsgfTsKQEAgLTM4Niw4ICszODEsNiBAQAogCQkwRjcwMjVBQTE3MTRCMEZDMDAz
ODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY3MTRDQTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjcxNENBNTE2RUE5MkYyMDBGM0VCRUIgLyogREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjczRDdBRTE2NUExNDJEMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHVi
Um91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjczRDdBQjE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAg
Ki87IH07Ci0JCTBGNzNEN0FGMTY1QTE0MzAwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcz
RDdBQzE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzQzQkFBMTZCODgy
NDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMDE2NTFDNjYxMDBBODBBRkUgLyogQVJN
NjREaXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRjc1NzZEMjE4RTFGRUU5MDAyRUY0Q0QgLyog
QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKIAkJMEY3NTc2RDMxOEUxRkVFOTAwMkVGNENE
IC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNjAyLDYgKzU5NSw4IEBACiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5
NkM0OCAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsK
IAkJMEZFNzIxMUQxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzIxMUIxOTNCOUM1OTAw
MzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovOyB9OwogCQkwRkU3MjExRTE5M0I5QzU5MDAz
MUY2RUQgLyogREZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU4
MzQxNzFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODM0MTUxQTZF
Rjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKKwkJ
MEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4MzQxNjFB
NkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU4NTM0QjE3MjNDREE1
MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBE
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4
RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZFOTVGNzkxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTk1Rjc3MThC
NTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgKi87IH07CkBAIC0xOTUwLDEzICsx
OTQ1LDggQEAKIAkJMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0ZHU2ltcGxp
ZmljYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8q
IERGR1ZhbGlkYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R1ZhbGlkYXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYWxpZGF0ZS5oOyBwYXRoID0g
ZGZnL0RGR1ZhbGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0I3RTIw
MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWxsRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNCN0Uy
MTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxFZGdlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGM0I3RTIyMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2Zp
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2VQcm9maWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0I3RTIzMTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENhbGxFZGdlUHJvZmlsZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0I3RTJDMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxs
RWRnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0QwQkJBMTk0QTQxNDMwMEZDOUNG
OSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE4MTlEMzUz
QTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBwYXRoID0gZGZnL0RG
R1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA1
Niw4ICsyMDQ2LDYgQEAKIAkJMEY3MDI1QTgxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRD
b21waWxlckNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVC
IC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHBhdGgg
PSBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNzNEN0FCMTY1QTE0MkEw
MEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjczRDdBQzE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNh
bGxTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbG9zdXJl
Q2FsbFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzU3NkQw
MThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzU3NkQxMThFMUZFRTkwMDJF
RjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyODQsNiArMjI3Miw4IEBACiAJCTBGRTIy
OEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNzIx
MUIxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHVHJhbnNpdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHVHJh
bnNpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcyMTFDMTkzQjlD
NTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1RyYW5zaXRpb24uaDsgcGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0
OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBh
dGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFOTVGNzcxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTERhdGFTZWN0aW9u
LmNwcDsgcGF0aCA9IGZ0bC9GVExEYXRhU2VjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zNzQ3LDggKzM3MzcsNiBAQAogCQkJCTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2
NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAv
KiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQkwRjI0RTUzRDE3RUE5RjU5MDBBQkIyMTcgLyogQ0Nh
bGxIZWxwZXJzLmggKi8sCi0JCQkJMEY3M0Q3QUIxNjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1cmVD
YWxsU3R1YlJvdXRpbmUuY3BwICovLAotCQkJCTBGNzNEN0FDMTY1QTE0MkEwMEFDQUI3MSAvKiBD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0
IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8sCiAJCQkJQTdCNDhEQjYwRUU3NENGQzAwRENCREI2
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovLAogCQkJCUE3QjQ4REI1MEVFNzRDRkMwMERD
QkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi8sCkBAIC0zNzk2LDYgKzM3ODQsOCBAQAog
CQkJCTBGQzcxMkUxMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCAqLywKKwkJCQkwRkU4MzQxNTFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUuY3BwICovLAorCQkJCTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oICovLAogCQkJCTBGQTdBOEU5MThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuY3BwICovLAogCQkJCTBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcu
aCAqLywKIAkJCQkwRjZCMUNCQjE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRp
b25XcmFwcGVyR2VuZXJhdG9yLmNwcCAqLywKQEAgLTUwMjcsMTEgKzUwMTcsNiBAQAogCQkJCTBG
NjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVz
LmggKi8sCiAJCQkJMEY4ODVFMTAxODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmgg
Ki8sCiAJCQkJMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovLAotCQkJ
CTBGM0I3RTJDMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAgKi8sCi0JCQkJMEYzQjdF
MjAxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlLmggKi8sCi0JCQkJMEYzQjdFMjExOUExMUI4
MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5jcHAgKi8sCi0JCQkJMEYzQjdFMjIxOUExMUI4
MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5oICovLAotCQkJCTBGM0I3RTIzMTlBMTFCODAw
MEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmggKi8sCiAJCQkJMEYwQjgzQUUxNEJD
RjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8sCiAJCQkJMEYwQjgzQUYxNEJDRjcx
NDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICovLAogCQkJCTBGOTMzMjkzMTRDQTdEQzEwMDg1
RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgKi8sCkBAIC01NDgzLDcgKzU0NjgsNiBAQAogCQkJ
CTBGNjlDQzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyNEU1NDIxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM2QUFBRTUwRTFGNDI2NTAwQUQ4N0Q4IC8qIENsYXNzSW5mby5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEY3M0Q3QUYxNjVBMTQzMDAwQUNBQjcxIC8qIENsb3N1cmVDYWxs
U3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4
MSAvKiBDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEY5NDQxMTY2NzYzMzIwMEQ2
MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0YzNDE4MjAy
MEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTU1NzQsNyArNTU1OCw2IEBACiAJCQkJMEZGRkM5NUExNEVGOTBBOTAwQzcyNTMy
IC8qIERGR0NTRVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJGQzc3MzE2RTEyRjc0MDAz
OEQ5NzYgLyogREZHRENFUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjlBMTcyRjA1
MDEwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTBGM0I3RTI4MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyQzBGN0NFMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNpdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyOTgxRkQ5MTdCQUVFNEIw
MEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovLApAQCAt
NTg2NSw3ICs1ODQ4LDYgQEAKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3Jp
dGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAy
MUExRDkwMDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MEYzQjdFMjkxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyQ0YzOUMyMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NjE0MEQyMTgyOTgyQ0IwMDc1MDYyNCAvKiBK
U0FyZ3VtZW50c0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNzBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTg5LDcgKzYxNzEsNiBA
QAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJv
dmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYx
NjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjNCN0Uy
NjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2
NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlw
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjM2LDYgKzYyMTcsNyBAQAogCQkJCTBGRjQyNzQ5MTU4
RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVB
QjM5MTc5OUU0QjIwMEQyODMzRCAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMzEzQkZERTcxMDAyM0Q4N0Mg
LyogVWludDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0MjE3QURC
NUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjNG
MTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTY3NzQs
NyArNjc1Niw2IEBACiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5m
by5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2Fs
bExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRTQxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDAxNjY3NjMzMDAwRDYxOTcxIC8qIENvZGVC
bG9ja0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDOTdGMzMxODIwMjBENzAwMkM5QjI2
IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTY5NjAsOCArNjk0MSw4IEBACiAJCQkJMEYyMzVCRDUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4
aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRDgxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIzNUJEQTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTBGM0I3RTI3MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGMjk5NkIxN0EwQkI2NzAwMTA0MTdBIC8qIEZUTEZh
aWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFODM0MTcxQTZFRjk3QjAwRDA0ODQ3IC8qIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzE5
MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50
cmluc2ljUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTcxNTMsNyArNzEzNCw2IEBA
CiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExMSW50RGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3MiAvKiBMTEludEV4
Y2VwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYzQjdFMkQxOUExMkFBRTAwRDlCQzU2
IC8qIENhbGxFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE0MTRCQTdGOEQwMEJG
RTI3MiAvKiBMTEludFNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBCODM5QzE0
QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZD
RUZBQ0QxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZS5jcHAJKHJldmlzaW9u
IDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2Fs
bEVkZ2UuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgQ2FsbEVkZ2U6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQoIjwiLCBtX2NhbGxlZSwgIiwgY291
bnQ6ICIsIG1fY291bnQsICI+Iik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuaAkocmV2aXNpb24gMTc5MjIz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIENhbGxFZGdlX2gKLSNkZWZpbmUgQ2FsbEVkZ2VfaAotCi0j
aW5jbHVkZSAiQ2FsbFZhcmlhbnQuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXR5cGVkZWYgdWlu
dDE2X3QgQ2FsbEVkZ2VDb3VudFR5cGU7Ci0KLWNsYXNzIENhbGxFZGdlIHsKLXB1YmxpYzoKLSAg
ICBDYWxsRWRnZSgpOwotICAgIENhbGxFZGdlKENhbGxWYXJpYW50LCBDYWxsRWRnZUNvdW50VHlw
ZSk7Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jYWxsZWU7
IH0KLSAgICAKLSAgICBDYWxsVmFyaWFudCBjYWxsZWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxl
ZTsgfQotICAgIENhbGxFZGdlQ291bnRUeXBlIGNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb3Vu
dDsgfQotICAgIAotICAgIENhbGxFZGdlIGRlc3BlY2lmaWVkQ2xvc3VyZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gQ2FsbEVkZ2UobV9jYWxsZWUuZGVzcGVjaWZpZWRDbG9zdXJlKCks
IG1fY291bnQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKLSAgICAKLXB1YmxpYzoKLSAgICBDYWxsVmFyaWFudCBtX2NhbGxlZTsKLSAgICBDYWxsRWRn
ZUNvdW50VHlwZSBtX2NvdW50OwotfTsKLQotaW5saW5lIENhbGxFZGdlOjpDYWxsRWRnZShDYWxs
VmFyaWFudCBjYWxsZWUsIENhbGxFZGdlQ291bnRUeXBlIGNvdW50KQotICAgIDogbV9jYWxsZWUo
Y2FsbGVlKQotICAgICwgbV9jb3VudChjb3VudCkKLXsKLX0KLQotaW5saW5lIENhbGxFZGdlOjpD
YWxsRWRnZSgpCi0gICAgOiBDYWxsRWRnZShDYWxsVmFyaWFudCgpLCAwKQotewotfQotCi10eXBl
ZGVmIFZlY3RvcjxDYWxsRWRnZSwgMT4gQ2FsbEVkZ2VMaXN0OwotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQotI2VuZGlmIC8vIENhbGxFZGdlX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDE3OTIyMykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDM2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWxs
RWRnZVByb2ZpbGUuaCIKLQotI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkNh
bGxFZGdlUHJvZmlsZUlubGluZXMuaCIKLSNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCi0jaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotQ2FsbEVkZ2VMaXN0IENh
bGxFZGdlUHJvZmlsZTo6Y2FsbEVkZ2VzKCkgY29uc3QKLXsKLSAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2xvY2spOwotICAgIAotICAgIENhbGxFZGdlTGlzdCByZXN1bHQ7Ci0gICAg
Ci0gICAgQ2FsbFZhcmlhbnQgcHJpbWFyeUNhbGxlZSA9IG1fcHJpbWFyeUNhbGxlZTsKLSAgICBD
YWxsRWRnZUNvdW50VHlwZSBudW1DYWxsc1RvUHJpbWFyeSA9IG1fbnVtQ2FsbHNUb1ByaW1hcnk7
Ci0gICAgLy8gRGVmZW5kIGFnYWluc3QgcmFjZXMuIFRoZXNlIGZpZWxkcyBhcmUgbW9kaWZpZWQg
YnkgdGhlIGxvZyBwcm9jZXNzb3Igd2l0aG91dCBsb2NraW5nLgotICAgIGlmICghIXByaW1hcnlD
YWxsZWUgJiYgbnVtQ2FsbHNUb1ByaW1hcnkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoQ2FsbEVk
Z2UocHJpbWFyeUNhbGxlZSwgbnVtQ2FsbHNUb1ByaW1hcnkpKTsKLSAgICAKLSAgICBpZiAobV9v
dGhlckNhbGxlZXMpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgaWYgdGhlIHByaW1hcnkg
dGhyZWFkIGhhZCBqdXN0IGNyZWF0ZWQgYSBtX290aGVyQ2FsbGVzIHdoaWxlIGxvZwotICAgICAg
ICAvLyBwcm9jZXNzaW5nLCB3ZSBzZWUgYSBjb25zaXN0ZW50bHkgY3JlYXRlZCBvbmUuIFRoZSBs
b2NrIGJlaW5nIGhlbGQgaXMgaW5zdWZmaWNpZW50IGZvcgotICAgICAgICAvLyB0aGlzLCBzaW5j
ZSB0aGUgbG9nIHByb2Nlc3NvciB3aWxsIG9ubHkgZ3JhYiB0aGUgbG9jayB3aGVuIG1lcmdpbmcg
dGhlIHNlY29uZGFyeQotICAgICAgICAvLyBzcGVjdHJ1bSBpbnRvIHRoZSBwcmltYXJ5IG9uZSBi
dXQgbWF5IHN0aWxsIGNyZWF0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmUgd2l0aG91dCBob2xkaW5nCi0g
ICAgICAgIC8vIGxvY2tzLgotICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAg
Zm9yIChDYWxsRWRnZSYgZW50cnkgOiBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQpIHsKLSAg
ICAgICAgICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBwcmlt
YXJ5IGR1cGxpY2F0ZXMgYW4gZW50cnkgaW4gdGhlIHNlY29uZGFyeQotICAgICAgICAgICAgLy8g
c3BlY3RydW0uIFRoYXQgY2FuIGhhcHBlbiB3aGVuIHRoZSBHQyByZW1vdmVzIHRoZSBwcmltYXJ5
LiBXZSBjb3VsZCBoYXZlIHRoZSBHQyBmaXgKLSAgICAgICAgICAgIC8vIHRoZSBzaXR1YXRpb24g
YnkgY2hhbmdpbmcgdGhlIHByaW1hcnkgdG8gYmUgc29tZXRoaW5nIGZyb20gdGhlIHNlY29uZGFy
eSBzcGVjdHJ1bSwKLSAgICAgICAgICAgIC8vIGJ1dCB0aGlzIGZpeCBzZWVtcyBzaW1wbGVyIHRv
IGltcGxlbWVudCBhbmQgYWxzbyBjaGVhcGVyLgotICAgICAgICAgICAgaWYgKGVudHJ5LmNhbGxl
ZSgpID09IHJlc3VsdFswXS5jYWxsZWUoKSkgewotICAgICAgICAgICAgICAgIHJlc3VsdFswXSA9
IENhbGxFZGdlKHJlc3VsdFswXS5jYWxsZWUoKSwgZW50cnkuY291bnQoKSArIHJlc3VsdFswXS5j
b3VudCgpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChlbnRyeSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi0gICAgc3RkOjpzb3J0KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIFtd
IChjb25zdCBDYWxsRWRnZSYgYSwgY29uc3QgQ2FsbEVkZ2UmIGIpIC0+IGJvb2wgewotICAgICAg
ICAgICAgcmV0dXJuIGEuY291bnQoKSA+IGIuY291bnQoKTsKLSAgICAgICAgfSk7Ci0gICAgCi0g
ICAgaWYgKHJlc3VsdC5zaXplKCkgPj0gMikKLSAgICAgICAgQVNTRVJUKHJlc3VsdFswXS5jb3Vu
dCgpID49IHJlc3VsdC5sYXN0KCkuY291bnQoKSk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotQ2FsbEVkZ2VDb3VudFR5cGUgQ2FsbEVkZ2VQcm9maWxlOjpudW1DYWxsc1RvS25vd25D
ZWxscygpIGNvbnN0Ci17Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgcmVzdWx0ID0gMDsKLSAgICBm
b3IgKENhbGxFZGdlJiBlZGdlIDogY2FsbEVkZ2VzKCkpCi0gICAgICAgIHJlc3VsdCArPSBlZGdl
LmNvdW50KCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGJvb2wgd29ydGhEZXNw
ZWNpZnlpbmcoY29uc3QgQ2FsbFZhcmlhbnQmIHZhcmlhbnQpCi17Ci0gICAgcmV0dXJuICFIZWFw
Ojppc01hcmtlZCh2YXJpYW50LnJhd0NhbGxlZUNlbGwoKSkKLSAgICAgICAgJiYgSGVhcDo6aXNN
YXJrZWQodmFyaWFudC5kZXNwZWNpZmllZENsb3N1cmUoKS5yYXdDYWxsZWVDZWxsKCkpOwotfQot
Ci1ib29sIENhbGxFZGdlUHJvZmlsZTo6d29ydGhEZXNwZWNpZnlpbmcoKQotewotICAgIGlmICht
X2Nsb3N1cmVzQXJlRGVzcGVjaWZpZWQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICBib29sIGRpZFNlZUVudHJ5ID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCEhbV9wcmltYXJ5Q2Fs
bGVlKSB7Ci0gICAgICAgIGRpZFNlZUVudHJ5ID0gdHJ1ZTsKLSAgICAgICAgaWYgKCFKU0M6Ondv
cnRoRGVzcGVjaWZ5aW5nKG1fcHJpbWFyeUNhbGxlZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIGlmIChtX290aGVyQ2FsbGVlcykgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBpLS07KSB7
Ci0gICAgICAgICAgICBkaWRTZWVFbnRyeSA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6
d29ydGhEZXNwZWNpZnlpbmcobV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNhbGxlZSgp
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIGRpZFNlZUVudHJ5OwotfQotCi12b2lkIENhbGxFZGdlUHJvZmlsZTo6dmlz
aXRXZWFrKCkKLXsKLSAgICBpZiAoIW1fcHJpbWFyeUNhbGxlZSAmJiAhbV9vdGhlckNhbGxlZXMp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2xvY2spOwotICAgIAotICAgIC8vIFNlZSBpZiBhbnl0aGluZyBpcyBkZWFkIGFuZCBpZiB0aGF0
IGNhbiBiZSByZWN0aWZpZWQgYnkgZGVzcGVjaWZ5aW5nLgotICAgIGlmICh3b3J0aERlc3BlY2lm
eWluZygpKSB7Ci0gICAgICAgIENhbGxTcGVjdHJ1bSBuZXdTcGVjdHJ1bTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghIW1fcHJpbWFyeUNhbGxlZSkKLSAgICAgICAgICAgIG5ld1NwZWN0cnVtLmFk
ZChtX3ByaW1hcnlDYWxsZWUuZGVzcGVjaWZpZWRDbG9zdXJlKCksIG1fbnVtQ2FsbHNUb1ByaW1h
cnkpOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fb3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICAgICAgbmV3U3BlY3RydW0uYWRkKAotICAgICAgICAgICAgICAg
ICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY2FsbGVlKCkuZGVzcGVjaWZpZWRD
bG9zdXJlKCksCi0gICAgICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3Nl
ZFtpXS5jb3VudCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgVmVjdG9yPENhbGxTcGVjdHJ1bTo6S2V5QW5kQ291bnQ+IGxpc3QgPSBuZXdTcGVjdHJ1bS5i
dWlsZExpc3QoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlzdC5zaXplKCkpOwotICAgICAg
ICBtX3ByaW1hcnlDYWxsZWUgPSBsaXN0Lmxhc3QoKS5rZXk7Ci0gICAgICAgIG1fbnVtQ2FsbHNU
b1ByaW1hcnkgPSBsaXN0Lmxhc3QoKS5jb3VudDsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX290
aGVyQ2FsbGVlcykgewotICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLmNs
ZWFyKCk7Ci0KLSAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYSBzaXR1YXRpb24gd2hlcmUg
dGhlIEdDIGNsZWFycyB0aGUgcHJpbWFyeSBhbmQgdGhlbiBsb2cgcHJvY2Vzc2luZwotICAgICAg
ICAgICAgLy8gcmVpbnN0YXRlcyBpdCB3aXRob3V0IGV2ZXIgZG9pbmcgYW4gYWRkU2xvdyBhbmQg
c3Vic2VxdWVudCBtZXJnZUJhY2suIEluIHN1Y2ggYSBjYXNlCi0gICAgICAgICAgICAvLyB0aGUg
cHJpbWFyeSBjb3VsZCBkdXBsaWNhdGUgYW4gZW50cnkgaW4gb3RoZXJDYWxsZWVzLCB3aGljaCBt
ZWFucyB0aGF0IGV2ZW4gdGhvdWdoIHdlCi0gICAgICAgICAgICAvLyBoYWQgYW4gb3RoZXJDYWxs
ZWVzIG9iamVjdCwgdGhlIGxpc3Qgc2l6ZSBpcyBqdXN0IDEuCi0gICAgICAgICAgICBpZiAobGlz
dC5zaXplKCkgPj0gMikgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxpc3Qu
c2l6ZSgpIC0gMTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1f
cHJvY2Vzc2VkLmFwcGVuZChDYWxsRWRnZShsaXN0W2ldLmtleSwgbGlzdFtpXS5jb3VudCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX2Nsb3N1cmVzQXJl
RGVzcGVjaWZpZWQgPSB0cnVlOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKLSAgICBpZiAoISFtX3ByaW1hcnlDYWxsZWUgJiYgIUhlYXA6OmlzTWFya2VkKG1fcHJpbWFy
eUNhbGxlZS5yYXdDYWxsZWVDZWxsKCkpKSB7Ci0gICAgICAgIG1fbnVtQ2FsbHNUb1Vua25vd25D
ZWxsICs9IG1fbnVtQ2FsbHNUb1ByaW1hcnk7Ci0gICAgICAgIAotICAgICAgICBtX3ByaW1hcnlD
YWxsZWUgPSBDYWxsVmFyaWFudCgpOwotICAgICAgICBtX251bUNhbGxzVG9QcmltYXJ5ID0gMDsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKG1fb3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChtX290aGVyQ2FsbGVlcy0+bV9wcm9j
ZXNzZWRbaV0uY2FsbGVlKCkucmF3Q2FsbGVlQ2VsbCgpKSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9udW1DYWxsc1RvVW5rbm93bkNlbGwg
Kz0gbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNvdW50KCk7Ci0gICAgICAgICAgICBt
X290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaS0tXSA9IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nl
c3NlZC5sYXN0KCk7Ci0gICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQucmVt
b3ZlTGFzdCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBPbmx5IGV4aXN0cyB3
aGlsZSB3ZSBhcmUgcHJvY2Vzc2luZyB0aGUgbG9nLgotICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
bV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0pOwotICAgIH0KLX0KLQotdm9pZCBD
YWxsRWRnZVByb2ZpbGU6OmFkZFNsb3coQ2FsbFZhcmlhbnQgY2FsbGVlLCBDYWxsRWRnZVByb2Zp
bGVWZWN0b3ImIG1lcmdlQmFja0xvZykKLXsKLSAgICAvLyBUaGlzIGV4aXN0cyB0byBoYW5kbGUg
Y2FzZXMgd2hlcmUgdGhlIHNwZWN0cnVtIHdhc24ndCBjcmVhdGVkIHlldCwgb3Igd2UncmUgc3Rv
cmluZyB0byBhCi0gICAgLy8gcGFydGljdWxhciBzcGVjdHJ1bSBmb3IgdGhlIGZpcnN0IHRpbWUg
ZHVyaW5nIGEgbG9nIHByb2Nlc3NpbmcgaXRlcmF0aW9uLgotICAgIAotICAgIGlmICghbV9vdGhl
ckNhbGxlZXMpIHsKLSAgICAgICAgbV9vdGhlckNhbGxlZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPFNl
Y29uZGFyeT4oKTsKLSAgICAgICAgLy8gSWYgYSBjb21waWxlciB0aHJlYWQgbm90aWNlcyB0aGUg
bV9vdGhlckNhbGxlZXMgYmVpbmcgbm9uLW51bGwsIHdlIHdhbnQgdG8gbWFrZSBzdXJlCi0gICAg
ICAgIC8vIHRoYXQgaXQgc2VlcyBhIGZ1bGx5IGNyZWF0ZWQgb25lLgotICAgICAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoIW1fb3RoZXJDYWxsZWVzLT5t
X3RlbXBvcmFyeVNwZWN0cnVtKSB7Ci0gICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFy
eVNwZWN0cnVtID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsU3BlY3RydW0+KCk7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5zaXplKCk7IGktLTsp
IHsKLSAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtLT5hZGQo
Ci0gICAgICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNhbGxlZSgp
LAotICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jb3VudCgp
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoaXMg
aXMgdGhlIGZpcnN0IHRpbWUgd2UncmUgc2VlaW5nIHRoaXMgcHJvZmlsZSBkdXJpbmcgdGhpcyBs
b2cKLSAgICAgICAgLy8gcHJvY2Vzc2luZyBpdGVyYXRpb24uCi0gICAgICAgIG1lcmdlQmFja0xv
Zy5hcHBlbmQodGhpcyk7Ci0gICAgfQotICAgIAotICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBv
cmFyeVNwZWN0cnVtLT5hZGQoY2FsbGVlKTsKLX0KLQotdm9pZCBDYWxsRWRnZVByb2ZpbGU6Om1l
cmdlQmFjaygpCi17Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAg
ICAKLSAgICBSRUxFQVNFX0FTU0VSVChtX290aGVyQ2FsbGVlcyk7Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0pOwotICAgIAotICAgIGlmICgh
IW1fcHJpbWFyeUNhbGxlZSkKLSAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3Bl
Y3RydW0tPmFkZChtX3ByaW1hcnlDYWxsZWUsIG1fbnVtQ2FsbHNUb1ByaW1hcnkpOwotICAgIAot
ICAgIGlmICghbV9jbG9zdXJlc0FyZURlc3BlY2lmaWVkKSB7Ci0gICAgICAgIENhbGxTcGVjdHJ1
bSBuZXdTcGVjdHJ1bTsKLSAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6ICptX290aGVyQ2FsbGVl
cy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSkKLSAgICAgICAgICAgIG5ld1NwZWN0cnVtLmFkZChlbnRy
eS5rZXkuZGVzcGVjaWZpZWRDbG9zdXJlKCksIGVudHJ5LnZhbHVlKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChuZXdTcGVjdHJ1bS5zaXplKCkgPCBtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlT
cGVjdHJ1bS0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICAqbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9y
YXJ5U3BlY3RydW0gPSBuZXdTcGVjdHJ1bTsKLSAgICAgICAgICAgIG1fY2xvc3VyZXNBcmVEZXNw
ZWNpZmllZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPENhbGxT
cGVjdHJ1bTo6S2V5QW5kQ291bnQ+IGxpc3QgPSBtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlT
cGVjdHJ1bS0+YnVpbGRMaXN0KCk7Ci0gICAgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3Bl
Y3RydW0gPSBudWxscHRyOwotICAgIAotICAgIG1fcHJpbWFyeUNhbGxlZSA9IGxpc3QubGFzdCgp
LmtleTsKLSAgICBtX251bUNhbGxzVG9QcmltYXJ5ID0gbGlzdC5sYXN0KCkuY291bnQ7Ci0gICAg
bGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAgCi0gICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2Vk
LmNsZWFyKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBjb3VudCA9IG1heEtub3duQ2FsbGVlczsgY291
bnQtLSAmJiAhbGlzdC5pc0VtcHR5KCk7KSB7Ci0gICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3By
b2Nlc3NlZC5hcHBlbmQoQ2FsbEVkZ2UobGlzdC5sYXN0KCkua2V5LCBsaXN0Lmxhc3QoKS5jb3Vu
dCkpOwotICAgICAgICBsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gbGlzdC5zaXplKCk7IGktLTspCi0gICAgICAgIG1fbnVtQ2FsbHNUb1Vua25v
d25DZWxsICs9IGxpc3RbaV0uY291bnQ7Ci19Ci0KLXZvaWQgQ2FsbEVkZ2VQcm9maWxlOjpmYWRl
QnlIYWxmKCkKLXsKLSAgICBtX251bUNhbGxzVG9QcmltYXJ5ID4+PSAxOwotICAgIG1fbnVtQ2Fs
bHNUb05vdENlbGwgPj49IDE7Ci0gICAgbV9udW1DYWxsc1RvVW5rbm93bkNlbGwgPj49IDE7Ci0g
ICAgbV90b3RhbENvdW50ID4+PSAxOwotICAgIAotICAgIGlmIChtX290aGVyQ2FsbGVlcykgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6
ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0g
PSBDYWxsRWRnZSgKLSAgICAgICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRb
aV0uY2FsbGVlKCksCi0gICAgICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2Vk
W2ldLmNvdW50KCkgPj4gMSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX290
aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSkgewotICAgICAgICAgICAgZm9yIChhdXRv
JiBlbnRyeSA6ICptX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSkKLSAgICAgICAg
ICAgICAgICBlbnRyeS52YWx1ZSA+Pj0gMTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotQ2FsbEVk
Z2VMb2c6OkNhbGxFZGdlTG9nKCkKLSAgICA6IG1fc2NhbGVkTG9nSW5kZXgobG9nU2l6ZSAqIHNp
emVvZihFbnRyeSkpCi17Ci0gICAgQVNTRVJUKCEobV9zY2FsZWRMb2dJbmRleCAlIHNpemVvZihF
bnRyeSkpKTsKLX0KLQotQ2FsbEVkZ2VMb2c6On5DYWxsRWRnZUxvZygpIHsgfQotCi1ib29sIENh
bGxFZGdlTG9nOjppc0VuYWJsZWQoKQotewotICAgIHJldHVybiBPcHRpb25zOjplbmFibGVDYWxs
RWRnZVByb2ZpbGluZygpICYmIE9wdGlvbnM6OnVzZUZUTEpJVCgpOwotfQotCi0jaWYgRU5BQkxF
KEpJVCkKLQotZXh0ZXJuICJDIiBKSVRfT1BFUkFUSU9OIHZvaWQgb3BlcmF0aW9uUHJvY2Vzc0Nh
bGxFZGdlTG9nKENhbGxFZGdlTG9nKikgV1RGX0lOVEVSTkFMOwotZXh0ZXJuICJDIiBKSVRfT1BF
UkFUSU9OIHZvaWQgb3BlcmF0aW9uUHJvY2Vzc0NhbGxFZGdlTG9nKENhbGxFZGdlTG9nKiBsb2cp
Ci17Ci0gICAgbG9nLT5wcm9jZXNzTG9nKCk7Ci19Ci0KLXZvaWQgQ2FsbEVkZ2VMb2c6OmVtaXRM
b2dDb2RlKENDYWxsSGVscGVycyYgaml0LCBDYWxsRWRnZVByb2ZpbGUmIHByb2ZpbGUsIEpTVmFs
dWVSZWdzIGNhbGxlZVJlZ3MpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVu
dHMgPSAxOwotICAgIAotICAgIEdQUlJlZyBzY3JhdGNoR1BSOwotICAgIGlmICghY2FsbGVlUmVn
cy51c2VzKEdQUkluZm86OnJlZ1QwKSkKLSAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnJl
Z1QwOwotICAgIGVsc2UgaWYgKCFjYWxsZWVSZWdzLnVzZXMoR1BSSW5mbzo6cmVnVDEpKQotICAg
ICAgICBzY3JhdGNoR1BSID0gR1BSSW5mbzo6cmVnVDE7Ci0gICAgZWxzZQotICAgICAgICBzY3Jh
dGNoR1BSID0gR1BSSW5mbzo6cmVnVDI7Ci0gICAgCi0gICAgaml0LmxvYWQzMigmbV9zY2FsZWRM
b2dJbmRleCwgc2NyYXRjaEdQUik7Ci0gICAgCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG9rID0g
aml0LmJyYW5jaFRlc3QzMihDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIpOwotICAg
IAotICAgIEFTU0VSVF9VTlVTRUQobnVtYmVyT2ZBcmd1bWVudHMsIHN0YWNrQWxpZ25tZW50UmVn
aXN0ZXJzKCkgPj0gMSArIG51bWJlck9mQXJndW1lbnRzKTsKLSAgICAKLSAgICBqaXQuc3ViUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSksIENDYWxs
SGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIAotICAgIGppdC5zdG9yZVZhbHVl
KGNhbGxlZVJlZ3MsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICBqaXQuc2V0dXBBcmd1bWVudHMo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpKTsKLSAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25Qcm9jZXNz
Q2FsbEVkZ2VMb2cpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgaml0LmNhbGwoR1BSSW5m
bzo6bm9uQXJnR1BSMCk7Ci0gICAgaml0LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKEpTVmFsdWUpKSwgY2Fs
bGVlUmVncyk7Ci0gICAgCi0gICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihzdGFja0FsaWdubWVudEJ5dGVzKCkpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKLSAgICAKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2dT
aXplICogc2l6ZW9mKEVudHJ5KSksIHNjcmF0Y2hHUFIpOwotICAgIG9rLmxpbmsoJmppdCk7Ci0K
LSAgICBqaXQuc3ViMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEVudHJ5KSks
IHNjcmF0Y2hHUFIpOwotICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIsICZtX3NjYWxlZExvZ0lu
ZGV4KTsKLSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2xvZyks
IHNjcmF0Y2hHUFIpOwotICAgIGppdC5zdG9yZVZhbHVlKGNhbGxlZVJlZ3MsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW50cnksIG1fdmFsdWUpKSk7
Ci0gICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmcHJvZmlsZSks
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW50cnks
IG1fcHJvZmlsZSkpKTsKLX0KLQotdm9pZCBDYWxsRWRnZUxvZzo6ZW1pdExvZ0NvZGUoCi0gICAg
Q0NhbGxIZWxwZXJzJiBqaXQsIE93blB0cjxDYWxsRWRnZVByb2ZpbGU+JiBwcm9maWxlUG9pbnRl
ciwgSlNWYWx1ZVJlZ3MgY2FsbGVlUmVncykKLXsKLSAgICBpZiAoIWlzRW5hYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgcHJvZmlsZVBvaW50ZXIuY3JlYXRlVHJhbnNhY3Rpb25h
bGx5KCk7Ci0gICAgZW1pdExvZ0NvZGUoaml0LCAqcHJvZmlsZVBvaW50ZXIsIGNhbGxlZVJlZ3Mp
OwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLQotdm9pZCBDYWxsRWRnZUxvZzo6cHJvY2Vz
c0xvZygpCi17Ci0gICAgQVNTRVJUKCEobV9zY2FsZWRMb2dJbmRleCAlIHNpemVvZihFbnRyeSkp
KTsKLSAgICAKLSAgICBpZiAoT3B0aW9uczo6Y2FsbEVkZ2VQcm9maWxlUmVhbGx5UHJvY2Vzc2Vz
TG9nKCkpIHsKLSAgICAgICAgQ2FsbEVkZ2VQcm9maWxlVmVjdG9yIG1lcmdlQmFja0xvZzsKLSAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fc2NhbGVkTG9nSW5kZXggLyBzaXpl
b2YoRW50cnkpOyBpIDwgbG9nU2l6ZTsgKytpKQotICAgICAgICAgICAgbV9sb2dbaV0ubV9wcm9m
aWxlLT5hZGQobV9sb2dbaV0ubV92YWx1ZSwgbWVyZ2VCYWNrTG9nKTsKLSAgICAgICAgCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1lcmdlQmFja0xvZy5zaXplKCk7IGktLTspCi0gICAgICAg
ICAgICBtZXJnZUJhY2tMb2dbaV0tPm1lcmdlQmFjaygpOwotICAgIH0KLSAgICAKLSAgICBtX3Nj
YWxlZExvZ0luZGV4ID0gbG9nU2l6ZSAqIHNpemVvZihFbnRyeSk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQ
cm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxFZGdlUHJvZmlsZS5oCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBDYWxsRWRnZVByb2ZpbGVfaAotI2RlZmluZSBDYWxsRWRnZVByb2ZpbGVfaAotCi0jaW5j
bHVkZSAiQ2FsbEVkZ2UuaCIKLSNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgotI2luY2x1ZGUgIkNv
bmN1cnJlbnRKSVRMb2NrLmgiCi0jaW5jbHVkZSAiR1BSSW5mby5oIgotI2luY2x1ZGUgIkpTQ2Vs
bC5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IENDYWxsSGVscGVyczsKLWNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotY2xhc3MgQ2Fs
bEVkZ2VMb2c7Ci1jbGFzcyBDYWxsRWRnZVByb2ZpbGU7Ci10eXBlZGVmIFZlY3RvcjxDYWxsRWRn
ZVByb2ZpbGUqLCAxMD4gQ2FsbEVkZ2VQcm9maWxlVmVjdG9yOwotCi1jbGFzcyBDYWxsRWRnZVBy
b2ZpbGUgewotcHVibGljOgotICAgIENhbGxFZGdlUHJvZmlsZSgpOwotICAgIAotICAgIENhbGxF
ZGdlQ291bnRUeXBlIG51bUNhbGxzVG9Ob3RDZWxsKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxs
c1RvTm90Q2VsbDsgfQotICAgIENhbGxFZGdlQ291bnRUeXBlIG51bUNhbGxzVG9Vbmtub3duQ2Vs
bCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FsbHNUb1Vua25vd25DZWxsOyB9Ci0gICAgQ2FsbEVk
Z2VDb3VudFR5cGUgbnVtQ2FsbHNUb0tub3duQ2VsbHMoKSBjb25zdDsKLSAgICAKLSAgICBDYWxs
RWRnZUNvdW50VHlwZSB0b3RhbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbENvdW50OyB9
Ci0gICAgCi0gICAgLy8gQ2FsbCB3aGlsZSBob2xkaW5nIHRoZSBvd25pbmcgQ29kZUJsb2NrJ3Mg
bG9jay4KLSAgICBDYWxsRWRnZUxpc3QgY2FsbEVkZ2VzKCkgY29uc3Q7Ci0gICAgCi0gICAgdm9p
ZCB2aXNpdFdlYWsoKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENhbGxFZGdl
TG9nOwotICAgIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhLbm93bkNhbGxlZXMgPSA1
OwotICAgIAotICAgIHZvaWQgYWRkKEpTVmFsdWUsIENhbGxFZGdlUHJvZmlsZVZlY3RvciYgbWVy
Z2VCYWNrTG9nKTsKLSAgICAKLSAgICBib29sIHdvcnRoRGVzcGVjaWZ5aW5nKCk7Ci0gICAgdm9p
ZCBhZGRTbG93KENhbGxWYXJpYW50LCBDYWxsRWRnZVByb2ZpbGVWZWN0b3ImIG1lcmdlQmFja0xv
Zyk7Ci0gICAgdm9pZCBtZXJnZUJhY2soKTsKLSAgICB2b2lkIGZhZGVCeUhhbGYoKTsKLSAgICAK
LSAgICAvLyBJdCdzIGNoZWFwZXIgdG8gbGV0IHRoaXMgaGF2ZSBpdHMgb3duIGxvY2suIEl0IG5l
ZWRzIHRvIGJlIGFibGUgdG8gZmluZCB3aGljaCBsb2NrIHRvCi0gICAgLy8gbG9jay4gTm9ybWFs
bHkgaXQgd291bGQgbG9jayB0aGUgb3duaW5nIENvZGVCbG9jaydzIGxvY2ssIGJ1dCB0aGF0IHdv
dWxkIHJlcXVpcmUgYQotICAgIC8vIHBvaW50ZXItd2lkdGggd29yZCB0byBwb2ludCBhdCB0aGUg
Q29kZUJsb2NrLiBIYXZpbmcgdGhlIGJ5dGUtc2l6ZWQgbG9jayBoZXJlIGlzCi0gICAgLy8gY2hl
YXBlci4gSG93ZXZlciwgdGhpcyBtZWFucyB0aGF0IHRoZSByZWxhdGlvbnNoaXAgd2l0aCB0aGUg
Q29kZUJsb2NrIGxvY2sgaXM6Ci0gICAgLy8gYWNxdWlyZSB0aGUgQ29kZUJsb2NrIGxvY2sgYmVm
b3JlIHRoaXMgb25lLgotICAgIG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOwotICAg
IAotICAgIGJvb2wgbV9jbG9zdXJlc0FyZURlc3BlY2lmaWVkOwotICAgIAotICAgIENhbGxFZGdl
Q291bnRUeXBlIG1fbnVtQ2FsbHNUb1ByaW1hcnk7Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV9u
dW1DYWxsc1RvTm90Q2VsbDsKLSAgICBDYWxsRWRnZUNvdW50VHlwZSBtX251bUNhbGxzVG9Vbmtu
b3duQ2VsbDsKLSAgICBDYWxsRWRnZUNvdW50VHlwZSBtX3RvdGFsQ291bnQ7Ci0gICAgQ2FsbFZh
cmlhbnQgbV9wcmltYXJ5Q2FsbGVlOwotICAgIAotICAgIHR5cGVkZWYgU3BlY3RydW08Q2FsbFZh
cmlhbnQsIENhbGxFZGdlQ291bnRUeXBlPiBDYWxsU3BlY3RydW07Ci0gICAgCi0gICAgc3RydWN0
IFNlY29uZGFyeSB7Ci0gICAgICAgIFZlY3RvcjxDYWxsRWRnZT4gbV9wcm9jZXNzZWQ7IC8vIFBy
b2Nlc3NlZCBidXQgbm90IG5lY2Vzc2FyaWx5IHNvcnRlZC4KLSAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPENhbGxTcGVjdHJ1bT4gbV90ZW1wb3JhcnlTcGVjdHJ1bTsKLSAgICB9OwotICAgIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxTZWNvbmRhcnk+IG1fb3RoZXJDYWxsZWVzOwotfTsKLQotY2xhc3Mg
Q2FsbEVkZ2VMb2cgewotcHVibGljOgotICAgIENhbGxFZGdlTG9nKCk7Ci0gICAgfkNhbGxFZGdl
TG9nKCk7Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0VuYWJsZWQoKTsKLSAgICAKLSNpZiBFTkFCTEUo
SklUKQotICAgIHZvaWQgZW1pdExvZ0NvZGUoQ0NhbGxIZWxwZXJzJiwgQ2FsbEVkZ2VQcm9maWxl
JiwgSlNWYWx1ZVJlZ3MgY2FsbGVlUmVncyk7IC8vIEFzc3VtZXMgdGhhdCBzdGFjayBpcyBhbGln
bmVkLCBhbGwgdm9sYXRpbGUgcmVnaXN0ZXJzIC0gb3RoZXIgdGhhbiBjYWxsZWVHUFIgLSBhcmUg
Y2xvYmJlcmFibGUsIGFuZCB0aGUgcGFyYW1ldGVyIHNwYWNlIGlzIGluIHVzZS4KLSAgICAKLSAg
ICAvLyBTYW1lIGFzIGFib3ZlIGJ1dCBjcmVhdGVzIGEgQ2FsbEVkZ2VQcm9maWxlIGluc3RhbmNl
IGlmIG9uZSBkaWQgbm90IGFscmVhZHkgZXhpc3QuIERvZXMKLSAgICAvLyB0aGlzIGluIGEgdGhy
ZWFkLXNhZmUgbWFubmVyIGJ5IGNhbGxpbmcgT3duUHRyOjpjcmVhdGVUcmFuc2FjdGlvbmFsbHku
Ci0gICAgdm9pZCBlbWl0TG9nQ29kZShDQ2FsbEhlbHBlcnMmLCBPd25QdHI8Q2FsbEVkZ2VQcm9m
aWxlPiYsIEpTVmFsdWVSZWdzIGNhbGxlZVJlZ3MpOwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0g
ICAgCi0gICAgdm9pZCBwcm9jZXNzTG9nKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bG9nU2l6ZSA9IDEwMDAwOwotICAgIAotICAgIHN0cnVjdCBFbnRyeSB7Ci0gICAgICAgIEpTVmFs
dWUgbV92YWx1ZTsKLSAgICAgICAgQ2FsbEVkZ2VQcm9maWxlKiBtX3Byb2ZpbGU7Ci0gICAgfTsK
LSAgICAKLSAgICB1bnNpZ25lZCBtX3NjYWxlZExvZ0luZGV4OwotICAgIEVudHJ5IG1fbG9nW2xv
Z1NpemVdOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBDYWxsRWRnZVBy
b2ZpbGVfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQ
cm9maWxlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgJKHJldmlzaW9uIDE3OTIyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENhbGxFZGdlUHJvZmlsZUlubGluZXNfaAotI2RlZmlu
ZSBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzX2gKLQotI2luY2x1ZGUgIkNhbGxFZGdlUHJvZmlsZS5o
IgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIENhbGxFZGdlUHJvZmlsZTo6Q2FsbEVkZ2VQ
cm9maWxlKCkKLSAgICA6IG1fY2xvc3VyZXNBcmVEZXNwZWNpZmllZChmYWxzZSkKLSAgICAsIG1f
bnVtQ2FsbHNUb1ByaW1hcnkoMCkKLSAgICAsIG1fbnVtQ2FsbHNUb05vdENlbGwoMCkKLSAgICAs
IG1fbnVtQ2FsbHNUb1Vua25vd25DZWxsKDApCi0gICAgLCBtX3RvdGFsQ291bnQoMCkKLSAgICAs
IG1fcHJpbWFyeUNhbGxlZShudWxscHRyKQotewotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgQ2Fs
bEVkZ2VQcm9maWxlOjphZGQoSlNWYWx1ZSB2YWx1ZSwgQ2FsbEVkZ2VQcm9maWxlVmVjdG9yJiBt
ZXJnZUJhY2tMb2cpCi17Ci0gICAgdW5zaWduZWQgbmV3VG90YWxDb3VudCA9IG1fdG90YWxDb3Vu
dCArIDE7Ci0gICAgaWYgKFVOTElLRUxZKCFuZXdUb3RhbENvdW50KSkgewotICAgICAgICBmYWRl
QnlIYWxmKCk7IC8vIFRhY2tsZSBvdmVyZmxvd3MgYnkgZGl2aWRpbmcgYWxsIGNvdW50cyBieSB0
d28uCi0gICAgICAgIG5ld1RvdGFsQ291bnQgPSBtX3RvdGFsQ291bnQgKyAxOwotICAgIH0KLSAg
ICBBU1NFUlQobmV3VG90YWxDb3VudCk7Ci0gICAgbV90b3RhbENvdW50ID0gbmV3VG90YWxDb3Vu
dDsKLSAgICAKLSAgICBpZiAoVU5MSUtFTFkoIXZhbHVlLmlzQ2VsbCgpKSkgewotICAgICAgICBt
X251bUNhbGxzVG9Ob3RDZWxsKys7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDYWxs
VmFyaWFudCBjYWxsZWUgPSBDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSk7Ci0gICAgCi0gICAg
aWYgKG1fY2xvc3VyZXNBcmVEZXNwZWNpZmllZCkKLSAgICAgICAgY2FsbGVlID0gY2FsbGVlLmRl
c3BlY2lmaWVkQ2xvc3VyZSgpOwotICAgIAotICAgIGlmIChVTkxJS0VMWSghbV9wcmltYXJ5Q2Fs
bGVlKSkgewotICAgICAgICBtX3ByaW1hcnlDYWxsZWUgPSBjYWxsZWU7Ci0gICAgICAgIG1fbnVt
Q2FsbHNUb1ByaW1hcnkgPSAxOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAg
ICBpZiAoTElLRUxZKG1fcHJpbWFyeUNhbGxlZSA9PSBjYWxsZWUpKSB7Ci0gICAgICAgIG1fbnVt
Q2FsbHNUb1ByaW1hcnkrKzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gICAg
aWYgKFVOTElLRUxZKCFtX290aGVyQ2FsbGVlcykpIHsKLSAgICAgICAgYWRkU2xvdyhjYWxsZWUs
IG1lcmdlQmFja0xvZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIENh
bGxTcGVjdHJ1bSogc2Vjb25kYXJ5ID0gbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3Ry
dW0uZ2V0KCk7Ci0gICAgaWYgKCFzZWNvbmRhcnkpIHsKLSAgICAgICAgYWRkU2xvdyhjYWxsZWUs
IG1lcmdlQmFja0xvZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIHNl
Y29uZGFyeS0+YWRkKGNhbGxlZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gQ2FsbEVkZ2VQcm9maWxlSW5saW5lc19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCShyZXZpc2lvbiAxNzkyMjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkRGR1RodW5rcy5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCisjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKICNpZiBFTkFC
TEUoSklUKQpAQCAtMzcsNyArMzgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbExp
bmtJbmZvOjp1bmxpbmsoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikKIHsKLSAgICBBU1NF
UlQoaXNMaW5rZWQoKSk7CisgICAgaWYgKCFpc0xpbmtlZCgpKSB7CisgICAgICAgIC8vIFdlIGNv
dWxkIGJlIGNhbGxlZCBldmVuIGlmIHdlJ3JlIG5vdCBsaW5rZWQgYW55bW9yZSBiZWNhdXNlIG9m
IGhvdyBwb2x5bW9ycGhpYyBjYWxscworICAgICAgICAvLyB3b3JrLiBFYWNoIGNhbGxzaXRlIHdp
dGhpbiB0aGUgcG9seW1vcnBoaWMgY2FsbCBzdHViIG1heSBzZXBhcmF0ZWx5IGFzayB1cyB0byB1
bmxpbmsoKS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzT25MaXN0KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogICAgIAogICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSkK
ICAgICAgICAgZGF0YUxvZygiVW5saW5raW5nIGNhbGwgZnJvbSAiLCBjYWxsUmV0dXJuTG9jYXRp
b24sICIgdG8gIiwgcG9pbnRlckR1bXAocmVwYXRjaEJ1ZmZlci5jb2RlQmxvY2soKSksICJcbiIp
OwpAQCAtNjEsMTIgKzY3LDEyIEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWsoUmVwYXRj
aEJ1ZmYKIHsKICAgICBpZiAoaXNMaW5rZWQoKSkgewogICAgICAgICBpZiAoc3R1YikgewotICAg
ICAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChzdHViLT5leGVjdXRhYmxlKCkpKSB7CisgICAg
ICAgICAgICBpZiAoIXN0dWItPnZpc2l0V2VhayhyZXBhdGNoQnVmZmVyKSkgewogICAgICAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygKICAgICAgICAgICAgICAgICAgICAgICAgICJDbGVhcmluZyBjbG9zdXJlIGNhbGwg
ZnJvbSAiLCAqcmVwYXRjaEJ1ZmZlci5jb2RlQmxvY2soKSwgIiB0byAiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgc3R1Yi0+ZXhlY3V0YWJsZSgpLT5oYXNoRm9yKHNwZWNpYWxpemF0aW9uS2lu
ZCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICIsIHN0dWIgcm91dGluZSAiLCBSYXdQb2lu
dGVyKHN0dWIuZ2V0KCkpLCAiLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0RHVt
cChzdHViLT52YXJpYW50cygpKSwgIiwgc3R1YiByb3V0aW5lICIsIFJhd1BvaW50ZXIoc3R1Yi5n
ZXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAiLlxuIik7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIHVubGluayhyZXBhdGNoQnVmZmVyKTsKICAgICAgICAgICAgIH0K
QEAgLTgzLDExICs4OSw2IEBAIHZvaWQgQ2FsbExpbmtJbmZvOjp2aXNpdFdlYWsoUmVwYXRjaEJ1
ZmYKICAgICB9CiAgICAgaWYgKCEhbGFzdFNlZW5DYWxsZWUgJiYgIUhlYXA6OmlzTWFya2VkKGxh
c3RTZWVuQ2FsbGVlLmdldCgpKSkKICAgICAgICAgbGFzdFNlZW5DYWxsZWUuY2xlYXIoKTsKLSAg
ICAKLSAgICBpZiAoY2FsbEVkZ2VQcm9maWxlKSB7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5j
ZSgpOwotICAgICAgICBjYWxsRWRnZVByb2ZpbGUtPnZpc2l0V2VhaygpOwotICAgIH0KIH0KIAog
Q2FsbExpbmtJbmZvJiBDYWxsTGlua0luZm86OmR1bW15KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHJldmlzaW9uIDE3OTIyMykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTMgKzI2LDEyIEBACiAjaWZuZGVmIENhbGxMaW5rSW5mb19oCiAjZGVmaW5l
IENhbGxMaW5rSW5mb19oCiAKLSNpbmNsdWRlICJDYWxsRWRnZVByb2ZpbGUuaCIKLSNpbmNsdWRl
ICJDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAj
aW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIkpJVFdyaXRlQmFy
cmllci5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKKyNp
bmNsdWRlICJQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvU2VudGluZWxM
aW5rZWRMaXN0Lmg+CkBAIC04Miw3ICs4MSw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJs
aWMgQmFzaWNSYXdTZW4KICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQYXRoT3RoZXI7CiAg
ICAgSklUV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsKICAgICBXcml0ZUJhcnJpZXI8
SlNGdW5jdGlvbj4gbGFzdFNlZW5DYWxsZWU7Ci0gICAgUmVmUHRyPENsb3N1cmVDYWxsU3R1YlJv
dXRpbmU+IHN0dWI7CisgICAgUmVmUHRyPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBzdHVi
OwogICAgIGJvb2wgaXNGVEwgOiAxOwogICAgIGJvb2wgaGFzU2VlblNob3VsZFJlcGF0Y2ggOiAx
OwogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAxOwpAQCAtOTAsNyArODksNiBAQCBzdHJ1Y3Qg
Q2FsbExpbmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgdW5zaWduZWQgY2FsbGVlR1BS
IDogODsKICAgICB1bnNpZ25lZCBzbG93UGF0aENvdW50OwogICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbjsKLSAgICBPd25QdHI8Q2FsbEVkZ2VQcm9maWxlPiBjYWxsRWRnZVByb2ZpbGU7CiAKICAg
ICBib29sIGlzTGlua2VkKCkgeyByZXR1cm4gc3R1YiB8fCBjYWxsZWU7IH0KICAgICB2b2lkIHVu
bGluayhSZXBhdGNoQnVmZmVyJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE3OTIyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDcsNyArNDcsNyBAQCBDYWxsTGlua1N0YXR1czo6Q2FsbExpbmtTdGF0
dXMoSlNWYWx1ZSB2CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgbV9lZGdlcy5h
cHBlbmQoQ2FsbEVkZ2UoQ2FsbFZhcmlhbnQodmFsdWUuYXNDZWxsKCkpLCAxKSk7CisgICAgbV92
YXJpYW50cy5hcHBlbmQoQ2FsbFZhcmlhbnQodmFsdWUuYXNDZWxsKCkpKTsKIH0KIAogQ2FsbExp
bmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCkBAIC0xMjgsMjMgKzEyOCw2IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5r
U3RhdHVzOjpjb21wdXRlRm8KICAgICAvLyBXZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzLCBidXQg
YW55dGltZSB3ZSBoYXZlIHRvIGRlYnVnIHRoaXMgY29kZSwgaXQgYmVjb21lcyBpbmRpc3BlbnNh
YmxlLgogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICAKLSAgICBpZiAoT3B0
aW9uczo6Y2FsbFN0YXR1c1Nob3VsZFVzZUNhbGxFZGdlUHJvZmlsZSgpKSB7Ci0gICAgICAgIC8v
IEFsd2F5cyB0cnVzdCB0aGUgY2FsbCBlZGdlIHByb2ZpbGUgb3ZlciBhbnl0aGluZyBlbHNlIHNp
bmNlIHRoaXMgaGFzIHByZWNpc2UgY291bnRzLgotICAgICAgICAvLyBJdCBjYW4gbWFrZSB0aGUg
YmVzdCBwb3NzaWJsZSBkZWNpc2lvbiBiZWNhdXNlIGl0IG5ldmVyICJmb3JnZXRzIiB3aGF0IGhh
cHBlbmVkIGZvciBhbnkKLSAgICAgICAgLy8gY2FsbCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGZh
ZGluZyBvdXQgdGhlIGNvdW50cyBvZiBvbGQgY2FsbHMgKGZvciBleGFtcGxlIGlmIHRoZQotICAg
ICAgICAvLyBjb3VudGVyIHR5cGUgaXMgMTYtYml0IHRoZW4gY2FsbHMgdGhhdCBoYXBwZW5lZCBt
b3JlIHRoYW4gMl4xNiBjYWxscyBhZ28gYXJlIGdpdmVuIGhhbGYKLSAgICAgICAgLy8gd2VpZ2h0
LCBhbmQgdGhpcyBjb21wb3VuZHMgZm9yIGV2ZXJ5IDJeMTUgW3NpY10gY2FsbHMgYWZ0ZXIgdGhh
dCkuIFRoZSBjb21iaW5hdGlvbiBvZgotICAgICAgICAvLyBoaWdoIGZpZGVsaXR5IGZvciByZWNl
bnQgY2FsbHMgYW5kIGZhZGluZyBmb3Igb2xkZXIgY2FsbHMgbWFrZXMgdGhpcyB0aGUgbW9zdCB1
c2VmdWwKLSAgICAgICAgLy8gbWVjaGFtaXNtIG9mIGNob29zaW5nIGhvdyB0byBvcHRpbWl6ZSBm
dXR1cmUgY2FsbHMuCi0gICAgICAgIENhbGxFZGdlUHJvZmlsZSogZWRnZVByb2ZpbGUgPSBjYWxs
TGlua0luZm8uY2FsbEVkZ2VQcm9maWxlLmdldCgpOwotICAgICAgICBXVEY6OmxvYWRMb2FkRmVu
Y2UoKTsKLSAgICAgICAgaWYgKGVkZ2VQcm9maWxlKSB7Ci0gICAgICAgICAgICBDYWxsTGlua1N0
YXR1cyByZXN1bHQgPSBjb21wdXRlRnJvbUNhbGxFZGdlUHJvZmlsZShlZGdlUHJvZmlsZSk7Ci0g
ICAgICAgICAgICBpZiAoISFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICByZXR1cm4gY29tcHV0ZUZyb21DYWxsTGlua0lu
Zm8obG9ja2VyLCBjYWxsTGlua0luZm8pOwogfQogCkBAIC0xNjcsOCArMTUwLDE2IEBAIENhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnIKICAgICBpZiAoY2FsbExpbmtJbmZv
LnNsb3dQYXRoQ291bnQgPj0gT3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQo
KSkKICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAgICAKLSAgICBpZiAoQ2xvc3Vy
ZUNhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViLmdldCgpKQotICAgICAg
ICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoc3R1Yi0+ZXhlY3V0YWJsZSgpKTsKKyAgICAvLyBQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZSBpcyBhIEdDQXdhcmVKSVRTdHViUm91dGluZSwgc28gaWYg
bm9uLW51bGwsIGl0IHdpbGwgc3RheSBhbGl2ZQorICAgIC8vIHVudGlsIG5leHQgR0MgZXZlbiBp
ZiB0aGUgQ2FsbExpbmtJbmZvIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkLiBBbHNvLCB0aGUgdmFy
aWFudHMgbGlzdCBpcworICAgIC8vIG5ldmVyIG11dGF0ZWQgYWZ0ZXIgdGhlIFBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lIGlzIGluc3RhbnRpYXRlZC4gV2UgaGF2ZSBzb21lIGNvbnNlcnZhdGl2
ZQorICAgIC8vIGZlbmNpbmcgaW4gcGxhY2UgdG8gbWFrZSBzdXJlIHRoYXQgd2Ugc2VlIHRoZSB2
YXJpYW50cyBsaXN0IGFmdGVyIGNvbnN0cnVjdGlvbi4KKyAgICBpZiAoUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8uc3R1Yi5nZXQoKSkgeworICAgICAgICBX
VEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgQ2FsbExpbmtTdGF0dXMgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV92YXJpYW50cyA9IHN0dWItPnZhcmlhbnRzKCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQogICAgIAogICAgIEpTRnVuY3Rpb24qIHRhcmdldCA9IGNhbGxMaW5r
SW5mby5sYXN0U2VlbkNhbGxlZS5nZXQoKTsKICAgICBpZiAoIXRhcmdldCkKQEAgLTE4MCwzNCAr
MTcxLDYgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcgogICAgIHJl
dHVybiBDYWxsTGlua1N0YXR1cyh0YXJnZXQpOwogfQogCi1DYWxsTGlua1N0YXR1cyBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUZyb21DYWxsRWRnZVByb2ZpbGUoQ2FsbEVkZ2VQcm9maWxlKiBlZGdl
UHJvZmlsZSkKLXsKLSAgICAvLyBJbiBjYXNlcyB3aGVyZSB0aGUgY2FsbCBlZGdlIHByb2ZpbGUg
c2F3IG5vdGhpbmcsIHVzZSB0aGUgQ2FsbExpbmtJbmZvIGluc3RlYWQuCi0gICAgaWYgKCFlZGdl
UHJvZmlsZS0+dG90YWxDYWxscygpKQotICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsK
LSAgICAKLSAgICAvLyBUbyBkbyBhbnl0aGluZyBtZWFuaW5nZnVsLCB3ZSByZXF1aXJlIHRoYXQg
dGhlIG1ham9yaXR5IG9mIGNhbGxzIGFyZSB0byBzb21ldGhpbmcgd2UKLSAgICAvLyBrbm93IGhv
dyB0byBoYW5kbGUuCi0gICAgdW5zaWduZWQgbnVtQ2FsbHNUb0tub3duID0gZWRnZVByb2ZpbGUt
Pm51bUNhbGxzVG9Lbm93bkNlbGxzKCk7Ci0gICAgdW5zaWduZWQgbnVtQ2FsbHNUb1Vua25vd24g
PSBlZGdlUHJvZmlsZS0+bnVtQ2FsbHNUb05vdENlbGwoKSArIGVkZ2VQcm9maWxlLT5udW1DYWxs
c1RvVW5rbm93bkNlbGwoKTsKLSAgICAKLSAgICAvLyBXZSByZXF1aXJlIHRoYXQgdGhlIG1ham9y
aXR5IG9mIGNhbGxzIHdlcmUgdG8gc29tZXRoaW5nIHRoYXQgd2UgY291bGQgcG9zc2libHkgaW5s
aW5lLgotICAgIGlmIChudW1DYWxsc1RvS25vd24gPD0gbnVtQ2FsbHNUb1Vua25vd24pCi0gICAg
ICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7Ci0gICAgCi0gICAgLy8gV2UgcmVxdWlyZSB0aGF0
IHRoZSBudW1iZXIgb2Ygc3VjaCBjYWxscyBpcyBncmVhdGVyIHRoYW4gc29tZSBtaW5pbWFsIHRo
cmVzaG9sZCwgc28gdGhhdCB3ZQotICAgIC8vIGF2b2lkIGlubGluaW5nIGNvbXBsZXRlbHkgY29s
ZCBjYWxscy4KLSAgICBpZiAobnVtQ2FsbHNUb0tub3duIDwgT3B0aW9uczo6ZnJlcXVlbnRDYWxs
VGhyZXNob2xkKCkpCi0gICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7Ci0gICAgCi0gICAg
Q2FsbExpbmtTdGF0dXMgcmVzdWx0OwotICAgIHJlc3VsdC5tX2VkZ2VzID0gZWRnZVByb2ZpbGUt
PmNhbGxFZGdlcygpOwotICAgIHJlc3VsdC5tX2NvdWxkVGFrZVNsb3dQYXRoID0gISFudW1DYWxs
c1RvVW5rbm93bjsKLSAgICByZXN1bHQubV9jYW5UcnVzdENvdW50cyA9IHRydWU7Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVGb3IoCiAgICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2ssIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLAogICAgIEV4aXRT
aXRlRGF0YSBleGl0U2l0ZURhdGEpCkBAIC0yODEsOCArMjQ0LDggQEAgQ2FsbExpbmtTdGF0dXMg
Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwogCiBib29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1
cmVDYWxsKCkgY29uc3QKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2VkZ2VzLnNpemUoKTsg
aS0tOykgewotICAgICAgICBpZiAobV9lZGdlc1tpXS5jYWxsZWUoKS5pc0Nsb3N1cmVDYWxsKCkp
CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgaWYgKG1fdmFyaWFudHNbaV0uaXNDbG9zdXJlQ2FsbCgpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTI5MCwxOCArMjUzLDcgQEAgYm9v
bCBDYWxsTGlua1N0YXR1czo6aXNDbG9zdXJlQ2FsbCgpIGNvbgogCiB2b2lkIENhbGxMaW5rU3Rh
dHVzOjptYWtlQ2xvc3VyZUNhbGwoKQogewotICAgIEFTU0VSVCghbV9pc1Byb3ZlZCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9lZGdlcy5zaXplKCk7IGktLTspCi0gICAgICAgIG1fZWRnZXNb
aV0gPSBtX2VkZ2VzW2ldLmRlc3BlY2lmaWVkQ2xvc3VyZSgpOwotICAgIAotICAgIGlmICghQVNT
RVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgIC8vIERvaW5nIHRoaXMgc2hvdWxkIG5vdCBoYXZlIGNy
ZWF0ZWQgZHVwbGljYXRlcywgYmVjYXVzZSB0aGUgQ2FsbEVkZ2VQcm9maWxlCi0gICAgICAgIC8v
IHNob3VsZCBkZXNwZWNpZnkgY2xvc3VyZXMgaWYgZG9pbmcgc28gd291bGQgcmVkdWNlIHRoZSBu
dW1iZXIgb2Yga25vd24gY2FsbGVlcy4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fZWRnZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkg
KyAxOyBqIDwgbV9lZGdlcy5zaXplKCk7ICsraikKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9l
ZGdlc1tpXS5jYWxsZWUoKSAhPSBtX2VkZ2VzW2pdLmNhbGxlZSgpKTsKLSAgICAgICAgfQotICAg
IH0KKyAgICBtX3ZhcmlhbnRzID0gZGVzcGVjaWZpZWRWYXJpYW50TGlzdChtX3ZhcmlhbnRzKTsK
IH0KIAogdm9pZCBDYWxsTGlua1N0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApA
QCAtMzE5LDcgKzI3MSw4IEBAIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0m
IG8KICAgICBpZiAobV9jb3VsZFRha2VTbG93UGF0aCkKICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiQ291bGQgVGFrZSBTbG93IFBhdGgiKTsKICAgICAKLSAgICBvdXQucHJpbnQobGlzdER1bXAo
bV9lZGdlcykpOworICAgIGlmICghbV92YXJpYW50cy5pc0VtcHR5KCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgbGlzdER1bXAobV92YXJpYW50cykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0
YXR1cy5oCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3
IEBACiAjZGVmaW5lIENhbGxMaW5rU3RhdHVzX2gKIAogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5o
IgorI2luY2x1ZGUgIkNhbGxWYXJpYW50LmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2lu
Y2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklU
TG9jay5oIgpAQCAtNDgsNyArNDksNiBAQCBwdWJsaWM6CiAgICAgQ2FsbExpbmtTdGF0dXMoKQog
ICAgICAgICA6IG1fY291bGRUYWtlU2xvd1BhdGgoZmFsc2UpCiAgICAgICAgICwgbV9pc1Byb3Zl
ZChmYWxzZSkKLSAgICAgICAgLCBtX2NhblRydXN0Q291bnRzKGZhbHNlKQogICAgIHsKICAgICB9
CiAgICAgCkBAIC02MiwxMCArNjIsOSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ2FsbExpbmtT
dGF0dXMoSlNWYWx1ZSk7CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0dXMoQ2FsbFZhcmlhbnQgdmFy
aWFudCkKLSAgICAgICAgOiBtX2VkZ2VzKDEsIENhbGxFZGdlKHZhcmlhbnQsIDEpKQorICAgICAg
ICA6IG1fdmFyaWFudHMoMSwgdmFyaWFudCkKICAgICAgICAgLCBtX2NvdWxkVGFrZVNsb3dQYXRo
KGZhbHNlKQogICAgICAgICAsIG1faXNQcm92ZWQoZmFsc2UpCi0gICAgICAgICwgbV9jYW5UcnVz
dENvdW50cyhmYWxzZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtMTA5LDE5ICsxMDgsMTggQEAg
cHVibGljOgogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBD
b2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBjb25zdCBDYWxsTGlua0luZm9NYXAmLCBjb25zdCBDb250
ZXh0TWFwJik7CiAgICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICFtX2VkZ2Vz
LmlzRW1wdHkoKSB8fCBtX2NvdWxkVGFrZVNsb3dQYXRoOyB9CisgICAgYm9vbCBpc1NldCgpIGNv
bnN0IHsgcmV0dXJuICFtX3ZhcmlhbnRzLmlzRW1wdHkoKSB8fCBtX2NvdWxkVGFrZVNsb3dQYXRo
OyB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsg
fQogICAgIAogICAgIGJvb2wgY291bGRUYWtlU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX2Nv
dWxkVGFrZVNsb3dQYXRoOyB9CiAgICAgCi0gICAgQ2FsbEVkZ2VMaXN0IGVkZ2VzKCkgY29uc3Qg
eyByZXR1cm4gbV9lZGdlczsgfQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2VkZ2VzLnNpemUoKTsgfQotICAgIENhbGxFZGdlIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0
dXJuIG1fZWRnZXNbaV07IH0KLSAgICBDYWxsRWRnZSBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIGF0KGkpOyB9CisgICAgQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRzKCkgY29u
c3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQorICAgIENhbGxWYXJpYW50IGF0KHVuc2lnbmVkIGkp
IGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaV07IH0KKyAgICBDYWxsVmFyaWFudCBvcGVyYXRv
cltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgYm9vbCBpc1Byb3Zl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNQcm92ZWQ7IH0KLSAgICBib29sIGNhbk9wdGltaXplKCkg
Y29uc3QgeyByZXR1cm4gIW1fZWRnZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBjYW5UcnVzdENv
dW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FuVHJ1c3RDb3VudHM7IH0KKyAgICBib29sIGNhbk9w
dGltaXplKCkgY29uc3QgeyByZXR1cm4gIW1fdmFyaWFudHMuaXNFbXB0eSgpOyB9CiAgICAgCiAg
ICAgYm9vbCBpc0Nsb3N1cmVDYWxsKCkgY29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2Fs
bGVlIGlzIGEgY2xvc3VyZSBjYWxsLgogICAgIApAQCAtMTMyLDE1ICsxMzAsMTMgQEAgcHJpdmF0
ZToKICAgICAKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZyb21MTEludChjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZy
b21DYWxsRWRnZVByb2ZpbGUoQ2FsbEVkZ2VQcm9maWxlKik7CiAgICAgc3RhdGljIENhbGxMaW5r
U3RhdHVzIGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKAogICAgICAgICBjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiwgQ2FsbExpbmtJbmZvJik7CiAjZW5kaWYKICAgICAKLSAgICBDYWxsRWRnZUxp
c3QgbV9lZGdlczsKKyAgICBDYWxsVmFyaWFudExpc3QgbV92YXJpYW50czsKICAgICBib29sIG1f
Y291bGRUYWtlU2xvd1BhdGg7CiAgICAgYm9vbCBtX2lzUHJvdmVkOwotICAgIGJvb2wgbV9jYW5U
cnVzdENvdW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxNzkyMjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01MCw1ICs1MCwzNCBAQCB2b2lkIENhbGxWYXJpYW50OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpCiAgICAgb3V0LnByaW50KCJFeGVjdXRhYmxlOiAiLCAqZXhlY3V0YWJsZSgpKTsK
IH0KIAorQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQoY29uc3QgQ2FsbFZh
cmlhbnRMaXN0JiBsaXN0LCBDYWxsVmFyaWFudCB2YXJpYW50VG9BZGQpCit7CisgICAgQVNTRVJU
KHZhcmlhbnRUb0FkZCk7CisgICAgQ2FsbFZhcmlhbnRMaXN0IHJlc3VsdDsKKyAgICBmb3IgKENh
bGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KSB7CisgICAgICAgIEFTU0VSVCh2YXJpYW50KTsKKyAg
ICAgICAgaWYgKCEhdmFyaWFudFRvQWRkKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudCA9PSB2
YXJpYW50VG9BZGQpCisgICAgICAgICAgICAgICAgdmFyaWFudFRvQWRkID0gQ2FsbFZhcmlhbnQo
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhcmlhbnQuZGVzcGVjaWZpZWRDbG9zdXJlKCkgPT0g
dmFyaWFudFRvQWRkLmRlc3BlY2lmaWVkQ2xvc3VyZSgpKSB7CisgICAgICAgICAgICAgICAgdmFy
aWFudCA9IHZhcmlhbnQuZGVzcGVjaWZpZWRDbG9zdXJlKCk7CisgICAgICAgICAgICAgICAgdmFy
aWFudFRvQWRkID0gQ2FsbFZhcmlhbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByZXN1bHQuYXBwZW5kKHZhcmlhbnQpOworICAgIH0KKyAgICBpZiAoISF2YXJpYW50VG9B
ZGQpCisgICAgICAgIHJlc3VsdC5hcHBlbmQodmFyaWFudFRvQWRkKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitDYWxsVmFyaWFudExpc3QgZGVzcGVjaWZpZWRWYXJpYW50TGlzdChjb25zdCBD
YWxsVmFyaWFudExpc3QmIGxpc3QpCit7CisgICAgQ2FsbFZhcmlhbnRMaXN0IHJlc3VsdDsKKyAg
ICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KQorICAgICAgICByZXN1bHQgPSB2YXJp
YW50TGlzdFdpdGhWYXJpYW50KHJlc3VsdCwgdmFyaWFudC5kZXNwZWNpZmllZENsb3N1cmUoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5oCShyZXZpc2lvbiAx
NzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTYsMTEgKzU2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyAgICAgdGhh
biB0aGUgZmFjdCB0aGF0IHRoZXkgZG9uJ3QgZmFsbCBpbnRvIGFueSBvZiB0aGUgYWJvdmUgY2F0
ZWdvcmllcy4KIC8vCiAvLyBUaGlzIGNsYXNzIHNlcnZlcyBhcyBhIGtpbmQgb2YgdW5pb24gb3Zl
ciB0aGVzZSBmb3VyIHRoaW5ncy4gSXQgZG9lcyBzbyBieSBqdXN0IGhvbGRpbmcgYQotLy8gSlND
ZWxsKi4gV2UgZGV0ZXJtaW5lIHdoaWNoIG9mIHRoZSBtb2RlcyBpdHMgaW4gYnkgZG9pbmcgdHlw
ZSBjaGVja3Mgb24gdGhlIGNlbGwuIE5vdGUgdGhhdCB0aGVyZQotLy8gaXMgbm8gbGlmZWN5Y2xl
IG1hbmFnZW1lbnQgZm9yIHRoZSBjZWxsIGJlY2F1c2UgdGhpcyBjbGFzcyBpcyBhbHdheXMgdXNl
ZCBpbiBjb250ZXh0cyB3aGVyZSB3ZQotLy8gZWl0aGVyIGRvIGN1c3RvbSB3ZWFrIHJlZmVyZW5j
ZSBsb2dpYyBvdmVyIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIChzZWUgQ2FsbEVkZ2VQcm9maWxl
KSwgb3Igd2UKLS8vIGFyZSBpbnNpZGUgdGhlIGNvbXBpbGVyIGFuZCB3ZSBhc3N1bWUgdGhhdCB0
aGUgY29tcGlsZXIgcnVucyBpbiBiZXR3ZWVuIGNvbGxlY3Rpb25zIGFuZCBzbyBjYW4KLS8vIHRv
dWNoIHRoZSBoZWFwIHdpdGhvdXQgbm90aWZ5aW5nIGFueW9uZS4KKy8vIEpTQ2VsbCouIFdlIGRl
dGVybWluZSB3aGljaCBvZiB0aGUgbW9kZXMgaXRzIGluIGJ5IGRvaW5nIHR5cGUgY2hlY2tzIG9u
IHRoZSBjZWxsLiBOb3RlIHRoYXQgd2UKKy8vIGNhbm5vdCB1c2UgV3JpdGVCYXJyaWVyPD4gaGVy
ZSBiZWNhdXNlIHRoaXMgZ2V0cyB1c2VkIGluc2lkZSB0aGUgY29tcGlsZXIuCiAKIGNsYXNzIENh
bGxWYXJpYW50IHsKIHB1YmxpYzoKQEAgLTE4MSw2ICsxNzgsMTMgQEAgc3RydWN0IENhbGxWYXJp
YW50SGFzaCB7CiAKIHR5cGVkZWYgVmVjdG9yPENhbGxWYXJpYW50LCAxPiBDYWxsVmFyaWFudExp
c3Q7CiAKKy8vIFJldHVybnMgYSBuZXcgdmFyaWFudCBsaXN0IGJ5IGF0dGVtcHRpbmcgdG8gZWl0
aGVyIGFwcGVuZCB0aGUgZ2l2ZW4gdmFyaWFudCBvciBtZXJnZSBpdCB3aXRoIG9uZQorLy8gb2Yg
dGhlIHZhcmlhbnRzIHdlIGFscmVhZHkgaGF2ZSBieSBkZXNwZWNpZnlpbmcgY2xvc3VyZXMuCitD
YWxsVmFyaWFudExpc3QgdmFyaWFudExpc3RXaXRoVmFyaWFudChjb25zdCBDYWxsVmFyaWFudExp
c3QmLCBDYWxsVmFyaWFudCk7CisKKy8vIFJldHVybnMgYSBuZXcgbGlzdCB3aGVyZSBldmVyeSBl
bGVtZW50IGlzIGRlc3BlY2lmaWVkLCBhbmQgdGhlIGxpc3QgaXMgZGVkdXBsaWNhdGVkLgorQ2Fs
bFZhcmlhbnRMaXN0IGRlc3BlY2lmaWVkVmFyaWFudExpc3QoY29uc3QgQ2FsbFZhcmlhbnRMaXN0
Jik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNzky
MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTAsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxj
d3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjE4MSw2ICsyMTgx
LDggQEAgQ29kZUJsb2NrOjp+Q29kZUJsb2NrKCkKICAgICAvLyBkZXN0cnVjdG9yIHdpbGwgdHJ5
IHRvIHJlbW92ZSBub2RlcyBmcm9tIG91ciAobm8gbG9uZ2VyIHZhbGlkKSBsaW5rZWQgbGlzdC4K
ICAgICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVu
ZCgpKQogICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+cmVtb3ZlKCk7CisgICAgd2hp
bGUgKG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ1BvbHlt
b3JwaGljQ2FsbHMuZW5kKCkpCisgICAgICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJl
Z2luKCktPnJlbW92ZSgpOwogICAgIAogICAgIC8vIE5vdGUgdGhhdCBvdXIgb3V0Z29pbmcgY2Fs
bHMgd2lsbCBiZSByZW1vdmVkIGZyb20gb3RoZXIgQ29kZUJsb2NrcycKICAgICAvLyBtX2luY29t
aW5nQ2FsbHMgbGlua2VkIGxpc3RzIHRocm91Z2ggdGhlIGV4ZWN1dGlvbiBvZiB0aGUgfkNhbGxM
aW5rSW5mbwpAQCAtMzA0Nyw2ICszMDQ5LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21p
bmdDYWxsKEV4ZWNTdGEKICAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwogICAg
IG1faW5jb21pbmdDYWxscy5wdXNoKGluY29taW5nKTsKIH0KKwordm9pZCBDb2RlQmxvY2s6Omxp
bmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBQb2x5bW9y
cGhpY0NhbGxOb2RlKiBpbmNvbWluZykKK3sKKyAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVy
RnJhbWUpOworICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLnB1c2goaW5jb21pbmcpOwor
fQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWlu
Z0NhbGxzKCkKQEAgLTMwNTQsMTEgKzMwNjIsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnVubGlua0lu
Y29taW5nQ2FsbHMoKQogICAgIHdoaWxlIChtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpICE9
IG1faW5jb21pbmdMTEludENhbGxzLmVuZCgpKQogICAgICAgICBtX2luY29taW5nTExJbnRDYWxs
cy5iZWdpbigpLT51bmxpbmsoKTsKICNpZiBFTkFCTEUoSklUKQotICAgIGlmIChtX2luY29taW5n
Q2FsbHMuaXNFbXB0eSgpKQorICAgIGlmIChtX2luY29taW5nQ2FsbHMuaXNFbXB0eSgpICYmIG1f
aW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcih0aGlzKTsKICAgICB3aGlsZSAobV9pbmNvbWlu
Z0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQogICAgICAgICBtX2luY29t
aW5nQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHJlcGF0Y2hCdWZmZXIpOworICAgIHdoaWxlIChtX2lu
Y29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdQb2x5bW9ycGhpY0Nh
bGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpLT51
bmxpbmsocmVwYXRjaEJ1ZmZlcik7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIApAQCAtMzI1
MiwxMiArMzI2MiwxOSBAQCB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKEV4ZWNT
CiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2Nr
KCk7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQotICAgICAgICBk
YXRhTG9nKCJOb3RpY2luZyBjYWxsIGxpbmsgZnJvbSAiLCAqY2FsbGVyQ29kZUJsb2NrLCAiIHRv
ICIsICp0aGlzLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiTm90aWNpbmcgY2FsbCBsaW5rIGZy
b20gIiwgcG9pbnRlckR1bXAoY2FsbGVyQ29kZUJsb2NrKSwgIiB0byAiLCAqdGhpcywgIlxuIik7
CiAgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKCFtX3Nob3VsZEFsd2F5c0JlSW5s
aW5lZCkKICAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghY2FsbGVyQ29kZUJsb2NrKSB7
CisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGlmIChP
cHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVh
cmluZyBTQUJJIGJlY2F1c2UgY2FsbGVyIGlzIG5hdGl2ZS5cbiIpOworICAgICAgICByZXR1cm47
CisgICAgfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKCFoYXNCYXNlbGluZUpJVFBy
b2ZpbGluZygpKQogICAgICAgICByZXR1cm47CiAKQEAgLTMyODUsNiArMzMwMiwxMyBAQCB2b2lk
IENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKEV4ZWNTCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCisgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxv
Y2stPmppdFR5cGUoKSkpIHsKKyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQorICAgICAgICAgICAg
ZGF0YUxvZygiICAgIENsZWFyaW5nIFNBQkkgYmNhdXNlIGNhbGxlciB3YXMgYWxyZWFkeSBvcHRp
bWl6ZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBpZiAoY2FsbGVy
Q29kZUJsb2NrLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICAvLyBJZiB0
aGUgY2FsbGVyIGlzIGVpdGhlciBldmFsIG9yIGdsb2JhbCBjb2RlLCBhc3N1bWUgdGhhdCB0aGF0
IHdvbid0IGJlCiAgICAgICAgIC8vIG9wdGltaXplZCBhbnl0aW1lIHNvb24uIEZvciBldmFsIGNv
ZGUgdGhpcyBpcyBwYXJ0aWN1bGFybHkgdHJ1ZSBzaW5jZSB3ZQpAQCAtMzMwNSw4ICszMzI5LDEx
IEBAIHZvaWQgQ29kZUJsb2NrOjpub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1MKICAgICAgICAgbV9z
aG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQot
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlckNvZGVCbG9jay0+bV9jYXBhYmlsaXR5TGV2ZWxTdGF0
ZSAhPSBERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCk7CisgICAgCisgICAgaWYgKGNhbGxlckNv
ZGVCbG9jay0+bV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA9PSBERkc6OkNhcGFiaWxpdHlMZXZlbE5v
dFNldCkgeworICAgICAgICBkYXRhTG9nKCJJbiBjYWxsIGZyb20gIiwgKmNhbGxlckNvZGVCbG9j
aywgIiAiLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpLCAiIHRvICIsICp0aGlzLCAiOiBjYWxs
ZXIncyBERkcgY2FwYWJpbGl0eSBsZXZlbCBpcyBub3Qgc2V0LlxuIik7CisgICAgICAgIENSQVNI
KCk7CisgICAgfQogICAgIAogICAgIGlmIChjYW5Db21waWxlKGNhbGxlckNvZGVCbG9jay0+bV9j
YXBhYmlsaXR5TGV2ZWxTdGF0ZSkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE3OTIyMykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMjI5LDExICsyMjksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bmxpbmtDYWxscygpOwogICAg
ICAgICAKICAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwg
Q2FsbExpbmtJbmZvKik7Ci0gICAgICAgIAotICAgIGJvb2wgaXNJbmNvbWluZ0NhbGxBbHJlYWR5
TGlua2VkKENhbGxMaW5rSW5mbyogaW5jb21pbmcpCi0gICAgewotICAgICAgICByZXR1cm4gbV9p
bmNvbWluZ0NhbGxzLmlzT25MaXN0KGluY29taW5nKTsKLSAgICB9CisgICAgdm9pZCBsaW5rSW5j
b21pbmdQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWND
YWxsTm9kZSopOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKICAgICB2b2lkIGxpbmtJbmNvbWlu
Z0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qKTsKQEAgLTEw
NzcsNiArMTA3Myw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZhbElu
Zm9zOwogICAgIEJhZzxDYWxsTGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICBTZW50aW5l
bExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0lu
Zm8+PiBtX2luY29taW5nQ2FsbHM7CisgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGlj
Q2FsbE5vZGUsIEJhc2ljUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2lu
Y29taW5nUG9seW1vcnBoaWNDYWxsczsKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21w
YWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOwogI2lmIEVOQUJMRShERkdfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTY4LDE0ICsxOTY4LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFr
OwogCi0gICAgY2FzZSBQcm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoK
LSAgICAgICAgaWYgKGZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkubV92YWx1
ZSkKLSAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAg
ICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBj
YXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKICAgICAgICAgbV9zdGF0
ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKICAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0y
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjc1LDcgKzY3NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChwYXJh
bWV0ZXJTbG90cyA+IG1fcGFyYW1ldGVyU2xvdHMpCiAgICAgICAgICAgICBtX3BhcmFtZXRlclNs
b3RzID0gcGFyYW1ldGVyU2xvdHM7CiAKLSAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0g
b3AgPT0gQ2FsbCB8fCBvcCA9PSBOYXRpdmVDYWxsIHx8IG9wID09IFByb2ZpbGVkQ2FsbCA/IDAg
OiAxOworICAgICAgICBpbnQgZHVtbXlUaGlzQXJndW1lbnQgPSBvcCA9PSBDYWxsIHx8IG9wID09
IE5hdGl2ZUNhbGwgPyAwIDogMTsKICAgICAgICAgZm9yIChpbnQgaSA9IDAgKyBkdW1teVRoaXNB
cmd1bWVudDsgaSA8IGFyZ0NvdW50OyArK2kpCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAKQEAg
LTEwNDQsMTcgKzEwNDQsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAg
IGlmIChjYWxsVGFyZ2V0LT5oYXNDb25zdGFudCgpKQogICAgICAgICBjYWxsTGlua1N0YXR1cyA9
IENhbGxMaW5rU3RhdHVzKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKS5zZXRJc1Byb3ZlZCh0cnVl
KTsKICAgICAKLSAgICBpZiAoKCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpIHx8IGNhbGxM
aW5rU3RhdHVzLnNpemUoKSAhPSAxKQotICAgICAgICAmJiAhaXNGVEwobV9ncmFwaC5tX3BsYW4u
bW9kZSkgJiYgT3B0aW9uczo6dXNlRlRMSklUKCkKLSAgICAgICAgJiYgSW5saW5lQ2FsbEZyYW1l
Ojppc05vcm1hbENhbGwoa2luZCkKLSAgICAgICAgJiYgQ2FsbEVkZ2VMb2c6OmlzRW5hYmxlZCgp
Ci0gICAgICAgICYmIE9wdGlvbnM6OmRmZ0RvZXNDYWxsRWRnZVByb2ZpbGluZygpKSB7Ci0gICAg
ICAgIEFTU0VSVChvcCA9PSBDYWxsIHx8IG9wID09IENvbnN0cnVjdCk7Ci0gICAgICAgIGlmIChv
cCA9PSBDYWxsKQotICAgICAgICAgICAgb3AgPSBQcm9maWxlZENhbGw7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG9wID0gUHJvZmlsZWRDb25zdHJ1Y3Q7Ci0gICAgfQorICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCisgICAgICAgIGRhdGFMb2coIiAgICBI
YW5kbGluZyBjYWxsIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIGNhbGxMaW5rU3Rh
dHVzLCAiXG4iKTsKICAgICAKICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkp
IHsKICAgICAgICAgLy8gT2RkbHksIHRoaXMgY29uZmxhdGVzIGNhbGxzIHRoYXQgaGF2ZW4ndCBl
eGVjdXRlZCB3aXRoIGNhbGxzIHRoYXQgYmVoYXZlZCBzdWZmaWNpZW50bHkgcG9seW1vcnBoaWNh
bGx5CkBAIC0xMDc2LDE3ICsxMDY3LDE3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNh
bGwoCiAgICAgCiAjaWYgRU5BQkxFKEZUTF9OQVRJVkVfQ0FMTF9JTkxJTklORykKICAgICBpZiAo
aXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkgJiYgT3B0aW9uczo6b3B0aW1pemVOYXRpdmVDYWxs
cygpICYmIGNhbGxMaW5rU3RhdHVzLnNpemUoKSA9PSAxICYmICFjYWxsTGlua1N0YXR1cy5jb3Vs
ZFRha2VTbG93UGF0aCgpKSB7Ci0gICAgICAgIENhbGxWYXJpYW50IGNhbGxlZSA9IGNhbGxMaW5r
U3RhdHVzWzBdLmNhbGxlZSgpOworICAgICAgICBDYWxsVmFyaWFudCBjYWxsZWUgPSBjYWxsTGlu
a1N0YXR1c1swXTsKICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsZWUuZnVuY3Rp
b24oKTsKICAgICAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQg
PSBJbmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5kKTsKICAgICAgICAg
aWYgKGZ1bmN0aW9uICYmIGZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKSB7CiAgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbGVlLCBjYWxsVGFyZ2V0LCByZWdpc3Rlck9mZnNldCwg
c3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAgICAgICAgIGNhbGxPcEluZm8gPSBPcEluZm8obV9n
cmFwaC5mcmVlemUoZnVuY3Rpb24pKTsKIAotICAgICAgICAgICAgaWYgKG9wID09IENhbGwgfHwg
b3AgPT0gUHJvZmlsZWRDYWxsKQorICAgICAgICAgICAgaWYgKG9wID09IENhbGwpCiAgICAgICAg
ICAgICAgICAgb3AgPSBOYXRpdmVDYWxsOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKG9wID09IENvbnN0cnVjdCB8fCBvcCA9PSBQcm9maWxlZENvbnN0cnVjdCk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKG9wID09IENvbnN0cnVjdCk7CiAgICAgICAgICAgICAg
ICAgb3AgPSBOYXRpdmVDb25zdHJ1Y3Q7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE0
MjYsMTMgKzE0MTcsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9k
ZQogICAgIC8vIHRoaXMgaW4gY2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCBjb250cm9sIGZsb3cg
ZGlhbW9uZHMgdG8gY2hlY2sgdGhlIGNhbGxlZS4KICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNv
dWxkVGFrZVNsb3dQYXRoKCkgJiYgY2FsbExpbmtTdGF0dXMuc2l6ZSgpID09IDEpIHsKICAgICAg
ICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKAotICAgICAgICAgICAgY2FsbExpbmtTdGF0dXNbMF0uY2Fs
bGVlKCksIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwgc3BlY2lhbGl6YXRpb25LaW5k
KTsKKyAgICAgICAgICAgIGNhbGxMaW5rU3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0
ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gYXR0
ZW1wdFRvSW5saW5lQ2FsbCgKLSAgICAgICAgICAgIGNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVy
YW5kLCBjYWxsTGlua1N0YXR1c1swXS5jYWxsZWUoKSwgcmVnaXN0ZXJPZmZzZXQsCisgICAgICAg
ICAgICBjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0sIHJl
Z2lzdGVyT2Zmc2V0LAogICAgICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5l
eHRPZmZzZXQsIGtpbmQsIENhbGxlckRvZXNOb3JtYWxMaW5raW5nLCBwcmVkaWN0aW9uLAogICAg
ICAgICAgICAgaW5saW5pbmdCYWxhbmNlKTsKICAgICAgICAgaWYgKCFyZXN1bHQgJiYgIWNhbGxM
aW5rU3RhdHVzLmlzUHJvdmVkKCkpCi0gICAgICAgICAgICB1bmRvRnVuY3Rpb25DaGVja3MoY2Fs
bExpbmtTdGF0dXNbMF0uY2FsbGVlKCkpOworICAgICAgICAgICAgdW5kb0Z1bmN0aW9uQ2hlY2tz
KGNhbGxMaW5rU3RhdHVzWzBdKTsKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAg
IGRhdGFMb2coIkRvbmUgaW5saW5pbmcgKHNpbXBsZSkuXG4iKTsKICAgICAgICAgICAgIGRhdGFM
b2coIlN0YWNrOiAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKQEAgLTE0NjIsNyArMTQ1
Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICBib29s
IGFsbEFyZUNsb3N1cmVDYWxscyA9IHRydWU7CiAgICAgYm9vbCBhbGxBcmVEaXJlY3RDYWxscyA9
IHRydWU7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gY2FsbExpbmtTdGF0dXMuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgIGlmIChjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKS5pc0Nsb3N1cmVDYWxs
KCkpCisgICAgICAgIGlmIChjYWxsTGlua1N0YXR1c1tpXS5pc0Nsb3N1cmVDYWxsKCkpCiAgICAg
ICAgICAgICBhbGxBcmVEaXJlY3RDYWxscyA9IGZhbHNlOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBhbGxBcmVDbG9zdXJlQ2FsbHMgPSBmYWxzZTsKQEAgLTE0NzUsOSArMTQ2Niw4IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgdGhpbmdUb1N3
aXRjaE9uID0gYWRkVG9HcmFwaChHZXRFeGVjdXRhYmxlLCBjYWxsVGFyZ2V0Tm9kZSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhp
cyBjYXNlLCBidXQgaXQncyB0cmlja3kgYW5kIHdlIGRvbid0IGtub3cgb2YgY2FzZXMKLSAgICAg
ICAgLy8gd2hlcmUgaXQgd291bGQgYmUgYmVuZWZpY2lhbC4gQWxzbywgQ2FsbExpbmtTdGF0dXMg
d291bGQgbWFrZSBhbGwgY2FsbGVlcyBhcHBlYXIgbGlrZQotICAgICAgICAvLyBjbG9zdXJlIGNh
bGxzIGlmIGFueSBjYWxscyB3ZXJlIGNsb3N1cmUgY2FsbHMgLSBleGNlcHQgZm9yIGNhbGxzIHRv
IGludGVybmFsIGZ1bmN0aW9ucy4KLSAgICAgICAgLy8gU28gdGhpcyB3aWxsIG9ubHkgYXJpc2Ug
aWYgc29tZSBjYWxsZWVzIGFyZSBpbnRlcm5hbCBmdW5jdGlvbnMgYW5kIG90aGVycyBhcmUgY2xv
c3VyZXMuCisgICAgICAgIC8vIHdoZXJlIGl0IHdvdWxkIGJlIGJlbmVmaWNpYWwuIEl0IG1pZ2h0
IGJlIGJlc3QgdG8gaGFuZGxlIHRoZXNlIGNhc2VzIGFzIGlmIGFsbCBjYWxscyB3ZXJlCisgICAg
ICAgIC8vIGNsb3N1cmUgY2FsbHMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzYwMjAKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAg
ICAgIGRhdGFMb2coIkJhaWxpbmcgaW5saW5pbmcgKG1peCkuXG4iKTsKQEAgLTE1MTcsNyArMTUw
Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyB0
byB0aGUgY29udGludWF0aW9uIGJsb2NrLCB3aGljaCB3ZSBjcmVhdGUgbGFzdC4KICAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IGxhbmRpbmdCbG9ja3M7CiAgICAgCi0gICAgLy8gV2UgbWFrZSBmb3Jj
ZSB0aGlzIHRydWUgaWYgd2UgZ2l2ZSB1cCBvbiBpbmxpbmluZyBhbnkgb2YgdGhlIGVkZ2VzLgor
ICAgIC8vIFdlIG1heSBmb3JjZSB0aGlzIHRydWUgaWYgd2UgZ2l2ZSB1cCBvbiBpbmxpbmluZyBh
bnkgb2YgdGhlIGVkZ2VzLgogICAgIGJvb2wgY291bGRUYWtlU2xvd1BhdGggPSBjYWxsTGlua1N0
YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpOwogICAgIAogICAgIGlmICh2ZXJib3NlKQpAQCAtMTUz
Myw3ICsxNTIzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQog
ICAgICAgICBOb2RlKiBteUNhbGxUYXJnZXROb2RlID0gZ2V0RGlyZWN0KGNhbGxlZVJlZyk7CiAg
ICAgICAgIAogICAgICAgICBib29sIGlubGluaW5nUmVzdWx0ID0gYXR0ZW1wdFRvSW5saW5lQ2Fs
bCgKLSAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5r
U3RhdHVzW2ldLmNhbGxlZSgpLCByZWdpc3Rlck9mZnNldCwKKyAgICAgICAgICAgIG15Q2FsbFRh
cmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNl
dCwKICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBr
aW5kLCBDYWxsZXJMaW5rc01hbnVhbGx5LCBwcmVkaWN0aW9uLAogICAgICAgICAgICAgaW5saW5p
bmdCYWxhbmNlKTsKICAgICAgICAgCkBAIC0xNTUyLDEwICsxNTQyLDEwIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgCiAgICAgICAgIEpTQ2VsbCog
dGhpbmdUb0Nhc2VPbjsKICAgICAgICAgaWYgKGFsbEFyZURpcmVjdENhbGxzKQotICAgICAgICAg
ICAgdGhpbmdUb0Nhc2VPbiA9IGNhbGxMaW5rU3RhdHVzW2ldLmNhbGxlZSgpLm5vbkV4ZWN1dGFi
bGVDYWxsZWUoKTsKKyAgICAgICAgICAgIHRoaW5nVG9DYXNlT24gPSBjYWxsTGlua1N0YXR1c1tp
XS5ub25FeGVjdXRhYmxlQ2FsbGVlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgQVNT
RVJUKGFsbEFyZUNsb3N1cmVDYWxscyk7Ci0gICAgICAgICAgICB0aGluZ1RvQ2FzZU9uID0gY2Fs
bExpbmtTdGF0dXNbaV0uY2FsbGVlKCkuZXhlY3V0YWJsZSgpOworICAgICAgICAgICAgdGhpbmdU
b0Nhc2VPbiA9IGNhbGxMaW5rU3RhdHVzW2ldLmV4ZWN1dGFibGUoKTsKICAgICAgICAgfQogICAg
ICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKG1fZ3JhcGguZnJlZXplKHRoaW5nVG9D
YXNlT24pLCBibG9jay5nZXQoKSkpOwogICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG5leHRPZmZz
ZXQ7CkBAIC0xNTY3LDcgKzE1NTcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxp
bmluZyhOb2RlCiAgICAgICAgIGxhbmRpbmdCbG9ja3MuYXBwZW5kKG1fY3VycmVudEJsb2NrKTsK
IAogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkZpbmlzaGVkIGlu
bGluaW5nICIsIGNhbGxMaW5rU3RhdHVzW2ldLmNhbGxlZSgpLCAiIGF0ICIsIGN1cnJlbnRDb2Rl
T3JpZ2luKCksICIuXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIkZpbmlzaGVkIGlubGluaW5n
ICIsIGNhbGxMaW5rU3RhdHVzW2ldLCAiIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICIuXG4i
KTsKICAgICB9CiAgICAgCiAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IHNsb3dQYXRoQmxvY2sgPSBh
ZG9wdFJlZigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDggKzM2Myw2IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEFycmF5UG9wOgogICAgIGNhc2Ug
Q2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoKLSAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBj
YXNlIFByb2ZpbGVkQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5h
dGl2ZUNvbnN0cnVjdDoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJl
dmlzaW9uIDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjAsMjAgKzQyMCw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgICAgIGNhc2UgUHJv
ZmlsZWRDb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5tX3ZhbHVlKQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSB3ZXJl
IGFibGUgdG8gcHJvdmUgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY29uc3RhbnQgdGhlbiB0aGUgbm9y
bWFsIGNhbGwKLSAgICAgICAgICAgICAgICAvLyBpbmxpbmUgY2FjaGUgd2lsbCByZWNvcmQgdGhp
cyBjYWxsZWUuIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIGRvIGFueQotICAg
ICAgICAgICAgICAgIC8vIGFkZGl0aW9uYWwgcHJvZmlsaW5nLgotICAgICAgICAgICAgICAgIG1f
aW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIG5vZGUt
PnNldE9wKG5vZGUtPm9wKCkgPT0gUHJvZmlsZWRDYWxsID8gQ2FsbCA6IENvbnN0cnVjdCk7Ci0g
ICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b2VzR0MuY3BwCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsNiBAQCBib29sIGRv
ZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAg
Y2FzZSBOYXRpdmVDYWxsOgogICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgotICAgIGNhc2UgUHJv
ZmlsZWRDYWxsOgotICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6CiAgICAgY2FzZSBCcmVha3Bv
aW50OgogICAgIGNhc2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmlsZURpZENhbGw6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAx
NzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc5LDIwICs3OSwxNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29t
cGlsZUltcGwoCiAgICAgaWYgKG1vZGUgPT0gREZHTW9kZSkgewogICAgICAgICB2bS5nZXRDVElT
dHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtD
b25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7Ci0gICAgICAgIHZtLmdldENUSVN0dWIobGlua0Nsb3N1
cmVDYWxsVGh1bmtHZW5lcmF0b3IpOworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9y
cGhpY0NhbGxUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENh
bGxUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVj
dFRodW5rR2VuZXJhdG9yKTsKICAgICB9IGVsc2UgewogICAgICAgICB2bS5nZXRDVElTdHViKGxp
bmtDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHZtLmdldENU
SVN0dWIobGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOwotICAg
ICAgICB2bS5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtH
ZW5lcmF0b3IpOworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaGF0
UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0
dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRD
VElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsK
ICAgICB9CiAgICAgCi0gICAgaWYgKENhbGxFZGdlTG9nOjppc0VuYWJsZWQoKSkKLSAgICAgICAg
dm0uZW5zdXJlQ2FsbEVkZ2VMb2coKS5wcm9jZXNzTG9nKCk7Ci0KICAgICBpZiAodm0udHlwZVBy
b2ZpbGVyKCkpCiAgICAgICAgIHZtLnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmll
cyhBU0NJSUxpdGVyYWwoIlByZXBhcmluZyBmb3IgREZHIGNvbXBpbGF0aW9uLiIpKTsKICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwMiw4ICsxMjAyLDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2FsbDoK
ICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAg
ICAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OgogICAgICAgICBjYXNlIFByb2ZpbGVDb250cm9s
RmxvdzoKICAgICAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgICAgICBjYXNlIE5hdGl2ZUNvbnN0
cnVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNzky
MjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA1Nyw4ICsxMDU3LDYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbFNhZmU6CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25z
dHJ1Y3Q6Ci0gICAgICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgICAgICBjYXNlIFByb2ZpbGVk
Q29uc3RydWN0OgogICAgICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgICAgIGNhc2UgTmF0aXZl
Q29uc3RydWN0OgogICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsOCAr
MjE3LDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIENhbGxzLiAq
L1wKICAgICBtYWNybyhDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKENvbnN0cnVjdCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNs
b2JiZXJzV29ybGQpIFwKLSAgICBtYWNybyhQcm9maWxlZENhbGwsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCi0g
ICAgbWFjcm8oUHJvZmlsZWRDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oTmF0
aXZlQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdz
IHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhOYXRpdmVDb25zdHJ1Y3QsIE5vZGVS
ZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVy
c1dvcmxkKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjE5LDYgKzEyMTksMTEg
QEAgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwogICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS0+aGVhcCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKICAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6
REZHSklUKSB7CisgICAgICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBERkct
PkZUTCB0aWVyLXVwOiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCiAgICAgSklUQ29kZSogaml0Q29kZSA9IGNv
ZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKSB7CkBAIC0xMjM4LDYgKzEyNDMsMTEgQEAgY2hhciogSklUX09QRVJBVElPTiB0cmln
Z2VyT1NSRW50cnlOb3coCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLT5oZWFwKTsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIAorICAgIGlmIChjb2Rl
QmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjpERkdKSVQpIHsKKyAgICAgICAgZGF0YUxvZygi
VW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIERGRy0+RlRMIHRpZXItdXA6ICIsICpjb2RlQmxvY2ss
ICJcbiIpOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAg
ICAKICAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwog
ICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4
LDggKzE4OCw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAg
ICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgICAgIGNhc2UgUHJv
ZmlsZWRDYWxsOgotICAgICAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OgogICAgICAgICBjYXNl
IE5hdGl2ZUNhbGw6CiAgICAgICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAgICAgICBjYXNl
IEdldEdsb2JhbFZhcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDggKzE4OSw2IEBA
IGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIENvbXBh
cmVTdHJpY3RFcToKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgY2Fz
ZSBQcm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICBjYXNlIE5l
d09iamVjdDoKICAgICBjYXNlIE5ld0FycmF5OgogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM4LDkg
KzYzOCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEKIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAgICBib29sIGlzQ2Fs
bCA9IG5vZGUtPm9wKCkgPT0gQ2FsbCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ2FsbDsKKyAg
ICBib29sIGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbDsKICAgICBpZiAoIWlzQ2FsbCkKLSAg
ICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0IHx8IG5vZGUtPm9wKCkgPT0gUHJv
ZmlsZWRDb25zdHJ1Y3QpOworICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3Qp
OwogCiAgICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90IHBh
c3NlZCBidXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCiAgICAgLy8gZm9yIGl0LgpAQCAtNjg5LDEx
ICs2ODksNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAg
CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5r
SW5mbygpOwogCi0gICAgaWYgKG5vZGUtPm9wKCkgPT0gUHJvZmlsZWRDYWxsIHx8IG5vZGUtPm9w
KCkgPT0gUHJvZmlsZWRDb25zdHJ1Y3QpIHsKLSAgICAgICAgbV9qaXQudm0oKS0+Y2FsbEVkZ2VM
b2ctPmVtaXRMb2dDb2RlKAotICAgICAgICAgICAgbV9qaXQsIGluZm8tPmNhbGxFZGdlUHJvZmls
ZSwgY2FsbGVlLmpzVmFsdWVSZWdzKCkpOwotICAgIH0KLSAgICAKICAgICBzbG93UGF0aC5hcHBl
bmQoYnJhbmNoTm90Q2VsbChjYWxsZWUuanNWYWx1ZVJlZ3MoKSkpOwogICAgIHNsb3dQYXRoLmFw
cGVuZChtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBj
YWxsZWVQYXlsb2FkR1BSLCB0YXJnZXRUb0NoZWNrKSk7CiAKQEAgLTQxNjksOCArNDE2NCw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2Fs
bDoKICAgICBjYXNlIENvbnN0cnVjdDoKLSAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNl
IFByb2ZpbGVkQ29uc3RydWN0OgogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJl
YWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI0LDkgKzYy
NCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEKIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAgICBib29sIGlzQ2FsbCA9
IG5vZGUtPm9wKCkgPT0gQ2FsbCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ2FsbDsKKyAgICBi
b29sIGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2FsbDsKICAgICBpZiAoIWlzQ2FsbCkKLSAgICAg
ICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENvbnN0cnVj
dCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KTsKKyAgICAgICAgREZHX0FTU0VS
VChtX2ppdC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7CiAgICAgCiAg
ICAgLy8gRm9yIGNvbnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBi
dXQgd2UgaGF2ZSB0byBtYWtlIHNwYWNlCiAgICAgLy8gZm9yIGl0LgpAQCAtNjY5LDExICs2Njks
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExp
bmtJbmZvKCk7CiAgICAgCi0gICAgaWYgKG5vZGUtPm9wKCkgPT0gUHJvZmlsZWRDYWxsIHx8IG5v
ZGUtPm9wKCkgPT0gUHJvZmlsZWRDb25zdHJ1Y3QpIHsKLSAgICAgICAgbV9qaXQudm0oKS0+Y2Fs
bEVkZ2VMb2ctPmVtaXRMb2dDb2RlKAotICAgICAgICAgICAgbV9qaXQsIGNhbGxMaW5rSW5mby0+
Y2FsbEVkZ2VQcm9maWxlLCBKU1ZhbHVlUmVncyhjYWxsZWVHUFIpKTsKLSAgICB9Ci0KICAgICBz
bG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoMCkpOwogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2Fs
bCgpOwpAQCAtNDIzNiw4ICs0MjMxLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogCiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgotICAgIGNh
c2UgUHJvZmlsZWRDYWxsOgotICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6CiAgICAgICAgIGVt
aXRDYWxsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE3
ICs1MCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghT3B0aW9uczo6dXNlRlRMSklUKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5t
X3Byb2ZpbGVkQmxvY2stPm1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKSB7Ci0gICAgICAgICAgICBy
ZW1vdmVGVExQcm9maWxpbmcoKTsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9wcm9maWxlZEJsb2Nr
LT5tX2RpZEZhaWxGVExDb21waWxhdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQogICAgICAgICAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICAgICAgRlRMOjpDYXBh
YmlsaXR5TGV2ZWwgbGV2ZWwgPSBGVEw6OmNhbkNvbXBpbGUobV9ncmFwaCk7Ci0gICAgICAgIGlm
IChsZXZlbCA9PSBGVEw6OkNhbm5vdENvbXBpbGUpIHsKLSAgICAgICAgICAgIHJlbW92ZUZUTFBy
b2ZpbGluZygpOworICAgICAgICBpZiAobGV2ZWwgPT0gRlRMOjpDYW5ub3RDb21waWxlKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAo
IU9wdGlvbnM6OmVuYWJsZU9TUkVudHJ5VG9GVEwoKSkKICAgICAgICAgICAgIGxldmVsID0gRlRM
OjpDYW5Db21waWxlOwpAQCAtMTIyLDMyICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKICAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgdm9pZCByZW1vdmVGVExQcm9maWxpbmcoKQotICAgIHsKLSAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0g
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7
Ci0gICAgICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgICAg
ICAgICAgICAgICAgICBub2RlLT5zZXRPcChDYWxsKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgUHJvZmlsZWRD
b25zdHJ1Y3Q6Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKENvbnN0cnVjdCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiB9OwogCiBib29sIHBlcmZv
cm1UaWVyVXBDaGVja0luamVjdGlvbihHcmFwaCYgZ3JhcGgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNzkyMjMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3NiwxMSArMTc2LDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKE5vZGUqIAogICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgIC8vIFRo
ZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQcm9maWxlZENhbGw6Ci0gICAg
Y2FzZSBQcm9maWxlZENvbnN0cnVjdDoKLSAgICAgICAgLy8gVGhlc2UgYXJlIE9LIG5vdCBiZWNh
dXNlIHRoZSBGVEwgY2FuIHN1cHBvcnQgdGhlbSwgYnV0IGJlY2F1c2UgaWYgdGhlIERGRyBzZWVz
IG9uZSBvZgotICAgICAgICAvLyB0aGVzZSB0aGVuIHRoZSBGVEwgd2lsbCBzZWUgYSBub3JtYWwg
Q2FsbC9Db25zdHJ1Y3QuCi0gICAgICAgIGJyZWFrOwogICAgIGNhc2UgSWRlbnRpdHk6CiAgICAg
ICAgIC8vIE5vIGJhY2tlbmQgaGFuZGxlcyB0aGlzIGJlY2F1c2UgaXQgd2lsbCBiZSBvcHRpbWl6
ZWQgb3V0LiBCdXQgd2UgbWF5IGNoZWNrCiAgICAgICAgIC8vIGZvciBjYXBhYmlsaXRpZXMgYmVm
b3JlIG9wdGltaXphdGlvbi4gSXQgd291bGQgYmUgYSBkZWVwIGVycm9yIHRvIHJlbW92ZSB0aGlz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTc5MjIzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk5MywxMSArOTkzLDYgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29sbGVj
dAogICAgICAgICB2bSgpLT50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVND
SUlMaXRlcmFsKCJHQyIpKTsKICAgICB9CiAgICAgCi0gICAgaWYgKHZtKCktPmNhbGxFZGdlTG9n
KSB7Ci0gICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgdm0o
KS0+Y2FsbEVkZ2VMb2ctPnByb2Nlc3NMb2coKTsKLSAgICB9Ci0gICAgCiAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fZGVmZXJyYWxEZXB0aCk7CiAgICAgQVNTRVJUKHZtKCktPmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmF0b21pY1N0cmlu
Z1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRp
bmUuY3BwCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Ns
b3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUu
aCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCi0jaW5jbHVk
ZSAiSGVhcC5oIgotI2luY2x1ZGUgIlZNLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lOjpDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
KAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgVk0mIHZtLCBjb25zdCBK
U0NlbGwqIG93bmVyLAotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQotICAgIDogR0NB
d2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKQotICAgICwgbV9leGVjdXRhYmxlKHZtLCBvd25l
ciwgZXhlY3V0YWJsZSkKLXsKLX0KLQotQ2xvc3VyZUNhbGxTdHViUm91dGluZTo6fkNsb3N1cmVD
YWxsU3R1YlJvdXRpbmUoKQotewotfQotCi12b2lkIENsb3N1cmVDYWxsU3R1YlJvdXRpbmU6Om1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICB2
aXNpdG9yLmFwcGVuZCgmbV9leGVjdXRhYmxlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
LSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMTc5MjIzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENsb3N1cmVDYWxsU3R1YlJvdXRp
bmVfaAotI2RlZmluZSBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lX2gKLQotI2lmIEVOQUJMRShKSVQp
Ci0KLSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
IDogcHVibGljIEdDQXdhcmVKSVRTdHViUm91dGluZSB7Ci1wdWJsaWM6Ci0gICAgQ2xvc3VyZUNh
bGxTdHViUm91dGluZSgKLSAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0m
LCBjb25zdCBKU0NlbGwqIG93bmVyLAotICAgICAgICBFeGVjdXRhYmxlQmFzZSopOwotICAgIAot
ICAgIHZpcnR1YWwgfkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUoKTsKLSAgICAKLSAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0YWJsZS5nZXQoKTsg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRl
cm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIFdyaXRlQmFycmll
cjxFeGVjdXRhYmxlQmFzZT4gbV9leGVjdXRhYmxlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlND
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0jZW5kaWYgLy8gQ2xvc3VyZUNhbGxTdHViUm91
dGluZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5j
cHAJKHJldmlzaW9uIDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2Fs
bDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAwLDEyICszMDAsNiBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBDYWxsTGlua0luZm8qIGluZm8g
PSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CiAKLSAgICBpZiAoQ2FsbEVkZ2VMb2c6
OmlzRW5hYmxlZCgpICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKQotICAgICAgICAmJiBPcHRpb25z
OjpiYXNlbGluZURvZXNDYWxsRWRnZVByb2ZpbGluZygpKSB7Ci0gICAgICAgIG1fdm0tPmVuc3Vy
ZUNhbGxFZGdlTG9nKCkuZW1pdExvZ0NvZGUoCi0gICAgICAgICAgICAqdGhpcywgaW5mby0+Y2Fs
bEVkZ2VQcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSAgICB9Ci0KICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CiAgICAgICAgIGNvbXBpbGVDYWxsRXZhbChp
bnN0cnVjdGlvbik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDEwICsyMTQsNiBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgCiAgICAgQ2FsbExpbmtJ
bmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwogCi0gICAgaWYgKENh
bGxFZGdlTG9nOjppc0VuYWJsZWQoKSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkKLSAgICAgICAg
JiYgT3B0aW9uczo6YmFzZWxpbmVEb2VzQ2FsbEVkZ2VQcm9maWxpbmcoKSkKLSAgICAgICAgbV92
bS0+ZW5zdXJlQ2FsbEVkZ2VMb2coKS5lbWl0TG9nQ29kZSgqdGhpcywgaW5mby0+Y2FsbEVkZ2VQ
cm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX2Nh
bGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzc2LDcgKzc3Niw3IEBAIGlubGlu
ZSBjaGFyKiB2aXJ0dWFsRm9yKAogICAgIHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4
ZWNDYWxsZWUsIGtpbmQsIHJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsK
IH0KIAotc3RhdGljIGJvb2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbCgKK3N0YXRpYyBi
b29sIGF0dGVtcHRUb09wdGltaXplUG9seW1vcnBoaWNDYWxsKAogICAgIEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycywgSlNDZWxsKiBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCwKICAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKQEAg
LTc4NCwzOCArNzg0LDI0IEBAIHN0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNh
bGwKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIEpTRnVuY3Rp
b24qIG9sZENhbGxlZSA9IGNhbGxMaW5rSW5mby5jYWxsZWUuZ2V0KCk7CiAgICAgCi0gICAgaWYg
KCFvbGRDYWxsZWUgfHwgb2xkQ2FsbGVlLT5leGVjdXRhYmxlKCkgIT0gY2FsbGVlLT5leGVjdXRh
YmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoY2FsbGVlLT5l
eGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjb2RlUHRyID0KLSAgICAgICAgY2FsbGVlLT5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJ
VENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKAotICAgICAgICAgICAgKmV4ZWNDYWxsZWUt
PmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT52bSgpLCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwK
LSAgICAgICAgICAgIEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCwgcmVnaXN0ZXJzKTsKLSAgICAKLSAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKLSAgICBpZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlz
SG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgIGNvZGVCbG9jayA9IDA7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1
dGFibGUoKSktPmNvZGVCbG9ja0ZvckNhbGwoKTsKKyAgICBpZiAoIWNhbGxlZS0+ZXhlY3V0YWJs
ZSgpLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
anNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNhbGxlZS0+ZXhlY3V0YWJsZSgpKS0+Y29kZUJs
b2NrRm9yQ2FsbCgpOwogICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCkpIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdz
IHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFy
Z3MpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGxpbmtDbG9z
dXJlQ2FsbCgKLSAgICAgICAgZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNh
bGxlZS0+ZXhlY3V0YWJsZSgpLCBjb2RlUHRyLCByZWdpc3RlcnMpOworICAgIGxpbmtQb2x5bW9y
cGhpY0NhbGwoZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBDYWxsVmFyaWFudChjYWxsZWUpLCBy
ZWdpc3RlcnMpOwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCi1jaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxM
aW5rSW5mbyogY2FsbExpbmtJbmZvKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5r
UG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm8pCiB7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKICAgICBjaGFy
KiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxs
LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7
CiAKLSAgICBpZiAoIWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxs
TGlua0luZm8pKQorICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVQb2x5bW9ycGhpY0NhbGwoZXhl
Y0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlv
bkNlbGwsICpjYWxsTGlua0luZm8pKQogICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCAq
Y2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJl
ZCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTgzMSwxMiArODE3LDEyIEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnMKICAgICByZXR1cm4gdmlydHVhbEZv
cihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJl
cXVpcmVkKTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNh
bGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBo
aWNDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0lu
Zm8qIGNhbGxMaW5rSW5mbykKIHsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsOwog
ICAgIGNoYXIqIHJlc3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29k
ZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwog
Ci0gICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIE11c3RQ
cmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8pKQor
ICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwgTXVz
dFByZXNlcnZlUmVnaXN0ZXJzLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgKmNhbGxMaW5rSW5mbykp
CiAgICAgICAgIGxpbmtTbG93Rm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlua0luZm8sIENvZGVGb3JD
YWxsLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CkBA
IC0xMDMzLDYgKzEwMTksMTAgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aQogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIGlmIChjb2RlQmxv
Y2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCkgeworICAgICAgICBkYXRhTG9n
KCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gQmFzZWxpbmUtPkRGRyB0aWVyLXVwOiAiLCAqY29k
ZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CiAgICAgCiAgICAgaWYgKGJ5dGVjb2RlSW5kZXgpIHsKICAgICAgICAgLy8gSWYgd2UncmUg
YXR0ZW1wdGluZyB0byBPU1IgZnJvbSBhIGxvb3AsIGFzc3VtZSB0aGF0IHRoaXMgc2hvdWxkIGJl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNp
b24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0NiwxMiArMjQ2LDEyIEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEdlbmUKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25DYWxsRXZhbChFeGVjU3RhdGUqLCBFeGVjU3RhdGUqKSBXVEZfSU5URVJO
QUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSosIENh
bGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsK
K2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbChFeGVjU3Rh
dGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5B
TDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3Rh
dGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVS
TkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNS
ZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0
YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwg
Q2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyop
IFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0
cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRF
Uk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVz
ZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKQEAgLTM5
MSwxMyArMzkxLDEzIEBAIGlubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvblZpcnQK
ICAgICByZXR1cm4gMDsKIH0KIAotaW5saW5lIFBfSklUT3BlcmF0aW9uX0VDbGkgb3BlcmF0aW9u
TGlua0Nsb3N1cmVDYWxsRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCitp
bmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsRm9y
KFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgc3dpdGNoIChyZWdp
c3RlcnMpIHsKICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6Ci0gICAg
ICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGw7CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25MaW5rUG9seW1vcnBoaWNDYWxsOwogICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJz
OgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1Jl
Z3M7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNl
cnZlc1JlZ3M7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
cmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGlu
ZS5oCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB5
b3UgYXJlIHN0aWxsIHZhbGlkIGFmdGVyLiBSZXR1cm4gZmFsc2UgaWYgeW91IGFyZSBub3cgaW52
YWxpZC4gSWYgeW91IHJldHVybgorICAgIC8vIGZhbHNlLCB5b3Ugd2lsbCB1c3VhbGx5IG5vdCBk
byBhbnkgY2xlYXJpbmcgYmVjYXVzZSB0aGUgaWRlYSBpcyB0aGF0IHlvdSB3aWxsIHNpbXBseSBi
ZQorICAgIC8vIGRlc3Ryb3llZC4KICAgICB2aXJ0dWFsIGJvb2wgdmlzaXRXZWFrKFJlcGF0Y2hC
dWZmZXImKTsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRXcml0ZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFdyaXRlQmFycmllci5oCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5o
IgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiCisKKyNpbmNsdWRl
ICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
UG9seW1vcnBoaWNDYWxsTm9kZTo6flBvbHltb3JwaGljQ2FsbE5vZGUoKQoreworICAgIGlmIChp
c09uTGlzdCgpKQorICAgICAgICByZW1vdmUoKTsKK30KKwordm9pZCBQb2x5bW9ycGhpY0NhbGxO
b2RlOjp1bmxpbmsoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikKK3sKKyAgICBpZiAoT3B0
aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2coIlVubGlua2luZyBwb2x5
bW9ycGhpYyBjYWxsIGF0ICIsIG1fY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sICIs
ICIsIG1fY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luLCAiXG4iKTsKKyAgICAKKyAgICBtX2NhbGxM
aW5rSW5mby0+dW5saW5rKHJlcGF0Y2hCdWZmZXIpOworICAgIAorICAgIGlmIChpc09uTGlzdCgp
KQorICAgICAgICByZW1vdmUoKTsKK30KKwordm9pZCBQb2x5bW9ycGhpY0NhbGxDYXNlOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCI8dmFyaWFudCA9ICIs
IG1fdmFyaWFudCwgIiwgY29kZUJsb2NrID0gIiwgcG9pbnRlckR1bXAobV9jb2RlQmxvY2spLCAi
PiIpOworfQorCitQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6UG9seW1vcnBoaWNDYWxsU3R1
YlJvdXRpbmUoCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlUmVmLCBWTSYg
dm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsCisgICAgQ2Fs
bExpbmtJbmZvJiBpbmZvLCBjb25zdCBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4mIGNhc2Vz
KQorICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGVSZWYsIHZtKQoreworICAgIGZvciAo
UG9seW1vcnBoaWNDYWxsQ2FzZSBjYWxsQ2FzZSA6IGNhc2VzKSB7CisgICAgICAgIG1fdmFyaWFu
dHMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KHZtLCBvd25lciwgY2FsbENhc2UudmFyaWFu
dCgpLnJhd0NhbGxlZUNlbGwoKSkpOworICAgICAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5
Rm9yKGNhbGxlckZyYW1lLT5jb2RlQmxvY2soKSkpCisgICAgICAgICAgICBkYXRhTG9nKCJMaW5r
aW5nIHBvbHltb3JwaGljIGNhbGwgaW4gIiwgKmNhbGxlckZyYW1lLT5jb2RlQmxvY2soKSwgIiBh
dCAiLCBjYWxsZXJGcmFtZS0+Y29kZU9yaWdpbigpLCAiIHRvICIsIGNhbGxDYXNlLnZhcmlhbnQo
KSwgIiwgY29kZUJsb2NrID0gIiwgcG9pbnRlckR1bXAoY2FsbENhc2UuY29kZUJsb2NrKCkpLCAi
XG4iKTsKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbENhc2UuY29kZUJs
b2NrKCkpCisgICAgICAgICAgICBjb2RlQmxvY2stPmxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2Fs
bChjYWxsZXJGcmFtZSwgbV9jYWxsTm9kZXMuYWRkKCZpbmZvKSk7CisgICAgfQorICAgIG1fdmFy
aWFudHMuc2hyaW5rVG9GaXQoKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworfQorCitQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6flBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKCkg
eyB9CisKK0NhbGxWYXJpYW50TGlzdCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6dmFyaWFu
dHMoKSBjb25zdAoreworICAgIENhbGxWYXJpYW50TGlzdCByZXN1bHQ7CisgICAgZm9yIChhdXRv
JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgcmVzdWx0LmFwcGVuZChDYWxsVmFyaWFu
dCh2YXJpYW50LmdldCgpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZTo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImKQoreworICAgIGZv
ciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKKyAgICAgICAgaWYgKCFIZWFwOjppc01h
cmtlZCh2YXJpYW50LmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBm
b3IgKGF1dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
dmFyaWFudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmVfaAorI2RlZmluZSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZV9oCisK
KyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ2FsbFZhcmlhbnQuaCIKKyNpbmNsdWRlICJD
b2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworc3RydWN0IENhbGxMaW5rSW5mbzsKKworY2xhc3MgUG9seW1vcnBoaWNDYWxs
Tm9kZSA6IHB1YmxpYyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPiB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUG9seW1vcnBoaWNDYWxsTm9kZSk7CitwdWJsaWM6
CisgICAgUG9seW1vcnBoaWNDYWxsTm9kZShDYWxsTGlua0luZm8qIGluZm8pCisgICAgICAgIDog
bV9jYWxsTGlua0luZm8oaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIH5Qb2x5bW9ycGhp
Y0NhbGxOb2RlKCk7CisgICAgCisgICAgdm9pZCB1bmxpbmsoUmVwYXRjaEJ1ZmZlciYpOworICAg
IAorcHJpdmF0ZToKKyAgICBDYWxsTGlua0luZm8qIG1fY2FsbExpbmtJbmZvOworfTsKKworY2xh
c3MgUG9seW1vcnBoaWNDYWxsQ2FzZSB7CitwdWJsaWM6CisgICAgUG9seW1vcnBoaWNDYWxsQ2Fz
ZSgpCisgICAgICAgIDogbV9jb2RlQmxvY2sobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAor
ICAgIFBvbHltb3JwaGljQ2FsbENhc2UoQ2FsbFZhcmlhbnQgdmFyaWFudCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCisgICAgICAgIDogbV92YXJpYW50KHZhcmlhbnQpCisgICAgICAgICwgbV9jb2Rl
QmxvY2soY29kZUJsb2NrKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2FsbFZhcmlhbnQgdmFy
aWFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudDsgfQorICAgIENvZGVCbG9jayogY29kZUJs
b2NrKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgQ2FsbFZhcmlhbnQgbV92
YXJpYW50OworICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9OworCitjbGFzcyBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZSA6IHB1YmxpYyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUgeworcHVi
bGljOgorICAgIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAorICAgICAgICBjb25zdCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYmLCBWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsCisgICAgICAgIEV4
ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyYsIGNvbnN0IFZlY3RvcjxQb2x5bW9y
cGhpY0NhbGxDYXNlPiYpOworICAgIAorICAgIHZpcnR1YWwgflBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lKCk7CisgICAgCisgICAgQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRzKCkgY29uc3Q7Cisg
ICAgCisgICAgYm9vbCB2aXNpdFdlYWsoUmVwYXRjaEJ1ZmZlciYpIG92ZXJyaWRlOworCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90
VmlzaXRvciYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8
SlNDZWxsPiwgMj4gbV92YXJpYW50czsKKyAgICBCYWc8UG9seW1vcnBoaWNDYWxsTm9kZT4gbV9j
YWxsTm9kZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShK
SVQpCisKKyNlbmRpZiAvLyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTc5MjIzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU5
MiwxMCArMTU5Miw2IEBAIHZvaWQgbGlua0ZvcigKICAgICAKICAgICBDb2RlQmxvY2sqIGNhbGxl
ckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwogCi0gICAgLy8g
SWYgeW91J3JlIGJlaW5nIGNhbGwtbGlua2VkIGZyb20gYSBERkcgY2FsbGVyIHRoZW4geW91IG9i
dmlvdXNseSBkaWRuJ3QgZ2V0IGlubGluZWQuCi0gICAgaWYgKGNhbGxlZUNvZGVCbG9jayAmJiBK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAg
ICAgICBjYWxsZWVDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0g
ICAgCiAgICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwogICAgIAogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwpAQCAtMTYxMSw3ICsxNjA3
LDcgQEAgdm9pZCBsaW5rRm9yKAogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWlu
Z0NhbGwoZXhlYy0+Y2FsbGVyRnJhbWUoKSwgJmNhbGxMaW5rSW5mbyk7CiAgICAgCiAgICAgaWYg
KGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2Fs
bExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVD
YWxsVGh1bmtHZW5lcmF0b3JGb3IocmVnaXN0ZXJzKSkuY29kZSgpKTsKKyAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENU
SVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yRm9yKHJlZ2lzdGVycykpLmNv
ZGUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xNjMxLDEyICsxNjI3LDIy
IEBAIHZvaWQgbGlua1Nsb3dGb3IoCiAgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0s
IGNhbGxMaW5rSW5mbywga2luZCwgcmVnaXN0ZXJzKTsKIH0KIAotdm9pZCBsaW5rQ2xvc3VyZUNh
bGwoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29k
ZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIAotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwKK25hbWVzcGFjZSB7CitzdHJ1Y3QgQ2Fs
bFRvQ29kZVB0ciB7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGNvZGVQdHI7Cit9OworfSAvLyBhbm5vbnltb3VzIG5hbWVzcGFjZQorCit2
b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCwKICAgICBSZWdpc3RlclBy
ZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLnN0
dWIpOworICAgIC8vIEN1cnJlbnRseSwgd2Ugd2lsbCBuZXZlciBzZWUgYSBub24tZnVuY3Rpb24g
dmFyaWFudCwgc2luY2UgdGhhdCdzIGhvdyBKSVRPcGVyYXRpb25zLmNwcAorICAgIC8vIGhhbmRs
ZXMgaXQuIEFsc28sIHdlIHdvdWxkbid0IGJlIGFibGUgdG8gZG8gYW55dGhpbmcgd2l0aCBub24t
ZnVuY3Rpb24gY2FsbGVlcyBiZWNhdXNlIHdlCisgICAgLy8ganVzdCBkb24ndCBoYXZlIHRoYXQg
ZnVuY3Rpb25hbGl0eSwgeWV0LiBUaGF0J3Mgd29ydGggZml4aW5nLgorICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDA2ODUKKyAgICBSRUxFQVNFX0FTU0VS
VChuZXdWYXJpYW50LmV4ZWN1dGFibGUoKSk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjYWxsZXJD
b2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKICAgICBWTSogdm0g
PSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7CkBAIC0xNjU1LDMzICsxNjYxLDEwMyBAQCB2b2lkIGxp
bmtDbG9zdXJlQ2FsbCgKICAgICAgICAgc3R1YkppdC5hYm9ydFdpdGhSZWFzb24oUmVwYXRjaElu
c2FuZUFyZ3VtZW50Q291bnQpOwogICAgICAgICBva0FyZ3VtZW50Q291bnQubGluaygmc3R1Ykpp
dCk7CiAgICAgfQorICAgIAorICAgIENhbGxWYXJpYW50TGlzdCBsaXN0OworICAgIGlmIChQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViLmdldCgpKQor
ICAgICAgICBsaXN0ID0gc3R1Yi0+dmFyaWFudHMoKTsKKyAgICBlbHNlIGlmIChKU0Z1bmN0aW9u
KiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlLmdldCgpKQorICAgICAgICBsaXN0ID0g
Q2FsbFZhcmlhbnRMaXN0e0NhbGxWYXJpYW50KG9sZENhbGxlZSl9OworICAgIAorICAgIGxpc3Qg
PSB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGxpc3QsIG5ld1ZhcmlhbnQpOwogCi0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAvLyBXZSBjYW4gc2FmZWx5IGNsb2JiZXIgZXZlcnl0aGluZyBleGNlcHQg
dGhlIGNhbGxlZUdQUi4gV2UgY2FuJ3QgcmVseSBvbiB0YWdNYXNrUmVnaXN0ZXIKLSAgICAvLyBi
ZWluZyBzZXQuIFNvIHdlIGRvIHRoaXMgdGhlIGhhcmQgd2F5LgorICAgIC8vIFdlIHNob3VsZCBo
YXZlIGxpbmtlZCB0aGUgc2xvdyBwYXRoIHRvIHRoZSB2aXJ0dWFsIGNhbGwgdGh1bmsgaWYgd2Ug
d2VyZSBhcHByb2FjaGluZyB0aGUKKyAgICAvLyBsaW1pdC4KKyAgICBBU1NFUlQobGlzdC5zaXpl
KCkgPD0gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplKCkpOworICAg
IAorICAgIGJvb2wgaGF2ZUNsb3N1cmVDYWxsID0gZmFsc2U7CisgICAgZm9yIChDYWxsVmFyaWFu
dCB2YXJpYW50IDogbGlzdCkKKyAgICAgICAgaGF2ZUNsb3N1cmVDYWxsIHw9IHZhcmlhbnQuaXND
bG9zdXJlQ2FsbCgpOworICAgIAogICAgIEdQUlJlZyBzY3JhdGNoID0gQXNzZW1ibHlIZWxwZXJz
OjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUik7Ci0gICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIHNjcmF0Y2gpOwotICAgIHNsb3dQYXRoLmFw
cGVuZChzdHViSml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZUdQ
Uiwgc2NyYXRjaCkpOworICAgIAorICAgIGlmIChoYXZlQ2xvc3VyZUNhbGwpIHsKKyAgICAgICAg
Ly8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9uIGFuZCBzdGFzaCB0aGUgZXhlY3V0YWJs
ZSBpbiBzY3JhdGNoLgorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgLy8gV2UgY2FuIHNh
ZmVseSBjbG9iYmVyIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBjYWxsZWVHUFIuIFdlIGNhbid0IHJl
bHkgb24gdGFnTWFza1JlZ2lzdGVyCisgICAgICAgIC8vIGJlaW5nIHNldC4gU28gd2UgZG8gdGhp
cyB0aGUgaGFyZCB3YXkuCisgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KFRhZ01hc2spLCBzY3JhdGNoKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0
dWJKaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVlR1BSLCBzY3Jh
dGNoKSk7CiAjZWxzZQotICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQg
dGhlIGNhbGxlZSBpcyBhIGNlbGwuCisgICAgICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBj
aGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwuCiAjZW5kaWYKICAgICAKLSAgICBzbG93
UGF0aC5hcHBlbmQoCi0gICAgICAgIHN0dWJKaXQuYnJhbmNoOCgKLSAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2Fs
bGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKLSAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOwotICAgIAotICAgIHNsb3dQ
YXRoLmFwcGVuZCgKLSAgICAgICAgc3R1YkppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgICAg
ICBzdHViSml0LmJyYW5jaDgoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU0Z1bmN0aW9uVHlwZSkpKTsKKyAgICAKKyAgICAgICAgc3R1YkppdC5s
b2FkUHRyKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpKSk7CisgICAgICAgICAgICBzY3JhdGNoKTsKKyAg
ICB9CisgICAgCisgICAgVmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+IGNhbGxDYXNlczsKICAg
ICAKLSAgICBBc3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsK
LSAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgZG9uZSA9IHN0dWJKaXQuanVtcCgpOworICAgIEND
YWxsSGVscGVyczo6SnVtcCBza2lwVG9OZXh0OworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qg
ZG9uZTsKKyAgICAKKyAgICBWZWN0b3I8Q2FsbFRvQ29kZVB0cj4gY2FsbHM7CisgICAgCisgICAg
Zm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgeworICAgICAgICAvLyBOZXcgdmFyaWFu
dHMgc2hvdWxkIGhhdmUgSklUIGNvZGUgZm9yIGNhbGwgc2luY2Ugd2UgYXJlIGFib3V0IHRvIG1h
a2UgdGhhdCBjYWxsIGFuZAorICAgICAgICAvLyBKSVRPcGVyYXRpb25zLmNwcCBzaG91bGQgaGF2
ZSBlbnN1cmVkIHRoYXQgdGhlIEpJVCBjb2RlIHdhcyBwcmVzZW50LiBPbGQgdmFyaWFudHMgc2hv
dWxkCisgICAgICAgIC8vIGhhdmUgSklUIGNvZGUgZm9yIGNhbGwgc2luY2UgdGhlIGlubGluZSBj
YWNoZSB3b3VsZCBoYXZlIGJlZW4gY2xlYXJlZCBpZiB0aGVpciBjb2RlIHdhcworICAgICAgICAv
LyBkZXN0cm95ZWQuCisgICAgICAgIEFTU0VSVCh2YXJpYW50LmV4ZWN1dGFibGUoKS0+aGFzSklU
Q29kZUZvckNhbGwoKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0K
KyAgICAgICAgICAgIHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2Fs
bCgpLT5hZGRyZXNzRm9yQ2FsbCgKKyAgICAgICAgICAgICAgICAqdm0sIHZhcmlhbnQuZXhlY3V0
YWJsZSgpLCBBcml0eUNoZWNrTm90UmVxdWlyZWQsIHJlZ2lzdGVycyk7CisgICAgICAgIAorICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJs
ZSgpLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICAgICAgY29kZUJsb2NrID0gbnVsbHB0cjsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4odmFyaWFudC5leGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tGb3JDYWxsKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHJlcGVhdHMgYSBjaGVj
ayBpbiBKSVRPcGVyYXRpb25zLmNwcC4gVGhhdCdzIGJlY2F1c2Ugd2UgbWF5IGFsc28gc2VlCisg
ICAgICAgICAgICAvLyBhIHZhcmlhbnQgZnJvbSB0aGUgb3JpZ2luYWwgbW9ub21vcnBoaWMgY2Fj
aGUsIHdoaWNoIGlzbid0IGFzIHN0cmljdC4KKyAgICAgICAgICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6
Q2FsbFZhcmFyZ3MgfHwgY2FsbExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29u
c3RydWN0VmFyYXJncykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKHNraXBUb05leHQuaXNTZXQoKSkKKyAgICAgICAgICAgIHNraXBU
b05leHQubGluaygmc3R1YkppdCk7CisgICAgICAgIAorICAgICAgICBjYWxsQ2FzZXMuYXBwZW5k
KFBvbHltb3JwaGljQ2FsbENhc2UodmFyaWFudCwgY29kZUJsb2NrKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAodmFyaWFudC5pc0Nsb3N1cmVDYWxsKCkpIHsKKyAgICAgICAgICAgIHNraXBUb05l
eHQgPQorICAgICAgICAgICAgICAgIHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoLAorICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodmFyaWFudC5leGVjdXRhYmxlKCkpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNraXBUb05leHQgPQorICAgICAgICAgICAgICAg
IHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5v
dEVxdWFsLCBjYWxsZWVHUFIsCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cih2YXJpYW50LmZ1bmN0aW9uKCkpKTsKKyAgICAgICAgfQorICAgIAorICAgICAg
ICBDYWxsVG9Db2RlUHRyIGNhbGxUb0NvZGVQdHI7CisgICAgICAgIGNhbGxUb0NvZGVQdHIuY2Fs
bCA9IHN0dWJKaXQubmVhckNhbGwoKTsKKyAgICAgICAgY2FsbFRvQ29kZVB0ci5jb2RlUHRyID0g
Y29kZVB0cjsKKyAgICAgICAgY2FsbHMuYXBwZW5kKGNhbGxUb0NvZGVQdHIpOworICAgICAgICBk
b25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7CisgICAgfQogICAgIAogICAgIHNsb3dQYXRoLmxp
bmsoJnN0dWJKaXQpOworICAgIHNraXBUb05leHQubGluaygmc3R1YkppdCk7CiAgICAgc3R1Ykpp
dC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CkBAIC0xNjkxLDIzICsxNzY3LDMwIEBAIHZvaWQgbGlu
a0Nsb3N1cmVDYWxsKAogICAgIAogICAgIHN0dWJKaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZv
cmVSZXR1cm4oR1BSSW5mbzo6cmVnVDQpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBzbG93
ID0gc3R1YkppdC5qdW1wKCk7Ci0gICAgCisgICAgICAgIAogICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCBzdHViSml0LCBjYWxsZXJDb2RlQmxvY2spOwogICAgIAotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIoY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoY2FsbENhc2VzLnNpemUoKSA9PSBjYWxscy5zaXplKCkpOwor
ICAgIGZvciAoQ2FsbFRvQ29kZVB0ciBjYWxsVG9Db2RlUHRyIDogY2FsbHMpIHsKKyAgICAgICAg
cGF0Y2hCdWZmZXIubGluaygKKyAgICAgICAgICAgIGNhbGxUb0NvZGVQdHIuY2FsbCwgRnVuY3Rp
b25QdHIoY2FsbFRvQ29kZVB0ci5jb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICB9
CiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5
cGUoKSkpCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApKTsKICAgICBlbHNlCiAgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsoZG9uZSwgY2FsbExpbmtJbmZvLmhvdFBhdGhPdGhlci5sYWJlbEF0T2Zmc2V0
KDApKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5n
ZXRDVElTdHViKHZpcnR1YWxUaHVua0dlbmVyYXRvckZvcihDb2RlRm9yQ2FsbCwgcmVnaXN0ZXJz
KSkuY29kZSgpKSk7CisgICAgaWYgKGNhbGxDYXNlcy5zaXplKCkgPT0gT3B0aW9uczo6bWF4UG9s
eW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplKCkpCisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvdywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIodmlydHVhbFRodW5rR2VuZXJh
dG9yRm9yKENvZGVGb3JDYWxsLCByZWdpc3RlcnMpKS5jb2RlKCkpKTsKKyAgICBlbHNlCisgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0
dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yRm9yKHJlZ2lzdGVycykpLmNvZGUo
KSkpOwogICAgIAotICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGlu
ZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAorICAgIFJlZlB0cjxQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgUG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAogICAgICAg
ICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiQ2xvc3Vy
ZSBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldCAlcCAoJXMpIiwKKyAg
ICAgICAgICAgICgiUG9seW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVw
LCB0YXJnZXRzICVzIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9j
aykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
MCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICBjb2RlUHRyLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIHRvQ1N0cmluZyhwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spKS5kYXRh
KCkpKSwKLSAgICAgICAgKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjdXRhYmxlKSk7CisgICAgICAgICAgICAgdG9DU3RyaW5nKGxpc3REdW1wKGNhbGxDYXNlcykp
LmRhdGEoKSkpLAorICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGV4ZWMtPmNhbGxlckZyYW1lKCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzKSk7CiAgICAg
CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CiAgICAg
CkBAIC0xNzE2LDkgKzE3OTksMTQgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCiAgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgbGlua1Ns
b3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIHJlZ2lz
dGVycyk7CiAgICAgCisgICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBzdHViIHJv
dXRpbmUsIHRoYXQgb25lIHdpbGwgZGllIGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5kIHNlZXMK
KyAgICAvLyB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG9uIHN0YWNrLgogICAgIGNhbGxMaW5rSW5mby5z
dHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogICAgIAotICAgIEFTU0VSVCghY2FsbGVlQ29k
ZUJsb2NrIHx8IGNhbGxlZUNvZGVCbG9jay0+aXNJbmNvbWluZ0NhbGxBbHJlYWR5TGlua2VkKCZj
YWxsTGlua0luZm8pKTsKKyAgICAvLyBUaGUgY2FsbCBsaW5rIGluZm8gbm8gbG9uZ2VyIGhhcyBh
IGNhbGwgY2FjaGUgYXBhcnQgZnJvbSB0aGUganVtcCB0byB0aGUgcG9seW1vcnBoaWMgY2FsbAor
ICAgIC8vIHN0dWIuCisgICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQorICAgICAgICBj
YWxsTGlua0luZm8ucmVtb3ZlKCk7CiB9CiAKIHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZm
ZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBA
QAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRl
ICJDYWxsVmFyaWFudC5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CkBAIC00MSw3ICs0Miw3IEBAIHZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUq
LCBKU1ZhbHUKIHZvaWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50
aWZpZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwogdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9j
ayosIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwogdm9pZCBsaW5rU2xvd0Zv
cihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBSZWdp
c3RlclByZXNlcnZhdGlvbk1vZGUpOwotdm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiwg
Q2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgRXhlY3V0YWJsZUJhc2UqLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7Cit2b2lkIGxpbmtQb2x5bW9ycGhp
Y0NhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ2FsbFZhcmlhbnQsIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTW9kZSk7CiB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0
dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwogdm9pZCByZXNldEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsMjcgKzEzNywyNyBAQCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0NvbnN0cnVjdFRoYXRQCiAgICAgcmV0dXJuIGxpbmtG
b3JUaHVua0dlbmVyYXRvcih2bSwgQ29kZUZvckNvbnN0cnVjdCwgTXVzdFByZXNlcnZlUmVnaXN0
ZXJzKTsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxG
b3JUaHVua0dlbmVyYXRvcigKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHlt
b3JwaGljQ2FsbEZvclRodW5rR2VuZXJhdG9yKAogICAgIFZNKiB2bSwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKICAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKICAgICAK
LSAgICBzbG93UGF0aEZvcihqaXQsIHZtLCBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IocmVn
aXN0ZXJzKSk7CisgICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua1BvbHltb3Jw
aGljQ2FsbEZvcihyZWdpc3RlcnMpKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBh
dGNoQnVmZmVyLCAoIkxpbmsgY2xvc3VyZSBjYWxsICVzIHNsb3cgcGF0aCB0aHVuayIsIHJlZ2lz
dGVycyA9PSBNdXN0UHJlc2VydmVSZWdpc3RlcnMgPyAiIHRoYXQgcHJlc2VydmVzIHJlZ2lzdGVy
cyIgOiAiIikpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkxpbmsg
cG9seW1vcnBoaWMgY2FsbCAlcyBzbG93IHBhdGggdGh1bmsiLCByZWdpc3RlcnMgPT0gTXVzdFBy
ZXNlcnZlUmVnaXN0ZXJzID8gIiB0aGF0IHByZXNlcnZlcyByZWdpc3RlcnMiIDogIiIpKTsKIH0K
IAogLy8gRm9yIGNsb3N1cmUgb3B0aW1pemF0aW9ucywgd2Ugb25seSBpbmNsdWRlIGNhbGxzLCBz
aW5jZSBpZiB5b3UncmUgdXNpbmcgY2xvc3VyZXMgZm9yCiAvLyBvYmplY3QgY29uc3RydWN0aW9u
IHRoZW4geW91J3JlIGdvaW5nIHRvIGxvc2UgYmlnIHRpbWUgYW55d2F5LgotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQog
ewotICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcih2bSwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CisgICAgcmV0dXJuIGxpbmtQb2x5bW9ycGhpY0Nh
bGxGb3JUaHVua0dlbmVyYXRvcih2bSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKFZNKiB2bSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9s
eW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0g
ICAgcmV0dXJuIGxpbmtDbG9zdXJlQ2FsbEZvclRodW5rR2VuZXJhdG9yKHZtLCBNdXN0UHJlc2Vy
dmVSZWdpc3RlcnMpOworICAgIHJldHVybiBsaW5rUG9seW1vcnBoaWNDYWxsRm9yVGh1bmtHZW5l
cmF0b3Iodm0sIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgdmlydHVhbEZvclRodW5rR2VuZXJhdG9yKApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAxNzkyMjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NSwxNiArNjUsMTYgQEAgaW5saW5lIFRodW5rR2VuZXJhdG9yIGxpbmtUaHVua0dlbmVy
YXRvcgogICAgIHJldHVybiAwOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1
cmVDYWxsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xv
c3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1
bmtHZW5lcmF0b3IoVk0qKTsKIAotaW5saW5lIFRodW5rR2VuZXJhdG9yIGxpbmtDbG9zdXJlQ2Fs
bFRodW5rR2VuZXJhdG9yRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCitp
bmxpbmUgVGh1bmtHZW5lcmF0b3IgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yRm9y
KFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgc3dpdGNoIChyZWdp
c3RlcnMpIHsKICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6Ci0gICAg
ICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcjsKKyAgICAgICAgcmV0dXJu
IGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcjsKICAgICBjYXNlIE11c3RQcmVzZXJ2
ZVJlZ2lzdGVyczoKLSAgICAgICAgcmV0dXJuIGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNS
ZWdzVGh1bmtHZW5lcmF0b3I7CisgICAgICAgIHJldHVybiBsaW5rUG9seW1vcnBoaWNDYWxsVGhh
dFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTc5MjIzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMyLDYgKzMzMiw3IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0
aWNzKEMKICAgICAgICAgfQogICAgIH0KICAgICBkZWZhdWx0OgorICAgICAgICBkYXRhTG9nKCJV
bmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gTExJbnQ6ICIsICpjb2RlQmxvY2ssICJcbiIpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2
aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMTIgKzE3MCw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciog
b3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnREZXZpcnR1YWxpemF0
aW9uLCB0cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5n
LCB0cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVQb2x5bW9ycGhpY0NhbGxJbmxpbmluZywgdHJ1
ZSkgXAotICAgIHYoYm9vbCwgY2FsbFN0YXR1c1Nob3VsZFVzZUNhbGxFZGdlUHJvZmlsZSwgdHJ1
ZSkgXAotICAgIHYoYm9vbCwgY2FsbEVkZ2VQcm9maWxlUmVhbGx5UHJvY2Vzc2VzTG9nLCB0cnVl
KSBcCi0gICAgdihib29sLCBiYXNlbGluZURvZXNDYWxsRWRnZVByb2ZpbGluZywgZmFsc2UpIFwK
LSAgICB2KGJvb2wsIGRmZ0RvZXNDYWxsRWRnZVByb2ZpbGluZywgdHJ1ZSkgXAotICAgIHYoYm9v
bCwgZW5hYmxlQ2FsbEVkZ2VQcm9maWxpbmcsIHRydWUpIFwKLSAgICB2KHVuc2lnbmVkLCBmcmVx
dWVudENhbGxUaHJlc2hvbGQsIDIpIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhQb2x5bW9ycGhpY0Nh
bGxWYXJpYW50TGlzdFNpemUsIDgpIFwKICAgICB2KGJvb2wsIG9wdGltaXplTmF0aXZlQ2FsbHMs
IGZhbHNlKSBcCiAgICAgdihib29sLCBlbmFibGVPYmplY3RBbGxvY2F0aW9uU2lua2luZywgdHJ1
ZSkgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlz
aW9uIDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzY5LDEzICszNjksNiBAQCBWTSomIFZNOjpzaGFyZWRJbnN0YW5jZUlu
dGVybmFsKCkKICAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7CiB9CiAKLUNhbGxFZGdlTG9nJiBW
TTo6ZW5zdXJlQ2FsbEVkZ2VMb2coKQotewotICAgIGlmICghY2FsbEVkZ2VMb2cpCi0gICAgICAg
IGNhbGxFZGdlTG9nID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsRWRnZUxvZz4oKTsKLSAgICByZXR1
cm4gKmNhbGxFZGdlTG9nOwotfQotCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyBUaHVua0dlbmVy
YXRvciB0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyhJbnRyaW5zaWMgaW50cmluc2ljKQogewpA
QCAtNDU5LDkgKzQ1Miw2IEBAIHZvaWQgVk06OnN0b3BTYW1wbGluZygpCiAKIHZvaWQgVk06OnBy
ZXBhcmVUb0Rpc2NhcmRDb2RlKCkKIHsKLSAgICBpZiAoY2FsbEVkZ2VMb2cpCi0gICAgICAgIGNh
bGxFZGdlTG9nLT5wcm9jZXNzTG9nKCk7Ci0gICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CiAgICAg
ICAgIGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6d29ya2xpc3RGb3JJbmRleE9y
TnVsbChpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTc5
MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5
KQpAQCAtNzMsNyArNzMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQXJpdHlDaGVja0Zh
aWxSZXR1cm5UaHVua3M7CiBjbGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7Ci1jbGFzcyBDYWxsRWRn
ZUxvZzsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNoZTsKIGNsYXNzIENvbW1vbklk
ZW50aWZpZXJzOwpAQCAtMjM4LDkgKzIzNyw2IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8REZHOjpMb25nTGl2ZWRTdGF0ZT4gZGZnU3RhdGU7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEVkZ2VMb2c+IGNhbGxFZGdlTG9nOwotICAg
IENhbGxFZGdlTG9nJiBlbnN1cmVDYWxsRWRnZUxvZygpOwotCiAgICAgVk1UeXBlIHZtVHlwZTsK
ICAgICBDbGllbnREYXRhKiBjbGllbnREYXRhOwogICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRy
eUZyYW1lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245503</attachid>
            <date>2015-01-27 19:01:31 -0800</date>
            <delta_ts>2015-01-28 11:45:20 -0800</delta_ts>
            <desc>more refinements</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>133778</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NCBA
QAorMjAxNS0wMS0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcgc2hvdWxkIGJlIGJhc2VkIG9uIHBvbHltb3JwaGlj
IGNhbGwgaW5saW5lIGNhY2hpbmcgcmF0aGVyIHRoYW4gbG9nZ2luZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwNjYwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXaGVuIHdlIGZpcnN0IGlt
cGxlbWVudGVkIHBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcsIHdlIGRpZCB0aGUgcHJvZmlsaW5n
IGJhc2VkIG9uIGEgY2FsbAorICAgICAgICBlZGdlIGxvZy4gVGhlIGlkZWEgd2FzIHRvIHN0b3Jl
IGVhY2ggY2FsbCBlZGdlIChhIHR1cGxlIG9mIGNhbGwgc2l0ZSBhbmQgY2FsbGVlKSBpbnRvIGEK
KyAgICAgICAgZ2xvYmFsIGxvZyB0aGF0IHdhcyBwcm9jZXNzZWQgbGF6aWx5LiBQcm9jZXNzaW5n
IHRoZSBsb2cgd291bGQgZ2l2ZSBwcmVjaXNlIGNvdW50cyBvZiBjYWxsCisgICAgICAgIGVkZ2Vz
LCBhbmQgY291bGQgYmUgdXNlZCB0byBkcml2ZSB3ZWxsLWluZm9ybWVkIGlubGluaW5nIGRlY2lz
aW9ucyAtIHBvbHltb3JwaGljIG9yIG5vdC4KKyAgICAgICAgVGhpcyB3YXMgYSBzcGVlZC11cCBv
biB0aHJvdWdocHV0IHRlc3RzIGJ1dCBhIHNsb3ctZG93biBmb3IgbGF0ZW5jeSB0ZXN0cy4gSXQg
d2FzIGEgbmV0IHdpbgorICAgICAgICBub25ldGhlbGVzcy4KKyAgICAgICAgCisgICAgICAgIEV4
cGVyaWVuY2Ugd2l0aCB0aGlzIGNvZGUgc2hvd3MgdGhyZWUgdGhpbmdzLiBGaXJzdCwgdGhlIGNh
bGwgZWRnZSBwcm9maWxlciBpcyBidWdneSBhbmQKKyAgICAgICAgY29tcGxleC4gSXQgd291bGQg
dGFrZSB3b3JrIHRvIGZpeCB0aGUgYnVncy4gU2Vjb25kLCB0aGUgY2FsbCBlZGdlIHByb2ZpbGVy
IGluY3VycyBsb3RzIG9mCisgICAgICAgIG92ZXJoZWFkIGZvciBsYXRlbmN5IGNvZGUgdGhhdCB3
ZSBjYXJlIGRlZXBseSBhYm91dC4gVGhpcmQsIGl0J3Mgbm90IGF0IGFsbCBjbGVhciB0aGF0IHRo
ZQorICAgICAgICBwcmVjaWRlIGNhbGwgZWRnZSBjb3VudHMgYXJlIGFueSBtb3JlIHVzZWZ1bCB0
aGFuIGp1c3Qga25vd2luZyB0aGF0IGEgY2FsbCBzaXRlIGhhZCBhIGZpbml0ZQorICAgICAgICBu
dW1iZXIgb2YgY2FsbGVlcy4KKyAgICAgICAgCisgICAgICAgIFNvLCB0aGlzIHBhdGNoIHJlbW92
ZXMgdGhlIGNhbGwgZWRnZSBwcm9maWxlciBhbmQgcmVwbGFjZXMgaXQgd2l0aCBhIHBvbHltb3Jw
aGljIGNhbGwgaW5saW5lCisgICAgICAgIGNhY2hlLiBJZiB3ZSBtaXNzIHRoZSBiYXNpYyBjYWxs
IGlubGluZSBjYWNoZSwgd2UgaW5mbGF0ZSB0aGUgY2FjaGUgdG8gYmUgYSBqdW1wIHRvIGFuCisg
ICAgICAgIG91dC1vZi1saW5lIHN0dWIgdGhhdCBjYXNlcyBvbiB0aGUgcHJldmlvdXNseSBrbm93
biBjYWxsZWVzLiBJZiB0aGF0IG1pc3NlcyBhZ2FpbiwgdGhlbiB3ZQorICAgICAgICByZXdyaXRl
IHRoYXQgc3R1YiB0byBpbmNsdWRlIHRoZSBuZXcgY2FsbGVlLiBXZSBkbyB0aGlzIHVwIHRvIHRo
cmVlIGNhbGxlZXMuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBieXRlY29kZS9DYWxsRWRnZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2Fs
bEVkZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5oOiBSZW1vdmVk
LgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZUlubGluZXMuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAoSlNDOjpDYWxs
TGlua0luZm86OnVubGluayk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dmlzaXRXZWFr
KToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uaDoKKyAgICAgICAgKiBieXRlY29k
ZS9DYWxsTGlua1N0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpDYWxs
TGlua1N0YXR1cyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKToK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKToK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwpOgorICAgICAgICAo
SlNDOjpDYWxsTGlua1N0YXR1czo6bWFrZUNsb3N1cmVDYWxsKToKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtTdGF0dXM6OmR1bXApOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZyb21DYWxsRWRnZVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmg6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1
cyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjppc1NldCk6CisgICAgICAgIChKU0M6
OkNhbGxMaW5rU3RhdHVzOjp2YXJpYW50cyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVz
OjpzaXplKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmF0KToKKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtTdGF0dXM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0
YXR1czo6Y2FuT3B0aW1pemUpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6ZWRnZXMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y2FuVHJ1c3RDb3VudHMp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxWYXJpYW50LmNwcDoKKyAgICAgICAg
KEpTQzo6dmFyaWFudExpc3RXaXRoVmFyaWFudCk6CisgICAgICAgIChKU0M6OmRlc3BlY2lmaWVk
VmFyaWFudExpc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxWYXJpYW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp+Q29k
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhp
Y0NhbGwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om5vdGljZUluY29taW5nQ2FsbCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aXNJbmNvbWlu
Z0NhbGxBbHJlYWR5TGlua2VkKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmFkZENhbGxXaXRob3V0U2V0dGluZ1Jlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpm
b2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9u
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0
aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFn
YXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAg
IChKU0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZTo6cmVtb3ZlRlRMUHJvZmlsaW5n
KTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAg
ICAoSlNDOjpIZWFwOjpjb2xsZWN0KToKKyAgICAgICAgKiBqaXQvQ2xvc3VyZUNhbGxTdHViUm91
dGluZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6Om9w
ZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGxGb3IpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25M
aW5rQ2xvc3VyZUNhbGxGb3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRTdHViUm91dGlu
ZS5oOgorICAgICAgICAqIGppdC9KSVRXcml0ZUJhcnJpZXIuaDoKKyAgICAgICAgKiBqaXQvUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1v
cnBoaWNDYWxsTm9kZTo6flBvbHltb3JwaGljQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpQb2x5
bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmspOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZTo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6flBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKToK
KyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZhcmlhbnRzKToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZpc2l0V2Vhayk6CisgICAg
ICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3Rz
SW50ZXJuYWwpOgorICAgICAgICAqIGppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsTm9kZTo6UG9seW1vcnBoaWNDYWxs
Tm9kZSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbENhc2U6OlBvbHltb3JwaGljQ2Fs
bENhc2UpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxDYXNlOjp2YXJpYW50KToKKyAg
ICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsQ2FzZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKiBq
aXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjps
aW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAgICAgICAqIGppdC9UaHVua0dlbmVy
YXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsRm9yVGh1bmtHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbEZvclRodW5rR2VuZXJh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0
b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0
b3JzLmg6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvckZv
cik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6
OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAgICAgICogcnVudGltZS9P
cHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpw
cmVwYXJlVG9EaXNjYXJkQ29kZSk6CisgICAgICAgIChKU0M6OlZNOjplbnN1cmVDYWxsRWRnZUxv
Zyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE1LTAxLTI3ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBERkdCaW5hcnlTd2l0
Y2ggb3V0IG9mIHRoZSBERkcgc28gdGhhdCBhbGwgb2YgdGhlIEpJVHMgY2FuIHVzZSBpdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3OTIyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yODEsMTMgKzI4MSw4IEBACiAJCTBGM0IzQTI4MTU0NEM5OTcw
MDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYgLyog
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGM0IzQTJCMTU0NzUwMDAwMDNFRDBGRiAvKiBERkdWYWxp
ZGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNCM0EyOTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwICovOyB9OwogCQkwRjNC
M0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBE
RkdWYWxpZGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTBGM0I3RTI2MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjAxOUExMUI4MDAwRDlC
QzU2IC8qIENhbGxFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEYzQjdFMjcxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0Uy
MTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmNwcCAqLzsgfTsKLQkJMEYzQjdF
MjgxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjIxOUExMUI4MDAwRDlCQzU2IC8q
IENhbGxFZGdlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTBGM0I3RTI5MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGVJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNCN0UyMzE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0I3RTJBMTlB
MTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZh
cmlhbnQuY3BwICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3
RTI1MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGM0I3RTJEMTlBMTJBQUUwMEQ5QkM1NiAv
KiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjNCN0UyQzE5QTEyQUFFMDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkw
RjNEMEJCQzE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0
MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi87IH07CiAJCTBGM0Qw
QkJEMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBG
QzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBE
RkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVy
aW5nLmNwcCAqLzsgfTsKQEAgLTM4Niw4ICszODEsNiBAQAogCQkwRjcwMjVBQTE3MTRCMEZDMDAz
ODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY3MTRDQTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRjcxNENBNTE2RUE5MkYyMDBGM0VCRUIgLyogREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkwRjczRDdBRTE2NUExNDJEMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHVi
Um91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjczRDdBQjE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAg
Ki87IH07Ci0JCTBGNzNEN0FGMTY1QTE0MzAwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0
aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcz
RDdBQzE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzQzQkFBMTZCODgy
NDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMDE2NTFDNjYxMDBBODBBRkUgLyogQVJN
NjREaXNhc3NlbWJsZXIuY3BwICovOyB9OwogCQkwRjc1NzZEMjE4RTFGRUU5MDAyRUY0Q0QgLyog
QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKIAkJMEY3NTc2RDMxOEUxRkVFOTAwMkVGNENE
IC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNjAyLDYgKzU5NSw4IEBACiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5
NkM0OCAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsK
IAkJMEZFNzIxMUQxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzIxMUIxOTNCOUM1OTAw
MzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovOyB9OwogCQkwRkU3MjExRTE5M0I5QzU5MDAz
MUY2RUQgLyogREZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU4
MzQxNzFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODM0MTUxQTZF
Rjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKKwkJ
MEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4MzQxNjFB
NkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU4NTM0QjE3MjNDREE1
MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBE
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4
RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZFOTVGNzkxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTk1Rjc3MThC
NTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgKi87IH07CkBAIC0xOTUwLDEzICsx
OTQ1LDggQEAKIAkJMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0ZHU2ltcGxp
ZmljYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8q
IERGR1ZhbGlkYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R1ZhbGlkYXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYWxpZGF0ZS5oOyBwYXRoID0g
ZGZnL0RGR1ZhbGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0I3RTIw
MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWxsRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNCN0Uy
MTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxFZGdlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGM0I3RTIyMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2Zp
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2VQcm9maWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0I3RTIzMTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENhbGxFZGdlUHJvZmlsZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0I3RTJDMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxs
RWRnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0QwQkJBMTk0QTQxNDMwMEZDOUNG
OSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1
cmVDaGVjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFN0cnVj
dHVyZUNoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE4MTlEMzUz
QTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBwYXRoID0gZGZnL0RG
R1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA1
Niw4ICsyMDQ2LDYgQEAKIAkJMEY3MDI1QTgxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRD
b21waWxlckNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVC
IC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHBhdGgg
PSBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGNzNEN0FCMTY1QTE0MkEw
MEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjczRDdBQzE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNh
bGxTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbG9zdXJl
Q2FsbFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzU3NkQw
MThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzU3NkQxMThFMUZFRTkwMDJF
RjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUU3R1YlJvdXRpbmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyODQsNiArMjI3Miw4IEBACiAJCTBGRTIy
OEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNzIx
MUIxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHVHJhbnNpdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHVHJh
bnNpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTcyMTFDMTkzQjlD
NTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1RyYW5zaXRpb24uaDsgcGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0
OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBh
dGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFOTVGNzcxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTERhdGFTZWN0aW9u
LmNwcDsgcGF0aCA9IGZ0bC9GVExEYXRhU2VjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zNzQ3LDggKzM3MzcsNiBAQAogCQkJCTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2
NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAv
KiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQkwRjI0RTUzRDE3RUE5RjU5MDBBQkIyMTcgLyogQ0Nh
bGxIZWxwZXJzLmggKi8sCi0JCQkJMEY3M0Q3QUIxNjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1cmVD
YWxsU3R1YlJvdXRpbmUuY3BwICovLAotCQkJCTBGNzNEN0FDMTY1QTE0MkEwMEFDQUI3MSAvKiBD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0
IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8sCiAJCQkJQTdCNDhEQjYwRUU3NENGQzAwRENCREI2
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovLAogCQkJCUE3QjQ4REI1MEVFNzRDRkMwMERD
QkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi8sCkBAIC0zNzk2LDYgKzM3ODQsOCBAQAog
CQkJCTBGQzcxMkUxMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3NDhEMDA3MTVCMDUgLyogSlNJbnRlcmZh
Y2VKSVQuaCAqLywKKwkJCQkwRkU4MzQxNTFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUuY3BwICovLAorCQkJCTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oICovLAogCQkJCTBGQTdBOEU5MThCNDEzQzgwMDUy
MzcxRCAvKiBSZWcuY3BwICovLAogCQkJCTBGQTdBOEVBMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcu
aCAqLywKIAkJCQkwRjZCMUNCQjE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRp
b25XcmFwcGVyR2VuZXJhdG9yLmNwcCAqLywKQEAgLTUwMjcsMTEgKzUwMTcsNiBAQAogCQkJCTBG
NjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVz
LmggKi8sCiAJCQkJMEY4ODVFMTAxODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmgg
Ki8sCiAJCQkJMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovLAotCQkJ
CTBGM0I3RTJDMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAgKi8sCi0JCQkJMEYzQjdF
MjAxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlLmggKi8sCi0JCQkJMEYzQjdFMjExOUExMUI4
MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5jcHAgKi8sCi0JCQkJMEYzQjdFMjIxOUExMUI4
MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5oICovLAotCQkJCTBGM0I3RTIzMTlBMTFCODAw
MEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmggKi8sCiAJCQkJMEYwQjgzQUUxNEJD
RjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8sCiAJCQkJMEYwQjgzQUYxNEJDRjcx
NDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICovLAogCQkJCTBGOTMzMjkzMTRDQTdEQzEwMDg1
RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgKi8sCkBAIC01NDgzLDcgKzU0NjgsNiBAQAogCQkJ
CTBGNjlDQzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyNEU1NDIxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM2QUFBRTUwRTFGNDI2NTAwQUQ4N0Q4IC8qIENsYXNzSW5mby5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMEY3M0Q3QUYxNjVBMTQzMDAwQUNBQjcxIC8qIENsb3N1cmVDYWxs
U3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4
MSAvKiBDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEY5NDQxMTY2NzYzMzIwMEQ2
MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0YzNDE4MjAy
MEQ3MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTU1NzQsNyArNTU1OCw2IEBACiAJCQkJMEZGRkM5NUExNEVGOTBBOTAwQzcyNTMy
IC8qIERGR0NTRVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJGQzc3MzE2RTEyRjc0MDAz
OEQ5NzYgLyogREZHRENFUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjlBMTcyRjA1
MDEwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTBGM0I3RTI4MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyQzBGN0NFMTdCQkZDNUIwMDQ2NEZFNCAvKiBERkdEZXNpcmVkVHJhbnNpdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyOTgxRkQ5MTdCQUVFNEIw
MEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovLApAQCAt
NTg2NSw3ICs1ODQ4LDYgQEAKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3Jp
dGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAy
MUExRDkwMDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MEYzQjdFMjkxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyQ0YzOUMyMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NjE0MEQyMTgyOTgyQ0IwMDc1MDYyNCAvKiBK
U0FyZ3VtZW50c0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNzBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTg5LDcgKzYxNzEsNiBA
QAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJv
dmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYx
NjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjNCN0Uy
NjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Mzg2
NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXplZFRodW5rSklULmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlw
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjM2LDYgKzYyMTcsNyBAQAogCQkJCTBGRjQyNzQ5MTU4
RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVB
QjM5MTc5OUU0QjIwMEQyODMzRCAvKiBVRGlzODZEaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMzEzQkZERTcxMDAyM0Q4N0Mg
LyogVWludDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0MjE3QURC
NUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjNG
MTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTY3NzQs
NyArNjc1Niw2IEBACiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5m
by5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2Fs
bExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRTQxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk2OUEwNzk2MEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDAxNjY3NjMzMDAwRDYxOTcxIC8qIENvZGVC
bG9ja0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDOTdGMzMxODIwMjBENzAwMkM5QjI2
IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTY5NjAsOCArNjk0MSw4IEBACiAJCQkJMEYyMzVCRDUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4
aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRDgxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIzNUJEQTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTBGM0I3RTI3MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGMjk5NkIxN0EwQkI2NzAwMTA0MTdBIC8qIEZUTEZh
aWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFODM0MTcxQTZFRjk3QjAwRDA0ODQ3IC8qIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzE5
MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGluZUNhY2hlU2l6ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNCMDBCQjcyMkMgLyogRlRMSW50
cmluc2ljUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTcxNTMsNyArNzEzNCw2IEBA
CiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExMSW50RGF0YS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3MiAvKiBMTEludEV4
Y2VwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYzQjdFMkQxOUExMkFBRTAwRDlCQzU2
IC8qIENhbGxFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE0MTRCQTdGOEQwMEJG
RTI3MiAvKiBMTEludFNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBCODM5QzE0
QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZD
RUZBQ0QxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuaAkocmV2aXNpb24gMTc5
MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwLDE3ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdHlwZWRlZiB1
aW50MTZfdCBDYWxsRWRnZUNvdW50VHlwZTsKLQogY2xhc3MgQ2FsbEVkZ2UgewogcHVibGljOgog
ICAgIENhbGxFZGdlKCk7Ci0gICAgQ2FsbEVkZ2UoQ2FsbFZhcmlhbnQsIENhbGxFZGdlQ291bnRU
eXBlKTsKKyAgICBDYWxsRWRnZShDYWxsVmFyaWFudCwgdWludDMyX3QpOwogICAgIAogICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY2FsbGVlOyB9CiAgICAgCiAgICAgQ2Fs
bFZhcmlhbnQgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWU7IH0KLSAgICBDYWxsRWRn
ZUNvdW50VHlwZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0KKyAgICB1aW50MzJf
dCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0KICAgICAKICAgICBDYWxsRWRnZSBk
ZXNwZWNpZmllZENsb3N1cmUoKSBjb25zdAogICAgIHsKQEAgLTQ5LDEyICs0NywxMiBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi1wdWJs
aWM6Citwcml2YXRlOgogICAgIENhbGxWYXJpYW50IG1fY2FsbGVlOwotICAgIENhbGxFZGdlQ291
bnRUeXBlIG1fY291bnQ7CisgICAgdWludDMyX3QgbV9jb3VudDsKIH07CiAKLWlubGluZSBDYWxs
RWRnZTo6Q2FsbEVkZ2UoQ2FsbFZhcmlhbnQgY2FsbGVlLCBDYWxsRWRnZUNvdW50VHlwZSBjb3Vu
dCkKK2lubGluZSBDYWxsRWRnZTo6Q2FsbEVkZ2UoQ2FsbFZhcmlhbnQgY2FsbGVlLCB1aW50MzJf
dCBjb3VudCkKICAgICA6IG1fY2FsbGVlKGNhbGxlZSkKICAgICAsIG1fY291bnQoY291bnQpCiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQ
cm9maWxlLmNwcAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMzYwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhbGxFZGdlUHJvZmlsZS5oIgotCi0jaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1DYWxsRWRnZUxpc3QgQ2FsbEVkZ2VQcm9maWxlOjpjYWxsRWRnZXMoKSBj
b25zdAotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0g
ICAgQ2FsbEVkZ2VMaXN0IHJlc3VsdDsKLSAgICAKLSAgICBDYWxsVmFyaWFudCBwcmltYXJ5Q2Fs
bGVlID0gbV9wcmltYXJ5Q2FsbGVlOwotICAgIENhbGxFZGdlQ291bnRUeXBlIG51bUNhbGxzVG9Q
cmltYXJ5ID0gbV9udW1DYWxsc1RvUHJpbWFyeTsKLSAgICAvLyBEZWZlbmQgYWdhaW5zdCByYWNl
cy4gVGhlc2UgZmllbGRzIGFyZSBtb2RpZmllZCBieSB0aGUgbG9nIHByb2Nlc3NvciB3aXRob3V0
IGxvY2tpbmcuCi0gICAgaWYgKCEhcHJpbWFyeUNhbGxlZSAmJiBudW1DYWxsc1RvUHJpbWFyeSkK
LSAgICAgICAgcmVzdWx0LmFwcGVuZChDYWxsRWRnZShwcmltYXJ5Q2FsbGVlLCBudW1DYWxsc1Rv
UHJpbWFyeSkpOwotICAgIAotICAgIGlmIChtX290aGVyQ2FsbGVlcykgewotICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCBpZiB0aGUgcHJpbWFyeSB0aHJlYWQgaGFkIGp1c3QgY3JlYXRlZCBhIG1f
b3RoZXJDYWxsZXMgd2hpbGUgbG9nCi0gICAgICAgIC8vIHByb2Nlc3NpbmcsIHdlIHNlZSBhIGNv
bnNpc3RlbnRseSBjcmVhdGVkIG9uZS4gVGhlIGxvY2sgYmVpbmcgaGVsZCBpcyBpbnN1ZmZpY2ll
bnQgZm9yCi0gICAgICAgIC8vIHRoaXMsIHNpbmNlIHRoZSBsb2cgcHJvY2Vzc29yIHdpbGwgb25s
eSBncmFiIHRoZSBsb2NrIHdoZW4gbWVyZ2luZyB0aGUgc2Vjb25kYXJ5Ci0gICAgICAgIC8vIHNw
ZWN0cnVtIGludG8gdGhlIHByaW1hcnkgb25lIGJ1dCBtYXkgc3RpbGwgY3JlYXRlIHRoZSBkYXRh
IHN0cnVjdHVyZSB3aXRob3V0IGhvbGRpbmcKLSAgICAgICAgLy8gbG9ja3MuCi0gICAgICAgIFdU
Rjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBmb3IgKENhbGxFZGdlJiBlbnRyeSA6IG1fb3Ro
ZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZCkgewotICAgICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3Qg
dGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIHByaW1hcnkgZHVwbGljYXRlcyBhbiBlbnRyeSBpbiB0
aGUgc2Vjb25kYXJ5Ci0gICAgICAgICAgICAvLyBzcGVjdHJ1bS4gVGhhdCBjYW4gaGFwcGVuIHdo
ZW4gdGhlIEdDIHJlbW92ZXMgdGhlIHByaW1hcnkuIFdlIGNvdWxkIGhhdmUgdGhlIEdDIGZpeAot
ICAgICAgICAgICAgLy8gdGhlIHNpdHVhdGlvbiBieSBjaGFuZ2luZyB0aGUgcHJpbWFyeSB0byBi
ZSBzb21ldGhpbmcgZnJvbSB0aGUgc2Vjb25kYXJ5IHNwZWN0cnVtLAotICAgICAgICAgICAgLy8g
YnV0IHRoaXMgZml4IHNlZW1zIHNpbXBsZXIgdG8gaW1wbGVtZW50IGFuZCBhbHNvIGNoZWFwZXIu
Ci0gICAgICAgICAgICBpZiAoZW50cnkuY2FsbGVlKCkgPT0gcmVzdWx0WzBdLmNhbGxlZSgpKSB7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gQ2FsbEVkZ2UocmVzdWx0WzBdLmNhbGxlZSgp
LCBlbnRyeS5jb3VudCgpICsgcmVzdWx0WzBdLmNvdW50KCkpOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXN1bHQu
YXBwZW5kKGVudHJ5KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzdGQ6OnNvcnQocmVz
dWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgW10gKGNvbnN0IENhbGxFZGdlJiBhLCBjb25zdCBD
YWxsRWRnZSYgYikgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gYS5jb3VudCgpID4gYi5j
b3VudCgpOwotICAgICAgICB9KTsKLSAgICAKLSAgICBpZiAocmVzdWx0LnNpemUoKSA+PSAyKQot
ICAgICAgICBBU1NFUlQocmVzdWx0WzBdLmNvdW50KCkgPj0gcmVzdWx0Lmxhc3QoKS5jb3VudCgp
KTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1DYWxsRWRnZUNvdW50VHlwZSBDYWxs
RWRnZVByb2ZpbGU6Om51bUNhbGxzVG9Lbm93bkNlbGxzKCkgY29uc3QKLXsKLSAgICBDYWxsRWRn
ZUNvdW50VHlwZSByZXN1bHQgPSAwOwotICAgIGZvciAoQ2FsbEVkZ2UmIGVkZ2UgOiBjYWxsRWRn
ZXMoKSkKLSAgICAgICAgcmVzdWx0ICs9IGVkZ2UuY291bnQoKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1zdGF0aWMgYm9vbCB3b3J0aERlc3BlY2lmeWluZyhjb25zdCBDYWxsVmFyaWFudCYg
dmFyaWFudCkKLXsKLSAgICByZXR1cm4gIUhlYXA6OmlzTWFya2VkKHZhcmlhbnQucmF3Q2FsbGVl
Q2VsbCgpKQotICAgICAgICAmJiBIZWFwOjppc01hcmtlZCh2YXJpYW50LmRlc3BlY2lmaWVkQ2xv
c3VyZSgpLnJhd0NhbGxlZUNlbGwoKSk7Ci19Ci0KLWJvb2wgQ2FsbEVkZ2VQcm9maWxlOjp3b3J0
aERlc3BlY2lmeWluZygpCi17Ci0gICAgaWYgKG1fY2xvc3VyZXNBcmVEZXNwZWNpZmllZCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGJvb2wgZGlkU2VlRW50cnkgPSBmYWxzZTsK
LSAgICAKLSAgICBpZiAoISFtX3ByaW1hcnlDYWxsZWUpIHsKLSAgICAgICAgZGlkU2VlRW50cnkg
PSB0cnVlOwotICAgICAgICBpZiAoIUpTQzo6d29ydGhEZXNwZWNpZnlpbmcobV9wcmltYXJ5Q2Fs
bGVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1f
b3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fb3RoZXJDYWxsZWVz
LT5tX3Byb2Nlc3NlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGRpZFNlZUVudHJ5ID0g
dHJ1ZTsKLSAgICAgICAgICAgIGlmICghSlNDOjp3b3J0aERlc3BlY2lmeWluZyhtX290aGVyQ2Fs
bGVlcy0+bV9wcm9jZXNzZWRbaV0uY2FsbGVlKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZGlkU2VlRW50cnk7Ci19
Ci0KLXZvaWQgQ2FsbEVkZ2VQcm9maWxlOjp2aXNpdFdlYWsoKQotewotICAgIGlmICghbV9wcmlt
YXJ5Q2FsbGVlICYmICFtX290aGVyQ2FsbGVlcykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0gICAgLy8gU2VlIGlm
IGFueXRoaW5nIGlzIGRlYWQgYW5kIGlmIHRoYXQgY2FuIGJlIHJlY3RpZmllZCBieSBkZXNwZWNp
ZnlpbmcuCi0gICAgaWYgKHdvcnRoRGVzcGVjaWZ5aW5nKCkpIHsKLSAgICAgICAgQ2FsbFNwZWN0
cnVtIG5ld1NwZWN0cnVtOwotICAgICAgICAKLSAgICAgICAgaWYgKCEhbV9wcmltYXJ5Q2FsbGVl
KQotICAgICAgICAgICAgbmV3U3BlY3RydW0uYWRkKG1fcHJpbWFyeUNhbGxlZS5kZXNwZWNpZmll
ZENsb3N1cmUoKSwgbV9udW1DYWxsc1RvUHJpbWFyeSk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
bV9vdGhlckNhbGxlZXMpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fb3RoZXJD
YWxsZWVzLT5tX3Byb2Nlc3NlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICBuZXdT
cGVjdHJ1bS5hZGQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nl
c3NlZFtpXS5jYWxsZWUoKS5kZXNwZWNpZmllZENsb3N1cmUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNvdW50KCkpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8Q2FsbFNwZWN0cnVtOjpLZXlB
bmRDb3VudD4gbGlzdCA9IG5ld1NwZWN0cnVtLmJ1aWxkTGlzdCgpOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChsaXN0LnNpemUoKSk7Ci0gICAgICAgIG1fcHJpbWFyeUNhbGxlZSA9IGxpc3QubGFz
dCgpLmtleTsKLSAgICAgICAgbV9udW1DYWxsc1RvUHJpbWFyeSA9IGxpc3QubGFzdCgpLmNvdW50
OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fb3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgICAgICBt
X290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuY2xlYXIoKTsKLQotICAgICAgICAgICAgLy8gV2Ug
Y291bGQgaGF2ZSBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgR0MgY2xlYXJzIHRoZSBwcmltYXJ5IGFu
ZCB0aGVuIGxvZyBwcm9jZXNzaW5nCi0gICAgICAgICAgICAvLyByZWluc3RhdGVzIGl0IHdpdGhv
dXQgZXZlciBkb2luZyBhbiBhZGRTbG93IGFuZCBzdWJzZXF1ZW50IG1lcmdlQmFjay4gSW4gc3Vj
aCBhIGNhc2UKLSAgICAgICAgICAgIC8vIHRoZSBwcmltYXJ5IGNvdWxkIGR1cGxpY2F0ZSBhbiBl
bnRyeSBpbiBvdGhlckNhbGxlZXMsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiB0aG91Z2ggd2UKLSAg
ICAgICAgICAgIC8vIGhhZCBhbiBvdGhlckNhbGxlZXMgb2JqZWN0LCB0aGUgbGlzdCBzaXplIGlz
IGp1c3QgMS4KLSAgICAgICAgICAgIGlmIChsaXN0LnNpemUoKSA+PSAyKSB7Ci0gICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGlzdC5zaXplKCkgLSAxOyBpLS07KQotICAgICAgICAg
ICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuYXBwZW5kKENhbGxFZGdlKGxp
c3RbaV0ua2V5LCBsaXN0W2ldLmNvdW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIG1fY2xvc3VyZXNBcmVEZXNwZWNpZmllZCA9IHRydWU7Ci0gICAgICAg
IAotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICghIW1fcHJpbWFyeUNhbGxl
ZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9wcmltYXJ5Q2FsbGVlLnJhd0NhbGxlZUNlbGwoKSkpIHsK
LSAgICAgICAgbV9udW1DYWxsc1RvVW5rbm93bkNlbGwgKz0gbV9udW1DYWxsc1RvUHJpbWFyeTsK
LSAgICAgICAgCi0gICAgICAgIG1fcHJpbWFyeUNhbGxlZSA9IENhbGxWYXJpYW50KCk7Ci0gICAg
ICAgIG1fbnVtQ2FsbHNUb1ByaW1hcnkgPSAwOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9vdGhl
ckNhbGxlZXMpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3RoZXJDYWxs
ZWVzLT5tX3Byb2Nlc3NlZC5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKEhlYXA6Omlz
TWFya2VkKG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jYWxsZWUoKS5yYXdDYWxsZWVD
ZWxsKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX251bUNhbGxzVG9Vbmtub3duQ2VsbCArPSBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNz
ZWRbaV0uY291bnQoKTsKLSAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtp
LS1dID0gbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLmxhc3QoKTsKLSAgICAgICAgICAgIG1f
b3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIC8vIE9ubHkgZXhpc3RzIHdoaWxlIHdlIGFyZSBwcm9jZXNzaW5nIHRoZSBs
b2cuCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlT
cGVjdHJ1bSk7Ci0gICAgfQotfQotCi12b2lkIENhbGxFZGdlUHJvZmlsZTo6YWRkU2xvdyhDYWxs
VmFyaWFudCBjYWxsZWUsIENhbGxFZGdlUHJvZmlsZVZlY3RvciYgbWVyZ2VCYWNrTG9nKQotewot
ICAgIC8vIFRoaXMgZXhpc3RzIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgc3BlY3RydW0gd2Fz
bid0IGNyZWF0ZWQgeWV0LCBvciB3ZSdyZSBzdG9yaW5nIHRvIGEKLSAgICAvLyBwYXJ0aWN1bGFy
IHNwZWN0cnVtIGZvciB0aGUgZmlyc3QgdGltZSBkdXJpbmcgYSBsb2cgcHJvY2Vzc2luZyBpdGVy
YXRpb24uCi0gICAgCi0gICAgaWYgKCFtX290aGVyQ2FsbGVlcykgewotICAgICAgICBtX290aGVy
Q2FsbGVlcyA9IHN0ZDo6bWFrZV91bmlxdWU8U2Vjb25kYXJ5PigpOwotICAgICAgICAvLyBJZiBh
IGNvbXBpbGVyIHRocmVhZCBub3RpY2VzIHRoZSBtX290aGVyQ2FsbGVlcyBiZWluZyBub24tbnVs
bCwgd2Ugd2FudCB0byBtYWtlIHN1cmUKLSAgICAgICAgLy8gdGhhdCBpdCBzZWVzIGEgZnVsbHkg
Y3JlYXRlZCBvbmUuCi0gICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgfQotICAg
IAotICAgIGlmICghbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0pIHsKLSAgICAg
ICAgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0gPSBzdGQ6Om1ha2VfdW5pcXVl
PENhbGxTcGVjdHJ1bT4oKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vdGhlckNhbGxl
ZXMtPm1fcHJvY2Vzc2VkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgbV9vdGhlckNhbGxl
ZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0tPmFkZCgKLSAgICAgICAgICAgICAgICBtX290aGVyQ2Fs
bGVlcy0+bV9wcm9jZXNzZWRbaV0uY2FsbGVlKCksCi0gICAgICAgICAgICAgICAgbV9vdGhlckNh
bGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNvdW50KCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSdyZSBzZWVp
bmcgdGhpcyBwcm9maWxlIGR1cmluZyB0aGlzIGxvZwotICAgICAgICAvLyBwcm9jZXNzaW5nIGl0
ZXJhdGlvbi4KLSAgICAgICAgbWVyZ2VCYWNrTG9nLmFwcGVuZCh0aGlzKTsKLSAgICB9Ci0gICAg
Ci0gICAgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0tPmFkZChjYWxsZWUpOwot
fQotCi12b2lkIENhbGxFZGdlUHJvZmlsZTo6bWVyZ2VCYWNrKCkKLXsKLSAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIAotICAgIFJFTEVBU0VfQVNTRVJUKG1fb3Ro
ZXJDYWxsZWVzKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3Jh
cnlTcGVjdHJ1bSk7Ci0gICAgCi0gICAgaWYgKCEhbV9wcmltYXJ5Q2FsbGVlKQotICAgICAgICBt
X290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bS0+YWRkKG1fcHJpbWFyeUNhbGxlZSwg
bV9udW1DYWxsc1RvUHJpbWFyeSk7Ci0gICAgCi0gICAgaWYgKCFtX2Nsb3N1cmVzQXJlRGVzcGVj
aWZpZWQpIHsKLSAgICAgICAgQ2FsbFNwZWN0cnVtIG5ld1NwZWN0cnVtOwotICAgICAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogKm1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtKQotICAg
ICAgICAgICAgbmV3U3BlY3RydW0uYWRkKGVudHJ5LmtleS5kZXNwZWNpZmllZENsb3N1cmUoKSwg
ZW50cnkudmFsdWUpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5ld1NwZWN0cnVtLnNpemUoKSA8
IG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtLT5zaXplKCkpIHsKLSAgICAgICAg
ICAgICptX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSA9IG5ld1NwZWN0cnVtOwot
ICAgICAgICAgICAgbV9jbG9zdXJlc0FyZURlc3BlY2lmaWVkID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICBWZWN0b3I8Q2FsbFNwZWN0cnVtOjpLZXlBbmRDb3VudD4gbGlzdCA9
IG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtLT5idWlsZExpc3QoKTsKLSAgICBt
X290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSA9IG51bGxwdHI7Ci0gICAgCi0gICAg
bV9wcmltYXJ5Q2FsbGVlID0gbGlzdC5sYXN0KCkua2V5OwotICAgIG1fbnVtQ2FsbHNUb1ByaW1h
cnkgPSBsaXN0Lmxhc3QoKS5jb3VudDsKLSAgICBsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAKLSAg
ICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuY2xlYXIoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGNvdW50ID0gbWF4S25vd25DYWxsZWVzOyBjb3VudC0tICYmICFsaXN0LmlzRW1wdHkoKTspIHsK
LSAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLmFwcGVuZChDYWxsRWRnZShsaXN0
Lmxhc3QoKS5rZXksIGxpc3QubGFzdCgpLmNvdW50KSk7Ci0gICAgICAgIGxpc3QucmVtb3ZlTGFz
dCgpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaXN0LnNpemUoKTsgaS0t
OykKLSAgICAgICAgbV9udW1DYWxsc1RvVW5rbm93bkNlbGwgKz0gbGlzdFtpXS5jb3VudDsKLX0K
LQotdm9pZCBDYWxsRWRnZVByb2ZpbGU6OmZhZGVCeUhhbGYoKQotewotICAgIG1fbnVtQ2FsbHNU
b1ByaW1hcnkgPj49IDE7Ci0gICAgbV9udW1DYWxsc1RvTm90Q2VsbCA+Pj0gMTsKLSAgICBtX251
bUNhbGxzVG9Vbmtub3duQ2VsbCA+Pj0gMTsKLSAgICBtX3RvdGFsQ291bnQgPj49IDE7Ci0gICAg
Ci0gICAgaWYgKG1fb3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
b3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIG1f
b3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXSA9IENhbGxFZGdlKAotICAgICAgICAgICAgICAg
IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jYWxsZWUoKSwKLSAgICAgICAgICAgICAg
ICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY291bnQoKSA+PiAxKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgaWYgKG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0
cnVtKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKm1fb3RoZXJDYWxsZWVzLT5t
X3RlbXBvcmFyeVNwZWN0cnVtKQotICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlID4+PSAxOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1DYWxsRWRnZUxvZzo6Q2FsbEVkZ2VMb2coKQotICAgIDog
bV9zY2FsZWRMb2dJbmRleChsb2dTaXplICogc2l6ZW9mKEVudHJ5KSkKLXsKLSAgICBBU1NFUlQo
IShtX3NjYWxlZExvZ0luZGV4ICUgc2l6ZW9mKEVudHJ5KSkpOwotfQotCi1DYWxsRWRnZUxvZzo6
fkNhbGxFZGdlTG9nKCkgeyB9Ci0KLWJvb2wgQ2FsbEVkZ2VMb2c6OmlzRW5hYmxlZCgpCi17Ci0g
ICAgcmV0dXJuIE9wdGlvbnM6OmVuYWJsZUNhbGxFZGdlUHJvZmlsaW5nKCkgJiYgT3B0aW9uczo6
dXNlRlRMSklUKCk7Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotCi1leHRlcm4gIkMiIEpJVF9PUEVS
QVRJT04gdm9pZCBvcGVyYXRpb25Qcm9jZXNzQ2FsbEVkZ2VMb2coQ2FsbEVkZ2VMb2cqKSBXVEZf
SU5URVJOQUw7Ci1leHRlcm4gIkMiIEpJVF9PUEVSQVRJT04gdm9pZCBvcGVyYXRpb25Qcm9jZXNz
Q2FsbEVkZ2VMb2coQ2FsbEVkZ2VMb2cqIGxvZykKLXsKLSAgICBsb2ctPnByb2Nlc3NMb2coKTsK
LX0KLQotdm9pZCBDYWxsRWRnZUxvZzo6ZW1pdExvZ0NvZGUoQ0NhbGxIZWxwZXJzJiBqaXQsIENh
bGxFZGdlUHJvZmlsZSYgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MgY2FsbGVlUmVncykKLXsKLSAgICBj
b25zdCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cyA9IDE7Ci0gICAgCi0gICAgR1BSUmVnIHNj
cmF0Y2hHUFI7Ci0gICAgaWYgKCFjYWxsZWVSZWdzLnVzZXMoR1BSSW5mbzo6cmVnVDApKQotICAg
ICAgICBzY3JhdGNoR1BSID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgZWxzZSBpZiAoIWNhbGxlZVJl
Z3MudXNlcyhHUFJJbmZvOjpyZWdUMSkpCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpy
ZWdUMTsKLSAgICBlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZvOjpyZWdUMjsKLSAg
ICAKLSAgICBqaXQubG9hZDMyKCZtX3NjYWxlZExvZ0luZGV4LCBzY3JhdGNoR1BSKTsKLSAgICAK
LSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgb2sgPSBqaXQuYnJhbmNoVGVzdDMyKENDYWxsSGVscGVy
czo6Tm9uWmVybywgc2NyYXRjaEdQUik7Ci0gICAgCi0gICAgQVNTRVJUX1VOVVNFRChudW1iZXJP
ZkFyZ3VtZW50cywgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSA+PSAxICsgbnVtYmVyT2ZBcmd1
bWVudHMpOwotICAgIAotICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
c3RhY2tBbGlnbm1lbnRCeXRlcygpKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7Ci0gICAgCi0gICAgaml0LnN0b3JlVmFsdWUoY2FsbGVlUmVncywgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihKU1ZhbHVl
KSkpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
dGhpcykpOwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihiaXR3aXNl
X2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblByb2Nlc3NDYWxsRWRnZUxvZykpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQubG9h
ZFZhbHVlKENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBzaXplb2YoSlNWYWx1ZSkpLCBjYWxsZWVSZWdzKTsKLSAgICAKLSAgICBqaXQuYWRk
UHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSksIEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIAotICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxvZ1NpemUgKiBzaXplb2YoRW50cnkpKSwgc2NyYXRj
aEdQUik7Ci0gICAgb2subGluaygmaml0KTsKLQotICAgIGppdC5zdWIzMihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihzaXplb2YoRW50cnkpKSwgc2NyYXRjaEdQUik7Ci0gICAgaml0LnN0b3Jl
MzIoc2NyYXRjaEdQUiwgJm1fc2NhbGVkTG9nSW5kZXgpOwotICAgIGppdC5hZGRQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fbG9nKSwgc2NyYXRjaEdQUik7Ci0gICAgaml0LnN0b3Jl
VmFsdWUoY2FsbGVlUmVncywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVD
VF9PRkZTRVRPRihFbnRyeSwgbV92YWx1ZSkpKTsKLSAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKCZwcm9maWxlKSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihFbnRyeSwgbV9wcm9maWxlKSkpOwotfQotCi12b2lkIENh
bGxFZGdlTG9nOjplbWl0TG9nQ29kZSgKLSAgICBDQ2FsbEhlbHBlcnMmIGppdCwgT3duUHRyPENh
bGxFZGdlUHJvZmlsZT4mIHByb2ZpbGVQb2ludGVyLCBKU1ZhbHVlUmVncyBjYWxsZWVSZWdzKQot
ewotICAgIGlmICghaXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBwcm9m
aWxlUG9pbnRlci5jcmVhdGVUcmFuc2FjdGlvbmFsbHkoKTsKLSAgICBlbWl0TG9nQ29kZShqaXQs
ICpwcm9maWxlUG9pbnRlciwgY2FsbGVlUmVncyk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSklU
KQotCi12b2lkIENhbGxFZGdlTG9nOjpwcm9jZXNzTG9nKCkKLXsKLSAgICBBU1NFUlQoIShtX3Nj
YWxlZExvZ0luZGV4ICUgc2l6ZW9mKEVudHJ5KSkpOwotICAgIAotICAgIGlmIChPcHRpb25zOjpj
YWxsRWRnZVByb2ZpbGVSZWFsbHlQcm9jZXNzZXNMb2coKSkgewotICAgICAgICBDYWxsRWRnZVBy
b2ZpbGVWZWN0b3IgbWVyZ2VCYWNrTG9nOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9zY2FsZWRMb2dJbmRleCAvIHNpemVvZihFbnRyeSk7IGkgPCBsb2dTaXplOyArK2kp
Ci0gICAgICAgICAgICBtX2xvZ1tpXS5tX3Byb2ZpbGUtPmFkZChtX2xvZ1tpXS5tX3ZhbHVlLCBt
ZXJnZUJhY2tMb2cpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbWVyZ2VC
YWNrTG9nLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIG1lcmdlQmFja0xvZ1tpXS0+bWVyZ2VC
YWNrKCk7Ci0gICAgfQotICAgIAotICAgIG1fc2NhbGVkTG9nSW5kZXggPSBsb2dTaXplICogc2l6
ZW9mKEVudHJ5KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmgJKHJldmlzaW9uIDE3
OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENhbGxFZGdlUHJvZmlsZV9oCi0jZGVm
aW5lIENhbGxFZGdlUHJvZmlsZV9oCi0KLSNpbmNsdWRlICJDYWxsRWRnZS5oIgotI2luY2x1ZGUg
IkNhbGxWYXJpYW50LmgiCi0jaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKLSNpbmNsdWRl
ICJHUFJJbmZvLmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5o
PgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ0NhbGxIZWxwZXJzOwotY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwotCi1jbGFzcyBDYWxsRWRnZUxvZzsKLWNsYXNzIENhbGxFZGdlUHJv
ZmlsZTsKLXR5cGVkZWYgVmVjdG9yPENhbGxFZGdlUHJvZmlsZSosIDEwPiBDYWxsRWRnZVByb2Zp
bGVWZWN0b3I7Ci0KLWNsYXNzIENhbGxFZGdlUHJvZmlsZSB7Ci1wdWJsaWM6Ci0gICAgQ2FsbEVk
Z2VQcm9maWxlKCk7Ci0gICAgCi0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbnVtQ2FsbHNUb05vdENl
bGwoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxzVG9Ob3RDZWxsOyB9Ci0gICAgQ2FsbEVkZ2VD
b3VudFR5cGUgbnVtQ2FsbHNUb1Vua25vd25DZWxsKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxs
c1RvVW5rbm93bkNlbGw7IH0KLSAgICBDYWxsRWRnZUNvdW50VHlwZSBudW1DYWxsc1RvS25vd25D
ZWxscygpIGNvbnN0OwotICAgIAotICAgIENhbGxFZGdlQ291bnRUeXBlIHRvdGFsQ2FsbHMoKSBj
b25zdCB7IHJldHVybiBtX3RvdGFsQ291bnQ7IH0KLSAgICAKLSAgICAvLyBDYWxsIHdoaWxlIGhv
bGRpbmcgdGhlIG93bmluZyBDb2RlQmxvY2sncyBsb2NrLgotICAgIENhbGxFZGdlTGlzdCBjYWxs
RWRnZXMoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHZpc2l0V2VhaygpOwotICAgIAotcHJpdmF0
ZToKLSAgICBmcmllbmQgY2xhc3MgQ2FsbEVkZ2VMb2c7Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG1heEtub3duQ2FsbGVlcyA9IDU7Ci0gICAgCi0gICAgdm9pZCBhZGQoSlNWYWx1
ZSwgQ2FsbEVkZ2VQcm9maWxlVmVjdG9yJiBtZXJnZUJhY2tMb2cpOwotICAgIAotICAgIGJvb2wg
d29ydGhEZXNwZWNpZnlpbmcoKTsKLSAgICB2b2lkIGFkZFNsb3coQ2FsbFZhcmlhbnQsIENhbGxF
ZGdlUHJvZmlsZVZlY3RvciYgbWVyZ2VCYWNrTG9nKTsKLSAgICB2b2lkIG1lcmdlQmFjaygpOwot
ICAgIHZvaWQgZmFkZUJ5SGFsZigpOwotICAgIAotICAgIC8vIEl0J3MgY2hlYXBlciB0byBsZXQg
dGhpcyBoYXZlIGl0cyBvd24gbG9jay4gSXQgbmVlZHMgdG8gYmUgYWJsZSB0byBmaW5kIHdoaWNo
IGxvY2sgdG8KLSAgICAvLyBsb2NrLiBOb3JtYWxseSBpdCB3b3VsZCBsb2NrIHRoZSBvd25pbmcg
Q29kZUJsb2NrJ3MgbG9jaywgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBhCi0gICAgLy8gcG9pbnRl
ci13aWR0aCB3b3JkIHRvIHBvaW50IGF0IHRoZSBDb2RlQmxvY2suIEhhdmluZyB0aGUgYnl0ZS1z
aXplZCBsb2NrIGhlcmUgaXMKLSAgICAvLyBjaGVhcGVyLiBIb3dldmVyLCB0aGlzIG1lYW5zIHRo
YXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBDb2RlQmxvY2sgbG9jayBpczoKLSAgICAvLyBh
Y3F1aXJlIHRoZSBDb2RlQmxvY2sgbG9jayBiZWZvcmUgdGhpcyBvbmUuCi0gICAgbXV0YWJsZSBD
b25jdXJyZW50SklUTG9jayBtX2xvY2s7Ci0gICAgCi0gICAgYm9vbCBtX2Nsb3N1cmVzQXJlRGVz
cGVjaWZpZWQ7Ci0gICAgCi0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV9udW1DYWxsc1RvUHJpbWFy
eTsKLSAgICBDYWxsRWRnZUNvdW50VHlwZSBtX251bUNhbGxzVG9Ob3RDZWxsOwotICAgIENhbGxF
ZGdlQ291bnRUeXBlIG1fbnVtQ2FsbHNUb1Vua25vd25DZWxsOwotICAgIENhbGxFZGdlQ291bnRU
eXBlIG1fdG90YWxDb3VudDsKLSAgICBDYWxsVmFyaWFudCBtX3ByaW1hcnlDYWxsZWU7Ci0gICAg
Ci0gICAgdHlwZWRlZiBTcGVjdHJ1bTxDYWxsVmFyaWFudCwgQ2FsbEVkZ2VDb3VudFR5cGU+IENh
bGxTcGVjdHJ1bTsKLSAgICAKLSAgICBzdHJ1Y3QgU2Vjb25kYXJ5IHsKLSAgICAgICAgVmVjdG9y
PENhbGxFZGdlPiBtX3Byb2Nlc3NlZDsgLy8gUHJvY2Vzc2VkIGJ1dCBub3QgbmVjZXNzYXJpbHkg
c29ydGVkLgotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbFNwZWN0cnVtPiBtX3RlbXBvcmFy
eVNwZWN0cnVtOwotICAgIH07Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNlY29uZGFyeT4g
bV9vdGhlckNhbGxlZXM7Ci19OwotCi1jbGFzcyBDYWxsRWRnZUxvZyB7Ci1wdWJsaWM6Ci0gICAg
Q2FsbEVkZ2VMb2coKTsKLSAgICB+Q2FsbEVkZ2VMb2coKTsKLQotICAgIHN0YXRpYyBib29sIGlz
RW5hYmxlZCgpOwotICAgIAotI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBlbWl0TG9nQ29kZShD
Q2FsbEhlbHBlcnMmLCBDYWxsRWRnZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyBjYWxsZWVSZWdzKTsg
Ly8gQXNzdW1lcyB0aGF0IHN0YWNrIGlzIGFsaWduZWQsIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMg
LSBvdGhlciB0aGFuIGNhbGxlZUdQUiAtIGFyZSBjbG9iYmVyYWJsZSwgYW5kIHRoZSBwYXJhbWV0
ZXIgc3BhY2UgaXMgaW4gdXNlLgotICAgIAotICAgIC8vIFNhbWUgYXMgYWJvdmUgYnV0IGNyZWF0
ZXMgYSBDYWxsRWRnZVByb2ZpbGUgaW5zdGFuY2UgaWYgb25lIGRpZCBub3QgYWxyZWFkeSBleGlz
dC4gRG9lcwotICAgIC8vIHRoaXMgaW4gYSB0aHJlYWQtc2FmZSBtYW5uZXIgYnkgY2FsbGluZyBP
d25QdHI6OmNyZWF0ZVRyYW5zYWN0aW9uYWxseS4KLSAgICB2b2lkIGVtaXRMb2dDb2RlKENDYWxs
SGVscGVycyYsIE93blB0cjxDYWxsRWRnZVByb2ZpbGU+JiwgSlNWYWx1ZVJlZ3MgY2FsbGVlUmVn
cyk7Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAKLSAgICB2b2lkIHByb2Nlc3NMb2coKTsK
LSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
LQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb2dTaXplID0gMTAwMDA7Ci0gICAgCi0gICAg
c3RydWN0IEVudHJ5IHsKLSAgICAgICAgSlNWYWx1ZSBtX3ZhbHVlOwotICAgICAgICBDYWxsRWRn
ZVByb2ZpbGUqIG1fcHJvZmlsZTsKLSAgICB9OwotICAgIAotICAgIHVuc2lnbmVkIG1fc2NhbGVk
TG9nSW5kZXg7Ci0gICAgRW50cnkgbV9sb2dbbG9nU2l6ZV07Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQotI2VuZGlmIC8vIENhbGxFZGdlUHJvZmlsZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZUlubGluZXMu
aAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxFZGdlUHJvZmlsZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2Fs
bEVkZ2VQcm9maWxlSW5saW5lc19oCi0jZGVmaW5lIENhbGxFZGdlUHJvZmlsZUlubGluZXNfaAot
Ci0jaW5jbHVkZSAiQ2FsbEVkZ2VQcm9maWxlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1pbmxp
bmUgQ2FsbEVkZ2VQcm9maWxlOjpDYWxsRWRnZVByb2ZpbGUoKQotICAgIDogbV9jbG9zdXJlc0Fy
ZURlc3BlY2lmaWVkKGZhbHNlKQotICAgICwgbV9udW1DYWxsc1RvUHJpbWFyeSgwKQotICAgICwg
bV9udW1DYWxsc1RvTm90Q2VsbCgwKQotICAgICwgbV9udW1DYWxsc1RvVW5rbm93bkNlbGwoMCkK
LSAgICAsIG1fdG90YWxDb3VudCgwKQotICAgICwgbV9wcmltYXJ5Q2FsbGVlKG51bGxwdHIpCi17
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBDYWxsRWRnZVByb2ZpbGU6OmFkZChKU1ZhbHVlIHZh
bHVlLCBDYWxsRWRnZVByb2ZpbGVWZWN0b3ImIG1lcmdlQmFja0xvZykKLXsKLSAgICB1bnNpZ25l
ZCBuZXdUb3RhbENvdW50ID0gbV90b3RhbENvdW50ICsgMTsKLSAgICBpZiAoVU5MSUtFTFkoIW5l
d1RvdGFsQ291bnQpKSB7Ci0gICAgICAgIGZhZGVCeUhhbGYoKTsgLy8gVGFja2xlIG92ZXJmbG93
cyBieSBkaXZpZGluZyBhbGwgY291bnRzIGJ5IHR3by4KLSAgICAgICAgbmV3VG90YWxDb3VudCA9
IG1fdG90YWxDb3VudCArIDE7Ci0gICAgfQotICAgIEFTU0VSVChuZXdUb3RhbENvdW50KTsKLSAg
ICBtX3RvdGFsQ291bnQgPSBuZXdUb3RhbENvdW50OwotICAgIAotICAgIGlmIChVTkxJS0VMWSgh
dmFsdWUuaXNDZWxsKCkpKSB7Ci0gICAgICAgIG1fbnVtQ2FsbHNUb05vdENlbGwrKzsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhbGxWYXJpYW50IGNhbGxlZSA9IENhbGxWYXJpYW50
KHZhbHVlLmFzQ2VsbCgpKTsKLSAgICAKLSAgICBpZiAobV9jbG9zdXJlc0FyZURlc3BlY2lmaWVk
KQotICAgICAgICBjYWxsZWUgPSBjYWxsZWUuZGVzcGVjaWZpZWRDbG9zdXJlKCk7Ci0gICAgCi0g
ICAgaWYgKFVOTElLRUxZKCFtX3ByaW1hcnlDYWxsZWUpKSB7Ci0gICAgICAgIG1fcHJpbWFyeUNh
bGxlZSA9IGNhbGxlZTsKLSAgICAgICAgbV9udW1DYWxsc1RvUHJpbWFyeSA9IDE7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIGlmIChMSUtFTFkobV9wcmltYXJ5Q2FsbGVl
ID09IGNhbGxlZSkpIHsKLSAgICAgICAgbV9udW1DYWxsc1RvUHJpbWFyeSsrOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAoVU5MSUtFTFkoIW1fb3RoZXJDYWxsZWVz
KSkgewotICAgICAgICBhZGRTbG93KGNhbGxlZSwgbWVyZ2VCYWNrTG9nKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAgICAgCi0gICAgQ2FsbFNwZWN0cnVtKiBzZWNvbmRhcnkgPSBtX290
aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bS5nZXQoKTsKLSAgICBpZiAoIXNlY29uZGFy
eSkgewotICAgICAgICBhZGRTbG93KGNhbGxlZSwgbWVyZ2VCYWNrTG9nKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAgICAgCi0gICAgc2Vjb25kYXJ5LT5hZGQoY2FsbGVlKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzX2gK
LQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5m
by5jcHAJKHJldmlzaW9uIDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiREZHVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlJl
cGF0Y2hCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KIAogI2lmIEVOQUJMRShKSVQpCkBAIC0zNyw3ICszOCwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogdm9pZCBDYWxsTGlua0luZm86OnVubGluayhSZXBhdGNoQnVmZmVy
JiByZXBhdGNoQnVmZmVyKQogewotICAgIEFTU0VSVChpc0xpbmtlZCgpKTsKKyAgICBpZiAoIWlz
TGlua2VkKCkpIHsKKyAgICAgICAgLy8gV2UgY291bGQgYmUgY2FsbGVkIGV2ZW4gaWYgd2UncmUg
bm90IGxpbmtlZCBhbnltb3JlIGJlY2F1c2Ugb2YgaG93IHBvbHltb3JwaGljIGNhbGxzCisgICAg
ICAgIC8vIHdvcmsuIEVhY2ggY2FsbHNpdGUgd2l0aGluIHRoZSBwb2x5bW9ycGhpYyBjYWxsIHN0
dWIgbWF5IHNlcGFyYXRlbHkgYXNrIHVzIHRvIHVubGluaygpLgorICAgICAgICBSRUxFQVNFX0FT
U0VSVCghaXNPbkxpc3QoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCiAgICAgaWYg
KE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSgpKQogICAgICAgICBkYXRhTG9nKCJVbmxpbmtpbmcg
Y2FsbCBmcm9tICIsIGNhbGxSZXR1cm5Mb2NhdGlvbiwgIiB0byAiLCBwb2ludGVyRHVtcChyZXBh
dGNoQnVmZmVyLmNvZGVCbG9jaygpKSwgIlxuIik7CkBAIC02MSwxMiArNjcsMTIgQEAgdm9pZCBD
YWxsTGlua0luZm86OnZpc2l0V2VhayhSZXBhdGNoQnVmZgogewogICAgIGlmIChpc0xpbmtlZCgp
KSB7CiAgICAgICAgIGlmIChzdHViKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
KHN0dWItPmV4ZWN1dGFibGUoKSkpIHsKKyAgICAgICAgICAgIGlmICghc3R1Yi0+dmlzaXRXZWFr
KHJlcGF0Y2hCdWZmZXIpKSB7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAg
ICAgICAgIkNsZWFyaW5nIGNsb3N1cmUgY2FsbCBmcm9tICIsICpyZXBhdGNoQnVmZmVyLmNvZGVC
bG9jaygpLCAiIHRvICIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHViLT5leGVjdXRhYmxl
KCktPmhhc2hGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIiwgc3R1YiByb3V0aW5lICIsIFJhd1BvaW50ZXIoc3R1Yi5nZXQoKSksICIuXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpc3REdW1wKHN0dWItPnZhcmlhbnRzKCkpLCAiLCBzdHVi
IHJvdXRpbmUgIiwgUmF3UG9pbnRlcihzdHViLmdldCgpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICIuXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdW5saW5rKHJl
cGF0Y2hCdWZmZXIpOwogICAgICAgICAgICAgfQpAQCAtODMsMTEgKzg5LDYgQEAgdm9pZCBDYWxs
TGlua0luZm86OnZpc2l0V2VhayhSZXBhdGNoQnVmZgogICAgIH0KICAgICBpZiAoISFsYXN0U2Vl
bkNhbGxlZSAmJiAhSGVhcDo6aXNNYXJrZWQobGFzdFNlZW5DYWxsZWUuZ2V0KCkpKQogICAgICAg
ICBsYXN0U2VlbkNhbGxlZS5jbGVhcigpOwotICAgIAotICAgIGlmIChjYWxsRWRnZVByb2ZpbGUp
IHsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIGNhbGxFZGdlUHJvZmls
ZS0+dmlzaXRXZWFrKCk7Ci0gICAgfQogfQogCiBDYWxsTGlua0luZm8mIENhbGxMaW5rSW5mbzo6
ZHVtbXkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uaAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMyArMjYs
MTIgQEAKICNpZm5kZWYgQ2FsbExpbmtJbmZvX2gKICNkZWZpbmUgQ2FsbExpbmtJbmZvX2gKIAot
I2luY2x1ZGUgIkNhbGxFZGdlUHJvZmlsZS5oIgotI2luY2x1ZGUgIkNsb3N1cmVDYWxsU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiSklUV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KQEAgLTgy
LDE1ICs4MSwxNCBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyOwogICAgIEpJVFdyaXRlQmFycmll
cjxKU0Z1bmN0aW9uPiBjYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGxhc3RT
ZWVuQ2FsbGVlOwotICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViOworICAg
IFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gc3R1YjsKICAgICBib29sIGlzRlRM
IDogMTsKICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKICAgICBib29sIGhhc1Nl
ZW5DbG9zdXJlIDogMTsKICAgICB1bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAg
ICAgdW5zaWduZWQgY2FsbGVlR1BSIDogODsKLSAgICB1bnNpZ25lZCBzbG93UGF0aENvdW50Owor
ICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwot
ICAgIE93blB0cjxDYWxsRWRnZVByb2ZpbGU+IGNhbGxFZGdlUHJvZmlsZTsKIAogICAgIGJvb2wg
aXNMaW5rZWQoKSB7IHJldHVybiBzdHViIHx8IGNhbGxlZTsgfQogICAgIHZvaWQgdW5saW5rKFJl
cGF0Y2hCdWZmZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00Nyw3ICs0Nyw3IEBAIENhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1cyhKU1Zh
bHVlIHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBtX2VkZ2VzLmFwcGVuZChD
YWxsRWRnZShDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSksIDEpKTsKKyAgICBtX3ZhcmlhbnRz
LmFwcGVuZChDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSkpOwogfQogCiBDYWxsTGlua1N0YXR1
cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKQEAgLTEyOCwyMyArMTI4LDYgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVGbwogICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoaXMsIGJ1dCBhbnl0aW1l
IHdlIGhhdmUgdG8gZGVidWcgdGhpcyBjb2RlLCBpdCBiZWNvbWVzIGluZGlzcGVuc2FibGUuCiAg
ICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIAotICAgIGlmIChPcHRpb25zOjpj
YWxsU3RhdHVzU2hvdWxkVXNlQ2FsbEVkZ2VQcm9maWxlKCkpIHsKLSAgICAgICAgLy8gQWx3YXlz
IHRydXN0IHRoZSBjYWxsIGVkZ2UgcHJvZmlsZSBvdmVyIGFueXRoaW5nIGVsc2Ugc2luY2UgdGhp
cyBoYXMgcHJlY2lzZSBjb3VudHMuCi0gICAgICAgIC8vIEl0IGNhbiBtYWtlIHRoZSBiZXN0IHBv
c3NpYmxlIGRlY2lzaW9uIGJlY2F1c2UgaXQgbmV2ZXIgImZvcmdldHMiIHdoYXQgaGFwcGVuZWQg
Zm9yIGFueQotICAgICAgICAvLyBjYWxsLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgZmFkaW5nIG91
dCB0aGUgY291bnRzIG9mIG9sZCBjYWxscyAoZm9yIGV4YW1wbGUgaWYgdGhlCi0gICAgICAgIC8v
IGNvdW50ZXIgdHlwZSBpcyAxNi1iaXQgdGhlbiBjYWxscyB0aGF0IGhhcHBlbmVkIG1vcmUgdGhh
biAyXjE2IGNhbGxzIGFnbyBhcmUgZ2l2ZW4gaGFsZgotICAgICAgICAvLyB3ZWlnaHQsIGFuZCB0
aGlzIGNvbXBvdW5kcyBmb3IgZXZlcnkgMl4xNSBbc2ljXSBjYWxscyBhZnRlciB0aGF0KS4gVGhl
IGNvbWJpbmF0aW9uIG9mCi0gICAgICAgIC8vIGhpZ2ggZmlkZWxpdHkgZm9yIHJlY2VudCBjYWxs
cyBhbmQgZmFkaW5nIGZvciBvbGRlciBjYWxscyBtYWtlcyB0aGlzIHRoZSBtb3N0IHVzZWZ1bAot
ICAgICAgICAvLyBtZWNoYW1pc20gb2YgY2hvb3NpbmcgaG93IHRvIG9wdGltaXplIGZ1dHVyZSBj
YWxscy4KLSAgICAgICAgQ2FsbEVkZ2VQcm9maWxlKiBlZGdlUHJvZmlsZSA9IGNhbGxMaW5rSW5m
by5jYWxsRWRnZVByb2ZpbGUuZ2V0KCk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwot
ICAgICAgICBpZiAoZWRnZVByb2ZpbGUpIHsKLSAgICAgICAgICAgIENhbGxMaW5rU3RhdHVzIHJl
c3VsdCA9IGNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKGVkZ2VQcm9maWxlKTsKLSAgICAgICAg
ICAgIGlmICghIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICB9Ci0gICAgfQotICAgIAogICAgIHJldHVybiBjb21wdXRlRnJvbUNhbGxMaW5rSW5mbyhsb2Nr
ZXIsIGNhbGxMaW5rSW5mbyk7CiB9CiAKQEAgLTE2NCwxMiArMTQ3LDUxIEBAIENhbGxMaW5rU3Rh
dHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnIKICAgICAvLyB0aGF0IGlzIHN0aWxsIG1hcmdp
bmFsbHkgdmFsaWQgKGkuZS4gdGhlIHBvaW50ZXJzIGFpbid0IHN0YWxlKS4gVGhpcyBraW5kIG9m
IHJhY2luZXNzCiAgICAgLy8gaXMgcHJvYmFibHkgT0sgZm9yIG5vdy4KICAgICAKKyAgICAvLyBQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSBpcyBhIEdDQXdhcmVKSVRTdHViUm91dGluZSwgc28g
aWYgbm9uLW51bGwsIGl0IHdpbGwgc3RheSBhbGl2ZQorICAgIC8vIHVudGlsIG5leHQgR0MgZXZl
biBpZiB0aGUgQ2FsbExpbmtJbmZvIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkLiBBbHNvLCB0aGUg
dmFyaWFudHMgbGlzdCBpcworICAgIC8vIG5ldmVyIG11dGF0ZWQgYWZ0ZXIgdGhlIFBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lIGlzIGluc3RhbnRpYXRlZC4gV2UgaGF2ZSBzb21lIGNvbnNlcnZh
dGl2ZQorICAgIC8vIGZlbmNpbmcgaW4gcGxhY2UgdG8gbWFrZSBzdXJlIHRoYXQgd2Ugc2VlIHRo
ZSB2YXJpYW50cyBsaXN0IGFmdGVyIGNvbnN0cnVjdGlvbi4KKyAgICBpZiAoUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8uc3R1Yi5nZXQoKSkgeworICAgICAg
ICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgCisgICAgICAgIENhbGxFZGdlTGlzdCBl
ZGdlcyA9IHN0dWItPmVkZ2VzKCk7CisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIGVk
Z2VzLmJlZ2luKCksIGVkZ2VzLmVuZCgpLAorICAgICAgICAgICAgW10gKENhbGxFZGdlIGEsIENh
bGxFZGdlIGIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYS5jb3VudCgpID4gYi5jb3VudCgp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVkZ2VzLmZpcnN0KCku
Y291bnQoKSA+IGVkZ2VzLmxhc3QoKS5jb3VudCgpKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJs
ZSB0b3RhbENhbGxzVG9Lbm93biA9IDA7CisgICAgICAgIGRvdWJsZSB0b3RhbENhbGxzVG9Vbmtu
b3duID0gY2FsbExpbmtJbmZvLnNsb3dQYXRoQ291bnQ7CisgICAgICAgIENhbGxWYXJpYW50TGlz
dCB2YXJpYW50czsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlZGdlcy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgaWYgKGkgPj0gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNDYWxs
VmFyaWFudHNGb3JJbmxpbmluZygpKQorICAgICAgICAgICAgICAgIHRvdGFsQ2FsbHNUb1Vua25v
d24gKz0gZWRnZS5jb3VudCgpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
dG90YWxDYWxsc1RvS25vd24gKz0gZWRnZS5jb3VudCgpOworICAgICAgICAgICAgICAgIHZhcmlh
bnRzLmFwcGVuZChlZGdlLmNhbGxlZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKHRvdGFsQ2FsbHNUb0tub3duIC8gdG90YWxDYWxsc1RvVW5rbm93
biA8IE9wdGlvbnM6Om1pbmltdW1DYWxsVG9Lbm93blJhdGUoKSkKKyAgICAgICAgICAgIHJldHVy
biB0YWtlc1Nsb3dQYXRoKCk7CisgICAgICAgIAorICAgICAgICBpZiAodG90YWxDYWxsc1RvS25v
d24gPCBPcHRpb25zOjpmcmVxdWVudENhbGxUaHJlc2hvbGQoKSkKKyAgICAgICAgICAgIHJldHVy
biB0YWtlc1Nsb3dQYXRoKCk7CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVCh0b3Rh
bENhbGxzVG9Lbm93bik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVkZ2VzLnNpemUoKSk7Cisg
ICAgICAgIAorICAgICAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X3ZhcmlhbnRzID0gdmFyaWFudHM7CisgICAgICAgIHJlc3VsdC5tX2NvdWxkVGFrZVNsb3dQYXRo
ID0gISF0b3RhbENhbGxzVG9Vbmtub3duOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKICAgICBpZiAoY2FsbExpbmtJbmZvLnNsb3dQYXRoQ291bnQgPj0gT3B0aW9uczo6Y291
bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKSkKICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1Bh
dGgoKTsKICAgICAKLSAgICBpZiAoQ2xvc3VyZUNhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxM
aW5rSW5mby5zdHViLmdldCgpKQotICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoc3R1Yi0+
ZXhlY3V0YWJsZSgpKTsKLSAgICAKICAgICBKU0Z1bmN0aW9uKiB0YXJnZXQgPSBjYWxsTGlua0lu
Zm8ubGFzdFNlZW5DYWxsZWUuZ2V0KCk7CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVy
biB0YWtlc1Nsb3dQYXRoKCk7CkBAIC0xODAsMzQgKzIwMiw2IEBAIENhbGxMaW5rU3RhdHVzIENh
bGxMaW5rU3RhdHVzOjpjb21wdXRlRnIKICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXModGFyZ2V0
KTsKIH0KIAotQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tQ2FsbEVk
Z2VQcm9maWxlKENhbGxFZGdlUHJvZmlsZSogZWRnZVByb2ZpbGUpCi17Ci0gICAgLy8gSW4gY2Fz
ZXMgd2hlcmUgdGhlIGNhbGwgZWRnZSBwcm9maWxlIHNhdyBub3RoaW5nLCB1c2UgdGhlIENhbGxM
aW5rSW5mbyBpbnN0ZWFkLgotICAgIGlmICghZWRnZVByb2ZpbGUtPnRvdGFsQ2FsbHMoKSkKLSAg
ICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7Ci0gICAgCi0gICAgLy8gVG8gZG8gYW55dGhp
bmcgbWVhbmluZ2Z1bCwgd2UgcmVxdWlyZSB0aGF0IHRoZSBtYWpvcml0eSBvZiBjYWxscyBhcmUg
dG8gc29tZXRoaW5nIHdlCi0gICAgLy8ga25vdyBob3cgdG8gaGFuZGxlLgotICAgIHVuc2lnbmVk
IG51bUNhbGxzVG9Lbm93biA9IGVkZ2VQcm9maWxlLT5udW1DYWxsc1RvS25vd25DZWxscygpOwot
ICAgIHVuc2lnbmVkIG51bUNhbGxzVG9Vbmtub3duID0gZWRnZVByb2ZpbGUtPm51bUNhbGxzVG9O
b3RDZWxsKCkgKyBlZGdlUHJvZmlsZS0+bnVtQ2FsbHNUb1Vua25vd25DZWxsKCk7Ci0gICAgCi0g
ICAgLy8gV2UgcmVxdWlyZSB0aGF0IHRoZSBtYWpvcml0eSBvZiBjYWxscyB3ZXJlIHRvIHNvbWV0
aGluZyB0aGF0IHdlIGNvdWxkIHBvc3NpYmx5IGlubGluZS4KLSAgICBpZiAobnVtQ2FsbHNUb0tu
b3duIDw9IG51bUNhbGxzVG9Vbmtub3duKQotICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgp
OwotICAgIAotICAgIC8vIFdlIHJlcXVpcmUgdGhhdCB0aGUgbnVtYmVyIG9mIHN1Y2ggY2FsbHMg
aXMgZ3JlYXRlciB0aGFuIHNvbWUgbWluaW1hbCB0aHJlc2hvbGQsIHNvIHRoYXQgd2UKLSAgICAv
LyBhdm9pZCBpbmxpbmluZyBjb21wbGV0ZWx5IGNvbGQgY2FsbHMuCi0gICAgaWYgKG51bUNhbGxz
VG9Lbm93biA8IE9wdGlvbnM6OmZyZXF1ZW50Q2FsbFRocmVzaG9sZCgpKQotICAgICAgICByZXR1
cm4gdGFrZXNTbG93UGF0aCgpOwotICAgIAotICAgIENhbGxMaW5rU3RhdHVzIHJlc3VsdDsKLSAg
ICByZXN1bHQubV9lZGdlcyA9IGVkZ2VQcm9maWxlLT5jYWxsRWRnZXMoKTsKLSAgICByZXN1bHQu
bV9jb3VsZFRha2VTbG93UGF0aCA9ICEhbnVtQ2FsbHNUb1Vua25vd247Ci0gICAgcmVzdWx0Lm1f
Y2FuVHJ1c3RDb3VudHMgPSB0cnVlOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIENh
bGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbywKICAgICBFeGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRhKQpAQCAt
MjgxLDggKzI3NSw4IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm8K
IAogYm9vbCBDYWxsTGlua1N0YXR1czo6aXNDbG9zdXJlQ2FsbCgpIGNvbnN0CiB7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9lZGdlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKG1fZWRn
ZXNbaV0uY2FsbGVlKCkuaXNDbG9zdXJlQ2FsbCgpKQorICAgIGZvciAodW5zaWduZWQgaSA9IG1f
dmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLmlzQ2xv
c3VyZUNhbGwoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0yOTAsMTggKzI4NCw3IEBAIGJvb2wgQ2FsbExpbmtTdGF0dXM6OmlzQ2xvc3Vy
ZUNhbGwoKSBjb24KIAogdm9pZCBDYWxsTGlua1N0YXR1czo6bWFrZUNsb3N1cmVDYWxsKCkKIHsK
LSAgICBBU1NFUlQoIW1faXNQcm92ZWQpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fZWRnZXMu
c2l6ZSgpOyBpLS07KQotICAgICAgICBtX2VkZ2VzW2ldID0gbV9lZGdlc1tpXS5kZXNwZWNpZmll
ZENsb3N1cmUoKTsKLSAgICAKLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAv
LyBEb2luZyB0aGlzIHNob3VsZCBub3QgaGF2ZSBjcmVhdGVkIGR1cGxpY2F0ZXMsIGJlY2F1c2Ug
dGhlIENhbGxFZGdlUHJvZmlsZQotICAgICAgICAvLyBzaG91bGQgZGVzcGVjaWZ5IGNsb3N1cmVz
IGlmIGRvaW5nIHNvIHdvdWxkIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGtub3duIGNhbGxlZXMuCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VkZ2VzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IG1fZWRnZXMuc2l6ZSgpOyAr
K2opCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1fZWRnZXNbaV0uY2FsbGVlKCkgIT0gbV9lZGdl
c1tqXS5jYWxsZWUoKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV92YXJpYW50cyA9IGRlc3Bl
Y2lmaWVkVmFyaWFudExpc3QobV92YXJpYW50cyk7CiB9CiAKIHZvaWQgQ2FsbExpbmtTdGF0dXM6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTMxOSw3ICszMDIsOCBAQCB2b2lkIENh
bGxMaW5rU3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvCiAgICAgaWYgKG1fY291bGRUYWtlU2xv
d1BhdGgpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIkNvdWxkIFRha2UgU2xvdyBQYXRoIik7
CiAgICAgCi0gICAgb3V0LnByaW50KGxpc3REdW1wKG1fZWRnZXMpKTsKKyAgICBpZiAoIW1fdmFy
aWFudHMuaXNFbXB0eSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1wKG1fdmFy
aWFudHMpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTc5MjIzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBDYWxsTGlua1N0YXR1
c19oCiAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJDYWxsVmFyaWFudC5o
IgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25L
aW5kLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKQEAgLTQ4LDcgKzQ5LDYgQEAg
cHVibGljOgogICAgIENhbGxMaW5rU3RhdHVzKCkKICAgICAgICAgOiBtX2NvdWxkVGFrZVNsb3dQ
YXRoKGZhbHNlKQogICAgICAgICAsIG1faXNQcm92ZWQoZmFsc2UpCi0gICAgICAgICwgbV9jYW5U
cnVzdENvdW50cyhmYWxzZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtNjIsMTAgKzYyLDkgQEAg
cHVibGljOgogICAgIGV4cGxpY2l0IENhbGxMaW5rU3RhdHVzKEpTVmFsdWUpOwogICAgIAogICAg
IENhbGxMaW5rU3RhdHVzKENhbGxWYXJpYW50IHZhcmlhbnQpCi0gICAgICAgIDogbV9lZGdlcygx
LCBDYWxsRWRnZSh2YXJpYW50LCAxKSkKKyAgICAgICAgOiBtX3ZhcmlhbnRzKDEsIHZhcmlhbnQp
CiAgICAgICAgICwgbV9jb3VsZFRha2VTbG93UGF0aChmYWxzZSkKICAgICAgICAgLCBtX2lzUHJv
dmVkKGZhbHNlKQotICAgICAgICAsIG1fY2FuVHJ1c3RDb3VudHMoZmFsc2UpCiAgICAgewogICAg
IH0KICAgICAKQEAgLTEwOSwxOSArMTA4LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExp
bmtTdGF0dXMgY29tcHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29u
c3QgQ2FsbExpbmtJbmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAotICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiAhbV9lZGdlcy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VT
bG93UGF0aDsgfQorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYW50cy5p
c0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICAKICAgICBib29sIGNvdWxkVGFr
ZVNsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9jb3VsZFRha2VTbG93UGF0aDsgfQogICAgIAot
ICAgIENhbGxFZGdlTGlzdCBlZGdlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZXM7IH0KLSAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlcy5zaXplKCk7IH0KLSAgICBDYWxs
RWRnZSBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2VkZ2VzW2ldOyB9Ci0gICAgQ2Fs
bEVkZ2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorICAg
IENhbGxWYXJpYW50TGlzdCB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0K
KyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0K
KyAgICBDYWxsVmFyaWFudCBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRz
W2ldOyB9CisgICAgQ2FsbFZhcmlhbnQgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJl
dHVybiBhdChpKTsgfQogICAgIGJvb2wgaXNQcm92ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUHJv
dmVkOyB9Ci0gICAgYm9vbCBjYW5PcHRpbWl6ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2VkZ2VzLmlz
RW1wdHkoKTsgfQotICAgIGJvb2wgY2FuVHJ1c3RDb3VudHMoKSBjb25zdCB7IHJldHVybiBtX2Nh
blRydXN0Q291bnRzOyB9CisgICAgYm9vbCBjYW5PcHRpbWl6ZSgpIGNvbnN0IHsgcmV0dXJuICFt
X3ZhcmlhbnRzLmlzRW1wdHkoKTsgfQogICAgIAogICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCgpIGNv
bnN0OyAvLyBSZXR1cm5zIHRydWUgaWYgYW55IGNhbGxlZSBpcyBhIGNsb3N1cmUgY2FsbC4KICAg
ICAKQEAgLTEzMiwxNSArMTMwLDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIENhbGxM
aW5rU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENv
ZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogI2lmIEVOQUJMRShKSVQpCi0gICAg
c3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKENhbGxFZGdl
UHJvZmlsZSopOwogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRnJvbUNhbGxMaW5r
SW5mbygKICAgICAgICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENhbGxMaW5rSW5mbyYp
OwogI2VuZGlmCiAgICAgCi0gICAgQ2FsbEVkZ2VMaXN0IG1fZWRnZXM7CisgICAgQ2FsbFZhcmlh
bnRMaXN0IG1fdmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAgIGJv
b2wgbV9pc1Byb3ZlZDsKLSAgICBib29sIG1fY2FuVHJ1c3RDb3VudHM7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFy
aWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxWYXJpYW50LmNwcAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNSArNTAsMzQgQEAg
dm9pZCBDYWxsVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgIG91dC5wcmludCgi
RXhlY3V0YWJsZTogIiwgKmV4ZWN1dGFibGUoKSk7CiB9CiAKK0NhbGxWYXJpYW50TGlzdCB2YXJp
YW50TGlzdFdpdGhWYXJpYW50KGNvbnN0IENhbGxWYXJpYW50TGlzdCYgbGlzdCwgQ2FsbFZhcmlh
bnQgdmFyaWFudFRvQWRkKQoreworICAgIEFTU0VSVCh2YXJpYW50VG9BZGQpOworICAgIENhbGxW
YXJpYW50TGlzdCByZXN1bHQ7CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkg
eworICAgICAgICBBU1NFUlQodmFyaWFudCk7CisgICAgICAgIGlmICghIXZhcmlhbnRUb0FkZCkg
eworICAgICAgICAgICAgaWYgKHZhcmlhbnQgPT0gdmFyaWFudFRvQWRkKQorICAgICAgICAgICAg
ICAgIHZhcmlhbnRUb0FkZCA9IENhbGxWYXJpYW50KCk7CisgICAgICAgICAgICBlbHNlIGlmICh2
YXJpYW50LmRlc3BlY2lmaWVkQ2xvc3VyZSgpID09IHZhcmlhbnRUb0FkZC5kZXNwZWNpZmllZENs
b3N1cmUoKSkgeworICAgICAgICAgICAgICAgIHZhcmlhbnQgPSB2YXJpYW50LmRlc3BlY2lmaWVk
Q2xvc3VyZSgpOworICAgICAgICAgICAgICAgIHZhcmlhbnRUb0FkZCA9IENhbGxWYXJpYW50KCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmFwcGVuZCh2YXJpYW50
KTsKKyAgICB9CisgICAgaWYgKCEhdmFyaWFudFRvQWRkKQorICAgICAgICByZXN1bHQuYXBwZW5k
KHZhcmlhbnRUb0FkZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQ2FsbFZhcmlhbnRMaXN0
IGRlc3BlY2lmaWVkVmFyaWFudExpc3QoY29uc3QgQ2FsbFZhcmlhbnRMaXN0JiBsaXN0KQorewor
ICAgIENhbGxWYXJpYW50TGlzdCByZXN1bHQ7CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50
IDogbGlzdCkKKyAgICAgICAgcmVzdWx0ID0gdmFyaWFudExpc3RXaXRoVmFyaWFudChyZXN1bHQs
IHZhcmlhbnQuZGVzcGVjaWZpZWRDbG9zdXJlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbFZhcmlhbnQuaAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDExICs1Niw4
IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gICAgIHRoYW4gdGhlIGZhY3QgdGhhdCB0aGV5IGRvbid0
IGZhbGwgaW50byBhbnkgb2YgdGhlIGFib3ZlIGNhdGVnb3JpZXMuCiAvLwogLy8gVGhpcyBjbGFz
cyBzZXJ2ZXMgYXMgYSBraW5kIG9mIHVuaW9uIG92ZXIgdGhlc2UgZm91ciB0aGluZ3MuIEl0IGRv
ZXMgc28gYnkganVzdCBob2xkaW5nIGEKLS8vIEpTQ2VsbCouIFdlIGRldGVybWluZSB3aGljaCBv
ZiB0aGUgbW9kZXMgaXRzIGluIGJ5IGRvaW5nIHR5cGUgY2hlY2tzIG9uIHRoZSBjZWxsLiBOb3Rl
IHRoYXQgdGhlcmUKLS8vIGlzIG5vIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGZvciB0aGUgY2VsbCBi
ZWNhdXNlIHRoaXMgY2xhc3MgaXMgYWx3YXlzIHVzZWQgaW4gY29udGV4dHMgd2hlcmUgd2UKLS8v
IGVpdGhlciBkbyBjdXN0b20gd2VhayByZWZlcmVuY2UgbG9naWMgb3ZlciBpbnN0YW5jZXMgb2Yg
dGhpcyBjbGFzcyAoc2VlIENhbGxFZGdlUHJvZmlsZSksIG9yIHdlCi0vLyBhcmUgaW5zaWRlIHRo
ZSBjb21waWxlciBhbmQgd2UgYXNzdW1lIHRoYXQgdGhlIGNvbXBpbGVyIHJ1bnMgaW4gYmV0d2Vl
biBjb2xsZWN0aW9ucyBhbmQgc28gY2FuCi0vLyB0b3VjaCB0aGUgaGVhcCB3aXRob3V0IG5vdGlm
eWluZyBhbnlvbmUuCisvLyBKU0NlbGwqLiBXZSBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlIG1vZGVz
IGl0cyBpbiBieSBkb2luZyB0eXBlIGNoZWNrcyBvbiB0aGUgY2VsbC4gTm90ZSB0aGF0IHdlCisv
LyBjYW5ub3QgdXNlIFdyaXRlQmFycmllcjw+IGhlcmUgYmVjYXVzZSB0aGlzIGdldHMgdXNlZCBp
bnNpZGUgdGhlIGNvbXBpbGVyLgogCiBjbGFzcyBDYWxsVmFyaWFudCB7CiBwdWJsaWM6CkBAIC0x
ODEsNiArMTc4LDEzIEBAIHN0cnVjdCBDYWxsVmFyaWFudEhhc2ggewogCiB0eXBlZGVmIFZlY3Rv
cjxDYWxsVmFyaWFudCwgMT4gQ2FsbFZhcmlhbnRMaXN0OwogCisvLyBSZXR1cm5zIGEgbmV3IHZh
cmlhbnQgbGlzdCBieSBhdHRlbXB0aW5nIHRvIGVpdGhlciBhcHBlbmQgdGhlIGdpdmVuIHZhcmlh
bnQgb3IgbWVyZ2UgaXQgd2l0aCBvbmUKKy8vIG9mIHRoZSB2YXJpYW50cyB3ZSBhbHJlYWR5IGhh
dmUgYnkgZGVzcGVjaWZ5aW5nIGNsb3N1cmVzLgorQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRMaXN0
V2l0aFZhcmlhbnQoY29uc3QgQ2FsbFZhcmlhbnRMaXN0JiwgQ2FsbFZhcmlhbnQpOworCisvLyBS
ZXR1cm5zIGEgbmV3IGxpc3Qgd2hlcmUgZXZlcnkgZWxlbWVudCBpcyBkZXNwZWNpZmllZCwgYW5k
IHRoZSBsaXN0IGlzIGRlZHVwbGljYXRlZC4KK0NhbGxWYXJpYW50TGlzdCBkZXNwZWNpZmllZFZh
cmlhbnRMaXN0KGNvbnN0IENhbGxWYXJpYW50TGlzdCYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDEwLCAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKQEAgLTIxODEsNiArMjE4MSw4IEBAIENvZGVCbG9jazo6fkNvZGVCbG9j
aygpCiAgICAgLy8gZGVzdHJ1Y3RvciB3aWxsIHRyeSB0byByZW1vdmUgbm9kZXMgZnJvbSBvdXIg
KG5vIGxvbmdlciB2YWxpZCkgbGlua2VkIGxpc3QuCiAgICAgd2hpbGUgKG1faW5jb21pbmdDYWxs
cy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkKICAgICAgICAgbV9pbmNvbWluZ0Nh
bGxzLmJlZ2luKCktPnJlbW92ZSgpOworICAgIHdoaWxlIChtX2luY29taW5nUG9seW1vcnBoaWND
YWxscy5iZWdpbigpICE9IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmVuZCgpKQorICAgICAg
ICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpLT5yZW1vdmUoKTsKICAgICAKICAg
ICAvLyBOb3RlIHRoYXQgb3VyIG91dGdvaW5nIGNhbGxzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG90
aGVyIENvZGVCbG9ja3MnCiAgICAgLy8gbV9pbmNvbWluZ0NhbGxzIGxpbmtlZCBsaXN0cyB0aHJv
dWdoIHRoZSBleGVjdXRpb24gb2YgdGhlIH5DYWxsTGlua0luZm8KQEAgLTMwNDcsNiArMzA0OSwx
MiBAQCB2b2lkIENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChFeGVjU3RhCiAgICAgbm90aWNl
SW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKICAgICBtX2luY29taW5nQ2FsbHMucHVzaChpbmNv
bWluZyk7CiB9CisKK3ZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwo
RXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSogaW5jb21pbmcpCit7
CisgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKKyAgICBtX2luY29taW5nUG9s
eW1vcnBoaWNDYWxscy5wdXNoKGluY29taW5nKTsKK30KICNlbmRpZiAvLyBFTkFCTEUoSklUKQog
CiB2b2lkIENvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygpCkBAIC0zMDU0LDExICszMDYy
LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKICAgICB3aGlsZSAo
bV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nTExJbnRDYWxscy5lbmQo
KSkKICAgICAgICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCk7CiAjaWYg
RU5BQkxFKEpJVCkKLSAgICBpZiAobV9pbmNvbWluZ0NhbGxzLmlzRW1wdHkoKSkKKyAgICBpZiAo
bV9pbmNvbWluZ0NhbGxzLmlzRW1wdHkoKSAmJiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIodGhpcyk7CiAgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21p
bmdDYWxscy5lbmQoKSkKICAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluayhy
ZXBhdGNoQnVmZmVyKTsKKyAgICB3aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVn
aW4oKSAhPSBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNv
bWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHJlcGF0Y2hCdWZmZXIpOwogI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKQEAgLTMyNTIsMTIgKzMyNjIsMTkgQEAgdm9pZCBDb2Rl
QmxvY2s6Om5vdGljZUluY29taW5nQ2FsbChFeGVjUwogICAgIENvZGVCbG9jayogY2FsbGVyQ29k
ZUJsb2NrID0gY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIAogICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlQ2FsbExpbmsoKSkKLSAgICAgICAgZGF0YUxvZygiTm90aWNpbmcgY2FsbCBsaW5r
IGZyb20gIiwgKmNhbGxlckNvZGVCbG9jaywgIiB0byAiLCAqdGhpcywgIlxuIik7CisgICAgICAg
IGRhdGFMb2coIk5vdGljaW5nIGNhbGwgbGluayBmcm9tICIsIHBvaW50ZXJEdW1wKGNhbGxlckNv
ZGVCbG9jayksICIgdG8gIiwgKnRoaXMsICJcbiIpOwogICAgIAorI2lmIEVOQUJMRShERkdfSklU
KQogICAgIGlmICghbV9zaG91bGRBbHdheXNCZUlubGluZWQpCiAgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBpZiAoIWNhbGxlckNvZGVCbG9jaykgeworICAgICAgICBtX3Nob3VsZEFsd2F5c0Jl
SW5saW5lZCA9IGZhbHNlOworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkp
CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBp
cyBuYXRpdmUuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotI2lmIEVOQUJMRShERkdf
SklUKQogICAgIGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0zMjg1LDYgKzMzMDIsMTMgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29taW5n
Q2FsbChFeGVjUwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAorICAgIGlmIChKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAgICAg
IG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlQ2FsbExpbmsoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJ
IGJjYXVzZSBjYWxsZXIgd2FzIGFscmVhZHkgb3B0aW1pemVkLlxuIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCiAgICAgaWYgKGNhbGxlckNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBG
dW5jdGlvbkNvZGUpIHsKICAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBlaXRoZXIgZXZhbCBv
ciBnbG9iYWwgY29kZSwgYXNzdW1lIHRoYXQgdGhhdCB3b24ndCBiZQogICAgICAgICAvLyBvcHRp
bWl6ZWQgYW55dGltZSBzb29uLiBGb3IgZXZhbCBjb2RlIHRoaXMgaXMgcGFydGljdWxhcmx5IHRy
dWUgc2luY2Ugd2UKQEAgLTMzMDUsOCArMzMyOSwxMSBAQCB2b2lkIENvZGVCbG9jazo6bm90aWNl
SW5jb21pbmdDYWxsKEV4ZWNTCiAgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFs
c2U7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChjYWxsZXJD
b2RlQmxvY2stPm1fY2FwYWJpbGl0eUxldmVsU3RhdGUgIT0gREZHOjpDYXBhYmlsaXR5TGV2ZWxO
b3RTZXQpOworICAgIAorICAgIGlmIChjYWxsZXJDb2RlQmxvY2stPm1fY2FwYWJpbGl0eUxldmVs
U3RhdGUgPT0gREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpIHsKKyAgICAgICAgZGF0YUxvZygi
SW4gY2FsbCBmcm9tICIsICpjYWxsZXJDb2RlQmxvY2ssICIgIiwgY2FsbGVyRnJhbWUtPmNvZGVP
cmlnaW4oKSwgIiB0byAiLCAqdGhpcywgIjogY2FsbGVyJ3MgREZHIGNhcGFiaWxpdHkgbGV2ZWwg
aXMgbm90IHNldC5cbiIpOworICAgICAgICBDUkFTSCgpOworICAgIH0KICAgICAKICAgICBpZiAo
Y2FuQ29tcGlsZShjYWxsZXJDb2RlQmxvY2stPm1fY2FwYWJpbGl0eUxldmVsU3RhdGUpKQogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOSwxMSArMjI5LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKICAgICAgICAgCiAgICAgdm9pZCBsaW5rSW5jb21p
bmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyopOwotICAgICAgICAK
LSAgICBib29sIGlzSW5jb21pbmdDYWxsQWxyZWFkeUxpbmtlZChDYWxsTGlua0luZm8qIGluY29t
aW5nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5jb21pbmdDYWxscy5pc09uTGlzdChpbmNv
bWluZyk7Ci0gICAgfQorICAgIHZvaWQgbGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKEV4ZWNT
dGF0ZSogY2FsbGVyRnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqKTsKICNlbmRpZiAvLyBFTkFC
TEUoSklUKQogCiAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJh
bWUsIExMSW50Q2FsbExpbmtJbmZvKik7CkBAIC0xMDc3LDYgKzEwNzMsNyBAQCBwcml2YXRlOgog
ICAgIFZlY3RvcjxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKICAgICBCYWc8Q2FsbExpbmtJbmZv
PiBtX2NhbGxMaW5rSW5mb3M7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywg
QmFzaWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOworICAg
IFNlbnRpbmVsTGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1NlbnRpbmVs
Tm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7CiAj
ZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+IG1faml0Q29kZU1h
cDsKICNpZiBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk2OCwxNCArMTk2OCw2IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgZm9yTm9kZShub2Rl
KS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgUHJvZmlsZWRDYWxs
OgotICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6Ci0gICAgICAgIGlmIChmb3JOb2RlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLm1fdmFsdWUpCi0gICAgICAgICAgICBtX3N0YXRlLnNl
dEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFw
VG9wKCk7Ci0gICAgICAgIGJyZWFrOwotCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2Fz
ZSBDaGVja0JhZENlbGw6CiAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
cmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAgLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3NSw3ICs2NzUs
NyBAQCBwcml2YXRlOgogICAgICAgICBpZiAocGFyYW1ldGVyU2xvdHMgPiBtX3BhcmFtZXRlclNs
b3RzKQogICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IHBhcmFtZXRlclNsb3RzOwogCi0g
ICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG9wID09IENhbGwgfHwgb3AgPT0gTmF0aXZl
Q2FsbCB8fCBvcCA9PSBQcm9maWxlZENhbGwgPyAwIDogMTsKKyAgICAgICAgaW50IGR1bW15VGhp
c0FyZ3VtZW50ID0gb3AgPT0gQ2FsbCB8fCBvcCA9PSBOYXRpdmVDYWxsID8gMCA6IDE7CiAgICAg
ICAgIGZvciAoaW50IGkgPSAwICsgZHVtbXlUaGlzQXJndW1lbnQ7IGkgPCBhcmdDb3VudDsgKytp
KQogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGksIHJlZ2lzdGVyT2Zmc2V0KSkpOwogCkBAIC0xMDQ0LDE3ICsxMDQ0LDggQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICBpZiAoY2FsbFRhcmdldC0+aGFzQ29uc3Rh
bnQoKSkKICAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cyhjYWxsVGFyZ2V0
LT5hc0pTVmFsdWUoKSkuc2V0SXNQcm92ZWQodHJ1ZSk7CiAgICAgCi0gICAgaWYgKCghY2FsbExp
bmtTdGF0dXMuY2FuT3B0aW1pemUoKSB8fCBjYWxsTGlua1N0YXR1cy5zaXplKCkgIT0gMSkKLSAg
ICAgICAgJiYgIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpICYmIE9wdGlvbnM6OnVzZUZUTEpJ
VCgpCi0gICAgICAgICYmIElubGluZUNhbGxGcmFtZTo6aXNOb3JtYWxDYWxsKGtpbmQpCi0gICAg
ICAgICYmIENhbGxFZGdlTG9nOjppc0VuYWJsZWQoKQotICAgICAgICAmJiBPcHRpb25zOjpkZmdE
b2VzQ2FsbEVkZ2VQcm9maWxpbmcoKSkgewotICAgICAgICBBU1NFUlQob3AgPT0gQ2FsbCB8fCBv
cCA9PSBDb25zdHJ1Y3QpOwotICAgICAgICBpZiAob3AgPT0gQ2FsbCkKLSAgICAgICAgICAgIG9w
ID0gUHJvZmlsZWRDYWxsOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcCA9IFByb2ZpbGVk
Q29uc3RydWN0OwotICAgIH0KKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFy
c2luZygpKQorICAgICAgICBkYXRhTG9nKCIgICAgSGFuZGxpbmcgY2FsbCBhdCAiLCBjdXJyZW50
Q29kZU9yaWdpbigpLCAiOiAiLCBjYWxsTGlua1N0YXR1cywgIlxuIik7CiAgICAgCiAgICAgaWYg
KCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpKSB7CiAgICAgICAgIC8vIE9kZGx5LCB0aGlz
IGNvbmZsYXRlcyBjYWxscyB0aGF0IGhhdmVuJ3QgZXhlY3V0ZWQgd2l0aCBjYWxscyB0aGF0IGJl
aGF2ZWQgc3VmZmljaWVudGx5IHBvbHltb3JwaGljYWxseQpAQCAtMTA3NiwxNyArMTA2NywxNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIAogI2lmIEVOQUJMRShGVExf
TkFUSVZFX0NBTExfSU5MSU5JTkcpCiAgICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUp
ICYmIE9wdGlvbnM6Om9wdGltaXplTmF0aXZlQ2FsbHMoKSAmJiBjYWxsTGlua1N0YXR1cy5zaXpl
KCkgPT0gMSAmJiAhY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKSkgewotICAgICAg
ICBDYWxsVmFyaWFudCBjYWxsZWUgPSBjYWxsTGlua1N0YXR1c1swXS5jYWxsZWUoKTsKKyAgICAg
ICAgQ2FsbFZhcmlhbnQgY2FsbGVlID0gY2FsbExpbmtTdGF0dXNbMF07CiAgICAgICAgIEpTRnVu
Y3Rpb24qIGZ1bmN0aW9uID0gY2FsbGVlLmZ1bmN0aW9uKCk7CiAgICAgICAgIENvZGVTcGVjaWFs
aXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFs
aXphdGlvbktpbmRGb3Ioa2luZCk7CiAgICAgICAgIGlmIChmdW5jdGlvbiAmJiBmdW5jdGlvbi0+
aXNIb3N0RnVuY3Rpb24oKSkgewogICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxl
ZSwgY2FsbFRhcmdldCwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAg
ICAgICAgICBjYWxsT3BJbmZvID0gT3BJbmZvKG1fZ3JhcGguZnJlZXplKGZ1bmN0aW9uKSk7CiAK
LSAgICAgICAgICAgIGlmIChvcCA9PSBDYWxsIHx8IG9wID09IFByb2ZpbGVkQ2FsbCkKKyAgICAg
ICAgICAgIGlmIChvcCA9PSBDYWxsKQogICAgICAgICAgICAgICAgIG9wID0gTmF0aXZlQ2FsbDsK
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9PSBDb25zdHJ1
Y3QgfHwgb3AgPT0gUHJvZmlsZWRDb25zdHJ1Y3QpOworICAgICAgICAgICAgICAgIEFTU0VSVChv
cCA9PSBDb25zdHJ1Y3QpOwogICAgICAgICAgICAgICAgIG9wID0gTmF0aXZlQ29uc3RydWN0Owog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNDI2LDEzICsxNDE3LDEzIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyB0aGlzIGluIGNhc2VzIHdo
ZXJlIHdlIGRvbid0IG5lZWQgY29udHJvbCBmbG93IGRpYW1vbmRzIHRvIGNoZWNrIHRoZSBjYWxs
ZWUuCiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpICYmIGNhbGxM
aW5rU3RhdHVzLnNpemUoKSA9PSAxKSB7CiAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcygKLSAg
ICAgICAgICAgIGNhbGxMaW5rU3RhdHVzWzBdLmNhbGxlZSgpLCBjYWxsVGFyZ2V0Tm9kZSwgcmVn
aXN0ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgICAgICAgICBjYWxsTGlua1N0
YXR1c1swXSwgY2FsbFRhcmdldE5vZGUsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktp
bmQpOwogICAgICAgICBib29sIHJlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCi0gICAgICAg
ICAgICBjYWxsVGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0uY2Fs
bGVlKCksIHJlZ2lzdGVyT2Zmc2V0LAorICAgICAgICAgICAgY2FsbFRhcmdldE5vZGUsIHJlc3Vs
dE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rlck9mZnNldCwKICAgICAgICAgICAg
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJEb2Vz
Tm9ybWFsTGlua2luZywgcHJlZGljdGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSk7
CiAgICAgICAgIGlmICghcmVzdWx0ICYmICFjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpKQotICAg
ICAgICAgICAgdW5kb0Z1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdLmNhbGxlZSgpKTsK
KyAgICAgICAgICAgIHVuZG9GdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1swXSk7CiAgICAg
ICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJEb25lIGlubGluaW5nIChz
aW1wbGUpLlxuIik7CiAgICAgICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVP
cmlnaW4oKSwgIlxuIik7CkBAIC0xNDYyLDcgKzE0NTMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgYm9vbCBhbGxBcmVDbG9zdXJlQ2FsbHMgPSB0cnVl
OwogICAgIGJvb2wgYWxsQXJlRGlyZWN0Q2FsbHMgPSB0cnVlOwogICAgIGZvciAodW5zaWduZWQg
aSA9IGNhbGxMaW5rU3RhdHVzLnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoY2FsbExpbmtT
dGF0dXNbaV0uY2FsbGVlKCkuaXNDbG9zdXJlQ2FsbCgpKQorICAgICAgICBpZiAoY2FsbExpbmtT
dGF0dXNbaV0uaXNDbG9zdXJlQ2FsbCgpKQogICAgICAgICAgICAgYWxsQXJlRGlyZWN0Q2FsbHMg
PSBmYWxzZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWxsQXJlQ2xvc3VyZUNhbGxzID0g
ZmFsc2U7CkBAIC0xNDc1LDkgKzE0NjYsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhOb2RlCiAgICAgICAgIHRoaW5nVG9Td2l0Y2hPbiA9IGFkZFRvR3JhcGgoR2V0RXhl
Y3V0YWJsZSwgY2FsbFRhcmdldE5vZGUpOwogICAgIGVsc2UgewogICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGJlIGFibGUgdG8gaGFuZGxlIHRoaXMgY2FzZSwgYnV0IGl0J3MgdHJpY2t5IGFu
ZCB3ZSBkb24ndCBrbm93IG9mIGNhc2VzCi0gICAgICAgIC8vIHdoZXJlIGl0IHdvdWxkIGJlIGJl
bmVmaWNpYWwuIEFsc28sIENhbGxMaW5rU3RhdHVzIHdvdWxkIG1ha2UgYWxsIGNhbGxlZXMgYXBw
ZWFyIGxpa2UKLSAgICAgICAgLy8gY2xvc3VyZSBjYWxscyBpZiBhbnkgY2FsbHMgd2VyZSBjbG9z
dXJlIGNhbGxzIC0gZXhjZXB0IGZvciBjYWxscyB0byBpbnRlcm5hbCBmdW5jdGlvbnMuCi0gICAg
ICAgIC8vIFNvIHRoaXMgd2lsbCBvbmx5IGFyaXNlIGlmIHNvbWUgY2FsbGVlcyBhcmUgaW50ZXJu
YWwgZnVuY3Rpb25zIGFuZCBvdGhlcnMgYXJlIGNsb3N1cmVzLgorICAgICAgICAvLyB3aGVyZSBp
dCB3b3VsZCBiZSBiZW5lZmljaWFsLiBJdCBtaWdodCBiZSBiZXN0IHRvIGhhbmRsZSB0aGVzZSBj
YXNlcyBhcyBpZiBhbGwgY2FsbHMgd2VyZQorICAgICAgICAvLyBjbG9zdXJlIGNhbGxzLgogICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDIwCiAg
ICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5nIGlubGlu
aW5nIChtaXgpLlxuIik7CkBAIC0xNTE3LDcgKzE1MDcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gdG8gdGhlIGNvbnRpbnVhdGlvbiBibG9jaywg
d2hpY2ggd2UgY3JlYXRlIGxhc3QuCiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBsYW5kaW5nQmxv
Y2tzOwogICAgIAotICAgIC8vIFdlIG1ha2UgZm9yY2UgdGhpcyB0cnVlIGlmIHdlIGdpdmUgdXAg
b24gaW5saW5pbmcgYW55IG9mIHRoZSBlZGdlcy4KKyAgICAvLyBXZSBtYXkgZm9yY2UgdGhpcyB0
cnVlIGlmIHdlIGdpdmUgdXAgb24gaW5saW5pbmcgYW55IG9mIHRoZSBlZGdlcy4KICAgICBib29s
IGNvdWxkVGFrZVNsb3dQYXRoID0gY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKTsK
ICAgICAKICAgICBpZiAodmVyYm9zZSkKQEAgLTE1MzMsNyArMTUyMyw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgTm9kZSogbXlDYWxsVGFyZ2V0
Tm9kZSA9IGdldERpcmVjdChjYWxsZWVSZWcpOwogICAgICAgICAKICAgICAgICAgYm9vbCBpbmxp
bmluZ1Jlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCi0gICAgICAgICAgICBteUNhbGxUYXJn
ZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKSwgcmVnaXN0
ZXJPZmZzZXQsCisgICAgICAgICAgICBteUNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBj
YWxsTGlua1N0YXR1c1tpXSwgcmVnaXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyTGlua3NNYW51YWxseSwg
cHJlZGljdGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSk7CiAgICAgICAgIApAQCAt
MTU1MiwxMCArMTU0MiwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhO
b2RlCiAgICAgICAgIAogICAgICAgICBKU0NlbGwqIHRoaW5nVG9DYXNlT247CiAgICAgICAgIGlm
IChhbGxBcmVEaXJlY3RDYWxscykKLSAgICAgICAgICAgIHRoaW5nVG9DYXNlT24gPSBjYWxsTGlu
a1N0YXR1c1tpXS5jYWxsZWUoKS5ub25FeGVjdXRhYmxlQ2FsbGVlKCk7CisgICAgICAgICAgICB0
aGluZ1RvQ2FzZU9uID0gY2FsbExpbmtTdGF0dXNbaV0ubm9uRXhlY3V0YWJsZUNhbGxlZSgpOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChhbGxBcmVDbG9zdXJlQ2FsbHMpOwot
ICAgICAgICAgICAgdGhpbmdUb0Nhc2VPbiA9IGNhbGxMaW5rU3RhdHVzW2ldLmNhbGxlZSgpLmV4
ZWN1dGFibGUoKTsKKyAgICAgICAgICAgIHRoaW5nVG9DYXNlT24gPSBjYWxsTGlua1N0YXR1c1tp
XS5leGVjdXRhYmxlKCk7CiAgICAgICAgIH0KICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoU3dp
dGNoQ2FzZShtX2dyYXBoLmZyZWV6ZSh0aGluZ1RvQ2FzZU9uKSwgYmxvY2suZ2V0KCkpKTsKICAg
ICAgICAgbV9jdXJyZW50SW5kZXggPSBuZXh0T2Zmc2V0OwpAQCAtMTU2Nyw3ICsxNTU3LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBsYW5kaW5n
QmxvY2tzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CiAKICAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICBkYXRhTG9nKCJGaW5pc2hlZCBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1c1tp
XS5jYWxsZWUoKSwgIiBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiLlxuIik7CisgICAgICAg
ICAgICBkYXRhTG9nKCJGaW5pc2hlZCBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1c1tpXSwgIiBh
dCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiLlxuIik7CiAgICAgfQogICAgIAogICAgIFJlZlB0
cjxCYXNpY0Jsb2NrPiBzbG93UGF0aEJsb2NrID0gYWRvcHRSZWYoCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTc5MjIzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2Myw4ICszNjMsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAgICAgY2FzZSBBcnJheVBvcDoKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6
Ci0gICAgY2FzZSBQcm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAg
ICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBU
b1ByaW1pdGl2ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIwLDIwICs0MjAsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQcm9m
aWxlZENhbGw6Ci0gICAgICAgICAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OiB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSkubV92YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgLy8gSWYgd2Ugd2VyZSBhYmxlIHRvIHByb3ZlIHRoYXQgdGhlIGNh
bGxlZSBpcyBhIGNvbnN0YW50IHRoZW4gdGhlIG5vcm1hbCBjYWxsCi0gICAgICAgICAgICAgICAg
Ly8gaW5saW5lIGNhY2hlIHdpbGwgcmVjb3JkIHRoaXMgY2FsbGVlLiBUaGlzIG1lYW5zIHRoYXQg
dGhlcmUgaXMgbm8gbmVlZCB0byBkbyBhbnkKLSAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFs
IHByb2ZpbGluZy4KLSAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJ
bkJsb2NrKTsKLSAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChub2RlLT5vcCgpID09IFByb2Zp
bGVkQ2FsbCA/IENhbGwgOiBDb25zdHJ1Y3QpOwotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCiAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTc5MjIz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTgsOCArMTE4LDYgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNl
IE5hdGl2ZUNvbnN0cnVjdDoKLSAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNlIFByb2Zp
bGVkQ29uc3RydWN0OgogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxs
Q2FsbDoKICAgICBjYXNlIFByb2ZpbGVEaWRDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSwyMCArNzksMTcg
QEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIGlmIChtb2RlID09
IERGR01vZGUpIHsKICAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KTsKICAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOwot
ICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAg
ICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOwog
ICAgICAgICB2bS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAg
ICB2bS5nZXRDVElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1
bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaGF0UHJl
c2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKLSAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xv
c3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0
Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRv
cik7CiAgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVnc1Ro
dW5rR2VuZXJhdG9yKTsKICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGhh
dFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7CiAgICAgfQogICAgIAotICAgIGlmIChDYWxs
RWRnZUxvZzo6aXNFbmFibGVkKCkpCi0gICAgICAgIHZtLmVuc3VyZUNhbGxFZGdlTG9nKCkucHJv
Y2Vzc0xvZygpOwotCiAgICAgaWYgKHZtLnR5cGVQcm9maWxlcigpKQogICAgICAgICB2bS50eXBl
UHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJQcmVwYXJpbmcg
Zm9yIERGRyBjb21waWxhdGlvbi4iKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE3OTIyMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
MDIsOCArMTIwMiw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVX
YXRjaHBvaW50OgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Ogot
ICAgICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgY2FzZSBQcm9maWxlZENvbnN0cnVj
dDoKICAgICAgICAgY2FzZSBQcm9maWxlQ29udHJvbEZsb3c6CiAgICAgICAgIGNhc2UgTmF0aXZl
Q2FsbDoKICAgICAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNTcsOCArMTA1Nyw2IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgogICAgICAg
ICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICBjYXNlIFByb2Zp
bGVkQ2FsbDoKLSAgICAgICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBO
YXRpdmVDYWxsOgogICAgICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICAgICAgY2FzZSBH
ZXRCeU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHJldmlzaW9uIDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDggKzIxNyw2IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKICAgICAvKiBDYWxscy4gKi9cCiAgICAgbWFjcm8oQ2FsbCwgTm9kZVJl
c3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJz
V29ybGQpIFwKICAgICBtYWNybyhDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCi0gICAgbWFjcm8o
UHJvZmlsZWRDYWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1Zh
ckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAotICAgIG1hY3JvKFByb2ZpbGVkQ29uc3RydWN0
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2Rl
Q2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKE5hdGl2ZUNhbGwsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAg
ICAgbWFjcm8oTmF0aXZlQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTc5
MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIxOSw2ICsxMjE5LDExIEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmln
Z2VyVGllclVwTm93KEV4ZWMKICAgICBEZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOwogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgCisgICAgaWYgKGNv
ZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6OkRGR0pJVCkgeworICAgICAgICBkYXRhTG9n
KCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gREZHLT5GVEwgdGllci11cDogIiwgKmNvZGVCbG9j
aywgIlxuIik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIAogICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7
CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewpAQCAtMTIzOCw2ICsxMjQz
LDExIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogICAgIERlZmVy
R0MgZGVmZXJHQyh2bS0+aGVhcCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5j
b2RlQmxvY2soKTsKICAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29k
ZTo6REZHSklUKSB7CisgICAgICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBE
RkctPkZUTCB0aWVyLXVwOiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCiAgICAgSklUQ29kZSogaml0Q29kZSA9
IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVy
Ym9zZU9TUigpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTc5MjIz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw4ICsxODgsNiBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNh
c2UgQ29uc3RydWN0OgotICAgICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgY2FzZSBQ
cm9maWxlZENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgICAgICBjYXNl
IE5hdGl2ZUNvbnN0cnVjdDoKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTc5
MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE4OSw4ICsxODksNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJh
Y3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxs
OgogICAgIGNhc2UgQ29uc3RydWN0OgotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgIGNhc2Ug
UHJvZmlsZWRDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdBcnJh
eToKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE3
OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzOCw5ICs2MzgsOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTWlzY1N0cmljdEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUpCiB7Ci0gICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGwgfHwg
bm9kZS0+b3AoKSA9PSBQcm9maWxlZENhbGw7CisgICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgp
ID09IENhbGw7CiAgICAgaWYgKCFpc0NhbGwpCi0gICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09
IENvbnN0cnVjdCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KTsKKyAgICAgICAg
QVNTRVJUKG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsKIAogICAgIC8vIEZvciBjb25zdHJ1Y3Rv
cnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBz
cGFjZQogICAgIC8vIGZvciBpdC4KQEAgLTY4OSwxMSArNjg5LDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9
IG1faml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKIAotICAgIGlmIChub2RlLT5v
cCgpID09IFByb2ZpbGVkQ2FsbCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KSB7
Ci0gICAgICAgIG1faml0LnZtKCktPmNhbGxFZGdlTG9nLT5lbWl0TG9nQ29kZSgKLSAgICAgICAg
ICAgIG1faml0LCBpbmZvLT5jYWxsRWRnZVByb2ZpbGUsIGNhbGxlZS5qc1ZhbHVlUmVncygpKTsK
LSAgICB9Ci0gICAgCiAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaE5vdENlbGwoY2FsbGVlLmpz
VmFsdWVSZWdzKCkpKTsKICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyV2l0aFBh
dGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlUGF5bG9hZEdQUiwgdGFyZ2V0VG9D
aGVjaykpOwogCkBAIC00MTY5LDggKzQxNjQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0g
ICAgY2FzZSBQcm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAg
ICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3
OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNCw5ICs2MjQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTWlzY1N0cmljdEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUpCiB7Ci0gICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGwgfHwgbm9k
ZS0+b3AoKSA9PSBQcm9maWxlZENhbGw7CisgICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09
IENhbGw7CiAgICAgaWYgKCFpc0NhbGwpCi0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QgfHwgbm9kZS0+b3AoKSA9PSBQcm9maWxl
ZENvbnN0cnVjdCk7CisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9k
ZS0+b3AoKSA9PSBDb25zdHJ1Y3QpOwogICAgIAogICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRo
ZSB0aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQog
ICAgIC8vIGZvciBpdC4KQEAgLTY2OSwxMSArNjY5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
ID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwogICAgIAotICAgIGlmIChu
b2RlLT5vcCgpID09IFByb2ZpbGVkQ2FsbCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3Ry
dWN0KSB7Ci0gICAgICAgIG1faml0LnZtKCktPmNhbGxFZGdlTG9nLT5lbWl0TG9nQ29kZSgKLSAg
ICAgICAgICAgIG1faml0LCBjYWxsTGlua0luZm8tPmNhbGxFZGdlUHJvZmlsZSwgSlNWYWx1ZVJl
Z3MoY2FsbGVlR1BSKSk7Ci0gICAgfQotCiAgICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJX
aXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hl
Y2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKIAogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKQEAgLTQyMzYsOCArNDIzMSw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2Fs
bDoKICAgICBjYXNlIENvbnN0cnVjdDoKLSAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNl
IFByb2ZpbGVkQ29uc3RydWN0OgogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBD
aGVja0luamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzkyMjMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxNyArNTAsMTMgQEAgcHVibGljOgogICAgICAg
ICBpZiAoIU9wdGlvbnM6OnVzZUZUTEpJVCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrLT5tX2RpZEZhaWxG
VExDb21waWxhdGlvbikgewotICAgICAgICAgICAgcmVtb3ZlRlRMUHJvZmlsaW5nKCk7CisgICAg
ICAgIGlmIChtX2dyYXBoLm1fcHJvZmlsZWRCbG9jay0+bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24p
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KICAgICAgICAgCiAjaWYgRU5B
QkxFKEZUTF9KSVQpCiAgICAgICAgIEZUTDo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gRlRMOjpj
YW5Db21waWxlKG1fZ3JhcGgpOwotICAgICAgICBpZiAobGV2ZWwgPT0gRlRMOjpDYW5ub3RDb21w
aWxlKSB7Ci0gICAgICAgICAgICByZW1vdmVGVExQcm9maWxpbmcoKTsKKyAgICAgICAgaWYgKGxl
dmVsID09IEZUTDo6Q2Fubm90Q29tcGlsZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKCFPcHRpb25zOjplbmFibGVPU1JFbnRyeVRv
RlRMKCkpCiAgICAgICAgICAgICBsZXZlbCA9IEZUTDo6Q2FuQ29tcGlsZTsKQEAgLTEyMiwzMiAr
MTE4LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCiAgICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQgcmVtb3ZlRlRMUHJvZmlsaW5n
KCkKLSAgICB7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5u
dW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25v
ZGVJbmRleCkgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUlu
ZGV4KTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3Ao
Q2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OgotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRPcChDb25zdHJ1Y3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQogfTsKIAogYm9vbCBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rpb24oR3Jh
cGgmIGdyYXBoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3Niw2IEBA
IGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIE1hdGVy
aWFsaXplTmV3T2JqZWN0OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6Ci0g
ICAgICAgIC8vIFRoZXNlIGFyZSBPSyBub3QgYmVjYXVzZSB0aGUgRlRMIGNhbiBzdXBwb3J0IHRo
ZW0sIGJ1dCBiZWNhdXNlIGlmIHRoZSBERkcgc2VlcyBvbmUgb2YKLSAgICAgICAgLy8gdGhlc2Ug
dGhlbiB0aGUgRlRMIHdpbGwgc2VlIGEgbm9ybWFsIENhbGwvQ29uc3RydWN0LgotICAgICAgICBi
cmVhazsKICAgICBjYXNlIElkZW50aXR5OgogICAgICAgICAvLyBObyBiYWNrZW5kIGhhbmRsZXMg
dGhpcyBiZWNhdXNlIGl0IHdpbGwgYmUgb3B0aW1pemVkIG91dC4gQnV0IHdlIG1heSBjaGVjawog
ICAgICAgICAvLyBmb3IgY2FwYWJpbGl0aWVzIGJlZm9yZSBvcHRpbWl6YXRpb24uIEl0IHdvdWxk
IGJlIGEgZGVlcCBlcnJvciB0byByZW1vdmUgdGhpcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTMsMTEgKzk5Myw2IEBAIHZvaWQgSGVh
cDo6Y29sbGVjdChIZWFwT3BlcmF0aW9uIGNvbGxlY3QKICAgICAgICAgdm0oKS0+dHlwZVByb2Zp
bGVyTG9nKCktPnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiR0MiKSk7CiAgICAgfQog
ICAgIAotICAgIGlmICh2bSgpLT5jYWxsRWRnZUxvZykgewotICAgICAgICBEZWZlckdDRm9yQVdo
aWxlIGF3aGlsZSgqdGhpcyk7Ci0gICAgICAgIHZtKCktPmNhbGxFZGdlTG9nLT5wcm9jZXNzTG9n
KCk7Ci0gICAgfQotICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2RlZmVycmFsRGVwdGgpOwog
ICAgIEFTU0VSVCh2bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBS
RUxFQVNFX0FTU0VSVCh2bSgpLT5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEo
KS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QmluYXJ5U3dpdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9C
aW5hcnlTd2l0Y2guaAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9CaW5hcnlTd2l0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIC8vICAgICBpbnQgdmFsdWUgPSBzd2l0Y2guY2FzZVZhbHVlKCk7CiAvLyAg
ICAgdW5zaWduZWQgaW5kZXggPSBzd2l0Y2guY2FzZUluZGV4KCk7IC8vIGluZGV4IGludG8gY2Fz
ZXNWZWN0b3IsIGFib3ZlCiAvLyAgICAgLi4uIC8vIGdlbmVyYXRlIGNvZGUgZm9yIHRoaXMgY2Fz
ZQorLy8gICAgIC4uLiA9IGppdC5qdW1wKCk7IC8vIHlvdSBoYXZlIHRvIGp1bXAgb3V0IHlvdXJz
ZWxmOyBmYWxsaW5nIHRocm91Z2ggY2F1c2VzIHVuZGVmaW5lZCBiZWhhdmlvcgogLy8gfQogLy8g
c3dpdGNoLmZhbGxUaHJvdWdoKCkubGluaygmaml0KTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lv
biAxNzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJv
dXRpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaCIKLQotI2lmIEVOQUJM
RShKSVQpCi0KLSNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2lu
Y2x1ZGUgIlZNLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNp
dG9yLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1DbG9z
dXJlQ2FsbFN0dWJSb3V0aW5lOjpDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZSwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLAot
ICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQotICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0
aW5lKGNvZGUsIHZtKQotICAgICwgbV9leGVjdXRhYmxlKHZtLCBvd25lciwgZXhlY3V0YWJsZSkK
LXsKLX0KLQotQ2xvc3VyZUNhbGxTdHViUm91dGluZTo6fkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUo
KQotewotfQotCi12b2lkIENsb3N1cmVDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVj
dHNJbnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICB2aXNpdG9yLmFwcGVuZCgm
bV9leGVjdXRhYmxlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSklUKQotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1
YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1
cmVDYWxsU3R1YlJvdXRpbmUuaAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWZuZGVmIENsb3N1cmVDYWxsU3R1YlJvdXRpbmVfaAotI2RlZmluZSBD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lX2gKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJD
b2RlT3JpZ2luLmgiCi0jaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCi0KLW5hbWVz
cGFjZSBKU0MgewotCi1jbGFzcyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lIDogcHVibGljIEdDQXdh
cmVKSVRTdHViUm91dGluZSB7Ci1wdWJsaWM6Ci0gICAgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgK
LSAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwq
IG93bmVyLAotICAgICAgICBFeGVjdXRhYmxlQmFzZSopOwotICAgIAotICAgIHZpcnR1YWwgfkNs
b3N1cmVDYWxsU3R1YlJvdXRpbmUoKTsKLSAgICAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0YWJsZS5nZXQoKTsgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRv
ciYpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFz
ZT4gbV9leGVjdXRhYmxlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSklUKQotCi0jZW5kaWYgLy8gQ2xvc3VyZUNhbGxTdHViUm91dGluZV9oCi0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDE3
OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAwLDEyICszMDAsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChP
cGNvZGVJRCBvcGNvZGVJCiAKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQ2FsbExpbmtJbmZvKCk7CiAKLSAgICBpZiAoQ2FsbEVkZ2VMb2c6OmlzRW5hYmxlZCgpICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKQotICAgICAgICAmJiBPcHRpb25zOjpiYXNlbGluZURvZXND
YWxsRWRnZVByb2ZpbGluZygpKSB7Ci0gICAgICAgIG1fdm0tPmVuc3VyZUNhbGxFZGdlTG9nKCku
ZW1pdExvZ0NvZGUoCi0gICAgICAgICAgICAqdGhpcywgaW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSAgICB9Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfY2FsbF9ldmFsKSB7CiAgICAgICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0cnVjdGlvbik7CiAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAko
cmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDEwICsyMTQsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9j
b2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwogCi0gICAgaWYgKENhbGxFZGdlTG9nOjppc0Vu
YWJsZWQoKSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkKLSAgICAgICAgJiYgT3B0aW9uczo6YmFz
ZWxpbmVEb2VzQ2FsbEVkZ2VQcm9maWxpbmcoKSkKLSAgICAgICAgbV92bS0+ZW5zdXJlQ2FsbEVk
Z2VMb2coKS5lbWl0TG9nQ29kZSgqdGhpcywgaW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAg
ICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNzc2LDcgKzc3Niw3IEBAIGlubGluZSBjaGFyKiB2aXJ0dWFs
Rm9yKAogICAgIHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGtpbmQs
IHJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKIH0KIAotc3RhdGljIGJv
b2wgYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbCgKK3N0YXRpYyBib29sIGF0dGVtcHRUb09w
dGltaXplUG9seW1vcnBoaWNDYWxsKAogICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycywgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2Vs
bCwKICAgICBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKQEAgLTc4NCwzOCArNzg0LDI0
IEBAIHN0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIEpTRnVuY3Rpb24qIG9sZENhbGxlZSA9
IGNhbGxMaW5rSW5mby5jYWxsZWUuZ2V0KCk7CiAgICAgCi0gICAgaWYgKCFvbGRDYWxsZWUgfHwg
b2xkQ2FsbGVlLT5leGVjdXRhYmxlKCkgIT0gY2FsbGVlLT5leGVjdXRhYmxlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoY2FsbGVlLT5leGVjdXRhYmxlKCktPmhh
c0pJVENvZGVGb3JDYWxsKCkpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0K
LSAgICAgICAgY2FsbGVlLT5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCkt
PmFkZHJlc3NGb3JDYWxsKAotICAgICAgICAgICAgKmV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCkt
PmNvZGVCbG9jaygpLT52bSgpLCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIEFy
aXR5Q2hlY2tOb3RSZXF1aXJlZCwgcmVnaXN0ZXJzKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jazsKLSAgICBpZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkp
Ci0gICAgICAgIGNvZGVCbG9jayA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9jayA9
IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUoKSktPmNvZGVC
bG9ja0ZvckNhbGwoKTsKKyAgICBpZiAoIWNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5j
dGlvbigpKSB7CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KGNhbGxlZS0+ZXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwog
ICAgICAgICBpZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0
YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5r
SW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzIHx8IGNhbGxMaW5rSW5m
by5jYWxsVHlwZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3MpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGxpbmtDbG9zdXJlQ2FsbCgKLSAgICAg
ICAgZXhlY0NhbGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZS0+ZXhlY3V0YWJs
ZSgpLCBjb2RlUHRyLCByZWdpc3RlcnMpOworICAgIGxpbmtQb2x5bW9ycGhpY0NhbGwoZXhlY0Nh
bGxlZSwgY2FsbExpbmtJbmZvLCBDYWxsVmFyaWFudChjYWxsZWUpLCByZWdpc3RlcnMpOwogICAg
IAogICAgIHJldHVybiB0cnVlOwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxp
bmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxs
KEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7CiAg
ICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKICAgICBjaGFyKiByZXN1bHQgPSB2aXJ0
dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNl
cnZhdGlvbk5vdFJlcXVpcmVkLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAKLSAgICBpZiAoIWF0
dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8pKQorICAg
IGlmICghYXR0ZW1wdFRvT3B0aW1pemVQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlu
a0luZm8pKQogICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBD
b2RlRm9yQ2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgCiAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTgzMSwxMiArODE3LDEyIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmlydHVhbENvbnMKICAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBD
b2RlRm9yQ29uc3RydWN0LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAot
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVz
UmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNl
cnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
bykKIHsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsOwogICAgIGNoYXIqIHJlc3Vs
dCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11c3RQ
cmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogCi0gICAgaWYgKCFhdHRl
bXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVy
cywgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8pKQorICAgIGlmICghYXR0ZW1w
dFRvT3B0aW1pemVQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwgTXVzdFByZXNlcnZlUmVnaXN0
ZXJzLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwgKmNhbGxMaW5rSW5mbykpCiAgICAgICAgIGxpbmtT
bG93Rm9yKGV4ZWNDYWxsZWUsICpjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCBNdXN0UHJlc2Vy
dmVSZWdpc3RlcnMpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMDMzLDYgKzEwMTks
MTAgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgIERlZmVy
R0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAh
PSBKSVRDb2RlOjpCYXNlbGluZUpJVCkgeworICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNv
ZGUgYmxvY2sgaW4gQmFzZWxpbmUtPkRGRyB0aWVyLXVwOiAiLCAqY29kZUJsb2NrLCAiXG4iKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiAgICAgCiAgICAg
aWYgKGJ5dGVjb2RlSW5kZXgpIHsKICAgICAgICAgLy8gSWYgd2UncmUgYXR0ZW1wdGluZyB0byBP
U1IgZnJvbSBhIGxvb3AsIGFzc3VtZSB0aGF0IHRoaXMgc2hvdWxkIGJlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTc5MjIzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0NiwxMiArMjQ2LDEyIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEdlbmUKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25D
YWxsRXZhbChFeGVjU3RhdGUqLCBFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdU
Rl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxs
KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0lu
Zm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxD
YWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqLCBDYWxsTGlua0lu
Zm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25z
dHJ1Y3QoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSos
IENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvKikgV1RGX0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9s
eW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikg
V1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRo
YXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsK
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2
ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNT
dGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKQEAgLTM5MSwxMyArMzkxLDEzIEBA
IGlubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvblZpcnQKICAgICByZXR1cm4gMDsK
IH0KIAotaW5saW5lIFBfSklUT3BlcmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxs
Rm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCitpbmxpbmUgUF9KSVRPcGVy
YXRpb25fRUNsaSBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsRm9yKFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKICAgICBj
YXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6Ci0gICAgICAgIHJldHVybiBvcGVy
YXRpb25MaW5rQ2xvc3VyZUNhbGw7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rUG9seW1v
cnBoaWNDYWxsOwogICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgotICAgICAgICByZXR1
cm4gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAgIHJl
dHVybiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CiAgICAg
fQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAx
NzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICAKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB5b3UgYXJlIHN0aWxsIHZh
bGlkIGFmdGVyLiBSZXR1cm4gZmFsc2UgaWYgeW91IGFyZSBub3cgaW52YWxpZC4gSWYgeW91IHJl
dHVybgorICAgIC8vIGZhbHNlLCB5b3Ugd2lsbCB1c3VhbGx5IG5vdCBkbyBhbnkgY2xlYXJpbmcg
YmVjYXVzZSB0aGUgaWRlYSBpcyB0aGF0IHlvdSB3aWxsIHNpbXBseSBiZQorICAgIC8vIGRlc3Ry
b3llZC4KICAgICB2aXJ0dWFsIGJvb2wgdmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImKTsKIAogcHJv
dGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmll
ci5oCShyZXZpc2lvbiAxNzkyMjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdy
aXRlQmFycmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlVu
dXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8u
aCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUG9seW1vcnBoaWNDYWxs
Tm9kZTo6flBvbHltb3JwaGljQ2FsbE5vZGUoKQoreworICAgIGlmIChpc09uTGlzdCgpKQorICAg
ICAgICByZW1vdmUoKTsKK30KKwordm9pZCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmsoUmVw
YXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikKK3sKKyAgICBpZiAoT3B0aW9uczo6c2hvd0Rpc2Fz
c2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2coIlVubGlua2luZyBwb2x5bW9ycGhpYyBjYWxsIGF0
ICIsIG1fY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sICIsICIsIG1fY2FsbExpbmtJ
bmZvLT5jb2RlT3JpZ2luLCAiXG4iKTsKKyAgICAKKyAgICBtX2NhbGxMaW5rSW5mby0+dW5saW5r
KHJlcGF0Y2hCdWZmZXIpOworICAgIAorICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICByZW1v
dmUoKTsKK30KKwordm9pZCBQb2x5bW9ycGhpY0NhbGxDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCI8dmFyaWFudCA9ICIsIG1fdmFyaWFudCwgIiwg
Y29kZUJsb2NrID0gIiwgcG9pbnRlckR1bXAobV9jb2RlQmxvY2spLCAiPiIpOworfQorCitQb2x5
bW9ycGhpY0NhbGxTdHViUm91dGluZTo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCisgICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlUmVmLCBWTSYgdm0sIGNvbnN0IEpTQ2Vs
bCogb3duZXIsIEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsCisgICAgQ2FsbExpbmtJbmZvJiBpbmZv
LCBjb25zdCBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4mIGNhc2VzLAorICAgIHN0ZDo6dW5p
cXVlX3B0cjx1aW50MzJfdFtdPiBmYXN0Q291bnRzKQorICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0
aW5lKGNvZGVSZWYsIHZtKQorICAgICwgbV9mYXN0Q291bnRzKHN0ZDo6bW92ZShmYXN0Q291bnRz
KSkKK3sKKyAgICBmb3IgKFBvbHltb3JwaGljQ2FsbENhc2UgY2FsbENhc2UgOiBjYXNlcykgewor
ICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZChXcml0ZUJhcnJpZXI8SlNDZWxsPih2bSwgb3duZXIs
IGNhbGxDYXNlLnZhcmlhbnQoKS5yYXdDYWxsZWVDZWxsKCkpKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFNob3dEaXNhc3NlbWJseUZvcihjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCkpKQorICAgICAgICAg
ICAgZGF0YUxvZygiTGlua2luZyBwb2x5bW9ycGhpYyBjYWxsIGluICIsICpjYWxsZXJGcmFtZS0+
Y29kZUJsb2NrKCksICIgYXQgIiwgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSwgIiB0byAiLCBj
YWxsQ2FzZS52YXJpYW50KCksICIsIGNvZGVCbG9jayA9ICIsIHBvaW50ZXJEdW1wKGNhbGxDYXNl
LmNvZGVCbG9jaygpKSwgIlxuIik7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxDYXNlLmNvZGVCbG9jaygpKQorICAgICAgICAgICAgY29kZUJsb2NrLT5saW5rSW5jb21p
bmdQb2x5bW9ycGhpY0NhbGwoY2FsbGVyRnJhbWUsIG1fY2FsbE5vZGVzLmFkZCgmaW5mbykpOwor
ICAgIH0KKyAgICBtX3ZhcmlhbnRzLnNocmlua1RvRml0KCk7CisgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKK30KKworUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6On5Qb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZSgpIHsgfQorCitDYWxsRWRnZUxpc3QgUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmU6OnZhcmlhbnRzKCkgY29uc3QKK3sKKyAgICAvLyBXZSB3b3VsZG4ndCBoYXZlIHRoZXNl
IGlmIHRoaXMgd2FzIGFuIEZUTCBzdHViIHJvdXRpbmUuIFdlIHNob3VsZG4ndCBiZSBhc2tpbmcg
Zm9yIHByb2ZpbGluZworICAgIC8vIGZyb20gdGhlIEZUTC4KKyAgICBSRUxFQVNFX0FTU0VSVCht
X2Zhc3RDb3VudHMpOworICAgIAorICAgIENhbGxFZGdlTGlzdCByZXN1bHQ7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhbnRzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQu
YXBwZW5kKENhbGxFZGdlKENhbGxWYXJpYW50KG1fdmFyaWFudHNbaV0uZ2V0KCkpLCBtX2Zhc3RD
b3VudHNbaV0pKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFBvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lOjp2aXNpdFdlYWsoUmVwYXRjaEJ1ZmZlciYpCit7CisgICAgZm9yIChhdXRv
JiB2YXJpYW50IDogbV92YXJpYW50cykgeworICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHZh
cmlhbnQuZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVp
cmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGZvciAoYXV0
byYgdmFyaWFudCA6IG1fdmFyaWFudHMpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ2YXJpYW50
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZV9oCisjZGVmaW5lIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lX2gKKworI2lmIEVO
QUJMRShKSVQpCisKKyNpbmNsdWRlICJDYWxsRWRnZS5oIgorI2luY2x1ZGUgIkNhbGxWYXJpYW50
LmgiCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91
dGluZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
c3RydWN0IENhbGxMaW5rSW5mbzsKKworY2xhc3MgUG9seW1vcnBoaWNDYWxsTm9kZSA6IHB1Ymxp
YyBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxOb2RlPiB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoUG9seW1vcnBoaWNDYWxsTm9kZSk7CitwdWJsaWM6CisgICAgUG9seW1v
cnBoaWNDYWxsTm9kZShDYWxsTGlua0luZm8qIGluZm8pCisgICAgICAgIDogbV9jYWxsTGlua0lu
Zm8oaW5mbykKKyAgICB7CisgICAgfQorICAgIAorICAgIH5Qb2x5bW9ycGhpY0NhbGxOb2RlKCk7
CisgICAgCisgICAgdm9pZCB1bmxpbmsoUmVwYXRjaEJ1ZmZlciYpOworICAgIAorcHJpdmF0ZToK
KyAgICBDYWxsTGlua0luZm8qIG1fY2FsbExpbmtJbmZvOworfTsKKworY2xhc3MgUG9seW1vcnBo
aWNDYWxsQ2FzZSB7CitwdWJsaWM6CisgICAgUG9seW1vcnBoaWNDYWxsQ2FzZSgpCisgICAgICAg
IDogbV9jb2RlQmxvY2sobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIFBvbHltb3Jw
aGljQ2FsbENhc2UoQ2FsbFZhcmlhbnQgdmFyaWFudCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisg
ICAgICAgIDogbV92YXJpYW50KHZhcmlhbnQpCisgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJs
b2NrKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ2FsbFZhcmlhbnQgdmFyaWFudCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFyaWFudDsgfQorICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgQ2FsbFZhcmlhbnQgbV92YXJpYW50OworICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7Cit9OworCitjbGFzcyBQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZSA6IHB1YmxpYyBHQ0F3YXJlSklUU3R1YlJvdXRpbmUgeworcHVibGljOgorICAgIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAorICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYmLCBWTSYsIGNvbnN0IEpTQ2VsbCogb3duZXIsCisgICAgICAgIEV4ZWNTdGF0ZSogY2Fs
bGVyRnJhbWUsIENhbGxMaW5rSW5mbyYsIGNvbnN0IFZlY3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNl
PiYsCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx1aW50MzJfdFtdPiBmYXN0Q291bnRzKTsKKyAg
ICAKKyAgICB2aXJ0dWFsIH5Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgpOworICAgIAorICAg
IENhbGxFZGdlTGlzdCBlZGdlcygpIGNvbnN0OworICAgIAorICAgIGJvb2wgdmlzaXRXZWFrKFJl
cGF0Y2hCdWZmZXImKSBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBt
YXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4sIDI+IG1fdmFyaWFudHM7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQzMl90PiBtX2Zhc3RDb3VudHM7CisgICAgQmFnPFBvbHlt
b3JwaGljQ2FsbE5vZGU+IG1fY2FsbE5vZGVzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlz
aW9uIDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVk
ZSAiQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRlICJCaW5hcnlTd2l0Y2gu
aCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKQEAgLTE1OTIsMTAgKzE1OTMsNiBAQCB2
b2lkIGxpbmtGb3IoCiAgICAgCiAgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVj
LT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKTsKIAotICAgIC8vIElmIHlvdSdyZSBiZWluZyBj
YWxsLWxpbmtlZCBmcm9tIGEgREZHIGNhbGxlciB0aGVuIHlvdSBvYnZpb3VzbHkgZGlkbid0IGdl
dCBpbmxpbmVkLgotICAgIGlmIChjYWxsZWVDb2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkKLSAgICAgICAgY2FsbGVlQ29kZUJs
b2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOwotICAgIAogICAgIFZNKiB2bSA9
IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKQEAgLTE2MTEsNyArMTYwOCw3IEBAIHZvaWQgbGlua0Zv
cigKICAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGV4ZWMtPmNhbGxl
ckZyYW1lKCksICZjYWxsTGlua0luZm8pOwogICAgIAogICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9y
Rm9yKHJlZ2lzdGVycykpLmNvZGUoKSk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNh
bGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGxpbmtQb2x5bW9y
cGhpY0NhbGxUaHVua0dlbmVyYXRvckZvcihyZWdpc3RlcnMpKS5jb2RlKCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIApAQCAtMTYzMSwxMiArMTYyOCwyMiBAQCB2b2lkIGxpbmtTbG93
Rm9yKAogICAgIGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGtp
bmQsIHJlZ2lzdGVycyk7CiB9CiAKLXZvaWQgbGlua0Nsb3N1cmVDYWxsKAotICAgIEV4ZWNTdGF0
ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29k
ZUJsb2NrLCAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGVQdHIsCituYW1lc3BhY2Ugeworc3RydWN0IENhbGxUb0NvZGVQdHIgeworICAg
IENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2Rl
UHRyOworfTsKK30gLy8gYW5ub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8s
IENhbGxWYXJpYW50IG5ld1ZhcmlhbnQsCiAgICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJl
Z2lzdGVycykKIHsKLSAgICBBU1NFUlQoIWNhbGxMaW5rSW5mby5zdHViKTsKKyAgICAvLyBDdXJy
ZW50bHksIHdlIHdpbGwgbmV2ZXIgc2VlIGEgbm9uLWZ1bmN0aW9uIHZhcmlhbnQsIHNpbmNlIHRo
YXQncyBob3cgSklUT3BlcmF0aW9ucy5jcHAKKyAgICAvLyBoYW5kbGVzIGl0LiBBbHNvLCB3ZSB3
b3VsZG4ndCBiZSBhYmxlIHRvIGRvIGFueXRoaW5nIHdpdGggbm9uLWZ1bmN0aW9uIGNhbGxlZXMg
YmVjYXVzZSB3ZQorICAgIC8vIGp1c3QgZG9uJ3QgaGF2ZSB0aGF0IGZ1bmN0aW9uYWxpdHksIHll
dC4gVGhhdCdzIHdvcnRoIGZpeGluZy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQwNjg1CisgICAgUkVMRUFTRV9BU1NFUlQobmV3VmFyaWFudC5leGVj
dXRhYmxlKCkpOwogICAgIAogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+
Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CiAgICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2Nr
LT52bSgpOwpAQCAtMTY1NSwzMyArMTY2MiwxMjQgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCiAg
ICAgICAgIHN0dWJKaXQuYWJvcnRXaXRoUmVhc29uKFJlcGF0Y2hJbnNhbmVBcmd1bWVudENvdW50
KTsKICAgICAgICAgb2tBcmd1bWVudENvdW50LmxpbmsoJnN0dWJKaXQpOwogICAgIH0KKyAgICAK
KyAgICBDYWxsVmFyaWFudExpc3QgbGlzdDsKKyAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8uc3R1Yi5nZXQoKSkKKyAgICAgICAgbGlzdCA9IHN0
dWItPnZhcmlhbnRzKCk7CisgICAgZWxzZSBpZiAoSlNGdW5jdGlvbiogb2xkQ2FsbGVlID0gY2Fs
bExpbmtJbmZvLmNhbGxlZS5nZXQoKSkKKyAgICAgICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdHtD
YWxsVmFyaWFudChvbGRDYWxsZWUpfTsKKyAgICAKKyAgICBsaXN0ID0gdmFyaWFudExpc3RXaXRo
VmFyaWFudChsaXN0LCBuZXdWYXJpYW50KTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIGxpbmtl
ZCB0aGUgc2xvdyBwYXRoIHRvIHRoZSB2aXJ0dWFsIGNhbGwgdGh1bmsgaWYgd2Ugd2VyZSBhcHBy
b2FjaGluZyB0aGUKKyAgICAvLyBsaW1pdC4KKyAgICBBU1NFUlQobGlzdC5zaXplKCkgPD0gT3B0
aW9uczo6bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplKCkpOworICAgIAorICAgIC8v
IElmIHRoZXJlIGFyZSBhbnkgY2xvc3VyZSBjYWxscyB0aGVuIGl0IG1ha2VzIHNlbnNlIHRvIHRy
ZWF0IGFsbCBvZiB0aGVtIGFzIGNsb3N1cmUgY2FsbHMuCisgICAgLy8gVGhpcyBtYWtlcyBzd2l0
Y2hpbmcgb24gY2FsbGVlIGNoZWFwZXIuIEl0IGFsc28gcHJvZHVjZXMgcHJvZmlsaW5nIHRoYXQn
cyBlYXNpZXIgb24gdGhlIERGRzsKKyAgICAvLyB0aGUgREZHIGRvZXNuJ3QgcmVhbGx5IHdhbnQg
dG8gZGVhbCB3aXRoIGEgY29tYmluYXRpb24gb2YgY2xvc3VyZSBhbmQgbm9uLWNsb3N1cmUgY2Fs
bGVlcy4KKyAgICBib29sIGlzQ2xvc3VyZUNhbGwgPSBmYWxzZTsKKyAgICBmb3IgKENhbGxWYXJp
YW50IHZhcmlhbnQgOiBsaXN0KSAgeworICAgICAgICBpZiAodmFyaWFudC5pc0Nsb3N1cmVDYWxs
KCkpIHsKKyAgICAgICAgICAgIGxpc3QgPSBkZXNwZWNpZmllZFZhcmlhbnRMaXN0KGxpc3QpOwor
ICAgICAgICAgICAgaXNDbG9zdXJlQ2FsbCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEFzc2VtYmx5SGVscGVy
czo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIpOworICAgIEdQUlJlZyBjb21wYXJpc29uVmFs
dWVHUFI7CisgICAgCisgICAgaWYgKGlzQ2xvc3VyZUNhbGwpIHsKKyAgICAgICAgLy8gVmVyaWZ5
IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9uIGFuZCBzdGFzaCB0aGUgZXhlY3V0YWJsZSBpbiBzY3Jh
dGNoLgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAvLyBXZSBjYW4gc2FmZWx5IGNsb2JiZXIg
ZXZlcnl0aGluZyBleGNlcHQgdGhlIGNhbGxlZUdQUi4gV2UgY2FuJ3QgcmVseSBvbiB0YWdNYXNr
UmVnaXN0ZXIKLSAgICAvLyBiZWluZyBzZXQuIFNvIHdlIGRvIHRoaXMgdGhlIGhhcmQgd2F5Lgot
ICAgIEdQUlJlZyBzY3JhdGNoID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNh
bGxlZUdQUik7Ci0gICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
VGFnTWFzayksIHNjcmF0Y2gpOwotICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFRl
c3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZUdQUiwgc2NyYXRjaCkpOworICAgICAg
ICAvLyBXZSBjYW4gc2FmZWx5IGNsb2JiZXIgZXZlcnl0aGluZyBleGNlcHQgdGhlIGNhbGxlZUdQ
Ui4gV2UgY2FuJ3QgcmVseSBvbiB0YWdNYXNrUmVnaXN0ZXIKKyAgICAgICAgLy8gYmVpbmcgc2V0
LiBTbyB3ZSBkbyB0aGlzIHRoZSBoYXJkIHdheS4KKyAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIHNjcmF0Y2gpOworICAgICAgICBzbG93
UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBj
YWxsZWVHUFIsIHNjcmF0Y2gpKTsKICNlbHNlCi0gICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5
IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyAgICAgICAgLy8gV2Ugd291bGQg
aGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KICNlbmRpZgog
ICAgIAotICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgc3R1YkppdC5icmFuY2g4KAotICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAotICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvblR5cGUpKSk7Ci0g
ICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKLSAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZCgKKyAgICAgICAgICAgIHN0dWJKaXQuYnJhbmNoOCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhj
YWxsZWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOworICAgIAorICAg
ICAgICBzdHViSml0LmxvYWRQdHIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Y2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCi0gICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpKTsKKyAgICAgICAgICAg
IHNjcmF0Y2gpOworICAgICAgICAKKyAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gc2NyYXRj
aDsKKyAgICB9IGVsc2UKKyAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOwor
ICAgIAorICAgIFZlY3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNlPiBjYWxsQ2FzZXM7CisgICAgCisg
ICAgLy8gRmlndXJlIG91dCB3aGF0IG91ciBjYXNlcyBhcmUuCisgICAgZm9yIChDYWxsVmFyaWFu
dCB2YXJpYW50IDogbGlzdCkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICAg
ICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICAg
ICAgY29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb2Rl
QmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odmFyaWFudC5leGVjdXRhYmxlKCkp
LT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCB0aGlzIHJlcGVhdHMgYSBjaGVjayBpbiBKSVRPcGVyYXRpb25zLmNwcC4gVGhhdCdzIGJl
Y2F1c2Ugd2UgbWF5IGFsc28gc2VlCisgICAgICAgICAgICAvLyBhIHZhcmlhbnQgZnJvbSB0aGUg
b3JpZ2luYWwgbW9ub21vcnBoaWMgY2FjaGUsIHdoaWNoIGlzbid0IGFzIHN0cmljdC4KKyAgICAg
ICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmNh
bGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MgfHwgY2FsbExpbmtJbmZvLmNhbGxU
eXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncykKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY2FsbENhc2VzLmFwcGVuZChQ
b2x5bW9ycGhpY0NhbGxDYXNlKHZhcmlhbnQsIGNvZGVCbG9jaykpOworICAgIH0KKyAgICAKKyAg
ICBWZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVlcyhjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICBWZWN0
b3I8Q2FsbFRvQ29kZVB0cj4gY2FsbHMoY2FsbENhc2VzLnNpemUoKSk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPHVpbnQzMl90W10+IGZhc3RDb3VudHM7CisgICAgCisgICAgaWYgKGNhbGxlckNvZGVC
bG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZmFzdENv
dW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8dWludDMyX3RbXT4oY2FsbENhc2VzLnNpemUoKSk7Cisg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IGNhbGxDYXNlcy5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgaWYgKGZhc3RDb3VudHMpCisgICAgICAgICAgICBmYXN0Q291bnRzW2ldID0gMDsKKyAgICAg
ICAgCisgICAgICAgIGlmIChpc0Nsb3N1cmVDYWxsKQorICAgICAgICAgICAgY2FzZVZhbHVlc1tp
XSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFyaWFudC5leGVjdXRhYmxlKCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBjYXNlVmFsdWVzW2ldID0gYml0d2lzZV9jYXN0PGludHB0cl90
Pih2YXJpYW50LmZ1bmN0aW9uKCkpOworICAgIH0KICAgICAKLSAgICBBc3NlbWJseUhlbHBlcnM6
OkNhbGwgY2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsKLSAgICBBc3NlbWJseUhlbHBlcnM6Okp1
bXAgZG9uZSA9IHN0dWJKaXQuanVtcCgpOworICAgIEdQUlJlZyBmYXN0Q291bnRzQmFzZUdQUiA9
CisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIsIGNv
bXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOworICAgIHN0dWJKaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRQdHIoZmFzdENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BS
KTsKKyAgICAKKyAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKGNvbXBhcmlzb25WYWx1ZUdQ
UiwgY2FzZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJbnRQdHIpOworICAgIENDYWxsSGVscGVyczo6
SnVtcExpc3QgZG9uZTsKKyAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoc3R1YkppdCkp
IHsKKyAgICAgICAgc2l6ZV90IGNhc2VJbmRleCA9IGJpbmFyeVN3aXRjaC5jYXNlSW5kZXgoKTsK
KyAgICAgICAgCisgICAgICAgIENhbGxWYXJpYW50IHZhcmlhbnQgPSBjYWxsQ2FzZXNbY2FzZUlu
ZGV4XS52YXJpYW50KCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRh
YmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVB0ciA9CisgICAgICAgICAgICB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoCisgICAgICAgICAgICAgICAgKnZtLCB2
YXJpYW50LmV4ZWN1dGFibGUoKSwgQXJpdHlDaGVja05vdFJlcXVpcmVkLCByZWdpc3RlcnMpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGZhc3RDb3VudHMpIHsKKyAgICAgICAgICAgIHN0dWJKaXQu
YWRkMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGZhc3RDb3VudHNCYXNlR1BSLCBj
YXNlSW5kZXggKiBzaXplb2YodWludDMyX3QpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FsbHNb
Y2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOworICAgICAgICBjYWxsc1tjYXNl
SW5kZXhdLmNvZGVQdHIgPSBjb2RlUHRyOworICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1
bXAoKSk7CisgICAgfQogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOworICAgIGJp
bmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpLmxpbmsoJnN0dWJKaXQpOwogICAgIHN0dWJKaXQubW92
ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAg
IHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgR1BSSW5mbzo6cmVnVDEpOwpAQCAtMTY5MSwyMyArMTc4OSwzMCBAQCB2b2lkIGxpbmtDbG9z
dXJlQ2FsbCgKICAgICAKICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0
dXJuKEdQUkluZm86OnJlZ1Q0KTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0
dWJKaXQuanVtcCgpOwotICAgIAorICAgICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCp2bSwgc3R1YkppdCwgY2FsbGVyQ29kZUJsb2NrKTsKICAgICAKLSAgICBwYXRjaEJ1ZmZlci5s
aW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAg
IFJFTEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKKyAgICBm
b3IgKENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxzKSB7CisgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsoCisgICAgICAgICAgICBjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRy
KGNhbGxUb0NvZGVQdHIuY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgfQogICAg
IGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkp
KQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldCgwKSk7CiAgICAgZWxzZQogICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIubGFiZWxBdE9mZnNldCgwKSk7
Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJ
U3R1Yih2aXJ0dWFsVGh1bmtHZW5lcmF0b3JGb3IoQ29kZUZvckNhbGwsIHJlZ2lzdGVycykpLmNv
ZGUoKSkpOworICAgIGlmIChjYWxsQ2FzZXMuc2l6ZSgpID09IE9wdGlvbnM6Om1heFBvbHltb3Jw
aGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSgpKQorICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3cs
IENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKHZpcnR1YWxUaHVua0dlbmVyYXRvckZv
cihDb2RlRm9yQ2FsbCwgcmVnaXN0ZXJzKSkuY29kZSgpKSk7CisgICAgZWxzZQorICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKGxp
bmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvckZvcihyZWdpc3RlcnMpKS5jb2RlKCkpKTsK
ICAgICAKLSAgICBSZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBh
ZG9wdFJlZihuZXcgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKKyAgICBSZWZQdHI8UG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IFBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFX0ZPUigKICAgICAgICAgICAg
IGNhbGxlckNvZGVCbG9jaywgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkNsb3N1cmUgY2Fs
bCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXQgJXAgKCVzKSIsCisgICAgICAg
ICAgICAoIlBvbHltb3JwaGljIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFy
Z2V0cyAlcyIsCiAgICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRh
dGEoKSwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApLmV4
ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgY29kZVB0ci5leGVjdXRhYmxlQWRk
cmVzcygpLCB0b0NTdHJpbmcocG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSkuZGF0YSgpKSks
Ci0gICAgICAgICp2bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlY3V0
YWJsZSkpOworICAgICAgICAgICAgIHRvQ1N0cmluZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRh
KCkpKSwKKyAgICAgICAgKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
eGVjLT5jYWxsZXJGcmFtZSgpLCBjYWxsTGlua0luZm8sIGNhbGxDYXNlcykpOwogICAgIAogICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogICAgIApAQCAt
MTcxNiw5ICsxODIxLDE0IEBAIHZvaWQgbGlua0Nsb3N1cmVDYWxsKAogICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgIGxpbmtTbG93Rm9y
KHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCByZWdpc3RlcnMp
OwogICAgIAorICAgIC8vIElmIHRoZXJlIGhhZCBiZWVuIGEgcHJldmlvdXMgc3R1YiByb3V0aW5l
LCB0aGF0IG9uZSB3aWxsIGRpZSBhcyBzb29uIGFzIHRoZSBHQyBydW5zIGFuZCBzZWVzCisgICAg
Ly8gdGhhdCBpdCdzIG5vIGxvbmdlciBvbiBzdGFjay4KICAgICBjYWxsTGlua0luZm8uc3R1YiA9
IHN0dWJSb3V0aW5lLnJlbGVhc2UoKTsKICAgICAKLSAgICBBU1NFUlQoIWNhbGxlZUNvZGVCbG9j
ayB8fCBjYWxsZWVDb2RlQmxvY2stPmlzSW5jb21pbmdDYWxsQWxyZWFkeUxpbmtlZCgmY2FsbExp
bmtJbmZvKSk7CisgICAgLy8gVGhlIGNhbGwgbGluayBpbmZvIG5vIGxvbmdlciBoYXMgYSBjYWxs
IGNhY2hlIGFwYXJ0IGZyb20gdGhlIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIGNhbGwKKyAgICAv
LyBzdHViLgorICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkKKyAgICAgICAgY2FsbExp
bmtJbmZvLnJlbW92ZSgpOwogfQogCiB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiBy
ZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNp
ZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2Fs
bFZhcmlhbnQuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtNDEsNyArNDIsNyBAQCB2b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiwgSlNW
YWx1CiB2b2lkIHJlcGF0Y2hJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVudGlmaWVy
JiwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8m
KTsKIHZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBK
U0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKTsKIHZvaWQgbGlua1Nsb3dGb3IoRXhl
Y1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgUmVnaXN0ZXJQ
cmVzZXJ2YXRpb25Nb2RlKTsKLXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxM
aW5rSW5mbyYsIENvZGVCbG9jayosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwordm9pZCBsaW5rUG9seW1vcnBoaWNDYWxs
KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50LCBSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGUpOwogdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0
dWJJbmZvJik7CiB2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1
YkluZm8mKTsKIHZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8m
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5j
cHAJKHJldmlzaW9uIDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDI3ICsxMzcsMjcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaGF0UAogICAgIHJldHVybiBsaW5rRm9yVGh1
bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7
CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsRm9yVGh1
bmtHZW5lcmF0b3IoCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhp
Y0NhbGxGb3JUaHVua0dlbmVyYXRvcigKICAgICBWTSogdm0sIFJlZ2lzdGVyUHJlc2VydmF0aW9u
TW9kZSByZWdpc3RlcnMpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCi0gICAg
c2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsRm9yKHJlZ2lzdGVy
cykpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0Nh
bGxGb3IocmVnaXN0ZXJzKSk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0s
IGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgKCJMaW5rIGNsb3N1cmUgY2FsbCAlcyBzbG93IHBhdGggdGh1bmsiLCByZWdpc3RlcnMg
PT0gTXVzdFByZXNlcnZlUmVnaXN0ZXJzID8gIiB0aGF0IHByZXNlcnZlcyByZWdpc3RlcnMiIDog
IiIpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5rIHBvbHlt
b3JwaGljIGNhbGwgJXMgc2xvdyBwYXRoIHRodW5rIiwgcmVnaXN0ZXJzID09IE11c3RQcmVzZXJ2
ZVJlZ2lzdGVycyA/ICIgdGhhdCBwcmVzZXJ2ZXMgcmVnaXN0ZXJzIiA6ICIiKSk7CiB9CiAKIC8v
IEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2Ug
aWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgogLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVu
IHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4KLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAg
ICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTm90UmVxdWlyZWQpOworICAgIHJldHVybiBsaW5rUG9seW1vcnBoaWNDYWxsRm9y
VGh1bmtHZW5lcmF0b3Iodm0sIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NU
aHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3Jw
aGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJl
dHVybiBsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcih2bSwgTXVzdFByZXNlcnZlUmVn
aXN0ZXJzKTsKKyAgICByZXR1cm4gbGlua1BvbHltb3JwaGljQ2FsbEZvclRodW5rR2VuZXJhdG9y
KHZtLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOwogfQogCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMTc5MjIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NjUsMTYgKzY1LDE2IEBAIGlubGluZSBUaHVua0dlbmVyYXRvciBsaW5rVGh1bmtHZW5lcmF0b3IK
ICAgICByZXR1cm4gMDsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2Fs
bFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVD
YWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2Vu
ZXJhdG9yKFZNKik7CiAKLWlubGluZSBUaHVua0dlbmVyYXRvciBsaW5rQ2xvc3VyZUNhbGxUaHVu
a0dlbmVyYXRvckZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoraW5saW5l
IFRodW5rR2VuZXJhdG9yIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvckZvcihSZWdp
c3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIHN3aXRjaCAocmVnaXN0ZXJz
KSB7CiAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgotICAgICAgICBy
ZXR1cm4gbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3I7CisgICAgICAgIHJldHVybiBsaW5r
UG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3I7CiAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdp
c3RlcnM6Ci0gICAgICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1Ro
dW5rR2VuZXJhdG9yOworICAgICAgICByZXR1cm4gbGlua1BvbHltb3JwaGljQ2FsbFRoYXRQcmVz
ZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE3OTIyMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzMiw2ICszMzIsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhD
CiAgICAgICAgIH0KICAgICB9CiAgICAgZGVmYXVsdDoKKyAgICAgICAgZGF0YUxvZygiVW5leHBl
Y3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9u
IDE3OTIyMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTcwLDEyICsxNzAsMTAgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRp
b25TdHJpbmc7CiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudERldmlydHVhbGl6YXRpb24s
IHRydWUpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcsIHRy
dWUpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5nLCB0cnVlKSBc
Ci0gICAgdihib29sLCBjYWxsU3RhdHVzU2hvdWxkVXNlQ2FsbEVkZ2VQcm9maWxlLCB0cnVlKSBc
Ci0gICAgdihib29sLCBjYWxsRWRnZVByb2ZpbGVSZWFsbHlQcm9jZXNzZXNMb2csIHRydWUpIFwK
LSAgICB2KGJvb2wsIGJhc2VsaW5lRG9lc0NhbGxFZGdlUHJvZmlsaW5nLCBmYWxzZSkgXAotICAg
IHYoYm9vbCwgZGZnRG9lc0NhbGxFZGdlUHJvZmlsaW5nLCB0cnVlKSBcCi0gICAgdihib29sLCBl
bmFibGVDYWxsRWRnZVByb2ZpbGluZywgdHJ1ZSkgXAorICAgIHYodW5zaWduZWQsIG1heFBvbHlt
b3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSwgMTUpIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhQb2x5
bW9ycGhpY0NhbGxWYXJpYW50c0ZvcklubGluaW5nLCA1KSBcCiAgICAgdih1bnNpZ25lZCwgZnJl
cXVlbnRDYWxsVGhyZXNob2xkLCAyKSBcCisgICAgdihkb3VibGUsIG1pbmltdW1DYWxsVG9Lbm93
blJhdGUsIDAuNTEpIFwKICAgICB2KGJvb2wsIG9wdGltaXplTmF0aXZlQ2FsbHMsIGZhbHNlKSBc
CiAgICAgdihib29sLCBlbmFibGVPYmplY3RBbGxvY2F0aW9uU2lua2luZywgdHJ1ZSkgXAogICAg
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE3OTIy
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY5LDEzICszNjksNiBAQCBWTSomIFZNOjpzaGFyZWRJbnN0YW5jZUludGVybmFsKCkK
ICAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7CiB9CiAKLUNhbGxFZGdlTG9nJiBWTTo6ZW5zdXJl
Q2FsbEVkZ2VMb2coKQotewotICAgIGlmICghY2FsbEVkZ2VMb2cpCi0gICAgICAgIGNhbGxFZGdl
TG9nID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsRWRnZUxvZz4oKTsKLSAgICByZXR1cm4gKmNhbGxF
ZGdlTG9nOwotfQotCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyBUaHVua0dlbmVyYXRvciB0aHVu
a0dlbmVyYXRvckZvckludHJpbnNpYyhJbnRyaW5zaWMgaW50cmluc2ljKQogewpAQCAtNDU5LDkg
KzQ1Miw2IEBAIHZvaWQgVk06OnN0b3BTYW1wbGluZygpCiAKIHZvaWQgVk06OnByZXBhcmVUb0Rp
c2NhcmRDb2RlKCkKIHsKLSAgICBpZiAoY2FsbEVkZ2VMb2cpCi0gICAgICAgIGNhbGxFZGdlTG9n
LT5wcm9jZXNzTG9nKCk7Ci0gICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CiAgICAgICAgIGlmIChE
Rkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6d29ya2xpc3RGb3JJbmRleE9yTnVsbChpKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTc5MjIzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNzMs
NyArNzMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQXJpdHlDaGVja0ZhaWxSZXR1cm5U
aHVua3M7CiBjbGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7Ci1jbGFzcyBDYWxsRWRnZUxvZzsKIGNs
YXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNoZTsKIGNsYXNzIENvbW1vbklkZW50aWZpZXJz
OwpAQCAtMjM4LDkgKzIzNyw2IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8REZHOjpM
b25nTGl2ZWRTdGF0ZT4gZGZnU3RhdGU7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEVkZ2VMb2c+IGNhbGxFZGdlTG9nOwotICAgIENhbGxFZGdl
TG9nJiBlbnN1cmVDYWxsRWRnZUxvZygpOwotCiAgICAgVk1UeXBlIHZtVHlwZTsKICAgICBDbGll
bnREYXRhKiBjbGllbnREYXRhOwogICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZyYW1lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245558</attachid>
            <date>2015-01-28 11:45:20 -0800</date>
            <delta_ts>2015-01-28 20:32:39 -0800</delta_ts>
            <desc>getting there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>139427</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc5Mjc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1OCBA
QAorMjAxNS0wMS0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcgc2hvdWxkIGJlIGJhc2VkIG9uIHBvbHltb3JwaGlj
IGNhbGwgaW5saW5lIGNhY2hpbmcgcmF0aGVyIHRoYW4gbG9nZ2luZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwNjYwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXaGVuIHdlIGZpcnN0IGlt
cGxlbWVudGVkIHBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcsIHdlIGRpZCB0aGUgcHJvZmlsaW5n
IGJhc2VkIG9uIGEgY2FsbAorICAgICAgICBlZGdlIGxvZy4gVGhlIGlkZWEgd2FzIHRvIHN0b3Jl
IGVhY2ggY2FsbCBlZGdlIChhIHR1cGxlIG9mIGNhbGwgc2l0ZSBhbmQgY2FsbGVlKSBpbnRvIGEK
KyAgICAgICAgZ2xvYmFsIGxvZyB0aGF0IHdhcyBwcm9jZXNzZWQgbGF6aWx5LiBQcm9jZXNzaW5n
IHRoZSBsb2cgd291bGQgZ2l2ZSBwcmVjaXNlIGNvdW50cyBvZiBjYWxsCisgICAgICAgIGVkZ2Vz
LCBhbmQgY291bGQgYmUgdXNlZCB0byBkcml2ZSB3ZWxsLWluZm9ybWVkIGlubGluaW5nIGRlY2lz
aW9ucyAtIHBvbHltb3JwaGljIG9yIG5vdC4KKyAgICAgICAgVGhpcyB3YXMgYSBzcGVlZC11cCBv
biB0aHJvdWdocHV0IHRlc3RzIGJ1dCBhIHNsb3ctZG93biBmb3IgbGF0ZW5jeSB0ZXN0cy4gSXQg
d2FzIGEgbmV0IHdpbgorICAgICAgICBub25ldGhlbGVzcy4KKyAgICAgICAgCisgICAgICAgIEV4
cGVyaWVuY2Ugd2l0aCB0aGlzIGNvZGUgc2hvd3MgdGhyZWUgdGhpbmdzLiBGaXJzdCwgdGhlIGNh
bGwgZWRnZSBwcm9maWxlciBpcyBidWdneSBhbmQKKyAgICAgICAgY29tcGxleC4gSXQgd291bGQg
dGFrZSB3b3JrIHRvIGZpeCB0aGUgYnVncy4gU2Vjb25kLCB0aGUgY2FsbCBlZGdlIHByb2ZpbGVy
IGluY3VycyBsb3RzIG9mCisgICAgICAgIG92ZXJoZWFkIGZvciBsYXRlbmN5IGNvZGUgdGhhdCB3
ZSBjYXJlIGRlZXBseSBhYm91dC4gVGhpcmQsIGl0J3Mgbm90IGF0IGFsbCBjbGVhciB0aGF0IHRo
ZQorICAgICAgICBwcmVjaWRlIGNhbGwgZWRnZSBjb3VudHMgYXJlIGFueSBtb3JlIHVzZWZ1bCB0
aGFuIGp1c3Qga25vd2luZyB0aGF0IGEgY2FsbCBzaXRlIGhhZCBhIGZpbml0ZQorICAgICAgICBu
dW1iZXIgb2YgY2FsbGVlcy4KKyAgICAgICAgCisgICAgICAgIFNvLCB0aGlzIHBhdGNoIHJlbW92
ZXMgdGhlIGNhbGwgZWRnZSBwcm9maWxlciBhbmQgcmVwbGFjZXMgaXQgd2l0aCBhIHBvbHltb3Jw
aGljIGNhbGwgaW5saW5lCisgICAgICAgIGNhY2hlLiBJZiB3ZSBtaXNzIHRoZSBiYXNpYyBjYWxs
IGlubGluZSBjYWNoZSwgd2UgaW5mbGF0ZSB0aGUgY2FjaGUgdG8gYmUgYSBqdW1wIHRvIGFuCisg
ICAgICAgIG91dC1vZi1saW5lIHN0dWIgdGhhdCBjYXNlcyBvbiB0aGUgcHJldmlvdXNseSBrbm93
biBjYWxsZWVzLiBJZiB0aGF0IG1pc3NlcyBhZ2FpbiwgdGhlbiB3ZQorICAgICAgICByZXdyaXRl
IHRoYXQgc3R1YiB0byBpbmNsdWRlIHRoZSBuZXcgY2FsbGVlLiBXZSBkbyB0aGlzIHVwIHRvIHRo
cmVlIGNhbGxlZXMuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBieXRlY29kZS9DYWxsRWRnZS5oOgorICAgICAgICAoSlNDOjpDYWxsRWRnZTo6Y291bnQpOgor
ICAgICAgICAoSlNDOjpDYWxsRWRnZTo6Q2FsbEVkZ2UpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nh
bGxFZGdlUHJvZmlsZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2FsbEVkZ2VQ
cm9maWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlSW5s
aW5lcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHA6Cisg
ICAgICAgIChKU0M6OkNhbGxMaW5rSW5mbzo6dW5saW5rKToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtJbmZvOjp2aXNpdFdlYWspOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2Fs
bExpbmtTdGF0dXM6OkNhbGxMaW5rU3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZy
b21DYWxsTGlua0luZm8pOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6aXNDbG9zdXJl
Q2FsbCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjptYWtlQ2xvc3VyZUNhbGwpOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6ZHVtcCk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRnJvbUNhbGxFZGdlUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAg
ICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0
dXM6OkNhbGxMaW5rU3RhdHVzKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmlzU2V0
KToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OnZhcmlhbnRzKToKKyAgICAgICAgKEpT
Qzo6Q2FsbExpbmtTdGF0dXM6OnNpemUpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6
YXQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjYW5PcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OkNhbGxM
aW5rU3RhdHVzOjplZGdlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVz
OjpjYW5UcnVzdENvdW50cyk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2FsbFZhcmlh
bnQuY3BwOgorICAgICAgICAoSlNDOjp2YXJpYW50TGlzdFdpdGhWYXJpYW50KToKKyAgICAgICAg
KEpTQzo6ZGVzcGVjaWZpZWRWYXJpYW50TGlzdCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbFZh
cmlhbnQuaDoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6On5Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmtJ
bmNvbWluZ1BvbHltb3JwaGljQ2FsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5r
SW5jb21pbmdDYWxscyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bm90aWNlSW5jb21pbmdD
YWxsKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0luY29taW5nQ2FsbEFscmVhZHlMaW5rZWQpOiBEZWxldGVkLgorICAgICAgICAq
IGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6
CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6YWRkQ2FsbFdpdGhvdXRTZXR0aW5nUmVzdWx0KToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAgICAgKiBkZmcvREZHQ2xv
YmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3Rh
bnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0Mu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0RyaXZl
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGlsZUltcGwpOgorICAgICAgICAqIGRmZy9E
RkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5v
ZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAg
ICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6
CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVGllclVwQ2hlY2tJbmplY3Rp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpUaWVyVXBDaGVja0luamVjdGlvblBoYXNlOjpy
ZW1vdmVGVExQcm9maWxpbmcpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGhlYXAv
SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGppdC9C
aW5hcnlTd2l0Y2guaDoKKyAgICAgICAgKiBqaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkxp
bmtQb2x5bW9ycGhpY0NhbGxGb3IpOgorICAgICAgICAoSlNDOjpvcGVyYXRpb25MaW5rQ2xvc3Vy
ZUNhbGxGb3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRTdHViUm91dGluZS5oOgorICAg
ICAgICAqIGppdC9KSVRXcml0ZUJhcnJpZXIuaDoKKyAgICAgICAgKiBqaXQvUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxs
Tm9kZTo6flBvbHltb3JwaGljQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0Nh
bGxOb2RlOjp1bmxpbmspOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxDYXNlOjpkdW1w
KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OlBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmU6On5Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSk6CisgICAgICAgIChKU0M6OlBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lOjp2YXJpYW50cyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lOjplZGdlcyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lOjp2aXNpdFdlYWspOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZTo6bWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKToKKyAgICAgICAgKiBqaXQvUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlBvbHltb3Jw
aGljQ2FsbE5vZGU6OlBvbHltb3JwaGljQ2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpQb2x5bW9y
cGhpY0NhbGxDYXNlOjpQb2x5bW9ycGhpY0NhbGxDYXNlKToKKyAgICAgICAgKEpTQzo6UG9seW1v
cnBoaWNDYWxsQ2FzZTo6dmFyaWFudCk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbENh
c2U6OmNvZGVCbG9jayk6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlND
OjpsaW5rRm9yKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbCk6CisgICAgICAg
IChKU0M6OmxpbmtDbG9zdXJlQ2FsbCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L1JlcGF0Y2gu
aDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6bGlu
a1BvbHltb3JwaGljQ2FsbEZvclRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlua1Bv
bHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3Jw
aGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjps
aW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OmxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
bGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQu
CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAgICAoSlNDOjpsaW5rUG9s
eW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3JGb3IpOgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3Vy
ZUNhbGxUaHVua0dlbmVyYXRvckZvcik6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6aml0Q29tcGlsZUFuZFNldEhldXJp
c3RpY3MpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUv
Vk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6cHJlcGFyZVRvRGlzY2FyZENvZGUpOgorICAgICAg
ICAoSlNDOjpWTTo6ZW5zdXJlQ2FsbEVkZ2VMb2cpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKwogMjAxNS0wMS0yOCAgRGFuYSBCdXJrYXJ0ICA8ZGJ1cmthcnRAYXBwbGUuY29t
PgogCiAgICAgICAgIE1vdmUgQVNhbiBmbGFnIHNldHRpbmdzIGZyb20gRGVidWdSZWxlYXNlLnhj
Y29uZmlnIHRvIEJhc2UueGNjb25maWcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgxLDEzICsy
ODEsOCBAQAogCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNCM0Ey
QjE1NDc1MDAwMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERG
R1ZhbGlkYXRlLmNwcCAqLzsgfTsKIAkJMEYzQjNBMkMxNTQ3NTAwMjAwM0VEMEZGIC8qIERGR1Zh
bGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNCM0EyQTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjNCN0UyNjE5QTExQjgwMDBEOUJD
NTYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGM0I3RTIwMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGM0I3RTI3MTlBMTFCODAw
MEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdl
UHJvZmlsZS5jcHAgKi87IH07Ci0JCTBGM0I3RTI4MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRn
ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGM0I3RTIyMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjNCN0UyOTE5QTExQjgw
MDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjMxOUExMUI4MDAwRDlCQzU2IC8qIENh
bGxFZGdlUHJvZmlsZUlubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjNCN0UyQTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdF
MjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLzsgfTsKIAkJMEYzQjdFMkIx
OUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNTE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZh
cmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQkwRjNCN0UyRDE5QTEyQUFFMDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMkMxOUExMkFBRTAwRDlCQzU2
IC8qIENhbGxFZGdlLmNwcCAqLzsgfTsKIAkJMEYzRDBCQkMxOTRBNDE0MzAwRkM5Q0Y5IC8qIENv
bnN0YW50U3RydWN0dXJlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzRDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0
dXJlQ2hlY2suY3BwICovOyB9OwogCQkwRjNEMEJCRDE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3Rh
bnRTdHJ1Y3R1cmVDaGVjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzRDBCQkIxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hl
Y2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNFMDFBODE5RDM1M0E1
MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi87IH07CkBAIC0zNTUsNiArMzUw
LDggQEAKIAkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0ODIxNUU0ODEx
NDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNjRCMjcxMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlT
d2l0Y2guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi87IH07CiAJCTBG
NjRCMjcyMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2NiAv
KiBCaW5hcnlTd2l0Y2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjY0QjI3OTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NEIyNzcxQTc5NTdC
MjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCAqLzsgfTsKKwkJMEY2NEIyN0ExQTc5NTdCMjAwNkU0
RTY2IC8qIENhbGxFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2NkVDMDE4MzU2NkY5
MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQkUxODM1NjZGOTAwRDAx
N0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2NkVDMTE4MzU2NkY5MDBEMDE3
RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJGMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNv
ZGVMaXZlbmVzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNjY2RUM2MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQzIxODM1
NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgKi87IH07CkBAIC0zODYsOCArMzgz
LDYgQEAKIAkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3
MDI1QTgxNzE0QjBGODAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzE0Q0E0MTZF
QTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0ExMTZFQTkyRUQw
MEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEY3
MTRDQTUxNkVBOTJGMjAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzE0Q0EyMTZF
QTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEY3M0Q3QUUxNjVBMTQy
RDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3M0Q3QUIxNjVBMTQyQTAwQUNBQjcxIC8q
IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwICovOyB9OwotCQkwRjczRDdBRjE2NUExNDMwMDBB
Q0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3M0Q3QUMxNjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1
cmVDYWxsU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjc0M0JBQTE2Qjg4MjQ5MDA5RjkyNzcgLyogQVJNNjREaXNhc3NlbWJs
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUy
QTNBMjAxNjUxQzY2MTAwQTgwQUZFIC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJ
MEY3NTc2RDIxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzU3NkQw
MThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAgKi87IH07
CiAJCTBGNzU3NkQzMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGlu
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NTc2
RDExOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYwMiw2ICs1OTcs
OCBAQAogCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQTE0MzZBQjIzMDAx
OTZDNDggLyogT3B0aW9ucy5jcHAgKi87IH07CiAJCTBGRTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAv
KiBERkdUcmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCAq
LzsgfTsKIAkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcyMTFDMTkzQjlD
NTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFODM0MTcxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5jcHAgKi87IH07CisJCTBGRTgzNDE4MUE2RUY5N0IwMEQwNDg0NyAvKiBQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZFODUzNEIxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBv
aW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLzsg
fTsKIAkJMEZFODUzNEMxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUzNEEx
NzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTk1Rjc5MThCNTY5NDcwMEI1
MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkU5NUY3NzE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rp
b24uY3BwICovOyB9OwpAQCAtMTk1MCwxMyArMTk0Nyw4IEBACiAJCTBGM0IzQTI1MTU0NEM5OTEw
MDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9E
RkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGM0IzQTI5MTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYWxpZGF0ZS5jcHA7IHBhdGggPSBkZmcvREZH
VmFsaWRhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCM0EyQTE1NDc0
RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHVmFsaWRhdGUuaDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRjNCN0UyMDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzQjdFMjExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdl
UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRn
ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNCN0UyMjE5QTEx
QjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxFZGdlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRjNCN0UyMzE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsVmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
YWxsVmFyaWFudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0I3RTI1MTlB
MTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYWxsVmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNC
N0UyQzE5QTEyQUFFMDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjNEMEJCQTE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25zdGFudFN0cnVjdHVy
ZUNoZWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRDBCQkIxOTRBNDE0
MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJl
cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcDsgcGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMjUsNiArMjAxNyw4IEBACiAJCTBGNjM5NDgyMTVF
NDgxMTQwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQXJyYXlNb2RlLmg7IHBhdGggPSBkZmcvREZHQXJyYXlNb2RlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5h
cnlTd2l0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmluYXJ5
U3dpdGNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEIyNzAxQTc4NEJB
RjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBCaW5hcnlTd2l0Y2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2NEIy
NzcxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENhbGxFZGdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpc0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZF
QkYxODM1NjZGOTAwRDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bGxCeXRlY29kZUxpdmVuZXNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNjY2RUMyMTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFi
aWxpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXZhaWxh
YmlsaXR5LmNwcDsgcGF0aCA9IGRmZy9ERkdBdmFpbGFiaWxpdHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjA1Niw4ICsyMDUwLDYgQEAKIAkJMEY3MDI1QTgxNzE0QjBGODAw
MzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDsgcGF0aCA9IGRmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFn
YXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0EyMTZFQTkyRUQwMEYzRUJF
QiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9E
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGNzNEN0FCMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsb3N1cmVDYWxsU3R1YlJv
dXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjczRDdBQzE2NUExNDJB
MDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNzU3NkQwMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nl
c3NvckNhbGxKSVRTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzU3NkQxMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NvckNhbGxKSVRTdHViUm91
dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc2NkQxQzE1QTUwMjhEMDA4
RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyODQs
NiArMjI3Niw4IEBACiAJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFNzIxMUIxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVHJhbnNpdGlvbi5j
cHA7IHBhdGggPSBkZmcvREZHVHJhbnNpdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTcyMTFDMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RyYW5zaXRpb24uaDsgcGF0aCA9IGRmZy9E
RkdUcmFuc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTgzNDE1MUE2
RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0
NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8q
IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFOTVGNzcxOEI1Njk0NzAwQjUz
MUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTERhdGFTZWN0aW9uLmNwcDsgcGF0aCA9IGZ0bC9GVExEYXRhU2VjdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzQ3LDggKzM3NDEsNiBAQAogCQkJCTBG
NjRCMjZGMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovLAogCQkJCTBGNjRC
MjcwMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCAqLywKIAkJCQkwRjI0RTUzRDE3
RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggKi8sCi0JCQkJMEY3M0Q3QUIxNjVBMTQy
QTAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwICovLAotCQkJCTBGNzNEN0FD
MTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggKi8sCiAJCQkJMEZE
ODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8sCiAJCQkJQTdC
NDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovLAogCQkJ
CUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi8sCkBA
IC0zNzk2LDYgKzM3ODgsOCBAQAogCQkJCTBGQzcxMkUxMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRU
b0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhB
QUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3NDhE
MDA3MTVCMDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLywKKwkJCQkwRkU4MzQxNTFBNkVGOTdCMDBE
MDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwICovLAorCQkJCTBGRTgzNDE2
MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oICovLAogCQkJ
CTBGQTdBOEU5MThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwICovLAogCQkJCTBGQTdBOEVBMThC
NDEzQzgwMDUyMzcxRCAvKiBSZWcuaCAqLywKIAkJCQkwRjZCMUNCQjE4NjEyNDZBMDA4NDVEOTcg
LyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcCAqLywKQEAgLTUwMjcs
MTEgKzUwMjEsOCBAQAogCQkJCTBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi8sCiAJCQkJMEY4ODVFMTAxODQ5QTNCRTAwRjFFM0ZB
IC8qIEJ5dGVjb2RlVXNlRGVmLmggKi8sCiAJCQkJMEY4MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8q
IEJ5VmFsSW5mby5oICovLAotCQkJCTBGM0I3RTJDMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRn
ZS5jcHAgKi8sCi0JCQkJMEYzQjdFMjAxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlLmggKi8s
Ci0JCQkJMEYzQjdFMjExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5jcHAgKi8s
Ci0JCQkJMEYzQjdFMjIxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5oICovLAot
CQkJCTBGM0I3RTIzMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgg
Ki8sCisJCQkJMEY2NEIyNzcxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCAqLywKKwkJ
CQkwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCAqLywKIAkJCQkwRjBCODNB
RTE0QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCAqLywKIAkJCQkwRjBCODNBRjE0
QkNGNzE0MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggKi8sCiAJCQkJMEY5MzMyOTMxNENBN0RD
MTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLywKQEAgLTU0ODMsNyArNTQ3NCw2IEBA
CiAJCQkJMEY2OUNDODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjI0RTU0MjE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZv
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjczRDdBRjE2NUExNDMwMDBBQ0FCNzEgLyogQ2xvc3Vy
ZUNhbGxTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3OTcwRUQxRDNBRTAw
RjFGNjgxIC8qIENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4Rjk0NDExNjY3NjMz
MjAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzk3RjM0
MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtNTUyNyw2ICs1NTE3LDcgQEAKIAkJCQlCQ0QyMDM0QTBFMTcxMzVFMDAy
QzdFODIgLyogRGF0ZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTM1OUNGMzBG
REQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MTE2NjAyMEUxOTk3QjQwMDgwNjZERCAvKiBEYXRlSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNjRCMjdBMUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRBMTU2MzIxMDk2NjM2NTAwNkZBMjYwIC8qIERhdGVJbnN0YW5jZUNhY2hlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0QyMDM0QzBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzRTgwRTE3MThGNDAwMkM3RTgyIC8qIERhdGVQ
cm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTU1NzQsNyArNTU2NSw2IEBACiAJCQkJ
MEZGRkM5NUExNEVGOTBBOTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJGQzc3MzE2RTEyRjc0MDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOEYyQjlBMTcyRjA1MDEwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmll
cnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0I3RTI4MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxs
RWRnZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzBGN0NFMTdCQkZDNUIwMDQ2NEZF
NCAvKiBERkdEZXNpcmVkVHJhbnNpdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTg1MzRD
MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyOTgxRkQ5MTdCQUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5j
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNTg2NSw3ICs1ODU1LDYgQEAKIAkJCQlBNzZGNTRBMzEz
QjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUExRDkwMDhFN0YwMSAvKiBKU0FQSVZhbHVlV3JhcHBl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYzQjdFMjkxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxF
ZGdlUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQ0YzOUMyMTZFMTVBODEw
MERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NjE0
MEQyMTgyOTgyQ0IwMDc1MDYyNCAvKiBKU0FyZ3VtZW50c0l0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQxNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MTg5LDcgKzYxNzgsNiBAQAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAv
KiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYy
OTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQjdGMzlFMTVFRDhFNDYwMEYxNjdCMiAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmggaW4g
SGVhZGVycyAqLywKLQkJCQkwRjNCN0UyNjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3Mzg2NTU0MTE4Njk3QjQwMDU0MDI3OSAvKiBTcGVjaWFsaXpl
ZFRodW5rSklULmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUg
LyogU3BlY2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU0MTQxREFFRUUw
MDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjM2LDYgKzYy
MjQsNyBAQAogCQkJCTBGRjQyNzQ5MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfdHlwZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM5MTc5OUU0QjIwMEQyODMzRCAvKiBVRGlzODZEaXNh
c3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQxMTdBREI1RjMwMDVBQjE3NCAv
KiBVaW50MTZBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFODM0MTgxQTZFRjk3QjAwRDA0
ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NjY3MzlEMzEzQkZERTcxMDAyM0Q4N0MgLyogVWludDE2V2l0aEZyYWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0E4QUY0MjE3QURCNUYzMDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3QThBRjNGMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTY3NzQsNyArNjc2Myw2IEBACiAJCQkJMEYwQjgzQjAxNEJDRjcx
NjAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5
RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYyQjlDRTQxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0luc2VydE9TUkhpbnRzRm9yVXBkYXRl
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9z
dXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk2OUEwNzk2MEVEMUQz
QUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDAx
NjY3NjMzMDAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZDOTdGMzMxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2lu
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY3ODksNiArNjc3Nyw3IEBACiAJCQkJMEY5QzVFNUUx
OEUzNUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTcwOUYyRjIxN0EwQUMyQTAwNTEyRTk4IC8qIENvbW1vblNsb3dQYXRocy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk2NTUzQTMzMTE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhz
RXhjZXB0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY0QjI3OTFBNzk1N0IyMDA2RTRF
NjYgLyogQ2FsbEVkZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUEzQTcxNzk3NDMyRDAw
RTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0Yz
OUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NkIxNkQ4MTJFQjVCNTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTY5NjAsOCArNjk0OSw4IEBACiAJCQkJMEYyMzVCRDUxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYyMzVCRDgxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjIzNUJEQTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGM0I3RTI3MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxs
RWRnZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGMjk5NkIxN0EwQkI2NzAwMTA0
MTdBIC8qIEZUTEZhaWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFODM0MTcxQTZFRjk3QjAw
RDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRDhBMzE5MTdENTFGMjIwMENBMkM0MCAvKiBGVExGb3JPU1JFbnRyeUpJVENvZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQUYxODE2MzVGMzAwNTIyRjM5IC8qIEZUTElubGlu
ZUNhY2hlU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyODE3MDk2MjNCMDBCQjcy
MkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTcxNTMs
NyArNzE0Miw2IEBACiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExMSW50RGF0YS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRF
bnRyeXBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3
MiAvKiBMTEludEV4Y2VwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYzQjdFMkQxOUEx
MkFBRTAwRDlCQzU2IC8qIENhbGxFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE0
MTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludFNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjBCODM5QzE0QkNGNDYzMDA4ODVCNEYgLyogTExJbnRUaHVua3MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZDRUZBQ0QxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuaAko
cmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxF
ZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDE3ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAotdHlwZWRlZiB1aW50MTZfdCBDYWxsRWRnZUNvdW50VHlwZTsKLQogY2xhc3MgQ2FsbEVkZ2Ug
ewogcHVibGljOgogICAgIENhbGxFZGdlKCk7Ci0gICAgQ2FsbEVkZ2UoQ2FsbFZhcmlhbnQsIENh
bGxFZGdlQ291bnRUeXBlKTsKKyAgICBDYWxsRWRnZShDYWxsVmFyaWFudCwgdWludDMyX3QpOwog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY2FsbGVlOyB9CiAg
ICAgCiAgICAgQ2FsbFZhcmlhbnQgY2FsbGVlKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsZWU7IH0K
LSAgICBDYWxsRWRnZUNvdW50VHlwZSBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0K
KyAgICB1aW50MzJfdCBjb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnQ7IH0KICAgICAKICAg
ICBDYWxsRWRnZSBkZXNwZWNpZmllZENsb3N1cmUoKSBjb25zdAogICAgIHsKQEAgLTQ5LDEyICs0
NywxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAgICAgCi1wdWJsaWM6Citwcml2YXRlOgogICAgIENhbGxWYXJpYW50IG1fY2FsbGVlOwotICAg
IENhbGxFZGdlQ291bnRUeXBlIG1fY291bnQ7CisgICAgdWludDMyX3QgbV9jb3VudDsKIH07CiAK
LWlubGluZSBDYWxsRWRnZTo6Q2FsbEVkZ2UoQ2FsbFZhcmlhbnQgY2FsbGVlLCBDYWxsRWRnZUNv
dW50VHlwZSBjb3VudCkKK2lubGluZSBDYWxsRWRnZTo6Q2FsbEVkZ2UoQ2FsbFZhcmlhbnQgY2Fs
bGVlLCB1aW50MzJfdCBjb3VudCkKICAgICA6IG1fY2FsbGVlKGNhbGxlZSkKICAgICAsIG1fY291
bnQoY291bnQpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVk
Z2VQcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbEVkZ2VQcm9maWxlLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMzYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhbGxFZGdlUHJvZmlsZS5oIgot
Ci0jaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAiQ2FsbEVkZ2VQcm9maWxlSW5s
aW5lcy5oIgotI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1DYWxsRWRnZUxpc3QgQ2FsbEVkZ2VQcm9maWxlOjpj
YWxsRWRnZXMoKSBjb25zdAotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9j
ayk7Ci0gICAgCi0gICAgQ2FsbEVkZ2VMaXN0IHJlc3VsdDsKLSAgICAKLSAgICBDYWxsVmFyaWFu
dCBwcmltYXJ5Q2FsbGVlID0gbV9wcmltYXJ5Q2FsbGVlOwotICAgIENhbGxFZGdlQ291bnRUeXBl
IG51bUNhbGxzVG9QcmltYXJ5ID0gbV9udW1DYWxsc1RvUHJpbWFyeTsKLSAgICAvLyBEZWZlbmQg
YWdhaW5zdCByYWNlcy4gVGhlc2UgZmllbGRzIGFyZSBtb2RpZmllZCBieSB0aGUgbG9nIHByb2Nl
c3NvciB3aXRob3V0IGxvY2tpbmcuCi0gICAgaWYgKCEhcHJpbWFyeUNhbGxlZSAmJiBudW1DYWxs
c1RvUHJpbWFyeSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChDYWxsRWRnZShwcmltYXJ5Q2FsbGVl
LCBudW1DYWxsc1RvUHJpbWFyeSkpOwotICAgIAotICAgIGlmIChtX290aGVyQ2FsbGVlcykgewot
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpZiB0aGUgcHJpbWFyeSB0aHJlYWQgaGFkIGp1c3Qg
Y3JlYXRlZCBhIG1fb3RoZXJDYWxsZXMgd2hpbGUgbG9nCi0gICAgICAgIC8vIHByb2Nlc3Npbmcs
IHdlIHNlZSBhIGNvbnNpc3RlbnRseSBjcmVhdGVkIG9uZS4gVGhlIGxvY2sgYmVpbmcgaGVsZCBp
cyBpbnN1ZmZpY2llbnQgZm9yCi0gICAgICAgIC8vIHRoaXMsIHNpbmNlIHRoZSBsb2cgcHJvY2Vz
c29yIHdpbGwgb25seSBncmFiIHRoZSBsb2NrIHdoZW4gbWVyZ2luZyB0aGUgc2Vjb25kYXJ5Ci0g
ICAgICAgIC8vIHNwZWN0cnVtIGludG8gdGhlIHByaW1hcnkgb25lIGJ1dCBtYXkgc3RpbGwgY3Jl
YXRlIHRoZSBkYXRhIHN0cnVjdHVyZSB3aXRob3V0IGhvbGRpbmcKLSAgICAgICAgLy8gbG9ja3Mu
Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICBmb3IgKENhbGxFZGdlJiBl
bnRyeSA6IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZCkgewotICAgICAgICAgICAgLy8gRGVm
ZW5kIGFnYWluc3QgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIHByaW1hcnkgZHVwbGljYXRlcyBh
biBlbnRyeSBpbiB0aGUgc2Vjb25kYXJ5Ci0gICAgICAgICAgICAvLyBzcGVjdHJ1bS4gVGhhdCBj
YW4gaGFwcGVuIHdoZW4gdGhlIEdDIHJlbW92ZXMgdGhlIHByaW1hcnkuIFdlIGNvdWxkIGhhdmUg
dGhlIEdDIGZpeAotICAgICAgICAgICAgLy8gdGhlIHNpdHVhdGlvbiBieSBjaGFuZ2luZyB0aGUg
cHJpbWFyeSB0byBiZSBzb21ldGhpbmcgZnJvbSB0aGUgc2Vjb25kYXJ5IHNwZWN0cnVtLAotICAg
ICAgICAgICAgLy8gYnV0IHRoaXMgZml4IHNlZW1zIHNpbXBsZXIgdG8gaW1wbGVtZW50IGFuZCBh
bHNvIGNoZWFwZXIuCi0gICAgICAgICAgICBpZiAoZW50cnkuY2FsbGVlKCkgPT0gcmVzdWx0WzBd
LmNhbGxlZSgpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gQ2FsbEVkZ2UocmVzdWx0
WzBdLmNhbGxlZSgpLCBlbnRyeS5jb3VudCgpICsgcmVzdWx0WzBdLmNvdW50KCkpOwotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGVudHJ5KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBz
dGQ6OnNvcnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSwgW10gKGNvbnN0IENhbGxFZGdl
JiBhLCBjb25zdCBDYWxsRWRnZSYgYikgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gYS5j
b3VudCgpID4gYi5jb3VudCgpOwotICAgICAgICB9KTsKLSAgICAKLSAgICBpZiAocmVzdWx0LnNp
emUoKSA+PSAyKQotICAgICAgICBBU1NFUlQocmVzdWx0WzBdLmNvdW50KCkgPj0gcmVzdWx0Lmxh
c3QoKS5jb3VudCgpKTsKLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1DYWxsRWRnZUNv
dW50VHlwZSBDYWxsRWRnZVByb2ZpbGU6Om51bUNhbGxzVG9Lbm93bkNlbGxzKCkgY29uc3QKLXsK
LSAgICBDYWxsRWRnZUNvdW50VHlwZSByZXN1bHQgPSAwOwotICAgIGZvciAoQ2FsbEVkZ2UmIGVk
Z2UgOiBjYWxsRWRnZXMoKSkKLSAgICAgICAgcmVzdWx0ICs9IGVkZ2UuY291bnQoKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgYm9vbCB3b3J0aERlc3BlY2lmeWluZyhjb25zdCBD
YWxsVmFyaWFudCYgdmFyaWFudCkKLXsKLSAgICByZXR1cm4gIUhlYXA6OmlzTWFya2VkKHZhcmlh
bnQucmF3Q2FsbGVlQ2VsbCgpKQotICAgICAgICAmJiBIZWFwOjppc01hcmtlZCh2YXJpYW50LmRl
c3BlY2lmaWVkQ2xvc3VyZSgpLnJhd0NhbGxlZUNlbGwoKSk7Ci19Ci0KLWJvb2wgQ2FsbEVkZ2VQ
cm9maWxlOjp3b3J0aERlc3BlY2lmeWluZygpCi17Ci0gICAgaWYgKG1fY2xvc3VyZXNBcmVEZXNw
ZWNpZmllZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGJvb2wgZGlkU2VlRW50
cnkgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoISFtX3ByaW1hcnlDYWxsZWUpIHsKLSAgICAgICAg
ZGlkU2VlRW50cnkgPSB0cnVlOwotICAgICAgICBpZiAoIUpTQzo6d29ydGhEZXNwZWNpZnlpbmco
bV9wcmltYXJ5Q2FsbGVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
Ci0gICAgaWYgKG1fb3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
b3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIGRp
ZFNlZUVudHJ5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICghSlNDOjp3b3J0aERlc3BlY2lmeWlu
ZyhtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY2FsbGVlKCkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZGlk
U2VlRW50cnk7Ci19Ci0KLXZvaWQgQ2FsbEVkZ2VQcm9maWxlOjp2aXNpdFdlYWsoKQotewotICAg
IGlmICghbV9wcmltYXJ5Q2FsbGVlICYmICFtX290aGVyQ2FsbGVlcykKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCi0g
ICAgLy8gU2VlIGlmIGFueXRoaW5nIGlzIGRlYWQgYW5kIGlmIHRoYXQgY2FuIGJlIHJlY3RpZmll
ZCBieSBkZXNwZWNpZnlpbmcuCi0gICAgaWYgKHdvcnRoRGVzcGVjaWZ5aW5nKCkpIHsKLSAgICAg
ICAgQ2FsbFNwZWN0cnVtIG5ld1NwZWN0cnVtOwotICAgICAgICAKLSAgICAgICAgaWYgKCEhbV9w
cmltYXJ5Q2FsbGVlKQotICAgICAgICAgICAgbmV3U3BlY3RydW0uYWRkKG1fcHJpbWFyeUNhbGxl
ZS5kZXNwZWNpZmllZENsb3N1cmUoKSwgbV9udW1DYWxsc1RvUHJpbWFyeSk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAobV9vdGhlckNhbGxlZXMpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgICAgICBuZXdTcGVjdHJ1bS5hZGQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxs
ZWVzLT5tX3Byb2Nlc3NlZFtpXS5jYWxsZWUoKS5kZXNwZWNpZmllZENsb3N1cmUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNvdW50KCkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8Q2FsbFNw
ZWN0cnVtOjpLZXlBbmRDb3VudD4gbGlzdCA9IG5ld1NwZWN0cnVtLmJ1aWxkTGlzdCgpOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChsaXN0LnNpemUoKSk7Ci0gICAgICAgIG1fcHJpbWFyeUNhbGxl
ZSA9IGxpc3QubGFzdCgpLmtleTsKLSAgICAgICAgbV9udW1DYWxsc1RvUHJpbWFyeSA9IGxpc3Qu
bGFzdCgpLmNvdW50OwotICAgICAgICAKLSAgICAgICAgaWYgKG1fb3RoZXJDYWxsZWVzKSB7Ci0g
ICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuY2xlYXIoKTsKLQotICAgICAg
ICAgICAgLy8gV2UgY291bGQgaGF2ZSBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgR0MgY2xlYXJzIHRo
ZSBwcmltYXJ5IGFuZCB0aGVuIGxvZyBwcm9jZXNzaW5nCi0gICAgICAgICAgICAvLyByZWluc3Rh
dGVzIGl0IHdpdGhvdXQgZXZlciBkb2luZyBhbiBhZGRTbG93IGFuZCBzdWJzZXF1ZW50IG1lcmdl
QmFjay4gSW4gc3VjaCBhIGNhc2UKLSAgICAgICAgICAgIC8vIHRoZSBwcmltYXJ5IGNvdWxkIGR1
cGxpY2F0ZSBhbiBlbnRyeSBpbiBvdGhlckNhbGxlZXMsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiB0
aG91Z2ggd2UKLSAgICAgICAgICAgIC8vIGhhZCBhbiBvdGhlckNhbGxlZXMgb2JqZWN0LCB0aGUg
bGlzdCBzaXplIGlzIGp1c3QgMS4KLSAgICAgICAgICAgIGlmIChsaXN0LnNpemUoKSA+PSAyKSB7
Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGlzdC5zaXplKCkgLSAxOyBpLS07
KQotICAgICAgICAgICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuYXBwZW5k
KENhbGxFZGdlKGxpc3RbaV0ua2V5LCBsaXN0W2ldLmNvdW50KSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fY2xvc3VyZXNBcmVEZXNwZWNpZmllZCA9IHRy
dWU7Ci0gICAgICAgIAotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmICghIW1f
cHJpbWFyeUNhbGxlZSAmJiAhSGVhcDo6aXNNYXJrZWQobV9wcmltYXJ5Q2FsbGVlLnJhd0NhbGxl
ZUNlbGwoKSkpIHsKLSAgICAgICAgbV9udW1DYWxsc1RvVW5rbm93bkNlbGwgKz0gbV9udW1DYWxs
c1RvUHJpbWFyeTsKLSAgICAgICAgCi0gICAgICAgIG1fcHJpbWFyeUNhbGxlZSA9IENhbGxWYXJp
YW50KCk7Ci0gICAgICAgIG1fbnVtQ2FsbHNUb1ByaW1hcnkgPSAwOwotICAgIH0KLSAgICAKLSAg
ICBpZiAobV9vdGhlckNhbGxlZXMpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5zaXplKCk7IGkrKykgewotICAgICAgICAgICAg
aWYgKEhlYXA6OmlzTWFya2VkKG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jYWxsZWUo
KS5yYXdDYWxsZWVDZWxsKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX251bUNhbGxzVG9Vbmtub3duQ2VsbCArPSBtX290aGVyQ2FsbGVl
cy0+bV9wcm9jZXNzZWRbaV0uY291bnQoKTsKLSAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5t
X3Byb2Nlc3NlZFtpLS1dID0gbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLmxhc3QoKTsKLSAg
ICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5yZW1vdmVMYXN0KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIE9ubHkgZXhpc3RzIHdoaWxlIHdlIGFyZSBwcm9j
ZXNzaW5nIHRoZSBsb2cuCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX290aGVyQ2FsbGVlcy0+
bV90ZW1wb3JhcnlTcGVjdHJ1bSk7Ci0gICAgfQotfQotCi12b2lkIENhbGxFZGdlUHJvZmlsZTo6
YWRkU2xvdyhDYWxsVmFyaWFudCBjYWxsZWUsIENhbGxFZGdlUHJvZmlsZVZlY3RvciYgbWVyZ2VC
YWNrTG9nKQotewotICAgIC8vIFRoaXMgZXhpc3RzIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUg
c3BlY3RydW0gd2Fzbid0IGNyZWF0ZWQgeWV0LCBvciB3ZSdyZSBzdG9yaW5nIHRvIGEKLSAgICAv
LyBwYXJ0aWN1bGFyIHNwZWN0cnVtIGZvciB0aGUgZmlyc3QgdGltZSBkdXJpbmcgYSBsb2cgcHJv
Y2Vzc2luZyBpdGVyYXRpb24uCi0gICAgCi0gICAgaWYgKCFtX290aGVyQ2FsbGVlcykgewotICAg
ICAgICBtX290aGVyQ2FsbGVlcyA9IHN0ZDo6bWFrZV91bmlxdWU8U2Vjb25kYXJ5PigpOwotICAg
ICAgICAvLyBJZiBhIGNvbXBpbGVyIHRocmVhZCBub3RpY2VzIHRoZSBtX290aGVyQ2FsbGVlcyBi
ZWluZyBub24tbnVsbCwgd2Ugd2FudCB0byBtYWtlIHN1cmUKLSAgICAgICAgLy8gdGhhdCBpdCBz
ZWVzIGEgZnVsbHkgY3JlYXRlZCBvbmUuCi0gICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
Ci0gICAgfQotICAgIAotICAgIGlmICghbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3Ry
dW0pIHsKLSAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0gPSBzdGQ6
Om1ha2VfdW5pcXVlPENhbGxTcGVjdHJ1bT4oKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAg
bV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0tPmFkZCgKLSAgICAgICAgICAgICAg
ICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY2FsbGVlKCksCi0gICAgICAgICAgICAg
ICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNvdW50KCkpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhpcyBpcyB0aGUgZmlyc3QgdGlt
ZSB3ZSdyZSBzZWVpbmcgdGhpcyBwcm9maWxlIGR1cmluZyB0aGlzIGxvZwotICAgICAgICAvLyBw
cm9jZXNzaW5nIGl0ZXJhdGlvbi4KLSAgICAgICAgbWVyZ2VCYWNrTG9nLmFwcGVuZCh0aGlzKTsK
LSAgICB9Ci0gICAgCi0gICAgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0tPmFk
ZChjYWxsZWUpOwotfQotCi12b2lkIENhbGxFZGdlUHJvZmlsZTo6bWVyZ2VCYWNrKCkKLXsKLSAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIAotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fb3RoZXJDYWxsZWVzKTsKLSAgICBSRUxFQVNFX0FTU0VSVChtX290aGVyQ2FsbGVl
cy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSk7Ci0gICAgCi0gICAgaWYgKCEhbV9wcmltYXJ5Q2FsbGVl
KQotICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bS0+YWRkKG1fcHJp
bWFyeUNhbGxlZSwgbV9udW1DYWxsc1RvUHJpbWFyeSk7Ci0gICAgCi0gICAgaWYgKCFtX2Nsb3N1
cmVzQXJlRGVzcGVjaWZpZWQpIHsKLSAgICAgICAgQ2FsbFNwZWN0cnVtIG5ld1NwZWN0cnVtOwot
ICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKm1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNw
ZWN0cnVtKQotICAgICAgICAgICAgbmV3U3BlY3RydW0uYWRkKGVudHJ5LmtleS5kZXNwZWNpZmll
ZENsb3N1cmUoKSwgZW50cnkudmFsdWUpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5ld1NwZWN0
cnVtLnNpemUoKSA8IG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtLT5zaXplKCkp
IHsKLSAgICAgICAgICAgICptX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSA9IG5l
d1NwZWN0cnVtOwotICAgICAgICAgICAgbV9jbG9zdXJlc0FyZURlc3BlY2lmaWVkID0gdHJ1ZTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBWZWN0b3I8Q2FsbFNwZWN0cnVtOjpLZXlBbmRD
b3VudD4gbGlzdCA9IG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtLT5idWlsZExp
c3QoKTsKLSAgICBtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSA9IG51bGxwdHI7
Ci0gICAgCi0gICAgbV9wcmltYXJ5Q2FsbGVlID0gbGlzdC5sYXN0KCkua2V5OwotICAgIG1fbnVt
Q2FsbHNUb1ByaW1hcnkgPSBsaXN0Lmxhc3QoKS5jb3VudDsKLSAgICBsaXN0LnJlbW92ZUxhc3Qo
KTsKLSAgICAKLSAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuY2xlYXIoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGNvdW50ID0gbWF4S25vd25DYWxsZWVzOyBjb3VudC0tICYmICFsaXN0Lmlz
RW1wdHkoKTspIHsKLSAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLmFwcGVuZChD
YWxsRWRnZShsaXN0Lmxhc3QoKS5rZXksIGxpc3QubGFzdCgpLmNvdW50KSk7Ci0gICAgICAgIGxp
c3QucmVtb3ZlTGFzdCgpOwotICAgIH0KLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaXN0
LnNpemUoKTsgaS0tOykKLSAgICAgICAgbV9udW1DYWxsc1RvVW5rbm93bkNlbGwgKz0gbGlzdFtp
XS5jb3VudDsKLX0KLQotdm9pZCBDYWxsRWRnZVByb2ZpbGU6OmZhZGVCeUhhbGYoKQotewotICAg
IG1fbnVtQ2FsbHNUb1ByaW1hcnkgPj49IDE7Ci0gICAgbV9udW1DYWxsc1RvTm90Q2VsbCA+Pj0g
MTsKLSAgICBtX251bUNhbGxzVG9Vbmtub3duQ2VsbCA+Pj0gMTsKLSAgICBtX3RvdGFsQ291bnQg
Pj49IDE7Ci0gICAgCi0gICAgaWYgKG1fb3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5zaXplKCk7IGktLTspIHsKLSAg
ICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXSA9IENhbGxFZGdlKAotICAg
ICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jYWxsZWUoKSwKLSAg
ICAgICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY291bnQoKSA+PiAx
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fb3RoZXJDYWxsZWVzLT5tX3Rl
bXBvcmFyeVNwZWN0cnVtKSB7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogKm1fb3Ro
ZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtKQotICAgICAgICAgICAgICAgIGVudHJ5LnZh
bHVlID4+PSAxOwotICAgICAgICB9Ci0gICAgfQotfQotCi1DYWxsRWRnZUxvZzo6Q2FsbEVkZ2VM
b2coKQotICAgIDogbV9zY2FsZWRMb2dJbmRleChsb2dTaXplICogc2l6ZW9mKEVudHJ5KSkKLXsK
LSAgICBBU1NFUlQoIShtX3NjYWxlZExvZ0luZGV4ICUgc2l6ZW9mKEVudHJ5KSkpOwotfQotCi1D
YWxsRWRnZUxvZzo6fkNhbGxFZGdlTG9nKCkgeyB9Ci0KLWJvb2wgQ2FsbEVkZ2VMb2c6OmlzRW5h
YmxlZCgpCi17Ci0gICAgcmV0dXJuIE9wdGlvbnM6OmVuYWJsZUNhbGxFZGdlUHJvZmlsaW5nKCkg
JiYgT3B0aW9uczo6dXNlRlRMSklUKCk7Ci19Ci0KLSNpZiBFTkFCTEUoSklUKQotCi1leHRlcm4g
IkMiIEpJVF9PUEVSQVRJT04gdm9pZCBvcGVyYXRpb25Qcm9jZXNzQ2FsbEVkZ2VMb2coQ2FsbEVk
Z2VMb2cqKSBXVEZfSU5URVJOQUw7Ci1leHRlcm4gIkMiIEpJVF9PUEVSQVRJT04gdm9pZCBvcGVy
YXRpb25Qcm9jZXNzQ2FsbEVkZ2VMb2coQ2FsbEVkZ2VMb2cqIGxvZykKLXsKLSAgICBsb2ctPnBy
b2Nlc3NMb2coKTsKLX0KLQotdm9pZCBDYWxsRWRnZUxvZzo6ZW1pdExvZ0NvZGUoQ0NhbGxIZWxw
ZXJzJiBqaXQsIENhbGxFZGdlUHJvZmlsZSYgcHJvZmlsZSwgSlNWYWx1ZVJlZ3MgY2FsbGVlUmVn
cykKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cyA9IDE7Ci0gICAgCi0g
ICAgR1BSUmVnIHNjcmF0Y2hHUFI7Ci0gICAgaWYgKCFjYWxsZWVSZWdzLnVzZXMoR1BSSW5mbzo6
cmVnVDApKQotICAgICAgICBzY3JhdGNoR1BSID0gR1BSSW5mbzo6cmVnVDA7Ci0gICAgZWxzZSBp
ZiAoIWNhbGxlZVJlZ3MudXNlcyhHUFJJbmZvOjpyZWdUMSkpCi0gICAgICAgIHNjcmF0Y2hHUFIg
PSBHUFJJbmZvOjpyZWdUMTsKLSAgICBlbHNlCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZv
OjpyZWdUMjsKLSAgICAKLSAgICBqaXQubG9hZDMyKCZtX3NjYWxlZExvZ0luZGV4LCBzY3JhdGNo
R1BSKTsKLSAgICAKLSAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgb2sgPSBqaXQuYnJhbmNoVGVzdDMy
KENDYWxsSGVscGVyczo6Tm9uWmVybywgc2NyYXRjaEdQUik7Ci0gICAgCi0gICAgQVNTRVJUX1VO
VVNFRChudW1iZXJPZkFyZ3VtZW50cywgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSA+PSAxICsg
bnVtYmVyT2ZBcmd1bWVudHMpOwotICAgIAotICAgIGppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRCeXRlcygpKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7Ci0gICAgCi0gICAgaml0LnN0b3JlVmFsdWUoY2FsbGVlUmVncywgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNp
emVvZihKU1ZhbHVlKSkpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50cyhDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIodGhpcykpOwotICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblByb2Nlc3NDYWxsRWRnZUxvZykpLCBH
UFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICBqaXQuY2FsbChHUFJJbmZvOjpub25BcmdHUFIwKTsK
LSAgICBqaXQubG9hZFZhbHVlKENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoSlNWYWx1ZSkpLCBjYWxsZWVSZWdzKTsKLSAgICAK
LSAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25tZW50
Qnl0ZXMoKSksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIAotICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGxvZ1NpemUgKiBzaXplb2YoRW50
cnkpKSwgc2NyYXRjaEdQUik7Ci0gICAgb2subGluaygmaml0KTsKLQotICAgIGppdC5zdWIzMihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoRW50cnkpKSwgc2NyYXRjaEdQUik7Ci0g
ICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUiwgJm1fc2NhbGVkTG9nSW5kZXgpOwotICAgIGppdC5h
ZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fbG9nKSwgc2NyYXRjaEdQUik7Ci0g
ICAgaml0LnN0b3JlVmFsdWUoY2FsbGVlUmVncywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihFbnRyeSwgbV92YWx1ZSkpKTsKLSAgICBqaXQuc3RvcmVQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZwcm9maWxlKSwgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIsIE9CSkVDVF9PRkZTRVRPRihFbnRyeSwgbV9wcm9maWxlKSkpOwot
fQotCi12b2lkIENhbGxFZGdlTG9nOjplbWl0TG9nQ29kZSgKLSAgICBDQ2FsbEhlbHBlcnMmIGpp
dCwgT3duUHRyPENhbGxFZGdlUHJvZmlsZT4mIHByb2ZpbGVQb2ludGVyLCBKU1ZhbHVlUmVncyBj
YWxsZWVSZWdzKQotewotICAgIGlmICghaXNFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBwcm9maWxlUG9pbnRlci5jcmVhdGVUcmFuc2FjdGlvbmFsbHkoKTsKLSAgICBlbWl0
TG9nQ29kZShqaXQsICpwcm9maWxlUG9pbnRlciwgY2FsbGVlUmVncyk7Ci19Ci0KLSNlbmRpZiAv
LyBFTkFCTEUoSklUKQotCi12b2lkIENhbGxFZGdlTG9nOjpwcm9jZXNzTG9nKCkKLXsKLSAgICBB
U1NFUlQoIShtX3NjYWxlZExvZ0luZGV4ICUgc2l6ZW9mKEVudHJ5KSkpOwotICAgIAotICAgIGlm
IChPcHRpb25zOjpjYWxsRWRnZVByb2ZpbGVSZWFsbHlQcm9jZXNzZXNMb2coKSkgewotICAgICAg
ICBDYWxsRWRnZVByb2ZpbGVWZWN0b3IgbWVyZ2VCYWNrTG9nOwotICAgICAgICAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9zY2FsZWRMb2dJbmRleCAvIHNpemVvZihFbnRyeSk7IGkgPCBs
b2dTaXplOyArK2kpCi0gICAgICAgICAgICBtX2xvZ1tpXS5tX3Byb2ZpbGUtPmFkZChtX2xvZ1tp
XS5tX3ZhbHVlLCBtZXJnZUJhY2tMb2cpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbWVyZ2VCYWNrTG9nLnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIG1lcmdlQmFja0xv
Z1tpXS0+bWVyZ2VCYWNrKCk7Ci0gICAgfQotICAgIAotICAgIG1fc2NhbGVkTG9nSW5kZXggPSBs
b2dTaXplICogc2l6ZW9mKEVudHJ5KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmgJ
KHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
RWRnZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENhbGxFZGdlUHJv
ZmlsZV9oCi0jZGVmaW5lIENhbGxFZGdlUHJvZmlsZV9oCi0KLSNpbmNsdWRlICJDYWxsRWRnZS5o
IgotI2luY2x1ZGUgIkNhbGxWYXJpYW50LmgiCi0jaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2su
aCIKLSNpbmNsdWRlICJHUFJJbmZvLmgiCi0jaW5jbHVkZSAiSlNDZWxsLmgiCi0jaW5jbHVkZSA8
d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ0NhbGxIZWxwZXJzOwot
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotCi1jbGFzcyBDYWxsRWRnZUxvZzsKLWNsYXNz
IENhbGxFZGdlUHJvZmlsZTsKLXR5cGVkZWYgVmVjdG9yPENhbGxFZGdlUHJvZmlsZSosIDEwPiBD
YWxsRWRnZVByb2ZpbGVWZWN0b3I7Ci0KLWNsYXNzIENhbGxFZGdlUHJvZmlsZSB7Ci1wdWJsaWM6
Ci0gICAgQ2FsbEVkZ2VQcm9maWxlKCk7Ci0gICAgCi0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbnVt
Q2FsbHNUb05vdENlbGwoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxzVG9Ob3RDZWxsOyB9Ci0g
ICAgQ2FsbEVkZ2VDb3VudFR5cGUgbnVtQ2FsbHNUb1Vua25vd25DZWxsKCkgY29uc3QgeyByZXR1
cm4gbV9udW1DYWxsc1RvVW5rbm93bkNlbGw7IH0KLSAgICBDYWxsRWRnZUNvdW50VHlwZSBudW1D
YWxsc1RvS25vd25DZWxscygpIGNvbnN0OwotICAgIAotICAgIENhbGxFZGdlQ291bnRUeXBlIHRv
dGFsQ2FsbHMoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsQ291bnQ7IH0KLSAgICAKLSAgICAvLyBD
YWxsIHdoaWxlIGhvbGRpbmcgdGhlIG93bmluZyBDb2RlQmxvY2sncyBsb2NrLgotICAgIENhbGxF
ZGdlTGlzdCBjYWxsRWRnZXMoKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHZpc2l0V2VhaygpOwot
ICAgIAotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgQ2FsbEVkZ2VMb2c7Ci0gICAgCi0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heEtub3duQ2FsbGVlcyA9IDU7Ci0gICAgCi0gICAgdm9p
ZCBhZGQoSlNWYWx1ZSwgQ2FsbEVkZ2VQcm9maWxlVmVjdG9yJiBtZXJnZUJhY2tMb2cpOwotICAg
IAotICAgIGJvb2wgd29ydGhEZXNwZWNpZnlpbmcoKTsKLSAgICB2b2lkIGFkZFNsb3coQ2FsbFZh
cmlhbnQsIENhbGxFZGdlUHJvZmlsZVZlY3RvciYgbWVyZ2VCYWNrTG9nKTsKLSAgICB2b2lkIG1l
cmdlQmFjaygpOwotICAgIHZvaWQgZmFkZUJ5SGFsZigpOwotICAgIAotICAgIC8vIEl0J3MgY2hl
YXBlciB0byBsZXQgdGhpcyBoYXZlIGl0cyBvd24gbG9jay4gSXQgbmVlZHMgdG8gYmUgYWJsZSB0
byBmaW5kIHdoaWNoIGxvY2sgdG8KLSAgICAvLyBsb2NrLiBOb3JtYWxseSBpdCB3b3VsZCBsb2Nr
IHRoZSBvd25pbmcgQ29kZUJsb2NrJ3MgbG9jaywgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBhCi0g
ICAgLy8gcG9pbnRlci13aWR0aCB3b3JkIHRvIHBvaW50IGF0IHRoZSBDb2RlQmxvY2suIEhhdmlu
ZyB0aGUgYnl0ZS1zaXplZCBsb2NrIGhlcmUgaXMKLSAgICAvLyBjaGVhcGVyLiBIb3dldmVyLCB0
aGlzIG1lYW5zIHRoYXQgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBDb2RlQmxvY2sgbG9jayBp
czoKLSAgICAvLyBhY3F1aXJlIHRoZSBDb2RlQmxvY2sgbG9jayBiZWZvcmUgdGhpcyBvbmUuCi0g
ICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7Ci0gICAgCi0gICAgYm9vbCBtX2Ns
b3N1cmVzQXJlRGVzcGVjaWZpZWQ7Ci0gICAgCi0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV9udW1D
YWxsc1RvUHJpbWFyeTsKLSAgICBDYWxsRWRnZUNvdW50VHlwZSBtX251bUNhbGxzVG9Ob3RDZWxs
OwotICAgIENhbGxFZGdlQ291bnRUeXBlIG1fbnVtQ2FsbHNUb1Vua25vd25DZWxsOwotICAgIENh
bGxFZGdlQ291bnRUeXBlIG1fdG90YWxDb3VudDsKLSAgICBDYWxsVmFyaWFudCBtX3ByaW1hcnlD
YWxsZWU7Ci0gICAgCi0gICAgdHlwZWRlZiBTcGVjdHJ1bTxDYWxsVmFyaWFudCwgQ2FsbEVkZ2VD
b3VudFR5cGU+IENhbGxTcGVjdHJ1bTsKLSAgICAKLSAgICBzdHJ1Y3QgU2Vjb25kYXJ5IHsKLSAg
ICAgICAgVmVjdG9yPENhbGxFZGdlPiBtX3Byb2Nlc3NlZDsgLy8gUHJvY2Vzc2VkIGJ1dCBub3Qg
bmVjZXNzYXJpbHkgc29ydGVkLgotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbFNwZWN0cnVt
PiBtX3RlbXBvcmFyeVNwZWN0cnVtOwotICAgIH07Ci0gICAgCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFNlY29uZGFyeT4gbV9vdGhlckNhbGxlZXM7Ci19OwotCi1jbGFzcyBDYWxsRWRnZUxvZyB7Ci1w
dWJsaWM6Ci0gICAgQ2FsbEVkZ2VMb2coKTsKLSAgICB+Q2FsbEVkZ2VMb2coKTsKLQotICAgIHN0
YXRpYyBib29sIGlzRW5hYmxlZCgpOwotICAgIAotI2lmIEVOQUJMRShKSVQpCi0gICAgdm9pZCBl
bWl0TG9nQ29kZShDQ2FsbEhlbHBlcnMmLCBDYWxsRWRnZVByb2ZpbGUmLCBKU1ZhbHVlUmVncyBj
YWxsZWVSZWdzKTsgLy8gQXNzdW1lcyB0aGF0IHN0YWNrIGlzIGFsaWduZWQsIGFsbCB2b2xhdGls
ZSByZWdpc3RlcnMgLSBvdGhlciB0aGFuIGNhbGxlZUdQUiAtIGFyZSBjbG9iYmVyYWJsZSwgYW5k
IHRoZSBwYXJhbWV0ZXIgc3BhY2UgaXMgaW4gdXNlLgotICAgIAotICAgIC8vIFNhbWUgYXMgYWJv
dmUgYnV0IGNyZWF0ZXMgYSBDYWxsRWRnZVByb2ZpbGUgaW5zdGFuY2UgaWYgb25lIGRpZCBub3Qg
YWxyZWFkeSBleGlzdC4gRG9lcwotICAgIC8vIHRoaXMgaW4gYSB0aHJlYWQtc2FmZSBtYW5uZXIg
YnkgY2FsbGluZyBPd25QdHI6OmNyZWF0ZVRyYW5zYWN0aW9uYWxseS4KLSAgICB2b2lkIGVtaXRM
b2dDb2RlKENDYWxsSGVscGVycyYsIE93blB0cjxDYWxsRWRnZVByb2ZpbGU+JiwgSlNWYWx1ZVJl
Z3MgY2FsbGVlUmVncyk7Ci0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKLSAgICAKLSAgICB2b2lkIHBy
b2Nlc3NMb2coKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKLQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb2dTaXplID0gMTAwMDA7
Ci0gICAgCi0gICAgc3RydWN0IEVudHJ5IHsKLSAgICAgICAgSlNWYWx1ZSBtX3ZhbHVlOwotICAg
ICAgICBDYWxsRWRnZVByb2ZpbGUqIG1fcHJvZmlsZTsKLSAgICB9OwotICAgIAotICAgIHVuc2ln
bmVkIG1fc2NhbGVkTG9nSW5kZXg7Ci0gICAgRW50cnkgbV9sb2dbbG9nU2l6ZV07Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIENhbGxFZGdlUHJvZmlsZV9oCi0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlUHJv
ZmlsZUlubGluZXMuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgQ2FsbEVkZ2VQcm9maWxlSW5saW5lc19oCi0jZGVmaW5lIENhbGxFZGdlUHJvZmls
ZUlubGluZXNfaAotCi0jaW5jbHVkZSAiQ2FsbEVkZ2VQcm9maWxlLmgiCi0KLW5hbWVzcGFjZSBK
U0MgewotCi1pbmxpbmUgQ2FsbEVkZ2VQcm9maWxlOjpDYWxsRWRnZVByb2ZpbGUoKQotICAgIDog
bV9jbG9zdXJlc0FyZURlc3BlY2lmaWVkKGZhbHNlKQotICAgICwgbV9udW1DYWxsc1RvUHJpbWFy
eSgwKQotICAgICwgbV9udW1DYWxsc1RvTm90Q2VsbCgwKQotICAgICwgbV9udW1DYWxsc1RvVW5r
bm93bkNlbGwoMCkKLSAgICAsIG1fdG90YWxDb3VudCgwKQotICAgICwgbV9wcmltYXJ5Q2FsbGVl
KG51bGxwdHIpCi17Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBDYWxsRWRnZVByb2ZpbGU6OmFk
ZChKU1ZhbHVlIHZhbHVlLCBDYWxsRWRnZVByb2ZpbGVWZWN0b3ImIG1lcmdlQmFja0xvZykKLXsK
LSAgICB1bnNpZ25lZCBuZXdUb3RhbENvdW50ID0gbV90b3RhbENvdW50ICsgMTsKLSAgICBpZiAo
VU5MSUtFTFkoIW5ld1RvdGFsQ291bnQpKSB7Ci0gICAgICAgIGZhZGVCeUhhbGYoKTsgLy8gVGFj
a2xlIG92ZXJmbG93cyBieSBkaXZpZGluZyBhbGwgY291bnRzIGJ5IHR3by4KLSAgICAgICAgbmV3
VG90YWxDb3VudCA9IG1fdG90YWxDb3VudCArIDE7Ci0gICAgfQotICAgIEFTU0VSVChuZXdUb3Rh
bENvdW50KTsKLSAgICBtX3RvdGFsQ291bnQgPSBuZXdUb3RhbENvdW50OwotICAgIAotICAgIGlm
IChVTkxJS0VMWSghdmFsdWUuaXNDZWxsKCkpKSB7Ci0gICAgICAgIG1fbnVtQ2FsbHNUb05vdENl
bGwrKzsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhbGxWYXJpYW50IGNhbGxlZSA9
IENhbGxWYXJpYW50KHZhbHVlLmFzQ2VsbCgpKTsKLSAgICAKLSAgICBpZiAobV9jbG9zdXJlc0Fy
ZURlc3BlY2lmaWVkKQotICAgICAgICBjYWxsZWUgPSBjYWxsZWUuZGVzcGVjaWZpZWRDbG9zdXJl
KCk7Ci0gICAgCi0gICAgaWYgKFVOTElLRUxZKCFtX3ByaW1hcnlDYWxsZWUpKSB7Ci0gICAgICAg
IG1fcHJpbWFyeUNhbGxlZSA9IGNhbGxlZTsKLSAgICAgICAgbV9udW1DYWxsc1RvUHJpbWFyeSA9
IDE7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIGlmIChMSUtFTFkobV9w
cmltYXJ5Q2FsbGVlID09IGNhbGxlZSkpIHsKLSAgICAgICAgbV9udW1DYWxsc1RvUHJpbWFyeSsr
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAoVU5MSUtFTFkoIW1f
b3RoZXJDYWxsZWVzKSkgewotICAgICAgICBhZGRTbG93KGNhbGxlZSwgbWVyZ2VCYWNrTG9nKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gICAgQ2FsbFNwZWN0cnVtKiBzZWNv
bmRhcnkgPSBtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bS5nZXQoKTsKLSAgICBp
ZiAoIXNlY29uZGFyeSkgewotICAgICAgICBhZGRTbG93KGNhbGxlZSwgbWVyZ2VCYWNrTG9nKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gICAgc2Vjb25kYXJ5LT5hZGQoY2Fs
bGVlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBDYWxsRWRnZVByb2Zp
bGVJbmxpbmVzX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW5jbHVkZSAiREZHVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogI2lmIEVOQUJMRShKSVQpCkBAIC0zNyw3
ICszOCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBDYWxsTGlua0luZm86OnVubGluayhS
ZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyKQogewotICAgIEFTU0VSVChpc0xpbmtlZCgpKTsK
KyAgICBpZiAoIWlzTGlua2VkKCkpIHsKKyAgICAgICAgLy8gV2UgY291bGQgYmUgY2FsbGVkIGV2
ZW4gaWYgd2UncmUgbm90IGxpbmtlZCBhbnltb3JlIGJlY2F1c2Ugb2YgaG93IHBvbHltb3JwaGlj
IGNhbGxzCisgICAgICAgIC8vIHdvcmsuIEVhY2ggY2FsbHNpdGUgd2l0aGluIHRoZSBwb2x5bW9y
cGhpYyBjYWxsIHN0dWIgbWF5IHNlcGFyYXRlbHkgYXNrIHVzIHRvIHVubGluaygpLgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghaXNPbkxpc3QoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAg
ICAgCiAgICAgaWYgKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSgpKQogICAgICAgICBkYXRhTG9n
KCJVbmxpbmtpbmcgY2FsbCBmcm9tICIsIGNhbGxSZXR1cm5Mb2NhdGlvbiwgIiB0byAiLCBwb2lu
dGVyRHVtcChyZXBhdGNoQnVmZmVyLmNvZGVCbG9jaygpKSwgIlxuIik7CkBAIC02MSwxMiArNjcs
MTIgQEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhSZXBhdGNoQnVmZgogewogICAgIGlm
IChpc0xpbmtlZCgpKSB7CiAgICAgICAgIGlmIChzdHViKSB7Ci0gICAgICAgICAgICBpZiAoIUhl
YXA6OmlzTWFya2VkKHN0dWItPmV4ZWN1dGFibGUoKSkpIHsKKyAgICAgICAgICAgIGlmICghc3R1
Yi0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKSB7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAg
ICAgICAgICAgICAgICAgICAgIkNsZWFyaW5nIGNsb3N1cmUgY2FsbCBmcm9tICIsICpyZXBhdGNo
QnVmZmVyLmNvZGVCbG9jaygpLCAiIHRvICIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHVi
LT5leGVjdXRhYmxlKCktPmhhc2hGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgIiwgc3R1YiByb3V0aW5lICIsIFJhd1BvaW50ZXIoc3R1Yi5nZXQoKSks
ICIuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3REdW1wKHN0dWItPnZhcmlhbnRz
KCkpLCAiLCBzdHViIHJvdXRpbmUgIiwgUmF3UG9pbnRlcihzdHViLmdldCgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICIuXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgdW5saW5rKHJlcGF0Y2hCdWZmZXIpOwogICAgICAgICAgICAgfQpAQCAtODMsMTEgKzg5LDYg
QEAgdm9pZCBDYWxsTGlua0luZm86OnZpc2l0V2VhayhSZXBhdGNoQnVmZgogICAgIH0KICAgICBp
ZiAoISFsYXN0U2VlbkNhbGxlZSAmJiAhSGVhcDo6aXNNYXJrZWQobGFzdFNlZW5DYWxsZWUuZ2V0
KCkpKQogICAgICAgICBsYXN0U2VlbkNhbGxlZS5jbGVhcigpOwotICAgIAotICAgIGlmIChjYWxs
RWRnZVByb2ZpbGUpIHsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIGNh
bGxFZGdlUHJvZmlsZS0+dmlzaXRXZWFrKCk7Ci0gICAgfQogfQogCiBDYWxsTGlua0luZm8mIENh
bGxMaW5rSW5mbzo6ZHVtbXkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTGlua0luZm8uaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNiwxMyArMjYsMTIgQEAKICNpZm5kZWYgQ2FsbExpbmtJbmZvX2gKICNkZWZpbmUgQ2FsbExp
bmtJbmZvX2gKIAotI2luY2x1ZGUgIkNhbGxFZGdlUHJvZmlsZS5oIgotI2luY2x1ZGUgIkNsb3N1
cmVDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRl
ICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiSklUV3JpdGVCYXJyaWVyLmgi
CiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUg
IlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgi
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExp
c3QuaD4KQEAgLTgyLDE1ICs4MSwxNCBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZvIDogcHVibGljIEJh
c2ljUmF3U2VuCiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyOwogICAgIEpJ
VFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBjYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyPEpTRnVu
Y3Rpb24+IGxhc3RTZWVuQ2FsbGVlOwotICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
PiBzdHViOworICAgIFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gc3R1YjsKICAg
ICBib29sIGlzRlRMIDogMTsKICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKICAg
ICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKICAgICB1bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8v
IENhbGxUeXBlCiAgICAgdW5zaWduZWQgY2FsbGVlR1BSIDogODsKLSAgICB1bnNpZ25lZCBzbG93
UGF0aENvdW50OworICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luOwotICAgIE93blB0cjxDYWxsRWRnZVByb2ZpbGU+IGNhbGxFZGdlUHJvZmlsZTsK
IAogICAgIGJvb2wgaXNMaW5rZWQoKSB7IHJldHVybiBzdHViIHx8IGNhbGxlZTsgfQogICAgIHZv
aWQgdW5saW5rKFJlcGF0Y2hCdWZmZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00Nyw3ICs0Nyw3IEBAIENhbGxMaW5rU3RhdHVzOjpDYWxsTGlu
a1N0YXR1cyhKU1ZhbHVlIHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBtX2Vk
Z2VzLmFwcGVuZChDYWxsRWRnZShDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSksIDEpKTsKKyAg
ICBtX3ZhcmlhbnRzLmFwcGVuZChDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSkpOwogfQogCiBD
YWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKQEAgLTEyOSwyMyArMTI5LDYgQEAgQ2FsbExpbmtTdGF0dXMgQ2Fs
bExpbmtTdGF0dXM6OmNvbXB1dGVGbwogICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoaXMs
IGJ1dCBhbnl0aW1lIHdlIGhhdmUgdG8gZGVidWcgdGhpcyBjb2RlLCBpdCBiZWNvbWVzIGluZGlz
cGVuc2FibGUuCiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIAotICAgIGlm
IChPcHRpb25zOjpjYWxsU3RhdHVzU2hvdWxkVXNlQ2FsbEVkZ2VQcm9maWxlKCkpIHsKLSAgICAg
ICAgLy8gQWx3YXlzIHRydXN0IHRoZSBjYWxsIGVkZ2UgcHJvZmlsZSBvdmVyIGFueXRoaW5nIGVs
c2Ugc2luY2UgdGhpcyBoYXMgcHJlY2lzZSBjb3VudHMuCi0gICAgICAgIC8vIEl0IGNhbiBtYWtl
IHRoZSBiZXN0IHBvc3NpYmxlIGRlY2lzaW9uIGJlY2F1c2UgaXQgbmV2ZXIgImZvcmdldHMiIHdo
YXQgaGFwcGVuZWQgZm9yIGFueQotICAgICAgICAvLyBjYWxsLCB3aXRoIHRoZSBleGNlcHRpb24g
b2YgZmFkaW5nIG91dCB0aGUgY291bnRzIG9mIG9sZCBjYWxscyAoZm9yIGV4YW1wbGUgaWYgdGhl
Ci0gICAgICAgIC8vIGNvdW50ZXIgdHlwZSBpcyAxNi1iaXQgdGhlbiBjYWxscyB0aGF0IGhhcHBl
bmVkIG1vcmUgdGhhbiAyXjE2IGNhbGxzIGFnbyBhcmUgZ2l2ZW4gaGFsZgotICAgICAgICAvLyB3
ZWlnaHQsIGFuZCB0aGlzIGNvbXBvdW5kcyBmb3IgZXZlcnkgMl4xNSBbc2ljXSBjYWxscyBhZnRl
ciB0aGF0KS4gVGhlIGNvbWJpbmF0aW9uIG9mCi0gICAgICAgIC8vIGhpZ2ggZmlkZWxpdHkgZm9y
IHJlY2VudCBjYWxscyBhbmQgZmFkaW5nIGZvciBvbGRlciBjYWxscyBtYWtlcyB0aGlzIHRoZSBt
b3N0IHVzZWZ1bAotICAgICAgICAvLyBtZWNoYW1pc20gb2YgY2hvb3NpbmcgaG93IHRvIG9wdGlt
aXplIGZ1dHVyZSBjYWxscy4KLSAgICAgICAgQ2FsbEVkZ2VQcm9maWxlKiBlZGdlUHJvZmlsZSA9
IGNhbGxMaW5rSW5mby5jYWxsRWRnZVByb2ZpbGUuZ2V0KCk7Ci0gICAgICAgIFdURjo6bG9hZExv
YWRGZW5jZSgpOwotICAgICAgICBpZiAoZWRnZVByb2ZpbGUpIHsKLSAgICAgICAgICAgIENhbGxM
aW5rU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKGVkZ2VQcm9maWxl
KTsKLSAgICAgICAgICAgIGlmICghIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIHJldHVybiBjb21wdXRlRnJvbUNhbGxM
aW5rSW5mbyhsb2NrZXIsIGNhbGxMaW5rSW5mbyk7CiB9CiAKQEAgLTE2NSwxMiArMTQ4LDY4IEBA
IENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnIKICAgICAvLyB0aGF0IGlz
IHN0aWxsIG1hcmdpbmFsbHkgdmFsaWQgKGkuZS4gdGhlIHBvaW50ZXJzIGFpbid0IHN0YWxlKS4g
VGhpcyBraW5kIG9mIHJhY2luZXNzCiAgICAgLy8gaXMgcHJvYmFibHkgT0sgZm9yIG5vdy4KICAg
ICAKKyAgICAvLyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSBpcyBhIEdDQXdhcmVKSVRTdHVi
Um91dGluZSwgc28gaWYgbm9uLW51bGwsIGl0IHdpbGwgc3RheSBhbGl2ZQorICAgIC8vIHVudGls
IG5leHQgR0MgZXZlbiBpZiB0aGUgQ2FsbExpbmtJbmZvIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVk
LiBBbHNvLCB0aGUgdmFyaWFudHMgbGlzdCBpcworICAgIC8vIG5ldmVyIG11dGF0ZWQgYWZ0ZXIg
dGhlIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lIGlzIGluc3RhbnRpYXRlZC4gV2UgaGF2ZSBz
b21lIGNvbnNlcnZhdGl2ZQorICAgIC8vIGZlbmNpbmcgaW4gcGxhY2UgdG8gbWFrZSBzdXJlIHRo
YXQgd2Ugc2VlIHRoZSB2YXJpYW50cyBsaXN0IGFmdGVyIGNvbnN0cnVjdGlvbi4KKyAgICBpZiAo
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8uc3R1Yi5nZXQo
KSkgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgCisgICAgICAgIENh
bGxFZGdlTGlzdCBlZGdlcyA9IHN0dWItPmVkZ2VzKCk7CisgICAgICAgIAorICAgICAgICAvLyBO
b3cgdGhhdCB3ZSd2ZSBsb2FkZWQgdGhlIGVkZ2VzIGxpc3QsIHRoZXJlIGFyZSBubyBmdXJ0aGVy
IGNvbmN1cnJlbmN5IGNvbmNlcm5zLiBXZSB3aWxsCisgICAgICAgIC8vIGp1c3QgbWFuaXB1bGF0
ZSBhbmQgcHJ1bmUgdGhpcyBsaXN0IHRvIG91ciBsaWtpbmcgLSBtb3N0bHkgcmVtb3ZpbmcgZW50
cmllcyB0aGF0IGFyZSB0b28KKyAgICAgICAgLy8gaW5mcmVxdWVudCBhbmQgZW5zdXJpbmcgdGhh
dCBpdCdzIHNvcnRlZCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIGZyZXF1ZW5jeS4KKyAgICAgICAg
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVkZ2VzLnNpemUoKSk7CisgICAgICAgIAorICAgICAg
ICBzdGQ6OnNvcnQoCisgICAgICAgICAgICBlZGdlcy5iZWdpbigpLCBlZGdlcy5lbmQoKSwKKyAg
ICAgICAgICAgIFtdIChDYWxsRWRnZSBhLCBDYWxsRWRnZSBiKSB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGEuY291bnQoKSA+IGIuY291bnQoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChlZGdlcy5maXJzdCgpLmNvdW50KCkgPj0gZWRnZXMubGFzdCgpLmNvdW50
KCkpOworICAgICAgICAKKyAgICAgICAgZG91YmxlIHRvdGFsQ2FsbHNUb0tub3duID0gMDsKKyAg
ICAgICAgZG91YmxlIHRvdGFsQ2FsbHNUb1Vua25vd24gPSBjYWxsTGlua0luZm8uc2xvd1BhdGhD
b3VudDsKKyAgICAgICAgQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRzOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBDYWxsRWRn
ZSBlZGdlID0gZWRnZXNbaV07CisgICAgICAgICAgICAvLyBJZiB0aGUgY2FsbCBpcyBhdCB0aGUg
dGFpbCBvZiB0aGUgZGlzdHJpYnV0aW9uLCB0aGVuIHdlIGRvbid0IG9wdGltaXplIGl0IGFuZCB3
ZQorICAgICAgICAgICAgLy8gdHJlYXQgaXQgYXMgaWYgaXQgd2FzIGEgY2FsbCB0byBzb21ldGhp
bmcgdW5rbm93bi4gV2UgZGVmaW5lIHRoZSB0YWlsIGFzIGJlaW5nIGVpdGhlcgorICAgICAgICAg
ICAgLy8gYSBjYWxsIHRoYXQgZG9lc24ndCBiZWxvbmcgdG8gdGhlIE4gbW9zdCBmcmVxdWVudCBj
YWxsZWVzIChOID0KKyAgICAgICAgICAgIC8vIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRzRm9y
SW5saW5pbmcpIG9yIHRoYXQgaGFzIGEgdG90YWwgY2FsbCBjb3VudCB0aGF0IGlzIHRvbworICAg
ICAgICAgICAgLy8gc21hbGwuCisgICAgICAgICAgICBpZiAoaSA+PSBPcHRpb25zOjptYXhQb2x5
bW9ycGhpY0NhbGxWYXJpYW50c0ZvcklubGluaW5nKCkKKyAgICAgICAgICAgICAgICB8fCBlZGdl
LmNvdW50KCkgPCBPcHRpb25zOjpmcmVxdWVudENhbGxUaHJlc2hvbGQoKSkKKyAgICAgICAgICAg
ICAgICB0b3RhbENhbGxzVG9Vbmtub3duICs9IGVkZ2UuY291bnQoKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHRvdGFsQ2FsbHNUb0tub3duICs9IGVkZ2UuY291bnQoKTsK
KyAgICAgICAgICAgICAgICB2YXJpYW50cy5hcHBlbmQoZWRnZS5jYWxsZWUoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEJhaWwgaWYgd2UgZGlkbid0
IGZpbmQgYW55IGNhbGxzIHRoYXQgcXVhbGlmaWVkLgorICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
IXRvdGFsQ2FsbHNUb0tub3duID09ICEhdmFyaWFudHMuc2l6ZSgpKTsKKyAgICAgICAgaWYgKHZh
cmlhbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBXZSByZXF1aXJlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiBj
YWxsZWVzIGlzIHNrZXdlZCB0b3dhcmRzIGEgaGFuZGZ1bCBvZiBjb21tb24gb25lcy4KKyAgICAg
ICAgaWYgKHRvdGFsQ2FsbHNUb0tub3duIC8gdG90YWxDYWxsc1RvVW5rbm93biA8IE9wdGlvbnM6
Om1pbmltdW1DYWxsVG9Lbm93blJhdGUoKSkKKyAgICAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQ
YXRoKCk7CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVCh0b3RhbENhbGxzVG9Lbm93
bik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhbnRzLnNpemUoKSk7CisgICAgICAgIAor
ICAgICAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhcmlhbnRz
ID0gdmFyaWFudHM7CisgICAgICAgIHJlc3VsdC5tX2NvdWxkVGFrZVNsb3dQYXRoID0gISF0b3Rh
bENhbGxzVG9Vbmtub3duOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAg
ICBpZiAoY2FsbExpbmtJbmZvLnNsb3dQYXRoQ291bnQgPj0gT3B0aW9uczo6Y291bGRUYWtlU2xv
d0Nhc2VNaW5pbXVtQ291bnQoKSkKICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAg
ICAKLSAgICBpZiAoQ2xvc3VyZUNhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5z
dHViLmdldCgpKQotICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoc3R1Yi0+ZXhlY3V0YWJs
ZSgpKTsKLSAgICAKICAgICBKU0Z1bmN0aW9uKiB0YXJnZXQgPSBjYWxsTGlua0luZm8ubGFzdFNl
ZW5DYWxsZWUuZ2V0KCk7CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YWtlc1Ns
b3dQYXRoKCk7CkBAIC0xODEsMzQgKzIyMCw2IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3Rh
dHVzOjpjb21wdXRlRnIKICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXModGFyZ2V0KTsKIH0KIAot
Q2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxl
KENhbGxFZGdlUHJvZmlsZSogZWRnZVByb2ZpbGUpCi17Ci0gICAgLy8gSW4gY2FzZXMgd2hlcmUg
dGhlIGNhbGwgZWRnZSBwcm9maWxlIHNhdyBub3RoaW5nLCB1c2UgdGhlIENhbGxMaW5rSW5mbyBp
bnN0ZWFkLgotICAgIGlmICghZWRnZVByb2ZpbGUtPnRvdGFsQ2FsbHMoKSkKLSAgICAgICAgcmV0
dXJuIENhbGxMaW5rU3RhdHVzKCk7Ci0gICAgCi0gICAgLy8gVG8gZG8gYW55dGhpbmcgbWVhbmlu
Z2Z1bCwgd2UgcmVxdWlyZSB0aGF0IHRoZSBtYWpvcml0eSBvZiBjYWxscyBhcmUgdG8gc29tZXRo
aW5nIHdlCi0gICAgLy8ga25vdyBob3cgdG8gaGFuZGxlLgotICAgIHVuc2lnbmVkIG51bUNhbGxz
VG9Lbm93biA9IGVkZ2VQcm9maWxlLT5udW1DYWxsc1RvS25vd25DZWxscygpOwotICAgIHVuc2ln
bmVkIG51bUNhbGxzVG9Vbmtub3duID0gZWRnZVByb2ZpbGUtPm51bUNhbGxzVG9Ob3RDZWxsKCkg
KyBlZGdlUHJvZmlsZS0+bnVtQ2FsbHNUb1Vua25vd25DZWxsKCk7Ci0gICAgCi0gICAgLy8gV2Ug
cmVxdWlyZSB0aGF0IHRoZSBtYWpvcml0eSBvZiBjYWxscyB3ZXJlIHRvIHNvbWV0aGluZyB0aGF0
IHdlIGNvdWxkIHBvc3NpYmx5IGlubGluZS4KLSAgICBpZiAobnVtQ2FsbHNUb0tub3duIDw9IG51
bUNhbGxzVG9Vbmtub3duKQotICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwotICAgIAot
ICAgIC8vIFdlIHJlcXVpcmUgdGhhdCB0aGUgbnVtYmVyIG9mIHN1Y2ggY2FsbHMgaXMgZ3JlYXRl
ciB0aGFuIHNvbWUgbWluaW1hbCB0aHJlc2hvbGQsIHNvIHRoYXQgd2UKLSAgICAvLyBhdm9pZCBp
bmxpbmluZyBjb21wbGV0ZWx5IGNvbGQgY2FsbHMuCi0gICAgaWYgKG51bUNhbGxzVG9Lbm93biA8
IE9wdGlvbnM6OmZyZXF1ZW50Q2FsbFRocmVzaG9sZCgpKQotICAgICAgICByZXR1cm4gdGFrZXNT
bG93UGF0aCgpOwotICAgIAotICAgIENhbGxMaW5rU3RhdHVzIHJlc3VsdDsKLSAgICByZXN1bHQu
bV9lZGdlcyA9IGVkZ2VQcm9maWxlLT5jYWxsRWRnZXMoKTsKLSAgICByZXN1bHQubV9jb3VsZFRh
a2VTbG93UGF0aCA9ICEhbnVtQ2FsbHNUb1Vua25vd247Ci0gICAgcmVzdWx0Lm1fY2FuVHJ1c3RD
b3VudHMgPSB0cnVlOwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIENhbGxMaW5rU3Rh
dHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIGNvbnN0IENvbmN1cnJlbnRKSVRM
b2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBDYWxsTGlua0luZm8mIGNh
bGxMaW5rSW5mbywKICAgICBFeGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRhKQpAQCAtMjgyLDggKzI5
Myw4IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm8KIAogYm9vbCBD
YWxsTGlua1N0YXR1czo6aXNDbG9zdXJlQ2FsbCgpIGNvbnN0CiB7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9lZGdlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKG1fZWRnZXNbaV0uY2Fs
bGVlKCkuaXNDbG9zdXJlQ2FsbCgpKQorICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMu
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLmlzQ2xvc3VyZUNhbGwo
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBA
IC0yOTEsMTggKzMwMiw3IEBAIGJvb2wgQ2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwoKSBj
b24KIAogdm9pZCBDYWxsTGlua1N0YXR1czo6bWFrZUNsb3N1cmVDYWxsKCkKIHsKLSAgICBBU1NF
UlQoIW1faXNQcm92ZWQpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fZWRnZXMuc2l6ZSgpOyBp
LS07KQotICAgICAgICBtX2VkZ2VzW2ldID0gbV9lZGdlc1tpXS5kZXNwZWNpZmllZENsb3N1cmUo
KTsKLSAgICAKLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAvLyBEb2luZyB0
aGlzIHNob3VsZCBub3QgaGF2ZSBjcmVhdGVkIGR1cGxpY2F0ZXMsIGJlY2F1c2UgdGhlIENhbGxF
ZGdlUHJvZmlsZQotICAgICAgICAvLyBzaG91bGQgZGVzcGVjaWZ5IGNsb3N1cmVzIGlmIGRvaW5n
IHNvIHdvdWxkIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGtub3duIGNhbGxlZXMuCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VkZ2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IG1fZWRnZXMuc2l6ZSgpOyArK2opCi0gICAg
ICAgICAgICAgICAgQVNTRVJUKG1fZWRnZXNbaV0uY2FsbGVlKCkgIT0gbV9lZGdlc1tqXS5jYWxs
ZWUoKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbV92YXJpYW50cyA9IGRlc3BlY2lmaWVkVmFy
aWFudExpc3QobV92YXJpYW50cyk7CiB9CiAKIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTMyMCw3ICszMjAsOCBAQCB2b2lkIENhbGxMaW5rU3Rh
dHVzOjpkdW1wKFByaW50U3RyZWFtJiBvCiAgICAgaWYgKG1fY291bGRUYWtlU2xvd1BhdGgpCiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgIkNvdWxkIFRha2UgU2xvdyBQYXRoIik7CiAgICAgCi0g
ICAgb3V0LnByaW50KGxpc3REdW1wKG1fZWRnZXMpKTsKKyAgICBpZiAoIW1fdmFyaWFudHMuaXNF
bXB0eSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1wKG1fdmFyaWFudHMpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBDYWxsTGlua1N0YXR1c19oCiAKICNp
bmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgogI2luY2x1
ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAj
aW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKQEAgLTQ4LDcgKzQ5LDYgQEAgcHVibGljOgog
ICAgIENhbGxMaW5rU3RhdHVzKCkKICAgICAgICAgOiBtX2NvdWxkVGFrZVNsb3dQYXRoKGZhbHNl
KQogICAgICAgICAsIG1faXNQcm92ZWQoZmFsc2UpCi0gICAgICAgICwgbV9jYW5UcnVzdENvdW50
cyhmYWxzZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtNjIsMTAgKzYyLDkgQEAgcHVibGljOgog
ICAgIGV4cGxpY2l0IENhbGxMaW5rU3RhdHVzKEpTVmFsdWUpOwogICAgIAogICAgIENhbGxMaW5r
U3RhdHVzKENhbGxWYXJpYW50IHZhcmlhbnQpCi0gICAgICAgIDogbV9lZGdlcygxLCBDYWxsRWRn
ZSh2YXJpYW50LCAxKSkKKyAgICAgICAgOiBtX3ZhcmlhbnRzKDEsIHZhcmlhbnQpCiAgICAgICAg
ICwgbV9jb3VsZFRha2VTbG93UGF0aChmYWxzZSkKICAgICAgICAgLCBtX2lzUHJvdmVkKGZhbHNl
KQotICAgICAgICAsIG1fY2FuVHJ1c3RDb3VudHMoZmFsc2UpCiAgICAgewogICAgIH0KICAgICAK
QEAgLTEwOSwxOSArMTA4LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMg
Y29tcHV0ZUZvcigKICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExp
bmtJbmZvTWFwJiwgY29uc3QgQ29udGV4dE1hcCYpOwogICAgIAotICAgIGJvb2wgaXNTZXQoKSBj
b25zdCB7IHJldHVybiAhbV9lZGdlcy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsg
fQorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkg
fHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICAKICAgICBib29sIGNvdWxkVGFrZVNsb3dQYXRo
KCkgY29uc3QgeyByZXR1cm4gbV9jb3VsZFRha2VTbG93UGF0aDsgfQogICAgIAotICAgIENhbGxF
ZGdlTGlzdCBlZGdlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZXM7IH0KLSAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlcy5zaXplKCk7IH0KLSAgICBDYWxsRWRnZSBhdCh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2VkZ2VzW2ldOyB9Ci0gICAgQ2FsbEVkZ2Ugb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorICAgIENhbGxWYXJp
YW50TGlzdCB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBDYWxs
VmFyaWFudCBhdCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2ldOyB9Cisg
ICAgQ2FsbFZhcmlhbnQgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBhdChp
KTsgfQogICAgIGJvb2wgaXNQcm92ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUHJvdmVkOyB9Ci0g
ICAgYm9vbCBjYW5PcHRpbWl6ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2VkZ2VzLmlzRW1wdHkoKTsg
fQotICAgIGJvb2wgY2FuVHJ1c3RDb3VudHMoKSBjb25zdCB7IHJldHVybiBtX2NhblRydXN0Q291
bnRzOyB9CisgICAgYm9vbCBjYW5PcHRpbWl6ZSgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhcmlhbnRz
LmlzRW1wdHkoKTsgfQogICAgIAogICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCgpIGNvbnN0OyAvLyBS
ZXR1cm5zIHRydWUgaWYgYW55IGNhbGxlZSBpcyBhIGNsb3N1cmUgY2FsbC4KICAgICAKQEAgLTEz
MiwxNSArMTMwLDEzIEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIENhbGxMaW5rU3RhdHVz
IGNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENvZGVCbG9jayos
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIENh
bGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKENhbGxFZGdlUHJvZmlsZSop
OwogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygKICAg
ICAgICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENhbGxMaW5rSW5mbyYpOwogI2VuZGlm
CiAgICAgCi0gICAgQ2FsbEVkZ2VMaXN0IG1fZWRnZXM7CisgICAgQ2FsbFZhcmlhbnRMaXN0IG1f
dmFyaWFudHM7CiAgICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAgIGJvb2wgbV9pc1By
b3ZlZDsKLSAgICBib29sIG1fY2FuVHJ1c3RDb3VudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50
LmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNSArNTAsMzQgQEAgdm9pZCBDYWxs
VmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgIG91dC5wcmludCgiRXhlY3V0YWJs
ZTogIiwgKmV4ZWN1dGFibGUoKSk7CiB9CiAKK0NhbGxWYXJpYW50TGlzdCB2YXJpYW50TGlzdFdp
dGhWYXJpYW50KGNvbnN0IENhbGxWYXJpYW50TGlzdCYgbGlzdCwgQ2FsbFZhcmlhbnQgdmFyaWFu
dFRvQWRkKQoreworICAgIEFTU0VSVCh2YXJpYW50VG9BZGQpOworICAgIENhbGxWYXJpYW50TGlz
dCByZXN1bHQ7CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgeworICAgICAg
ICBBU1NFUlQodmFyaWFudCk7CisgICAgICAgIGlmICghIXZhcmlhbnRUb0FkZCkgeworICAgICAg
ICAgICAgaWYgKHZhcmlhbnQgPT0gdmFyaWFudFRvQWRkKQorICAgICAgICAgICAgICAgIHZhcmlh
bnRUb0FkZCA9IENhbGxWYXJpYW50KCk7CisgICAgICAgICAgICBlbHNlIGlmICh2YXJpYW50LmRl
c3BlY2lmaWVkQ2xvc3VyZSgpID09IHZhcmlhbnRUb0FkZC5kZXNwZWNpZmllZENsb3N1cmUoKSkg
eworICAgICAgICAgICAgICAgIHZhcmlhbnQgPSB2YXJpYW50LmRlc3BlY2lmaWVkQ2xvc3VyZSgp
OworICAgICAgICAgICAgICAgIHZhcmlhbnRUb0FkZCA9IENhbGxWYXJpYW50KCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmFwcGVuZCh2YXJpYW50KTsKKyAgICB9
CisgICAgaWYgKCEhdmFyaWFudFRvQWRkKQorICAgICAgICByZXN1bHQuYXBwZW5kKHZhcmlhbnRU
b0FkZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQ2FsbFZhcmlhbnRMaXN0IGRlc3BlY2lm
aWVkVmFyaWFudExpc3QoY29uc3QgQ2FsbFZhcmlhbnRMaXN0JiBsaXN0KQoreworICAgIENhbGxW
YXJpYW50TGlzdCByZXN1bHQ7CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkK
KyAgICAgICAgcmVzdWx0ID0gdmFyaWFudExpc3RXaXRoVmFyaWFudChyZXN1bHQsIHZhcmlhbnQu
ZGVzcGVjaWZpZWRDbG9zdXJlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZh
cmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bFZhcmlhbnQuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NhbGxWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDExICs1Niw4IEBAIG5hbWVz
cGFjZSBKU0MgewogLy8gICAgIHRoYW4gdGhlIGZhY3QgdGhhdCB0aGV5IGRvbid0IGZhbGwgaW50
byBhbnkgb2YgdGhlIGFib3ZlIGNhdGVnb3JpZXMuCiAvLwogLy8gVGhpcyBjbGFzcyBzZXJ2ZXMg
YXMgYSBraW5kIG9mIHVuaW9uIG92ZXIgdGhlc2UgZm91ciB0aGluZ3MuIEl0IGRvZXMgc28gYnkg
anVzdCBob2xkaW5nIGEKLS8vIEpTQ2VsbCouIFdlIGRldGVybWluZSB3aGljaCBvZiB0aGUgbW9k
ZXMgaXRzIGluIGJ5IGRvaW5nIHR5cGUgY2hlY2tzIG9uIHRoZSBjZWxsLiBOb3RlIHRoYXQgdGhl
cmUKLS8vIGlzIG5vIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGZvciB0aGUgY2VsbCBiZWNhdXNlIHRo
aXMgY2xhc3MgaXMgYWx3YXlzIHVzZWQgaW4gY29udGV4dHMgd2hlcmUgd2UKLS8vIGVpdGhlciBk
byBjdXN0b20gd2VhayByZWZlcmVuY2UgbG9naWMgb3ZlciBpbnN0YW5jZXMgb2YgdGhpcyBjbGFz
cyAoc2VlIENhbGxFZGdlUHJvZmlsZSksIG9yIHdlCi0vLyBhcmUgaW5zaWRlIHRoZSBjb21waWxl
ciBhbmQgd2UgYXNzdW1lIHRoYXQgdGhlIGNvbXBpbGVyIHJ1bnMgaW4gYmV0d2VlbiBjb2xsZWN0
aW9ucyBhbmQgc28gY2FuCi0vLyB0b3VjaCB0aGUgaGVhcCB3aXRob3V0IG5vdGlmeWluZyBhbnlv
bmUuCisvLyBKU0NlbGwqLiBXZSBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlIG1vZGVzIGl0cyBpbiBi
eSBkb2luZyB0eXBlIGNoZWNrcyBvbiB0aGUgY2VsbC4gTm90ZSB0aGF0IHdlCisvLyBjYW5ub3Qg
dXNlIFdyaXRlQmFycmllcjw+IGhlcmUgYmVjYXVzZSB0aGlzIGdldHMgdXNlZCBpbnNpZGUgdGhl
IGNvbXBpbGVyLgogCiBjbGFzcyBDYWxsVmFyaWFudCB7CiBwdWJsaWM6CkBAIC0xODEsNiArMTc4
LDEzIEBAIHN0cnVjdCBDYWxsVmFyaWFudEhhc2ggewogCiB0eXBlZGVmIFZlY3RvcjxDYWxsVmFy
aWFudCwgMT4gQ2FsbFZhcmlhbnRMaXN0OwogCisvLyBSZXR1cm5zIGEgbmV3IHZhcmlhbnQgbGlz
dCBieSBhdHRlbXB0aW5nIHRvIGVpdGhlciBhcHBlbmQgdGhlIGdpdmVuIHZhcmlhbnQgb3IgbWVy
Z2UgaXQgd2l0aCBvbmUKKy8vIG9mIHRoZSB2YXJpYW50cyB3ZSBhbHJlYWR5IGhhdmUgYnkgZGVz
cGVjaWZ5aW5nIGNsb3N1cmVzLgorQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRMaXN0V2l0aFZhcmlh
bnQoY29uc3QgQ2FsbFZhcmlhbnRMaXN0JiwgQ2FsbFZhcmlhbnQpOworCisvLyBSZXR1cm5zIGEg
bmV3IGxpc3Qgd2hlcmUgZXZlcnkgZWxlbWVudCBpcyBkZXNwZWNpZmllZCwgYW5kIHRoZSBsaXN0
IGlzIGRlZHVwbGljYXRlZC4KK0NhbGxWYXJpYW50TGlzdCBkZXNwZWNpZmllZFZhcmlhbnRMaXN0
KGNvbnN0IENhbGxWYXJpYW50TGlzdCYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNw
YWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwLCAyMDEy
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTIxODEsNiArMjE4MSw4IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAg
Ly8gZGVzdHJ1Y3RvciB3aWxsIHRyeSB0byByZW1vdmUgbm9kZXMgZnJvbSBvdXIgKG5vIGxvbmdl
ciB2YWxpZCkgbGlua2VkIGxpc3QuCiAgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigp
ICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkKICAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2lu
KCktPnJlbW92ZSgpOworICAgIHdoaWxlIChtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdp
bigpICE9IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmVuZCgpKQorICAgICAgICBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpLT5yZW1vdmUoKTsKICAgICAKICAgICAvLyBOb3Rl
IHRoYXQgb3VyIG91dGdvaW5nIGNhbGxzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG90aGVyIENvZGVC
bG9ja3MnCiAgICAgLy8gbV9pbmNvbWluZ0NhbGxzIGxpbmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBl
eGVjdXRpb24gb2YgdGhlIH5DYWxsTGlua0luZm8KQEAgLTMwNDcsNiArMzA0OSwxMiBAQCB2b2lk
IENvZGVCbG9jazo6bGlua0luY29taW5nQ2FsbChFeGVjU3RhCiAgICAgbm90aWNlSW5jb21pbmdD
YWxsKGNhbGxlckZyYW1lKTsKICAgICBtX2luY29taW5nQ2FsbHMucHVzaChpbmNvbWluZyk7CiB9
CisKK3ZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRl
KiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSogaW5jb21pbmcpCit7CisgICAgbm90
aWNlSW5jb21pbmdDYWxsKGNhbGxlckZyYW1lKTsKKyAgICBtX2luY29taW5nUG9seW1vcnBoaWND
YWxscy5wdXNoKGluY29taW5nKTsKK30KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB2b2lkIENv
ZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscygpCkBAIC0zMDU0LDExICszMDYyLDEzIEBAIHZv
aWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKICAgICB3aGlsZSAobV9pbmNvbWlu
Z0xMSW50Q2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKICAgICAg
ICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCk7CiAjaWYgRU5BQkxFKEpJ
VCkKLSAgICBpZiAobV9pbmNvbWluZ0NhbGxzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9pbmNvbWlu
Z0NhbGxzLmlzRW1wdHkoKSAmJiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIodGhpcyk7
CiAgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5l
bmQoKSkKICAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluayhyZXBhdGNoQnVm
ZmVyKTsKKyAgICB3aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBt
X2luY29taW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ1BvbHlt
b3JwaGljQ2FsbHMuYmVnaW4oKS0+dW5saW5rKHJlcGF0Y2hCdWZmZXIpOwogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCiB9CiAKQEAgLTMyNTIsMTIgKzMyNjIsMTkgQEAgdm9pZCBDb2RlQmxvY2s6Om5v
dGljZUluY29taW5nQ2FsbChFeGVjUwogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0g
Y2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
Q2FsbExpbmsoKSkKLSAgICAgICAgZGF0YUxvZygiTm90aWNpbmcgY2FsbCBsaW5rIGZyb20gIiwg
KmNhbGxlckNvZGVCbG9jaywgIiB0byAiLCAqdGhpcywgIlxuIik7CisgICAgICAgIGRhdGFMb2co
Ik5vdGljaW5nIGNhbGwgbGluayBmcm9tICIsIHBvaW50ZXJEdW1wKGNhbGxlckNvZGVCbG9jayks
ICIgdG8gIiwgKnRoaXMsICJcbiIpOwogICAgIAorI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlm
ICghbV9zaG91bGRBbHdheXNCZUlubGluZWQpCiAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
ZiAoIWNhbGxlckNvZGVCbG9jaykgeworICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9
IGZhbHNlOworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCisgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBuYXRpdmUu
XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQogICAg
IGlmICghaGFzQmFzZWxpbmVKSVRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0z
Mjg1LDYgKzMzMDIsMTMgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29taW5nQ2FsbChFeGVj
UwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAorICAgIGlmIChKSVRDb2RlOjppc09wdGlt
aXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAgICAgIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2Fs
bExpbmsoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJjYXVzZSBj
YWxsZXIgd2FzIGFscmVhZHkgb3B0aW1pemVkLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCiAgICAgaWYgKGNhbGxlckNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNv
ZGUpIHsKICAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBlaXRoZXIgZXZhbCBvciBnbG9iYWwg
Y29kZSwgYXNzdW1lIHRoYXQgdGhhdCB3b24ndCBiZQogICAgICAgICAvLyBvcHRpbWl6ZWQgYW55
dGltZSBzb29uLiBGb3IgZXZhbCBjb2RlIHRoaXMgaXMgcGFydGljdWxhcmx5IHRydWUgc2luY2Ug
d2UKQEAgLTMzMDUsOCArMzMyOSwxMSBAQCB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdD
YWxsKEV4ZWNTCiAgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChjYWxsZXJDb2RlQmxvY2st
Pm1fY2FwYWJpbGl0eUxldmVsU3RhdGUgIT0gREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpOwor
ICAgIAorICAgIGlmIChjYWxsZXJDb2RlQmxvY2stPm1fY2FwYWJpbGl0eUxldmVsU3RhdGUgPT0g
REZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpIHsKKyAgICAgICAgZGF0YUxvZygiSW4gY2FsbCBm
cm9tICIsICpjYWxsZXJDb2RlQmxvY2ssICIgIiwgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSwg
IiB0byAiLCAqdGhpcywgIjogY2FsbGVyJ3MgREZHIGNhcGFiaWxpdHkgbGV2ZWwgaXMgbm90IHNl
dC5cbiIpOworICAgICAgICBDUkFTSCgpOworICAgIH0KICAgICAKICAgICBpZiAoY2FuQ29tcGls
ZShjYWxsZXJDb2RlQmxvY2stPm1fY2FwYWJpbGl0eUxldmVsU3RhdGUpKQogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOSwxMSArMjI5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgdW5saW5rQ2FsbHMoKTsKICAgICAgICAgCiAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKEV4
ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIENhbGxMaW5rSW5mbyopOwotICAgICAgICAKLSAgICBib29s
IGlzSW5jb21pbmdDYWxsQWxyZWFkeUxpbmtlZChDYWxsTGlua0luZm8qIGluY29taW5nKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1faW5jb21pbmdDYWxscy5pc09uTGlzdChpbmNvbWluZyk7Ci0g
ICAgfQorICAgIHZvaWQgbGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogY2Fs
bGVyRnJhbWUsIFBvbHltb3JwaGljQ2FsbE5vZGUqKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQog
CiAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIExMSW50
Q2FsbExpbmtJbmZvKik7CkBAIC0xMDc3LDYgKzEwNzMsNyBAQCBwcml2YXRlOgogICAgIFZlY3Rv
cjxCeVZhbEluZm8+IG1fYnlWYWxJbmZvczsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxM
aW5rSW5mb3M7CiAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdT
ZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOworICAgIFNlbnRpbmVs
TGlua2VkTGlzdDxQb2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxQb2x5
bW9ycGhpY0NhbGxOb2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7CiAjZW5kaWYKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+IG1faml0Q29kZU1hcDsKICNpZiBF
TkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3OTI0MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk2OCwxNCArMTk2OCw2IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVh
cFRvcCgpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgIGNh
c2UgUHJvZmlsZWRDb25zdHJ1Y3Q6Ci0gICAgICAgIGlmIChmb3JOb2RlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpLm1fdmFsdWUpCi0gICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29u
c3RhbnRzKHRydWUpOwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBjbG9iYmVyTGltaXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7Ci0g
ICAgICAgIGJyZWFrOwotCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2FzZSBDaGVja0Jh
ZENlbGw6CiAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24g
MTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAgLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3NSw3ICs2NzUsNyBAQCBwcml2
YXRlOgogICAgICAgICBpZiAocGFyYW1ldGVyU2xvdHMgPiBtX3BhcmFtZXRlclNsb3RzKQogICAg
ICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IHBhcmFtZXRlclNsb3RzOwogCi0gICAgICAgIGlu
dCBkdW1teVRoaXNBcmd1bWVudCA9IG9wID09IENhbGwgfHwgb3AgPT0gTmF0aXZlQ2FsbCB8fCBv
cCA9PSBQcm9maWxlZENhbGwgPyAwIDogMTsKKyAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50
ID0gb3AgPT0gQ2FsbCB8fCBvcCA9PSBOYXRpdmVDYWxsID8gMCA6IDE7CiAgICAgICAgIGZvciAo
aW50IGkgPSAwICsgZHVtbXlUaGlzQXJndW1lbnQ7IGkgPCBhcmdDb3VudDsgKytpKQogICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJl
Z2lzdGVyT2Zmc2V0KSkpOwogCkBAIC0xMDQ0LDE3ICsxMDQ0LDggQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlQ2FsbCgKICAgICBpZiAoY2FsbFRhcmdldC0+aGFzQ29uc3RhbnQoKSkKICAg
ICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cyhjYWxsVGFyZ2V0LT5hc0pTVmFs
dWUoKSkuc2V0SXNQcm92ZWQodHJ1ZSk7CiAgICAgCi0gICAgaWYgKCghY2FsbExpbmtTdGF0dXMu
Y2FuT3B0aW1pemUoKSB8fCBjYWxsTGlua1N0YXR1cy5zaXplKCkgIT0gMSkKLSAgICAgICAgJiYg
IWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpICYmIE9wdGlvbnM6OnVzZUZUTEpJVCgpCi0gICAg
ICAgICYmIElubGluZUNhbGxGcmFtZTo6aXNOb3JtYWxDYWxsKGtpbmQpCi0gICAgICAgICYmIENh
bGxFZGdlTG9nOjppc0VuYWJsZWQoKQotICAgICAgICAmJiBPcHRpb25zOjpkZmdEb2VzQ2FsbEVk
Z2VQcm9maWxpbmcoKSkgewotICAgICAgICBBU1NFUlQob3AgPT0gQ2FsbCB8fCBvcCA9PSBDb25z
dHJ1Y3QpOwotICAgICAgICBpZiAob3AgPT0gQ2FsbCkKLSAgICAgICAgICAgIG9wID0gUHJvZmls
ZWRDYWxsOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvcCA9IFByb2ZpbGVkQ29uc3RydWN0
OwotICAgIH0KKyAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQor
ICAgICAgICBkYXRhTG9nKCIgICAgSGFuZGxpbmcgY2FsbCBhdCAiLCBjdXJyZW50Q29kZU9yaWdp
bigpLCAiOiAiLCBjYWxsTGlua1N0YXR1cywgIlxuIik7CiAgICAgCiAgICAgaWYgKCFjYWxsTGlu
a1N0YXR1cy5jYW5PcHRpbWl6ZSgpKSB7CiAgICAgICAgIC8vIE9kZGx5LCB0aGlzIGNvbmZsYXRl
cyBjYWxscyB0aGF0IGhhdmVuJ3QgZXhlY3V0ZWQgd2l0aCBjYWxscyB0aGF0IGJlaGF2ZWQgc3Vm
ZmljaWVudGx5IHBvbHltb3JwaGljYWxseQpAQCAtMTA3NiwxNyArMTA2NywxNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIAogI2lmIEVOQUJMRShGVExfTkFUSVZFX0NB
TExfSU5MSU5JTkcpCiAgICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpICYmIE9wdGlv
bnM6Om9wdGltaXplTmF0aXZlQ2FsbHMoKSAmJiBjYWxsTGlua1N0YXR1cy5zaXplKCkgPT0gMSAm
JiAhY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKSkgewotICAgICAgICBDYWxsVmFy
aWFudCBjYWxsZWUgPSBjYWxsTGlua1N0YXR1c1swXS5jYWxsZWUoKTsKKyAgICAgICAgQ2FsbFZh
cmlhbnQgY2FsbGVlID0gY2FsbExpbmtTdGF0dXNbMF07CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uID0gY2FsbGVlLmZ1bmN0aW9uKCk7CiAgICAgICAgIENvZGVTcGVjaWFsaXphdGlvbktp
bmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktp
bmRGb3Ioa2luZCk7CiAgICAgICAgIGlmIChmdW5jdGlvbiAmJiBmdW5jdGlvbi0+aXNIb3N0RnVu
Y3Rpb24oKSkgewogICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxlZSwgY2FsbFRh
cmdldCwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAgICBj
YWxsT3BJbmZvID0gT3BJbmZvKG1fZ3JhcGguZnJlZXplKGZ1bmN0aW9uKSk7CiAKLSAgICAgICAg
ICAgIGlmIChvcCA9PSBDYWxsIHx8IG9wID09IFByb2ZpbGVkQ2FsbCkKKyAgICAgICAgICAgIGlm
IChvcCA9PSBDYWxsKQogICAgICAgICAgICAgICAgIG9wID0gTmF0aXZlQ2FsbDsKICAgICAgICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9PSBDb25zdHJ1Y3QgfHwgb3Ag
PT0gUHJvZmlsZWRDb25zdHJ1Y3QpOworICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9PSBDb25z
dHJ1Y3QpOwogICAgICAgICAgICAgICAgIG9wID0gTmF0aXZlQ29uc3RydWN0OwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0xNDI2LDEzICsxNDE3LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyB0aGlzIGluIGNhc2VzIHdoZXJlIHdlIGRv
bid0IG5lZWQgY29udHJvbCBmbG93IGRpYW1vbmRzIHRvIGNoZWNrIHRoZSBjYWxsZWUuCiAgICAg
aWYgKCFjYWxsTGlua1N0YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpICYmIGNhbGxMaW5rU3RhdHVz
LnNpemUoKSA9PSAxKSB7CiAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcygKLSAgICAgICAgICAg
IGNhbGxMaW5rU3RhdHVzWzBdLmNhbGxlZSgpLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZz
ZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgICAgICAgICBjYWxsTGlua1N0YXR1c1swXSwg
Y2FsbFRhcmdldE5vZGUsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOwogICAg
ICAgICBib29sIHJlc3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCi0gICAgICAgICAgICBjYWxs
VGFyZ2V0Tm9kZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0uY2FsbGVlKCksIHJl
Z2lzdGVyT2Zmc2V0LAorICAgICAgICAgICAgY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQs
IGNhbGxMaW5rU3RhdHVzWzBdLCByZWdpc3Rlck9mZnNldCwKICAgICAgICAgICAgIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJEb2VzTm9ybWFsTGlu
a2luZywgcHJlZGljdGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSk7CiAgICAgICAg
IGlmICghcmVzdWx0ICYmICFjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpKQotICAgICAgICAgICAg
dW5kb0Z1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdLmNhbGxlZSgpKTsKKyAgICAgICAg
ICAgIHVuZG9GdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1swXSk7CiAgICAgICAgIGlmICh2
ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJEb25lIGlubGluaW5nIChzaW1wbGUpLlxu
Iik7CiAgICAgICAgICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwg
IlxuIik7CkBAIC0xNDYyLDcgKzE0NTMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhOb2RlCiAgICAgYm9vbCBhbGxBcmVDbG9zdXJlQ2FsbHMgPSB0cnVlOwogICAgIGJv
b2wgYWxsQXJlRGlyZWN0Q2FsbHMgPSB0cnVlOwogICAgIGZvciAodW5zaWduZWQgaSA9IGNhbGxM
aW5rU3RhdHVzLnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAoY2FsbExpbmtTdGF0dXNbaV0u
Y2FsbGVlKCkuaXNDbG9zdXJlQ2FsbCgpKQorICAgICAgICBpZiAoY2FsbExpbmtTdGF0dXNbaV0u
aXNDbG9zdXJlQ2FsbCgpKQogICAgICAgICAgICAgYWxsQXJlRGlyZWN0Q2FsbHMgPSBmYWxzZTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgYWxsQXJlQ2xvc3VyZUNhbGxzID0gZmFsc2U7CkBA
IC0xNDc1LDkgKzE0NjYsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhO
b2RlCiAgICAgICAgIHRoaW5nVG9Td2l0Y2hPbiA9IGFkZFRvR3JhcGgoR2V0RXhlY3V0YWJsZSwg
Y2FsbFRhcmdldE5vZGUpOwogICAgIGVsc2UgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGJlIGFibGUgdG8gaGFuZGxlIHRoaXMgY2FzZSwgYnV0IGl0J3MgdHJpY2t5IGFuZCB3ZSBkb24n
dCBrbm93IG9mIGNhc2VzCi0gICAgICAgIC8vIHdoZXJlIGl0IHdvdWxkIGJlIGJlbmVmaWNpYWwu
IEFsc28sIENhbGxMaW5rU3RhdHVzIHdvdWxkIG1ha2UgYWxsIGNhbGxlZXMgYXBwZWFyIGxpa2UK
LSAgICAgICAgLy8gY2xvc3VyZSBjYWxscyBpZiBhbnkgY2FsbHMgd2VyZSBjbG9zdXJlIGNhbGxz
IC0gZXhjZXB0IGZvciBjYWxscyB0byBpbnRlcm5hbCBmdW5jdGlvbnMuCi0gICAgICAgIC8vIFNv
IHRoaXMgd2lsbCBvbmx5IGFyaXNlIGlmIHNvbWUgY2FsbGVlcyBhcmUgaW50ZXJuYWwgZnVuY3Rp
b25zIGFuZCBvdGhlcnMgYXJlIGNsb3N1cmVzLgorICAgICAgICAvLyB3aGVyZSBpdCB3b3VsZCBi
ZSBiZW5lZmljaWFsLiBJdCBtaWdodCBiZSBiZXN0IHRvIGhhbmRsZSB0aGVzZSBjYXNlcyBhcyBp
ZiBhbGwgY2FsbHMgd2VyZQorICAgICAgICAvLyBjbG9zdXJlIGNhbGxzLgogICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDIwCiAgICAgICAgIGlm
ICh2ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5nIGlubGluaW5nIChtaXgp
LlxuIik7CkBAIC0xNTE3LDcgKzE1MDcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhOb2RlCiAgICAgLy8gdG8gdGhlIGNvbnRpbnVhdGlvbiBibG9jaywgd2hpY2ggd2Ug
Y3JlYXRlIGxhc3QuCiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBsYW5kaW5nQmxvY2tzOwogICAg
IAotICAgIC8vIFdlIG1ha2UgZm9yY2UgdGhpcyB0cnVlIGlmIHdlIGdpdmUgdXAgb24gaW5saW5p
bmcgYW55IG9mIHRoZSBlZGdlcy4KKyAgICAvLyBXZSBtYXkgZm9yY2UgdGhpcyB0cnVlIGlmIHdl
IGdpdmUgdXAgb24gaW5saW5pbmcgYW55IG9mIHRoZSBlZGdlcy4KICAgICBib29sIGNvdWxkVGFr
ZVNsb3dQYXRoID0gY2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKTsKICAgICAKICAg
ICBpZiAodmVyYm9zZSkKQEAgLTE1MzMsNyArMTUyMyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgTm9kZSogbXlDYWxsVGFyZ2V0Tm9kZSA9IGdl
dERpcmVjdChjYWxsZWVSZWcpOwogICAgICAgICAKICAgICAgICAgYm9vbCBpbmxpbmluZ1Jlc3Vs
dCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCi0gICAgICAgICAgICBteUNhbGxUYXJnZXROb2RlLCBy
ZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKSwgcmVnaXN0ZXJPZmZzZXQs
CisgICAgICAgICAgICBteUNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0
YXR1c1tpXSwgcmVnaXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgbmV4dE9mZnNldCwga2luZCwgQ2FsbGVyTGlua3NNYW51YWxseSwgcHJlZGljdGlv
biwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSk7CiAgICAgICAgIApAQCAtMTU1MiwxMCAr
MTU0MiwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAg
ICAgIAogICAgICAgICBKU0NlbGwqIHRoaW5nVG9DYXNlT247CiAgICAgICAgIGlmIChhbGxBcmVE
aXJlY3RDYWxscykKLSAgICAgICAgICAgIHRoaW5nVG9DYXNlT24gPSBjYWxsTGlua1N0YXR1c1tp
XS5jYWxsZWUoKS5ub25FeGVjdXRhYmxlQ2FsbGVlKCk7CisgICAgICAgICAgICB0aGluZ1RvQ2Fz
ZU9uID0gY2FsbExpbmtTdGF0dXNbaV0ubm9uRXhlY3V0YWJsZUNhbGxlZSgpOwogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIEFTU0VSVChhbGxBcmVDbG9zdXJlQ2FsbHMpOwotICAgICAgICAg
ICAgdGhpbmdUb0Nhc2VPbiA9IGNhbGxMaW5rU3RhdHVzW2ldLmNhbGxlZSgpLmV4ZWN1dGFibGUo
KTsKKyAgICAgICAgICAgIHRoaW5nVG9DYXNlT24gPSBjYWxsTGlua1N0YXR1c1tpXS5leGVjdXRh
YmxlKCk7CiAgICAgICAgIH0KICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSht
X2dyYXBoLmZyZWV6ZSh0aGluZ1RvQ2FzZU9uKSwgYmxvY2suZ2V0KCkpKTsKICAgICAgICAgbV9j
dXJyZW50SW5kZXggPSBuZXh0T2Zmc2V0OwpAQCAtMTU2Nyw3ICsxNTU3LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBsYW5kaW5nQmxvY2tzLmFw
cGVuZChtX2N1cnJlbnRCbG9jayk7CiAKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICBkYXRhTG9nKCJGaW5pc2hlZCBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUo
KSwgIiBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiLlxuIik7CisgICAgICAgICAgICBkYXRh
TG9nKCJGaW5pc2hlZCBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1c1tpXSwgIiBhdCAiLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCAiLlxuIik7CiAgICAgfQogICAgIAogICAgIFJlZlB0cjxCYXNpY0Js
b2NrPiBzbG93UGF0aEJsb2NrID0gYWRvcHRSZWYoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw4ICsz
NjMsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2Fz
ZSBBcnJheVBvcDoKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgY2Fz
ZSBQcm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICBjYXNlIE5h
dGl2ZUNhbGw6CiAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBUb1ByaW1pdGl2
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIwLDIwICs0MjAsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQcm9maWxlZENhbGw6
Ci0gICAgICAgICAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OiB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkubV92YWx1
ZSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgLy8gSWYgd2Ugd2VyZSBhYmxlIHRvIHByb3ZlIHRoYXQgdGhlIGNhbGxlZSBpcyBh
IGNvbnN0YW50IHRoZW4gdGhlIG5vcm1hbCBjYWxsCi0gICAgICAgICAgICAgICAgLy8gaW5saW5l
IGNhY2hlIHdpbGwgcmVjb3JkIHRoaXMgY2FsbGVlLiBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgaXMg
bm8gbmVlZCB0byBkbyBhbnkKLSAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIHByb2ZpbGlu
Zy4KLSAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsK
LSAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChub2RlLT5vcCgpID09IFByb2ZpbGVkQ2FsbCA/
IENhbGwgOiBDb25zdHJ1Y3QpOwotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTgsOCArMTE4LDYgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAg
IGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNv
bnN0cnVjdDoKLSAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVkQ29uc3Ry
dWN0OgogICAgIGNhc2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAg
ICBjYXNlIFByb2ZpbGVEaWRDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSwyMCArNzksMTcgQEAgc3RhdGlj
IENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIGlmIChtb2RlID09IERGR01vZGUp
IHsKICAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICAg
ICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOwotICAgICAgICB2
bS5nZXRDVElTdHViKGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0u
Z2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2
bS5nZXRDVElTdHViKHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRD
VElTdHViKHZpcnR1YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0
b3IpOwogICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVn
c1RodW5rR2VuZXJhdG9yKTsKLSAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxU
aGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1Yihs
aW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7CiAgICAg
ICAgIHZtLmdldENUSVN0dWIodmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJh
dG9yKTsKICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZl
c1JlZ3NUaHVua0dlbmVyYXRvcik7CiAgICAgfQogICAgIAotICAgIGlmIChDYWxsRWRnZUxvZzo6
aXNFbmFibGVkKCkpCi0gICAgICAgIHZtLmVuc3VyZUNhbGxFZGdlTG9nKCkucHJvY2Vzc0xvZygp
OwotCiAgICAgaWYgKHZtLnR5cGVQcm9maWxlcigpKQogICAgICAgICB2bS50eXBlUHJvZmlsZXJM
b2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJQcmVwYXJpbmcgZm9yIERGRyBj
b21waWxhdGlvbi4iKSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDIsOCArMTIw
Miw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50
OgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICBj
YXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAg
ICAgY2FzZSBQcm9maWxlQ29udHJvbEZsb3c6CiAgICAgICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAg
ICAgICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNTcsOCArMTA1Nyw2IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgogICAgICAgICBjYXNlIENh
bGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoK
LSAgICAgICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBOYXRpdmVDYWxs
OgogICAgICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICAgICAgY2FzZSBHZXRCeU9mZnNl
dDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9u
IDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjE3LDggKzIxNyw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICAvKiBDYWxscy4gKi9cCiAgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwK
ICAgICBtYWNybyhDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCi0gICAgbWFjcm8oUHJvZmlsZWRD
YWxsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBO
b2RlQ2xvYmJlcnNXb3JsZCkgXAotICAgIG1hY3JvKFByb2ZpbGVkQ29uc3RydWN0LCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNX
b3JsZCkgXAogICAgIG1hY3JvKE5hdGl2ZUNhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8o
TmF0aXZlQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhh
c1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIxOSw2ICsxMjE5LDExIEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVw
Tm93KEV4ZWMKICAgICBEZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOwogICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgCisgICAgaWYgKGNvZGVCbG9jay0+
aml0VHlwZSgpICE9IEpJVENvZGU6OkRGR0pJVCkgeworICAgICAgICBkYXRhTG9nKCJVbmV4cGVj
dGVkIGNvZGUgYmxvY2sgaW4gREZHLT5GVEwgdGllci11cDogIiwgKmNvZGVCbG9jaywgIlxuIik7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAogICAg
IEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CiAgICAgCiAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewpAQCAtMTIzOCw2ICsxMjQzLDExIEBAIGNo
YXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS0+aGVhcCk7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKICAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklU
KSB7CisgICAgICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBERkctPkZUTCB0
aWVyLXVwOiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisgICAgCiAgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9j
ay0+aml0Q29kZSgpLT5kZmcoKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4OCw4ICsxODgsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IEdldERpcmVjdFBuYW1lOgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3Ry
dWN0OgotICAgICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgY2FzZSBQcm9maWxlZENv
bnN0cnVjdDoKICAgICAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgICAgICBjYXNlIE5hdGl2ZUNv
bnN0cnVjdDoKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTc5MjQyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4OSw4ICsxODksNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5
cGUmIHN0CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgogICAgIGNh
c2UgQ29uc3RydWN0OgotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgIGNhc2UgUHJvZmlsZWRD
b25zdHJ1Y3Q6CiAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdBcnJheToKICAgICBj
YXNlIE5ld0FycmF5V2l0aFNpemU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYzOCw5ICs2MzgsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTWlzY1N0cmljdEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUpCiB7Ci0gICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3Ao
KSA9PSBQcm9maWxlZENhbGw7CisgICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGw7
CiAgICAgaWYgKCFpc0NhbGwpCi0gICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IENvbnN0cnVj
dCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KTsKKyAgICAgICAgQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gQ29uc3RydWN0KTsKIAogICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0
aGlzIGFyZ3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQogICAg
IC8vIGZvciBpdC4KQEAgLTY4OSwxMSArNjg5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1faml0LmNv
ZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKIAotICAgIGlmIChub2RlLT5vcCgpID09IFBy
b2ZpbGVkQ2FsbCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KSB7Ci0gICAgICAg
IG1faml0LnZtKCktPmNhbGxFZGdlTG9nLT5lbWl0TG9nQ29kZSgKLSAgICAgICAgICAgIG1faml0
LCBpbmZvLT5jYWxsRWRnZVByb2ZpbGUsIGNhbGxlZS5qc1ZhbHVlUmVncygpKTsKLSAgICB9Ci0g
ICAgCiAgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaE5vdENlbGwoY2FsbGVlLmpzVmFsdWVSZWdz
KCkpKTsKICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlUGF5bG9hZEdQUiwgdGFyZ2V0VG9DaGVjaykpOwog
CkBAIC00MTY5LDggKzQxNjQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgY2FzZSBQ
cm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAgICAgZW1pdENh
bGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyNCw5ICs2MjQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TWlzY1N0cmljdEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUp
CiB7Ci0gICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3AoKSA9
PSBQcm9maWxlZENhbGw7CisgICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGw7CiAg
ICAgaWYgKCFpc0NhbGwpCi0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwg
bm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QgfHwgbm9kZS0+b3AoKSA9PSBQcm9maWxlZENvbnN0cnVj
dCk7CisgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3AoKSA9
PSBDb25zdHJ1Y3QpOwogICAgIAogICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFy
Z3VtZW50IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQogICAgIC8vIGZv
ciBpdC4KQEAgLTY2OSwxMSArNjY5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogICAgIAogICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gbV9qaXQu
Y29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwogICAgIAotICAgIGlmIChub2RlLT5vcCgp
ID09IFByb2ZpbGVkQ2FsbCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KSB7Ci0g
ICAgICAgIG1faml0LnZtKCktPmNhbGxFZGdlTG9nLT5lbWl0TG9nQ29kZSgKLSAgICAgICAgICAg
IG1faml0LCBjYWxsTGlua0luZm8tPmNhbGxFZGdlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MoY2FsbGVl
R1BSKSk7Ci0gICAgfQotCiAgICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2go
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZh
c3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKQEAgLTQyMzYsOCArNDIzMSw2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBj
YXNlIENvbnN0cnVjdDoKLSAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVk
Q29uc3RydWN0OgogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVj
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MCwxNyArNTAsMTMgQEAgcHVibGljOgogICAgICAgICBpZiAoIU9w
dGlvbnM6OnVzZUZUTEpJVCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAK
LSAgICAgICAgaWYgKG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrLT5tX2RpZEZhaWxGVExDb21waWxh
dGlvbikgewotICAgICAgICAgICAgcmVtb3ZlRlRMUHJvZmlsaW5nKCk7CisgICAgICAgIGlmICht
X2dyYXBoLm1fcHJvZmlsZWRCbG9jay0+bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KICAgICAgICAgCiAjaWYgRU5BQkxFKEZUTF9K
SVQpCiAgICAgICAgIEZUTDo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gRlRMOjpjYW5Db21waWxl
KG1fZ3JhcGgpOwotICAgICAgICBpZiAobGV2ZWwgPT0gRlRMOjpDYW5ub3RDb21waWxlKSB7Ci0g
ICAgICAgICAgICByZW1vdmVGVExQcm9maWxpbmcoKTsKKyAgICAgICAgaWYgKGxldmVsID09IEZU
TDo6Q2Fubm90Q29tcGlsZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKCFPcHRpb25zOjplbmFibGVPU1JFbnRyeVRvRlRMKCkpCiAg
ICAgICAgICAgICBsZXZlbCA9IEZUTDo6Q2FuQ29tcGlsZTsKQEAgLTEyMiwzMiArMTE4LDYgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CiAgICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQgcmVtb3ZlRlRMUHJvZmlsaW5nKCkKLSAgICB7
Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkg
ewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoQ2FsbCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OgotICAgICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRPcChDb25zdHJ1Y3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQogfTsKIAogYm9vbCBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rpb24oR3JhcGgmIGdyYXBo
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3Niw2IEBAIGlubGluZSBD
YXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3
T2JqZWN0OgogICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgUHJvZmlsZWRDYWxsOgotICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6Ci0gICAgICAgIC8v
IFRoZXNlIGFyZSBPSyBub3QgYmVjYXVzZSB0aGUgRlRMIGNhbiBzdXBwb3J0IHRoZW0sIGJ1dCBi
ZWNhdXNlIGlmIHRoZSBERkcgc2VlcyBvbmUgb2YKLSAgICAgICAgLy8gdGhlc2UgdGhlbiB0aGUg
RlRMIHdpbGwgc2VlIGEgbm9ybWFsIENhbGwvQ29uc3RydWN0LgotICAgICAgICBicmVhazsKICAg
ICBjYXNlIElkZW50aXR5OgogICAgICAgICAvLyBObyBiYWNrZW5kIGhhbmRsZXMgdGhpcyBiZWNh
dXNlIGl0IHdpbGwgYmUgb3B0aW1pemVkIG91dC4gQnV0IHdlIG1heSBjaGVjawogICAgICAgICAv
LyBmb3IgY2FwYWJpbGl0aWVzIGJlZm9yZSBvcHRpbWl6YXRpb24uIEl0IHdvdWxkIGJlIGEgZGVl
cCBlcnJvciB0byByZW1vdmUgdGhpcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTMsMTEgKzk5Myw2IEBAIHZvaWQgSGVhcDo6Y29sbGVj
dChIZWFwT3BlcmF0aW9uIGNvbGxlY3QKICAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyTG9nKCkt
PnByb2Nlc3NMb2dFbnRyaWVzKEFTQ0lJTGl0ZXJhbCgiR0MiKSk7CiAgICAgfQogICAgIAotICAg
IGlmICh2bSgpLT5jYWxsRWRnZUxvZykgewotICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGls
ZSgqdGhpcyk7Ci0gICAgICAgIHZtKCktPmNhbGxFZGdlTG9nLT5wcm9jZXNzTG9nKCk7Ci0gICAg
fQotICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2RlZmVycmFsRGVwdGgpOwogICAgIEFTU0VS
VCh2bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBSRUxFQVNFX0FT
U0VSVCh2bSgpLT5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNT
dHJpbmdUYWJsZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmluYXJ5U3dp
dGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CaW5hcnlTd2l0
Y2guaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CaW5h
cnlTd2l0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIC8vICAgICBpbnQgdmFsdWUgPSBzd2l0Y2guY2FzZVZhbHVlKCk7CiAvLyAgICAgdW5zaWdu
ZWQgaW5kZXggPSBzd2l0Y2guY2FzZUluZGV4KCk7IC8vIGluZGV4IGludG8gY2FzZXNWZWN0b3Is
IGFib3ZlCiAvLyAgICAgLi4uIC8vIGdlbmVyYXRlIGNvZGUgZm9yIHRoaXMgY2FzZQorLy8gICAg
IC4uLiA9IGppdC5qdW1wKCk7IC8vIHlvdSBoYXZlIHRvIGp1bXAgb3V0IHlvdXJzZWxmOyBmYWxs
aW5nIHRocm91Z2ggY2F1c2VzIHVuZGVmaW5lZCBiZWhhdmlvcgogLy8gfQogLy8gc3dpdGNoLmZh
bGxUaHJvdWdoKCkubGluaygmaml0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAxNzkyNDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0K
LSNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIlZN
LmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1DbG9zdXJlQ2FsbFN0
dWJSb3V0aW5lOjpDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiYgY29kZSwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLAotICAgIEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlKQotICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUs
IHZtKQotICAgICwgbV9leGVjdXRhYmxlKHZtLCBvd25lciwgZXhlY3V0YWJsZSkKLXsKLX0KLQot
Q2xvc3VyZUNhbGxTdHViUm91dGluZTo6fkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUoKQotewotfQot
Ci12b2lkIENsb3N1cmVDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5h
bChTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICB2aXNpdG9yLmFwcGVuZCgmbV9leGVjdXRh
YmxlKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQot
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1
YlJvdXRpbmUuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIENsb3N1cmVDYWxsU3R1YlJvdXRpbmVfaAotI2RlZmluZSBDbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lX2gKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlT3JpZ2lu
LmgiCi0jaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCi0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1jbGFzcyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lIDogcHVibGljIEdDQXdhcmVKSVRTdHVi
Um91dGluZSB7Ci1wdWJsaWM6Ci0gICAgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKLSAgICAgICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLAot
ICAgICAgICBFeGVjdXRhYmxlQmFzZSopOwotICAgIAotICAgIHZpcnR1YWwgfkNsb3N1cmVDYWxs
U3R1YlJvdXRpbmUoKTsKLSAgICAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZXhlY3V0YWJsZS5nZXQoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJy
aWRlOwotCi1wcml2YXRlOgotICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFzZT4gbV9leGVj
dXRhYmxlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklU
KQotCi0jZW5kaWYgLy8gQ2xvc3VyZUNhbGxTdHViUm91dGluZV9oCi0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAwLDEyICszMDAsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBv
cGNvZGVJCiAKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExp
bmtJbmZvKCk7CiAKLSAgICBpZiAoQ2FsbEVkZ2VMb2c6OmlzRW5hYmxlZCgpICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKQotICAgICAgICAmJiBPcHRpb25zOjpiYXNlbGluZURvZXNDYWxsRWRnZVBy
b2ZpbGluZygpKSB7Ci0gICAgICAgIG1fdm0tPmVuc3VyZUNhbGxFZGdlTG9nKCkuZW1pdExvZ0Nv
ZGUoCi0gICAgICAgICAgICAqdGhpcywgaW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApKTsKLSAgICB9Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9l
dmFsKSB7CiAgICAgICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0cnVjdGlvbik7CiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24g
MTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjE0LDEwICsyMTQsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNv
ZGVJRCBvcGNvZGVJCiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2st
PmFkZENhbGxMaW5rSW5mbygpOwogCi0gICAgaWYgKENhbGxFZGdlTG9nOjppc0VuYWJsZWQoKSAm
JiBzaG91bGRFbWl0UHJvZmlsaW5nKCkKLSAgICAgICAgJiYgT3B0aW9uczo6YmFzZWxpbmVEb2Vz
Q2FsbEVkZ2VQcm9maWxpbmcoKSkKLSAgICAgICAgbV92bS0+ZW5zdXJlQ2FsbEVkZ2VMb2coKS5l
bWl0TG9nQ29kZSgqdGhpcywgaW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdU
MCkpOwotCiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAgICBjb21w
aWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3OTI0MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNzc2LDcgKzc3Niw3IEBAIGlubGluZSBjaGFyKiB2aXJ0dWFsRm9yKAogICAg
IHJldHVybiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIGtpbmQsIHJlZ2lzdGVy
cywgY2FsbGVlQXNGdW5jdGlvbkNlbGxJZ25vcmVkKTsKIH0KIAotc3RhdGljIGJvb2wgYXR0ZW1w
dFRvT3B0aW1pemVDbG9zdXJlQ2FsbCgKK3N0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplUG9s
eW1vcnBoaWNDYWxsKAogICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlIHJlZ2lzdGVycywgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwKICAgICBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKIHsKQEAgLTc4NCwzOCArNzg0LDI0IEBAIHN0YXRp
YyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAogICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2Fs
bGVlQXNGdW5jdGlvbkNlbGwpOwotICAgIEpTRnVuY3Rpb24qIG9sZENhbGxlZSA9IGNhbGxMaW5r
SW5mby5jYWxsZWUuZ2V0KCk7CiAgICAgCi0gICAgaWYgKCFvbGRDYWxsZWUgfHwgb2xkQ2FsbGVl
LT5leGVjdXRhYmxlKCkgIT0gY2FsbGVlLT5leGVjdXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBBU1NFUlQoY2FsbGVlLT5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVG
b3JDYWxsKCkpOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyID0KLSAgICAgICAg
Y2FsbGVlLT5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NG
b3JDYWxsKAotICAgICAgICAgICAgKmV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9j
aygpLT52bSgpLCBjYWxsZWUtPmV4ZWN1dGFibGUoKSwKLSAgICAgICAgICAgIEFyaXR5Q2hlY2tO
b3RSZXF1aXJlZCwgcmVnaXN0ZXJzKTsKLSAgICAKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsK
LSAgICBpZiAoY2FsbGVlLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAg
IGNvZGVCbG9jayA9IDA7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvZGVCbG9jayA9IGpzQ2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihjYWxsZWUtPmV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvckNh
bGwoKTsKKyAgICBpZiAoIWNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKSB7
CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGNhbGxlZS0+ZXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwogICAgICAgICBp
ZiAoZXhlY0NhbGxlZS0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0
PHNpemVfdD4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5jYWxs
VHlwZSA9PSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlw
ZSA9PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3MpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAotICAgIGxpbmtDbG9zdXJlQ2FsbCgKLSAgICAgICAgZXhlY0Nh
bGxlZSwgY2FsbExpbmtJbmZvLCBjb2RlQmxvY2ssIGNhbGxlZS0+ZXhlY3V0YWJsZSgpLCBjb2Rl
UHRyLCByZWdpc3RlcnMpOworICAgIGxpbmtQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwgY2Fs
bExpbmtJbmZvLCBDYWxsVmFyaWFudChjYWxsZWUpLCByZWdpc3RlcnMpOwogICAgIAogICAgIHJl
dHVybiB0cnVlOwogfQogCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJl
Q2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQor
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCiB7CiAgICAgSlNDZWxs
KiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKICAgICBjaGFyKiByZXN1bHQgPSB2aXJ0dWFsRm9yV2l0
aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5v
dFJlcXVpcmVkLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAKLSAgICBpZiAoIWF0dGVtcHRUb09w
dGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1
aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8pKQorICAgIGlmICghYXR0
ZW1wdFRvT3B0aW1pemVQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8pKQog
ICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2Fs
bCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgCiAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTgzMSwxMiArODE3LDEyIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
VmlydHVhbENvbnMKICAgICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29u
c3RydWN0LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAotY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVj
U3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQorY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3Mo
RXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKICAg
ICBKU0NlbGwqIGNhbGxlZUFzRnVuY3Rpb25DZWxsOwogICAgIGNoYXIqIHJlc3VsdCA9IHZpcnR1
YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJl
Z2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGwpOwogCi0gICAgaWYgKCFhdHRlbXB0VG9PcHRp
bWl6ZUNsb3N1cmVDYWxsKGV4ZWNDYWxsZWUsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVl
QXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8pKQorICAgIGlmICghYXR0ZW1wdFRvT3B0aW1p
emVQb2x5bW9ycGhpY0NhbGwoZXhlY0NhbGxlZSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzLCBjYWxs
ZWVBc0Z1bmN0aW9uQ2VsbCwgKmNhbGxMaW5rSW5mbykpCiAgICAgICAgIGxpbmtTbG93Rm9yKGV4
ZWNDYWxsZWUsICpjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCBNdXN0UHJlc2VydmVSZWdpc3Rl
cnMpOwogICAgIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMDMzLDYgKzEwMTksMTAgQEAgU2xv
d1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgIERlZmVyR0NGb3JBV2hp
bGUgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4
ZWMtPmNvZGVCbG9jaygpOworICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2Rl
OjpCYXNlbGluZUpJVCkgeworICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sg
aW4gQmFzZWxpbmUtPkRGRyB0aWVyLXVwOiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiAgICAgCiAgICAgaWYgKGJ5dGVj
b2RlSW5kZXgpIHsKICAgICAgICAgLy8gSWYgd2UncmUgYXR0ZW1wdGluZyB0byBPU1IgZnJvbSBh
IGxvb3AsIGFzc3VtZSB0aGF0IHRoaXMgc2hvdWxkIGJlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Niwx
MiArMjQ2LDEyIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEdlbmUKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lO
VEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsRXZhbChF
eGVjU3RhdGUqLCBFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkxpbmtDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5B
TDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0
ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZf
SU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNT
dGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZf
SU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhl
Y1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElP
TiBvcGVyYXRpb25MaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5r
SW5mbyopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Ns
b3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RG
X0lOVEVSTkFMOworY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWND
YWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVS
TkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2
ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4
ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTGlua0NvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENh
bGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKQEAgLTM5MSwxMyArMzkxLDEzIEBAIGlubGluZSBQ
X0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvblZpcnQKICAgICByZXR1cm4gMDsKIH0KIAotaW5s
aW5lIFBfSklUT3BlcmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsRm9yKFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNs
aSBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9k
ZSByZWdpc3RlcnMpCiB7CiAgICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKICAgICBjYXNlIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5r
Q2xvc3VyZUNhbGw7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxs
OwogICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAgIHJldHVybiBvcGVy
YXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CiAgICAgfQogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAxNzkyNDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MSw2ICsxNDEsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB5b3UgYXJlIHN0aWxsIHZhbGlkIGFmdGVy
LiBSZXR1cm4gZmFsc2UgaWYgeW91IGFyZSBub3cgaW52YWxpZC4gSWYgeW91IHJldHVybgorICAg
IC8vIGZhbHNlLCB5b3Ugd2lsbCB1c3VhbGx5IG5vdCBkbyBhbnkgY2xlYXJpbmcgYmVjYXVzZSB0
aGUgaWRlYSBpcyB0aGF0IHlvdSB3aWxsIHNpbXBseSBiZQorICAgIC8vIGRlc3Ryb3llZC4KICAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImKTsKIAogcHJvdGVjdGVkOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCShyZXZp
c2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXIuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50
ZXIuaCIKKyNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lLmgiCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUG9seW1vcnBoaWNDYWxsTm9kZTo6flBv
bHltb3JwaGljQ2FsbE5vZGUoKQoreworICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICByZW1v
dmUoKTsKK30KKwordm9pZCBQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmsoUmVwYXRjaEJ1ZmZl
ciYgcmVwYXRjaEJ1ZmZlcikKK3sKKyAgICBpZiAoT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkp
CisgICAgICAgIGRhdGFMb2coIlVubGlua2luZyBwb2x5bW9ycGhpYyBjYWxsIGF0ICIsIG1fY2Fs
bExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24sICIsICIsIG1fY2FsbExpbmtJbmZvLT5jb2Rl
T3JpZ2luLCAiXG4iKTsKKyAgICAKKyAgICBtX2NhbGxMaW5rSW5mby0+dW5saW5rKHJlcGF0Y2hC
dWZmZXIpOworICAgIAorICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICByZW1vdmUoKTsKK30K
Kwordm9pZCBQb2x5bW9ycGhpY0NhbGxDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KCI8dmFyaWFudCA9ICIsIG1fdmFyaWFudCwgIiwgY29kZUJsb2Nr
ID0gIiwgcG9pbnRlckR1bXAobV9jb2RlQmxvY2spLCAiPiIpOworfQorCitQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZTo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCisgICAgY29uc3QgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlUmVmLCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIs
IEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsCisgICAgQ2FsbExpbmtJbmZvJiBpbmZvLCBjb25zdCBW
ZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4mIGNhc2VzLAorICAgIHN0ZDo6dW5pcXVlX3B0cjx1
aW50MzJfdFtdPiBmYXN0Q291bnRzKQorICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGVS
ZWYsIHZtKQorICAgICwgbV9mYXN0Q291bnRzKHN0ZDo6bW92ZShmYXN0Q291bnRzKSkKK3sKKyAg
ICBmb3IgKFBvbHltb3JwaGljQ2FsbENhc2UgY2FsbENhc2UgOiBjYXNlcykgeworICAgICAgICBt
X3ZhcmlhbnRzLmFwcGVuZChXcml0ZUJhcnJpZXI8SlNDZWxsPih2bSwgb3duZXIsIGNhbGxDYXNl
LnZhcmlhbnQoKS5yYXdDYWxsZWVDZWxsKCkpKTsKKyAgICAgICAgaWYgKHNob3VsZFNob3dEaXNh
c3NlbWJseUZvcihjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCkpKQorICAgICAgICAgICAgZGF0YUxv
ZygiTGlua2luZyBwb2x5bW9ycGhpYyBjYWxsIGluICIsICpjYWxsZXJGcmFtZS0+Y29kZUJsb2Nr
KCksICIgYXQgIiwgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSwgIiB0byAiLCBjYWxsQ2FzZS52
YXJpYW50KCksICIsIGNvZGVCbG9jayA9ICIsIHBvaW50ZXJEdW1wKGNhbGxDYXNlLmNvZGVCbG9j
aygpKSwgIlxuIik7CisgICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxDYXNl
LmNvZGVCbG9jaygpKQorICAgICAgICAgICAgY29kZUJsb2NrLT5saW5rSW5jb21pbmdQb2x5bW9y
cGhpY0NhbGwoY2FsbGVyRnJhbWUsIG1fY2FsbE5vZGVzLmFkZCgmaW5mbykpOworICAgIH0KKyAg
ICBtX3ZhcmlhbnRzLnNocmlua1RvRml0KCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
K30KKworUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6On5Qb2x5bW9ycGhpY0NhbGxTdHViUm91
dGluZSgpIHsgfQorCitDYWxsVmFyaWFudExpc3QgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6
OnZhcmlhbnRzKCkgY29uc3QKK3sKKyAgICBDYWxsVmFyaWFudExpc3QgcmVzdWx0OworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChDYWxsVmFyaWFudChtX3ZhcmlhbnRzW2ldLmdldCgpKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworQ2FsbEVkZ2VMaXN0IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjpl
ZGdlcygpIGNvbnN0Cit7CisgICAgLy8gV2Ugd291bGRuJ3QgaGF2ZSB0aGVzZSBpZiB0aGlzIHdh
cyBhbiBGVEwgc3R1YiByb3V0aW5lLiBXZSBzaG91bGRuJ3QgYmUgYXNraW5nIGZvciBwcm9maWxp
bmcKKyAgICAvLyBmcm9tIHRoZSBGVEwuCisgICAgUkVMRUFTRV9BU1NFUlQobV9mYXN0Q291bnRz
KTsKKyAgICAKKyAgICBDYWxsRWRnZUxpc3QgcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChDYWxs
RWRnZShDYWxsVmFyaWFudChtX3ZhcmlhbnRzW2ldLmdldCgpKSwgbV9mYXN0Q291bnRzW2ldKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZTo6dmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImKQoreworICAgIGZvciAoYXV0byYgdmFyaWFudCA6
IG1fdmFyaWFudHMpIHsKKyAgICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCh2YXJpYW50LmdldCgp
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKGF1dG8mIHZhcmlhbnQg
OiBtX3ZhcmlhbnRzKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdmFyaWFudCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHlt
b3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmVfaAor
I2RlZmluZSBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZV9oCisKKyNpZiBFTkFCTEUoSklUKQor
CisjaW5jbHVkZSAiQ2FsbEVkZ2UuaCIKKyNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgorI2luY2x1
ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDYWxs
TGlua0luZm87CisKK2NsYXNzIFBvbHltb3JwaGljQ2FsbE5vZGUgOiBwdWJsaWMgQmFzaWNSYXdT
ZW50aW5lbE5vZGU8UG9seW1vcnBoaWNDYWxsTm9kZT4geworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFBvbHltb3JwaGljQ2FsbE5vZGUpOworcHVibGljOgorICAgIFBvbHltb3JwaGljQ2FsbE5v
ZGUoQ2FsbExpbmtJbmZvKiBpbmZvKQorICAgICAgICA6IG1fY2FsbExpbmtJbmZvKGluZm8pCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB+UG9seW1vcnBoaWNDYWxsTm9kZSgpOworICAgIAorICAg
IHZvaWQgdW5saW5rKFJlcGF0Y2hCdWZmZXImKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQ2FsbExp
bmtJbmZvKiBtX2NhbGxMaW5rSW5mbzsKK307CisKK2NsYXNzIFBvbHltb3JwaGljQ2FsbENhc2Ug
eworcHVibGljOgorICAgIFBvbHltb3JwaGljQ2FsbENhc2UoKQorICAgICAgICA6IG1fY29kZUJs
b2NrKG51bGxwdHIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQb2x5bW9ycGhpY0NhbGxDYXNl
KENhbGxWYXJpYW50IHZhcmlhbnQsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICA6IG1f
dmFyaWFudCh2YXJpYW50KQorICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICB7
CisgICAgfQorICAgIAorICAgIENhbGxWYXJpYW50IHZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBt
X3ZhcmlhbnQ7IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZUJsb2NrOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgCitwcml2YXRlOgorICAgIENhbGxWYXJpYW50IG1fdmFyaWFudDsKKyAgICBDb2RlQmxvY2sq
IG1fY29kZUJsb2NrOworfTsKKworY2xhc3MgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUgOiBw
dWJsaWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKK3B1YmxpYzoKKyAgICBQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZSgKKyAgICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0m
LCBjb25zdCBKU0NlbGwqIG93bmVyLAorICAgICAgICBFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBD
YWxsTGlua0luZm8mLCBjb25zdCBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4mLAorICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8dWludDMyX3RbXT4gZmFzdENvdW50cyk7CisgICAgCisgICAgdmly
dHVhbCB+UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoKTsKKyAgICAKKyAgICBDYWxsVmFyaWFu
dExpc3QgdmFyaWFudHMoKSBjb25zdDsKKyAgICBDYWxsRWRnZUxpc3QgZWRnZXMoKSBjb25zdDsK
KyAgICAKKyAgICBib29sIHZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJikgb3ZlcnJpZGU7CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFdyaXRlQmFycmll
cjxKU0NlbGw+LCAyPiBtX3ZhcmlhbnRzOworICAgIHN0ZDo6dW5pcXVlX3B0cjx1aW50MzJfdFtd
PiBtX2Zhc3RDb3VudHM7CisgICAgQmFnPFBvbHltb3JwaGljQ2FsbE5vZGU+IG1fY2FsbE5vZGVz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisj
ZW5kaWYgLy8gUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRp
bmUuaCIKKyNpbmNsdWRlICJCaW5hcnlTd2l0Y2guaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMu
aCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVK
SVQuaCIKQEAgLTE1OTIsMTAgKzE1OTMsNiBAQCB2b2lkIGxpbmtGb3IoCiAgICAgCiAgICAgQ29k
ZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2so
KTsKIAotICAgIC8vIElmIHlvdSdyZSBiZWluZyBjYWxsLWxpbmtlZCBmcm9tIGEgREZHIGNhbGxl
ciB0aGVuIHlvdSBvYnZpb3VzbHkgZGlkbid0IGdldCBpbmxpbmVkLgotICAgIGlmIChjYWxsZWVD
b2RlQmxvY2sgJiYgSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGNhbGxlckNvZGVCbG9jay0+aml0
VHlwZSgpKSkKLSAgICAgICAgY2FsbGVlQ29kZUJsb2NrLT5tX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCA9IGZhbHNlOwotICAgIAogICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKICAg
ICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKQEAg
LTE2MTEsNyArMTYwOCw3IEBAIHZvaWQgbGlua0ZvcigKICAgICAgICAgY2FsbGVlQ29kZUJsb2Nr
LT5saW5rSW5jb21pbmdDYWxsKGV4ZWMtPmNhbGxlckZyYW1lKCksICZjYWxsTGlua0luZm8pOwog
ICAgIAogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHVi
KGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9yKHJlZ2lzdGVycykpLmNvZGUoKSk7Cisg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIHZtLT5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvckZvcihy
ZWdpc3RlcnMpKS5jb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApAQCAtMTYz
MSwxMiArMTYyOCwyMiBAQCB2b2lkIGxpbmtTbG93Rm9yKAogICAgIGxpbmtTbG93Rm9yKHJlcGF0
Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGtpbmQsIHJlZ2lzdGVycyk7CiB9CiAKLXZvaWQg
bGlua0Nsb3N1cmVDYWxsKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCAKLSAgICBFeGVjdXRhYmxlQmFz
ZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIsCituYW1lc3BhY2Ug
eworc3RydWN0IENhbGxUb0NvZGVQdHIgeworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyOworfTsKK30gLy8gYW5ub255bW91cyBu
YW1lc3BhY2UKKwordm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENhbGxWYXJpYW50IG5ld1ZhcmlhbnQsCiAg
ICAgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKLSAgICBBU1NFUlQoIWNh
bGxMaW5rSW5mby5zdHViKTsKKyAgICAvLyBDdXJyZW50bHksIHdlIHdpbGwgbmV2ZXIgc2VlIGEg
bm9uLWZ1bmN0aW9uIHZhcmlhbnQsIHNpbmNlIHRoYXQncyBob3cgSklUT3BlcmF0aW9ucy5jcHAK
KyAgICAvLyBoYW5kbGVzIGl0LiBBbHNvLCB3ZSB3b3VsZG4ndCBiZSBhYmxlIHRvIGRvIGFueXRo
aW5nIHdpdGggbm9uLWZ1bmN0aW9uIGNhbGxlZXMgYmVjYXVzZSB3ZQorICAgIC8vIGp1c3QgZG9u
J3QgaGF2ZSB0aGF0IGZ1bmN0aW9uYWxpdHksIHlldC4gVGhhdCdzIHdvcnRoIGZpeGluZy4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwNjg1CisgICAg
UkVMRUFTRV9BU1NFUlQobmV3VmFyaWFudC5leGVjdXRhYmxlKCkpOwogICAgIAogICAgIENvZGVC
bG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7
CiAgICAgVk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwpAQCAtMTY1NSwzMyArMTY2Miwx
MjUgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCiAgICAgICAgIHN0dWJKaXQuYWJvcnRXaXRoUmVh
c29uKFJlcGF0Y2hJbnNhbmVBcmd1bWVudENvdW50KTsKICAgICAgICAgb2tBcmd1bWVudENvdW50
LmxpbmsoJnN0dWJKaXQpOwogICAgIH0KKyAgICAKKyAgICBDYWxsVmFyaWFudExpc3QgbGlzdDsK
KyAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8u
c3R1Yi5nZXQoKSkKKyAgICAgICAgbGlzdCA9IHN0dWItPnZhcmlhbnRzKCk7CisgICAgZWxzZSBp
ZiAoSlNGdW5jdGlvbiogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZvLmNhbGxlZS5nZXQoKSkKKyAg
ICAgICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdHtDYWxsVmFyaWFudChvbGRDYWxsZWUpfTsKKyAg
ICAKKyAgICBsaXN0ID0gdmFyaWFudExpc3RXaXRoVmFyaWFudChsaXN0LCBuZXdWYXJpYW50KTsK
KworICAgIC8vIFdlIHNob3VsZCBoYXZlIGxpbmtlZCB0aGUgc2xvdyBwYXRoIHRvIHRoZSB2aXJ0
dWFsIGNhbGwgdGh1bmsgaWYgd2Ugd2VyZSBhcHByb2FjaGluZyB0aGUKKyAgICAvLyBsaW1pdC4K
KyAgICBBU1NFUlQobGlzdC5zaXplKCkgPD0gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNDYWxsVmFy
aWFudExpc3RTaXplKCkpOworICAgIAorICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY2xvc3VyZSBj
YWxscyB0aGVuIGl0IG1ha2VzIHNlbnNlIHRvIHRyZWF0IGFsbCBvZiB0aGVtIGFzIGNsb3N1cmUg
Y2FsbHMuCisgICAgLy8gVGhpcyBtYWtlcyBzd2l0Y2hpbmcgb24gY2FsbGVlIGNoZWFwZXIuIEl0
IGFsc28gcHJvZHVjZXMgcHJvZmlsaW5nIHRoYXQncyBlYXNpZXIgb24gdGhlIERGRzsKKyAgICAv
LyB0aGUgREZHIGRvZXNuJ3QgcmVhbGx5IHdhbnQgdG8gZGVhbCB3aXRoIGEgY29tYmluYXRpb24g
b2YgY2xvc3VyZSBhbmQgbm9uLWNsb3N1cmUgY2FsbGVlcy4KKyAgICBib29sIGlzQ2xvc3VyZUNh
bGwgPSBmYWxzZTsKKyAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KSAgeworICAg
ICAgICBpZiAodmFyaWFudC5pc0Nsb3N1cmVDYWxsKCkpIHsKKyAgICAgICAgICAgIGxpc3QgPSBk
ZXNwZWNpZmllZFZhcmlhbnRMaXN0KGxpc3QpOworICAgICAgICAgICAgaXNDbG9zdXJlQ2FsbCA9
IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBH
UFJSZWcgc2NyYXRjaCA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVH
UFIpOworICAgIEdQUlJlZyBjb21wYXJpc29uVmFsdWVHUFI7CisgICAgCisgICAgaWYgKGlzQ2xv
c3VyZUNhbGwpIHsKKyAgICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9uIGFu
ZCBzdGFzaCB0aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNoLgogCiAjaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICAvLyBXZSBjYW4gc2FmZWx5IGNsb2JiZXIgZXZlcnl0aGluZyBleGNlcHQgdGhlIGNhbGxl
ZUdQUi4gV2UgY2FuJ3QgcmVseSBvbiB0YWdNYXNrUmVnaXN0ZXIKLSAgICAvLyBiZWluZyBzZXQu
IFNvIHdlIGRvIHRoaXMgdGhlIGhhcmQgd2F5LgotICAgIEdQUlJlZyBzY3JhdGNoID0gQXNzZW1i
bHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUik7Ci0gICAgc3R1YkppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIHNjcmF0Y2gpOwotICAgIHNs
b3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8s
IGNhbGxlZUdQUiwgc2NyYXRjaCkpOworICAgICAgICAvLyBXZSBjYW4gc2FmZWx5IGNsb2JiZXIg
ZXZlcnl0aGluZyBleGNlcHQgdGhlIGNhbGxlZUdQUi4gV2UgY2FuJ3QgcmVseSBvbiB0YWdNYXNr
UmVnaXN0ZXIKKyAgICAgICAgLy8gYmVpbmcgc2V0LiBTbyB3ZSBkbyB0aGlzIHRoZSBoYXJkIHdh
eS4KKyAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFn
TWFzayksIHNjcmF0Y2gpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hU
ZXN0NjQoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVHUFIsIHNjcmF0Y2gpKTsKICNlbHNl
Ci0gICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlz
IGEgY2VsbC4KKyAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0
aGUgY2FsbGVlIGlzIGEgY2VsbC4KICNlbmRpZgogICAgIAotICAgIHNsb3dQYXRoLmFwcGVuZCgK
LSAgICAgICAgc3R1YkppdC5icmFuY2g4KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoSlNGdW5jdGlvblR5cGUpKSk7Ci0gICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKAot
ICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgICAgIHN0dWJKaXQuYnJh
bmNoOCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTRnVuY3Rpb25UeXBlKSkpOworICAgIAorICAgICAgICBzdHViSml0LmxvYWRQdHIoCiAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZz
ZXRPZkV4ZWN1dGFibGUoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoZXhlY3V0YWJsZSkpKTsKKyAgICAgICAgICAgIHNjcmF0Y2gpOworICAgICAgICAKKyAgICAg
ICAgY29tcGFyaXNvblZhbHVlR1BSID0gc2NyYXRjaDsKKyAgICB9IGVsc2UKKyAgICAgICAgY29t
cGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOworICAgIAorICAgIFZlY3RvcjxQb2x5bW9ycGhp
Y0NhbGxDYXNlPiBjYWxsQ2FzZXM7CisgICAgCisgICAgLy8gRmlndXJlIG91dCB3aGF0IG91ciBj
YXNlcyBhcmUuCisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgeworICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgp
LT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICAgICAgY29kZUJsb2NrID0gbnVsbHB0cjsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVj
dXRhYmxlKj4odmFyaWFudC5leGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHJlcGVhdHMgYSBjaGVjayBp
biBKSVRPcGVyYXRpb25zLmNwcC4gVGhhdCdzIGJlY2F1c2Ugd2UgbWF5IGFsc28gc2VlCisgICAg
ICAgICAgICAvLyBhIHZhcmlhbnQgZnJvbSB0aGUgb3JpZ2luYWwgbW9ub21vcnBoaWMgY2FjaGUs
IHdoaWNoIGlzbid0IGFzIHN0cmljdC4KKyAgICAgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2Fs
bFZhcmFyZ3MgfHwgY2FsbExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3Ry
dWN0VmFyYXJncykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgY2FsbENhc2VzLmFwcGVuZChQb2x5bW9ycGhpY0NhbGxDYXNlKHZhcmlhbnQs
IGNvZGVCbG9jaykpOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVl
cyhjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8Q2FsbFRvQ29kZVB0cj4gY2FsbHMoY2Fs
bENhc2VzLnNpemUoKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQzMl90W10+IGZhc3RDb3Vu
dHM7CisgICAgCisgICAgaWYgKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6
OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZmFzdENvdW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8dWlu
dDMyX3RbXT4oY2FsbENhc2VzLnNpemUoKSk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IGNh
bGxDYXNlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKGZhc3RDb3VudHMpCisgICAgICAg
ICAgICBmYXN0Q291bnRzW2ldID0gMDsKKyAgICAgICAgCisgICAgICAgIENhbGxWYXJpYW50IHZh
cmlhbnQgPSBjYWxsQ2FzZXNbaV0udmFyaWFudCgpOworICAgICAgICBpZiAoaXNDbG9zdXJlQ2Fs
bCkKKyAgICAgICAgICAgIGNhc2VWYWx1ZXNbaV0gPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZh
cmlhbnQuZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FzZVZhbHVl
c1tpXSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFyaWFudC5mdW5jdGlvbigpKTsKKyAgICB9
CiAgICAgCi0gICAgQXNzZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBzdHViSml0Lm5lYXJDYWxs
KCk7Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGRvbmUgPSBzdHViSml0Lmp1bXAoKTsKKyAg
ICBHUFJSZWcgZmFzdENvdW50c0Jhc2VHUFIgPQorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnNl
bGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSLCBjb21wYXJpc29uVmFsdWVHUFIsIEdQUkluZm86OnJl
Z1QzKTsKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGZhc3RD
b3VudHMuZ2V0KCkpLCBmYXN0Q291bnRzQmFzZUdQUik7CisgICAgCisgICAgQmluYXJ5U3dpdGNo
IGJpbmFyeVN3aXRjaChjb21wYXJpc29uVmFsdWVHUFIsIGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRj
aDo6SW50UHRyKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisgICAgd2hpbGUg
KGJpbmFyeVN3aXRjaC5hZHZhbmNlKHN0dWJKaXQpKSB7CisgICAgICAgIHNpemVfdCBjYXNlSW5k
ZXggPSBiaW5hcnlTd2l0Y2guY2FzZUluZGV4KCk7CisgICAgICAgIAorICAgICAgICBDYWxsVmFy
aWFudCB2YXJpYW50ID0gY2FsbENhc2VzW2Nhc2VJbmRleF0udmFyaWFudCgpOworICAgICAgICAK
KyAgICAgICAgQVNTRVJUKHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgp
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPQorICAgICAgICAgICAg
dmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NG
b3JDYWxsKAorICAgICAgICAgICAgICAgICp2bSwgdmFyaWFudC5leGVjdXRhYmxlKCksIEFyaXR5
Q2hlY2tOb3RSZXF1aXJlZCwgcmVnaXN0ZXJzKTsKKyAgICAgICAgCisgICAgICAgIGlmIChmYXN0
Q291bnRzKSB7CisgICAgICAgICAgICBzdHViSml0LmFkZDMyKAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhmYXN0Q291bnRzQmFzZUdQUiwgY2FzZUluZGV4ICogc2l6ZW9mKHVpbnQzMl90
KSkpOworICAgICAgICB9CisgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQu
bmVhckNhbGwoKTsKKyAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jb2RlUHRyID0gY29kZVB0cjsK
KyAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOworICAgIH0KICAgICAKICAgICBz
bG93UGF0aC5saW5rKCZzdHViSml0KTsKKyAgICBiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKS5s
aW5rKCZzdHViSml0KTsKICAgICBzdHViSml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdU
MCk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKQEAgLTE2
OTEsMjMgKzE3OTAsMzEgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCiAgICAgCiAgICAgc3R1Ykpp
dC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CiAgICAg
QXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAKKyAgICAg
ICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNhbGxlckNvZGVC
bG9jayk7CiAgICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2Rl
UHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsQ2FzZXMu
c2l6ZSgpID09IGNhbGxzLnNpemUoKSk7CisgICAgZm9yIChDYWxsVG9Db2RlUHRyIGNhbGxUb0Nv
ZGVQdHIgOiBjYWxscykgeworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKAorICAgICAgICAgICAg
Y2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cihjYWxsVG9Db2RlUHRyLmNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOworICAgIH0KICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkp
OwogICAgIGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8u
aG90UGF0aE90aGVyLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
dywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIodmlydHVhbFRodW5rR2VuZXJhdG9y
Rm9yKENvZGVGb3JDYWxsLCByZWdpc3RlcnMpKS5jb2RlKCkpKTsKKyAgICBpZiAoY2FsbENhc2Vz
LnNpemUoKSA9PSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUoKSkK
KyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0
Q1RJU3R1Yih2aXJ0dWFsVGh1bmtHZW5lcmF0b3JGb3IoQ29kZUZvckNhbGwsIHJlZ2lzdGVycykp
LmNvZGUoKSkpOworICAgIGVsc2UKKyAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2Rl
TG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJU3R1YihsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5l
cmF0b3JGb3IocmVnaXN0ZXJzKSkuY29kZSgpKSk7CiAgICAgCi0gICAgUmVmUHRyPENsb3N1cmVD
YWxsU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IENsb3N1cmVDYWxsU3R1
YlJvdXRpbmUoCisgICAgUmVmUHRyPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91
dGluZSA9IGFkb3B0UmVmKG5ldyBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKICAgICAgICAg
RklOQUxJWkVfQ09ERV9GT1IoCiAgICAgICAgICAgICBjYWxsZXJDb2RlQmxvY2ssIHBhdGNoQnVm
ZmVyLAotICAgICAgICAgICAgKCJDbG9zdXJlIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCwgdGFyZ2V0ICVwICglcykiLAorICAgICAgICAgICAgKCJQb2x5bW9ycGhpYyBjYWxsIHN0
dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldHMgJXMiLAogICAgICAgICAgICAgICAg
IHRvQ1N0cmluZygqY2FsbGVyQ29kZUJsb2NrKS5kYXRhKCksIGNhbGxMaW5rSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAg
ICAgICAgICAgIGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSwgdG9DU3RyaW5nKHBvaW50ZXJE
dW1wKGNhbGxlZUNvZGVCbG9jaykpLmRhdGEoKSkpLAotICAgICAgICAqdm0sIGNhbGxlckNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWN1dGFibGUpKTsKKyAgICAgICAgICAgICB0b0NT
dHJpbmcobGlzdER1bXAoY2FsbENhc2VzKSkuZGF0YSgpKSksCisgICAgICAgICp2bSwgY2FsbGVy
Q29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYy0+Y2FsbGVyRnJhbWUoKSwgY2FsbExp
bmtJbmZvLCBjYWxsQ2FzZXMsCisgICAgICAgIHN0ZDo6bW92ZShmYXN0Q291bnRzKSkpOwogICAg
IAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwogICAg
IApAQCAtMTcxNiw5ICsxODIzLDE0IEBAIHZvaWQgbGlua0Nsb3N1cmVDYWxsKAogICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwogICAgIGxpbmtT
bG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCByZWdp
c3RlcnMpOwogICAgIAorICAgIC8vIElmIHRoZXJlIGhhZCBiZWVuIGEgcHJldmlvdXMgc3R1YiBy
b3V0aW5lLCB0aGF0IG9uZSB3aWxsIGRpZSBhcyBzb29uIGFzIHRoZSBHQyBydW5zIGFuZCBzZWVz
CisgICAgLy8gdGhhdCBpdCdzIG5vIGxvbmdlciBvbiBzdGFjay4KICAgICBjYWxsTGlua0luZm8u
c3R1YiA9IHN0dWJSb3V0aW5lLnJlbGVhc2UoKTsKICAgICAKLSAgICBBU1NFUlQoIWNhbGxlZUNv
ZGVCbG9jayB8fCBjYWxsZWVDb2RlQmxvY2stPmlzSW5jb21pbmdDYWxsQWxyZWFkeUxpbmtlZCgm
Y2FsbExpbmtJbmZvKSk7CisgICAgLy8gVGhlIGNhbGwgbGluayBpbmZvIG5vIGxvbmdlciBoYXMg
YSBjYWxsIGNhY2hlIGFwYXJ0IGZyb20gdGhlIGp1bXAgdG8gdGhlIHBvbHltb3JwaGljIGNhbGwK
KyAgICAvLyBzdHViLgorICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkKKyAgICAgICAg
Y2FsbExpbmtJbmZvLnJlbW92ZSgpOwogfQogCiB2b2lkIHJlc2V0R2V0QnlJRChSZXBhdGNoQnVm
ZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcg
QEAKICNpZiBFTkFCTEUoSklUKQogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVk
ZSAiQ2FsbFZhcmlhbnQuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgewpAQCAtNDEsNyArNDIsNyBAQCB2b2lkIGJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRl
KiwgSlNWYWx1CiB2b2lkIHJlcGF0Y2hJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVu
dGlmaWVyJiwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1
YkluZm8mKTsKIHZvaWQgbGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxv
Y2sqLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKTsKIHZvaWQgbGlua1Nsb3dG
b3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKTsKLXZvaWQgbGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSos
IENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwordm9pZCBsaW5rUG9seW1vcnBo
aWNDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50LCBSZWdpc3RlclBy
ZXNlcnZhdGlvbk1vZGUpOwogdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVj
dHVyZVN0dWJJbmZvJik7CiB2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0
dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1
YkluZm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDI3ICsxMzcsMjcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaGF0UAogICAgIHJldHVybiBsaW5r
Rm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lz
dGVycyk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxs
Rm9yVGh1bmtHZW5lcmF0b3IoCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5
bW9ycGhpY0NhbGxGb3JUaHVua0dlbmVyYXRvcigKICAgICBWTSogdm0sIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAg
Ci0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsRm9yKHJl
Z2lzdGVycykpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtQb2x5bW9y
cGhpY0NhbGxGb3IocmVnaXN0ZXJzKSk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShw
YXRjaEJ1ZmZlciwgKCJMaW5rIGNsb3N1cmUgY2FsbCAlcyBzbG93IHBhdGggdGh1bmsiLCByZWdp
c3RlcnMgPT0gTXVzdFByZXNlcnZlUmVnaXN0ZXJzID8gIiB0aGF0IHByZXNlcnZlcyByZWdpc3Rl
cnMiIDogIiIpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5r
IHBvbHltb3JwaGljIGNhbGwgJXMgc2xvdyBwYXRoIHRodW5rIiwgcmVnaXN0ZXJzID09IE11c3RQ
cmVzZXJ2ZVJlZ2lzdGVycyA/ICIgdGhhdCBwcmVzZXJ2ZXMgcmVnaXN0ZXJzIiA6ICIiKSk7CiB9
CiAKIC8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywg
c2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgogLy8gb2JqZWN0IGNvbnN0cnVjdGlv
biB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4KLU1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
IHsKLSAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworICAgIHJldHVybiBsaW5rUG9seW1vcnBoaWND
YWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZl
c1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1Bv
bHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewot
ICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcih2bSwgTXVzdFByZXNl
cnZlUmVnaXN0ZXJzKTsKKyAgICByZXR1cm4gbGlua1BvbHltb3JwaGljQ2FsbEZvclRodW5rR2Vu
ZXJhdG9yKHZtLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOwogfQogCiBzdGF0aWMgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMTc5MjQyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNjUsMTYgKzY1LDE2IEBAIGlubGluZSBUaHVua0dlbmVyYXRvciBsaW5rVGh1bmtHZW5l
cmF0b3IKICAgICByZXR1cm4gMDsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9z
dXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Ns
b3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSopOworTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaGF0UHJlc2VydmVzUmVnc1Ro
dW5rR2VuZXJhdG9yKFZNKik7CiAKLWlubGluZSBUaHVua0dlbmVyYXRvciBsaW5rQ2xvc3VyZUNh
bGxUaHVua0dlbmVyYXRvckZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQor
aW5saW5lIFRodW5rR2VuZXJhdG9yIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvckZv
cihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIHN3aXRjaCAocmVn
aXN0ZXJzKSB7CiAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgotICAg
ICAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3I7CisgICAgICAgIHJldHVy
biBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3I7CiAgICAgY2FzZSBNdXN0UHJlc2Vy
dmVSZWdpc3RlcnM6Ci0gICAgICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yOworICAgICAgICByZXR1cm4gbGlua1BvbHltb3JwaGljQ2FsbFRo
YXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzMiw2ICszMzIsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlz
dGljcyhDCiAgICAgICAgIH0KICAgICB9CiAgICAgZGVmYXVsdDoKKyAgICAgICAgZGF0YUxvZygi
VW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJl
dmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEyICsxNzAsMTAgQEAgdHlwZWRlZiBjb25zdCBjaGFy
KiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudERldmlydHVhbGl6
YXRpb24sIHRydWUpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHltb3JwaGljQWNjZXNzSW5saW5p
bmcsIHRydWUpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5nLCB0
cnVlKSBcCi0gICAgdihib29sLCBjYWxsU3RhdHVzU2hvdWxkVXNlQ2FsbEVkZ2VQcm9maWxlLCB0
cnVlKSBcCi0gICAgdihib29sLCBjYWxsRWRnZVByb2ZpbGVSZWFsbHlQcm9jZXNzZXNMb2csIHRy
dWUpIFwKLSAgICB2KGJvb2wsIGJhc2VsaW5lRG9lc0NhbGxFZGdlUHJvZmlsaW5nLCBmYWxzZSkg
XAotICAgIHYoYm9vbCwgZGZnRG9lc0NhbGxFZGdlUHJvZmlsaW5nLCB0cnVlKSBcCi0gICAgdihi
b29sLCBlbmFibGVDYWxsRWRnZVByb2ZpbGluZywgdHJ1ZSkgXAorICAgIHYodW5zaWduZWQsIG1h
eFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSwgMTUpIFwKKyAgICB2KHVuc2lnbmVkLCBt
YXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50c0ZvcklubGluaW5nLCA1KSBcCiAgICAgdih1bnNpZ25l
ZCwgZnJlcXVlbnRDYWxsVGhyZXNob2xkLCAyKSBcCisgICAgdihkb3VibGUsIG1pbmltdW1DYWxs
VG9Lbm93blJhdGUsIDAuNTEpIFwKICAgICB2KGJvb2wsIG9wdGltaXplTmF0aXZlQ2FsbHMsIGZh
bHNlKSBcCiAgICAgdihib29sLCBlbmFibGVPYmplY3RBbGxvY2F0aW9uU2lua2luZywgdHJ1ZSkg
XAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9u
IDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzY5LDEzICszNjksNiBAQCBWTSomIFZNOjpzaGFyZWRJbnN0YW5jZUludGVy
bmFsKCkKICAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7CiB9CiAKLUNhbGxFZGdlTG9nJiBWTTo6
ZW5zdXJlQ2FsbEVkZ2VMb2coKQotewotICAgIGlmICghY2FsbEVkZ2VMb2cpCi0gICAgICAgIGNh
bGxFZGdlTG9nID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsRWRnZUxvZz4oKTsKLSAgICByZXR1cm4g
KmNhbGxFZGdlTG9nOwotfQotCiAjaWYgRU5BQkxFKEpJVCkKIHN0YXRpYyBUaHVua0dlbmVyYXRv
ciB0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyhJbnRyaW5zaWMgaW50cmluc2ljKQogewpAQCAt
NDU5LDkgKzQ1Miw2IEBAIHZvaWQgVk06OnN0b3BTYW1wbGluZygpCiAKIHZvaWQgVk06OnByZXBh
cmVUb0Rpc2NhcmRDb2RlKCkKIHsKLSAgICBpZiAoY2FsbEVkZ2VMb2cpCi0gICAgICAgIGNhbGxF
ZGdlTG9nLT5wcm9jZXNzTG9nKCk7Ci0gICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gREZHOjpudW1iZXJPZldvcmtsaXN0cygpOyBpLS07KSB7CiAgICAgICAg
IGlmIChERkc6OldvcmtsaXN0KiB3b3JrbGlzdCA9IERGRzo6d29ya2xpc3RGb3JJbmRleE9yTnVs
bChpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTc5MjQy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNyArNzMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQXJpdHlDaGVja0ZhaWxS
ZXR1cm5UaHVua3M7CiBjbGFzcyBCdWlsdGluRXhlY3V0YWJsZXM7Ci1jbGFzcyBDYWxsRWRnZUxv
ZzsKIGNsYXNzIENvZGVCbG9jazsKIGNsYXNzIENvZGVDYWNoZTsKIGNsYXNzIENvbW1vbklkZW50
aWZpZXJzOwpAQCAtMjM4LDkgKzIzNyw2IEBAIHB1YmxpYzoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
REZHOjpMb25nTGl2ZWRTdGF0ZT4gZGZnU3RhdGU7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEVkZ2VMb2c+IGNhbGxFZGdlTG9nOwotICAgIENh
bGxFZGdlTG9nJiBlbnN1cmVDYWxsRWRnZUxvZygpOwotCiAgICAgVk1UeXBlIHZtVHlwZTsKICAg
ICBDbGllbnREYXRhKiBjbGllbnREYXRhOwogICAgIFZNRW50cnlGcmFtZSogdG9wVk1FbnRyeUZy
YW1lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245605</attachid>
            <date>2015-01-28 20:32:39 -0800</date>
            <delta_ts>2015-01-28 20:35:14 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>147699</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc5MzMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NiBA
QAorMjAxNS0wMS0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcgc2hvdWxkIGJlIGJhc2VkIG9uIHBvbHltb3JwaGlj
IGNhbGwgaW5saW5lIGNhY2hpbmcgcmF0aGVyIHRoYW4gbG9nZ2luZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwNjYwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXaGVuIHdlIGZpcnN0IGlt
cGxlbWVudGVkIHBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcsIHdlIGRpZCB0aGUgcHJvZmlsaW5n
IGJhc2VkIG9uIGEgY2FsbAorICAgICAgICBlZGdlIGxvZy4gVGhlIGlkZWEgd2FzIHRvIHN0b3Jl
IGVhY2ggY2FsbCBlZGdlIChhIHR1cGxlIG9mIGNhbGwgc2l0ZSBhbmQgY2FsbGVlKSBpbnRvIGEK
KyAgICAgICAgZ2xvYmFsIGxvZyB0aGF0IHdhcyBwcm9jZXNzZWQgbGF6aWx5LiBQcm9jZXNzaW5n
IHRoZSBsb2cgd291bGQgZ2l2ZSBwcmVjaXNlIGNvdW50cyBvZiBjYWxsCisgICAgICAgIGVkZ2Vz
LCBhbmQgY291bGQgYmUgdXNlZCB0byBkcml2ZSB3ZWxsLWluZm9ybWVkIGlubGluaW5nIGRlY2lz
aW9ucyAtIHBvbHltb3JwaGljIG9yIG5vdC4KKyAgICAgICAgVGhpcyB3YXMgYSBzcGVlZC11cCBv
biB0aHJvdWdocHV0IHRlc3RzIGJ1dCBhIHNsb3ctZG93biBmb3IgbGF0ZW5jeSB0ZXN0cy4gSXQg
d2FzIGEgbmV0IHdpbgorICAgICAgICBub25ldGhlbGVzcy4KKyAgICAgICAgCisgICAgICAgIEV4
cGVyaWVuY2Ugd2l0aCB0aGlzIGNvZGUgc2hvd3MgdGhyZWUgdGhpbmdzLiBGaXJzdCwgdGhlIGNh
bGwgZWRnZSBwcm9maWxlciBpcyBidWdneSBhbmQKKyAgICAgICAgY29tcGxleC4gSXQgd291bGQg
dGFrZSB3b3JrIHRvIGZpeCB0aGUgYnVncy4gU2Vjb25kLCB0aGUgY2FsbCBlZGdlIHByb2ZpbGVy
IGluY3VycyBsb3RzIG9mCisgICAgICAgIG92ZXJoZWFkIGZvciBsYXRlbmN5IGNvZGUgdGhhdCB3
ZSBjYXJlIGRlZXBseSBhYm91dC4gVGhpcmQsIGl0J3Mgbm90IGF0IGFsbCBjbGVhciB0aGF0CisJ
aGF2aW5nIGNhbGwgZWRnZSBjb3VudHMgZm9yIGV2ZXJ5IHBvc3NpYmxlIGNhbGxlZSBpcyBhbnkg
YmV0dGVyIHRoYW4ganVzdCBoYXZpbmcgY2FsbCBlZGdlCisJY291bnRzIGZvciB0aGUgbGltaXRl
ZCBudW1iZXIgb2YgY2FsbGVlcyB0aGF0IGFuIGlubGluZSBjYWNoZSB3b3VsZCBjYXRjaC4KKyAg
ICAgICAgCisgICAgICAgIFNvLCB0aGlzIHBhdGNoIHJlbW92ZXMgdGhlIGNhbGwgZWRnZSBwcm9m
aWxlciBhbmQgcmVwbGFjZXMgaXQgd2l0aCBhIHBvbHltb3JwaGljIGNhbGwgaW5saW5lCisgICAg
ICAgIGNhY2hlLiBJZiB3ZSBtaXNzIHRoZSBiYXNpYyBjYWxsIGlubGluZSBjYWNoZSwgd2UgaW5m
bGF0ZSB0aGUgY2FjaGUgdG8gYmUgYSBqdW1wIHRvIGFuCisgICAgICAgIG91dC1vZi1saW5lIHN0
dWIgdGhhdCBjYXNlcyBvbiB0aGUgcHJldmlvdXNseSBrbm93biBjYWxsZWVzLiBJZiB0aGF0IG1p
c3NlcyBhZ2FpbiwgdGhlbiB3ZQorICAgICAgICByZXdyaXRlIHRoYXQgc3R1YiB0byBpbmNsdWRl
IHRoZSBuZXcgY2FsbGVlLiBXZSBkbyB0aGlzIHVwIHRvIHNvbWUgbnVtYmVyIG9mIGNhbGxlZXMu
IElmIHdlCisJaGl0IHRoZSBsaW1pdCB0aGVuIHdlIHN3aXRjaCB0byB1c2luZyBhIHBsYWluIHZp
cnR1YWwgY2FsbC4KKyAgICAgICAgCisgICAgICAgIFN1YnN0YW50aWFsIHNwZWVkLXVwIG9uIFY4
U3BpZGVyOyB1bmRvZXMgdGhlIHNsb3ctZG93biB0aGF0IHRoZSBvcmlnaW5hbCBjYWxsIGVkZ2Ug
cHJvZmlsZXIKKwljYXVzZWQuIE1pZ2h0IGJlIGEgU3VuU3BpZGVyIHNwZWVkLXVwIChiZWxvdyAx
JSksIGRlcGVuZGluZyBvbiBoYXJkd2FyZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NhbGxFZGdlLmg6CisgICAgICAgIChKU0M6OkNhbGxFZGdlOjpjb3Vu
dCk6CisgICAgICAgIChKU0M6OkNhbGxFZGdlOjpDYWxsRWRnZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvQ2FsbEVkZ2VQcm9maWxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxs
RWRnZVByb2ZpbGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxsRWRnZVByb2Zp
bGVJbmxpbmVzLmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNw
cDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp1bmxpbmspOgorICAgICAgICAoSlNDOjpD
YWxsTGlua0luZm86OnZpc2l0V2Vhayk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZv
Lmg6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAgICAoSlND
OjpDYWxsTGlua1N0YXR1czo6Q2FsbExpbmtTdGF0dXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRnJvbUNhbGxMaW5rSW5mbyk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjppc0Ns
b3N1cmVDYWxsKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6Om1ha2VDbG9zdXJlQ2Fs
bCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpkdW1wKToKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a1N0YXR1czo6Q2FsbExpbmtTdGF0dXMpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6
aXNTZXQpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6dmFyaWFudHMpOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua1N0YXR1czo6c2l6ZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3Rh
dHVzOjphdCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpvcGVyYXRvcltdKToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNhbk9wdGltaXplKToKKyAgICAgICAgKEpTQzo6
Q2FsbExpbmtTdGF0dXM6OmVkZ2VzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbExpbmtT
dGF0dXM6OmNhblRydXN0Q291bnRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9DYWxs
VmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OnZhcmlhbnRMaXN0V2l0aFZhcmlhbnQpOgorICAg
ICAgICAoSlNDOjpkZXNwZWNpZmllZFZhcmlhbnRMaXN0KToKKyAgICAgICAgKiBieXRlY29kZS9D
YWxsVmFyaWFudC5oOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6fkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
bGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1
bmxpbmtJbmNvbWluZ0NhbGxzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpub3RpY2VJbmNv
bWluZ0NhbGwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OmlzSW5jb21pbmdDYWxsQWxyZWFkeUxpbmtlZCk6IERlbGV0ZWQuCisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxsV2l0aG91dFNldHRpbmdSZXN1bHQpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAqIGRmZy9E
RkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAg
ICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR0Rv
ZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZH
RHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgICog
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZp
eHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpoYXNIZWFwUHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6Cisg
ICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUaWVyVXBDaGVja0lu
amVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUaWVyVXBDaGVja0luamVjdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhh
c2U6OnJlbW92ZUZUTFByb2ZpbGluZyk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAgICog
aml0L0JpbmFyeVN3aXRjaC5oOgorICAgICAgICAqIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BDYWxsKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6b3BlcmF0
aW9uTGlua1BvbHltb3JwaGljQ2FsbEZvcik6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkxpbmtD
bG9zdXJlQ2FsbEZvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVFN0dWJSb3V0aW5lLmg6
CisgICAgICAgICogaml0L0pJVFdyaXRlQmFycmllci5oOgorICAgICAgICAqIGppdC9Qb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhp
Y0NhbGxOb2RlOjp+UG9seW1vcnBoaWNDYWxsTm9kZSk6CisgICAgICAgIChKU0M6OlBvbHltb3Jw
aGljQ2FsbE5vZGU6OnVubGluayk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbENhc2U6
OmR1bXApOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6UG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmUpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZTo6flBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKToKKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZhcmlhbnRzKToKKyAgICAgICAgKEpTQzo6UG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmU6OmVkZ2VzKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmU6OnZpc2l0V2Vhayk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2Fs
bFN0dWJSb3V0aW5lOjptYXJrUmVxdWlyZWRPYmplY3RzSW50ZXJuYWwpOgorICAgICAgICAqIGpp
dC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UG9s
eW1vcnBoaWNDYWxsTm9kZTo6UG9seW1vcnBoaWNDYWxsTm9kZSk6CisgICAgICAgIChKU0M6OlBv
bHltb3JwaGljQ2FsbENhc2U6OlBvbHltb3JwaGljQ2FsbENhc2UpOgorICAgICAgICAoSlNDOjpQ
b2x5bW9ycGhpY0NhbGxDYXNlOjp2YXJpYW50KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWND
YWxsQ2FzZTo6Y29kZUJsb2NrKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAg
IChKU0M6OmxpbmtTbG93Rm9yKToKKyAgICAgICAgKEpTQzo6bGlua0Zvcik6CisgICAgICAgIChK
U0M6OnJldmVydENhbGwpOgorICAgICAgICAoSlNDOjp1bmxpbmtGb3IpOgorICAgICAgICAoSlND
OjpsaW5rVmlydHVhbEZvcik6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgor
ICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGwpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9S
ZXBhdGNoLmg6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChK
U0M6OmxpbmtQb2x5bW9ycGhpY0NhbGxGb3JUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxpbmtQ
b2x5bW9ycGhpY0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6bGlua0Nsb3N1cmVDYWxsRm9yVGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OmxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOiBE
ZWxldGVkLgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoKKyAgICAgICAgKEpTQzo6
bGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yRm9yKToKKyAgICAgICAgKEpTQzo6bGlu
a0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3JGb3IpOiBEZWxldGVkLgorICAgICAgICAqIGxsaW50
L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmppdENvbXBpbGVBbmRT
ZXRIZXVyaXN0aWNzKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OnByZXBhcmVUb0Rpc2NhcmRDb2RlKToK
KyAgICAgICAgKEpTQzo6Vk06OmVuc3VyZUNhbGxFZGdlTG9nKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL1ZNLmg6CisKIDIwMTUtMDEtMjggIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZW1vdmVkIGZhc3RNYWxsb2NGb3JiaWQgLyBmYXN0TWFsbG9j
QWxsb3cKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE3
OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5
dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAKICAgICBieXRlY29kZS9CeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuY3BwCiAgICAgYnl0ZWNvZGUvQ2FsbEVkZ2UuY3BwCi0gICAgYnl0ZWNvZGUv
Q2FsbEVkZ2VQcm9maWxlLmNwcAogICAgIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAKICAgICBi
eXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKICAgICBieXRlY29kZS9DYWxsVmFyaWFudC5jcHAK
QEAgLTMyNyw3ICszMjYsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGppdC9B
c3NlbWJseUhlbHBlcnMuY3BwCiAgICAgaml0L0FyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNw
cAogICAgIGppdC9CaW5hcnlTd2l0Y2guY3BwCi0gICAgaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRp
bmUuY3BwCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCiAgICAgaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKICAgICBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5l
LmNwcApAQCAtMzUwLDYgKzM0OCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
aml0L0pJVFN0dWJzLmNwcAogICAgIGppdC9KSVRUaHVua3MuY3BwCiAgICAgaml0L0pJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAorICAgIGppdC9Qb2x5bW9ycGhpY0NhbGxT
dHViUm91dGluZS5jcHAKICAgICBqaXQvUmVnLmNwcAogICAgIGppdC9SZWdpc3RlclByZXNlcnZh
dGlvbldyYXBwZXJHZW5lcmF0b3IuY3BwCiAgICAgaml0L1JlZ2lzdGVyU2V0LmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzkyNDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNyArMzE0LDYgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbEVkZ2Uu
Y3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbEVkZ2VQcm9m
aWxlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5r
SW5mby5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlu
a1N0YXR1cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxs
VmFyaWFudC5jcHAiIC8+CkBAIC01OTgsNyArNTk3LDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGppdFxBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxqaXRcQXNzZW1ibHlIZWxwZXJzLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGppdFxCaW5hcnlTd2l0Y2guY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caml0XENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAiIC8+
CkBAIC02MjEsNiArNjE5LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRT
dHVicy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUVGh1bmtzLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRUb0RGR0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caml0XFJlZy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUmVn
aXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclNldC5jcHAiIC8+CkBAIC05MzEsOCArOTMwLDYgQEAK
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVV
c2VEZWYuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxFZGdl
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsRWRnZVByb2Zp
bGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxFZGdlUHJv
ZmlsZUlubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENh
bGxMaW5rSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2Fs
bExpbmtTdGF0dXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENh
bGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmgiIC8+CkBAIC0xMzMzLDcgKzEzMzAsNiBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEFzc2VtYmx5SGVscGVycy5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEJpbmFyeVN3aXRjaC5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XENDYWxsSGVscGVycy5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDb21wYWN0SklUQ29kZU1hcC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3IuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxGUFJJbmZvLmgiIC8+CkBAIC0xMzU3LDYgKzEzNTMsNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFRvREZHRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUV3Jp
dGVCYXJyaWVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSlNJbnRlcmZh
Y2VKSVQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlZy5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlZ2lzdGVyUHJlc2VydmF0aW9u
V3JhcHBlckdlbmVyYXRvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJl
Z2lzdGVyU2V0LmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI4MSwxMyArMjgxLDggQEAK
IAkJMEYzQjNBMjgxNTQ0Qzk5NzAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTI1
MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzQjNBMkIxNTQ3NTAw
MDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTI5MTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0
ZS5jcHAgKi87IH07CiAJCTBGM0IzQTJDMTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkEx
NTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYzQjdFMjYxOUExMUI4MDAwRDlCQzU2IC8qIENh
bGxFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNCN0UyMDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjNCN0UyNzE5QTExQjgwMDBEOUJDNTYg
LyogQ2FsbEVkZ2VQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGM0I3RTIxMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUu
Y3BwICovOyB9OwotCQkwRjNCN0UyODE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0Uy
MjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYzQjdFMjkxOUExMUI4MDAwRDlCQzU2
IC8qIENhbGxFZGdlUHJvZmlsZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTIzMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVBy
b2ZpbGVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYzQjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI0MTlBMTFC
ODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBGM0I3RTJCMTlBMTFCODAw
MEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYzQjdF
MkQxOUExMkFBRTAwRDlCQzU2IC8qIENhbGxFZGdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTJDMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxs
RWRnZS5jcHAgKi87IH07CiAJCTBGM0QwQkJDMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0
cnVjdHVyZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGM0QwQkJBMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNr
LmNwcCAqLzsgfTsKIAkJMEYzRDBCQkQxOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0
dXJlQ2hlY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGM0QwQkJCMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzRTAxQUEx
OUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdG
IC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OwpAQCAtMzU1LDYgKzM1MCw4IEBACiAJ
CTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDgyMTVFNDgxMTQwMDZBNTk3
QyAvKiBERkdBcnJheU1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjY0QjI3MTFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjZG
MUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwICovOyB9OwogCQkwRjY0QjI3MjFB
Nzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5
U3dpdGNoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEY2NEIyNzkxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2
NiAvKiBDYWxsRWRnZS5jcHAgKi87IH07CisJCTBGNjRCMjdBMUE3OTU3QjIwMDZFNEU2NiAvKiBD
YWxsRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2NEIyNzgxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0Yx
IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUJFMTgzNTY2RjkwMEQwMTdGMSAvKiBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NjZFQzExODM1NjZGOTAwRDAxN0YxIC8qIEZ1
bGxCeXRlY29kZUxpdmVuZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUMyMTgzNTY3MkIwMEQw
MTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwICovOyB9OwpAQCAtMzg2LDggKzM4Myw2IEBACiAJ
CTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzAyNUE4MTcx
NEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjcxNENBNDE2RUE5MkYwMDBG
M0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIg
LyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgKi87IH07CiAJCTBGNzE0Q0E1MTZF
QTkyRjIwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcxNENBMjE2RUE5MkVEMDBG
M0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3
MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzNEN0FCMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJl
Q2FsbFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKLQkJMEY3M0Q3QUYxNjVBMTQzMDAwQUNBQjcxIC8q
IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNzNEN0FDMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0
dWJSb3V0aW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY3NDNCQUExNkI4ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1MkEzQTIwMTY1
MUM2NjEwMEE4MEFGRSAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgKi87IH07CiAJCTBGNzU3NkQy
MThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc1NzZEMDE4RTFGRUU5
MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwICovOyB9OwogCQkwRjc1
NzZEMzE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzU3NkQxMThFMUZF
RTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MDIsNiArNTk3LDggQEAKIAkJ
MEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8q
IE9wdGlvbnMuY3BwICovOyB9OwogCQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJh
bnNpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkU3MjExQjE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgKi87IH07CiAJ
CTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3MjExQzE5M0I5QzU5MDAzMUY2
RUQgLyogREZHVHJhbnNpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGRTgzNDE3MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0Nh
bGxTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkU4MzQxNTFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUuY3BwICovOyB9OworCQkwRkU4MzQxODFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTgzNDE2MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUzNDkx
NzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi87IH07CiAJCTBG
RTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzRBMTcyM0NEQTUw
MEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU5NUY3OTE4QjU2OTQ3MDBCNTMxRkIgLyog
RlRMRGF0YVNlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFOTVGNzcxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCAq
LzsgfTsKQEAgLTE5NTAsMTMgKzE5NDcsOCBAQAogCQkwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYg
LyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCM0Ey
OTE1NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHVmFsaWRhdGUuY3BwOyBwYXRoID0gZGZnL0RGR1ZhbGlkYXRl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMkExNTQ3NEZGNDAwM0VE
MEZGIC8qIERGR1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1ZhbGlkYXRlLmg7IHBhdGggPSBkZmcvREZHVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMEYzQjdFMjAxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGM0I3RTIxMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2VQcm9maWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzQjdFMjIxOUExMUI4MDAwRDlC
QzU2IC8qIENhbGxFZGdlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWxsRWRnZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzQjdF
MjMxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZUlubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZh
cmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbFZhcmlh
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCN0UyNTE5QTExQjgwMDBE
OUJDNTYgLyogQ2FsbFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FsbFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYzQjdFMkMxOUEx
MkFBRTAwRDlCQzU2IC8qIENhbGxFZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENhbGxFZGdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYz
RDBCQkExOTRBNDE0MzAwRkM5Q0Y5IC8qIENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0QwQkJCMTk0QTQxNDMwMEZDOUNG
OSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvbnN0YW50U3RydWN0dXJlQ2hlY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmlu
Zy5jcHA7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMDI1LDYgKzIwMTcsOCBAQAogCQkwRjYzOTQ4MjE1RTQ4MTE0MDA2
QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0FycmF5TW9kZS5oOyBwYXRoID0gZGZnL0RGR0FycmF5TW9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpbmFyeVN3aXRjaC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjRCMjcwMUE3ODRCQUYwMDZFNEU2
NiAvKiBCaW5hcnlTd2l0Y2guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmlu
YXJ5U3dpdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjRCMjc3MUE3OTU3
QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjRC
Mjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDYWxsRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjY2
NkVCRTE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXNJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjY2RUJGMTgzNTY2
RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0F2YWlsYWJpbGl0eS5j
cHA7IHBhdGggPSBkZmcvREZHQXZhaWxhYmlsaXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTIwNTYsOCArMjA1MCw2IEBACiAJCTBGNzAyNUE4MTcxNEIwRjgwMDM4MkMwRSAv
KiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzE0Q0ExMTZF
QTkyRUQwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuY3BwOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcxNENBMjE2RUE5MkVEMDBGM0VCRUIgLyogREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjcz
RDdBQjE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3M0Q3QUMxNjVBMTQyQTAwQUNBQjcx
IC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjc1NzZEMDE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRp
bmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzb3JDYWxs
SklUU3R1YlJvdXRpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc1NzZE
MTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NjZEMUMxNUE1MDI4RDAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFN0
dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjg0LDYgKzIyNzYs
OCBAQAogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1RyYW5zaXRpb24uY3BwOyBwYXRo
ID0gZGZnL0RGR1RyYW5zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkU3MjExQzE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdUcmFuc2l0aW9uLmg7IHBhdGggPSBkZmcvREZHVHJhbnNp
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU4MzQxNTFBNkVGOTdCMDBE
MDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU4MzQxNjFBNkVGOTdCMDBEMDQ4NDcgLyogUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVz
aXJlZFdhdGNocG9pbnRzLmg7IHBhdGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTk1Rjc3MThCNTY5NDcwMEI1MzFGQiAvKiBG
VExEYXRhU2VjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
VExEYXRhU2VjdGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMRGF0YVNlY3Rpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzc0Nyw4ICszNzQxLDYgQEAKIAkJCQkwRjY0QjI2RjFB
Nzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmNwcCAqLywKIAkJCQkwRjY0QjI3MDFBNzg0
QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8sCiAJCQkJMEYyNEU1M0QxN0VBOUY1OTAw
QUJCMjE3IC8qIENDYWxsSGVscGVycy5oICovLAotCQkJCTBGNzNEN0FCMTY1QTE0MkEwMEFDQUI3
MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLywKLQkJCQkwRjczRDdBQzE2NUExNDJB
MDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oICovLAogCQkJCTBGRDgyRTM3MTQx
QUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovLAogCQkJCUE3QjQ4REI2MEVF
NzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLywKIAkJCQlBN0I0OERC
NTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovLApAQCAtMzc5Niw2
ICszNzg4LDggQEAKIAkJCQkwRkM3MTJFMTE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKIAkJCQlBNzZGNTRBMjEzQjI4QUFCMDBFRjJC
Q0UgLyogSklUV3JpdGVCYXJyaWVyLmggKi8sCiAJCQkJQTc2QzUxNzQxMTgyNzQ4RDAwNzE1QjA1
IC8qIEpTSW50ZXJmYWNlSklULmggKi8sCisJCQkJMEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8q
IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLywKKwkJCQkwRkU4MzQxNjFBNkVGOTdC
MDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRkE3QThF
OTE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCAqLywKIAkJCQkwRkE3QThFQTE4QjQxM0M4MDA1
MjM3MUQgLyogUmVnLmggKi8sCiAJCQkJMEY2QjFDQkIxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lz
dGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAgKi8sCkBAIC01MDI3LDExICs1MDIx
LDggQEAKIAkJCQkwRjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lcy5oICovLAogCQkJCTBGODg1RTEwMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRl
Y29kZVVzZURlZi5oICovLAogCQkJCTBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbElu
Zm8uaCAqLywKLQkJCQkwRjNCN0UyQzE5QTEyQUFFMDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwICov
LAotCQkJCTBGM0I3RTIwMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZS5oICovLAotCQkJCTBG
M0I3RTIxMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUuY3BwICovLAotCQkJCTBG
M0I3RTIyMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUuaCAqLywKLQkJCQkwRjNC
N0UyMzE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oICovLAorCQkJ
CTBGNjRCMjc3MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgKi8sCisJCQkJMEY2NEIy
NzgxQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxFZGdlLmggKi8sCiAJCQkJMEYwQjgzQUUxNEJDRjcx
NDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8sCiAJCQkJMEYwQjgzQUYxNEJDRjcxNDAw
ODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICovLAogCQkJCTBGOTMzMjkzMTRDQTdEQzEwMDg1RjND
NiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgKi8sCkBAIC01NDgzLDcgKzU0NzQsNiBAQAogCQkJCTBG
NjlDQzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyNEU1NDIxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM2QUFBRTUwRTFGNDI2NTAwQUQ4N0Q4IC8qIENsYXNzSW5mby5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMEY3M0Q3QUYxNjVBMTQzMDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1
YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzk3MEVEMUQzQUUwMEYxRjY4MSAv
KiBDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEY5NDQxMTY2NzYzMzIwMEQ2MTk3
MSAvKiBDb2RlQmxvY2tIYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0YzNDE4MjAyMEQ3
MDAyQzlCMjYgLyogQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggaW4gSGVhZGVycyAq
LywKQEAgLTU1MjcsNiArNTUxNyw3IEBACiAJCQkJQkNEMjAzNEEwRTE3MTM1RTAwMkM3RTgyIC8q
IERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEzNTlDRjMwRkREODlBRDAw
MjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjYwMjBF
MTk5N0I0MDA4MDY2REQgLyogRGF0ZUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjY0
QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
QTE1NjMyMTA5NjYzNjUwMDZGQTI2MCAvKiBEYXRlSW5zdGFuY2VDYWNoZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNEMjAzNEMwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRDIwM0U4MEUxNzE4RjQwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBl
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC01NTc0LDcgKzU1NjUsNiBAQAogCQkJCTBGRkZDOTVB
MTRFRjkwQTkwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RkM3NzMxNkUxMkY3NDAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjhGMkI5QTE3MkYwNTAxMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmggaW4g
SGVhZGVycyAqLywKLQkJCQkwRjNCN0UyODE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9m
aWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkMwRjdDRTE3QkJGQzVCMDA0NjRGRTQgLyogREZH
RGVzaXJlZFRyYW5zaXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU4NTM0QzE3MjNDREE1
MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
Mjk4MUZEOTE3QkFFRTRCMDBBM0JDOTggLyogREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmggaW4g
SGVhZGVycyAqLywKQEAgLTU4NjUsNyArNTg1NSw2IEBACiAJCQkJQTc2RjU0QTMxM0IyOEFBQjAw
RUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTYw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdGMDEgLyogSlNBUElWYWx1ZVdyYXBwZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTBGM0I3RTI5MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2Zp
bGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUg
LyogSlNBUElXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzYxNDBEMjE4Mjk4
MkNCMDA3NTA2MjQgLyogSlNBcmd1bWVudHNJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0MTcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAt
NjE4OSw3ICs2MTc4LDYgQEAKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNl
UHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0
QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3
RjM5RTE1RUQ4RTQ2MDBGMTY3QjIgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEYzQjdFMjYxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzM4NjU1NDExODY5N0I0MDA1NDAyNzkgLyogU3BlY2lhbGl6ZWRUaHVua0pJ
VC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NTQxQjIxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNp
YWxQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NDE0MURBRUVFMDAxNzlDOTQg
LyogU3BlY3VsYXRlZFR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjIzNiw2ICs2MjI0LDcgQEAK
IAkJCQkwRkY0Mjc0OTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3R5cGVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0U1QUIzOTE3OTlFNEIyMDBEMjgzM0QgLyogVURpczg2RGlzYXNzZW1ibGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0MTE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2
QXJyYXkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRTgzNDE4MUE2RUY5N0IwMEQwNDg0NyAvKiBQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDMx
M0JGREU3MTAwMjNEODdDIC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdBOEFGNDIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQzMkFycmF5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0E4QUYzRjE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oIGluIEhlYWRl
cnMgKi8sCkBAIC02Nzc0LDcgKzY3NjMsNiBAQAogCQkJCTBGMEI4M0IwMTRCQ0Y3MTYwMDg4NUI0
RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUQxNENBN0RD
MzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5
Q0U0MTlEMEJBN0QwMEIxRDFCNSAvKiBERkdJbnNlcnRPU1JIaW50c0ZvclVwZGF0ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRjczRDdBRTE2NUExNDJEMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxT
dHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NjlBMDc5NjBFRDFEM0FFMDBGMUY2
ODEgLyogQ29kZUJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQwMTY2NzYzMzAw
MEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzk3RjMz
MTgyMDIwRDcwMDJDOUIyNiAvKiBDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC02Nzg5LDYgKzY3NzcsNyBAQAogCQkJCTBGOUM1RTVFMThFMzVGNUUw
MEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDlG
MkYyMTdBMEFDMkEwMDUxMkU5OCAvKiBDb21tb25TbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjU1M0EzMzExN0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2NEIyNzkxQTc5NTdCMjAwNkU0RTY2IC8qIENh
bGxFZGdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVBM0E3MTc5NzQzMkQwMEU4OTNDMCAv
KiBDb21waWxhdGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDMjEwN0VD
Mzc2MDA0MjdBNDggLyogQ29tcGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZCMTZE
ODEyRUI1QjU5MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC02OTYwLDggKzY5NDksOCBAQAogCQkJCTBGMjM1QkQ1MTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkQ4
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyMzVCREExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkwRjNCN0UyNzE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9m
aWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RjI5OTZCMTdBMEJCNjcwMDEwNDE3QSAvKiBG
VExGYWlsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTgzNDE3MUE2RUY5N0IwMEQwNDg0NyAv
KiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4
QTMxOTE3RDUxRjIyMDBDQTJDNDAgLyogRlRMRm9yT1NSRW50cnlKSVRDb2RlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMjVGMUFGMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExJbmxpbmVDYWNoZVNp
emUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMjgxNzA5NjIzQjAwQkI3MjJDIC8qIEZU
TEludHJpbnNpY1JlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MTUzLDcgKzcxNDIs
NiBAQAogCQkJCTBGNDY4MEQyMTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERhdGEuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2lu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBBODE0QkE3RkFCMDBCRkUyNzIgLyogTExJ
bnRFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGM0I3RTJEMTlBMTJBQUUwMEQ5
QkM1NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBBNDE0QkE3RjhE
MDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgz
OUMxNEJDRjQ2MzAwODg1QjRGIC8qIExMSW50VGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQ0VGQUNEMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlLmgJKHJldmlzaW9u
IDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMCwxNyArMzAsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXR5cGVk
ZWYgdWludDE2X3QgQ2FsbEVkZ2VDb3VudFR5cGU7Ci0KIGNsYXNzIENhbGxFZGdlIHsKIHB1Ymxp
YzoKICAgICBDYWxsRWRnZSgpOwotICAgIENhbGxFZGdlKENhbGxWYXJpYW50LCBDYWxsRWRnZUNv
dW50VHlwZSk7CisgICAgQ2FsbEVkZ2UoQ2FsbFZhcmlhbnQsIHVpbnQzMl90KTsKICAgICAKICAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NhbGxlZTsgfQogICAgIAogICAg
IENhbGxWYXJpYW50IGNhbGxlZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGVlOyB9Ci0gICAgQ2Fs
bEVkZ2VDb3VudFR5cGUgY291bnQoKSBjb25zdCB7IHJldHVybiBtX2NvdW50OyB9CisgICAgdWlu
dDMyX3QgY291bnQoKSBjb25zdCB7IHJldHVybiBtX2NvdW50OyB9CiAgICAgCiAgICAgQ2FsbEVk
Z2UgZGVzcGVjaWZpZWRDbG9zdXJlKCkgY29uc3QKICAgICB7CkBAIC00OSwxMiArNDcsMTIgQEAg
cHVibGljOgogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAot
cHVibGljOgorcHJpdmF0ZToKICAgICBDYWxsVmFyaWFudCBtX2NhbGxlZTsKLSAgICBDYWxsRWRn
ZUNvdW50VHlwZSBtX2NvdW50OworICAgIHVpbnQzMl90IG1fY291bnQ7CiB9OwogCi1pbmxpbmUg
Q2FsbEVkZ2U6OkNhbGxFZGdlKENhbGxWYXJpYW50IGNhbGxlZSwgQ2FsbEVkZ2VDb3VudFR5cGUg
Y291bnQpCitpbmxpbmUgQ2FsbEVkZ2U6OkNhbGxFZGdlKENhbGxWYXJpYW50IGNhbGxlZSwgdWlu
dDMyX3QgY291bnQpCiAgICAgOiBtX2NhbGxlZShjYWxsZWUpCiAgICAgLCBtX2NvdW50KGNvdW50
KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlUHJvZmls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxF
ZGdlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWxsRWRnZVByb2ZpbGUuaCIKLQotI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkNhbGxFZGdlUHJvZmlsZUlubGluZXMuaCIK
LSNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotQ2FsbEVkZ2VMaXN0IENhbGxFZGdlUHJvZmlsZTo6Y2FsbEVkZ2Vz
KCkgY29uc3QKLXsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAg
IAotICAgIENhbGxFZGdlTGlzdCByZXN1bHQ7Ci0gICAgCi0gICAgQ2FsbFZhcmlhbnQgcHJpbWFy
eUNhbGxlZSA9IG1fcHJpbWFyeUNhbGxlZTsKLSAgICBDYWxsRWRnZUNvdW50VHlwZSBudW1DYWxs
c1RvUHJpbWFyeSA9IG1fbnVtQ2FsbHNUb1ByaW1hcnk7Ci0gICAgLy8gRGVmZW5kIGFnYWluc3Qg
cmFjZXMuIFRoZXNlIGZpZWxkcyBhcmUgbW9kaWZpZWQgYnkgdGhlIGxvZyBwcm9jZXNzb3Igd2l0
aG91dCBsb2NraW5nLgotICAgIGlmICghIXByaW1hcnlDYWxsZWUgJiYgbnVtQ2FsbHNUb1ByaW1h
cnkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoQ2FsbEVkZ2UocHJpbWFyeUNhbGxlZSwgbnVtQ2Fs
bHNUb1ByaW1hcnkpKTsKLSAgICAKLSAgICBpZiAobV9vdGhlckNhbGxlZXMpIHsKLSAgICAgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgaWYgdGhlIHByaW1hcnkgdGhyZWFkIGhhZCBqdXN0IGNyZWF0ZWQg
YSBtX290aGVyQ2FsbGVzIHdoaWxlIGxvZwotICAgICAgICAvLyBwcm9jZXNzaW5nLCB3ZSBzZWUg
YSBjb25zaXN0ZW50bHkgY3JlYXRlZCBvbmUuIFRoZSBsb2NrIGJlaW5nIGhlbGQgaXMgaW5zdWZm
aWNpZW50IGZvcgotICAgICAgICAvLyB0aGlzLCBzaW5jZSB0aGUgbG9nIHByb2Nlc3NvciB3aWxs
IG9ubHkgZ3JhYiB0aGUgbG9jayB3aGVuIG1lcmdpbmcgdGhlIHNlY29uZGFyeQotICAgICAgICAv
LyBzcGVjdHJ1bSBpbnRvIHRoZSBwcmltYXJ5IG9uZSBidXQgbWF5IHN0aWxsIGNyZWF0ZSB0aGUg
ZGF0YSBzdHJ1Y3R1cmUgd2l0aG91dCBob2xkaW5nCi0gICAgICAgIC8vIGxvY2tzLgotICAgICAg
ICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAgZm9yIChDYWxsRWRnZSYgZW50cnkgOiBt
X290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQpIHsKLSAgICAgICAgICAgIC8vIERlZmVuZCBhZ2Fp
bnN0IHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBwcmltYXJ5IGR1cGxpY2F0ZXMgYW4gZW50cnkg
aW4gdGhlIHNlY29uZGFyeQotICAgICAgICAgICAgLy8gc3BlY3RydW0uIFRoYXQgY2FuIGhhcHBl
biB3aGVuIHRoZSBHQyByZW1vdmVzIHRoZSBwcmltYXJ5LiBXZSBjb3VsZCBoYXZlIHRoZSBHQyBm
aXgKLSAgICAgICAgICAgIC8vIHRoZSBzaXR1YXRpb24gYnkgY2hhbmdpbmcgdGhlIHByaW1hcnkg
dG8gYmUgc29tZXRoaW5nIGZyb20gdGhlIHNlY29uZGFyeSBzcGVjdHJ1bSwKLSAgICAgICAgICAg
IC8vIGJ1dCB0aGlzIGZpeCBzZWVtcyBzaW1wbGVyIHRvIGltcGxlbWVudCBhbmQgYWxzbyBjaGVh
cGVyLgotICAgICAgICAgICAgaWYgKGVudHJ5LmNhbGxlZSgpID09IHJlc3VsdFswXS5jYWxsZWUo
KSkgewotICAgICAgICAgICAgICAgIHJlc3VsdFswXSA9IENhbGxFZGdlKHJlc3VsdFswXS5jYWxs
ZWUoKSwgZW50cnkuY291bnQoKSArIHJlc3VsdFswXS5jb3VudCgpKTsKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChlbnRyeSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RkOjpzb3J0
KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCksIFtdIChjb25zdCBDYWxsRWRnZSYgYSwgY29u
c3QgQ2FsbEVkZ2UmIGIpIC0+IGJvb2wgewotICAgICAgICAgICAgcmV0dXJuIGEuY291bnQoKSA+
IGIuY291bnQoKTsKLSAgICAgICAgfSk7Ci0gICAgCi0gICAgaWYgKHJlc3VsdC5zaXplKCkgPj0g
MikKLSAgICAgICAgQVNTRVJUKHJlc3VsdFswXS5jb3VudCgpID49IHJlc3VsdC5sYXN0KCkuY291
bnQoKSk7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQ2FsbEVkZ2VDb3VudFR5cGUg
Q2FsbEVkZ2VQcm9maWxlOjpudW1DYWxsc1RvS25vd25DZWxscygpIGNvbnN0Ci17Ci0gICAgQ2Fs
bEVkZ2VDb3VudFR5cGUgcmVzdWx0ID0gMDsKLSAgICBmb3IgKENhbGxFZGdlJiBlZGdlIDogY2Fs
bEVkZ2VzKCkpCi0gICAgICAgIHJlc3VsdCArPSBlZGdlLmNvdW50KCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotc3RhdGljIGJvb2wgd29ydGhEZXNwZWNpZnlpbmcoY29uc3QgQ2FsbFZhcmlh
bnQmIHZhcmlhbnQpCi17Ci0gICAgcmV0dXJuICFIZWFwOjppc01hcmtlZCh2YXJpYW50LnJhd0Nh
bGxlZUNlbGwoKSkKLSAgICAgICAgJiYgSGVhcDo6aXNNYXJrZWQodmFyaWFudC5kZXNwZWNpZmll
ZENsb3N1cmUoKS5yYXdDYWxsZWVDZWxsKCkpOwotfQotCi1ib29sIENhbGxFZGdlUHJvZmlsZTo6
d29ydGhEZXNwZWNpZnlpbmcoKQotewotICAgIGlmIChtX2Nsb3N1cmVzQXJlRGVzcGVjaWZpZWQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBib29sIGRpZFNlZUVudHJ5ID0gZmFs
c2U7Ci0gICAgCi0gICAgaWYgKCEhbV9wcmltYXJ5Q2FsbGVlKSB7Ci0gICAgICAgIGRpZFNlZUVu
dHJ5ID0gdHJ1ZTsKLSAgICAgICAgaWYgKCFKU0M6OndvcnRoRGVzcGVjaWZ5aW5nKG1fcHJpbWFy
eUNhbGxlZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlm
IChtX290aGVyQ2FsbGVlcykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX290aGVyQ2Fs
bGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBkaWRTZWVFbnRy
eSA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoIUpTQzo6d29ydGhEZXNwZWNpZnlpbmcobV9vdGhl
ckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNhbGxlZSgpKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGRpZFNlZUVudHJ5
OwotfQotCi12b2lkIENhbGxFZGdlUHJvZmlsZTo6dmlzaXRXZWFrKCkKLXsKLSAgICBpZiAoIW1f
cHJpbWFyeUNhbGxlZSAmJiAhbV9vdGhlckNhbGxlZXMpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIAotICAgIC8vIFNl
ZSBpZiBhbnl0aGluZyBpcyBkZWFkIGFuZCBpZiB0aGF0IGNhbiBiZSByZWN0aWZpZWQgYnkgZGVz
cGVjaWZ5aW5nLgotICAgIGlmICh3b3J0aERlc3BlY2lmeWluZygpKSB7Ci0gICAgICAgIENhbGxT
cGVjdHJ1bSBuZXdTcGVjdHJ1bTsKLSAgICAgICAgCi0gICAgICAgIGlmICghIW1fcHJpbWFyeUNh
bGxlZSkKLSAgICAgICAgICAgIG5ld1NwZWN0cnVtLmFkZChtX3ByaW1hcnlDYWxsZWUuZGVzcGVj
aWZpZWRDbG9zdXJlKCksIG1fbnVtQ2FsbHNUb1ByaW1hcnkpOwotICAgICAgICAKLSAgICAgICAg
aWYgKG1fb3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX290
aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAg
bmV3U3BlY3RydW0uYWRkKAotICAgICAgICAgICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9w
cm9jZXNzZWRbaV0uY2FsbGVlKCkuZGVzcGVjaWZpZWRDbG9zdXJlKCksCi0gICAgICAgICAgICAg
ICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jb3VudCgpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVmVjdG9yPENhbGxTcGVjdHJ1bTo6
S2V5QW5kQ291bnQ+IGxpc3QgPSBuZXdTcGVjdHJ1bS5idWlsZExpc3QoKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQobGlzdC5zaXplKCkpOwotICAgICAgICBtX3ByaW1hcnlDYWxsZWUgPSBsaXN0
Lmxhc3QoKS5rZXk7Ci0gICAgICAgIG1fbnVtQ2FsbHNUb1ByaW1hcnkgPSBsaXN0Lmxhc3QoKS5j
b3VudDsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX290aGVyQ2FsbGVlcykgewotICAgICAgICAg
ICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLmNsZWFyKCk7Ci0KLSAgICAgICAgICAgIC8v
IFdlIGNvdWxkIGhhdmUgYSBzaXR1YXRpb24gd2hlcmUgdGhlIEdDIGNsZWFycyB0aGUgcHJpbWFy
eSBhbmQgdGhlbiBsb2cgcHJvY2Vzc2luZwotICAgICAgICAgICAgLy8gcmVpbnN0YXRlcyBpdCB3
aXRob3V0IGV2ZXIgZG9pbmcgYW4gYWRkU2xvdyBhbmQgc3Vic2VxdWVudCBtZXJnZUJhY2suIElu
IHN1Y2ggYSBjYXNlCi0gICAgICAgICAgICAvLyB0aGUgcHJpbWFyeSBjb3VsZCBkdXBsaWNhdGUg
YW4gZW50cnkgaW4gb3RoZXJDYWxsZWVzLCB3aGljaCBtZWFucyB0aGF0IGV2ZW4gdGhvdWdoIHdl
Ci0gICAgICAgICAgICAvLyBoYWQgYW4gb3RoZXJDYWxsZWVzIG9iamVjdCwgdGhlIGxpc3Qgc2l6
ZSBpcyBqdXN0IDEuCi0gICAgICAgICAgICBpZiAobGlzdC5zaXplKCkgPj0gMikgewotICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxpc3Quc2l6ZSgpIC0gMTsgaS0tOykKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLmFwcGVuZChDYWxsRWRn
ZShsaXN0W2ldLmtleSwgbGlzdFtpXS5jb3VudCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBtX2Nsb3N1cmVzQXJlRGVzcGVjaWZpZWQgPSB0cnVlOwotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoISFtX3ByaW1hcnlD
YWxsZWUgJiYgIUhlYXA6OmlzTWFya2VkKG1fcHJpbWFyeUNhbGxlZS5yYXdDYWxsZWVDZWxsKCkp
KSB7Ci0gICAgICAgIG1fbnVtQ2FsbHNUb1Vua25vd25DZWxsICs9IG1fbnVtQ2FsbHNUb1ByaW1h
cnk7Ci0gICAgICAgIAotICAgICAgICBtX3ByaW1hcnlDYWxsZWUgPSBDYWxsVmFyaWFudCgpOwot
ICAgICAgICBtX251bUNhbGxzVG9QcmltYXJ5ID0gMDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1f
b3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX290aGVy
Q2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChIZWFw
Ojppc01hcmtlZChtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY2FsbGVlKCkucmF3Q2Fs
bGVlQ2VsbCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgbV9udW1DYWxsc1RvVW5rbm93bkNlbGwgKz0gbV9vdGhlckNhbGxlZXMtPm1fcHJv
Y2Vzc2VkW2ldLmNvdW50KCk7Ci0gICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNz
ZWRbaS0tXSA9IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5sYXN0KCk7Ci0gICAgICAgICAg
ICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQucmVtb3ZlTGFzdCgpOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICAvLyBPbmx5IGV4aXN0cyB3aGlsZSB3ZSBhcmUgcHJvY2Vzc2luZyB0
aGUgbG9nLgotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9y
YXJ5U3BlY3RydW0pOwotICAgIH0KLX0KLQotdm9pZCBDYWxsRWRnZVByb2ZpbGU6OmFkZFNsb3co
Q2FsbFZhcmlhbnQgY2FsbGVlLCBDYWxsRWRnZVByb2ZpbGVWZWN0b3ImIG1lcmdlQmFja0xvZykK
LXsKLSAgICAvLyBUaGlzIGV4aXN0cyB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIHNwZWN0cnVt
IHdhc24ndCBjcmVhdGVkIHlldCwgb3Igd2UncmUgc3RvcmluZyB0byBhCi0gICAgLy8gcGFydGlj
dWxhciBzcGVjdHJ1bSBmb3IgdGhlIGZpcnN0IHRpbWUgZHVyaW5nIGEgbG9nIHByb2Nlc3Npbmcg
aXRlcmF0aW9uLgotICAgIAotICAgIGlmICghbV9vdGhlckNhbGxlZXMpIHsKLSAgICAgICAgbV9v
dGhlckNhbGxlZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPFNlY29uZGFyeT4oKTsKLSAgICAgICAgLy8g
SWYgYSBjb21waWxlciB0aHJlYWQgbm90aWNlcyB0aGUgbV9vdGhlckNhbGxlZXMgYmVpbmcgbm9u
LW51bGwsIHdlIHdhbnQgdG8gbWFrZSBzdXJlCi0gICAgICAgIC8vIHRoYXQgaXQgc2VlcyBhIGZ1
bGx5IGNyZWF0ZWQgb25lLgotICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgIH0K
LSAgICAKLSAgICBpZiAoIW1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtKSB7Ci0g
ICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtID0gc3RkOjptYWtlX3Vu
aXF1ZTxDYWxsU3BlY3RydW0+KCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fb3RoZXJD
YWxsZWVzLT5tX3Byb2Nlc3NlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIG1fb3RoZXJD
YWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtLT5hZGQoCi0gICAgICAgICAgICAgICAgbV9vdGhl
ckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNhbGxlZSgpLAotICAgICAgICAgICAgICAgIG1fb3Ro
ZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jb3VudCgpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UncmUg
c2VlaW5nIHRoaXMgcHJvZmlsZSBkdXJpbmcgdGhpcyBsb2cKLSAgICAgICAgLy8gcHJvY2Vzc2lu
ZyBpdGVyYXRpb24uCi0gICAgICAgIG1lcmdlQmFja0xvZy5hcHBlbmQodGhpcyk7Ci0gICAgfQot
ICAgIAotICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtLT5hZGQoY2FsbGVl
KTsKLX0KLQotdm9pZCBDYWxsRWRnZVByb2ZpbGU6Om1lcmdlQmFjaygpCi17Ci0gICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAKLSAgICBSRUxFQVNFX0FTU0VSVCht
X290aGVyQ2FsbGVlcyk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9vdGhlckNhbGxlZXMtPm1fdGVt
cG9yYXJ5U3BlY3RydW0pOwotICAgIAotICAgIGlmICghIW1fcHJpbWFyeUNhbGxlZSkKLSAgICAg
ICAgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0tPmFkZChtX3ByaW1hcnlDYWxs
ZWUsIG1fbnVtQ2FsbHNUb1ByaW1hcnkpOwotICAgIAotICAgIGlmICghbV9jbG9zdXJlc0FyZURl
c3BlY2lmaWVkKSB7Ci0gICAgICAgIENhbGxTcGVjdHJ1bSBuZXdTcGVjdHJ1bTsKLSAgICAgICAg
Zm9yIChhdXRvJiBlbnRyeSA6ICptX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSkK
LSAgICAgICAgICAgIG5ld1NwZWN0cnVtLmFkZChlbnRyeS5rZXkuZGVzcGVjaWZpZWRDbG9zdXJl
KCksIGVudHJ5LnZhbHVlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChuZXdTcGVjdHJ1bS5zaXpl
KCkgPCBtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bS0+c2l6ZSgpKSB7Ci0gICAg
ICAgICAgICAqbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0gPSBuZXdTcGVjdHJ1
bTsKLSAgICAgICAgICAgIG1fY2xvc3VyZXNBcmVEZXNwZWNpZmllZCA9IHRydWU7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPENhbGxTcGVjdHJ1bTo6S2V5QW5kQ291bnQ+IGxp
c3QgPSBtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bS0+YnVpbGRMaXN0KCk7Ci0g
ICAgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0gPSBudWxscHRyOwotICAgIAot
ICAgIG1fcHJpbWFyeUNhbGxlZSA9IGxpc3QubGFzdCgpLmtleTsKLSAgICBtX251bUNhbGxzVG9Q
cmltYXJ5ID0gbGlzdC5sYXN0KCkuY291bnQ7Ci0gICAgbGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAg
Ci0gICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLmNsZWFyKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBjb3VudCA9IG1heEtub3duQ2FsbGVlczsgY291bnQtLSAmJiAhbGlzdC5pc0VtcHR5KCk7
KSB7Ci0gICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZC5hcHBlbmQoQ2FsbEVkZ2Uo
bGlzdC5sYXN0KCkua2V5LCBsaXN0Lmxhc3QoKS5jb3VudCkpOwotICAgICAgICBsaXN0LnJlbW92
ZUxhc3QoKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbGlzdC5zaXplKCk7
IGktLTspCi0gICAgICAgIG1fbnVtQ2FsbHNUb1Vua25vd25DZWxsICs9IGxpc3RbaV0uY291bnQ7
Ci19Ci0KLXZvaWQgQ2FsbEVkZ2VQcm9maWxlOjpmYWRlQnlIYWxmKCkKLXsKLSAgICBtX251bUNh
bGxzVG9QcmltYXJ5ID4+PSAxOwotICAgIG1fbnVtQ2FsbHNUb05vdENlbGwgPj49IDE7Ci0gICAg
bV9udW1DYWxsc1RvVW5rbm93bkNlbGwgPj49IDE7Ci0gICAgbV90b3RhbENvdW50ID4+PSAxOwot
ICAgIAotICAgIGlmIChtX290aGVyQ2FsbGVlcykgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAg
ICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0gPSBDYWxsRWRnZSgKLSAgICAgICAgICAg
ICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY2FsbGVlKCksCi0gICAgICAgICAg
ICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNvdW50KCkgPj4gMSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlT
cGVjdHJ1bSkgewotICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6ICptX290aGVyQ2FsbGVl
cy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSkKLSAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZSA+Pj0g
MTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotQ2FsbEVkZ2VMb2c6OkNhbGxFZGdlTG9nKCkKLSAg
ICA6IG1fc2NhbGVkTG9nSW5kZXgobG9nU2l6ZSAqIHNpemVvZihFbnRyeSkpCi17Ci0gICAgQVNT
RVJUKCEobV9zY2FsZWRMb2dJbmRleCAlIHNpemVvZihFbnRyeSkpKTsKLX0KLQotQ2FsbEVkZ2VM
b2c6On5DYWxsRWRnZUxvZygpIHsgfQotCi1ib29sIENhbGxFZGdlTG9nOjppc0VuYWJsZWQoKQot
ewotICAgIHJldHVybiBPcHRpb25zOjplbmFibGVDYWxsRWRnZVByb2ZpbGluZygpICYmIE9wdGlv
bnM6OnVzZUZUTEpJVCgpOwotfQotCi0jaWYgRU5BQkxFKEpJVCkKLQotZXh0ZXJuICJDIiBKSVRf
T1BFUkFUSU9OIHZvaWQgb3BlcmF0aW9uUHJvY2Vzc0NhbGxFZGdlTG9nKENhbGxFZGdlTG9nKikg
V1RGX0lOVEVSTkFMOwotZXh0ZXJuICJDIiBKSVRfT1BFUkFUSU9OIHZvaWQgb3BlcmF0aW9uUHJv
Y2Vzc0NhbGxFZGdlTG9nKENhbGxFZGdlTG9nKiBsb2cpCi17Ci0gICAgbG9nLT5wcm9jZXNzTG9n
KCk7Ci19Ci0KLXZvaWQgQ2FsbEVkZ2VMb2c6OmVtaXRMb2dDb2RlKENDYWxsSGVscGVycyYgaml0
LCBDYWxsRWRnZVByb2ZpbGUmIHByb2ZpbGUsIEpTVmFsdWVSZWdzIGNhbGxlZVJlZ3MpCi17Ci0g
ICAgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMgPSAxOwotICAgIAotICAgIEdQUlJl
ZyBzY3JhdGNoR1BSOwotICAgIGlmICghY2FsbGVlUmVncy51c2VzKEdQUkluZm86OnJlZ1QwKSkK
LSAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnJlZ1QwOwotICAgIGVsc2UgaWYgKCFjYWxs
ZWVSZWdzLnVzZXMoR1BSSW5mbzo6cmVnVDEpKQotICAgICAgICBzY3JhdGNoR1BSID0gR1BSSW5m
bzo6cmVnVDE7Ci0gICAgZWxzZQotICAgICAgICBzY3JhdGNoR1BSID0gR1BSSW5mbzo6cmVnVDI7
Ci0gICAgCi0gICAgaml0LmxvYWQzMigmbV9zY2FsZWRMb2dJbmRleCwgc2NyYXRjaEdQUik7Ci0g
ICAgCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG9rID0gaml0LmJyYW5jaFRlc3QzMihDQ2FsbEhl
bHBlcnM6Ok5vblplcm8sIHNjcmF0Y2hHUFIpOwotICAgIAotICAgIEFTU0VSVF9VTlVTRUQobnVt
YmVyT2ZBcmd1bWVudHMsIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkgPj0gMSArIG51bWJlck9m
QXJndW1lbnRzKTsKLSAgICAKLSAgICBqaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOwotICAgIAotICAgIGppdC5zdG9yZVZhbHVlKGNhbGxlZVJlZ3MsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzaXplb2YoSlNW
YWx1ZSkpKTsKLSAgICBqaXQuc2V0dXBBcmd1bWVudHMoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHRoaXMpKTsKLSAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYml0
d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25Qcm9jZXNzQ2FsbEVkZ2VMb2cpKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7Ci0gICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgaml0
LmxvYWRWYWx1ZShDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3Rlciwgc2l6ZW9mKEpTVmFsdWUpKSwgY2FsbGVlUmVncyk7Ci0gICAgCi0gICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudEJ5dGVzKCkp
LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAKLSAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2dTaXplICogc2l6ZW9mKEVudHJ5KSksIHNj
cmF0Y2hHUFIpOwotICAgIG9rLmxpbmsoJmppdCk7Ci0KLSAgICBqaXQuc3ViMzIoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEVudHJ5KSksIHNjcmF0Y2hHUFIpOwotICAgIGppdC5z
dG9yZTMyKHNjcmF0Y2hHUFIsICZtX3NjYWxlZExvZ0luZGV4KTsKLSAgICBqaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2xvZyksIHNjcmF0Y2hHUFIpOwotICAgIGppdC5z
dG9yZVZhbHVlKGNhbGxlZVJlZ3MsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoRW50cnksIG1fdmFsdWUpKSk7Ci0gICAgaml0LnN0b3JlUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cigmcHJvZmlsZSksIENDYWxsSGVscGVyczo6QWRkcmVzcyhz
Y3JhdGNoR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoRW50cnksIG1fcHJvZmlsZSkpKTsKLX0KLQotdm9p
ZCBDYWxsRWRnZUxvZzo6ZW1pdExvZ0NvZGUoCi0gICAgQ0NhbGxIZWxwZXJzJiBqaXQsIE93blB0
cjxDYWxsRWRnZVByb2ZpbGU+JiBwcm9maWxlUG9pbnRlciwgSlNWYWx1ZVJlZ3MgY2FsbGVlUmVn
cykKLXsKLSAgICBpZiAoIWlzRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
cHJvZmlsZVBvaW50ZXIuY3JlYXRlVHJhbnNhY3Rpb25hbGx5KCk7Ci0gICAgZW1pdExvZ0NvZGUo
aml0LCAqcHJvZmlsZVBvaW50ZXIsIGNhbGxlZVJlZ3MpOwotfQotCi0jZW5kaWYgLy8gRU5BQkxF
KEpJVCkKLQotdm9pZCBDYWxsRWRnZUxvZzo6cHJvY2Vzc0xvZygpCi17Ci0gICAgQVNTRVJUKCEo
bV9zY2FsZWRMb2dJbmRleCAlIHNpemVvZihFbnRyeSkpKTsKLSAgICAKLSAgICBpZiAoT3B0aW9u
czo6Y2FsbEVkZ2VQcm9maWxlUmVhbGx5UHJvY2Vzc2VzTG9nKCkpIHsKLSAgICAgICAgQ2FsbEVk
Z2VQcm9maWxlVmVjdG9yIG1lcmdlQmFja0xvZzsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG1fc2NhbGVkTG9nSW5kZXggLyBzaXplb2YoRW50cnkpOyBpIDwgbG9nU2l6ZTsg
KytpKQotICAgICAgICAgICAgbV9sb2dbaV0ubV9wcm9maWxlLT5hZGQobV9sb2dbaV0ubV92YWx1
ZSwgbWVyZ2VCYWNrTG9nKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1l
cmdlQmFja0xvZy5zaXplKCk7IGktLTspCi0gICAgICAgICAgICBtZXJnZUJhY2tMb2dbaV0tPm1l
cmdlQmFjaygpOwotICAgIH0KLSAgICAKLSAgICBtX3NjYWxlZExvZ0luZGV4ID0gbG9nU2l6ZSAq
IHNpemVvZihFbnRyeSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5oCShyZXZpc2lv
biAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9m
aWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDYWxsRWRnZVByb2ZpbGVfaAot
I2RlZmluZSBDYWxsRWRnZVByb2ZpbGVfaAotCi0jaW5jbHVkZSAiQ2FsbEVkZ2UuaCIKLSNpbmNs
dWRlICJDYWxsVmFyaWFudC5oIgotI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCi0jaW5j
bHVkZSAiR1BSSW5mby5oIgotI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENDYWxsSGVscGVyczsKLWNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKLQotY2xhc3MgQ2FsbEVkZ2VMb2c7Ci1jbGFzcyBDYWxsRWRn
ZVByb2ZpbGU7Ci10eXBlZGVmIFZlY3RvcjxDYWxsRWRnZVByb2ZpbGUqLCAxMD4gQ2FsbEVkZ2VQ
cm9maWxlVmVjdG9yOwotCi1jbGFzcyBDYWxsRWRnZVByb2ZpbGUgewotcHVibGljOgotICAgIENh
bGxFZGdlUHJvZmlsZSgpOwotICAgIAotICAgIENhbGxFZGdlQ291bnRUeXBlIG51bUNhbGxzVG9O
b3RDZWxsKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsc1RvTm90Q2VsbDsgfQotICAgIENhbGxF
ZGdlQ291bnRUeXBlIG51bUNhbGxzVG9Vbmtub3duQ2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
Q2FsbHNUb1Vua25vd25DZWxsOyB9Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbnVtQ2FsbHNUb0tu
b3duQ2VsbHMoKSBjb25zdDsKLSAgICAKLSAgICBDYWxsRWRnZUNvdW50VHlwZSB0b3RhbENhbGxz
KCkgY29uc3QgeyByZXR1cm4gbV90b3RhbENvdW50OyB9Ci0gICAgCi0gICAgLy8gQ2FsbCB3aGls
ZSBob2xkaW5nIHRoZSBvd25pbmcgQ29kZUJsb2NrJ3MgbG9jay4KLSAgICBDYWxsRWRnZUxpc3Qg
Y2FsbEVkZ2VzKCkgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCB2aXNpdFdlYWsoKTsKLSAgICAKLXBy
aXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIENhbGxFZGdlTG9nOwotICAgIAotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBtYXhLbm93bkNhbGxlZXMgPSA1OwotICAgIAotICAgIHZvaWQgYWRkKEpT
VmFsdWUsIENhbGxFZGdlUHJvZmlsZVZlY3RvciYgbWVyZ2VCYWNrTG9nKTsKLSAgICAKLSAgICBi
b29sIHdvcnRoRGVzcGVjaWZ5aW5nKCk7Ci0gICAgdm9pZCBhZGRTbG93KENhbGxWYXJpYW50LCBD
YWxsRWRnZVByb2ZpbGVWZWN0b3ImIG1lcmdlQmFja0xvZyk7Ci0gICAgdm9pZCBtZXJnZUJhY2so
KTsKLSAgICB2b2lkIGZhZGVCeUhhbGYoKTsKLSAgICAKLSAgICAvLyBJdCdzIGNoZWFwZXIgdG8g
bGV0IHRoaXMgaGF2ZSBpdHMgb3duIGxvY2suIEl0IG5lZWRzIHRvIGJlIGFibGUgdG8gZmluZCB3
aGljaCBsb2NrIHRvCi0gICAgLy8gbG9jay4gTm9ybWFsbHkgaXQgd291bGQgbG9jayB0aGUgb3du
aW5nIENvZGVCbG9jaydzIGxvY2ssIGJ1dCB0aGF0IHdvdWxkIHJlcXVpcmUgYQotICAgIC8vIHBv
aW50ZXItd2lkdGggd29yZCB0byBwb2ludCBhdCB0aGUgQ29kZUJsb2NrLiBIYXZpbmcgdGhlIGJ5
dGUtc2l6ZWQgbG9jayBoZXJlIGlzCi0gICAgLy8gY2hlYXBlci4gSG93ZXZlciwgdGhpcyBtZWFu
cyB0aGF0IHRoZSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgQ29kZUJsb2NrIGxvY2sgaXM6Ci0gICAg
Ly8gYWNxdWlyZSB0aGUgQ29kZUJsb2NrIGxvY2sgYmVmb3JlIHRoaXMgb25lLgotICAgIG11dGFi
bGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOwotICAgIAotICAgIGJvb2wgbV9jbG9zdXJlc0Fy
ZURlc3BlY2lmaWVkOwotICAgIAotICAgIENhbGxFZGdlQ291bnRUeXBlIG1fbnVtQ2FsbHNUb1By
aW1hcnk7Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV9udW1DYWxsc1RvTm90Q2VsbDsKLSAgICBD
YWxsRWRnZUNvdW50VHlwZSBtX251bUNhbGxzVG9Vbmtub3duQ2VsbDsKLSAgICBDYWxsRWRnZUNv
dW50VHlwZSBtX3RvdGFsQ291bnQ7Ci0gICAgQ2FsbFZhcmlhbnQgbV9wcmltYXJ5Q2FsbGVlOwot
ICAgIAotICAgIHR5cGVkZWYgU3BlY3RydW08Q2FsbFZhcmlhbnQsIENhbGxFZGdlQ291bnRUeXBl
PiBDYWxsU3BlY3RydW07Ci0gICAgCi0gICAgc3RydWN0IFNlY29uZGFyeSB7Ci0gICAgICAgIFZl
Y3RvcjxDYWxsRWRnZT4gbV9wcm9jZXNzZWQ7IC8vIFByb2Nlc3NlZCBidXQgbm90IG5lY2Vzc2Fy
aWx5IHNvcnRlZC4KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxTcGVjdHJ1bT4gbV90ZW1w
b3JhcnlTcGVjdHJ1bTsKLSAgICB9OwotICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxTZWNvbmRh
cnk+IG1fb3RoZXJDYWxsZWVzOwotfTsKLQotY2xhc3MgQ2FsbEVkZ2VMb2cgewotcHVibGljOgot
ICAgIENhbGxFZGdlTG9nKCk7Ci0gICAgfkNhbGxFZGdlTG9nKCk7Ci0KLSAgICBzdGF0aWMgYm9v
bCBpc0VuYWJsZWQoKTsKLSAgICAKLSNpZiBFTkFCTEUoSklUKQotICAgIHZvaWQgZW1pdExvZ0Nv
ZGUoQ0NhbGxIZWxwZXJzJiwgQ2FsbEVkZ2VQcm9maWxlJiwgSlNWYWx1ZVJlZ3MgY2FsbGVlUmVn
cyk7IC8vIEFzc3VtZXMgdGhhdCBzdGFjayBpcyBhbGlnbmVkLCBhbGwgdm9sYXRpbGUgcmVnaXN0
ZXJzIC0gb3RoZXIgdGhhbiBjYWxsZWVHUFIgLSBhcmUgY2xvYmJlcmFibGUsIGFuZCB0aGUgcGFy
YW1ldGVyIHNwYWNlIGlzIGluIHVzZS4KLSAgICAKLSAgICAvLyBTYW1lIGFzIGFib3ZlIGJ1dCBj
cmVhdGVzIGEgQ2FsbEVkZ2VQcm9maWxlIGluc3RhbmNlIGlmIG9uZSBkaWQgbm90IGFscmVhZHkg
ZXhpc3QuIERvZXMKLSAgICAvLyB0aGlzIGluIGEgdGhyZWFkLXNhZmUgbWFubmVyIGJ5IGNhbGxp
bmcgT3duUHRyOjpjcmVhdGVUcmFuc2FjdGlvbmFsbHkuCi0gICAgdm9pZCBlbWl0TG9nQ29kZShD
Q2FsbEhlbHBlcnMmLCBPd25QdHI8Q2FsbEVkZ2VQcm9maWxlPiYsIEpTVmFsdWVSZWdzIGNhbGxl
ZVJlZ3MpOwotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0gICAgCi0gICAgdm9pZCBwcm9jZXNzTG9n
KCk7Ci0gICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9nU2l6ZSA9IDEwMDAwOwotICAgIAot
ICAgIHN0cnVjdCBFbnRyeSB7Ci0gICAgICAgIEpTVmFsdWUgbV92YWx1ZTsKLSAgICAgICAgQ2Fs
bEVkZ2VQcm9maWxlKiBtX3Byb2ZpbGU7Ci0gICAgfTsKLSAgICAKLSAgICB1bnNpZ25lZCBtX3Nj
YWxlZExvZ0luZGV4OwotICAgIEVudHJ5IG1fbG9nW2xvZ1NpemVdOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBDYWxsRWRnZVByb2ZpbGVfaAotCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGVJbmxp
bmVzLmgJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IENhbGxFZGdlUHJvZmlsZUlubGluZXNfaAotI2RlZmluZSBDYWxsRWRnZVByb2ZpbGVJbmxpbmVz
X2gKLQotI2luY2x1ZGUgIkNhbGxFZGdlUHJvZmlsZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
aW5saW5lIENhbGxFZGdlUHJvZmlsZTo6Q2FsbEVkZ2VQcm9maWxlKCkKLSAgICA6IG1fY2xvc3Vy
ZXNBcmVEZXNwZWNpZmllZChmYWxzZSkKLSAgICAsIG1fbnVtQ2FsbHNUb1ByaW1hcnkoMCkKLSAg
ICAsIG1fbnVtQ2FsbHNUb05vdENlbGwoMCkKLSAgICAsIG1fbnVtQ2FsbHNUb1Vua25vd25DZWxs
KDApCi0gICAgLCBtX3RvdGFsQ291bnQoMCkKLSAgICAsIG1fcHJpbWFyeUNhbGxlZShudWxscHRy
KQotewotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgQ2FsbEVkZ2VQcm9maWxlOjphZGQoSlNWYWx1
ZSB2YWx1ZSwgQ2FsbEVkZ2VQcm9maWxlVmVjdG9yJiBtZXJnZUJhY2tMb2cpCi17Ci0gICAgdW5z
aWduZWQgbmV3VG90YWxDb3VudCA9IG1fdG90YWxDb3VudCArIDE7Ci0gICAgaWYgKFVOTElLRUxZ
KCFuZXdUb3RhbENvdW50KSkgewotICAgICAgICBmYWRlQnlIYWxmKCk7IC8vIFRhY2tsZSBvdmVy
Zmxvd3MgYnkgZGl2aWRpbmcgYWxsIGNvdW50cyBieSB0d28uCi0gICAgICAgIG5ld1RvdGFsQ291
bnQgPSBtX3RvdGFsQ291bnQgKyAxOwotICAgIH0KLSAgICBBU1NFUlQobmV3VG90YWxDb3VudCk7
Ci0gICAgbV90b3RhbENvdW50ID0gbmV3VG90YWxDb3VudDsKLSAgICAKLSAgICBpZiAoVU5MSUtF
TFkoIXZhbHVlLmlzQ2VsbCgpKSkgewotICAgICAgICBtX251bUNhbGxzVG9Ob3RDZWxsKys7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDYWxsVmFyaWFudCBjYWxsZWUgPSBDYWxsVmFy
aWFudCh2YWx1ZS5hc0NlbGwoKSk7Ci0gICAgCi0gICAgaWYgKG1fY2xvc3VyZXNBcmVEZXNwZWNp
ZmllZCkKLSAgICAgICAgY2FsbGVlID0gY2FsbGVlLmRlc3BlY2lmaWVkQ2xvc3VyZSgpOwotICAg
IAotICAgIGlmIChVTkxJS0VMWSghbV9wcmltYXJ5Q2FsbGVlKSkgewotICAgICAgICBtX3ByaW1h
cnlDYWxsZWUgPSBjYWxsZWU7Ci0gICAgICAgIG1fbnVtQ2FsbHNUb1ByaW1hcnkgPSAxOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAoTElLRUxZKG1fcHJpbWFyeUNh
bGxlZSA9PSBjYWxsZWUpKSB7Ci0gICAgICAgIG1fbnVtQ2FsbHNUb1ByaW1hcnkrKzsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCi0gICAgaWYgKFVOTElLRUxZKCFtX290aGVyQ2Fs
bGVlcykpIHsKLSAgICAgICAgYWRkU2xvdyhjYWxsZWUsIG1lcmdlQmFja0xvZyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIENhbGxTcGVjdHJ1bSogc2Vjb25kYXJ5ID0g
bV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0uZ2V0KCk7Ci0gICAgaWYgKCFzZWNv
bmRhcnkpIHsKLSAgICAgICAgYWRkU2xvdyhjYWxsZWUsIG1lcmdlQmFja0xvZyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIHNlY29uZGFyeS0+YWRkKGNhbGxlZSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQ2FsbEVkZ2VQcm9maWxlSW5saW5l
c19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksOSBAQAog
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdUaHVua3MuaCIKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlJlcGF0
Y2hCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KIAogI2lmIEVOQUJMRShKSVQpCkBAIC0zNywyMCArMzksMTcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIHZvaWQgQ2FsbExpbmtJbmZvOjp1bmxpbmsoUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlcikKIHsKLSAgICBBU1NFUlQoaXNMaW5rZWQoKSk7CisgICAgaWYgKCFpc0xp
bmtlZCgpKSB7CisgICAgICAgIC8vIFdlIGNvdWxkIGJlIGNhbGxlZCBldmVuIGlmIHdlJ3JlIG5v
dCBsaW5rZWQgYW55bW9yZSBiZWNhdXNlIG9mIGhvdyBwb2x5bW9ycGhpYyBjYWxscworICAgICAg
ICAvLyB3b3JrLiBFYWNoIGNhbGxzaXRlIHdpdGhpbiB0aGUgcG9seW1vcnBoaWMgY2FsbCBzdHVi
IG1heSBzZXBhcmF0ZWx5IGFzayB1cyB0byB1bmxpbmsoKS4KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWlzT25MaXN0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIAotICAgIGlmIChP
cHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSkKLSAgICAgICAgZGF0YUxvZygiVW5saW5raW5nIGNh
bGwgZnJvbSAiLCBjYWxsUmV0dXJuTG9jYXRpb24sICIgdG8gIiwgcG9pbnRlckR1bXAocmVwYXRj
aEJ1ZmZlci5jb2RlQmxvY2soKSksICJcbiIpOwotCi0gICAgcmVwYXRjaEJ1ZmZlci5yZXZlcnRK
dW1wUmVwbGFjZW1lbnRUb0JyYW5jaFB0cldpdGhQYXRjaChSZXBhdGNoQnVmZmVyOjpzdGFydE9m
QnJhbmNoUHRyV2l0aFBhdGNoT25SZWdpc3Rlcihob3RQYXRoQmVnaW4pLCBzdGF0aWNfY2FzdDxN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oY2FsbGVlR1BSKSwgMCk7Ci0gICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoCi0gICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKLSAgICAgICAgcmVwYXRj
aEJ1ZmZlci5jb2RlQmxvY2soKS0+dm0oKS0+Z2V0Q1RJU3R1YihsaW5rVGh1bmtHZW5lcmF0b3JG
b3IoCi0gICAgICAgICAgICAoY2FsbFR5cGUgPT0gQ29uc3RydWN0IHx8IGNhbGxUeXBlID09IENv
bnN0cnVjdFZhcmFyZ3MpPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwsCi0gICAgICAg
ICAgICBpc0ZUTCA/IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyA6IFJlZ2lzdGVyUHJlc2VydmF0aW9u
Tm90UmVxdWlyZWQpKS5jb2RlKCkpOwotICAgIGhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7
Ci0gICAgY2FsbGVlLmNsZWFyKCk7Ci0gICAgc3R1Yi5jbGVhcigpOworICAgIHVubGlua0ZvcigK
KyAgICAgICAgcmVwYXRjaEJ1ZmZlciwgKnRoaXMsCisgICAgICAgIChjYWxsVHlwZSA9PSBDb25z
dHJ1Y3QgfHwgY2FsbFR5cGUgPT0gQ29uc3RydWN0VmFyYXJncyk/IENvZGVGb3JDb25zdHJ1Y3Qg
OiBDb2RlRm9yQ2FsbCwKKyAgICAgICAgaXNGVEwgPyBNdXN0UHJlc2VydmVSZWdpc3RlcnMgOiBS
ZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIAogICAgIC8vIEl0IHdpbGwgYmUgb24g
YSBsaXN0IGlmIHRoZSBjYWxsZWUgaGFzIGEgY29kZSBibG9jay4KICAgICBpZiAoaXNPbkxpc3Qo
KSkKQEAgLTYxLDEyICs2MCwxMiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFJlcGF0
Y2hCdWZmCiB7CiAgICAgaWYgKGlzTGlua2VkKCkpIHsKICAgICAgICAgaWYgKHN0dWIpIHsKLSAg
ICAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQoc3R1Yi0+ZXhlY3V0YWJsZSgpKSkgeworICAg
ICAgICAgICAgaWYgKCFzdHViLT52aXNpdFdlYWsocmVwYXRjaEJ1ZmZlcikpIHsKICAgICAgICAg
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2xlYXJpbmcgY2xvc3VyZSBjYWxs
IGZyb20gIiwgKnJlcGF0Y2hCdWZmZXIuY29kZUJsb2NrKCksICIgdG8gIiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWItPmV4ZWN1dGFibGUoKS0+aGFzaEZvcihzcGVjaWFsaXphdGlvbktp
bmQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAiLCBzdHViIHJvdXRpbmUgIiwgUmF3UG9p
bnRlcihzdHViLmdldCgpKSwgIi5cbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdER1
bXAoc3R1Yi0+dmFyaWFudHMoKSksICIsIHN0dWIgcm91dGluZSAiLCBSYXdQb2ludGVyKHN0dWIu
Z2V0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIi5cbiIpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB1bmxpbmsocmVwYXRjaEJ1ZmZlcik7CiAgICAgICAgICAgICB9
CkBAIC04MywxMSArODIsNiBAQCB2b2lkIENhbGxMaW5rSW5mbzo6dmlzaXRXZWFrKFJlcGF0Y2hC
dWZmCiAgICAgfQogICAgIGlmICghIWxhc3RTZWVuQ2FsbGVlICYmICFIZWFwOjppc01hcmtlZChs
YXN0U2VlbkNhbGxlZS5nZXQoKSkpCiAgICAgICAgIGxhc3RTZWVuQ2FsbGVlLmNsZWFyKCk7Ci0g
ICAgCi0gICAgaWYgKGNhbGxFZGdlUHJvZmlsZSkgewotICAgICAgICBXVEY6OmxvYWRMb2FkRmVu
Y2UoKTsKLSAgICAgICAgY2FsbEVkZ2VQcm9maWxlLT52aXNpdFdlYWsoKTsKLSAgICB9CiB9CiAK
IENhbGxMaW5rSW5mbyYgQ2FsbExpbmtJbmZvOjpkdW1teSgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCShyZXZpc2lvbiAxNzkyNDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEzICsyNiwxMiBAQAogI2lmbmRlZiBDYWxsTGlua0luZm9f
aAogI2RlZmluZSBDYWxsTGlua0luZm9faAogCi0jaW5jbHVkZSAiQ2FsbEVkZ2VQcm9maWxlLmgi
Ci0jaW5jbHVkZSAiQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkNvZGVMb2Nh
dGlvbi5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKICNpbmNsdWRlICJK
SVRXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiT3Bj
b2RlLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIKICNpbmNsdWRl
ICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1NlbnRpbmVsTGlua2VkTGlzdC5oPgpAQCAtODIsMTUgKzgxLDE0IEBAIHN0cnVjdCBDYWxsTGlu
a0luZm8gOiBwdWJsaWMgQmFzaWNSYXdTZW4KICAgICBDb2RlTG9jYXRpb25OZWFyQ2FsbCBob3RQ
YXRoT3RoZXI7CiAgICAgSklUV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGNhbGxlZTsKICAgICBX
cml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbGFzdFNlZW5DYWxsZWU7Ci0gICAgUmVmUHRyPENsb3N1
cmVDYWxsU3R1YlJvdXRpbmU+IHN0dWI7CisgICAgUmVmUHRyPFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lPiBzdHViOwogICAgIGJvb2wgaXNGVEwgOiAxOwogICAgIGJvb2wgaGFzU2VlblNob3Vs
ZFJlcGF0Y2ggOiAxOwogICAgIGJvb2wgaGFzU2VlbkNsb3N1cmUgOiAxOwogICAgIHVuc2lnbmVk
IGNhbGxUeXBlIDogNTsgLy8gQ2FsbFR5cGUKICAgICB1bnNpZ25lZCBjYWxsZWVHUFIgOiA4Owot
ICAgIHVuc2lnbmVkIHNsb3dQYXRoQ291bnQ7CisgICAgdWludDMyX3Qgc2xvd1BhdGhDb3VudDsK
ICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47Ci0gICAgT3duUHRyPENhbGxFZGdlUHJvZmlsZT4g
Y2FsbEVkZ2VQcm9maWxlOwogCiAgICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIHN0dWIgfHwg
Y2FsbGVlOyB9CiAgICAgdm9pZCB1bmxpbmsoUmVwYXRjaEJ1ZmZlciYpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCShyZXZp
c2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtT
dGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDcgKzQ3LDcgQEAgQ2FsbExp
bmtTdGF0dXM6OkNhbGxMaW5rU3RhdHVzKEpTVmFsdWUgdgogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAotICAgIG1fZWRnZXMuYXBwZW5kKENhbGxFZGdlKENhbGxWYXJpYW50KHZhbHVlLmFz
Q2VsbCgpKSwgMSkpOworICAgIG1fdmFyaWFudHMuYXBwZW5kKENhbGxWYXJpYW50KHZhbHVlLmFz
Q2VsbCgpKSk7CiB9CiAKIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJv
bUxMSW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQpAQCAtMTI5LDIzICsxMjksNiBAQCBD
YWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAgLy8gV2UgZG9uJ3Qg
cmVhbGx5IG5lZWQgdGhpcywgYnV0IGFueXRpbWUgd2UgaGF2ZSB0byBkZWJ1ZyB0aGlzIGNvZGUs
IGl0IGJlY29tZXMgaW5kaXNwZW5zYWJsZS4KICAgICBVTlVTRURfUEFSQU0ocHJvZmlsZWRCbG9j
ayk7CiAgICAgCi0gICAgaWYgKE9wdGlvbnM6OmNhbGxTdGF0dXNTaG91bGRVc2VDYWxsRWRnZVBy
b2ZpbGUoKSkgewotICAgICAgICAvLyBBbHdheXMgdHJ1c3QgdGhlIGNhbGwgZWRnZSBwcm9maWxl
IG92ZXIgYW55dGhpbmcgZWxzZSBzaW5jZSB0aGlzIGhhcyBwcmVjaXNlIGNvdW50cy4KLSAgICAg
ICAgLy8gSXQgY2FuIG1ha2UgdGhlIGJlc3QgcG9zc2libGUgZGVjaXNpb24gYmVjYXVzZSBpdCBu
ZXZlciAiZm9yZ2V0cyIgd2hhdCBoYXBwZW5lZCBmb3IgYW55Ci0gICAgICAgIC8vIGNhbGwsIHdp
dGggdGhlIGV4Y2VwdGlvbiBvZiBmYWRpbmcgb3V0IHRoZSBjb3VudHMgb2Ygb2xkIGNhbGxzIChm
b3IgZXhhbXBsZSBpZiB0aGUKLSAgICAgICAgLy8gY291bnRlciB0eXBlIGlzIDE2LWJpdCB0aGVu
IGNhbGxzIHRoYXQgaGFwcGVuZWQgbW9yZSB0aGFuIDJeMTYgY2FsbHMgYWdvIGFyZSBnaXZlbiBo
YWxmCi0gICAgICAgIC8vIHdlaWdodCwgYW5kIHRoaXMgY29tcG91bmRzIGZvciBldmVyeSAyXjE1
IFtzaWNdIGNhbGxzIGFmdGVyIHRoYXQpLiBUaGUgY29tYmluYXRpb24gb2YKLSAgICAgICAgLy8g
aGlnaCBmaWRlbGl0eSBmb3IgcmVjZW50IGNhbGxzIGFuZCBmYWRpbmcgZm9yIG9sZGVyIGNhbGxz
IG1ha2VzIHRoaXMgdGhlIG1vc3QgdXNlZnVsCi0gICAgICAgIC8vIG1lY2hhbWlzbSBvZiBjaG9v
c2luZyBob3cgdG8gb3B0aW1pemUgZnV0dXJlIGNhbGxzLgotICAgICAgICBDYWxsRWRnZVByb2Zp
bGUqIGVkZ2VQcm9maWxlID0gY2FsbExpbmtJbmZvLmNhbGxFZGdlUHJvZmlsZS5nZXQoKTsKLSAg
ICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIGlmIChlZGdlUHJvZmlsZSkgewot
ICAgICAgICAgICAgQ2FsbExpbmtTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZyb21DYWxsRWRnZVBy
b2ZpbGUoZWRnZVByb2ZpbGUpOwotICAgICAgICAgICAgaWYgKCEhcmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgcmV0dXJu
IGNvbXB1dGVGcm9tQ2FsbExpbmtJbmZvKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKIH0KIApAQCAt
MTY1LDEyICsxNDgsNjggQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVG
cgogICAgIC8vIHRoYXQgaXMgc3RpbGwgbWFyZ2luYWxseSB2YWxpZCAoaS5lLiB0aGUgcG9pbnRl
cnMgYWluJ3Qgc3RhbGUpLiBUaGlzIGtpbmQgb2YgcmFjaW5lc3MKICAgICAvLyBpcyBwcm9iYWJs
eSBPSyBmb3Igbm93LgogICAgIAorICAgIC8vIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lIGlz
IGEgR0NBd2FyZUpJVFN0dWJSb3V0aW5lLCBzbyBpZiBub24tbnVsbCwgaXQgd2lsbCBzdGF5IGFs
aXZlCisgICAgLy8gdW50aWwgbmV4dCBHQyBldmVuIGlmIHRoZSBDYWxsTGlua0luZm8gaXMgY29u
Y3VycmVudGx5IGNsZWFyZWQuIEFsc28sIHRoZSB2YXJpYW50cyBsaXN0IGlzCisgICAgLy8gbmV2
ZXIgbXV0YXRlZCBhZnRlciB0aGUgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUgaXMgaW5zdGFu
dGlhdGVkLiBXZSBoYXZlIHNvbWUgY29uc2VydmF0aXZlCisgICAgLy8gZmVuY2luZyBpbiBwbGFj
ZSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBzZWUgdGhlIHZhcmlhbnRzIGxpc3QgYWZ0ZXIgY29uc3Ry
dWN0aW9uLgorICAgIGlmIChQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxM
aW5rSW5mby5zdHViLmdldCgpKSB7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAg
ICAgICAKKyAgICAgICAgQ2FsbEVkZ2VMaXN0IGVkZ2VzID0gc3R1Yi0+ZWRnZXMoKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIGxvYWRlZCB0aGUgZWRnZXMgbGlzdCwgdGhl
cmUgYXJlIG5vIGZ1cnRoZXIgY29uY3VycmVuY3kgY29uY2VybnMuIFdlIHdpbGwKKyAgICAgICAg
Ly8ganVzdCBtYW5pcHVsYXRlIGFuZCBwcnVuZSB0aGlzIGxpc3QgdG8gb3VyIGxpa2luZyAtIG1v
c3RseSByZW1vdmluZyBlbnRyaWVzIHRoYXQgYXJlIHRvbworICAgICAgICAvLyBpbmZyZXF1ZW50
IGFuZCBlbnN1cmluZyB0aGF0IGl0J3Mgc29ydGVkIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgZnJl
cXVlbmN5LgorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWRnZXMuc2l6ZSgpKTsK
KyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIGVkZ2VzLmJlZ2luKCks
IGVkZ2VzLmVuZCgpLAorICAgICAgICAgICAgW10gKENhbGxFZGdlIGEsIENhbGxFZGdlIGIpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gYS5jb3VudCgpID4gYi5jb3VudCgpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVkZ2VzLmZpcnN0KCkuY291bnQoKSA+PSBl
ZGdlcy5sYXN0KCkuY291bnQoKSk7CisgICAgICAgIAorICAgICAgICBkb3VibGUgdG90YWxDYWxs
c1RvS25vd24gPSAwOworICAgICAgICBkb3VibGUgdG90YWxDYWxsc1RvVW5rbm93biA9IGNhbGxM
aW5rSW5mby5zbG93UGF0aENvdW50OworICAgICAgICBDYWxsVmFyaWFudExpc3QgdmFyaWFudHM7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZWRnZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIENhbGxFZGdlIGVkZ2UgPSBlZGdlc1tpXTsKKyAgICAgICAgICAgIC8vIElmIHRo
ZSBjYWxsIGlzIGF0IHRoZSB0YWlsIG9mIHRoZSBkaXN0cmlidXRpb24sIHRoZW4gd2UgZG9uJ3Qg
b3B0aW1pemUgaXQgYW5kIHdlCisgICAgICAgICAgICAvLyB0cmVhdCBpdCBhcyBpZiBpdCB3YXMg
YSBjYWxsIHRvIHNvbWV0aGluZyB1bmtub3duLiBXZSBkZWZpbmUgdGhlIHRhaWwgYXMgYmVpbmcg
ZWl0aGVyCisgICAgICAgICAgICAvLyBhIGNhbGwgdGhhdCBkb2Vzbid0IGJlbG9uZyB0byB0aGUg
TiBtb3N0IGZyZXF1ZW50IGNhbGxlZXMgKE4gPQorICAgICAgICAgICAgLy8gbWF4UG9seW1vcnBo
aWNDYWxsVmFyaWFudHNGb3JJbmxpbmluZykgb3IgdGhhdCBoYXMgYSB0b3RhbCBjYWxsIGNvdW50
IHRoYXQgaXMgdG9vCisgICAgICAgICAgICAvLyBzbWFsbC4KKyAgICAgICAgICAgIGlmIChpID49
IE9wdGlvbnM6Om1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRzRm9ySW5saW5pbmcoKQorICAgICAg
ICAgICAgICAgIHx8IGVkZ2UuY291bnQoKSA8IE9wdGlvbnM6OmZyZXF1ZW50Q2FsbFRocmVzaG9s
ZCgpKQorICAgICAgICAgICAgICAgIHRvdGFsQ2FsbHNUb1Vua25vd24gKz0gZWRnZS5jb3VudCgp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdG90YWxDYWxsc1RvS25vd24g
Kz0gZWRnZS5jb3VudCgpOworICAgICAgICAgICAgICAgIHZhcmlhbnRzLmFwcGVuZChlZGdlLmNh
bGxlZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
QmFpbCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnkgY2FsbHMgdGhhdCBxdWFsaWZpZWQuCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCEhdG90YWxDYWxsc1RvS25vd24gPT0gISF2YXJpYW50cy5zaXplKCkp
OworICAgICAgICBpZiAodmFyaWFudHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHRh
a2VzU2xvd1BhdGgoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHJlcXVpcmUgdGhhdCB0aGUg
ZGlzdHJpYnV0aW9uIG9mIGNhbGxlZXMgaXMgc2tld2VkIHRvd2FyZHMgYSBoYW5kZnVsIG9mIGNv
bW1vbiBvbmVzLgorICAgICAgICBpZiAodG90YWxDYWxsc1RvS25vd24gLyB0b3RhbENhbGxzVG9V
bmtub3duIDwgT3B0aW9uczo6bWluaW11bUNhbGxUb0tub3duUmF0ZSgpKQorICAgICAgICAgICAg
cmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRvdGFsQ2FsbHNUb0tub3duKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFudHMuc2l6
ZSgpKTsKKyAgICAgICAgCisgICAgICAgIENhbGxMaW5rU3RhdHVzIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fdmFyaWFudHMgPSB2YXJpYW50czsKKyAgICAgICAgcmVzdWx0Lm1fY291bGRUYWtl
U2xvd1BhdGggPSAhIXRvdGFsQ2FsbHNUb1Vua25vd247CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAogICAgIGlmIChjYWxsTGlua0luZm8uc2xvd1BhdGhDb3VudCA+PSBPcHRp
b25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpKQogICAgICAgICByZXR1cm4gdGFr
ZXNTbG93UGF0aCgpOwogICAgIAotICAgIGlmIChDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKiBzdHVi
ID0gY2FsbExpbmtJbmZvLnN0dWIuZ2V0KCkpCi0gICAgICAgIHJldHVybiBDYWxsTGlua1N0YXR1
cyhzdHViLT5leGVjdXRhYmxlKCkpOwotICAgIAogICAgIEpTRnVuY3Rpb24qIHRhcmdldCA9IGNh
bGxMaW5rSW5mby5sYXN0U2VlbkNhbGxlZS5nZXQoKTsKICAgICBpZiAoIXRhcmdldCkKICAgICAg
ICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKQEAgLTE4MSwzNCArMjIwLDYgQEAgQ2FsbExpbmtT
dGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcgogICAgIHJldHVybiBDYWxsTGlua1N0YXR1
cyh0YXJnZXQpOwogfQogCi1DYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZy
b21DYWxsRWRnZVByb2ZpbGUoQ2FsbEVkZ2VQcm9maWxlKiBlZGdlUHJvZmlsZSkKLXsKLSAgICAv
LyBJbiBjYXNlcyB3aGVyZSB0aGUgY2FsbCBlZGdlIHByb2ZpbGUgc2F3IG5vdGhpbmcsIHVzZSB0
aGUgQ2FsbExpbmtJbmZvIGluc3RlYWQuCi0gICAgaWYgKCFlZGdlUHJvZmlsZS0+dG90YWxDYWxs
cygpKQotICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsKLSAgICAKLSAgICAvLyBUbyBk
byBhbnl0aGluZyBtZWFuaW5nZnVsLCB3ZSByZXF1aXJlIHRoYXQgdGhlIG1ham9yaXR5IG9mIGNh
bGxzIGFyZSB0byBzb21ldGhpbmcgd2UKLSAgICAvLyBrbm93IGhvdyB0byBoYW5kbGUuCi0gICAg
dW5zaWduZWQgbnVtQ2FsbHNUb0tub3duID0gZWRnZVByb2ZpbGUtPm51bUNhbGxzVG9Lbm93bkNl
bGxzKCk7Ci0gICAgdW5zaWduZWQgbnVtQ2FsbHNUb1Vua25vd24gPSBlZGdlUHJvZmlsZS0+bnVt
Q2FsbHNUb05vdENlbGwoKSArIGVkZ2VQcm9maWxlLT5udW1DYWxsc1RvVW5rbm93bkNlbGwoKTsK
LSAgICAKLSAgICAvLyBXZSByZXF1aXJlIHRoYXQgdGhlIG1ham9yaXR5IG9mIGNhbGxzIHdlcmUg
dG8gc29tZXRoaW5nIHRoYXQgd2UgY291bGQgcG9zc2libHkgaW5saW5lLgotICAgIGlmIChudW1D
YWxsc1RvS25vd24gPD0gbnVtQ2FsbHNUb1Vua25vd24pCi0gICAgICAgIHJldHVybiB0YWtlc1Ns
b3dQYXRoKCk7Ci0gICAgCi0gICAgLy8gV2UgcmVxdWlyZSB0aGF0IHRoZSBudW1iZXIgb2Ygc3Vj
aCBjYWxscyBpcyBncmVhdGVyIHRoYW4gc29tZSBtaW5pbWFsIHRocmVzaG9sZCwgc28gdGhhdCB3
ZQotICAgIC8vIGF2b2lkIGlubGluaW5nIGNvbXBsZXRlbHkgY29sZCBjYWxscy4KLSAgICBpZiAo
bnVtQ2FsbHNUb0tub3duIDwgT3B0aW9uczo6ZnJlcXVlbnRDYWxsVGhyZXNob2xkKCkpCi0gICAg
ICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7Ci0gICAgCi0gICAgQ2FsbExpbmtTdGF0dXMgcmVz
dWx0OwotICAgIHJlc3VsdC5tX2VkZ2VzID0gZWRnZVByb2ZpbGUtPmNhbGxFZGdlcygpOwotICAg
IHJlc3VsdC5tX2NvdWxkVGFrZVNsb3dQYXRoID0gISFudW1DYWxsc1RvVW5rbm93bjsKLSAgICBy
ZXN1bHQubV9jYW5UcnVzdENvdW50cyA9IHRydWU7Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQogQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgY29u
c3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLAogICAgIEV4aXRTaXRlRGF0YSBleGl0U2l0ZURh
dGEpCkBAIC0yODIsOCArMjkzLDggQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNv
bXB1dGVGbwogCiBib29sIENhbGxMaW5rU3RhdHVzOjppc0Nsb3N1cmVDYWxsKCkgY29uc3QKIHsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2VkZ2VzLnNpemUoKTsgaS0tOykgewotICAgICAgICBp
ZiAobV9lZGdlc1tpXS5jYWxsZWUoKS5pc0Nsb3N1cmVDYWxsKCkpCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKG1fdmFyaWFudHNb
aV0uaXNDbG9zdXJlQ2FsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKQEAgLTI5MSwxOCArMzAyLDcgQEAgYm9vbCBDYWxsTGlua1N0YXR1czo6
aXNDbG9zdXJlQ2FsbCgpIGNvbgogCiB2b2lkIENhbGxMaW5rU3RhdHVzOjptYWtlQ2xvc3VyZUNh
bGwoKQogewotICAgIEFTU0VSVCghbV9pc1Byb3ZlZCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
bV9lZGdlcy5zaXplKCk7IGktLTspCi0gICAgICAgIG1fZWRnZXNbaV0gPSBtX2VkZ2VzW2ldLmRl
c3BlY2lmaWVkQ2xvc3VyZSgpOwotICAgIAotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0g
ICAgICAgIC8vIERvaW5nIHRoaXMgc2hvdWxkIG5vdCBoYXZlIGNyZWF0ZWQgZHVwbGljYXRlcywg
YmVjYXVzZSB0aGUgQ2FsbEVkZ2VQcm9maWxlCi0gICAgICAgIC8vIHNob3VsZCBkZXNwZWNpZnkg
Y2xvc3VyZXMgaWYgZG9pbmcgc28gd291bGQgcmVkdWNlIHRoZSBudW1iZXIgb2Yga25vd24gY2Fs
bGVlcy4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZWRnZXMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgbV9lZGdlcy5z
aXplKCk7ICsraikKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9lZGdlc1tpXS5jYWxsZWUoKSAh
PSBtX2VkZ2VzW2pdLmNhbGxlZSgpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBtX3ZhcmlhbnRz
ID0gZGVzcGVjaWZpZWRWYXJpYW50TGlzdChtX3ZhcmlhbnRzKTsKIH0KIAogdm9pZCBDYWxsTGlu
a1N0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtMzIwLDcgKzMyMCw4IEBA
IHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG8KICAgICBpZiAobV9jb3Vs
ZFRha2VTbG93UGF0aCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiQ291bGQgVGFrZSBTbG93
IFBhdGgiKTsKICAgICAKLSAgICBvdXQucHJpbnQobGlzdER1bXAobV9lZGdlcykpOworICAgIGlm
ICghbV92YXJpYW50cy5pc0VtcHR5KCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgbGlzdER1
bXAobV92YXJpYW50cykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCShyZXZpc2lvbiAx
NzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIENhbGxM
aW5rU3RhdHVzX2gKIAogI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgorI2luY2x1ZGUgIkNhbGxW
YXJpYW50LmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFs
aXphdGlvbktpbmQuaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgpAQCAtNDgsNyAr
NDksNiBAQCBwdWJsaWM6CiAgICAgQ2FsbExpbmtTdGF0dXMoKQogICAgICAgICA6IG1fY291bGRU
YWtlU2xvd1BhdGgoZmFsc2UpCiAgICAgICAgICwgbV9pc1Byb3ZlZChmYWxzZSkKLSAgICAgICAg
LCBtX2NhblRydXN0Q291bnRzKGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCkBAIC02MiwxMCAr
NjIsOSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ2FsbExpbmtTdGF0dXMoSlNWYWx1ZSk7CiAg
ICAgCiAgICAgQ2FsbExpbmtTdGF0dXMoQ2FsbFZhcmlhbnQgdmFyaWFudCkKLSAgICAgICAgOiBt
X2VkZ2VzKDEsIENhbGxFZGdlKHZhcmlhbnQsIDEpKQorICAgICAgICA6IG1fdmFyaWFudHMoMSwg
dmFyaWFudCkKICAgICAgICAgLCBtX2NvdWxkVGFrZVNsb3dQYXRoKGZhbHNlKQogICAgICAgICAs
IG1faXNQcm92ZWQoZmFsc2UpCi0gICAgICAgICwgbV9jYW5UcnVzdENvdW50cyhmYWxzZSkKICAg
ICB7CiAgICAgfQogICAgIApAQCAtMTA5LDE5ICsxMDgsMTggQEAgcHVibGljOgogICAgIHN0YXRp
YyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKAogICAgICAgICBDb2RlQmxvY2sqLCBDb2RlT3Jp
Z2luLCBjb25zdCBDYWxsTGlua0luZm9NYXAmLCBjb25zdCBDb250ZXh0TWFwJik7CiAgICAgCi0g
ICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICFtX2VkZ2VzLmlzRW1wdHkoKSB8fCBtX2Nv
dWxkVGFrZVNsb3dQYXRoOyB9CisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICFtX3Zh
cmlhbnRzLmlzRW1wdHkoKSB8fCBtX2NvdWxkVGFrZVNsb3dQYXRoOyB9CiAgICAgCiAgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIAogICAgIGJvb2wg
Y291bGRUYWtlU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX2NvdWxkVGFrZVNsb3dQYXRoOyB9
CiAgICAgCi0gICAgQ2FsbEVkZ2VMaXN0IGVkZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9lZGdlczsg
fQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2VkZ2VzLnNpemUoKTsgfQot
ICAgIENhbGxFZGdlIGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZXNbaV07IH0K
LSAgICBDYWxsRWRnZSBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkp
OyB9CisgICAgQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJp
YW50czsgfQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNp
emUoKTsgfQorICAgIENhbGxWYXJpYW50IGF0KHVuc2lnbmVkIGkpIGNvbnN0IHsgcmV0dXJuIG1f
dmFyaWFudHNbaV07IH0KKyAgICBDYWxsVmFyaWFudCBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNv
bnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgYm9vbCBpc1Byb3ZlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNQcm92ZWQ7IH0KLSAgICBib29sIGNhbk9wdGltaXplKCkgY29uc3QgeyByZXR1cm4gIW1f
ZWRnZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBjYW5UcnVzdENvdW50cygpIGNvbnN0IHsgcmV0
dXJuIG1fY2FuVHJ1c3RDb3VudHM7IH0KKyAgICBib29sIGNhbk9wdGltaXplKCkgY29uc3QgeyBy
ZXR1cm4gIW1fdmFyaWFudHMuaXNFbXB0eSgpOyB9CiAgICAgCiAgICAgYm9vbCBpc0Nsb3N1cmVD
YWxsKCkgY29uc3Q7IC8vIFJldHVybnMgdHJ1ZSBpZiBhbnkgY2FsbGVlIGlzIGEgY2xvc3VyZSBj
YWxsLgogICAgIApAQCAtMTMyLDE1ICsxMzAsMTMgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0
aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAjaWYgRU5BQkxFKEpJ
VCkKLSAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZyb21DYWxsRWRnZVByb2ZpbGUo
Q2FsbEVkZ2VQcm9maWxlKik7CiAgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9t
Q2FsbExpbmtJbmZvKAogICAgICAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ2FsbExp
bmtJbmZvJik7CiAjZW5kaWYKICAgICAKLSAgICBDYWxsRWRnZUxpc3QgbV9lZGdlczsKKyAgICBD
YWxsVmFyaWFudExpc3QgbV92YXJpYW50czsKICAgICBib29sIG1fY291bGRUYWtlU2xvd1BhdGg7
CiAgICAgYm9vbCBtX2lzUHJvdmVkOwotICAgIGJvb2wgbV9jYW5UcnVzdENvdW50czsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw1ICs1
MCwzNCBAQCB2b2lkIENhbGxWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgb3V0
LnByaW50KCJFeGVjdXRhYmxlOiAiLCAqZXhlY3V0YWJsZSgpKTsKIH0KIAorQ2FsbFZhcmlhbnRM
aXN0IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQoY29uc3QgQ2FsbFZhcmlhbnRMaXN0JiBsaXN0LCBD
YWxsVmFyaWFudCB2YXJpYW50VG9BZGQpCit7CisgICAgQVNTRVJUKHZhcmlhbnRUb0FkZCk7Cisg
ICAgQ2FsbFZhcmlhbnRMaXN0IHJlc3VsdDsKKyAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQg
OiBsaXN0KSB7CisgICAgICAgIEFTU0VSVCh2YXJpYW50KTsKKyAgICAgICAgaWYgKCEhdmFyaWFu
dFRvQWRkKSB7CisgICAgICAgICAgICBpZiAodmFyaWFudCA9PSB2YXJpYW50VG9BZGQpCisgICAg
ICAgICAgICAgICAgdmFyaWFudFRvQWRkID0gQ2FsbFZhcmlhbnQoKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHZhcmlhbnQuZGVzcGVjaWZpZWRDbG9zdXJlKCkgPT0gdmFyaWFudFRvQWRkLmRlc3Bl
Y2lmaWVkQ2xvc3VyZSgpKSB7CisgICAgICAgICAgICAgICAgdmFyaWFudCA9IHZhcmlhbnQuZGVz
cGVjaWZpZWRDbG9zdXJlKCk7CisgICAgICAgICAgICAgICAgdmFyaWFudFRvQWRkID0gQ2FsbFZh
cmlhbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXN1bHQuYXBwZW5k
KHZhcmlhbnQpOworICAgIH0KKyAgICBpZiAoISF2YXJpYW50VG9BZGQpCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQodmFyaWFudFRvQWRkKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDYWxsVmFy
aWFudExpc3QgZGVzcGVjaWZpZWRWYXJpYW50TGlzdChjb25zdCBDYWxsVmFyaWFudExpc3QmIGxp
c3QpCit7CisgICAgQ2FsbFZhcmlhbnRMaXN0IHJlc3VsdDsKKyAgICBmb3IgKENhbGxWYXJpYW50
IHZhcmlhbnQgOiBsaXN0KQorICAgICAgICByZXN1bHQgPSB2YXJpYW50TGlzdFdpdGhWYXJpYW50
KHJlc3VsdCwgdmFyaWFudC5kZXNwZWNpZmllZENsb3N1cmUoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5oCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTYs
MTEgKzU2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyAgICAgdGhhbiB0aGUgZmFjdCB0aGF0IHRo
ZXkgZG9uJ3QgZmFsbCBpbnRvIGFueSBvZiB0aGUgYWJvdmUgY2F0ZWdvcmllcy4KIC8vCiAvLyBU
aGlzIGNsYXNzIHNlcnZlcyBhcyBhIGtpbmQgb2YgdW5pb24gb3ZlciB0aGVzZSBmb3VyIHRoaW5n
cy4gSXQgZG9lcyBzbyBieSBqdXN0IGhvbGRpbmcgYQotLy8gSlNDZWxsKi4gV2UgZGV0ZXJtaW5l
IHdoaWNoIG9mIHRoZSBtb2RlcyBpdHMgaW4gYnkgZG9pbmcgdHlwZSBjaGVja3Mgb24gdGhlIGNl
bGwuIE5vdGUgdGhhdCB0aGVyZQotLy8gaXMgbm8gbGlmZWN5Y2xlIG1hbmFnZW1lbnQgZm9yIHRo
ZSBjZWxsIGJlY2F1c2UgdGhpcyBjbGFzcyBpcyBhbHdheXMgdXNlZCBpbiBjb250ZXh0cyB3aGVy
ZSB3ZQotLy8gZWl0aGVyIGRvIGN1c3RvbSB3ZWFrIHJlZmVyZW5jZSBsb2dpYyBvdmVyIGluc3Rh
bmNlcyBvZiB0aGlzIGNsYXNzIChzZWUgQ2FsbEVkZ2VQcm9maWxlKSwgb3Igd2UKLS8vIGFyZSBp
bnNpZGUgdGhlIGNvbXBpbGVyIGFuZCB3ZSBhc3N1bWUgdGhhdCB0aGUgY29tcGlsZXIgcnVucyBp
biBiZXR3ZWVuIGNvbGxlY3Rpb25zIGFuZCBzbyBjYW4KLS8vIHRvdWNoIHRoZSBoZWFwIHdpdGhv
dXQgbm90aWZ5aW5nIGFueW9uZS4KKy8vIEpTQ2VsbCouIFdlIGRldGVybWluZSB3aGljaCBvZiB0
aGUgbW9kZXMgaXRzIGluIGJ5IGRvaW5nIHR5cGUgY2hlY2tzIG9uIHRoZSBjZWxsLiBOb3RlIHRo
YXQgd2UKKy8vIGNhbm5vdCB1c2UgV3JpdGVCYXJyaWVyPD4gaGVyZSBiZWNhdXNlIHRoaXMgZ2V0
cyB1c2VkIGluc2lkZSB0aGUgY29tcGlsZXIuCiAKIGNsYXNzIENhbGxWYXJpYW50IHsKIHB1Ymxp
YzoKQEAgLTE4MSw2ICsxNzgsMTMgQEAgc3RydWN0IENhbGxWYXJpYW50SGFzaCB7CiAKIHR5cGVk
ZWYgVmVjdG9yPENhbGxWYXJpYW50LCAxPiBDYWxsVmFyaWFudExpc3Q7CiAKKy8vIFJldHVybnMg
YSBuZXcgdmFyaWFudCBsaXN0IGJ5IGF0dGVtcHRpbmcgdG8gZWl0aGVyIGFwcGVuZCB0aGUgZ2l2
ZW4gdmFyaWFudCBvciBtZXJnZSBpdCB3aXRoIG9uZQorLy8gb2YgdGhlIHZhcmlhbnRzIHdlIGFs
cmVhZHkgaGF2ZSBieSBkZXNwZWNpZnlpbmcgY2xvc3VyZXMuCitDYWxsVmFyaWFudExpc3QgdmFy
aWFudExpc3RXaXRoVmFyaWFudChjb25zdCBDYWxsVmFyaWFudExpc3QmLCBDYWxsVmFyaWFudCk7
CisKKy8vIFJldHVybnMgYSBuZXcgbGlzdCB3aGVyZSBldmVyeSBlbGVtZW50IGlzIGRlc3BlY2lm
aWVkLCBhbmQgdGhlIGxpc3QgaXMgZGVkdXBsaWNhdGVkLgorQ2FsbFZhcmlhbnRMaXN0IGRlc3Bl
Y2lmaWVkVmFyaWFudExpc3QoY29uc3QgQ2FsbFZhcmlhbnRMaXN0Jik7CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTIsIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTAsIDIwMTItMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9v
LmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjE4MSw2ICsyMTgxLDggQEAgQ29kZUJsb2NrOjp+
Q29kZUJsb2NrKCkKICAgICAvLyBkZXN0cnVjdG9yIHdpbGwgdHJ5IHRvIHJlbW92ZSBub2RlcyBm
cm9tIG91ciAobm8gbG9uZ2VyIHZhbGlkKSBsaW5rZWQgbGlzdC4KICAgICB3aGlsZSAobV9pbmNv
bWluZ0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ0NhbGxzLmVuZCgpKQogICAgICAgICBtX2lu
Y29taW5nQ2FsbHMuYmVnaW4oKS0+cmVtb3ZlKCk7CisgICAgd2hpbGUgKG1faW5jb21pbmdQb2x5
bW9ycGhpY0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuZW5kKCkp
CisgICAgICAgIG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmJlZ2luKCktPnJlbW92ZSgpOwog
ICAgIAogICAgIC8vIE5vdGUgdGhhdCBvdXIgb3V0Z29pbmcgY2FsbHMgd2lsbCBiZSByZW1vdmVk
IGZyb20gb3RoZXIgQ29kZUJsb2NrcycKICAgICAvLyBtX2luY29taW5nQ2FsbHMgbGlua2VkIGxp
c3RzIHRocm91Z2ggdGhlIGV4ZWN1dGlvbiBvZiB0aGUgfkNhbGxMaW5rSW5mbwpAQCAtMzA0Nyw2
ICszMDQ5LDEyIEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGEKICAg
ICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOwogICAgIG1faW5jb21pbmdDYWxscy5w
dXNoKGluY29taW5nKTsKIH0KKwordm9pZCBDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ1BvbHltb3Jw
aGljQ2FsbChFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBQb2x5bW9ycGhpY0NhbGxOb2RlKiBpbmNv
bWluZykKK3sKKyAgICBub3RpY2VJbmNvbWluZ0NhbGwoY2FsbGVyRnJhbWUpOworICAgIG1faW5j
b21pbmdQb2x5bW9ycGhpY0NhbGxzLnB1c2goaW5jb21pbmcpOworfQogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKQEAgLTMwNTQs
MTEgKzMwNjIsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQogICAg
IHdoaWxlIChtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdMTEludENh
bGxzLmVuZCgpKQogICAgICAgICBtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpLT51bmxpbmso
KTsKICNpZiBFTkFCTEUoSklUKQotICAgIGlmIChtX2luY29taW5nQ2FsbHMuaXNFbXB0eSgpKQor
ICAgIGlmIChtX2luY29taW5nQ2FsbHMuaXNFbXB0eSgpICYmIG1faW5jb21pbmdQb2x5bW9ycGhp
Y0NhbGxzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcih0aGlzKTsKICAgICB3aGlsZSAobV9pbmNvbWluZ0NhbGxzLmJlZ2luKCkgIT0g
bV9pbmNvbWluZ0NhbGxzLmVuZCgpKQogICAgICAgICBtX2luY29taW5nQ2FsbHMuYmVnaW4oKS0+
dW5saW5rKHJlcGF0Y2hCdWZmZXIpOworICAgIHdoaWxlIChtX2luY29taW5nUG9seW1vcnBoaWND
YWxscy5iZWdpbigpICE9IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmVuZCgpKQorICAgICAg
ICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpLT51bmxpbmsocmVwYXRjaEJ1ZmZl
cik7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIApAQCAtMzI1MiwxMiArMzI2MiwxOSBAQCB2
b2lkIENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKEV4ZWNTCiAgICAgQ29kZUJsb2NrKiBj
YWxsZXJDb2RlQmxvY2sgPSBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgCiAgICAgaWYg
KE9wdGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQotICAgICAgICBkYXRhTG9nKCJOb3RpY2luZyBj
YWxsIGxpbmsgZnJvbSAiLCAqY2FsbGVyQ29kZUJsb2NrLCAiIHRvICIsICp0aGlzLCAiXG4iKTsK
KyAgICAgICAgZGF0YUxvZygiTm90aWNpbmcgY2FsbCBsaW5rIGZyb20gIiwgcG9pbnRlckR1bXAo
Y2FsbGVyQ29kZUJsb2NrKSwgIiB0byAiLCAqdGhpcywgIlxuIik7CiAgICAgCisjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgaWYgKCFtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKICAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGlmICghY2FsbGVyQ29kZUJsb2NrKSB7CisgICAgICAgIG1fc2hvdWxk
QWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2Fs
bExpbmsoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJlY2F1c2Ug
Y2FsbGVyIGlzIG5hdGl2ZS5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0jaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgaWYgKCFoYXNCYXNlbGluZUpJVFByb2ZpbGluZygpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTMyODUsNiArMzMwMiwxMyBAQCB2b2lkIENvZGVCbG9jazo6bm90aWNl
SW5jb21pbmdDYWxsKEV4ZWNTCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCisgICAgaWYg
KEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsK
KyAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGluZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VDYWxsTGluaygpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIENsZWFy
aW5nIFNBQkkgYmNhdXNlIGNhbGxlciB3YXMgYWxyZWFkeSBvcHRpbWl6ZWQuXG4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBpZiAoY2FsbGVyQ29kZUJsb2NrLT5jb2RlVHlw
ZSgpICE9IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIGVpdGhl
ciBldmFsIG9yIGdsb2JhbCBjb2RlLCBhc3N1bWUgdGhhdCB0aGF0IHdvbid0IGJlCiAgICAgICAg
IC8vIG9wdGltaXplZCBhbnl0aW1lIHNvb24uIEZvciBldmFsIGNvZGUgdGhpcyBpcyBwYXJ0aWN1
bGFybHkgdHJ1ZSBzaW5jZSB3ZQpAQCAtMzMwNSw4ICszMzI5LDExIEBAIHZvaWQgQ29kZUJsb2Nr
Ojpub3RpY2VJbmNvbWluZ0NhbGwoRXhlY1MKICAgICAgICAgbV9zaG91bGRBbHdheXNCZUlubGlu
ZWQgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIFJFTEVBU0VfQVNTRVJU
KGNhbGxlckNvZGVCbG9jay0+bV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSAhPSBERkc6OkNhcGFiaWxp
dHlMZXZlbE5vdFNldCk7CisgICAgCisgICAgaWYgKGNhbGxlckNvZGVCbG9jay0+bV9jYXBhYmls
aXR5TGV2ZWxTdGF0ZSA9PSBERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkgeworICAgICAgICBk
YXRhTG9nKCJJbiBjYWxsIGZyb20gIiwgKmNhbGxlckNvZGVCbG9jaywgIiAiLCBjYWxsZXJGcmFt
ZS0+Y29kZU9yaWdpbigpLCAiIHRvICIsICp0aGlzLCAiOiBjYWxsZXIncyBERkcgY2FwYWJpbGl0
eSBsZXZlbCBpcyBub3Qgc2V0LlxuIik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQogICAgIAog
ICAgIGlmIChjYW5Db21waWxlKGNhbGxlckNvZGVCbG9jay0+bV9jYXBhYmlsaXR5TGV2ZWxTdGF0
ZSkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDExICsyMjksNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCB1bmxpbmtDYWxscygpOwogICAgICAgICAKICAgICB2b2lkIGxp
bmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgQ2FsbExpbmtJbmZvKik7Ci0g
ICAgICAgIAotICAgIGJvb2wgaXNJbmNvbWluZ0NhbGxBbHJlYWR5TGlua2VkKENhbGxMaW5rSW5m
byogaW5jb21pbmcpCi0gICAgewotICAgICAgICByZXR1cm4gbV9pbmNvbWluZ0NhbGxzLmlzT25M
aXN0KGluY29taW5nKTsKLSAgICB9CisgICAgdm9pZCBsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0Nh
bGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFtZSwgUG9seW1vcnBoaWNDYWxsTm9kZSopOwogI2VuZGlm
IC8vIEVOQUJMRShKSVQpCiAKICAgICB2b2lkIGxpbmtJbmNvbWluZ0NhbGwoRXhlY1N0YXRlKiBj
YWxsZXJGcmFtZSwgTExJbnRDYWxsTGlua0luZm8qKTsKQEAgLTEwNzcsNiArMTA3Myw3IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPEJ5VmFsSW5mbz4gbV9ieVZhbEluZm9zOwogICAgIEJhZzxDYWxs
TGlua0luZm8+IG1fY2FsbExpbmtJbmZvczsKICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExp
bmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+PiBtX2luY29taW5nQ2Fs
bHM7CisgICAgU2VudGluZWxMaW5rZWRMaXN0PFBvbHltb3JwaGljQ2FsbE5vZGUsIEJhc2ljUmF3
U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+PiBtX2luY29taW5nUG9seW1vcnBoaWND
YWxsczsKICNlbmRpZgogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9q
aXRDb2RlTWFwOwogI2lmIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
cmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY4LDE0ICsxOTY4LDYg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBmb3JO
b2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBQcm9m
aWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKLSAgICAgICAgaWYgKGZvck5v
ZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkubV92YWx1ZSkKLSAgICAgICAgICAgIG1f
c3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgIGNsb2JiZXJXb3JsZChub2Rl
LT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZvck5vZGUobm9kZSku
bWFrZUhlYXBUb3AoKTsKLSAgICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIEZvcmNlT1NSRXhpdDoK
ICAgICBjYXNlIENoZWNrQmFkQ2VsbDoKICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKICAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjc1
LDcgKzY3NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChwYXJhbWV0ZXJTbG90cyA+IG1fcGFy
YW1ldGVyU2xvdHMpCiAgICAgICAgICAgICBtX3BhcmFtZXRlclNsb3RzID0gcGFyYW1ldGVyU2xv
dHM7CiAKLSAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gb3AgPT0gQ2FsbCB8fCBvcCA9
PSBOYXRpdmVDYWxsIHx8IG9wID09IFByb2ZpbGVkQ2FsbCA/IDAgOiAxOworICAgICAgICBpbnQg
ZHVtbXlUaGlzQXJndW1lbnQgPSBvcCA9PSBDYWxsIHx8IG9wID09IE5hdGl2ZUNhbGwgPyAwIDog
MTsKICAgICAgICAgZm9yIChpbnQgaSA9IDAgKyBkdW1teVRoaXNBcmd1bWVudDsgaSA8IGFyZ0Nv
dW50OyArK2kpCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAKQEAgLTEwNDQsMTcgKzEwNDQsOCBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIGlmIChjYWxsVGFyZ2V0LT5o
YXNDb25zdGFudCgpKQogICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzKGNh
bGxUYXJnZXQtPmFzSlNWYWx1ZSgpKS5zZXRJc1Byb3ZlZCh0cnVlKTsKICAgICAKLSAgICBpZiAo
KCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpIHx8IGNhbGxMaW5rU3RhdHVzLnNpemUoKSAh
PSAxKQotICAgICAgICAmJiAhaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkgJiYgT3B0aW9uczo6
dXNlRlRMSklUKCkKLSAgICAgICAgJiYgSW5saW5lQ2FsbEZyYW1lOjppc05vcm1hbENhbGwoa2lu
ZCkKLSAgICAgICAgJiYgQ2FsbEVkZ2VMb2c6OmlzRW5hYmxlZCgpCi0gICAgICAgICYmIE9wdGlv
bnM6OmRmZ0RvZXNDYWxsRWRnZVByb2ZpbGluZygpKSB7Ci0gICAgICAgIEFTU0VSVChvcCA9PSBD
YWxsIHx8IG9wID09IENvbnN0cnVjdCk7Ci0gICAgICAgIGlmIChvcCA9PSBDYWxsKQotICAgICAg
ICAgICAgb3AgPSBQcm9maWxlZENhbGw7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wID0g
UHJvZmlsZWRDb25zdHJ1Y3Q7Ci0gICAgfQorICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0
ZUNvZGVQYXJzaW5nKCkpCisgICAgICAgIGRhdGFMb2coIiAgICBIYW5kbGluZyBjYWxsIGF0ICIs
IGN1cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIGNhbGxMaW5rU3RhdHVzLCAiXG4iKTsKICAgICAK
ICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkpIHsKICAgICAgICAgLy8gT2Rk
bHksIHRoaXMgY29uZmxhdGVzIGNhbGxzIHRoYXQgaGF2ZW4ndCBleGVjdXRlZCB3aXRoIGNhbGxz
IHRoYXQgYmVoYXZlZCBzdWZmaWNpZW50bHkgcG9seW1vcnBoaWNhbGx5CkBAIC0xMDc2LDE3ICsx
MDY3LDE3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgCiAjaWYgRU5B
QkxFKEZUTF9OQVRJVkVfQ0FMTF9JTkxJTklORykKICAgICBpZiAoaXNGVEwobV9ncmFwaC5tX3Bs
YW4ubW9kZSkgJiYgT3B0aW9uczo6b3B0aW1pemVOYXRpdmVDYWxscygpICYmIGNhbGxMaW5rU3Rh
dHVzLnNpemUoKSA9PSAxICYmICFjYWxsTGlua1N0YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpKSB7
Ci0gICAgICAgIENhbGxWYXJpYW50IGNhbGxlZSA9IGNhbGxMaW5rU3RhdHVzWzBdLmNhbGxlZSgp
OworICAgICAgICBDYWxsVmFyaWFudCBjYWxsZWUgPSBjYWxsTGlua1N0YXR1c1swXTsKICAgICAg
ICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsZWUuZnVuY3Rpb24oKTsKICAgICAgICAgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6
OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5kKTsKICAgICAgICAgaWYgKGZ1bmN0aW9uICYmIGZ1
bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKSB7CiAgICAgICAgICAgICBlbWl0RnVuY3Rpb25DaGVj
a3MoY2FsbGVlLCBjYWxsVGFyZ2V0LCByZWdpc3Rlck9mZnNldCwgc3BlY2lhbGl6YXRpb25LaW5k
KTsKICAgICAgICAgICAgIGNhbGxPcEluZm8gPSBPcEluZm8obV9ncmFwaC5mcmVlemUoZnVuY3Rp
b24pKTsKIAotICAgICAgICAgICAgaWYgKG9wID09IENhbGwgfHwgb3AgPT0gUHJvZmlsZWRDYWxs
KQorICAgICAgICAgICAgaWYgKG9wID09IENhbGwpCiAgICAgICAgICAgICAgICAgb3AgPSBOYXRp
dmVDYWxsOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG9wID09
IENvbnN0cnVjdCB8fCBvcCA9PSBQcm9maWxlZENvbnN0cnVjdCk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKG9wID09IENvbnN0cnVjdCk7CiAgICAgICAgICAgICAgICAgb3AgPSBOYXRpdmVDb25z
dHJ1Y3Q7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE0MjYsMTMgKzE0MTcsMTMgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIC8vIHRoaXMgaW4g
Y2FzZXMgd2hlcmUgd2UgZG9uJ3QgbmVlZCBjb250cm9sIGZsb3cgZGlhbW9uZHMgdG8gY2hlY2sg
dGhlIGNhbGxlZS4KICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNvdWxkVGFrZVNsb3dQYXRoKCkg
JiYgY2FsbExpbmtTdGF0dXMuc2l6ZSgpID09IDEpIHsKICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hl
Y2tzKAotICAgICAgICAgICAgY2FsbExpbmtTdGF0dXNbMF0uY2FsbGVlKCksIGNhbGxUYXJnZXRO
b2RlLCByZWdpc3Rlck9mZnNldCwgc3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgICAgIGNh
bGxMaW5rU3RhdHVzWzBdLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxp
emF0aW9uS2luZCk7CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gYXR0ZW1wdFRvSW5saW5lQ2FsbCgK
LSAgICAgICAgICAgIGNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1
c1swXS5jYWxsZWUoKSwgcmVnaXN0ZXJPZmZzZXQsCisgICAgICAgICAgICBjYWxsVGFyZ2V0Tm9k
ZSwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0sIHJlZ2lzdGVyT2Zmc2V0LAogICAg
ICAgICAgICAgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQsIENh
bGxlckRvZXNOb3JtYWxMaW5raW5nLCBwcmVkaWN0aW9uLAogICAgICAgICAgICAgaW5saW5pbmdC
YWxhbmNlKTsKICAgICAgICAgaWYgKCFyZXN1bHQgJiYgIWNhbGxMaW5rU3RhdHVzLmlzUHJvdmVk
KCkpCi0gICAgICAgICAgICB1bmRvRnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXNbMF0uY2Fs
bGVlKCkpOworICAgICAgICAgICAgdW5kb0Z1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBd
KTsKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkRvbmUgaW5s
aW5pbmcgKHNpbXBsZSkuXG4iKTsKICAgICAgICAgICAgIGRhdGFMb2coIlN0YWNrOiAiLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKQEAgLTE0NjIsNyArMTQ1Myw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICBib29sIGFsbEFyZUNsb3N1cmVDYWxs
cyA9IHRydWU7CiAgICAgYm9vbCBhbGxBcmVEaXJlY3RDYWxscyA9IHRydWU7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gY2FsbExpbmtTdGF0dXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIGlmIChj
YWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKS5pc0Nsb3N1cmVDYWxsKCkpCisgICAgICAgIGlmIChj
YWxsTGlua1N0YXR1c1tpXS5pc0Nsb3N1cmVDYWxsKCkpCiAgICAgICAgICAgICBhbGxBcmVEaXJl
Y3RDYWxscyA9IGZhbHNlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhbGxBcmVDbG9zdXJl
Q2FsbHMgPSBmYWxzZTsKQEAgLTE0NzUsOSArMTQ2Niw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAgICAgdGhpbmdUb1N3aXRjaE9uID0gYWRkVG9HcmFw
aChHZXRFeGVjdXRhYmxlLCBjYWxsVGFyZ2V0Tm9kZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhpcyBjYXNlLCBidXQgaXQncyB0
cmlja3kgYW5kIHdlIGRvbid0IGtub3cgb2YgY2FzZXMKLSAgICAgICAgLy8gd2hlcmUgaXQgd291
bGQgYmUgYmVuZWZpY2lhbC4gQWxzbywgQ2FsbExpbmtTdGF0dXMgd291bGQgbWFrZSBhbGwgY2Fs
bGVlcyBhcHBlYXIgbGlrZQotICAgICAgICAvLyBjbG9zdXJlIGNhbGxzIGlmIGFueSBjYWxscyB3
ZXJlIGNsb3N1cmUgY2FsbHMgLSBleGNlcHQgZm9yIGNhbGxzIHRvIGludGVybmFsIGZ1bmN0aW9u
cy4KLSAgICAgICAgLy8gU28gdGhpcyB3aWxsIG9ubHkgYXJpc2UgaWYgc29tZSBjYWxsZWVzIGFy
ZSBpbnRlcm5hbCBmdW5jdGlvbnMgYW5kIG90aGVycyBhcmUgY2xvc3VyZXMuCisgICAgICAgIC8v
IHdoZXJlIGl0IHdvdWxkIGJlIGJlbmVmaWNpYWwuIEl0IG1pZ2h0IGJlIGJlc3QgdG8gaGFuZGxl
IHRoZXNlIGNhc2VzIGFzIGlmIGFsbCBjYWxscyB3ZXJlCisgICAgICAgIC8vIGNsb3N1cmUgY2Fs
bHMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzYwMjAKICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIkJhaWxp
bmcgaW5saW5pbmcgKG1peCkuXG4iKTsKQEAgLTE1MTcsNyArMTUwNyw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICAvLyB0byB0aGUgY29udGludWF0aW9u
IGJsb2NrLCB3aGljaCB3ZSBjcmVhdGUgbGFzdC4KICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGxh
bmRpbmdCbG9ja3M7CiAgICAgCi0gICAgLy8gV2UgbWFrZSBmb3JjZSB0aGlzIHRydWUgaWYgd2Ug
Z2l2ZSB1cCBvbiBpbmxpbmluZyBhbnkgb2YgdGhlIGVkZ2VzLgorICAgIC8vIFdlIG1heSBmb3Jj
ZSB0aGlzIHRydWUgaWYgd2UgZ2l2ZSB1cCBvbiBpbmxpbmluZyBhbnkgb2YgdGhlIGVkZ2VzLgog
ICAgIGJvb2wgY291bGRUYWtlU2xvd1BhdGggPSBjYWxsTGlua1N0YXR1cy5jb3VsZFRha2VTbG93
UGF0aCgpOwogICAgIAogICAgIGlmICh2ZXJib3NlKQpAQCAtMTUzMyw3ICsxNTIzLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBOb2RlKiBteUNh
bGxUYXJnZXROb2RlID0gZ2V0RGlyZWN0KGNhbGxlZVJlZyk7CiAgICAgICAgIAogICAgICAgICBi
b29sIGlubGluaW5nUmVzdWx0ID0gYXR0ZW1wdFRvSW5saW5lQ2FsbCgKLSAgICAgICAgICAgIG15
Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzW2ldLmNhbGxlZSgp
LCByZWdpc3Rlck9mZnNldCwKKyAgICAgICAgICAgIG15Q2FsbFRhcmdldE5vZGUsIHJlc3VsdE9w
ZXJhbmQsIGNhbGxMaW5rU3RhdHVzW2ldLCByZWdpc3Rlck9mZnNldCwKICAgICAgICAgICAgIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJMaW5rc01h
bnVhbGx5LCBwcmVkaWN0aW9uLAogICAgICAgICAgICAgaW5saW5pbmdCYWxhbmNlKTsKICAgICAg
ICAgCkBAIC0xNTUyLDEwICsxNTQyLDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKE5vZGUKICAgICAgICAgCiAgICAgICAgIEpTQ2VsbCogdGhpbmdUb0Nhc2VPbjsKICAg
ICAgICAgaWYgKGFsbEFyZURpcmVjdENhbGxzKQotICAgICAgICAgICAgdGhpbmdUb0Nhc2VPbiA9
IGNhbGxMaW5rU3RhdHVzW2ldLmNhbGxlZSgpLm5vbkV4ZWN1dGFibGVDYWxsZWUoKTsKKyAgICAg
ICAgICAgIHRoaW5nVG9DYXNlT24gPSBjYWxsTGlua1N0YXR1c1tpXS5ub25FeGVjdXRhYmxlQ2Fs
bGVlKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKGFsbEFyZUNsb3N1cmVD
YWxscyk7Ci0gICAgICAgICAgICB0aGluZ1RvQ2FzZU9uID0gY2FsbExpbmtTdGF0dXNbaV0uY2Fs
bGVlKCkuZXhlY3V0YWJsZSgpOworICAgICAgICAgICAgdGhpbmdUb0Nhc2VPbiA9IGNhbGxMaW5r
U3RhdHVzW2ldLmV4ZWN1dGFibGUoKTsKICAgICAgICAgfQogICAgICAgICBkYXRhLmNhc2VzLmFw
cGVuZChTd2l0Y2hDYXNlKG1fZ3JhcGguZnJlZXplKHRoaW5nVG9DYXNlT24pLCBibG9jay5nZXQo
KSkpOwogICAgICAgICBtX2N1cnJlbnRJbmRleCA9IG5leHRPZmZzZXQ7CkBAIC0xNTY3LDcgKzE1
NTcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAg
IGxhbmRpbmdCbG9ja3MuYXBwZW5kKG1fY3VycmVudEJsb2NrKTsKIAogICAgICAgICBpZiAodmVy
Ym9zZSkKLSAgICAgICAgICAgIGRhdGFMb2coIkZpbmlzaGVkIGlubGluaW5nICIsIGNhbGxMaW5r
U3RhdHVzW2ldLmNhbGxlZSgpLCAiIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICIuXG4iKTsK
KyAgICAgICAgICAgIGRhdGFMb2coIkZpbmlzaGVkIGlubGluaW5nICIsIGNhbGxMaW5rU3RhdHVz
W2ldLCAiIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICIuXG4iKTsKICAgICB9CiAgICAgCiAg
ICAgUmVmUHRyPEJhc2ljQmxvY2s+IHNsb3dQYXRoQmxvY2sgPSBhZG9wdFJlZigKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzkyNDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYzLDggKzM2Myw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICBjYXNlIEFycmF5UG9wOgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENv
bnN0cnVjdDoKLSAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVkQ29uc3Ry
dWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAg
ICBjYXNlIFRvUHJpbWl0aXZlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MjAsMjAgKzQyMCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBj
YXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6IHsK
LSAgICAgICAgICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApKS5tX3ZhbHVlKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSB3ZXJlIGFibGUgdG8gcHJvdmUgdGhh
dCB0aGUgY2FsbGVlIGlzIGEgY29uc3RhbnQgdGhlbiB0aGUgbm9ybWFsIGNhbGwKLSAgICAgICAg
ICAgICAgICAvLyBpbmxpbmUgY2FjaGUgd2lsbCByZWNvcmQgdGhpcyBjYWxsZWUuIFRoaXMgbWVh
bnMgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIGRvIGFueQotICAgICAgICAgICAgICAgIC8vIGFk
ZGl0aW9uYWwgcHJvZmlsaW5nLgotICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0
ZShpbmRleEluQmxvY2spOwotICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKG5vZGUtPm9wKCkg
PT0gUHJvZmlsZWRDYWxsID8gQ2FsbCA6IENvbnN0cnVjdCk7Ci0gICAgICAgICAgICAgICAgZWxp
bWluYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0K
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lv
biAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw4ICsxMTgsNiBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBOYXRpdmVDYWxsOgog
ICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgIGNh
c2UgUHJvZmlsZWRDb25zdHJ1Y3Q6CiAgICAgY2FzZSBCcmVha3BvaW50OgogICAgIGNhc2UgUHJv
ZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmlsZURpZENhbGw6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDIw
ICs3OSwxNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgaWYg
KG1vZGUgPT0gREZHTW9kZSkgewogICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtH
ZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaHVua0dlbmVy
YXRvcik7Ci0gICAgICAgIHZtLmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0
b3IpOworICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVy
YXRvcik7CiAgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENhbGxUaHVua0dlbmVyYXRvcik7
CiAgICAgICAgIHZtLmdldENUSVN0dWIodmlydHVhbENvbnN0cnVjdFRodW5rR2VuZXJhdG9yKTsK
ICAgICB9IGVsc2UgewogICAgICAgICB2bS5nZXRDVElTdHViKGxpbmtDYWxsVGhhdFByZXNlcnZl
c1JlZ3NUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHZtLmdldENUSVN0dWIobGlua0NvbnN0cnVj
dFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOwotICAgICAgICB2bS5nZXRDVElTdHVi
KGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOworICAgICAg
ICB2bS5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhpY0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5r
R2VuZXJhdG9yKTsKICAgICAgICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2
ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRDVElTdHViKHZpcnR1YWxDb25z
dHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKICAgICB9CiAgICAgCi0gICAg
aWYgKENhbGxFZGdlTG9nOjppc0VuYWJsZWQoKSkKLSAgICAgICAgdm0uZW5zdXJlQ2FsbEVkZ2VM
b2coKS5wcm9jZXNzTG9nKCk7Ci0KICAgICBpZiAodm0udHlwZVByb2ZpbGVyKCkpCiAgICAgICAg
IHZtLnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhBU0NJSUxpdGVyYWwoIlBy
ZXBhcmluZyBmb3IgREZHIGNvbXBpbGF0aW9uLiIpKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIwMiw4ICsxMjAyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBbGxvY2F0aW9u
UHJvZmlsZVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25z
dHJ1Y3Q6Ci0gICAgICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgICAgICBjYXNlIFByb2ZpbGVk
Q29uc3RydWN0OgogICAgICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoKICAgICAgICAgY2Fz
ZSBOYXRpdmVDYWxsOgogICAgICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1Nyw4ICsxMDU3
LDYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6
CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgICAgIGNh
c2UgUHJvZmlsZWRDYWxsOgotICAgICAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OgogICAgICAg
ICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAgICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAgICAg
ICBjYXNlIEdldEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsOCArMjE3LDYgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIENhbGxzLiAqL1wKICAgICBtYWNybyhDYWxs
LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2Rl
Q2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKENvbnN0cnVjdCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKLSAg
ICBtYWNybyhQcm9maWxlZENhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCi0gICAgbWFjcm8oUHJvZmlsZWRD
b25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJn
cyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oTmF0aXZlQ2FsbCwgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29y
bGQpIFwKICAgICBtYWNybyhOYXRpdmVDb25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjE5LDYgKzEyMTksMTEgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS0+aGVhcCk7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICAKKyAg
ICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7CisgICAgICAg
IGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBERkctPkZUTCB0aWVyLXVwOiAiLCAq
Y29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisgICAgCiAgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgp
LT5kZmcoKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CkBAIC0xMjM4
LDYgKzEyNDMsMTEgQEAgY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3coCiAg
ICAgRGVmZXJHQyBkZWZlckdDKHZtLT5oZWFwKTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgIAorICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAh
PSBKSVRDb2RlOjpERkdKSVQpIHsKKyAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJs
b2NrIGluIERGRy0+RlRMIHRpZXItdXA6ICIsICpjb2RlQmxvY2ssICJcbiIpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKICAgICBKSVRDb2RlKiBq
aXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwogICAgIAogICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDggKzE4OCw2IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2UgQ2FsbDoKICAg
ICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgICAg
ICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OgogICAgICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAgICAg
ICAgIGNhc2UgTmF0aXZlQ29uc3RydWN0OgogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZp
c2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDggKzE4OSw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0
ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBj
YXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgY2FzZSBQcm9maWxlZENhbGw6Ci0g
ICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICBjYXNlIE5ld09iamVjdDoKICAgICBjYXNl
IE5ld0FycmF5OgogICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM4LDkgKzYzOCw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZSkKIHsKLSAgICBib29sIGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0g
Q2FsbCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ2FsbDsKKyAgICBib29sIGlzQ2FsbCA9IG5v
ZGUtPm9wKCkgPT0gQ2FsbDsKICAgICBpZiAoIWlzQ2FsbCkKLSAgICAgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gQ29uc3RydWN0IHx8IG5vZGUtPm9wKCkgPT0gUHJvZmlsZWRDb25zdHJ1Y3QpOwor
ICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QpOwogCiAgICAgLy8gRm9yIGNv
bnN0cnVjdG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0
byBtYWtlIHNwYWNlCiAgICAgLy8gZm9yIGl0LgpAQCAtNjg5LDExICs2ODksNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ2FsbExpbmtJbmZv
KiBpbmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwogCi0gICAgaWYg
KG5vZGUtPm9wKCkgPT0gUHJvZmlsZWRDYWxsIHx8IG5vZGUtPm9wKCkgPT0gUHJvZmlsZWRDb25z
dHJ1Y3QpIHsKLSAgICAgICAgbV9qaXQudm0oKS0+Y2FsbEVkZ2VMb2ctPmVtaXRMb2dDb2RlKAot
ICAgICAgICAgICAgbV9qaXQsIGluZm8tPmNhbGxFZGdlUHJvZmlsZSwgY2FsbGVlLmpzVmFsdWVS
ZWdzKCkpOwotICAgIH0KLSAgICAKICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoTm90Q2VsbChj
YWxsZWUuanNWYWx1ZVJlZ3MoKSkpOwogICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQ
dHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVQYXlsb2FkR1BSLCB0
YXJnZXRUb0NoZWNrKSk7CiAKQEAgLTQxNjksOCArNDE2NCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0
cnVjdDoKLSAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0
OgogICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2
aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI0LDkgKzYyNCw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVNaXNjU3RyaWN0RXEKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwoTm9kZSogbm9kZSkKIHsKLSAgICBib29sIGlzQ2FsbCA9IG5vZGUtPm9wKCkgPT0gQ2Fs
bCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ2FsbDsKKyAgICBib29sIGlzQ2FsbCA9IG5vZGUt
Pm9wKCkgPT0gQ2FsbDsKICAgICBpZiAoIWlzQ2FsbCkKLSAgICAgICAgREZHX0FTU0VSVChtX2pp
dC5ncmFwaCgpLCBub2RlLCBub2RlLT5vcCgpID09IENvbnN0cnVjdCB8fCBub2RlLT5vcCgpID09
IFByb2ZpbGVkQ29uc3RydWN0KTsKKyAgICAgICAgREZHX0FTU0VSVChtX2ppdC5ncmFwaCgpLCBu
b2RlLCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7CiAgICAgCiAgICAgLy8gRm9yIGNvbnN0cnVj
dG9ycywgdGhlIHRoaXMgYXJndW1lbnQgaXMgbm90IHBhc3NlZCBidXQgd2UgaGF2ZSB0byBtYWtl
IHNwYWNlCiAgICAgLy8gZm9yIGl0LgpAQCAtNjY5LDExICs2NjksNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7CiAgICAgCi0g
ICAgaWYgKG5vZGUtPm9wKCkgPT0gUHJvZmlsZWRDYWxsIHx8IG5vZGUtPm9wKCkgPT0gUHJvZmls
ZWRDb25zdHJ1Y3QpIHsKLSAgICAgICAgbV9qaXQudm0oKS0+Y2FsbEVkZ2VMb2ctPmVtaXRMb2dD
b2RlKAotICAgICAgICAgICAgbV9qaXQsIGNhbGxMaW5rSW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBK
U1ZhbHVlUmVncyhjYWxsZWVHUFIpKTsKLSAgICB9Ci0KICAgICBzbG93UGF0aCA9IG1faml0LmJy
YW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFy
Z2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpOwogCiAgICAgSklU
Q29tcGlsZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwpAQCAtNDIzNiw4ICs0
MjMxLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAg
Y2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgot
ICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmpl
Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDE3ICs1MCwxMyBAQCBwdWJsaWM6
CiAgICAgICAgIGlmICghT3B0aW9uczo6dXNlRlRMSklUKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5tX3Byb2ZpbGVkQmxvY2stPm1f
ZGlkRmFpbEZUTENvbXBpbGF0aW9uKSB7Ci0gICAgICAgICAgICByZW1vdmVGVExQcm9maWxpbmco
KTsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrLT5tX2RpZEZhaWxGVExDb21w
aWxhdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQogICAgICAgICAK
ICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICAgICAgRlRMOjpDYXBhYmlsaXR5TGV2ZWwgbGV2ZWwg
PSBGVEw6OmNhbkNvbXBpbGUobV9ncmFwaCk7Ci0gICAgICAgIGlmIChsZXZlbCA9PSBGVEw6OkNh
bm5vdENvbXBpbGUpIHsKLSAgICAgICAgICAgIHJlbW92ZUZUTFByb2ZpbGluZygpOworICAgICAg
ICBpZiAobGV2ZWwgPT0gRlRMOjpDYW5ub3RDb21waWxlKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIU9wdGlvbnM6OmVuYWJsZU9T
UkVudHJ5VG9GVEwoKSkKICAgICAgICAgICAgIGxldmVsID0gRlRMOjpDYW5Db21waWxlOwpAQCAt
MTIyLDMyICsxMTgsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKICAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCByZW1vdmVGVExQ
cm9maWxpbmcoKQotICAgIHsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBt
X2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAo
IWJsb2NrKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsrbm9kZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAg
ICAgICAgICAgICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRPcChDYWxsKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6Ci0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE9wKENvbnN0cnVjdCk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9CiB9OwogCiBib29sIHBlcmZvcm1UaWVyVXBDaGVja0luamVj
dGlvbihHcmFwaCYgZ3JhcGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMSAr
MTc2LDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBQcm9maWxlZENhbGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0
cnVjdDoKLSAgICAgICAgLy8gVGhlc2UgYXJlIE9LIG5vdCBiZWNhdXNlIHRoZSBGVEwgY2FuIHN1
cHBvcnQgdGhlbSwgYnV0IGJlY2F1c2UgaWYgdGhlIERGRyBzZWVzIG9uZSBvZgotICAgICAgICAv
LyB0aGVzZSB0aGVuIHRoZSBGVEwgd2lsbCBzZWUgYSBub3JtYWwgQ2FsbC9Db25zdHJ1Y3QuCi0g
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgICAgIC8vIE5vIGJhY2tlbmQg
aGFuZGxlcyB0aGlzIGJlY2F1c2UgaXQgd2lsbCBiZSBvcHRpbWl6ZWQgb3V0LiBCdXQgd2UgbWF5
IGNoZWNrCiAgICAgICAgIC8vIGZvciBjYXBhYmlsaXRpZXMgYmVmb3JlIG9wdGltaXphdGlvbi4g
SXQgd291bGQgYmUgYSBkZWVwIGVycm9yIHRvIHJlbW92ZSB0aGlzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5MywxMSArOTkzLDYgQEAg
dm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29sbGVjdAogICAgICAgICB2bSgpLT50
eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJHQyIpKTsK
ICAgICB9CiAgICAgCi0gICAgaWYgKHZtKCktPmNhbGxFZGdlTG9nKSB7Ci0gICAgICAgIERlZmVy
R0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsKLSAgICAgICAgdm0oKS0+Y2FsbEVkZ2VMb2ctPnBy
b2Nlc3NMb2coKTsKLSAgICB9Ci0gICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fZGVmZXJyYWxE
ZXB0aCk7CiAgICAgQVNTRVJUKHZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkp
OwogICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhy
ZWFkRGF0YSgpLmF0b21pY1N0cmluZ1RhYmxlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9CaW5hcnlTd2l0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0JpbmFyeVN3aXRjaC5oCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0JpbmFyeVN3aXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gICAgIGludCB2YWx1ZSA9IHN3aXRjaC5jYXNlVmFsdWUo
KTsKIC8vICAgICB1bnNpZ25lZCBpbmRleCA9IHN3aXRjaC5jYXNlSW5kZXgoKTsgLy8gaW5kZXgg
aW50byBjYXNlc1ZlY3RvciwgYWJvdmUKIC8vICAgICAuLi4gLy8gZ2VuZXJhdGUgY29kZSBmb3Ig
dGhpcyBjYXNlCisvLyAgICAgLi4uID0gaml0Lmp1bXAoKTsgLy8geW91IGhhdmUgdG8ganVtcCBv
dXQgeW91cnNlbGY7IGZhbGxpbmcgdGhyb3VnaCBjYXVzZXMgdW5kZWZpbmVkIGJlaGF2aW9yCiAv
LyB9CiAvLyBzd2l0Y2guZmFsbFRocm91Z2goKS5saW5rKCZqaXQpOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAJ
KHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2xvc3VyZUNh
bGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oIgotCi0j
aWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKLSNpbmNsdWRlICJIZWFw
LmgiCi0jaW5jbHVkZSAiVk0uaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
U2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKLQotbmFtZXNwYWNlIEpTQyB7
Ci0KLUNsb3N1cmVDYWxsU3R1YlJvdXRpbmU6OkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUoCi0gICAg
Y29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBjb2RlLCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCog
b3duZXIsCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCi0gICAgOiBHQ0F3YXJlSklU
U3R1YlJvdXRpbmUoY29kZSwgdm0pCi0gICAgLCBtX2V4ZWN1dGFibGUodm0sIG93bmVyLCBleGVj
dXRhYmxlKQotewotfQotCi1DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lOjp+Q2xvc3VyZUNhbGxTdHVi
Um91dGluZSgpCi17Ci19Ci0KLXZvaWQgQ2xvc3VyZUNhbGxTdHViUm91dGluZTo6bWFya1JlcXVp
cmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIHZpc2l0b3Iu
YXBwZW5kKCZtX2V4ZWN1dGFibGUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIEVOQUJMRShKSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2xvc3Vy
ZUNhbGxTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0LCAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2xvc3VyZUNhbGxTdHViUm91dGluZV9oCi0j
ZGVmaW5lIENsb3N1cmVDYWxsU3R1YlJvdXRpbmVfaAotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2lu
Y2x1ZGUgIkNvZGVPcmlnaW4uaCIKLSNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIK
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUgOiBwdWJs
aWMgR0NBd2FyZUpJVFN0dWJSb3V0aW5lIHsKLXB1YmxpYzoKLSAgICBDbG9zdXJlQ2FsbFN0dWJS
b3V0aW5lKAotICAgICAgICBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmLCBWTSYsIGNvbnN0
IEpTQ2VsbCogb3duZXIsCi0gICAgICAgIEV4ZWN1dGFibGVCYXNlKik7Ci0gICAgCi0gICAgdmly
dHVhbCB+Q2xvc3VyZUNhbGxTdHViUm91dGluZSgpOwotICAgIAotICAgIEV4ZWN1dGFibGVCYXNl
KiBleGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRhYmxlLmdldCgpOyB9Ci0KLXBy
b3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNs
b3RWaXNpdG9yJikgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgV3JpdGVCYXJyaWVyPEV4ZWN1
dGFibGVCYXNlPiBtX2V4ZWN1dGFibGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lX2gK
LQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2
aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsMTIgKzMwMCw2IEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsKE9wY29kZUlEIG9wY29kZUkKIAogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29k
ZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKIAotICAgIGlmIChDYWxsRWRnZUxvZzo6aXNFbmFi
bGVkKCkgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpCi0gICAgICAgICYmIE9wdGlvbnM6OmJhc2Vs
aW5lRG9lc0NhbGxFZGdlUHJvZmlsaW5nKCkpIHsKLSAgICAgICAgbV92bS0+ZW5zdXJlQ2FsbEVk
Z2VMb2coKS5lbWl0TG9nQ29kZSgKLSAgICAgICAgICAgICp0aGlzLCBpbmZvLT5jYWxsRWRnZVBy
b2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIH0KLQogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKICAgICAgICAgY29tcGlsZUNhbGxFdmFsKGluc3RydWN0
aW9uKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsMTAgKzIxNCw2IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAgICAKICAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CiAKLSAgICBpZiAoQ2FsbEVkZ2VM
b2c6OmlzRW5hYmxlZCgpICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKQotICAgICAgICAmJiBPcHRp
b25zOjpiYXNlbGluZURvZXNDYWxsRWRnZVByb2ZpbGluZygpKQotICAgICAgICBtX3ZtLT5lbnN1
cmVDYWxsRWRnZUxvZygpLmVtaXRMb2dDb2RlKCp0aGlzLCBpbmZvLT5jYWxsRWRnZVByb2ZpbGUs
IEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFs
KSB7CiAgICAgICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0cnVjdGlvbik7CiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NzYsNDcgKzc3NiwxMiBAQCBpbmxpbmUgY2hh
ciogdmlydHVhbEZvcigKICAgICByZXR1cm4gdmlydHVhbEZvcldpdGhGdW5jdGlvbihleGVjQ2Fs
bGVlLCBraW5kLCByZWdpc3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsSWdub3JlZCk7CiB9CiAK
LXN0YXRpYyBib29sIGF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoCi0gICAgRXhlY1N0YXRl
KiBleGVjQ2FsbGVlLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzLCBKU0NlbGwq
IGNhbGxlZUFzRnVuY3Rpb25DZWxsLAotICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQot
ewotICAgIGlmICghY2FsbGVlQXNGdW5jdGlvbkNlbGwpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAKLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxl
ZUFzRnVuY3Rpb25DZWxsKTsKLSAgICBKU0Z1bmN0aW9uKiBvbGRDYWxsZWUgPSBjYWxsTGlua0lu
Zm8uY2FsbGVlLmdldCgpOwotICAgIAotICAgIGlmICghb2xkQ2FsbGVlIHx8IG9sZENhbGxlZS0+
ZXhlY3V0YWJsZSgpICE9IGNhbGxlZS0+ZXhlY3V0YWJsZSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgQVNTRVJUKGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5oYXNKSVRDb2RlRm9y
Q2FsbCgpKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9Ci0gICAgICAgIGNh
bGxlZS0+ZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9y
Q2FsbCgKLSAgICAgICAgICAgICpleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2so
KS0+dm0oKSwgY2FsbGVlLT5leGVjdXRhYmxlKCksCi0gICAgICAgICAgICBBcml0eUNoZWNrTm90
UmVxdWlyZWQsIHJlZ2lzdGVycyk7Ci0gICAgCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7Ci0g
ICAgaWYgKGNhbGxlZS0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICBj
b2RlQmxvY2sgPSAwOwotICAgIGVsc2UgewotICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oY2FsbGVlLT5leGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tGb3JDYWxs
KCk7Ci0gICAgICAgIGlmIChleGVjQ2FsbGVlLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygp
IDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2Fs
bExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MgfHwgY2FsbExp
bmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgbGlua0Nsb3N1cmVDYWxsKAot
ICAgICAgICBleGVjQ2FsbGVlLCBjYWxsTGlua0luZm8sIGNvZGVCbG9jaywgY2FsbGVlLT5leGVj
dXRhYmxlKCksIGNvZGVQdHIsIHJlZ2lzdGVycyk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8pCitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiBleGVjQ2FsbGVl
LCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKICAgICBKU0NlbGwqIGNhbGxlZUFzRnVu
Y3Rpb25DZWxsOwogICAgIGNoYXIqIHJlc3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhl
Y0NhbGxlZSwgQ29kZUZvckNhbGwsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQsIGNh
bGxlZUFzRnVuY3Rpb25DZWxsKTsKIAotICAgIGlmICghYXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJl
Q2FsbChleGVjQ2FsbGVlLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkLCBjYWxsZWVB
c0Z1bmN0aW9uQ2VsbCwgKmNhbGxMaW5rSW5mbykpCi0gICAgICAgIGxpbmtTbG93Rm9yKGV4ZWND
YWxsZWUsICpjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCBSZWdpc3RlclByZXNlcnZhdGlvbk5v
dFJlcXVpcmVkKTsKKyAgICBsaW5rUG9seW1vcnBoaWNDYWxsKGV4ZWNDYWxsZWUsICpjYWxsTGlu
a0luZm8sIENhbGxWYXJpYW50KGNhbGxlZUFzRnVuY3Rpb25DZWxsKSwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Ob3RSZXF1aXJlZCk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTgzMSwx
MyArNzk2LDEyIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENvbnMKICAg
ICByZXR1cm4gdmlydHVhbEZvcihleGVjQ2FsbGVlLCBDb2RlRm9yQ29uc3RydWN0LCBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAotY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqIGV4ZWNDYWxs
ZWUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvKQorY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVj
Q2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbykKIHsKICAgICBKU0NlbGwqIGNhbGxl
ZUFzRnVuY3Rpb25DZWxsOwogICAgIGNoYXIqIHJlc3VsdCA9IHZpcnR1YWxGb3JXaXRoRnVuY3Rp
b24oZXhlY0NhbGxlZSwgQ29kZUZvckNhbGwsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVl
QXNGdW5jdGlvbkNlbGwpOwogCi0gICAgaWYgKCFhdHRlbXB0VG9PcHRpbWl6ZUNsb3N1cmVDYWxs
KGV4ZWNDYWxsZWUsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycywgY2FsbGVlQXNGdW5jdGlvbkNlbGws
ICpjYWxsTGlua0luZm8pKQotICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCAqY2FsbExp
bmtJbmZvLCBDb2RlRm9yQ2FsbCwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKKyAgICBsaW5rUG9s
eW1vcnBoaWNDYWxsKGV4ZWNDYWxsZWUsICpjYWxsTGlua0luZm8sIENhbGxWYXJpYW50KGNhbGxl
ZUFzRnVuY3Rpb25DZWxsKSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKICAgICAKICAgICByZXR1
cm4gcmVzdWx0OwogfQpAQCAtMTAzMyw2ICs5OTcsMTAgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aQogICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bS5oZWFw
KTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwor
ICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCkgewor
ICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxvY2sgaW4gQmFzZWxpbmUtPkRGRyB0
aWVyLXVwOiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CiAgICAgCiAgICAgaWYgKGJ5dGVjb2RlSW5kZXgpIHsKICAgICAg
ICAgLy8gSWYgd2UncmUgYXR0ZW1wdGluZyB0byBPU1IgZnJvbSBhIGxvb3AsIGFzc3VtZSB0aGF0
IHRoaXMgc2hvdWxkIGJlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NiwxMiArMjQ2LDEyIEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEdlbmUKIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25DYWxsRXZhbChFeGVjU3RhdGUqLCBFeGVjU3Rh
dGUqKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDYWxs
KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKLWNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyop
IFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua1BvbHltb3Jw
aGljQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5m
byopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENv
bnN0cnVjdChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2Fs
bFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5B
TDsKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNl
cnZlc1JlZ3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOworY2hhciog
SklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1Jl
Z3MoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25WaXJ0dWFsQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSos
IENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVmlydHVhbENvbnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5r
SW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nv
bnN0cnVjdFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9J
TlRFUk5BTDsKQEAgLTM5MSwxMyArMzkxLDEzIEBAIGlubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xp
IG9wZXJhdGlvblZpcnQKICAgICByZXR1cm4gMDsKIH0KIAotaW5saW5lIFBfSklUT3BlcmF0aW9u
X0VDbGkgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9k
ZSByZWdpc3RlcnMpCitpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRpb25MaW5rUG9s
eW1vcnBoaWNDYWxsRm9yKFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAg
ICAgc3dpdGNoIChyZWdpc3RlcnMpIHsKICAgICBjYXNlIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90
UmVxdWlyZWQ6Ci0gICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGw7CisgICAg
ICAgIHJldHVybiBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsOwogICAgIGNhc2UgTXVzdFBy
ZXNlcnZlUmVnaXN0ZXJzOgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxs
VGhhdFByZXNlcnZlc1JlZ3M7CisgICAgICAgIHJldHVybiBvcGVyYXRpb25MaW5rUG9seW1vcnBo
aWNDYWxsVGhhdFByZXNlcnZlc1JlZ3M7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHViUm91dGluZS5oCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEs
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKKyAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB5b3UgYXJlIHN0aWxsIHZhbGlkIGFmdGVyLiBSZXR1cm4gZmFsc2UgaWYg
eW91IGFyZSBub3cgaW52YWxpZC4gSWYgeW91IHJldHVybgorICAgIC8vIGZhbHNlLCB5b3Ugd2ls
bCB1c3VhbGx5IG5vdCBkbyBhbnkgY2xlYXJpbmcgYmVjYXVzZSB0aGUgaWRlYSBpcyB0aGF0IHlv
dSB3aWxsIHNpbXBseSBiZQorICAgIC8vIGRlc3Ryb3llZC4KICAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRXZWFrKFJlcGF0Y2hCdWZmZXImKTsKIAogcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCShyZXZpc2lvbiAxNzkyNDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFdyaXRlQmFycmllci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRl
ICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIlVudXNlZFBvaW50ZXIuaCIKKyNpbmNsdWRlICJW
TS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
LmgiCisKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworUG9seW1vcnBoaWNDYWxsTm9kZTo6flBvbHltb3JwaGljQ2FsbE5vZGUo
KQoreworICAgIGlmIChpc09uTGlzdCgpKQorICAgICAgICByZW1vdmUoKTsKK30KKwordm9pZCBQ
b2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmsoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlcikK
K3sKKyAgICBpZiAoT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2co
IlVubGlua2luZyBwb2x5bW9ycGhpYyBjYWxsIGF0ICIsIG1fY2FsbExpbmtJbmZvLT5jYWxsUmV0
dXJuTG9jYXRpb24sICIsICIsIG1fY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luLCAiXG4iKTsKKyAg
ICAKKyAgICBtX2NhbGxMaW5rSW5mby0+dW5saW5rKHJlcGF0Y2hCdWZmZXIpOworICAgIAorICAg
IGlmIChpc09uTGlzdCgpKQorICAgICAgICByZW1vdmUoKTsKK30KKwordm9pZCBQb2x5bW9ycGhp
Y0NhbGxDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCI8dmFyaWFudCA9ICIsIG1fdmFyaWFudCwgIiwgY29kZUJsb2NrID0gIiwgcG9pbnRlckR1bXAo
bV9jb2RlQmxvY2spLCAiPiIpOworfQorCitQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6UG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCisgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
JiBjb2RlUmVmLCBWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogY2FsbGVy
RnJhbWUsCisgICAgQ2FsbExpbmtJbmZvJiBpbmZvLCBjb25zdCBWZWN0b3I8UG9seW1vcnBoaWND
YWxsQ2FzZT4mIGNhc2VzLAorICAgIHN0ZDo6dW5pcXVlX3B0cjx1aW50MzJfdFtdPiBmYXN0Q291
bnRzKQorICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGVSZWYsIHZtKQorICAgICwgbV9m
YXN0Q291bnRzKHN0ZDo6bW92ZShmYXN0Q291bnRzKSkKK3sKKyAgICBmb3IgKFBvbHltb3JwaGlj
Q2FsbENhc2UgY2FsbENhc2UgOiBjYXNlcykgeworICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZChX
cml0ZUJhcnJpZXI8SlNDZWxsPih2bSwgb3duZXIsIGNhbGxDYXNlLnZhcmlhbnQoKS5yYXdDYWxs
ZWVDZWxsKCkpKTsKKyAgICAgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseUZvcihjYWxsZXJG
cmFtZS0+Y29kZUJsb2NrKCkpKQorICAgICAgICAgICAgZGF0YUxvZygiTGlua2luZyBwb2x5bW9y
cGhpYyBjYWxsIGluICIsICpjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCksICIgYXQgIiwgY2FsbGVy
RnJhbWUtPmNvZGVPcmlnaW4oKSwgIiB0byAiLCBjYWxsQ2FzZS52YXJpYW50KCksICIsIGNvZGVC
bG9jayA9ICIsIHBvaW50ZXJEdW1wKGNhbGxDYXNlLmNvZGVCbG9jaygpKSwgIlxuIik7CisgICAg
ICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxDYXNlLmNvZGVCbG9jaygpKQorICAg
ICAgICAgICAgY29kZUJsb2NrLT5saW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoY2FsbGVyRnJh
bWUsIG1fY2FsbE5vZGVzLmFkZCgmaW5mbykpOworICAgIH0KKyAgICBtX3ZhcmlhbnRzLnNocmlu
a1RvRml0KCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKK30KKworUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmU6On5Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgpIHsgfQorCitDYWxs
VmFyaWFudExpc3QgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OnZhcmlhbnRzKCkgY29uc3QK
K3sKKyAgICBDYWxsVmFyaWFudExpc3QgcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV92YXJpYW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChDYWxsVmFy
aWFudChtX3ZhcmlhbnRzW2ldLmdldCgpKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQ2Fs
bEVkZ2VMaXN0IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjplZGdlcygpIGNvbnN0Cit7Cisg
ICAgLy8gV2Ugd291bGRuJ3QgaGF2ZSB0aGVzZSBpZiB0aGlzIHdhcyBhbiBGVEwgc3R1YiByb3V0
aW5lLiBXZSBzaG91bGRuJ3QgYmUgYXNraW5nIGZvciBwcm9maWxpbmcKKyAgICAvLyBmcm9tIHRo
ZSBGVEwuCisgICAgUkVMRUFTRV9BU1NFUlQobV9mYXN0Q291bnRzKTsKKyAgICAKKyAgICBDYWxs
RWRnZUxpc3QgcmVzdWx0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYW50cy5z
aXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChDYWxsRWRnZShDYWxsVmFyaWFudCht
X3ZhcmlhbnRzW2ldLmdldCgpKSwgbV9mYXN0Q291bnRzW2ldKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworYm9vbCBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6dmlzaXRXZWFrKFJlcGF0
Y2hCdWZmZXImKQoreworICAgIGZvciAoYXV0byYgdmFyaWFudCA6IG1fdmFyaWFudHMpIHsKKyAg
ICAgICAgaWYgKCFIZWFwOjppc01hcmtlZCh2YXJpYW50LmdldCgpKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBmb3IgKGF1dG8mIHZhcmlhbnQgOiBtX3ZhcmlhbnRzKQorICAg
ICAgICB2aXNpdG9yLmFwcGVuZCgmdmFyaWFudCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Qb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmVfaAorI2RlZmluZSBQb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZV9oCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ2FsbEVk
Z2UuaCIKKyNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgorI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIK
KyNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBDYWxsTGlua0luZm87CisKK2NsYXNz
IFBvbHltb3JwaGljQ2FsbE5vZGUgOiBwdWJsaWMgQmFzaWNSYXdTZW50aW5lbE5vZGU8UG9seW1v
cnBoaWNDYWxsTm9kZT4geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBvbHltb3JwaGljQ2Fs
bE5vZGUpOworcHVibGljOgorICAgIFBvbHltb3JwaGljQ2FsbE5vZGUoQ2FsbExpbmtJbmZvKiBp
bmZvKQorICAgICAgICA6IG1fY2FsbExpbmtJbmZvKGluZm8pCisgICAgeworICAgIH0KKyAgICAK
KyAgICB+UG9seW1vcnBoaWNDYWxsTm9kZSgpOworICAgIAorICAgIHZvaWQgdW5saW5rKFJlcGF0
Y2hCdWZmZXImKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQ2FsbExpbmtJbmZvKiBtX2NhbGxMaW5r
SW5mbzsKK307CisKK2NsYXNzIFBvbHltb3JwaGljQ2FsbENhc2UgeworcHVibGljOgorICAgIFBv
bHltb3JwaGljQ2FsbENhc2UoKQorICAgICAgICA6IG1fY29kZUJsb2NrKG51bGxwdHIpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBQb2x5bW9ycGhpY0NhbGxDYXNlKENhbGxWYXJpYW50IHZhcmlh
bnQsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICA6IG1fdmFyaWFudCh2YXJpYW50KQor
ICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICB7CisgICAgfQorICAgIAorICAg
IENhbGxWYXJpYW50IHZhcmlhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnQ7IH0KKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CisgICAg
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAg
IENhbGxWYXJpYW50IG1fdmFyaWFudDsKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworfTsK
KworY2xhc3MgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUgOiBwdWJsaWMgR0NBd2FyZUpJVFN0
dWJSb3V0aW5lIHsKK3B1YmxpYzoKKyAgICBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSgKKyAg
ICAgICAgY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93
bmVyLAorICAgICAgICBFeGVjU3RhdGUqIGNhbGxlckZyYW1lLCBDYWxsTGlua0luZm8mLCBjb25z
dCBWZWN0b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4mLAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
dWludDMyX3RbXT4gZmFzdENvdW50cyk7CisgICAgCisgICAgdmlydHVhbCB+UG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUoKTsKKyAgICAKKyAgICBDYWxsVmFyaWFudExpc3QgdmFyaWFudHMoKSBj
b25zdDsKKyAgICBDYWxsRWRnZUxpc3QgZWRnZXMoKSBjb25zdDsKKyAgICAKKyAgICBib29sIHZp
c2l0V2VhayhSZXBhdGNoQnVmZmVyJikgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIHZvaWQgbWFya1JlcXVpcmVkT2JqZWN0c0ludGVybmFsKFNsb3RWaXNpdG9yJikgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+LCAyPiBtX3Zh
cmlhbnRzOworICAgIHN0ZDo6dW5pcXVlX3B0cjx1aW50MzJfdFtdPiBtX2Zhc3RDb3VudHM7Cisg
ICAgQmFnPFBvbHltb3JwaGljQ2FsbE5vZGU+IG1fY2FsbE5vZGVzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gUG9seW1vcnBo
aWNDYWxsU3R1YlJvdXRpbmVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoSklU
KQogCiAjaW5jbHVkZSAiQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRlICJC
aW5hcnlTd2l0Y2guaCIKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJERkdP
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKQEAgLTE1NzUsMTIg
KzE1NzYsMTcgQEAgdm9pZCByZXBhdGNoSW4oCiB9CiAKIHN0YXRpYyB2b2lkIGxpbmtTbG93Rm9y
KAorICAgIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK3sKKyAgICByZXBhdGNo
QnVmZmVyLnJlbGluaygKKyAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
dm0tPmdldENUSVN0dWIoZ2VuZXJhdG9yKS5jb2RlKCkpOworfQorCitzdGF0aWMgdm9pZCBsaW5r
U2xvd0ZvcigKICAgICBSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBWTSogdm0sIENhbGxM
aW5rSW5mbyYgY2FsbExpbmtJbmZvLAogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwg
UmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKIHsKLSAgICByZXBhdGNoQnVmZmVy
LnJlbGluaygKLSAgICAgICAgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwKLSAgICAg
ICAgdm0tPmdldENUSVN0dWIodmlydHVhbFRodW5rR2VuZXJhdG9yRm9yKGtpbmQsIHJlZ2lzdGVy
cykpLmNvZGUoKSk7CisgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5r
SW5mbywgdmlydHVhbFRodW5rR2VuZXJhdG9yRm9yKGtpbmQsIHJlZ2lzdGVycykpOwogfQogCiB2
b2lkIGxpbmtGb3IoCkBAIC0xNTkyLDEwICsxNTk4LDYgQEAgdm9pZCBsaW5rRm9yKAogICAgIAog
ICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29k
ZUJsb2NrKCk7CiAKLSAgICAvLyBJZiB5b3UncmUgYmVpbmcgY2FsbC1saW5rZWQgZnJvbSBhIERG
RyBjYWxsZXIgdGhlbiB5b3Ugb2J2aW91c2x5IGRpZG4ndCBnZXQgaW5saW5lZC4KLSAgICBpZiAo
Y2FsbGVlQ29kZUJsb2NrICYmIEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjYWxsZXJDb2RlQmxv
Y2stPmppdFR5cGUoKSkpCi0gICAgICAgIGNhbGxlZUNvZGVCbG9jay0+bV9zaG91bGRBbHdheXNC
ZUlubGluZWQgPSBmYWxzZTsKLSAgICAKICAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZt
KCk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9j
ayk7CkBAIC0xNjExLDcgKzE2MTMsOCBAQCB2b2lkIGxpbmtGb3IoCiAgICAgICAgIGNhbGxlZUNv
ZGVCbG9jay0+bGlua0luY29taW5nQ2FsbChleGVjLT5jYWxsZXJGcmFtZSgpLCAmY2FsbExpbmtJ
bmZvKTsKICAgICAKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLCB2bS0+Z2V0
Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvckZvcihyZWdpc3RlcnMpKS5jb2Rl
KCkpOworICAgICAgICBsaW5rU2xvd0ZvcigKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIsIHZt
LCBjYWxsTGlua0luZm8sIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvckZvcihyZWdp
c3RlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTE2MzEsMTYgKzE2MzQs
MTIyIEBAIHZvaWQgbGlua1Nsb3dGb3IoCiAgICAgbGlua1Nsb3dGb3IocmVwYXRjaEJ1ZmZlciwg
dm0sIGNhbGxMaW5rSW5mbywga2luZCwgcmVnaXN0ZXJzKTsKIH0KIAotdm9pZCBsaW5rQ2xvc3Vy
ZUNhbGwoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywg
Q29kZUJsb2NrKiBjYWxsZWVDb2RlQmxvY2ssIAotICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRh
YmxlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciwKK3N0YXRpYyB2b2lkIHJldmVydENh
bGwoCisgICAgUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0lu
Zm8mIGNhbGxMaW5rSW5mbywgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQoreworICAgIHJlcGF0
Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRoUGF0Y2goCisgICAg
ICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNh
bGxMaW5rSW5mby5ob3RQYXRoQmVnaW4pLAorICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRD4oY2FsbExpbmtJbmZvLmNhbGxlZUdQUiksIDApOworICAgIGxpbmtT
bG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGdlbmVyYXRvcik7CisgICAg
Y2FsbExpbmtJbmZvLmhhc1NlZW5TaG91bGRSZXBhdGNoID0gZmFsc2U7CisgICAgY2FsbExpbmtJ
bmZvLmNhbGxlZS5jbGVhcigpOworICAgIGNhbGxMaW5rSW5mby5zdHViLmNsZWFyKCk7CisgICAg
aWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQorICAgICAgICBjYWxsTGlua0luZm8ucmVtb3Zl
KCk7Cit9CisKK3ZvaWQgdW5saW5rRm9yKAorICAgIFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZm
ZXIsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLAorICAgIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICBpZiAo
T3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkpCisgICAgICAgIGRhdGFMb2coIlVubGlua2luZyBj
YWxsIGZyb20gIiwgY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgIiBpbiByZXF1ZXN0
IGZyb20gIiwgcG9pbnRlckR1bXAocmVwYXRjaEJ1ZmZlci5jb2RlQmxvY2soKSksICJcbiIpOwor
ICAgIAorICAgIHJldmVydENhbGwoCisgICAgICAgIHJlcGF0Y2hCdWZmZXIsIHJlcGF0Y2hCdWZm
ZXIuY29kZUJsb2NrKCktPnZtKCksIGNhbGxMaW5rSW5mbywKKyAgICAgICAgbGlua1RodW5rR2Vu
ZXJhdG9yRm9yKGtpbmQsIHJlZ2lzdGVycykpOworfQorCit2b2lkIGxpbmtWaXJ0dWFsRm9yKAor
ICAgIEV4ZWNTdGF0ZSogZXhlYywgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sCisgICAgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0
ZXJzKQoreworICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBnZW5lcmF0ZSBhIHZpcnR1YWwgY2FsbCBz
dHViIGhlcmUuIFRoaXMgd291bGQgbGVhZCB0byBmYXN0ZXIgdmlydHVhbCBjYWxscworICAgIC8v
IGJ5IGVsaW1pbmF0aW5nIHRoZSBicmFuY2ggcHJlZGljdGlvbiBib3R0bGVuZWNrIGluc2lkZSB0
aGUgc2hhcmVkIHZpcnR1YWwgY2FsbCB0aHVuay4KKyAgICAKKyAgICBDb2RlQmxvY2sqIGNhbGxl
ckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOworICAgIFZNKiB2
bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fz
c2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCisgICAgICAgIGRhdGFMb2coIkxpbmtpbmcgdmly
dHVhbCBjYWxsIGF0ICIsICpjYWxsZXJDb2RlQmxvY2ssICIgIiwgZXhlYy0+Y2FsbGVyRnJhbWUo
KS0+Y29kZU9yaWdpbigpLCAiXG4iKTsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKKyAgICByZXZlcnRDYWxsKHJlcGF0Y2hCdWZmZXIsIHZt
LCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVua0dlbmVyYXRvckZvcihraW5kLCByZWdpc3RlcnMp
KTsKK30KKworbmFtZXNwYWNlIHsKK3N0cnVjdCBDYWxsVG9Db2RlUHRyIHsKKyAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgY2FsbDsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cjsKK307
Cit9IC8vIGFubm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDYWxsVmFy
aWFudCBuZXdWYXJpYW50LAogICAgIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMp
CiB7Ci0gICAgQVNTRVJUKCFjYWxsTGlua0luZm8uc3R1Yik7CisgICAgLy8gQ3VycmVudGx5IHdl
IGNhbid0IGRvIGFueXRoaW5nIGZvciBub24tZnVuY3Rpb24gY2FsbGVlcy4KKyAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwNjg1CisgICAgaWYgKCFuZXdW
YXJpYW50IHx8ICFuZXdWYXJpYW50LmV4ZWN1dGFibGUoKSkgeworICAgICAgICBsaW5rVmlydHVh
bEZvcihleGVjLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCByZWdpc3RlcnMpOworICAgICAg
ICByZXR1cm47CisgICAgfQogICAgIAogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0g
ZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCk7CiAgICAgVk0qIHZtID0gY2FsbGVyQ29k
ZUJsb2NrLT52bSgpOwogICAgIAorICAgIENhbGxWYXJpYW50TGlzdCBsaXN0OworICAgIGlmIChQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViLmdldCgp
KQorICAgICAgICBsaXN0ID0gc3R1Yi0+dmFyaWFudHMoKTsKKyAgICBlbHNlIGlmIChKU0Z1bmN0
aW9uKiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlLmdldCgpKQorICAgICAgICBsaXN0
ID0gQ2FsbFZhcmlhbnRMaXN0e0NhbGxWYXJpYW50KG9sZENhbGxlZSl9OworICAgIAorICAgIGxp
c3QgPSB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGxpc3QsIG5ld1ZhcmlhbnQpOworCisgICAgLy8g
SWYgdGhlcmUgYXJlIGFueSBjbG9zdXJlIGNhbGxzIHRoZW4gaXQgbWFrZXMgc2Vuc2UgdG8gdHJl
YXQgYWxsIG9mIHRoZW0gYXMgY2xvc3VyZSBjYWxscy4KKyAgICAvLyBUaGlzIG1ha2VzIHN3aXRj
aGluZyBvbiBjYWxsZWUgY2hlYXBlci4gSXQgYWxzbyBwcm9kdWNlcyBwcm9maWxpbmcgdGhhdCdz
IGVhc2llciBvbiB0aGUgREZHOworICAgIC8vIHRoZSBERkcgZG9lc24ndCByZWFsbHkgd2FudCB0
byBkZWFsIHdpdGggYSBjb21iaW5hdGlvbiBvZiBjbG9zdXJlIGFuZCBub24tY2xvc3VyZSBjYWxs
ZWVzLgorICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCA9IGZhbHNlOworICAgIGZvciAoQ2FsbFZhcmlh
bnQgdmFyaWFudCA6IGxpc3QpICB7CisgICAgICAgIGlmICh2YXJpYW50LmlzQ2xvc3VyZUNhbGwo
KSkgeworICAgICAgICAgICAgbGlzdCA9IGRlc3BlY2lmaWVkVmFyaWFudExpc3QobGlzdCk7Cisg
ICAgICAgICAgICBpc0Nsb3N1cmVDYWxsID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIFZlY3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNlPiBjYWxs
Q2FzZXM7CisgICAgCisgICAgLy8gRmlndXJlIG91dCB3aGF0IG91ciBjYXNlcyBhcmUuCisgICAg
Zm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgeworICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jazsKKyAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlv
bigpKQorICAgICAgICAgICAgY29kZUJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odmFyaWFu
dC5leGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tGb3JDYWxsKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIElmIHdlIGNhbm5vdCBoYW5kbGUgYSBjYWxsZWUsIGFzc3VtZSB0aGF0IGl0J3Mg
YmV0dGVyIGZvciB0aGlzIHdob2xlIHRoaW5nIHRvIGJlIGEKKyAgICAgICAgICAgIC8vIHZpcnR1
YWwgY2FsbC4KKyAgICAgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwg
Y2FsbExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MgfHwgY2Fs
bExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncykgewor
ICAgICAgICAgICAgICAgIGxpbmtWaXJ0dWFsRm9yKGV4ZWMsIGNhbGxMaW5rSW5mbywgQ29kZUZv
ckNhbGwsIHJlZ2lzdGVycyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjYWxsQ2FzZXMuYXBwZW5kKFBvbHltb3Jw
aGljQ2FsbENhc2UodmFyaWFudCwgY29kZUJsb2NrKSk7CisgICAgfQorICAgIAorICAgIC8vIElm
IHdlIGFyZSBvdmVyIHRoZSBsaW1pdCwganVzdCB1c2UgYSBub3JtYWwgdmlydHVhbCBjYWxsLgor
ICAgIHVuc2lnbmVkIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZTsKKyAgICBpZiAo
Y2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQorICAg
ICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5
bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JUb3BUaWVyKCk7CisgICAgZWxzZQorICAgICAg
ICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9y
cGhpY0NhbGxWYXJpYW50TGlzdFNpemUoKTsKKyAgICBpZiAobGlzdC5zaXplKCkgPiBtYXhQb2x5
bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3IoZXhl
YywgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCwgcmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKICAgICBHUFJSZWcgY2FsbGVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVn
PihjYWxsTGlua0luZm8uY2FsbGVlR1BSKTsKICAgICAKICAgICBDQ2FsbEhlbHBlcnMgc3R1Ykpp
dCh2bSwgY2FsbGVyQ29kZUJsb2NrKTsKQEAgLTE2NTUsMzMgKzE3NjQsODIgQEAgdm9pZCBsaW5r
Q2xvc3VyZUNhbGwoCiAgICAgICAgIHN0dWJKaXQuYWJvcnRXaXRoUmVhc29uKFJlcGF0Y2hJbnNh
bmVBcmd1bWVudENvdW50KTsKICAgICAgICAgb2tBcmd1bWVudENvdW50LmxpbmsoJnN0dWJKaXQp
OwogICAgIH0KKyAgICAKKyAgICBHUFJSZWcgc2NyYXRjaCA9IEFzc2VtYmx5SGVscGVyczo6c2Vs
ZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIpOworICAgIEdQUlJlZyBjb21wYXJpc29uVmFsdWVHUFI7
CisgICAgCisgICAgaWYgKGlzQ2xvc3VyZUNhbGwpIHsKKyAgICAgICAgLy8gVmVyaWZ5IHRoYXQg
d2UgaGF2ZSBhIGZ1bmN0aW9uIGFuZCBzdGFzaCB0aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNoLgog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAvLyBXZSBjYW4gc2FmZWx5IGNsb2JiZXIgZXZlcnl0
aGluZyBleGNlcHQgdGhlIGNhbGxlZUdQUi4gV2UgY2FuJ3QgcmVseSBvbiB0YWdNYXNrUmVnaXN0
ZXIKLSAgICAvLyBiZWluZyBzZXQuIFNvIHdlIGRvIHRoaXMgdGhlIGhhcmQgd2F5LgotICAgIEdQ
UlJlZyBzY3JhdGNoID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQ
Uik7Ci0gICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnTWFz
ayksIHNjcmF0Y2gpOwotICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3Q2NChD
Q2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZUdQUiwgc2NyYXRjaCkpOworICAgICAgICAvLyBX
ZSBjYW4gc2FmZWx5IGNsb2JiZXIgZXZlcnl0aGluZyBleGNlcHQgdGhlIGNhbGxlZUdQUi4gV2Ug
Y2FuJ3QgcmVseSBvbiB0YWdNYXNrUmVnaXN0ZXIKKyAgICAgICAgLy8gYmVpbmcgc2V0LiBTbyB3
ZSBkbyB0aGlzIHRoZSBoYXJkIHdheS4KKyAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIHNjcmF0Y2gpOworICAgICAgICBzbG93UGF0aC5h
cHBlbmQoc3R1YkppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVH
UFIsIHNjcmF0Y2gpKTsKICNlbHNlCi0gICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNr
ZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KKyAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBh
bHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KICNlbmRpZgogICAgIAot
ICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgc3R1YkppdC5icmFuY2g4KAotICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhjYWxsZWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAotICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNGdW5jdGlvblR5cGUpKSk7Ci0gICAgCi0g
ICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAgICBzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAg
ICAgICAgICAgIHN0dWJKaXQuYnJhbmNoOCgKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVH
UFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVuY3Rpb25UeXBlKSkpOworICAgIAorICAgICAgICBz
dHViSml0LmxvYWRQdHIoCiAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVl
R1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksCi0gICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpKTsKKyAgICAgICAgICAgIHNjcmF0
Y2gpOworICAgICAgICAKKyAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gc2NyYXRjaDsKKyAg
ICB9IGVsc2UKKyAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOworICAgIAor
ICAgIFZlY3RvcjxpbnQ2NF90PiBjYXNlVmFsdWVzKGNhbGxDYXNlcy5zaXplKCkpOworICAgIFZl
Y3RvcjxDYWxsVG9Db2RlUHRyPiBjYWxscyhjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8dWludDMyX3RbXT4gZmFzdENvdW50czsKKyAgICAKKyAgICBpZiAoY2FsbGVyQ29k
ZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQorICAgICAgICBmYXN0
Q291bnRzID0gc3RkOjptYWtlX3VuaXF1ZTx1aW50MzJfdFtdPihjYWxsQ2FzZXMuc2l6ZSgpKTsK
KyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gY2FsbENhc2VzLnNpemUoKTsgaS0tOykgeworICAg
ICAgICBpZiAoZmFzdENvdW50cykKKyAgICAgICAgICAgIGZhc3RDb3VudHNbaV0gPSAwOworICAg
ICAgICAKKyAgICAgICAgQ2FsbFZhcmlhbnQgdmFyaWFudCA9IGNhbGxDYXNlc1tpXS52YXJpYW50
KCk7CisgICAgICAgIGlmIChpc0Nsb3N1cmVDYWxsKQorICAgICAgICAgICAgY2FzZVZhbHVlc1tp
XSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFyaWFudC5leGVjdXRhYmxlKCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBjYXNlVmFsdWVzW2ldID0gYml0d2lzZV9jYXN0PGludHB0cl90
Pih2YXJpYW50LmZ1bmN0aW9uKCkpOworICAgIH0KICAgICAKLSAgICBBc3NlbWJseUhlbHBlcnM6
OkNhbGwgY2FsbCA9IHN0dWJKaXQubmVhckNhbGwoKTsKLSAgICBBc3NlbWJseUhlbHBlcnM6Okp1
bXAgZG9uZSA9IHN0dWJKaXQuanVtcCgpOworICAgIEdQUlJlZyBmYXN0Q291bnRzQmFzZUdQUiA9
CisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIsIGNv
bXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6cmVnVDMpOworICAgIHN0dWJKaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZmFzdENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNl
R1BSKTsKKyAgICAKKyAgICBCaW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKGNvbXBhcmlzb25WYWx1
ZUdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dpdGNoOjpJbnRQdHIpOworICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3QgZG9uZTsKKyAgICB3aGlsZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoc3R1Ykpp
dCkpIHsKKyAgICAgICAgc2l6ZV90IGNhc2VJbmRleCA9IGJpbmFyeVN3aXRjaC5jYXNlSW5kZXgo
KTsKKyAgICAgICAgCisgICAgICAgIENhbGxWYXJpYW50IHZhcmlhbnQgPSBjYWxsQ2FzZXNbY2Fz
ZUluZGV4XS52YXJpYW50KCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQodmFyaWFudC5leGVj
dXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY29kZVB0ciA9CisgICAgICAgICAgICB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJh
dGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoCisgICAgICAgICAgICAgICAgKnZt
LCB2YXJpYW50LmV4ZWN1dGFibGUoKSwgQXJpdHlDaGVja05vdFJlcXVpcmVkLCByZWdpc3RlcnMp
OworICAgICAgICAKKyAgICAgICAgaWYgKGZhc3RDb3VudHMpIHsKKyAgICAgICAgICAgIHN0dWJK
aXQuYWRkMzIoCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSks
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGZhc3RDb3VudHNCYXNlR1BS
LCBjYXNlSW5kZXggKiBzaXplb2YodWludDMyX3QpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2Fs
bHNbY2FzZUluZGV4XS5jYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOworICAgICAgICBjYWxsc1tj
YXNlSW5kZXhdLmNvZGVQdHIgPSBjb2RlUHRyOworICAgICAgICBkb25lLmFwcGVuZChzdHViSml0
Lmp1bXAoKSk7CisgICAgfQogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOworICAg
IGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgpLmxpbmsoJnN0dWJKaXQpOwogICAgIHN0dWJKaXQu
bW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSwgR1BSSW5mbzo6cmVnVDEpOwpAQCAtMTY5MSwzNCArMTg0OSw0NSBAQCB2b2lkIGxpbmtD
bG9zdXJlQ2FsbCgKICAgICAKICAgICBzdHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3Jl
UmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9
IHN0dWJKaXQuanVtcCgpOwotICAgIAorICAgICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp2bSwgc3R1YkppdCwgY2FsbGVyQ29kZUJsb2NrKTsKICAgICAKLSAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNvZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKKyAg
ICBmb3IgKENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxzKSB7CisgICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoCisgICAgICAgICAgICBjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9u
UHRyKGNhbGxUb0NvZGVQdHIuY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgfQog
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBl
KCkpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgwKSk7CiAgICAgZWxzZQogICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIubGFiZWxBdE9mZnNldCgw
KSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0
Q1RJU3R1Yih2aXJ0dWFsVGh1bmtHZW5lcmF0b3JGb3IoQ29kZUZvckNhbGwsIHJlZ2lzdGVycykp
LmNvZGUoKSkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwo
dm0tPmdldENUSVN0dWIobGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yRm9yKHJlZ2lz
dGVycykpLmNvZGUoKSkpOwogICAgIAotICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
PiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5ldyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAorICAg
IFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJl
ZihuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREVf
Rk9SKAogICAgICAgICAgICAgY2FsbGVyQ29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAg
ICAgICgiQ2xvc3VyZSBjYWxsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldCAl
cCAoJXMpIiwKKyAgICAgICAgICAgICgiUG9seW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmNh
bGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICBjb2Rl
UHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRvQ1N0cmluZyhwb2ludGVyRHVtcChjYWxsZWVDb2Rl
QmxvY2spKS5kYXRhKCkpKSwKLSAgICAgICAgKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBleGVjdXRhYmxlKSk7CisgICAgICAgICAgICAgdG9DU3RyaW5nKGxpc3REdW1w
KGNhbGxDYXNlcykpLmRhdGEoKSkpLAorICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIGV4ZWMtPmNhbGxlckZyYW1lKCksIGNhbGxMaW5rSW5mbywgY2FsbENh
c2VzLAorICAgICAgICBzdGQ6Om1vdmUoZmFzdENvdW50cykpKTsKICAgICAKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2FsbGVyQ29kZUJsb2NrKTsKICAgICAKICAgICByZXBhdGNo
QnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJy
YW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiksCiAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Cisg
ICAgLy8gVGhpcyBpcyB3ZWlyZC4gVGhlIG9yaWdpbmFsIHNsb3cgcGF0aCBzaG91bGQgbm8gbG9u
Z2VyIGJlIHJlYWNoYWJsZS4KICAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2Fs
bExpbmtJbmZvLCBDb2RlRm9yQ2FsbCwgcmVnaXN0ZXJzKTsKICAgICAKKyAgICAvLyBJZiB0aGVy
ZSBoYWQgYmVlbiBhIHByZXZpb3VzIHN0dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMg
c29vbiBhcyB0aGUgR0MgcnVucyBhbmQgc2VlcworICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIg
b24gc3RhY2suCiAgICAgY2FsbExpbmtJbmZvLnN0dWIgPSBzdHViUm91dGluZS5yZWxlYXNlKCk7
CiAgICAgCi0gICAgQVNTRVJUKCFjYWxsZWVDb2RlQmxvY2sgfHwgY2FsbGVlQ29kZUJsb2NrLT5p
c0luY29taW5nQ2FsbEFscmVhZHlMaW5rZWQoJmNhbGxMaW5rSW5mbykpOworICAgIC8vIFRoZSBj
YWxsIGxpbmsgaW5mbyBubyBsb25nZXIgaGFzIGEgY2FsbCBjYWNoZSBhcGFydCBmcm9tIHRoZSBq
dW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBjYWxsCisgICAgLy8gc3R1Yi4KKyAgICBpZiAoY2FsbExp
bmtJbmZvLmlzT25MaXN0KCkpCisgICAgICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKIH0KIAog
dm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJ
KHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNhbGxWYXJpYW50LmgiCiAjaW5jbHVkZSAi
SklUT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQxLDcgKzQyLDkgQEAgdm9p
ZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdQogdm9pZCByZXBhdGNoSW4oRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgY29uc3QgSWRlbnRpZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0
IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGxpbmtGb3IoRXhlY1N0
YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIFJlZ2lzdGVyUHJlc2Vy
dmF0aW9uTW9kZSk7CiB2b2lkIGxpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7Ci12b2lk
IGxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBF
eGVjdXRhYmxlQmFzZSosIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgUmVnaXN0ZXJQcmVzZXJ2YXRp
b25Nb2RlKTsKK3ZvaWQgdW5saW5rRm9yKFJlcGF0Y2hCdWZmZXImLCBDYWxsTGlua0luZm8mLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwordm9pZCBs
aW5rVmlydHVhbEZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwordm9pZCBsaW5rUG9seW1vcnBoaWND
YWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENhbGxWYXJpYW50LCBSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGUpOwogdm9pZCByZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVy
ZVN0dWJJbmZvJik7CiB2b2lkIHJlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJl
U3R1YkluZm8mKTsKIHZvaWQgcmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1Yklu
Zm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDI3ICsxMzcsMjcgQEAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDb25zdHJ1Y3RUaGF0UAogICAgIHJldHVybiBsaW5rRm9y
VGh1bmtHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVy
cyk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsRm9y
VGh1bmtHZW5lcmF0b3IoCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9y
cGhpY0NhbGxGb3JUaHVua0dlbmVyYXRvcigKICAgICBWTSogdm0sIFJlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCi0g
ICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwgb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsRm9yKHJlZ2lz
dGVycykpOworICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhp
Y0NhbGxGb3IocmVnaXN0ZXJzKSk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dm0sIGppdCwgR0xPQkFMX1RIVU5LX0lEKTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgKCJMaW5rIGNsb3N1cmUgY2FsbCAlcyBzbG93IHBhdGggdGh1bmsiLCByZWdpc3Rl
cnMgPT0gTXVzdFByZXNlcnZlUmVnaXN0ZXJzID8gIiB0aGF0IHByZXNlcnZlcyByZWdpc3RlcnMi
IDogIiIpKTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5rIHBv
bHltb3JwaGljIGNhbGwgJXMgc2xvdyBwYXRoIHRodW5rIiwgcmVnaXN0ZXJzID09IE11c3RQcmVz
ZXJ2ZVJlZ2lzdGVycyA/ICIgdGhhdCBwcmVzZXJ2ZXMgcmVnaXN0ZXJzIiA6ICIiKSk7CiB9CiAK
IC8vIEZvciBjbG9zdXJlIG9wdGltaXphdGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2lu
Y2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1cmVzIGZvcgogLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0
aGVuIHlvdSdyZSBnb2luZyB0byBsb3NlIGJpZyB0aW1lIGFueXdheS4KLU1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsK
LSAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIFJlZ2lzdGVy
UHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOworICAgIHJldHVybiBsaW5rUG9seW1vcnBoaWNDYWxs
Rm9yVGh1bmtHZW5lcmF0b3Iodm0sIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1Jl
Z3NUaHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHlt
b3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAg
IHJldHVybiBsaW5rQ2xvc3VyZUNhbGxGb3JUaHVua0dlbmVyYXRvcih2bSwgTXVzdFByZXNlcnZl
UmVnaXN0ZXJzKTsKKyAgICByZXR1cm4gbGlua1BvbHltb3JwaGljQ2FsbEZvclRodW5rR2VuZXJh
dG9yKHZtLCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOwogfQogCiBzdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVua0dlbmVyYXRvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtNjUsMTYgKzY1LDE2IEBAIGlubGluZSBUaHVua0dlbmVyYXRvciBsaW5rVGh1bmtHZW5lcmF0
b3IKICAgICByZXR1cm4gMDsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJl
Q2FsbFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1
cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5r
R2VuZXJhdG9yKFZNKik7CiAKLWlubGluZSBUaHVua0dlbmVyYXRvciBsaW5rQ2xvc3VyZUNhbGxU
aHVua0dlbmVyYXRvckZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoraW5s
aW5lIFRodW5rR2VuZXJhdG9yIGxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvckZvcihS
ZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIHN3aXRjaCAocmVnaXN0
ZXJzKSB7CiAgICAgY2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgotICAgICAg
ICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3I7CisgICAgICAgIHJldHVybiBs
aW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3I7CiAgICAgY2FzZSBNdXN0UHJlc2VydmVS
ZWdpc3RlcnM6Ci0gICAgICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVn
c1RodW5rR2VuZXJhdG9yOworICAgICAgICByZXR1cm4gbGlua1BvbHltb3JwaGljQ2FsbFRoYXRQ
cmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3I7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzMiw2ICszMzIsNyBAQCBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGlj
cyhDCiAgICAgICAgIH0KICAgICB9CiAgICAgZGVmYXVsdDoKKyAgICAgICAgZGF0YUxvZygiVW5l
eHBlY3RlZCBjb2RlIGJsb2NrIGluIExMSW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlz
aW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTcwLDEyICsxNzAsMTEgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBv
cHRpb25TdHJpbmc7CiAgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudERldmlydHVhbGl6YXRp
b24sIHRydWUpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcs
IHRydWUpIFwKICAgICB2KGJvb2wsIGVuYWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5nLCB0cnVl
KSBcCi0gICAgdihib29sLCBjYWxsU3RhdHVzU2hvdWxkVXNlQ2FsbEVkZ2VQcm9maWxlLCB0cnVl
KSBcCi0gICAgdihib29sLCBjYWxsRWRnZVByb2ZpbGVSZWFsbHlQcm9jZXNzZXNMb2csIHRydWUp
IFwKLSAgICB2KGJvb2wsIGJhc2VsaW5lRG9lc0NhbGxFZGdlUHJvZmlsaW5nLCBmYWxzZSkgXAot
ICAgIHYoYm9vbCwgZGZnRG9lc0NhbGxFZGdlUHJvZmlsaW5nLCB0cnVlKSBcCi0gICAgdihib29s
LCBlbmFibGVDYWxsRWRnZVByb2ZpbGluZywgdHJ1ZSkgXAorICAgIHYodW5zaWduZWQsIG1heFBv
bHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0U2l6ZSwgMTUpIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhQ
b2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVGb3JUb3BUaWVyLCA1KSBcCisgICAgdih1bnNp
Z25lZCwgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudHNGb3JJbmxpbmluZywgNSkgXAogICAgIHYo
dW5zaWduZWQsIGZyZXF1ZW50Q2FsbFRocmVzaG9sZCwgMikgXAorICAgIHYoZG91YmxlLCBtaW5p
bXVtQ2FsbFRvS25vd25SYXRlLCAwLjUxKSBcCiAgICAgdihib29sLCBvcHRpbWl6ZU5hdGl2ZUNh
bGxzLCBmYWxzZSkgXAogICAgIHYoYm9vbCwgZW5hYmxlT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcs
IHRydWUpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShy
ZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2OSwxMyArMzY5LDYgQEAgVk0qJiBWTTo6c2hhcmVkSW5zdGFu
Y2VJbnRlcm5hbCgpCiAgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNlOwogfQogCi1DYWxsRWRnZUxv
ZyYgVk06OmVuc3VyZUNhbGxFZGdlTG9nKCkKLXsKLSAgICBpZiAoIWNhbGxFZGdlTG9nKQotICAg
ICAgICBjYWxsRWRnZUxvZyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbEVkZ2VMb2c+KCk7Ci0gICAg
cmV0dXJuICpjYWxsRWRnZUxvZzsKLX0KLQogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgVGh1bmtH
ZW5lcmF0b3IgdGh1bmtHZW5lcmF0b3JGb3JJbnRyaW5zaWMoSW50cmluc2ljIGludHJpbnNpYykK
IHsKQEAgLTQ1OSw5ICs0NTIsNiBAQCB2b2lkIFZNOjpzdG9wU2FtcGxpbmcoKQogCiB2b2lkIFZN
OjpwcmVwYXJlVG9EaXNjYXJkQ29kZSgpCiB7Ci0gICAgaWYgKGNhbGxFZGdlTG9nKQotICAgICAg
ICBjYWxsRWRnZUxvZy0+cHJvY2Vzc0xvZygpOwotICAgIAogI2lmIEVOQUJMRShERkdfSklUKQog
ICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgewog
ICAgICAgICBpZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OndvcmtsaXN0Rm9ySW5k
ZXhPck51bGwoaSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9u
IDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEFyaXR5Q2hl
Y2tGYWlsUmV0dXJuVGh1bmtzOwogY2xhc3MgQnVpbHRpbkV4ZWN1dGFibGVzOwotY2xhc3MgQ2Fs
bEVkZ2VMb2c7CiBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBjbGFzcyBDb21t
b25JZGVudGlmaWVyczsKQEAgLTIzOCw5ICsyMzcsNiBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPERGRzo6TG9uZ0xpdmVkU3RhdGU+IGRmZ1N0YXRlOwogI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGxFZGdlTG9nPiBjYWxsRWRnZUxvZzsK
LSAgICBDYWxsRWRnZUxvZyYgZW5zdXJlQ2FsbEVkZ2VMb2coKTsKLQogICAgIFZNVHlwZSB2bVR5
cGU7CiAgICAgQ2xpZW50RGF0YSogY2xpZW50RGF0YTsKICAgICBWTUVudHJ5RnJhbWUqIHRvcFZN
RW50cnlGcmFtZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245606</attachid>
            <date>2015-01-28 20:35:14 -0800</date>
            <delta_ts>2015-01-28 20:39:59 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>147727</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc5MzMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NiBA
QAorMjAxNS0wMS0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcgc2hvdWxkIGJlIGJhc2VkIG9uIHBvbHltb3JwaGlj
IGNhbGwgaW5saW5lIGNhY2hpbmcgcmF0aGVyIHRoYW4gbG9nZ2luZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwNjYwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXaGVuIHdlIGZpcnN0IGlt
cGxlbWVudGVkIHBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcsIHdlIGRpZCB0aGUgcHJvZmlsaW5n
IGJhc2VkIG9uIGEgY2FsbAorICAgICAgICBlZGdlIGxvZy4gVGhlIGlkZWEgd2FzIHRvIHN0b3Jl
IGVhY2ggY2FsbCBlZGdlIChhIHR1cGxlIG9mIGNhbGwgc2l0ZSBhbmQgY2FsbGVlKSBpbnRvIGEK
KyAgICAgICAgZ2xvYmFsIGxvZyB0aGF0IHdhcyBwcm9jZXNzZWQgbGF6aWx5LiBQcm9jZXNzaW5n
IHRoZSBsb2cgd291bGQgZ2l2ZSBwcmVjaXNlIGNvdW50cyBvZiBjYWxsCisgICAgICAgIGVkZ2Vz
LCBhbmQgY291bGQgYmUgdXNlZCB0byBkcml2ZSB3ZWxsLWluZm9ybWVkIGlubGluaW5nIGRlY2lz
aW9ucyAtIHBvbHltb3JwaGljIG9yIG5vdC4KKyAgICAgICAgVGhpcyB3YXMgYSBzcGVlZC11cCBv
biB0aHJvdWdocHV0IHRlc3RzIGJ1dCBhIHNsb3ctZG93biBmb3IgbGF0ZW5jeSB0ZXN0cy4gSXQg
d2FzIGEgbmV0IHdpbgorICAgICAgICBub25ldGhlbGVzcy4KKyAgICAgICAgCisgICAgICAgIEV4
cGVyaWVuY2Ugd2l0aCB0aGlzIGNvZGUgc2hvd3MgdGhyZWUgdGhpbmdzLiBGaXJzdCwgdGhlIGNh
bGwgZWRnZSBwcm9maWxlciBpcyBidWdneSBhbmQKKyAgICAgICAgY29tcGxleC4gSXQgd291bGQg
dGFrZSB3b3JrIHRvIGZpeCB0aGUgYnVncy4gU2Vjb25kLCB0aGUgY2FsbCBlZGdlIHByb2ZpbGVy
IGluY3VycyBsb3RzIG9mCisgICAgICAgIG92ZXJoZWFkIGZvciBsYXRlbmN5IGNvZGUgdGhhdCB3
ZSBjYXJlIGRlZXBseSBhYm91dC4gVGhpcmQsIGl0J3Mgbm90IGF0IGFsbCBjbGVhciB0aGF0Cisg
ICAgICAgIGhhdmluZyBjYWxsIGVkZ2UgY291bnRzIGZvciBldmVyeSBwb3NzaWJsZSBjYWxsZWUg
aXMgYW55IGJldHRlciB0aGFuIGp1c3QgaGF2aW5nIGNhbGwgZWRnZQorICAgICAgICBjb3VudHMg
Zm9yIHRoZSBsaW1pdGVkIG51bWJlciBvZiBjYWxsZWVzIHRoYXQgYW4gaW5saW5lIGNhY2hlIHdv
dWxkIGNhdGNoLgorICAgICAgICAKKyAgICAgICAgU28sIHRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUg
Y2FsbCBlZGdlIHByb2ZpbGVyIGFuZCByZXBsYWNlcyBpdCB3aXRoIGEgcG9seW1vcnBoaWMgY2Fs
bCBpbmxpbmUKKyAgICAgICAgY2FjaGUuIElmIHdlIG1pc3MgdGhlIGJhc2ljIGNhbGwgaW5saW5l
IGNhY2hlLCB3ZSBpbmZsYXRlIHRoZSBjYWNoZSB0byBiZSBhIGp1bXAgdG8gYW4KKyAgICAgICAg
b3V0LW9mLWxpbmUgc3R1YiB0aGF0IGNhc2VzIG9uIHRoZSBwcmV2aW91c2x5IGtub3duIGNhbGxl
ZXMuIElmIHRoYXQgbWlzc2VzIGFnYWluLCB0aGVuIHdlCisgICAgICAgIHJld3JpdGUgdGhhdCBz
dHViIHRvIGluY2x1ZGUgdGhlIG5ldyBjYWxsZWUuIFdlIGRvIHRoaXMgdXAgdG8gc29tZSBudW1i
ZXIgb2YgY2FsbGVlcy4gSWYgd2UKKyAgICAgICAgaGl0IHRoZSBsaW1pdCB0aGVuIHdlIHN3aXRj
aCB0byB1c2luZyBhIHBsYWluIHZpcnR1YWwgY2FsbC4KKyAgICAgICAgCisgICAgICAgIFN1YnN0
YW50aWFsIHNwZWVkLXVwIG9uIFY4U3BpZGVyOyB1bmRvZXMgdGhlIHNsb3ctZG93biB0aGF0IHRo
ZSBvcmlnaW5hbCBjYWxsIGVkZ2UgcHJvZmlsZXIKKyAgICAgICAgY2F1c2VkLiBNaWdodCBiZSBh
IFN1blNwaWRlciBzcGVlZC11cCAoYmVsb3cgMSUpLCBkZXBlbmRpbmcgb24gaGFyZHdhcmUuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9DYWxsRWRnZS5oOgor
ICAgICAgICAoSlNDOjpDYWxsRWRnZTo6Y291bnQpOgorICAgICAgICAoSlNDOjpDYWxsRWRnZTo6
Q2FsbEVkZ2UpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6dW5saW5rKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp2aXNpdFdlYWspOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OkNhbGxMaW5rU3Rh
dHVzKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21DYWxsTGlua0luZm8pOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua1N0YXR1czo6aXNDbG9zdXJlQ2FsbCk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rU3RhdHVzOjptYWtlQ2xvc3VyZUNhbGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0
YXR1czo6ZHVtcCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUNh
bGxFZGdlUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0
dXMuaDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OkNhbGxMaW5rU3RhdHVzKToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtTdGF0dXM6OnZhcmlhbnRzKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OnNpemUp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6YXQpOgorICAgICAgICAoSlNDOjpDYWxs
TGlua1N0YXR1czo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpj
YW5PcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjplZGdlcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjYW5UcnVzdENvdW50cyk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjp2
YXJpYW50TGlzdFdpdGhWYXJpYW50KToKKyAgICAgICAgKEpTQzo6ZGVzcGVjaWZpZWRWYXJpYW50
TGlzdCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuaDoKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6On5Db2RlQmxvY2sp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKToKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0luY29taW5nQ2FsbEFs
cmVhZHlMaW5rZWQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkQ2Fs
bFdpdGhvdXRTZXR0aW5nUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlND
OjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25z
dGFudHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Y29tcGlsZUltcGwpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdO
b2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24pOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2Fm
ZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpUaWVyVXBDaGVja0luamVjdGlvblBoYXNlOjpyZW1vdmVGVExQcm9maWxpbmcpOiBEZWxl
dGVkLgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6
OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGppdC9CaW5hcnlTd2l0Y2guaDoKKyAgICAgICAg
KiBqaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0
L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvSklUQ2Fs
bC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0
L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6Cisg
ICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRp
b25zLmg6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGxGb3IpOgor
ICAgICAgICAoSlNDOjpvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IpOiBEZWxldGVkLgorICAg
ICAgICAqIGppdC9KSVRTdHViUm91dGluZS5oOgorICAgICAgICAqIGppdC9KSVRXcml0ZUJhcnJp
ZXIuaDoKKyAgICAgICAgKiBqaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsTm9kZTo6flBvbHltb3JwaGljQ2FsbE5v
ZGUpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmspOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxDYXNlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6UG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmU6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKToKKyAgICAg
ICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6On5Qb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2YXJp
YW50cyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjplZGdlcyk6
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdlYWspOgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKToKKyAgICAgICAgKiBqaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbE5vZGU6OlBvbHltb3JwaGlj
Q2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxDYXNlOjpQb2x5bW9ycGhp
Y0NhbGxDYXNlKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsQ2FzZTo6dmFyaWFudCk6
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbENhc2U6OmNvZGVCbG9jayk6CisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zvcik6CisgICAgICAg
IChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjpyZXZlcnRDYWxsKToKKyAgICAgICAgKEpT
Qzo6dW5saW5rRm9yKToKKyAgICAgICAgKEpTQzo6bGlua1ZpcnR1YWxGb3IpOgorICAgICAgICAo
SlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxs
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAgICAgICAqIGppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsRm9yVGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1Jl
Z3NUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbEZvclRodW5r
R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsVGh1bmtH
ZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGxUaGF0UHJl
c2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmg6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVy
YXRvckZvcik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9y
KTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAg
IChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAgICAgICogcnVu
dGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6
OlZNOjpwcmVwYXJlVG9EaXNjYXJkQ29kZSk6CisgICAgICAgIChKU0M6OlZNOjplbnN1cmVDYWxs
RWRnZUxvZyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE1LTAxLTI4
ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlZCBm
YXN0TWFsbG9jRm9yYmlkIC8gZmFzdE1hbGxvY0FsbG93CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3Bw
CiAgICAgYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAogICAgIGJ5dGVjb2Rl
L0NhbGxFZGdlLmNwcAotICAgIGJ5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5jcHAKICAgICBieXRl
Y29kZS9DYWxsTGlua0luZm8uY3BwCiAgICAgYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCiAg
ICAgYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuY3BwCkBAIC0zMjcsNyArMzI2LDYgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAogICAgIGppdC9B
cml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAKICAgICBqaXQvQmluYXJ5U3dpdGNoLmNwcAot
ICAgIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcAogICAgIGppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCiAg
ICAgaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKQEAgLTM1MCw2ICszNDgsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGppdC9KSVRTdHVicy5jcHAKICAgICBqaXQvSklU
VGh1bmtzLmNwcAogICAgIGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAKKyAgICBqaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCiAgICAgaml0L1JlZy5j
cHAKICAgICBqaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcAogICAg
IGppdC9SZWdpc3RlclNldC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzE0LDcgKzMxNCw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxC
eXRlY29kZUJhc2ljQmxvY2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxFZGdlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXENhbGxFZGdlUHJvZmlsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua0luZm8uY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtTdGF0dXMuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbFZhcmlhbnQuY3BwIiAvPgpAQCAtNTk4LDcgKzU5
Nyw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQXJpdHlDaGVja0ZhaWxSZXR1
cm5UaHVua3MuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEFzc2VtYmx5
SGVscGVycy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQmluYXJ5U3dp
dGNoLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDbG9zdXJlQ2FsbFN0
dWJSb3V0aW5lLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxHQ0F3
YXJlSklUU3R1YlJvdXRpbmUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0
XEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIiAvPgpAQCAtNjIxLDYgKzYxOSw3IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caml0XEpJVFRodW5rcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxSZWcuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVy
YXRvci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUmVnaXN0ZXJTZXQu
Y3BwIiAvPgpAQCAtOTMxLDggKzkzMCw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlVXNlRGVmLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxDYWxsRWRnZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcQ2FsbEVkZ2VQcm9maWxlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua0luZm8uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rU3RhdHVzLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNl
dC5oIiAvPgpAQCAtMTMzMyw3ICsxMzMwLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGppdFxBc3NlbWJseUhlbHBlcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGpp
dFxCaW5hcnlTd2l0Y2guaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDQ2Fs
bEhlbHBlcnMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ29tcGFj
dEpJVENvZGVNYXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRh
YmxlQWxsb2NhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcRlBSSW5m
by5oIiAvPgpAQCAtMTM1Nyw2ICsxMzUzLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGppdFxKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFdyaXRlQmFycmllci5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEpTSW50ZXJmYWNlSklULmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZWcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclNldC5oIiAvPgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yODEsMTMgKzI4MSw4IEBACiAJCTBGM0IzQTI4MTU0NEM5OTcwMDNFRDBGRiAv
KiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGM0IzQTJCMTU0NzUwMDAwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0EyOTE1
NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwICovOyB9OwogCQkwRjNCM0EyQzE1NDc1
MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBG
M0I3RTI2MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjAxOUExMUI4MDAwRDlCQzU2IC8qIENh
bGxFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMEYzQjdFMjcxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyMTE5QTExQjgw
MDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmNwcCAqLzsgfTsKLQkJMEYzQjdFMjgxOUExMUI4
MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjIxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdl
UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTBGM0I3RTI5MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyMzE5
QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0I3RTJBMTlBMTFCODAwMEQ5
QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuY3Bw
ICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI1MTlBMTFC
ODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTBGM0I3RTJEMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRn
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNC
N0UyQzE5QTEyQUFFMDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjNEMEJCQzE5
NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlD
RjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi87IH07CiAJCTBGM0QwQkJEMTk0QTQx
NDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyog
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAq
LzsgfTsKQEAgLTM1NSw2ICszNTAsOCBAQAogCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyog
REZHQXJyYXlNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NEIyNzExQTc4NEJB
RjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dp
dGNoLmNwcCAqLzsgfTsKIAkJMEY2NEIyNzIxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRj
aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NEIy
NzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAv
KiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OworCQkw
RjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBD
YWxsRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQkYxODM1NjZGOTAw
RDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERG
R0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCAq
LzsgfTsKQEAgLTM4Niw4ICszODMsNiBAQAogCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyog
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY3MTRDQTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuY3BwICovOyB9OwogCQkwRjcxNENBNTE2RUE5MkYyMDBGM0VCRUIgLyogREZHQmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkwRjczRDdBRTE2NUExNDJEMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjczRDdB
QjE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAgKi87IH07Ci0J
CTBGNzNEN0FGMTY1QTE0MzAwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjczRDdBQzE2NUEx
NDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3
NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMDE2NTFDNjYxMDBBODBBRkUgLyogQVJNNjREaXNhc3Nl
bWJsZXIuY3BwICovOyB9OwogCQkwRjc1NzZEMjE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lLmNwcCAqLzsgfTsKIAkJMEY3NTc2RDMxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNjAyLDYgKzU5Nyw4IEBACiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBP
cHRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKIAkJMEZFNzIx
MUQxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzIxMUIxOTNCOUM1OTAwMzFGNkVEIC8q
IERGR1RyYW5zaXRpb24uY3BwICovOyB9OwogCQkwRkU3MjExRTE5M0I5QzU5MDAzMUY2RUQgLyog
REZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU4MzQxNzFBNkVG
OTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODM0MTUxQTZFRjk3QjAwRDA0
ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKKwkJMEZFODM0MTgx
QTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4MzQxNjFBNkVGOTdCMDBE
MDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU4NTM0QjE3MjNDREE1MDBCNjE4RjUg
LyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVk
V2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4RjUgLyogREZH
RGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9p
bnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZFOTVGNzkxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTk1Rjc3MThCNTY5NDcwMEI1
MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgKi87IH07CkBAIC0xOTUwLDEzICsxOTQ3LDggQEAK
IAkJMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0ZHU2ltcGxpZmljYXRpb25Q
aGFzZS5oOyBwYXRoID0gZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlk
YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhbGlkYXRl
LmNwcDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYWxpZGF0ZS5oOyBwYXRoID0gZGZnL0RGR1Zh
bGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0I3RTIwMTlBMTFCODAw
MEQ5QkM1NiAvKiBDYWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YWxsRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNCN0UyMTE5QTExQjgw
MDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhbGxFZGdlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGM0I3RTIyMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2VQcm9maWxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0I3RTIzMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRn
ZVByb2ZpbGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxF
ZGdlUHJvZmlsZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdF
MjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGM0I3RTJDMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0QwQkJBMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25z
dGFudFN0cnVjdHVyZUNoZWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3
RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBwYXRoID0gZGZnL0RGR1ByZVBvc3RO
dW1iZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAyNSw2ICsyMDE3
LDggQEAKIAkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheU1vZGUuaDsgcGF0aCA9IGRmZy9E
RkdBcnJheU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEIyNkYxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCaW5hcnlTd2l0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVN3aXRjaC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVk
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQzIxODM1NjcyQjAw
RDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdBdmFpbGFiaWxpdHkuY3BwOyBwYXRoID0gZGZnL0RGR0F2YWlsYWJpbGl0
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU2LDggKzIwNTAsNiBAQAog
CQkwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1v
bi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25Q
aGFzZS5oOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3M0Q3QUIxNjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1
cmVDYWxsU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGNzNEN0FDMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENE
IC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NTc2RDExOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFj
Y2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjI4NCw2ICsyMjc2LDggQEAKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2
QzQ4IC8qIE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU3MjExQjE5M0I5QzU5MDAzMUY2
RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdUcmFuc2l0aW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8qIERG
R1RyYW5zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVHJhbnNp
dGlvbi5oOyBwYXRoID0gZGZnL0RGR1RyYW5zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
ODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThG
NSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0
QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOyBwYXRoID0gZGZn
L0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkU5NUY3NzE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRGF0YVNlY3Rpb24uY3BwOyBwYXRoID0gZnRs
L0ZUTERhdGFTZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NDcs
OCArMzc0MSw2IEBACiAJCQkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRj
aC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5o
ICovLAogCQkJCTBGMjRFNTNEMTdFQTlGNTkwMEFCQjIxNyAvKiBDQ2FsbEhlbHBlcnMuaCAqLywK
LQkJCQkwRjczRDdBQjE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5j
cHAgKi8sCi0JCQkJMEY3M0Q3QUMxNjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJv
dXRpbmUuaCAqLywKIAkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENv
ZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFi
bGVBbGxvY2F0b3IuaCAqLywKQEAgLTM3OTYsNiArMzc4OCw4IEBACiAJCQkJMEZDNzEyRTExN0NE
ODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8s
CiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovLAog
CQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAorCQkJ
CTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5j
cHAgKi8sCisJCQkJMEZFODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lLmggKi8sCiAJCQkJMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAg
Ki8sCiAJCQkJMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovLAogCQkJCTBGNkIx
Q0JCMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0
b3IuY3BwICovLApAQCAtNTAyNywxMSArNTAyMSw4IEBACiAJCQkJMEY2NjZFQkUxODM1NjZGOTAw
RDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLywKIAkJCQkwRjg4
NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAqLywKIAkJCQkwRjgwMjNF
OTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8sCi0JCQkJMEYzQjdFMkMxOUExMkFB
RTAwRDlCQzU2IC8qIENhbGxFZGdlLmNwcCAqLywKLQkJCQkwRjNCN0UyMDE5QTExQjgwMDBEOUJD
NTYgLyogQ2FsbEVkZ2UuaCAqLywKLQkJCQkwRjNCN0UyMTE5QTExQjgwMDBEOUJDNTYgLyogQ2Fs
bEVkZ2VQcm9maWxlLmNwcCAqLywKLQkJCQkwRjNCN0UyMjE5QTExQjgwMDBEOUJDNTYgLyogQ2Fs
bEVkZ2VQcm9maWxlLmggKi8sCi0JCQkJMEYzQjdFMjMxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxF
ZGdlUHJvZmlsZUlubGluZXMuaCAqLywKKwkJCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyog
Q2FsbEVkZ2UuY3BwICovLAorCQkJCTBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRn
ZS5oICovLAogCQkJCTBGMEI4M0FFMTRCQ0Y3MTQwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3Bw
ICovLAogCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCAqLywK
IAkJCQkwRjkzMzI5MzE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwICovLApA
QCAtNTQ4Myw3ICs1NDc0LDYgQEAKIAkJCQkwRjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyogREZH
RnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQyMTdFQTlGNTkwMEFCQjIx
NyAvKiBDQ2FsbEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQyNjUw
MEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNzNEN0FGMTY1QTE0
MzAwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NjlBMDc5NzBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjhGOTQ0MTE2Njc2MzMyMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDOTdGMzQxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC01NTI3LDYgKzU1MTcsNyBAQAogCQkJ
CUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxMTY2MDIwRTE5OTdCNDAwODA2NkREIC8qIERhdGVJbnN0YW5j
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NEIyN0ExQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxF
ZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEExNTYzMjEwOTY2MzY1MDA2RkEyNjAgLyogRGF0
ZUluc3RhbmNlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRDMEUxNzEzNUUwMDJD
N0U4MiAvKiBEYXRlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDNFODBFMTcx
OEY0MDAyQzdFODIgLyogRGF0ZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNTU3
NCw3ICs1NTY1LDYgQEAKIAkJCQkwRkZGQzk1QTE0RUY5MEE5MDBDNzI1MzIgLyogREZHQ1NFUGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAvKiBERkdE
Q0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjJCOUExNzJGMDUwMTAwN0RCREE1IC8q
IERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYzQjdFMjgxOUEx
MUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJD
MEY3Q0UxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFODUzNEMxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBv
aW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI5ODFGRDkxN0JBRUU0QjAwQTNCQzk4IC8qIERG
R0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC01ODY1LDcgKzU4NTUs
NiBAQAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDE2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xleGljYWxF
bnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQwNDgwMTMxMDIxQTFEOTAwOEU3RjAx
IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjNCN0UyOTE5QTEx
QjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzJDRjM5QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTc2MTQwRDIxODI5ODJDQjAwNzUwNjI0IC8qIEpTQXJndW1lbnRzSXRl
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U0FycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTYxODksNyArNjE3OCw2IEBACiAJCQkJRTQ5REMx
NkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRl
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJz
ZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0I3RTI2MTlBMTFCODAwMEQ5
QkM1NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTQxMTg2OTdCNDAw
NTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU0
MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEODJFNTQxNDFEQUVFRTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTYyMzYsNiArNjIyNCw3IEBACiAJCQkJMEZGNDI3NDkxNThFQkU5MTAwNENCOUZG
IC8qIHVkaXM4Nl90eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUFCMzkxNzk5RTRCMjAw
RDI4MzNEIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFG
NDExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkU4MzQxODFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2NjczOUQzMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRo
RnJhY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQyMTdBREI1RjMwMDVBQjE3NCAv
KiBVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0YxN0FEQjVGMzAwNUFC
MTc0IC8qIFVpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNjc3NCw3ICs2NzYzLDYgQEAK
IAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFNDE5RDBCQTdEMDBCMUQxQjUgLyogREZHSW5z
ZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY3M0Q3QUUxNjVB
MTQyRDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTY5QTA3OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjhGOTQ0MDE2Njc2MzMwMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkM5N0YzMzE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjc4OSw2ICs2Nzc3
LDcgQEAKIAkJCQkwRjlDNUU1RTE4RTM1RjVFMDBENDMxQzMgLyogRlRMRFdBUkZSZWdpc3Rlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJFOTggLyogQ29tbW9u
U2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZG
MyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
NjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAgLyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIxMDdFQzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2QjE2RDgxMkVCNUI1OTAwMUJFQzFCIC8qIENvbnNlcnZh
dGl2ZVJvb3RzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjk2MCw4ICs2OTQ5LDggQEAKIAkJCQkw
RjIzNUJENTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEODE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFRo
dW5rR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRBMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExFeGl0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYzQjdFMjcxOUEx
MUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0YyOTk2QjE3QTBCQjY3MDAxMDQxN0EgLyogRlRMRmFpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkU4MzQxNzFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZv
ck9TUkVudHJ5SklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI1RjFBRjE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RUEwQTI4MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzE1Myw3ICs3MTQyLDYgQEAKIAkJCQkwRjQ2ODBEMjE0QkJEMTY1MDBC
RkUyNzIgLyogTExJbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzhCMDExMTdDRjA3
ODAwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0
NjgwQTgxNEJBN0ZBQjAwQkZFMjcyIC8qIExMSW50RXhjZXB0aW9ucy5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkwRjNCN0UyRDE5QTEyQUFFMDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4MzlDMTRCQ0Y0NjMwMDg4NUI0RiAvKiBMTEludFRo
dW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNFRkFDRDE4MDVFNzU1MDA0NzJDRTQgLyog
TExWTUFQSS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsRWRnZS5oCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTcgKzMwLDE1IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi10eXBlZGVmIHVpbnQxNl90IENhbGxFZGdlQ291bnRUeXBl
OwotCiBjbGFzcyBDYWxsRWRnZSB7CiBwdWJsaWM6CiAgICAgQ2FsbEVkZ2UoKTsKLSAgICBDYWxs
RWRnZShDYWxsVmFyaWFudCwgQ2FsbEVkZ2VDb3VudFR5cGUpOworICAgIENhbGxFZGdlKENhbGxW
YXJpYW50LCB1aW50MzJfdCk7CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhbV9jYWxsZWU7IH0KICAgICAKICAgICBDYWxsVmFyaWFudCBjYWxsZWUoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxlZTsgfQotICAgIENhbGxFZGdlQ291bnRUeXBlIGNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9jb3VudDsgfQorICAgIHVpbnQzMl90IGNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9jb3VudDsgfQogICAgIAogICAgIENhbGxFZGdlIGRlc3BlY2lmaWVkQ2xvc3VyZSgpIGNvbnN0
CiAgICAgewpAQCAtNDksMTIgKzQ3LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKLXB1YmxpYzoKK3ByaXZhdGU6CiAgICAgQ2FsbFZh
cmlhbnQgbV9jYWxsZWU7Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV9jb3VudDsKKyAgICB1aW50
MzJfdCBtX2NvdW50OwogfTsKIAotaW5saW5lIENhbGxFZGdlOjpDYWxsRWRnZShDYWxsVmFyaWFu
dCBjYWxsZWUsIENhbGxFZGdlQ291bnRUeXBlIGNvdW50KQoraW5saW5lIENhbGxFZGdlOjpDYWxs
RWRnZShDYWxsVmFyaWFudCBjYWxsZWUsIHVpbnQzMl90IGNvdW50KQogICAgIDogbV9jYWxsZWUo
Y2FsbGVlKQogICAgICwgbV9jb3VudChjb3VudCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuY3BwCShyZXZpc2lvbiAxNzky
NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwzNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
Q2FsbEVkZ2VQcm9maWxlLmgiCi0KLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRl
ICJDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgot
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUNhbGxFZGdlTGlz
dCBDYWxsRWRnZVByb2ZpbGU6OmNhbGxFZGdlcygpIGNvbnN0Ci17Ci0gICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAKLSAgICBDYWxsRWRnZUxpc3QgcmVzdWx0Owot
ICAgIAotICAgIENhbGxWYXJpYW50IHByaW1hcnlDYWxsZWUgPSBtX3ByaW1hcnlDYWxsZWU7Ci0g
ICAgQ2FsbEVkZ2VDb3VudFR5cGUgbnVtQ2FsbHNUb1ByaW1hcnkgPSBtX251bUNhbGxzVG9Qcmlt
YXJ5OwotICAgIC8vIERlZmVuZCBhZ2FpbnN0IHJhY2VzLiBUaGVzZSBmaWVsZHMgYXJlIG1vZGlm
aWVkIGJ5IHRoZSBsb2cgcHJvY2Vzc29yIHdpdGhvdXQgbG9ja2luZy4KLSAgICBpZiAoISFwcmlt
YXJ5Q2FsbGVlICYmIG51bUNhbGxzVG9QcmltYXJ5KQotICAgICAgICByZXN1bHQuYXBwZW5kKENh
bGxFZGdlKHByaW1hcnlDYWxsZWUsIG51bUNhbGxzVG9QcmltYXJ5KSk7Ci0gICAgCi0gICAgaWYg
KG1fb3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGlmIHRoZSBwcmlt
YXJ5IHRocmVhZCBoYWQganVzdCBjcmVhdGVkIGEgbV9vdGhlckNhbGxlcyB3aGlsZSBsb2cKLSAg
ICAgICAgLy8gcHJvY2Vzc2luZywgd2Ugc2VlIGEgY29uc2lzdGVudGx5IGNyZWF0ZWQgb25lLiBU
aGUgbG9jayBiZWluZyBoZWxkIGlzIGluc3VmZmljaWVudCBmb3IKLSAgICAgICAgLy8gdGhpcywg
c2luY2UgdGhlIGxvZyBwcm9jZXNzb3Igd2lsbCBvbmx5IGdyYWIgdGhlIGxvY2sgd2hlbiBtZXJn
aW5nIHRoZSBzZWNvbmRhcnkKLSAgICAgICAgLy8gc3BlY3RydW0gaW50byB0aGUgcHJpbWFyeSBv
bmUgYnV0IG1heSBzdGlsbCBjcmVhdGUgdGhlIGRhdGEgc3RydWN0dXJlIHdpdGhvdXQgaG9sZGlu
ZwotICAgICAgICAvLyBsb2Nrcy4KLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAg
ICAgIGZvciAoQ2FsbEVkZ2UmIGVudHJ5IDogbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkKSB7
Ci0gICAgICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGUg
cHJpbWFyeSBkdXBsaWNhdGVzIGFuIGVudHJ5IGluIHRoZSBzZWNvbmRhcnkKLSAgICAgICAgICAg
IC8vIHNwZWN0cnVtLiBUaGF0IGNhbiBoYXBwZW4gd2hlbiB0aGUgR0MgcmVtb3ZlcyB0aGUgcHJp
bWFyeS4gV2UgY291bGQgaGF2ZSB0aGUgR0MgZml4Ci0gICAgICAgICAgICAvLyB0aGUgc2l0dWF0
aW9uIGJ5IGNoYW5naW5nIHRoZSBwcmltYXJ5IHRvIGJlIHNvbWV0aGluZyBmcm9tIHRoZSBzZWNv
bmRhcnkgc3BlY3RydW0sCi0gICAgICAgICAgICAvLyBidXQgdGhpcyBmaXggc2VlbXMgc2ltcGxl
ciB0byBpbXBsZW1lbnQgYW5kIGFsc28gY2hlYXBlci4KLSAgICAgICAgICAgIGlmIChlbnRyeS5j
YWxsZWUoKSA9PSByZXN1bHRbMF0uY2FsbGVlKCkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHRb
MF0gPSBDYWxsRWRnZShyZXN1bHRbMF0uY2FsbGVlKCksIGVudHJ5LmNvdW50KCkgKyByZXN1bHRb
MF0uY291bnQoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZW50cnkpOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIHN0ZDo6c29ydChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgp
LCBbXSAoY29uc3QgQ2FsbEVkZ2UmIGEsIGNvbnN0IENhbGxFZGdlJiBiKSAtPiBib29sIHsKLSAg
ICAgICAgICAgIHJldHVybiBhLmNvdW50KCkgPiBiLmNvdW50KCk7Ci0gICAgICAgIH0pOwotICAg
IAotICAgIGlmIChyZXN1bHQuc2l6ZSgpID49IDIpCi0gICAgICAgIEFTU0VSVChyZXN1bHRbMF0u
Y291bnQoKSA+PSByZXN1bHQubGFzdCgpLmNvdW50KCkpOwotICAgIAotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLUNhbGxFZGdlQ291bnRUeXBlIENhbGxFZGdlUHJvZmlsZTo6bnVtQ2FsbHNUb0tu
b3duQ2VsbHMoKSBjb25zdAotewotICAgIENhbGxFZGdlQ291bnRUeXBlIHJlc3VsdCA9IDA7Ci0g
ICAgZm9yIChDYWxsRWRnZSYgZWRnZSA6IGNhbGxFZGdlcygpKQotICAgICAgICByZXN1bHQgKz0g
ZWRnZS5jb3VudCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBib29sIHdvcnRo
RGVzcGVjaWZ5aW5nKGNvbnN0IENhbGxWYXJpYW50JiB2YXJpYW50KQotewotICAgIHJldHVybiAh
SGVhcDo6aXNNYXJrZWQodmFyaWFudC5yYXdDYWxsZWVDZWxsKCkpCi0gICAgICAgICYmIEhlYXA6
OmlzTWFya2VkKHZhcmlhbnQuZGVzcGVjaWZpZWRDbG9zdXJlKCkucmF3Q2FsbGVlQ2VsbCgpKTsK
LX0KLQotYm9vbCBDYWxsRWRnZVByb2ZpbGU6OndvcnRoRGVzcGVjaWZ5aW5nKCkKLXsKLSAgICBp
ZiAobV9jbG9zdXJlc0FyZURlc3BlY2lmaWVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgYm9vbCBkaWRTZWVFbnRyeSA9IGZhbHNlOwotICAgIAotICAgIGlmICghIW1fcHJpbWFy
eUNhbGxlZSkgewotICAgICAgICBkaWRTZWVFbnRyeSA9IHRydWU7Ci0gICAgICAgIGlmICghSlND
Ojp3b3J0aERlc3BlY2lmeWluZyhtX3ByaW1hcnlDYWxsZWUpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9vdGhlckNhbGxlZXMpIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgZGlkU2VlRW50cnkgPSB0cnVlOwotICAgICAgICAgICAgaWYgKCFK
U0M6OndvcnRoRGVzcGVjaWZ5aW5nKG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jYWxs
ZWUoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBkaWRTZWVFbnRyeTsKLX0KLQotdm9pZCBDYWxsRWRnZVByb2ZpbGU6
OnZpc2l0V2VhaygpCi17Ci0gICAgaWYgKCFtX3ByaW1hcnlDYWxsZWUgJiYgIW1fb3RoZXJDYWxs
ZWVzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICAKLSAgICAvLyBTZWUgaWYgYW55dGhpbmcgaXMgZGVhZCBhbmQgaWYg
dGhhdCBjYW4gYmUgcmVjdGlmaWVkIGJ5IGRlc3BlY2lmeWluZy4KLSAgICBpZiAod29ydGhEZXNw
ZWNpZnlpbmcoKSkgewotICAgICAgICBDYWxsU3BlY3RydW0gbmV3U3BlY3RydW07Ci0gICAgICAg
IAotICAgICAgICBpZiAoISFtX3ByaW1hcnlDYWxsZWUpCi0gICAgICAgICAgICBuZXdTcGVjdHJ1
bS5hZGQobV9wcmltYXJ5Q2FsbGVlLmRlc3BlY2lmaWVkQ2xvc3VyZSgpLCBtX251bUNhbGxzVG9Q
cmltYXJ5KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX290aGVyQ2FsbGVlcykgewotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLnNpemUo
KTsgaS0tOykgewotICAgICAgICAgICAgICAgIG5ld1NwZWN0cnVtLmFkZCgKLSAgICAgICAgICAg
ICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNhbGxlZSgpLmRlc3BlY2lm
aWVkQ2xvc3VyZSgpLAotICAgICAgICAgICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9j
ZXNzZWRbaV0uY291bnQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIFZlY3RvcjxDYWxsU3BlY3RydW06OktleUFuZENvdW50PiBsaXN0ID0gbmV3U3BlY3Ry
dW0uYnVpbGRMaXN0KCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpc3Quc2l6ZSgpKTsKLSAg
ICAgICAgbV9wcmltYXJ5Q2FsbGVlID0gbGlzdC5sYXN0KCkua2V5OwotICAgICAgICBtX251bUNh
bGxzVG9QcmltYXJ5ID0gbGlzdC5sYXN0KCkuY291bnQ7Ci0gICAgICAgIAotICAgICAgICBpZiAo
bV9vdGhlckNhbGxlZXMpIHsKLSAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3Nl
ZC5jbGVhcigpOwotCi0gICAgICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGEgc2l0dWF0aW9uIHdo
ZXJlIHRoZSBHQyBjbGVhcnMgdGhlIHByaW1hcnkgYW5kIHRoZW4gbG9nIHByb2Nlc3NpbmcKLSAg
ICAgICAgICAgIC8vIHJlaW5zdGF0ZXMgaXQgd2l0aG91dCBldmVyIGRvaW5nIGFuIGFkZFNsb3cg
YW5kIHN1YnNlcXVlbnQgbWVyZ2VCYWNrLiBJbiBzdWNoIGEgY2FzZQotICAgICAgICAgICAgLy8g
dGhlIHByaW1hcnkgY291bGQgZHVwbGljYXRlIGFuIGVudHJ5IGluIG90aGVyQ2FsbGVlcywgd2hp
Y2ggbWVhbnMgdGhhdCBldmVuIHRob3VnaCB3ZQotICAgICAgICAgICAgLy8gaGFkIGFuIG90aGVy
Q2FsbGVlcyBvYmplY3QsIHRoZSBsaXN0IHNpemUgaXMganVzdCAxLgotICAgICAgICAgICAgaWYg
KGxpc3Quc2l6ZSgpID49IDIpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBs
aXN0LnNpemUoKSAtIDE7IGktLTspCi0gICAgICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVz
LT5tX3Byb2Nlc3NlZC5hcHBlbmQoQ2FsbEVkZ2UobGlzdFtpXS5rZXksIGxpc3RbaV0uY291bnQp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9jbG9zdXJl
c0FyZURlc3BlY2lmaWVkID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKCEhbV9wcmltYXJ5Q2FsbGVlICYmICFIZWFwOjppc01hcmtlZChtX3By
aW1hcnlDYWxsZWUucmF3Q2FsbGVlQ2VsbCgpKSkgewotICAgICAgICBtX251bUNhbGxzVG9Vbmtu
b3duQ2VsbCArPSBtX251bUNhbGxzVG9QcmltYXJ5OwotICAgICAgICAKLSAgICAgICAgbV9wcmlt
YXJ5Q2FsbGVlID0gQ2FsbFZhcmlhbnQoKTsKLSAgICAgICAgbV9udW1DYWxsc1RvUHJpbWFyeSA9
IDA7Ci0gICAgfQotICAgIAotICAgIGlmIChtX290aGVyQ2FsbGVlcykgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLnNpemUoKTsg
aSsrKSB7Ci0gICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9vdGhlckNhbGxlZXMtPm1f
cHJvY2Vzc2VkW2ldLmNhbGxlZSgpLnJhd0NhbGxlZUNlbGwoKSkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fbnVtQ2FsbHNUb1Vua25vd25D
ZWxsICs9IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jb3VudCgpOwotICAgICAgICAg
ICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ktLV0gPSBtX290aGVyQ2FsbGVlcy0+bV9w
cm9jZXNzZWQubGFzdCgpOwotICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2Vk
LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gT25seSBleGlz
dHMgd2hpbGUgd2UgYXJlIHByb2Nlc3NpbmcgdGhlIGxvZy4KLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtKTsKLSAgICB9Ci19Ci0KLXZv
aWQgQ2FsbEVkZ2VQcm9maWxlOjphZGRTbG93KENhbGxWYXJpYW50IGNhbGxlZSwgQ2FsbEVkZ2VQ
cm9maWxlVmVjdG9yJiBtZXJnZUJhY2tMb2cpCi17Ci0gICAgLy8gVGhpcyBleGlzdHMgdG8gaGFu
ZGxlIGNhc2VzIHdoZXJlIHRoZSBzcGVjdHJ1bSB3YXNuJ3QgY3JlYXRlZCB5ZXQsIG9yIHdlJ3Jl
IHN0b3JpbmcgdG8gYQotICAgIC8vIHBhcnRpY3VsYXIgc3BlY3RydW0gZm9yIHRoZSBmaXJzdCB0
aW1lIGR1cmluZyBhIGxvZyBwcm9jZXNzaW5nIGl0ZXJhdGlvbi4KLSAgICAKLSAgICBpZiAoIW1f
b3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgIG1fb3RoZXJDYWxsZWVzID0gc3RkOjptYWtlX3VuaXF1
ZTxTZWNvbmRhcnk+KCk7Ci0gICAgICAgIC8vIElmIGEgY29tcGlsZXIgdGhyZWFkIG5vdGljZXMg
dGhlIG1fb3RoZXJDYWxsZWVzIGJlaW5nIG5vbi1udWxsLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZQot
ICAgICAgICAvLyB0aGF0IGl0IHNlZXMgYSBmdWxseSBjcmVhdGVkIG9uZS4KLSAgICAgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFtX290aGVyQ2FsbGVl
cy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSkgewotICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV90ZW1w
b3JhcnlTcGVjdHJ1bSA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbFNwZWN0cnVtPigpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bS0+
YWRkKAotICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jYWxs
ZWUoKSwKLSAgICAgICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY291
bnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0
aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3JlIHNlZWluZyB0aGlzIHByb2ZpbGUgZHVyaW5nIHRo
aXMgbG9nCi0gICAgICAgIC8vIHByb2Nlc3NpbmcgaXRlcmF0aW9uLgotICAgICAgICBtZXJnZUJh
Y2tMb2cuYXBwZW5kKHRoaXMpOwotICAgIH0KLSAgICAKLSAgICBtX290aGVyQ2FsbGVlcy0+bV90
ZW1wb3JhcnlTcGVjdHJ1bS0+YWRkKGNhbGxlZSk7Ci19Ci0KLXZvaWQgQ2FsbEVkZ2VQcm9maWxl
OjptZXJnZUJhY2soKQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7
Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQobV9vdGhlckNhbGxlZXMpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtKTsKLSAgICAKLSAgICBp
ZiAoISFtX3ByaW1hcnlDYWxsZWUpCi0gICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFy
eVNwZWN0cnVtLT5hZGQobV9wcmltYXJ5Q2FsbGVlLCBtX251bUNhbGxzVG9QcmltYXJ5KTsKLSAg
ICAKLSAgICBpZiAoIW1fY2xvc3VyZXNBcmVEZXNwZWNpZmllZCkgewotICAgICAgICBDYWxsU3Bl
Y3RydW0gbmV3U3BlY3RydW07Ci0gICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqbV9vdGhlckNh
bGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0pCi0gICAgICAgICAgICBuZXdTcGVjdHJ1bS5hZGQo
ZW50cnkua2V5LmRlc3BlY2lmaWVkQ2xvc3VyZSgpLCBlbnRyeS52YWx1ZSk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAobmV3U3BlY3RydW0uc2l6ZSgpIDwgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9y
YXJ5U3BlY3RydW0tPnNpemUoKSkgewotICAgICAgICAgICAgKm1fb3RoZXJDYWxsZWVzLT5tX3Rl
bXBvcmFyeVNwZWN0cnVtID0gbmV3U3BlY3RydW07Ci0gICAgICAgICAgICBtX2Nsb3N1cmVzQXJl
RGVzcGVjaWZpZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIFZlY3RvcjxD
YWxsU3BlY3RydW06OktleUFuZENvdW50PiBsaXN0ID0gbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9y
YXJ5U3BlY3RydW0tPmJ1aWxkTGlzdCgpOwotICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFy
eVNwZWN0cnVtID0gbnVsbHB0cjsKLSAgICAKLSAgICBtX3ByaW1hcnlDYWxsZWUgPSBsaXN0Lmxh
c3QoKS5rZXk7Ci0gICAgbV9udW1DYWxsc1RvUHJpbWFyeSA9IGxpc3QubGFzdCgpLmNvdW50Owot
ICAgIGxpc3QucmVtb3ZlTGFzdCgpOwotICAgIAotICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nl
c3NlZC5jbGVhcigpOwotICAgIGZvciAodW5zaWduZWQgY291bnQgPSBtYXhLbm93bkNhbGxlZXM7
IGNvdW50LS0gJiYgIWxpc3QuaXNFbXB0eSgpOykgewotICAgICAgICBtX290aGVyQ2FsbGVlcy0+
bV9wcm9jZXNzZWQuYXBwZW5kKENhbGxFZGdlKGxpc3QubGFzdCgpLmtleSwgbGlzdC5sYXN0KCku
Y291bnQpKTsKLSAgICAgICAgbGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAgfQotICAgIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IGxpc3Quc2l6ZSgpOyBpLS07KQotICAgICAgICBtX251bUNhbGxzVG9V
bmtub3duQ2VsbCArPSBsaXN0W2ldLmNvdW50OwotfQotCi12b2lkIENhbGxFZGdlUHJvZmlsZTo6
ZmFkZUJ5SGFsZigpCi17Ci0gICAgbV9udW1DYWxsc1RvUHJpbWFyeSA+Pj0gMTsKLSAgICBtX251
bUNhbGxzVG9Ob3RDZWxsID4+PSAxOwotICAgIG1fbnVtQ2FsbHNUb1Vua25vd25DZWxsID4+PSAx
OwotICAgIG1fdG90YWxDb3VudCA+Pj0gMTsKLSAgICAKLSAgICBpZiAobV9vdGhlckNhbGxlZXMp
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2Vk
LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2Vk
W2ldID0gQ2FsbEVkZ2UoCi0gICAgICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vz
c2VkW2ldLmNhbGxlZSgpLAotICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nl
c3NlZFtpXS5jb3VudCgpID4+IDEpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
bV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0pIHsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgZW50cnkgOiAqbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0pCi0gICAg
ICAgICAgICAgICAgZW50cnkudmFsdWUgPj49IDE7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUNh
bGxFZGdlTG9nOjpDYWxsRWRnZUxvZygpCi0gICAgOiBtX3NjYWxlZExvZ0luZGV4KGxvZ1NpemUg
KiBzaXplb2YoRW50cnkpKQotewotICAgIEFTU0VSVCghKG1fc2NhbGVkTG9nSW5kZXggJSBzaXpl
b2YoRW50cnkpKSk7Ci19Ci0KLUNhbGxFZGdlTG9nOjp+Q2FsbEVkZ2VMb2coKSB7IH0KLQotYm9v
bCBDYWxsRWRnZUxvZzo6aXNFbmFibGVkKCkKLXsKLSAgICByZXR1cm4gT3B0aW9uczo6ZW5hYmxl
Q2FsbEVkZ2VQcm9maWxpbmcoKSAmJiBPcHRpb25zOjp1c2VGVExKSVQoKTsKLX0KLQotI2lmIEVO
QUJMRShKSVQpCi0KLWV4dGVybiAiQyIgSklUX09QRVJBVElPTiB2b2lkIG9wZXJhdGlvblByb2Nl
c3NDYWxsRWRnZUxvZyhDYWxsRWRnZUxvZyopIFdURl9JTlRFUk5BTDsKLWV4dGVybiAiQyIgSklU
X09QRVJBVElPTiB2b2lkIG9wZXJhdGlvblByb2Nlc3NDYWxsRWRnZUxvZyhDYWxsRWRnZUxvZyog
bG9nKQotewotICAgIGxvZy0+cHJvY2Vzc0xvZygpOwotfQotCi12b2lkIENhbGxFZGdlTG9nOjpl
bWl0TG9nQ29kZShDQ2FsbEhlbHBlcnMmIGppdCwgQ2FsbEVkZ2VQcm9maWxlJiBwcm9maWxlLCBK
U1ZhbHVlUmVncyBjYWxsZWVSZWdzKQotewotICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRzID0gMTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjsKLSAgICBpZiAoIWNhbGxl
ZVJlZ3MudXNlcyhHUFJJbmZvOjpyZWdUMCkpCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZv
OjpyZWdUMDsKLSAgICBlbHNlIGlmICghY2FsbGVlUmVncy51c2VzKEdQUkluZm86OnJlZ1QxKSkK
LSAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnJlZ1QxOwotICAgIGVsc2UKLSAgICAgICAg
c2NyYXRjaEdQUiA9IEdQUkluZm86OnJlZ1QyOwotICAgIAotICAgIGppdC5sb2FkMzIoJm1fc2Nh
bGVkTG9nSW5kZXgsIHNjcmF0Y2hHUFIpOwotICAgIAotICAgIENDYWxsSGVscGVyczo6SnVtcCBv
ayA9IGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSKTsK
LSAgICAKLSAgICBBU1NFUlRfVU5VU0VEKG51bWJlck9mQXJndW1lbnRzLCBzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpID49IDEgKyBudW1iZXJPZkFyZ3VtZW50cyk7Ci0gICAgCi0gICAgaml0LnN1
YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudEJ5dGVzKCkpLCBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAKLSAgICBqaXQuc3RvcmVW
YWx1ZShjYWxsZWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgaml0LnNldHVwQXJndW1l
bnRzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSk7Ci0gICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uUHJv
Y2Vzc0NhbGxFZGdlTG9nKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQ
UkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihKU1ZhbHVlKSks
IGNhbGxlZVJlZ3MpOwotICAgIAotICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoc3RhY2tBbGlnbm1lbnRCeXRlcygpKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0gICAgCi0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bG9nU2l6ZSAqIHNpemVvZihFbnRyeSkpLCBzY3JhdGNoR1BSKTsKLSAgICBvay5saW5rKCZqaXQp
OwotCi0gICAgaml0LnN1YjMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihFbnRy
eSkpLCBzY3JhdGNoR1BSKTsKLSAgICBqaXQuc3RvcmUzMihzY3JhdGNoR1BSLCAmbV9zY2FsZWRM
b2dJbmRleCk7Ci0gICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9s
b2cpLCBzY3JhdGNoR1BSKTsKLSAgICBqaXQuc3RvcmVWYWx1ZShjYWxsZWVSZWdzLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEVudHJ5LCBtX3ZhbHVl
KSkpOwotICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnByb2Zp
bGUpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEVu
dHJ5LCBtX3Byb2ZpbGUpKSk7Ci19Ci0KLXZvaWQgQ2FsbEVkZ2VMb2c6OmVtaXRMb2dDb2RlKAot
ICAgIENDYWxsSGVscGVycyYgaml0LCBPd25QdHI8Q2FsbEVkZ2VQcm9maWxlPiYgcHJvZmlsZVBv
aW50ZXIsIEpTVmFsdWVSZWdzIGNhbGxlZVJlZ3MpCi17Ci0gICAgaWYgKCFpc0VuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHByb2ZpbGVQb2ludGVyLmNyZWF0ZVRyYW5zYWN0
aW9uYWxseSgpOwotICAgIGVtaXRMb2dDb2RlKGppdCwgKnByb2ZpbGVQb2ludGVyLCBjYWxsZWVS
ZWdzKTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLXZvaWQgQ2FsbEVkZ2VMb2c6OnBy
b2Nlc3NMb2coKQotewotICAgIEFTU0VSVCghKG1fc2NhbGVkTG9nSW5kZXggJSBzaXplb2YoRW50
cnkpKSk7Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6OmNhbGxFZGdlUHJvZmlsZVJlYWxseVByb2Nl
c3Nlc0xvZygpKSB7Ci0gICAgICAgIENhbGxFZGdlUHJvZmlsZVZlY3RvciBtZXJnZUJhY2tMb2c7
Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3NjYWxlZExvZ0luZGV4IC8g
c2l6ZW9mKEVudHJ5KTsgaSA8IGxvZ1NpemU7ICsraSkKLSAgICAgICAgICAgIG1fbG9nW2ldLm1f
cHJvZmlsZS0+YWRkKG1fbG9nW2ldLm1fdmFsdWUsIG1lcmdlQmFja0xvZyk7Ci0gICAgICAgIAot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtZXJnZUJhY2tMb2cuc2l6ZSgpOyBpLS07KQotICAg
ICAgICAgICAgbWVyZ2VCYWNrTG9nW2ldLT5tZXJnZUJhY2soKTsKLSAgICB9Ci0gICAgCi0gICAg
bV9zY2FsZWRMb2dJbmRleCA9IGxvZ1NpemUgKiBzaXplb2YoRW50cnkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxF
ZGdlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsRWRnZVByb2ZpbGUuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEz
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgQ2FsbEVkZ2VQcm9maWxlX2gKLSNkZWZpbmUgQ2FsbEVkZ2VQcm9maWxlX2gKLQot
I2luY2x1ZGUgIkNhbGxFZGdlLmgiCi0jaW5jbHVkZSAiQ2FsbFZhcmlhbnQuaCIKLSNpbmNsdWRl
ICJDb25jdXJyZW50SklUTG9jay5oIgotI2luY2x1ZGUgIkdQUkluZm8uaCIKLSNpbmNsdWRlICJK
U0NlbGwuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBDQ2FsbEhlbHBlcnM7Ci1jbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci0KLWNsYXNz
IENhbGxFZGdlTG9nOwotY2xhc3MgQ2FsbEVkZ2VQcm9maWxlOwotdHlwZWRlZiBWZWN0b3I8Q2Fs
bEVkZ2VQcm9maWxlKiwgMTA+IENhbGxFZGdlUHJvZmlsZVZlY3RvcjsKLQotY2xhc3MgQ2FsbEVk
Z2VQcm9maWxlIHsKLXB1YmxpYzoKLSAgICBDYWxsRWRnZVByb2ZpbGUoKTsKLSAgICAKLSAgICBD
YWxsRWRnZUNvdW50VHlwZSBudW1DYWxsc1RvTm90Q2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
Q2FsbHNUb05vdENlbGw7IH0KLSAgICBDYWxsRWRnZUNvdW50VHlwZSBudW1DYWxsc1RvVW5rbm93
bkNlbGwoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxzVG9Vbmtub3duQ2VsbDsgfQotICAgIENh
bGxFZGdlQ291bnRUeXBlIG51bUNhbGxzVG9Lbm93bkNlbGxzKCkgY29uc3Q7Ci0gICAgCi0gICAg
Q2FsbEVkZ2VDb3VudFR5cGUgdG90YWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxDb3Vu
dDsgfQotICAgIAotICAgIC8vIENhbGwgd2hpbGUgaG9sZGluZyB0aGUgb3duaW5nIENvZGVCbG9j
aydzIGxvY2suCi0gICAgQ2FsbEVkZ2VMaXN0IGNhbGxFZGdlcygpIGNvbnN0OwotICAgIAotICAg
IHZvaWQgdmlzaXRXZWFrKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDYWxs
RWRnZUxvZzsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4S25vd25DYWxsZWVz
ID0gNTsKLSAgICAKLSAgICB2b2lkIGFkZChKU1ZhbHVlLCBDYWxsRWRnZVByb2ZpbGVWZWN0b3Im
IG1lcmdlQmFja0xvZyk7Ci0gICAgCi0gICAgYm9vbCB3b3J0aERlc3BlY2lmeWluZygpOwotICAg
IHZvaWQgYWRkU2xvdyhDYWxsVmFyaWFudCwgQ2FsbEVkZ2VQcm9maWxlVmVjdG9yJiBtZXJnZUJh
Y2tMb2cpOwotICAgIHZvaWQgbWVyZ2VCYWNrKCk7Ci0gICAgdm9pZCBmYWRlQnlIYWxmKCk7Ci0g
ICAgCi0gICAgLy8gSXQncyBjaGVhcGVyIHRvIGxldCB0aGlzIGhhdmUgaXRzIG93biBsb2NrLiBJ
dCBuZWVkcyB0byBiZSBhYmxlIHRvIGZpbmQgd2hpY2ggbG9jayB0bwotICAgIC8vIGxvY2suIE5v
cm1hbGx5IGl0IHdvdWxkIGxvY2sgdGhlIG93bmluZyBDb2RlQmxvY2sncyBsb2NrLCBidXQgdGhh
dCB3b3VsZCByZXF1aXJlIGEKLSAgICAvLyBwb2ludGVyLXdpZHRoIHdvcmQgdG8gcG9pbnQgYXQg
dGhlIENvZGVCbG9jay4gSGF2aW5nIHRoZSBieXRlLXNpemVkIGxvY2sgaGVyZSBpcwotICAgIC8v
IGNoZWFwZXIuIEhvd2V2ZXIsIHRoaXMgbWVhbnMgdGhhdCB0aGUgcmVsYXRpb25zaGlwIHdpdGgg
dGhlIENvZGVCbG9jayBsb2NrIGlzOgotICAgIC8vIGFjcXVpcmUgdGhlIENvZGVCbG9jayBsb2Nr
IGJlZm9yZSB0aGlzIG9uZS4KLSAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsK
LSAgICAKLSAgICBib29sIG1fY2xvc3VyZXNBcmVEZXNwZWNpZmllZDsKLSAgICAKLSAgICBDYWxs
RWRnZUNvdW50VHlwZSBtX251bUNhbGxzVG9QcmltYXJ5OwotICAgIENhbGxFZGdlQ291bnRUeXBl
IG1fbnVtQ2FsbHNUb05vdENlbGw7Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV9udW1DYWxsc1Rv
VW5rbm93bkNlbGw7Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV90b3RhbENvdW50OwotICAgIENh
bGxWYXJpYW50IG1fcHJpbWFyeUNhbGxlZTsKLSAgICAKLSAgICB0eXBlZGVmIFNwZWN0cnVtPENh
bGxWYXJpYW50LCBDYWxsRWRnZUNvdW50VHlwZT4gQ2FsbFNwZWN0cnVtOwotICAgIAotICAgIHN0
cnVjdCBTZWNvbmRhcnkgewotICAgICAgICBWZWN0b3I8Q2FsbEVkZ2U+IG1fcHJvY2Vzc2VkOyAv
LyBQcm9jZXNzZWQgYnV0IG5vdCBuZWNlc3NhcmlseSBzb3J0ZWQuCi0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsU3BlY3RydW0+IG1fdGVtcG9yYXJ5U3BlY3RydW07Ci0gICAgfTsKLSAgICAK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Vjb25kYXJ5PiBtX290aGVyQ2FsbGVlczsKLX07Ci0KLWNs
YXNzIENhbGxFZGdlTG9nIHsKLXB1YmxpYzoKLSAgICBDYWxsRWRnZUxvZygpOwotICAgIH5DYWxs
RWRnZUxvZygpOwotCi0gICAgc3RhdGljIGJvb2wgaXNFbmFibGVkKCk7Ci0gICAgCi0jaWYgRU5B
QkxFKEpJVCkKLSAgICB2b2lkIGVtaXRMb2dDb2RlKENDYWxsSGVscGVycyYsIENhbGxFZGdlUHJv
ZmlsZSYsIEpTVmFsdWVSZWdzIGNhbGxlZVJlZ3MpOyAvLyBBc3N1bWVzIHRoYXQgc3RhY2sgaXMg
YWxpZ25lZCwgYWxsIHZvbGF0aWxlIHJlZ2lzdGVycyAtIG90aGVyIHRoYW4gY2FsbGVlR1BSIC0g
YXJlIGNsb2JiZXJhYmxlLCBhbmQgdGhlIHBhcmFtZXRlciBzcGFjZSBpcyBpbiB1c2UuCi0gICAg
Ci0gICAgLy8gU2FtZSBhcyBhYm92ZSBidXQgY3JlYXRlcyBhIENhbGxFZGdlUHJvZmlsZSBpbnN0
YW5jZSBpZiBvbmUgZGlkIG5vdCBhbHJlYWR5IGV4aXN0LiBEb2VzCi0gICAgLy8gdGhpcyBpbiBh
IHRocmVhZC1zYWZlIG1hbm5lciBieSBjYWxsaW5nIE93blB0cjo6Y3JlYXRlVHJhbnNhY3Rpb25h
bGx5LgotICAgIHZvaWQgZW1pdExvZ0NvZGUoQ0NhbGxIZWxwZXJzJiwgT3duUHRyPENhbGxFZGdl
UHJvZmlsZT4mLCBKU1ZhbHVlUmVncyBjYWxsZWVSZWdzKTsKLSNlbmRpZiAvLyBFTkFCTEUoSklU
KQotICAgIAotICAgIHZvaWQgcHJvY2Vzc0xvZygpOwotICAgIAotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGxvZ1NpemUgPSAxMDAwMDsKLSAgICAKLSAgICBzdHJ1Y3QgRW50cnkgewotICAgICAgICBK
U1ZhbHVlIG1fdmFsdWU7Ci0gICAgICAgIENhbGxFZGdlUHJvZmlsZSogbV9wcm9maWxlOwotICAg
IH07Ci0gICAgCi0gICAgdW5zaWduZWQgbV9zY2FsZWRMb2dJbmRleDsKLSAgICBFbnRyeSBtX2xv
Z1tsb2dTaXplXTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQ2FsbEVk
Z2VQcm9maWxlX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxF
ZGdlUHJvZmlsZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oCShyZXZpc2lvbiAxNzkyNDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzX2gKLSNk
ZWZpbmUgQ2FsbEVkZ2VQcm9maWxlSW5saW5lc19oCi0KLSNpbmNsdWRlICJDYWxsRWRnZVByb2Zp
bGUuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWlubGluZSBDYWxsRWRnZVByb2ZpbGU6OkNhbGxF
ZGdlUHJvZmlsZSgpCi0gICAgOiBtX2Nsb3N1cmVzQXJlRGVzcGVjaWZpZWQoZmFsc2UpCi0gICAg
LCBtX251bUNhbGxzVG9QcmltYXJ5KDApCi0gICAgLCBtX251bUNhbGxzVG9Ob3RDZWxsKDApCi0g
ICAgLCBtX251bUNhbGxzVG9Vbmtub3duQ2VsbCgwKQotICAgICwgbV90b3RhbENvdW50KDApCi0g
ICAgLCBtX3ByaW1hcnlDYWxsZWUobnVsbHB0cikKLXsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lk
IENhbGxFZGdlUHJvZmlsZTo6YWRkKEpTVmFsdWUgdmFsdWUsIENhbGxFZGdlUHJvZmlsZVZlY3Rv
ciYgbWVyZ2VCYWNrTG9nKQotewotICAgIHVuc2lnbmVkIG5ld1RvdGFsQ291bnQgPSBtX3RvdGFs
Q291bnQgKyAxOwotICAgIGlmIChVTkxJS0VMWSghbmV3VG90YWxDb3VudCkpIHsKLSAgICAgICAg
ZmFkZUJ5SGFsZigpOyAvLyBUYWNrbGUgb3ZlcmZsb3dzIGJ5IGRpdmlkaW5nIGFsbCBjb3VudHMg
YnkgdHdvLgotICAgICAgICBuZXdUb3RhbENvdW50ID0gbV90b3RhbENvdW50ICsgMTsKLSAgICB9
Ci0gICAgQVNTRVJUKG5ld1RvdGFsQ291bnQpOwotICAgIG1fdG90YWxDb3VudCA9IG5ld1RvdGFs
Q291bnQ7Ci0gICAgCi0gICAgaWYgKFVOTElLRUxZKCF2YWx1ZS5pc0NlbGwoKSkpIHsKLSAgICAg
ICAgbV9udW1DYWxsc1RvTm90Q2VsbCsrOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Q2FsbFZhcmlhbnQgY2FsbGVlID0gQ2FsbFZhcmlhbnQodmFsdWUuYXNDZWxsKCkpOwotICAgIAot
ICAgIGlmIChtX2Nsb3N1cmVzQXJlRGVzcGVjaWZpZWQpCi0gICAgICAgIGNhbGxlZSA9IGNhbGxl
ZS5kZXNwZWNpZmllZENsb3N1cmUoKTsKLSAgICAKLSAgICBpZiAoVU5MSUtFTFkoIW1fcHJpbWFy
eUNhbGxlZSkpIHsKLSAgICAgICAgbV9wcmltYXJ5Q2FsbGVlID0gY2FsbGVlOwotICAgICAgICBt
X251bUNhbGxzVG9QcmltYXJ5ID0gMTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAg
Ci0gICAgaWYgKExJS0VMWShtX3ByaW1hcnlDYWxsZWUgPT0gY2FsbGVlKSkgewotICAgICAgICBt
X251bUNhbGxzVG9QcmltYXJ5Kys7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAot
ICAgIGlmIChVTkxJS0VMWSghbV9vdGhlckNhbGxlZXMpKSB7Ci0gICAgICAgIGFkZFNsb3coY2Fs
bGVlLCBtZXJnZUJhY2tMb2cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAg
ICBDYWxsU3BlY3RydW0qIHNlY29uZGFyeSA9IG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNw
ZWN0cnVtLmdldCgpOwotICAgIGlmICghc2Vjb25kYXJ5KSB7Ci0gICAgICAgIGFkZFNsb3coY2Fs
bGVlLCBtZXJnZUJhY2tMb2cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAg
ICBzZWNvbmRhcnktPmFkZChjYWxsZWUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmIC8vIENhbGxFZGdlUHJvZmlsZUlubGluZXNfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMTc5MjQyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDkgQEAKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiREZHVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
IlJlcGF0Y2guaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0xp
c3REdW1wLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKICNpZiBFTkFCTEUo
SklUKQpAQCAtMzcsMjAgKzM5LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxMaW5r
SW5mbzo6dW5saW5rKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpCiB7Ci0gICAgQVNTRVJU
KGlzTGlua2VkKCkpOworICAgIGlmICghaXNMaW5rZWQoKSkgeworICAgICAgICAvLyBXZSBjb3Vs
ZCBiZSBjYWxsZWQgZXZlbiBpZiB3ZSdyZSBub3QgbGlua2VkIGFueW1vcmUgYmVjYXVzZSBvZiBo
b3cgcG9seW1vcnBoaWMgY2FsbHMKKyAgICAgICAgLy8gd29yay4gRWFjaCBjYWxsc2l0ZSB3aXRo
aW4gdGhlIHBvbHltb3JwaGljIGNhbGwgc3R1YiBtYXkgc2VwYXJhdGVseSBhc2sgdXMgdG8gdW5s
aW5rKCkuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KICAgICAKLSAgICBpZiAoT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkpCi0g
ICAgICAgIGRhdGFMb2coIlVubGlua2luZyBjYWxsIGZyb20gIiwgY2FsbFJldHVybkxvY2F0aW9u
LCAiIHRvICIsIHBvaW50ZXJEdW1wKHJlcGF0Y2hCdWZmZXIuY29kZUJsb2NrKCkpLCAiXG4iKTsK
LQotICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRo
UGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIo
aG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNh
bGxlZUdQUiksIDApOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAotICAgICAgICBjYWxsUmV0
dXJuTG9jYXRpb24sCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIuY29kZUJsb2NrKCktPnZtKCktPmdl
dENUSVN0dWIobGlua1RodW5rR2VuZXJhdG9yRm9yKAotICAgICAgICAgICAgKGNhbGxUeXBlID09
IENvbnN0cnVjdCB8fCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3RWYXJhcmdzKT8gQ29kZUZvckNvbnN0
cnVjdCA6IENvZGVGb3JDYWxsLAotICAgICAgICAgICAgaXNGVEwgPyBNdXN0UHJlc2VydmVSZWdp
c3RlcnMgOiBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKSkuY29kZSgpKTsKLSAgICBo
YXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOwotICAgIGNhbGxlZS5jbGVhcigpOwotICAgIHN0
dWIuY2xlYXIoKTsKKyAgICB1bmxpbmtGb3IoCisgICAgICAgIHJlcGF0Y2hCdWZmZXIsICp0aGlz
LAorICAgICAgICAoY2FsbFR5cGUgPT0gQ29uc3RydWN0IHx8IGNhbGxUeXBlID09IENvbnN0cnVj
dFZhcmFyZ3MpPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwsCisgICAgICAgIGlzRlRM
ID8gTXVzdFByZXNlcnZlUmVnaXN0ZXJzIDogUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJl
ZCk7CiAKICAgICAvLyBJdCB3aWxsIGJlIG9uIGEgbGlzdCBpZiB0aGUgY2FsbGVlIGhhcyBhIGNv
ZGUgYmxvY2suCiAgICAgaWYgKGlzT25MaXN0KCkpCkBAIC02MSwxMiArNjAsMTIgQEAgdm9pZCBD
YWxsTGlua0luZm86OnZpc2l0V2VhayhSZXBhdGNoQnVmZgogewogICAgIGlmIChpc0xpbmtlZCgp
KSB7CiAgICAgICAgIGlmIChzdHViKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
KHN0dWItPmV4ZWN1dGFibGUoKSkpIHsKKyAgICAgICAgICAgIGlmICghc3R1Yi0+dmlzaXRXZWFr
KHJlcGF0Y2hCdWZmZXIpKSB7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAg
ICAgICAgIkNsZWFyaW5nIGNsb3N1cmUgY2FsbCBmcm9tICIsICpyZXBhdGNoQnVmZmVyLmNvZGVC
bG9jaygpLCAiIHRvICIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHViLT5leGVjdXRhYmxl
KCktPmhhc2hGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIiwgc3R1YiByb3V0aW5lICIsIFJhd1BvaW50ZXIoc3R1Yi5nZXQoKSksICIuXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpc3REdW1wKHN0dWItPnZhcmlhbnRzKCkpLCAiLCBzdHVi
IHJvdXRpbmUgIiwgUmF3UG9pbnRlcihzdHViLmdldCgpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICIuXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdW5saW5rKHJl
cGF0Y2hCdWZmZXIpOwogICAgICAgICAgICAgfQpAQCAtODMsMTEgKzgyLDYgQEAgdm9pZCBDYWxs
TGlua0luZm86OnZpc2l0V2VhayhSZXBhdGNoQnVmZgogICAgIH0KICAgICBpZiAoISFsYXN0U2Vl
bkNhbGxlZSAmJiAhSGVhcDo6aXNNYXJrZWQobGFzdFNlZW5DYWxsZWUuZ2V0KCkpKQogICAgICAg
ICBsYXN0U2VlbkNhbGxlZS5jbGVhcigpOwotICAgIAotICAgIGlmIChjYWxsRWRnZVByb2ZpbGUp
IHsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIGNhbGxFZGdlUHJvZmls
ZS0+dmlzaXRXZWFrKCk7Ci0gICAgfQogfQogCiBDYWxsTGlua0luZm8mIENhbGxMaW5rSW5mbzo6
ZHVtbXkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMyArMjYs
MTIgQEAKICNpZm5kZWYgQ2FsbExpbmtJbmZvX2gKICNkZWZpbmUgQ2FsbExpbmtJbmZvX2gKIAot
I2luY2x1ZGUgIkNhbGxFZGdlUHJvZmlsZS5oIgotI2luY2x1ZGUgIkNsb3N1cmVDYWxsU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiSklUV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KQEAgLTgy
LDE1ICs4MSwxNCBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyOwogICAgIEpJVFdyaXRlQmFycmll
cjxKU0Z1bmN0aW9uPiBjYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGxhc3RT
ZWVuQ2FsbGVlOwotICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViOworICAg
IFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gc3R1YjsKICAgICBib29sIGlzRlRM
IDogMTsKICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKICAgICBib29sIGhhc1Nl
ZW5DbG9zdXJlIDogMTsKICAgICB1bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAg
ICAgdW5zaWduZWQgY2FsbGVlR1BSIDogODsKLSAgICB1bnNpZ25lZCBzbG93UGF0aENvdW50Owor
ICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwot
ICAgIE93blB0cjxDYWxsRWRnZVByb2ZpbGU+IGNhbGxFZGdlUHJvZmlsZTsKIAogICAgIGJvb2wg
aXNMaW5rZWQoKSB7IHJldHVybiBzdHViIHx8IGNhbGxlZTsgfQogICAgIHZvaWQgdW5saW5rKFJl
cGF0Y2hCdWZmZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00Nyw3ICs0Nyw3IEBAIENhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1cyhKU1Zh
bHVlIHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBtX2VkZ2VzLmFwcGVuZChD
YWxsRWRnZShDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSksIDEpKTsKKyAgICBtX3ZhcmlhbnRz
LmFwcGVuZChDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSkpOwogfQogCiBDYWxsTGlua1N0YXR1
cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKQEAgLTEyOSwyMyArMTI5LDYgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVGbwogICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoaXMsIGJ1dCBhbnl0aW1l
IHdlIGhhdmUgdG8gZGVidWcgdGhpcyBjb2RlLCBpdCBiZWNvbWVzIGluZGlzcGVuc2FibGUuCiAg
ICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIAotICAgIGlmIChPcHRpb25zOjpj
YWxsU3RhdHVzU2hvdWxkVXNlQ2FsbEVkZ2VQcm9maWxlKCkpIHsKLSAgICAgICAgLy8gQWx3YXlz
IHRydXN0IHRoZSBjYWxsIGVkZ2UgcHJvZmlsZSBvdmVyIGFueXRoaW5nIGVsc2Ugc2luY2UgdGhp
cyBoYXMgcHJlY2lzZSBjb3VudHMuCi0gICAgICAgIC8vIEl0IGNhbiBtYWtlIHRoZSBiZXN0IHBv
c3NpYmxlIGRlY2lzaW9uIGJlY2F1c2UgaXQgbmV2ZXIgImZvcmdldHMiIHdoYXQgaGFwcGVuZWQg
Zm9yIGFueQotICAgICAgICAvLyBjYWxsLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgZmFkaW5nIG91
dCB0aGUgY291bnRzIG9mIG9sZCBjYWxscyAoZm9yIGV4YW1wbGUgaWYgdGhlCi0gICAgICAgIC8v
IGNvdW50ZXIgdHlwZSBpcyAxNi1iaXQgdGhlbiBjYWxscyB0aGF0IGhhcHBlbmVkIG1vcmUgdGhh
biAyXjE2IGNhbGxzIGFnbyBhcmUgZ2l2ZW4gaGFsZgotICAgICAgICAvLyB3ZWlnaHQsIGFuZCB0
aGlzIGNvbXBvdW5kcyBmb3IgZXZlcnkgMl4xNSBbc2ljXSBjYWxscyBhZnRlciB0aGF0KS4gVGhl
IGNvbWJpbmF0aW9uIG9mCi0gICAgICAgIC8vIGhpZ2ggZmlkZWxpdHkgZm9yIHJlY2VudCBjYWxs
cyBhbmQgZmFkaW5nIGZvciBvbGRlciBjYWxscyBtYWtlcyB0aGlzIHRoZSBtb3N0IHVzZWZ1bAot
ICAgICAgICAvLyBtZWNoYW1pc20gb2YgY2hvb3NpbmcgaG93IHRvIG9wdGltaXplIGZ1dHVyZSBj
YWxscy4KLSAgICAgICAgQ2FsbEVkZ2VQcm9maWxlKiBlZGdlUHJvZmlsZSA9IGNhbGxMaW5rSW5m
by5jYWxsRWRnZVByb2ZpbGUuZ2V0KCk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwot
ICAgICAgICBpZiAoZWRnZVByb2ZpbGUpIHsKLSAgICAgICAgICAgIENhbGxMaW5rU3RhdHVzIHJl
c3VsdCA9IGNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKGVkZ2VQcm9maWxlKTsKLSAgICAgICAg
ICAgIGlmICghIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICB9Ci0gICAgfQotICAgIAogICAgIHJldHVybiBjb21wdXRlRnJvbUNhbGxMaW5rSW5mbyhsb2Nr
ZXIsIGNhbGxMaW5rSW5mbyk7CiB9CiAKQEAgLTE2NSwxMiArMTQ4LDY4IEBAIENhbGxMaW5rU3Rh
dHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnIKICAgICAvLyB0aGF0IGlzIHN0aWxsIG1hcmdp
bmFsbHkgdmFsaWQgKGkuZS4gdGhlIHBvaW50ZXJzIGFpbid0IHN0YWxlKS4gVGhpcyBraW5kIG9m
IHJhY2luZXNzCiAgICAgLy8gaXMgcHJvYmFibHkgT0sgZm9yIG5vdy4KICAgICAKKyAgICAvLyBQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSBpcyBhIEdDQXdhcmVKSVRTdHViUm91dGluZSwgc28g
aWYgbm9uLW51bGwsIGl0IHdpbGwgc3RheSBhbGl2ZQorICAgIC8vIHVudGlsIG5leHQgR0MgZXZl
biBpZiB0aGUgQ2FsbExpbmtJbmZvIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkLiBBbHNvLCB0aGUg
dmFyaWFudHMgbGlzdCBpcworICAgIC8vIG5ldmVyIG11dGF0ZWQgYWZ0ZXIgdGhlIFBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lIGlzIGluc3RhbnRpYXRlZC4gV2UgaGF2ZSBzb21lIGNvbnNlcnZh
dGl2ZQorICAgIC8vIGZlbmNpbmcgaW4gcGxhY2UgdG8gbWFrZSBzdXJlIHRoYXQgd2Ugc2VlIHRo
ZSB2YXJpYW50cyBsaXN0IGFmdGVyIGNvbnN0cnVjdGlvbi4KKyAgICBpZiAoUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8uc3R1Yi5nZXQoKSkgeworICAgICAg
ICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgCisgICAgICAgIENhbGxFZGdlTGlzdCBl
ZGdlcyA9IHN0dWItPmVkZ2VzKCk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgdGhhdCB3ZSd2
ZSBsb2FkZWQgdGhlIGVkZ2VzIGxpc3QsIHRoZXJlIGFyZSBubyBmdXJ0aGVyIGNvbmN1cnJlbmN5
IGNvbmNlcm5zLiBXZSB3aWxsCisgICAgICAgIC8vIGp1c3QgbWFuaXB1bGF0ZSBhbmQgcHJ1bmUg
dGhpcyBsaXN0IHRvIG91ciBsaWtpbmcgLSBtb3N0bHkgcmVtb3ZpbmcgZW50cmllcyB0aGF0IGFy
ZSB0b28KKyAgICAgICAgLy8gaW5mcmVxdWVudCBhbmQgZW5zdXJpbmcgdGhhdCBpdCdzIHNvcnRl
ZCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIGZyZXF1ZW5jeS4KKyAgICAgICAgCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGVkZ2VzLnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQo
CisgICAgICAgICAgICBlZGdlcy5iZWdpbigpLCBlZGdlcy5lbmQoKSwKKyAgICAgICAgICAgIFtd
IChDYWxsRWRnZSBhLCBDYWxsRWRnZSBiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGEuY291
bnQoKSA+IGIuY291bnQoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChlZGdlcy5maXJzdCgpLmNvdW50KCkgPj0gZWRnZXMubGFzdCgpLmNvdW50KCkpOworICAgICAg
ICAKKyAgICAgICAgZG91YmxlIHRvdGFsQ2FsbHNUb0tub3duID0gMDsKKyAgICAgICAgZG91Ymxl
IHRvdGFsQ2FsbHNUb1Vua25vd24gPSBjYWxsTGlua0luZm8uc2xvd1BhdGhDb3VudDsKKyAgICAg
ICAgQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBDYWxsRWRnZSBlZGdlID0gZWRn
ZXNbaV07CisgICAgICAgICAgICAvLyBJZiB0aGUgY2FsbCBpcyBhdCB0aGUgdGFpbCBvZiB0aGUg
ZGlzdHJpYnV0aW9uLCB0aGVuIHdlIGRvbid0IG9wdGltaXplIGl0IGFuZCB3ZQorICAgICAgICAg
ICAgLy8gdHJlYXQgaXQgYXMgaWYgaXQgd2FzIGEgY2FsbCB0byBzb21ldGhpbmcgdW5rbm93bi4g
V2UgZGVmaW5lIHRoZSB0YWlsIGFzIGJlaW5nIGVpdGhlcgorICAgICAgICAgICAgLy8gYSBjYWxs
IHRoYXQgZG9lc24ndCBiZWxvbmcgdG8gdGhlIE4gbW9zdCBmcmVxdWVudCBjYWxsZWVzIChOID0K
KyAgICAgICAgICAgIC8vIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRzRm9ySW5saW5pbmcpIG9y
IHRoYXQgaGFzIGEgdG90YWwgY2FsbCBjb3VudCB0aGF0IGlzIHRvbworICAgICAgICAgICAgLy8g
c21hbGwuCisgICAgICAgICAgICBpZiAoaSA+PSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxW
YXJpYW50c0ZvcklubGluaW5nKCkKKyAgICAgICAgICAgICAgICB8fCBlZGdlLmNvdW50KCkgPCBP
cHRpb25zOjpmcmVxdWVudENhbGxUaHJlc2hvbGQoKSkKKyAgICAgICAgICAgICAgICB0b3RhbENh
bGxzVG9Vbmtub3duICs9IGVkZ2UuY291bnQoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHRvdGFsQ2FsbHNUb0tub3duICs9IGVkZ2UuY291bnQoKTsKKyAgICAgICAgICAg
ICAgICB2YXJpYW50cy5hcHBlbmQoZWRnZS5jYWxsZWUoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEJhaWwgaWYgd2UgZGlkbid0IGZpbmQgYW55IGNh
bGxzIHRoYXQgcXVhbGlmaWVkLgorICAgICAgICBSRUxFQVNFX0FTU0VSVCghIXRvdGFsQ2FsbHNU
b0tub3duID09ICEhdmFyaWFudHMuc2l6ZSgpKTsKKyAgICAgICAgaWYgKHZhcmlhbnRzLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CisgICAgICAgIAorICAg
ICAgICAvLyBXZSByZXF1aXJlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiBjYWxsZWVzIGlzIHNr
ZXdlZCB0b3dhcmRzIGEgaGFuZGZ1bCBvZiBjb21tb24gb25lcy4KKyAgICAgICAgaWYgKHRvdGFs
Q2FsbHNUb0tub3duIC8gdG90YWxDYWxsc1RvVW5rbm93biA8IE9wdGlvbnM6Om1pbmltdW1DYWxs
VG9Lbm93blJhdGUoKSkKKyAgICAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CisgICAg
ICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVCh0b3RhbENhbGxzVG9Lbm93bik7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHZhcmlhbnRzLnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBDYWxs
TGlua1N0YXR1cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhcmlhbnRzID0gdmFyaWFudHM7
CisgICAgICAgIHJlc3VsdC5tX2NvdWxkVGFrZVNsb3dQYXRoID0gISF0b3RhbENhbGxzVG9Vbmtu
b3duOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICBpZiAoY2FsbExp
bmtJbmZvLnNsb3dQYXRoQ291bnQgPj0gT3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVt
Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAgICAKLSAgICBpZiAo
Q2xvc3VyZUNhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViLmdldCgpKQot
ICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoc3R1Yi0+ZXhlY3V0YWJsZSgpKTsKLSAgICAK
ICAgICBKU0Z1bmN0aW9uKiB0YXJnZXQgPSBjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUuZ2V0
KCk7CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CkBA
IC0xODEsMzQgKzIyMCw2IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
RnIKICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXModGFyZ2V0KTsKIH0KIAotQ2FsbExpbmtTdGF0
dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKENhbGxFZGdlUHJv
ZmlsZSogZWRnZVByb2ZpbGUpCi17Ci0gICAgLy8gSW4gY2FzZXMgd2hlcmUgdGhlIGNhbGwgZWRn
ZSBwcm9maWxlIHNhdyBub3RoaW5nLCB1c2UgdGhlIENhbGxMaW5rSW5mbyBpbnN0ZWFkLgotICAg
IGlmICghZWRnZVByb2ZpbGUtPnRvdGFsQ2FsbHMoKSkKLSAgICAgICAgcmV0dXJuIENhbGxMaW5r
U3RhdHVzKCk7Ci0gICAgCi0gICAgLy8gVG8gZG8gYW55dGhpbmcgbWVhbmluZ2Z1bCwgd2UgcmVx
dWlyZSB0aGF0IHRoZSBtYWpvcml0eSBvZiBjYWxscyBhcmUgdG8gc29tZXRoaW5nIHdlCi0gICAg
Ly8ga25vdyBob3cgdG8gaGFuZGxlLgotICAgIHVuc2lnbmVkIG51bUNhbGxzVG9Lbm93biA9IGVk
Z2VQcm9maWxlLT5udW1DYWxsc1RvS25vd25DZWxscygpOwotICAgIHVuc2lnbmVkIG51bUNhbGxz
VG9Vbmtub3duID0gZWRnZVByb2ZpbGUtPm51bUNhbGxzVG9Ob3RDZWxsKCkgKyBlZGdlUHJvZmls
ZS0+bnVtQ2FsbHNUb1Vua25vd25DZWxsKCk7Ci0gICAgCi0gICAgLy8gV2UgcmVxdWlyZSB0aGF0
IHRoZSBtYWpvcml0eSBvZiBjYWxscyB3ZXJlIHRvIHNvbWV0aGluZyB0aGF0IHdlIGNvdWxkIHBv
c3NpYmx5IGlubGluZS4KLSAgICBpZiAobnVtQ2FsbHNUb0tub3duIDw9IG51bUNhbGxzVG9Vbmtu
b3duKQotICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwotICAgIAotICAgIC8vIFdlIHJl
cXVpcmUgdGhhdCB0aGUgbnVtYmVyIG9mIHN1Y2ggY2FsbHMgaXMgZ3JlYXRlciB0aGFuIHNvbWUg
bWluaW1hbCB0aHJlc2hvbGQsIHNvIHRoYXQgd2UKLSAgICAvLyBhdm9pZCBpbmxpbmluZyBjb21w
bGV0ZWx5IGNvbGQgY2FsbHMuCi0gICAgaWYgKG51bUNhbGxzVG9Lbm93biA8IE9wdGlvbnM6OmZy
ZXF1ZW50Q2FsbFRocmVzaG9sZCgpKQotICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwot
ICAgIAotICAgIENhbGxMaW5rU3RhdHVzIHJlc3VsdDsKLSAgICByZXN1bHQubV9lZGdlcyA9IGVk
Z2VQcm9maWxlLT5jYWxsRWRnZXMoKTsKLSAgICByZXN1bHQubV9jb3VsZFRha2VTbG93UGF0aCA9
ICEhbnVtQ2FsbHNUb1Vua25vd247Ci0gICAgcmVzdWx0Lm1fY2FuVHJ1c3RDb3VudHMgPSB0cnVl
OwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIENhbGxMaW5rU3RhdHVzIENhbGxMaW5r
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgIGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tl
ciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywK
ICAgICBFeGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRhKQpAQCAtMjgyLDggKzI5Myw4IEBAIENhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm8KIAogYm9vbCBDYWxsTGlua1N0YXR1
czo6aXNDbG9zdXJlQ2FsbCgpIGNvbnN0CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9lZGdl
cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKG1fZWRnZXNbaV0uY2FsbGVlKCkuaXNDbG9z
dXJlQ2FsbCgpKQorICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLmlzQ2xvc3VyZUNhbGwoKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTEsMTggKzMw
Miw3IEBAIGJvb2wgQ2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwoKSBjb24KIAogdm9pZCBD
YWxsTGlua1N0YXR1czo6bWFrZUNsb3N1cmVDYWxsKCkKIHsKLSAgICBBU1NFUlQoIW1faXNQcm92
ZWQpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fZWRnZXMuc2l6ZSgpOyBpLS07KQotICAgICAg
ICBtX2VkZ2VzW2ldID0gbV9lZGdlc1tpXS5kZXNwZWNpZmllZENsb3N1cmUoKTsKLSAgICAKLSAg
ICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAvLyBEb2luZyB0aGlzIHNob3VsZCBu
b3QgaGF2ZSBjcmVhdGVkIGR1cGxpY2F0ZXMsIGJlY2F1c2UgdGhlIENhbGxFZGdlUHJvZmlsZQot
ICAgICAgICAvLyBzaG91bGQgZGVzcGVjaWZ5IGNsb3N1cmVzIGlmIGRvaW5nIHNvIHdvdWxkIHJl
ZHVjZSB0aGUgbnVtYmVyIG9mIGtub3duIGNhbGxlZXMuCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2VkZ2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSBpICsgMTsgaiA8IG1fZWRnZXMuc2l6ZSgpOyArK2opCi0gICAgICAgICAgICAgICAg
QVNTRVJUKG1fZWRnZXNbaV0uY2FsbGVlKCkgIT0gbV9lZGdlc1tqXS5jYWxsZWUoKSk7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgbV92YXJpYW50cyA9IGRlc3BlY2lmaWVkVmFyaWFudExpc3QobV92
YXJpYW50cyk7CiB9CiAKIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKQEAgLTMyMCw3ICszMjAsOCBAQCB2b2lkIENhbGxMaW5rU3RhdHVzOjpkdW1wKFBy
aW50U3RyZWFtJiBvCiAgICAgaWYgKG1fY291bGRUYWtlU2xvd1BhdGgpCiAgICAgICAgIG91dC5w
cmludChjb21tYSwgIkNvdWxkIFRha2UgU2xvdyBQYXRoIik7CiAgICAgCi0gICAgb3V0LnByaW50
KGxpc3REdW1wKG1fZWRnZXMpKTsKKyAgICBpZiAoIW1fdmFyaWFudHMuaXNFbXB0eSgpKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1wKG1fdmFyaWFudHMpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjcsNiArMjcsNyBAQAogI2RlZmluZSBDYWxsTGlua1N0YXR1c19oCiAKICNpbmNsdWRlICJDYWxs
TGlua0luZm8uaCIKKyNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgogI2luY2x1ZGUgIkNvZGVPcmln
aW4uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiQ29u
Y3VycmVudEpJVExvY2suaCIKQEAgLTQ4LDcgKzQ5LDYgQEAgcHVibGljOgogICAgIENhbGxMaW5r
U3RhdHVzKCkKICAgICAgICAgOiBtX2NvdWxkVGFrZVNsb3dQYXRoKGZhbHNlKQogICAgICAgICAs
IG1faXNQcm92ZWQoZmFsc2UpCi0gICAgICAgICwgbV9jYW5UcnVzdENvdW50cyhmYWxzZSkKICAg
ICB7CiAgICAgfQogICAgIApAQCAtNjIsMTAgKzYyLDkgQEAgcHVibGljOgogICAgIGV4cGxpY2l0
IENhbGxMaW5rU3RhdHVzKEpTVmFsdWUpOwogICAgIAogICAgIENhbGxMaW5rU3RhdHVzKENhbGxW
YXJpYW50IHZhcmlhbnQpCi0gICAgICAgIDogbV9lZGdlcygxLCBDYWxsRWRnZSh2YXJpYW50LCAx
KSkKKyAgICAgICAgOiBtX3ZhcmlhbnRzKDEsIHZhcmlhbnQpCiAgICAgICAgICwgbV9jb3VsZFRh
a2VTbG93UGF0aChmYWxzZSkKICAgICAgICAgLCBtX2lzUHJvdmVkKGZhbHNlKQotICAgICAgICAs
IG1fY2FuVHJ1c3RDb3VudHMoZmFsc2UpCiAgICAgewogICAgIH0KICAgICAKQEAgLTEwOSwxOSAr
MTA4LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcigK
ICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiwg
Y29uc3QgQ29udGV4dE1hcCYpOwogICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVy
biAhbV9lZGdlcy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQorICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRh
a2VTbG93UGF0aDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
IWlzU2V0KCk7IH0KICAgICAKICAgICBib29sIGNvdWxkVGFrZVNsb3dQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb3VsZFRha2VTbG93UGF0aDsgfQogICAgIAotICAgIENhbGxFZGdlTGlzdCBlZGdl
cygpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZXM7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9lZGdlcy5zaXplKCk7IH0KLSAgICBDYWxsRWRnZSBhdCh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiBtX2VkZ2VzW2ldOyB9Ci0gICAgQ2FsbEVkZ2Ugb3BlcmF0b3JbXSh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorICAgIENhbGxWYXJpYW50TGlzdCB2YXJp
YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBDYWxsVmFyaWFudCBhdCh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2ldOyB9CisgICAgQ2FsbFZhcmlh
bnQgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogICAgIGJv
b2wgaXNQcm92ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUHJvdmVkOyB9Ci0gICAgYm9vbCBjYW5P
cHRpbWl6ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2VkZ2VzLmlzRW1wdHkoKTsgfQotICAgIGJvb2wg
Y2FuVHJ1c3RDb3VudHMoKSBjb25zdCB7IHJldHVybiBtX2NhblRydXN0Q291bnRzOyB9CisgICAg
Ym9vbCBjYW5PcHRpbWl6ZSgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhcmlhbnRzLmlzRW1wdHkoKTsg
fQogICAgIAogICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCgpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUg
aWYgYW55IGNhbGxlZSBpcyBhIGNsb3N1cmUgY2FsbC4KICAgICAKQEAgLTEzMiwxNSArMTMwLDEz
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9t
TExJbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwogI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIENhbGxMaW5rU3RhdHVz
IGNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKENhbGxFZGdlUHJvZmlsZSopOwogICAgIHN0YXRp
YyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygKICAgICAgICAgY29uc3Qg
Q29uY3VycmVudEpJVExvY2tlciYsIENhbGxMaW5rSW5mbyYpOwogI2VuZGlmCiAgICAgCi0gICAg
Q2FsbEVkZ2VMaXN0IG1fZWRnZXM7CisgICAgQ2FsbFZhcmlhbnRMaXN0IG1fdmFyaWFudHM7CiAg
ICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAgIGJvb2wgbV9pc1Byb3ZlZDsKLSAgICBi
b29sIG1fY2FuVHJ1c3RDb3VudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmNwcAkocmV2aXNp
b24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNSArNTAsMzQgQEAgdm9pZCBDYWxsVmFyaWFudDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KQogICAgIG91dC5wcmludCgiRXhlY3V0YWJsZTogIiwgKmV4ZWN1
dGFibGUoKSk7CiB9CiAKK0NhbGxWYXJpYW50TGlzdCB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGNv
bnN0IENhbGxWYXJpYW50TGlzdCYgbGlzdCwgQ2FsbFZhcmlhbnQgdmFyaWFudFRvQWRkKQorewor
ICAgIEFTU0VSVCh2YXJpYW50VG9BZGQpOworICAgIENhbGxWYXJpYW50TGlzdCByZXN1bHQ7Cisg
ICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgeworICAgICAgICBBU1NFUlQodmFy
aWFudCk7CisgICAgICAgIGlmICghIXZhcmlhbnRUb0FkZCkgeworICAgICAgICAgICAgaWYgKHZh
cmlhbnQgPT0gdmFyaWFudFRvQWRkKQorICAgICAgICAgICAgICAgIHZhcmlhbnRUb0FkZCA9IENh
bGxWYXJpYW50KCk7CisgICAgICAgICAgICBlbHNlIGlmICh2YXJpYW50LmRlc3BlY2lmaWVkQ2xv
c3VyZSgpID09IHZhcmlhbnRUb0FkZC5kZXNwZWNpZmllZENsb3N1cmUoKSkgeworICAgICAgICAg
ICAgICAgIHZhcmlhbnQgPSB2YXJpYW50LmRlc3BlY2lmaWVkQ2xvc3VyZSgpOworICAgICAgICAg
ICAgICAgIHZhcmlhbnRUb0FkZCA9IENhbGxWYXJpYW50KCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmVzdWx0LmFwcGVuZCh2YXJpYW50KTsKKyAgICB9CisgICAgaWYgKCEh
dmFyaWFudFRvQWRkKQorICAgICAgICByZXN1bHQuYXBwZW5kKHZhcmlhbnRUb0FkZCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworQ2FsbFZhcmlhbnRMaXN0IGRlc3BlY2lmaWVkVmFyaWFudExp
c3QoY29uc3QgQ2FsbFZhcmlhbnRMaXN0JiBsaXN0KQoreworICAgIENhbGxWYXJpYW50TGlzdCBy
ZXN1bHQ7CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkKKyAgICAgICAgcmVz
dWx0ID0gdmFyaWFudExpc3RXaXRoVmFyaWFudChyZXN1bHQsIHZhcmlhbnQuZGVzcGVjaWZpZWRD
bG9zdXJlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuaAko
cmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDExICs1Niw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
Ly8gICAgIHRoYW4gdGhlIGZhY3QgdGhhdCB0aGV5IGRvbid0IGZhbGwgaW50byBhbnkgb2YgdGhl
IGFib3ZlIGNhdGVnb3JpZXMuCiAvLwogLy8gVGhpcyBjbGFzcyBzZXJ2ZXMgYXMgYSBraW5kIG9m
IHVuaW9uIG92ZXIgdGhlc2UgZm91ciB0aGluZ3MuIEl0IGRvZXMgc28gYnkganVzdCBob2xkaW5n
IGEKLS8vIEpTQ2VsbCouIFdlIGRldGVybWluZSB3aGljaCBvZiB0aGUgbW9kZXMgaXRzIGluIGJ5
IGRvaW5nIHR5cGUgY2hlY2tzIG9uIHRoZSBjZWxsLiBOb3RlIHRoYXQgdGhlcmUKLS8vIGlzIG5v
IGxpZmVjeWNsZSBtYW5hZ2VtZW50IGZvciB0aGUgY2VsbCBiZWNhdXNlIHRoaXMgY2xhc3MgaXMg
YWx3YXlzIHVzZWQgaW4gY29udGV4dHMgd2hlcmUgd2UKLS8vIGVpdGhlciBkbyBjdXN0b20gd2Vh
ayByZWZlcmVuY2UgbG9naWMgb3ZlciBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyAoc2VlIENhbGxF
ZGdlUHJvZmlsZSksIG9yIHdlCi0vLyBhcmUgaW5zaWRlIHRoZSBjb21waWxlciBhbmQgd2UgYXNz
dW1lIHRoYXQgdGhlIGNvbXBpbGVyIHJ1bnMgaW4gYmV0d2VlbiBjb2xsZWN0aW9ucyBhbmQgc28g
Y2FuCi0vLyB0b3VjaCB0aGUgaGVhcCB3aXRob3V0IG5vdGlmeWluZyBhbnlvbmUuCisvLyBKU0Nl
bGwqLiBXZSBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlIG1vZGVzIGl0cyBpbiBieSBkb2luZyB0eXBl
IGNoZWNrcyBvbiB0aGUgY2VsbC4gTm90ZSB0aGF0IHdlCisvLyBjYW5ub3QgdXNlIFdyaXRlQmFy
cmllcjw+IGhlcmUgYmVjYXVzZSB0aGlzIGdldHMgdXNlZCBpbnNpZGUgdGhlIGNvbXBpbGVyLgog
CiBjbGFzcyBDYWxsVmFyaWFudCB7CiBwdWJsaWM6CkBAIC0xODEsNiArMTc4LDEzIEBAIHN0cnVj
dCBDYWxsVmFyaWFudEhhc2ggewogCiB0eXBlZGVmIFZlY3RvcjxDYWxsVmFyaWFudCwgMT4gQ2Fs
bFZhcmlhbnRMaXN0OwogCisvLyBSZXR1cm5zIGEgbmV3IHZhcmlhbnQgbGlzdCBieSBhdHRlbXB0
aW5nIHRvIGVpdGhlciBhcHBlbmQgdGhlIGdpdmVuIHZhcmlhbnQgb3IgbWVyZ2UgaXQgd2l0aCBv
bmUKKy8vIG9mIHRoZSB2YXJpYW50cyB3ZSBhbHJlYWR5IGhhdmUgYnkgZGVzcGVjaWZ5aW5nIGNs
b3N1cmVzLgorQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQoY29uc3QgQ2Fs
bFZhcmlhbnRMaXN0JiwgQ2FsbFZhcmlhbnQpOworCisvLyBSZXR1cm5zIGEgbmV3IGxpc3Qgd2hl
cmUgZXZlcnkgZWxlbWVudCBpcyBkZXNwZWNpZmllZCwgYW5kIHRoZSBsaXN0IGlzIGRlZHVwbGlj
YXRlZC4KK0NhbGxWYXJpYW50TGlzdCBkZXNwZWNpZmllZFZhcmlhbnRMaXN0KGNvbnN0IENhbGxW
YXJpYW50TGlzdCYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwLCAyMDEyLTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24g
WndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIx
ODEsNiArMjE4MSw4IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAgLy8gZGVzdHJ1Y3Rv
ciB3aWxsIHRyeSB0byByZW1vdmUgbm9kZXMgZnJvbSBvdXIgKG5vIGxvbmdlciB2YWxpZCkgbGlu
a2VkIGxpc3QuCiAgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21p
bmdDYWxscy5lbmQoKSkKICAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnJlbW92ZSgp
OworICAgIHdoaWxlIChtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IG1faW5j
b21pbmdQb2x5bW9ycGhpY0NhbGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5nUG9seW1vcnBo
aWNDYWxscy5iZWdpbigpLT5yZW1vdmUoKTsKICAgICAKICAgICAvLyBOb3RlIHRoYXQgb3VyIG91
dGdvaW5nIGNhbGxzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3MnCiAgICAg
Ly8gbV9pbmNvbWluZ0NhbGxzIGxpbmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRpb24gb2Yg
dGhlIH5DYWxsTGlua0luZm8KQEAgLTMwNDcsNiArMzA0OSwxMiBAQCB2b2lkIENvZGVCbG9jazo6
bGlua0luY29taW5nQ2FsbChFeGVjU3RhCiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZy
YW1lKTsKICAgICBtX2luY29taW5nQ2FsbHMucHVzaChpbmNvbWluZyk7CiB9CisKK3ZvaWQgQ29k
ZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFt
ZSwgUG9seW1vcnBoaWNDYWxsTm9kZSogaW5jb21pbmcpCit7CisgICAgbm90aWNlSW5jb21pbmdD
YWxsKGNhbGxlckZyYW1lKTsKKyAgICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5wdXNoKGlu
Y29taW5nKTsKK30KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB2b2lkIENvZGVCbG9jazo6dW5s
aW5rSW5jb21pbmdDYWxscygpCkBAIC0zMDU0LDExICszMDYyLDEzIEBAIHZvaWQgQ29kZUJsb2Nr
Ojp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKICAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50Q2FsbHMu
YmVnaW4oKSAhPSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKICAgICAgICAgbV9pbmNvbWlu
Z0xMSW50Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAo
bV9pbmNvbWluZ0NhbGxzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9pbmNvbWluZ0NhbGxzLmlzRW1w
dHkoKSAmJiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIodGhpcyk7CiAgICAgd2hpbGUg
KG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkKICAgICAg
ICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluayhyZXBhdGNoQnVmZmVyKTsKKyAgICB3
aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nUG9s
eW1vcnBoaWNDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMu
YmVnaW4oKS0+dW5saW5rKHJlcGF0Y2hCdWZmZXIpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9
CiAKQEAgLTMyNTIsMTIgKzMyNjIsMTkgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29taW5n
Q2FsbChFeGVjUwogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUt
PmNvZGVCbG9jaygpOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkK
LSAgICAgICAgZGF0YUxvZygiTm90aWNpbmcgY2FsbCBsaW5rIGZyb20gIiwgKmNhbGxlckNvZGVC
bG9jaywgIiB0byAiLCAqdGhpcywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIk5vdGljaW5nIGNh
bGwgbGluayBmcm9tICIsIHBvaW50ZXJEdW1wKGNhbGxlckNvZGVCbG9jayksICIgdG8gIiwgKnRo
aXMsICJcbiIpOwogICAgIAorI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmICghbV9zaG91bGRB
bHdheXNCZUlubGluZWQpCiAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIWNhbGxlckNv
ZGVCbG9jaykgeworICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAg
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCisgICAgICAgICAgICBkYXRhTG9n
KCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBuYXRpdmUuXG4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmICghaGFzQmFz
ZWxpbmVKSVRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMjg1LDYgKzMzMDIs
MTMgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29taW5nQ2FsbChFeGVjUwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAorICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2Fs
bGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkID0gZmFsc2U7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkKKyAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJjYXVzZSBjYWxsZXIgd2FzIGFs
cmVhZHkgb3B0aW1pemVkLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAg
aWYgKGNhbGxlckNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUpIHsKICAgICAg
ICAgLy8gSWYgdGhlIGNhbGxlciBpcyBlaXRoZXIgZXZhbCBvciBnbG9iYWwgY29kZSwgYXNzdW1l
IHRoYXQgdGhhdCB3b24ndCBiZQogICAgICAgICAvLyBvcHRpbWl6ZWQgYW55dGltZSBzb29uLiBG
b3IgZXZhbCBjb2RlIHRoaXMgaXMgcGFydGljdWxhcmx5IHRydWUgc2luY2Ugd2UKQEAgLTMzMDUs
OCArMzMyOSwxMSBAQCB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKEV4ZWNTCiAg
ICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChjYWxsZXJDb2RlQmxvY2stPm1fY2FwYWJpbGl0
eUxldmVsU3RhdGUgIT0gREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpOworICAgIAorICAgIGlm
IChjYWxsZXJDb2RlQmxvY2stPm1fY2FwYWJpbGl0eUxldmVsU3RhdGUgPT0gREZHOjpDYXBhYmls
aXR5TGV2ZWxOb3RTZXQpIHsKKyAgICAgICAgZGF0YUxvZygiSW4gY2FsbCBmcm9tICIsICpjYWxs
ZXJDb2RlQmxvY2ssICIgIiwgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSwgIiB0byAiLCAqdGhp
cywgIjogY2FsbGVyJ3MgREZHIGNhcGFiaWxpdHkgbGV2ZWwgaXMgbm90IHNldC5cbiIpOworICAg
ICAgICBDUkFTSCgpOworICAgIH0KICAgICAKICAgICBpZiAoY2FuQ29tcGlsZShjYWxsZXJDb2Rl
QmxvY2stPm1fY2FwYWJpbGl0eUxldmVsU3RhdGUpKQogICAgICAgICByZXR1cm47CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNzky
NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyOSwxMSArMjI5LDcgQEAgcHVibGljOgogICAgIHZvaWQgdW5saW5rQ2Fs
bHMoKTsKICAgICAgICAgCiAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2Fs
bGVyRnJhbWUsIENhbGxMaW5rSW5mbyopOwotICAgICAgICAKLSAgICBib29sIGlzSW5jb21pbmdD
YWxsQWxyZWFkeUxpbmtlZChDYWxsTGlua0luZm8qIGluY29taW5nKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1faW5jb21pbmdDYWxscy5pc09uTGlzdChpbmNvbWluZyk7Ci0gICAgfQorICAgIHZv
aWQgbGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIFBv
bHltb3JwaGljQ2FsbE5vZGUqKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAgICAgdm9pZCBs
aW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZv
Kik7CkBAIC0xMDc3LDYgKzEwNzMsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxCeVZhbEluZm8+
IG1fYnlWYWxJbmZvczsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAg
ICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8
Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQ
b2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxO
b2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+IG1faml0Q29kZU1hcDsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk2OCwxNCArMTk2OCw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAg
ICAgICBicmVhazsKIAotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgIGNhc2UgUHJvZmlsZWRD
b25zdHJ1Y3Q6Ci0gICAgICAgIGlmIChmb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCkpLm1fdmFsdWUpCi0gICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUp
OwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGlt
aXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgIGJyZWFr
OwotCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2FzZSBDaGVja0JhZENlbGw6CiAgICAg
ICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAgLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3NSw3ICs2NzUsNyBAQCBwcml2YXRlOgogICAgICAg
ICBpZiAocGFyYW1ldGVyU2xvdHMgPiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAgICAgICAgbV9w
YXJhbWV0ZXJTbG90cyA9IHBhcmFtZXRlclNsb3RzOwogCi0gICAgICAgIGludCBkdW1teVRoaXNB
cmd1bWVudCA9IG9wID09IENhbGwgfHwgb3AgPT0gTmF0aXZlQ2FsbCB8fCBvcCA9PSBQcm9maWxl
ZENhbGwgPyAwIDogMTsKKyAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gb3AgPT0gQ2Fs
bCB8fCBvcCA9PSBOYXRpdmVDYWxsID8gMCA6IDE7CiAgICAgICAgIGZvciAoaW50IGkgPSAwICsg
ZHVtbXlUaGlzQXJndW1lbnQ7IGkgPCBhcmdDb3VudDsgKytpKQogICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0
KSkpOwogCkBAIC0xMDQ0LDE3ICsxMDQ0LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
Q2FsbCgKICAgICBpZiAoY2FsbFRhcmdldC0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAgY2FsbExp
bmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cyhjYWxsVGFyZ2V0LT5hc0pTVmFsdWUoKSkuc2V0SXNQ
cm92ZWQodHJ1ZSk7CiAgICAgCi0gICAgaWYgKCghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUo
KSB8fCBjYWxsTGlua1N0YXR1cy5zaXplKCkgIT0gMSkKLSAgICAgICAgJiYgIWlzRlRMKG1fZ3Jh
cGgubV9wbGFuLm1vZGUpICYmIE9wdGlvbnM6OnVzZUZUTEpJVCgpCi0gICAgICAgICYmIElubGlu
ZUNhbGxGcmFtZTo6aXNOb3JtYWxDYWxsKGtpbmQpCi0gICAgICAgICYmIENhbGxFZGdlTG9nOjpp
c0VuYWJsZWQoKQotICAgICAgICAmJiBPcHRpb25zOjpkZmdEb2VzQ2FsbEVkZ2VQcm9maWxpbmco
KSkgewotICAgICAgICBBU1NFUlQob3AgPT0gQ2FsbCB8fCBvcCA9PSBDb25zdHJ1Y3QpOwotICAg
ICAgICBpZiAob3AgPT0gQ2FsbCkKLSAgICAgICAgICAgIG9wID0gUHJvZmlsZWRDYWxsOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBvcCA9IFByb2ZpbGVkQ29uc3RydWN0OwotICAgIH0KKyAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQorICAgICAgICBkYXRh
TG9nKCIgICAgSGFuZGxpbmcgY2FsbCBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiOiAiLCBj
YWxsTGlua1N0YXR1cywgIlxuIik7CiAgICAgCiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jYW5P
cHRpbWl6ZSgpKSB7CiAgICAgICAgIC8vIE9kZGx5LCB0aGlzIGNvbmZsYXRlcyBjYWxscyB0aGF0
IGhhdmVuJ3QgZXhlY3V0ZWQgd2l0aCBjYWxscyB0aGF0IGJlaGF2ZWQgc3VmZmljaWVudGx5IHBv
bHltb3JwaGljYWxseQpAQCAtMTA3NiwxNyArMTA2NywxNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVDYWxsKAogICAgIAogI2lmIEVOQUJMRShGVExfTkFUSVZFX0NBTExfSU5MSU5JTkcp
CiAgICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpICYmIE9wdGlvbnM6Om9wdGltaXpl
TmF0aXZlQ2FsbHMoKSAmJiBjYWxsTGlua1N0YXR1cy5zaXplKCkgPT0gMSAmJiAhY2FsbExpbmtT
dGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKSkgewotICAgICAgICBDYWxsVmFyaWFudCBjYWxsZWUg
PSBjYWxsTGlua1N0YXR1c1swXS5jYWxsZWUoKTsKKyAgICAgICAgQ2FsbFZhcmlhbnQgY2FsbGVl
ID0gY2FsbExpbmtTdGF0dXNbMF07CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gY2Fs
bGVlLmZ1bmN0aW9uKCk7CiAgICAgICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6
YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7
CiAgICAgICAgIGlmIChmdW5jdGlvbiAmJiBmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkgewog
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxlZSwgY2FsbFRhcmdldCwgcmVnaXN0
ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAgICBjYWxsT3BJbmZvID0g
T3BJbmZvKG1fZ3JhcGguZnJlZXplKGZ1bmN0aW9uKSk7CiAKLSAgICAgICAgICAgIGlmIChvcCA9
PSBDYWxsIHx8IG9wID09IFByb2ZpbGVkQ2FsbCkKKyAgICAgICAgICAgIGlmIChvcCA9PSBDYWxs
KQogICAgICAgICAgICAgICAgIG9wID0gTmF0aXZlQ2FsbDsKICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9PSBDb25zdHJ1Y3QgfHwgb3AgPT0gUHJvZmlsZWRD
b25zdHJ1Y3QpOworICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9PSBDb25zdHJ1Y3QpOwogICAg
ICAgICAgICAgICAgIG9wID0gTmF0aXZlQ29uc3RydWN0OwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0xNDI2LDEzICsxNDE3LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKE5vZGUKICAgICAvLyB0aGlzIGluIGNhc2VzIHdoZXJlIHdlIGRvbid0IG5lZWQgY29u
dHJvbCBmbG93IGRpYW1vbmRzIHRvIGNoZWNrIHRoZSBjYWxsZWUuCiAgICAgaWYgKCFjYWxsTGlu
a1N0YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpICYmIGNhbGxMaW5rU3RhdHVzLnNpemUoKSA9PSAx
KSB7CiAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcygKLSAgICAgICAgICAgIGNhbGxMaW5rU3Rh
dHVzWzBdLmNhbGxlZSgpLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxp
emF0aW9uS2luZCk7CisgICAgICAgICAgICBjYWxsTGlua1N0YXR1c1swXSwgY2FsbFRhcmdldE5v
ZGUsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAgICBib29sIHJl
c3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCi0gICAgICAgICAgICBjYWxsVGFyZ2V0Tm9kZSwg
cmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0uY2FsbGVlKCksIHJlZ2lzdGVyT2Zmc2V0
LAorICAgICAgICAgICAgY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3Rh
dHVzWzBdLCByZWdpc3Rlck9mZnNldCwKICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJEb2VzTm9ybWFsTGlua2luZywgcHJlZGlj
dGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSk7CiAgICAgICAgIGlmICghcmVzdWx0
ICYmICFjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpKQotICAgICAgICAgICAgdW5kb0Z1bmN0aW9u
Q2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdLmNhbGxlZSgpKTsKKyAgICAgICAgICAgIHVuZG9GdW5j
dGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1swXSk7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nKCJEb25lIGlubGluaW5nIChzaW1wbGUpLlxuIik7CiAgICAgICAg
ICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CkBAIC0x
NDYyLDcgKzE0NTMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2Rl
CiAgICAgYm9vbCBhbGxBcmVDbG9zdXJlQ2FsbHMgPSB0cnVlOwogICAgIGJvb2wgYWxsQXJlRGly
ZWN0Q2FsbHMgPSB0cnVlOwogICAgIGZvciAodW5zaWduZWQgaSA9IGNhbGxMaW5rU3RhdHVzLnNp
emUoKTsgaS0tOykgewotICAgICAgICBpZiAoY2FsbExpbmtTdGF0dXNbaV0uY2FsbGVlKCkuaXND
bG9zdXJlQ2FsbCgpKQorICAgICAgICBpZiAoY2FsbExpbmtTdGF0dXNbaV0uaXNDbG9zdXJlQ2Fs
bCgpKQogICAgICAgICAgICAgYWxsQXJlRGlyZWN0Q2FsbHMgPSBmYWxzZTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgYWxsQXJlQ2xvc3VyZUNhbGxzID0gZmFsc2U7CkBAIC0xNDc1LDkgKzE0
NjYsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAg
IHRoaW5nVG9Td2l0Y2hPbiA9IGFkZFRvR3JhcGgoR2V0RXhlY3V0YWJsZSwgY2FsbFRhcmdldE5v
ZGUpOwogICAgIGVsc2UgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8g
aGFuZGxlIHRoaXMgY2FzZSwgYnV0IGl0J3MgdHJpY2t5IGFuZCB3ZSBkb24ndCBrbm93IG9mIGNh
c2VzCi0gICAgICAgIC8vIHdoZXJlIGl0IHdvdWxkIGJlIGJlbmVmaWNpYWwuIEFsc28sIENhbGxM
aW5rU3RhdHVzIHdvdWxkIG1ha2UgYWxsIGNhbGxlZXMgYXBwZWFyIGxpa2UKLSAgICAgICAgLy8g
Y2xvc3VyZSBjYWxscyBpZiBhbnkgY2FsbHMgd2VyZSBjbG9zdXJlIGNhbGxzIC0gZXhjZXB0IGZv
ciBjYWxscyB0byBpbnRlcm5hbCBmdW5jdGlvbnMuCi0gICAgICAgIC8vIFNvIHRoaXMgd2lsbCBv
bmx5IGFyaXNlIGlmIHNvbWUgY2FsbGVlcyBhcmUgaW50ZXJuYWwgZnVuY3Rpb25zIGFuZCBvdGhl
cnMgYXJlIGNsb3N1cmVzLgorICAgICAgICAvLyB3aGVyZSBpdCB3b3VsZCBiZSBiZW5lZmljaWFs
LiBJdCBtaWdodCBiZSBiZXN0IHRvIGhhbmRsZSB0aGVzZSBjYXNlcyBhcyBpZiBhbGwgY2FsbHMg
d2VyZQorICAgICAgICAvLyBjbG9zdXJlIGNhbGxzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDIwCiAgICAgICAgIGlmICh2ZXJib3NlKSB7
CiAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5nIGlubGluaW5nIChtaXgpLlxuIik7CkBAIC0x
NTE3LDcgKzE1MDcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2Rl
CiAgICAgLy8gdG8gdGhlIGNvbnRpbnVhdGlvbiBibG9jaywgd2hpY2ggd2UgY3JlYXRlIGxhc3Qu
CiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBsYW5kaW5nQmxvY2tzOwogICAgIAotICAgIC8vIFdl
IG1ha2UgZm9yY2UgdGhpcyB0cnVlIGlmIHdlIGdpdmUgdXAgb24gaW5saW5pbmcgYW55IG9mIHRo
ZSBlZGdlcy4KKyAgICAvLyBXZSBtYXkgZm9yY2UgdGhpcyB0cnVlIGlmIHdlIGdpdmUgdXAgb24g
aW5saW5pbmcgYW55IG9mIHRoZSBlZGdlcy4KICAgICBib29sIGNvdWxkVGFrZVNsb3dQYXRoID0g
Y2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKTsKICAgICAKICAgICBpZiAodmVyYm9z
ZSkKQEAgLTE1MzMsNyArMTUyMyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKE5vZGUKICAgICAgICAgTm9kZSogbXlDYWxsVGFyZ2V0Tm9kZSA9IGdldERpcmVjdChjYWxs
ZWVSZWcpOwogICAgICAgICAKICAgICAgICAgYm9vbCBpbmxpbmluZ1Jlc3VsdCA9IGF0dGVtcHRU
b0lubGluZUNhbGwoCi0gICAgICAgICAgICBteUNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5k
LCBjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKSwgcmVnaXN0ZXJPZmZzZXQsCisgICAgICAgICAg
ICBteUNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1c1tpXSwgcmVn
aXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4
dE9mZnNldCwga2luZCwgQ2FsbGVyTGlua3NNYW51YWxseSwgcHJlZGljdGlvbiwKICAgICAgICAg
ICAgIGlubGluaW5nQmFsYW5jZSk7CiAgICAgICAgIApAQCAtMTU1MiwxMCArMTU0MiwxMCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIAogICAgICAg
ICBKU0NlbGwqIHRoaW5nVG9DYXNlT247CiAgICAgICAgIGlmIChhbGxBcmVEaXJlY3RDYWxscykK
LSAgICAgICAgICAgIHRoaW5nVG9DYXNlT24gPSBjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKS5u
b25FeGVjdXRhYmxlQ2FsbGVlKCk7CisgICAgICAgICAgICB0aGluZ1RvQ2FzZU9uID0gY2FsbExp
bmtTdGF0dXNbaV0ubm9uRXhlY3V0YWJsZUNhbGxlZSgpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIEFTU0VSVChhbGxBcmVDbG9zdXJlQ2FsbHMpOwotICAgICAgICAgICAgdGhpbmdUb0Nh
c2VPbiA9IGNhbGxMaW5rU3RhdHVzW2ldLmNhbGxlZSgpLmV4ZWN1dGFibGUoKTsKKyAgICAgICAg
ICAgIHRoaW5nVG9DYXNlT24gPSBjYWxsTGlua1N0YXR1c1tpXS5leGVjdXRhYmxlKCk7CiAgICAg
ICAgIH0KICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX2dyYXBoLmZyZWV6
ZSh0aGluZ1RvQ2FzZU9uKSwgYmxvY2suZ2V0KCkpKTsKICAgICAgICAgbV9jdXJyZW50SW5kZXgg
PSBuZXh0T2Zmc2V0OwpAQCAtMTU2Nyw3ICsxNTU3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBsYW5kaW5nQmxvY2tzLmFwcGVuZChtX2N1cnJl
bnRCbG9jayk7CiAKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJG
aW5pc2hlZCBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKSwgIiBhdCAiLCBj
dXJyZW50Q29kZU9yaWdpbigpLCAiLlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJGaW5pc2hl
ZCBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1c1tpXSwgIiBhdCAiLCBjdXJyZW50Q29kZU9yaWdp
bigpLCAiLlxuIik7CiAgICAgfQogICAgIAogICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBzbG93UGF0
aEJsb2NrID0gYWRvcHRSZWYoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw4ICszNjMsNiBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBBcnJheVBvcDoK
ICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgY2FzZSBQcm9maWxlZENh
bGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAg
ICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBUb1ByaW1pdGl2ZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDIwICs0MjAs
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQcm9maWxlZENhbGw6Ci0gICAgICAgICAg
ICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3N0YXRl
LmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkubV92YWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
SWYgd2Ugd2VyZSBhYmxlIHRvIHByb3ZlIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNvbnN0YW50IHRo
ZW4gdGhlIG5vcm1hbCBjYWxsCi0gICAgICAgICAgICAgICAgLy8gaW5saW5lIGNhY2hlIHdpbGwg
cmVjb3JkIHRoaXMgY2FsbGVlLiBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gbmVlZCB0byBk
byBhbnkKLSAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIHByb2ZpbGluZy4KLSAgICAgICAg
ICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAg
ICAgICBub2RlLT5zZXRPcChub2RlLT5vcCgpID09IFByb2ZpbGVkQ2FsbCA/IENhbGwgOiBDb25z
dHJ1Y3QpOwotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQ29uc3Ry
dWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKLSAg
ICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OgogICAgIGNh
c2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAgICBjYXNlIFByb2Zp
bGVEaWRDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAko
cmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSwyMCArNzksMTcgQEAgc3RhdGljIENvbXBpbGF0aW9u
UmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIGlmIChtb2RlID09IERGR01vZGUpIHsKICAgICAgICAg
dm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICAgICAgdm0uZ2V0Q1RJ
U3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOwotICAgICAgICB2bS5nZXRDVElTdHVi
KGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1Yihs
aW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRDVElTdHVi
KHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRDVElTdHViKHZpcnR1
YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdm0uZ2V0
Q1RJU3R1YihsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOwogICAgICAg
ICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJh
dG9yKTsKLSAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBo
aWNDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHZtLmdldENU
SVN0dWIodmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKICAgICAg
ICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dl
bmVyYXRvcik7CiAgICAgfQogICAgIAotICAgIGlmIChDYWxsRWRnZUxvZzo6aXNFbmFibGVkKCkp
Ci0gICAgICAgIHZtLmVuc3VyZUNhbGxFZGdlTG9nKCkucHJvY2Vzc0xvZygpOwotCiAgICAgaWYg
KHZtLnR5cGVQcm9maWxlcigpKQogICAgICAgICB2bS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vz
c0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJQcmVwYXJpbmcgZm9yIERGRyBjb21waWxhdGlvbi4i
KSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDIsOCArMTIwMiw2IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OgogICAgICAgICBj
YXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICBjYXNlIFByb2ZpbGVk
Q2FsbDoKLSAgICAgICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBQcm9m
aWxlQ29udHJvbEZsb3c6CiAgICAgICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICAgICAgY2FzZSBO
YXRpdmVDb25zdHJ1Y3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNTcsOCArMTA1Nyw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
Y2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAg
IGNhc2UgQ29uc3RydWN0OgotICAgICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgY2Fz
ZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgICAgICBj
YXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3OTI0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjE3LDggKzIxNyw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAv
KiBDYWxscy4gKi9cCiAgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhD
b25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJn
cyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCi0gICAgbWFjcm8oUHJvZmlsZWRDYWxsLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNX
b3JsZCkgXAotICAgIG1hY3JvKFByb2ZpbGVkQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAg
IG1hY3JvKE5hdGl2ZUNhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
SGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oTmF0aXZlQ29uc3Ry
dWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBO
b2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxOSw2
ICsxMjE5LDExIEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWMKICAg
ICBEZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9
IEpJVENvZGU6OkRGR0pJVCkgeworICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxv
Y2sgaW4gREZHLT5GVEwgdGllci11cDogIiwgKmNvZGVCbG9jaywgIlxuIik7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAogICAgIEpJVENvZGUqIGpp
dENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CiAgICAgCiAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkgewpAQCAtMTIzOCw2ICsxMjQzLDExIEBAIGNoYXIqIEpJVF9PUEVS
QVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS0+aGVhcCk7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICAKKyAg
ICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7CisgICAgICAg
IGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBERkctPkZUTCB0aWVyLXVwOiAiLCAq
Y29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisgICAgCiAgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgp
LT5kZmcoKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4OCw4ICsxODgsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldERpcmVjdFBu
YW1lOgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAg
ICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAg
ICAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAg
ICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw4
ICsxODksNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAg
Y2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0
OgotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6CiAg
ICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdBcnJheToKICAgICBjYXNlIE5ld0FycmF5
V2l0aFNpemU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzOCw5ICs2MzgsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmlj
dEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiB7Ci0gICAg
Ym9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3AoKSA9PSBQcm9maWxl
ZENhbGw7CisgICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGw7CiAgICAgaWYgKCFp
c0NhbGwpCi0gICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IENvbnN0cnVjdCB8fCBub2RlLT5v
cCgpID09IFByb2ZpbGVkQ29uc3RydWN0KTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0g
Q29uc3RydWN0KTsKIAogICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50
IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQogICAgIC8vIGZvciBpdC4K
QEAgLTY4OSwxMSArNjg5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSog
bm9kZQogICAgIAogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5h
ZGRDYWxsTGlua0luZm8oKTsKIAotICAgIGlmIChub2RlLT5vcCgpID09IFByb2ZpbGVkQ2FsbCB8
fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KSB7Ci0gICAgICAgIG1faml0LnZtKCkt
PmNhbGxFZGdlTG9nLT5lbWl0TG9nQ29kZSgKLSAgICAgICAgICAgIG1faml0LCBpbmZvLT5jYWxs
RWRnZVByb2ZpbGUsIGNhbGxlZS5qc1ZhbHVlUmVncygpKTsKLSAgICB9Ci0gICAgCiAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaE5vdENlbGwoY2FsbGVlLmpzVmFsdWVSZWdzKCkpKTsKICAgICBz
bG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgY2FsbGVlUGF5bG9hZEdQUiwgdGFyZ2V0VG9DaGVjaykpOwogCkBAIC00MTY5LDgg
KzQxNjQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAg
ICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgY2FzZSBQcm9maWxlZENhbGw6
Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYyNCw5ICs2MjQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVx
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiB7Ci0gICAgYm9v
bCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3AoKSA9PSBQcm9maWxlZENh
bGw7CisgICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGw7CiAgICAgaWYgKCFpc0Nh
bGwpCi0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3AoKSA9
PSBDb25zdHJ1Y3QgfHwgbm9kZS0+b3AoKSA9PSBQcm9maWxlZENvbnN0cnVjdCk7CisgICAgICAg
IERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3Qp
OwogICAgIAogICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5v
dCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQogICAgIC8vIGZvciBpdC4KQEAgLTY2
OSwxMSArNjY5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQog
ICAgIAogICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gbV9qaXQuY29kZUJsb2NrKCkt
PmFkZENhbGxMaW5rSW5mbygpOwogICAgIAotICAgIGlmIChub2RlLT5vcCgpID09IFByb2ZpbGVk
Q2FsbCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KSB7Ci0gICAgICAgIG1faml0
LnZtKCktPmNhbGxFZGdlTG9nLT5lbWl0TG9nQ29kZSgKLSAgICAgICAgICAgIG1faml0LCBjYWxs
TGlua0luZm8tPmNhbGxFZGdlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MoY2FsbGVlR1BSKSk7Ci0gICAg
fQotCiAgICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKDApKTsKIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9q
aXQubmVhckNhbGwoKTsKQEAgLTQyMzYsOCArNDIzMSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVj
dDoKLSAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0Ogog
ICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNr
SW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MCwxNyArNTAsMTMgQEAgcHVibGljOgogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUZU
TEpJVCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgaWYg
KG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbikgewotICAg
ICAgICAgICAgcmVtb3ZlRlRMUHJvZmlsaW5nKCk7CisgICAgICAgIGlmIChtX2dyYXBoLm1fcHJv
ZmlsZWRCbG9jay0+bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KICAgICAgICAgCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgICAg
IEZUTDo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gRlRMOjpjYW5Db21waWxlKG1fZ3JhcGgpOwot
ICAgICAgICBpZiAobGV2ZWwgPT0gRlRMOjpDYW5ub3RDb21waWxlKSB7Ci0gICAgICAgICAgICBy
ZW1vdmVGVExQcm9maWxpbmcoKTsKKyAgICAgICAgaWYgKGxldmVsID09IEZUTDo6Q2Fubm90Q29t
cGlsZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaWYgKCFPcHRpb25zOjplbmFibGVPU1JFbnRyeVRvRlRMKCkpCiAgICAgICAgICAgICBs
ZXZlbCA9IEZUTDo6Q2FuQ29tcGlsZTsKQEAgLTEyMiwzMiArMTE4LDYgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgfQotCi1w
cml2YXRlOgotICAgIHZvaWQgcmVtb3ZlRlRMUHJvZmlsaW5nKCkKLSAgICB7Ci0gICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRl
eC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewotICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFByb2ZpbGVkQ2Fs
bDoKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoQ2FsbCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNl
IFByb2ZpbGVkQ29uc3RydWN0OgotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChDb25z
dHJ1Y3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQogfTsKIAog
Ym9vbCBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rpb24oR3JhcGgmIGdyYXBoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
MTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3Niw2IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAg
ICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHJvZmlsZWRD
YWxsOgotICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6Ci0gICAgICAgIC8vIFRoZXNlIGFyZSBP
SyBub3QgYmVjYXVzZSB0aGUgRlRMIGNhbiBzdXBwb3J0IHRoZW0sIGJ1dCBiZWNhdXNlIGlmIHRo
ZSBERkcgc2VlcyBvbmUgb2YKLSAgICAgICAgLy8gdGhlc2UgdGhlbiB0aGUgRlRMIHdpbGwgc2Vl
IGEgbm9ybWFsIENhbGwvQ29uc3RydWN0LgotICAgICAgICBicmVhazsKICAgICBjYXNlIElkZW50
aXR5OgogICAgICAgICAvLyBObyBiYWNrZW5kIGhhbmRsZXMgdGhpcyBiZWNhdXNlIGl0IHdpbGwg
YmUgb3B0aW1pemVkIG91dC4gQnV0IHdlIG1heSBjaGVjawogICAgICAgICAvLyBmb3IgY2FwYWJp
bGl0aWVzIGJlZm9yZSBvcHRpbWl6YXRpb24uIEl0IHdvdWxkIGJlIGEgZGVlcCBlcnJvciB0byBy
ZW1vdmUgdGhpcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9u
IDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OTMsMTEgKzk5Myw2IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChIZWFwT3BlcmF0
aW9uIGNvbGxlY3QKICAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dF
bnRyaWVzKEFTQ0lJTGl0ZXJhbCgiR0MiKSk7CiAgICAgfQogICAgIAotICAgIGlmICh2bSgpLT5j
YWxsRWRnZUxvZykgewotICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7Ci0g
ICAgICAgIHZtKCktPmNhbGxFZGdlTG9nLT5wcm9jZXNzTG9nKCk7Ci0gICAgfQotICAgIAogICAg
IFJFTEVBU0VfQVNTRVJUKCFtX2RlZmVycmFsRGVwdGgpOwogICAgIEFTU0VSVCh2bSgpLT5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5h
dG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmluYXJ5U3dpdGNoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CaW5hcnlTd2l0Y2guaAkocmV2aXNp
b24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CaW5hcnlTd2l0Y2guaAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vICAgICBp
bnQgdmFsdWUgPSBzd2l0Y2guY2FzZVZhbHVlKCk7CiAvLyAgICAgdW5zaWduZWQgaW5kZXggPSBz
d2l0Y2guY2FzZUluZGV4KCk7IC8vIGluZGV4IGludG8gY2FzZXNWZWN0b3IsIGFib3ZlCiAvLyAg
ICAgLi4uIC8vIGdlbmVyYXRlIGNvZGUgZm9yIHRoaXMgY2FzZQorLy8gICAgIC4uLiA9IGppdC5q
dW1wKCk7IC8vIHlvdSBoYXZlIHRvIGp1bXAgb3V0IHlvdXJzZWxmOyBmYWxsaW5nIHRocm91Z2gg
Y2F1c2VzIHVuZGVmaW5lZCBiZWhhdmlvcgogLy8gfQogLy8gc3dpdGNoLmZhbGxUaHJvdWdoKCku
bGluaygmaml0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNs
b3N1cmVDYWxsU3R1YlJvdXRpbmUuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJF
eGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIlZNLmgiCi0jaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lOjpD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYg
Y29kZSwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLAotICAgIEV4ZWN1dGFibGVCYXNlKiBl
eGVjdXRhYmxlKQotICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKQotICAgICwg
bV9leGVjdXRhYmxlKHZtLCBvd25lciwgZXhlY3V0YWJsZSkKLXsKLX0KLQotQ2xvc3VyZUNhbGxT
dHViUm91dGluZTo6fkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUoKQotewotfQotCi12b2lkIENsb3N1
cmVDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRv
ciYgdmlzaXRvcikKLXsKLSAgICB2aXNpdG9yLmFwcGVuZCgmbV9leGVjdXRhYmxlKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaAko
cmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IENsb3N1cmVDYWxsU3R1YlJvdXRpbmVfaAotI2RlZmluZSBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
X2gKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVk
ZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lIDogcHVibGljIEdDQXdhcmVKSVRTdHViUm91dGluZSB7Ci1w
dWJsaWM6Ci0gICAgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKLSAgICAgICAgY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLAotICAgICAgICBFeGVj
dXRhYmxlQmFzZSopOwotICAgIAotICAgIHZpcnR1YWwgfkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUo
KTsKLSAgICAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZXhlY3V0YWJsZS5nZXQoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOwotCi1wcml2
YXRlOgotICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFzZT4gbV9leGVjdXRhYmxlOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0jZW5kaWYg
Ly8gQ2xvc3VyZUNhbGxTdHViUm91dGluZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAwLDEy
ICszMDAsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAg
ICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CiAK
LSAgICBpZiAoQ2FsbEVkZ2VMb2c6OmlzRW5hYmxlZCgpICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KQotICAgICAgICAmJiBPcHRpb25zOjpiYXNlbGluZURvZXNDYWxsRWRnZVByb2ZpbGluZygpKSB7
Ci0gICAgICAgIG1fdm0tPmVuc3VyZUNhbGxFZGdlTG9nKCkuZW1pdExvZ0NvZGUoCi0gICAgICAg
ICAgICAqdGhpcywgaW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKLSAgICB9Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CiAgICAg
ICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0cnVjdGlvbik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE0LDEwICsyMTQsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJ
CiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5r
SW5mbygpOwogCi0gICAgaWYgKENhbGxFZGdlTG9nOjppc0VuYWJsZWQoKSAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkKLSAgICAgICAgJiYgT3B0aW9uczo6YmFzZWxpbmVEb2VzQ2FsbEVkZ2VQcm9m
aWxpbmcoKSkKLSAgICAgICAgbV92bS0+ZW5zdXJlQ2FsbEVkZ2VMb2coKS5lbWl0TG9nQ29kZSgq
dGhpcywgaW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotCiAgICAg
aWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2FsbEV2YWwo
aW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
Nzc2LDQ3ICs3NzYsMTIgQEAgaW5saW5lIGNoYXIqIHZpcnR1YWxGb3IoCiAgICAgcmV0dXJuIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwga2luZCwgcmVnaXN0ZXJzLCBjYWxsZWVB
c0Z1bmN0aW9uQ2VsbElnbm9yZWQpOwogfQogCi1zdGF0aWMgYm9vbCBhdHRlbXB0VG9PcHRpbWl6
ZUNsb3N1cmVDYWxsKAotICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlIHJlZ2lzdGVycywgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwKLSAgICBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25D
ZWxsKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgSlNGdW5jdGlvbiogY2FsbGVl
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgSlNGdW5j
dGlvbiogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZvLmNhbGxlZS5nZXQoKTsKLSAgICAKLSAgICBp
ZiAoIW9sZENhbGxlZSB8fCBvbGRDYWxsZWUtPmV4ZWN1dGFibGUoKSAhPSBjYWxsZWUtPmV4ZWN1
dGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VSVChjYWxsZWUt
PmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGVQdHIgPQotICAgICAgICBjYWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoCi0gICAgICAgICAgICAqZXhlY0NhbGxl
ZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPnZtKCksIGNhbGxlZS0+ZXhlY3V0YWJsZSgp
LAotICAgICAgICAgICAgQXJpdHlDaGVja05vdFJlcXVpcmVkLCByZWdpc3RlcnMpOwotICAgIAot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrOwotICAgIGlmIChjYWxsZWUtPmV4ZWN1dGFibGUoKS0+
aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZUJsb2NrID0gMDsKLSAgICBlbHNlIHsKLSAg
ICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNhbGxlZS0+ZXhl
Y3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwotICAgICAgICBpZiAoZXhlY0NhbGxlZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxsTGlu
a0luZm86OkNhbGxWYXJhcmdzIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0lu
Zm86OkNvbnN0cnVjdFZhcmFyZ3MpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIGxpbmtDbG9zdXJlQ2FsbCgKLSAgICAgICAgZXhlY0NhbGxlZSwgY2FsbExpbmtJ
bmZvLCBjb2RlQmxvY2ssIGNhbGxlZS0+ZXhlY3V0YWJsZSgpLCBjb2RlUHRyLCByZWdpc3RlcnMp
OwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBo
aWNDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8p
CiB7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKICAgICBjaGFyKiByZXN1bHQg
PSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAKLSAgICBp
ZiAoIWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8p
KQotICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBDb2RlRm9y
Q2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CisgICAgbGlua1BvbHltb3Jw
aGljQ2FsbChleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBDYWxsVmFyaWFudChjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogICAgIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC04MzEsMTMgKzc5NiwxMiBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblZpcnR1YWxDb25zCiAgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxl
ZSwgQ29kZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9
CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNl
cnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
bykKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbFRoYXRQ
cmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8pCiB7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKICAgICBjaGFyKiBy
ZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBN
dXN0UHJlc2VydmVSZWdpc3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKIAotICAgIGlmICgh
YXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBNdXN0UHJlc2VydmVSZWdp
c3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCAqY2FsbExpbmtJbmZvKSkKLSAgICAgICAgbGlu
a1Nsb3dGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIE11c3RQcmVz
ZXJ2ZVJlZ2lzdGVycyk7CisgICAgbGlua1BvbHltb3JwaGljQ2FsbChleGVjQ2FsbGVlLCAqY2Fs
bExpbmtJbmZvLCBDYWxsVmFyaWFudChjYWxsZWVBc0Z1bmN0aW9uQ2VsbCksIE11c3RQcmVzZXJ2
ZVJlZ2lzdGVycyk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwMzMsNiArOTk3
LDEwIEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICBEZWZl
ckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkg
IT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBj
b2RlIGJsb2NrIGluIEJhc2VsaW5lLT5ERkcgdGllci11cDogIiwgKmNvZGVCbG9jaywgIlxuIik7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQogICAgIAogICAg
IGlmIChieXRlY29kZUluZGV4KSB7CiAgICAgICAgIC8vIElmIHdlJ3JlIGF0dGVtcHRpbmcgdG8g
T1NSIGZyb20gYSBsb29wLCBhc3N1bWUgdGhhdCB0aGlzIHNob3VsZCBiZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3OTI0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDYsMTIgKzI0NiwxMiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxHZW5lCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmlj
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q2FsbEV2YWwoRXhlY1N0YXRlKiwgRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBX
VEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2Fs
bChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFs
Q2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29u
c3RydWN0KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUq
LCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5r
SW5mbyopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua1Bv
bHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyop
IFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGxU
aGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7
CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2Vy
dmVzUmVncyhFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVj
U3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CkBAIC0zOTEsMTMgKzM5MSwxMyBA
QCBpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRpb25WaXJ0CiAgICAgcmV0dXJuIDA7
CiB9CiAKLWlubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2Fs
bEZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoraW5saW5lIFBfSklUT3Bl
cmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbEZvcihSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CiAgICAg
Y2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uTGlua0Nsb3N1cmVDYWxsOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua1BvbHlt
b3JwaGljQ2FsbDsKICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOwogICAg
IH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24g
MTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgCisgICAgLy8gUmV0dXJuIHRydWUgaWYgeW91IGFyZSBzdGlsbCB2
YWxpZCBhZnRlci4gUmV0dXJuIGZhbHNlIGlmIHlvdSBhcmUgbm93IGludmFsaWQuIElmIHlvdSBy
ZXR1cm4KKyAgICAvLyBmYWxzZSwgeW91IHdpbGwgdXN1YWxseSBub3QgZG8gYW55IGNsZWFyaW5n
IGJlY2F1c2UgdGhlIGlkZWEgaXMgdGhhdCB5b3Ugd2lsbCBzaW1wbHkgYmUKKyAgICAvLyBkZXN0
cm95ZWQuCiAgICAgdmlydHVhbCBib29sIHZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJik7CiAKIHBy
b3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3JpdGVCYXJyaWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJp
ZXIuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRX
cml0ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJV
bnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Bv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIgorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZv
LmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1BvbHltb3JwaGljQ2Fs
bE5vZGU6On5Qb2x5bW9ycGhpY0NhbGxOb2RlKCkKK3sKKyAgICBpZiAoaXNPbkxpc3QoKSkKKyAg
ICAgICAgcmVtb3ZlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNDYWxsTm9kZTo6dW5saW5rKFJl
cGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpCit7CisgICAgaWYgKE9wdGlvbnM6OnNob3dEaXNh
c3NlbWJseSgpKQorICAgICAgICBkYXRhTG9nKCJVbmxpbmtpbmcgcG9seW1vcnBoaWMgY2FsbCBh
dCAiLCBtX2NhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCAiLCAiLCBtX2NhbGxMaW5r
SW5mby0+Y29kZU9yaWdpbiwgIlxuIik7CisgICAgCisgICAgbV9jYWxsTGlua0luZm8tPnVubGlu
ayhyZXBhdGNoQnVmZmVyKTsKKyAgICAKKyAgICBpZiAoaXNPbkxpc3QoKSkKKyAgICAgICAgcmVt
b3ZlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNDYWxsQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiPHZhcmlhbnQgPSAiLCBtX3ZhcmlhbnQsICIs
IGNvZGVCbG9jayA9ICIsIHBvaW50ZXJEdW1wKG1fY29kZUJsb2NrKSwgIj4iKTsKK30KKworUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAorICAg
IGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZVJlZiwgVk0mIHZtLCBjb25zdCBKU0Nl
bGwqIG93bmVyLCBFeGVjU3RhdGUqIGNhbGxlckZyYW1lLAorICAgIENhbGxMaW5rSW5mbyYgaW5m
bywgY29uc3QgVmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+JiBjYXNlcywKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8dWludDMyX3RbXT4gZmFzdENvdW50cykKKyAgICA6IEdDQXdhcmVKSVRTdHViUm91
dGluZShjb2RlUmVmLCB2bSkKKyAgICAsIG1fZmFzdENvdW50cyhzdGQ6Om1vdmUoZmFzdENvdW50
cykpCit7CisgICAgZm9yIChQb2x5bW9ycGhpY0NhbGxDYXNlIGNhbGxDYXNlIDogY2FzZXMpIHsK
KyAgICAgICAgbV92YXJpYW50cy5hcHBlbmQoV3JpdGVCYXJyaWVyPEpTQ2VsbD4odm0sIG93bmVy
LCBjYWxsQ2FzZS52YXJpYW50KCkucmF3Q2FsbGVlQ2VsbCgpKSk7CisgICAgICAgIGlmIChzaG91
bGRTaG93RGlzYXNzZW1ibHlGb3IoY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpKSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIkxpbmtpbmcgcG9seW1vcnBoaWMgY2FsbCBpbiAiLCAqY2FsbGVyRnJhbWUt
PmNvZGVCbG9jaygpLCAiIGF0ICIsIGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCksICIgdG8gIiwg
Y2FsbENhc2UudmFyaWFudCgpLCAiLCBjb2RlQmxvY2sgPSAiLCBwb2ludGVyRHVtcChjYWxsQ2Fz
ZS5jb2RlQmxvY2soKSksICJcbiIpOworICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsQ2FzZS5jb2RlQmxvY2soKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+bGlua0luY29t
aW5nUG9seW1vcnBoaWNDYWxsKGNhbGxlckZyYW1lLCBtX2NhbGxOb2Rlcy5hZGQoJmluZm8pKTsK
KyAgICB9CisgICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOworICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7Cit9CisKK1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp+UG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUoKSB7IH0KKworQ2FsbFZhcmlhbnRMaXN0IFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lOjp2YXJpYW50cygpIGNvbnN0Cit7CisgICAgQ2FsbFZhcmlhbnRMaXN0IHJlc3Vs
dDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFudHMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoQ2FsbFZhcmlhbnQobV92YXJpYW50c1tpXS5nZXQoKSkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0NhbGxFZGdlTGlzdCBQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZTo6ZWRnZXMoKSBjb25zdAoreworICAgIC8vIFdlIHdvdWxkbid0IGhhdmUgdGhlc2Ug
aWYgdGhpcyB3YXMgYW4gRlRMIHN0dWIgcm91dGluZS4gV2Ugc2hvdWxkbid0IGJlIGFza2luZyBm
b3IgcHJvZmlsaW5nCisgICAgLy8gZnJvbSB0aGUgRlRMLgorICAgIFJFTEVBU0VfQVNTRVJUKG1f
ZmFzdENvdW50cyk7CisgICAgCisgICAgQ2FsbEVkZ2VMaXN0IHJlc3VsdDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fdmFyaWFudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoQ2FsbEVkZ2UoQ2FsbFZhcmlhbnQobV92YXJpYW50c1tpXS5nZXQoKSksIG1fZmFzdENv
dW50c1tpXSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmU6OnZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJikKK3sKKyAgICBmb3IgKGF1dG8m
IHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodmFy
aWFudC5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWly
ZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChhdXRv
JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnZhcmlhbnQp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lX2gKKyNkZWZpbmUgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmVfaAorCisjaWYgRU5B
QkxFKEpJVCkKKworI2luY2x1ZGUgIkNhbGxFZGdlLmgiCisjaW5jbHVkZSAiQ2FsbFZhcmlhbnQu
aCIKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitz
dHJ1Y3QgQ2FsbExpbmtJbmZvOworCitjbGFzcyBQb2x5bW9ycGhpY0NhbGxOb2RlIDogcHVibGlj
IEJhc2ljUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+IHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQb2x5bW9ycGhpY0NhbGxOb2RlKTsKK3B1YmxpYzoKKyAgICBQb2x5bW9y
cGhpY0NhbGxOb2RlKENhbGxMaW5rSW5mbyogaW5mbykKKyAgICAgICAgOiBtX2NhbGxMaW5rSW5m
byhpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgflBvbHltb3JwaGljQ2FsbE5vZGUoKTsK
KyAgICAKKyAgICB2b2lkIHVubGluayhSZXBhdGNoQnVmZmVyJik7CisgICAgCitwcml2YXRlOgor
ICAgIENhbGxMaW5rSW5mbyogbV9jYWxsTGlua0luZm87Cit9OworCitjbGFzcyBQb2x5bW9ycGhp
Y0NhbGxDYXNlIHsKK3B1YmxpYzoKKyAgICBQb2x5bW9ycGhpY0NhbGxDYXNlKCkKKyAgICAgICAg
OiBtX2NvZGVCbG9jayhudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUG9seW1vcnBo
aWNDYWxsQ2FzZShDYWxsVmFyaWFudCB2YXJpYW50LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAg
ICAgICAgOiBtX3ZhcmlhbnQodmFyaWFudCkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCisgICAgeworICAgIH0KKyAgICAKKyAgICBDYWxsVmFyaWFudCB2YXJpYW50KCkgY29uc3Qg
eyByZXR1cm4gbV92YXJpYW50OyB9CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7
IHJldHVybiBtX2NvZGVCbG9jazsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBDYWxsVmFyaWFudCBtX3ZhcmlhbnQ7CisgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKK307CisKK2NsYXNzIFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lIDogcHVibGljIEdDQXdhcmVKSVRTdHViUm91dGluZSB7CitwdWJsaWM6CisgICAgUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwKKyAgICAgICAgRXhlY1N0YXRlKiBjYWxs
ZXJGcmFtZSwgQ2FsbExpbmtJbmZvJiwgY29uc3QgVmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+
JiwKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQzMl90W10+IGZhc3RDb3VudHMpOworICAg
IAorICAgIHZpcnR1YWwgflBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKCk7CisgICAgCisgICAg
Q2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRzKCkgY29uc3Q7CisgICAgQ2FsbEVkZ2VMaXN0IGVkZ2Vz
KCkgY29uc3Q7CisgICAgCisgICAgYm9vbCB2aXNpdFdlYWsoUmVwYXRjaEJ1ZmZlciYpIG92ZXJy
aWRlOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFZlY3RvcjxX
cml0ZUJhcnJpZXI8SlNDZWxsPiwgMj4gbV92YXJpYW50czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
dWludDMyX3RbXT4gbV9mYXN0Q291bnRzOworICAgIEJhZzxQb2x5bW9ycGhpY0NhbGxOb2RlPiBt
X2NhbGxOb2RlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkFjY2Vzc29yQ2FsbEpJ
VFN0dWJSb3V0aW5lLmgiCisjaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCiAjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Nw
ZWN1bGF0aXZlSklULmgiCkBAIC0xNTc1LDEyICsxNTc2LDE3IEBAIHZvaWQgcmVwYXRjaEluKAog
fQogCiBzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcigKKyAgICBSZXBhdGNoQnVmZmVyJiByZXBhdGNo
QnVmZmVyLCBWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3IpCit7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgIGNhbGxM
aW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29k
ZSgpKTsKK30KKworc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoCiAgICAgUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywKICAgICBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdp
c3RlcnMpCiB7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCi0gICAgICAgIGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sCi0gICAgICAgIHZtLT5nZXRDVElTdHViKHZpcnR1YWxUaHVu
a0dlbmVyYXRvckZvcihraW5kLCByZWdpc3RlcnMpKS5jb2RlKCkpOworICAgIGxpbmtTbG93Rm9y
KHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVua0dlbmVyYXRvckZv
cihraW5kLCByZWdpc3RlcnMpKTsKIH0KIAogdm9pZCBsaW5rRm9yKApAQCAtMTU5MiwxMCArMTU5
OCw2IEBAIHZvaWQgbGlua0ZvcigKICAgICAKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9j
ayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwogCi0gICAgLy8gSWYgeW91J3Jl
IGJlaW5nIGNhbGwtbGlua2VkIGZyb20gYSBERkcgY2FsbGVyIHRoZW4geW91IG9idmlvdXNseSBk
aWRuJ3QgZ2V0IGlubGluZWQuCi0gICAgaWYgKGNhbGxlZUNvZGVCbG9jayAmJiBKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAgICAgICBjYWxs
ZWVDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgCiAgICAg
Vk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwpAQCAtMTYxMSw3ICsxNjEzLDggQEAgdm9p
ZCBsaW5rRm9yKAogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoZXhl
Yy0+Y2FsbGVyRnJhbWUoKSwgJmNhbGxMaW5rSW5mbyk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0g
Q29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtH
ZW5lcmF0b3JGb3IocmVnaXN0ZXJzKSkuY29kZSgpKTsKKyAgICAgICAgbGlua1Nsb3dGb3IoCisg
ICAgICAgICAgICByZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBo
aWNDYWxsVGh1bmtHZW5lcmF0b3JGb3IocmVnaXN0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCkBAIC0xNjMxLDE2ICsxNjM0LDEyMiBAQCB2b2lkIGxpbmtTbG93Rm9yKAogICAg
IGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGtpbmQsIHJlZ2lz
dGVycyk7CiB9CiAKLXZvaWQgbGlua0Nsb3N1cmVDYWxsKAotICAgIEV4ZWNTdGF0ZSogZXhlYywg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCAK
LSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHIsCitzdGF0aWMgdm9pZCByZXZlcnRDYWxsKAorICAgIFJlcGF0Y2hCdWZmZXImIHJlcGF0
Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvcikKK3sKKyAgICByZXBhdGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVu
dFRvQnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJh
bmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKSwKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNhbGxMaW5rSW5m
by5jYWxsZWVHUFIpLCAwKTsKKyAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2Fs
bExpbmtJbmZvLCBnZW5lcmF0b3IpOworICAgIGNhbGxMaW5rSW5mby5oYXNTZWVuU2hvdWxkUmVw
YXRjaCA9IGZhbHNlOworICAgIGNhbGxMaW5rSW5mby5jYWxsZWUuY2xlYXIoKTsKKyAgICBjYWxs
TGlua0luZm8uc3R1Yi5jbGVhcigpOworICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkK
KyAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOworfQorCit2b2lkIHVubGlua0ZvcigKKyAg
ICBSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bywKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9u
TW9kZSByZWdpc3RlcnMpCit7CisgICAgaWYgKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSgpKQor
ICAgICAgICBkYXRhTG9nKCJVbmxpbmtpbmcgY2FsbCBmcm9tICIsIGNhbGxMaW5rSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sICIgaW4gcmVxdWVzdCBmcm9tICIsIHBvaW50ZXJEdW1wKHJlcGF0Y2hC
dWZmZXIuY29kZUJsb2NrKCkpLCAiXG4iKTsKKyAgICAKKyAgICByZXZlcnRDYWxsKAorICAgICAg
ICByZXBhdGNoQnVmZmVyLCByZXBhdGNoQnVmZmVyLmNvZGVCbG9jaygpLT52bSgpLCBjYWxsTGlu
a0luZm8sCisgICAgICAgIGxpbmtUaHVua0dlbmVyYXRvckZvcihraW5kLCByZWdpc3RlcnMpKTsK
K30KKwordm9pZCBsaW5rVmlydHVhbEZvcigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvLAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICAvLyBGSVhNRTogV2UgY291
bGQgZ2VuZXJhdGUgYSB2aXJ0dWFsIGNhbGwgc3R1YiBoZXJlLiBUaGlzIHdvdWxkIGxlYWQgdG8g
ZmFzdGVyIHZpcnR1YWwgY2FsbHMKKyAgICAvLyBieSBlbGltaW5hdGluZyB0aGUgYnJhbmNoIHBy
ZWRpY3Rpb24gYm90dGxlbmVjayBpbnNpZGUgdGhlIHNoYXJlZCB2aXJ0dWFsIGNhbGwgdGh1bmsu
CisgICAgCisgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFt
ZSgpLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7Cisg
ICAgCisgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQor
ICAgICAgICBkYXRhTG9nKCJMaW5raW5nIHZpcnR1YWwgY2FsbCBhdCAiLCAqY2FsbGVyQ29kZUJs
b2NrLCAiICIsIGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVPcmlnaW4oKSwgIlxuIik7CisgICAg
CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CisgICAg
cmV2ZXJ0Q2FsbChyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmtH
ZW5lcmF0b3JGb3Ioa2luZCwgcmVnaXN0ZXJzKSk7Cit9CisKK25hbWVzcGFjZSB7CitzdHJ1Y3Qg
Q2FsbFRvQ29kZVB0ciB7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7Cit9OworfSAvLyBhbm5vbnltb3VzIG5hbWVzcGFjZQor
Cit2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCwKICAgICBSZWdpc3Rl
clByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZv
LnN0dWIpOworICAgIC8vIEN1cnJlbnRseSB3ZSBjYW4ndCBkbyBhbnl0aGluZyBmb3Igbm9uLWZ1
bmN0aW9uIGNhbGxlZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MDY4NQorICAgIGlmICghbmV3VmFyaWFudCB8fCAhbmV3VmFyaWFudC5leGVjdXRh
YmxlKCkpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3IoZXhlYywgY2FsbExpbmtJbmZvLCBDb2Rl
Rm9yQ2FsbCwgcmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKICAgICBD
b2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9j
aygpOwogICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKICAgICAKKyAgICBDYWxs
VmFyaWFudExpc3QgbGlzdDsKKyAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0
dWIgPSBjYWxsTGlua0luZm8uc3R1Yi5nZXQoKSkKKyAgICAgICAgbGlzdCA9IHN0dWItPnZhcmlh
bnRzKCk7CisgICAgZWxzZSBpZiAoSlNGdW5jdGlvbiogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZv
LmNhbGxlZS5nZXQoKSkKKyAgICAgICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdHtDYWxsVmFyaWFu
dChvbGRDYWxsZWUpfTsKKyAgICAKKyAgICBsaXN0ID0gdmFyaWFudExpc3RXaXRoVmFyaWFudChs
aXN0LCBuZXdWYXJpYW50KTsKKworICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY2xvc3VyZSBjYWxs
cyB0aGVuIGl0IG1ha2VzIHNlbnNlIHRvIHRyZWF0IGFsbCBvZiB0aGVtIGFzIGNsb3N1cmUgY2Fs
bHMuCisgICAgLy8gVGhpcyBtYWtlcyBzd2l0Y2hpbmcgb24gY2FsbGVlIGNoZWFwZXIuIEl0IGFs
c28gcHJvZHVjZXMgcHJvZmlsaW5nIHRoYXQncyBlYXNpZXIgb24gdGhlIERGRzsKKyAgICAvLyB0
aGUgREZHIGRvZXNuJ3QgcmVhbGx5IHdhbnQgdG8gZGVhbCB3aXRoIGEgY29tYmluYXRpb24gb2Yg
Y2xvc3VyZSBhbmQgbm9uLWNsb3N1cmUgY2FsbGVlcy4KKyAgICBib29sIGlzQ2xvc3VyZUNhbGwg
PSBmYWxzZTsKKyAgICBmb3IgKENhbGxWYXJpYW50IHZhcmlhbnQgOiBsaXN0KSAgeworICAgICAg
ICBpZiAodmFyaWFudC5pc0Nsb3N1cmVDYWxsKCkpIHsKKyAgICAgICAgICAgIGxpc3QgPSBkZXNw
ZWNpZmllZFZhcmlhbnRMaXN0KGxpc3QpOworICAgICAgICAgICAgaXNDbG9zdXJlQ2FsbCA9IHRy
dWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBWZWN0
b3I8UG9seW1vcnBoaWNDYWxsQ2FzZT4gY2FsbENhc2VzOworICAgIAorICAgIC8vIEZpZ3VyZSBv
dXQgd2hhdCBvdXIgY2FzZXMgYXJlLgorICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxp
c3QpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgICAgIGlmICh2YXJpYW50
LmV4ZWN1dGFibGUoKS0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgICAgIGNvZGVCbG9jayA9
IG51bGxwdHI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29kZUJsb2NrID0ganNDYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHZhcmlhbnQuZXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9y
Q2FsbCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB3ZSBjYW5ub3QgaGFuZGxl
IGEgY2FsbGVlLCBhc3N1bWUgdGhhdCBpdCdzIGJldHRlciBmb3IgdGhpcyB3aG9sZSB0aGluZyB0
byBiZSBhCisgICAgICAgICAgICAvLyB2aXJ0dWFsIGNhbGwuCisgICAgICAgICAgICBpZiAoZXhl
Yy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29k
ZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxs
TGlua0luZm86OkNhbGxWYXJhcmdzIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxsTGlu
a0luZm86OkNvbnN0cnVjdFZhcmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBsaW5rVmlydHVhbEZv
cihleGVjLCBjYWxsTGlua0luZm8sIENvZGVGb3JDYWxsLCByZWdpc3RlcnMpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgY2FsbENhc2VzLmFwcGVuZChQb2x5bW9ycGhpY0NhbGxDYXNlKHZhcmlhbnQsIGNvZGVCbG9j
aykpOworICAgIH0KKyAgICAKKyAgICAvLyBJZiB3ZSBhcmUgb3ZlciB0aGUgbGltaXQsIGp1c3Qg
dXNlIGEgbm9ybWFsIHZpcnR1YWwgY2FsbC4KKyAgICB1bnNpZ25lZCBtYXhQb2x5bW9ycGhpY0Nh
bGxWYXJpYW50TGlzdFNpemU7CisgICAgaWYgKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpID09
IEpJVENvZGU6OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFu
dExpc3RTaXplID0gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplRm9y
VG9wVGllcigpOworICAgIGVsc2UKKyAgICAgICAgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExp
c3RTaXplID0gT3B0aW9uczo6bWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplKCk7Cisg
ICAgaWYgKGxpc3Quc2l6ZSgpID4gbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXplKSB7
CisgICAgICAgIGxpbmtWaXJ0dWFsRm9yKGV4ZWMsIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGws
IHJlZ2lzdGVycyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgR1BSUmVnIGNh
bGxlZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oY2FsbExpbmtJbmZvLmNhbGxlZUdQUik7CiAg
ICAgCiAgICAgQ0NhbGxIZWxwZXJzIHN0dWJKaXQodm0sIGNhbGxlckNvZGVCbG9jayk7CkBAIC0x
NjU1LDMzICsxNzY0LDgyIEBAIHZvaWQgbGlua0Nsb3N1cmVDYWxsKAogICAgICAgICBzdHViSml0
LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5zYW5lQXJndW1lbnRDb3VudCk7CiAgICAgICAgIG9r
QXJndW1lbnRDb3VudC5saW5rKCZzdHViSml0KTsKICAgICB9CisgICAgCisgICAgR1BSUmVnIHNj
cmF0Y2ggPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSKTsKKyAg
ICBHUFJSZWcgY29tcGFyaXNvblZhbHVlR1BSOworICAgIAorICAgIGlmIChpc0Nsb3N1cmVDYWxs
KSB7CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2gg
dGhlIGV4ZWN1dGFibGUgaW4gc2NyYXRjaC4KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8g
V2UgY2FuIHNhZmVseSBjbG9iYmVyIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBjYWxsZWVHUFIuIFdl
IGNhbid0IHJlbHkgb24gdGFnTWFza1JlZ2lzdGVyCi0gICAgLy8gYmVpbmcgc2V0LiBTbyB3ZSBk
byB0aGlzIHRoZSBoYXJkIHdheS4KLSAgICBHUFJSZWcgc2NyYXRjaCA9IEFzc2VtYmx5SGVscGVy
czo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIpOwotICAgIHN0dWJKaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ01hc2spLCBzY3JhdGNoKTsKLSAgICBzbG93UGF0aC5h
cHBlbmQoc3R1YkppdC5icmFuY2hUZXN0NjQoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVH
UFIsIHNjcmF0Y2gpKTsKKyAgICAgICAgLy8gV2UgY2FuIHNhZmVseSBjbG9iYmVyIGV2ZXJ5dGhp
bmcgZXhjZXB0IHRoZSBjYWxsZWVHUFIuIFdlIGNhbid0IHJlbHkgb24gdGFnTWFza1JlZ2lzdGVy
CisgICAgICAgIC8vIGJlaW5nIHNldC4gU28gd2UgZG8gdGhpcyB0aGUgaGFyZCB3YXkuCisgICAg
ICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ01hc2spLCBz
Y3JhdGNoKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDY0KEND
YWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVlR1BSLCBzY3JhdGNoKSk7CiAjZWxzZQotICAgIC8v
IFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwu
CisgICAgICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxl
ZSBpcyBhIGNlbGwuCiAjZW5kaWYKICAgICAKLSAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAg
IHN0dWJKaXQuYnJhbmNoOCgKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWwsCi0g
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTRnVuY3Rpb25UeXBlKSkpOwotICAgIAotICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAg
c3R1YkppdC5icmFuY2hQdHIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAor
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoCisgICAgICAgICAgICBzdHViSml0LmJyYW5jaDgoCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU0Z1bmN0
aW9uVHlwZSkpKTsKKyAgICAKKyAgICAgICAgc3R1YkppdC5sb2FkUHRyKAogICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVj
dXRhYmxlKCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1
dGFibGUpKSk7CisgICAgICAgICAgICBzY3JhdGNoKTsKKyAgICAgICAgCisgICAgICAgIGNvbXBh
cmlzb25WYWx1ZUdQUiA9IHNjcmF0Y2g7CisgICAgfSBlbHNlCisgICAgICAgIGNvbXBhcmlzb25W
YWx1ZUdQUiA9IGNhbGxlZUdQUjsKKyAgICAKKyAgICBWZWN0b3I8aW50NjRfdD4gY2FzZVZhbHVl
cyhjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8Q2FsbFRvQ29kZVB0cj4gY2FsbHMoY2Fs
bENhc2VzLnNpemUoKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQzMl90W10+IGZhc3RDb3Vu
dHM7CisgICAgCisgICAgaWYgKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpICE9IEpJVENvZGU6
OnRvcFRpZXJKSVQoKSkKKyAgICAgICAgZmFzdENvdW50cyA9IHN0ZDo6bWFrZV91bmlxdWU8dWlu
dDMyX3RbXT4oY2FsbENhc2VzLnNpemUoKSk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IGNh
bGxDYXNlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKGZhc3RDb3VudHMpCisgICAgICAg
ICAgICBmYXN0Q291bnRzW2ldID0gMDsKKyAgICAgICAgCisgICAgICAgIENhbGxWYXJpYW50IHZh
cmlhbnQgPSBjYWxsQ2FzZXNbaV0udmFyaWFudCgpOworICAgICAgICBpZiAoaXNDbG9zdXJlQ2Fs
bCkKKyAgICAgICAgICAgIGNhc2VWYWx1ZXNbaV0gPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZh
cmlhbnQuZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FzZVZhbHVl
c1tpXSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFyaWFudC5mdW5jdGlvbigpKTsKKyAgICB9
CiAgICAgCi0gICAgQXNzZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBzdHViSml0Lm5lYXJDYWxs
KCk7Ci0gICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGRvbmUgPSBzdHViSml0Lmp1bXAoKTsKKyAg
ICBHUFJSZWcgZmFzdENvdW50c0Jhc2VHUFIgPQorICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnNl
bGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSLCBjb21wYXJpc29uVmFsdWVHUFIsIEdQUkluZm86OnJl
Z1QzKTsKKyAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGZhc3RD
b3VudHMuZ2V0KCkpLCBmYXN0Q291bnRzQmFzZUdQUik7CisgICAgCisgICAgQmluYXJ5U3dpdGNo
IGJpbmFyeVN3aXRjaChjb21wYXJpc29uVmFsdWVHUFIsIGNhc2VWYWx1ZXMsIEJpbmFyeVN3aXRj
aDo6SW50UHRyKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRvbmU7CisgICAgd2hpbGUg
KGJpbmFyeVN3aXRjaC5hZHZhbmNlKHN0dWJKaXQpKSB7CisgICAgICAgIHNpemVfdCBjYXNlSW5k
ZXggPSBiaW5hcnlTd2l0Y2guY2FzZUluZGV4KCk7CisgICAgICAgIAorICAgICAgICBDYWxsVmFy
aWFudCB2YXJpYW50ID0gY2FsbENhc2VzW2Nhc2VJbmRleF0udmFyaWFudCgpOworICAgICAgICAK
KyAgICAgICAgQVNTRVJUKHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgp
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPQorICAgICAgICAgICAg
dmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NG
b3JDYWxsKAorICAgICAgICAgICAgICAgICp2bSwgdmFyaWFudC5leGVjdXRhYmxlKCksIEFyaXR5
Q2hlY2tOb3RSZXF1aXJlZCwgcmVnaXN0ZXJzKTsKKyAgICAgICAgCisgICAgICAgIGlmIChmYXN0
Q291bnRzKSB7CisgICAgICAgICAgICBzdHViSml0LmFkZDMyKAorICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhmYXN0Q291bnRzQmFzZUdQUiwgY2FzZUluZGV4ICogc2l6ZW9mKHVpbnQzMl90
KSkpOworICAgICAgICB9CisgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQu
bmVhckNhbGwoKTsKKyAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jb2RlUHRyID0gY29kZVB0cjsK
KyAgICAgICAgZG9uZS5hcHBlbmQoc3R1YkppdC5qdW1wKCkpOworICAgIH0KICAgICAKICAgICBz
bG93UGF0aC5saW5rKCZzdHViSml0KTsKKyAgICBiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKS5s
aW5rKCZzdHViSml0KTsKICAgICBzdHViSml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdU
MCk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKQEAgLTE2
OTEsMzQgKzE4NDksNDUgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCiAgICAgCiAgICAgc3R1Ykpp
dC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CiAgICAg
QXNzZW1ibHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKLSAgICAKKyAgICAg
ICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNhbGxlckNvZGVC
bG9jayk7CiAgICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihjb2Rl
UHRyLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjYWxsQ2FzZXMu
c2l6ZSgpID09IGNhbGxzLnNpemUoKSk7CisgICAgZm9yIChDYWxsVG9Db2RlUHRyIGNhbGxUb0Nv
ZGVQdHIgOiBjYWxscykgeworICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKAorICAgICAgICAgICAg
Y2FsbFRvQ29kZVB0ci5jYWxsLCBGdW5jdGlvblB0cihjYWxsVG9Db2RlUHRyLmNvZGVQdHIuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOworICAgIH0KICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKGNhbGxlckNvZGVCbG9jay0+aml0VHlwZSgpKSkKICAgICAgICAgcGF0Y2hCdWZmZXIubGlu
ayhkb25lLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkp
OwogICAgIGVsc2UKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBjYWxsTGlua0luZm8u
aG90UGF0aE90aGVyLmxhYmVsQXRPZmZzZXQoMCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
dywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIodmlydHVhbFRodW5rR2VuZXJhdG9y
Rm9yKENvZGVGb3JDYWxsLCByZWdpc3RlcnMpKS5jb2RlKCkpKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKHNsb3csIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKGxpbmtQb2x5bW9ycGhp
Y0NhbGxUaHVua0dlbmVyYXRvckZvcihyZWdpc3RlcnMpKS5jb2RlKCkpKTsKICAgICAKLSAgICBS
ZWZQdHI8Q2xvc3VyZUNhbGxTdHViUm91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcg
Q2xvc3VyZUNhbGxTdHViUm91dGluZSgKKyAgICBSZWZQdHI8UG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmU+IHN0dWJSb3V0aW5lID0gYWRvcHRSZWYobmV3IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0
aW5lKAogICAgICAgICBGSU5BTElaRV9DT0RFX0ZPUigKICAgICAgICAgICAgIGNhbGxlckNvZGVC
bG9jaywgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkNsb3N1cmUgY2FsbCBzdHViIGZvciAl
cywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXQgJXAgKCVzKSIsCisgICAgICAgICAgICAoIlBvbHlt
b3JwaGljIGNhbGwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCwgdGFyZ2V0cyAlcyIsCiAg
ICAgICAgICAgICAgICAgdG9DU3RyaW5nKCpjYWxsZXJDb2RlQmxvY2spLmRhdGEoKSwgY2FsbExp
bmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KDApLmV4ZWN1dGFibGVBZGRy
ZXNzKCksCi0gICAgICAgICAgICAgICAgY29kZVB0ci5leGVjdXRhYmxlQWRkcmVzcygpLCB0b0NT
dHJpbmcocG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSkuZGF0YSgpKSksCi0gICAgICAgICp2
bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlY3V0YWJsZSkpOworICAg
ICAgICAgICAgIHRvQ1N0cmluZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpKSwKKyAgICAg
ICAgKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLT5jYWxsZXJG
cmFtZSgpLCBjYWxsTGlua0luZm8sIGNhbGxDYXNlcywKKyAgICAgICAgc3RkOjptb3ZlKGZhc3RD
b3VudHMpKSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNv
ZGVCbG9jayk7CiAgICAgCiAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCiAgICAg
ICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZCcmFuY2hQdHJXaXRoUGF0Y2hPblJlZ2lzdGVyKGNh
bGxMaW5rSW5mby5ob3RQYXRoQmVnaW4pLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChzdHVi
Um91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIC8vIFRoaXMgaXMgd2VpcmQuIFRoZSBvcmln
aW5hbCBzbG93IHBhdGggc2hvdWxkIG5vIGxvbmdlciBiZSByZWFjaGFibGUuCiAgICAgbGlua1Ns
b3dGb3IocmVwYXRjaEJ1ZmZlciwgdm0sIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIHJlZ2lz
dGVycyk7CiAgICAgCisgICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gYSBwcmV2aW91cyBzdHViIHJv
dXRpbmUsIHRoYXQgb25lIHdpbGwgZGllIGFzIHNvb24gYXMgdGhlIEdDIHJ1bnMgYW5kIHNlZXMK
KyAgICAvLyB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG9uIHN0YWNrLgogICAgIGNhbGxMaW5rSW5mby5z
dHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogICAgIAotICAgIEFTU0VSVCghY2FsbGVlQ29k
ZUJsb2NrIHx8IGNhbGxlZUNvZGVCbG9jay0+aXNJbmNvbWluZ0NhbGxBbHJlYWR5TGlua2VkKCZj
YWxsTGlua0luZm8pKTsKKyAgICAvLyBUaGUgY2FsbCBsaW5rIGluZm8gbm8gbG9uZ2VyIGhhcyBh
IGNhbGwgY2FjaGUgYXBhcnQgZnJvbSB0aGUganVtcCB0byB0aGUgcG9seW1vcnBoaWMgY2FsbAor
ICAgIC8vIHN0dWIuCisgICAgaWYgKGNhbGxMaW5rSW5mby5pc09uTGlzdCgpKQorICAgICAgICBj
YWxsTGlua0luZm8ucmVtb3ZlKCk7CiB9CiAKIHZvaWQgcmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZm
ZXImIHJlcGF0Y2hCdWZmZXIsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBA
QAogI2lmIEVOQUJMRShKSVQpCiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRl
ICJDYWxsVmFyaWFudC5oIgogI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CkBAIC00MSw3ICs0Miw5IEBAIHZvaWQgYnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUq
LCBKU1ZhbHUKIHZvaWQgcmVwYXRjaEluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50
aWZpZXImLCBib29sIHdhc0ZvdW5kLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwogdm9pZCBsaW5rRm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9j
ayosIEpTRnVuY3Rpb24qIGNhbGxlZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwogdm9pZCBsaW5rU2xvd0Zv
cihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBSZWdp
c3RlclByZXNlcnZhdGlvbk1vZGUpOwotdm9pZCBsaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiwg
Q2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgRXhlY3V0YWJsZUJhc2UqLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7Cit2b2lkIHVubGlua0ZvcihSZXBh
dGNoQnVmZmVyJiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgUmVnaXN0
ZXJQcmVzZXJ2YXRpb25Nb2RlKTsKK3ZvaWQgbGlua1ZpcnR1YWxGb3IoRXhlY1N0YXRlKiwgQ2Fs
bExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25N
b2RlKTsKK3ZvaWQgbGlua1BvbHltb3JwaGljQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8m
LCBDYWxsVmFyaWFudCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKTsKIHZvaWQgcmVzZXRHZXRC
eUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCByZXNldFB1dEJ5
SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIHJlc2V0SW4oUmVw
YXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNywyNyArMTM3LDI3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ29uc3Ry
dWN0VGhhdFAKICAgICByZXR1cm4gbGlua0ZvclRodW5rR2VuZXJhdG9yKHZtLCBDb2RlRm9yQ29u
c3RydWN0LCBNdXN0UHJlc2VydmVSZWdpc3RlcnMpOwogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbEZvclRodW5rR2VuZXJhdG9yKAorc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1vcnBoaWNDYWxsRm9yVGh1bmtHZW5lcmF0b3IoCiAg
ICAgVk0qIHZtLCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIEND
YWxsSGVscGVycyBqaXQodm0pOwogICAgIAotICAgIHNsb3dQYXRoRm9yKGppdCwgdm0sIG9wZXJh
dGlvbkxpbmtDbG9zdXJlQ2FsbEZvcihyZWdpc3RlcnMpKTsKKyAgICBzbG93UGF0aEZvcihqaXQs
IHZtLCBvcGVyYXRpb25MaW5rUG9seW1vcnBoaWNDYWxsRm9yKHJlZ2lzdGVycykpOwogICAgIAog
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7Ci0g
ICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiTGluayBjbG9zdXJlIGNhbGwg
JXMgc2xvdyBwYXRoIHRodW5rIiwgcmVnaXN0ZXJzID09IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyA/
ICIgdGhhdCBwcmVzZXJ2ZXMgcmVnaXN0ZXJzIiA6ICIiKSk7CisgICAgcmV0dXJuIEZJTkFMSVpF
X0NPREUocGF0Y2hCdWZmZXIsICgiTGluayBwb2x5bW9ycGhpYyBjYWxsICVzIHNsb3cgcGF0aCB0
aHVuayIsIHJlZ2lzdGVycyA9PSBNdXN0UHJlc2VydmVSZWdpc3RlcnMgPyAiIHRoYXQgcHJlc2Vy
dmVzIHJlZ2lzdGVycyIgOiAiIikpOwogfQogCiAvLyBGb3IgY2xvc3VyZSBvcHRpbWl6YXRpb25z
LCB3ZSBvbmx5IGluY2x1ZGUgY2FsbHMsIHNpbmNlIGlmIHlvdSdyZSB1c2luZyBjbG9zdXJlcyBm
b3IKIC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gdGhlbiB5b3UncmUgZ29pbmcgdG8gbG9zZSBiaWcg
dGltZSBhbnl3YXkuCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0Nh
bGxUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7Ci0gICAgcmV0dXJuIGxpbmtDbG9zdXJlQ2FsbEZv
clRodW5rR2VuZXJhdG9yKHZtLCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKKyAg
ICByZXR1cm4gbGlua1BvbHltb3JwaGljQ2FsbEZvclRodW5rR2VuZXJhdG9yKHZtLCBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxp
bmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxUaGF0UHJlc2VydmVzUmVnc1Ro
dW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxsRm9yVGh1
bmtHZW5lcmF0b3Iodm0sIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CisgICAgcmV0dXJuIGxpbmtQ
b2x5bW9ycGhpY0NhbGxGb3JUaHVua0dlbmVyYXRvcih2bSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJz
KTsKIH0KIAogc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVGh1bmtHZW5l
cmF0b3IoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmgJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDE2ICs2NSwxNiBAQCBpbmxpbmUgVGh1
bmtHZW5lcmF0b3IgbGlua1RodW5rR2VuZXJhdG9yCiAgICAgcmV0dXJuIDA7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvcihWTSopOwotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtH
ZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1vcnBoaWNDYWxs
VGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rUG9seW1vcnBo
aWNDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSopOwogCi1pbmxpbmUgVGh1
bmtHZW5lcmF0b3IgbGlua0Nsb3N1cmVDYWxsVGh1bmtHZW5lcmF0b3JGb3IoUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK2lubGluZSBUaHVua0dlbmVyYXRvciBsaW5rUG9seW1v
cnBoaWNDYWxsVGh1bmtHZW5lcmF0b3JGb3IoUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lz
dGVycykKIHsKICAgICBzd2l0Y2ggKHJlZ2lzdGVycykgewogICAgIGNhc2UgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Ob3RSZXF1aXJlZDoKLSAgICAgICAgcmV0dXJuIGxpbmtDbG9zdXJlQ2FsbFRodW5r
R2VuZXJhdG9yOworICAgICAgICByZXR1cm4gbGlua1BvbHltb3JwaGljQ2FsbFRodW5rR2VuZXJh
dG9yOwogICAgIGNhc2UgTXVzdFByZXNlcnZlUmVnaXN0ZXJzOgotICAgICAgICByZXR1cm4gbGlu
a0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcjsKKyAgICAgICAgcmV0
dXJuIGxpbmtQb2x5bW9ycGhpY0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yOwog
ICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIsNiArMzMyLDcgQEAgaW5saW5lIGJv
b2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoQwogICAgICAgICB9CiAgICAgfQogICAgIGRl
ZmF1bHQ6CisgICAgICAgIGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBMTEludDog
IiwgKmNvZGVCbG9jaywgIlxuIik7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCwxMiArMTcw
LDExIEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgZW5h
YmxlUG9seXZhcmlhbnREZXZpcnR1YWxpemF0aW9uLCB0cnVlKSBcCiAgICAgdihib29sLCBlbmFi
bGVQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nLCB0cnVlKSBcCiAgICAgdihib29sLCBlbmFibGVQ
b2x5bW9ycGhpY0NhbGxJbmxpbmluZywgdHJ1ZSkgXAotICAgIHYoYm9vbCwgY2FsbFN0YXR1c1No
b3VsZFVzZUNhbGxFZGdlUHJvZmlsZSwgdHJ1ZSkgXAotICAgIHYoYm9vbCwgY2FsbEVkZ2VQcm9m
aWxlUmVhbGx5UHJvY2Vzc2VzTG9nLCB0cnVlKSBcCi0gICAgdihib29sLCBiYXNlbGluZURvZXND
YWxsRWRnZVByb2ZpbGluZywgZmFsc2UpIFwKLSAgICB2KGJvb2wsIGRmZ0RvZXNDYWxsRWRnZVBy
b2ZpbGluZywgdHJ1ZSkgXAotICAgIHYoYm9vbCwgZW5hYmxlQ2FsbEVkZ2VQcm9maWxpbmcsIHRy
dWUpIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUs
IDE1KSBcCisgICAgdih1bnNpZ25lZCwgbWF4UG9seW1vcnBoaWNDYWxsVmFyaWFudExpc3RTaXpl
Rm9yVG9wVGllciwgNSkgXAorICAgIHYodW5zaWduZWQsIG1heFBvbHltb3JwaGljQ2FsbFZhcmlh
bnRzRm9ySW5saW5pbmcsIDUpIFwKICAgICB2KHVuc2lnbmVkLCBmcmVxdWVudENhbGxUaHJlc2hv
bGQsIDIpIFwKKyAgICB2KGRvdWJsZSwgbWluaW11bUNhbGxUb0tub3duUmF0ZSwgMC41MSkgXAog
ICAgIHYoYm9vbCwgb3B0aW1pemVOYXRpdmVDYWxscywgZmFsc2UpIFwKICAgICB2KGJvb2wsIGVu
YWJsZU9iamVjdEFsbG9jYXRpb25TaW5raW5nLCB0cnVlKSBcCiAgICAgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjksMTMgKzM2
OSw2IEBAIFZNKiYgVk06OnNoYXJlZEluc3RhbmNlSW50ZXJuYWwoKQogICAgIHJldHVybiBzaGFy
ZWRJbnN0YW5jZTsKIH0KIAotQ2FsbEVkZ2VMb2cmIFZNOjplbnN1cmVDYWxsRWRnZUxvZygpCi17
Ci0gICAgaWYgKCFjYWxsRWRnZUxvZykKLSAgICAgICAgY2FsbEVkZ2VMb2cgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENhbGxFZGdlTG9nPigpOwotICAgIHJldHVybiAqY2FsbEVkZ2VMb2c7Ci19Ci0KICNp
ZiBFTkFCTEUoSklUKQogc3RhdGljIFRodW5rR2VuZXJhdG9yIHRodW5rR2VuZXJhdG9yRm9ySW50
cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMpCiB7CkBAIC00NTksOSArNDUyLDYgQEAgdm9pZCBW
TTo6c3RvcFNhbXBsaW5nKCkKIAogdm9pZCBWTTo6cHJlcGFyZVRvRGlzY2FyZENvZGUoKQogewot
ICAgIGlmIChjYWxsRWRnZUxvZykKLSAgICAgICAgY2FsbEVkZ2VMb2ctPnByb2Nlc3NMb2coKTsK
LSAgICAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51
bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsKICAgICAgICAgaWYgKERGRzo6V29ya2xpc3QqIHdv
cmtsaXN0ID0gREZHOjp3b3JrbGlzdEZvckluZGV4T3JOdWxsKGkpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rczsKIGNsYXNzIEJ1
aWx0aW5FeGVjdXRhYmxlczsKLWNsYXNzIENhbGxFZGdlTG9nOwogY2xhc3MgQ29kZUJsb2NrOwog
Y2xhc3MgQ29kZUNhY2hlOwogY2xhc3MgQ29tbW9uSWRlbnRpZmllcnM7CkBAIC0yMzgsOSArMjM3
LDYgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxERkc6OkxvbmdMaXZlZFN0YXRlPiBk
ZmdTdGF0ZTsKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsRWRnZUxvZz4gY2FsbEVkZ2VMb2c7Ci0gICAgQ2FsbEVkZ2VMb2cmIGVuc3VyZUNhbGxF
ZGdlTG9nKCk7Ci0KICAgICBWTVR5cGUgdm1UeXBlOwogICAgIENsaWVudERhdGEqIGNsaWVudERh
dGE7CiAgICAgVk1FbnRyeUZyYW1lKiB0b3BWTUVudHJ5RnJhbWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245607</attachid>
            <date>2015-01-28 20:39:59 -0800</date>
            <delta_ts>2015-01-29 11:16:29 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>147732</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc5MzMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NiBA
QAorMjAxNS0wMS0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcgc2hvdWxkIGJlIGJhc2VkIG9uIHBvbHltb3JwaGlj
IGNhbGwgaW5saW5lIGNhY2hpbmcgcmF0aGVyIHRoYW4gbG9nZ2luZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwNjYwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXaGVuIHdlIGZpcnN0IGlt
cGxlbWVudGVkIHBvbHltb3JwaGljIGNhbGwgaW5saW5pbmcsIHdlIGRpZCB0aGUgcHJvZmlsaW5n
IGJhc2VkIG9uIGEgY2FsbAorICAgICAgICBlZGdlIGxvZy4gVGhlIGlkZWEgd2FzIHRvIHN0b3Jl
IGVhY2ggY2FsbCBlZGdlIChhIHR1cGxlIG9mIGNhbGwgc2l0ZSBhbmQgY2FsbGVlKSBpbnRvIGEK
KyAgICAgICAgZ2xvYmFsIGxvZyB0aGF0IHdhcyBwcm9jZXNzZWQgbGF6aWx5LiBQcm9jZXNzaW5n
IHRoZSBsb2cgd291bGQgZ2l2ZSBwcmVjaXNlIGNvdW50cyBvZiBjYWxsCisgICAgICAgIGVkZ2Vz
LCBhbmQgY291bGQgYmUgdXNlZCB0byBkcml2ZSB3ZWxsLWluZm9ybWVkIGlubGluaW5nIGRlY2lz
aW9ucyAtIHBvbHltb3JwaGljIG9yIG5vdC4KKyAgICAgICAgVGhpcyB3YXMgYSBzcGVlZC11cCBv
biB0aHJvdWdocHV0IHRlc3RzIGJ1dCBhIHNsb3ctZG93biBmb3IgbGF0ZW5jeSB0ZXN0cy4gSXQg
d2FzIGEgbmV0IHdpbgorICAgICAgICBub25ldGhlbGVzcy4KKyAgICAgICAgCisgICAgICAgIEV4
cGVyaWVuY2Ugd2l0aCB0aGlzIGNvZGUgc2hvd3MgdGhyZWUgdGhpbmdzLiBGaXJzdCwgdGhlIGNh
bGwgZWRnZSBwcm9maWxlciBpcyBidWdneSBhbmQKKyAgICAgICAgY29tcGxleC4gSXQgd291bGQg
dGFrZSB3b3JrIHRvIGZpeCB0aGUgYnVncy4gU2Vjb25kLCB0aGUgY2FsbCBlZGdlIHByb2ZpbGVy
IGluY3VycyBsb3RzIG9mCisgICAgICAgIG92ZXJoZWFkIGZvciBsYXRlbmN5IGNvZGUgdGhhdCB3
ZSBjYXJlIGRlZXBseSBhYm91dC4gVGhpcmQsIGl0J3Mgbm90IGF0IGFsbCBjbGVhciB0aGF0Cisg
ICAgICAgIGhhdmluZyBjYWxsIGVkZ2UgY291bnRzIGZvciBldmVyeSBwb3NzaWJsZSBjYWxsZWUg
aXMgYW55IGJldHRlciB0aGFuIGp1c3QgaGF2aW5nIGNhbGwgZWRnZQorICAgICAgICBjb3VudHMg
Zm9yIHRoZSBsaW1pdGVkIG51bWJlciBvZiBjYWxsZWVzIHRoYXQgYW4gaW5saW5lIGNhY2hlIHdv
dWxkIGNhdGNoLgorICAgICAgICAKKyAgICAgICAgU28sIHRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUg
Y2FsbCBlZGdlIHByb2ZpbGVyIGFuZCByZXBsYWNlcyBpdCB3aXRoIGEgcG9seW1vcnBoaWMgY2Fs
bCBpbmxpbmUKKyAgICAgICAgY2FjaGUuIElmIHdlIG1pc3MgdGhlIGJhc2ljIGNhbGwgaW5saW5l
IGNhY2hlLCB3ZSBpbmZsYXRlIHRoZSBjYWNoZSB0byBiZSBhIGp1bXAgdG8gYW4KKyAgICAgICAg
b3V0LW9mLWxpbmUgc3R1YiB0aGF0IGNhc2VzIG9uIHRoZSBwcmV2aW91c2x5IGtub3duIGNhbGxl
ZXMuIElmIHRoYXQgbWlzc2VzIGFnYWluLCB0aGVuIHdlCisgICAgICAgIHJld3JpdGUgdGhhdCBz
dHViIHRvIGluY2x1ZGUgdGhlIG5ldyBjYWxsZWUuIFdlIGRvIHRoaXMgdXAgdG8gc29tZSBudW1i
ZXIgb2YgY2FsbGVlcy4gSWYgd2UKKyAgICAgICAgaGl0IHRoZSBsaW1pdCB0aGVuIHdlIHN3aXRj
aCB0byB1c2luZyBhIHBsYWluIHZpcnR1YWwgY2FsbC4KKyAgICAgICAgCisgICAgICAgIFN1YnN0
YW50aWFsIHNwZWVkLXVwIG9uIFY4U3BpZGVyOyB1bmRvZXMgdGhlIHNsb3ctZG93biB0aGF0IHRo
ZSBvcmlnaW5hbCBjYWxsIGVkZ2UgcHJvZmlsZXIKKyAgICAgICAgY2F1c2VkLiBNaWdodCBiZSBh
IFN1blNwaWRlciBzcGVlZC11cCAoYmVsb3cgMSUpLCBkZXBlbmRpbmcgb24gaGFyZHdhcmUuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9DYWxsRWRnZS5oOgor
ICAgICAgICAoSlNDOjpDYWxsRWRnZTo6Y291bnQpOgorICAgICAgICAoSlNDOjpDYWxsRWRnZTo6
Q2FsbEVkZ2UpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHA6CisgICAgICAgIChKU0M6OkNhbGxMaW5rSW5m
bzo6dW5saW5rKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtJbmZvOjp2aXNpdFdlYWspOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5mby5oOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OkNhbGxMaW5rU3Rh
dHVzKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21DYWxsTGlua0luZm8pOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua1N0YXR1czo6aXNDbG9zdXJlQ2FsbCk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rU3RhdHVzOjptYWtlQ2xvc3VyZUNhbGwpOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0
YXR1czo6ZHVtcCk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnJvbUNh
bGxFZGdlUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0
dXMuaDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OkNhbGxMaW5rU3RhdHVzKToKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6Q2FsbExp
bmtTdGF0dXM6OnZhcmlhbnRzKToKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OnNpemUp
OgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6YXQpOgorICAgICAgICAoSlNDOjpDYWxs
TGlua1N0YXR1czo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpj
YW5PcHRpbWl6ZSk6CisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjplZGdlcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkNhbGxMaW5rU3RhdHVzOjpjYW5UcnVzdENvdW50cyk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjp2
YXJpYW50TGlzdFdpdGhWYXJpYW50KToKKyAgICAgICAgKEpTQzo6ZGVzcGVjaWZpZWRWYXJpYW50
TGlzdCk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuaDoKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6On5Db2RlQmxvY2sp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpbmtJbmNvbWluZ1BvbHltb3JwaGljQ2FsbCk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rSW5jb21pbmdDYWxscyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKToKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0luY29taW5nQ2FsbEFs
cmVhZHlMaW5rZWQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkQ2Fs
bFdpdGhvdXRTZXR0aW5nUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlND
OjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25z
dGFudHMpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Y29tcGlsZUltcGwpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdO
b2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24pOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2Fm
ZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpUaWVyVXBDaGVja0luamVjdGlvblBoYXNlOjpyZW1vdmVGVExQcm9maWxpbmcpOiBEZWxl
dGVkLgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6
OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGppdC9CaW5hcnlTd2l0Y2guaDoKKyAgICAgICAg
KiBqaXQvQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0
L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvSklUQ2Fs
bC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0
L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6Cisg
ICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRp
b25zLmg6CisgICAgICAgIChKU0M6Om9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGxGb3IpOgor
ICAgICAgICAoSlNDOjpvcGVyYXRpb25MaW5rQ2xvc3VyZUNhbGxGb3IpOiBEZWxldGVkLgorICAg
ICAgICAqIGppdC9KSVRTdHViUm91dGluZS5oOgorICAgICAgICAqIGppdC9KSVRXcml0ZUJhcnJp
ZXIuaDoKKyAgICAgICAgKiBqaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsTm9kZTo6flBvbHltb3JwaGljQ2FsbE5v
ZGUpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxOb2RlOjp1bmxpbmspOgorICAgICAg
ICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxDYXNlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6UG9seW1v
cnBoaWNDYWxsU3R1YlJvdXRpbmU6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKToKKyAgICAg
ICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6On5Qb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZSk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2YXJp
YW50cyk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjplZGdlcyk6
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp2aXNpdFdlYWspOgor
ICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZTo6bWFya1JlcXVpcmVkT2Jq
ZWN0c0ludGVybmFsKToKKyAgICAgICAgKiBqaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbE5vZGU6OlBvbHltb3JwaGlj
Q2FsbE5vZGUpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0NhbGxDYXNlOjpQb2x5bW9ycGhp
Y0NhbGxDYXNlKToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNDYWxsQ2FzZTo6dmFyaWFudCk6
CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQ2FsbENhc2U6OmNvZGVCbG9jayk6CisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpsaW5rU2xvd0Zvcik6CisgICAgICAg
IChKU0M6OmxpbmtGb3IpOgorICAgICAgICAoSlNDOjpyZXZlcnRDYWxsKToKKyAgICAgICAgKEpT
Qzo6dW5saW5rRm9yKToKKyAgICAgICAgKEpTQzo6bGlua1ZpcnR1YWxGb3IpOgorICAgICAgICAo
SlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxs
KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVwYXRjaC5oOgorICAgICAgICAqIGppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsRm9yVGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5l
cmF0b3IpOgorICAgICAgICAoSlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsVGhhdFByZXNlcnZlc1Jl
Z3NUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbEZvclRodW5r
R2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bGlua0Nsb3N1cmVDYWxsVGh1bmtH
ZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpsaW5rQ2xvc3VyZUNhbGxUaGF0UHJl
c2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmg6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGxUaHVua0dlbmVy
YXRvckZvcik6CisgICAgICAgIChKU0M6OmxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yRm9y
KTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAg
IChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyk6CisgICAgICAgICogcnVu
dGltZS9PcHRpb25zLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6
OlZNOjpwcmVwYXJlVG9EaXNjYXJkQ29kZSk6CisgICAgICAgIChKU0M6OlZNOjplbnN1cmVDYWxs
RWRnZUxvZyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE1LTAxLTI4
ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlZCBm
YXN0TWFsbG9jRm9yYmlkIC8gZmFzdE1hbGxvY0FsbG93CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3Bw
CiAgICAgYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAogICAgIGJ5dGVjb2Rl
L0NhbGxFZGdlLmNwcAotICAgIGJ5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5jcHAKICAgICBieXRl
Y29kZS9DYWxsTGlua0luZm8uY3BwCiAgICAgYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCiAg
ICAgYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuY3BwCkBAIC0zMjcsNyArMzI2LDYgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAogICAgIGppdC9B
cml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAKICAgICBqaXQvQmluYXJ5U3dpdGNoLmNwcAot
ICAgIGppdC9DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmNwcAogICAgIGppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCiAg
ICAgaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5jcHAKQEAgLTM1MCw2ICszNDgsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGppdC9KSVRTdHVicy5jcHAKICAgICBqaXQvSklU
VGh1bmtzLmNwcAogICAgIGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAKKyAgICBqaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwCiAgICAgaml0L1JlZy5j
cHAKICAgICBqaXQvUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcAogICAg
IGppdC9SZWdpc3RlclNldC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzE0LDcgKzMxNCw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxC
eXRlY29kZUJhc2ljQmxvY2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxFZGdlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXENhbGxFZGdlUHJvZmlsZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua0luZm8uY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtTdGF0dXMuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbFZhcmlhbnQuY3BwIiAvPgpAQCAtNTk4LDcgKzU5
Nyw2IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQXJpdHlDaGVja0ZhaWxSZXR1
cm5UaHVua3MuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEFzc2VtYmx5
SGVscGVycy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQmluYXJ5U3dp
dGNoLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDbG9zdXJlQ2FsbFN0
dWJSb3V0aW5lLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxHQ0F3
YXJlSklUU3R1YlJvdXRpbmUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0
XEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIiAvPgpAQCAtNjIxLDYgKzYxOSw3IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caml0XEpJVFRodW5rcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxSZWcuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVy
YXRvci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUmVnaXN0ZXJTZXQu
Y3BwIiAvPgpAQCAtOTMxLDggKzkzMCw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlVXNlRGVmLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxDYWxsRWRnZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcQ2FsbEVkZ2VQcm9maWxlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua0luZm8uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rU3RhdHVzLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNl
dC5oIiAvPgpAQCAtMTMzMyw3ICsxMzMwLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGppdFxBc3NlbWJseUhlbHBlcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGpp
dFxCaW5hcnlTd2l0Y2guaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDQ2Fs
bEhlbHBlcnMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ29tcGFj
dEpJVENvZGVNYXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRh
YmxlQWxsb2NhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcRlBSSW5m
by5oIiAvPgpAQCAtMTM1Nyw2ICsxMzUzLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGppdFxKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFdyaXRlQmFycmllci5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEpTSW50ZXJmYWNlSklULmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZWcuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclNldC5oIiAvPgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yODEsMTMgKzI4MSw4IEBACiAJCTBGM0IzQTI4MTU0NEM5OTcwMDNFRDBGRiAv
KiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0EyNTE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGM0IzQTJCMTU0NzUwMDAwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0EyOTE1
NDc0RkY0MDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwICovOyB9OwogCQkwRjNCM0EyQzE1NDc1
MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBG
M0I3RTI2MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjAxOUExMUI4MDAwRDlCQzU2IC8qIENh
bGxFZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMEYzQjdFMjcxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyMTE5QTExQjgw
MDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmNwcCAqLzsgfTsKLQkJMEYzQjdFMjgxOUExMUI4
MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjIxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxFZGdl
UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTBGM0I3RTI5MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyMzE5
QTExQjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0I3RTJBMTlBMTFCODAwMEQ5
QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuY3Bw
ICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI1MTlBMTFC
ODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTBGM0I3RTJEMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRn
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNC
N0UyQzE5QTEyQUFFMDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OwogCQkwRjNEMEJCQzE5
NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQTE5NEE0MTQzMDBGQzlD
RjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAgKi87IH07CiAJCTBGM0QwQkJEMTk0QTQx
NDMwMEZDOUNGOSAvKiBDb25zdGFudFN0cnVjdHVyZUNoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyog
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAq
LzsgfTsKQEAgLTM1NSw2ICszNTAsOCBAQAogCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyog
REZHQXJyYXlNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjYzOTQ4MjE1RTQ4MTE0MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NEIyNzExQTc4NEJB
RjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY0QjI2RjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dp
dGNoLmNwcCAqLzsgfTsKIAkJMEY2NEIyNzIxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRj
aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NEIy
NzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAv
KiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICovOyB9OworCQkw
RjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBD
YWxsRWRnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjY2NkVCRTE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5l
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
NjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NjZFQkYxODM1NjZGOTAw
RDAxN0YxIC8qIEZ1bGxCeXRlY29kZUxpdmVuZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERG
R0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjY2NkVDMjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCAq
LzsgfTsKQEAgLTM4Niw4ICszODMsNiBAQAogCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyog
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEY3MTRDQTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuY3BwICovOyB9OwogCQkwRjcxNENBNTE2RUE5MkYyMDBGM0VCRUIgLyogREZHQmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY3MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkwRjczRDdBRTE2NUExNDJEMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjczRDdB
QjE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHAgKi87IH07Ci0J
CTBGNzNEN0FGMTY1QTE0MzAwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjczRDdBQzE2NUEx
NDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3
NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMDE2NTFDNjYxMDBBODBBRkUgLyogQVJNNjREaXNhc3Nl
bWJsZXIuY3BwICovOyB9OwogCQkwRjc1NzZEMjE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0
dWJSb3V0aW5lLmNwcCAqLzsgfTsKIAkJMEY3NTc2RDMxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNjAyLDYgKzU5Nyw4IEBACiAJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBP
cHRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsgfTsKIAkJMEZFNzIx
MUQxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzIxMUIxOTNCOUM1OTAwMzFGNkVEIC8q
IERGR1RyYW5zaXRpb24uY3BwICovOyB9OwogCQkwRkU3MjExRTE5M0I5QzU5MDAzMUY2RUQgLyog
REZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkU4MzQxNzFBNkVG
OTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODM0MTUxQTZFRjk3QjAwRDA0
ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcCAqLzsgfTsKKwkJMEZFODM0MTgx
QTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4MzQxNjFBNkVGOTdCMDBE
MDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkU4NTM0QjE3MjNDREE1MDBCNjE4RjUg
LyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVk
V2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4NTM0QzE3MjNDREE1MDBCNjE4RjUgLyogREZH
RGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9p
bnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZFOTVGNzkxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTk1Rjc3MThCNTY5NDcwMEI1
MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgKi87IH07CkBAIC0xOTUwLDEzICsxOTQ3LDggQEAK
IAkJMEYzQjNBMjUxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ0ZHU2ltcGxpZmljYXRpb25Q
aGFzZS5oOyBwYXRoID0gZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMjkxNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlk
YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhbGlkYXRl
LmNwcDsgcGF0aCA9IGRmZy9ERkdWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGM0IzQTJBMTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYWxpZGF0ZS5oOyBwYXRoID0gZGZnL0RGR1Zh
bGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0I3RTIwMTlBMTFCODAw
MEQ5QkM1NiAvKiBDYWxsRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YWxsRWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjNCN0UyMTE5QTExQjgw
MDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhbGxFZGdlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTBGM0I3RTIyMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRnZVByb2ZpbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2VQcm9maWxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGM0I3RTIzMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsRWRn
ZVByb2ZpbGVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxF
ZGdlUHJvZmlsZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdF
MjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTBGM0I3RTJDMTlBMTJBQUUwMEQ5QkM1NiAvKiBDYWxsRWRnZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRWRnZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0QwQkJBMTk0QTQxNDMwMEZDOUNGOSAvKiBDb25z
dGFudFN0cnVjdHVyZUNoZWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjNEMEJCQjE5NEE0MTQzMDBGQzlDRjkgLyogQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudFN0cnVjdHVyZUNoZWNr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3
RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwOyBwYXRoID0gZGZnL0RGR1ByZVBvc3RO
dW1iZXJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAyNSw2ICsyMDE3
LDggQEAKIAkJMEY2Mzk0ODIxNUU0ODExNDAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBcnJheU1vZGUuaDsgcGF0aCA9IGRmZy9E
RkdBcnJheU1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NEIyNkYxQTc4
NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBCaW5hcnlTd2l0Y2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjY0QjI3MDFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpbmFyeVN3aXRjaC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbEVkZ2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjY0QjI3ODFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVk
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbEVkZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjY2NkVCRjE4MzU2NkY5MDBEMDE3RjEgLyogRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVsbEJ5dGVjb2RlTGl2
ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NjZFQzIxODM1NjcyQjAw
RDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdBdmFpbGFiaWxpdHkuY3BwOyBwYXRoID0gZGZnL0RGR0F2YWlsYWJpbGl0
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDU2LDggKzIwNTAsNiBAQAog
CQkwRjcwMjVBODE3MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1v
bi5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3
MTRDQTIxNkVBOTJFRDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFja3dhcmRzUHJvcGFnYXRpb25Q
aGFzZS5oOyBwYXRoID0gZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY3M0Q3QUIxNjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1
cmVDYWxsU3R1YlJvdXRpbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ2xvc3VyZUNhbGxTdHViUm91dGluZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTBGNzNEN0FDMTY1QTE0MkEwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENE
IC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NTc2RDExOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29y
Q2FsbEpJVFN0dWJSb3V0aW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFj
Y2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzY2RDFDMTVBNTAyOEQwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRTdHViUm91dGluZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjI4NCw2ICsyMjc2LDggQEAKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2
QzQ4IC8qIE9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU3MjExQjE5M0I5QzU5MDAzMUY2
RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdUcmFuc2l0aW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8qIERG
R1RyYW5zaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVHJhbnNp
dGlvbi5oOyBwYXRoID0gZGZnL0RGR1RyYW5zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFODM0MTUxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
ODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThG
NSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0
QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOyBwYXRoID0gZGZn
L0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkU5NUY3NzE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRGF0YVNlY3Rpb24uY3BwOyBwYXRoID0gZnRs
L0ZUTERhdGFTZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NDcs
OCArMzc0MSw2IEBACiAJCQkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRj
aC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5o
ICovLAogCQkJCTBGMjRFNTNEMTdFQTlGNTkwMEFCQjIxNyAvKiBDQ2FsbEhlbHBlcnMuaCAqLywK
LQkJCQkwRjczRDdBQjE2NUExNDJBMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5j
cHAgKi8sCi0JCQkJMEY3M0Q3QUMxNjVBMTQyQTAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJv
dXRpbmUuaCAqLywKIAkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENv
ZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFi
bGVBbGxvY2F0b3IuaCAqLywKQEAgLTM3OTYsNiArMzc4OCw4IEBACiAJCQkJMEZDNzEyRTExN0NE
ODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8s
CiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovLAog
CQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAorCQkJ
CTBGRTgzNDE1MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5j
cHAgKi8sCisJCQkJMEZFODM0MTYxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lLmggKi8sCiAJCQkJMEZBN0E4RTkxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAg
Ki8sCiAJCQkJMEZBN0E4RUExOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5oICovLAogCQkJCTBGNkIx
Q0JCMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0
b3IuY3BwICovLApAQCAtNTAyNywxMSArNTAyMSw4IEBACiAJCQkJMEY2NjZFQkUxODM1NjZGOTAw
RDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLywKIAkJCQkwRjg4
NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAqLywKIAkJCQkwRjgwMjNF
OTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8sCi0JCQkJMEYzQjdFMkMxOUExMkFB
RTAwRDlCQzU2IC8qIENhbGxFZGdlLmNwcCAqLywKLQkJCQkwRjNCN0UyMDE5QTExQjgwMDBEOUJD
NTYgLyogQ2FsbEVkZ2UuaCAqLywKLQkJCQkwRjNCN0UyMTE5QTExQjgwMDBEOUJDNTYgLyogQ2Fs
bEVkZ2VQcm9maWxlLmNwcCAqLywKLQkJCQkwRjNCN0UyMjE5QTExQjgwMDBEOUJDNTYgLyogQ2Fs
bEVkZ2VQcm9maWxlLmggKi8sCi0JCQkJMEYzQjdFMjMxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxF
ZGdlUHJvZmlsZUlubGluZXMuaCAqLywKKwkJCQkwRjY0QjI3NzFBNzk1N0IyMDA2RTRFNjYgLyog
Q2FsbEVkZ2UuY3BwICovLAorCQkJCTBGNjRCMjc4MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRn
ZS5oICovLAogCQkJCTBGMEI4M0FFMTRCQ0Y3MTQwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3Bw
ICovLAogCQkJCTBGMEI4M0FGMTRCQ0Y3MTQwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uaCAqLywK
IAkJCQkwRjkzMzI5MzE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwICovLApA
QCAtNTQ4Myw3ICs1NDc0LDYgQEAKIAkJCQkwRjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyogREZH
RnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTQyMTdFQTlGNTkwMEFCQjIx
NyAvKiBDQ2FsbEhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNkFBQUU1MEUxRjQyNjUw
MEFEODdEOCAvKiBDbGFzc0luZm8uaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNzNEN0FGMTY1QTE0
MzAwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NjlBMDc5NzBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjhGOTQ0MTE2Njc2MzMyMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDOTdGMzQxODIwMjBENzAwMkM5QjI2IC8qIENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCkBAIC01NTI3LDYgKzU1MTcsNyBAQAogCQkJ
CUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxMTY2MDIwRTE5OTdCNDAwODA2NkREIC8qIERhdGVJbnN0YW5j
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2NEIyN0ExQTc5NTdCMjAwNkU0RTY2IC8qIENhbGxF
ZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEExNTYzMjEwOTY2MzY1MDA2RkEyNjAgLyogRGF0
ZUluc3RhbmNlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRDMEUxNzEzNUUwMDJD
N0U4MiAvKiBEYXRlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDNFODBFMTcx
OEY0MDAyQzdFODIgLyogRGF0ZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNTU3
NCw3ICs1NTY1LDYgQEAKIAkJCQkwRkZGQzk1QTE0RUY5MEE5MDBDNzI1MzIgLyogREZHQ1NFUGhh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAvKiBERkdE
Q0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjJCOUExNzJGMDUwMTAwN0RCREE1IC8q
IERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYzQjdFMjgxOUEx
MUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJD
MEY3Q0UxN0JCRkM1QjAwNDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFODUzNEMxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBv
aW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI5ODFGRDkxN0JBRUU0QjAwQTNCQzk4IC8qIERG
R0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC01ODY1LDcgKzU4NTUs
NiBAQAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDE2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xleGljYWxF
bnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQwNDgwMTMxMDIxQTFEOTAwOEU3RjAx
IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjNCN0UyOTE5QTEx
QjgwMDBEOUJDNTYgLyogQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzJDRjM5QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTc2MTQwRDIxODI5ODJDQjAwNzUwNjI0IC8qIEpTQXJndW1lbnRzSXRl
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U0FycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTYxODksNyArNjE3OCw2IEBACiAJCQkJRTQ5REMx
NkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRl
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUUxNUVEOEU0NjAwRjE2N0IyIC8qIFNwYXJz
ZUFycmF5VmFsdWVNYXAuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGM0I3RTI2MTlBMTFCODAwMEQ5
QkM1NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczODY1NTQxMTg2OTdCNDAw
NTQwMjc5IC8qIFNwZWNpYWxpemVkVGh1bmtKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTU0
MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEODJFNTQxNDFEQUVFRTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTYyMzYsNiArNjIyNCw3IEBACiAJCQkJMEZGNDI3NDkxNThFQkU5MTAwNENCOUZG
IC8qIHVkaXM4Nl90eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUFCMzkxNzk5RTRCMjAw
RDI4MzNEIC8qIFVEaXM4NkRpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFG
NDExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkU4MzQxODFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2NjczOUQzMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZXaXRo
RnJhY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQyMTdBREI1RjMwMDVBQjE3NCAv
KiBVaW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGM0YxN0FEQjVGMzAwNUFC
MTc0IC8qIFVpbnQ4QXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNjc3NCw3ICs2NzYzLDYgQEAK
IAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFNDE5RDBCQTdEMDBCMUQxQjUgLyogREZHSW5z
ZXJ0T1NSSGludHNGb3JVcGRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY3M0Q3QUUxNjVB
MTQyRDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTY5QTA3OTYwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjhGOTQ0MDE2Njc2MzMwMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkM5N0YzMzE4MjAyMEQ3MDAyQzlCMjYgLyogQ29kZUJsb2Nr
SmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjc4OSw2ICs2Nzc3
LDcgQEAKIAkJCQkwRjlDNUU1RTE4RTM1RjVFMDBENDMxQzMgLyogRlRMRFdBUkZSZWdpc3Rlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJFOTggLyogQ29tbW9u
U2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZG
MyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
NjRCMjc5MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAgLyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIxMDdFQzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2QjE2RDgxMkVCNUI1OTAwMUJFQzFCIC8qIENvbnNlcnZh
dGl2ZVJvb3RzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjk2MCw4ICs2OTQ5LDggQEAKIAkJCQkw
RjIzNUJENTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEODE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFRo
dW5rR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRBMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExFeGl0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEYzQjdFMjcxOUEx
MUI4MDAwRDlCQzU2IC8qIENhbGxFZGdlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0YyOTk2QjE3QTBCQjY3MDAxMDQxN0EgLyogRlRMRmFpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkU4MzQxNzFBNkVGOTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMTkxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTEZv
ck9TUkVudHJ5SklUQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI1RjFBRjE4MTYzNUYz
MDA1MjJGMzkgLyogRlRMSW5saW5lQ2FjaGVTaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RUEwQTI4MTcwOTYyM0IwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzE1Myw3ICs3MTQyLDYgQEAKIAkJCQkwRjQ2ODBEMjE0QkJEMTY1MDBC
RkUyNzIgLyogTExJbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzhCMDExMTdDRjA3
ODAwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0
NjgwQTgxNEJBN0ZBQjAwQkZFMjcyIC8qIExMSW50RXhjZXB0aW9ucy5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkwRjNCN0UyRDE5QTEyQUFFMDBEOUJDNTYgLyogQ2FsbEVkZ2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4MzlDMTRCQ0Y0NjMwMDg4NUI0RiAvKiBMTEludFRo
dW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNFRkFDRDE4MDVFNzU1MDA0NzJDRTQgLyog
TExWTUFQSS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsRWRnZS5oCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTcgKzMwLDE1IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi10eXBlZGVmIHVpbnQxNl90IENhbGxFZGdlQ291bnRUeXBl
OwotCiBjbGFzcyBDYWxsRWRnZSB7CiBwdWJsaWM6CiAgICAgQ2FsbEVkZ2UoKTsKLSAgICBDYWxs
RWRnZShDYWxsVmFyaWFudCwgQ2FsbEVkZ2VDb3VudFR5cGUpOworICAgIENhbGxFZGdlKENhbGxW
YXJpYW50LCB1aW50MzJfdCk7CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhbV9jYWxsZWU7IH0KICAgICAKICAgICBDYWxsVmFyaWFudCBjYWxsZWUoKSBjb25zdCB7
IHJldHVybiBtX2NhbGxlZTsgfQotICAgIENhbGxFZGdlQ291bnRUeXBlIGNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9jb3VudDsgfQorICAgIHVpbnQzMl90IGNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9jb3VudDsgfQogICAgIAogICAgIENhbGxFZGdlIGRlc3BlY2lmaWVkQ2xvc3VyZSgpIGNvbnN0
CiAgICAgewpAQCAtNDksMTIgKzQ3LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKLXB1YmxpYzoKK3ByaXZhdGU6CiAgICAgQ2FsbFZh
cmlhbnQgbV9jYWxsZWU7Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV9jb3VudDsKKyAgICB1aW50
MzJfdCBtX2NvdW50OwogfTsKIAotaW5saW5lIENhbGxFZGdlOjpDYWxsRWRnZShDYWxsVmFyaWFu
dCBjYWxsZWUsIENhbGxFZGdlQ291bnRUeXBlIGNvdW50KQoraW5saW5lIENhbGxFZGdlOjpDYWxs
RWRnZShDYWxsVmFyaWFudCBjYWxsZWUsIHVpbnQzMl90IGNvdW50KQogICAgIDogbV9jYWxsZWUo
Y2FsbGVlKQogICAgICwgbV9jb3VudChjb3VudCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsRWRnZVByb2ZpbGUuY3BwCShyZXZpc2lvbiAxNzky
NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwzNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
Q2FsbEVkZ2VQcm9maWxlLmgiCi0KLSNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRl
ICJDYWxsRWRnZVByb2ZpbGVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgot
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUNhbGxFZGdlTGlz
dCBDYWxsRWRnZVByb2ZpbGU6OmNhbGxFZGdlcygpIGNvbnN0Ci17Ci0gICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAKLSAgICBDYWxsRWRnZUxpc3QgcmVzdWx0Owot
ICAgIAotICAgIENhbGxWYXJpYW50IHByaW1hcnlDYWxsZWUgPSBtX3ByaW1hcnlDYWxsZWU7Ci0g
ICAgQ2FsbEVkZ2VDb3VudFR5cGUgbnVtQ2FsbHNUb1ByaW1hcnkgPSBtX251bUNhbGxzVG9Qcmlt
YXJ5OwotICAgIC8vIERlZmVuZCBhZ2FpbnN0IHJhY2VzLiBUaGVzZSBmaWVsZHMgYXJlIG1vZGlm
aWVkIGJ5IHRoZSBsb2cgcHJvY2Vzc29yIHdpdGhvdXQgbG9ja2luZy4KLSAgICBpZiAoISFwcmlt
YXJ5Q2FsbGVlICYmIG51bUNhbGxzVG9QcmltYXJ5KQotICAgICAgICByZXN1bHQuYXBwZW5kKENh
bGxFZGdlKHByaW1hcnlDYWxsZWUsIG51bUNhbGxzVG9QcmltYXJ5KSk7Ci0gICAgCi0gICAgaWYg
KG1fb3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGlmIHRoZSBwcmlt
YXJ5IHRocmVhZCBoYWQganVzdCBjcmVhdGVkIGEgbV9vdGhlckNhbGxlcyB3aGlsZSBsb2cKLSAg
ICAgICAgLy8gcHJvY2Vzc2luZywgd2Ugc2VlIGEgY29uc2lzdGVudGx5IGNyZWF0ZWQgb25lLiBU
aGUgbG9jayBiZWluZyBoZWxkIGlzIGluc3VmZmljaWVudCBmb3IKLSAgICAgICAgLy8gdGhpcywg
c2luY2UgdGhlIGxvZyBwcm9jZXNzb3Igd2lsbCBvbmx5IGdyYWIgdGhlIGxvY2sgd2hlbiBtZXJn
aW5nIHRoZSBzZWNvbmRhcnkKLSAgICAgICAgLy8gc3BlY3RydW0gaW50byB0aGUgcHJpbWFyeSBv
bmUgYnV0IG1heSBzdGlsbCBjcmVhdGUgdGhlIGRhdGEgc3RydWN0dXJlIHdpdGhvdXQgaG9sZGlu
ZwotICAgICAgICAvLyBsb2Nrcy4KLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAg
ICAgIGZvciAoQ2FsbEVkZ2UmIGVudHJ5IDogbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkKSB7
Ci0gICAgICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGUg
cHJpbWFyeSBkdXBsaWNhdGVzIGFuIGVudHJ5IGluIHRoZSBzZWNvbmRhcnkKLSAgICAgICAgICAg
IC8vIHNwZWN0cnVtLiBUaGF0IGNhbiBoYXBwZW4gd2hlbiB0aGUgR0MgcmVtb3ZlcyB0aGUgcHJp
bWFyeS4gV2UgY291bGQgaGF2ZSB0aGUgR0MgZml4Ci0gICAgICAgICAgICAvLyB0aGUgc2l0dWF0
aW9uIGJ5IGNoYW5naW5nIHRoZSBwcmltYXJ5IHRvIGJlIHNvbWV0aGluZyBmcm9tIHRoZSBzZWNv
bmRhcnkgc3BlY3RydW0sCi0gICAgICAgICAgICAvLyBidXQgdGhpcyBmaXggc2VlbXMgc2ltcGxl
ciB0byBpbXBsZW1lbnQgYW5kIGFsc28gY2hlYXBlci4KLSAgICAgICAgICAgIGlmIChlbnRyeS5j
YWxsZWUoKSA9PSByZXN1bHRbMF0uY2FsbGVlKCkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHRb
MF0gPSBDYWxsRWRnZShyZXN1bHRbMF0uY2FsbGVlKCksIGVudHJ5LmNvdW50KCkgKyByZXN1bHRb
MF0uY291bnQoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZW50cnkpOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIHN0ZDo6c29ydChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgp
LCBbXSAoY29uc3QgQ2FsbEVkZ2UmIGEsIGNvbnN0IENhbGxFZGdlJiBiKSAtPiBib29sIHsKLSAg
ICAgICAgICAgIHJldHVybiBhLmNvdW50KCkgPiBiLmNvdW50KCk7Ci0gICAgICAgIH0pOwotICAg
IAotICAgIGlmIChyZXN1bHQuc2l6ZSgpID49IDIpCi0gICAgICAgIEFTU0VSVChyZXN1bHRbMF0u
Y291bnQoKSA+PSByZXN1bHQubGFzdCgpLmNvdW50KCkpOwotICAgIAotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLUNhbGxFZGdlQ291bnRUeXBlIENhbGxFZGdlUHJvZmlsZTo6bnVtQ2FsbHNUb0tu
b3duQ2VsbHMoKSBjb25zdAotewotICAgIENhbGxFZGdlQ291bnRUeXBlIHJlc3VsdCA9IDA7Ci0g
ICAgZm9yIChDYWxsRWRnZSYgZWRnZSA6IGNhbGxFZGdlcygpKQotICAgICAgICByZXN1bHQgKz0g
ZWRnZS5jb3VudCgpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBib29sIHdvcnRo
RGVzcGVjaWZ5aW5nKGNvbnN0IENhbGxWYXJpYW50JiB2YXJpYW50KQotewotICAgIHJldHVybiAh
SGVhcDo6aXNNYXJrZWQodmFyaWFudC5yYXdDYWxsZWVDZWxsKCkpCi0gICAgICAgICYmIEhlYXA6
OmlzTWFya2VkKHZhcmlhbnQuZGVzcGVjaWZpZWRDbG9zdXJlKCkucmF3Q2FsbGVlQ2VsbCgpKTsK
LX0KLQotYm9vbCBDYWxsRWRnZVByb2ZpbGU6OndvcnRoRGVzcGVjaWZ5aW5nKCkKLXsKLSAgICBp
ZiAobV9jbG9zdXJlc0FyZURlc3BlY2lmaWVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgYm9vbCBkaWRTZWVFbnRyeSA9IGZhbHNlOwotICAgIAotICAgIGlmICghIW1fcHJpbWFy
eUNhbGxlZSkgewotICAgICAgICBkaWRTZWVFbnRyeSA9IHRydWU7Ci0gICAgICAgIGlmICghSlND
Ojp3b3J0aERlc3BlY2lmeWluZyhtX3ByaW1hcnlDYWxsZWUpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9vdGhlckNhbGxlZXMpIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgZGlkU2VlRW50cnkgPSB0cnVlOwotICAgICAgICAgICAgaWYgKCFK
U0M6OndvcnRoRGVzcGVjaWZ5aW5nKG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jYWxs
ZWUoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBkaWRTZWVFbnRyeTsKLX0KLQotdm9pZCBDYWxsRWRnZVByb2ZpbGU6
OnZpc2l0V2VhaygpCi17Ci0gICAgaWYgKCFtX3ByaW1hcnlDYWxsZWUgJiYgIW1fb3RoZXJDYWxs
ZWVzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIobV9sb2NrKTsKLSAgICAKLSAgICAvLyBTZWUgaWYgYW55dGhpbmcgaXMgZGVhZCBhbmQgaWYg
dGhhdCBjYW4gYmUgcmVjdGlmaWVkIGJ5IGRlc3BlY2lmeWluZy4KLSAgICBpZiAod29ydGhEZXNw
ZWNpZnlpbmcoKSkgewotICAgICAgICBDYWxsU3BlY3RydW0gbmV3U3BlY3RydW07Ci0gICAgICAg
IAotICAgICAgICBpZiAoISFtX3ByaW1hcnlDYWxsZWUpCi0gICAgICAgICAgICBuZXdTcGVjdHJ1
bS5hZGQobV9wcmltYXJ5Q2FsbGVlLmRlc3BlY2lmaWVkQ2xvc3VyZSgpLCBtX251bUNhbGxzVG9Q
cmltYXJ5KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX290aGVyQ2FsbGVlcykgewotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLnNpemUo
KTsgaS0tOykgewotICAgICAgICAgICAgICAgIG5ld1NwZWN0cnVtLmFkZCgKLSAgICAgICAgICAg
ICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ldLmNhbGxlZSgpLmRlc3BlY2lm
aWVkQ2xvc3VyZSgpLAotICAgICAgICAgICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9j
ZXNzZWRbaV0uY291bnQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIFZlY3RvcjxDYWxsU3BlY3RydW06OktleUFuZENvdW50PiBsaXN0ID0gbmV3U3BlY3Ry
dW0uYnVpbGRMaXN0KCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGxpc3Quc2l6ZSgpKTsKLSAg
ICAgICAgbV9wcmltYXJ5Q2FsbGVlID0gbGlzdC5sYXN0KCkua2V5OwotICAgICAgICBtX251bUNh
bGxzVG9QcmltYXJ5ID0gbGlzdC5sYXN0KCkuY291bnQ7Ci0gICAgICAgIAotICAgICAgICBpZiAo
bV9vdGhlckNhbGxlZXMpIHsKLSAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3Nl
ZC5jbGVhcigpOwotCi0gICAgICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGEgc2l0dWF0aW9uIHdo
ZXJlIHRoZSBHQyBjbGVhcnMgdGhlIHByaW1hcnkgYW5kIHRoZW4gbG9nIHByb2Nlc3NpbmcKLSAg
ICAgICAgICAgIC8vIHJlaW5zdGF0ZXMgaXQgd2l0aG91dCBldmVyIGRvaW5nIGFuIGFkZFNsb3cg
YW5kIHN1YnNlcXVlbnQgbWVyZ2VCYWNrLiBJbiBzdWNoIGEgY2FzZQotICAgICAgICAgICAgLy8g
dGhlIHByaW1hcnkgY291bGQgZHVwbGljYXRlIGFuIGVudHJ5IGluIG90aGVyQ2FsbGVlcywgd2hp
Y2ggbWVhbnMgdGhhdCBldmVuIHRob3VnaCB3ZQotICAgICAgICAgICAgLy8gaGFkIGFuIG90aGVy
Q2FsbGVlcyBvYmplY3QsIHRoZSBsaXN0IHNpemUgaXMganVzdCAxLgotICAgICAgICAgICAgaWYg
KGxpc3Quc2l6ZSgpID49IDIpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBs
aXN0LnNpemUoKSAtIDE7IGktLTspCi0gICAgICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVz
LT5tX3Byb2Nlc3NlZC5hcHBlbmQoQ2FsbEVkZ2UobGlzdFtpXS5rZXksIGxpc3RbaV0uY291bnQp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9jbG9zdXJl
c0FyZURlc3BlY2lmaWVkID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKCEhbV9wcmltYXJ5Q2FsbGVlICYmICFIZWFwOjppc01hcmtlZChtX3By
aW1hcnlDYWxsZWUucmF3Q2FsbGVlQ2VsbCgpKSkgewotICAgICAgICBtX251bUNhbGxzVG9Vbmtu
b3duQ2VsbCArPSBtX251bUNhbGxzVG9QcmltYXJ5OwotICAgICAgICAKLSAgICAgICAgbV9wcmlt
YXJ5Q2FsbGVlID0gQ2FsbFZhcmlhbnQoKTsKLSAgICAgICAgbV9udW1DYWxsc1RvUHJpbWFyeSA9
IDA7Ci0gICAgfQotICAgIAotICAgIGlmIChtX290aGVyQ2FsbGVlcykgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkLnNpemUoKTsg
aSsrKSB7Ci0gICAgICAgICAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9vdGhlckNhbGxlZXMtPm1f
cHJvY2Vzc2VkW2ldLmNhbGxlZSgpLnJhd0NhbGxlZUNlbGwoKSkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fbnVtQ2FsbHNUb1Vua25vd25D
ZWxsICs9IG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jb3VudCgpOwotICAgICAgICAg
ICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2VkW2ktLV0gPSBtX290aGVyQ2FsbGVlcy0+bV9w
cm9jZXNzZWQubGFzdCgpOwotICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2Vk
LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gT25seSBleGlz
dHMgd2hpbGUgd2UgYXJlIHByb2Nlc3NpbmcgdGhlIGxvZy4KLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIW1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtKTsKLSAgICB9Ci19Ci0KLXZv
aWQgQ2FsbEVkZ2VQcm9maWxlOjphZGRTbG93KENhbGxWYXJpYW50IGNhbGxlZSwgQ2FsbEVkZ2VQ
cm9maWxlVmVjdG9yJiBtZXJnZUJhY2tMb2cpCi17Ci0gICAgLy8gVGhpcyBleGlzdHMgdG8gaGFu
ZGxlIGNhc2VzIHdoZXJlIHRoZSBzcGVjdHJ1bSB3YXNuJ3QgY3JlYXRlZCB5ZXQsIG9yIHdlJ3Jl
IHN0b3JpbmcgdG8gYQotICAgIC8vIHBhcnRpY3VsYXIgc3BlY3RydW0gZm9yIHRoZSBmaXJzdCB0
aW1lIGR1cmluZyBhIGxvZyBwcm9jZXNzaW5nIGl0ZXJhdGlvbi4KLSAgICAKLSAgICBpZiAoIW1f
b3RoZXJDYWxsZWVzKSB7Ci0gICAgICAgIG1fb3RoZXJDYWxsZWVzID0gc3RkOjptYWtlX3VuaXF1
ZTxTZWNvbmRhcnk+KCk7Ci0gICAgICAgIC8vIElmIGEgY29tcGlsZXIgdGhyZWFkIG5vdGljZXMg
dGhlIG1fb3RoZXJDYWxsZWVzIGJlaW5nIG5vbi1udWxsLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZQot
ICAgICAgICAvLyB0aGF0IGl0IHNlZXMgYSBmdWxseSBjcmVhdGVkIG9uZS4KLSAgICAgICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFtX290aGVyQ2FsbGVl
cy0+bV90ZW1wb3JhcnlTcGVjdHJ1bSkgewotICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV90ZW1w
b3JhcnlTcGVjdHJ1bSA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbFNwZWN0cnVtPigpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWQuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV90ZW1wb3JhcnlTcGVjdHJ1bS0+
YWRkKAotICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nlc3NlZFtpXS5jYWxs
ZWUoKSwKLSAgICAgICAgICAgICAgICBtX290aGVyQ2FsbGVlcy0+bV9wcm9jZXNzZWRbaV0uY291
bnQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0
aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3JlIHNlZWluZyB0aGlzIHByb2ZpbGUgZHVyaW5nIHRo
aXMgbG9nCi0gICAgICAgIC8vIHByb2Nlc3NpbmcgaXRlcmF0aW9uLgotICAgICAgICBtZXJnZUJh
Y2tMb2cuYXBwZW5kKHRoaXMpOwotICAgIH0KLSAgICAKLSAgICBtX290aGVyQ2FsbGVlcy0+bV90
ZW1wb3JhcnlTcGVjdHJ1bS0+YWRkKGNhbGxlZSk7Ci19Ci0KLXZvaWQgQ2FsbEVkZ2VQcm9maWxl
OjptZXJnZUJhY2soKQotewotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7
Ci0gICAgCi0gICAgUkVMRUFTRV9BU1NFUlQobV9vdGhlckNhbGxlZXMpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNwZWN0cnVtKTsKLSAgICAKLSAgICBp
ZiAoISFtX3ByaW1hcnlDYWxsZWUpCi0gICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFy
eVNwZWN0cnVtLT5hZGQobV9wcmltYXJ5Q2FsbGVlLCBtX251bUNhbGxzVG9QcmltYXJ5KTsKLSAg
ICAKLSAgICBpZiAoIW1fY2xvc3VyZXNBcmVEZXNwZWNpZmllZCkgewotICAgICAgICBDYWxsU3Bl
Y3RydW0gbmV3U3BlY3RydW07Ci0gICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqbV9vdGhlckNh
bGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0pCi0gICAgICAgICAgICBuZXdTcGVjdHJ1bS5hZGQo
ZW50cnkua2V5LmRlc3BlY2lmaWVkQ2xvc3VyZSgpLCBlbnRyeS52YWx1ZSk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAobmV3U3BlY3RydW0uc2l6ZSgpIDwgbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9y
YXJ5U3BlY3RydW0tPnNpemUoKSkgewotICAgICAgICAgICAgKm1fb3RoZXJDYWxsZWVzLT5tX3Rl
bXBvcmFyeVNwZWN0cnVtID0gbmV3U3BlY3RydW07Ci0gICAgICAgICAgICBtX2Nsb3N1cmVzQXJl
RGVzcGVjaWZpZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIFZlY3RvcjxD
YWxsU3BlY3RydW06OktleUFuZENvdW50PiBsaXN0ID0gbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9y
YXJ5U3BlY3RydW0tPmJ1aWxkTGlzdCgpOwotICAgIG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFy
eVNwZWN0cnVtID0gbnVsbHB0cjsKLSAgICAKLSAgICBtX3ByaW1hcnlDYWxsZWUgPSBsaXN0Lmxh
c3QoKS5rZXk7Ci0gICAgbV9udW1DYWxsc1RvUHJpbWFyeSA9IGxpc3QubGFzdCgpLmNvdW50Owot
ICAgIGxpc3QucmVtb3ZlTGFzdCgpOwotICAgIAotICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nl
c3NlZC5jbGVhcigpOwotICAgIGZvciAodW5zaWduZWQgY291bnQgPSBtYXhLbm93bkNhbGxlZXM7
IGNvdW50LS0gJiYgIWxpc3QuaXNFbXB0eSgpOykgewotICAgICAgICBtX290aGVyQ2FsbGVlcy0+
bV9wcm9jZXNzZWQuYXBwZW5kKENhbGxFZGdlKGxpc3QubGFzdCgpLmtleSwgbGlzdC5sYXN0KCku
Y291bnQpKTsKLSAgICAgICAgbGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAgfQotICAgIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IGxpc3Quc2l6ZSgpOyBpLS07KQotICAgICAgICBtX251bUNhbGxzVG9V
bmtub3duQ2VsbCArPSBsaXN0W2ldLmNvdW50OwotfQotCi12b2lkIENhbGxFZGdlUHJvZmlsZTo6
ZmFkZUJ5SGFsZigpCi17Ci0gICAgbV9udW1DYWxsc1RvUHJpbWFyeSA+Pj0gMTsKLSAgICBtX251
bUNhbGxzVG9Ob3RDZWxsID4+PSAxOwotICAgIG1fbnVtQ2FsbHNUb1Vua25vd25DZWxsID4+PSAx
OwotICAgIG1fdG90YWxDb3VudCA+Pj0gMTsKLSAgICAKLSAgICBpZiAobV9vdGhlckNhbGxlZXMp
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2Vk
LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vzc2Vk
W2ldID0gQ2FsbEVkZ2UoCi0gICAgICAgICAgICAgICAgbV9vdGhlckNhbGxlZXMtPm1fcHJvY2Vz
c2VkW2ldLmNhbGxlZSgpLAotICAgICAgICAgICAgICAgIG1fb3RoZXJDYWxsZWVzLT5tX3Byb2Nl
c3NlZFtpXS5jb3VudCgpID4+IDEpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
bV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0pIHsKLSAgICAgICAgICAgIGZvciAo
YXV0byYgZW50cnkgOiAqbV9vdGhlckNhbGxlZXMtPm1fdGVtcG9yYXJ5U3BlY3RydW0pCi0gICAg
ICAgICAgICAgICAgZW50cnkudmFsdWUgPj49IDE7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUNh
bGxFZGdlTG9nOjpDYWxsRWRnZUxvZygpCi0gICAgOiBtX3NjYWxlZExvZ0luZGV4KGxvZ1NpemUg
KiBzaXplb2YoRW50cnkpKQotewotICAgIEFTU0VSVCghKG1fc2NhbGVkTG9nSW5kZXggJSBzaXpl
b2YoRW50cnkpKSk7Ci19Ci0KLUNhbGxFZGdlTG9nOjp+Q2FsbEVkZ2VMb2coKSB7IH0KLQotYm9v
bCBDYWxsRWRnZUxvZzo6aXNFbmFibGVkKCkKLXsKLSAgICByZXR1cm4gT3B0aW9uczo6ZW5hYmxl
Q2FsbEVkZ2VQcm9maWxpbmcoKSAmJiBPcHRpb25zOjp1c2VGVExKSVQoKTsKLX0KLQotI2lmIEVO
QUJMRShKSVQpCi0KLWV4dGVybiAiQyIgSklUX09QRVJBVElPTiB2b2lkIG9wZXJhdGlvblByb2Nl
c3NDYWxsRWRnZUxvZyhDYWxsRWRnZUxvZyopIFdURl9JTlRFUk5BTDsKLWV4dGVybiAiQyIgSklU
X09QRVJBVElPTiB2b2lkIG9wZXJhdGlvblByb2Nlc3NDYWxsRWRnZUxvZyhDYWxsRWRnZUxvZyog
bG9nKQotewotICAgIGxvZy0+cHJvY2Vzc0xvZygpOwotfQotCi12b2lkIENhbGxFZGdlTG9nOjpl
bWl0TG9nQ29kZShDQ2FsbEhlbHBlcnMmIGppdCwgQ2FsbEVkZ2VQcm9maWxlJiBwcm9maWxlLCBK
U1ZhbHVlUmVncyBjYWxsZWVSZWdzKQotewotICAgIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRzID0gMTsKLSAgICAKLSAgICBHUFJSZWcgc2NyYXRjaEdQUjsKLSAgICBpZiAoIWNhbGxl
ZVJlZ3MudXNlcyhHUFJJbmZvOjpyZWdUMCkpCi0gICAgICAgIHNjcmF0Y2hHUFIgPSBHUFJJbmZv
OjpyZWdUMDsKLSAgICBlbHNlIGlmICghY2FsbGVlUmVncy51c2VzKEdQUkluZm86OnJlZ1QxKSkK
LSAgICAgICAgc2NyYXRjaEdQUiA9IEdQUkluZm86OnJlZ1QxOwotICAgIGVsc2UKLSAgICAgICAg
c2NyYXRjaEdQUiA9IEdQUkluZm86OnJlZ1QyOwotICAgIAotICAgIGppdC5sb2FkMzIoJm1fc2Nh
bGVkTG9nSW5kZXgsIHNjcmF0Y2hHUFIpOwotICAgIAotICAgIENDYWxsSGVscGVyczo6SnVtcCBv
ayA9IGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpOb25aZXJvLCBzY3JhdGNoR1BSKTsK
LSAgICAKLSAgICBBU1NFUlRfVU5VU0VEKG51bWJlck9mQXJndW1lbnRzLCBzdGFja0FsaWdubWVu
dFJlZ2lzdGVycygpID49IDEgKyBudW1iZXJPZkFyZ3VtZW50cyk7Ci0gICAgCi0gICAgaml0LnN1
YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGFja0FsaWdubWVudEJ5dGVzKCkpLCBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAKLSAgICBqaXQuc3RvcmVW
YWx1ZShjYWxsZWVSZWdzLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgaml0LnNldHVwQXJndW1l
bnRzKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSk7Ci0gICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uUHJv
Y2Vzc0NhbGxFZGdlTG9nKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5jYWxsKEdQ
UkluZm86Om5vbkFyZ0dQUjApOwotICAgIGppdC5sb2FkVmFsdWUoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihKU1ZhbHVlKSks
IGNhbGxlZVJlZ3MpOwotICAgIAotICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoc3RhY2tBbGlnbm1lbnRCeXRlcygpKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0gICAgCi0gICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bG9nU2l6ZSAqIHNpemVvZihFbnRyeSkpLCBzY3JhdGNoR1BSKTsKLSAgICBvay5saW5rKCZqaXQp
OwotCi0gICAgaml0LnN1YjMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihFbnRy
eSkpLCBzY3JhdGNoR1BSKTsKLSAgICBqaXQuc3RvcmUzMihzY3JhdGNoR1BSLCAmbV9zY2FsZWRM
b2dJbmRleCk7Ci0gICAgaml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9s
b2cpLCBzY3JhdGNoR1BSKTsKLSAgICBqaXQuc3RvcmVWYWx1ZShjYWxsZWVSZWdzLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEVudHJ5LCBtX3ZhbHVl
KSkpOwotICAgIGppdC5zdG9yZVB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJnByb2Zp
bGUpLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgT0JKRUNUX09GRlNFVE9GKEVu
dHJ5LCBtX3Byb2ZpbGUpKSk7Ci19Ci0KLXZvaWQgQ2FsbEVkZ2VMb2c6OmVtaXRMb2dDb2RlKAot
ICAgIENDYWxsSGVscGVycyYgaml0LCBPd25QdHI8Q2FsbEVkZ2VQcm9maWxlPiYgcHJvZmlsZVBv
aW50ZXIsIEpTVmFsdWVSZWdzIGNhbGxlZVJlZ3MpCi17Ci0gICAgaWYgKCFpc0VuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHByb2ZpbGVQb2ludGVyLmNyZWF0ZVRyYW5zYWN0
aW9uYWxseSgpOwotICAgIGVtaXRMb2dDb2RlKGppdCwgKnByb2ZpbGVQb2ludGVyLCBjYWxsZWVS
ZWdzKTsKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLXZvaWQgQ2FsbEVkZ2VMb2c6OnBy
b2Nlc3NMb2coKQotewotICAgIEFTU0VSVCghKG1fc2NhbGVkTG9nSW5kZXggJSBzaXplb2YoRW50
cnkpKSk7Ci0gICAgCi0gICAgaWYgKE9wdGlvbnM6OmNhbGxFZGdlUHJvZmlsZVJlYWxseVByb2Nl
c3Nlc0xvZygpKSB7Ci0gICAgICAgIENhbGxFZGdlUHJvZmlsZVZlY3RvciBtZXJnZUJhY2tMb2c7
Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3NjYWxlZExvZ0luZGV4IC8g
c2l6ZW9mKEVudHJ5KTsgaSA8IGxvZ1NpemU7ICsraSkKLSAgICAgICAgICAgIG1fbG9nW2ldLm1f
cHJvZmlsZS0+YWRkKG1fbG9nW2ldLm1fdmFsdWUsIG1lcmdlQmFja0xvZyk7Ci0gICAgICAgIAot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtZXJnZUJhY2tMb2cuc2l6ZSgpOyBpLS07KQotICAg
ICAgICAgICAgbWVyZ2VCYWNrTG9nW2ldLT5tZXJnZUJhY2soKTsKLSAgICB9Ci0gICAgCi0gICAg
bV9zY2FsZWRMb2dJbmRleCA9IGxvZ1NpemUgKiBzaXplb2YoRW50cnkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxF
ZGdlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsRWRnZVByb2ZpbGUuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxFZGdlUHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEz
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgQ2FsbEVkZ2VQcm9maWxlX2gKLSNkZWZpbmUgQ2FsbEVkZ2VQcm9maWxlX2gKLQot
I2luY2x1ZGUgIkNhbGxFZGdlLmgiCi0jaW5jbHVkZSAiQ2FsbFZhcmlhbnQuaCIKLSNpbmNsdWRl
ICJDb25jdXJyZW50SklUTG9jay5oIgotI2luY2x1ZGUgIkdQUkluZm8uaCIKLSNpbmNsdWRlICJK
U0NlbGwuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1j
bGFzcyBDQ2FsbEhlbHBlcnM7Ci1jbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci0KLWNsYXNz
IENhbGxFZGdlTG9nOwotY2xhc3MgQ2FsbEVkZ2VQcm9maWxlOwotdHlwZWRlZiBWZWN0b3I8Q2Fs
bEVkZ2VQcm9maWxlKiwgMTA+IENhbGxFZGdlUHJvZmlsZVZlY3RvcjsKLQotY2xhc3MgQ2FsbEVk
Z2VQcm9maWxlIHsKLXB1YmxpYzoKLSAgICBDYWxsRWRnZVByb2ZpbGUoKTsKLSAgICAKLSAgICBD
YWxsRWRnZUNvdW50VHlwZSBudW1DYWxsc1RvTm90Q2VsbCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVt
Q2FsbHNUb05vdENlbGw7IH0KLSAgICBDYWxsRWRnZUNvdW50VHlwZSBudW1DYWxsc1RvVW5rbm93
bkNlbGwoKSBjb25zdCB7IHJldHVybiBtX251bUNhbGxzVG9Vbmtub3duQ2VsbDsgfQotICAgIENh
bGxFZGdlQ291bnRUeXBlIG51bUNhbGxzVG9Lbm93bkNlbGxzKCkgY29uc3Q7Ci0gICAgCi0gICAg
Q2FsbEVkZ2VDb3VudFR5cGUgdG90YWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1fdG90YWxDb3Vu
dDsgfQotICAgIAotICAgIC8vIENhbGwgd2hpbGUgaG9sZGluZyB0aGUgb3duaW5nIENvZGVCbG9j
aydzIGxvY2suCi0gICAgQ2FsbEVkZ2VMaXN0IGNhbGxFZGdlcygpIGNvbnN0OwotICAgIAotICAg
IHZvaWQgdmlzaXRXZWFrKCk7Ci0gICAgCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBDYWxs
RWRnZUxvZzsKLSAgICAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4S25vd25DYWxsZWVz
ID0gNTsKLSAgICAKLSAgICB2b2lkIGFkZChKU1ZhbHVlLCBDYWxsRWRnZVByb2ZpbGVWZWN0b3Im
IG1lcmdlQmFja0xvZyk7Ci0gICAgCi0gICAgYm9vbCB3b3J0aERlc3BlY2lmeWluZygpOwotICAg
IHZvaWQgYWRkU2xvdyhDYWxsVmFyaWFudCwgQ2FsbEVkZ2VQcm9maWxlVmVjdG9yJiBtZXJnZUJh
Y2tMb2cpOwotICAgIHZvaWQgbWVyZ2VCYWNrKCk7Ci0gICAgdm9pZCBmYWRlQnlIYWxmKCk7Ci0g
ICAgCi0gICAgLy8gSXQncyBjaGVhcGVyIHRvIGxldCB0aGlzIGhhdmUgaXRzIG93biBsb2NrLiBJ
dCBuZWVkcyB0byBiZSBhYmxlIHRvIGZpbmQgd2hpY2ggbG9jayB0bwotICAgIC8vIGxvY2suIE5v
cm1hbGx5IGl0IHdvdWxkIGxvY2sgdGhlIG93bmluZyBDb2RlQmxvY2sncyBsb2NrLCBidXQgdGhh
dCB3b3VsZCByZXF1aXJlIGEKLSAgICAvLyBwb2ludGVyLXdpZHRoIHdvcmQgdG8gcG9pbnQgYXQg
dGhlIENvZGVCbG9jay4gSGF2aW5nIHRoZSBieXRlLXNpemVkIGxvY2sgaGVyZSBpcwotICAgIC8v
IGNoZWFwZXIuIEhvd2V2ZXIsIHRoaXMgbWVhbnMgdGhhdCB0aGUgcmVsYXRpb25zaGlwIHdpdGgg
dGhlIENvZGVCbG9jayBsb2NrIGlzOgotICAgIC8vIGFjcXVpcmUgdGhlIENvZGVCbG9jayBsb2Nr
IGJlZm9yZSB0aGlzIG9uZS4KLSAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1fbG9jazsK
LSAgICAKLSAgICBib29sIG1fY2xvc3VyZXNBcmVEZXNwZWNpZmllZDsKLSAgICAKLSAgICBDYWxs
RWRnZUNvdW50VHlwZSBtX251bUNhbGxzVG9QcmltYXJ5OwotICAgIENhbGxFZGdlQ291bnRUeXBl
IG1fbnVtQ2FsbHNUb05vdENlbGw7Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV9udW1DYWxsc1Rv
VW5rbm93bkNlbGw7Ci0gICAgQ2FsbEVkZ2VDb3VudFR5cGUgbV90b3RhbENvdW50OwotICAgIENh
bGxWYXJpYW50IG1fcHJpbWFyeUNhbGxlZTsKLSAgICAKLSAgICB0eXBlZGVmIFNwZWN0cnVtPENh
bGxWYXJpYW50LCBDYWxsRWRnZUNvdW50VHlwZT4gQ2FsbFNwZWN0cnVtOwotICAgIAotICAgIHN0
cnVjdCBTZWNvbmRhcnkgewotICAgICAgICBWZWN0b3I8Q2FsbEVkZ2U+IG1fcHJvY2Vzc2VkOyAv
LyBQcm9jZXNzZWQgYnV0IG5vdCBuZWNlc3NhcmlseSBzb3J0ZWQuCi0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsU3BlY3RydW0+IG1fdGVtcG9yYXJ5U3BlY3RydW07Ci0gICAgfTsKLSAgICAK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Vjb25kYXJ5PiBtX290aGVyQ2FsbGVlczsKLX07Ci0KLWNs
YXNzIENhbGxFZGdlTG9nIHsKLXB1YmxpYzoKLSAgICBDYWxsRWRnZUxvZygpOwotICAgIH5DYWxs
RWRnZUxvZygpOwotCi0gICAgc3RhdGljIGJvb2wgaXNFbmFibGVkKCk7Ci0gICAgCi0jaWYgRU5B
QkxFKEpJVCkKLSAgICB2b2lkIGVtaXRMb2dDb2RlKENDYWxsSGVscGVycyYsIENhbGxFZGdlUHJv
ZmlsZSYsIEpTVmFsdWVSZWdzIGNhbGxlZVJlZ3MpOyAvLyBBc3N1bWVzIHRoYXQgc3RhY2sgaXMg
YWxpZ25lZCwgYWxsIHZvbGF0aWxlIHJlZ2lzdGVycyAtIG90aGVyIHRoYW4gY2FsbGVlR1BSIC0g
YXJlIGNsb2JiZXJhYmxlLCBhbmQgdGhlIHBhcmFtZXRlciBzcGFjZSBpcyBpbiB1c2UuCi0gICAg
Ci0gICAgLy8gU2FtZSBhcyBhYm92ZSBidXQgY3JlYXRlcyBhIENhbGxFZGdlUHJvZmlsZSBpbnN0
YW5jZSBpZiBvbmUgZGlkIG5vdCBhbHJlYWR5IGV4aXN0LiBEb2VzCi0gICAgLy8gdGhpcyBpbiBh
IHRocmVhZC1zYWZlIG1hbm5lciBieSBjYWxsaW5nIE93blB0cjo6Y3JlYXRlVHJhbnNhY3Rpb25h
bGx5LgotICAgIHZvaWQgZW1pdExvZ0NvZGUoQ0NhbGxIZWxwZXJzJiwgT3duUHRyPENhbGxFZGdl
UHJvZmlsZT4mLCBKU1ZhbHVlUmVncyBjYWxsZWVSZWdzKTsKLSNlbmRpZiAvLyBFTkFCTEUoSklU
KQotICAgIAotICAgIHZvaWQgcHJvY2Vzc0xvZygpOwotICAgIAotcHJpdmF0ZToKLSAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotCi0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGxvZ1NpemUgPSAxMDAwMDsKLSAgICAKLSAgICBzdHJ1Y3QgRW50cnkgewotICAgICAgICBK
U1ZhbHVlIG1fdmFsdWU7Ci0gICAgICAgIENhbGxFZGdlUHJvZmlsZSogbV9wcm9maWxlOwotICAg
IH07Ci0gICAgCi0gICAgdW5zaWduZWQgbV9zY2FsZWRMb2dJbmRleDsKLSAgICBFbnRyeSBtX2xv
Z1tsb2dTaXplXTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQ2FsbEVk
Z2VQcm9maWxlX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxF
ZGdlUHJvZmlsZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oCShyZXZpc2lvbiAxNzkyNDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbEVkZ2VQcm9maWxlSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDYWxsRWRnZVByb2ZpbGVJbmxpbmVzX2gKLSNk
ZWZpbmUgQ2FsbEVkZ2VQcm9maWxlSW5saW5lc19oCi0KLSNpbmNsdWRlICJDYWxsRWRnZVByb2Zp
bGUuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWlubGluZSBDYWxsRWRnZVByb2ZpbGU6OkNhbGxF
ZGdlUHJvZmlsZSgpCi0gICAgOiBtX2Nsb3N1cmVzQXJlRGVzcGVjaWZpZWQoZmFsc2UpCi0gICAg
LCBtX251bUNhbGxzVG9QcmltYXJ5KDApCi0gICAgLCBtX251bUNhbGxzVG9Ob3RDZWxsKDApCi0g
ICAgLCBtX251bUNhbGxzVG9Vbmtub3duQ2VsbCgwKQotICAgICwgbV90b3RhbENvdW50KDApCi0g
ICAgLCBtX3ByaW1hcnlDYWxsZWUobnVsbHB0cikKLXsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lk
IENhbGxFZGdlUHJvZmlsZTo6YWRkKEpTVmFsdWUgdmFsdWUsIENhbGxFZGdlUHJvZmlsZVZlY3Rv
ciYgbWVyZ2VCYWNrTG9nKQotewotICAgIHVuc2lnbmVkIG5ld1RvdGFsQ291bnQgPSBtX3RvdGFs
Q291bnQgKyAxOwotICAgIGlmIChVTkxJS0VMWSghbmV3VG90YWxDb3VudCkpIHsKLSAgICAgICAg
ZmFkZUJ5SGFsZigpOyAvLyBUYWNrbGUgb3ZlcmZsb3dzIGJ5IGRpdmlkaW5nIGFsbCBjb3VudHMg
YnkgdHdvLgotICAgICAgICBuZXdUb3RhbENvdW50ID0gbV90b3RhbENvdW50ICsgMTsKLSAgICB9
Ci0gICAgQVNTRVJUKG5ld1RvdGFsQ291bnQpOwotICAgIG1fdG90YWxDb3VudCA9IG5ld1RvdGFs
Q291bnQ7Ci0gICAgCi0gICAgaWYgKFVOTElLRUxZKCF2YWx1ZS5pc0NlbGwoKSkpIHsKLSAgICAg
ICAgbV9udW1DYWxsc1RvTm90Q2VsbCsrOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Q2FsbFZhcmlhbnQgY2FsbGVlID0gQ2FsbFZhcmlhbnQodmFsdWUuYXNDZWxsKCkpOwotICAgIAot
ICAgIGlmIChtX2Nsb3N1cmVzQXJlRGVzcGVjaWZpZWQpCi0gICAgICAgIGNhbGxlZSA9IGNhbGxl
ZS5kZXNwZWNpZmllZENsb3N1cmUoKTsKLSAgICAKLSAgICBpZiAoVU5MSUtFTFkoIW1fcHJpbWFy
eUNhbGxlZSkpIHsKLSAgICAgICAgbV9wcmltYXJ5Q2FsbGVlID0gY2FsbGVlOwotICAgICAgICBt
X251bUNhbGxzVG9QcmltYXJ5ID0gMTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAg
Ci0gICAgaWYgKExJS0VMWShtX3ByaW1hcnlDYWxsZWUgPT0gY2FsbGVlKSkgewotICAgICAgICBt
X251bUNhbGxzVG9QcmltYXJ5Kys7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAot
ICAgIGlmIChVTkxJS0VMWSghbV9vdGhlckNhbGxlZXMpKSB7Ci0gICAgICAgIGFkZFNsb3coY2Fs
bGVlLCBtZXJnZUJhY2tMb2cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAg
ICBDYWxsU3BlY3RydW0qIHNlY29uZGFyeSA9IG1fb3RoZXJDYWxsZWVzLT5tX3RlbXBvcmFyeVNw
ZWN0cnVtLmdldCgpOwotICAgIGlmICghc2Vjb25kYXJ5KSB7Ci0gICAgICAgIGFkZFNsb3coY2Fs
bGVlLCBtZXJnZUJhY2tMb2cpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAg
ICBzZWNvbmRhcnktPmFkZChjYWxsZWUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmIC8vIENhbGxFZGdlUHJvZmlsZUlubGluZXNfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcAkocmV2aXNpb24gMTc5MjQyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDkgQEAKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiREZHVGh1bmtzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
IlJlcGF0Y2guaCIKICNpbmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0xp
c3REdW1wLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKICNpZiBFTkFCTEUo
SklUKQpAQCAtMzcsMjAgKzM5LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogCiB2b2lkIENhbGxMaW5r
SW5mbzo6dW5saW5rKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpCiB7Ci0gICAgQVNTRVJU
KGlzTGlua2VkKCkpOworICAgIGlmICghaXNMaW5rZWQoKSkgeworICAgICAgICAvLyBXZSBjb3Vs
ZCBiZSBjYWxsZWQgZXZlbiBpZiB3ZSdyZSBub3QgbGlua2VkIGFueW1vcmUgYmVjYXVzZSBvZiBo
b3cgcG9seW1vcnBoaWMgY2FsbHMKKyAgICAgICAgLy8gd29yay4gRWFjaCBjYWxsc2l0ZSB3aXRo
aW4gdGhlIHBvbHltb3JwaGljIGNhbGwgc3R1YiBtYXkgc2VwYXJhdGVseSBhc2sgdXMgdG8gdW5s
aW5rKCkuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc09uTGlzdCgpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KICAgICAKLSAgICBpZiAoT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkpCi0g
ICAgICAgIGRhdGFMb2coIlVubGlua2luZyBjYWxsIGZyb20gIiwgY2FsbFJldHVybkxvY2F0aW9u
LCAiIHRvICIsIHBvaW50ZXJEdW1wKHJlcGF0Y2hCdWZmZXIuY29kZUJsb2NrKCkpLCAiXG4iKTsK
LQotICAgIHJlcGF0Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9CcmFuY2hQdHJXaXRo
UGF0Y2goUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0ZXIo
aG90UGF0aEJlZ2luKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNh
bGxlZUdQUiksIDApOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAotICAgICAgICBjYWxsUmV0
dXJuTG9jYXRpb24sCi0gICAgICAgIHJlcGF0Y2hCdWZmZXIuY29kZUJsb2NrKCktPnZtKCktPmdl
dENUSVN0dWIobGlua1RodW5rR2VuZXJhdG9yRm9yKAotICAgICAgICAgICAgKGNhbGxUeXBlID09
IENvbnN0cnVjdCB8fCBjYWxsVHlwZSA9PSBDb25zdHJ1Y3RWYXJhcmdzKT8gQ29kZUZvckNvbnN0
cnVjdCA6IENvZGVGb3JDYWxsLAotICAgICAgICAgICAgaXNGVEwgPyBNdXN0UHJlc2VydmVSZWdp
c3RlcnMgOiBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKSkuY29kZSgpKTsKLSAgICBo
YXNTZWVuU2hvdWxkUmVwYXRjaCA9IGZhbHNlOwotICAgIGNhbGxlZS5jbGVhcigpOwotICAgIHN0
dWIuY2xlYXIoKTsKKyAgICB1bmxpbmtGb3IoCisgICAgICAgIHJlcGF0Y2hCdWZmZXIsICp0aGlz
LAorICAgICAgICAoY2FsbFR5cGUgPT0gQ29uc3RydWN0IHx8IGNhbGxUeXBlID09IENvbnN0cnVj
dFZhcmFyZ3MpPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwsCisgICAgICAgIGlzRlRM
ID8gTXVzdFByZXNlcnZlUmVnaXN0ZXJzIDogUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJl
ZCk7CiAKICAgICAvLyBJdCB3aWxsIGJlIG9uIGEgbGlzdCBpZiB0aGUgY2FsbGVlIGhhcyBhIGNv
ZGUgYmxvY2suCiAgICAgaWYgKGlzT25MaXN0KCkpCkBAIC02MSwxMiArNjAsMTIgQEAgdm9pZCBD
YWxsTGlua0luZm86OnZpc2l0V2VhayhSZXBhdGNoQnVmZgogewogICAgIGlmIChpc0xpbmtlZCgp
KSB7CiAgICAgICAgIGlmIChzdHViKSB7Ci0gICAgICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
KHN0dWItPmV4ZWN1dGFibGUoKSkpIHsKKyAgICAgICAgICAgIGlmICghc3R1Yi0+dmlzaXRXZWFr
KHJlcGF0Y2hCdWZmZXIpKSB7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAg
ICAgICAgIkNsZWFyaW5nIGNsb3N1cmUgY2FsbCBmcm9tICIsICpyZXBhdGNoQnVmZmVyLmNvZGVC
bG9jaygpLCAiIHRvICIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHViLT5leGVjdXRhYmxl
KCktPmhhc2hGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIiwgc3R1YiByb3V0aW5lICIsIFJhd1BvaW50ZXIoc3R1Yi5nZXQoKSksICIuXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpc3REdW1wKHN0dWItPnZhcmlhbnRzKCkpLCAiLCBzdHVi
IHJvdXRpbmUgIiwgUmF3UG9pbnRlcihzdHViLmdldCgpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICIuXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdW5saW5rKHJl
cGF0Y2hCdWZmZXIpOwogICAgICAgICAgICAgfQpAQCAtODMsMTEgKzgyLDYgQEAgdm9pZCBDYWxs
TGlua0luZm86OnZpc2l0V2VhayhSZXBhdGNoQnVmZgogICAgIH0KICAgICBpZiAoISFsYXN0U2Vl
bkNhbGxlZSAmJiAhSGVhcDo6aXNNYXJrZWQobGFzdFNlZW5DYWxsZWUuZ2V0KCkpKQogICAgICAg
ICBsYXN0U2VlbkNhbGxlZS5jbGVhcigpOwotICAgIAotICAgIGlmIChjYWxsRWRnZVByb2ZpbGUp
IHsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgIGNhbGxFZGdlUHJvZmls
ZS0+dmlzaXRXZWFrKCk7Ci0gICAgfQogfQogCiBDYWxsTGlua0luZm8mIENhbGxMaW5rSW5mbzo6
ZHVtbXkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a0luZm8uaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMyArMjYs
MTIgQEAKICNpZm5kZWYgQ2FsbExpbmtJbmZvX2gKICNkZWZpbmUgQ2FsbExpbmtJbmZvX2gKIAot
I2luY2x1ZGUgIkNhbGxFZGdlUHJvZmlsZS5oIgotI2luY2x1ZGUgIkNsb3N1cmVDYWxsU3R1YlJv
dXRpbmUuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiSklUV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZW50aW5lbExpbmtlZExpc3QuaD4KQEAgLTgy
LDE1ICs4MSwxNCBAQCBzdHJ1Y3QgQ2FsbExpbmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAg
ICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyOwogICAgIEpJVFdyaXRlQmFycmll
cjxKU0Z1bmN0aW9uPiBjYWxsZWU7CiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IGxhc3RT
ZWVuQ2FsbGVlOwotICAgIFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViOworICAg
IFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gc3R1YjsKICAgICBib29sIGlzRlRM
IDogMTsKICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKICAgICBib29sIGhhc1Nl
ZW5DbG9zdXJlIDogMTsKICAgICB1bnNpZ25lZCBjYWxsVHlwZSA6IDU7IC8vIENhbGxUeXBlCiAg
ICAgdW5zaWduZWQgY2FsbGVlR1BSIDogODsKLSAgICB1bnNpZ25lZCBzbG93UGF0aENvdW50Owor
ICAgIHVpbnQzMl90IHNsb3dQYXRoQ291bnQ7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwot
ICAgIE93blB0cjxDYWxsRWRnZVByb2ZpbGU+IGNhbGxFZGdlUHJvZmlsZTsKIAogICAgIGJvb2wg
aXNMaW5rZWQoKSB7IHJldHVybiBzdHViIHx8IGNhbGxlZTsgfQogICAgIHZvaWQgdW5saW5rKFJl
cGF0Y2hCdWZmZXImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00Nyw3ICs0Nyw3IEBAIENhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1cyhKU1Zh
bHVlIHYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBtX2VkZ2VzLmFwcGVuZChD
YWxsRWRnZShDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSksIDEpKTsKKyAgICBtX3ZhcmlhbnRz
LmFwcGVuZChDYWxsVmFyaWFudCh2YWx1ZS5hc0NlbGwoKSkpOwogfQogCiBDYWxsTGlua1N0YXR1
cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKQEAgLTEyOSwyMyArMTI5LDYgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVGbwogICAgIC8vIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoaXMsIGJ1dCBhbnl0aW1l
IHdlIGhhdmUgdG8gZGVidWcgdGhpcyBjb2RlLCBpdCBiZWNvbWVzIGluZGlzcGVuc2FibGUuCiAg
ICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIAotICAgIGlmIChPcHRpb25zOjpj
YWxsU3RhdHVzU2hvdWxkVXNlQ2FsbEVkZ2VQcm9maWxlKCkpIHsKLSAgICAgICAgLy8gQWx3YXlz
IHRydXN0IHRoZSBjYWxsIGVkZ2UgcHJvZmlsZSBvdmVyIGFueXRoaW5nIGVsc2Ugc2luY2UgdGhp
cyBoYXMgcHJlY2lzZSBjb3VudHMuCi0gICAgICAgIC8vIEl0IGNhbiBtYWtlIHRoZSBiZXN0IHBv
c3NpYmxlIGRlY2lzaW9uIGJlY2F1c2UgaXQgbmV2ZXIgImZvcmdldHMiIHdoYXQgaGFwcGVuZWQg
Zm9yIGFueQotICAgICAgICAvLyBjYWxsLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgZmFkaW5nIG91
dCB0aGUgY291bnRzIG9mIG9sZCBjYWxscyAoZm9yIGV4YW1wbGUgaWYgdGhlCi0gICAgICAgIC8v
IGNvdW50ZXIgdHlwZSBpcyAxNi1iaXQgdGhlbiBjYWxscyB0aGF0IGhhcHBlbmVkIG1vcmUgdGhh
biAyXjE2IGNhbGxzIGFnbyBhcmUgZ2l2ZW4gaGFsZgotICAgICAgICAvLyB3ZWlnaHQsIGFuZCB0
aGlzIGNvbXBvdW5kcyBmb3IgZXZlcnkgMl4xNSBbc2ljXSBjYWxscyBhZnRlciB0aGF0KS4gVGhl
IGNvbWJpbmF0aW9uIG9mCi0gICAgICAgIC8vIGhpZ2ggZmlkZWxpdHkgZm9yIHJlY2VudCBjYWxs
cyBhbmQgZmFkaW5nIGZvciBvbGRlciBjYWxscyBtYWtlcyB0aGlzIHRoZSBtb3N0IHVzZWZ1bAot
ICAgICAgICAvLyBtZWNoYW1pc20gb2YgY2hvb3NpbmcgaG93IHRvIG9wdGltaXplIGZ1dHVyZSBj
YWxscy4KLSAgICAgICAgQ2FsbEVkZ2VQcm9maWxlKiBlZGdlUHJvZmlsZSA9IGNhbGxMaW5rSW5m
by5jYWxsRWRnZVByb2ZpbGUuZ2V0KCk7Ci0gICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwot
ICAgICAgICBpZiAoZWRnZVByb2ZpbGUpIHsKLSAgICAgICAgICAgIENhbGxMaW5rU3RhdHVzIHJl
c3VsdCA9IGNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKGVkZ2VQcm9maWxlKTsKLSAgICAgICAg
ICAgIGlmICghIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICB9Ci0gICAgfQotICAgIAogICAgIHJldHVybiBjb21wdXRlRnJvbUNhbGxMaW5rSW5mbyhsb2Nr
ZXIsIGNhbGxMaW5rSW5mbyk7CiB9CiAKQEAgLTE2NSwxMiArMTQ4LDY4IEBAIENhbGxMaW5rU3Rh
dHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnIKICAgICAvLyB0aGF0IGlzIHN0aWxsIG1hcmdp
bmFsbHkgdmFsaWQgKGkuZS4gdGhlIHBvaW50ZXJzIGFpbid0IHN0YWxlKS4gVGhpcyBraW5kIG9m
IHJhY2luZXNzCiAgICAgLy8gaXMgcHJvYmFibHkgT0sgZm9yIG5vdy4KICAgICAKKyAgICAvLyBQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSBpcyBhIEdDQXdhcmVKSVRTdHViUm91dGluZSwgc28g
aWYgbm9uLW51bGwsIGl0IHdpbGwgc3RheSBhbGl2ZQorICAgIC8vIHVudGlsIG5leHQgR0MgZXZl
biBpZiB0aGUgQ2FsbExpbmtJbmZvIGlzIGNvbmN1cnJlbnRseSBjbGVhcmVkLiBBbHNvLCB0aGUg
dmFyaWFudHMgbGlzdCBpcworICAgIC8vIG5ldmVyIG11dGF0ZWQgYWZ0ZXIgdGhlIFBvbHltb3Jw
aGljQ2FsbFN0dWJSb3V0aW5lIGlzIGluc3RhbnRpYXRlZC4gV2UgaGF2ZSBzb21lIGNvbnNlcnZh
dGl2ZQorICAgIC8vIGZlbmNpbmcgaW4gcGxhY2UgdG8gbWFrZSBzdXJlIHRoYXQgd2Ugc2VlIHRo
ZSB2YXJpYW50cyBsaXN0IGFmdGVyIGNvbnN0cnVjdGlvbi4KKyAgICBpZiAoUG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUqIHN0dWIgPSBjYWxsTGlua0luZm8uc3R1Yi5nZXQoKSkgeworICAgICAg
ICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAgICAgCisgICAgICAgIENhbGxFZGdlTGlzdCBl
ZGdlcyA9IHN0dWItPmVkZ2VzKCk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgdGhhdCB3ZSd2
ZSBsb2FkZWQgdGhlIGVkZ2VzIGxpc3QsIHRoZXJlIGFyZSBubyBmdXJ0aGVyIGNvbmN1cnJlbmN5
IGNvbmNlcm5zLiBXZSB3aWxsCisgICAgICAgIC8vIGp1c3QgbWFuaXB1bGF0ZSBhbmQgcHJ1bmUg
dGhpcyBsaXN0IHRvIG91ciBsaWtpbmcgLSBtb3N0bHkgcmVtb3ZpbmcgZW50cmllcyB0aGF0IGFy
ZSB0b28KKyAgICAgICAgLy8gaW5mcmVxdWVudCBhbmQgZW5zdXJpbmcgdGhhdCBpdCdzIHNvcnRl
ZCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIGZyZXF1ZW5jeS4KKyAgICAgICAgCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGVkZ2VzLnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQo
CisgICAgICAgICAgICBlZGdlcy5iZWdpbigpLCBlZGdlcy5lbmQoKSwKKyAgICAgICAgICAgIFtd
IChDYWxsRWRnZSBhLCBDYWxsRWRnZSBiKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGEuY291
bnQoKSA+IGIuY291bnQoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChlZGdlcy5maXJzdCgpLmNvdW50KCkgPj0gZWRnZXMubGFzdCgpLmNvdW50KCkpOworICAgICAg
ICAKKyAgICAgICAgZG91YmxlIHRvdGFsQ2FsbHNUb0tub3duID0gMDsKKyAgICAgICAgZG91Ymxl
IHRvdGFsQ2FsbHNUb1Vua25vd24gPSBjYWxsTGlua0luZm8uc2xvd1BhdGhDb3VudDsKKyAgICAg
ICAgQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGVkZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBDYWxsRWRnZSBlZGdlID0gZWRn
ZXNbaV07CisgICAgICAgICAgICAvLyBJZiB0aGUgY2FsbCBpcyBhdCB0aGUgdGFpbCBvZiB0aGUg
ZGlzdHJpYnV0aW9uLCB0aGVuIHdlIGRvbid0IG9wdGltaXplIGl0IGFuZCB3ZQorICAgICAgICAg
ICAgLy8gdHJlYXQgaXQgYXMgaWYgaXQgd2FzIGEgY2FsbCB0byBzb21ldGhpbmcgdW5rbm93bi4g
V2UgZGVmaW5lIHRoZSB0YWlsIGFzIGJlaW5nIGVpdGhlcgorICAgICAgICAgICAgLy8gYSBjYWxs
IHRoYXQgZG9lc24ndCBiZWxvbmcgdG8gdGhlIE4gbW9zdCBmcmVxdWVudCBjYWxsZWVzIChOID0K
KyAgICAgICAgICAgIC8vIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRzRm9ySW5saW5pbmcpIG9y
IHRoYXQgaGFzIGEgdG90YWwgY2FsbCBjb3VudCB0aGF0IGlzIHRvbworICAgICAgICAgICAgLy8g
c21hbGwuCisgICAgICAgICAgICBpZiAoaSA+PSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxW
YXJpYW50c0ZvcklubGluaW5nKCkKKyAgICAgICAgICAgICAgICB8fCBlZGdlLmNvdW50KCkgPCBP
cHRpb25zOjpmcmVxdWVudENhbGxUaHJlc2hvbGQoKSkKKyAgICAgICAgICAgICAgICB0b3RhbENh
bGxzVG9Vbmtub3duICs9IGVkZ2UuY291bnQoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIHRvdGFsQ2FsbHNUb0tub3duICs9IGVkZ2UuY291bnQoKTsKKyAgICAgICAgICAg
ICAgICB2YXJpYW50cy5hcHBlbmQoZWRnZS5jYWxsZWUoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEJhaWwgaWYgd2UgZGlkbid0IGZpbmQgYW55IGNh
bGxzIHRoYXQgcXVhbGlmaWVkLgorICAgICAgICBSRUxFQVNFX0FTU0VSVCghIXRvdGFsQ2FsbHNU
b0tub3duID09ICEhdmFyaWFudHMuc2l6ZSgpKTsKKyAgICAgICAgaWYgKHZhcmlhbnRzLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CisgICAgICAgIAorICAg
ICAgICAvLyBXZSByZXF1aXJlIHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBvZiBjYWxsZWVzIGlzIHNr
ZXdlZCB0b3dhcmRzIGEgaGFuZGZ1bCBvZiBjb21tb24gb25lcy4KKyAgICAgICAgaWYgKHRvdGFs
Q2FsbHNUb0tub3duIC8gdG90YWxDYWxsc1RvVW5rbm93biA8IE9wdGlvbnM6Om1pbmltdW1DYWxs
VG9Lbm93blJhdGUoKSkKKyAgICAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CisgICAg
ICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVCh0b3RhbENhbGxzVG9Lbm93bik7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHZhcmlhbnRzLnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBDYWxs
TGlua1N0YXR1cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhcmlhbnRzID0gdmFyaWFudHM7
CisgICAgICAgIHJlc3VsdC5tX2NvdWxkVGFrZVNsb3dQYXRoID0gISF0b3RhbENhbGxzVG9Vbmtu
b3duOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICBpZiAoY2FsbExp
bmtJbmZvLnNsb3dQYXRoQ291bnQgPj0gT3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVt
Q291bnQoKSkKICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAgICAKLSAgICBpZiAo
Q2xvc3VyZUNhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViLmdldCgpKQot
ICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoc3R1Yi0+ZXhlY3V0YWJsZSgpKTsKLSAgICAK
ICAgICBKU0Z1bmN0aW9uKiB0YXJnZXQgPSBjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUuZ2V0
KCk7CiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CkBA
IC0xODEsMzQgKzIyMCw2IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
RnIKICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXModGFyZ2V0KTsKIH0KIAotQ2FsbExpbmtTdGF0
dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKENhbGxFZGdlUHJv
ZmlsZSogZWRnZVByb2ZpbGUpCi17Ci0gICAgLy8gSW4gY2FzZXMgd2hlcmUgdGhlIGNhbGwgZWRn
ZSBwcm9maWxlIHNhdyBub3RoaW5nLCB1c2UgdGhlIENhbGxMaW5rSW5mbyBpbnN0ZWFkLgotICAg
IGlmICghZWRnZVByb2ZpbGUtPnRvdGFsQ2FsbHMoKSkKLSAgICAgICAgcmV0dXJuIENhbGxMaW5r
U3RhdHVzKCk7Ci0gICAgCi0gICAgLy8gVG8gZG8gYW55dGhpbmcgbWVhbmluZ2Z1bCwgd2UgcmVx
dWlyZSB0aGF0IHRoZSBtYWpvcml0eSBvZiBjYWxscyBhcmUgdG8gc29tZXRoaW5nIHdlCi0gICAg
Ly8ga25vdyBob3cgdG8gaGFuZGxlLgotICAgIHVuc2lnbmVkIG51bUNhbGxzVG9Lbm93biA9IGVk
Z2VQcm9maWxlLT5udW1DYWxsc1RvS25vd25DZWxscygpOwotICAgIHVuc2lnbmVkIG51bUNhbGxz
VG9Vbmtub3duID0gZWRnZVByb2ZpbGUtPm51bUNhbGxzVG9Ob3RDZWxsKCkgKyBlZGdlUHJvZmls
ZS0+bnVtQ2FsbHNUb1Vua25vd25DZWxsKCk7Ci0gICAgCi0gICAgLy8gV2UgcmVxdWlyZSB0aGF0
IHRoZSBtYWpvcml0eSBvZiBjYWxscyB3ZXJlIHRvIHNvbWV0aGluZyB0aGF0IHdlIGNvdWxkIHBv
c3NpYmx5IGlubGluZS4KLSAgICBpZiAobnVtQ2FsbHNUb0tub3duIDw9IG51bUNhbGxzVG9Vbmtu
b3duKQotICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwotICAgIAotICAgIC8vIFdlIHJl
cXVpcmUgdGhhdCB0aGUgbnVtYmVyIG9mIHN1Y2ggY2FsbHMgaXMgZ3JlYXRlciB0aGFuIHNvbWUg
bWluaW1hbCB0aHJlc2hvbGQsIHNvIHRoYXQgd2UKLSAgICAvLyBhdm9pZCBpbmxpbmluZyBjb21w
bGV0ZWx5IGNvbGQgY2FsbHMuCi0gICAgaWYgKG51bUNhbGxzVG9Lbm93biA8IE9wdGlvbnM6OmZy
ZXF1ZW50Q2FsbFRocmVzaG9sZCgpKQotICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwot
ICAgIAotICAgIENhbGxMaW5rU3RhdHVzIHJlc3VsdDsKLSAgICByZXN1bHQubV9lZGdlcyA9IGVk
Z2VQcm9maWxlLT5jYWxsRWRnZXMoKTsKLSAgICByZXN1bHQubV9jb3VsZFRha2VTbG93UGF0aCA9
ICEhbnVtQ2FsbHNUb1Vua25vd247Ci0gICAgcmVzdWx0Lm1fY2FuVHJ1c3RDb3VudHMgPSB0cnVl
OwotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIENhbGxMaW5rU3RhdHVzIENhbGxMaW5r
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgIGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tl
ciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywK
ICAgICBFeGl0U2l0ZURhdGEgZXhpdFNpdGVEYXRhKQpAQCAtMjgyLDggKzI5Myw4IEBAIENhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm8KIAogYm9vbCBDYWxsTGlua1N0YXR1
czo6aXNDbG9zdXJlQ2FsbCgpIGNvbnN0CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9lZGdl
cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKG1fZWRnZXNbaV0uY2FsbGVlKCkuaXNDbG9z
dXJlQ2FsbCgpKQorICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFyaWFudHMuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLmlzQ2xvc3VyZUNhbGwoKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0yOTEsMTggKzMw
Miw3IEBAIGJvb2wgQ2FsbExpbmtTdGF0dXM6OmlzQ2xvc3VyZUNhbGwoKSBjb24KIAogdm9pZCBD
YWxsTGlua1N0YXR1czo6bWFrZUNsb3N1cmVDYWxsKCkKIHsKLSAgICBBU1NFUlQoIW1faXNQcm92
ZWQpOwotICAgIGZvciAodW5zaWduZWQgaSA9IG1fZWRnZXMuc2l6ZSgpOyBpLS07KQotICAgICAg
ICBtX2VkZ2VzW2ldID0gbV9lZGdlc1tpXS5kZXNwZWNpZmllZENsb3N1cmUoKTsKLSAgICAKLSAg
ICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAvLyBEb2luZyB0aGlzIHNob3VsZCBu
b3QgaGF2ZSBjcmVhdGVkIGR1cGxpY2F0ZXMsIGJlY2F1c2UgdGhlIENhbGxFZGdlUHJvZmlsZQot
ICAgICAgICAvLyBzaG91bGQgZGVzcGVjaWZ5IGNsb3N1cmVzIGlmIGRvaW5nIHNvIHdvdWxkIHJl
ZHVjZSB0aGUgbnVtYmVyIG9mIGtub3duIGNhbGxlZXMuCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2VkZ2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSBpICsgMTsgaiA8IG1fZWRnZXMuc2l6ZSgpOyArK2opCi0gICAgICAgICAgICAgICAg
QVNTRVJUKG1fZWRnZXNbaV0uY2FsbGVlKCkgIT0gbV9lZGdlc1tqXS5jYWxsZWUoKSk7Ci0gICAg
ICAgIH0KLSAgICB9CisgICAgbV92YXJpYW50cyA9IGRlc3BlY2lmaWVkVmFyaWFudExpc3QobV92
YXJpYW50cyk7CiB9CiAKIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKQEAgLTMyMCw3ICszMjAsOCBAQCB2b2lkIENhbGxMaW5rU3RhdHVzOjpkdW1wKFBy
aW50U3RyZWFtJiBvCiAgICAgaWYgKG1fY291bGRUYWtlU2xvd1BhdGgpCiAgICAgICAgIG91dC5w
cmludChjb21tYSwgIkNvdWxkIFRha2UgU2xvdyBQYXRoIik7CiAgICAgCi0gICAgb3V0LnByaW50
KGxpc3REdW1wKG1fZWRnZXMpKTsKKyAgICBpZiAoIW1fdmFyaWFudHMuaXNFbXB0eSgpKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIGxpc3REdW1wKG1fdmFyaWFudHMpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjcsNiArMjcsNyBAQAogI2RlZmluZSBDYWxsTGlua1N0YXR1c19oCiAKICNpbmNsdWRlICJDYWxs
TGlua0luZm8uaCIKKyNpbmNsdWRlICJDYWxsVmFyaWFudC5oIgogI2luY2x1ZGUgIkNvZGVPcmln
aW4uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiQ29u
Y3VycmVudEpJVExvY2suaCIKQEAgLTQ4LDcgKzQ5LDYgQEAgcHVibGljOgogICAgIENhbGxMaW5r
U3RhdHVzKCkKICAgICAgICAgOiBtX2NvdWxkVGFrZVNsb3dQYXRoKGZhbHNlKQogICAgICAgICAs
IG1faXNQcm92ZWQoZmFsc2UpCi0gICAgICAgICwgbV9jYW5UcnVzdENvdW50cyhmYWxzZSkKICAg
ICB7CiAgICAgfQogICAgIApAQCAtNjIsMTAgKzYyLDkgQEAgcHVibGljOgogICAgIGV4cGxpY2l0
IENhbGxMaW5rU3RhdHVzKEpTVmFsdWUpOwogICAgIAogICAgIENhbGxMaW5rU3RhdHVzKENhbGxW
YXJpYW50IHZhcmlhbnQpCi0gICAgICAgIDogbV9lZGdlcygxLCBDYWxsRWRnZSh2YXJpYW50LCAx
KSkKKyAgICAgICAgOiBtX3ZhcmlhbnRzKDEsIHZhcmlhbnQpCiAgICAgICAgICwgbV9jb3VsZFRh
a2VTbG93UGF0aChmYWxzZSkKICAgICAgICAgLCBtX2lzUHJvdmVkKGZhbHNlKQotICAgICAgICAs
IG1fY2FuVHJ1c3RDb3VudHMoZmFsc2UpCiAgICAgewogICAgIH0KICAgICAKQEAgLTEwOSwxOSAr
MTA4LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcigK
ICAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtJbmZvTWFwJiwg
Y29uc3QgQ29udGV4dE1hcCYpOwogICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVy
biAhbV9lZGdlcy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQorICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYW50cy5pc0VtcHR5KCkgfHwgbV9jb3VsZFRh
a2VTbG93UGF0aDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
IWlzU2V0KCk7IH0KICAgICAKICAgICBib29sIGNvdWxkVGFrZVNsb3dQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb3VsZFRha2VTbG93UGF0aDsgfQogICAgIAotICAgIENhbGxFZGdlTGlzdCBlZGdl
cygpIGNvbnN0IHsgcmV0dXJuIG1fZWRnZXM7IH0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9lZGdlcy5zaXplKCk7IH0KLSAgICBDYWxsRWRnZSBhdCh1bnNpZ25lZCBpKSBj
b25zdCB7IHJldHVybiBtX2VkZ2VzW2ldOyB9Ci0gICAgQ2FsbEVkZ2Ugb3BlcmF0b3JbXSh1bnNp
Z25lZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorICAgIENhbGxWYXJpYW50TGlzdCB2YXJp
YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBDYWxsVmFyaWFudCBhdCh1
bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2ldOyB9CisgICAgQ2FsbFZhcmlh
bnQgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogICAgIGJv
b2wgaXNQcm92ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzUHJvdmVkOyB9Ci0gICAgYm9vbCBjYW5P
cHRpbWl6ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2VkZ2VzLmlzRW1wdHkoKTsgfQotICAgIGJvb2wg
Y2FuVHJ1c3RDb3VudHMoKSBjb25zdCB7IHJldHVybiBtX2NhblRydXN0Q291bnRzOyB9CisgICAg
Ym9vbCBjYW5PcHRpbWl6ZSgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhcmlhbnRzLmlzRW1wdHkoKTsg
fQogICAgIAogICAgIGJvb2wgaXNDbG9zdXJlQ2FsbCgpIGNvbnN0OyAvLyBSZXR1cm5zIHRydWUg
aWYgYW55IGNhbGxlZSBpcyBhIGNsb3N1cmUgY2FsbC4KICAgICAKQEAgLTEzMiwxNSArMTMwLDEz
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9t
TExJbnQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwogI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIENhbGxMaW5rU3RhdHVz
IGNvbXB1dGVGcm9tQ2FsbEVkZ2VQcm9maWxlKENhbGxFZGdlUHJvZmlsZSopOwogICAgIHN0YXRp
YyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRnJvbUNhbGxMaW5rSW5mbygKICAgICAgICAgY29uc3Qg
Q29uY3VycmVudEpJVExvY2tlciYsIENhbGxMaW5rSW5mbyYpOwogI2VuZGlmCiAgICAgCi0gICAg
Q2FsbEVkZ2VMaXN0IG1fZWRnZXM7CisgICAgQ2FsbFZhcmlhbnRMaXN0IG1fdmFyaWFudHM7CiAg
ICAgYm9vbCBtX2NvdWxkVGFrZVNsb3dQYXRoOwogICAgIGJvb2wgbV9pc1Byb3ZlZDsKLSAgICBi
b29sIG1fY2FuVHJ1c3RDb3VudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsVmFyaWFudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50LmNwcAkocmV2aXNp
b24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxWYXJpYW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsNSArNTAsMzQgQEAgdm9pZCBDYWxsVmFyaWFudDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KQogICAgIG91dC5wcmludCgiRXhlY3V0YWJsZTogIiwgKmV4ZWN1
dGFibGUoKSk7CiB9CiAKK0NhbGxWYXJpYW50TGlzdCB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGNv
bnN0IENhbGxWYXJpYW50TGlzdCYgbGlzdCwgQ2FsbFZhcmlhbnQgdmFyaWFudFRvQWRkKQorewor
ICAgIEFTU0VSVCh2YXJpYW50VG9BZGQpOworICAgIENhbGxWYXJpYW50TGlzdCByZXN1bHQ7Cisg
ICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkgeworICAgICAgICBBU1NFUlQodmFy
aWFudCk7CisgICAgICAgIGlmICghIXZhcmlhbnRUb0FkZCkgeworICAgICAgICAgICAgaWYgKHZh
cmlhbnQgPT0gdmFyaWFudFRvQWRkKQorICAgICAgICAgICAgICAgIHZhcmlhbnRUb0FkZCA9IENh
bGxWYXJpYW50KCk7CisgICAgICAgICAgICBlbHNlIGlmICh2YXJpYW50LmRlc3BlY2lmaWVkQ2xv
c3VyZSgpID09IHZhcmlhbnRUb0FkZC5kZXNwZWNpZmllZENsb3N1cmUoKSkgeworICAgICAgICAg
ICAgICAgIHZhcmlhbnQgPSB2YXJpYW50LmRlc3BlY2lmaWVkQ2xvc3VyZSgpOworICAgICAgICAg
ICAgICAgIHZhcmlhbnRUb0FkZCA9IENhbGxWYXJpYW50KCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmVzdWx0LmFwcGVuZCh2YXJpYW50KTsKKyAgICB9CisgICAgaWYgKCEh
dmFyaWFudFRvQWRkKQorICAgICAgICByZXN1bHQuYXBwZW5kKHZhcmlhbnRUb0FkZCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworQ2FsbFZhcmlhbnRMaXN0IGRlc3BlY2lmaWVkVmFyaWFudExp
c3QoY29uc3QgQ2FsbFZhcmlhbnRMaXN0JiBsaXN0KQoreworICAgIENhbGxWYXJpYW50TGlzdCBy
ZXN1bHQ7CisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDogbGlzdCkKKyAgICAgICAgcmVz
dWx0ID0gdmFyaWFudExpc3RXaXRoVmFyaWFudChyZXN1bHQsIHZhcmlhbnQuZGVzcGVjaWZpZWRD
bG9zdXJlKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbFZhcmlhbnQuaAko
cmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU2LDExICs1Niw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
Ly8gICAgIHRoYW4gdGhlIGZhY3QgdGhhdCB0aGV5IGRvbid0IGZhbGwgaW50byBhbnkgb2YgdGhl
IGFib3ZlIGNhdGVnb3JpZXMuCiAvLwogLy8gVGhpcyBjbGFzcyBzZXJ2ZXMgYXMgYSBraW5kIG9m
IHVuaW9uIG92ZXIgdGhlc2UgZm91ciB0aGluZ3MuIEl0IGRvZXMgc28gYnkganVzdCBob2xkaW5n
IGEKLS8vIEpTQ2VsbCouIFdlIGRldGVybWluZSB3aGljaCBvZiB0aGUgbW9kZXMgaXRzIGluIGJ5
IGRvaW5nIHR5cGUgY2hlY2tzIG9uIHRoZSBjZWxsLiBOb3RlIHRoYXQgdGhlcmUKLS8vIGlzIG5v
IGxpZmVjeWNsZSBtYW5hZ2VtZW50IGZvciB0aGUgY2VsbCBiZWNhdXNlIHRoaXMgY2xhc3MgaXMg
YWx3YXlzIHVzZWQgaW4gY29udGV4dHMgd2hlcmUgd2UKLS8vIGVpdGhlciBkbyBjdXN0b20gd2Vh
ayByZWZlcmVuY2UgbG9naWMgb3ZlciBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyAoc2VlIENhbGxF
ZGdlUHJvZmlsZSksIG9yIHdlCi0vLyBhcmUgaW5zaWRlIHRoZSBjb21waWxlciBhbmQgd2UgYXNz
dW1lIHRoYXQgdGhlIGNvbXBpbGVyIHJ1bnMgaW4gYmV0d2VlbiBjb2xsZWN0aW9ucyBhbmQgc28g
Y2FuCi0vLyB0b3VjaCB0aGUgaGVhcCB3aXRob3V0IG5vdGlmeWluZyBhbnlvbmUuCisvLyBKU0Nl
bGwqLiBXZSBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlIG1vZGVzIGl0cyBpbiBieSBkb2luZyB0eXBl
IGNoZWNrcyBvbiB0aGUgY2VsbC4gTm90ZSB0aGF0IHdlCisvLyBjYW5ub3QgdXNlIFdyaXRlQmFy
cmllcjw+IGhlcmUgYmVjYXVzZSB0aGlzIGdldHMgdXNlZCBpbnNpZGUgdGhlIGNvbXBpbGVyLgog
CiBjbGFzcyBDYWxsVmFyaWFudCB7CiBwdWJsaWM6CkBAIC0xODEsNiArMTc4LDEzIEBAIHN0cnVj
dCBDYWxsVmFyaWFudEhhc2ggewogCiB0eXBlZGVmIFZlY3RvcjxDYWxsVmFyaWFudCwgMT4gQ2Fs
bFZhcmlhbnRMaXN0OwogCisvLyBSZXR1cm5zIGEgbmV3IHZhcmlhbnQgbGlzdCBieSBhdHRlbXB0
aW5nIHRvIGVpdGhlciBhcHBlbmQgdGhlIGdpdmVuIHZhcmlhbnQgb3IgbWVyZ2UgaXQgd2l0aCBv
bmUKKy8vIG9mIHRoZSB2YXJpYW50cyB3ZSBhbHJlYWR5IGhhdmUgYnkgZGVzcGVjaWZ5aW5nIGNs
b3N1cmVzLgorQ2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRMaXN0V2l0aFZhcmlhbnQoY29uc3QgQ2Fs
bFZhcmlhbnRMaXN0JiwgQ2FsbFZhcmlhbnQpOworCisvLyBSZXR1cm5zIGEgbmV3IGxpc3Qgd2hl
cmUgZXZlcnkgZWxlbWVudCBpcyBkZXNwZWNpZmllZCwgYW5kIHRoZSBsaXN0IGlzIGRlZHVwbGlj
YXRlZC4KK0NhbGxWYXJpYW50TGlzdCBkZXNwZWNpZmllZFZhcmlhbnRMaXN0KGNvbnN0IENhbGxW
YXJpYW50TGlzdCYpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwLCAyMDEyLTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24g
WndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIx
ODEsNiArMjE4MSw4IEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAgICAgLy8gZGVzdHJ1Y3Rv
ciB3aWxsIHRyeSB0byByZW1vdmUgbm9kZXMgZnJvbSBvdXIgKG5vIGxvbmdlciB2YWxpZCkgbGlu
a2VkIGxpc3QuCiAgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21p
bmdDYWxscy5lbmQoKSkKICAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnJlbW92ZSgp
OworICAgIHdoaWxlIChtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IG1faW5j
b21pbmdQb2x5bW9ycGhpY0NhbGxzLmVuZCgpKQorICAgICAgICBtX2luY29taW5nUG9seW1vcnBo
aWNDYWxscy5iZWdpbigpLT5yZW1vdmUoKTsKICAgICAKICAgICAvLyBOb3RlIHRoYXQgb3VyIG91
dGdvaW5nIGNhbGxzIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIG90aGVyIENvZGVCbG9ja3MnCiAgICAg
Ly8gbV9pbmNvbWluZ0NhbGxzIGxpbmtlZCBsaXN0cyB0aHJvdWdoIHRoZSBleGVjdXRpb24gb2Yg
dGhlIH5DYWxsTGlua0luZm8KQEAgLTMwNDcsNiArMzA0OSwxMiBAQCB2b2lkIENvZGVCbG9jazo6
bGlua0luY29taW5nQ2FsbChFeGVjU3RhCiAgICAgbm90aWNlSW5jb21pbmdDYWxsKGNhbGxlckZy
YW1lKTsKICAgICBtX2luY29taW5nQ2FsbHMucHVzaChpbmNvbWluZyk7CiB9CisKK3ZvaWQgQ29k
ZUJsb2NrOjpsaW5rSW5jb21pbmdQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiBjYWxsZXJGcmFt
ZSwgUG9seW1vcnBoaWNDYWxsTm9kZSogaW5jb21pbmcpCit7CisgICAgbm90aWNlSW5jb21pbmdD
YWxsKGNhbGxlckZyYW1lKTsKKyAgICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5wdXNoKGlu
Y29taW5nKTsKK30KICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB2b2lkIENvZGVCbG9jazo6dW5s
aW5rSW5jb21pbmdDYWxscygpCkBAIC0zMDU0LDExICszMDYyLDEzIEBAIHZvaWQgQ29kZUJsb2Nr
Ojp1bmxpbmtJbmNvbWluZ0NhbGxzKCkKICAgICB3aGlsZSAobV9pbmNvbWluZ0xMSW50Q2FsbHMu
YmVnaW4oKSAhPSBtX2luY29taW5nTExJbnRDYWxscy5lbmQoKSkKICAgICAgICAgbV9pbmNvbWlu
Z0xMSW50Q2FsbHMuYmVnaW4oKS0+dW5saW5rKCk7CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBpZiAo
bV9pbmNvbWluZ0NhbGxzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9pbmNvbWluZ0NhbGxzLmlzRW1w
dHkoKSAmJiBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIodGhpcyk7CiAgICAgd2hpbGUg
KG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkKICAgICAg
ICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnVubGluayhyZXBhdGNoQnVmZmVyKTsKKyAgICB3
aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nUG9s
eW1vcnBoaWNDYWxscy5lbmQoKSkKKyAgICAgICAgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMu
YmVnaW4oKS0+dW5saW5rKHJlcGF0Y2hCdWZmZXIpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9
CiAKQEAgLTMyNTIsMTIgKzMyNjIsMTkgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29taW5n
Q2FsbChFeGVjUwogICAgIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrID0gY2FsbGVyRnJhbWUt
PmNvZGVCbG9jaygpOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkK
LSAgICAgICAgZGF0YUxvZygiTm90aWNpbmcgY2FsbCBsaW5rIGZyb20gIiwgKmNhbGxlckNvZGVC
bG9jaywgIiB0byAiLCAqdGhpcywgIlxuIik7CisgICAgICAgIGRhdGFMb2coIk5vdGljaW5nIGNh
bGwgbGluayBmcm9tICIsIHBvaW50ZXJEdW1wKGNhbGxlckNvZGVCbG9jayksICIgdG8gIiwgKnRo
aXMsICJcbiIpOwogICAgIAorI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmICghbV9zaG91bGRB
bHdheXNCZUlubGluZWQpCiAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIWNhbGxlckNv
ZGVCbG9jaykgeworICAgICAgICBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCA9IGZhbHNlOworICAg
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUNhbGxMaW5rKCkpCisgICAgICAgICAgICBkYXRhTG9n
KCIgICAgQ2xlYXJpbmcgU0FCSSBiZWNhdXNlIGNhbGxlciBpcyBuYXRpdmUuXG4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmICghaGFzQmFz
ZWxpbmVKSVRQcm9maWxpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMjg1LDYgKzMzMDIs
MTMgQEAgdm9pZCBDb2RlQmxvY2s6Om5vdGljZUluY29taW5nQ2FsbChFeGVjUwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAorICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY2Fs
bGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKSB7CisgICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxp
bmVkID0gZmFsc2U7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlQ2FsbExpbmsoKSkKKyAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBDbGVhcmluZyBTQUJJIGJjYXVzZSBjYWxsZXIgd2FzIGFs
cmVhZHkgb3B0aW1pemVkLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAg
aWYgKGNhbGxlckNvZGVCbG9jay0+Y29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUpIHsKICAgICAg
ICAgLy8gSWYgdGhlIGNhbGxlciBpcyBlaXRoZXIgZXZhbCBvciBnbG9iYWwgY29kZSwgYXNzdW1l
IHRoYXQgdGhhdCB3b24ndCBiZQogICAgICAgICAvLyBvcHRpbWl6ZWQgYW55dGltZSBzb29uLiBG
b3IgZXZhbCBjb2RlIHRoaXMgaXMgcGFydGljdWxhcmx5IHRydWUgc2luY2Ugd2UKQEAgLTMzMDUs
OCArMzMyOSwxMSBAQCB2b2lkIENvZGVCbG9jazo6bm90aWNlSW5jb21pbmdDYWxsKEV4ZWNTCiAg
ICAgICAgIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0KLSAgICBSRUxFQVNFX0FTU0VSVChjYWxsZXJDb2RlQmxvY2stPm1fY2FwYWJpbGl0
eUxldmVsU3RhdGUgIT0gREZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpOworICAgIAorICAgIGlm
IChjYWxsZXJDb2RlQmxvY2stPm1fY2FwYWJpbGl0eUxldmVsU3RhdGUgPT0gREZHOjpDYXBhYmls
aXR5TGV2ZWxOb3RTZXQpIHsKKyAgICAgICAgZGF0YUxvZygiSW4gY2FsbCBmcm9tICIsICpjYWxs
ZXJDb2RlQmxvY2ssICIgIiwgY2FsbGVyRnJhbWUtPmNvZGVPcmlnaW4oKSwgIiB0byAiLCAqdGhp
cywgIjogY2FsbGVyJ3MgREZHIGNhcGFiaWxpdHkgbGV2ZWwgaXMgbm90IHNldC5cbiIpOworICAg
ICAgICBDUkFTSCgpOworICAgIH0KICAgICAKICAgICBpZiAoY2FuQ29tcGlsZShjYWxsZXJDb2Rl
QmxvY2stPm1fY2FwYWJpbGl0eUxldmVsU3RhdGUpKQogICAgICAgICByZXR1cm47CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNzky
NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIyOSwxMSArMjI5LDcgQEAgcHVibGljOgogICAgIHZvaWQgdW5saW5rQ2Fs
bHMoKTsKICAgICAgICAgCiAgICAgdm9pZCBsaW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2Fs
bGVyRnJhbWUsIENhbGxMaW5rSW5mbyopOwotICAgICAgICAKLSAgICBib29sIGlzSW5jb21pbmdD
YWxsQWxyZWFkeUxpbmtlZChDYWxsTGlua0luZm8qIGluY29taW5nKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1faW5jb21pbmdDYWxscy5pc09uTGlzdChpbmNvbWluZyk7Ci0gICAgfQorICAgIHZv
aWQgbGlua0luY29taW5nUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIFBv
bHltb3JwaGljQ2FsbE5vZGUqKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAgICAgdm9pZCBs
aW5rSW5jb21pbmdDYWxsKEV4ZWNTdGF0ZSogY2FsbGVyRnJhbWUsIExMSW50Q2FsbExpbmtJbmZv
Kik7CkBAIC0xMDc3LDYgKzEwNzMsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxCeVZhbEluZm8+
IG1fYnlWYWxJbmZvczsKICAgICBCYWc8Q2FsbExpbmtJbmZvPiBtX2NhbGxMaW5rSW5mb3M7CiAg
ICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8
Q2FsbExpbmtJbmZvPj4gbV9pbmNvbWluZ0NhbGxzOworICAgIFNlbnRpbmVsTGlua2VkTGlzdDxQ
b2x5bW9ycGhpY0NhbGxOb2RlLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxQb2x5bW9ycGhpY0NhbGxO
b2RlPj4gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHM7CiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q29tcGFjdEpJVENvZGVNYXA+IG1faml0Q29kZU1hcDsKICNpZiBFTkFCTEUoREZHX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk2OCwxNCArMTk2OCw2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAg
ICAgICBicmVhazsKIAotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgIGNhc2UgUHJvZmlsZWRD
b25zdHJ1Y3Q6Ci0gICAgICAgIGlmIChmb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCkpLm1fdmFsdWUpCi0gICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUp
OwotICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGlt
aXQpOwotICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7Ci0gICAgICAgIGJyZWFr
OwotCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2FzZSBDaGVja0JhZENlbGw6CiAgICAg
ICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAgLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3NSw3ICs2NzUsNyBAQCBwcml2YXRlOgogICAgICAg
ICBpZiAocGFyYW1ldGVyU2xvdHMgPiBtX3BhcmFtZXRlclNsb3RzKQogICAgICAgICAgICAgbV9w
YXJhbWV0ZXJTbG90cyA9IHBhcmFtZXRlclNsb3RzOwogCi0gICAgICAgIGludCBkdW1teVRoaXNB
cmd1bWVudCA9IG9wID09IENhbGwgfHwgb3AgPT0gTmF0aXZlQ2FsbCB8fCBvcCA9PSBQcm9maWxl
ZENhbGwgPyAwIDogMTsKKyAgICAgICAgaW50IGR1bW15VGhpc0FyZ3VtZW50ID0gb3AgPT0gQ2Fs
bCB8fCBvcCA9PSBOYXRpdmVDYWxsID8gMCA6IDE7CiAgICAgICAgIGZvciAoaW50IGkgPSAwICsg
ZHVtbXlUaGlzQXJndW1lbnQ7IGkgPCBhcmdDb3VudDsgKytpKQogICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0
KSkpOwogCkBAIC0xMDQ0LDE3ICsxMDQ0LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
Q2FsbCgKICAgICBpZiAoY2FsbFRhcmdldC0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAgY2FsbExp
bmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cyhjYWxsVGFyZ2V0LT5hc0pTVmFsdWUoKSkuc2V0SXNQ
cm92ZWQodHJ1ZSk7CiAgICAgCi0gICAgaWYgKCghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUo
KSB8fCBjYWxsTGlua1N0YXR1cy5zaXplKCkgIT0gMSkKLSAgICAgICAgJiYgIWlzRlRMKG1fZ3Jh
cGgubV9wbGFuLm1vZGUpICYmIE9wdGlvbnM6OnVzZUZUTEpJVCgpCi0gICAgICAgICYmIElubGlu
ZUNhbGxGcmFtZTo6aXNOb3JtYWxDYWxsKGtpbmQpCi0gICAgICAgICYmIENhbGxFZGdlTG9nOjpp
c0VuYWJsZWQoKQotICAgICAgICAmJiBPcHRpb25zOjpkZmdEb2VzQ2FsbEVkZ2VQcm9maWxpbmco
KSkgewotICAgICAgICBBU1NFUlQob3AgPT0gQ2FsbCB8fCBvcCA9PSBDb25zdHJ1Y3QpOwotICAg
ICAgICBpZiAob3AgPT0gQ2FsbCkKLSAgICAgICAgICAgIG9wID0gUHJvZmlsZWRDYWxsOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBvcCA9IFByb2ZpbGVkQ29uc3RydWN0OwotICAgIH0KKyAg
ICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQorICAgICAgICBkYXRh
TG9nKCIgICAgSGFuZGxpbmcgY2FsbCBhdCAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiOiAiLCBj
YWxsTGlua1N0YXR1cywgIlxuIik7CiAgICAgCiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jYW5P
cHRpbWl6ZSgpKSB7CiAgICAgICAgIC8vIE9kZGx5LCB0aGlzIGNvbmZsYXRlcyBjYWxscyB0aGF0
IGhhdmVuJ3QgZXhlY3V0ZWQgd2l0aCBjYWxscyB0aGF0IGJlaGF2ZWQgc3VmZmljaWVudGx5IHBv
bHltb3JwaGljYWxseQpAQCAtMTA3NiwxNyArMTA2NywxNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVDYWxsKAogICAgIAogI2lmIEVOQUJMRShGVExfTkFUSVZFX0NBTExfSU5MSU5JTkcp
CiAgICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpICYmIE9wdGlvbnM6Om9wdGltaXpl
TmF0aXZlQ2FsbHMoKSAmJiBjYWxsTGlua1N0YXR1cy5zaXplKCkgPT0gMSAmJiAhY2FsbExpbmtT
dGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKSkgewotICAgICAgICBDYWxsVmFyaWFudCBjYWxsZWUg
PSBjYWxsTGlua1N0YXR1c1swXS5jYWxsZWUoKTsKKyAgICAgICAgQ2FsbFZhcmlhbnQgY2FsbGVl
ID0gY2FsbExpbmtTdGF0dXNbMF07CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gY2Fs
bGVlLmZ1bmN0aW9uKCk7CiAgICAgICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6
YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7
CiAgICAgICAgIGlmIChmdW5jdGlvbiAmJiBmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkgewog
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxlZSwgY2FsbFRhcmdldCwgcmVnaXN0
ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAgICBjYWxsT3BJbmZvID0g
T3BJbmZvKG1fZ3JhcGguZnJlZXplKGZ1bmN0aW9uKSk7CiAKLSAgICAgICAgICAgIGlmIChvcCA9
PSBDYWxsIHx8IG9wID09IFByb2ZpbGVkQ2FsbCkKKyAgICAgICAgICAgIGlmIChvcCA9PSBDYWxs
KQogICAgICAgICAgICAgICAgIG9wID0gTmF0aXZlQ2FsbDsKICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9PSBDb25zdHJ1Y3QgfHwgb3AgPT0gUHJvZmlsZWRD
b25zdHJ1Y3QpOworICAgICAgICAgICAgICAgIEFTU0VSVChvcCA9PSBDb25zdHJ1Y3QpOwogICAg
ICAgICAgICAgICAgIG9wID0gTmF0aXZlQ29uc3RydWN0OwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0xNDI2LDEzICsxNDE3LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKE5vZGUKICAgICAvLyB0aGlzIGluIGNhc2VzIHdoZXJlIHdlIGRvbid0IG5lZWQgY29u
dHJvbCBmbG93IGRpYW1vbmRzIHRvIGNoZWNrIHRoZSBjYWxsZWUuCiAgICAgaWYgKCFjYWxsTGlu
a1N0YXR1cy5jb3VsZFRha2VTbG93UGF0aCgpICYmIGNhbGxMaW5rU3RhdHVzLnNpemUoKSA9PSAx
KSB7CiAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcygKLSAgICAgICAgICAgIGNhbGxMaW5rU3Rh
dHVzWzBdLmNhbGxlZSgpLCBjYWxsVGFyZ2V0Tm9kZSwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxp
emF0aW9uS2luZCk7CisgICAgICAgICAgICBjYWxsTGlua1N0YXR1c1swXSwgY2FsbFRhcmdldE5v
ZGUsIHJlZ2lzdGVyT2Zmc2V0LCBzcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAgICBib29sIHJl
c3VsdCA9IGF0dGVtcHRUb0lubGluZUNhbGwoCi0gICAgICAgICAgICBjYWxsVGFyZ2V0Tm9kZSwg
cmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXNbMF0uY2FsbGVlKCksIHJlZ2lzdGVyT2Zmc2V0
LAorICAgICAgICAgICAgY2FsbFRhcmdldE5vZGUsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3Rh
dHVzWzBdLCByZWdpc3Rlck9mZnNldCwKICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kLCBDYWxsZXJEb2VzTm9ybWFsTGlua2luZywgcHJlZGlj
dGlvbiwKICAgICAgICAgICAgIGlubGluaW5nQmFsYW5jZSk7CiAgICAgICAgIGlmICghcmVzdWx0
ICYmICFjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpKQotICAgICAgICAgICAgdW5kb0Z1bmN0aW9u
Q2hlY2tzKGNhbGxMaW5rU3RhdHVzWzBdLmNhbGxlZSgpKTsKKyAgICAgICAgICAgIHVuZG9GdW5j
dGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1c1swXSk7CiAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAg
ICAgICAgICAgICBkYXRhTG9nKCJEb25lIGlubGluaW5nIChzaW1wbGUpLlxuIik7CiAgICAgICAg
ICAgICBkYXRhTG9nKCJTdGFjazogIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIlxuIik7CkBAIC0x
NDYyLDcgKzE0NTMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2Rl
CiAgICAgYm9vbCBhbGxBcmVDbG9zdXJlQ2FsbHMgPSB0cnVlOwogICAgIGJvb2wgYWxsQXJlRGly
ZWN0Q2FsbHMgPSB0cnVlOwogICAgIGZvciAodW5zaWduZWQgaSA9IGNhbGxMaW5rU3RhdHVzLnNp
emUoKTsgaS0tOykgewotICAgICAgICBpZiAoY2FsbExpbmtTdGF0dXNbaV0uY2FsbGVlKCkuaXND
bG9zdXJlQ2FsbCgpKQorICAgICAgICBpZiAoY2FsbExpbmtTdGF0dXNbaV0uaXNDbG9zdXJlQ2Fs
bCgpKQogICAgICAgICAgICAgYWxsQXJlRGlyZWN0Q2FsbHMgPSBmYWxzZTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgYWxsQXJlQ2xvc3VyZUNhbGxzID0gZmFsc2U7CkBAIC0xNDc1LDkgKzE0
NjYsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAg
IHRoaW5nVG9Td2l0Y2hPbiA9IGFkZFRvR3JhcGgoR2V0RXhlY3V0YWJsZSwgY2FsbFRhcmdldE5v
ZGUpOwogICAgIGVsc2UgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8g
aGFuZGxlIHRoaXMgY2FzZSwgYnV0IGl0J3MgdHJpY2t5IGFuZCB3ZSBkb24ndCBrbm93IG9mIGNh
c2VzCi0gICAgICAgIC8vIHdoZXJlIGl0IHdvdWxkIGJlIGJlbmVmaWNpYWwuIEFsc28sIENhbGxM
aW5rU3RhdHVzIHdvdWxkIG1ha2UgYWxsIGNhbGxlZXMgYXBwZWFyIGxpa2UKLSAgICAgICAgLy8g
Y2xvc3VyZSBjYWxscyBpZiBhbnkgY2FsbHMgd2VyZSBjbG9zdXJlIGNhbGxzIC0gZXhjZXB0IGZv
ciBjYWxscyB0byBpbnRlcm5hbCBmdW5jdGlvbnMuCi0gICAgICAgIC8vIFNvIHRoaXMgd2lsbCBv
bmx5IGFyaXNlIGlmIHNvbWUgY2FsbGVlcyBhcmUgaW50ZXJuYWwgZnVuY3Rpb25zIGFuZCBvdGhl
cnMgYXJlIGNsb3N1cmVzLgorICAgICAgICAvLyB3aGVyZSBpdCB3b3VsZCBiZSBiZW5lZmljaWFs
LiBJdCBtaWdodCBiZSBiZXN0IHRvIGhhbmRsZSB0aGVzZSBjYXNlcyBhcyBpZiBhbGwgY2FsbHMg
d2VyZQorICAgICAgICAvLyBjbG9zdXJlIGNhbGxzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2MDIwCiAgICAgICAgIGlmICh2ZXJib3NlKSB7
CiAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5nIGlubGluaW5nIChtaXgpLlxuIik7CkBAIC0x
NTE3LDcgKzE1MDcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2Rl
CiAgICAgLy8gdG8gdGhlIGNvbnRpbnVhdGlvbiBibG9jaywgd2hpY2ggd2UgY3JlYXRlIGxhc3Qu
CiAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBsYW5kaW5nQmxvY2tzOwogICAgIAotICAgIC8vIFdl
IG1ha2UgZm9yY2UgdGhpcyB0cnVlIGlmIHdlIGdpdmUgdXAgb24gaW5saW5pbmcgYW55IG9mIHRo
ZSBlZGdlcy4KKyAgICAvLyBXZSBtYXkgZm9yY2UgdGhpcyB0cnVlIGlmIHdlIGdpdmUgdXAgb24g
aW5saW5pbmcgYW55IG9mIHRoZSBlZGdlcy4KICAgICBib29sIGNvdWxkVGFrZVNsb3dQYXRoID0g
Y2FsbExpbmtTdGF0dXMuY291bGRUYWtlU2xvd1BhdGgoKTsKICAgICAKICAgICBpZiAodmVyYm9z
ZSkKQEAgLTE1MzMsNyArMTUyMyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKE5vZGUKICAgICAgICAgTm9kZSogbXlDYWxsVGFyZ2V0Tm9kZSA9IGdldERpcmVjdChjYWxs
ZWVSZWcpOwogICAgICAgICAKICAgICAgICAgYm9vbCBpbmxpbmluZ1Jlc3VsdCA9IGF0dGVtcHRU
b0lubGluZUNhbGwoCi0gICAgICAgICAgICBteUNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5k
LCBjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKSwgcmVnaXN0ZXJPZmZzZXQsCisgICAgICAgICAg
ICBteUNhbGxUYXJnZXROb2RlLCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1c1tpXSwgcmVn
aXN0ZXJPZmZzZXQsCiAgICAgICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4
dE9mZnNldCwga2luZCwgQ2FsbGVyTGlua3NNYW51YWxseSwgcHJlZGljdGlvbiwKICAgICAgICAg
ICAgIGlubGluaW5nQmFsYW5jZSk7CiAgICAgICAgIApAQCAtMTU1MiwxMCArMTU0MiwxMCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgICAgIAogICAgICAg
ICBKU0NlbGwqIHRoaW5nVG9DYXNlT247CiAgICAgICAgIGlmIChhbGxBcmVEaXJlY3RDYWxscykK
LSAgICAgICAgICAgIHRoaW5nVG9DYXNlT24gPSBjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKS5u
b25FeGVjdXRhYmxlQ2FsbGVlKCk7CisgICAgICAgICAgICB0aGluZ1RvQ2FzZU9uID0gY2FsbExp
bmtTdGF0dXNbaV0ubm9uRXhlY3V0YWJsZUNhbGxlZSgpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIEFTU0VSVChhbGxBcmVDbG9zdXJlQ2FsbHMpOwotICAgICAgICAgICAgdGhpbmdUb0Nh
c2VPbiA9IGNhbGxMaW5rU3RhdHVzW2ldLmNhbGxlZSgpLmV4ZWN1dGFibGUoKTsKKyAgICAgICAg
ICAgIHRoaW5nVG9DYXNlT24gPSBjYWxsTGlua1N0YXR1c1tpXS5leGVjdXRhYmxlKCk7CiAgICAg
ICAgIH0KICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX2dyYXBoLmZyZWV6
ZSh0aGluZ1RvQ2FzZU9uKSwgYmxvY2suZ2V0KCkpKTsKICAgICAgICAgbV9jdXJyZW50SW5kZXgg
PSBuZXh0T2Zmc2V0OwpAQCAtMTU2Nyw3ICsxNTU3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW5saW5pbmcoTm9kZQogICAgICAgICBsYW5kaW5nQmxvY2tzLmFwcGVuZChtX2N1cnJl
bnRCbG9jayk7CiAKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCJG
aW5pc2hlZCBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1c1tpXS5jYWxsZWUoKSwgIiBhdCAiLCBj
dXJyZW50Q29kZU9yaWdpbigpLCAiLlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCJGaW5pc2hl
ZCBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1c1tpXSwgIiBhdCAiLCBjdXJyZW50Q29kZU9yaWdp
bigpLCAiLlxuIik7CiAgICAgfQogICAgIAogICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBzbG93UGF0
aEJsb2NrID0gYWRvcHRSZWYoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Myw4ICszNjMsNiBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBBcnJheVBvcDoK
ICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgY2FzZSBQcm9maWxlZENh
bGw6Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICBjYXNlIE5hdGl2ZUNhbGw6CiAg
ICAgY2FzZSBOYXRpdmVDb25zdHJ1Y3Q6CiAgICAgY2FzZSBUb1ByaW1pdGl2ZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDIwICs0MjAs
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBQcm9maWxlZENhbGw6Ci0gICAgICAgICAg
ICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OiB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3N0YXRl
LmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkubV92YWx1ZSkKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
SWYgd2Ugd2VyZSBhYmxlIHRvIHByb3ZlIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNvbnN0YW50IHRo
ZW4gdGhlIG5vcm1hbCBjYWxsCi0gICAgICAgICAgICAgICAgLy8gaW5saW5lIGNhY2hlIHdpbGwg
cmVjb3JkIHRoaXMgY2FsbGVlLiBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gbmVlZCB0byBk
byBhbnkKLSAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbmFsIHByb2ZpbGluZy4KLSAgICAgICAg
ICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAg
ICAgICBub2RlLT5zZXRPcChub2RlLT5vcCgpID09IFByb2ZpbGVkQ2FsbCA/IENhbGwgOiBDb25z
dHJ1Y3QpOwotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsOCArMTE4LDYg
QEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQ29uc3Ry
dWN0OgogICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKLSAg
ICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0OgogICAgIGNh
c2UgQnJlYWtwb2ludDoKICAgICBjYXNlIFByb2ZpbGVXaWxsQ2FsbDoKICAgICBjYXNlIFByb2Zp
bGVEaWRDYWxsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAko
cmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSwyMCArNzksMTcgQEAgc3RhdGljIENvbXBpbGF0aW9u
UmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIGlmIChtb2RlID09IERGR01vZGUpIHsKICAgICAgICAg
dm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKTsKICAgICAgICAgdm0uZ2V0Q1RJ
U3R1YihsaW5rQ29uc3RydWN0VGh1bmtHZW5lcmF0b3IpOwotICAgICAgICB2bS5nZXRDVElTdHVi
KGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1Yihs
aW5rUG9seW1vcnBoaWNDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRDVElTdHVi
KHZpcnR1YWxDYWxsVGh1bmtHZW5lcmF0b3IpOwogICAgICAgICB2bS5nZXRDVElTdHViKHZpcnR1
YWxDb25zdHJ1Y3RUaHVua0dlbmVyYXRvcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdm0uZ2V0
Q1RJU3R1YihsaW5rQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0b3IpOwogICAgICAg
ICB2bS5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJh
dG9yKTsKLSAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVz
UmVnc1RodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgdm0uZ2V0Q1RJU3R1YihsaW5rUG9seW1vcnBo
aWNDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcik7CiAgICAgICAgIHZtLmdldENU
SVN0dWIodmlydHVhbENhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKTsKICAgICAg
ICAgdm0uZ2V0Q1RJU3R1Yih2aXJ0dWFsQ29uc3RydWN0VGhhdFByZXNlcnZlc1JlZ3NUaHVua0dl
bmVyYXRvcik7CiAgICAgfQogICAgIAotICAgIGlmIChDYWxsRWRnZUxvZzo6aXNFbmFibGVkKCkp
Ci0gICAgICAgIHZtLmVuc3VyZUNhbGxFZGdlTG9nKCkucHJvY2Vzc0xvZygpOwotCiAgICAgaWYg
KHZtLnR5cGVQcm9maWxlcigpKQogICAgICAgICB2bS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vz
c0xvZ0VudHJpZXMoQVNDSUlMaXRlcmFsKCJQcmVwYXJpbmcgZm9yIERGRyBjb21waWxhdGlvbi4i
KSk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMDIsOCArMTIwMiw2IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OgogICAgICAgICBj
YXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICBjYXNlIFByb2ZpbGVk
Q2FsbDoKLSAgICAgICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBQcm9m
aWxlQ29udHJvbEZsb3c6CiAgICAgICAgIGNhc2UgTmF0aXZlQ2FsbDoKICAgICAgICAgY2FzZSBO
YXRpdmVDb25zdHJ1Y3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNTcsOCArMTA1Nyw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
Y2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAg
IGNhc2UgQ29uc3RydWN0OgotICAgICAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgY2Fz
ZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgICAgICBj
YXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE3OTI0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjE3LDggKzIxNyw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAv
KiBDYWxscy4gKi9cCiAgICAgbWFjcm8oQ2FsbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhD
b25zdHJ1Y3QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJn
cyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCi0gICAgbWFjcm8oUHJvZmlsZWRDYWxsLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNX
b3JsZCkgXAotICAgIG1hY3JvKFByb2ZpbGVkQ29uc3RydWN0LCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAg
IG1hY3JvKE5hdGl2ZUNhbGwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
SGFzVmFyQXJncyB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oTmF0aXZlQ29uc3Ry
dWN0LCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUhhc1ZhckFyZ3MgfCBO
b2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxOSw2
ICsxMjE5LDExIEBAIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyVGllclVwTm93KEV4ZWMKICAg
ICBEZWZlckdDIGRlZmVyR0Modm0tPmhlYXApOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7CiAgICAgCisgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpICE9
IEpJVENvZGU6OkRGR0pJVCkgeworICAgICAgICBkYXRhTG9nKCJVbmV4cGVjdGVkIGNvZGUgYmxv
Y2sgaW4gREZHLT5GVEwgdGllci11cDogIiwgKmNvZGVCbG9jaywgIlxuIik7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAogICAgIEpJVENvZGUqIGpp
dENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CiAgICAgCiAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkgewpAQCAtMTIzOCw2ICsxMjQzLDExIEBAIGNoYXIqIEpJVF9PUEVS
QVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS0+aGVhcCk7
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICAKKyAg
ICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29kZTo6REZHSklUKSB7CisgICAgICAg
IGRhdGFMb2coIlVuZXhwZWN0ZWQgY29kZSBibG9jayBpbiBERkctPkZUTCB0aWVyLXVwOiAiLCAq
Y29kZUJsb2NrLCAiXG4iKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisgICAgCiAgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgp
LT5kZmcoKTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4OCw4ICsxODgsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldERpcmVjdFBu
YW1lOgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAg
ICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICAgICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAg
ICAgICAgY2FzZSBOYXRpdmVDYWxsOgogICAgICAgICBjYXNlIE5hdGl2ZUNvbnN0cnVjdDoKICAg
ICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OSw4
ICsxODksNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAg
Y2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0
OgotICAgIGNhc2UgUHJvZmlsZWRDYWxsOgotICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6CiAg
ICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgY2FzZSBOZXdBcnJheToKICAgICBjYXNlIE5ld0FycmF5
V2l0aFNpemU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzOCw5ICs2MzgsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmlj
dEVxCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiB7Ci0gICAg
Ym9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3AoKSA9PSBQcm9maWxl
ZENhbGw7CisgICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGw7CiAgICAgaWYgKCFp
c0NhbGwpCi0gICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IENvbnN0cnVjdCB8fCBub2RlLT5v
cCgpID09IFByb2ZpbGVkQ29uc3RydWN0KTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0g
Q29uc3RydWN0KTsKIAogICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50
IGlzIG5vdCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQogICAgIC8vIGZvciBpdC4K
QEAgLTY4OSwxMSArNjg5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSog
bm9kZQogICAgIAogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5h
ZGRDYWxsTGlua0luZm8oKTsKIAotICAgIGlmIChub2RlLT5vcCgpID09IFByb2ZpbGVkQ2FsbCB8
fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KSB7Ci0gICAgICAgIG1faml0LnZtKCkt
PmNhbGxFZGdlTG9nLT5lbWl0TG9nQ29kZSgKLSAgICAgICAgICAgIG1faml0LCBpbmZvLT5jYWxs
RWRnZVByb2ZpbGUsIGNhbGxlZS5qc1ZhbHVlUmVncygpKTsKLSAgICB9Ci0gICAgCiAgICAgc2xv
d1BhdGguYXBwZW5kKGJyYW5jaE5vdENlbGwoY2FsbGVlLmpzVmFsdWVSZWdzKCkpKTsKICAgICBz
bG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgY2FsbGVlUGF5bG9hZEdQUiwgdGFyZ2V0VG9DaGVjaykpOwogCkBAIC00MTY5LDgg
KzQxNjQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAg
ICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAgY2FzZSBQcm9maWxlZENhbGw6
Ci0gICAgY2FzZSBQcm9maWxlZENvbnN0cnVjdDoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYyNCw5ICs2MjQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWlzY1N0cmljdEVx
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiB7Ci0gICAgYm9v
bCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3AoKSA9PSBQcm9maWxlZENh
bGw7CisgICAgYm9vbCBpc0NhbGwgPSBub2RlLT5vcCgpID09IENhbGw7CiAgICAgaWYgKCFpc0Nh
bGwpCi0gICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3AoKSA9
PSBDb25zdHJ1Y3QgfHwgbm9kZS0+b3AoKSA9PSBQcm9maWxlZENvbnN0cnVjdCk7CisgICAgICAg
IERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbm9kZSwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3Qp
OwogICAgIAogICAgIC8vIEZvciBjb25zdHJ1Y3RvcnMsIHRoZSB0aGlzIGFyZ3VtZW50IGlzIG5v
dCBwYXNzZWQgYnV0IHdlIGhhdmUgdG8gbWFrZSBzcGFjZQogICAgIC8vIGZvciBpdC4KQEAgLTY2
OSwxMSArNjY5LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQog
ICAgIAogICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gbV9qaXQuY29kZUJsb2NrKCkt
PmFkZENhbGxMaW5rSW5mbygpOwogICAgIAotICAgIGlmIChub2RlLT5vcCgpID09IFByb2ZpbGVk
Q2FsbCB8fCBub2RlLT5vcCgpID09IFByb2ZpbGVkQ29uc3RydWN0KSB7Ci0gICAgICAgIG1faml0
LnZtKCktPmNhbGxFZGdlTG9nLT5lbWl0TG9nQ29kZSgKLSAgICAgICAgICAgIG1faml0LCBjYWxs
TGlua0luZm8tPmNhbGxFZGdlUHJvZmlsZSwgSlNWYWx1ZVJlZ3MoY2FsbGVlR1BSKSk7Ci0gICAg
fQotCiAgICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKDApKTsKIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9q
aXQubmVhckNhbGwoKTsKQEAgLTQyMzYsOCArNDIzMSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVj
dDoKLSAgICBjYXNlIFByb2ZpbGVkQ2FsbDoKLSAgICBjYXNlIFByb2ZpbGVkQ29uc3RydWN0Ogog
ICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNr
SW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MCwxNyArNTAsMTMgQEAgcHVibGljOgogICAgICAgICBpZiAoIU9wdGlvbnM6OnVzZUZU
TEpJVCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgaWYg
KG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrLT5tX2RpZEZhaWxGVExDb21waWxhdGlvbikgewotICAg
ICAgICAgICAgcmVtb3ZlRlRMUHJvZmlsaW5nKCk7CisgICAgICAgIGlmIChtX2dyYXBoLm1fcHJv
ZmlsZWRCbG9jay0+bV9kaWRGYWlsRlRMQ29tcGlsYXRpb24pCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KICAgICAgICAgCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgICAg
IEZUTDo6Q2FwYWJpbGl0eUxldmVsIGxldmVsID0gRlRMOjpjYW5Db21waWxlKG1fZ3JhcGgpOwot
ICAgICAgICBpZiAobGV2ZWwgPT0gRlRMOjpDYW5ub3RDb21waWxlKSB7Ci0gICAgICAgICAgICBy
ZW1vdmVGVExQcm9maWxpbmcoKTsKKyAgICAgICAgaWYgKGxldmVsID09IEZUTDo6Q2Fubm90Q29t
cGlsZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaWYgKCFPcHRpb25zOjplbmFibGVPU1JFbnRyeVRvRlRMKCkpCiAgICAgICAgICAgICBs
ZXZlbCA9IEZUTDo6Q2FuQ29tcGlsZTsKQEAgLTEyMiwzMiArMTE4LDYgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgfQotCi1w
cml2YXRlOgotICAgIHZvaWQgcmVtb3ZlRlRMUHJvZmlsaW5nKCkKLSAgICB7Ci0gICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRl
eC0tOykgewotICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJs
b2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXgg
PSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewotICAgICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFByb2ZpbGVkQ2Fs
bDoKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3AoQ2FsbCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNl
IFByb2ZpbGVkQ29uc3RydWN0OgotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChDb25z
dHJ1Y3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQogfTsKIAog
Ym9vbCBwZXJmb3JtVGllclVwQ2hlY2tJbmplY3Rpb24oR3JhcGgmIGdyYXBoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
MTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTEgKzE3Niw2IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2
ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgogICAg
ICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHJvZmlsZWRD
YWxsOgotICAgIGNhc2UgUHJvZmlsZWRDb25zdHJ1Y3Q6Ci0gICAgICAgIC8vIFRoZXNlIGFyZSBP
SyBub3QgYmVjYXVzZSB0aGUgRlRMIGNhbiBzdXBwb3J0IHRoZW0sIGJ1dCBiZWNhdXNlIGlmIHRo
ZSBERkcgc2VlcyBvbmUgb2YKLSAgICAgICAgLy8gdGhlc2UgdGhlbiB0aGUgRlRMIHdpbGwgc2Vl
IGEgbm9ybWFsIENhbGwvQ29uc3RydWN0LgotICAgICAgICBicmVhazsKICAgICBjYXNlIElkZW50
aXR5OgogICAgICAgICAvLyBObyBiYWNrZW5kIGhhbmRsZXMgdGhpcyBiZWNhdXNlIGl0IHdpbGwg
YmUgb3B0aW1pemVkIG91dC4gQnV0IHdlIG1heSBjaGVjawogICAgICAgICAvLyBmb3IgY2FwYWJp
bGl0aWVzIGJlZm9yZSBvcHRpbWl6YXRpb24uIEl0IHdvdWxkIGJlIGEgZGVlcCBlcnJvciB0byBy
ZW1vdmUgdGhpcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9u
IDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OTMsMTEgKzk5Myw2IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChIZWFwT3BlcmF0
aW9uIGNvbGxlY3QKICAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dF
bnRyaWVzKEFTQ0lJTGl0ZXJhbCgiR0MiKSk7CiAgICAgfQogICAgIAotICAgIGlmICh2bSgpLT5j
YWxsRWRnZUxvZykgewotICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGF3aGlsZSgqdGhpcyk7Ci0g
ICAgICAgIHZtKCktPmNhbGxFZGdlTG9nLT5wcm9jZXNzTG9nKCk7Ci0gICAgfQotICAgIAogICAg
IFJFTEVBU0VfQVNTRVJUKCFtX2RlZmVycmFsRGVwdGgpOwogICAgIEFTU0VSVCh2bSgpLT5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAgICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5h
dG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERhdGEoKS5hdG9taWNTdHJpbmdUYWJsZSgp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmluYXJ5U3dpdGNoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CaW5hcnlTd2l0Y2guaAkocmV2aXNp
b24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CaW5hcnlTd2l0Y2guaAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vICAgICBp
bnQgdmFsdWUgPSBzd2l0Y2guY2FzZVZhbHVlKCk7CiAvLyAgICAgdW5zaWduZWQgaW5kZXggPSBz
d2l0Y2guY2FzZUluZGV4KCk7IC8vIGluZGV4IGludG8gY2FzZXNWZWN0b3IsIGFib3ZlCiAvLyAg
ICAgLi4uIC8vIGdlbmVyYXRlIGNvZGUgZm9yIHRoaXMgY2FzZQorLy8gICAgIC4uLiA9IGppdC5q
dW1wKCk7IC8vIHlvdSBoYXZlIHRvIGp1bXAgb3V0IHlvdXJzZWxmOyBmYWxsaW5nIHRocm91Z2gg
Y2F1c2VzIHVuZGVmaW5lZCBiZWhhdmlvcgogLy8gfQogLy8gc3dpdGNoLmZhbGxUaHJvdWdoKCku
bGluaygmaml0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNs
b3N1cmVDYWxsU3R1YlJvdXRpbmUuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJF
eGVjdXRhYmxlLmgiCi0jaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIlZNLmgiCi0jaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSAiU3Ry
dWN0dXJlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1DbG9zdXJlQ2FsbFN0dWJSb3V0aW5lOjpD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAotICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYg
Y29kZSwgVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLAotICAgIEV4ZWN1dGFibGVCYXNlKiBl
eGVjdXRhYmxlKQotICAgIDogR0NBd2FyZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtKQotICAgICwg
bV9leGVjdXRhYmxlKHZtLCBvd25lciwgZXhlY3V0YWJsZSkKLXsKLX0KLQotQ2xvc3VyZUNhbGxT
dHViUm91dGluZTo6fkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUoKQotewotfQotCi12b2lkIENsb3N1
cmVDYWxsU3R1YlJvdXRpbmU6Om1hcmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRv
ciYgdmlzaXRvcikKLXsKLSAgICB2aXNpdG9yLmFwcGVuZCgmbV9leGVjdXRhYmxlKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaAko
cmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IENsb3N1cmVDYWxsU3R1YlJvdXRpbmVfaAotI2RlZmluZSBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
X2gKLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCi0jaW5jbHVk
ZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBD
bG9zdXJlQ2FsbFN0dWJSb3V0aW5lIDogcHVibGljIEdDQXdhcmVKSVRTdHViUm91dGluZSB7Ci1w
dWJsaWM6Ci0gICAgQ2xvc3VyZUNhbGxTdHViUm91dGluZSgKLSAgICAgICAgY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmJiwgVk0mLCBjb25zdCBKU0NlbGwqIG93bmVyLAotICAgICAgICBFeGVj
dXRhYmxlQmFzZSopOwotICAgIAotICAgIHZpcnR1YWwgfkNsb3N1cmVDYWxsU3R1YlJvdXRpbmUo
KTsKLSAgICAKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZXhlY3V0YWJsZS5nZXQoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG1h
cmtSZXF1aXJlZE9iamVjdHNJbnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOwotCi1wcml2
YXRlOgotICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFzZT4gbV9leGVjdXRhYmxlOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0jZW5kaWYg
Ly8gQ2xvc3VyZUNhbGxTdHViUm91dGluZV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAwLDEy
ICszMDAsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAg
ICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CiAK
LSAgICBpZiAoQ2FsbEVkZ2VMb2c6OmlzRW5hYmxlZCgpICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KQotICAgICAgICAmJiBPcHRpb25zOjpiYXNlbGluZURvZXNDYWxsRWRnZVByb2ZpbGluZygpKSB7
Ci0gICAgICAgIG1fdm0tPmVuc3VyZUNhbGxFZGdlTG9nKCkuZW1pdExvZ0NvZGUoCi0gICAgICAg
ICAgICAqdGhpcywgaW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKLSAgICB9Ci0KICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CiAgICAg
ICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0cnVjdGlvbik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTc5MjQyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE0LDEwICsyMTQsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJ
CiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5r
SW5mbygpOwogCi0gICAgaWYgKENhbGxFZGdlTG9nOjppc0VuYWJsZWQoKSAmJiBzaG91bGRFbWl0
UHJvZmlsaW5nKCkKLSAgICAgICAgJiYgT3B0aW9uczo6YmFzZWxpbmVEb2VzQ2FsbEVkZ2VQcm9m
aWxpbmcoKSkKLSAgICAgICAgbV92bS0+ZW5zdXJlQ2FsbEVkZ2VMb2coKS5lbWl0TG9nQ29kZSgq
dGhpcywgaW5mby0+Y2FsbEVkZ2VQcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMCkpOwotCiAgICAg
aWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZhbCkgewogICAgICAgICBjb21waWxlQ2FsbEV2YWwo
aW5zdHJ1Y3Rpb24pOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
Nzc2LDQ3ICs3NzYsMTIgQEAgaW5saW5lIGNoYXIqIHZpcnR1YWxGb3IoCiAgICAgcmV0dXJuIHZp
cnR1YWxGb3JXaXRoRnVuY3Rpb24oZXhlY0NhbGxlZSwga2luZCwgcmVnaXN0ZXJzLCBjYWxsZWVB
c0Z1bmN0aW9uQ2VsbElnbm9yZWQpOwogfQogCi1zdGF0aWMgYm9vbCBhdHRlbXB0VG9PcHRpbWl6
ZUNsb3N1cmVDYWxsKAotICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlIHJlZ2lzdGVycywgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCwKLSAgICBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKLXsKLSAgICBpZiAoIWNhbGxlZUFzRnVuY3Rpb25D
ZWxsKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgSlNGdW5jdGlvbiogY2FsbGVl
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7Ci0gICAgSlNGdW5j
dGlvbiogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZvLmNhbGxlZS5nZXQoKTsKLSAgICAKLSAgICBp
ZiAoIW9sZENhbGxlZSB8fCBvbGRDYWxsZWUtPmV4ZWN1dGFibGUoKSAhPSBjYWxsZWUtPmV4ZWN1
dGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VSVChjYWxsZWUt
PmV4ZWN1dGFibGUoKS0+aGFzSklUQ29kZUZvckNhbGwoKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGVQdHIgPQotICAgICAgICBjYWxsZWUtPmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoCi0gICAgICAgICAgICAqZXhlY0NhbGxl
ZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPnZtKCksIGNhbGxlZS0+ZXhlY3V0YWJsZSgp
LAotICAgICAgICAgICAgQXJpdHlDaGVja05vdFJlcXVpcmVkLCByZWdpc3RlcnMpOwotICAgIAot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrOwotICAgIGlmIChjYWxsZWUtPmV4ZWN1dGFibGUoKS0+
aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZUJsb2NrID0gMDsKLSAgICBlbHNlIHsKLSAg
ICAgICAgY29kZUJsb2NrID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNhbGxlZS0+ZXhl
Y3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yQ2FsbCgpOwotICAgICAgICBpZiAoZXhlY0NhbGxlZS0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCkpIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxsTGlu
a0luZm86OkNhbGxWYXJhcmdzIHx8IGNhbGxMaW5rSW5mby5jYWxsVHlwZSA9PSBDYWxsTGlua0lu
Zm86OkNvbnN0cnVjdFZhcmFyZ3MpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIGxpbmtDbG9zdXJlQ2FsbCgKLSAgICAgICAgZXhlY0NhbGxlZSwgY2FsbExpbmtJ
bmZvLCBjb2RlQmxvY2ssIGNhbGxlZS0+ZXhlY3V0YWJsZSgpLCBjb2RlUHRyLCByZWdpc3RlcnMp
OwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkxpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqIGV4ZWNDYWxsZWUsIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvKQorY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rUG9seW1vcnBo
aWNDYWxsKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8p
CiB7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKICAgICBjaGFyKiByZXN1bHQg
PSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkLCBjYWxsZWVBc0Z1bmN0aW9uQ2VsbCk7CiAKLSAgICBp
ZiAoIWF0dGVtcHRUb09wdGltaXplQ2xvc3VyZUNhbGwoZXhlY0NhbGxlZSwgUmVnaXN0ZXJQcmVz
ZXJ2YXRpb25Ob3RSZXF1aXJlZCwgY2FsbGVlQXNGdW5jdGlvbkNlbGwsICpjYWxsTGlua0luZm8p
KQotICAgICAgICBsaW5rU2xvd0ZvcihleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBDb2RlRm9y
Q2FsbCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CisgICAgbGlua1BvbHltb3Jw
aGljQ2FsbChleGVjQ2FsbGVlLCAqY2FsbExpbmtJbmZvLCBDYWxsVmFyaWFudChjYWxsZWVBc0Z1
bmN0aW9uQ2VsbCksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogICAgIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC04MzEsMTMgKzc5NiwxMiBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblZpcnR1YWxDb25zCiAgICAgcmV0dXJuIHZpcnR1YWxGb3IoZXhlY0NhbGxl
ZSwgQ29kZUZvckNvbnN0cnVjdCwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Ob3RSZXF1aXJlZCk7CiB9
CiAKLWNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsVGhhdFByZXNl
cnZlc1JlZ3MoRXhlY1N0YXRlKiBleGVjQ2FsbGVlLCBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5m
bykKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbFRoYXRQ
cmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSogZXhlY0NhbGxlZSwgQ2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8pCiB7CiAgICAgSlNDZWxsKiBjYWxsZWVBc0Z1bmN0aW9uQ2VsbDsKICAgICBjaGFyKiBy
ZXN1bHQgPSB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKGV4ZWNDYWxsZWUsIENvZGVGb3JDYWxsLCBN
dXN0UHJlc2VydmVSZWdpc3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsKTsKIAotICAgIGlmICgh
YXR0ZW1wdFRvT3B0aW1pemVDbG9zdXJlQ2FsbChleGVjQ2FsbGVlLCBNdXN0UHJlc2VydmVSZWdp
c3RlcnMsIGNhbGxlZUFzRnVuY3Rpb25DZWxsLCAqY2FsbExpbmtJbmZvKSkKLSAgICAgICAgbGlu
a1Nsb3dGb3IoZXhlY0NhbGxlZSwgKmNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIE11c3RQcmVz
ZXJ2ZVJlZ2lzdGVycyk7CisgICAgbGlua1BvbHltb3JwaGljQ2FsbChleGVjQ2FsbGVlLCAqY2Fs
bExpbmtJbmZvLCBDYWxsVmFyaWFudChjYWxsZWVBc0Z1bmN0aW9uQ2VsbCksIE11c3RQcmVzZXJ2
ZVJlZ2lzdGVycyk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwMzMsNiArOTk3
LDEwIEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICBEZWZl
ckdDRm9yQVdoaWxlIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkg
IT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpIHsKKyAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBj
b2RlIGJsb2NrIGluIEJhc2VsaW5lLT5ERkcgdGllci11cDogIiwgKmNvZGVCbG9jaywgIlxuIik7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQogICAgIAogICAg
IGlmIChieXRlY29kZUluZGV4KSB7CiAgICAgICAgIC8vIElmIHdlJ3JlIGF0dGVtcHRpbmcgdG8g
T1NSIGZyb20gYSBsb29wLCBhc3N1bWUgdGhhdCB0aGlzIHNob3VsZCBiZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE3OTI0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDYsMTIgKzI0NiwxMiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxHZW5lCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmlj
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q2FsbEV2YWwoRXhlY1N0YXRlKiwgRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklU
X09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBX
VEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2Fs
bChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CitjaGFyKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25WaXJ0dWFs
Q2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgQ2FsbExpbmtJ
bmZvKikgV1RGX0lOVEVSTkFMOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25MaW5rQ29u
c3RydWN0KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopIFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua0NhbGxUaGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUq
LCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7Ci1jaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5r
SW5mbyopIFdURl9JTlRFUk5BTDsKK2NoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTGlua1Bv
bHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyop
IFdURl9JTlRFUk5BTDsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVmlydHVhbENhbGxU
aGF0UHJlc2VydmVzUmVncyhFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7
CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblZpcnR1YWxDb25zdHJ1Y3RUaGF0UHJlc2Vy
dmVzUmVncyhFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CiBjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxpbmtDb25zdHJ1Y3RUaGF0UHJlc2VydmVzUmVncyhFeGVj
U3RhdGUqLCBDYWxsTGlua0luZm8qKSBXVEZfSU5URVJOQUw7CkBAIC0zOTEsMTMgKzM5MSwxMyBA
QCBpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRpb25WaXJ0CiAgICAgcmV0dXJuIDA7
CiB9CiAKLWlubGluZSBQX0pJVE9wZXJhdGlvbl9FQ2xpIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2Fs
bEZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoraW5saW5lIFBfSklUT3Bl
cmF0aW9uX0VDbGkgb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbEZvcihSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewogICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CiAgICAg
Y2FzZSBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uTGlua0Nsb3N1cmVDYWxsOworICAgICAgICByZXR1cm4gb3BlcmF0aW9uTGlua1BvbHlt
b3JwaGljQ2FsbDsKICAgICBjYXNlIE11c3RQcmVzZXJ2ZVJlZ2lzdGVyczoKLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkxpbmtDbG9zdXJlQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOworICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uTGlua1BvbHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzOwogICAg
IH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24g
MTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgCisgICAgLy8gUmV0dXJuIHRydWUgaWYgeW91IGFyZSBzdGlsbCB2
YWxpZCBhZnRlci4gUmV0dXJuIGZhbHNlIGlmIHlvdSBhcmUgbm93IGludmFsaWQuIElmIHlvdSBy
ZXR1cm4KKyAgICAvLyBmYWxzZSwgeW91IHdpbGwgdXN1YWxseSBub3QgZG8gYW55IGNsZWFyaW5n
IGJlY2F1c2UgdGhlIGlkZWEgaXMgdGhhdCB5b3Ugd2lsbCBzaW1wbHkgYmUKKyAgICAvLyBkZXN0
cm95ZWQuCiAgICAgdmlydHVhbCBib29sIHZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJik7CiAKIHBy
b3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUV3JpdGVCYXJyaWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJp
ZXIuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRX
cml0ZUJhcnJpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNpbmNsdWRlICJV
bnVzZWRQb2ludGVyLmgiCisjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Bv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIgorCisjaW5jbHVkZSAiQ2FsbExpbmtJbmZv
LmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1BvbHltb3JwaGljQ2Fs
bE5vZGU6On5Qb2x5bW9ycGhpY0NhbGxOb2RlKCkKK3sKKyAgICBpZiAoaXNPbkxpc3QoKSkKKyAg
ICAgICAgcmVtb3ZlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNDYWxsTm9kZTo6dW5saW5rKFJl
cGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIpCit7CisgICAgaWYgKE9wdGlvbnM6OnNob3dEaXNh
c3NlbWJseSgpKQorICAgICAgICBkYXRhTG9nKCJVbmxpbmtpbmcgcG9seW1vcnBoaWMgY2FsbCBh
dCAiLCBtX2NhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLCAiLCAiLCBtX2NhbGxMaW5r
SW5mby0+Y29kZU9yaWdpbiwgIlxuIik7CisgICAgCisgICAgbV9jYWxsTGlua0luZm8tPnVubGlu
ayhyZXBhdGNoQnVmZmVyKTsKKyAgICAKKyAgICBpZiAoaXNPbkxpc3QoKSkKKyAgICAgICAgcmVt
b3ZlKCk7Cit9CisKK3ZvaWQgUG9seW1vcnBoaWNDYWxsQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiPHZhcmlhbnQgPSAiLCBtX3ZhcmlhbnQsICIs
IGNvZGVCbG9jayA9ICIsIHBvaW50ZXJEdW1wKG1fY29kZUJsb2NrKSwgIj4iKTsKK30KKworUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmU6OlBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKAorICAg
IGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgY29kZVJlZiwgVk0mIHZtLCBjb25zdCBKU0Nl
bGwqIG93bmVyLCBFeGVjU3RhdGUqIGNhbGxlckZyYW1lLAorICAgIENhbGxMaW5rSW5mbyYgaW5m
bywgY29uc3QgVmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+JiBjYXNlcywKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8dWludDMyX3RbXT4gZmFzdENvdW50cykKKyAgICA6IEdDQXdhcmVKSVRTdHViUm91
dGluZShjb2RlUmVmLCB2bSkKKyAgICAsIG1fZmFzdENvdW50cyhXVEY6Om1vdmUoZmFzdENvdW50
cykpCit7CisgICAgZm9yIChQb2x5bW9ycGhpY0NhbGxDYXNlIGNhbGxDYXNlIDogY2FzZXMpIHsK
KyAgICAgICAgbV92YXJpYW50cy5hcHBlbmQoV3JpdGVCYXJyaWVyPEpTQ2VsbD4odm0sIG93bmVy
LCBjYWxsQ2FzZS52YXJpYW50KCkucmF3Q2FsbGVlQ2VsbCgpKSk7CisgICAgICAgIGlmIChzaG91
bGRTaG93RGlzYXNzZW1ibHlGb3IoY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpKSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIkxpbmtpbmcgcG9seW1vcnBoaWMgY2FsbCBpbiAiLCAqY2FsbGVyRnJhbWUt
PmNvZGVCbG9jaygpLCAiIGF0ICIsIGNhbGxlckZyYW1lLT5jb2RlT3JpZ2luKCksICIgdG8gIiwg
Y2FsbENhc2UudmFyaWFudCgpLCAiLCBjb2RlQmxvY2sgPSAiLCBwb2ludGVyRHVtcChjYWxsQ2Fz
ZS5jb2RlQmxvY2soKSksICJcbiIpOworICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBjYWxsQ2FzZS5jb2RlQmxvY2soKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+bGlua0luY29t
aW5nUG9seW1vcnBoaWNDYWxsKGNhbGxlckZyYW1lLCBtX2NhbGxOb2Rlcy5hZGQoJmluZm8pKTsK
KyAgICB9CisgICAgbV92YXJpYW50cy5zaHJpbmtUb0ZpdCgpOworICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7Cit9CisKK1BvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjp+UG9seW1vcnBoaWND
YWxsU3R1YlJvdXRpbmUoKSB7IH0KKworQ2FsbFZhcmlhbnRMaXN0IFBvbHltb3JwaGljQ2FsbFN0
dWJSb3V0aW5lOjp2YXJpYW50cygpIGNvbnN0Cit7CisgICAgQ2FsbFZhcmlhbnRMaXN0IHJlc3Vs
dDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFudHMuc2l6ZSgpOyArK2kpCisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoQ2FsbFZhcmlhbnQobV92YXJpYW50c1tpXS5nZXQoKSkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0NhbGxFZGdlTGlzdCBQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZTo6ZWRnZXMoKSBjb25zdAoreworICAgIC8vIFdlIHdvdWxkbid0IGhhdmUgdGhlc2Ug
aWYgdGhpcyB3YXMgYW4gRlRMIHN0dWIgcm91dGluZS4gV2Ugc2hvdWxkbid0IGJlIGFza2luZyBm
b3IgcHJvZmlsaW5nCisgICAgLy8gZnJvbSB0aGUgRlRMLgorICAgIFJFTEVBU0VfQVNTRVJUKG1f
ZmFzdENvdW50cyk7CisgICAgCisgICAgQ2FsbEVkZ2VMaXN0IHJlc3VsdDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fdmFyaWFudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoQ2FsbEVkZ2UoQ2FsbFZhcmlhbnQobV92YXJpYW50c1tpXS5nZXQoKSksIG1fZmFzdENv
dW50c1tpXSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgUG9seW1vcnBoaWNDYWxs
U3R1YlJvdXRpbmU6OnZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJikKK3sKKyAgICBmb3IgKGF1dG8m
IHZhcmlhbnQgOiBtX3ZhcmlhbnRzKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQodmFy
aWFudC5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lOjptYXJrUmVxdWly
ZWRPYmplY3RzSW50ZXJuYWwoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgZm9yIChhdXRv
JiB2YXJpYW50IDogbV92YXJpYW50cykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnZhcmlhbnQp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Qb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRp
bmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lX2gKKyNkZWZpbmUgUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmVfaAorCisjaWYgRU5B
QkxFKEpJVCkKKworI2luY2x1ZGUgIkNhbGxFZGdlLmgiCisjaW5jbHVkZSAiQ2FsbFZhcmlhbnQu
aCIKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0
aW5lLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitz
dHJ1Y3QgQ2FsbExpbmtJbmZvOworCitjbGFzcyBQb2x5bW9ycGhpY0NhbGxOb2RlIDogcHVibGlj
IEJhc2ljUmF3U2VudGluZWxOb2RlPFBvbHltb3JwaGljQ2FsbE5vZGU+IHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQb2x5bW9ycGhpY0NhbGxOb2RlKTsKK3B1YmxpYzoKKyAgICBQb2x5bW9y
cGhpY0NhbGxOb2RlKENhbGxMaW5rSW5mbyogaW5mbykKKyAgICAgICAgOiBtX2NhbGxMaW5rSW5m
byhpbmZvKQorICAgIHsKKyAgICB9CisgICAgCisgICAgflBvbHltb3JwaGljQ2FsbE5vZGUoKTsK
KyAgICAKKyAgICB2b2lkIHVubGluayhSZXBhdGNoQnVmZmVyJik7CisgICAgCitwcml2YXRlOgor
ICAgIENhbGxMaW5rSW5mbyogbV9jYWxsTGlua0luZm87Cit9OworCitjbGFzcyBQb2x5bW9ycGhp
Y0NhbGxDYXNlIHsKK3B1YmxpYzoKKyAgICBQb2x5bW9ycGhpY0NhbGxDYXNlKCkKKyAgICAgICAg
OiBtX2NvZGVCbG9jayhudWxscHRyKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUG9seW1vcnBo
aWNDYWxsQ2FzZShDYWxsVmFyaWFudCB2YXJpYW50LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAg
ICAgICAgOiBtX3ZhcmlhbnQodmFyaWFudCkKKyAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCisgICAgeworICAgIH0KKyAgICAKKyAgICBDYWxsVmFyaWFudCB2YXJpYW50KCkgY29uc3Qg
eyByZXR1cm4gbV92YXJpYW50OyB9CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7
IHJldHVybiBtX2NvZGVCbG9jazsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBDYWxsVmFyaWFudCBtX3ZhcmlhbnQ7CisgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKK307CisKK2NsYXNzIFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lIDogcHVibGljIEdDQXdhcmVKSVRTdHViUm91dGluZSB7CitwdWJsaWM6CisgICAgUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUoCisgICAgICAgIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiYsIFZNJiwgY29uc3QgSlNDZWxsKiBvd25lciwKKyAgICAgICAgRXhlY1N0YXRlKiBjYWxs
ZXJGcmFtZSwgQ2FsbExpbmtJbmZvJiwgY29uc3QgVmVjdG9yPFBvbHltb3JwaGljQ2FsbENhc2U+
JiwKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVpbnQzMl90W10+IGZhc3RDb3VudHMpOworICAg
IAorICAgIHZpcnR1YWwgflBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKCk7CisgICAgCisgICAg
Q2FsbFZhcmlhbnRMaXN0IHZhcmlhbnRzKCkgY29uc3Q7CisgICAgQ2FsbEVkZ2VMaXN0IGVkZ2Vz
KCkgY29uc3Q7CisgICAgCisgICAgYm9vbCB2aXNpdFdlYWsoUmVwYXRjaEJ1ZmZlciYpIG92ZXJy
aWRlOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIG1hcmtSZXF1aXJlZE9iamVjdHNJ
bnRlcm5hbChTbG90VmlzaXRvciYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFZlY3RvcjxX
cml0ZUJhcnJpZXI8SlNDZWxsPiwgMj4gbV92YXJpYW50czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
dWludDMyX3RbXT4gbV9mYXN0Q291bnRzOworICAgIEJhZzxQb2x5bW9ycGhpY0NhbGxOb2RlPiBt
X2NhbGxOb2RlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKKworI2VuZGlmIC8vIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkFjY2Vzc29yQ2FsbEpJ
VFN0dWJSb3V0aW5lLmgiCisjaW5jbHVkZSAiQmluYXJ5U3dpdGNoLmgiCiAjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Nw
ZWN1bGF0aXZlSklULmgiCkBAIC0xNTc1LDEyICsxNTc2LDE3IEBAIHZvaWQgcmVwYXRjaEluKAog
fQogCiBzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcigKKyAgICBSZXBhdGNoQnVmZmVyJiByZXBhdGNo
QnVmZmVyLCBWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3IpCit7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgIGNhbGxM
aW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIHZtLT5nZXRDVElTdHViKGdlbmVyYXRvcikuY29k
ZSgpKTsKK30KKworc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoCiAgICAgUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywKICAgICBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdp
c3RlcnMpCiB7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCi0gICAgICAgIGNhbGxMaW5rSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sCi0gICAgICAgIHZtLT5nZXRDVElTdHViKHZpcnR1YWxUaHVu
a0dlbmVyYXRvckZvcihraW5kLCByZWdpc3RlcnMpKS5jb2RlKCkpOworICAgIGxpbmtTbG93Rm9y
KHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIHZpcnR1YWxUaHVua0dlbmVyYXRvckZv
cihraW5kLCByZWdpc3RlcnMpKTsKIH0KIAogdm9pZCBsaW5rRm9yKApAQCAtMTU5MiwxMCArMTU5
OCw2IEBAIHZvaWQgbGlua0ZvcigKICAgICAKICAgICBDb2RlQmxvY2sqIGNhbGxlckNvZGVCbG9j
ayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpOwogCi0gICAgLy8gSWYgeW91J3Jl
IGJlaW5nIGNhbGwtbGlua2VkIGZyb20gYSBERkcgY2FsbGVyIHRoZW4geW91IG9idmlvdXNseSBk
aWRuJ3QgZ2V0IGlubGluZWQuCi0gICAgaWYgKGNhbGxlZUNvZGVCbG9jayAmJiBKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAgICAgICBjYWxs
ZWVDb2RlQmxvY2stPm1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkID0gZmFsc2U7Ci0gICAgCiAgICAg
Vk0qIHZtID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwpAQCAtMTYxMSw3ICsxNjEzLDggQEAgdm9p
ZCBsaW5rRm9yKAogICAgICAgICBjYWxsZWVDb2RlQmxvY2stPmxpbmtJbmNvbWluZ0NhbGwoZXhl
Yy0+Y2FsbGVyRnJhbWUoKSwgJmNhbGxMaW5rSW5mbyk7CiAgICAgCiAgICAgaWYgKGtpbmQgPT0g
Q29kZUZvckNhbGwpIHsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgdm0tPmdldENUSVN0dWIobGlua0Nsb3N1cmVDYWxsVGh1bmtH
ZW5lcmF0b3JGb3IocmVnaXN0ZXJzKSkuY29kZSgpKTsKKyAgICAgICAgbGlua1Nsb3dGb3IoCisg
ICAgICAgICAgICByZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBsaW5rUG9seW1vcnBo
aWNDYWxsVGh1bmtHZW5lcmF0b3JGb3IocmVnaXN0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCkBAIC0xNjMxLDE2ICsxNjM0LDEyMiBAQCB2b2lkIGxpbmtTbG93Rm9yKAogICAg
IGxpbmtTbG93Rm9yKHJlcGF0Y2hCdWZmZXIsIHZtLCBjYWxsTGlua0luZm8sIGtpbmQsIHJlZ2lz
dGVycyk7CiB9CiAKLXZvaWQgbGlua0Nsb3N1cmVDYWxsKAotICAgIEV4ZWNTdGF0ZSogZXhlYywg
Q2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCAK
LSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGVQdHIsCitzdGF0aWMgdm9pZCByZXZlcnRDYWxsKAorICAgIFJlcGF0Y2hCdWZmZXImIHJlcGF0
Y2hCdWZmZXIsIFZNKiB2bSwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8sIFRodW5rR2VuZXJh
dG9yIGdlbmVyYXRvcikKK3sKKyAgICByZXBhdGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVu
dFRvQnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mQnJh
bmNoUHRyV2l0aFBhdGNoT25SZWdpc3RlcihjYWxsTGlua0luZm8uaG90UGF0aEJlZ2luKSwKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KGNhbGxMaW5rSW5m
by5jYWxsZWVHUFIpLCAwKTsKKyAgICBsaW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2Fs
bExpbmtJbmZvLCBnZW5lcmF0b3IpOworICAgIGNhbGxMaW5rSW5mby5oYXNTZWVuU2hvdWxkUmVw
YXRjaCA9IGZhbHNlOworICAgIGNhbGxMaW5rSW5mby5jYWxsZWUuY2xlYXIoKTsKKyAgICBjYWxs
TGlua0luZm8uc3R1Yi5jbGVhcigpOworICAgIGlmIChjYWxsTGlua0luZm8uaXNPbkxpc3QoKSkK
KyAgICAgICAgY2FsbExpbmtJbmZvLnJlbW92ZSgpOworfQorCit2b2lkIHVubGlua0ZvcigKKyAg
ICBSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5m
bywKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9u
TW9kZSByZWdpc3RlcnMpCit7CisgICAgaWYgKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSgpKQor
ICAgICAgICBkYXRhTG9nKCJVbmxpbmtpbmcgY2FsbCBmcm9tICIsIGNhbGxMaW5rSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sICIgaW4gcmVxdWVzdCBmcm9tICIsIHBvaW50ZXJEdW1wKHJlcGF0Y2hC
dWZmZXIuY29kZUJsb2NrKCkpLCAiXG4iKTsKKyAgICAKKyAgICByZXZlcnRDYWxsKAorICAgICAg
ICByZXBhdGNoQnVmZmVyLCByZXBhdGNoQnVmZmVyLmNvZGVCbG9jaygpLT52bSgpLCBjYWxsTGlu
a0luZm8sCisgICAgICAgIGxpbmtUaHVua0dlbmVyYXRvckZvcihraW5kLCByZWdpc3RlcnMpKTsK
K30KKwordm9pZCBsaW5rVmlydHVhbEZvcigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIENhbGxMaW5r
SW5mbyYgY2FsbExpbmtJbmZvLAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVn
aXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIHJlZ2lzdGVycykKK3sKKyAgICAvLyBGSVhNRTogV2UgY291
bGQgZ2VuZXJhdGUgYSB2aXJ0dWFsIGNhbGwgc3R1YiBoZXJlLiBUaGlzIHdvdWxkIGxlYWQgdG8g
ZmFzdGVyIHZpcnR1YWwgY2FsbHMKKyAgICAvLyBieSBlbGltaW5hdGluZyB0aGUgYnJhbmNoIHBy
ZWRpY3Rpb24gYm90dGxlbmVjayBpbnNpZGUgdGhlIHNoYXJlZCB2aXJ0dWFsIGNhbGwgdGh1bmsu
CisgICAgCisgICAgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxvY2sgPSBleGVjLT5jYWxsZXJGcmFt
ZSgpLT5jb2RlQmxvY2soKTsKKyAgICBWTSogdm0gPSBjYWxsZXJDb2RlQmxvY2stPnZtKCk7Cisg
ICAgCisgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseUZvcihjYWxsZXJDb2RlQmxvY2spKQor
ICAgICAgICBkYXRhTG9nKCJMaW5raW5nIHZpcnR1YWwgY2FsbCBhdCAiLCAqY2FsbGVyQ29kZUJs
b2NrLCAiICIsIGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVPcmlnaW4oKSwgIlxuIik7CisgICAg
CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7CisgICAg
cmV2ZXJ0Q2FsbChyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCB2aXJ0dWFsVGh1bmtH
ZW5lcmF0b3JGb3Ioa2luZCwgcmVnaXN0ZXJzKSk7Cit9CisKK25hbWVzcGFjZSB7CitzdHJ1Y3Qg
Q2FsbFRvQ29kZVB0ciB7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGw7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvZGVQdHI7Cit9OworfSAvLyBhbm5vbnltb3VzIG5hbWVzcGFjZQor
Cit2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbywgQ2FsbFZhcmlhbnQgbmV3VmFyaWFudCwKICAgICBSZWdpc3Rl
clByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQogewotICAgIEFTU0VSVCghY2FsbExpbmtJbmZv
LnN0dWIpOworICAgIC8vIEN1cnJlbnRseSB3ZSBjYW4ndCBkbyBhbnl0aGluZyBmb3Igbm9uLWZ1
bmN0aW9uIGNhbGxlZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MDY4NQorICAgIGlmICghbmV3VmFyaWFudCB8fCAhbmV3VmFyaWFudC5leGVjdXRh
YmxlKCkpIHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3IoZXhlYywgY2FsbExpbmtJbmZvLCBDb2Rl
Rm9yQ2FsbCwgcmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKICAgICBD
b2RlQmxvY2sqIGNhbGxlckNvZGVCbG9jayA9IGV4ZWMtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9j
aygpOwogICAgIFZNKiB2bSA9IGNhbGxlckNvZGVCbG9jay0+dm0oKTsKICAgICAKKyAgICBDYWxs
VmFyaWFudExpc3QgbGlzdDsKKyAgICBpZiAoUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUqIHN0
dWIgPSBjYWxsTGlua0luZm8uc3R1Yi5nZXQoKSkKKyAgICAgICAgbGlzdCA9IHN0dWItPnZhcmlh
bnRzKCk7CisgICAgZWxzZSBpZiAoSlNGdW5jdGlvbiogb2xkQ2FsbGVlID0gY2FsbExpbmtJbmZv
LmNhbGxlZS5nZXQoKSkKKyAgICAgICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdHsgQ2FsbFZhcmlh
bnQob2xkQ2FsbGVlKSB9OworICAgIAorICAgIGxpc3QgPSB2YXJpYW50TGlzdFdpdGhWYXJpYW50
KGxpc3QsIG5ld1ZhcmlhbnQpOworCisgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBjbG9zdXJlIGNh
bGxzIHRoZW4gaXQgbWFrZXMgc2Vuc2UgdG8gdHJlYXQgYWxsIG9mIHRoZW0gYXMgY2xvc3VyZSBj
YWxscy4KKyAgICAvLyBUaGlzIG1ha2VzIHN3aXRjaGluZyBvbiBjYWxsZWUgY2hlYXBlci4gSXQg
YWxzbyBwcm9kdWNlcyBwcm9maWxpbmcgdGhhdCdzIGVhc2llciBvbiB0aGUgREZHOworICAgIC8v
IHRoZSBERkcgZG9lc24ndCByZWFsbHkgd2FudCB0byBkZWFsIHdpdGggYSBjb21iaW5hdGlvbiBv
ZiBjbG9zdXJlIGFuZCBub24tY2xvc3VyZSBjYWxsZWVzLgorICAgIGJvb2wgaXNDbG9zdXJlQ2Fs
bCA9IGZhbHNlOworICAgIGZvciAoQ2FsbFZhcmlhbnQgdmFyaWFudCA6IGxpc3QpICB7CisgICAg
ICAgIGlmICh2YXJpYW50LmlzQ2xvc3VyZUNhbGwoKSkgeworICAgICAgICAgICAgbGlzdCA9IGRl
c3BlY2lmaWVkVmFyaWFudExpc3QobGlzdCk7CisgICAgICAgICAgICBpc0Nsb3N1cmVDYWxsID0g
dHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFZl
Y3RvcjxQb2x5bW9ycGhpY0NhbGxDYXNlPiBjYWxsQ2FzZXM7CisgICAgCisgICAgLy8gRmlndXJl
IG91dCB3aGF0IG91ciBjYXNlcyBhcmUuCisgICAgZm9yIChDYWxsVmFyaWFudCB2YXJpYW50IDog
bGlzdCkgeworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICAgICAgaWYgKHZhcmlh
bnQuZXhlY3V0YWJsZSgpLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICAgICAgY29kZUJsb2Nr
ID0gbnVsbHB0cjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb2RlQmxvY2sgPSBqc0Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odmFyaWFudC5leGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tG
b3JDYWxsKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHdlIGNhbm5vdCBoYW5k
bGUgYSBjYWxsZWUsIGFzc3VtZSB0aGF0IGl0J3MgYmV0dGVyIGZvciB0aGlzIHdob2xlIHRoaW5n
IHRvIGJlIGEKKyAgICAgICAgICAgIC8vIHZpcnR1YWwgY2FsbC4KKyAgICAgICAgICAgIGlmIChl
eGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkgfHwgY2FsbExpbmtJbmZvLmNhbGxUeXBlID09IENh
bGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MgfHwgY2FsbExpbmtJbmZvLmNhbGxUeXBlID09IENhbGxM
aW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncykgeworICAgICAgICAgICAgICAgIGxpbmtWaXJ0dWFs
Rm9yKGV4ZWMsIGNhbGxMaW5rSW5mbywgQ29kZUZvckNhbGwsIHJlZ2lzdGVycyk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBjYWxsQ2FzZXMuYXBwZW5kKFBvbHltb3JwaGljQ2FsbENhc2UodmFyaWFudCwgY29kZUJs
b2NrKSk7CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGFyZSBvdmVyIHRoZSBsaW1pdCwganVz
dCB1c2UgYSBub3JtYWwgdmlydHVhbCBjYWxsLgorICAgIHVuc2lnbmVkIG1heFBvbHltb3JwaGlj
Q2FsbFZhcmlhbnRMaXN0U2l6ZTsKKyAgICBpZiAoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUQ29kZTo6dG9wVGllckpJVCgpKQorICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJp
YW50TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemVG
b3JUb3BUaWVyKCk7CisgICAgZWxzZQorICAgICAgICBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50
TGlzdFNpemUgPSBPcHRpb25zOjptYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUoKTsK
KyAgICBpZiAobGlzdC5zaXplKCkgPiBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlzdFNpemUp
IHsKKyAgICAgICAgbGlua1ZpcnR1YWxGb3IoZXhlYywgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2Fs
bCwgcmVnaXN0ZXJzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBHUFJSZWcg
Y2FsbGVlR1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihjYWxsTGlua0luZm8uY2FsbGVlR1BSKTsK
ICAgICAKICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSwgY2FsbGVyQ29kZUJsb2NrKTsKQEAg
LTE2NTUsMzMgKzE3NjQsODIgQEAgdm9pZCBsaW5rQ2xvc3VyZUNhbGwoCiAgICAgICAgIHN0dWJK
aXQuYWJvcnRXaXRoUmVhc29uKFJlcGF0Y2hJbnNhbmVBcmd1bWVudENvdW50KTsKICAgICAgICAg
b2tBcmd1bWVudENvdW50LmxpbmsoJnN0dWJKaXQpOwogICAgIH0KKyAgICAKKyAgICBHUFJSZWcg
c2NyYXRjaCA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIpOwor
ICAgIEdQUlJlZyBjb21wYXJpc29uVmFsdWVHUFI7CisgICAgCisgICAgaWYgKGlzQ2xvc3VyZUNh
bGwpIHsKKyAgICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9uIGFuZCBzdGFz
aCB0aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNoLgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAv
LyBXZSBjYW4gc2FmZWx5IGNsb2JiZXIgZXZlcnl0aGluZyBleGNlcHQgdGhlIGNhbGxlZUdQUi4g
V2UgY2FuJ3QgcmVseSBvbiB0YWdNYXNrUmVnaXN0ZXIKLSAgICAvLyBiZWluZyBzZXQuIFNvIHdl
IGRvIHRoaXMgdGhlIGhhcmQgd2F5LgotICAgIEdQUlJlZyBzY3JhdGNoID0gQXNzZW1ibHlIZWxw
ZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUik7Ci0gICAgc3R1YkppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIHNjcmF0Y2gpOwotICAgIHNsb3dQYXRo
LmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxl
ZUdQUiwgc2NyYXRjaCkpOworICAgICAgICAvLyBXZSBjYW4gc2FmZWx5IGNsb2JiZXIgZXZlcnl0
aGluZyBleGNlcHQgdGhlIGNhbGxlZUdQUi4gV2UgY2FuJ3QgcmVseSBvbiB0YWdNYXNrUmVnaXN0
ZXIKKyAgICAgICAgLy8gYmVpbmcgc2V0LiBTbyB3ZSBkbyB0aGlzIHRoZSBoYXJkIHdheS4KKyAg
ICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnTWFzayks
IHNjcmF0Y2gpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQoc3R1YkppdC5icmFuY2hUZXN0NjQo
Q0NhbGxIZWxwZXJzOjpOb25aZXJvLCBjYWxsZWVHUFIsIHNjcmF0Y2gpKTsKICNlbHNlCi0gICAg
Ly8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2Vs
bC4KKyAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2Fs
bGVlIGlzIGEgY2VsbC4KICNlbmRpZgogICAgIAotICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAg
ICAgc3R1YkppdC5icmFuY2g4KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoSlNGdW5jdGlvblR5cGUpKSk7Ci0gICAgCi0gICAgc2xvd1BhdGguYXBwZW5kKAotICAgICAg
ICBzdHViSml0LmJyYW5jaFB0cigKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1YWws
CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKKyAgICAgICAgICAgIHN0dWJKaXQuYnJhbmNoOCgK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTRnVu
Y3Rpb25UeXBlKSkpOworICAgIAorICAgICAgICBzdHViSml0LmxvYWRQdHIoCiAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSksCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhl
Y3V0YWJsZSkpKTsKKyAgICAgICAgICAgIHNjcmF0Y2gpOworICAgICAgICAKKyAgICAgICAgY29t
cGFyaXNvblZhbHVlR1BSID0gc2NyYXRjaDsKKyAgICB9IGVsc2UKKyAgICAgICAgY29tcGFyaXNv
blZhbHVlR1BSID0gY2FsbGVlR1BSOworICAgIAorICAgIFZlY3RvcjxpbnQ2NF90PiBjYXNlVmFs
dWVzKGNhbGxDYXNlcy5zaXplKCkpOworICAgIFZlY3RvcjxDYWxsVG9Db2RlUHRyPiBjYWxscyhj
YWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dWludDMyX3RbXT4gZmFzdENv
dW50czsKKyAgICAKKyAgICBpZiAoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkgIT0gSklUQ29k
ZTo6dG9wVGllckpJVCgpKQorICAgICAgICBmYXN0Q291bnRzID0gc3RkOjptYWtlX3VuaXF1ZTx1
aW50MzJfdFtdPihjYWxsQ2FzZXMuc2l6ZSgpKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0g
Y2FsbENhc2VzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAoZmFzdENvdW50cykKKyAgICAg
ICAgICAgIGZhc3RDb3VudHNbaV0gPSAwOworICAgICAgICAKKyAgICAgICAgQ2FsbFZhcmlhbnQg
dmFyaWFudCA9IGNhbGxDYXNlc1tpXS52YXJpYW50KCk7CisgICAgICAgIGlmIChpc0Nsb3N1cmVD
YWxsKQorICAgICAgICAgICAgY2FzZVZhbHVlc1tpXSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
dmFyaWFudC5leGVjdXRhYmxlKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYXNlVmFs
dWVzW2ldID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YXJpYW50LmZ1bmN0aW9uKCkpOworICAg
IH0KICAgICAKLSAgICBBc3NlbWJseUhlbHBlcnM6OkNhbGwgY2FsbCA9IHN0dWJKaXQubmVhckNh
bGwoKTsKLSAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgZG9uZSA9IHN0dWJKaXQuanVtcCgpOwor
ICAgIEdQUlJlZyBmYXN0Q291bnRzQmFzZUdQUiA9CisgICAgICAgIEFzc2VtYmx5SGVscGVyczo6
c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIsIGNvbXBhcmlzb25WYWx1ZUdQUiwgR1BSSW5mbzo6
cmVnVDMpOworICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZmFz
dENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BSKTsKKyAgICAKKyAgICBCaW5hcnlTd2l0
Y2ggYmluYXJ5U3dpdGNoKGNvbXBhcmlzb25WYWx1ZUdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dp
dGNoOjpJbnRQdHIpOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZTsKKyAgICB3aGls
ZSAoYmluYXJ5U3dpdGNoLmFkdmFuY2Uoc3R1YkppdCkpIHsKKyAgICAgICAgc2l6ZV90IGNhc2VJ
bmRleCA9IGJpbmFyeVN3aXRjaC5jYXNlSW5kZXgoKTsKKyAgICAgICAgCisgICAgICAgIENhbGxW
YXJpYW50IHZhcmlhbnQgPSBjYWxsQ2FzZXNbY2FzZUluZGV4XS52YXJpYW50KCk7CisgICAgICAg
IAorICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxs
KCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0ciA9CisgICAgICAgICAg
ICB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVz
c0ZvckNhbGwoCisgICAgICAgICAgICAgICAgKnZtLCB2YXJpYW50LmV4ZWN1dGFibGUoKSwgQXJp
dHlDaGVja05vdFJlcXVpcmVkLCByZWdpc3RlcnMpOworICAgICAgICAKKyAgICAgICAgaWYgKGZh
c3RDb3VudHMpIHsKKyAgICAgICAgICAgIHN0dWJKaXQuYWRkMzIoCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKGZhc3RDb3VudHNCYXNlR1BSLCBjYXNlSW5kZXggKiBzaXplb2YodWludDMy
X3QpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FsbHNbY2FzZUluZGV4XS5jYWxsID0gc3R1Ykpp
dC5uZWFyQ2FsbCgpOworICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNvZGVQdHIgPSBjb2RlUHRy
OworICAgICAgICBkb25lLmFwcGVuZChzdHViSml0Lmp1bXAoKSk7CisgICAgfQogICAgIAogICAg
IHNsb3dQYXRoLmxpbmsoJnN0dWJKaXQpOworICAgIGJpbmFyeVN3aXRjaC5mYWxsVGhyb3VnaCgp
LmxpbmsoJnN0dWJKaXQpOwogICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJl
Z1QwKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgR1BSSW5mbzo6cmVnVDEpOwpAQCAt
MTY5MSwzNCArMTg0OSw0NSBAQCB2b2lkIGxpbmtDbG9zdXJlQ2FsbCgKICAgICAKICAgICBzdHVi
Sml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsKICAg
ICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwotICAgIAorICAg
ICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgY2FsbGVyQ29k
ZUJsb2NrKTsKICAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGNv
ZGVQdHIuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxDYXNl
cy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKENhbGxUb0NvZGVQdHIgY2FsbFRv
Q29kZVB0ciA6IGNhbGxzKSB7CisgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoCisgICAgICAgICAg
ICBjYWxsVG9Db2RlUHRyLmNhbGwsIEZ1bmN0aW9uUHRyKGNhbGxUb0NvZGVQdHIuY29kZVB0ci5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgfQogICAgIGlmIChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoY2FsbGVyQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQogICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGRvbmUsIGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgw
KSk7CiAgICAgZWxzZQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGNhbGxMaW5rSW5m
by5ob3RQYXRoT3RoZXIubGFiZWxBdE9mZnNldCgwKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhz
bG93LCBDb2RlTG9jYXRpb25MYWJlbCh2bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsVGh1bmtHZW5lcmF0
b3JGb3IoQ29kZUZvckNhbGwsIHJlZ2lzdGVycykpLmNvZGUoKSkpOworICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc2xvdywgQ29kZUxvY2F0aW9uTGFiZWwodm0tPmdldENUSVN0dWIobGlua1BvbHltb3Jw
aGljQ2FsbFRodW5rR2VuZXJhdG9yRm9yKHJlZ2lzdGVycykpLmNvZGUoKSkpOwogICAgIAotICAg
IFJlZlB0cjxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lPiBzdHViUm91dGluZSA9IGFkb3B0UmVmKG5l
dyBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lKAorICAgIFJlZlB0cjxQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZT4gc3R1YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgUG9seW1vcnBoaWNDYWxsU3R1YlJv
dXRpbmUoCiAgICAgICAgIEZJTkFMSVpFX0NPREVfRk9SKAogICAgICAgICAgICAgY2FsbGVyQ29k
ZUJsb2NrLCBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiQ2xvc3VyZSBjYWxsIHN0dWIgZm9y
ICVzLCByZXR1cm4gcG9pbnQgJXAsIHRhcmdldCAlcCAoJXMpIiwKKyAgICAgICAgICAgICgiUG9s
eW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwK
ICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxs
TGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoMCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwKLSAgICAgICAgICAgICAgICBjb2RlUHRyLmV4ZWN1dGFibGVBZGRyZXNzKCksIHRv
Q1N0cmluZyhwb2ludGVyRHVtcChjYWxsZWVDb2RlQmxvY2spKS5kYXRhKCkpKSwKLSAgICAgICAg
KnZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjdXRhYmxlKSk7Cisg
ICAgICAgICAgICAgICAgdG9DU3RyaW5nKGxpc3REdW1wKGNhbGxDYXNlcykpLmRhdGEoKSkpLAor
ICAgICAgICAqdm0sIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4ZWMtPmNh
bGxlckZyYW1lKCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzLAorICAgICAgICBXVEY6Om1vdmUo
ZmFzdENvdW50cykpKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY2Fs
bGVyQ29kZUJsb2NrKTsKICAgICAKICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgK
ICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZkJyYW5jaFB0cldpdGhQYXRjaE9uUmVnaXN0
ZXIoY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiksCiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgLy8gVGhpcyBpcyB3ZWlyZC4gVGhl
IG9yaWdpbmFsIHNsb3cgcGF0aCBzaG91bGQgbm8gbG9uZ2VyIGJlIHJlYWNoYWJsZS4KICAgICBs
aW5rU2xvd0ZvcihyZXBhdGNoQnVmZmVyLCB2bSwgY2FsbExpbmtJbmZvLCBDb2RlRm9yQ2FsbCwg
cmVnaXN0ZXJzKTsKICAgICAKKyAgICAvLyBJZiB0aGVyZSBoYWQgYmVlbiBhIHByZXZpb3VzIHN0
dWIgcm91dGluZSwgdGhhdCBvbmUgd2lsbCBkaWUgYXMgc29vbiBhcyB0aGUgR0MgcnVucyBhbmQg
c2VlcworICAgIC8vIHRoYXQgaXQncyBubyBsb25nZXIgb24gc3RhY2suCiAgICAgY2FsbExpbmtJ
bmZvLnN0dWIgPSBzdHViUm91dGluZS5yZWxlYXNlKCk7CiAgICAgCi0gICAgQVNTRVJUKCFjYWxs
ZWVDb2RlQmxvY2sgfHwgY2FsbGVlQ29kZUJsb2NrLT5pc0luY29taW5nQ2FsbEFscmVhZHlMaW5r
ZWQoJmNhbGxMaW5rSW5mbykpOworICAgIC8vIFRoZSBjYWxsIGxpbmsgaW5mbyBubyBsb25nZXIg
aGFzIGEgY2FsbCBjYWNoZSBhcGFydCBmcm9tIHRoZSBqdW1wIHRvIHRoZSBwb2x5bW9ycGhpYyBj
YWxsCisgICAgLy8gc3R1Yi4KKyAgICBpZiAoY2FsbExpbmtJbmZvLmlzT25MaXN0KCkpCisgICAg
ICAgIGNhbGxMaW5rSW5mby5yZW1vdmUoKTsKIH0KIAogdm9pZCByZXNldEdldEJ5SUQoUmVwYXRj
aEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDE3OTI0MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgRU5BQkxFKEpJVCkKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2lu
Y2x1ZGUgIkNhbGxWYXJpYW50LmgiCiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTQxLDcgKzQyLDkgQEAgdm9pZCBidWlsZFB1dEJ5SWRMaXN0KEV4ZWNT
dGF0ZSosIEpTVmFsdQogdm9pZCByZXBhdGNoSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgY29uc3Qg
SWRlbnRpZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVy
ZVN0dWJJbmZvJik7CiB2b2lkIGxpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29k
ZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQsIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7CiB2b2lkIGxpbmtT
bG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQs
IFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSk7Ci12b2lkIGxpbmtDbG9zdXJlQ2FsbChFeGVjU3Rh
dGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBFeGVjdXRhYmxlQmFzZSosIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciwgUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlKTsKK3ZvaWQgdW5saW5rRm9y
KFJlcGF0Y2hCdWZmZXImLCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBS
ZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwordm9pZCBsaW5rVmlydHVhbEZvcihFeGVjU3RhdGUq
LCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBSZWdpc3RlclByZXNlcnZh
dGlvbk1vZGUpOwordm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5r
SW5mbyYsIENhbGxWYXJpYW50LCBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUpOwogdm9pZCByZXNl
dEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIHJlc2V0
UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVzZXRJ
bihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE3OTI0MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM3LDI3ICsxMzcsMjcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtD
b25zdHJ1Y3RUaGF0UAogICAgIHJldHVybiBsaW5rRm9yVGh1bmtHZW5lcmF0b3Iodm0sIENvZGVG
b3JDb25zdHJ1Y3QsIE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyk7CiB9CiAKLXN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsRm9yVGh1bmtHZW5lcmF0b3IoCitzdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhpY0NhbGxGb3JUaHVua0dlbmVyYXRv
cigKICAgICBWTSogdm0sIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZSByZWdpc3RlcnMpCiB7CiAg
ICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CiAgICAgCi0gICAgc2xvd1BhdGhGb3Ioaml0LCB2bSwg
b3BlcmF0aW9uTGlua0Nsb3N1cmVDYWxsRm9yKHJlZ2lzdGVycykpOworICAgIHNsb3dQYXRoRm9y
KGppdCwgdm0sIG9wZXJhdGlvbkxpbmtQb2x5bW9ycGhpY0NhbGxGb3IocmVnaXN0ZXJzKSk7CiAg
ICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RIVU5LX0lE
KTsKLSAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5rIGNsb3N1cmUg
Y2FsbCAlcyBzbG93IHBhdGggdGh1bmsiLCByZWdpc3RlcnMgPT0gTXVzdFByZXNlcnZlUmVnaXN0
ZXJzID8gIiB0aGF0IHByZXNlcnZlcyByZWdpc3RlcnMiIDogIiIpKTsKKyAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJMaW5rIHBvbHltb3JwaGljIGNhbGwgJXMgc2xvdyBw
YXRoIHRodW5rIiwgcmVnaXN0ZXJzID09IE11c3RQcmVzZXJ2ZVJlZ2lzdGVycyA/ICIgdGhhdCBw
cmVzZXJ2ZXMgcmVnaXN0ZXJzIiA6ICIiKSk7CiB9CiAKIC8vIEZvciBjbG9zdXJlIG9wdGltaXph
dGlvbnMsIHdlIG9ubHkgaW5jbHVkZSBjYWxscywgc2luY2UgaWYgeW91J3JlIHVzaW5nIGNsb3N1
cmVzIGZvcgogLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiB0aGVuIHlvdSdyZSBnb2luZyB0byBsb3Nl
IGJpZyB0aW1lIGFueXdheS4KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsaW5rQ2xvc3VyZUNhbGxU
aHVua0dlbmVyYXRvcihWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3Jw
aGljQ2FsbFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKLSAgICByZXR1cm4gbGlua0Nsb3N1cmVD
YWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQp
OworICAgIHJldHVybiBsaW5rUG9seW1vcnBoaWNDYWxsRm9yVGh1bmtHZW5lcmF0b3Iodm0sIFJl
Z2lzdGVyUHJlc2VydmF0aW9uTm90UmVxdWlyZWQpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NUaHVua0dlbmVyYXRvcihWTSogdm0p
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua1BvbHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNS
ZWdzVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogewotICAgIHJldHVybiBsaW5rQ2xvc3VyZUNhbGxG
b3JUaHVua0dlbmVyYXRvcih2bSwgTXVzdFByZXNlcnZlUmVnaXN0ZXJzKTsKKyAgICByZXR1cm4g
bGlua1BvbHltb3JwaGljQ2FsbEZvclRodW5rR2VuZXJhdG9yKHZtLCBNdXN0UHJlc2VydmVSZWdp
c3RlcnMpOwogfQogCiBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUaHVu
a0dlbmVyYXRvcigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuaAkocmV2aXNpb24gMTc5MjQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTYgKzY1LDE2IEBAIGlubGlu
ZSBUaHVua0dlbmVyYXRvciBsaW5rVGh1bmtHZW5lcmF0b3IKICAgICByZXR1cm4gMDsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtDbG9zdXJlQ2FsbFRodW5rR2VuZXJhdG9yKFZNKik7
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGlua0Nsb3N1cmVDYWxsVGhhdFByZXNlcnZlc1JlZ3NU
aHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5bW9ycGhp
Y0NhbGxUaHVua0dlbmVyYXRvcihWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxpbmtQb2x5
bW9ycGhpY0NhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yKFZNKik7CiAKLWlubGlu
ZSBUaHVua0dlbmVyYXRvciBsaW5rQ2xvc3VyZUNhbGxUaHVua0dlbmVyYXRvckZvcihSZWdpc3Rl
clByZXNlcnZhdGlvbk1vZGUgcmVnaXN0ZXJzKQoraW5saW5lIFRodW5rR2VuZXJhdG9yIGxpbmtQ
b2x5bW9ycGhpY0NhbGxUaHVua0dlbmVyYXRvckZvcihSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUg
cmVnaXN0ZXJzKQogewogICAgIHN3aXRjaCAocmVnaXN0ZXJzKSB7CiAgICAgY2FzZSBSZWdpc3Rl
clByZXNlcnZhdGlvbk5vdFJlcXVpcmVkOgotICAgICAgICByZXR1cm4gbGlua0Nsb3N1cmVDYWxs
VGh1bmtHZW5lcmF0b3I7CisgICAgICAgIHJldHVybiBsaW5rUG9seW1vcnBoaWNDYWxsVGh1bmtH
ZW5lcmF0b3I7CiAgICAgY2FzZSBNdXN0UHJlc2VydmVSZWdpc3RlcnM6Ci0gICAgICAgIHJldHVy
biBsaW5rQ2xvc3VyZUNhbGxUaGF0UHJlc2VydmVzUmVnc1RodW5rR2VuZXJhdG9yOworICAgICAg
ICByZXR1cm4gbGlua1BvbHltb3JwaGljQ2FsbFRoYXRQcmVzZXJ2ZXNSZWdzVGh1bmtHZW5lcmF0
b3I7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJu
IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMiw2ICszMzIsNyBAQCBpbmxp
bmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhDCiAgICAgICAgIH0KICAgICB9CiAg
ICAgZGVmYXVsdDoKKyAgICAgICAgZGF0YUxvZygiVW5leHBlY3RlZCBjb2RlIGJsb2NrIGluIExM
SW50OiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEy
ICsxNzAsMTEgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29s
LCBlbmFibGVQb2x5dmFyaWFudERldmlydHVhbGl6YXRpb24sIHRydWUpIFwKICAgICB2KGJvb2ws
IGVuYWJsZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcsIHRydWUpIFwKICAgICB2KGJvb2wsIGVu
YWJsZVBvbHltb3JwaGljQ2FsbElubGluaW5nLCB0cnVlKSBcCi0gICAgdihib29sLCBjYWxsU3Rh
dHVzU2hvdWxkVXNlQ2FsbEVkZ2VQcm9maWxlLCB0cnVlKSBcCi0gICAgdihib29sLCBjYWxsRWRn
ZVByb2ZpbGVSZWFsbHlQcm9jZXNzZXNMb2csIHRydWUpIFwKLSAgICB2KGJvb2wsIGJhc2VsaW5l
RG9lc0NhbGxFZGdlUHJvZmlsaW5nLCBmYWxzZSkgXAotICAgIHYoYm9vbCwgZGZnRG9lc0NhbGxF
ZGdlUHJvZmlsaW5nLCB0cnVlKSBcCi0gICAgdihib29sLCBlbmFibGVDYWxsRWRnZVByb2ZpbGlu
ZywgdHJ1ZSkgXAorICAgIHYodW5zaWduZWQsIG1heFBvbHltb3JwaGljQ2FsbFZhcmlhbnRMaXN0
U2l6ZSwgMTUpIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhQb2x5bW9ycGhpY0NhbGxWYXJpYW50TGlz
dFNpemVGb3JUb3BUaWVyLCA1KSBcCisgICAgdih1bnNpZ25lZCwgbWF4UG9seW1vcnBoaWNDYWxs
VmFyaWFudHNGb3JJbmxpbmluZywgNSkgXAogICAgIHYodW5zaWduZWQsIGZyZXF1ZW50Q2FsbFRo
cmVzaG9sZCwgMikgXAorICAgIHYoZG91YmxlLCBtaW5pbXVtQ2FsbFRvS25vd25SYXRlLCAwLjUx
KSBcCiAgICAgdihib29sLCBvcHRpbWl6ZU5hdGl2ZUNhbGxzLCBmYWxzZSkgXAogICAgIHYoYm9v
bCwgZW5hYmxlT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcsIHRydWUpIFwKICAgICBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNzkyNDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OSwx
MyArMzY5LDYgQEAgVk0qJiBWTTo6c2hhcmVkSW5zdGFuY2VJbnRlcm5hbCgpCiAgICAgcmV0dXJu
IHNoYXJlZEluc3RhbmNlOwogfQogCi1DYWxsRWRnZUxvZyYgVk06OmVuc3VyZUNhbGxFZGdlTG9n
KCkKLXsKLSAgICBpZiAoIWNhbGxFZGdlTG9nKQotICAgICAgICBjYWxsRWRnZUxvZyA9IHN0ZDo6
bWFrZV91bmlxdWU8Q2FsbEVkZ2VMb2c+KCk7Ci0gICAgcmV0dXJuICpjYWxsRWRnZUxvZzsKLX0K
LQogI2lmIEVOQUJMRShKSVQpCiBzdGF0aWMgVGh1bmtHZW5lcmF0b3IgdGh1bmtHZW5lcmF0b3JG
b3JJbnRyaW5zaWMoSW50cmluc2ljIGludHJpbnNpYykKIHsKQEAgLTQ1OSw5ICs0NTIsNiBAQCB2
b2lkIFZNOjpzdG9wU2FtcGxpbmcoKQogCiB2b2lkIFZNOjpwcmVwYXJlVG9EaXNjYXJkQ29kZSgp
CiB7Ci0gICAgaWYgKGNhbGxFZGdlTG9nKQotICAgICAgICBjYWxsRWRnZUxvZy0+cHJvY2Vzc0xv
ZygpOwotICAgIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGZvciAodW5zaWduZWQgaSA9IERG
Rzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgewogICAgICAgICBpZiAoREZHOjpXb3JrbGlz
dCogd29ya2xpc3QgPSBERkc6OndvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE3OTI0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzOwogY2xh
c3MgQnVpbHRpbkV4ZWN1dGFibGVzOwotY2xhc3MgQ2FsbEVkZ2VMb2c7CiBjbGFzcyBDb2RlQmxv
Y2s7CiBjbGFzcyBDb2RlQ2FjaGU7CiBjbGFzcyBDb21tb25JZGVudGlmaWVyczsKQEAgLTIzOCw5
ICsyMzcsNiBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPERGRzo6TG9uZ0xpdmVkU3Rh
dGU+IGRmZ1N0YXRlOwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCi0gICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxFZGdlTG9nPiBjYWxsRWRnZUxvZzsKLSAgICBDYWxsRWRnZUxvZyYgZW5zdXJl
Q2FsbEVkZ2VMb2coKTsKLQogICAgIFZNVHlwZSB2bVR5cGU7CiAgICAgQ2xpZW50RGF0YSogY2xp
ZW50RGF0YTsKICAgICBWTUVudHJ5RnJhbWUqIHRvcFZNRW50cnlGcmFtZTsK
</data>
<flag name="review"
          id="270551"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>