<?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>71977</bug_id>
          
          <creation_ts>2011-11-09 17:41:23 -0800</creation_ts>
          <short_desc>DFG should not reparse code that was just parsed</short_desc>
          <delta_ts>2011-11-10 14:04:25 -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>71978</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>levin+threading</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>499526</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-09 17:41:23 -0800</bug_when>
    <thetext>The DFG will currently redo parsing on an executable when that executable had just been parsed by the old JIT.  It will also repeatedly reparse code that is inlined multiple times.  This is likely not particularly great for performance.

This is an umbrella bug for now, since there are a number of independent things that need to be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499706</commentid>
    <comment_count>1</comment_count>
      <attachid>114448</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-10 00:23:33 -0800</bug_when>
    <thetext>Created attachment 114448
work in progress

Putting it up here as backup.  I&apos;m pretty sure this won&apos;t compile yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499766</commentid>
    <comment_count>2</comment_count>
      <attachid>114465</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-10 03:39:13 -0800</bug_when>
    <thetext>Created attachment 114465
work in progress

It&apos;s starting to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499774</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-10 03:54:17 -0800</bug_when>
    <thetext>Not bad.



Benchmark report for SunSpider, V8, and Kraken on oldmac.local (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r99833)
&quot;DontReparse&quot; at /Volumes/Data/pizlo/octonary/OpenSource/WebKitBuild/Release/jsc (r99833)

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

                                            TipOfTree              DontReparse                                   
SunSpider:
   3d-cube                                9.1379+-0.0258    ^     8.9776+-0.0431       ^ definitely 1.0179x faster
   3d-morph                              10.2370+-0.1657         10.0917+-0.0355         might be 1.0144x faster
   3d-raytrace                            9.6404+-0.0490    ^     9.2559+-0.1173       ^ definitely 1.0415x faster
   access-binary-trees                    1.9784+-0.0069    ^     1.9054+-0.0058       ^ definitely 1.0383x faster
   access-fannkuch                        9.3247+-0.0053    ^     9.1539+-0.0087       ^ definitely 1.0187x faster
   access-nbody                           5.3036+-0.0459    ^     5.0134+-0.0038       ^ definitely 1.0579x faster
   access-nsieve                          3.7628+-0.0067    ?     3.7635+-0.0509       ?
   bitops-3bit-bits-in-byte               1.5622+-0.0153    ^     1.4952+-0.0147       ^ definitely 1.0448x faster
   bitops-bits-in-byte                    6.1942+-0.0324          6.1408+-0.0401       
   bitops-bitwise-and                     3.9978+-0.0078    ^     3.9756+-0.0045       ^ definitely 1.0056x faster
   bitops-nsieve-bits                     6.8386+-0.0425          6.8337+-0.0432       
   controlflow-recursive                  2.8144+-0.0257    ^     2.7221+-0.0205       ^ definitely 1.0339x faster
   crypto-aes                             9.3584+-0.0448    ^     8.6663+-0.0735       ^ definitely 1.0799x faster
   crypto-md5                             3.3037+-0.0118    ^     3.0594+-0.0265       ^ definitely 1.0799x faster
   crypto-sha1                            3.0046+-0.0219    ^     2.6333+-0.0255       ^ definitely 1.1410x faster
   date-format-tofte                     13.1019+-0.1050         12.9822+-0.1197       
   date-format-xparb                     12.6418+-0.2223         12.4466+-0.1807         might be 1.0157x faster
   math-cordic                            9.1270+-0.3557          9.1158+-0.3626       
   math-partial-sums                     12.6792+-0.0344         12.6775+-0.0641       
   math-spectral-norm                     3.3260+-0.0107    ^     3.1266+-0.0059       ^ definitely 1.0638x faster
   regexp-dna                            16.6620+-0.1701         16.4830+-0.1113         might be 1.0109x faster
   string-base64                          5.0312+-0.0447    ^     4.7826+-0.0561       ^ definitely 1.0520x faster
   string-fasta                           8.6124+-0.0827    ^     8.4399+-0.0109       ^ definitely 1.0204x faster
   string-tagcloud                       16.2052+-0.1513         16.1084+-0.1053       
   string-unpack-code                    28.6954+-0.0939    ^    27.5795+-0.0749       ^ definitely 1.0405x faster
   string-validate-input                  6.8491+-0.0488    ?     6.9466+-0.0508       ? might be 1.0142x slower

   &lt;arithmetic&gt; *                         8.4381+-0.0379    ^     8.2453+-0.0344       ^ definitely 1.0234x faster
   &lt;geometric&gt;                            6.7285+-0.0257    ^     6.5338+-0.0271       ^ definitely 1.0298x faster
   &lt;harmonic&gt;                             5.2671+-0.0166    ^     5.0645+-0.0213       ^ definitely 1.0400x faster

                                            TipOfTree              DontReparse                                   
V8:
   crypto                                96.4900+-0.2991    ^    94.1861+-0.2984       ^ definitely 1.0245x faster
   deltablue                            217.5844+-0.9899    ^   212.8585+-0.9464       ^ definitely 1.0222x faster
   earley-boyer                         130.9492+-1.0780    ^   127.8899+-1.0225       ^ definitely 1.0239x faster
   raytrace                              81.0926+-0.6513    ^    77.3365+-0.4481       ^ definitely 1.0486x faster
   regexp                               151.3493+-0.3147    ^   149.5843+-0.3025       ^ definitely 1.0118x faster
   richards                             173.5795+-1.5279    ^   168.0494+-0.3756       ^ definitely 1.0329x faster
   splay                                108.7153+-1.4730        106.6012+-1.2274         might be 1.0198x faster

   &lt;arithmetic&gt;                         137.1086+-0.5109    ^   133.7865+-0.2295       ^ definitely 1.0248x faster
   &lt;geometric&gt; *                        130.2653+-0.4899    ^   126.9433+-0.2811       ^ definitely 1.0262x faster
   &lt;harmonic&gt;                           123.8923+-0.4964    ^   120.5107+-0.3238       ^ definitely 1.0281x faster

                                            TipOfTree              DontReparse                                   
Kraken:
   ai-astar                             896.4849+-0.6290    ?   896.7507+-0.6768       ?
   audio-beat-detection                 256.6795+-1.3877    ?   257.9164+-3.2833       ?
   audio-dft                            313.6312+-2.6722    ?   314.6306+-3.0242       ?
   audio-fft                            166.9654+-0.4950        166.8619+-0.2442       
   audio-oscillator                     350.5585+-0.7851    !   353.6672+-2.3029       ! definitely 1.0089x slower
   imaging-darkroom                     403.5161+-5.9836        403.3743+-5.9462       
   imaging-desaturate                   291.2893+-0.1042        291.1998+-0.1519       
   imaging-gaussian-blur                750.8418+-0.1805    ?   753.1201+-3.0041       ?
   json-parse-financial                  86.7433+-0.7667    !    88.5801+-0.3610       ! definitely 1.0212x slower
   json-stringify-tinderbox              94.8303+-0.5800    !    96.2029+-0.6412       ! definitely 1.0145x slower
   stanford-crypto-aes                  139.4328+-0.8114        138.7555+-0.7377       
   stanford-crypto-ccm                  136.8853+-0.4446    !   138.3731+-0.9205       ! definitely 1.0109x slower
   stanford-crypto-pbkdf2               281.8990+-2.1521        280.7161+-2.1571       
   stanford-crypto-sha256-iterative     118.3287+-0.2864        118.2437+-0.4310       

   &lt;arithmetic&gt; *                       306.2919+-0.5709    ?   307.0280+-0.7822       ?
   &lt;geometric&gt;                          238.7151+-0.5075    ?   239.6552+-0.5550       ?
   &lt;harmonic&gt;                           192.2048+-0.5310    !   193.4355+-0.3946       ! definitely 1.0064x slower

                                            TipOfTree              DontReparse                                   
All benchmarks:
   &lt;arithmetic&gt;                         116.3242+-0.1934        115.9420+-0.2147       
   &lt;geometric&gt;                           30.2882+-0.0696    ^    29.7204+-0.0740       ^ definitely 1.0191x faster
   &lt;harmonic&gt;                             9.2782+-0.0285    ^     8.9281+-0.0367       ^ definitely 1.0392x faster

                                            TipOfTree              DontReparse                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       69.5663+-0.1551    ^    68.4953+-0.1164       ^ definitely 1.0156x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499775</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-10 03:59:00 -0800</bug_when>
    <thetext>And another computer…


Benchmark report for SunSpider, V8, and Kraken on nitroflex.local (MacBookPro8,2).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r99833)
&quot;DontReparse&quot; at /Volumes/Data/pizlo/octonary/OpenSource/WebKitBuild/Release/jsc (r99833)

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

                                            TipOfTree              DontReparse                                   
SunSpider:
   3d-cube                                7.1160+-0.2107          7.0391+-0.1941         might be 1.0109x faster
   3d-morph                               7.4623+-0.1149          7.4498+-0.0730       
   3d-raytrace                            7.3824+-0.1565          7.1738+-0.1668         might be 1.0291x faster
   access-binary-trees                    1.5903+-0.0913          1.5834+-0.0779       
   access-fannkuch                        6.3282+-0.1507          6.1782+-0.1300         might be 1.0243x faster
   access-nbody                           3.6238+-0.0754    ^     3.4095+-0.0862       ^ definitely 1.0629x faster
   access-nsieve                          2.5397+-0.0578    ?     2.5805+-0.1049       ? might be 1.0161x slower
   bitops-3bit-bits-in-byte               1.2867+-0.0294          1.2578+-0.0243         might be 1.0230x faster
   bitops-bits-in-byte                    2.3013+-0.0503          2.2661+-0.0535         might be 1.0155x faster
   bitops-bitwise-and                     3.2182+-0.0962    ?     3.2186+-0.0473       ?
   bitops-nsieve-bits                     5.1653+-0.0542    ?     5.2901+-0.0994       ? might be 1.0242x slower
   controlflow-recursive                  2.1026+-0.0452          2.0529+-0.0553         might be 1.0243x faster
   crypto-aes                             7.4216+-0.1925    ^     6.9160+-0.2297       ^ definitely 1.0731x faster
   crypto-md5                             2.5961+-0.0629    ^     2.3522+-0.0650       ^ definitely 1.1037x faster
   crypto-sha1                            2.3015+-0.0560    ^     2.0612+-0.0614       ^ definitely 1.1166x faster
   date-format-tofte                      9.9099+-0.3246          9.8278+-0.1697       
   date-format-xparb                      9.2049+-0.2389    ?     9.6297+-0.2415       ? might be 1.0461x slower
   math-cordic                            6.4217+-0.0867    ?     6.4958+-0.0747       ? might be 1.0115x slower
   math-partial-sums                      7.5150+-0.1556    ?     7.5324+-0.0968       ?
   math-spectral-norm                     2.5063+-0.0604    ^     2.3266+-0.0575       ^ definitely 1.0773x faster
   regexp-dna                            11.5327+-0.2318         11.5130+-0.2307       
   string-base64                          3.9163+-0.1086    ^     3.7127+-0.0613       ^ definitely 1.0548x faster
   string-fasta                           6.2300+-0.1228    ?     6.3211+-0.1558       ? might be 1.0146x slower
   string-tagcloud                       11.7260+-0.2376         11.3764+-0.2851         might be 1.0307x faster
   string-unpack-code                    20.3561+-0.3019         19.9831+-0.4012         might be 1.0187x faster
   string-validate-input                  5.1792+-0.1294          5.1156+-0.0853         might be 1.0124x faster

   &lt;arithmetic&gt; *                         6.0359+-0.0345    ^     5.9486+-0.0316       ^ definitely 1.0147x faster
   &lt;geometric&gt;                            4.8367+-0.0247    ^     4.7343+-0.0335       ^ definitely 1.0216x faster
   &lt;harmonic&gt;                             3.8515+-0.0262    ^     3.7419+-0.0376       ^ definitely 1.0293x faster

                                            TipOfTree              DontReparse                                   
V8:
   crypto                                71.4460+-0.3823    ^    69.7978+-0.5671       ^ definitely 1.0236x faster
   deltablue                            157.8425+-0.6965    ^   154.9324+-0.8671       ^ definitely 1.0188x faster
   earley-boyer                          87.6959+-0.7451    ^    85.4942+-0.8234       ^ definitely 1.0258x faster
   raytrace                              59.1921+-0.4369    ^    56.6614+-0.5331       ^ definitely 1.0447x faster
   regexp                               105.1183+-0.6274    ^   103.9579+-0.3793       ^ definitely 1.0112x faster
   richards                             122.5364+-0.3778    ^   120.4521+-0.3004       ^ definitely 1.0173x faster
   splay                                 70.8957+-0.6718    ?    71.7627+-1.3166       ? might be 1.0122x slower

   &lt;arithmetic&gt;                          96.3896+-0.1855    ^    94.7226+-0.2461       ^ definitely 1.0176x faster
   &lt;geometric&gt; *                         91.4376+-0.2092    ^    89.7871+-0.2735       ^ definitely 1.0184x faster
   &lt;harmonic&gt;                            87.0474+-0.2357    ^    85.3657+-0.3124       ^ definitely 1.0197x faster

                                            TipOfTree              DontReparse                                   
Kraken:
   ai-astar                             488.4696+-3.7278        486.2353+-2.2241       
   audio-beat-detection                 187.0626+-0.4844        186.4867+-0.7610       
   audio-dft                            262.7114+-2.6286        259.0819+-2.1574         might be 1.0140x faster
   audio-fft                            121.3754+-0.3667    !   122.9276+-0.9519       ! definitely 1.0128x slower
   audio-oscillator                     247.5074+-0.9471    ?   247.8469+-1.0463       ?
   imaging-darkroom                     296.4649+-4.2409    ?   296.6776+-4.4837       ?
   imaging-desaturate                   221.6823+-0.6434        221.5570+-0.7926       
   imaging-gaussian-blur                546.3750+-1.4749        544.4993+-1.1686       
   json-parse-financial                  56.9925+-0.2459    ?    57.1872+-0.1117       ?
   json-stringify-tinderbox              67.6576+-0.1270    ?    67.7753+-0.5094       ?
   stanford-crypto-aes                   94.2014+-0.4049    ?    95.0778+-0.5380       ?
   stanford-crypto-ccm                   97.8710+-0.7897    ?    98.1923+-0.5955       ?
   stanford-crypto-pbkdf2               186.9708+-0.6859    !   189.3529+-1.1652       ! definitely 1.0127x slower
   stanford-crypto-sha256-iterative      79.0255+-0.3167         78.6344+-0.1717       

   &lt;arithmetic&gt; *                       211.0262+-0.4791        210.8237+-0.3195       
   &lt;geometric&gt;                          167.4214+-0.2784    ?   167.5952+-0.2236       ?
   &lt;harmonic&gt;                           134.1494+-0.1889    ?   134.4629+-0.1789       ?

                                            TipOfTree              DontReparse                                   
All benchmarks:
   &lt;arithmetic&gt;                          80.5538+-0.1423    ^    80.1969+-0.1096       ^ definitely 1.0045x faster
   &lt;geometric&gt;                           21.5367+-0.0629    ^    21.2318+-0.0878       ^ definitely 1.0144x faster
   &lt;harmonic&gt;                             6.7768+-0.0449    ^     6.5878+-0.0646       ^ definitely 1.0287x faster

                                            TipOfTree              DontReparse                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       48.8348+-0.0937    ^    48.2887+-0.1133       ^ definitely 1.0113x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499776</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-10 04:03:28 -0800</bug_when>
    <thetext>And another….


Benchmark report for SunSpider, V8, and Kraken on bigmac.local (MacPro5,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r99833)
&quot;DontReparse&quot; at /Volumes/Data/pizlo/octonary/OpenSource/WebKitBuild/Release/jsc (r99833)

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

                                            TipOfTree              DontReparse                                   
SunSpider:
   3d-cube                                7.6214+-0.0260    ^     7.4704+-0.0339       ^ definitely 1.0202x faster
   3d-morph                               8.5726+-0.2168          8.5425+-0.1181       
   3d-raytrace                            8.0998+-0.0556    ^     7.8017+-0.0736       ^ definitely 1.0382x faster
   access-binary-trees                    1.6547+-0.0060    ^     1.5997+-0.0131       ^ definitely 1.0344x faster
   access-fannkuch                        7.7523+-0.0579          7.6534+-0.0855         might be 1.0129x faster
   access-nbody                           4.3934+-0.0093    ^     4.1874+-0.0198       ^ definitely 1.0492x faster
   access-nsieve                          3.1666+-0.0123          3.1577+-0.0385       
   bitops-3bit-bits-in-byte               1.3018+-0.0160    ^     1.2567+-0.0156       ^ definitely 1.0359x faster
   bitops-bits-in-byte                    5.1806+-0.0588    ^     5.0844+-0.0243       ^ definitely 1.0189x faster
   bitops-bitwise-and                     3.3273+-0.0264          3.3032+-0.0160       
   bitops-nsieve-bits                     5.6694+-0.0387    ?     5.7061+-0.0751       ?
   controlflow-recursive                  2.3453+-0.0259          2.3022+-0.0323         might be 1.0187x faster
   crypto-aes                             7.8643+-0.1285    ^     7.1920+-0.0663       ^ definitely 1.0935x faster
   crypto-md5                             2.8297+-0.0241    ^     2.5823+-0.0402       ^ definitely 1.0958x faster
   crypto-sha1                            2.5183+-0.0171    ^     2.2355+-0.0192       ^ definitely 1.1265x faster
   date-format-tofte                     10.7092+-0.0645    ?    10.9788+-0.3545       ? might be 1.0252x slower
   date-format-xparb                     10.1238+-0.1178    ?    10.1934+-0.2675       ?
   math-cordic                            8.0333+-0.2888    ^     7.4030+-0.2621       ^ definitely 1.0852x faster
   math-partial-sums                     10.5474+-0.0294    ?    10.5618+-0.0540       ?
   math-spectral-norm                     2.7740+-0.0234    ^     2.6236+-0.0308       ^ definitely 1.0573x faster
   regexp-dna                            13.4838+-0.2007         13.3818+-0.1448       
   string-base64                          4.2050+-0.1004    ^     3.9436+-0.0208       ^ definitely 1.0663x faster
   string-fasta                           7.1460+-0.0195          7.1042+-0.0590       
   string-tagcloud                       13.3047+-0.0846    ?    13.3969+-0.1912       ?
   string-unpack-code                    23.2199+-0.1831    ^    22.3907+-0.1962       ^ definitely 1.0370x faster
   string-validate-input                  5.7297+-0.0603    ?     5.7545+-0.0318       ?

   &lt;arithmetic&gt; *                         6.9836+-0.0242    ^     6.8387+-0.0298       ^ definitely 1.0212x faster
   &lt;geometric&gt;                            5.6027+-0.0181    ^     5.4455+-0.0190       ^ definitely 1.0289x faster
   &lt;harmonic&gt;                             4.4005+-0.0171    ^     4.2394+-0.0178       ^ definitely 1.0380x faster

                                            TipOfTree              DontReparse                                   
V8:
   crypto                                80.2850+-0.3858    ^    78.1313+-0.2512       ^ definitely 1.0276x faster
   deltablue                            180.4189+-0.7193    ?   180.5901+-1.6778       ?
   earley-boyer                         109.3444+-0.6908    ^   106.7310+-0.9064       ^ definitely 1.0245x faster
   raytrace                              67.1571+-0.5759    ^    63.9823+-0.3642       ^ definitely 1.0496x faster
   regexp                               127.2048+-0.4775    ^   125.1099+-0.4190       ^ definitely 1.0167x faster
   richards                             143.2527+-0.4555    ^   139.8843+-0.6572       ^ definitely 1.0241x faster
   splay                                 92.1319+-1.3306         91.2307+-1.3058       

   &lt;arithmetic&gt;                         114.2564+-0.1739    ^   112.2371+-0.3763       ^ definitely 1.0180x faster
   &lt;geometric&gt; *                        108.6299+-0.2137    ^   106.3404+-0.3306       ^ definitely 1.0215x faster
   &lt;harmonic&gt;                           103.3378+-0.2485    ^   100.7975+-0.3126       ^ definitely 1.0252x faster

                                            TipOfTree              DontReparse                                   
Kraken:
   ai-astar                             811.1446+-12.1836   !   829.6888+-1.2981       ! definitely 1.0229x slower
   audio-beat-detection                 210.4634+-0.3345        210.3719+-0.3645       
   audio-dft                            267.3029+-8.5981        263.2959+-2.3874         might be 1.0152x faster
   audio-fft                            137.5691+-0.3430    ?   137.5746+-0.3763       ?
   audio-oscillator                     292.3153+-2.9677        290.9230+-0.8406       
   imaging-darkroom                     334.1868+-4.7150    ?   335.8100+-4.9925       ?
   imaging-desaturate                   241.3295+-0.2320    ?   241.5680+-0.2330       ?
   imaging-gaussian-blur                622.9331+-0.6125    ?   622.9645+-0.7185       ?
   json-parse-financial                  71.5099+-0.2457    !    72.7217+-0.2078       ! definitely 1.0169x slower
   json-stringify-tinderbox              78.9935+-0.5460    !    79.9847+-0.3438       ! definitely 1.0125x slower
   stanford-crypto-aes                  116.4337+-0.5026        115.5108+-1.2490       
   stanford-crypto-ccm                  117.1500+-3.0983        115.0906+-0.5055         might be 1.0179x faster
   stanford-crypto-pbkdf2               232.4978+-0.4830    ^   231.4326+-0.5179       ^ definitely 1.0046x faster
   stanford-crypto-sha256-iterative      97.9107+-0.2340         97.7429+-0.3122       

   &lt;arithmetic&gt; *                       259.4100+-0.7933    ?   260.3343+-0.3323       ?
   &lt;geometric&gt;                          199.7779+-0.5859    ?   199.8830+-0.2001       ?
   &lt;harmonic&gt;                           160.0671+-0.5030    ?   160.2880+-0.1659       ?

                                            TipOfTree              DontReparse                                   
All benchmarks:
   &lt;arithmetic&gt;                          98.1513+-0.2377         98.0457+-0.1025       
   &lt;geometric&gt;                           25.2640+-0.0594    ^    24.7944+-0.0549       ^ definitely 1.0189x faster
   &lt;harmonic&gt;                             7.7511+-0.0296    ^     7.4725+-0.0307       ^ definitely 1.0373x faster

                                            TipOfTree              DontReparse                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       58.1661+-0.1051    ^    57.4204+-0.1284       ^ definitely 1.0130x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499782</commentid>
    <comment_count>6</comment_count>
      <attachid>114468</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-10 04:07:25 -0800</bug_when>
    <thetext>Created attachment 114468
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499787</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-10 04:11:28 -0800</bug_when>
    <thetext>&lt;rdar://problem/10425588&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500098</commentid>
    <comment_count>8</comment_count>
      <attachid>114468</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-10 12:06:47 -0800</bug_when>
    <thetext>Comment on attachment 114468
the patch

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

r=me, with some comments below.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1655
&gt; +    if (hasInstructions() &amp;&amp; m_shouldDiscardBytecodeLater)

The &quot;Later&quot; in &quot;m_shouldDiscardBytecodeLater&quot; confused me because it sounded like setting the flag was a way to delay or prevent discarding bytecode (&quot;Not now, later&quot;), but actually it&apos;s the way to cause bytecode to be discarded. I think &quot;m_shouldDiscardBytecode&quot; would be better.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeCache.h:68
&gt; +        // This is likely to be good enough.

Sneaky, but true. I would remove this comment, or add a &quot;why&quot; explanation.

Thinking this through, I wonder if | might be clearer than ^ here. This hash function really just relies on the low bits of m_executable being zero, and the low bits of m_kind being meaningful.

&gt; Source/JavaScriptCore/heap/ListableHandler.h:60
&gt; +        void addNotThreadSafe(T* handler)

Please make this private.

&gt; Source/JavaScriptCore/heap/UltraWeakFinalizer.h:37
&gt; +class UltraWeakFinalizer : public ListableHandler&lt;UltraWeakFinalizer&gt; {

The &quot;Ultra&quot; in &quot;UltraWeak&quot; didn&apos;t do enough to tell me what this class is. To my mind, two things are unique about this kind of &quot;finalizer&quot;: (1) It fires no matter what, even if the owning object is live; (2) If GC happens soon enough, it might prefer not to fire, thus avoiding cache churn. Based on those facts, I&apos;d suggest:

- CacheOwner (with a &quot;clearCache&quot; callback)
OR
- UnconditionalFinalizer (with a &quot;finalize&quot; callback)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500254</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-10 14:03:20 -0800</bug_when>
    <thetext>&gt; The &quot;Later&quot; in &quot;m_shouldDiscardBytecodeLater&quot; confused me because it sounded like setting the flag was a way to delay or prevent discarding bytecode (&quot;Not now, later&quot;), but actually it&apos;s the way to cause bytecode to be discarded. I think &quot;m_shouldDiscardBytecode&quot; would be better.

I dropped the Later.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGByteCodeCache.h:68
&gt; &gt; +        // This is likely to be good enough.
&gt; 
&gt; Sneaky, but true. I would remove this comment, or add a &quot;why&quot; explanation.
&gt; 
&gt; Thinking this through, I wonder if | might be clearer than ^ here. This hash function really just relies on the low bits of m_executable being zero, and the low bits of m_kind being meaningful.

I dropped the comment.  It&apos;s actually less sneaky and even more correct: I&apos;m using the PtrHash, which picks an appropriate int hash, so even just the pointer hash has all bits populated with some manner of rubbish.  Then I xor in the mode enum, which flips the low bit.

It&apos;s only &quot;likely&quot; to be good enough because if someone changed the hash table implementation to use high bits instead of low bits in the mask, then this would become slightly sub-optimal.  But even then it would only be *slightly* sub-optimal because it would mean collisions when you want to inline an executable for both a call and a construction.  And even then that collision probably won&apos;t cost you anything since the dominant cost of inlining is, well, inlining.  So we&apos;re starting to enter into the unlikely * unlikely * unlikely domain of probabilities.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/ListableHandler.h:60
&gt; &gt; +        void addNotThreadSafe(T* handler)
&gt; 
&gt; Please make this private.

I did, though probably one of my next patches will make it public again.  The WeakReferenceHarvester list should be processed multiple times, and the easiest way to do that is for the GC to consume the global one into a private one, which can be added to without locking.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/UltraWeakFinalizer.h:37
&gt; &gt; +class UltraWeakFinalizer : public ListableHandler&lt;UltraWeakFinalizer&gt; {
&gt; 
&gt; The &quot;Ultra&quot; in &quot;UltraWeak&quot; didn&apos;t do enough to tell me what this class is. To my mind, two things are unique about this kind of &quot;finalizer&quot;: (1) It fires no matter what, even if the owning object is live; (2) If GC happens soon enough, it might prefer not to fire, thus avoiding cache churn. Based on those facts, I&apos;d suggest:
&gt; 
&gt; - CacheOwner (with a &quot;clearCache&quot; callback)
&gt; OR
&gt; - UnconditionalFinalizer (with a &quot;finalize&quot; callback)

I picked UnconditionalFinalizer, and made the callback &quot;finalizeUnconditionally&quot;, since I did not want CodeBlock to have a method called &quot;finalize&quot;.  It would be hard to tell where that method came from.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500258</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-10 14:04:25 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/99898</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114448</attachid>
            <date>2011-11-10 00:23:33 -0800</date>
            <delta_ts>2011-11-10 03:39:13 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>dontreparse_patch_1.diff</filename>
            <type>text/plain</type>
            <size>50461</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk4MjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzkgQEAK
KzIwMTEtMTEtMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIG5vdCByZXBhcnNlIGNvZGUgdGhhdCB3YXMganVzdCBwYXJzZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxOTc3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHBy
b2dyZXNzLiAgTm90IHN1cmUgaWYgdGhpcyBldmVuIGNvbXBpbGVzLgorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmNvcHlQb3N0UGFyc2VEYXRhRnJvbSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Y29weVBvc3RQYXJzZURhdGFGcm9tQWx0ZXJuYXRpdmUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZpbmFsaXplVWx0cmFXZWFrRGF0YSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FuUHJvZHVjZUNvcHlXaXRoQnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRpc2NhcmRCeXRlY29kZUxhdGVyKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVCeXRlY29kZURpc2NhcmRpbmdPcHBvcnR1bml0
eSk6CisgICAgICAgIChKU0M6Okdsb2JhbENvZGVCbG9jazo6R2xvYmFsQ29kZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6UHJvZ3JhbUNvZGVCbG9jayk6CisgICAgICAg
IChKU0M6OkV2YWxDb2RlQmxvY2s6OkV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkNvZGVCbG9jazo6RnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZURlc3RydWN0aW9uQmxvY2tlcjo6Qnl0ZWNvZGVEZXN0cnVjdGlvbkJsb2NrZXIpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZURlc3RydWN0aW9uQmxvY2tlcjo6fkJ5dGVjb2RlRGVzdHJ1Y3Rpb25C
bG9ja2VyKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVDYWNoZS5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpDb2RlQmxvY2tLZXk6OkNvZGVCbG9ja0tleSk6CisgICAgICAgIChKU0M6
OkRGRzo6Q29kZUJsb2NrS2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpDb2Rl
QmxvY2tLZXk6Omhhc2gpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVCbG9ja0tleTo6ZXhlY3V0
YWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q29kZUJsb2NrS2V5OjpraW5kKToKKyAgICAgICAg
KEpTQzo6REZHOjpDb2RlQmxvY2tLZXlIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpD
b2RlQmxvY2tLZXlIYXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVDYWNo
ZTo6Qnl0ZUNvZGVDYWNoZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVDYWNoZTo6fkJ5
dGVDb2RlQ2FjaGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlQ2FjaGU6OmdldCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6
CisgICAgICAgIChKU0M6OkhlYXA6OmZpbmFsaXplVWx0cmFXZWFrRGF0YSk6CisgICAgICAgIChK
U0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAg
ICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhlYXAvTGlzdGFibGVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpMaXN0YWJsZUhhbmRsZXI6Okxpc3RhYmxlSGFuZGxlcik6Cisg
ICAgICAgIChKU0M6Okxpc3RhYmxlSGFuZGxlcjo6fkxpc3RhYmxlSGFuZGxlcik6CisgICAgICAg
IChKU0M6Okxpc3RhYmxlSGFuZGxlcjo6TGlzdDo6TGlzdCk6CisgICAgICAgIChKU0M6Okxpc3Rh
YmxlSGFuZGxlcjo6TGlzdDo6YWRkTm90VGhyZWFkU2FmZSk6CisgICAgICAgIChKU0M6Okxpc3Rh
YmxlSGFuZGxlcjo6TGlzdDo6YWRkVGhyZWFkU2FmZSk6CisgICAgICAgIChKU0M6Okxpc3RhYmxl
SGFuZGxlcjo6TGlzdDo6aGFzTmV4dCk6CisgICAgICAgIChKU0M6Okxpc3RhYmxlSGFuZGxlcjo6
TGlzdDo6cmVtb3ZlTmV4dCk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAg
ICAoSlNDOjpNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpNYXJrU3RhY2tUaHJlYWRTaGFyZWRE
YXRhKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpmaW5hbGl6ZVVsdHJhV2Vha0RhdGEpOgorICAg
ICAgICAqIGhlYXAvTWFya1N0YWNrLmg6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YWRkV2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlcik6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YWRkVWx0cmFX
ZWFrRmluYWxpemVyKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgICog
aGVhcC9VbHRyYVdlYWtGaW5hbGl6ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlVsdHJhV2Vh
a0ZpbmFsaXplcjo6flVsdHJhV2Vha0ZpbmFsaXplcik6CisgICAgICAgICogaGVhcC9XZWFrUmVm
ZXJlbmNlSGFydmVzdGVyLmg6CisgICAgICAgIChKU0M6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI6
OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOgorICAgICAgICAoSlNDOjpXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyOjp+V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik6CisgICAgICAgICogcnVudGltZS9FeGVj
dXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgor
ICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFs
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0
SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvZGVCbG9ja1dpdGhCeXRlY29kZUZvcik6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZmlsZWRDb2RlQmxvY2tGb3IpOgorCiAyMDEx
LTExLTA5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFRv
d2FyZHMgOCBCaXQgU3RyaW5nczogVGVtcGxhdGl6ZSBKU0M6OkxpdGVyYWxQYXJzZXIgY2xhc3Mg
YnkgY2hhcmFjdGVyIHR5cGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiA5OTgxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw4IEBACiAJ
CTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NTE0NjBDQkFCMDAxMzFG
OEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2
QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFG
OEYgLyogRGF0YUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjQzMTczODE0NkJB
QzY5MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQzMTczNjE0NkJBQzY1MDA3RTM4OTAgLyogTGlzdGFi
bGVIYW5kbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY0MzE3MzkxNDZCQUM2QjAwN0UzODkwIC8qIFVsdHJhV2Vha0ZpbmFsaXplci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MzE3MzcxNDZC
QUM2NTAwN0UzODkwIC8qIFVsdHJhV2Vha0ZpbmFsaXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjYyMDE3NTE0M0ZDRDM3MDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcxMTQzRkNEMkYwMDY4
Qjc3QyAvKiBERkdPcGVyYW5kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNjIwMTc2MTQzRkNEM0IwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2Nr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3
MDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MjksNiArODMxLDggQEAKIAkJMEY0MjZB
NDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1h
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0
YWJsZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlzdGFibGVI
YW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDMxNzM3MTQ2QkFDNjUw
MDdFMzg5MCAvKiBVbHRyYVdlYWtGaW5hbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVWx0cmFXZWFrRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNjIwMTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fic3RyYWN0U3RhdGUuY3BwOyBw
YXRoID0gZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYyMDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBYnN0cmFjdFN0YXRlLmg7IHBhdGggPSBk
ZmcvREZHQWJzdHJhY3RTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYy
MDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBYnN0cmFjdFZhbHVlLmg7IHBhdGggPSBkZmcvREZHQWJz
dHJhY3RWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcwMSw2ICsxNzA1
LDggQEAKIAkJMTQyRTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5
MCAvKiBMaXN0YWJsZUhhbmRsZXIuaCAqLywKKwkJCQkwRjQzMTczNzE0NkJBQzY1MDA3RTM4OTAg
LyogVWx0cmFXZWFrRmluYWxpemVyLmggKi8sCiAJCQkJMEZEODJGMjgxNDI2Q0E1QTAwMTc5Qzk0
IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCAqLywKIAkJCQkwRkQ4MkYyOTE0MjZDQTVBMDAx
NzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLywKIAkJCQlBNzA0NTZBRTE0MjdGQjAz
MDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmNwcCAqLywKQEAgLTI5NDMsNiArMjk0OSw4IEBA
CiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3OUMxNDZBNzcyNTAwQ0YyNDQyIC8qIERGR0NvcnJlY3Rh
YmxlSnVtcFBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTdBMjE0NkIyOENDMDBDRjI0
NDIgLyogREZHVGh1bmtzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjQzMTczODE0NkJBQzY5MDA3
RTM4OTAgLyogTGlzdGFibGVIYW5kbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjQzMTczOTE0
NkJBQzZCMDA3RTM4OTAgLyogVWx0cmFXZWFrRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiA5OTgxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDA3LDYgKzE0MDcsNTcgQEAgdm9pZCBDb2RlQmxvY2s6
OmR1bXBTdGF0aXN0aWNzKCkKICNlbmRpZgogfQogCitDb2RlQmxvY2s6OkNvZGVCbG9jayhDb3B5
UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIsIFN5bWJvbFRhYmxlKiBzeW1UYWIpCisg
ICAgOiBtX2dsb2JhbE9iamVjdChvdGhlci5tX2dsb2JhbE9iamVjdCkKKyAgICAsIG1faGVhcChv
dGhlci5tX2hlYXApCisgICAgLCBtX251bUNhbGxlZVJlZ2lzdGVycyhvdGhlci5tX251bUNhbGxl
ZVJlZ2lzdGVycykKKyAgICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZhcnMpCisgICAgLCBtX251
bUNhcHR1cmVkVmFycyhvdGhlci5tX251bUNhcHR1cmVkVmFycykKKyAgICAsIG1fbnVtUGFyYW1l
dGVycyhvdGhlci5tX251bVBhcmFtZXRlcnMpCisgICAgLCBtX2lzQ29uc3RydWN0b3Iob3RoZXIu
bV9pc0NvbnN0cnVjdG9yKQorICAgICwgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGVMYXRlcihmYWxz
ZSkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX2dsb2JhbERhdGEsIG90aGVyLm1f
b3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSkKKyAg
ICAsIG1fZ2xvYmFsRGF0YShvdGhlci5tX2dsb2JhbERhdGEpCisgICAgLCBtX2luc3RydWN0aW9u
cyhvdGhlci5tX2luc3RydWN0aW9ucykKKyAgICAsIG1faW5zdHJ1Y3Rpb25Db3VudChvdGhlci5t
X2luc3RydWN0aW9uQ291bnQpCisgICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNSZWdp
c3RlcikKKyAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIob3RoZXIubV9hcmd1bWVudHNSZWdpc3Rl
cikKKyAgICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKG90aGVyLm1fYWN0aXZhdGlvblJlZ2lzdGVy
KQorICAgICwgbV9uZWVkc0Z1bGxTY29wZUNoYWluKG90aGVyLm1fbmVlZHNGdWxsU2NvcGVDaGFp
bikKKyAgICAsIG1fdXNlc0V2YWwob3RoZXIubV91c2VzRXZhbCkKKyAgICAsIG1faXNOdW1lcmlj
Q29tcGFyZUZ1bmN0aW9uKG90aGVyLm1faXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKQorICAgICwg
bV9pc1N0cmljdE1vZGUob3RoZXIubV9pc1N0cmljdE1vZGUpCisgICAgLCBtX2NvZGVUeXBlKG90
aGVyLm1fY29kZVR5cGUpCisgICAgLCBtX3NvdXJjZShvdGhlci5tX3NvdXJjZSkKKyAgICAsIG1f
c291cmNlT2Zmc2V0KG90aGVyLm1fc291cmNlT2Zmc2V0KQorICAgICwgbV9qdW1wVGFyZ2V0cyhv
dGhlci5tX2p1bXBUYXJnZXRzKQorICAgICwgbV9sb29wVGFyZ2V0cyhvdGhlci5tX2xvb3BUYXJn
ZXRzKQorICAgICwgbV9pZGVudGlmaWVycyhvdGhlci5tX2lkZW50aWZpZXJzKQorICAgICwgbV9j
b25zdGFudFJlZ2lzdGVycyhvdGhlci5tX2NvbnN0YW50UmVnaXN0ZXJzKQorICAgICwgbV9mdW5j
dGlvbkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNscykKKyAgICAsIG1fZnVuY3Rpb25FeHBycyhv
dGhlci5tX2Z1bmN0aW9uRXhwcnMpCisgICAgLCBtX3N5bWJvbFRhYmxlKHN5bVRhYikKKyAgICAs
IG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigwKQorICAgICwgbV9zcGVjdWxhdGl2ZUZhaWxD
b3VudGVyKDApCisgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQorICAgICwgbV9y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQoreworICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAo
KTsKKyAgICAKKyAgICBpZiAob3RoZXIubV9yYXJlRGF0YSkgeworICAgICAgICBjcmVhdGVSYXJl
RGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIAorICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2Vw
dGlvbkhhbmRsZXJzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyczsKKyAg
ICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9yZWdleHBz
OworICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycyA9IG90aGVyLm1fcmFyZURh
dGEtPm1fY29uc3RhbnRCdWZmZXJzOworICAgICAgICBtX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3
aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBU
YWJsZXM7CisgICAgICAgIG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcyA9
IG90aGVyLm1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAg
bV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBtX3JhcmVEYXRhLT5tX2V4cHJlc3Np
b25JbmZvID0gb3RoZXIubV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mbzsKKyAgICAgICAgbV9y
YXJlRGF0YS0+bV9saW5lSW5mbyA9IG90aGVyLm1fcmFyZURhdGEtPm1fbGluZUluZm87CisgICAg
fQorfQorCiBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQ
YXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNl
T2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25Q
dHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9i
amVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAs
IG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKQpAQCAtMTU5NSw2ICsx
NjQ2LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICAgICBm
b3IgKHVuc2lnbmVkIHByb2ZpbGVJbmRleCA9IDA7IHByb2ZpbGVJbmRleCA8IG51bWJlck9mVmFs
dWVQcm9maWxlcygpOyArK3Byb2ZpbGVJbmRleCkKICAgICAgICAgdmFsdWVQcm9maWxlKHByb2Zp
bGVJbmRleCktPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwogI2VuZGlmCisgICAgCisjaWYg
RU5BQkxFKEpJVCkgJiYgIUVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAgLy8gS2lsbCBvZmYg
c29tZSBieXRlY29kZS4gV2UgY2FuJ3QgZG8gaXQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQg
dG8gYWNjaWRlbnRhbGx5CisgICAgLy8gY2FsbCBpbnRvIG1hbGxvYyB3aGlsZSBpbiBzdG9wLXRo
ZS13b3JsZCBHQyBtb2RlLgorICAgIGlmIChoYXNJbnN0cnVjdGlvbnMoKSAmJiBtX3Nob3VsZERp
c2NhcmRCeXRlY29kZUxhdGVyKQorICAgICAgICB2aXNpdG9yLmFkZFVsdHJhV2Vha0ZpbmFsaXpl
cih0aGlzKTsKKyNlbmRpZgogfQogCiBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9y
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCkBAIC0xODIxLDcgKzE4Nzks
NyBAQCBpbmxpbmUgdm9pZCByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKFZlY3RvCiAgICAgICAgIHRh
cmdldFtpXSA9IHNvdXJjZVtpXTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmNvcHlEYXRhRnJvbShD
b2RlQmxvY2sqIGFsdGVybmF0aXZlKQordm9pZCBDb2RlQmxvY2s6OmNvcHlQb3N0UGFyc2VEYXRh
RnJvbShDb2RlQmxvY2sqIGFsdGVybmF0aXZlKQogewogICAgIGlmICghYWx0ZXJuYXRpdmUpCiAg
ICAgICAgIHJldHVybjsKQEAgLTE4MzMsOSArMTg5MSw5IEBAIHZvaWQgQ29kZUJsb2NrOjpjb3B5
RGF0YUZyb20oQ29kZUJsb2NrKiAKICAgICAgICAgcmVwbGFjZUV4aXN0aW5nRW50cmllcyhtX3Jh
cmVEYXRhLT5tX2NvbnN0YW50QnVmZmVycywgYWx0ZXJuYXRpdmUtPm1fcmFyZURhdGEtPm1fY29u
c3RhbnRCdWZmZXJzKTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmNvcHlEYXRhRnJvbUFsdGVybmF0
aXZlKCkKK3ZvaWQgQ29kZUJsb2NrOjpjb3B5UG9zdFBhcnNlRGF0YUZyb21BbHRlcm5hdGl2ZSgp
CiB7Ci0gICAgY29weURhdGFGcm9tKG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOworICAgIGNvcHlQb3N0
UGFyc2VEYXRhRnJvbShtX2FsdGVybmF0aXZlLmdldCgpKTsKIH0KIAogI2lmIEVOQUJMRShKSVQp
CkBAIC0xOTE3LDYgKzE5NzUsMTUgQEAgdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24o
SlNHbG9iYQogfQogI2VuZGlmCiAKK3ZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVsdHJhV2Vha0Rh
dGEoKQoreworI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpIHx8ICFFTkFCTEUoSklUKQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgQVNTRVJUKG1fc2hvdWxkRGlzY2Fy
ZEJ5dGVjb2RlTGF0ZXIpOworICAgIGRpc2NhcmRCeXRlY29kZSgpOworfQorCiAjaWYgRU5BQkxF
KFZBTFVFX1BST0ZJTEVSKQogYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDk5ODE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiUHJlZGljdGlvblRy
YWNrZXIuaCIKICNpbmNsdWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgi
CisjaW5jbHVkZSAiVWx0cmFXZWFrRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxl
LmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgpAQCAtMjM2LDEwICsyMzcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfQogI2Vu
ZGlmCiAKLSAgICBjbGFzcyBDb2RlQmxvY2sgeworICAgIGNsYXNzIENvZGVCbG9jayA6IHB1Ymxp
YyBVbHRyYVdlYWtGaW5hbGl6ZXIgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gQ29w
eVBhcnNlZEJsb2NrVGFnIHsgQ29weVBhcnNlZEJsb2NrIH07CiAgICAgcHJvdGVjdGVkOgorICAg
ICAgICBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyLCBTeW1i
b2xUYWJsZSopOworICAgICAgICAKICAgICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxT
b3VyY2VQcm92aWRlcj4sIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgU3ltYm9sVGFibGUqLCBib29s
IGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSk7CiAKICAg
ICAgICAgV3JpdGVCYXJyaWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKQEAgLTI2
NSw2ICsyNzAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgIH0KICNlbmRpZgorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5Qcm9kdWNlQ29w
eVdpdGhCeXRlY29kZSgpIHsgcmV0dXJuIGhhc0luc3RydWN0aW9ucygpOyB9CiAKICAgICAgICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwogCkBAIC00NDMsNyArNDUwLDE4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlv
bnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9ucy0+bV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAg
Y29uc3QgVmVjdG9yPEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9pbnN0cnVjdGlvbnMtPm1faW5zdHJ1Y3Rpb25zOyB9CiAgICAgICAgIHZvaWQgZGlzY2FyZEJ5
dGVjb2RlKCkgeyBtX2luc3RydWN0aW9ucy5jbGVhcigpOyB9Ci0KKyAgICAgICAgdm9pZCBkaXNj
YXJkQnl0ZWNvZGVMYXRlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fc2hvdWxkRGlzY2Fy
ZEJ5dGVjb2RlTGF0ZXIgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHZvaWQgaGFuZGxlQnl0
ZWNvZGVEaXNjYXJkaW5nT3Bwb3J0dW5pdHkoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
ISFhbHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIGRpc2NhcmRCeXRlY29kZSgpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRpc2NhcmRCeXRlY29kZUxhdGVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBib29sIHVzZXNPcGNv
ZGUoT3Bjb2RlSUQpOwogI2VuZGlmCkBAIC04MDgsOCArODI2LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBj
b3B5RGF0YUZyb20oQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSk7Ci0gICAgICAgIHZvaWQgY29weURh
dGFGcm9tQWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgdm9pZCBjb3B5UG9zdFBhcnNlRGF0YUZyb20o
Q29kZUJsb2NrKiBhbHRlcm5hdGl2ZSk7CisgICAgICAgIHZvaWQgY29weVBvc3RQYXJzZURhdGFG
cm9tQWx0ZXJuYXRpdmUoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29u
dHJvbGxpbmcgd2hlbiB0aWVyZWQgY29tcGlsYXRpb24ga2lja3MgaW4uIFRoaXMKICAgICAgICAg
Ly8gY29udHJvbHMgYm90aCB3aGVuIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGlzIGludm9rZWQg
YW5kIHdoZW4gT1NSCkBAIC05OTYsNiArMTAxNCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgaW50IG1fbnVtUGFyYW1ldGVyczsKICAgICAgICAgYm9vbCBtX2lzQ29uc3RydWN0b3I7CiAK
KyAgICAgICAgLy8gVGhpcyBpcyBwdWJsaWMgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd291bGQgaGF2
ZSBtYW55IGZyaWVuZHMuCisgICAgICAgIGJvb2wgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGVMYXRl
cjsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVWx0cmFX
ZWFrRGF0YSgpOworICAgICAgICAKICAgICBwcml2YXRlOgogI2lmICFkZWZpbmVkKE5ERUJVRykg
fHwgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAgICAgdm9pZCBkdW1wKEV4ZWNTdGF0ZSos
IGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBiZWdpbiwgVmVjdG9y
PEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImKSBjb25zdDsKQEAgLTEwMTQsNyArMTAzOCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQogICAgICAg
ICAgICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcgUmFyZURhdGEpOwogICAgICAgICB9
Ci0KKyAgICAgICAgCiAgICAgICAgIFdyaXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiBtX293
bmVyRXhlY3V0YWJsZTsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAKQEAg
LTExMjksNiArMTE1MywxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEdsb2JhbENv
ZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewogICAgIHByb3RlY3RlZDoKKyAgICAgICAgR2xv
YmFsQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgR2xvYmFsQ29kZUJsb2NrJiBvdGhlcikK
KyAgICAgICAgICAgIDogQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIsICZtX3Vuc2hh
cmVkU3ltYm9sVGFibGUpCisgICAgICAgICAgICAsIG1fdW5zaGFyZWRTeW1ib2xUYWJsZShvdGhl
ci5tX3Vuc2hhcmVkU3ltYm9sVGFibGUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgR2xvYmFsQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NS
ZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAgICAgICAgICAgIDogQ29k
ZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJv
dmlkZXIsIHNvdXJjZU9mZnNldCwgJm1fdW5zaGFyZWRTeW1ib2xUYWJsZSwgZmFsc2UsIGFsdGVy
bmF0aXZlKQogICAgICAgICB7CkBAIC0xMTQwLDYgKzExNzAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7
CiAgICAgcHVibGljOgorICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1Rh
ZywgUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCisgICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9j
ayhDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAgICAgICB7CisgICAgICAgIH0KKwogICAgICAg
ICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENv
ZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFs
dGVybmF0aXZlKQogICAgICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxl
LCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUp
CiAgICAgICAgIHsKQEAgLTExNTYsNiArMTE5MSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
IGNsYXNzIEV2YWxDb2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKICAgICBwdWJs
aWM6CisgICAgICAgIEV2YWxDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29kZUJs
b2NrJiBvdGhlcikKKyAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9j
aywgb3RoZXIpCisgICAgICAgICAgICAsIG1fYmFzZVNjb3BlRGVwdGgob3RoZXIubV9iYXNlU2Nv
cGVEZXB0aCkKKyAgICAgICAgICAgICwgbV92YXJpYWJsZXMob3RoZXIubV92YXJpYWJsZXMpCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgRXZhbENvZGVCbG9jayhFdmFs
RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgaW50IGJhc2VTY29w
ZURlcHRoLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCiAgICAgICAgICAgICA6
IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIEV2YWxDb2RlLCBnbG9iYWxPYmplY3Qs
IHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgICAgICwgbV9iYXNlU2Nv
cGVEZXB0aChiYXNlU2NvcGVEZXB0aCkKQEAgLTExODcsNiArMTIyOSwxNSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7
CiAgICAgcHVibGljOgorICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tU
YWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKENv
cHlQYXJzZWRCbG9jaywgb3RoZXIsIG90aGVyLnNoYXJlZFN5bWJvbFRhYmxlKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIFRoZSBmYWN0IHRoYXQgd2UgaGF2ZSB0byBkbyB0aGlzIGlzIHl1
Y2t5LCBidXQgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgdGhlCisgICAgICAgICAgICAvLyBjbGFz
cyBoaWVyYXJjaHkgaXNzdWVzIGRlc2NyaWJlZCBpbiB0aGUgY29tbWVudCBibG9jayBmb3IgdGhl
IG1haW4KKyAgICAgICAgICAgIC8vIGNvbnN0cnVjdG9yLCBiZWxvdy4KKyAgICAgICAgICAgIHNo
YXJlZFN5bWJvbFRhYmxlKCktPnJlZigpOworICAgICAgICB9CisKICAgICAgICAgLy8gUmF0aGVy
IHRoYW4gdXNpbmcgdGhlIHVzdWFsIFJlZkNvdW50ZWQ6OmNyZWF0ZSBpZGlvbSBmb3IgU2hhcmVk
U3ltYm9sVGFibGUgd2UganVzdCB1c2UgbmV3CiAgICAgICAgIC8vIGFzIHdlIG5lZWQgdG8gaW5p
dGlhbGlzZSB0aGUgQ29kZUJsb2NrIGJlZm9yZSB3ZSBjb3VsZCBpbml0aWFsaXNlIGFueSBSZWZQ
dHIgdG8gaG9sZCB0aGUgc2hhcmVkCiAgICAgICAgIC8vIHN5bWJvbCB0YWJsZSwgc28gd2UganVz
dCBwYXNzIGFzIGEgcmF3IHBvaW50ZXIgd2l0aCBhIHJlZiBjb3VudCBvZiAxLiAgV2UgdGhlbiBt
YW51YWxseSBkZXJlZgpAQCAtMTIwOSw2ICsxMjYwLDI3IEBAIG5hbWVzcGFjZSBKU0MgewogI2Vu
ZGlmCiAgICAgfTsKIAorICAgIC8vIFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIGNvcHkgYSBjb2Rl
IGJsb2NrIGFuZCB5b3UncmUgcGFyYW5vaWQgYWJvdXQgYSBHQworICAgIC8vIGhhcHBlbmluZy4K
KyAgICBjbGFzcyBCeXRlY29kZURlc3RydWN0aW9uQmxvY2tlciB7CisgICAgcHVibGljOgorICAg
ICAgICBCeXRlY29kZURlc3RydWN0aW9uQmxvY2tlcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAg
ICAgICAgICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICAgICAgLCBtX29sZFZh
bHVlT2ZTaG91bGREaXNjYXJkQnl0ZWNvZGVMYXRlcihjb2RlQmxvY2stPm1fc2hvdWxkRGlzY2Fy
ZEJ5dGVjb2RlTGF0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+bV9zaG91
bGREaXNjYXJkQnl0ZWNvZGVMYXRlciA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICB+Qnl0ZWNvZGVEZXN0cnVjdGlvbkJsb2NrZXIoKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb2RlQmxvY2stPm1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlTGF0ZXIgPSBtX29sZFZhbHVlT2ZT
aG91bGREaXNjYXJkQnl0ZWNvZGVMYXRlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2
YXRlOgorICAgICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgICAgICBib29sIG1fb2xk
VmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29kZUxhdGVyOworICAgIH07CisKICAgICBpbmxpbmUg
UmVnaXN0ZXImIEV4ZWNTdGF0ZTo6cihpbnQgaW5kZXgpCiAgICAgewogICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IHRoaXMtPmNvZGVCbG9jaygpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZUNhY2hlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlQ2FjaGUuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdCeXRlQ29kZUNhY2hlX2gKKyNkZWZpbmUgREZHQnl0ZUNvZGVDYWNoZV9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUg
IkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIENvZGVCbG9ja0tleSB7CitwdWJsaWM6CisgICAg
Q29kZUJsb2NrS2V5KCkKKyAgICAgICAgOiBtX2V4ZWN1dGFibGUoMCkKKyAgICAgICAgLCBtX2tp
bmQoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIENvZGVCbG9ja0tleShGdW5jdGlvbkV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAg
OiBtX2V4ZWN1dGFibGUoZXhlY3V0YWJsZSkKKyAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2RlQmxvY2tLZXkmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZSA9PSBvdGhlci5t
X2V4ZWN1dGFibGUKKyAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQ7CisgICAg
fQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVGhp
cyBpcyBsaWtlbHkgdG8gYmUgZ29vZCBlbm91Z2guCisgICAgICAgIHJldHVybiBXVEY6OlB0ckhh
c2g8RnVuY3Rpb25FeGVjdXRhYmxlKj46Omhhc2gobV9leGVjdXRhYmxlKSBeIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX2tpbmQpOworICAgIH0KKyAgICAKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGFibGU7IH0KKyAgICBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworcHJpdmF0
ZToKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIG1fZXhlY3V0YWJsZTsKKyAgICBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIG1fa2luZDsKK307CisKK3N0cnVjdCBDb2RlQmxvY2tLZXlIYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDb2RlQmxvY2tLZXkmIGtleSkgeyByZXR1cm4g
a2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENvZGVCbG9ja0tleSYg
YSwgY29uc3QgQ29kZUJsb2NrS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICAKKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBE
ZWZhdWx0SGFzaDxDb2RlQmxvY2tLZXk+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpDb2RlQmxv
Y2tLZXlIYXNoIEhhc2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgQnl0ZUNvZGVDYWNoZVZhbHVlIHsKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICBib29sIG93bmVkOworICAgIGJvb2wgb2xkVmFsdWVP
ZlNob3VsZERpc2NhcmRCeXRlY29kZUxhdGVyOworfTsKKwordGVtcGxhdGU8Ym9vbCAoKmZpbHRl
ckZ1bmN0aW9uKShDb2RlQmxvY2sqLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKT4KK2NsYXNzIEJ5
dGVDb2RlQ2FjaGUgeworcHVibGljOgorICAgIHR5cGVkZWYgSGFzaE1hcDxCeXRlQ29kZUNhY2hl
S2V5LCBCeXRlQ29kZUNhY2hlVmFsdWU+IE1hcDsKKyAgICAKKyAgICBCeXRlQ29kZUNhY2hlKCkg
eyB9CisgICAgCisgICAgfkJ5dGVDb2RlQ2FjaGUoKQorICAgIHsKKyAgICAgICAgTWFwOjppdGVy
YXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7CisgICAgICAgIE1hcDo6aXRlcmF0b3IgZW5kID0g
bV9tYXAuZW5kKCk7CisgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmICghaXRlci0+c2Vjb25kLmNvZGVC
bG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChpdGVyLT5z
ZWNvbmQub3duZWQpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgaXRlci0+c2Vjb25kLmNvZGVC
bG9jazsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGl0ZXItPnNlY29uZC5tX3Nob3VsZERpc2NhcmRCeXRlY29kZUxhdGVyID0gaXRlci0+c2Vj
b25kLm9sZFZhbHVlT2ZTaG91bGREaXNjYXJkQnl0ZWNvZGVMYXRlcjsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIGdldChjb25zdCBDb2RlQmxvY2tLZXkmIGtleSwgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlKQorICAgIHsKKyAgICAgICAgTWFwOjppdGVyYXRvciBpdGVyID0g
bV9tYXAuZmluZChrZXkpOworICAgICAgICBpZiAoaXRlciAhPSBtX21hcC5lbmQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQuY29kZUJsb2NrOworICAgICAgICAKKyAgICAgICAg
Qnl0ZUNvZGVDYWNoZVZhbHVlIHZhbHVlOworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3Qgc2Vl
IGlmIHRoZXJlIGlzIGFscmVhZHkgYSBwYXJzZWQgY29kZSBibG9jayB0aGF0IHN0aWxsIGhhcyBz
b21lCisgICAgICAgIC8vIGJ5dGVjb2RlIGluIGl0LgorICAgICAgICB2YWx1ZS5jb2RlQmxvY2sg
PSBrZXkuZXhlY3V0YWJsZSgpLT5jb2RlQmxvY2tXaXRoQnl0ZWNvZGVGb3Ioa2V5LmtpbmQoKSk7
CisgICAgICAgIGlmICh2YWx1ZS5jb2RlQmxvY2spIHsKKyAgICAgICAgICAgIHZhbHVlLm93bmVk
ID0gZmFsc2U7CisgICAgICAgICAgICB2YWx1ZS5vbGRWYWx1ZU9mU2hvdWxkRGlzY2FyZEJ5dGVj
b2RlTGF0ZXIgPSB2YWx1ZS5jb2RlQmxvY2subV9zaG91bGREaXNjYXJkQnl0ZWNvZGVMYXRlcjsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vcGUsIHNvIHRyeSB0byBwYXJzZSBv
bmUuCisgICAgICAgICAgICBKU09iamVjdCogZXhjZXB0aW9uOworICAgICAgICAgICAgdmFsdWUu
b3duZWQgPSB0cnVlOworICAgICAgICAgICAgdmFsdWUuY29kZUJsb2NrID0ga2V5LmV4ZWN1dGFi
bGUoKS0+cHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwgT3B0aW1pemluZ0NvbXBpbGF0aW9uLCBr
ZXkua2luZCgpLCBleGNlcHRpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBD
aGVjayBpZiB0aGVyZSBpcyBhbnkgcmVhc29uIHRvIHJlamVjdCB0aGlzIGZyb20gb3VyIGNhY2hl
LiBJZiBzbywgdGhlbgorICAgICAgICAvLyBwb2lzb24gaXQuCisgICAgICAgIGlmICghIXZhbHVl
LmNvZGVCbG9jayAmJiAhZmlsdGVyRnVuY3Rpb24odmFsdWUuY29kZUJsb2NrLCBrZXkua2luZCgp
KSkgeworICAgICAgICAgICAgaWYgKHZhbHVlLm93bmVkKQorICAgICAgICAgICAgICAgIGRlbGV0
ZSB2YWx1ZS5jb2RlQmxvY2s7CisgICAgICAgICAgICB2YWx1ZS5jb2RlQmxvY2sgPSAwOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBtX21hcC5hZGQoa2V5LCB2YWx1ZSk7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gdmFsdWUuY29kZUJsb2NrOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBIYXNoTWFwPEJ5dGVDb2RlQ2FjaGVLZXksIEJ5dGVDb2RlQ2FjaGVWYWx1ZT4gbV9tYXA7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR0J5dGVDb2RlQ2FjaGVfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk5ODE2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5j
bHVkZSAiREZHQnl0ZUNvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC04NDEs
NiArODQyLDkgQEAgcHJpdmF0ZToKICAgICBJZGVudGlmaWVyTWFwIG1faWRlbnRpZmllck1hcDsK
ICAgICAvLyBNYXBwaW5nIGJldHdlZW4gdmFsdWVzIGFuZCBjb25zdGFudCBudW1iZXJzLgogICAg
IEpTVmFsdWVNYXAgbV9qc1ZhbHVlTWFwOworICAgIAorICAgIC8vIENhY2hlIG9mIGNvZGUgYmxv
Y2tzIHRoYXQgd2UndmUgZ2VuZXJhdGVkIGJ5dGVjb2RlIGZvci4KKyAgICBCeXRlQ29kZUNhY2hl
PGNhbklubGluZUZ1bmN0aW9uRm9yPiBtX2NvZGVCbG9ja0NhY2hlOwogfTsKIAogI2RlZmluZSBO
RVhUX09QQ09ERShuYW1lKSBcCkBAIC05NTYsMTggKzk2MCwxMSBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAgCiAgICAgLy8gSWYgd2UgZ2V0IGhlcmUgdGhl
biBpdCBsb29rcyBsaWtlIHdlIHNob3VsZCBkZWZpbml0ZWx5IGlubGluZSB0aGlzIGNvZGUuIFBy
b2NlZWQKICAgICAvLyB3aXRoIHBhcnNpbmcgdGhlIGNvZGUgdG8gZ2V0IGJ5dGVjb2RlLCBzbyB0
aGF0IHdlIGNhbiB0aGVuIHBhcnNlIHRoZSBieXRlY29kZS4KLSAgICAvLyBOb3RlIHRoYXQgdGhl
IGNvZGUgYmxvY2sgd2UgZ2V0IGhlcmUgaXMgaW50ZW5kZWQgdG8gZGllIGFmdGVyIGhhbmRsZUlu
bGluaW5nKCkKLSAgICAvLyByZXR1cm5zLgotICAgIEpTT2JqZWN0KiBleGNlcHRpb247Ci0gICAg
T3duUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZXhlY3V0YWJsZS0+cHJvZHVjZUNvZGVCbG9j
a0ZvcihleHBlY3RlZEZ1bmN0aW9uLT5zY29wZSgpLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24sIGtp
bmQsIGV4Y2VwdGlvbik7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9ja0Nh
Y2hlLmdldChDb2RlQmxvY2tLZXkoZXhlY3V0YWJsZSwga2luZCksIGV4cGVjdGVkRnVuY3Rpb24t
PnNjb3BlKCkpOwogICAgIGlmICghY29kZUJsb2NrKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgQVNTRVJUKCFleGNlcHRpb24pOwogICAgIAotICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhl
IGJ5dGVjb2RlLCBjaGVjayBpZiB3ZSByZWFsbHkgY2FuIGlubGluZSBpdC4gVGhpcyBtYXkgZmFp
bAotICAgIC8vIGlmIHRoZSBjb2RlIGJsb2NrIGNvbnRhaW5zIHNvbWUgbmFzdHkgb3Bjb2Rlcy4K
LSAgICBpZiAoIWNhbklubGluZUZ1bmN0aW9uRm9yKGNvZGVCbG9jay5nZXQoKSwga2luZCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoY2FuSW5saW5lRnVuY3Rpb25Gb3IoY29k
ZUJsb2NrLmdldCgpLCBraW5kKSk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAg
ICAgcHJpbnRmKCJJbmxpbmluZyBleGVjdXRhYmxlICVwLlxuIiwgZXhlY3V0YWJsZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gOTk4MTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMwLDYg
KzUzMCwxMSBAQCB2b2lkIEhlYXA6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpCiAgICAgbV9zbG90
VmlzaXRvci5oYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKIH0KIAordm9pZCBIZWFwOjpmaW5hbGl6
ZVVsdHJhV2Vha0RhdGEoKQoreworICAgIG1fc2xvdFZpc2l0b3IuZmluYWxpemVVbHRyYVdlYWtE
YXRhKCk7Cit9CisKIGlubGluZSBSZWdpc3RlckZpbGUmIEhlYXA6OnJlZ2lzdGVyRmlsZSgpCiB7
CiAgICAgcmV0dXJuIG1fZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpOwpA
QCAtNjk0LDYgKzY5OSwxMiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAg
ICAgICAgfSB3aGlsZSAobGFzdE9wYXF1ZVJvb3RDb3VudCAhPSB2aXNpdG9yLm9wYXF1ZVJvb3RD
b3VudCgpKTsKICAgICB9CiAgICAgR0NDT1VOVEVSKFZpc2l0ZWRWYWx1ZUNvdW50LCB2aXNpdG9y
LnZpc2l0Q291bnQoKSk7CisKKyAgICB7CisgICAgICAgIEdDUEhBU0UoSGFydmVzdFdlYWtSZWZl
cmVuY2VzKTsKKyAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2VzKCk7CisgICAgfQorCiAgICAg
dmlzaXRvci5yZXNldCgpOwogICAgIG1fc2hhcmVkRGF0YS5yZXNldCgpOwogCkBAIC03ODEsMTQg
Kzc5MiwxOCBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAg
fQogCiAgICAgbWFya1Jvb3RzKGZ1bGxHQyk7Ci0KKyAgICAKICAgICB7Ci0gICAgICAgIEdDUEhB
U0UoSGFydmVzdFdlYWtSZWZlcmVuY2VzKTsKLSAgICAgICAgaGFydmVzdFdlYWtSZWZlcmVuY2Vz
KCk7CisgICAgICAgIEdDUEhBU0UoRmluYWxpemVVbHRyYVdlYWtEYXRhKTsKKyAgICAgICAgZmlu
YWxpemVVbHRyYVdlYWtEYXRhKCk7CisgICAgfQorICAgICAgICAKKyAgICB7CisgICAgICAgIEdD
UEhBU0UoRmluYWxpemVXZWFrSGFuZGxlcyk7CiAgICAgICAgIG1faGFuZGxlSGVhcC5maW5hbGl6
ZVdlYWtIYW5kbGVzKCk7CiAgICAgICAgIG1fZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLmZpbmFs
aXplU21hbGxTdHJpbmdzKCk7CiAgICAgfQotCisgICAgCiAgICAgSkFWQVNDUklQVENPUkVfR0Nf
TUFSS0VEKCk7CiAKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZp
c2lvbiA5OTgxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU1LDYgKzE1NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IG1hcmtQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYpOwogICAgICAgICB2b2lkIG1h
cmtUZW1wU29ydFZlY3RvcnMoSGVhcFJvb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgaGFydmVz
dFdlYWtSZWZlcmVuY2VzKCk7CisgICAgICAgIHZvaWQgZmluYWxpemVVbHRyYVdlYWtEYXRhKCk7
CiAgICAgICAgIAogICAgICAgICBlbnVtIFN3ZWVwVG9nZ2xlIHsgRG9Ob3RTd2VlcCwgRG9Td2Vl
cCB9OwogICAgICAgICB2b2lkIGNvbGxlY3QoU3dlZXBUb2dnbGUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTGlzdGFibGVIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTGlzdGFibGVIYW5kbGVyLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MaXN0YWJsZUhhbmRsZXIuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLwor
CisjaWZuZGVmIExpc3RhYmxlSGFuZGxlcl9oCisjZGVmaW5lIExpc3RhYmxlSGFuZGxlcl9oCisK
KyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIE1hcmtTdGFjazsKK2NsYXNzIE1hcmtTdGFja1Ro
cmVhZFNoYXJlZERhdGE7CitjbGFzcyBTbG90VmlzaXRvcjsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2NsYXNzIExpc3RhYmxlSGFuZGxlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGlz
dGFibGVIYW5kbGVyKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBMaXN0YWJsZUhhbmRsZXIoKQor
ICAgICAgICA6IG1fbmV4dEFuZEZsYWcoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZpcnR1
YWwgfkxpc3RhYmxlSGFuZGxlcigpIHsgfQorCitwcml2YXRlOgorICAgIC8vIEFsbG93IHRoZXNl
IGNsYXNzZXMgdG8gdXNlIExpc3RhYmxlSGFuZGxlcjo6TGlzdC4KKyAgICBmcmllbmQgY2xhc3Mg
TWFya1N0YWNrOworICAgIGZyaWVuZCBjbGFzcyBNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOwor
ICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKKyAgICAKKyAgICBjbGFzcyBMaXN0IHsKKyAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGlzdCk7CisgICAgcHVibGljOgorICAgICAgICBM
aXN0KCkKKyAgICAgICAgICAgIDogbV9maXJzdCgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZvaWQgYWRkTm90VGhyZWFkU2FmZShUKiBoYW5kbGVyKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoaGFuZGxlci0+bV9uZXh0QW5kRmxhZyAmIDEpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaGFuZGxlci0+bV9uZXh0QW5kRmxhZyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX2ZpcnN0KSB8IDE7CisgICAgICAgICAgICBtX2Zp
cnN0ID0gaGFuZGxlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhZGRUaHJl
YWRTYWZlKFQqIGhhbmRsZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5PVEU6IElmIHdl
IGV2ZXIgd2FudCB0aGlzIHRvIGJlIGZhc3Rlciwgd2UgY291bGQgdHVybiBpdCBpbnRvCisgICAg
ICAgICAgICAvLyBhIENBUyBsb29wLCBzaW5jZSB0aGlzIGlzIGEgc2luZ2x5LWxpbmtlZC1saXN0
IHRoYXQsIGluIHBhcmFsbGVsCisgICAgICAgICAgICAvLyB0cmFjaW5nIG1vZGUsIGNhbiBvbmx5
IGdyb3cuIEkuZS4gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dAorICAgICAgICAgICAgLy8g
YW55IEFCQSBwcm9ibGVtcy4KKyAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgICAgICAgICAgYWRkTm90VGhyZWFkU2FmZShoYW5kbGVyKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgYm9vbCBoYXNOZXh0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICEhbV9maXJzdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVCogcmVtb3ZlTmV4
dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIFQqIGN1cnJlbnQgPSBtX2ZpcnN0OworICAgICAg
ICAgICAgVCogbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KGN1cnJlbnQtPm1fbmV4dEFuZEZs
YWcgJiB+MSk7CisgICAgICAgICAgICBjdXJyZW50LT5tX25leHRBbmRGbGFnID0gMDsKKyAgICAg
ICAgICAgIG1fZmlyc3QgPSBuZXh0OworICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgTXV0ZXggbV9sb2NrOworICAg
ICAgICBUKiBtX2ZpcnN0OworICAgIH07CisgICAgCisgICAgdWludHB0cl90IG1fbmV4dEFuZEZs
YWc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIExpc3RhYmxlSGFuZGxl
cl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHJldmlz
aW9uIDk5ODE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM2LDcgKzIzNiw2IEBAIE1hcmtTdGFja1RocmVhZFNoYXJlZERh
dGE6Ok1hcmtTdGFja1RocmUKICAgICAsIG1fc2hhcmVkTWFya1N0YWNrKG1fc2VnbWVudEFsbG9j
YXRvcikKICAgICAsIG1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMoMCkKICAgICAsIG1f
cGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdChmYWxzZSkKLSAgICAsIG1fZmlyc3RXZWFrUmVmZXJl
bmNlSGFydmVzdGVyKDApCiB7CiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQogICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBIZXVyaXN0aWNzOjpudW1iZXJPZkdDTWFya2VyczsgKytpKSB7CkBA
IC00NTAsMTMgKzQ0OSwxNCBAQCB2b2lkIE1hcmtTdGFjazo6bWVyZ2VPcGFxdWVSb290cygpCiAK
IHZvaWQgU2xvdFZpc2l0b3I6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcygpCiB7Ci0gICAgd2hpbGUg
KG1fc2hhcmVkLm1fZmlyc3RXZWFrUmVmZXJlbmNlSGFydmVzdGVyKSB7Ci0gICAgICAgIFdlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXIqIGN1cnJlbnQgPSBtX3NoYXJlZC5tX2ZpcnN0V2Vha1JlZmVyZW5j
ZUhhcnZlc3RlcjsKLSAgICAgICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogbmV4dCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcio+KGN1cnJlbnQtPm1fbmV4dEFuZEZs
YWcgJiB+MSk7Ci0gICAgICAgIGN1cnJlbnQtPm1fbmV4dEFuZEZsYWcgPSAwOwotICAgICAgICBt
X3NoYXJlZC5tX2ZpcnN0V2Vha1JlZmVyZW5jZUhhcnZlc3RlciA9IG5leHQ7Ci0gICAgICAgIGN1
cnJlbnQtPnZpc2l0V2Vha1JlZmVyZW5jZXMoKnRoaXMpOwotICAgIH0KKyAgICB3aGlsZSAobV9z
aGFyZWQubV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5oYXNOZXh0KCkpCisgICAgICAgIG1fc2hh
cmVkLm1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMucmVtb3ZlTmV4dCgpLT52aXNpdFdlYWtSZWZl
cmVuY2VzKCp0aGlzKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6ZmluYWxpemVVbHRyYVdlYWtE
YXRhKCkKK3sKKyAgICB3aGlsZSAobV9zaGFyZWQubV91bHRyYVdlYWtGaW5hbGl6ZXJzLmhhc05l
eHQoKSkKKyAgICAgICAgbV9zaGFyZWQubV91bHRyYVdlYWtGaW5hbGl6ZXJzLnJlbW92ZU5leHQo
KS0+ZmluYWxpemVVbHRyYVdlYWtEYXRhKCk7CiB9CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElP
TikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCShyZXZpc2lvbiA5
OTgxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSGV1cmlzdGljcy5oIgogI2luY2x1
ZGUgIkpTVmFsdWUuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5oIgorI2luY2x1ZGUgIlVsdHJhV2Vh
a0ZpbmFsaXplci5oIgogI2luY2x1ZGUgIlZUYWJsZVNwZWN0cnVtLmgiCiAjaW5jbHVkZSAiV2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0xOTQs
OCArMTk1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE11dGV4IG1fb3BhcXVlUm9vdHNM
b2NrOwogICAgICAgICBIYXNoU2V0PHZvaWQqPiBtX29wYXF1ZVJvb3RzOwogCi0gICAgICAgIE11
dGV4IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlckxvY2s7Ci0gICAgICAgIFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIqIG1fZmlyc3RXZWFrUmVmZXJlbmNlSGFydmVzdGVyOworICAgICAgICBMaXN0YWJs
ZUhhbmRsZXI8V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcj46Okxpc3QgbV93ZWFrUmVmZXJlbmNlSGFy
dmVzdGVyczsKKyAgICAgICAgTGlzdGFibGVIYW5kbGVyPFVsdHJhV2Vha0ZpbmFsaXplcj46Okxp
c3QgbV91bHRyYVdlYWtGaW5hbGl6ZXJzOwogICAgIH07CiAKICAgICBjbGFzcyBNYXJrU3RhY2sg
ewpAQCAtMjI5LDExICsyMzAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBh
ZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIqIHdlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tl
cihtX3NoYXJlZC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJMb2NrKTsKLSAgICAgICAgICAgIGlm
ICh3ZWFrUmVmZXJlbmNlSGFydmVzdGVyLT5tX25leHRBbmRGbGFnICYgMSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyLT5tX25leHRB
bmRGbGFnID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2hhcmVkLm1fZmlyc3RXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKSB8IDE7Ci0gICAgICAgICAgICBtX3NoYXJlZC5tX2ZpcnN0V2Vh
a1JlZmVyZW5jZUhhcnZlc3RlciA9IHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI7CisgICAgICAgICAg
ICBtX3NoYXJlZC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUod2Vha1Jl
ZmVyZW5jZUhhcnZlc3Rlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRk
VWx0cmFXZWFrRmluYWxpemVyKFVsdHJhV2Vha0ZpbmFsaXplciogdWx0cmFXZWFrRmluYWxpemVy
KQorICAgICAgICB7CisgICAgICAgICAgICBtX3NoYXJlZC5tX3VsdHJhV2Vha0ZpbmFsaXplcnMu
YWRkVGhyZWFkU2FmZSh1bHRyYVdlYWtGaW5hbGl6ZXIpOwogICAgICAgICB9CiAKICAgICBwcm90
ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJl
dmlzaW9uIDk5ODE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmFp
bkZyb21TaGFyZWQoU2hhcmVkRHJhaW5Nb2RlKTsKIAogICAgIHZvaWQgaGFydmVzdFdlYWtSZWZl
cmVuY2VzKCk7CisgICAgdm9pZCBmaW5hbGl6ZVVsdHJhV2Vha0RhdGEoKTsKICAgICAgICAgCiBw
cml2YXRlOgogICAgIHZvaWQgZG9uYXRlU2xvdygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvVWx0cmFXZWFrRmluYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvVWx0cmFXZWFrRmluYWxpemVyLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9VbHRyYVdlYWtGaW5hbGl6ZXIuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIFVsdHJhV2Vha0ZpbmFsaXplcl9oCisjZGVmaW5lIFVsdHJhV2Vha0Zp
bmFsaXplcl9oCisKKyNpbmNsdWRlICJMaXN0YWJsZUhhbmRsZXIuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vIEFuIHVsdHJhLXdlYWsgZmluYWxpemVyIGlzIHVzZWZ1bCBmb3IgY2FjaGVzIHRo
YXQgeW91IHdvdWxkIGxpa2UgdG8KKy8vIGRlc3Ryb3kgb24gZWFjaCBHQy4gVGhpcyBpcyBjdXJy
ZW50bHkgdXNlZCBmb3IgdGhlIGJ5dGVjb2RlIHN0cmVhbQorLy8gYXNzb2NpYXRlZCB3aXRoIGVh
Y2ggQ29kZUJsb2NrLgorCitjbGFzcyBVbHRyYVdlYWtGaW5hbGl6ZXIgOiBwdWJsaWMgTGlzdGFi
bGVIYW5kbGVyPFVsdHJhV2Vha0ZpbmFsaXplcj4geworcHVibGljOiAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgZmluYWxpemVVbHRyYVdlYWtEYXRhKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB+VWx0cmFXZWFrRmluYWxpemVyKCkgeyB9Cit9OworCit9CisKKyNlbmRpZiAvLyBVbHRy
YVdlYWtGaW5hbGl6ZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1Jl
ZmVyZW5jZUhhcnZlc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaAkocmV2aXNpb24gOTk4MTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5kZWYgV2Vha1JlZmVyZW5jZUhhcnZlc3Rlcl9oCiAj
ZGVmaW5lIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJfaAogCi0jaW5jbHVkZSA8c3RkaW50Lmg+Cisj
aW5jbHVkZSAiTGlzdGFibGVIYW5kbGVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0yOCwy
NCArMjgsMTYgQEAgY2xhc3MgTWFya1N0YWNrOwogY2xhc3MgTWFya1N0YWNrU2hhcmVkRGF0YTsK
IGNsYXNzIFNsb3RWaXNpdG9yOwogCi1jbGFzcyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKK2Ns
YXNzIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgOiBwdWJsaWMgTGlzdGFibGVIYW5kbGVyPFdlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXI+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRXZWFr
UmVmZXJlbmNlcyhTbG90VmlzaXRvciYpID0gMDsKICAgICAKIHByb3RlY3RlZDoKICAgICBXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKCkKLSAgICAgICAgOiBtX25leHRBbmRGbGFnKDApCiAgICAgewog
ICAgIH0KICAgICAKICAgICB2aXJ0dWFsIH5XZWFrUmVmZXJlbmNlSGFydmVzdGVyKCkgeyB9Ci0K
LXByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIE1hcmtTdGFjazsKLSAgICBmcmllbmQgY2xhc3Mg
TWFya1N0YWNrU2hhcmVkRGF0YTsKLSAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7Ci0gICAg
Ci0gICAgdWludHB0cl90IG1fbmV4dEFuZEZsYWc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShy
ZXZpc2lvbiA5OTgxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsMzAgKzE1NiwzOCBAQCBKU09iamVjdCogRXZh
bEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IDA7
CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAg
ICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKTsKLSAgICBpZiAoIWxleGljYWxHbG9iYWxPYmplY3QtPmV2YWxFbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUV2YWxFcnJvcihleGVjLCAi
RXZhbCBpcyBkaXNhYmxlZCIpKTsKLSAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gcGFy
c2U8RXZhbE5vZGU+KGdsb2JhbERhdGEsIGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNlLCAw
LCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBFdmFsTm9k
ZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1D
b2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBleGVjLCAmZXhjZXB0aW9uKTsK
LSAgICBpZiAoIWV2YWxOb2RlKSB7Ci0gICAgICAgIEFTU0VSVChleGNlcHRpb24pOwotICAgICAg
ICByZXR1cm4gZXhjZXB0aW9uOwotICAgIH0KLSAgICByZWNvcmRQYXJzZShldmFsTm9kZS0+ZmVh
dHVyZXMoKSwgZXZhbE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGV2YWxOb2RlLT5saW5l
Tm8oKSwgZXZhbE5vZGUtPmxhc3RMaW5lKCkpOwotCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7Ci0KLSAgICBPd25Q
dHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fZXZhbENvZGVCbG9jay5yZWxlYXNl
KCk7Ci0gICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0g
IXByZXZpb3VzQ29kZUJsb2NrKTsKLSAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcg
RXZhbENvZGVCbG9jayh0aGlzLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNj
b3BlQ2hhaW5Ob2RlLT5sb2NhbERlcHRoKCksIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkp
OwotICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBC
eXRlY29kZUdlbmVyYXRvcihldmFsTm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fZXZhbENv
ZGVCbG9jay0+c3ltYm9sVGFibGUoKSwgbV9ldmFsQ29kZUJsb2NrLmdldCgpLCAhIW1fZXZhbENv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29t
cGlsYXRpb24pKSk7Ci0gICAgaWYgKChleGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkp
KSB7Ci0gICAgICAgIG1fZXZhbENvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RXZhbENv
ZGVCbG9jaz4obV9ldmFsQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgCisg
ICAgaWYgKCEhbV9ldmFsQ29kZUJsb2NrICYmIG1fZXZhbENvZGVCbG9jay0+Y2FuUHJvZHVjZUNv
cHlXaXRoQnl0ZWNvZGUoKSkgeworICAgICAgICBCeXRlY29kZURlc3RydWN0aW9uQmxvY2tlciBi
bG9ja2VyKG1fZXZhbENvZGVCbG9jay5nZXQoKSk7CisgICAgICAgIE93blB0cjxFdmFsQ29kZUJs
b2NrPiBuZXdDb2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgRXZhbENvZGVCbG9jayhDb2RlQmxvY2s6
OkNvcHlQYXJzZWRCbG9jaywgKm1fZXZhbENvZGVCbG9jaykpOworICAgICAgICBuZXdDb2RlQmxv
Y2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihtX2V2YWxD
b2RlQmxvY2sucmVsZWFzZSgpKSk7CisgICAgICAgIG1fZXZhbENvZGVCbG9jayA9IG5ld0NvZGVC
bG9jay5yZWxlYXNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFsZXhpY2FsR2xvYmFs
T2JqZWN0LT5ldmFsRW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgY3JlYXRlRXZhbEVycm9yKGV4ZWMsICJFdmFsIGlzIGRpc2FibGVkIikpOworICAgICAgICBS
ZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gcGFyc2U8RXZhbE5vZGU+KGdsb2JhbERhdGEsIGxl
eGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNlLCAwLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VT
dHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBFdmFsTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNl
RnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dyYW1Db2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5k
ZWJ1Z2dlcigpLCBleGVjLCAmZXhjZXB0aW9uKTsKKyAgICAgICAgaWYgKCFldmFsTm9kZSkgewor
ICAgICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gZXhjZXB0
aW9uOworICAgICAgICB9CisgICAgICAgIHJlY29yZFBhcnNlKGV2YWxOb2RlLT5mZWF0dXJlcygp
LCBldmFsTm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgZXZhbE5vZGUtPmxpbmVObygpLCBl
dmFsTm9kZS0+bGFzdExpbmUoKSk7CisgICAgICAgIAorICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAg
ICAgCisgICAgICAgIE93blB0cjxDb2RlQmxvY2s+IHByZXZpb3VzQ29kZUJsb2NrID0gbV9ldmFs
Q29kZUJsb2NrLnJlbGVhc2UoKTsKKyAgICAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6
OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29kZUJsb2NrKTsKKyAgICAgICAgbV9ldmFs
Q29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2JqZWN0
LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9kZS0+bG9jYWxEZXB0aCgpLCBwcmV2
aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICAgICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJh
dG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxOb2RlLmdl
dCgpLCBzY29wZUNoYWluTm9kZSwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLCBtX2V2
YWxDb2RlQmxvY2suZ2V0KCksICEhbV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpID8gT3B0
aW1pemluZ0NvbXBpbGF0aW9uIDogRmlyc3RDb21waWxhdGlvbikpKTsKKyAgICAgICAgaWYgKChl
eGNlcHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7CisgICAgICAgICAgICBtX2V2YWxD
b2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEV2YWxDb2RlQmxvY2s+KG1fZXZhbENvZGVC
bG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgICAgICAgICAgZXZhbE5vZGUtPmRlc3Ry
b3lEYXRhKCk7CisgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgICAgICB9CisgICAg
ICAgIAogICAgICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEoKTsKLSAgICAgICAgcmV0dXJuIGV4
Y2VwdGlvbjsKKyAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5jb3B5UG9zdFBhcnNlRGF0YUZyb21B
bHRlcm5hdGl2ZSgpOwogICAgIH0KIAotICAgIGV2YWxOb2RlLT5kZXN0cm95RGF0YSgpOwotICAg
IG1fZXZhbENvZGVCbG9jay0+Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsKLQogI2lmIEVOQUJM
RShKSVQpCiAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkgewogICAgICAg
ICBib29sIGRmZ0NvbXBpbGVkID0gZmFsc2U7CkBAIC0xOTgsNyArMjA2LDcgQEAgSlNPYmplY3Qq
IEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYQogICAgICAgICB9CiAjaWYgIUVOQUJMRShP
UENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2Vu
ZXJhdGVkQ29kZSgpKQotICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5kaXNjYXJkQnl0ZWNv
ZGUoKTsKKyAgICAgICAgICAgIG1fZXZhbENvZGVCbG9jay0+aGFuZGxlQnl0ZWNvZGVEaXNjYXJk
aW5nT3Bwb3J0dW5pdHkoKTsKICNlbmRpZgogICAgICAgICBtX2V2YWxDb2RlQmxvY2stPnNldEpJ
VENvZGUobV9qaXRDb2RlRm9yQ2FsbCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAgIH0K
QEAgLTI5MCwyOCArMjk4LDM2IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGls
ZUludGUKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIFJlZlB0
cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZTxQcm9ncmFtTm9kZT4oZ2xvYmFsRGF0
YSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIDAsIGlzU3RyaWN0TW9kZSgpID8gSlNQ
YXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIFByb2dyYW1Ob2RlOjppc0Z1bmN0aW9uTm9kZSA/
IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGxleGljYWxHbG9iYWxP
YmplY3QtPmRlYnVnZ2VyKCksIGV4ZWMsICZleGNlcHRpb24pOwotICAgIGlmICghcHJvZ3JhbU5v
ZGUpIHsKLSAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBleGNlcHRp
b247Ci0gICAgfQotICAgIHJlY29yZFBhcnNlKHByb2dyYW1Ob2RlLT5mZWF0dXJlcygpLCBwcm9n
cmFtTm9kZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgcHJvZ3JhbU5vZGUtPmxpbmVObygpLCBw
cm9ncmFtTm9kZS0+bGFzdExpbmUoKSk7CisgICAgCisgICAgaWYgKCEhbV9wcm9ncmFtQ29kZUJs
b2NrICYmIG1fcHJvZ3JhbUNvZGVCbG9jay0+Y2FuUHJvZHVjZUNvcHlXaXRoQnl0ZWNvZGUoKSkg
eworICAgICAgICBCeXRlY29kZURlc3RydWN0aW9uQmxvY2tlciBibG9ja2VyKG1fcHJvZ3JhbUNv
ZGVCbG9jay5nZXQoKSk7CisgICAgICAgIE93blB0cjxQcm9ncmFtQ29kZUJsb2NrPiBuZXdDb2Rl
QmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayhDb2RlQmxvY2s6OkNvcHlQYXJz
ZWRCbG9jaywgKm1fcHJvZ3JhbUNvZGVCbG9jaykpOworICAgICAgICBuZXdDb2RlQmxvY2stPnNl
dEFsdGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihtX3Byb2dyYW1Db2Rl
QmxvY2sucmVsZWFzZSgpKSk7CisgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9IG5ld0NvZGVC
bG9jay5yZWxlYXNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVmUHRyPFByb2dyYW1Ob2Rl
PiBwcm9ncmFtTm9kZSA9IHBhcnNlPFByb2dyYW1Ob2RlPihnbG9iYWxEYXRhLCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBtX3NvdXJjZSwgMCwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDog
SlNQYXJzZU5vcm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0
aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgbGV4aWNhbEdsb2JhbE9iamVjdC0+ZGVidWdn
ZXIoKSwgZXhlYywgJmV4Y2VwdGlvbik7CisgICAgICAgIGlmICghcHJvZ3JhbU5vZGUpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlv
bjsKKyAgICAgICAgfQorICAgICAgICByZWNvcmRQYXJzZShwcm9ncmFtTm9kZS0+ZmVhdHVyZXMo
KSwgcHJvZ3JhbU5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIHByb2dyYW1Ob2RlLT5saW5l
Tm8oKSwgcHJvZ3JhbU5vZGUtPmxhc3RMaW5lKCkpOwogCi0gICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2Jq
ZWN0LmdldCgpOwogICAgIAotICAgIE93blB0cjxDb2RlQmxvY2s+IHByZXZpb3VzQ29kZUJsb2Nr
ID0gbV9wcm9ncmFtQ29kZUJsb2NrLnJlbGVhc2UoKTsKLSAgICBBU1NFUlQoKGppdFR5cGUgPT0g
SklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOwotICAgIG1f
cHJvZ3JhbUNvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBQcm9ncmFtQ29kZUJsb2NrKHRoaXMsIEds
b2JhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgcHJldmlvdXNDb2Rl
QmxvY2sucmVsZWFzZSgpKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0
b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKHByb2dyYW1Ob2RlLmdldCgpLCBzY29w
ZUNoYWluTm9kZSwgJmdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9wcm9ncmFtQ29kZUJs
b2NrLmdldCgpLCAhIW1fcHJvZ3JhbUNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSA/IE9wdGltaXpp
bmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24pKSk7Ci0gICAgaWYgKChleGNlcHRpb24g
PSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7Ci0gICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jayA9
IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJsb2Nr
LT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAgIE93blB0cjxDb2RlQmxvY2s+IHByZXZp
b3VzQ29kZUJsb2NrID0gbV9wcm9ncmFtQ29kZUJsb2NrLnJlbGVhc2UoKTsKKyAgICAgICAgQVNT
RVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIXByZXZpb3VzQ29k
ZUJsb2NrKTsKKyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IFByb2dy
YW1Db2RlQmxvY2sodGhpcywgR2xvYmFsQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92
aWRlcigpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAgICAgICAgT3duUHRyPEJ5
dGVjb2RlR2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9y
KHByb2dyYW1Ob2RlLmdldCgpLCBzY29wZUNoYWluTm9kZSwgJmdsb2JhbE9iamVjdC0+c3ltYm9s
VGFibGUoKSwgbV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpLCAhIW1fcHJvZ3JhbUNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24p
KSk7CisgICAgICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewor
ICAgICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9n
cmFtQ29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsK
KyAgICAgICAgICAgIHByb2dyYW1Ob2RlLT5kZXN0cm95RGF0YSgpOworICAgICAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbjsKKyAgICAgICAgfQorCiAgICAgICAgIHByb2dyYW1Ob2RlLT5kZXN0cm95
RGF0YSgpOwotICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgICAgICBtX3Byb2dyYW1Db2Rl
QmxvY2stPmNvcHlQb3N0UGFyc2VEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAgICAgfQogCi0gICAg
cHJvZ3JhbU5vZGUtPmRlc3Ryb3lEYXRhKCk7Ci0gICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5jb3B5
RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwotCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+
Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBm
YWxzZTsKQEAgLTMyOSw3ICszNDUsNyBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNv
bXBpbGVJbnRlCiAgICAgICAgIH0KICNpZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAg
ICAgaWYgKCFCeXRlY29kZUdlbmVyYXRvcjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCi0gICAgICAg
ICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmRpc2NhcmRCeXRlY29kZSgpOworICAgICAgICAgICAg
bV9wcm9ncmFtQ29kZUJsb2NrLT5oYW5kbGVCeXRlY29kZURpc2NhcmRpbmdPcHBvcnR1bml0eSgp
OwogI2VuZGlmCiAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENv
ZGVGb3JDYWxsLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAgICAgfQpAQCAtMzg4LDcgKzQw
NCw3IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZVZpcnR1YWwKICAgICBCYXNl
OjpjbGVhckNvZGVWaXJ0dWFsKCk7CiB9CiAKLUNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxl
OjpiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitGdW5j
dGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0ZvcihD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgQ29kZUJsb2NrKiByZXN1bHQ7CiAg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCkBAIC00MzAsNiArNDQ2LDExIEBAIEpTT2JqZWN0
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHQKIAogUGFzc093blB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4gRnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgQ29tcGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhj
ZXB0aW9uKQogeworICAgIGlmICghIWNvZGVCbG9ja0ZvcihraW5kKSAmJiBjb2RlQmxvY2tGb3Io
a2luZCktPmNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkpIHsKKyAgICAgICAgQnl0ZWNvZGVE
ZXN0cnVjdGlvbkJsb2NrZXIgYmxvY2tlcihjb2RlQmxvY2tGb3Ioa2luZCkuZ2V0KCkpOworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKENvZGVCbG9jazo6Q29w
eVBhcnNlZEJsb2NrLCAqY29kZUJsb2NrRm9yKGtpbmQpKSk7CisgICAgfQorICAgIAogICAgIGV4
Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5v
ZGUtPmdsb2JhbERhdGE7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3Bl
Q2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CkBAIC00NTMsNyArNDc0LDcgQEAgUGFzc093
blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25FeAogICAgIGlmIChleGNlcHRpb24pCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmVzdWx0LT5jb3B5RGF0YUZyb20oY29kZUJs
b2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkuZ2V0KCkpOworICAgIHJlc3VsdC0+Y29weVBvc3RQ
YXJzZURhdGFGcm9tKGNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpLmdldCgpKTsKICAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApAQCAtNDk4LDcgKzUxOSw3IEBAIEpTT2Jq
ZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICAgICAgfQogI2lmICFFTkFC
TEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1w
c0dlbmVyYXRlZENvZGUoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+ZGlzY2Fy
ZEJ5dGVjb2RlKCk7CisgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmhhbmRsZUJ5dGVj
b2RlRGlzY2FyZGluZ09wcG9ydHVuaXR5KCk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIG1f
Y29kZUJsb2NrRm9yQ2FsbC0+c2V0SklUQ29kZShtX2ppdENvZGVGb3JDYWxsLCBtX2ppdENvZGVG
b3JDYWxsV2l0aEFyaXR5Q2hlY2spOwpAQCAtNTYxLDcgKzU4Miw3IEBAIEpTT2JqZWN0KiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RF
X1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRl
ZENvZGUoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5kaXNjYXJkQnl0
ZWNvZGUoKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5oYW5kbGVCeXRl
Y29kZURpc2NhcmRpbmdPcHBvcnR1bml0eSgpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c2V0SklUQ29kZShtX2ppdENvZGVGb3JDb25zdHJ1Y3Qs
IG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDk5ODE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NzgsNiArNDc4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICpt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgRnVu
Y3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9ja1dpdGhCeXRlY29kZUZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihraW5kKTsKKyAgICAgICAgICAgIGlmIChj
b2RlQmxvY2stPmNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGNvZGVibG9jazsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAg
ICAgIAogICAgICAgICBQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBwcm9kdWNlQ29kZUJs
b2NrRm9yKFNjb3BlQ2hhaW5Ob2RlKiwgQ29tcGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlvbik7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBp
bGVGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2Rl
KQpAQCAtNTg2LDkgKzU5NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IGdlbmVyYXRlZEJ5dGVjb2RlRm9yQ29uc3RydWN0KCk7CiAgICAgICAgIH0KIAotICAgICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwor
ICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoQ29kZVNwZWNp
YWxpemF0aW9uS2luZCk7CiAgICAgICAgIAotICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29k
ZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgRnVuY3Rpb25D
b2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGtp
bmQpOwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114465</attachid>
            <date>2011-11-10 03:39:13 -0800</date>
            <delta_ts>2011-11-10 04:07:25 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>dontreparse_patch_2.diff</filename>
            <type>text/plain</type>
            <size>56518</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk4MjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzkgQEAK
KzIwMTEtMTEtMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIG5vdCByZXBhcnNlIGNvZGUgdGhhdCB3YXMganVzdCBwYXJzZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxOTc3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHBy
b2dyZXNzLiAgTm90IHN1cmUgaWYgdGhpcyBldmVuIGNvbXBpbGVzLgorCisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmNvcHlQb3N0UGFyc2VEYXRhRnJvbSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Y29weVBvc3RQYXJzZURhdGFGcm9tQWx0ZXJuYXRpdmUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZpbmFsaXplVWx0cmFXZWFrRGF0YSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FuUHJvZHVjZUNvcHlXaXRoQnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmRpc2NhcmRCeXRlY29kZUxhdGVyKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVCeXRlY29kZURpc2NhcmRpbmdPcHBvcnR1bml0
eSk6CisgICAgICAgIChKU0M6Okdsb2JhbENvZGVCbG9jazo6R2xvYmFsQ29kZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6UHJvZ3JhbUNvZGVCbG9jazo6UHJvZ3JhbUNvZGVCbG9jayk6CisgICAgICAg
IChKU0M6OkV2YWxDb2RlQmxvY2s6OkV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkNvZGVCbG9jazo6RnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZURlc3RydWN0aW9uQmxvY2tlcjo6Qnl0ZWNvZGVEZXN0cnVjdGlvbkJsb2NrZXIpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZURlc3RydWN0aW9uQmxvY2tlcjo6fkJ5dGVjb2RlRGVzdHJ1Y3Rpb25C
bG9ja2VyKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVDYWNoZS5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpDb2RlQmxvY2tLZXk6OkNvZGVCbG9ja0tleSk6CisgICAgICAgIChKU0M6
OkRGRzo6Q29kZUJsb2NrS2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpDb2Rl
QmxvY2tLZXk6Omhhc2gpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVCbG9ja0tleTo6ZXhlY3V0
YWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q29kZUJsb2NrS2V5OjpraW5kKToKKyAgICAgICAg
KEpTQzo6REZHOjpDb2RlQmxvY2tLZXlIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpD
b2RlQmxvY2tLZXlIYXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVDYWNo
ZTo6Qnl0ZUNvZGVDYWNoZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVDYWNoZTo6fkJ5
dGVDb2RlQ2FjaGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlQ2FjaGU6OmdldCk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6
CisgICAgICAgIChKU0M6OkhlYXA6OmZpbmFsaXplVWx0cmFXZWFrRGF0YSk6CisgICAgICAgIChK
U0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAg
ICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhlYXAvTGlzdGFibGVIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpMaXN0YWJsZUhhbmRsZXI6Okxpc3RhYmxlSGFuZGxlcik6Cisg
ICAgICAgIChKU0M6Okxpc3RhYmxlSGFuZGxlcjo6fkxpc3RhYmxlSGFuZGxlcik6CisgICAgICAg
IChKU0M6Okxpc3RhYmxlSGFuZGxlcjo6TGlzdDo6TGlzdCk6CisgICAgICAgIChKU0M6Okxpc3Rh
YmxlSGFuZGxlcjo6TGlzdDo6YWRkTm90VGhyZWFkU2FmZSk6CisgICAgICAgIChKU0M6Okxpc3Rh
YmxlSGFuZGxlcjo6TGlzdDo6YWRkVGhyZWFkU2FmZSk6CisgICAgICAgIChKU0M6Okxpc3RhYmxl
SGFuZGxlcjo6TGlzdDo6aGFzTmV4dCk6CisgICAgICAgIChKU0M6Okxpc3RhYmxlSGFuZGxlcjo6
TGlzdDo6cmVtb3ZlTmV4dCk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAg
ICAoSlNDOjpNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpNYXJrU3RhY2tUaHJlYWRTaGFyZWRE
YXRhKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmhhcnZlc3RXZWFrUmVmZXJlbmNlcyk6
CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpmaW5hbGl6ZVVsdHJhV2Vha0RhdGEpOgorICAg
ICAgICAqIGhlYXAvTWFya1N0YWNrLmg6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YWRkV2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlcik6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6YWRkVWx0cmFX
ZWFrRmluYWxpemVyKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgICog
aGVhcC9VbHRyYVdlYWtGaW5hbGl6ZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlVsdHJhV2Vh
a0ZpbmFsaXplcjo6flVsdHJhV2Vha0ZpbmFsaXplcik6CisgICAgICAgICogaGVhcC9XZWFrUmVm
ZXJlbmNlSGFydmVzdGVyLmg6CisgICAgICAgIChKU0M6OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI6
OldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOgorICAgICAgICAoSlNDOjpXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyOjp+V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik6CisgICAgICAgICogcnVudGltZS9FeGVj
dXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwpOgor
ICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFs
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0
SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvZGVCbG9ja1dpdGhCeXRlY29kZUZvcik6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZmlsZWRDb2RlQmxvY2tGb3IpOgorCiAyMDEx
LTExLTA5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFRv
d2FyZHMgOCBCaXQgU3RyaW5nczogVGVtcGxhdGl6ZSBKU0M6OkxpdGVyYWxQYXJzZXIgY2xhc3Mg
YnkgY2hhcmFjdGVyIHR5cGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiA5OTgxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw4IEBACiAJ
CTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NTE0NjBDQkFCMDAxMzFG
OEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2
QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFG
OEYgLyogRGF0YUZvcm1hdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjQzMTczODE0NkJB
QzY5MDA3RTM4OTAgLyogTGlzdGFibGVIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQzMTczNjE0NkJBQzY1MDA3RTM4OTAgLyogTGlzdGFi
bGVIYW5kbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY0MzE3MzkxNDZCQUM2QjAwN0UzODkwIC8qIFVsdHJhV2Vha0ZpbmFsaXplci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MzE3MzcxNDZC
QUM2NTAwN0UzODkwIC8qIFVsdHJhV2Vha0ZpbmFsaXplci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjYyMDE3NTE0M0ZDRDM3MDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcxMTQzRkNEMkYwMDY4
Qjc3QyAvKiBERkdPcGVyYW5kcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGNjIwMTc2MTQzRkNEM0IwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2Nr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3
MDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MjksNiArODMxLDkgQEAKIAkJMEY0MjZB
NDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpcnR1YWxSZWdpc3Rlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1h
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRm9ybWF0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0
YWJsZUhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlzdGFibGVI
YW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNDMxNzM3MTQ2QkFDNjUw
MDdFMzg5MCAvKiBVbHRyYVdlYWtGaW5hbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVWx0cmFXZWFrRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNUYwOENDMTQ2QkU2MDIwMDA0NzJBOSAvKiBERkdCeXRlQ29kZUNhY2hlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0J5dGVDb2RlQ2FjaGUuaDsgcGF0aCA9IGRm
Zy9ERkdCeXRlQ29kZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjIw
MTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Fic3RyYWN0U3RhdGUuY3BwOyBwYXRoID0gZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYy
MDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBYnN0cmFjdFN0YXRlLmg7IHBhdGggPSBkZmcvREZHQWJz
dHJhY3RTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE2RjE0M0ZD
RDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdBYnN0cmFjdFZhbHVlLmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcwMSw2ICsxNzA2LDggQEAKIAkJ
MTQyRTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0
YWJsZUhhbmRsZXIuaCAqLywKKwkJCQkwRjQzMTczNzE0NkJBQzY1MDA3RTM4OTAgLyogVWx0cmFX
ZWFrRmluYWxpemVyLmggKi8sCiAJCQkJMEZEODJGMjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRp
c29uZWRDb2RlQmxvY2tzLmNwcCAqLywKIAkJCQkwRkQ4MkYyOTE0MjZDQTVBMDAxNzlDOTQgLyog
SmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLywKIAkJCQlBNzA0NTZBRTE0MjdGQjAzMDAzN0RBNjgg
LyogQWxsb2NhdGlvblNwYWNlLmNwcCAqLywKQEAgLTIzMTcsNiArMjMyNCw3IEBACiAJCTg2RUM5
REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTBGNUYwOENDMTQ2QkU2MDIwMDA0NzJBOSAvKiBERkdCeXRlQ29k
ZUNhY2hlLmggKi8sCiAJCQkJMEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5j
cHAgKi8sCiAJCQkJMEZDMDk3QTAxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oICovLAog
CQkJCTBGQzA5NzlEMTQ2QjI3MUUwMENGMjQ0MiAvKiBERkdDb3JyZWN0YWJsZUp1bXBQb2ludC5j
cHAgKi8sCkBAIC0yOTQzLDYgKzI5NTEsOCBAQAogCQkJCTBGQzA5NzcxMTQ2OTNBRjUwMENGMjQ0
MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzlDMTQ2
QTc3MjUwMENGMjQ0MiAvKiBERkdDb3JyZWN0YWJsZUp1bXBQb2ludC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDMDk3QTIxNDZCMjhDQzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY0MzE3MzgxNDZCQUM2OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEY0MzE3MzkxNDZCQUM2QjAwN0UzODkwIC8qIFVsdHJhV2Vha0Zp
bmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gOTk4MTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwNyw2
ICsxNDA3LDU4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wU3RhdGlzdGljcygpCiAjZW5kaWYKIH0K
IAorQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90
aGVyLCBTeW1ib2xUYWJsZSogc3ltVGFiKQorICAgIDogbV9nbG9iYWxPYmplY3Qob3RoZXIubV9n
bG9iYWxPYmplY3QpCisgICAgLCBtX2hlYXAob3RoZXIubV9oZWFwKQorICAgICwgbV9udW1DYWxs
ZWVSZWdpc3RlcnMob3RoZXIubV9udW1DYWxsZWVSZWdpc3RlcnMpCisgICAgLCBtX251bVZhcnMo
b3RoZXIubV9udW1WYXJzKQorICAgICwgbV9udW1DYXB0dXJlZFZhcnMob3RoZXIubV9udW1DYXB0
dXJlZFZhcnMpCisgICAgLCBtX251bVBhcmFtZXRlcnMob3RoZXIubV9udW1QYXJhbWV0ZXJzKQor
ICAgICwgbV9pc0NvbnN0cnVjdG9yKG90aGVyLm1faXNDb25zdHJ1Y3RvcikKKyAgICAsIG1fc2hv
dWxkRGlzY2FyZEJ5dGVjb2RlTGF0ZXIoZmFsc2UpCisgICAgLCBtX293bmVyRXhlY3V0YWJsZSgq
b3RoZXIubV9nbG9iYWxEYXRhLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIu
bV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCisgICAgLCBtX2dsb2JhbERhdGEob3RoZXIubV9nbG9i
YWxEYXRhKQorICAgICwgbV9pbnN0cnVjdGlvbnMob3RoZXIubV9pbnN0cnVjdGlvbnMpCisgICAg
LCBtX2luc3RydWN0aW9uQ291bnQob3RoZXIubV9pbnN0cnVjdGlvbkNvdW50KQorICAgICwgbV90
aGlzUmVnaXN0ZXIob3RoZXIubV90aGlzUmVnaXN0ZXIpCisgICAgLCBtX2FyZ3VtZW50c1JlZ2lz
dGVyKG90aGVyLm1fYXJndW1lbnRzUmVnaXN0ZXIpCisgICAgLCBtX2FjdGl2YXRpb25SZWdpc3Rl
cihvdGhlci5tX2FjdGl2YXRpb25SZWdpc3RlcikKKyAgICAsIG1fbmVlZHNGdWxsU2NvcGVDaGFp
bihvdGhlci5tX25lZWRzRnVsbFNjb3BlQ2hhaW4pCisgICAgLCBtX3VzZXNFdmFsKG90aGVyLm1f
dXNlc0V2YWwpCisgICAgLCBtX2lzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbihvdGhlci5tX2lzTnVt
ZXJpY0NvbXBhcmVGdW5jdGlvbikKKyAgICAsIG1faXNTdHJpY3RNb2RlKG90aGVyLm1faXNTdHJp
Y3RNb2RlKQorICAgICwgbV9jb2RlVHlwZShvdGhlci5tX2NvZGVUeXBlKQorICAgICwgbV9zb3Vy
Y2Uob3RoZXIubV9zb3VyY2UpCisgICAgLCBtX3NvdXJjZU9mZnNldChvdGhlci5tX3NvdXJjZU9m
ZnNldCkKKyAgICAsIG1fZ2xvYmFsUmVzb2x2ZUluZm9zKG90aGVyLm1fZ2xvYmFsUmVzb2x2ZUlu
Zm9zKQorICAgICwgbV9qdW1wVGFyZ2V0cyhvdGhlci5tX2p1bXBUYXJnZXRzKQorICAgICwgbV9s
b29wVGFyZ2V0cyhvdGhlci5tX2xvb3BUYXJnZXRzKQorICAgICwgbV9pZGVudGlmaWVycyhvdGhl
ci5tX2lkZW50aWZpZXJzKQorICAgICwgbV9jb25zdGFudFJlZ2lzdGVycyhvdGhlci5tX2NvbnN0
YW50UmVnaXN0ZXJzKQorICAgICwgbV9mdW5jdGlvbkRlY2xzKG90aGVyLm1fZnVuY3Rpb25EZWNs
cykKKyAgICAsIG1fZnVuY3Rpb25FeHBycyhvdGhlci5tX2Z1bmN0aW9uRXhwcnMpCisgICAgLCBt
X3N5bWJvbFRhYmxlKHN5bVRhYikKKyAgICAsIG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigw
KQorICAgICwgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKDApCisgICAgLCBtX29wdGltaXphdGlv
bkRlbGF5Q291bnRlcigwKQorICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQor
eworICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAKKyAgICBpZiAob3RoZXIubV9yYXJl
RGF0YSkgeworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIAor
ICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzID0gb3RoZXIubV9yYXJlRGF0
YS0+bV9leGNlcHRpb25IYW5kbGVyczsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9yZWdleHBzID0g
b3RoZXIubV9yYXJlRGF0YS0+bV9yZWdleHBzOworICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0
YW50QnVmZmVycyA9IG90aGVyLm1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzOworICAgICAg
ICBtX3JhcmVEYXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVE
YXRhLT5tX2ltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIG1fcmFyZURhdGEtPm1f
Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcyA9IG90aGVyLm1fcmFyZURhdGEtPm1fY2hhcmFjdGVy
U3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzID0gb3RoZXIubV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAg
ICAgICBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvID0gb3RoZXIubV9yYXJlRGF0YS0+bV9l
eHByZXNzaW9uSW5mbzsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9saW5lSW5mbyA9IG90aGVyLm1f
cmFyZURhdGEtPm1fbGluZUluZm87CisgICAgfQorfQorCiBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0ds
b2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3Vy
Y2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBi
b29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAg
ICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1
dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2Jh
bERhdGEoKS5oZWFwKQpAQCAtMTQxNCw2ICsxNDY2LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2so
U2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9udW1WYXJzKDApCiAgICAgLCBtX251bVBhcmFt
ZXRlcnMoMCkKICAgICAsIG1faXNDb25zdHJ1Y3Rvcihpc0NvbnN0cnVjdG9yKQorICAgICwgbV9z
aG91bGREaXNjYXJkQnl0ZWNvZGVMYXRlcihmYWxzZSkKICAgICAsIG1fb3duZXJFeGVjdXRhYmxl
KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0
YWJsZSkKICAgICAsIG1fZ2xvYmFsRGF0YSgwKQogICAgICwgbV9pbnN0cnVjdGlvbnMoYWRvcHRS
ZWYobmV3IEluc3RydWN0aW9ucykpCkBAIC0xNTk1LDYgKzE2NDgsMTMgQEAgdm9pZCBDb2RlQmxv
Y2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdAogICAgIGZvciAodW5zaWduZWQgcHJvZmlsZUlu
ZGV4ID0gMDsgcHJvZmlsZUluZGV4IDwgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsrcHJvZmls
ZUluZGV4KQogICAgICAgICB2YWx1ZVByb2ZpbGUocHJvZmlsZUluZGV4KS0+Y29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKCk7CiAjZW5kaWYKKyAgICAKKyNpZiBFTkFCTEUoSklUKSAmJiAhRU5BQkxF
KE9QQ09ERV9TQU1QTElORykKKyAgICAvLyBLaWxsIG9mZiBzb21lIGJ5dGVjb2RlLiBXZSBjYW4n
dCBkbyBpdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhY2NpZGVudGFsbHkKKyAgICAv
LyBjYWxsIGludG8gbWFsbG9jIHdoaWxlIGluIHN0b3AtdGhlLXdvcmxkIEdDIG1vZGUuCisgICAg
aWYgKGhhc0luc3RydWN0aW9ucygpICYmIG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlTGF0ZXIpCisg
ICAgICAgIHZpc2l0b3IuYWRkVWx0cmFXZWFrRmluYWxpemVyKHRoaXMpOworI2VuZGlmCiB9CiAK
IEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCkKQEAgLTE4MjEsNyArMTg4MSw3IEBAIGlubGluZSB2b2lkIHJlcGxh
Y2VFeGlzdGluZ0VudHJpZXMoVmVjdG8KICAgICAgICAgdGFyZ2V0W2ldID0gc291cmNlW2ldOwog
fQogCi12b2lkIENvZGVCbG9jazo6Y29weURhdGFGcm9tKENvZGVCbG9jayogYWx0ZXJuYXRpdmUp
Cit2b2lkIENvZGVCbG9jazo6Y29weVBvc3RQYXJzZURhdGFGcm9tKENvZGVCbG9jayogYWx0ZXJu
YXRpdmUpCiB7CiAgICAgaWYgKCFhbHRlcm5hdGl2ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTgz
Myw5ICsxODkzLDkgQEAgdm9pZCBDb2RlQmxvY2s6OmNvcHlEYXRhRnJvbShDb2RlQmxvY2sqIAog
ICAgICAgICByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKG1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZm
ZXJzLCBhbHRlcm5hdGl2ZS0+bV9yYXJlRGF0YS0+bV9jb25zdGFudEJ1ZmZlcnMpOwogfQogCi12
b2lkIENvZGVCbG9jazo6Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKQordm9pZCBDb2RlQmxvY2s6
OmNvcHlQb3N0UGFyc2VEYXRhRnJvbUFsdGVybmF0aXZlKCkKIHsKLSAgICBjb3B5RGF0YUZyb20o
bV9hbHRlcm5hdGl2ZS5nZXQoKSk7CisgICAgY29weVBvc3RQYXJzZURhdGFGcm9tKG1fYWx0ZXJu
YXRpdmUuZ2V0KCkpOwogfQogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTE5MTcsNiArMTk3NywxNSBA
QCB2b2lkIEZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbihKU0dsb2JhCiB9CiAjZW5kaWYKIAor
dm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVWx0cmFXZWFrRGF0YSgpCit7CisjaWYgRU5BQkxFKE9Q
Q09ERV9TQU1QTElORykgfHwgIUVOQUJMRShKSVQpCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisjZW5kaWYKKyAgICBBU1NFUlQobV9zaG91bGREaXNjYXJkQnl0ZWNvZGVMYXRlcik7CisgICAg
ZGlzY2FyZEJ5dGVjb2RlKCk7Cit9CisKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiBib29s
IENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTk4MTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJQcmVkaWN0aW9uVHJhY2tlci5oIgogI2luY2x1ZGUgIlJl
Z0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKKyNpbmNsdWRlICJVbHRyYVdlYWtG
aW5hbGl6ZXIuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlIDx3dGYvRmFz
dEFsbG9jQmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0yMzYsMTAgKzIz
NywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAjZW5kaWYKIAotICAgIGNsYXNzIENvZGVC
bG9jayB7CisgICAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIFVsdHJhV2Vha0ZpbmFsaXplciB7
CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICBmcmllbmQgY2xhc3Mg
SklUOworICAgIHB1YmxpYzoKKyAgICAgICAgZW51bSBDb3B5UGFyc2VkQmxvY2tUYWcgeyBDb3B5
UGFyc2VkQmxvY2sgfTsKICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIENvZGVCbG9jayhDb3B5UGFy
c2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIsIFN5bWJvbFRhYmxlKik7CisgICAgICAgIAog
ICAgICAgICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2Rl
VHlwZSwgSlNHbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWdu
ZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSosIGJvb2wgaXNDb25zdHJ1Y3RvciwgUGFzc093
blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKTsKIAogICAgICAgICBXcml0ZUJhcnJpZXI8SlNH
bG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwpAQCAtMjY1LDYgKzI3MCw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogI2VuZGlmCisg
ICAgICAgIAorICAgICAgICBib29sIGNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkgeyByZXR1
cm4gaGFzSW5zdHJ1Y3Rpb25zKCk7IH0KIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7CiAKQEAgLTQ0Myw3ICs0NTAsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1
Y3Rpb25zLT5tX2luc3RydWN0aW9uczsgfQogICAgICAgICBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rp
b24+JiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy0+bV9pbnN0
cnVjdGlvbnM7IH0KICAgICAgICAgdm9pZCBkaXNjYXJkQnl0ZWNvZGUoKSB7IG1faW5zdHJ1Y3Rp
b25zLmNsZWFyKCk7IH0KLQorICAgICAgICB2b2lkIGRpc2NhcmRCeXRlY29kZUxhdGVyKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGVMYXRlciA9IHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBoYW5kbGVCeXRlY29kZURpc2NhcmRpbmdPcHBvcnR1
bml0eSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghIWFsdGVybmF0aXZlKCkpCisgICAg
ICAgICAgICAgICAgZGlzY2FyZEJ5dGVjb2RlKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgZGlzY2FyZEJ5dGVjb2RlTGF0ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgICAgIGJvb2wgdXNlc09wY29kZShPcGNvZGVJRCk7CiAjZW5kaWYK
QEAgLTgwOCw4ICs4MjYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHNocmlu
a1RvRml0KCk7CiAgICAgICAgIAotICAgICAgICB2b2lkIGNvcHlEYXRhRnJvbShDb2RlQmxvY2sq
IGFsdGVybmF0aXZlKTsKLSAgICAgICAgdm9pZCBjb3B5RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwor
ICAgICAgICB2b2lkIGNvcHlQb3N0UGFyc2VEYXRhRnJvbShDb2RlQmxvY2sqIGFsdGVybmF0aXZl
KTsKKyAgICAgICAgdm9pZCBjb3B5UG9zdFBhcnNlRGF0YUZyb21BbHRlcm5hdGl2ZSgpOwogICAg
ICAgICAKICAgICAgICAgLy8gRnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB3aGVuIHRpZXJlZCBj
b21waWxhdGlvbiBraWNrcyBpbi4gVGhpcwogICAgICAgICAvLyBjb250cm9scyBib3RoIHdoZW4g
dGhlIG9wdGltaXppbmcgY29tcGlsZXIgaXMgaW52b2tlZCBhbmQgd2hlbiBPU1IKQEAgLTk5Niw2
ICsxMDE0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgbV9udW1QYXJhbWV0ZXJz
OwogICAgICAgICBib29sIG1faXNDb25zdHJ1Y3RvcjsKIAorICAgICAgICAvLyBUaGlzIGlzIHB1
YmxpYyBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIG1hbnkgZnJpZW5kcy4KKyAgICAg
ICAgYm9vbCBtX3Nob3VsZERpc2NhcmRCeXRlY29kZUxhdGVyOworCisgICAgcHJvdGVjdGVkOgor
ICAgICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbHRyYVdlYWtEYXRhKCk7CisgICAgICAgIAog
ICAgIHByaXZhdGU6CiAjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCBFTkFCTEUoT1BDT0RFX1NBTVBM
SU5HKQogICAgICAgICB2b2lkIGR1bXAoRXhlY1N0YXRlKiwgY29uc3QgVmVjdG9yPEluc3RydWN0
aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2luLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9p
dGVyYXRvciYpIGNvbnN0OwpAQCAtMTAxNCw3ICsxMDM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBpZiAoIW1fcmFyZURhdGEpCiAgICAgICAgICAgICAgICAgbV9yYXJlRGF0YSA9
IGFkb3B0UHRyKG5ldyBSYXJlRGF0YSk7CiAgICAgICAgIH0KLQorICAgICAgICAKICAgICAgICAg
V3JpdGVCYXJyaWVyPFNjcmlwdEV4ZWN1dGFibGU+IG1fb3duZXJFeGVjdXRhYmxlOwogICAgICAg
ICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKIApAQCAtMTEyOSw2ICsxMTUzLDEyIEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgR2xvYmFsQ29kZUJsb2NrIDogcHVibGljIENvZGVC
bG9jayB7CiAgICAgcHJvdGVjdGVkOgorICAgICAgICBHbG9iYWxDb2RlQmxvY2soQ29weVBhcnNl
ZEJsb2NrVGFnLCBHbG9iYWxDb2RlQmxvY2smIG90aGVyKQorICAgICAgICAgICAgOiBDb2RlQmxv
Y2soQ29weVBhcnNlZEJsb2NrLCBvdGhlciwgJm1fdW5zaGFyZWRTeW1ib2xUYWJsZSkKKyAgICAg
ICAgICAgICwgbV91bnNoYXJlZFN5bWJvbFRhYmxlKG90aGVyLm1fdW5zaGFyZWRTeW1ib2xUYWJs
ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBHbG9iYWxDb2RlQmxv
Y2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlwZSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgUGFzc093blB0cjxDb2RlQmxv
Y2s+IGFsdGVybmF0aXZlKQogICAgICAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxl
LCBjb2RlVHlwZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCAm
bV91bnNoYXJlZFN5bWJvbFRhYmxlLCBmYWxzZSwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKQEAg
LTExNDAsNiArMTE3MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFByb2dyYW1D
b2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKICAgICBwdWJsaWM6CisgICAgICAg
IFByb2dyYW1Db2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBv
dGhlcikKKyAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3Ro
ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCiAgICAgICAgIFByb2dyYW1Db2RlQmxvY2soUHJv
Z3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJj
ZVByb3ZpZGVyLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCiAgICAgICAgICAg
ICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIGNvZGVUeXBlLCBnbG9iYWxPYmpl
Y3QsIHNvdXJjZVByb3ZpZGVyLCAwLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgewpAQCAtMTE1Niw2
ICsxMTkxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRXZhbENvZGVCbG9jayA6
IHB1YmxpYyBHbG9iYWxDb2RlQmxvY2sgewogICAgIHB1YmxpYzoKKyAgICAgICAgRXZhbENvZGVC
bG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQorICAgICAgICAg
ICAgOiBHbG9iYWxDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICAgICAgICAg
ICwgbV9iYXNlU2NvcGVEZXB0aChvdGhlci5tX2Jhc2VTY29wZURlcHRoKQorICAgICAgICAgICAg
LCBtX3ZhcmlhYmxlcyhvdGhlci5tX3ZhcmlhYmxlcykKKyAgICAgICAgeworICAgICAgICB9Cisg
ICAgICAgIAogICAgICAgICBFdmFsQ29kZUJsb2NrKEV2YWxFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJv
dmlkZXI+IHNvdXJjZVByb3ZpZGVyLCBpbnQgYmFzZVNjb3BlRGVwdGgsIFBhc3NPd25QdHI8Q29k
ZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAgICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVy
RXhlY3V0YWJsZSwgRXZhbENvZGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIDAsIGFs
dGVybmF0aXZlKQogICAgICAgICAgICAgLCBtX2Jhc2VTY29wZURlcHRoKGJhc2VTY29wZURlcHRo
KQpAQCAtMTE4Nyw2ICsxMjI5LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgRnVu
Y3Rpb25Db2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKICAgICBwdWJsaWM6CisgICAgICAg
IEZ1bmN0aW9uQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25Db2RlQmxvY2sm
IG90aGVyKQorICAgICAgICAgICAgOiBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlciwg
b3RoZXIuc2hhcmVkU3ltYm9sVGFibGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhl
IGZhY3QgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoaXMgaXMgeXVja3ksIGJ1dCBpcyBuZWNlc3Nhcnkg
YmVjYXVzZSBvZiB0aGUKKyAgICAgICAgICAgIC8vIGNsYXNzIGhpZXJhcmNoeSBpc3N1ZXMgZGVz
Y3JpYmVkIGluIHRoZSBjb21tZW50IGJsb2NrIGZvciB0aGUgbWFpbgorICAgICAgICAgICAgLy8g
Y29uc3RydWN0b3IsIGJlbG93LgorICAgICAgICAgICAgc2hhcmVkU3ltYm9sVGFibGUoKS0+cmVm
KCk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBSYXRoZXIgdGhhbiB1c2luZyB0aGUgdXN1YWwg
UmVmQ291bnRlZDo6Y3JlYXRlIGlkaW9tIGZvciBTaGFyZWRTeW1ib2xUYWJsZSB3ZSBqdXN0IHVz
ZSBuZXcKICAgICAgICAgLy8gYXMgd2UgbmVlZCB0byBpbml0aWFsaXNlIHRoZSBDb2RlQmxvY2sg
YmVmb3JlIHdlIGNvdWxkIGluaXRpYWxpc2UgYW55IFJlZlB0ciB0byBob2xkIHRoZSBzaGFyZWQK
ICAgICAgICAgLy8gc3ltYm9sIHRhYmxlLCBzbyB3ZSBqdXN0IHBhc3MgYXMgYSByYXcgcG9pbnRl
ciB3aXRoIGEgcmVmIGNvdW50IG9mIDEuICBXZSB0aGVuIG1hbnVhbGx5IGRlcmVmCkBAIC0xMjA5
LDYgKzEyNjAsMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICB9OwogCisgICAgLy8g
VXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gY29weSBhIGNvZGUgYmxvY2sgYW5kIHlvdSdyZSBwYXJh
bm9pZCBhYm91dCBhIEdDCisgICAgLy8gaGFwcGVuaW5nLgorICAgIGNsYXNzIEJ5dGVjb2RlRGVz
dHJ1Y3Rpb25CbG9ja2VyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEJ5dGVjb2RlRGVzdHJ1Y3Rp
b25CbG9ja2VyKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICAgICAgOiBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCisgICAgICAgICAgICAsIG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRl
Y29kZUxhdGVyKGNvZGVCbG9jay0+bV9zaG91bGREaXNjYXJkQnl0ZWNvZGVMYXRlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgY29kZUJsb2NrLT5tX3Nob3VsZERpc2NhcmRCeXRlY29kZUxhdGVy
ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIH5CeXRlY29kZURlc3RydWN0
aW9uQmxvY2tlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX3Nob3Vs
ZERpc2NhcmRCeXRlY29kZUxhdGVyID0gbV9vbGRWYWx1ZU9mU2hvdWxkRGlzY2FyZEJ5dGVjb2Rl
TGF0ZXI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ29kZUJs
b2NrKiBtX2NvZGVCbG9jazsKKyAgICAgICAgYm9vbCBtX29sZFZhbHVlT2ZTaG91bGREaXNjYXJk
Qnl0ZWNvZGVMYXRlcjsKKyAgICB9OworCiAgICAgaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6
OnIoaW50IGluZGV4KQogICAgIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlz
LT5jb2RlQmxvY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1i
bHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
c3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gOTk4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNiArMjM1
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZWUtPnNjb3BlKCktPmdsb2JhbE9iamVjdC5nZXQoKTsKICAgICB9CiAgICAgCisgICAg
Ym9vbCBzdHJpY3RNb2RlRm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKKyAgICB7CisgICAgICAg
IGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gY29k
ZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpOworICAgICAgICByZXR1cm4gY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPmNhbGxlZS0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpOworICAg
IH0KKyAgICAKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvbnN0IENvZGVP
cmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVD
YWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVDYWNoZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZUNhY2hlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQnl0ZUNvZGVD
YWNoZV9oCisjZGVmaW5lIERGR0J5dGVDb2RlQ2FjaGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitj
bGFzcyBDb2RlQmxvY2tLZXkgeworcHVibGljOgorICAgIENvZGVCbG9ja0tleSgpCisgICAgICAg
IDogbV9leGVjdXRhYmxlKDApCisgICAgICAgICwgbV9raW5kKENvZGVGb3JDYWxsKSAvLyBDb2Rl
Rm9yQ2FsbCA9IGVtcHR5IHZhbHVlCisgICAgeworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2tL
ZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fZXhlY3V0YWJs
ZSgwKQorICAgICAgICAsIG1fa2luZChDb2RlRm9yQ29uc3RydWN0KSAvLyBDb2RlRm9yQ29uc3Ry
dWN0ID0gZGVsZXRlZCB2YWx1ZQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ29kZUJsb2NrS2V5
KEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQorICAgICAgICA6IG1fZXhlY3V0YWJsZShleGVjdXRhYmxlKQorICAgICAgICAsIG1fa2lu
ZChraW5kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENv
ZGVCbG9ja0tleSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9leGVjdXRh
YmxlID09IG90aGVyLm1fZXhlY3V0YWJsZQorICAgICAgICAgICAgJiYgbV9raW5kID09IG90aGVy
Lm1fa2luZDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgewor
ICAgICAgICAvLyBUaGlzIGlzIGxpa2VseSB0byBiZSBnb29kIGVub3VnaC4KKyAgICAgICAgcmV0
dXJuIFdURjo6UHRySGFzaDxGdW5jdGlvbkV4ZWN1dGFibGUqPjo6aGFzaChtX2V4ZWN1dGFibGUp
IF4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fa2luZCk7CisgICAgfQorICAgIAorICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0YWJsZTsg
fQorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gIW1fZXhlY3V0YWJsZSAmJiBtX2tpbmQgPT0gQ29kZUZvckNvbnN0cnVj
dDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBtX2V4ZWN1dGFi
bGU7CisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBtX2tpbmQ7Cit9OworCitzdHJ1Y3QgQ29k
ZUJsb2NrS2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQ29kZUJsb2Nr
S2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBDb2RlQmxvY2tLZXkmIGEsIGNvbnN0IENvZGVCbG9ja0tleSYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlP
ckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OkNvZGVCbG9ja0tleT4gewor
ICAgIHR5cGVkZWYgSlNDOjpERkc6OkNvZGVCbG9ja0tleUhhc2ggSGFzaDsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFz
aFRyYWl0czxKU0M6OkRGRzo6Q29kZUJsb2NrS2V5PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxK
U0M6OkRGRzo6Q29kZUJsb2NrS2V5PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBCeXRlQ29kZUNhY2hlVmFsdWUg
eworICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2s7CisgICAgYm9vbCBvd25lZDsKKyAg
ICBib29sIG9sZFZhbHVlT2ZTaG91bGREaXNjYXJkQnl0ZWNvZGVMYXRlcjsKK307CisKK3RlbXBs
YXRlPGJvb2wgKCpmaWx0ZXJGdW5jdGlvbikoQ29kZUJsb2NrKiwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCk+CitjbGFzcyBCeXRlQ29kZUNhY2hlIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hN
YXA8Q29kZUJsb2NrS2V5LCBCeXRlQ29kZUNhY2hlVmFsdWU+IE1hcDsKKyAgICAKKyAgICBCeXRl
Q29kZUNhY2hlKCkgeyB9CisgICAgCisgICAgfkJ5dGVDb2RlQ2FjaGUoKQorICAgIHsKKyAgICAg
ICAgTWFwOjppdGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7CisgICAgICAgIE1hcDo6aXRl
cmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgICAgIGZvciAoTWFwOjppdGVyYXRvciBpdGVy
ID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmICghaXRlci0+
c2Vjb25kLmNvZGVCbG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmIChpdGVyLT5zZWNvbmQub3duZWQpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgaXRlci0+
c2Vjb25kLmNvZGVCbG9jazsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGl0ZXItPnNlY29uZC5jb2RlQmxvY2stPm1fc2hvdWxkRGlzY2FyZEJ5
dGVjb2RlTGF0ZXIgPSBpdGVyLT5zZWNvbmQub2xkVmFsdWVPZlNob3VsZERpc2NhcmRCeXRlY29k
ZUxhdGVyOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIENvZGVCbG9jayogZ2V0KGNvbnN0
IENvZGVCbG9ja0tleSYga2V5LCBTY29wZUNoYWluTm9kZSogc2NvcGUpCisgICAgeworICAgICAg
ICBNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKGtleSk7CisgICAgICAgIGlmIChpdGVy
ICE9IG1fbWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5jb2RlQmxv
Y2s7CisgICAgICAgIAorICAgICAgICBCeXRlQ29kZUNhY2hlVmFsdWUgdmFsdWU7CisgICAgICAg
IAorICAgICAgICAvLyBGaXJzdCBzZWUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHBhcnNlZCBjb2Rl
IGJsb2NrIHRoYXQgc3RpbGwgaGFzIHNvbWUKKyAgICAgICAgLy8gYnl0ZWNvZGUgaW4gaXQuCisg
ICAgICAgIHZhbHVlLmNvZGVCbG9jayA9IGtleS5leGVjdXRhYmxlKCktPmNvZGVCbG9ja1dpdGhC
eXRlY29kZUZvcihrZXkua2luZCgpKTsKKyAgICAgICAgaWYgKHZhbHVlLmNvZGVCbG9jaykgewor
ICAgICAgICAgICAgdmFsdWUub3duZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHZhbHVlLm9sZFZh
bHVlT2ZTaG91bGREaXNjYXJkQnl0ZWNvZGVMYXRlciA9IHZhbHVlLmNvZGVCbG9jay0+bV9zaG91
bGREaXNjYXJkQnl0ZWNvZGVMYXRlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IE5vcGUsIHNvIHRyeSB0byBwYXJzZSBvbmUuCisgICAgICAgICAgICBKU09iamVjdCogZXhjZXB0
aW9uOworICAgICAgICAgICAgdmFsdWUub3duZWQgPSB0cnVlOworICAgICAgICAgICAgdmFsdWUu
Y29kZUJsb2NrID0ga2V5LmV4ZWN1dGFibGUoKS0+cHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwg
T3B0aW1pemluZ0NvbXBpbGF0aW9uLCBrZXkua2luZCgpLCBleGNlcHRpb24pLmxlYWtQdHIoKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW55IHJl
YXNvbiB0byByZWplY3QgdGhpcyBmcm9tIG91ciBjYWNoZS4gSWYgc28sIHRoZW4KKyAgICAgICAg
Ly8gcG9pc29uIGl0LgorICAgICAgICBpZiAoISF2YWx1ZS5jb2RlQmxvY2sgJiYgIWZpbHRlckZ1
bmN0aW9uKHZhbHVlLmNvZGVCbG9jaywga2V5LmtpbmQoKSkpIHsKKyAgICAgICAgICAgIGlmICh2
YWx1ZS5vd25lZCkKKyAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWUuY29kZUJsb2NrOworICAg
ICAgICAgICAgdmFsdWUuY29kZUJsb2NrID0gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIGEgY29kZSBibG9jaywgbWFrZSBzdXJlIHRo
YXQgd2UncmUgbm90IGdvaW5nCisgICAgICAgIC8vIHRvIGJlIGRpc2NhcmRpbmcgaXRzIGJ5dGVj
b2RlIGlmIGEgR0Mgd2VyZSB0byBoYXBwZW4gZHVyaW5nIERGRworICAgICAgICAvLyBjb21waWxh
dGlvbi4gVGhhdCdzIHVubGlrZWx5LCBidXQgaXQncyBnb29kIHRvIHRob3JvdWdobHkgZW5qb3kg
dGhpcworICAgICAgICAvLyBraW5kIG9mIHBhcmFub2lhLgorICAgICAgICBpZiAoISF2YWx1ZS5j
b2RlQmxvY2spCisgICAgICAgICAgICB2YWx1ZS5jb2RlQmxvY2stPm1fc2hvdWxkRGlzY2FyZEJ5
dGVjb2RlTGF0ZXIgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1fbWFwLmFkZChrZXksIHZh
bHVlKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB2YWx1ZS5jb2RlQmxvY2s7CisgICAgfQor
Citwcml2YXRlOgorICAgIE1hcCBtX21hcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQnl0ZUNvZGVD
YWNoZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gOTk4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdCeXRlQ29kZUNhY2hlLmgiCiAj
aW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTg0MSw2ICs4NDIsOSBAQCBwcml2YXRlOgogICAgIElk
ZW50aWZpZXJNYXAgbV9pZGVudGlmaWVyTWFwOwogICAgIC8vIE1hcHBpbmcgYmV0d2VlbiB2YWx1
ZXMgYW5kIGNvbnN0YW50IG51bWJlcnMuCiAgICAgSlNWYWx1ZU1hcCBtX2pzVmFsdWVNYXA7Cisg
ICAgCisgICAgLy8gQ2FjaGUgb2YgY29kZSBibG9ja3MgdGhhdCB3ZSd2ZSBnZW5lcmF0ZWQgYnl0
ZWNvZGUgZm9yLgorICAgIEJ5dGVDb2RlQ2FjaGU8Y2FuSW5saW5lRnVuY3Rpb25Gb3I+IG1fY29k
ZUJsb2NrQ2FjaGU7CiB9OwogCiAjZGVmaW5lIE5FWFRfT1BDT0RFKG5hbWUpIFwKQEAgLTk1Niwx
OCArOTYwLDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAg
ICAKICAgICAvLyBJZiB3ZSBnZXQgaGVyZSB0aGVuIGl0IGxvb2tzIGxpa2Ugd2Ugc2hvdWxkIGRl
ZmluaXRlbHkgaW5saW5lIHRoaXMgY29kZS4gUHJvY2VlZAogICAgIC8vIHdpdGggcGFyc2luZyB0
aGUgY29kZSB0byBnZXQgYnl0ZWNvZGUsIHNvIHRoYXQgd2UgY2FuIHRoZW4gcGFyc2UgdGhlIGJ5
dGVjb2RlLgotICAgIC8vIE5vdGUgdGhhdCB0aGUgY29kZSBibG9jayB3ZSBnZXQgaGVyZSBpcyBp
bnRlbmRlZCB0byBkaWUgYWZ0ZXIgaGFuZGxlSW5saW5pbmcoKQotICAgIC8vIHJldHVybnMuCi0g
ICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2sg
PSBleGVjdXRhYmxlLT5wcm9kdWNlQ29kZUJsb2NrRm9yKGV4cGVjdGVkRnVuY3Rpb24tPnNjb3Bl
KCksIE9wdGltaXppbmdDb21waWxhdGlvbiwga2luZCwgZXhjZXB0aW9uKTsKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IG1fY29kZUJsb2NrQ2FjaGUuZ2V0KENvZGVCbG9ja0tleShleGVjdXRh
YmxlLCBraW5kKSwgZXhwZWN0ZWRGdW5jdGlvbi0+c2NvcGUoKSk7CiAgICAgaWYgKCFjb2RlQmxv
Y2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CiAgICAg
Ci0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSB0aGUgYnl0ZWNvZGUsIGNoZWNrIGlmIHdlIHJlYWxs
eSBjYW4gaW5saW5lIGl0LiBUaGlzIG1heSBmYWlsCi0gICAgLy8gaWYgdGhlIGNvZGUgYmxvY2sg
Y29udGFpbnMgc29tZSBuYXN0eSBvcGNvZGVzLgotICAgIGlmICghY2FuSW5saW5lRnVuY3Rpb25G
b3IoY29kZUJsb2NrLmdldCgpLCBraW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFT
U0VSVChjYW5JbmxpbmVGdW5jdGlvbkZvcihjb2RlQmxvY2ssIGtpbmQpKTsKIAogI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBwcmludGYoIklubGluaW5nIGV4ZWN1dGFibGUgJXAu
XG4iLCBleGVjdXRhYmxlKTsKQEAgLTk5OCw3ICs5OTUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2ldLT5l
bnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKICAgICB9CiAKLSAgICBJbmxpbmVTdGFja0VudHJ5
IGlubGluZVN0YWNrRW50cnkodGhpcywgY29kZUJsb2NrLmdldCgpLCBwcm9maWxlZEJsb2NrLCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEsIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxUYXJnZXQpLCBleHBlY3RlZEZ1bmN0aW9uLCAoVmlydHVh
bFJlZ2lzdGVyKW1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh1c2VzUmVzdWx0ID8gcmVz
dWx0T3BlcmFuZCA6IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpLCAoVmlydHVhbFJlZ2lzdGVyKWlu
bGluZUNhbGxGcmFtZVN0YXJ0LCBraW5kKTsKKyAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0
YWNrRW50cnkodGhpcywgY29kZUJsb2NrLCBwcm9maWxlZEJsb2NrLCBtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKSAtIDEsIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVy
YW5kKGNhbGxUYXJnZXQpLCBleHBlY3RlZEZ1bmN0aW9uLCAoVmlydHVhbFJlZ2lzdGVyKW1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh1c2VzUmVzdWx0ID8gcmVzdWx0T3BlcmFuZCA6IElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIpLCAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0
YXJ0LCBraW5kKTsKICAgICAKICAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgaW5saW5p
bmcgcmVhbGx5IGhhcHBlbnMuCiAgICAgdW5zaWduZWQgb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRl
eDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IzMl82NC5jcHAJKHJldmlzaW9uIDk5ODE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MDgsNyArOTA4LDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNoZWRQdXRCeUlkKEdQ
UgogCiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CiAgICAgVl9E
RkdPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRDYWxsOwotICAgIGlmIChtX2ppdC5jb2RlQmxvY2so
KS0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICBpZiAobV9qaXQuc3RyaWN0TW9kZUZvcihhdChtX2Nv
bXBpbGVJbmRleCkuY29kZU9yaWdpbikpIHsKICAgICAgICAgaWYgKHB1dEtpbmQgPT0gRGlyZWN0
KQogICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3RPcHRpbWl6ZTsKICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAkocmV2aXNpb24gOTk4MTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzNyw3ICs4MzcsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmNh
Y2hlZFB1dEJ5SWQoR1BSCiAKICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BS
UmVnKTsKICAgICBWX0RGR09wZXJhdGlvbl9FSkNJIG9wdGltaXplZENhbGw7Ci0gICAgaWYgKG1f
aml0LmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSkgeworICAgIGlmIChtX2ppdC5zdHJpY3RN
b2RlRm9yKGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKSkgewogICAgICAgICBpZiAocHV0
S2luZCA9PSBEaXJlY3QpCiAgICAgICAgICAgICBvcHRpbWl6ZWRDYWxsID0gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdE9wdGltaXplOwogICAgICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9u
IDk5ODE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwNiw3ICsxNTA2LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIGFyZzNHUFIgPSBh
cmczLmdwcigpOwogICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2Rl
KCkgPyBvcGVyYXRpb25QdXRCeVZhbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
LCBhcmcxR1BSLCBhcmcyR1BSLCBhcmczR1BSKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
bV9qaXQuc3RyaWN0TW9kZUZvcihub2RlLmNvZGVPcmlnaW4pID8gb3BlcmF0aW9uUHV0QnlWYWxT
dHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdCwgYXJnMUdQUiwgYXJnMkdQUiwgYXJn
M0dQUik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHJldmlzaW9uIDk5ODE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzMCw2ICs1MzAsMTEgQEAgdm9pZCBIZWFwOjpoYXJ2ZXN0
V2Vha1JlZmVyZW5jZXMoKQogICAgIG1fc2xvdFZpc2l0b3IuaGFydmVzdFdlYWtSZWZlcmVuY2Vz
KCk7CiB9CiAKK3ZvaWQgSGVhcDo6ZmluYWxpemVVbHRyYVdlYWtEYXRhKCkKK3sKKyAgICBtX3Ns
b3RWaXNpdG9yLmZpbmFsaXplVWx0cmFXZWFrRGF0YSgpOworfQorCiBpbmxpbmUgUmVnaXN0ZXJG
aWxlJiBIZWFwOjpyZWdpc3RlckZpbGUoKQogewogICAgIHJldHVybiBtX2dsb2JhbERhdGEtPmlu
dGVycHJldGVyLT5yZWdpc3RlckZpbGUoKTsKQEAgLTY5NCw2ICs2OTksMTIgQEAgdm9pZCBIZWFw
OjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAgICAgICAgIH0gd2hpbGUgKGxhc3RPcGFxdWVSb290
Q291bnQgIT0gdmlzaXRvci5vcGFxdWVSb290Q291bnQoKSk7CiAgICAgfQogICAgIEdDQ09VTlRF
UihWaXNpdGVkVmFsdWVDb3VudCwgdmlzaXRvci52aXNpdENvdW50KCkpOworCisgICAgeworICAg
ICAgICBHQ1BIQVNFKEhhcnZlc3RXZWFrUmVmZXJlbmNlcyk7CisgICAgICAgIGhhcnZlc3RXZWFr
UmVmZXJlbmNlcygpOworICAgIH0KKwogICAgIHZpc2l0b3IucmVzZXQoKTsKICAgICBtX3NoYXJl
ZERhdGEucmVzZXQoKTsKIApAQCAtNzgxLDE0ICs3OTIsMTggQEAgdm9pZCBIZWFwOjpjb2xsZWN0
KFN3ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIH0KIAogICAgIG1hcmtSb290cyhmdWxsR0MpOwot
CisgICAgCiAgICAgewotICAgICAgICBHQ1BIQVNFKEhhcnZlc3RXZWFrUmVmZXJlbmNlcyk7Ci0g
ICAgICAgIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgICAgICBHQ1BIQVNFKEZpbmFsaXpl
VWx0cmFXZWFrRGF0YSk7CisgICAgICAgIGZpbmFsaXplVWx0cmFXZWFrRGF0YSgpOworICAgIH0K
KyAgICAgICAgCisgICAgeworICAgICAgICBHQ1BIQVNFKEZpbmFsaXplV2Vha0hhbmRsZXMpOwog
ICAgICAgICBtX2hhbmRsZUhlYXAuZmluYWxpemVXZWFrSGFuZGxlcygpOwogICAgICAgICBtX2ds
b2JhbERhdGEtPnNtYWxsU3RyaW5ncy5maW5hbGl6ZVNtYWxsU3RyaW5ncygpOwogICAgIH0KLQor
ICAgIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgpOwogCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gOTk4MTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw2ICsxNTUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBtYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9v
dFZpc2l0b3ImKTsKICAgICAgICAgdm9pZCBtYXJrVGVtcFNvcnRWZWN0b3JzKEhlYXBSb290Vmlz
aXRvciYpOwogICAgICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgICAgICB2
b2lkIGZpbmFsaXplVWx0cmFXZWFrRGF0YSgpOwogICAgICAgICAKICAgICAgICAgZW51bSBTd2Vl
cFRvZ2dsZSB7IERvTm90U3dlZXAsIERvU3dlZXAgfTsKICAgICAgICAgdm9pZCBjb2xsZWN0KFN3
ZWVwVG9nZ2xlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xpc3RhYmxlSGFu
ZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xpc3RhYmxl
SGFuZGxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTGlz
dGFibGVIYW5kbGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBMaXN0YWJsZUhhbmRsZXJfaAor
I2RlZmluZSBMaXN0YWJsZUhhbmRsZXJfaAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVk
ZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBN
YXJrU3RhY2s7CitjbGFzcyBNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOworY2xhc3MgU2xvdFZp
c2l0b3I7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBMaXN0YWJsZUhhbmRsZXIgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExpc3RhYmxlSGFuZGxlcik7CisgICAgCitwcm90ZWN0
ZWQ6CisgICAgTGlzdGFibGVIYW5kbGVyKCkKKyAgICAgICAgOiBtX25leHRBbmRGbGFnKDApCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIH5MaXN0YWJsZUhhbmRsZXIoKSB7IH0KKwor
cHJpdmF0ZToKKyAgICAvLyBBbGxvdyB0aGVzZSBjbGFzc2VzIHRvIHVzZSBMaXN0YWJsZUhhbmRs
ZXI6Okxpc3QuCisgICAgZnJpZW5kIGNsYXNzIE1hcmtTdGFjazsKKyAgICBmcmllbmQgY2xhc3Mg
TWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YTsKKyAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7
CisgICAgCisgICAgY2xhc3MgTGlzdCB7CisgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExp
c3QpOworICAgIHB1YmxpYzoKKyAgICAgICAgTGlzdCgpCisgICAgICAgICAgICA6IG1fZmlyc3Qo
MCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZE5vdFRo
cmVhZFNhZmUoVCogaGFuZGxlcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGhhbmRsZXIt
Pm1fbmV4dEFuZEZsYWcgJiAxKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IGhhbmRsZXItPm1fbmV4dEFuZEZsYWcgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9m
aXJzdCkgfCAxOworICAgICAgICAgICAgbV9maXJzdCA9IGhhbmRsZXI7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZvaWQgYWRkVGhyZWFkU2FmZShUKiBoYW5kbGVyKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBOT1RFOiBJZiB3ZSBldmVyIHdhbnQgdGhpcyB0byBiZSBmYXN0ZXIs
IHdlIGNvdWxkIHR1cm4gaXQgaW50bworICAgICAgICAgICAgLy8gYSBDQVMgbG9vcCwgc2luY2Ug
dGhpcyBpcyBhIHNpbmdseS1saW5rZWQtbGlzdCB0aGF0LCBpbiBwYXJhbGxlbAorICAgICAgICAg
ICAgLy8gdHJhY2luZyBtb2RlLCBjYW4gb25seSBncm93LiBJLmUuIHdlIGRvbid0IGhhdmUgdG8g
d29ycnkgYWJvdXQKKyAgICAgICAgICAgIC8vIGFueSBBQkEgcHJvYmxlbXMuCisgICAgICAgICAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgICAgIGFkZE5vdFRocmVhZFNh
ZmUoaGFuZGxlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaGFzTmV4dCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhIW1fZmlyc3Q7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFQqIHJlbW92ZU5leHQoKQorICAgICAgICB7CisgICAgICAgICAgICBU
KiBjdXJyZW50ID0gbV9maXJzdDsKKyAgICAgICAgICAgIFQqIG5leHQgPSByZWludGVycHJldF9j
YXN0PFQqPihjdXJyZW50LT5tX25leHRBbmRGbGFnICYgfjEpOworICAgICAgICAgICAgY3VycmVu
dC0+bV9uZXh0QW5kRmxhZyA9IDA7CisgICAgICAgICAgICBtX2ZpcnN0ID0gbmV4dDsKKyAgICAg
ICAgICAgIHJldHVybiBjdXJyZW50OworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6
CisgICAgICAgIE11dGV4IG1fbG9jazsKKyAgICAgICAgVCogbV9maXJzdDsKKyAgICB9OworICAg
IAorICAgIHVpbnRwdHJfdCBtX25leHRBbmRGbGFnOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBMaXN0YWJsZUhhbmRsZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiA5OTgxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw3ICsyMzYs
NiBAQCBNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpNYXJrU3RhY2tUaHJlCiAgICAgLCBtX3No
YXJlZE1hcmtTdGFjayhtX3NlZ21lbnRBbGxvY2F0b3IpCiAgICAgLCBtX251bWJlck9mQWN0aXZl
UGFyYWxsZWxNYXJrZXJzKDApCiAgICAgLCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQoZmFs
c2UpCi0gICAgLCBtX2ZpcnN0V2Vha1JlZmVyZW5jZUhhcnZlc3RlcigwKQogewogI2lmIEVOQUJM
RShQQVJBTExFTF9HQykKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgSGV1cmlzdGljczo6
bnVtYmVyT2ZHQ01hcmtlcnM7ICsraSkgewpAQCAtNDUwLDEzICs0NDksMTQgQEAgdm9pZCBNYXJr
U3RhY2s6Om1lcmdlT3BhcXVlUm9vdHMoKQogCiB2b2lkIFNsb3RWaXNpdG9yOjpoYXJ2ZXN0V2Vh
a1JlZmVyZW5jZXMoKQogewotICAgIHdoaWxlIChtX3NoYXJlZC5tX2ZpcnN0V2Vha1JlZmVyZW5j
ZUhhcnZlc3RlcikgewotICAgICAgICBXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBjdXJyZW50ID0g
bV9zaGFyZWQubV9maXJzdFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI7Ci0gICAgICAgIFdlYWtSZWZl
cmVuY2VIYXJ2ZXN0ZXIqIG5leHQgPSByZWludGVycHJldF9jYXN0PFdlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXIqPihjdXJyZW50LT5tX25leHRBbmRGbGFnICYgfjEpOwotICAgICAgICBjdXJyZW50LT5t
X25leHRBbmRGbGFnID0gMDsKLSAgICAgICAgbV9zaGFyZWQubV9maXJzdFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIgPSBuZXh0OwotICAgICAgICBjdXJyZW50LT52aXNpdFdlYWtSZWZlcmVuY2VzKCp0
aGlzKTsKLSAgICB9CisgICAgd2hpbGUgKG1fc2hhcmVkLm1fd2Vha1JlZmVyZW5jZUhhcnZlc3Rl
cnMuaGFzTmV4dCgpKQorICAgICAgICBtX3NoYXJlZC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJz
LnJlbW92ZU5leHQoKS0+dmlzaXRXZWFrUmVmZXJlbmNlcygqdGhpcyk7Cit9CisKK3ZvaWQgU2xv
dFZpc2l0b3I6OmZpbmFsaXplVWx0cmFXZWFrRGF0YSgpCit7CisgICAgd2hpbGUgKG1fc2hhcmVk
Lm1fdWx0cmFXZWFrRmluYWxpemVycy5oYXNOZXh0KCkpCisgICAgICAgIG1fc2hhcmVkLm1fdWx0
cmFXZWFrRmluYWxpemVycy5yZW1vdmVOZXh0KCktPmZpbmFsaXplVWx0cmFXZWFrRGF0YSgpOwog
fQogCiAjaWYgRU5BQkxFKEdDX1ZBTElEQVRJT04pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrU3RhY2suaAkocmV2aXNpb24gOTk4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lu
Y2x1ZGUgIkhldXJpc3RpY3MuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUmVn
aXN0ZXIuaCIKKyNpbmNsdWRlICJVbHRyYVdlYWtGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJWVGFi
bGVTcGVjdHJ1bS5oIgogI2luY2x1ZGUgIldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCIKICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMTk0LDggKzE5NSw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBNdXRleCBtX29wYXF1ZVJvb3RzTG9jazsKICAgICAgICAgSGFzaFNldDx2b2lkKj4g
bV9vcGFxdWVSb290czsKIAotICAgICAgICBNdXRleCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJM
b2NrOwotICAgICAgICBXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBtX2ZpcnN0V2Vha1JlZmVyZW5j
ZUhhcnZlc3RlcjsKKyAgICAgICAgTGlzdGFibGVIYW5kbGVyPFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXI+OjpMaXN0IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnM7CisgICAgICAgIExpc3RhYmxlSGFu
ZGxlcjxVbHRyYVdlYWtGaW5hbGl6ZXI+OjpMaXN0IG1fdWx0cmFXZWFrRmluYWxpemVyczsKICAg
ICB9OwogCiAgICAgY2xhc3MgTWFya1N0YWNrIHsKQEAgLTIyOSwxMSArMjMwLDEyIEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFr
UmVmZXJlbmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9zaGFyZWQubV93ZWFrUmVmZXJlbmNlSGFy
dmVzdGVyTG9jayk7Ci0gICAgICAgICAgICBpZiAod2Vha1JlZmVyZW5jZUhhcnZlc3Rlci0+bV9u
ZXh0QW5kRmxhZyAmIDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgd2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlci0+bV9uZXh0QW5kRmxhZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihtX3NoYXJlZC5tX2ZpcnN0V2Vha1JlZmVyZW5jZUhhcnZlc3RlcikgfCAxOwotICAg
ICAgICAgICAgbV9zaGFyZWQubV9maXJzdFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgPSB3ZWFrUmVm
ZXJlbmNlSGFydmVzdGVyOworICAgICAgICAgICAgbV9zaGFyZWQubV93ZWFrUmVmZXJlbmNlSGFy
dmVzdGVycy5hZGRUaHJlYWRTYWZlKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFVsdHJhV2Vha0ZpbmFsaXplcihVbHRyYVdlYWtG
aW5hbGl6ZXIqIHVsdHJhV2Vha0ZpbmFsaXplcikKKyAgICAgICAgeworICAgICAgICAgICAgbV9z
aGFyZWQubV91bHRyYVdlYWtGaW5hbGl6ZXJzLmFkZFRocmVhZFNhZmUodWx0cmFXZWFrRmluYWxp
emVyKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9TbG90VmlzaXRvci5oCShyZXZpc2lvbiA5OTgxNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4
LDcgQEAgcHVibGljOgogICAgIHZvaWQgZHJhaW5Gcm9tU2hhcmVkKFNoYXJlZERyYWluTW9kZSk7
CiAKICAgICB2b2lkIGhhcnZlc3RXZWFrUmVmZXJlbmNlcygpOworICAgIHZvaWQgZmluYWxpemVV
bHRyYVdlYWtEYXRhKCk7CiAgICAgICAgIAogcHJpdmF0ZToKICAgICB2b2lkIGRvbmF0ZVNsb3co
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1VsdHJhV2Vha0ZpbmFsaXplci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1VsdHJhV2Vha0ZpbmFs
aXplci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvVWx0cmFX
ZWFrRmluYWxpemVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBVbHRyYVdlYWtGaW5h
bGl6ZXJfaAorI2RlZmluZSBVbHRyYVdlYWtGaW5hbGl6ZXJfaAorCisjaW5jbHVkZSAiTGlzdGFi
bGVIYW5kbGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbiB1bHRyYS13ZWFrIGZpbmFs
aXplciBpcyB1c2VmdWwgZm9yIGNhY2hlcyB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvCisvLyBkZXN0
cm95IG9uIGVhY2ggR0MuIFRoaXMgaXMgY3VycmVudGx5IHVzZWQgZm9yIHRoZSBieXRlY29kZSBz
dHJlYW0KKy8vIGFzc29jaWF0ZWQgd2l0aCBlYWNoIENvZGVCbG9jay4KKworY2xhc3MgVWx0cmFX
ZWFrRmluYWxpemVyIDogcHVibGljIExpc3RhYmxlSGFuZGxlcjxVbHRyYVdlYWtGaW5hbGl6ZXI+
IHsKK3B1YmxpYzogICAgCisgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVWx0cmFXZWFrRGF0YSgp
ID0gMDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflVsdHJhV2Vha0ZpbmFsaXplcigpIHsg
fQorfTsKKworfQorCisjZW5kaWYgLy8gVWx0cmFXZWFrRmluYWxpemVyX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgJ
KHJldmlzaW9uIDk5ODE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVy
ZW5jZUhhcnZlc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBACiAjaWZuZGVm
IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJfaAogI2RlZmluZSBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
X2gKIAotI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgIkxpc3RhYmxlSGFuZGxlci5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMjgsMjQgKzI4LDE2IEBAIGNsYXNzIE1hcmtTdGFjazsK
IGNsYXNzIE1hcmtTdGFja1NoYXJlZERhdGE7CiBjbGFzcyBTbG90VmlzaXRvcjsKIAotY2xhc3Mg
V2Vha1JlZmVyZW5jZUhhcnZlc3RlciB7CitjbGFzcyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIDog
cHVibGljIExpc3RhYmxlSGFuZGxlcjxXZWFrUmVmZXJlbmNlSGFydmVzdGVyPiB7CiBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKSA9IDA7
CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlcigpCi0gICAgICAg
IDogbV9uZXh0QW5kRmxhZygwKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgdmlydHVhbCB+V2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcigpIHsgfQotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBN
YXJrU3RhY2s7Ci0gICAgZnJpZW5kIGNsYXNzIE1hcmtTdGFja1NoYXJlZERhdGE7Ci0gICAgZnJp
ZW5kIGNsYXNzIFNsb3RWaXNpdG9yOwotICAgIAotICAgIHVpbnRwdHJfdCBtX25leHRBbmRGbGFn
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTk4MTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2
LDMwICsxNTYsMzggQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYQog
ICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFsZXhpY2Fs
R2xvYmFsT2JqZWN0LT5ldmFsRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBjcmVhdGVFdmFsRXJyb3IoZXhlYywgIkV2YWwgaXMgZGlzYWJsZWQiKSk7Ci0gICAgUmVm
UHRyPEV2YWxOb2RlPiBldmFsTm9kZSA9IHBhcnNlPEV2YWxOb2RlPihnbG9iYWxEYXRhLCBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBtX3NvdXJjZSwgMCwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3Ry
aWN0IDogSlNQYXJzZU5vcm1hbCwgRXZhbE5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1
bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFtQ29kZSwgbGV4aWNhbEdsb2JhbE9iamVjdC0+ZGVi
dWdnZXIoKSwgZXhlYywgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKCFldmFsTm9kZSkgewotICAgICAg
ICBBU1NFUlQoZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKLSAgICB9Ci0g
ICAgcmVjb3JkUGFyc2UoZXZhbE5vZGUtPmZlYXR1cmVzKCksIGV2YWxOb2RlLT5oYXNDYXB0dXJl
ZFZhcmlhYmxlcygpLCBldmFsTm9kZS0+bGluZU5vKCksIGV2YWxOb2RlLT5sYXN0TGluZSgpKTsK
LQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xv
YmFsT2JqZWN0LmdldCgpOwotCi0gICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxv
Y2sgPSBtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpOwotICAgIEFTU0VSVCgoaml0VHlwZSA9PSBK
SVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7Ci0gICAgbV9l
dmFsQ29kZUJsb2NrID0gYWRvcHRQdHIobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgZ2xvYmFsT2Jq
ZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzY29wZUNoYWluTm9kZS0+bG9jYWxEZXB0aCgpLCBw
cmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKLSAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0
b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0
KCksIHNjb3BlQ2hhaW5Ob2RlLCBtX2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fZXZh
bENvZGVCbG9jay5nZXQoKSwgISFtX2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBPcHRp
bWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uKSkpOwotICAgIGlmICgoZXhjZXB0
aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewotICAgICAgICBtX2V2YWxDb2RlQmxvY2sg
PSBzdGF0aWNfcG9pbnRlcl9jYXN0PEV2YWxDb2RlQmxvY2s+KG1fZXZhbENvZGVCbG9jay0+cmVs
ZWFzZUFsdGVybmF0aXZlKCkpOworICAgIAorICAgIGlmICghIW1fZXZhbENvZGVCbG9jayAmJiBt
X2V2YWxDb2RlQmxvY2stPmNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkpIHsKKyAgICAgICAg
Qnl0ZWNvZGVEZXN0cnVjdGlvbkJsb2NrZXIgYmxvY2tlcihtX2V2YWxDb2RlQmxvY2suZ2V0KCkp
OworICAgICAgICBPd25QdHI8RXZhbENvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gYWRvcHRQdHIo
bmV3IEV2YWxDb2RlQmxvY2soQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICptX2V2YWxDb2Rl
QmxvY2spKTsKKyAgICAgICAgbmV3Q29kZUJsb2NrLT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNfcG9p
bnRlcl9jYXN0PENvZGVCbG9jaz4obV9ldmFsQ29kZUJsb2NrLnJlbGVhc2UoKSkpOworICAgICAg
ICBtX2V2YWxDb2RlQmxvY2sgPSBuZXdDb2RlQmxvY2sucmVsZWFzZSgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmICghbGV4aWNhbEdsb2JhbE9iamVjdC0+ZXZhbEVuYWJsZWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUV2YWxFcnJvcihleGVjLCAiRXZh
bCBpcyBkaXNhYmxlZCIpKTsKKyAgICAgICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9kZSA9IHBh
cnNlPEV2YWxOb2RlPihnbG9iYWxEYXRhLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBtX3NvdXJjZSwg
MCwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgRXZhbE5v
ZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6IEpTUGFyc2VQcm9ncmFt
Q29kZSwgbGV4aWNhbEdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgZXhlYywgJmV4Y2VwdGlvbik7
CisgICAgICAgIGlmICghZXZhbE5vZGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChleGNlcHRpb24p
OworICAgICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICAgICAgfQorICAgICAgICByZWNv
cmRQYXJzZShldmFsTm9kZS0+ZmVhdHVyZXMoKSwgZXZhbE5vZGUtPmhhc0NhcHR1cmVkVmFyaWFi
bGVzKCksIGV2YWxOb2RlLT5saW5lTm8oKSwgZXZhbE5vZGUtPmxhc3RMaW5lKCkpOworICAgICAg
ICAKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2Rl
LT5nbG9iYWxPYmplY3QuZ2V0KCk7CisgICAgICAgIAorICAgICAgICBPd25QdHI8Q29kZUJsb2Nr
PiBwcmV2aW91c0NvZGVCbG9jayA9IG1fZXZhbENvZGVCbG9jay5yZWxlYXNlKCk7CisgICAgICAg
IEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFwcmV2aW91
c0NvZGVCbG9jayk7CisgICAgICAgIG1fZXZhbENvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBFdmFs
Q29kZUJsb2NrKHRoaXMsIGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc2NvcGVD
aGFpbk5vZGUtPmxvY2FsRGVwdGgoKSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7Cisg
ICAgICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBC
eXRlY29kZUdlbmVyYXRvcihldmFsTm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsIG1fZXZhbENv
ZGVCbG9jay0+c3ltYm9sVGFibGUoKSwgbV9ldmFsQ29kZUJsb2NrLmdldCgpLCAhIW1fZXZhbENv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29t
cGlsYXRpb24pKSk7CisgICAgICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0
ZSgpKSkgeworICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2Fz
dDxFdmFsQ29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsK
KyAgICAgICAgICAgIGV2YWxOb2RlLT5kZXN0cm95RGF0YSgpOworICAgICAgICAgICAgcmV0dXJu
IGV4Y2VwdGlvbjsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgZXZhbE5vZGUtPmRlc3Ry
b3lEYXRhKCk7Ci0gICAgICAgIHJldHVybiBleGNlcHRpb247CisgICAgICAgIG1fZXZhbENvZGVC
bG9jay0+Y29weVBvc3RQYXJzZURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsKICAgICB9CiAKLSAgICBl
dmFsTm9kZS0+ZGVzdHJveURhdGEoKTsKLSAgICBtX2V2YWxDb2RlQmxvY2stPmNvcHlEYXRhRnJv
bUFsdGVybmF0aXZlKCk7Ci0KICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxE
YXRhKCkuY2FuVXNlSklUKCkpIHsKICAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOwpA
QCAtMTk4LDcgKzIwNiw3IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVy
bmEKICAgICAgICAgfQogI2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAo
IUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKLSAgICAgICAgICAgIG1f
ZXZhbENvZGVCbG9jay0+ZGlzY2FyZEJ5dGVjb2RlKCk7CisgICAgICAgICAgICBtX2V2YWxDb2Rl
QmxvY2stPmhhbmRsZUJ5dGVjb2RlRGlzY2FyZGluZ09wcG9ydHVuaXR5KCk7CiAjZW5kaWYKICAg
ICAgICAgbV9ldmFsQ29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGwsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICB9CkBAIC0yOTAsMjggKzI5OCwzNiBAQCBKU09iamVj
dCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAgICAgSlNPYmplY3QqIGV4Y2VwdGlv
biA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKICAgICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKTsKLSAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0g
cGFyc2U8UHJvZ3JhbU5vZGU+KGdsb2JhbERhdGEsIGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291
cmNlLCAwLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBQ
cm9ncmFtTm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJz
ZVByb2dyYW1Db2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBleGVjLCAmZXhj
ZXB0aW9uKTsKLSAgICBpZiAoIXByb2dyYW1Ob2RlKSB7Ci0gICAgICAgIEFTU0VSVChleGNlcHRp
b24pOwotICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwotICAgIH0KLSAgICByZWNvcmRQYXJzZShw
cm9ncmFtTm9kZS0+ZmVhdHVyZXMoKSwgcHJvZ3JhbU5vZGUtPmhhc0NhcHR1cmVkVmFyaWFibGVz
KCksIHByb2dyYW1Ob2RlLT5saW5lTm8oKSwgcHJvZ3JhbU5vZGUtPmxhc3RMaW5lKCkpOworICAg
IAorICAgIGlmICghIW1fcHJvZ3JhbUNvZGVCbG9jayAmJiBtX3Byb2dyYW1Db2RlQmxvY2stPmNh
blByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkpIHsKKyAgICAgICAgQnl0ZWNvZGVEZXN0cnVjdGlv
bkJsb2NrZXIgYmxvY2tlcihtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpOworICAgICAgICBPd25Q
dHI8UHJvZ3JhbUNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gYWRvcHRQdHIobmV3IFByb2dyYW1D
b2RlQmxvY2soQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICptX3Byb2dyYW1Db2RlQmxvY2sp
KTsKKyAgICAgICAgbmV3Q29kZUJsb2NrLT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNfcG9pbnRlcl9j
YXN0PENvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJsb2NrLnJlbGVhc2UoKSkpOworICAgICAgICBt
X3Byb2dyYW1Db2RlQmxvY2sgPSBuZXdDb2RlQmxvY2sucmVsZWFzZSgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIFJlZlB0cjxQcm9ncmFtTm9kZT4gcHJvZ3JhbU5vZGUgPSBwYXJzZTxQcm9ncmFt
Tm9kZT4oZ2xvYmFsRGF0YSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIDAsIGlzU3Ry
aWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIFByb2dyYW1Ob2RlOjpp
c0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUs
IGxleGljYWxHbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIGV4ZWMsICZleGNlcHRpb24pOworICAg
ICAgICBpZiAoIXByb2dyYW1Ob2RlKSB7CisgICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsK
KyAgICAgICAgICAgIHJldHVybiBleGNlcHRpb247CisgICAgICAgIH0KKyAgICAgICAgcmVjb3Jk
UGFyc2UocHJvZ3JhbU5vZGUtPmZlYXR1cmVzKCksIHByb2dyYW1Ob2RlLT5oYXNDYXB0dXJlZFZh
cmlhYmxlcygpLCBwcm9ncmFtTm9kZS0+bGluZU5vKCksIHByb2dyYW1Ob2RlLT5sYXN0TGluZSgp
KTsKIAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+
Z2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKICAgICAKLSAgICBPd25QdHI8
Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fcHJvZ3JhbUNvZGVCbG9jay5yZWxlYXNl
KCk7Ci0gICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0g
IXByZXZpb3VzQ29kZUJsb2NrKTsKLSAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihu
ZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBHbG9iYWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJj
ZSgpLnByb3ZpZGVyKCksIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2UoKSkpOwotICAgIE93blB0
cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFkb3B0UHRyKG5ldyBCeXRlY29kZUdlbmVy
YXRvcihwcm9ncmFtTm9kZS5nZXQoKSwgc2NvcGVDaGFpbk5vZGUsICZnbG9iYWxPYmplY3QtPnN5
bWJvbFRhYmxlKCksIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgISFtX3Byb2dyYW1Db2RlQmxv
Y2stPmFsdGVybmF0aXZlKCkgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0
aW9uKSkpOwotICAgIGlmICgoZXhjZXB0aW9uID0gZ2VuZXJhdG9yLT5nZW5lcmF0ZSgpKSkgewot
ICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2dyYW1D
b2RlQmxvY2s+KG1fcHJvZ3JhbUNvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAg
ICAgICBPd25QdHI8Q29kZUJsb2NrPiBwcmV2aW91c0NvZGVCbG9jayA9IG1fcHJvZ3JhbUNvZGVC
bG9jay5yZWxlYXNlKCk7CisgICAgICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0
b21UaWVySklUKCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7CisgICAgICAgIG1fcHJvZ3JhbUNv
ZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBQcm9ncmFtQ29kZUJsb2NrKHRoaXMsIEdsb2JhbENvZGUs
IGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgcHJldmlvdXNDb2RlQmxvY2sucmVs
ZWFzZSgpKSk7CisgICAgICAgIE93blB0cjxCeXRlY29kZUdlbmVyYXRvcj4gZ2VuZXJhdG9yKGFk
b3B0UHRyKG5ldyBCeXRlY29kZUdlbmVyYXRvcihwcm9ncmFtTm9kZS5nZXQoKSwgc2NvcGVDaGFp
bk5vZGUsICZnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCksIG1fcHJvZ3JhbUNvZGVCbG9jay5n
ZXQoKSwgISFtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBPcHRpbWl6aW5nQ29t
cGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uKSkpOworICAgICAgICBpZiAoKGV4Y2VwdGlvbiA9
IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKKyAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9j
ayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jaz4obV9wcm9ncmFtQ29kZUJs
b2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgICAgICAgICBwcm9ncmFtTm9kZS0+ZGVz
dHJveURhdGEoKTsKKyAgICAgICAgICAgIHJldHVybiBleGNlcHRpb247CisgICAgICAgIH0KKwog
ICAgICAgICBwcm9ncmFtTm9kZS0+ZGVzdHJveURhdGEoKTsKLSAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbjsKKyAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5jb3B5UG9zdFBhcnNlRGF0YUZyb21B
bHRlcm5hdGl2ZSgpOwogICAgIH0KIAotICAgIHByb2dyYW1Ob2RlLT5kZXN0cm95RGF0YSgpOwot
ICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+Y29weURhdGFGcm9tQWx0ZXJuYXRpdmUoKTsKLQogI2lm
IEVOQUJMRShKSVQpCiAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkgewog
ICAgICAgICBib29sIGRmZ0NvbXBpbGVkID0gZmFsc2U7CkBAIC0zMjksNyArMzQ1LDcgQEAgSlNP
YmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZQogICAgICAgICB9CiAjaWYgIUVO
QUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1
bXBzR2VuZXJhdGVkQ29kZSgpKQotICAgICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrLT5kaXNj
YXJkQnl0ZWNvZGUoKTsKKyAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+aGFuZGxlQnl0
ZWNvZGVEaXNjYXJkaW5nT3Bwb3J0dW5pdHkoKTsKICNlbmRpZgogICAgICAgICBtX3Byb2dyYW1D
b2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlRm9yQ2FsbCwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCkpOwogICAgIH0KQEAgLTM4OCw5ICs0MDQsOSBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxl
OjpjbGVhckNvZGVWaXJ0dWFsCiAgICAgQmFzZTo6Y2xlYXJDb2RlVmlydHVhbCgpOwogfQogCi1D
b2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YmFzZWxpbmVDb2RlQmxvY2tGb3IoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQorRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6YmFzZWxpbmVDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQog
ewotICAgIENvZGVCbG9jayogcmVzdWx0OworICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1bHQ7
CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCiAgICAgICAgIHJlc3VsdCA9IG1fY29kZUJs
b2NrRm9yQ2FsbC5nZXQoKTsKICAgICBlbHNlIHsKQEAgLTQwMCw3ICs0MTYsNyBAQCBDb2RlQmxv
Y2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YmFzZWxpbmVDCiAgICAgaWYgKCFyZXN1bHQpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIHdoaWxlIChyZXN1bHQtPmFsdGVybmF0aXZlKCkpCi0gICAgICAg
IHJlc3VsdCA9IHJlc3VsdC0+YWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihyZXN1bHQtPmFsdGVybmF0aXZlKCkpOwogICAgIEFT
U0VSVChyZXN1bHQpOwogICAgIEFTU0VSVChyZXN1bHQtPmdldEpJVFR5cGUoKSA9PSBKSVRDb2Rl
OjpCYXNlbGluZUpJVCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQyOCw4ICs0NDQsMjEgQEAg
SlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdAogICAgIHJldHVybiBlcnJv
cjsKIH0KIAorRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29kZUJsb2Nr
V2l0aEJ5dGVjb2RlRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBGdW5j
dGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7Cisg
ICAgaWYgKGNvZGVCbG9jay0+Y2FuUHJvZHVjZUNvcHlXaXRoQnl0ZWNvZGUoKSkKKyAgICAgICAg
cmV0dXJuIGNvZGVCbG9jazsKKyAgICByZXR1cm4gMDsKK30KKwogUGFzc093blB0cjxGdW5jdGlv
bkNvZGVCbG9jaz4gRnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgQ29tcGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2lu
ZCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYg
ZXhjZXB0aW9uKQogeworICAgIGlmICghIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQp
ICYmIGNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpLT5jYW5Qcm9kdWNlQ29weVdpdGhC
eXRlY29kZSgpKSB7CisgICAgICAgIEJ5dGVjb2RlRGVzdHJ1Y3Rpb25CbG9ja2VyIGJsb2NrZXIo
Y29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkuZ2V0KCkpOworICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2Nr
LCAqY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkpKTsKKyAgICB9CisgICAgCiAgICAg
ZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWlu
Tm9kZS0+Z2xvYmFsRGF0YTsKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2Nv
cGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKQEAgLTQ1Myw3ICs0ODIsNyBAQCBQYXNz
T3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4CiAgICAgaWYgKGV4Y2VwdGlvbikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXN1bHQtPmNvcHlEYXRhRnJvbShjb2Rl
QmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKS5nZXQoKSk7CisgICAgcmVzdWx0LT5jb3B5UG9z
dFBhcnNlRGF0YUZyb20oY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkuZ2V0KCkpOwog
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCkBAIC00OTgsNyArNTI3LDcgQEAgSlNP
YmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgICAgICB9CiAjaWYgIUVO
QUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1
bXBzR2VuZXJhdGVkQ29kZSgpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDYWxsLT5kaXNj
YXJkQnl0ZWNvZGUoKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+aGFuZGxlQnl0
ZWNvZGVEaXNjYXJkaW5nT3Bwb3J0dW5pdHkoKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAg
bV9jb2RlQmxvY2tGb3JDYWxsLT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGwsIG1faml0Q29k
ZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7CkBAIC01NjEsNyArNTkwLDcgQEAgSlNPYmplY3QqIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgICAgICB9CiAjaWYgIUVOQUJMRShPUENP
REVfU0FNUExJTkcpCiAgICAgICAgIGlmICghQnl0ZWNvZGVHZW5lcmF0b3I6OmR1bXBzR2VuZXJh
dGVkQ29kZSgpKQotICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmRpc2NhcmRC
eXRlY29kZSgpOworICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmhhbmRsZUJ5
dGVjb2RlRGlzY2FyZGluZ09wcG9ydHVuaXR5KCk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAg
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNvbnN0cnVj
dCwgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2spOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTk4MTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3OCw2ICs0NzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAq
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIEZ1
bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2tXaXRoQnl0ZWNvZGVGb3IoQ29kZVNwZWNpYWxpemF0
aW9uS2luZCk7CisgICAgICAgIAogICAgICAgICBQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2Nr
PiBwcm9kdWNlQ29kZUJsb2NrRm9yKFNjb3BlQ2hhaW5Ob2RlKiwgQ29tcGlsYXRpb25LaW5kLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlvbik7CiAKICAgICAgICAg
SlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW5Ob2RlKQpAQCAtNTg2LDkgKzU4OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEJ5dGVjb2RlRm9yQ29uc3RydWN0KCk7CiAgICAgICAg
IH0KIAotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOworICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgIAotICAgICAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAg
ICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGJhc2VsaW5l
Q29kZUJsb2NrRm9yKGtpbmQpOwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114468</attachid>
            <date>2011-11-10 04:07:25 -0800</date>
            <delta_ts>2011-11-10 12:06:47 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>dontreparse_patch_3.diff</filename>
            <type>text/plain</type>
            <size>58463</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTk4MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEzIEBA
CisyMDExLTExLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBub3QgcmVwYXJzZSBjb2RlIHRoYXQgd2FzIGp1c3QgcGFyc2VkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTk3NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhlIGluc3Ry
dWN0aW9uIHN0cmVhbSBvZiBhIGNvZGUgYmxvY2sgaXMgbm93IGtlcHQgYXJvdW5kIHVudGlsCisg
ICAgICAgIHRoZSBuZXh0IEdDLiBXaGVuIGRvaW5nIGVpdGhlciBhbiBvcHRpbWl6aW5nIGNvbXBp
bGF0aW9uIG9mIGFuCisgICAgICAgIGV4ZWN1dGFibGUsIG9yIGlubGluaW5nIG9mIGFuIGV4ZWN1
dGFibGUsIHdlIG5vdyB0cnkgdG8gZmluZCB0aGUKKyAgICAgICAgYWxyZWFkeSBwcmVleGlzdGlu
ZyBieXRlY29kZS4gSWYgd2UgZmluZCBpdCwgd2UgZG9uJ3QgaGF2ZSB0byBwYXJzZS4KKyAgICAg
ICAgSWYgd2UgZG9uJ3QgZmluZCBpdCwgd2UgcGFyc2UgYXMgYmVmb3JlLiBJbmxpbmluZyB0YWtl
cyB0aGUgZXh0cmEKKyAgICAgICAgc3RlcCBvZiBjYWNoaW5nIGNvZGUgYmxvY2tzLCBzbyBpZiB0
aGUgc2FtZSBleGVjdXRhYmxlIGdldHMgaW5saW5lZAorICAgICAgICBtdWx0aXBsZSB0aW1lcyBp
bnRvIHRoZSBzYW1lIGNhbGxlciwgdGhlbiB3ZSBwYXJzZSBpdCBhdCBtb3N0IG9uY2UKKyAgICAg
ICAgZXZlbiBpZiBwcmlvciB0byBpbmxpbmluZyB0aGF0IGV4ZWN1dGFibGUgZGlkIG5vdCBoYXZl
IGFueSBjb2RlCisgICAgICAgIGJsb2NrcyB3aXRoIGFuIGluc3RydWN0aW9uIHN0cmVhbS4KKyAg
ICAgICAgCisgICAgICAgIEFsc28gZml4ZWQgYSBzaWxseSBidWcgd2hlcmUgdGhlIHN0cmljdCBt
b2RlIGZvciB2YXJpb3VzIG9wZXJhdGlvbnMKKyAgICAgICAgd2FzIGJlaW5nIGRldGVybWluZWQg
YnkgbG9va2luZyBhdCB0aGUgbWFjaGluZSBjb2RlIGJsb2NrIHJhdGhlcgorICAgICAgICB0aGFu
IHRoZSBpbmxpbmVlLgorCisgICAgICAgIFRvIGVuYWJsZSB0aGUgZGVsZXRlLW9uLW5leHQtR0Mg
cG9saWN5LCBJIGludHJvZHVjZWQgdGhlIG5vdGlvbgorICAgICAgICBvZiBhbiB1bHRyYSB3ZWFr
IGZpbmFsaXplciwgd2hpY2ggYW55b25lIGNhbiByZWdpc3RlciBkdXJpbmcKKyAgICAgICAgdHJh
Y2luZy4gVGhpcyBpcyB0aHJlYWQtc2FmZSAoZm9yIHBhcmFsbGVsIEdDKSBhbmQKKyAgICAgICAg
c3RvcC10aGUtd29ybGQtc2FmZSAoc28gY2FsbHMgdG8gZnJlZSgpIGFyZSBwb3N0cG9uZWQgdW50
aWwgdGhlCisgICAgICAgIHdvcmxkIGlzIHJlc3VtZWQpLiBUaGlzIHJlcXVpcmVkIHJldXNpbmcg
c29tZSBmYWNpbGl0aWVzIHByZXZpb3VzbHkKKyAgICAgICAgY3JlYXRlZCBmb3IgV2Vha1JlZmVy
ZW5jZUhhcnZlc3Rlciwgc28gSSBjcmVhdGVkIGEgY29tbW9uIHV0aWxpdHkKKyAgICAgICAgY2xh
c3MuIEkgYWxzbyByZXR3ZWFrZWQgdGhlIGhhbmRsaW5nIG9mIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXJzLAorICAgICAgICBzaW5jZSB0aGV5IHNob3VsZCBiZSBleGVjdXRlZCBkdXJpbmcgc3RvcC10
aGUtd29ybGQgc2luY2UgaW4gdGhlCisgICAgICAgIGZ1dHVyZSB3ZSBtYXkgd2FudCB0byBhbGxv
dyB0aGVtIHRvIGNhbGwgZHJhaW4oKS4KKyAgICAgICAgCisgICAgICAgIDIlIHdpbiBvbiBTdW5T
cGlkZXIuIDIlIHdpbiBvbiBWOCwgd2hlbiBydW4gaW4gbXkgaGFybmVzcy4gTmV1dHJhbAorICAg
ICAgICBlbHNld2hlcmUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2
aXNpdEFnZ3JlZ2F0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29weVBvc3RQYXJzZURh
dGFGcm9tKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3B5UG9zdFBhcnNlRGF0YUZyb21B
bHRlcm5hdGl2ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxpemVVbHRyYVdlYWtE
YXRhKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpjYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6ZGlzY2FyZEJ5dGVjb2RlTGF0ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhh
bmRsZUJ5dGVjb2RlRGlzY2FyZGluZ09wcG9ydHVuaXR5KToKKyAgICAgICAgKEpTQzo6R2xvYmFs
Q29kZUJsb2NrOjpHbG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJs
b2NrOjpQcm9ncmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6RXZh
bENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpGdW5jdGlvbkNv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRGVzdHJ1Y3Rpb25CbG9ja2VyOjpCeXRl
Y29kZURlc3RydWN0aW9uQmxvY2tlcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlRGVzdHJ1Y3Rp
b25CbG9ja2VyOjp+Qnl0ZWNvZGVEZXN0cnVjdGlvbkJsb2NrZXIpOgorICAgICAgICAqIGRmZy9E
RkdBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6
OnN0cmljdE1vZGVGb3IpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZUNhY2hlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OkNvZGVCbG9ja0tleTo6Q29kZUJsb2NrS2V5KToKKyAgICAg
ICAgKEpTQzo6REZHOjpDb2RlQmxvY2tLZXk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvZGVCbG9ja0tleTo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29kZUJsb2NrS2V5
OjpleGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpDb2RlQmxvY2tLZXk6OmtpbmQpOgor
ICAgICAgICAoSlNDOjpERkc6OkNvZGVCbG9ja0tleTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUp
OgorICAgICAgICAoSlNDOjpERkc6OkNvZGVCbG9ja0tleUhhc2g6Omhhc2gpOgorICAgICAgICAo
SlNDOjpERkc6OkNvZGVCbG9ja0tleUhhc2g6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZUNhY2hlOjpCeXRlQ29kZUNhY2hlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZUNhY2hlOjp+Qnl0ZUNvZGVDYWNoZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVDYWNo
ZTo6Z2V0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgICogZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29k
ZUdlbmVyYXRvcjo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3I2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVk
UHV0QnlJZCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBoZWFwL0hl
YXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpmaW5hbGl6ZVVsdHJhV2Vha0RhdGEpOgorICAg
ICAgICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0
KToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL0xpc3RhYmxlSGFuZGxl
ci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TGlzdGFibGVIYW5kbGVyOjpMaXN0YWJsZUhhbmRs
ZXIpOgorICAgICAgICAoSlNDOjpMaXN0YWJsZUhhbmRsZXI6On5MaXN0YWJsZUhhbmRsZXIpOgor
ICAgICAgICAoSlNDOjpMaXN0YWJsZUhhbmRsZXI6Okxpc3Q6Okxpc3QpOgorICAgICAgICAoSlND
OjpMaXN0YWJsZUhhbmRsZXI6Okxpc3Q6OmFkZE5vdFRocmVhZFNhZmUpOgorICAgICAgICAoSlND
OjpMaXN0YWJsZUhhbmRsZXI6Okxpc3Q6OmFkZFRocmVhZFNhZmUpOgorICAgICAgICAoSlNDOjpM
aXN0YWJsZUhhbmRsZXI6Okxpc3Q6Omhhc05leHQpOgorICAgICAgICAoSlNDOjpMaXN0YWJsZUhh
bmRsZXI6Okxpc3Q6OnJlbW92ZU5leHQpOgorICAgICAgICAqIGhlYXAvTWFya1N0YWNrLmNwcDoK
KyAgICAgICAgKEpTQzo6TWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YTo6TWFya1N0YWNrVGhyZWFk
U2hhcmVkRGF0YSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpoYXJ2ZXN0V2Vha1JlZmVy
ZW5jZXMpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZmluYWxpemVVbHRyYVdlYWtEYXRh
KToKKyAgICAgICAgKiBoZWFwL01hcmtTdGFjay5oOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6
OmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmFk
ZFVsdHJhV2Vha0ZpbmFsaXplcik6CisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5oOgorICAg
ICAgICAqIGhlYXAvVWx0cmFXZWFrRmluYWxpemVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpV
bHRyYVdlYWtGaW5hbGl6ZXI6On5VbHRyYVdlYWtGaW5hbGl6ZXIpOgorICAgICAgICAqIGhlYXAv
V2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOgorICAgICAgICAoSlNDOjpXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyKToKKyAgICAgICAgKEpTQzo6V2Vha1JlZmVy
ZW5jZUhhcnZlc3Rlcjo6fldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjb21waWxl
SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGVy
bmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9j
a0Zvcik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29kZUJsb2NrV2l0aEJ5
dGVjb2RlRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29k
ZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9y
Q2FsbEludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
Rm9yQ29uc3RydWN0SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgor
ICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2ZpbGVkQ29kZUJsb2NrRm9yKToK
KwogMjAxMS0xMS0wOSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAg
ICAgICBUb3dhcmRzIDggQml0IFN0cmluZ3M6IFRlbXBsYXRpemUgSlNDOjpMaXRlcmFsUGFyc2Vy
IGNsYXNzIGJ5IGNoYXJhY3RlciB0eXBlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gOTk4MzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQs
OCBAQAogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDUxNDYwQ0JB
QjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVh
bFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNEIxNDYwQ0Q2
RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY0MzE3
MzgxNDZCQUM2OTAwN0UzODkwIC8qIExpc3RhYmxlSGFuZGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MzE3MzYxNDZCQUM2NTAwN0UzODkwIC8q
IExpc3RhYmxlSGFuZGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGNDMxNzM5MTQ2QkFDNkIwMDdFMzg5MCAvKiBVbHRyYVdlYWtGaW5hbGl6
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDMx
NzM3MTQ2QkFDNjUwMDdFMzg5MCAvKiBVbHRyYVdlYWtGaW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3NDE0M0ZDRDMzMDA2
OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY2MjAxNzUxNDNGQ0QzNzAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3MTE0M0ZD
RDJGMDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFz
aWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODI5LDYgKzgzMSw5IEBACiAJ
CTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3ZlcnkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERh
dGFGb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YUZvcm1hdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQzMTczNjE0NkJBQzY1MDA3RTM4OTAg
LyogTGlzdGFibGVIYW5kbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExp
c3RhYmxlSGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQzMTczNzE0
NkJBQzY1MDA3RTM4OTAgLyogVWx0cmFXZWFrRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFVsdHJhV2Vha0ZpbmFsaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjVGMDhDQzE0NkJFNjAyMDAwNDcyQTkgLyogREZHQnl0ZUNvZGVDYWNoZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCeXRlQ29kZUNhY2hlLmg7IHBh
dGggPSBkZmcvREZHQnl0ZUNvZGVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdFN0YXRlLmNwcDsgcGF0
aCA9IGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RTdGF0ZS5oOyBwYXRoID0gZGZn
L0RGR0Fic3RyYWN0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAx
NkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MDEsNiArMTcwNiw4
IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjQzMTczNjE0NkJBQzY1MDA3RTM4OTAg
LyogTGlzdGFibGVIYW5kbGVyLmggKi8sCisJCQkJMEY0MzE3MzcxNDZCQUM2NTAwN0UzODkwIC8q
IFVsdHJhV2Vha0ZpbmFsaXplci5oICovLAogCQkJCTBGRDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAv
KiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgKi8sCiAJCQkJMEZEODJGMjkxNDI2Q0E1QTAwMTc5
Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggKi8sCiAJCQkJQTcwNDU2QUUxNDI3RkIwMzAw
MzdEQTY4IC8qIEFsbG9jYXRpb25TcGFjZS5jcHAgKi8sCkBAIC0yMzE3LDYgKzIzMjQsNyBAQAog
CQk4NkVDOURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjVGMDhDQzE0NkJFNjAyMDAwNDcyQTkgLyogREZH
Qnl0ZUNvZGVDYWNoZS5oICovLAogCQkJCTBGQzA5NzlGMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdU
aHVua3MuY3BwICovLAogCQkJCTBGQzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3Mu
aCAqLywKIAkJCQkwRkMwOTc5RDE0NkIyNzFFMDBDRjI0NDIgLyogREZHQ29ycmVjdGFibGVKdW1w
UG9pbnQuY3BwICovLApAQCAtMjk0Myw2ICsyOTUxLDggQEAKIAkJCQkwRkMwOTc3MTE0NjkzQUY1
MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMw
OTc5QzE0NkE3NzI1MDBDRjI0NDIgLyogREZHQ29ycmVjdGFibGVKdW1wUG9pbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQzA5N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGNDMxNzM4MTQ2QkFDNjkwMDdFMzg5MCAvKiBMaXN0YWJsZUhhbmRs
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDMxNzM5MTQ2QkFDNkIwMDdFMzg5MCAvKiBVbHRy
YVdlYWtGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk5ODMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0MDcsNiArMTQwNyw1OCBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcFN0YXRpc3RpY3MoKQogI2Vu
ZGlmCiB9CiAKK0NvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJs
b2NrJiBvdGhlciwgU3ltYm9sVGFibGUqIHN5bVRhYikKKyAgICA6IG1fZ2xvYmFsT2JqZWN0KG90
aGVyLm1fZ2xvYmFsT2JqZWN0KQorICAgICwgbV9oZWFwKG90aGVyLm1faGVhcCkKKyAgICAsIG1f
bnVtQ2FsbGVlUmVnaXN0ZXJzKG90aGVyLm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQorICAgICwgbV9u
dW1WYXJzKG90aGVyLm1fbnVtVmFycykKKyAgICAsIG1fbnVtQ2FwdHVyZWRWYXJzKG90aGVyLm1f
bnVtQ2FwdHVyZWRWYXJzKQorICAgICwgbV9udW1QYXJhbWV0ZXJzKG90aGVyLm1fbnVtUGFyYW1l
dGVycykKKyAgICAsIG1faXNDb25zdHJ1Y3RvcihvdGhlci5tX2lzQ29uc3RydWN0b3IpCisgICAg
LCBtX3Nob3VsZERpc2NhcmRCeXRlY29kZUxhdGVyKGZhbHNlKQorICAgICwgbV9vd25lckV4ZWN1
dGFibGUoKm90aGVyLm1fZ2xvYmFsRGF0YSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCks
IG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQorICAgICwgbV9nbG9iYWxEYXRhKG90aGVy
Lm1fZ2xvYmFsRGF0YSkKKyAgICAsIG1faW5zdHJ1Y3Rpb25zKG90aGVyLm1faW5zdHJ1Y3Rpb25z
KQorICAgICwgbV9pbnN0cnVjdGlvbkNvdW50KG90aGVyLm1faW5zdHJ1Y3Rpb25Db3VudCkKKyAg
ICAsIG1fdGhpc1JlZ2lzdGVyKG90aGVyLm1fdGhpc1JlZ2lzdGVyKQorICAgICwgbV9hcmd1bWVu
dHNSZWdpc3RlcihvdGhlci5tX2FyZ3VtZW50c1JlZ2lzdGVyKQorICAgICwgbV9hY3RpdmF0aW9u
UmVnaXN0ZXIob3RoZXIubV9hY3RpdmF0aW9uUmVnaXN0ZXIpCisgICAgLCBtX25lZWRzRnVsbFNj
b3BlQ2hhaW4ob3RoZXIubV9uZWVkc0Z1bGxTY29wZUNoYWluKQorICAgICwgbV91c2VzRXZhbChv
dGhlci5tX3VzZXNFdmFsKQorICAgICwgbV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24ob3RoZXIu
bV9pc051bWVyaWNDb21wYXJlRnVuY3Rpb24pCisgICAgLCBtX2lzU3RyaWN0TW9kZShvdGhlci5t
X2lzU3RyaWN0TW9kZSkKKyAgICAsIG1fY29kZVR5cGUob3RoZXIubV9jb2RlVHlwZSkKKyAgICAs
IG1fc291cmNlKG90aGVyLm1fc291cmNlKQorICAgICwgbV9zb3VyY2VPZmZzZXQob3RoZXIubV9z
b3VyY2VPZmZzZXQpCisgICAgLCBtX2dsb2JhbFJlc29sdmVJbmZvcyhvdGhlci5tX2dsb2JhbFJl
c29sdmVJbmZvcykKKyAgICAsIG1fanVtcFRhcmdldHMob3RoZXIubV9qdW1wVGFyZ2V0cykKKyAg
ICAsIG1fbG9vcFRhcmdldHMob3RoZXIubV9sb29wVGFyZ2V0cykKKyAgICAsIG1faWRlbnRpZmll
cnMob3RoZXIubV9pZGVudGlmaWVycykKKyAgICAsIG1fY29uc3RhbnRSZWdpc3RlcnMob3RoZXIu
bV9jb25zdGFudFJlZ2lzdGVycykKKyAgICAsIG1fZnVuY3Rpb25EZWNscyhvdGhlci5tX2Z1bmN0
aW9uRGVjbHMpCisgICAgLCBtX2Z1bmN0aW9uRXhwcnMob3RoZXIubV9mdW5jdGlvbkV4cHJzKQor
ICAgICwgbV9zeW1ib2xUYWJsZShzeW1UYWIpCisgICAgLCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0Nv
dW50ZXIoMCkKKyAgICAsIG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcigwKQorICAgICwgbV9vcHRp
bWl6YXRpb25EZWxheUNvdW50ZXIoMCkKKyAgICAsIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIoMCkKK3sKKyAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgCisgICAgaWYgKG90aGVy
Lm1fcmFyZURhdGEpIHsKKyAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAg
ICAgICAKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycyA9IG90aGVyLm1f
cmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnM7CisgICAgICAgIG1fcmFyZURhdGEtPm1fcmVn
ZXhwcyA9IG90aGVyLm1fcmFyZURhdGEtPm1fcmVnZXhwczsKKyAgICAgICAgbV9yYXJlRGF0YS0+
bV9jb25zdGFudEJ1ZmZlcnMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX2NvbnN0YW50QnVmZmVyczsK
KyAgICAgICAgbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzID0gb3RoZXIu
bV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzOworICAgICAgICBtX3JhcmVE
YXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMgPSBvdGhlci5tX3JhcmVEYXRhLT5tX2No
YXJhY3RlclN3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlcyA9IG90aGVyLm1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
czsKKyAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mbyA9IG90aGVyLm1fcmFyZURh
dGEtPm1fZXhwcmVzc2lvbkluZm87CisgICAgICAgIG1fcmFyZURhdGEtPm1fbGluZUluZm8gPSBv
dGhlci5tX3JhcmVEYXRhLT5tX2xpbmVJbmZvOworICAgIH0KK30KKwogQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBDb2RlVHlwZSBjb2RlVHlw
ZSwgSlNHbG9iYWxPYmplY3QgKmdsb2JhbE9iamVjdCwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRl
cj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgU3ltYm9sVGFibGUqIHN5
bVRhYiwgYm9vbCBpc0NvbnN0cnVjdG9yLCBQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRp
dmUpCiAgICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgb3du
ZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCiAgICAgLCBtX2hlYXAoJm1fZ2xvYmFsT2JqZWN0
LT5nbG9iYWxEYXRhKCkuaGVhcCkKQEAgLTE0MTQsNiArMTQ2Niw3IEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fbnVtVmFycygwKQogICAgICwgbV9u
dW1QYXJhbWV0ZXJzKDApCiAgICAgLCBtX2lzQ29uc3RydWN0b3IoaXNDb25zdHJ1Y3RvcikKKyAg
ICAsIG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlTGF0ZXIoZmFsc2UpCiAgICAgLCBtX293bmVyRXhl
Y3V0YWJsZShnbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlLCBvd25l
ckV4ZWN1dGFibGUpCiAgICAgLCBtX2dsb2JhbERhdGEoMCkKICAgICAsIG1faW5zdHJ1Y3Rpb25z
KGFkb3B0UmVmKG5ldyBJbnN0cnVjdGlvbnMpKQpAQCAtMTU5NSw2ICsxNjQ4LDEzIEBAIHZvaWQg
Q29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXQKICAgICBmb3IgKHVuc2lnbmVkIHBy
b2ZpbGVJbmRleCA9IDA7IHByb2ZpbGVJbmRleCA8IG51bWJlck9mVmFsdWVQcm9maWxlcygpOyAr
K3Byb2ZpbGVJbmRleCkKICAgICAgICAgdmFsdWVQcm9maWxlKHByb2ZpbGVJbmRleCktPmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbigpOwogI2VuZGlmCisgICAgCisjaWYgRU5BQkxFKEpJVCkgJiYg
IUVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAgLy8gS2lsbCBvZmYgc29tZSBieXRlY29kZS4g
V2UgY2FuJ3QgZG8gaXQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gYWNjaWRlbnRhbGx5
CisgICAgLy8gY2FsbCBpbnRvIG1hbGxvYyB3aGlsZSBpbiBzdG9wLXRoZS13b3JsZCBHQyBtb2Rl
LgorICAgIGlmIChoYXNJbnN0cnVjdGlvbnMoKSAmJiBtX3Nob3VsZERpc2NhcmRCeXRlY29kZUxh
dGVyKQorICAgICAgICB2aXNpdG9yLmFkZFVsdHJhV2Vha0ZpbmFsaXplcih0aGlzKTsKKyNlbmRp
ZgogfQogCiBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCkBAIC0xODIxLDcgKzE4ODEsNyBAQCBpbmxpbmUgdm9p
ZCByZXBsYWNlRXhpc3RpbmdFbnRyaWVzKFZlY3RvCiAgICAgICAgIHRhcmdldFtpXSA9IHNvdXJj
ZVtpXTsKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmNvcHlEYXRhRnJvbShDb2RlQmxvY2sqIGFsdGVy
bmF0aXZlKQordm9pZCBDb2RlQmxvY2s6OmNvcHlQb3N0UGFyc2VEYXRhRnJvbShDb2RlQmxvY2sq
IGFsdGVybmF0aXZlKQogewogICAgIGlmICghYWx0ZXJuYXRpdmUpCiAgICAgICAgIHJldHVybjsK
QEAgLTE4MzMsOSArMTg5Myw5IEBAIHZvaWQgQ29kZUJsb2NrOjpjb3B5RGF0YUZyb20oQ29kZUJs
b2NrKiAKICAgICAgICAgcmVwbGFjZUV4aXN0aW5nRW50cmllcyhtX3JhcmVEYXRhLT5tX2NvbnN0
YW50QnVmZmVycywgYWx0ZXJuYXRpdmUtPm1fcmFyZURhdGEtPm1fY29uc3RhbnRCdWZmZXJzKTsK
IH0KIAotdm9pZCBDb2RlQmxvY2s6OmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCkKK3ZvaWQgQ29k
ZUJsb2NrOjpjb3B5UG9zdFBhcnNlRGF0YUZyb21BbHRlcm5hdGl2ZSgpCiB7Ci0gICAgY29weURh
dGFGcm9tKG1fYWx0ZXJuYXRpdmUuZ2V0KCkpOworICAgIGNvcHlQb3N0UGFyc2VEYXRhRnJvbSht
X2FsdGVybmF0aXZlLmdldCgpKTsKIH0KIAogI2lmIEVOQUJMRShKSVQpCkBAIC0xOTE3LDYgKzE5
NzcsMTUgQEAgdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYQogfQogI2Vu
ZGlmCiAKK3ZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVsdHJhV2Vha0RhdGEoKQoreworI2lmIEVO
QUJMRShPUENPREVfU0FNUExJTkcpIHx8ICFFTkFCTEUoSklUKQorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworI2VuZGlmCisgICAgQVNTRVJUKG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlTGF0ZXIp
OworICAgIGRpc2NhcmRCeXRlY29kZSgpOworfQorCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVS
KQogYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk5ODMzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiUHJlZGljdGlvblRyYWNrZXIuaCIKICNpbmNs
dWRlICJSZWdFeHBPYmplY3QuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCisjaW5jbHVkZSAiVWx0
cmFXZWFrRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8
d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtMjM2
LDEwICsyMzcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgfQogI2VuZGlmCiAKLSAgICBjbGFz
cyBDb2RlQmxvY2sgeworICAgIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBVbHRyYVdlYWtGaW5h
bGl6ZXIgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpJVDsKKyAgICBwdWJsaWM6CisgICAgICAgIGVudW0gQ29weVBhcnNlZEJsb2NrVGFn
IHsgQ29weVBhcnNlZEJsb2NrIH07CiAgICAgcHJvdGVjdGVkOgorICAgICAgICBDb2RlQmxvY2so
Q29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyLCBTeW1ib2xUYWJsZSopOworICAg
ICAgICAKICAgICAgICAgQ29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgQ29kZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4s
IHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgU3ltYm9sVGFibGUqLCBib29sIGlzQ29uc3RydWN0b3Is
IFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSk7CiAKICAgICAgICAgV3JpdGVCYXJy
aWVyPEpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKQEAgLTI2NSw2ICsyNzAsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICNl
bmRpZgorICAgICAgICAKKyAgICAgICAgYm9vbCBjYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSgp
IHsgcmV0dXJuIGhhc0luc3RydWN0aW9ucygpOyB9CiAKICAgICAgICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYpOwogCkBAIC00NDMsNyArNDUwLDE4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBt
X2luc3RydWN0aW9ucy0+bV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgY29uc3QgVmVjdG9yPElu
c3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMt
Pm1faW5zdHJ1Y3Rpb25zOyB9CiAgICAgICAgIHZvaWQgZGlzY2FyZEJ5dGVjb2RlKCkgeyBtX2lu
c3RydWN0aW9ucy5jbGVhcigpOyB9Ci0KKyAgICAgICAgdm9pZCBkaXNjYXJkQnl0ZWNvZGVMYXRl
cigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlTGF0ZXIg
PSB0cnVlOworICAgICAgICB9CisgICAgICAgIHZvaWQgaGFuZGxlQnl0ZWNvZGVEaXNjYXJkaW5n
T3Bwb3J0dW5pdHkoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoISFhbHRlcm5hdGl2ZSgp
KQorICAgICAgICAgICAgICAgIGRpc2NhcmRCeXRlY29kZSgpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGRpc2NhcmRCeXRlY29kZUxhdGVyKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBib29sIHVzZXNPcGNvZGUoT3Bjb2RlSUQpOwog
I2VuZGlmCkBAIC04MDgsOCArODI2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9p
ZCBzaHJpbmtUb0ZpdCgpOwogICAgICAgICAKLSAgICAgICAgdm9pZCBjb3B5RGF0YUZyb20oQ29k
ZUJsb2NrKiBhbHRlcm5hdGl2ZSk7Ci0gICAgICAgIHZvaWQgY29weURhdGFGcm9tQWx0ZXJuYXRp
dmUoKTsKKyAgICAgICAgdm9pZCBjb3B5UG9zdFBhcnNlRGF0YUZyb20oQ29kZUJsb2NrKiBhbHRl
cm5hdGl2ZSk7CisgICAgICAgIHZvaWQgY29weVBvc3RQYXJzZURhdGFGcm9tQWx0ZXJuYXRpdmUo
KTsKICAgICAgICAgCiAgICAgICAgIC8vIEZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgd2hlbiB0
aWVyZWQgY29tcGlsYXRpb24ga2lja3MgaW4uIFRoaXMKICAgICAgICAgLy8gY29udHJvbHMgYm90
aCB3aGVuIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGlzIGludm9rZWQgYW5kIHdoZW4gT1NSCkBA
IC05OTYsNiArMTAxNCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaW50IG1fbnVtUGFy
YW1ldGVyczsKICAgICAgICAgYm9vbCBtX2lzQ29uc3RydWN0b3I7CiAKKyAgICAgICAgLy8gVGhp
cyBpcyBwdWJsaWMgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSBtYW55IGZyaWVuZHMu
CisgICAgICAgIGJvb2wgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGVMYXRlcjsKKworICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVWx0cmFXZWFrRGF0YSgpOworICAg
ICAgICAKICAgICBwcml2YXRlOgogI2lmICFkZWZpbmVkKE5ERUJVRykgfHwgRU5BQkxFKE9QQ09E
RV9TQU1QTElORykKICAgICAgICAgdm9pZCBkdW1wKEV4ZWNTdGF0ZSosIGNvbnN0IFZlY3RvcjxJ
bnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiBiZWdpbiwgVmVjdG9yPEluc3RydWN0aW9uPjo6
Y29uc3RfaXRlcmF0b3ImKSBjb25zdDsKQEAgLTEwMTQsNyArMTAzOCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgaWYgKCFtX3JhcmVEYXRhKQogICAgICAgICAgICAgICAgIG1fcmFy
ZURhdGEgPSBhZG9wdFB0cihuZXcgUmFyZURhdGEpOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAg
ICAgICAgIFdyaXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiBtX293bmVyRXhlY3V0YWJsZTsK
ICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAKQEAgLTExMjksNiArMTE1Mywx
MiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEdsb2JhbENvZGVCbG9jayA6IHB1Ymxp
YyBDb2RlQmxvY2sgewogICAgIHByb3RlY3RlZDoKKyAgICAgICAgR2xvYmFsQ29kZUJsb2NrKENv
cHlQYXJzZWRCbG9ja1RhZywgR2xvYmFsQ29kZUJsb2NrJiBvdGhlcikKKyAgICAgICAgICAgIDog
Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIsICZtX3Vuc2hhcmVkU3ltYm9sVGFibGUp
CisgICAgICAgICAgICAsIG1fdW5zaGFyZWRTeW1ib2xUYWJsZShvdGhlci5tX3Vuc2hhcmVkU3lt
Ym9sVGFibGUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgR2xvYmFs
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgQ29kZVR5cGUgY29k
ZVR5cGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFBhc3NSZWZQdHI8U291cmNlUHJv
dmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIFBhc3NPd25QdHI8
Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAgICAgICAgICAgIDogQ29kZUJsb2NrKG93bmVyRXhl
Y3V0YWJsZSwgY29kZVR5cGUsIGdsb2JhbE9iamVjdCwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9m
ZnNldCwgJm1fdW5zaGFyZWRTeW1ib2xUYWJsZSwgZmFsc2UsIGFsdGVybmF0aXZlKQogICAgICAg
ICB7CkBAIC0xMTQwLDYgKzExNzAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBQ
cm9ncmFtQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7CiAgICAgcHVibGljOgor
ICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgUHJvZ3JhbUNvZGVC
bG9jayYgb3RoZXIpCisgICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhDb3B5UGFyc2VkQmxv
Y2ssIG90aGVyKQorICAgICAgICB7CisgICAgICAgIH0KKwogICAgICAgICBQcm9ncmFtQ29kZUJs
b2NrKFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBl
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVy
PiBzb3VyY2VQcm92aWRlciwgUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKQogICAg
ICAgICAgICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCBjb2RlVHlwZSwgZ2xv
YmFsT2JqZWN0LCBzb3VyY2VQcm92aWRlciwgMCwgYWx0ZXJuYXRpdmUpCiAgICAgICAgIHsKQEAg
LTExNTYsNiArMTE5MSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEV2YWxDb2Rl
QmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKICAgICBwdWJsaWM6CisgICAgICAgIEV2
YWxDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29kZUJsb2NrJiBvdGhlcikKKyAg
ICAgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAg
ICAgICAgICAsIG1fYmFzZVNjb3BlRGVwdGgob3RoZXIubV9iYXNlU2NvcGVEZXB0aCkKKyAgICAg
ICAgICAgICwgbV92YXJpYWJsZXMob3RoZXIubV92YXJpYWJsZXMpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgRXZhbENvZGVCbG9jayhFdmFsRXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNv
dXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgaW50IGJhc2VTY29wZURlcHRoLCBQYXNzT3du
UHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpCiAgICAgICAgICAgICA6IEdsb2JhbENvZGVCbG9j
ayhvd25lckV4ZWN1dGFibGUsIEV2YWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZVByb3ZpZGVy
LCAwLCBhbHRlcm5hdGl2ZSkKICAgICAgICAgICAgICwgbV9iYXNlU2NvcGVEZXB0aChiYXNlU2Nv
cGVEZXB0aCkKQEAgLTExODcsNiArMTIyOSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNs
YXNzIEZ1bmN0aW9uQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7CiAgICAgcHVibGljOgor
ICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIEZ1bmN0aW9uQ29k
ZUJsb2NrJiBvdGhlcikKKyAgICAgICAgICAgIDogQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywg
b3RoZXIsIG90aGVyLnNoYXJlZFN5bWJvbFRhYmxlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIFRoZSBmYWN0IHRoYXQgd2UgaGF2ZSB0byBkbyB0aGlzIGlzIHl1Y2t5LCBidXQgaXMgbmVj
ZXNzYXJ5IGJlY2F1c2Ugb2YgdGhlCisgICAgICAgICAgICAvLyBjbGFzcyBoaWVyYXJjaHkgaXNz
dWVzIGRlc2NyaWJlZCBpbiB0aGUgY29tbWVudCBibG9jayBmb3IgdGhlIG1haW4KKyAgICAgICAg
ICAgIC8vIGNvbnN0cnVjdG9yLCBiZWxvdy4KKyAgICAgICAgICAgIHNoYXJlZFN5bWJvbFRhYmxl
KCktPnJlZigpOworICAgICAgICB9CisKICAgICAgICAgLy8gUmF0aGVyIHRoYW4gdXNpbmcgdGhl
IHVzdWFsIFJlZkNvdW50ZWQ6OmNyZWF0ZSBpZGlvbSBmb3IgU2hhcmVkU3ltYm9sVGFibGUgd2Ug
anVzdCB1c2UgbmV3CiAgICAgICAgIC8vIGFzIHdlIG5lZWQgdG8gaW5pdGlhbGlzZSB0aGUgQ29k
ZUJsb2NrIGJlZm9yZSB3ZSBjb3VsZCBpbml0aWFsaXNlIGFueSBSZWZQdHIgdG8gaG9sZCB0aGUg
c2hhcmVkCiAgICAgICAgIC8vIHN5bWJvbCB0YWJsZSwgc28gd2UganVzdCBwYXNzIGFzIGEgcmF3
IHBvaW50ZXIgd2l0aCBhIHJlZiBjb3VudCBvZiAxLiAgV2UgdGhlbiBtYW51YWxseSBkZXJlZgpA
QCAtMTIwOSw2ICsxMjYwLDI3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAgICAgfTsKIAor
ICAgIC8vIFVzZSB0aGlzIGlmIHlvdSB3YW50IHRvIGNvcHkgYSBjb2RlIGJsb2NrIGFuZCB5b3Un
cmUgcGFyYW5vaWQgYWJvdXQgYSBHQworICAgIC8vIGhhcHBlbmluZy4KKyAgICBjbGFzcyBCeXRl
Y29kZURlc3RydWN0aW9uQmxvY2tlciB7CisgICAgcHVibGljOgorICAgICAgICBCeXRlY29kZURl
c3RydWN0aW9uQmxvY2tlcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICAgICAgICAgIDogbV9j
b2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICAgICAgLCBtX29sZFZhbHVlT2ZTaG91bGREaXNj
YXJkQnl0ZWNvZGVMYXRlcihjb2RlQmxvY2stPm1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlTGF0ZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+bV9zaG91bGREaXNjYXJkQnl0ZWNv
ZGVMYXRlciA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB+Qnl0ZWNvZGVE
ZXN0cnVjdGlvbkJsb2NrZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+
bV9zaG91bGREaXNjYXJkQnl0ZWNvZGVMYXRlciA9IG1fb2xkVmFsdWVPZlNob3VsZERpc2NhcmRC
eXRlY29kZUxhdGVyOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgICAgIGJvb2wgbV9vbGRWYWx1ZU9mU2hvdWxk
RGlzY2FyZEJ5dGVjb2RlTGF0ZXI7CisgICAgfTsKKwogICAgIGlubGluZSBSZWdpc3RlciYgRXhl
Y1N0YXRlOjpyKGludCBpbmRleCkKICAgICB7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gdGhpcy0+Y29kZUJsb2NrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDk5ODMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1
LDYgKzIzNSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+Y2FsbGVlLT5zY29wZSgpLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAgfQogICAg
IAorICAgIGJvb2wgc3RyaWN0TW9kZUZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAgewor
ICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0
dXJuIGNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKTsKKyAgICAgICAgcmV0dXJuIGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUo
KTsKKyAgICB9CisgICAgCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25z
dCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgaWYgKGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlQ2FjaGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVDYWNoZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0J5
dGVDb2RlQ2FjaGVfaAorI2RlZmluZSBERkdCeXRlQ29kZUNhY2hlX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgQ29kZUJsb2NrS2V5IHsKK3B1YmxpYzoKKyAgICBDb2RlQmxvY2tLZXkoKQor
ICAgICAgICA6IG1fZXhlY3V0YWJsZSgwKQorICAgICAgICAsIG1fa2luZChDb2RlRm9yQ2FsbCkg
Ly8gQ29kZUZvckNhbGwgPSBlbXB0eSB2YWx1ZQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ29k
ZUJsb2NrS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2V4
ZWN1dGFibGUoMCkKKyAgICAgICAgLCBtX2tpbmQoQ29kZUZvckNvbnN0cnVjdCkgLy8gQ29kZUZv
ckNvbnN0cnVjdCA9IGRlbGV0ZWQgdmFsdWUKKyAgICB7CisgICAgfQorICAgIAorICAgIENvZGVC
bG9ja0tleShGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKKyAgICAgICAgOiBtX2V4ZWN1dGFibGUoZXhlY3V0YWJsZSkKKyAgICAgICAg
LCBtX2tpbmQoa2luZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBDb2RlQmxvY2tLZXkmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
ZXhlY3V0YWJsZSA9PSBvdGhlci5tX2V4ZWN1dGFibGUKKyAgICAgICAgICAgICYmIG1fa2luZCA9
PSBvdGhlci5tX2tpbmQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAor
ICAgIHsKKyAgICAgICAgLy8gVGhpcyBpcyBsaWtlbHkgdG8gYmUgZ29vZCBlbm91Z2guCisgICAg
ICAgIHJldHVybiBXVEY6OlB0ckhhc2g8RnVuY3Rpb25FeGVjdXRhYmxlKj46Omhhc2gobV9leGVj
dXRhYmxlKSBeIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2tpbmQpOworICAgIH0KKyAgICAKKyAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4ZWN1
dGFibGU7IH0KKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICFtX2V4ZWN1dGFibGUgJiYgbV9raW5kID09IENvZGVGb3JD
b25zdHJ1Y3Q7CisgICAgfQorCitwcml2YXRlOgorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogbV9l
eGVjdXRhYmxlOworICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgbV9raW5kOworfTsKKworc3Ry
dWN0IENvZGVCbG9ja0tleUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENv
ZGVCbG9ja0tleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgQ29kZUJsb2NrS2V5JiBhLCBjb25zdCBDb2RlQmxvY2tLZXkmIGIpIHsgcmV0
dXJuIGEgPT0gYjsgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVU
b0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0
SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpDb2RlQmxvY2tL
ZXk+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpDb2RlQmxvY2tLZXlIYXNoIEhhc2g7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3Ry
dWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkNvZGVCbG9ja0tleT4gOiBTaW1wbGVDbGFzc0hhc2hU
cmFpdHM8SlNDOjpERkc6OkNvZGVCbG9ja0tleT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgQnl0ZUNvZGVDYWNo
ZVZhbHVlIHsKKyAgICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrOworICAgIGJvb2wgb3du
ZWQ7CisgICAgYm9vbCBvbGRWYWx1ZU9mU2hvdWxkRGlzY2FyZEJ5dGVjb2RlTGF0ZXI7Cit9Owor
Cit0ZW1wbGF0ZTxib29sICgqZmlsdGVyRnVuY3Rpb24pKENvZGVCbG9jayosIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpPgorY2xhc3MgQnl0ZUNvZGVDYWNoZSB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBIYXNoTWFwPENvZGVCbG9ja0tleSwgQnl0ZUNvZGVDYWNoZVZhbHVlPiBNYXA7CisgICAgCisg
ICAgQnl0ZUNvZGVDYWNoZSgpIHsgfQorICAgIAorICAgIH5CeXRlQ29kZUNhY2hlKCkKKyAgICB7
CisgICAgICAgIE1hcDo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgICAgICBN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgICAgICBmb3IgKE1hcDo6aXRlcmF0
b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBpZiAo
IWl0ZXItPnNlY29uZC5jb2RlQmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAoaXRlci0+c2Vjb25kLm93bmVkKSB7CisgICAgICAgICAgICAgICAgZGVsZXRl
IGl0ZXItPnNlY29uZC5jb2RlQmxvY2s7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpdGVyLT5zZWNvbmQuY29kZUJsb2NrLT5tX3Nob3VsZERp
c2NhcmRCeXRlY29kZUxhdGVyID0gaXRlci0+c2Vjb25kLm9sZFZhbHVlT2ZTaG91bGREaXNjYXJk
Qnl0ZWNvZGVMYXRlcjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIGdl
dChjb25zdCBDb2RlQmxvY2tLZXkmIGtleSwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlKQorICAgIHsK
KyAgICAgICAgTWFwOjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChrZXkpOworICAgICAgICBp
ZiAoaXRlciAhPSBtX21hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQu
Y29kZUJsb2NrOworICAgICAgICAKKyAgICAgICAgQnl0ZUNvZGVDYWNoZVZhbHVlIHZhbHVlOwor
ICAgICAgICAKKyAgICAgICAgLy8gRmlyc3Qgc2VlIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBwYXJz
ZWQgY29kZSBibG9jayB0aGF0IHN0aWxsIGhhcyBzb21lCisgICAgICAgIC8vIGJ5dGVjb2RlIGlu
IGl0LgorICAgICAgICB2YWx1ZS5jb2RlQmxvY2sgPSBrZXkuZXhlY3V0YWJsZSgpLT5jb2RlQmxv
Y2tXaXRoQnl0ZWNvZGVGb3Ioa2V5LmtpbmQoKSk7CisgICAgICAgIGlmICh2YWx1ZS5jb2RlQmxv
Y2spIHsKKyAgICAgICAgICAgIHZhbHVlLm93bmVkID0gZmFsc2U7CisgICAgICAgICAgICB2YWx1
ZS5vbGRWYWx1ZU9mU2hvdWxkRGlzY2FyZEJ5dGVjb2RlTGF0ZXIgPSB2YWx1ZS5jb2RlQmxvY2st
Pm1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlTGF0ZXI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBOb3BlLCBzbyB0cnkgdG8gcGFyc2Ugb25lLgorICAgICAgICAgICAgSlNPYmplY3Qq
IGV4Y2VwdGlvbjsKKyAgICAgICAgICAgIHZhbHVlLm93bmVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHZhbHVlLmNvZGVCbG9jayA9IGtleS5leGVjdXRhYmxlKCktPnByb2R1Y2VDb2RlQmxvY2tGb3Io
c2NvcGUsIE9wdGltaXppbmdDb21waWxhdGlvbiwga2V5LmtpbmQoKSwgZXhjZXB0aW9uKS5sZWFr
UHRyKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlz
IGFueSByZWFzb24gdG8gcmVqZWN0IHRoaXMgZnJvbSBvdXIgY2FjaGUuIElmIHNvLCB0aGVuCisg
ICAgICAgIC8vIHBvaXNvbiBpdC4KKyAgICAgICAgaWYgKCEhdmFsdWUuY29kZUJsb2NrICYmICFm
aWx0ZXJGdW5jdGlvbih2YWx1ZS5jb2RlQmxvY2ssIGtleS5raW5kKCkpKSB7CisgICAgICAgICAg
ICBpZiAodmFsdWUub3duZWQpCisgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlLmNvZGVCbG9j
azsKKyAgICAgICAgICAgIHZhbHVlLmNvZGVCbG9jayA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiBhIGNvZGUgYmxvY2ssIG1ha2Ug
c3VyZSB0aGF0IHdlJ3JlIG5vdCBnb2luZworICAgICAgICAvLyB0byBiZSBkaXNjYXJkaW5nIGl0
cyBieXRlY29kZSBpZiBhIEdDIHdlcmUgdG8gaGFwcGVuIGR1cmluZyBERkcKKyAgICAgICAgLy8g
Y29tcGlsYXRpb24uIFRoYXQncyB1bmxpa2VseSwgYnV0IGl0J3MgZ29vZCB0byB0aG9yb3VnaGx5
IGVuam95IHRoaXMKKyAgICAgICAgLy8ga2luZCBvZiBwYXJhbm9pYS4KKyAgICAgICAgaWYgKCEh
dmFsdWUuY29kZUJsb2NrKQorICAgICAgICAgICAgdmFsdWUuY29kZUJsb2NrLT5tX3Nob3VsZERp
c2NhcmRCeXRlY29kZUxhdGVyID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBtX21hcC5hZGQo
a2V5LCB2YWx1ZSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdmFsdWUuY29kZUJsb2NrOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBNYXAgbV9tYXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0J5
dGVDb2RlQ2FjaGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk5ODMzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHQnl0ZUNvZGVDYWNo
ZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC04NDEsNiArODQyLDkgQEAgcHJpdmF0ZToK
ICAgICBJZGVudGlmaWVyTWFwIG1faWRlbnRpZmllck1hcDsKICAgICAvLyBNYXBwaW5nIGJldHdl
ZW4gdmFsdWVzIGFuZCBjb25zdGFudCBudW1iZXJzLgogICAgIEpTVmFsdWVNYXAgbV9qc1ZhbHVl
TWFwOworICAgIAorICAgIC8vIENhY2hlIG9mIGNvZGUgYmxvY2tzIHRoYXQgd2UndmUgZ2VuZXJh
dGVkIGJ5dGVjb2RlIGZvci4KKyAgICBCeXRlQ29kZUNhY2hlPGNhbklubGluZUZ1bmN0aW9uRm9y
PiBtX2NvZGVCbG9ja0NhY2hlOwogfTsKIAogI2RlZmluZSBORVhUX09QQ09ERShuYW1lKSBcCkBA
IC05NTYsMTggKzk2MCwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhi
b29sCiAgICAgCiAgICAgLy8gSWYgd2UgZ2V0IGhlcmUgdGhlbiBpdCBsb29rcyBsaWtlIHdlIHNo
b3VsZCBkZWZpbml0ZWx5IGlubGluZSB0aGlzIGNvZGUuIFByb2NlZWQKICAgICAvLyB3aXRoIHBh
cnNpbmcgdGhlIGNvZGUgdG8gZ2V0IGJ5dGVjb2RlLCBzbyB0aGF0IHdlIGNhbiB0aGVuIHBhcnNl
IHRoZSBieXRlY29kZS4KLSAgICAvLyBOb3RlIHRoYXQgdGhlIGNvZGUgYmxvY2sgd2UgZ2V0IGhl
cmUgaXMgaW50ZW5kZWQgdG8gZGllIGFmdGVyIGhhbmRsZUlubGluaW5nKCkKLSAgICAvLyByZXR1
cm5zLgotICAgIEpTT2JqZWN0KiBleGNlcHRpb247Ci0gICAgT3duUHRyPENvZGVCbG9jaz4gY29k
ZUJsb2NrID0gZXhlY3V0YWJsZS0+cHJvZHVjZUNvZGVCbG9ja0ZvcihleHBlY3RlZEZ1bmN0aW9u
LT5zY29wZSgpLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24sIGtpbmQsIGV4Y2VwdGlvbik7CisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2NvZGVCbG9ja0NhY2hlLmdldChDb2RlQmxvY2tLZXko
ZXhlY3V0YWJsZSwga2luZCksIGV4cGVjdGVkRnVuY3Rpb24tPnNjb3BlKCkpOwogICAgIGlmICgh
Y29kZUJsb2NrKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24p
OwogICAgIAotICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhlIGJ5dGVjb2RlLCBjaGVjayBpZiB3
ZSByZWFsbHkgY2FuIGlubGluZSBpdC4gVGhpcyBtYXkgZmFpbAotICAgIC8vIGlmIHRoZSBjb2Rl
IGJsb2NrIGNvbnRhaW5zIHNvbWUgbmFzdHkgb3Bjb2Rlcy4KLSAgICBpZiAoIWNhbklubGluZUZ1
bmN0aW9uRm9yKGNvZGVCbG9jay5nZXQoKSwga2luZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBBU1NFUlQoY2FuSW5saW5lRnVuY3Rpb25Gb3IoY29kZUJsb2NrLCBraW5kKSk7CiAKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgcHJpbnRmKCJJbmxpbmluZyBleGVjdXRh
YmxlICVwLlxuIiwgZXhlY3V0YWJsZSk7CkBAIC05OTgsNyArOTk1LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbAogICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nr
c1tpXS0+ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CiAgICAgfQogCi0gICAgSW5saW5lU3Rh
Y2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRoaXMsIGNvZGVCbG9jay5nZXQoKSwgcHJvZmlsZWRC
bG9jaywgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxLCAoVmlydHVhbFJlZ2lzdGVyKW1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsVGFyZ2V0KSwgZXhwZWN0ZWRGdW5jdGlvbiwg
KFZpcnR1YWxSZWdpc3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodXNlc1Jlc3Vs
dCA/IHJlc3VsdE9wZXJhbmQgOiBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSwgKFZpcnR1YWxSZWdp
c3RlcilpbmxpbmVDYWxsRnJhbWVTdGFydCwga2luZCk7CisgICAgSW5saW5lU3RhY2tFbnRyeSBp
bmxpbmVTdGFja0VudHJ5KHRoaXMsIGNvZGVCbG9jaywgcHJvZmlsZWRCbG9jaywgbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCkgLSAxLCAoVmlydHVhbFJlZ2lzdGVyKW1faW5saW5lU3RhY2tUb3AtPnJl
bWFwT3BlcmFuZChjYWxsVGFyZ2V0KSwgZXhwZWN0ZWRGdW5jdGlvbiwgKFZpcnR1YWxSZWdpc3Rl
ciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodXNlc1Jlc3VsdCA/IHJlc3VsdE9wZXJh
bmQgOiBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSwgKFZpcnR1YWxSZWdpc3RlcilpbmxpbmVDYWxs
RnJhbWVTdGFydCwga2luZCk7CiAgICAgCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFs
IGlubGluaW5nIHJlYWxseSBoYXBwZW5zLgogICAgIHVuc2lnbmVkIG9sZEluZGV4ID0gbV9jdXJy
ZW50SW5kZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3IzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCShyZXZpc2lvbiA5OTgzMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTA4LDcgKzkwOCw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkUHV0
QnlJZChHUFIKIAogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOwog
ICAgIFZfREZHT3BlcmF0aW9uX0VKQ0kgb3B0aW1pemVkQ2FsbDsKLSAgICBpZiAobV9qaXQuY29k
ZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKSB7CisgICAgaWYgKG1faml0LnN0cmljdE1vZGVGb3Io
YXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pKSB7CiAgICAgICAgIGlmIChwdXRLaW5kID09
IERpcmVjdCkKICAgICAgICAgICAgIG9wdGltaXplZENhbGwgPSBvcGVyYXRpb25QdXRCeUlkRGly
ZWN0U3RyaWN0T3B0aW1pemU7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAJKHJldmlzaW9uIDk5
ODMzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzcsNyArODM3LDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjpjYWNoZWRQdXRCeUlkKEdQUgogCiAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52
YWxpZEdQUlJlZyk7CiAgICAgVl9ERkdPcGVyYXRpb25fRUpDSSBvcHRpbWl6ZWRDYWxsOwotICAg
IGlmIChtX2ppdC5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpIHsKKyAgICBpZiAobV9qaXQu
c3RyaWN0TW9kZUZvcihhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbikpIHsKICAgICAgICAg
aWYgKHB1dEtpbmQgPT0gRGlyZWN0KQogICAgICAgICAgICAgb3B0aW1pemVkQ2FsbCA9IG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RPcHRpbWl6ZTsKICAgICAgICAgZWxzZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShy
ZXZpc2lvbiA5OTgzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDYsNyArMTUwNiw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyBhcmcz
R1BSID0gYXJnMy5ncHIoKTsKICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24obV9qaXQuY29kZUJsb2NrKCktPmlzU3Ry
aWN0TW9kZSgpID8gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QgOiBvcGVyYXRpb25QdXRCeVZhbE5v
blN0cmljdCwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM0dQUik7CisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKG1faml0LnN0cmljdE1vZGVGb3Iobm9kZS5jb2RlT3JpZ2luKSA/IG9wZXJhdGlvblB1
dEJ5VmFsU3RyaWN0IDogb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QsIGFyZzFHUFIsIGFyZzJH
UFIsIGFyZzNHUFIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCShyZXZpc2lvbiA5OTgzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzAsNiArNTMwLDExIEBAIHZvaWQgSGVhcDo6
aGFydmVzdFdlYWtSZWZlcmVuY2VzKCkKICAgICBtX3Nsb3RWaXNpdG9yLmhhcnZlc3RXZWFrUmVm
ZXJlbmNlcygpOwogfQogCit2b2lkIEhlYXA6OmZpbmFsaXplVWx0cmFXZWFrRGF0YSgpCit7Cisg
ICAgbV9zbG90VmlzaXRvci5maW5hbGl6ZVVsdHJhV2Vha0RhdGEoKTsKK30KKwogaW5saW5lIFJl
Z2lzdGVyRmlsZSYgSGVhcDo6cmVnaXN0ZXJGaWxlKCkKIHsKICAgICByZXR1cm4gbV9nbG9iYWxE
YXRhLT5pbnRlcnByZXRlci0+cmVnaXN0ZXJGaWxlKCk7CkBAIC02OTQsNiArNjk5LDEyIEBAIHZv
aWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogICAgICAgICB9IHdoaWxlIChsYXN0T3Bh
cXVlUm9vdENvdW50ICE9IHZpc2l0b3Iub3BhcXVlUm9vdENvdW50KCkpOwogICAgIH0KICAgICBH
Q0NPVU5URVIoVmlzaXRlZFZhbHVlQ291bnQsIHZpc2l0b3IudmlzaXRDb3VudCgpKTsKKworICAg
IHsKKyAgICAgICAgR0NQSEFTRShIYXJ2ZXN0V2Vha1JlZmVyZW5jZXMpOworICAgICAgICBoYXJ2
ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICB9CisKICAgICB2aXNpdG9yLnJlc2V0KCk7CiAgICAg
bV9zaGFyZWREYXRhLnJlc2V0KCk7CiAKQEAgLTc4MSwxNCArNzkyLDE4IEBAIHZvaWQgSGVhcDo6
Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICB9CiAKICAgICBtYXJrUm9vdHMoZnVs
bEdDKTsKLQorICAgIAogICAgIHsKLSAgICAgICAgR0NQSEFTRShIYXJ2ZXN0V2Vha1JlZmVyZW5j
ZXMpOwotICAgICAgICBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICAgICAgR0NQSEFTRShG
aW5hbGl6ZVVsdHJhV2Vha0RhdGEpOworICAgICAgICBmaW5hbGl6ZVVsdHJhV2Vha0RhdGEoKTsK
KyAgICB9CisgICAgICAgIAorICAgIHsKKyAgICAgICAgR0NQSEFTRShGaW5hbGl6ZVdlYWtIYW5k
bGVzKTsKICAgICAgICAgbV9oYW5kbGVIZWFwLmZpbmFsaXplV2Vha0hhbmRsZXMoKTsKICAgICAg
ICAgbV9nbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3MuZmluYWxpemVTbWFsbFN0cmluZ3MoKTsKICAg
ICB9Ci0KKyAgICAKICAgICBKQVZBU0NSSVBUQ09SRV9HQ19NQVJLRUQoKTsKIAogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDk5ODMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgbWFya1Byb3RlY3RlZE9iamVjdHMo
SGVhcFJvb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgbWFya1RlbXBTb3J0VmVjdG9ycyhIZWFw
Um9vdFZpc2l0b3ImKTsKICAgICAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAg
ICAgICAgdm9pZCBmaW5hbGl6ZVVsdHJhV2Vha0RhdGEoKTsKICAgICAgICAgCiAgICAgICAgIGVu
dW0gU3dlZXBUb2dnbGUgeyBEb05vdFN3ZWVwLCBEb1N3ZWVwIH07CiAgICAgICAgIHZvaWQgY29s
bGVjdChTd2VlcFRvZ2dsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9MaXN0
YWJsZUhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9M
aXN0YWJsZUhhbmRsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0xpc3RhYmxlSGFuZGxlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMiBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgTGlzdGFibGVIYW5k
bGVyX2gKKyNkZWZpbmUgTGlzdGFibGVIYW5kbGVyX2gKKworI2luY2x1ZGUgPHN0ZGludC5oPgor
I2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgTWFya1N0YWNrOworY2xhc3MgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YTsKK2NsYXNz
IFNsb3RWaXNpdG9yOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgTGlzdGFibGVIYW5k
bGVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMaXN0YWJsZUhhbmRsZXIpOworICAgIAor
cHJvdGVjdGVkOgorICAgIExpc3RhYmxlSGFuZGxlcigpCisgICAgICAgIDogbV9uZXh0QW5kRmxh
ZygwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+TGlzdGFibGVIYW5kbGVyKCkg
eyB9CisKK3ByaXZhdGU6CisgICAgLy8gQWxsb3cgdGhlc2UgY2xhc3NlcyB0byB1c2UgTGlzdGFi
bGVIYW5kbGVyOjpMaXN0LgorICAgIGZyaWVuZCBjbGFzcyBNYXJrU3RhY2s7CisgICAgZnJpZW5k
IGNsYXNzIE1hcmtTdGFja1RocmVhZFNoYXJlZERhdGE7CisgICAgZnJpZW5kIGNsYXNzIFNsb3RW
aXNpdG9yOworICAgIAorICAgIGNsYXNzIExpc3QgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShMaXN0KTsKKyAgICBwdWJsaWM6CisgICAgICAgIExpc3QoKQorICAgICAgICAgICAgOiBt
X2ZpcnN0KDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBh
ZGROb3RUaHJlYWRTYWZlKFQqIGhhbmRsZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICho
YW5kbGVyLT5tX25leHRBbmRGbGFnICYgMSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICBoYW5kbGVyLT5tX25leHRBbmRGbGFnID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG1fZmlyc3QpIHwgMTsKKyAgICAgICAgICAgIG1fZmlyc3QgPSBoYW5kbGVyOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGFkZFRocmVhZFNhZmUoVCogaGFuZGxlcikKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gTk9URTogSWYgd2UgZXZlciB3YW50IHRoaXMgdG8gYmUg
ZmFzdGVyLCB3ZSBjb3VsZCB0dXJuIGl0IGludG8KKyAgICAgICAgICAgIC8vIGEgQ0FTIGxvb3As
IHNpbmNlIHRoaXMgaXMgYSBzaW5nbHktbGlua2VkLWxpc3QgdGhhdCwgaW4gcGFyYWxsZWwKKyAg
ICAgICAgICAgIC8vIHRyYWNpbmcgbW9kZSwgY2FuIG9ubHkgZ3Jvdy4gSS5lLiB3ZSBkb24ndCBo
YXZlIHRvIHdvcnJ5IGFib3V0CisgICAgICAgICAgICAvLyBhbnkgQUJBIHByb2JsZW1zLgorICAg
ICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgICAgICBhZGROb3RU
aHJlYWRTYWZlKGhhbmRsZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGhh
c05leHQoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISFtX2ZpcnN0OworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBUKiByZW1vdmVOZXh0KCkKKyAgICAgICAgeworICAgICAg
ICAgICAgVCogY3VycmVudCA9IG1fZmlyc3Q7CisgICAgICAgICAgICBUKiBuZXh0ID0gcmVpbnRl
cnByZXRfY2FzdDxUKj4oY3VycmVudC0+bV9uZXh0QW5kRmxhZyAmIH4xKTsKKyAgICAgICAgICAg
IGN1cnJlbnQtPm1fbmV4dEFuZEZsYWcgPSAwOworICAgICAgICAgICAgbV9maXJzdCA9IG5leHQ7
CisgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBw
cml2YXRlOgorICAgICAgICBNdXRleCBtX2xvY2s7CisgICAgICAgIFQqIG1fZmlyc3Q7CisgICAg
fTsKKyAgICAKKyAgICB1aW50cHRyX3QgbV9uZXh0QW5kRmxhZzsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gTGlzdGFibGVIYW5kbGVyX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkocmV2aXNpb24gOTk4MzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYs
NyArMjM2LDYgQEAgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YTo6TWFya1N0YWNrVGhyZQogICAg
ICwgbV9zaGFyZWRNYXJrU3RhY2sobV9zZWdtZW50QWxsb2NhdG9yKQogICAgICwgbV9udW1iZXJP
ZkFjdGl2ZVBhcmFsbGVsTWFya2VycygwKQogICAgICwgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRF
eGl0KGZhbHNlKQotICAgICwgbV9maXJzdFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoMCkKIHsKICNp
ZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IEhldXJp
c3RpY3M6Om51bWJlck9mR0NNYXJrZXJzOyArK2kpIHsKQEAgLTQ1MCwxMyArNDQ5LDE0IEBAIHZv
aWQgTWFya1N0YWNrOjptZXJnZU9wYXF1ZVJvb3RzKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6aGFy
dmVzdFdlYWtSZWZlcmVuY2VzKCkKIHsKLSAgICB3aGlsZSAobV9zaGFyZWQubV9maXJzdFdlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXIpIHsKLSAgICAgICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogY3Vy
cmVudCA9IG1fc2hhcmVkLm1fZmlyc3RXZWFrUmVmZXJlbmNlSGFydmVzdGVyOwotICAgICAgICBX
ZWFrUmVmZXJlbmNlSGFydmVzdGVyKiBuZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxXZWFrUmVmZXJl
bmNlSGFydmVzdGVyKj4oY3VycmVudC0+bV9uZXh0QW5kRmxhZyAmIH4xKTsKLSAgICAgICAgY3Vy
cmVudC0+bV9uZXh0QW5kRmxhZyA9IDA7Ci0gICAgICAgIG1fc2hhcmVkLm1fZmlyc3RXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyID0gbmV4dDsKLSAgICAgICAgY3VycmVudC0+dmlzaXRXZWFrUmVmZXJl
bmNlcygqdGhpcyk7Ci0gICAgfQorICAgIHdoaWxlIChtX3NoYXJlZC5tX3dlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXJzLmhhc05leHQoKSkKKyAgICAgICAgbV9zaGFyZWQubV93ZWFrUmVmZXJlbmNlSGFy
dmVzdGVycy5yZW1vdmVOZXh0KCktPnZpc2l0V2Vha1JlZmVyZW5jZXMoKnRoaXMpOworfQorCit2
b2lkIFNsb3RWaXNpdG9yOjpmaW5hbGl6ZVVsdHJhV2Vha0RhdGEoKQoreworICAgIHdoaWxlICht
X3NoYXJlZC5tX3VsdHJhV2Vha0ZpbmFsaXplcnMuaGFzTmV4dCgpKQorICAgICAgICBtX3NoYXJl
ZC5tX3VsdHJhV2Vha0ZpbmFsaXplcnMucmVtb3ZlTmV4dCgpLT5maW5hbGl6ZVVsdHJhV2Vha0Rh
dGEoKTsKIH0KIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDk5ODMzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJIZXVyaXN0aWNzLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1
ZGUgIlJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiVWx0cmFXZWFrRmluYWxpemVyLmgiCiAjaW5jbHVk
ZSAiVlRhYmxlU3BlY3RydW0uaCIKICNpbmNsdWRlICJXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTE5NCw4ICsxOTUsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgTXV0ZXggbV9vcGFxdWVSb290c0xvY2s7CiAgICAgICAgIEhhc2hTZXQ8
dm9pZCo+IG1fb3BhcXVlUm9vdHM7CiAKLSAgICAgICAgTXV0ZXggbV93ZWFrUmVmZXJlbmNlSGFy
dmVzdGVyTG9jazsKLSAgICAgICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciogbV9maXJzdFdlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXI7CisgICAgICAgIExpc3RhYmxlSGFuZGxlcjxXZWFrUmVmZXJlbmNl
SGFydmVzdGVyPjo6TGlzdCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzOworICAgICAgICBMaXN0
YWJsZUhhbmRsZXI8VWx0cmFXZWFrRmluYWxpemVyPjo6TGlzdCBtX3VsdHJhV2Vha0ZpbmFsaXpl
cnM7CiAgICAgfTsKIAogICAgIGNsYXNzIE1hcmtTdGFjayB7CkBAIC0yMjksMTEgKzIzMCwxMiBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXIoV2Vha1JlZmVyZW5jZUhhcnZlc3Rlciogd2Vha1JlZmVyZW5jZUhhcnZlc3RlcikKICAgICAg
ICAgewotICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc2hhcmVkLm1fd2Vha1JlZmVy
ZW5jZUhhcnZlc3RlckxvY2spOwotICAgICAgICAgICAgaWYgKHdlYWtSZWZlcmVuY2VIYXJ2ZXN0
ZXItPm1fbmV4dEFuZEZsYWcgJiAxKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIHdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXItPm1fbmV4dEFuZEZsYWcgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obV9zaGFyZWQubV9maXJzdFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpIHwg
MTsKLSAgICAgICAgICAgIG1fc2hhcmVkLm1fZmlyc3RXZWFrUmVmZXJlbmNlSGFydmVzdGVyID0g
d2Vha1JlZmVyZW5jZUhhcnZlc3RlcjsKKyAgICAgICAgICAgIG1fc2hhcmVkLm1fd2Vha1JlZmVy
ZW5jZUhhcnZlc3RlcnMuYWRkVGhyZWFkU2FmZSh3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhZGRVbHRyYVdlYWtGaW5hbGl6ZXIoVWx0
cmFXZWFrRmluYWxpemVyKiB1bHRyYVdlYWtGaW5hbGl6ZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1fc2hhcmVkLm1fdWx0cmFXZWFrRmluYWxpemVycy5hZGRUaHJlYWRTYWZlKHVsdHJhV2Vh
a0ZpbmFsaXplcik7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAkocmV2aXNpb24gOTk4MzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OCw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYWluRnJvbVNoYXJlZChTaGFyZWREcmFp
bk1vZGUpOwogCiAgICAgdm9pZCBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKTsKKyAgICB2b2lkIGZp
bmFsaXplVWx0cmFXZWFrRGF0YSgpOwogICAgICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBkb25h
dGVTbG93KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9VbHRyYVdlYWtGaW5h
bGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9VbHRyYVdl
YWtGaW5hbGl6ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1VsdHJhV2Vha0ZpbmFsaXplci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVWx0cmFX
ZWFrRmluYWxpemVyX2gKKyNkZWZpbmUgVWx0cmFXZWFrRmluYWxpemVyX2gKKworI2luY2x1ZGUg
Ikxpc3RhYmxlSGFuZGxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQW4gdWx0cmEtd2Vh
ayBmaW5hbGl6ZXIgaXMgdXNlZnVsIGZvciBjYWNoZXMgdGhhdCB5b3Ugd291bGQgbGlrZSB0bwor
Ly8gZGVzdHJveSBvbiBlYWNoIEdDLiBUaGlzIGlzIGN1cnJlbnRseSB1c2VkIGZvciB0aGUgYnl0
ZWNvZGUgc3RyZWFtCisvLyBhc3NvY2lhdGVkIHdpdGggZWFjaCBDb2RlQmxvY2suCisKK2NsYXNz
IFVsdHJhV2Vha0ZpbmFsaXplciA6IHB1YmxpYyBMaXN0YWJsZUhhbmRsZXI8VWx0cmFXZWFrRmlu
YWxpemVyPiB7CitwdWJsaWM6ICAgIAorICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVsdHJhV2Vh
a0RhdGEoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5VbHRyYVdlYWtGaW5hbGl6
ZXIoKSB7IH0KK307CisKK30KKworI2VuZGlmIC8vIFVsdHJhV2Vha0ZpbmFsaXplcl9oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVyZW5jZUhhcnZl
c3Rlci5oCShyZXZpc2lvbiA5OTgzMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBAQAog
I2lmbmRlZiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyX2gKICNkZWZpbmUgV2Vha1JlZmVyZW5jZUhh
cnZlc3Rlcl9oCiAKLSNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlICJMaXN0YWJsZUhhbmRs
ZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTI4LDI0ICsyOCwxNiBAQCBjbGFzcyBNYXJr
U3RhY2s7CiBjbGFzcyBNYXJrU3RhY2tTaGFyZWREYXRhOwogY2xhc3MgU2xvdFZpc2l0b3I7CiAK
LWNsYXNzIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgeworY2xhc3MgV2Vha1JlZmVyZW5jZUhhcnZl
c3RlciA6IHB1YmxpYyBMaXN0YWJsZUhhbmRsZXI8V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcj4gewog
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9y
JikgPSAwOwogICAgIAogcHJvdGVjdGVkOgogICAgIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoKQot
ICAgICAgICA6IG1fbmV4dEFuZEZsYWcoMCkKICAgICB7CiAgICAgfQogICAgIAogICAgIHZpcnR1
YWwgfldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoKSB7IH0KLQotcHJpdmF0ZToKLSAgICBmcmllbmQg
Y2xhc3MgTWFya1N0YWNrOwotICAgIGZyaWVuZCBjbGFzcyBNYXJrU3RhY2tTaGFyZWREYXRhOwot
ICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKLSAgICAKLSAgICB1aW50cHRyX3QgbV9uZXh0
QW5kRmxhZzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk5ODMzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1NiwzMCArMTU2LDM4IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUlu
dGVybmEKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpOwotICAgIGlmICgh
bGV4aWNhbEdsb2JhbE9iamVjdC0+ZXZhbEVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgY3JlYXRlRXZhbEVycm9yKGV4ZWMsICJFdmFsIGlzIGRpc2FibGVkIikpOwot
ICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBwYXJzZTxFdmFsTm9kZT4oZ2xvYmFsRGF0
YSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2UsIDAsIGlzU3RyaWN0TW9kZSgpID8gSlNQ
YXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsIEV2YWxOb2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpT
UGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNlUHJvZ3JhbUNvZGUsIGxleGljYWxHbG9iYWxPYmpl
Y3QtPmRlYnVnZ2VyKCksIGV4ZWMsICZleGNlcHRpb24pOwotICAgIGlmICghZXZhbE5vZGUpIHsK
LSAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBleGNlcHRpb247Ci0g
ICAgfQotICAgIHJlY29yZFBhcnNlKGV2YWxOb2RlLT5mZWF0dXJlcygpLCBldmFsTm9kZS0+aGFz
Q2FwdHVyZWRWYXJpYWJsZXMoKSwgZXZhbE5vZGUtPmxpbmVObygpLCBldmFsTm9kZS0+bGFzdExp
bmUoKSk7Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5v
ZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKLQotICAgIE93blB0cjxDb2RlQmxvY2s+IHByZXZpb3Vz
Q29kZUJsb2NrID0gbV9ldmFsQ29kZUJsb2NrLnJlbGVhc2UoKTsKLSAgICBBU1NFUlQoKGppdFR5
cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOwot
ICAgIG1fZXZhbENvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBFdmFsQ29kZUJsb2NrKHRoaXMsIGds
b2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc2NvcGVDaGFpbk5vZGUtPmxvY2FsRGVw
dGgoKSwgcHJldmlvdXNDb2RlQmxvY2sucmVsZWFzZSgpKSk7Ci0gICAgT3duUHRyPEJ5dGVjb2Rl
R2VuZXJhdG9yPiBnZW5lcmF0b3IoYWRvcHRQdHIobmV3IEJ5dGVjb2RlR2VuZXJhdG9yKGV2YWxO
b2RlLmdldCgpLCBzY29wZUNoYWluTm9kZSwgbV9ldmFsQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgp
LCBtX2V2YWxDb2RlQmxvY2suZ2V0KCksICEhbV9ldmFsQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
ID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmlyc3RDb21waWxhdGlvbikpKTsKLSAgICBpZiAo
KGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUoKSkpIHsKLSAgICAgICAgbV9ldmFsQ29k
ZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxDb2RlQmxv
Y2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKKyAgICAKKyAgICBpZiAoISFtX2V2YWxDb2RlQmxv
Y2sgJiYgbV9ldmFsQ29kZUJsb2NrLT5jYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSgpKSB7Cisg
ICAgICAgIEJ5dGVjb2RlRGVzdHJ1Y3Rpb25CbG9ja2VyIGJsb2NrZXIobV9ldmFsQ29kZUJsb2Nr
LmdldCgpKTsKKyAgICAgICAgT3duUHRyPEV2YWxDb2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IGFk
b3B0UHRyKG5ldyBFdmFsQ29kZUJsb2NrKENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqbV9l
dmFsQ29kZUJsb2NrKSk7CisgICAgICAgIG5ld0NvZGVCbG9jay0+c2V0QWx0ZXJuYXRpdmUoc3Rh
dGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KG1fZXZhbENvZGVCbG9jay5yZWxlYXNlKCkpKTsK
KyAgICAgICAgbV9ldmFsQ29kZUJsb2NrID0gbmV3Q29kZUJsb2NrLnJlbGVhc2UoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoIWxleGljYWxHbG9iYWxPYmplY3QtPmV2YWxFbmFibGVkKCkp
CisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVFdmFsRXJyb3IoZXhl
YywgIkV2YWwgaXMgZGlzYWJsZWQiKSk7CisgICAgICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5v
ZGUgPSBwYXJzZTxFdmFsTm9kZT4oZ2xvYmFsRGF0YSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgbV9z
b3VyY2UsIDAsIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWws
IEV2YWxOb2RlOjppc0Z1bmN0aW9uTm9kZSA/IEpTUGFyc2VGdW5jdGlvbkNvZGUgOiBKU1BhcnNl
UHJvZ3JhbUNvZGUsIGxleGljYWxHbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCksIGV4ZWMsICZleGNl
cHRpb24pOworICAgICAgICBpZiAoIWV2YWxOb2RlKSB7CisgICAgICAgICAgICBBU1NFUlQoZXhj
ZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBleGNlcHRpb247CisgICAgICAgIH0KKyAgICAg
ICAgcmVjb3JkUGFyc2UoZXZhbE5vZGUtPmZlYXR1cmVzKCksIGV2YWxOb2RlLT5oYXNDYXB0dXJl
ZFZhcmlhYmxlcygpLCBldmFsTm9kZS0+bGluZU5vKCksIGV2YWxOb2RlLT5sYXN0TGluZSgpKTsK
KyAgICAgICAgCisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNo
YWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOworICAgICAgICAKKyAgICAgICAgT3duUHRyPENv
ZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX2V2YWxDb2RlQmxvY2sucmVsZWFzZSgpOwor
ICAgICAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAh
cHJldmlvdXNDb2RlQmxvY2spOworICAgICAgICBtX2V2YWxDb2RlQmxvY2sgPSBhZG9wdFB0cihu
ZXcgRXZhbENvZGVCbG9jayh0aGlzLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCks
IHNjb3BlQ2hhaW5Ob2RlLT5sb2NhbERlcHRoKCksIHByZXZpb3VzQ29kZUJsb2NrLnJlbGVhc2Uo
KSkpOworICAgICAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0
cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IoZXZhbE5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCBt
X2V2YWxDb2RlQmxvY2stPnN5bWJvbFRhYmxlKCksIG1fZXZhbENvZGVCbG9jay5nZXQoKSwgISFt
X2V2YWxDb2RlQmxvY2stPmFsdGVybmF0aXZlKCkgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBG
aXJzdENvbXBpbGF0aW9uKSkpOworICAgICAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+
Z2VuZXJhdGUoKSkpIHsKKyAgICAgICAgICAgIG1fZXZhbENvZGVCbG9jayA9IHN0YXRpY19wb2lu
dGVyX2Nhc3Q8RXZhbENvZGVCbG9jaz4obV9ldmFsQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRp
dmUoKSk7CisgICAgICAgICAgICBldmFsTm9kZS0+ZGVzdHJveURhdGEoKTsKKyAgICAgICAgICAg
IHJldHVybiBleGNlcHRpb247CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGV2YWxOb2Rl
LT5kZXN0cm95RGF0YSgpOwotICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgICAgICBtX2V2
YWxDb2RlQmxvY2stPmNvcHlQb3N0UGFyc2VEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAgICAgfQog
Ci0gICAgZXZhbE5vZGUtPmRlc3Ryb3lEYXRhKCk7Ci0gICAgbV9ldmFsQ29kZUJsb2NrLT5jb3B5
RGF0YUZyb21BbHRlcm5hdGl2ZSgpOwotCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoZXhlYy0+
Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGJvb2wgZGZnQ29tcGlsZWQgPSBm
YWxzZTsKQEAgLTE5OCw3ICsyMDYsNyBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBp
bGVJbnRlcm5hCiAgICAgICAgIH0KICNpZiAhRU5BQkxFKE9QQ09ERV9TQU1QTElORykKICAgICAg
ICAgaWYgKCFCeXRlY29kZUdlbmVyYXRvcjo6ZHVtcHNHZW5lcmF0ZWRDb2RlKCkpCi0gICAgICAg
ICAgICBtX2V2YWxDb2RlQmxvY2stPmRpc2NhcmRCeXRlY29kZSgpOworICAgICAgICAgICAgbV9l
dmFsQ29kZUJsb2NrLT5oYW5kbGVCeXRlY29kZURpc2NhcmRpbmdPcHBvcnR1bml0eSgpOwogI2Vu
ZGlmCiAgICAgICAgIG1fZXZhbENvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGVGb3JDYWxs
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAgICAgfQpAQCAtMjkwLDI4ICsyOTgsMzYgQEAg
SlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZQogICAgIEpTT2JqZWN0KiBl
eGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7Ci0gICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFt
Tm9kZSA9IHBhcnNlPFByb2dyYW1Ob2RlPihnbG9iYWxEYXRhLCBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBtX3NvdXJjZSwgMCwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJzZU5v
cm1hbCwgUHJvZ3JhbU5vZGU6OmlzRnVuY3Rpb25Ob2RlID8gSlNQYXJzZUZ1bmN0aW9uQ29kZSA6
IEpTUGFyc2VQcm9ncmFtQ29kZSwgbGV4aWNhbEdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSwgZXhl
YywgJmV4Y2VwdGlvbik7Ci0gICAgaWYgKCFwcm9ncmFtTm9kZSkgewotICAgICAgICBBU1NFUlQo
ZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKLSAgICB9Ci0gICAgcmVjb3Jk
UGFyc2UocHJvZ3JhbU5vZGUtPmZlYXR1cmVzKCksIHByb2dyYW1Ob2RlLT5oYXNDYXB0dXJlZFZh
cmlhYmxlcygpLCBwcm9ncmFtTm9kZS0+bGluZU5vKCksIHByb2dyYW1Ob2RlLT5sYXN0TGluZSgp
KTsKKyAgICAKKyAgICBpZiAoISFtX3Byb2dyYW1Db2RlQmxvY2sgJiYgbV9wcm9ncmFtQ29kZUJs
b2NrLT5jYW5Qcm9kdWNlQ29weVdpdGhCeXRlY29kZSgpKSB7CisgICAgICAgIEJ5dGVjb2RlRGVz
dHJ1Y3Rpb25CbG9ja2VyIGJsb2NrZXIobV9wcm9ncmFtQ29kZUJsb2NrLmdldCgpKTsKKyAgICAg
ICAgT3duUHRyPFByb2dyYW1Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IGFkb3B0UHRyKG5ldyBQ
cm9ncmFtQ29kZUJsb2NrKENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqbV9wcm9ncmFtQ29k
ZUJsb2NrKSk7CisgICAgICAgIG5ld0NvZGVCbG9jay0+c2V0QWx0ZXJuYXRpdmUoc3RhdGljX3Bv
aW50ZXJfY2FzdDxDb2RlQmxvY2s+KG1fcHJvZ3JhbUNvZGVCbG9jay5yZWxlYXNlKCkpKTsKKyAg
ICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gbmV3Q29kZUJsb2NrLnJlbGVhc2UoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBSZWZQdHI8UHJvZ3JhbU5vZGU+IHByb2dyYW1Ob2RlID0gcGFyc2U8
UHJvZ3JhbU5vZGU+KGdsb2JhbERhdGEsIGxleGljYWxHbG9iYWxPYmplY3QsIG1fc291cmNlLCAw
LCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCBQcm9ncmFt
Tm9kZTo6aXNGdW5jdGlvbk5vZGUgPyBKU1BhcnNlRnVuY3Rpb25Db2RlIDogSlNQYXJzZVByb2dy
YW1Db2RlLCBsZXhpY2FsR2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpLCBleGVjLCAmZXhjZXB0aW9u
KTsKKyAgICAgICAgaWYgKCFwcm9ncmFtTm9kZSkgeworICAgICAgICAgICAgQVNTRVJUKGV4Y2Vw
dGlvbik7CisgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgICAgICB9CisgICAgICAg
IHJlY29yZFBhcnNlKHByb2dyYW1Ob2RlLT5mZWF0dXJlcygpLCBwcm9ncmFtTm9kZS0+aGFzQ2Fw
dHVyZWRWYXJpYWJsZXMoKSwgcHJvZ3JhbU5vZGUtPmxpbmVObygpLCBwcm9ncmFtTm9kZS0+bGFz
dExpbmUoKSk7CiAKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFp
bk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAgCi0gICAg
T3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX3Byb2dyYW1Db2RlQmxvY2su
cmVsZWFzZSgpOwotICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklU
KCkpID09ICFwcmV2aW91c0NvZGVCbG9jayk7Ci0gICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gYWRv
cHRQdHIobmV3IFByb2dyYW1Db2RlQmxvY2sodGhpcywgR2xvYmFsQ29kZSwgZ2xvYmFsT2JqZWN0
LCBzb3VyY2UoKS5wcm92aWRlcigpLCBwcmV2aW91c0NvZGVCbG9jay5yZWxlYXNlKCkpKTsKLSAg
ICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVyYXRvcihhZG9wdFB0cihuZXcgQnl0ZWNv
ZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNjb3BlQ2hhaW5Ob2RlLCAmZ2xvYmFsT2Jq
ZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCksICEhbV9wcm9ncmFt
Q29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmlyc3RD
b21waWxhdGlvbikpKTsKLSAgICBpZiAoKGV4Y2VwdGlvbiA9IGdlbmVyYXRvci0+Z2VuZXJhdGUo
KSkpIHsKLSAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQ
cm9ncmFtQ29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgp
KTsKKyAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gcHJldmlvdXNDb2RlQmxvY2sgPSBtX3Byb2dy
YW1Db2RlQmxvY2sucmVsZWFzZSgpOworICAgICAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29k
ZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhcHJldmlvdXNDb2RlQmxvY2spOworICAgICAgICBtX3By
b2dyYW1Db2RlQmxvY2sgPSBhZG9wdFB0cihuZXcgUHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBHbG9i
YWxDb2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHByZXZpb3VzQ29kZUJs
b2NrLnJlbGVhc2UoKSkpOworICAgICAgICBPd25QdHI8Qnl0ZWNvZGVHZW5lcmF0b3I+IGdlbmVy
YXRvcihhZG9wdFB0cihuZXcgQnl0ZWNvZGVHZW5lcmF0b3IocHJvZ3JhbU5vZGUuZ2V0KCksIHNj
b3BlQ2hhaW5Ob2RlLCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX3Byb2dyYW1Db2Rl
QmxvY2suZ2V0KCksICEhbV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpID8gT3B0aW1p
emluZ0NvbXBpbGF0aW9uIDogRmlyc3RDb21waWxhdGlvbikpKTsKKyAgICAgICAgaWYgKChleGNl
cHRpb24gPSBnZW5lcmF0b3ItPmdlbmVyYXRlKCkpKSB7CisgICAgICAgICAgICBtX3Byb2dyYW1D
b2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2dyYW1Db2RlQmxvY2s+KG1fcHJvZ3Jh
bUNvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgICAgICAgICAgcHJvZ3JhbU5v
ZGUtPmRlc3Ryb3lEYXRhKCk7CisgICAgICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgICAg
ICB9CisKICAgICAgICAgcHJvZ3JhbU5vZGUtPmRlc3Ryb3lEYXRhKCk7Ci0gICAgICAgIHJldHVy
biBleGNlcHRpb247CisgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+Y29weVBvc3RQYXJzZURh
dGFGcm9tQWx0ZXJuYXRpdmUoKTsKICAgICB9CiAKLSAgICBwcm9ncmFtTm9kZS0+ZGVzdHJveURh
dGEoKTsKLSAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7
Ci0KICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChleGVjLT5nbG9iYWxEYXRhKCkuY2FuVXNlSklU
KCkpIHsKICAgICAgICAgYm9vbCBkZmdDb21waWxlZCA9IGZhbHNlOwpAQCAtMzI5LDcgKzM0NSw3
IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGUKICAgICAgICAgfQog
I2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJh
dG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKLSAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9j
ay0+ZGlzY2FyZEJ5dGVjb2RlKCk7CisgICAgICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmhh
bmRsZUJ5dGVjb2RlRGlzY2FyZGluZ09wcG9ydHVuaXR5KCk7CiAjZW5kaWYKICAgICAgICAgbV9w
cm9ncmFtQ29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZUZvckNhbGwsIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cigpKTsKICAgICB9CkBAIC0zODgsOSArNDA0LDkgQEAgdm9pZCBQcm9ncmFtRXhl
Y3V0YWJsZTo6Y2xlYXJDb2RlVmlydHVhbAogICAgIEJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoKTsK
IH0KIAotQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9y
KENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK0Z1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKIHsKLSAgICBDb2RlQmxvY2sqIHJlc3VsdDsKKyAgICBGdW5jdGlvbkNvZGVCbG9jayog
cmVzdWx0OwogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQogICAgICAgICByZXN1bHQgPSBt
X2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CiAgICAgZWxzZSB7CkBAIC00MDAsNyArNDE2LDcgQEAg
Q29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmJhc2VsaW5lQwogICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm4gMDsKICAgICB3aGlsZSAocmVzdWx0LT5hbHRlcm5hdGl2ZSgpKQot
ICAgICAgICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0aXZlKCk7CisgICAgICAgIHJlc3VsdCA9
IHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4ocmVzdWx0LT5hbHRlcm5hdGl2ZSgpKTsK
ICAgICBBU1NFUlQocmVzdWx0KTsKICAgICBBU1NFUlQocmVzdWx0LT5nZXRKSVRUeXBlKCkgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC00MjgsOCArNDQ0
LDIxIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHQKICAgICByZXR1
cm4gZXJyb3I7CiB9CiAKK0Z1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNv
ZGVCbG9ja1dpdGhCeXRlY29kZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7Cisg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGtp
bmQpOworICAgIGlmIChjb2RlQmxvY2stPmNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkpCisg
ICAgICAgIHJldHVybiBjb2RlQmxvY2s7CisgICAgcmV0dXJuIDA7Cit9CisKIFBhc3NPd25QdHI8
RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0Zv
cihTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvbXBpbGF0aW9uS2luZCBjb21waWxh
dGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kLCBKU09i
amVjdComIGV4Y2VwdGlvbikKIHsKKyAgICBpZiAoISFjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRp
b25LaW5kKSAmJiBjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKS0+Y2FuUHJvZHVjZUNv
cHlXaXRoQnl0ZWNvZGUoKSkgeworICAgICAgICBCeXRlY29kZURlc3RydWN0aW9uQmxvY2tlciBi
bG9ja2VyKGNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayhDb2RlQmxvY2s6OkNvcHlQYXJz
ZWRCbG9jaywgKmNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpKSk7CisgICAgfQorICAg
IAogICAgIGV4Y2VwdGlvbiA9IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2Nv
cGVDaGFpbk5vZGUtPmdsb2JhbERhdGE7CiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7CkBAIC00NTMsNyArNDgyLDcg
QEAgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25FeAogICAgIGlmIChleGNl
cHRpb24pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmVzdWx0LT5jb3B5RGF0YUZy
b20oY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkuZ2V0KCkpOworICAgIHJlc3VsdC0+
Y29weVBvc3RQYXJzZURhdGFGcm9tKGNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpLmdl
dCgpKTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIApAQCAtNDk4LDcgKzUyNyw3
IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICAgICAgfQog
I2lmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJh
dG9yOjpkdW1wc0dlbmVyYXRlZENvZGUoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2Fs
bC0+ZGlzY2FyZEJ5dGVjb2RlKCk7CisgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmhh
bmRsZUJ5dGVjb2RlRGlzY2FyZGluZ09wcG9ydHVuaXR5KCk7CiAjZW5kaWYKICAgICAgICAgCiAg
ICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+c2V0SklUQ29kZShtX2ppdENvZGVGb3JDYWxsLCBt
X2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOwpAQCAtNTYxLDcgKzU5MCw3IEBAIEpTT2Jq
ZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICAgICAgfQogI2lmICFFTkFC
TEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICBpZiAoIUJ5dGVjb2RlR2VuZXJhdG9yOjpkdW1w
c0dlbmVyYXRlZENvZGUoKSkKLSAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5k
aXNjYXJkQnl0ZWNvZGUoKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5o
YW5kbGVCeXRlY29kZURpc2NhcmRpbmdPcHBvcnR1bml0eSgpOwogI2VuZGlmCiAgICAgICAgIAog
ICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+c2V0SklUQ29kZShtX2ppdENvZGVGb3JD
b25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDk5ODMz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NzgsNiArNDc4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBy
ZXR1cm4gKm1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAgIAorICAg
ICAgICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrV2l0aEJ5dGVjb2RlRm9yKENvZGVTcGVj
aWFsaXphdGlvbktpbmQpOworICAgICAgICAKICAgICAgICAgUGFzc093blB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4gcHJvZHVjZUNvZGVCbG9ja0ZvcihTY29wZUNoYWluTm9kZSosIENvbXBpbGF0aW9u
S2luZCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqJiBleGNlcHRpb24pOwogCiAg
ICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKQEAgLTU4Niw5ICs1ODgsOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRCeXRlY29kZUZvckNvbnN0cnVjdCgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAgICAKLSAgICAgICAg
Q29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCisgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9ja0ZvcihDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBi
YXNlbGluZUNvZGVCbG9ja0ZvcihraW5kKTsKICAgICAgICAgfQo=
</data>
<flag name="review"
          id="113120"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="113224"
          type_id="3"
          status="-"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>