<?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>67920</bug_id>
          
          <creation_ts>2011-09-11 21:17:38 -0700</creation_ts>
          <short_desc>JavaScriptCore does not have baseline-&gt;speculative OSR</short_desc>
          <delta_ts>2011-09-13 00:20:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>64279</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>465478</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-11 21:17:38 -0700</bug_when>
    <thetext>Tiered compilation in JavaScriptCore only produces a benefit if the code being optimized does most of its work in functions that get called repeatedly.  Hot loops in functions that don&apos;t return for a long time continue to execute old JIT code.  Fixing that requires on-stack-replacement from baseline (old JIT) code to speculative (DFG JIT) code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465479</commentid>
    <comment_count>1</comment_count>
      <attachid>107019</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-11 21:19:21 -0700</bug_when>
    <thetext>Created attachment 107019
work in progress

Still working on it, but it&apos;s starting to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465522</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-12 01:03:37 -0700</bug_when>
    <thetext>It appears that with this patch, tiered compilation is a pure win, and is probably good enough to enable in ToT.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;OSRExit&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc
&quot;OSREnter&quot; at /Volumes/Data/pizlo/octonary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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                OSRExit                 OSREnter            OSREnter v. TipOfTree   
SunSpider:
   3d-cube                                8.6538+-0.2445    !     9.8197+-0.2429          9.7211+-0.2500       ! definitely 1.1233x slower
   3d-morph                               7.4333+-0.1905    ?     7.5068+-0.2221          7.4015+-0.1159       
   3d-raytrace                            8.0800+-0.2070    ?     8.1327+-0.1275          8.0972+-0.1711       ?
   access-binary-trees                    3.3529+-0.0715          3.3493+-0.0639    ?     3.4034+-0.1113       ? might be 1.0151x slower
   access-fannkuch                       11.7457+-0.1979    ?    11.8288+-0.2726         11.5642+-0.2437         might be 1.0157x faster
   access-nbody                           4.2957+-0.0658          4.2564+-0.1403          4.1282+-0.0654       ^ definitely 1.0406x faster
   access-nsieve                          2.5446+-0.0719    !     2.8076+-0.0829    ^     2.6584+-0.0650       ? might be 1.0447x slower
   bitops-3bit-bits-in-byte               1.7152+-0.0510    !     1.8190+-0.0393          1.7013+-0.0950       
   bitops-bits-in-byte                    3.3163+-0.0906    !     5.3742+-0.1637    ^     3.1249+-0.0470       ^ definitely 1.0613x faster
   bitops-bitwise-and                     3.6230+-0.1118          3.6229+-0.0979          3.5523+-0.1120         might be 1.0199x faster
   bitops-nsieve-bits                     5.4752+-0.1264          5.2639+-0.1630    ?     5.2954+-0.1245         might be 1.0340x faster
   controlflow-recursive                  1.9879+-0.0458    ?     2.0770+-0.0553          1.9895+-0.0495       ?
   crypto-aes                             7.6468+-0.2855    ?     8.0935+-0.3318          7.6487+-0.1677       ?
   crypto-md5                             2.8797+-0.1083          2.8015+-0.0864    ?     2.8928+-0.1564       ?
   crypto-sha1                            2.2917+-0.0576    ^     2.1669+-0.0464    ?     2.2158+-0.0414         might be 1.0343x faster
   date-format-tofte                     12.4361+-0.2173         12.3944+-0.3561    ?    12.4613+-0.3561       ?
   date-format-xparb                     10.7844+-0.2669    ?    10.8425+-0.3045         10.6484+-0.2471         might be 1.0128x faster
   math-cordic                            6.4941+-0.1730          6.2070+-0.1304    ?     6.2946+-0.1683         might be 1.0317x faster
   math-partial-sums                      7.5474+-0.1556          7.4442+-0.2342          7.4153+-0.1500         might be 1.0178x faster
   math-spectral-norm                     2.4813+-0.0507    !     2.6118+-0.0580          2.5514+-0.0353       ? might be 1.0283x slower
   regexp-dna                            10.7326+-0.1828    ?    10.7935+-0.2052    ?    10.9701+-0.3206       ? might be 1.0221x slower
   string-base64                          7.9637+-0.2596          7.8483+-0.2541    ?     7.9952+-0.2541       ?
   string-fasta                           8.5115+-0.3501    !     9.3982+-0.2687          9.2106+-0.2616       ! definitely 1.0821x slower
   string-tagcloud                       12.6699+-0.3420    ?    12.9489+-0.4807         12.6656+-0.3720       
   string-unpack-code                    20.9736+-0.5323    ?    21.0942+-0.6218         20.7491+-0.4228         might be 1.0108x faster
   string-validate-input                  9.4274+-0.3451    ^     8.6838+-0.3201    ?     8.8235+-0.3177         might be 1.0684x faster

   &lt;arithmetic&gt;                           7.1178+-0.0319    !     7.2764+-0.0511    ^     7.1223+-0.0569       ?
   &lt;geometric&gt;                            5.8095+-0.0246    !     5.9878+-0.0418    ^     5.8014+-0.0390       
   &lt;harmonic&gt;                             4.6563+-0.0306    !     4.8303+-0.0449    ^     4.6390+-0.0377       

                                            TipOfTree                OSRExit                 OSREnter            OSREnter v. TipOfTree   
V8:
   crypto                                91.3270+-0.5783    ^    84.8944+-0.7944    ?    85.1714+-0.5082       ^ definitely 1.0723x faster
   deltablue                            280.4096+-1.6747    ^   267.4857+-2.5117    ?   271.4189+-1.8715       ^ definitely 1.0331x faster
   earley-boyer                         107.2856+-1.4692        106.8650+-0.3474        106.8528+-0.7143       
   raytrace                              87.1412+-0.5858    !    88.5495+-0.4171    ^    87.3666+-0.6869       ?
   regexp                               116.8110+-0.5595    ?   117.8736+-0.9676        116.5011+-1.3460       
   richards                             228.9993+-0.9538    ^   215.3427+-0.2853    !   222.4097+-1.0724       ^ definitely 1.0296x faster
   splay                                179.7157+-1.0183    ?   181.3913+-0.7650        180.0017+-0.9076       ?

   &lt;arithmetic&gt;                         155.9556+-0.4211    ^   151.7718+-0.4730    !   152.8175+-0.2995       ^ definitely 1.0205x faster
   &lt;geometric&gt;                          141.7613+-0.4067    ^   138.7326+-0.4030    ?   139.0711+-0.2878       ^ definitely 1.0193x faster
   &lt;harmonic&gt;                           130.0867+-0.4418    ^   127.7069+-0.4133        127.5706+-0.3208       ^ definitely 1.0197x faster

                                            TipOfTree                OSRExit                 OSREnter            OSREnter v. TipOfTree   
Kraken:
   ai-astar                            1085.3365+-5.9033    !  1118.8661+-6.9293       1114.5020+-5.7857       ! definitely 1.0269x slower
   audio-beat-detection                 480.7979+-2.1540        474.5989+-6.6917        468.2753+-2.6514       ^ definitely 1.0267x faster
   audio-dft                            415.4874+-2.1583    !   422.8530+-3.5811        420.1431+-2.9278       ? might be 1.0112x slower
   audio-fft                            369.3367+-1.4110    ^   365.8327+-1.2752    ^   361.9488+-1.3125       ^ definitely 1.0204x faster
   audio-oscillator                     377.5589+-1.8711    ^   357.7255+-1.5519    ^   352.3107+-1.0252       ^ definitely 1.0717x faster
   imaging-darkroom                     529.9963+-3.4289    ^   508.8806+-1.1331    ?   512.4397+-7.4576       ^ definitely 1.0343x faster
   imaging-desaturate                   622.7195+-5.3329    ^   571.2379+-3.0810    ^   216.0253+-0.5649       ^ definitely 2.8826x faster
   imaging-gaussian-blur               1722.3304+-6.0498    !  2271.0239+-4.6600    ^  1722.6744+-7.9226       ?
   json-parse-financial                  55.3235+-0.9510         55.1895+-0.5653    ?    55.4367+-0.6541       ?
   json-stringify-tinderbox              69.0833+-0.3308         68.8264+-0.3208    ^    67.9154+-0.4609       ^ definitely 1.0172x faster
   stanford-crypto-aes                  150.6488+-0.9144    !   152.5331+-0.9238    ^   150.7415+-0.4415       ?
   stanford-crypto-ccm                  123.7896+-1.0019    ?   124.2190+-0.7717    ?   124.4001+-0.7065       ?
   stanford-crypto-pbkdf2               352.5917+-4.7548    !   407.2319+-2.8103    ?   410.2262+-3.7950       ! definitely 1.1635x slower
   stanford-crypto-sha256-iterative     133.9557+-0.6957    !   152.1153+-0.5327        151.8553+-0.4600       ! definitely 1.1336x slower

   &lt;arithmetic&gt;                         463.4969+-0.6681    !   503.6524+-1.1248    ^   437.7782+-1.2406       ^ definitely 1.0587x faster
   &lt;geometric&gt;                          304.0857+-0.6485    !   312.9511+-0.5859    ^   285.0960+-0.6719       ^ definitely 1.0666x faster
   &lt;harmonic&gt;                           193.3201+-0.9482    !   196.2345+-0.3049    ^   187.5629+-0.6077       ^ definitely 1.0307x faster

                                            TipOfTree                OSRExit                 OSREnter            OSREnter v. TipOfTree   
All benchmarks:
   &lt;arithmetic&gt;                         165.2279+-0.2263    !   176.6537+-0.2824    ^   157.1021+-0.3760       ^ definitely 1.0517x faster
   &lt;geometric&gt;                           30.3929+-0.0773    !    31.0708+-0.1171    ^    29.7067+-0.1209       ^ definitely 1.0231x faster
   &lt;harmonic&gt;                             8.2311+-0.0533    !     8.5317+-0.0776    ^     8.1964+-0.0654</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466029</commentid>
    <comment_count>3</comment_count>
      <attachid>107125</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-12 19:01:11 -0700</bug_when>
    <thetext>Created attachment 107125
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466031</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-12 19:03:52 -0700</bug_when>
    <thetext>Attachment 107125 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/jit/CompactJITCodeMap.h:160:  The parameter name &quot;jitCodeMap&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/jit/JITStubs.cpp:40:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/jit/JITStubs.cpp:1860:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/bytecode/CodeBlock.h:596:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 4 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466032</commentid>
    <comment_count>5</comment_count>
      <attachid>107126</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-12 19:09:19 -0700</bug_when>
    <thetext>Created attachment 107126
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466033</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-12 19:11:45 -0700</bug_when>
    <thetext>Attachment 107126 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/jit/JITStubs.cpp:1860:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 1 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466034</commentid>
    <comment_count>7</comment_count>
      <attachid>107127</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-12 19:12:51 -0700</bug_when>
    <thetext>Created attachment 107127
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466039</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-12 19:23:23 -0700</bug_when>
    <thetext>Latest numbers, after merging.

TipOfTree: r94996
TipOfTreeDyn: r94996 with tiered compilation enabled
OSREntry: r94996 with this patch and tiered compilation enabled


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc
&quot;TipOfTreeDyn&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;OSREntry&quot; at /Volumes/Data/pizlo/octonary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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              TipOfTreeDyn              OSREntry            OSREntry v. TipOfTree   
SunSpider:
   3d-cube                                7.7184+-0.1100    !     8.9085+-0.1620    ?     8.9214+-0.1325       ! definitely 1.1559x slower
   3d-morph                               7.4503+-0.1056    !     7.7622+-0.1635          7.6214+-0.1253       ? might be 1.0230x slower
   3d-raytrace                            7.4272+-0.1336    ?     7.5459+-0.1919    ?     7.6250+-0.2150       ? might be 1.0266x slower
   access-binary-trees                    2.2947+-0.0509    ?     2.3706+-0.1106    ?     2.4490+-0.0621       ! definitely 1.0672x slower
   access-fannkuch                       11.9483+-0.1975         11.6984+-0.2259    ?    11.9258+-1.0304       
   access-nbody                           4.3891+-0.0669          4.2874+-0.0599          4.2159+-0.0917       ^ definitely 1.0411x faster
   access-nsieve                          2.5623+-0.0878    !     2.8594+-0.0228    ^     2.5834+-0.0431       ?
   bitops-3bit-bits-in-byte               1.7385+-0.0336    !     1.8276+-0.0365    ^     1.6624+-0.0317       ^ definitely 1.0458x faster
   bitops-bits-in-byte                    3.2493+-0.0690    !     5.5825+-0.1160    ^     3.2049+-0.0624         might be 1.0139x faster
   bitops-bitwise-and                     3.5795+-0.0882    ?     3.6996+-0.0938          3.6282+-0.0949       ? might be 1.0136x slower
   bitops-nsieve-bits                     5.6046+-0.1285          5.3794+-0.1261    ?     5.4322+-0.0559         might be 1.0317x faster
   controlflow-recursive                  2.0711+-0.0439    ^     1.9854+-0.0307    ?     2.0288+-0.0526         might be 1.0208x faster
   crypto-aes                             6.6405+-0.1539    !     7.1225+-0.2580          7.0693+-0.2434       ! definitely 1.0646x slower
   crypto-md5                             2.8088+-0.0418          2.7695+-0.0662    ?     2.8314+-0.0446       ?
   crypto-sha1                            2.3172+-0.0678          2.2083+-0.0452          2.1598+-0.0469       ^ definitely 1.0729x faster
   date-format-tofte                     10.0744+-0.2586    ?    10.3379+-0.0644    ^    10.0557+-0.1534       
   date-format-xparb                      8.6629+-0.1886    ?     8.8287+-0.1612          8.5590+-0.1303         might be 1.0121x faster
   math-cordic                            6.4963+-0.1488    ^     6.2470+-0.0928    ?     6.3014+-0.0690         might be 1.0309x faster
   math-partial-sums                      7.7424+-0.1417    ^     7.4190+-0.1262    ?     7.4701+-0.1282       ^ definitely 1.0364x faster
   math-spectral-norm                     2.4844+-0.0485    !     2.5765+-0.0323          2.5679+-0.0335       ! definitely 1.0336x slower
   regexp-dna                            10.7656+-0.1135    ?    10.9759+-0.1922    ?    11.2254+-0.2329       ! definitely 1.0427x slower
   string-base64                          6.1072+-0.1020          5.8784+-0.1417          5.8057+-0.1375       ^ definitely 1.0519x faster
   string-fasta                           7.5601+-0.1272    !     8.3642+-0.1315          8.2778+-0.1067       ! definitely 1.0949x slower
   string-tagcloud                       11.9666+-0.2187    ?    12.1449+-0.1819         11.9751+-0.1859       ?
   string-unpack-code                    18.7544+-0.1948    ?    18.7719+-0.1832         18.5954+-0.2264       
   string-validate-input                  7.1293+-0.1916    ^     6.6377+-0.1308          6.4927+-0.0986       ^ definitely 1.0981x faster

   &lt;arithmetic&gt;                           6.5209+-0.0327    !     6.6996+-0.0190    ^     6.5648+-0.0423       ?
   &lt;geometric&gt;                            5.4079+-0.0257    !     5.5923+-0.0125    ^     5.4196+-0.0216       ?
   &lt;harmonic&gt;                             4.4293+-0.0268    !     4.5850+-0.0154    ^     4.4125+-0.0261       

                                            TipOfTree              TipOfTreeDyn              OSREntry            OSREntry v. TipOfTree   
V8:
   crypto                                93.9862+-1.1192    ^    85.1213+-0.7738    !    88.3021+-1.3944       ^ definitely 1.0644x faster
   deltablue                            275.9727+-2.3166    ^   260.9344+-2.1377    ?   263.8965+-1.5998       ^ definitely 1.0458x faster
   earley-boyer                          95.7358+-1.1461    ?    96.4736+-0.5928         95.6193+-0.8177       
   raytrace                              77.9518+-0.8902    ?    78.7043+-0.8503    ?    79.5421+-1.2368       ? might be 1.0204x slower
   regexp                               108.6761+-0.6543    ?   109.7936+-0.5208        109.4807+-0.9202       ?
   richards                             236.1509+-2.6112    ^   219.8697+-2.3076        218.7715+-1.1891       ^ definitely 1.0794x faster
   splay                                102.6694+-1.0482    ?   103.6818+-1.0776    ?   104.9136+-1.1978       ? might be 1.0219x slower

   &lt;arithmetic&gt;                         141.5919+-0.5536    ^   136.3684+-0.5139    ?   137.2180+-0.4638       ^ definitely 1.0319x faster
   &lt;geometric&gt;                          126.1949+-0.5441    ^   122.8319+-0.3350    !   123.7718+-0.4899       ^ definitely 1.0196x faster
   &lt;harmonic&gt;                           115.2729+-0.5685    ^   112.9720+-0.3575    !   114.0106+-0.5369       ^ definitely 1.0111x faster

                                            TipOfTree              TipOfTreeDyn              OSREntry            OSREntry v. TipOfTree   
Kraken:
   ai-astar                            1132.2278+-9.3623    ?  1139.4513+-10.9565   !  1181.6296+-13.2666      ! definitely 1.0436x slower
   audio-beat-detection                 485.6322+-4.3795        482.8488+-4.4589        479.7418+-5.5265         might be 1.0123x faster
   audio-dft                            447.0208+-8.0453        439.9793+-11.6465   ?   444.7427+-11.4764      
   audio-fft                            375.8554+-3.4366    ?   377.7592+-2.5715    ^   371.3852+-3.1369         might be 1.0120x faster
   audio-oscillator                     386.6605+-3.4668    ^   364.1778+-4.7367        358.4429+-2.7246       ^ definitely 1.0787x faster
   imaging-darkroom                     540.9640+-4.1834    ^   523.6350+-4.1609        520.7076+-6.5455       ^ definitely 1.0389x faster
   imaging-desaturate                   638.5479+-6.2265    ^   586.9443+-6.0193    ^   223.2449+-2.3036       ^ definitely 2.8603x faster
   imaging-gaussian-blur               1781.5950+-9.5280    !  2322.6440+-11.0342   ^  1753.7993+-8.3234       ^ definitely 1.0158x faster
   json-parse-financial                  50.2136+-0.3357    ?    50.6477+-0.6864         49.6699+-0.3513         might be 1.0109x faster
   json-stringify-tinderbox              70.5986+-0.3327    ?    71.2043+-0.7247    ^    68.5845+-0.9333       ^ definitely 1.0294x faster
   stanford-crypto-aes                  146.3031+-0.8386    !   149.2882+-0.9315        147.8578+-0.5439       ! definitely 1.0106x slower
   stanford-crypto-ccm                  113.4581+-1.6943    ?   115.7532+-1.7936    ?   115.7774+-1.2888       ? might be 1.0204x slower
   stanford-crypto-pbkdf2               342.3863+-3.1070    !   403.7150+-4.6479    ?   408.9552+-3.7587       ! definitely 1.1944x slower
   stanford-crypto-sha256-iterative     135.4929+-1.4215    !   153.7509+-0.6486        152.6394+-1.2845       ! definitely 1.1265x slower

   &lt;arithmetic&gt;                         474.7826+-1.4206    !   512.9857+-1.9518    ^   448.3699+-1.8529       ^ definitely 1.0589x faster
   &lt;geometric&gt;                          304.8701+-0.7144    !   314.2936+-1.0548    ^   286.2978+-0.7210       ^ definitely 1.0649x faster
   &lt;harmonic&gt;                           188.0597+-0.5032    !   192.3389+-0.4486    ^   182.3855+-0.4791       ^ definitely 1.0311x faster

                                            TipOfTree              TipOfTreeDyn              OSREntry            OSREntry v. TipOfTree   
All benchmarks:
   &lt;arithmetic&gt;                         166.1201+-0.4098    !   176.8206+-0.5782    ^   157.6253+-0.5166       ^ definitely 1.0539x faster
   &lt;geometric&gt;                           28.7324+-0.0862    !    29.4183+-0.0425    ^    28.1519+-0.0594       ^ definitely 1.0206x faster
   &lt;harmonic&gt;                             7.8265+-0.0462    !     8.0960+-0.0269    ^     7.7936+-0.0451</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466040</commentid>
    <comment_count>9</comment_count>
      <attachid>107127</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-12 19:28:17 -0700</bug_when>
    <thetext>Comment on attachment 107127
the patch - fix style

Attachment 107127 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9649293</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466041</commentid>
    <comment_count>10</comment_count>
      <attachid>107129</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-12 19:30:24 -0700</bug_when>
    <thetext>Created attachment 107129
the patch - fix build

This now passes all tests with tiering enabled.  The web also works.  Hopefully I&apos;ve got all the kinks out for when tiering is disabled, as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466137</commentid>
    <comment_count>11</comment_count>
      <attachid>107129</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-12 22:34:03 -0700</bug_when>
    <thetext>Comment on attachment 107129
the patch - fix build

Committing manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466138</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-12 22:35:50 -0700</bug_when>
    <thetext>Landed in r95016.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107019</attachid>
            <date>2011-09-11 21:19:21 -0700</date>
            <delta_ts>2011-09-12 19:01:11 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>osrentry_patch_1.diff</filename>
            <type>text/plain</type>
            <size>143644</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5NDkyNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSwxMSBAQAogCQkwRkQzQzgyNzE0MTE1RDRG
MDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0
b3IuaCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDEx
NUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9OwogCQkwRkQ4MkUyMTE0MTcyQ0UzMDAx
NzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmls
aXRpZXMuY3BwICovOyB9OworCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJ
VENvZGVNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDgyRTU0MTQxREFF
RUUwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU0RjE0MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVk
VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGRDgyRTU1MTQxREFFRUUwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNTAxNDFEQUVBMTAw
MTc5Qzk0IC8qIFByZWRpY3Rpb25UcmFja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09T
UkVudHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRDgyRTUyMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgKi87IH07CisJCTBG
RDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFNTMxNDFEQUVERTAwMTc5Qzk0IC8q
IERGR09TUkVudHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07
CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZC
QTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtNzk3LDYgKzgw
MiwxMSBAQAogCQkwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcm9wYWdhdG9yLmg7IHBhdGggPSBk
ZmcvREZHUHJvcGFnYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUx
RTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5jcHA7IHBhdGggPSBkZmcvREZH
Q2FwYWJpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFMUYx
NDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuaDsgcGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRp
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEODJFMzcxNDFBQjE0MjAwMTc5
Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvbXBhY3RKSVRDb2RlTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RDgyRTRGMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFByZWRpY3RlZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZEODJFNTAxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3Rpb25UcmFja2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByZWRpY3Rpb25UcmFja2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRTUyMTQxREFFREUwMDE3OUM5NCAvKiBE
RkdPU1JFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdP
U1JFbnRyeS5jcHA7IHBhdGggPSBkZmcvREZHT1NSRW50cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRW50cnkuaDsgcGF0aCA9IGRm
Zy9ERkdPU1JFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEy
QTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQw
MDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NzYsNiArMTU4Niw3IEBACiAJCTE0
MjlEOTJDMEVEMjJENzAwMEI4OTYxOSAvKiBqaXQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0
SklUQ29kZU1hcC5oICovLAogCQkJCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcCAqLywKIAkJCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhl
Y3V0YWJsZUFsbG9jYXRvci5oICovLAogCQkJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBF
eGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwICovLApAQCAtMjE5OSw2ICsyMjEwLDgg
QEAKIAkJODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZEODJFNTIxNDFEQUVERTAwMTc5Qzk0IC8q
IERGR09TUkVudHJ5LmNwcCAqLywKKwkJCQkwRkQ4MkU1MzE0MURBRURFMDAxNzlDOTQgLyogREZH
T1NSRW50cnkuaCAqLywKIAkJCQkwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJp
bGl0aWVzLmNwcCAqLywKIAkJCQkwRkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJp
bGl0aWVzLmggKi8sCiAJCQkJMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0
b3IuaCAqLywKQEAgLTIyOTUsNiArMjMwOCw4IEBACiAJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4
MSAvKiBieXRlY29kZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCAqLywKKwkJ
CQkwRkQ4MkU1MDE0MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGlvblRyYWNrZXIuaCAqLywKIAkJ
CQkwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8sCiAJCQkJOTY5
QTA3OTAwRUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5jcHAgKi8sCiAJCQkJOTY5QTA3OTEw
RUQxRDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovLApAQCAtMjM5NCw2ICsyNDA5LDEwIEBA
CiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NS
RW50cnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRTU1MTQxREFFRUUwMDE3OUM5NCAvKiBQ
cmVkaWN0aW9uVHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODJFNTQxNDFEQUVFRTAw
MTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRTM5MTQx
QUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDZFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1NwaW5Mb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjk2M0IyRjEzRkM2NkJCMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhh
bmRsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDY0LDYgKzMwODMsNyBAQAogCQkJaXNhID0gUEJY
U291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJ
ZmlsZXMgPSAoCisJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTYzQjJDMTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxs
b2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAv
KiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0M4MjUxNDExNUQ0
MDAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gOTQ5
MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA3Niw2ICsxMDc2LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4
ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gbG9vcF9pZl9ncmVh
dGVyZXFcdCAlcywgJXMsICVkKC0+JWQpXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMs
IHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0
aW9uICsgb2Zmc2V0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNh
c2Ugb3BfbG9vcF9oaW50OiB7CisgICAgICAgICAgICBwcmludGYoIlslNGRdIGxvb3BfaGludFxu
IiwgbG9jYXRpb24pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBvcF9zd2l0Y2hfaW1tOiB7CiAgICAgICAgICAgICBpbnQgdGFibGVJbmRleCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGRlZmF1bHRUYXJnZXQgPSAoKytpdCktPnUub3Bl
cmFuZDsKQEAgLTE0MDUsNyArMTQwOSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wU3RhdGlzdGlj
cygpCiBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2JhbE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNz
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zm
c2V0LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBib29sIGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8
Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVj
dC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1f
aGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2JhbERhdGEoKS5oZWFwKQotICAgICwgbV9leGVjdXRl
Q291bnRlcigtMTAwMCkgLy8gdHJpZ2dlciBvcHRpbWl6YXRpb24gd2hlbiBzaWduIGJpdCBjbGVh
cnMKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCiAgICAgLCBtX251bVZhcnMoMCkKICAg
ICAsIG1fbnVtUGFyYW1ldGVycygwKQpAQCAtMTQyNyw2ICsxNDMwLDggQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9hbHRlcm5hdGl2ZShhbHRlcm5h
dGl2ZSkKIHsKICAgICBBU1NFUlQobV9zb3VyY2UpOworICAgIAorICAgIG9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKIAogI2lmIERVTVBfQ09ERV9CTE9DS19TVEFUSVNUSUNTCiAgICAgbGl2ZUNvZGVC
bG9ja1NldC5hZGQodGhpcyk7CkBAIC0xOTAxLDMzICsxOTA2LDI0IEBAIENvZGVCbG9jayogRnVu
Y3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VtZW4KIAogSlNPYmplY3QqIFByb2dyYW1Db2RlQmxvY2s6
OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbk5vZGUpCiB7Ci0gICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRD
b2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKSB7Ci0gICAgICAgIC8vIE5vIE9TUiB5ZXQs
IHNvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoaXQgdGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCi0gICAg
ICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdl
dEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICB9CiAgICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8UHJv
Z3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhl
Yywgc2NvcGVDaGFpbk5vZGUpOwogICAgIHJldHVybiBlcnJvcjsKIH0KIAogSlNPYmplY3QqIEV2
YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5
cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKSB7Ci0gICAgICAgIC8v
IE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoaXQgdGhpcyBhZ2FpbiBhbnl0aW1l
IHNvb24uCi0gICAgICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgaWYgKHJlcGxh
Y2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBl
KCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAgICAgSlNPYmplY3QqIGVycm9yID0gc3Rh
dGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRp
bWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwogICAgIHJldHVybiBlcnJvcjsKIH0KIAogSlNP
YmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhl
YywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQogewotICAgIGlmIChyZXBsYWNlbWVu
dCgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkg
ewotICAgICAgICAvLyBObyBPU1IgeWV0LCBzbyBtYWtlIHN1cmUgd2UgZG9uJ3QgaGl0IHRoaXMg
YWdhaW4gYW55dGltZSBzb29uLgotICAgICAgICBkb250T3B0aW1pemVBbnl0aW1lU29vbigpOwor
ICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJK
SVQoZ2V0SklUVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogICAgIEpTT2JqZWN0
KiBlcnJvciA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJs
ZSgpKS0+Y29tcGlsZU9wdGltaXplZEZvcihleGVjLCBzY29wZUNoYWluTm9kZSwgbV9pc0NvbnN0
cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKICAgICByZXR1cm4gZXJy
b3I7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CShyZXZpc2lvbiA5NDkyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBDb2RlQmxv
Y2tfaAogI2RlZmluZSBDb2RlQmxvY2tfaAogCisjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAu
aCIKICNpbmNsdWRlICJFdmFsQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIK
ICNpbmNsdWRlICJKSVRDb2RlLmgiCkBAIC0zNyw2ICszOCw3IEBACiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3QuaCIKICNpbmNsdWRlICJKdW1wVGFibGUuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgor
I2luY2x1ZGUgIlByZWRpY3Rpb25UcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiVVN0cmluZy5oIgogI2luY2x1ZGUgIldlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIu
aCIKQEAgLTIyNSw2ICsyMjcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAg
IENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLmdldCgpOyB9
CiAgICAgICAgIFBhc3NPd25QdHI8Q29kZUJsb2NrPiByZWxlYXNlQWx0ZXJuYXRpdmUoKSB7IHJl
dHVybiBtX2FsdGVybmF0aXZlLnJlbGVhc2UoKTsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBz
ZXRQcmVkaWN0aW9ucyhQYXNzT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBwcmVkaWN0aW9ucykg
eyBtX3ByZWRpY3Rpb25zID0gcHJlZGljdGlvbnM7IH0KKyAgICAgICAgUHJlZGljdGlvblRyYWNr
ZXIqIHByZWRpY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkaWN0aW9ucy5nZXQoKTsgfQog
CiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKICAgICAgICAgdm9p
ZCB2aXNpdFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CkBAIC0yOTgsNiArMzAzLDE3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHVubGlua0luY29taW5nQ2FsbHMoKTsKICNl
bmRpZgogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAgICAgdm9pZCBzZXRK
SVRDb2RlTWFwKFBhc3NPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IGppdENvZGVNYXApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1faml0Q29kZU1hcCA9IGppdENvZGVNYXA7CisgICAgICAgIH0K
KyAgICAgICAgQ29tcGFjdEpJVENvZGVNYXAqIGppdENvZGVNYXAoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOworICAgICAgICB9CisjZW5kaWYKKwog
I2lmIEVOQUJMRShJTlRFUlBSRVRFUikKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQo
SW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKQEAgLTU3NywxNiArNTkzLDg4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBjb3B5RGF0YUZyb21B
bHRlcm5hdGl2ZSgpOwogICAgICAgICAKKyAgICAgICAgLy8gRnVuY3Rpb25zIGZvciBjb250cm9s
bGluZyB3aGVuIHRpZXJlZCBjb21waWxhdGlvbiBraWNrcyBpbi4gIFRoaXMKKyAgICAgICAgLy8g
Y29udHJvbHMgYm90aCB3aGVuIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGlzIGludm9rZWQgYW5k
IHdoZW4gT1NSCisgICAgICAgIC8vIGVudHJ5IGhhcHBlbnMuIFR3byB0cmlnZ2VycyBleGlzdDog
dGhlIGxvb3AgdHJpZ2dlciBhbmQgdGhlIHJldHVybgorICAgICAgICAvLyB0cmlnZ2VyLiBJbiBl
aXRoZXIgY2FzZSwgd2hlbiBhbiBhZGRpdGlvbiB0byBtX2V4ZWN1dGVDb3VudGVyCisgICAgICAg
IC8vIGNhdXNlcyBpdCB0byBiZWNvbWUgbm9uLW5lZ2F0aXZlLCB0aGUgb3B0aW1pemluZyBjb21w
aWxlciBpcworICAgICAgICAvLyBpbnZva2VkLiBUaGlzIGluY2x1ZGVzIGEgZmFzdCBjaGVjayB0
byBzZWUgaWYgdGhpcyBDb2RlQmxvY2sgaGFzCisgICAgICAgIC8vIGFscmVhZHkgYmVlbiBvcHRp
bWl6ZWQgKGkuZS4gcmVwbGFjZW1lbnQoKSByZXR1cm5zIGEgQ29kZUJsb2NrCisgICAgICAgIC8v
IHRoYXQgd2FzIG9wdGltaXplZCB3aXRoIGEgaGlnaGVyIHRpZXIgSklUIHRoYW4gdGhpcyBvbmUp
LiBJbiB0aGUKKyAgICAgICAgLy8gY2FzZSBvZiB0aGUgbG9vcCB0cmlnZ2VyLCBpZiB0aGUgb3B0
aW1pemVkIGNvbXBpbGF0aW9uIHN1Y2NlZWRzCisgICAgICAgIC8vIChvciBoYXMgYWxyZWFkeSBz
dWNjZWVkZWQgaW4gdGhlIHBhc3QpIHRoZW4gT1NSIGlzIGF0dGVtcHRlZCB0bworICAgICAgICAv
LyByZWRpcmVjdCBwcm9ncmFtIGZsb3cgaW50byB0aGUgb3B0aW1pemVkIGNvZGUuCisgICAgICAg
IAorICAgICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUg
b3B0aW1pemF0aW9uIHRyaWdnZXJzLAorICAgICAgICAvLyBhbmQgYXJlIHVzZWQgYXMgYSBzaW5n
bGUgcG9pbnQgYXQgd2hpY2ggd2UgZGVmaW5lIHRoZSBoZXVyaXN0aWNzCisgICAgICAgIC8vIGZv
ciBob3cgbXVjaCB3YXJtLXVwIGlzIG1hbmRhdGVkIGJlZm9yZSB0aGUgbmV4dCBvcHRpbWl6YXRp
b24KKyAgICAgICAgLy8gdHJpZ2dlciBmaWxlcy4gQWxsIENvZGVCbG9ja3Mgc3RhcnQgb3V0IHdp
dGggb3B0aW1pemVBZnRlcldhcm1VcCgpLAorICAgICAgICAvLyBhcyB0aGlzIGlzIGNhbGxlZCBm
cm9tIHRoZSBDb2RlQmxvY2sgY29uc3RydWN0b3IuCisgICAgICAgIAorICAgICAgICAvLyBUaGVz
ZSBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHRvIHN1cHBvcnQgY2FsbGluZworICAgICAgICAvLyBv
cHRpbWl6ZUFmdGVyV2FybVVwKCkgZnJvbSBKSVQtZ2VuZXJhdGVkIGNvZGUuCisgICAgICAgIGlu
dDMyX3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAtMTAwMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50
MzJfdCogYWRkcmVzc09mRXhlY3V0ZUNvdW50ZXIoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gJm1fZXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IENhbGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJl
LiBUaGlzIGlzCisgICAgICAgIC8vIHJhcmVseSB3aXNlLCBzaW5jZSBvcHRpbWl6YXRpb24gdHJp
Z2dlcnMgYXJlIHR5cGljYWxseSBtb3JlCisgICAgICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1
dGluZyBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24o
KQogICAgICAgICB7CiAgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gMDsKICAgICAgICAg
fQogICAgICAgICAKKyAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIHByZXZlbnQgb3B0aW1pemF0aW9u
IGZyb20gaGFwcGVuaW5nIGFnYWluLiBOb3RlIHRoYXQKKyAgICAgICAgLy8gb3B0aW1pemF0aW9u
IHdpbGwgc3RpbGwgaGFwcGVuIGFmdGVyIHJvdWdobHkgMl4yOSBpbnZvY2F0aW9ucywKKyAgICAg
ICAgLy8gc28gdGhpcyBpcyByZWFsbHkgbWVhbnQgdG8gZGVsYXkgdGhhdCBhcyBtdWNoIGFzIHBv
c3NpYmxlLiBUaGlzCisgICAgICAgIC8vIGlzIGNhbGxlZCBpZiBvcHRpbWl6YXRpb24gZmFpbGVk
LCBhbmQgd2UgZXhwZWN0IGl0IHRvIGZhaWwgaW4KKyAgICAgICAgLy8gdGhlIGZ1dHVyZSBhcyB3
ZWxsLgogICAgICAgICB2b2lkIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCkKICAgICAgICAgewog
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1pbigpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgdG8g
cmVpbml0aWFsaXplIHRoZSBjb3VudGVyIHRvIGl0cyBzdGFydGluZyBzdGF0ZSwKKyAgICAgICAg
Ly8gZm9yY2luZyBhIHdhcm0tdXAgdG8gaGFwcGVuIGJlZm9yZSB0aGUgbmV4dCBvcHRpbWl6YXRp
b24gdHJpZ2dlcgorICAgICAgICAvLyBmaXJlcy4gVGhpcyBpcyBjYWxsZWQgaW4gdGhlIENvZGVC
bG9jayBjb25zdHJ1Y3Rvci4gSXQgYWxzbworICAgICAgICAvLyBtYWtlcyBzZW5zZSB0byBjYWxs
IHRoaXMgaWYgYW4gT1NSIGV4aXQgb2NjdXJyZWQuIE5vdGUgdGhhdAorICAgICAgICAvLyBPU1Ig
ZXhpdCBjb2RlIGlzIGNvZGUgZ2VuZXJhdGVkLCBzbyB0aGUgdmFsdWUgb2YgdGhlIGV4ZWN1dGUK
KyAgICAgICAgLy8gY291bnRlciB0aGF0IHRoaXMgY29ycmVzcG9uZHMgdG8gaXMgYWxzbyBhdmFp
bGFibGUgZGlyZWN0bHkuCisgICAgICAgIHZvaWQgb3B0aW1pemVBZnRlcldhcm1VcCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBjb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENhbGwg
dGhpcyB0byBjYXVzZSBhbiBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIHNvb24sIGJ1dAor
ICAgICAgICAvLyBub3QgbmVjZXNzYXJpbHkgdGhlIG5leHQgb25lLiBUaGlzIG1ha2VzIHNlbnNl
IGlmIG9wdGltaXphdGlvbgorICAgICAgICAvLyBzdWNjZWVkcy4gU3VjY2Vzc2Z1bHkgb3B0aW1p
emF0aW9uIG1lYW5zIHRoYXQgYWxsIGNhbGxzIGFyZQorICAgICAgICAvLyByZWxpbmtlZCB0byB0
aGUgb3B0aW1pemVkIGNvZGUsIHNvIHRoaXMgb25seSBhZmZlY3RzIGNhbGwKKyAgICAgICAgLy8g
ZnJhbWVzIHRoYXQgYXJlIHN0aWxsIGV4ZWN1dGluZyB0aGlzIENvZGVCbG9jay4gVGhlIHZhbHVl
IGhlcmUKKyAgICAgICAgLy8gaXMgdHVuZWQgdG8gc3RyaWtlIGEgYmFsYW5jZSBiZXR3ZWVuIHRo
ZSBjb3N0IG9mIE9TUiBlbnRyeQorICAgICAgICAvLyAod2hpY2ggaXMgdG9vIGhpZ2ggdG8gd2Fy
cmFudCBtYWtpbmcgZXZlcnkgbG9vcCBiYWNrIGVkZ2UgdG8KKyAgICAgICAgLy8gdHJpZ2dlciBP
U1IgaW1tZWRpYXRlbHkpIGFuZCB0aGUgY29zdCBvZiBleGVjdXRpbmcgYmFzZWxpbmUKKyAgICAg
ICAgLy8gY29kZSAod2hpY2ggaXMgaGlnaCBlbm91Z2ggdGhhdCB3ZSBkb24ndCBuZWNlc3Nhcmls
eSB3YW50IHRvCisgICAgICAgIC8vIGhhdmUgYSBmdWxsIHdhcm0tdXApLiBUaGUgaW50dWl0aW9u
IGZvciBjYWxsaW5nIHRoaXMgaW5zdGVhZCBvZgorICAgICAgICAvLyBvcHRpbWl6ZU5leHRJbnZv
Y2F0aW9uKCkgaXMgZm9yIHRoZSBjYXNlIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMKKyAgICAgICAg
Ly8gd2l0aCBsb29wcy4gQ29uc2lkZXIgdGhhdCB0aGVyZSBtYXkgYmUgTiBjYWxsIGZyYW1lcyBv
ZiBzb21lCisgICAgICAgIC8vIHJlY3Vyc2l2ZSBmdW5jdGlvbiwgZm9yIGEgcmVhc29uYWJseSBs
YXJnZSB2YWx1ZSBvZiBOLiBUaGUgdG9wCisgICAgICAgIC8vIG9uZSB0cmlnZ2VycyBvcHRpbWl6
YXRpb24sIGFuZCB0aGVuIHJldHVybnMsIGFuZCB0aGVuIGFsbCBvZgorICAgICAgICAvLyB0aGUg
b3RoZXJzIHJldHVybi4gV2UgZG9uJ3Qgd2FudCBvcHRpbWl6YXRpb24gdG8gYmUgdHJpZ2dlcmVk
IG9uCisgICAgICAgIC8vIGVhY2ggcmV0dXJuLCBhcyB0aGF0IHdvdWxkIGJlIHN1cGVyZmx1b3Vz
LiBJdCBvbmx5IG1ha2VzIHNlbnNlCisgICAgICAgIC8vIHRvIHRyaWdnZXIgb3B0aW1pemF0aW9u
IGlmIG9uZSBvZiB0aG9zZSBmdW5jdGlvbnMgYmVjb21lcyBob3QKKyAgICAgICAgLy8gaW4gdGhl
IGJhc2VsaW5lIGNvZGUuCisgICAgICAgIHZvaWQgb3B0aW1pemVTb29uKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IC0xMDA7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIGludDMyX3QgbV9leGVjdXRlQ291bnRlcjsKIAogICAgICAgICAvLyBGSVhNRTog
TWFrZSB0aGVzZSByZW1haW5pbmcgbWVtYmVycyBwcml2YXRlLgpAQCAtNjUxLDExICs3MzksMTUg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENv
ZGVXaXRoQXJpdHlDaGVjazsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5m
bywgQmFzaWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsK
ICNlbmRpZgorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIE93blB0cjxD
b21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOworI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVF
X1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3Zh
bHVlUHJvZmlsZXM7CiAjZW5kaWYKIAogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fanVtcFRh
cmdldHM7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9sb29wVGFyZ2V0czsKIAogICAgICAg
ICAvLyBDb25zdGFudCBQb29sCiAgICAgICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50aWZp
ZXJzOwpAQCAtNjY2LDcgKzc1OCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFN5bWJv
bFRhYmxlKiBtX3N5bWJvbFRhYmxlOwogCi0gICAgICAgIE93blB0cjxDb2RlQmxvY2s+IG1fYWx0
ZXJuYXRpdmU7IC8vIEZJWE1FIG1ha2UgdGhpcyBkbyBzb21ldGhpbmcKKyAgICAgICAgT3duUHRy
PENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKKyAgICAgICAgCisgICAgICAgIE93blB0cjxQcmVk
aWN0aW9uVHJhY2tlcj4gbV9wcmVkaWN0aW9uczsKIAogICAgICAgICBzdHJ1Y3QgUmFyZURhdGEg
ewogICAgICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDk0OTI3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiAr
MTU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIG1hY3JvKG9wX2xvb3BfaWZfbGVzc2Vx
LCA0KSBcCiAgICAgICAgIG1hY3JvKG9wX2xvb3BfaWZfZ3JlYXRlciwgNCkgXAogICAgICAgICBt
YWNybyhvcF9sb29wX2lmX2dyZWF0ZXJlcSwgNCkgXAorICAgICAgICBtYWNybyhvcF9sb29wX2hp
bnQsIDEpIFwKICAgICAgICAgbWFjcm8ob3Bfc3dpdGNoX2ltbSwgNCkgXAogICAgICAgICBtYWNy
byhvcF9zd2l0Y2hfY2hhciwgNCkgXAogICAgICAgICBtYWNybyhvcF9zd2l0Y2hfc3RyaW5nLCA0
KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRU
eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJl
ZGljdGVkVHlwZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQcmVk
aWN0ZWRUeXBlX2gKKyNkZWZpbmUgUHJlZGljdGVkVHlwZV9oCisKKyNpbmNsdWRlICJWYWx1ZVBy
b2ZpbGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgdWludDhfdCBQcmVkaWN0ZWRU
eXBlOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdE5vbmUgICA9IDA7CitzdGF0
aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Q2VsbCAgID0gMHgwMTsKK3N0YXRpYyBjb25z
dCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RBcnJheSAgPSAweDAzOworc3RhdGljIGNvbnN0IFByZWRp
Y3RlZFR5cGUgUHJlZGljdEludDMyICA9IDB4MDQ7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlw
ZSBQcmVkaWN0RG91YmxlID0gMHgwODsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRp
Y3ROdW1iZXIgPSAweDBjOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEJvb2xl
YW4gPSAweDEwOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdFRvcCAgICA9IDB4
MWY7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBTdHJvbmdQcmVkaWN0aW9uVGFnID0gMHg4
MDsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3Rpb25UYWdNYXNrICAgID0gMHg4
MDsKKworZW51bSBQcmVkaWN0aW9uU291cmNlIHsgV2Vha1ByZWRpY3Rpb24sIFN0cm9uZ1ByZWRp
Y3Rpb24gfTsKKworaW5saW5lIGJvb2wgaXNDZWxsUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZh
bHVlKQoreworICAgIHJldHVybiAodmFsdWUgJiBQcmVkaWN0Q2VsbCkgPT0gUHJlZGljdENlbGwg
JiYgISh2YWx1ZSAmIH4oUHJlZGljdEFycmF5IHwgUHJlZGljdGlvblRhZ01hc2spKTsKK30KKwor
aW5saW5lIGJvb2wgaXNBcnJheVByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0QXJyYXk7Cit9
CisKK2lubGluZSBib29sIGlzSW50MzJQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCit7
CisgICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0gUHJlZGljdEludDMy
OworfQorCitpbmxpbmUgYm9vbCBpc0RvdWJsZVByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0
RG91YmxlOworfQorCitpbmxpbmUgYm9vbCBpc051bWJlclByZWRpY3Rpb24oUHJlZGljdGVkVHlw
ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gISEodmFsdWUgJiBQcmVkaWN0TnVtYmVyKSAmJiAhKHZh
bHVlICYgfihQcmVkaWN0TnVtYmVyIHwgUHJlZGljdGlvblRhZ01hc2spKTsKK30KKworaW5saW5l
IGJvb2wgaXNCb29sZWFuUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQoreworICAgIHJl
dHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spID09IFByZWRpY3RCb29sZWFuOworfQor
CitpbmxpbmUgYm9vbCBpc1N0cm9uZ1ByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKK3sK
KyAgICBBU1NFUlQodmFsdWUgIT0gKFByZWRpY3ROb25lIHwgU3Ryb25nUHJlZGljdGlvblRhZykp
OworICAgIHJldHVybiAhISh2YWx1ZSAmIFN0cm9uZ1ByZWRpY3Rpb25UYWcpOworfQorCisjaWZu
ZGVmIE5ERUJVRworaW5saW5lIGNvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQcmVkaWN0
ZWRUeXBlIHZhbHVlKQoreworICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24odmFsdWUpKSB7Cisg
ICAgICAgIHN3aXRjaCAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spIHsKKyAgICAgICAgY2Fz
ZSBQcmVkaWN0Tm9uZToKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctYm90dG9tIjsKKyAg
ICAgICAgY2FzZSBQcmVkaWN0Q2VsbDoKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctY2Vs
bCI7CisgICAgICAgIGNhc2UgUHJlZGljdEFycmF5OgorICAgICAgICAgICAgcmV0dXJuICJwLXN0
cm9uZy1hcnJheSI7CisgICAgICAgIGNhc2UgUHJlZGljdEludDMyOgorICAgICAgICAgICAgcmV0
dXJuICJwLXN0cm9uZy1pbnQzMiI7CisgICAgICAgIGNhc2UgUHJlZGljdERvdWJsZToKKyAgICAg
ICAgICAgIHJldHVybiAicC1zdHJvbmctZG91YmxlIjsKKyAgICAgICAgY2FzZSBQcmVkaWN0TnVt
YmVyOgorICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1udW1iZXIiOworICAgICAgICBjYXNl
IFByZWRpY3RCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1ib29sZWFuIjsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctdG9wIjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBzd2l0Y2ggKHZhbHVlKSB7CisgICAgY2FzZSBQcmVkaWN0Tm9u
ZToKKyAgICAgICAgcmV0dXJuICJwLXdlYWstYm90dG9tIjsKKyAgICBjYXNlIFByZWRpY3RDZWxs
OgorICAgICAgICByZXR1cm4gInAtd2Vhay1jZWxsIjsKKyAgICBjYXNlIFByZWRpY3RBcnJheToK
KyAgICAgICAgcmV0dXJuICJwLXdlYWstYXJyYXkiOworICAgIGNhc2UgUHJlZGljdEludDMyOgor
ICAgICAgICByZXR1cm4gInAtd2Vhay1pbnQzMiI7CisgICAgY2FzZSBQcmVkaWN0RG91YmxlOgor
ICAgICAgICByZXR1cm4gInAtd2Vhay1kb3VibGUiOworICAgIGNhc2UgUHJlZGljdE51bWJlcjoK
KyAgICAgICAgcmV0dXJuICJwLXdlYWstbnVtYmVyIjsKKyAgICBjYXNlIFByZWRpY3RCb29sZWFu
OgorICAgICAgICByZXR1cm4gInAtd2Vhay1ib29sZWFuIjsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gInAtd2Vhay10b3AiOworICAgIH0KK30KKyNlbmRpZgorCitpbmxpbmUgUHJlZGlj
dGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByZWRpY3RlZFR5cGUgbGVmdCwgUHJlZGljdGVkVHlw
ZSByaWdodCkKK3sKKyAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpID09IGlzU3Ryb25n
UHJlZGljdGlvbihyaWdodCkpCisgICAgICAgIHJldHVybiBsZWZ0IHwgcmlnaHQ7CisgICAgaWYg
KGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSkgeworICAgICAgICBBU1NFUlQoIWlzU3Ryb25nUHJl
ZGljdGlvbihyaWdodCkpOworICAgICAgICByZXR1cm4gbGVmdDsKKyAgICB9CisgICAgQVNTRVJU
KCFpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkpOworICAgIEFTU0VSVChpc1N0cm9uZ1ByZWRpY3Rp
b24ocmlnaHQpKTsKKyAgICByZXR1cm4gcmlnaHQ7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitpbmxpbmUgYm9vbCBtZXJnZVByZWRpY3Rpb24oVCYgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdo
dCkKK3sKKyAgICBQcmVkaWN0ZWRUeXBlIG5ld1ByZWRpY3Rpb24gPSBzdGF0aWNfY2FzdDxUPiht
ZXJnZVByZWRpY3Rpb25zKHN0YXRpY19jYXN0PFByZWRpY3RlZFR5cGU+KGxlZnQpLCByaWdodCkp
OworICAgIGJvb2wgcmVzdWx0ID0gbmV3UHJlZGljdGlvbiAhPSBzdGF0aWNfY2FzdDxQcmVkaWN0
ZWRUeXBlPihsZWZ0KTsKKyAgICBsZWZ0ID0gbmV3UHJlZGljdGlvbjsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitpbmxpbmUgUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihQcmVkaWN0ZWRU
eXBlIHR5cGUsIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQoreworICAgIEFTU0VSVCghKHR5cGUg
JiBTdHJvbmdQcmVkaWN0aW9uVGFnKSk7CisgICAgQVNTRVJUKHNvdXJjZSA9PSBTdHJvbmdQcmVk
aWN0aW9uIHx8IHNvdXJjZSA9PSBXZWFrUHJlZGljdGlvbik7CisgICAgaWYgKHR5cGUgPT0gUHJl
ZGljdE5vbmUpCisgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKKyAgICByZXR1cm4gdHlwZSB8
IChzb3VyY2UgPT0gU3Ryb25nUHJlZGljdGlvbiA/IFN0cm9uZ1ByZWRpY3Rpb25UYWcgOiAwKTsK
K30KKworI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKK2lubGluZSBQcmVkaWN0ZWRUeXBlIG1h
a2VQcmVkaWN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgVmFsdWVQcm9maWxl
JiBwcm9maWxlKQoreworICAgIFZhbHVlUHJvZmlsZTo6U3RhdGlzdGljcyBzdGF0aXN0aWNzOwor
ICAgIHByb2ZpbGUuY29tcHV0ZVN0YXRpc3RpY3MoZ2xvYmFsRGF0YSwgc3RhdGlzdGljcyk7Cisg
ICAgCisgICAgaWYgKCFzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBQcmVkaWN0
Tm9uZTsKKyAgICAKKyAgICBpZiAoc3RhdGlzdGljcy5pbnQzMnMgPT0gc3RhdGlzdGljcy5zYW1w
bGVzKQorICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RJbnQzMjsK
KyAgICAKKyAgICBpZiAoc3RhdGlzdGljcy5kb3VibGVzID09IHN0YXRpc3RpY3Muc2FtcGxlcykK
KyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0RG91YmxlOworICAg
IAorICAgIGlmIChzdGF0aXN0aWNzLmludDMycyArIHN0YXRpc3RpY3MuZG91YmxlcyA9PSBzdGF0
aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJl
ZGljdE51bWJlcjsKKyAgICAKKyAgICBpZiAoc3RhdGlzdGljcy5hcnJheXMgPT0gc3RhdGlzdGlj
cy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RB
cnJheTsKKyAgICAKKyAgICBpZiAoc3RhdGlzdGljcy5jZWxscyA9PSBzdGF0aXN0aWNzLnNhbXBs
ZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdENlbGw7Cisg
ICAgCisgICAgaWYgKHN0YXRpc3RpY3MuYm9vbGVhbnMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQor
ICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RCb29sZWFuOworICAg
IAorICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdFRvcDsKK30KKyNlbmRp
ZgorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFByZWRpY3RlZFR5cGVfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rpb25UcmFj
a2VyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJl
ZGljdGlvblRyYWNrZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQcmVkaWN0aW9u
VHJhY2tlcl9oCisjZGVmaW5lIFByZWRpY3Rpb25UcmFja2VyX2gKKworI2luY2x1ZGUgIlByZWRp
Y3RlZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIGhlbHBlciBmdW5jdGlvbiB0byBkaXN0aW5n
dWlzaCB2YXJzICYgdGVtcG9yYXJpZXMgZnJvbSBhcmd1bWVudHMuCitpbmxpbmUgYm9vbCBvcGVy
YW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCA8IDA7IH0KKworc3Ry
dWN0IFByZWRpY3Rpb25TbG90IHsKK3B1YmxpYzoKKyAgICBQcmVkaWN0aW9uU2xvdCgpCisgICAg
ICAgIDogbV92YWx1ZShQcmVkaWN0Tm9uZSkKKyAgICB7CisgICAgfQorICAgIFByZWRpY3RlZFR5
cGUgbV92YWx1ZTsKK307CisKK2NsYXNzIFByZWRpY3Rpb25UcmFja2VyIHsKK3B1YmxpYzoKKyAg
ICBQcmVkaWN0aW9uVHJhY2tlcigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBQcmVkaWN0aW9u
VHJhY2tlcih1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bVZhcmlhYmxlcykKKyAg
ICAgICAgOiBtX2FyZ3VtZW50cyhudW1Bcmd1bWVudHMpCisgICAgICAgICwgbV92YXJpYWJsZXMo
bnVtVmFyaWFibGVzKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplU2lt
aWxhclRvKGNvbnN0IFByZWRpY3Rpb25UcmFja2VyJiBvdGhlcikKKyAgICB7CisgICAgICAgIG1f
YXJndW1lbnRzLnJlc2l6ZShvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICAgICAgbV92
YXJpYWJsZXMucmVzaXplKG90aGVyLm51bWJlck9mVmFyaWFibGVzKCkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGNvcHlMb2NhbHNGcm9tKGNvbnN0IFByZWRpY3Rpb25UcmFja2VyJiBvdGhlcikK
KyAgICB7CisgICAgICAgIG1fYXJndW1lbnRzID0gb3RoZXIubV9hcmd1bWVudHM7CisgICAgICAg
IG1fdmFyaWFibGVzID0gb3RoZXIubV92YXJpYWJsZXM7CisgICAgfQorICAgIAorICAgIHNpemVf
dCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKTsg
fQorICAgIHNpemVfdCBudW1iZXJPZlZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFi
bGVzLnNpemUoKTsgfQorICAgIAorICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5k
KGludCBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgp
ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyB9CisKKyAgICBib29sIHByZWRp
Y3RBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQ
cmVkaWN0aW9uU291cmNlIHNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtZXJnZVByZWRp
Y3Rpb24obV9hcmd1bWVudHNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRp
Y3Rpb24sIHNvdXJjZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHByZWRpY3QoaW50IG9wZXJh
bmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCisg
ICAgeworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgICAg
ICByZXR1cm4gcHJlZGljdEFyZ3VtZW50KGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKG9wZXJhbmQp
LCBwcmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPj0g
bV92YXJpYWJsZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBBU1NFUlQob3BlcmFuZCA+PSAwKTsK
KyAgICAgICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvcGVyYW5kICsgMSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV92YXJpYWJsZXNbb3Bl
cmFuZF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CisgICAg
fQorICAgIAorICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1iZXIsIFBy
ZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCisgICAgewor
ICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2dsb2JhbFZhcnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0g
bV9nbG9iYWxWYXJzLmVuZCgpKSB7CisgICAgICAgICAgICBQcmVkaWN0aW9uU2xvdCBwcmVkaWN0
aW9uU2xvdDsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbWVyZ2VQcmVkaWN0aW9uKHByZWRp
Y3Rpb25TbG90Lm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwor
ICAgICAgICAgICAgbV9nbG9iYWxWYXJzLmFkZCh2YXJOdW1iZXIgKyAxLCBwcmVkaWN0aW9uU2xv
dCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIHJldHVy
biBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHBy
ZWRpY3Rpb24sIHNvdXJjZSkpOworICAgIH0KKyAgICAKKyAgICBQcmVkaWN0ZWRUeXBlIGdldEFy
Z3VtZW50UHJlZGljdGlvbih1bnNpZ25lZCBhcmd1bWVudCkKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2FyZ3VtZW50c1thcmd1bWVudF0ubV92YWx1ZTsKKyAgICB9CisKKyAgICBQcmVkaWN0ZWRU
eXBlIGdldFByZWRpY3Rpb24oaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnRQcmVk
aWN0aW9uKGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKG9wZXJhbmQpKTsKKyAgICAgICAgaWYgKCh1
bnNpZ25lZClvcGVyYW5kIDwgbV92YXJpYWJsZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IG1fdmFyaWFibGVzW29wZXJhbmRdLm1fdmFsdWU7CisgICAgICAgIHJldHVybiBQcmVkaWN0Tm9u
ZTsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGVkVHlwZSBnZXRHbG9iYWxWYXJQcmVkaWN0aW9u
KHVuc2lnbmVkIHZhck51bWJlcikKKyAgICB7CisgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFBy
ZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFycy5maW5kKHZhck51bWJl
ciArIDEpOworICAgICAgICBpZiAoaXRlciA9PSBtX2dsb2JhbFZhcnMuZW5kKCkpCisgICAgICAg
ICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQubV92
YWx1ZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFZlY3RvcjxQcmVkaWN0aW9uU2xvdCwg
MTY+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxQcmVkaWN0aW9uU2xvdCwgMTY+IG1fdmFyaWFi
bGVzOworICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90PiBtX2dsb2JhbFZhcnM7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFByZWRpY3Rpb25UcmFja2Vy
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDk0OTI3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICovCiAKICNpZm5kZWYg
TkRFQlVHCi1zdGF0aWMgYm9vbCBzX2R1bXBzR2VuZXJhdGVkQ29kZSA9IGZhbHNlOworc3RhdGlj
IGJvb2wgc19kdW1wc0dlbmVyYXRlZENvZGUgPSB0cnVlOwogI2VuZGlmCiAKIHZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OnNldER1bXBzR2VuZXJhdGVkQ29kZShib29sIGR1bXBzR2VuZXJhdGVkQ29k
ZSkKQEAgLTY1OCw2ICs2NTgsMTMgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wY29k
ZShPcGNvZAogICAgIG1fbGFzdE9wY29kZUlEID0gb3Bjb2RlSUQ7CiB9CiAKK3ZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRMb29wSGludCgpCit7CisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxB
VElPTikKKyAgICBlbWl0T3Bjb2RlKG9wX2xvb3BfaGludCk7CisjZW5kaWYKK30KKwogdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cmV0cmlldmVMYXN0QmluYXJ5T3AoaW50JiBkc3RJbmRleCwgaW50
JiBzcmMxSW5kZXgsIGludCYgc3JjMkluZGV4KQogewogICAgIEFTU0VSVChpbnN0cnVjdGlvbnMo
KS5zaXplKCkgPj0gNCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDkyNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQ1LDYgKzM0NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRUb1ByaW1pdGl2ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CiAK
ICAgICAgICAgUGFzc1JlZlB0cjxMYWJlbD4gZW1pdExhYmVsKExhYmVsKik7CisgICAgICAgIHZv
aWQgZW1pdExvb3BIaW50KCk7CiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRKdW1wKExh
YmVsKiB0YXJnZXQpOwogICAgICAgICBQYXNzUmVmUHRyPExhYmVsPiBlbWl0SnVtcElmVHJ1ZShS
ZWdpc3RlcklEKiBjb25kLCBMYWJlbCogdGFyZ2V0KTsKICAgICAgICAgUGFzc1JlZlB0cjxMYWJl
bD4gZW1pdEp1bXBJZkZhbHNlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsKiB0YXJnZXQpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcAkocmV2aXNpb24gOTQ5MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NjksNyArMTQ2OSw3
IEBAIFJlZ2lzdGVySUQqIERvV2hpbGVOb2RlOjplbWl0Qnl0ZWNvZGUoQnkKIAogICAgIFJlZlB0
cjxMYWJlbD4gdG9wT2ZMb29wID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgZ2VuZXJhdG9y
LmVtaXRMYWJlbCh0b3BPZkxvb3AuZ2V0KCkpOwotCisgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGlu
dCgpOwogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBm
aXJzdExpbmUoKSwgbGFzdExpbmUoKSk7CiAgICAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVz
dWx0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOwpAQCAtMTQ5Nyw2ICsx
NDk3LDcgQEAgUmVnaXN0ZXJJRCogV2hpbGVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogCiAgICAg
UmVmUHRyPExhYmVsPiB0b3BPZkxvb3AgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKHRvcE9mTG9vcC5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRMb29w
SGludCgpOwogICAgIAogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsK
IApAQCAtMTUzMiw2ICsxNTMzLDcgQEAgUmVnaXN0ZXJJRCogRm9yTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjbwogCiAgICAgUmVmUHRyPExhYmVsPiB0b3BPZkxvb3AgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHRvcE9mTG9vcC5nZXQoKSk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRMb29wSGludCgpOwogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9
IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKIApAQCAtMTU3OSw2ICsxNTgx
LDcgQEAgUmVnaXN0ZXJJRCogRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogCiAgICAgUmVm
UHRyPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGlu
dCgpOwogCiAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lOwogICAgIGJvb2wgb3B0aW1pemVk
Rm9yaW5BY2Nlc3MgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NDkyNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjcsMTQgKzM2NywxOCBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudDEpLmFzSW50
MzIoKSA9PSAxKTsKICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudDEpOwog
ICAgIH0KLQorICAgIAorICAgIENvZGVPcmlnaW4gY3VycmVudENvZGVPcmlnaW4oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIENvZGVPcmlnaW4obV9jdXJyZW50SW5kZXgpOworICAgIH0KIAogICAg
IC8vIFRoZXNlIG1ldGhvZHMgY3JlYXRlIGEgbm9kZSBhbmQgYWRkIGl0IHRvIHRoZSBncmFwaC4g
SWYgbm9kZXMgb2YgdGhpcyB0eXBlIGFyZQogICAgIC8vICdtdXN0R2VuZXJhdGUnIHRoZW4gdGhl
IG5vZGUgIHdpbGwgaW1wbGljaXRseSBiZSByZWYnZWQgdG8gZW5zdXJlIGdlbmVyYXRpb24uCiAg
ICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE5vZGVJbmRleCBjaGlsZDEgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05v
ZGUpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1f
Z3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBtX2N1cnJlbnRJ
bmRleCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChO
b2RlKG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAK
ICAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgu
cmVmKHJlc3VsdEluZGV4KTsKQEAgLTM4Myw3ICszODcsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJ
bmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbywgTm9kZUluZGV4IGNoaWxk
MSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9
IE5vTm9kZSkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5k
ZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3Vy
cmVudEluZGV4LCBpbmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CisgICAgICAgIG1fZ3Jh
cGguYXBwZW5kKE5vZGUob3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIGNoaWxkMSwgY2hp
bGQyLCBjaGlsZDMpKTsKIAogICAgICAgICBpZiAob3AgJiBOb2RlTXVzdEdlbmVyYXRlKQogICAg
ICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0SW5kZXgpOwpAQCAtMzkyLDcgKzM5Niw3IEBAIHBy
aXZhdGU6CiAgICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZv
MSwgT3BJbmZvIGluZm8yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hp
bGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAg
Tm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAg
ICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgbV9jdXJyZW50SW5kZXgsIGluZm8xLCBpbmZvMiwg
Y2hpbGQxLCBjaGlsZDIsIGNoaWxkMykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9w
LCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGls
ZDMpKTsKIAogICAgICAgICBpZiAob3AgJiBOb2RlTXVzdEdlbmVyYXRlKQogICAgICAgICAgICAg
bV9ncmFwaC5yZWYocmVzdWx0SW5kZXgpOwpAQCAtNDAyLDcgKzQwNiw3IEBAIHByaXZhdGU6CiAg
ICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgT3BJ
bmZvIGluZm8xLCBPcEluZm8gaW5mbzIpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0
SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVu
ZChOb2RlKE5vZGU6OlZhckFyZywgb3AsIG1fY3VycmVudEluZGV4LCBpbmZvMSwgaW5mbzIsIG1f
Z3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVt
UGFzc2VkVmFyQXJncykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKE5vZGU6OlZhckFy
Zywgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwgbV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuLnNpemUoKSAtIG1fbnVtUGFzc2VkVmFyQXJncywgbV9udW1QYXNzZWRWYXJBcmdz
KSk7CiAgICAgICAgIAogICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MgPSAwOwogICAgICAgICAK
QEAgLTU5MCw2ICs1OTQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERhdGEtPmludGVy
cHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIHVuc2lnbmVkIGJsb2NrQmVnaW4gPSBtX2N1
cnJlbnRJbmRleDsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBEb24ndCBleHRlbmQg
b3ZlciBqdW1wIGRlc3RpbmF0aW9ucy4KICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID09IGxp
bWl0KSB7CkBAIC0xMjA3LDYgKzEyMTIsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9yZXNvbHZlX2Jhc2Up
OwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9sb29wX2hpbnQ6IHsK
KyAgICAgICAgICAgIC8vIEJhc2VsaW5lLT5ERkcgT1NSIGp1bXBzIGJldHdlZW4gbG9vcCBoaW50
cy4gVGhlIERGRyBhc3N1bWVzIHRoYXQgQmFzZWxpbmUtPkRGRworICAgICAgICAgICAgLy8gT1NS
IGNhbiBvbmx5IGhhcHBlbiBhdCBiYXNpYyBibG9jayBib3VuZGFyaWVzLiBBc3NlcnQgdGhhdCB0
aGVzZSB0d28gc3RhdGVtZW50cworICAgICAgICAgICAgLy8gYXJlIGNvbXBhdGlibGUuCisgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKGJsb2NrQmVnaW4sIG1fY3VycmVudEluZGV4ID09IGJsb2Nr
QmVnaW4pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+aXNPU1JU
YXJnZXQgPSB0cnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9s
b29wX2hpbnQpOworICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8v
IFBhcnNlIGZhaWxlZCEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuaAkocmV2aXNpb24gOTQ5MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgaW5s
aW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCBvcAogICAgIGNhc2Ugb3Bfam5sZXNz
ZXE6CiAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CiAgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKKyAg
ICBjYXNlIG9wX2xvb3BfaGludDoKICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzczoKICAgICBjYXNl
IG9wX2xvb3BfaWZfbGVzc2VxOgogICAgIGNhc2Ugb3BfbG9vcF9pZl9ncmVhdGVyOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gOTQ5MjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDYgKzM3LDE1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIGVudW0g
Q29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9OwogaW5saW5lIGJv
b2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTW9kZSwgRXhlY1N0YXRlKiBleGVjLCBFeGVj
U3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSklUQ29kZSYgaml0
Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCiB7Cisg
ICAgaWYgKGZhbHNlKSB7CisgICAgICAgIHN3aXRjaCAoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKSB7CisgICAgICAgIGNhc2UgMTExNzY6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIEdyYXBoIGRmZyhjb2RlQmxvY2stPm1fbnVt
UGFyYW1ldGVycywgY29kZUJsb2NrLT5tX251bVZhcnMpOwogICAgIGlmICghcGFyc2UoZGZnLCBn
bG9iYWxEYXRhLCBjb2RlQmxvY2spKQpAQCAtNDcsNiArNTYsMTcgQEAgaW5saW5lIGJvb2wgY29t
cGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgIAogICAgIHByb3BhZ2F0ZShkZmcsIGdsb2Jh
bERhdGEsIGNvZGVCbG9jayk7CiAgICAgCisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9O
KQorICAgIC8vIFNhdmUgdGhlIHByZWRpY3Rpb25zIHdlJ3ZlIG1hZGUsIHNvIHRoYXQgT1NSIGVu
dHJ5IGNhbiB2ZXJpZnkgdGhlbS4gUHJlZGljdGlvbnMKKyAgICAvLyBhcmUgc2F2ZWQgaW4gdGhl
IENvZGVCbG9jayBmcm9tIHdoaWNoIHdlIHdpbGwgYmUgZG9pbmcgT1NSIGVudHJ5LCBzaW5jZSB0
aGUKKyAgICAvLyBDb2RlQmxvY2sgdG8gd2hpY2ggd2UgYXJlIE9TUmluZyBtYXkgYmUgcmVwbGFj
ZWQgYXQgYW55IHRpbWUuCisgICAgT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBwcmVkaWN0aW9u
cyA9IGFkb3B0UHRyKG5ldyBQcmVkaWN0aW9uVHJhY2tlcigpKTsKKyAgICAqcHJlZGljdGlvbnMg
PSBkZmcucHJlZGljdGlvbnMoKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+c2V0
UHJlZGljdGlvbnMocHJlZGljdGlvbnMucmVsZWFzZSgpKTsKKyNlbmRpZgorICAgIAogICAgIEpJ
VENvbXBpbGVyIGRhdGFGbG93SklUKGdsb2JhbERhdGEsIGRmZywgY29kZUJsb2NrKTsKICAgICBp
ZiAoY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VSVChqaXRD
b2RlV2l0aEFyaXR5Q2hlY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5oCShyZXZpc2lvbiA5NDkyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDEzIEBAIG5hbWVzcGFjZSBERkcgewog
I2lmIEVOQUJMRShERkdfSklUKQogYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9j
ayosIEpJVENvZGUmKTsKIGJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIEV4ZWNT
dGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CisKK3ZvaWQqIHByZXBhcmVPU1JFbnRy
eShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICNlbHNl
CiBpbmxpbmUgYm9vbCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUm
KSB7IHJldHVybiBmYWxzZTsgfQogaW5saW5lIGJvb2wgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNT
dGF0ZSosIEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIEpJVENvZGUmLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHImKSB7IHJldHVybiBmYWxzZTsgfQorCit2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0
YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQ
UkluZm8uaAkocmV2aXNpb24gOTQ5MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzID0gOTsKIAogICAgIC8vIFRo
ZXNlIHJlZ2lzdGVycyBtYXRjaCB0aGUgb2xkIEpJVC4KKyAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgc3RhdGljIGNv
bnN0IEdQUlJlZyB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjEyOwogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OnIx
MzsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciA9IFg4NlJl
Z2lzdGVyczo6cjE0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0
aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2Vu
ZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTQ5MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCwxMiArMjc0LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgdS5mcHIgPSBmcHI7CiAgICAgfQogCi0jaWZuZGVmIE5ERUJV
RwogICAgIGJvb2wgYWxpdmUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdXNlQ291bnQ7CiAg
ICAgfQotI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBub2RlIHdo
b3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk0OTI3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUy
LDEzICs1MiwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAg
ICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwogCiAgICAgdW5zaWduZWQgcmVmQ291bnQgPSBub2Rl
LnJlZkNvdW50KCk7Ci0gICAgaWYgKCFyZWZDb3VudCkgewotICAgICAgICBwcmludGYoIiUgNGQ6
XHRza2lwcGVkICVzXG4iLCAoaW50KW5vZGVJbmRleCwgb3BOYW1lKG9wKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgYm9vbCBza2lwcGVkID0gIXJlZkNvdW50OwogICAgIGJvb2wgbXVz
dEdlbmVyYXRlID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsKLSAgICBpZiAobXVzdEdlbmVyYXRlKQor
ICAgIGlmIChtdXN0R2VuZXJhdGUpIHsKKyAgICAgICAgQVNTRVJUKHJlZkNvdW50KTsKICAgICAg
ICAgLS1yZWZDb3VudDsKKyAgICB9CiAKICAgICAvLyBFeGFtcGxlL2V4cGxhbmF0aW9uIG9mIGRh
dGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAgLTc3LDggKzc2LDggQEAgdm9pZCBHcmFwaDo6
ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgIC8vICAgICAgICAgJCMgICAtIHRoZSBp
bmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBjb25zdGFu
dHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBkZWNpbWFs
IGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhlIENvZGVC
bG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1wKCks
IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8gICAgICAg
ICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5
IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAgICBwcmludGYoIiUgNGQ6
XHQ8JWMldToiLCAoaW50KW5vZGVJbmRleCwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZD
b3VudCk7Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpCisgICAgcHJpbnRmKCIlIDRkOiVzPCVj
JXU6IiwgKGludClub2RlSW5kZXgsIHNraXBwZWQgPyAiICBza2lwcGVkICAiIDogIiAgICAgICAg
ICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7CisgICAgaWYgKG5vZGUu
aGFzUmVzdWx0KCkgJiYgIXNraXBwZWQpCiAgICAgICAgIHByaW50ZigiJXUiLCBub2RlLnZpcnR1
YWxSZWdpc3RlcigpKTsKICAgICBlbHNlCiAgICAgICAgIHByaW50ZigiLSIpOwpAQCAtMTU0LDcg
KzE1Myw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KIHZvaWQg
R3JhcGg6OmR1bXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgZm9yIChzaXplX3QgYiA9
IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikgewotICAgICAgICBwcmludGYoIkJsb2NrICMl
dTpcbiIsIChpbnQpYik7CisgICAgICAgIHByaW50ZigiQmxvY2sgIyV1IChiYyMldSk6ICAlc1xu
IiwgKGludCliLCBtX2Jsb2Nrc1tiXS0+Ynl0ZWNvZGVCZWdpbiwgbV9ibG9ja3NbYl0tPmlzT1NS
VGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
bV9ibG9ja3NbYl0tPmJlZ2luOyBpIDwgbV9ibG9ja3NbYl0tPmVuZDsgKytpKQogICAgICAgICAg
ICAgZHVtcChpLCBjb2RlQmxvY2spOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHJldmlzaW9uIDk0OTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCi0jaW5jbHVkZSAiREZHUHJlZGlj
dGlvblRyYWNrZXIuaCIKKyNpbmNsdWRlICJQcmVkaWN0aW9uVHJhY2tlci5oIgogI2luY2x1ZGUg
IlJlZ2lzdGVyRmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgpAQCAtNjQsNiArNjQsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgICAg
IDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQogICAgICAgICAsIGJlZ2luKGJlZ2luKQog
ICAgICAgICAsIGVuZChOb05vZGUpCisgICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCiAgICAg
ICAgICwgbV9hcmd1bWVudHMobnVtQXJndW1lbnRzKQogICAgICAgICAsIG1fbG9jYWxzKG51bUxv
Y2FscykKICAgICB7CkBAIC03Nyw2ICs3OCw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIHsKICAgICB1
bnNpZ25lZCBieXRlY29kZUJlZ2luOwogICAgIE5vZGVJbmRleCBiZWdpbjsKICAgICBOb2RlSW5k
ZXggZW5kOworICAgIGJvb2wgaXNPU1JUYXJnZXQ7CiAKICAgICBQcmVkZWNlc3Nvckxpc3QgbV9w
cmVkZWNlc3NvcnM7CiAgICAgVmVjdG9yIDxWYXJpYWJsZVJlY29yZCwgOD4gbV9hcmd1bWVudHM7
CkBAIC0xNDEsNyArMTQzLDIyIEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHByZWRpY3QoTm9k
ZSYgbm9kZSwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJj
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25zLnByZWRpY3Qobm9kZSwgcHJl
ZGljdGlvbiwgc291cmNlKTsKKyAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgIGNh
c2UgR2V0TG9jYWw6CisgICAgICAgICAgICByZXR1cm4gcHJlZGljdChub2RlLmxvY2FsKCksIHBy
ZWRpY3Rpb24sIHNvdXJjZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRH
bG9iYWxWYXI6CisgICAgICAgICAgICByZXR1cm4gcHJlZGljdEdsb2JhbFZhcihub2RlLnZhck51
bWJlcigpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgR2V0QnlJZDoKKyAgICAgICAgY2FzZSBHZXRNZXRob2Q6CisgICAgICAgIGNhc2UgR2V0
QnlWYWw6CisgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAg
ICAgICAgICByZXR1cm4gbm9kZS5wcmVkaWN0KHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBQcmVkaWN0ZWRUeXBlIGdldFByZWRpY3Rpb24oaW50IG9wZXJhbmQpCkBAIC0xNjQsNyAr
MTgxLDIwIEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFZhbHVlVG9JbnQz
MikKICAgICAgICAgICAgIG5vZGVQdHIgPSAmKCp0aGlzKVtub2RlUHRyLT5jaGlsZDEoKV07CiAg
ICAgICAgIAotICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9ucy5nZXRQcmVkaWN0aW9uKCpub2Rl
UHRyKTsKKyAgICAgICAgc3dpdGNoIChub2RlUHRyLT5vcCkgeworICAgICAgICBjYXNlIEdldExv
Y2FsOgorICAgICAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb24obm9kZVB0ci0+bG9jYWwoKSk7
CisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgorICAgICAgICAgICAgcmV0dXJuIGdldEdsb2Jh
bFZhclByZWRpY3Rpb24obm9kZVB0ci0+dmFyTnVtYmVyKCkpOworICAgICAgICBjYXNlIEdldEJ5
SWQ6CisgICAgICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAg
ICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICAgICAgcmV0
dXJuIG5vZGVQdHItPmdldFByZWRpY3Rpb24oKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICAvLyBI
ZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiA5NDkyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMjYsMTcgKzExMjYsMTcgQEAgdm9pZCBKSVRD
b2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwogICAgIG1faml0LmFkZFB0cihJbW0zMiht
X2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpD
YWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKLSAgICBtX2ppdC5ub3RpZnlDYWxsKGZh
c3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAg
ICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4
XS5jb2RlT3JpZ2luKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOwogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAKICAgICBtX2pp
dC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICog
c2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYXBw
ZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2soc2xvd0NhbGxGdW5jdGlvbiwgbV9qaXQuZ3Jh
cGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgSklUQ29tcGlsZXI6OkNh
bGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhzbG93
Q2FsbEZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsK
ICAgICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3MpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgbV9q
aXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAq
IHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgbV9q
aXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQu
Z3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgbV9qaXQubm90aWZ5
Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVtt
X2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CiAgICAgCkBAIC0xMTQ0LDcgKzExNDQsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRD
YWxsKE5vZGUmIG5vCiAgICAgCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAg
Ci0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywg
aXNDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAg
ICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0Nh
bGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOwogfQogCiB2b2lk
IEpJVENvZGVHZW5lcmF0b3I6OnNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
anVtcFRvRmFpbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDkyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDcsNyArOTA3
LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24pCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9qaXQuYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbiwgbV9q
aXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgICAgIHJldHVy
biBtX2ppdC5hcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uLCBtX2ppdC5ncmFw
aCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICB9CiAKICAgICB2b2lkIGFkZEJy
YW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5h
dGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NDkyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDM3MyBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpmaWxsVG9KUyhOb2RlSW5kZXggbm9kCiAgICAgbG9hZFB0cihhZGRyZXNzRm9y
KG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIpOwogfQogCisjaWYgREZHX09TUl9FWElUCit2
b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmIGV4
aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5LCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXApCit7CisgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZm
LgorICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOworCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJ
VCBvZmZzZXQgMHgleCAgICIsIChpbnQpZXhpdC5tX25vZGVJbmRleCwgZXhpdC5tX2J5dGVjb2Rl
SW5kZXgsIGRlYnVnT2Zmc2V0KCkpOworICAgIGV4aXQuZHVtcChzdGRlcnIpOworI2VuZGlmCisj
aWYgREZHX0pJVF9CUkVBS19PTl9TUEVDVUxBVElPTl9GQUlMVVJFCisgICAgYnJlYWtwb2ludCgp
OworI2VuZGlmCisgICAgCisjaWYgREZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRQorICAg
IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyogZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9u
RmFpbHVyZURlYnVnSW5mbzsKKyAgICBkZWJ1Z0luZm8tPmNvZGVCbG9jayA9IG1fY29kZUJsb2Nr
OworICAgIGRlYnVnSW5mby0+ZGVidWdPZmZzZXQgPSBkZWJ1Z09mZnNldCgpOworICAgIAorICAg
IGRlYnVnQ2FsbChkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0lu
Zm8pOworI2VuZGlmCisgICAgCisgICAgLy8gMikgUGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVy
eS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3aGVuIGFuIG9wZXJhdGlvbgorICAgIC8vICAg
IHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBp
dCBoYXMgYWxyZWFkeSBtYWRlLgorICAgIAorICAgIEdQUlJlZyBhbHJlYWR5Qm94ZWQgPSBJbnZh
bGlkR1BSUmVnOworICAgIAorICAgIGlmIChyZWNvdmVyeSkgeworICAgICAgICBzd2l0Y2ggKHJl
Y292ZXJ5LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKKyAgICAgICAg
ICAgIHN1YjMyKHJlY292ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAg
ICBvclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkp
OworICAgICAgICAgICAgYWxyZWFkeUJveGVkID0gcmVjb3ZlcnktPmRlc3QoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9u
Q2hlY2s6CisgICAgICAgICAgICB4b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyAzKSBGaWd1cmUgb3V0IGhvdyBtYW55IHNjcmF0Y2ggc2xv
dHMgd2UnbGwgbmVlZC4gV2UgbmVlZCBvbmUgZm9yIGV2ZXJ5IEdQUi9GUFIKKyAgICAvLyAgICB3
aG9zZSBkZXN0aW5hdGlvbiBpcyBub3cgb2NjdXBpZWQgYnkgYSBERkcgdmlydHVhbCByZWdpc3Rl
ciwgYW5kIHdlIG5lZWQKKyAgICAvLyAgICBvbmUgZm9yIGV2ZXJ5IGRpc3BsYWNlZCB2aXJ0dWFs
IHJlZ2lzdGVyIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4KKyAgICAvLyAgICBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyBvZiB0aGVtLiBBbHNvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbnN0YW50
cywKKyAgICAvLyAgICBhbnkgdW5kZWZpbmVkIHNsb3RzLCBhbnkgRlBSIHNsb3RzLCBhbmQgYW55
IHVuYm94ZWQgaW50cy4KKyAgICAgICAgICAgIAorICAgIFZlY3Rvcjxib29sPiBwb2lzb25lZFZp
cnR1YWxSZWdpc3RlcnMoZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tpXSA9IGZhbHNlOworCisgICAgdW5zaWduZWQg
bnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgPSAwOworICAgIHVuc2lnbmVkIG51bWJl
ck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA9IDA7CisgICAgCisgICAgLy8gQm9vbGVhbnMg
Zm9yIGZhc3QgY2hlY2tzLiBXZSBleHBlY3QgdGhhdCBtb3N0IE9TUiBleGl0cyBkbyBub3QgaGF2
ZSB0byByZWJveAorICAgIC8vIEludDMycywgaGF2ZSBubyBGUFJzLCBhbmQgaGF2ZSBubyBjb25z
dGFudHMuIElmIHRoZXJlIGFyZSBjb25zdGFudHMsIHdlCisgICAgLy8gZXhwZWN0IG1vc3Qgb2Yg
dGhlbSB0byBiZSBqc1VuZGVmaW5lZCgpOyBpZiB0aGF0J3MgdHJ1ZSB0aGVuIHdlIGhhbmRsZSB0
aGF0CisgICAgLy8gc3BlY2lhbGx5IHRvIG1pbmltaXplIGNvZGUgc2l6ZSBhbmQgZXhlY3V0aW9u
IHRpbWUuCisgICAgYm9vbCBoYXZlVW5ib3hlZEludDMycyA9IGZhbHNlOworICAgIGJvb2wgaGF2
ZUZQUnMgPSBmYWxzZTsKKyAgICBib29sIGhhdmVDb25zdGFudHMgPSBmYWxzZTsKKyAgICBib29s
IGhhdmVVbmRlZmluZWQgPSBmYWxzZTsKKyAgICAKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Cisg
ICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBEaXNw
bGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIG51bWJlck9mRGlzcGxhY2VkVmlydHVh
bFJlZ2lzdGVycysrOworICAgICAgICAgICAgQVNTRVJUKChpbnQpcmVjb3ZlcnkudmlydHVhbFJl
Z2lzdGVyKCkgPj0gMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBt
aWdodCBsaWtlIHRvIHN0b3JlIHRvIHRoaXMgdmlydHVhbCByZWdpc3RlciBiZWZvcmUgZG9pbmcK
KyAgICAgICAgICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIgc2h1ZmZsaW5nLiBJZiBzbywgd2Ugc2F5
IHRoYXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIKKyAgICAgICAgICAgIC8vIGlzIHBvaXNvbmVkOiBp
dCBjYW5ub3QgYmUgc3RvcmVkIHRvIHVudGlsIGFmdGVyIGRpc3BsYWNlZCB2aXJ0dWFsCisgICAg
ICAgICAgICAvLyByZWdpc3RlcnMgYXJlIGhhbmRsZWQuIFdlIHRyYWNrIHBvaXNvbmVkIHZpcnR1
YWwgcmVnaXN0ZXIgY2FyZWZ1bGx5CisgICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhpcyBoYXBw
ZW5zIGVmZmljaWVudGx5LiBOb3RlIHRoYXQgd2UgZXhwZWN0IHRoaXMgY2FzZQorICAgICAgICAg
ICAgLy8gdG8gYmUgcmFyZSwgc28gdGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9wdGltaXplZCBmb3Ig
dGhlIGNhc2VzIGluCisgICAgICAgICAgICAvLyB3aGljaCBpdCBkb2VzIG5vdCBoYXBwZW4uCisg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KWV4aXQubV92
YXJpYWJsZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChleGl0Lm1fdmFyaWFi
bGVzW3JlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpXS50ZWNobmlxdWUoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQ
UjoKKyAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgICAgICAgICBpZiAo
IXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVy
eS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgbnVt
YmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVuYm94ZWRJ
bnQzMkluR1BSOgorICAgICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMnMgPSB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAg
ICAgIGhhdmVGUFJzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICBoYXZlQ29uc3RhbnRzID0gdHJ1ZTsK
KyAgICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAg
ICAgICAgICAgICAgaGF2ZVVuZGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgaW50NjRfdCogc2NyYXRjaEJ1ZmZlciA9IGdsb2JhbERhdGEo
KS0+b3NyU2NyYXRjaEJ1ZmZlckZvclNpemUobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnMgKyAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzIDw9IEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzID8gMCA6IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykpOwor
CisgICAgLy8gRnJvbSBoZXJlIG9uLCB0aGUgY29kZSBhc3N1bWVzIHRoYXQgaXQgaXMgcHJvZml0
YWJsZSB0byBtYXhpbWl6ZSB0aGUgZGlzdGFuY2UKKyAgICAvLyBiZXR3ZWVuIHdoZW4gc29tZXRo
aW5nIGlzIGNvbXB1dGVkIGFuZCB3aGVuIGl0IGlzIHN0b3JlZC4KKyAgICAKKyAgICAvLyA0KSBQ
ZXJmb3JtIGFsbCByZWJveGluZyBvZiBpbnRlZ2Vycy4KKyAgICAKKyAgICBpZiAoaGF2ZVVuYm94
ZWRJbnQzMnMpIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVt
YmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAg
IGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSA9PSBVbmJveGVkSW50MzJJbkdQUiAmJiByZWNvdmVy
eS5ncHIoKSAhPSBhbHJlYWR5Qm94ZWQpCisgICAgICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIoKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgLy8gNSkgRHVtcCBhbGwgbm9uLXBvaXNvbmVkIEdQUnMuIEZvciBwb2lzb25l
ZCBHUFJzLCBzYXZlIHRoZW0gaW50byB0aGUgc2NyYXRjaCBzdG9yYWdlLgorICAgIC8vICAgIE5v
dGUgdGhhdCBHUFJzIGRvIG5vdCBoYXZlIGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJl
Y2F1c2Ugd2UgZXhwZWN0IHRoYXQKKyAgICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3
aWxsIGhhdmUgYXQgbGVhc3Qgb25lIEdQUiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KKyAgICAK
KyAgICB1bnNpZ25lZCBzY3JhdGNoSW5kZXggPSAwOworICAgIGZvciAoaW50IGluZGV4ID0gMDsg
aW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsK
KyAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAg
ICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBJbkdQUjoK
KyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihyZWNvdmVyeS5ncHIo
KSwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBzdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgYWRkcmVzc0ZvcigoVmlydHVh
bFJlZ2lzdGVyKW9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gQXQg
dGhpcyBwb2ludCBhbGwgR1BScyBhcmUgYXZhaWxhYmxlIGZvciBzY3JhdGNoIHVzZS4KKyAgICAK
KyAgICBpZiAoaGF2ZUZQUnMpIHsKKyAgICAgICAgLy8gNikgQm94IGFsbCBkb3VibGVzIChyZWxp
ZXMgb24gdGhlcmUgYmVpbmcgbW9yZSBHUFJzIHRoYW4gRlBScykKKyAgICAgICAgCisgICAgICAg
IGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyAr
K2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4
aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5p
cXVlKCkgIT0gSW5GUFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBG
UFJSZWcgZnByID0gcmVjb3ZlcnkuZnByKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByID0gR1BS
SW5mbzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KGZwcikpOworICAgICAgICAgICAgYm94
RG91YmxlKGZwciwgZ3ByKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gNykgRHVt
cCBhbGwgZG91YmxlcyBpbnRvIHRoZSByZWdpc3RlciBmaWxlLCBvciB0byB0aGUgc2NyYXRjaCBz
dG9yYWdlIGlmCisgICAgICAgIC8vICAgIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIHJlZ2lzdGVy
IGlzIHBvaXNvbmVkLgorICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsK
KyAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKEZQUkluZm86OnRvSW5kZXgocmVjb3ZlcnkuZnByKCkpKTsKKyAgICAgICAgICAgIGlm
IChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0
LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihncHIs
IHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgc3RvcmVQdHIoZ3ByLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhp
dC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
QVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7
CisgICAgCisgICAgLy8gOCkgUmVzaHVmZmxlIGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVycy4g
T3B0aW1pemUgZm9yIHRoZSBjYXNlIHRoYXQKKyAgICAvLyAgICB0aGUgbnVtYmVyIG9mIGRpc3Bs
YWNlZCB2aXJ0dWFsIHJlZ2lzdGVycyBpcyBub3QgbW9yZSB0aGFuIHRoZSBudW1iZXIKKyAgICAv
LyAgICBvZiBhdmFpbGFibGUgcGh5c2ljYWwgcmVnaXN0ZXJzLgorICAgIAorICAgIGlmIChudW1i
ZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpIHsKKyAgICAgICAgaWYgKG51bWJlck9mRGlz
cGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykgewor
ICAgICAgICAgICAgLy8gU28gZmFyIHRoaXMgYXBwZWFycyB0byBiZSB0aGUgY2FzZSB0aGF0IHRy
aWdnZXJzIGFsbCB0aGUgdGltZSwgYnV0CisgICAgICAgICAgICAvLyB0aGF0IGlzIGZhciBmcm9t
IGd1YXJhbnRlZWQuCisgICAgICAgIAorICAgICAgICAgICAgdW5zaWduZWQgZGlzcGxhY2VtZW50
SW5kZXggPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQu
bnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAg
ICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0
ZXJGaWxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0
b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgICAgICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7CisgICAgICAgICAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkg
eworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52
YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5p
cXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoZGlz
cGxhY2VtZW50SW5kZXgrKyksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHNodWZmbGluZyBhbGdvcml0
aG0gdGhhdCB3ZSB1c2UKKyAgICAgICAgICAgIC8vIGZvciBzcGVjdWxhdGl2ZS0+bm9uLXNwZWN1
bGF0aXZlIGp1bXBzLCBpZiB3ZSBldmVyIGRpc2NvdmVyIHRoYXQKKyAgICAgICAgICAgIC8vIHNv
bWUgaG90IGNvZGUgd2l0aCBsb3RzIG9mIGxpdmUgdmFsdWVzIHRoYXQgZ2V0IGRpc3BsYWNlZCBh
bmQKKyAgICAgICAgICAgIC8vIHNwaWxsZWQgcmVhbGx5IGVuam95cyBmcmVxdWVudGx5IGZhaWxp
bmcgc3BlY3VsYXRpb24uCisgICAgICAgIAorICAgICAgICAgICAgLy8gRm9yIG5vdyB0aGlzIGNv
ZGUgaXMgZW5naW5lZXJlZCB0byBiZSBjb3JyZWN0IGJ1dCBwcm9iYWJseSBub3QKKyAgICAgICAg
ICAgIC8vIHN1cGVyLiBJbiBwYXJ0aWN1bGFyLCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBjYXNlcyB3
aGVyZSBmb3IgZXhhbXBsZQorICAgICAgICAgICAgLy8gdGhlIGRpc3BsYWNlbWVudHMgYXJlIGEg
cGVybXV0YXRpb24gb2YgdGhlIGRlc3RpbmF0aW9uIHZhbHVlcywgbGlrZQorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIDEgLT4gMgorICAgICAgICAgICAgLy8gMiAtPiAxCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgc2ltcGx5IGxp
ZnRpbmcgYWxsIG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVycworICAgICAgICAgICAgLy8gZnJvbSB0
aGVpciBvbGQgKERGRyBKSVQpIGxvY2F0aW9ucyBhbmQgZHJvcHBpbmcgdGhlbSBpbiBhIHNjcmF0
Y2gKKyAgICAgICAgICAgIC8vIGxvY2F0aW9uIGluIG1lbW9yeSwgYW5kIHRoZW4gdHJhbnNmZXJy
aW5nIGZyb20gdGhhdCBzY3JhdGNoIGxvY2F0aW9uCisgICAgICAgICAgICAvLyB0byB0aGVpciBu
ZXcgKG9sZCBKSVQpIGxvY2F0aW9ucy4KKyAgICAgICAgCisgICAgICAgICAgICBpbnQ2NF90KiBz
Y3JhdGNoQnVmZmVyID0gZ2xvYmFsRGF0YSgpLT5vc3JTY3JhdGNoQnVmZmVyRm9yU2l6ZShudW1i
ZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpOworICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBl
eGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50
ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIHN0
b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOwor
ICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIHNjcmF0Y2hJbmRleCA9IG51bWJl
ck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzOworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXgg
PSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNv
dmVyeShpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9
IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBsb2FkUHRyKHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1Qw
LCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgp
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hJ
bmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIG51bWJlck9mRGlzcGxh
Y2VkVmlydHVhbFJlZ2lzdGVycyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gOSkg
RHVtcCBhbGwgcG9pc29uZWQgdmlydHVhbCByZWdpc3RlcnMuCisgICAgCisgICAgc2NyYXRjaElu
ZGV4ID0gMDsKKyAgICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpIHsKKyAg
ICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgKGlu
dClleGl0Lm1fdmFyaWFibGVzLnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAg
ICAgIGlmICghcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW3ZpcnR1YWxSZWdpc3Rlcl0pCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC5tX3ZhcmlhYmxlc1t2aXJ0dWFsUmVnaXN0ZXJd
OworICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICAg
ICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAg
ICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgICAgIGxvYWRQdHIoc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgc3Rv
cmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFs
UmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBv
aXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7CisgICAgCisgICAgLy8gMTApIER1bXAgYWxsIGNvbnN0
YW50cy4gT3B0aW1pemUgZm9yIFVuZGVmaW5lZCwgc2luY2UgdGhhdCdzIGEgY29uc3RhbnQgd2Ug
c2VlCisgICAgLy8gICAgIG9mdGVuLgorCisgICAgaWYgKGhhdmVDb25zdGFudHMpIHsKKyAgICAg
ICAgaWYgKGhhdmVVbmRlZmluZWQpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAK
KyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVy
aWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBDb25zdGFudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAg
ICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShyZWNv
dmVyeS5jb25zdGFudCgpKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyAxMSkg
QWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBjb3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGlu
ZyBPU1IsIHdlIGtub3cKKyAgICAvLyAgICAgdGhhdCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBj
b2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBleGVjdXRlCisgICAgLy8gICAgIGNv
dW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFu
ZCBjYWxsIGZyYW1lcworICAgIC8vICAgICB0aGF0IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRoZSBv
bGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFtZSdzCisgICAgLy8gICAgIE9T
UiBleGl0LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAg
ICAvLworICAgIC8vICAgICAoYSkgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBh
IGNoYW5jZSB0byByZWVudGVyIG9wdGltaXplZAorICAgIC8vICAgICAgICAgY29kZSBldmVudHVh
bGx5LCBzaW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBmYXN0ZXIuIEJ1dCB3ZSBkb24ndAorICAgIC8v
ICAgICAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAo
YykgYmVsb3cpLgorICAgIC8vCisgICAgLy8gICAgIChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRo
ZSBjYWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwgcnVubmluZyB0aGUgb2xkCisgICAgLy8gICAgICAg
ICBKSVQncyBjb2RlIGFuZCBoYXMgbmV2ZXIgT1NSJ2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNo
YW5jZSB0bworICAgIC8vICAgICAgICAgcGVyZm9ybSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFj
dCB0aGF0IHdlJ3ZlIGV4aXRlZC4KKyAgICAvLworICAgIC8vICAgICAoYykgQ29kZSB0aGUgcGVy
Zm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBpbW1lZGlhdGVseSByZXRyeSBPU1IKKyAgICAv
LyAgICAgICAgIGVudHJ5LCBzaW5jZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBP
U1IgZW50cnkgaXMKKyAgICAvLyAgICAgICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCisgICAg
Ly8KKyAgICAvLyAgICAgVG8gZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0
ZSBjb3VudGVyIHRvCisgICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJt
VXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2VyCisgICAgLy8gICAgIChhKSBh
bmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1
bml0eSBmb3IKKyAgICAvLyAgICAgZXZlcnkgY2FsbCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRy
eS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhhcHBlbnMKKyAgICAvLyAgICAgZnJlcXVlbnRs
eSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBu
ZXZlcgorICAgIC8vICAgICBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBu
ZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQorICAgIC8vICAgICB3aWxsIG9ubHkgaGFwcGVu
IGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0eQor
ICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkgYW5kIChiKS4gVGhpcyBoZXVyaXN0
aWMgbWF5IG5lZWQgdG8gYmUKKyAgICAvLyAgICAgcmV0aG91Z2h0IGluIHRoZSBmdXR1cmUsIHBh
cnRpY3VsYXJseSBpZiB3ZSBzdXBwb3J0IHJlb3B0aW1pemluZyBjb2RlCisgICAgLy8gICAgIHdp
dGggbmV3IHZhbHVlIHByb2ZpbGVzIGdhdGhlcmVkIGZyb20gY29kZSB0aGF0IGRpZCBPU1IgZXhp
dC4KKyAgICAKKyAgICBzdG9yZTMyKEltbTMyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5j
b3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkpLCBjb2RlQmxvY2soKS0+YWx0ZXJu
YXRpdmUoKS0+YWRkcmVzc09mRXhlY3V0ZUNvdW50ZXIoKSk7CisgICAgCisgICAgLy8gMTIpIExv
YWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4K
KyAgICAKKyAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCkpCisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lz
dGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVy
KTsKKyAgICAKKyAgICAvLyAxMykgRml4IGNhbGwgZnJhbWUuCisgICAgCisgICAgQVNTRVJUKGNv
ZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVybmF0
aXZlKCkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxv
Y2spKTsKKyAgICAKKyAgICAvLyAxNCkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2Vs
aW5lIEpJVCBjb2RlLgorICAgIAorICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGlu
ZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJl
Z2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2J5dGVjb2RlSW5kZXgpOworICAg
IAorICAgIEFTU0VSVChtYXBwaW5nKTsKKyAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUlu
ZGV4ID09IGV4aXQubV9ieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICB2b2lkKiBqdW1wVGFyZ2V0
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNv
ZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5n
LT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAKKyAgICBBU1NFUlQoR1BSSW5mbzo6cmVnVDEg
IT0gR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOworICAgIAorICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihqdW1wVGFyZ2V0KSwgR1BSSW5mbzo6cmVnVDEpOworICAgIGp1bXAoR1BSSW5mbzo6
cmVnVDEpOworCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAg
IC0+ICVwXG4iLCBqdW1wVGFyZ2V0KTsKKyNlbmRpZgorfQorCit2b2lkIEpJVENvbXBpbGVyOjps
aW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmIHNwZWN1bGF0aXZlKQoreworICAgIFZlY3RvcjxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRlY29kZWRDb2RlTWFwOworICAgIEFTU0VSVChjb2Rl
QmxvY2soKS0+YWx0ZXJuYXRpdmUoKSk7CisgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5h
dGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VS
VChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0Q29kZU1hcCgpKTsKKyAgICBjb2RlQmxv
Y2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0Q29kZU1hcCgpLT5kZWNvZGUoZGVjb2RlZENvZGVNYXAp
OworICAgIAorICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0
aXZlLm9zckV4aXRzKCkuYmVnaW4oKTsKKyAgICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0
c0VuZCA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuZW5kKCk7CisgICAgCisgICAgd2hpbGUgKGV4
aXRzSXRlciAhPSBleGl0c0VuZCkgeworICAgICAgICBjb25zdCBPU1JFeGl0JiBleGl0ID0gKmV4
aXRzSXRlcjsKKyAgICAgICAgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihleGl0LCBzcGVjdWxhdGl2
ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4KSwgZGVjb2RlZENvZGVN
YXApOworICAgICAgICArK2V4aXRzSXRlcjsKKyAgICB9Cit9CisjZWxzZSAvLyBERkdfT1NSX0VY
SVQKIGNsYXNzIEdlbmVyYWxpemVkUmVnaXN0ZXIgewogcHVibGljOgogICAgIEdlbmVyYWxpemVk
UmVnaXN0ZXIoKSB7IH0KQEAgLTgwMyw5ICsxMTcwLDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmtTcGVjdWxhdGlvbkNoZWNrcygKICAgICBBU1NFUlQoIShjaGVja3NJdGVyICE9IGNoZWNrc0Vu
ZCkpOwogICAgIEFTU0VSVCghKGVudHJpZXNJdGVyICE9IGVudHJpZXNFbmQpKTsKIH0KKyNlbmRp
ZiAvLyBERkdfT1NSX0VYSVQKIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKIHsK
KyAgICBtX3N0YXJ0T2ZDb2RlID0gbGFiZWwoKTsKKyAgICAKICAgICAvLyBUaGlzIGNvZGUgY3Vy
cmVudGx5IG1hdGNoZXMgdGhlIG9sZCBKSVQuIEluIHRoZSBmdW5jdGlvbiBoZWFkZXIgd2UgbmVl
ZCB0bwogICAgIC8vIHBvcCB0aGUgcmV0dXJuIGFkZHJlc3MgKHNpbmNlIHdlIGRvIG5vdCBhbGxv
dyBhbnkgcmVjdXJzaW9uIG9uIHRoZSBtYWNoaW5lCiAgICAgLy8gc3RhY2spLCBhbmQgcGVyZm9y
bSBhIGZhc3QgcmVnaXN0ZXIgZmlsZSBjaGVjay4KQEAgLTg0NCwxMiArMTIxNCwxOCBAQCB2b2lk
IEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCiAgICAgLy8gdG8gYWxsb3cgaXQgdG8gY2hlY2sg
d2hpY2ggbm9kZXMgaW4gdGhlIGdyYXBoIG1heSBiYWlsIG91dCwgYW5kIG1heSBuZWVkIHRvIHJl
ZW50ZXIgdGhlCiAgICAgLy8gbm9uLXNwZWN1bGF0aXZlIHBhdGguCiAgICAgaWYgKGNvbXBpbGVk
U3BlY3VsYXRpdmUpIHsKKyAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAobV9qaXRD
b2RlTWFwRW5jb2Rlci5maW5pc2goKSk7CisgICAgICAgIAorI2lmIERGR19PU1JfRVhJVAorICAg
ICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOworI2Vsc2UKICAgICAgICAgU3BlY3VsYXRp
b25DaGVja0luZGV4SXRlcmF0b3IgY2hlY2tJdGVyYXRvcihzcGVjdWxhdGl2ZS5zcGVjdWxhdGlv
bkNoZWNrcygpKTsKICAgICAgICAgTm9uU3BlY3VsYXRpdmVKSVQgbm9uU3BlY3VsYXRpdmUoKnRo
aXMpOwogICAgICAgICBub25TcGVjdWxhdGl2ZS5jb21waWxlKGNoZWNrSXRlcmF0b3IpOwogCiAg
ICAgICAgIC8vIExpbmsgdGhlIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHRv
IHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBub24tc3BlY3VsYXRpdmUg
b25lLgogICAgICAgICBsaW5rU3BlY3VsYXRpb25DaGVja3Moc3BlY3VsYXRpdmUsIG5vblNwZWN1
bGF0aXZlKTsKKyNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIElmIGNvbXBpbGF0aW9u
IHRocm91Z2ggdGhlIFNwZWN1bGF0aXZlSklUIGZhaWxlZCwgdGhyb3cgYXdheSB0aGUgY29kZSB3
ZSBnZW5lcmF0ZWQuCiAgICAgICAgIG1fY2FsbHMuY2xlYXIoKTsKQEAgLTg1OCw4ICsxMjM0LDEy
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKICAgICAgICAgbV9tZXRob2RHZXRz
LmNsZWFyKCk7CiAgICAgICAgIHJld2luZFRvTGFiZWwoc3BlY3VsYXRpdmVQYXRoQmVnaW4pOwog
CisjaWYgREZHX09TUl9FWElUCisgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9y
IGNoZWNrSXRlcmF0b3I7CisjZWxzZQogICAgICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yIG5v
Q2hlY2tzOwogICAgICAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciBjaGVja0l0ZXJh
dG9yKG5vQ2hlY2tzKTsKKyNlbmRpZgogICAgICAgICBOb25TcGVjdWxhdGl2ZUpJVCBub25TcGVj
dWxhdGl2ZSgqdGhpcyk7CiAgICAgICAgIG5vblNwZWN1bGF0aXZlLmNvbXBpbGUoY2hlY2tJdGVy
YXRvcik7CiAgICAgfQpAQCAtOTA3LDcgKzEyODcsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5r
KExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Nh
bGxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAobV9jYWxsc1tpXS5tX2hhbmRsZXNF
eGNlcHRpb25zKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmV0dXJuQWRkcmVzc09mZnNl
dCA9IGxpbmtCdWZmZXIucmV0dXJuQWRkcmVzc09mZnNldChtX2NhbGxzW2ldLm1fY2FsbCk7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgZXhjZXB0aW9uSW5mbyA9IG1fY2FsbHNbaV0ubV9leGNl
cHRpb25JbmZvOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8gPSBtX2Nh
bGxzW2ldLm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgbV9j
b2RlQmxvY2stPmNhbGxSZXR1cm5JbmRleFZlY3RvcigpLmFwcGVuZChDYWxsUmV0dXJuT2Zmc2V0
VG9CeXRlY29kZU9mZnNldChyZXR1cm5BZGRyZXNzT2Zmc2V0LCBleGNlcHRpb25JbmZvKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDk0OTI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBA
IGNsYXNzIFNwZWN1bGF0aW9uUmVjb3Zlcnk7CiAKIHN0cnVjdCBFbnRyeUxvY2F0aW9uOwogc3Ry
dWN0IFNwZWN1bGF0aW9uQ2hlY2s7CitzdHJ1Y3QgT1NSRXhpdDsKIAogI2lmbmRlZiBOREVCVUcK
IHR5cGVkZWYgdm9pZCAoKlZfREZHRGVidWdPcGVyYXRpb25fRVApKEV4ZWNTdGF0ZSosIHZvaWQq
KTsKQEAgLTgyLDIxICs4MywyMSBAQCBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgfQogCiAgICAg
Ly8gQ29uc3RydWN0b3IgZm9yIGEgY2FsbCB3aXRoIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLgotICAg
IENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rp
b24sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkNoZWNrLCBFeGNlcHRpb25JbmZvIGV4
Y2VwdGlvbkluZm8pCisgICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBG
dW5jdGlvblB0ciBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uQ2hlY2ss
IENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkKICAgICAgICAg
LCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQogICAgICAgICAsIG1fZXhjZXB0aW9uQ2hlY2soZXhjZXB0
aW9uQ2hlY2spCi0gICAgICAgICwgbV9leGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAg
ICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV9oYW5kbGVzRXhjZXB0
aW9ucyh0cnVlKQogICAgIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3RvciBmb3IgYSBjYWxs
IHRoYXQgbWF5IGNhdXNlIGV4Y2VwdGlvbnMsIGJ1dCB3aGljaCBhcmUgaGFuZGxlZAogICAgIC8v
IHRocm91Z2ggc29tZSBtZWNoYW5pc20gb3RoZXIgdGhhbiB0aGUgaW4tbGluZSBleGNlcHRpb24g
aGFuZGxlci4KLSAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8pCisgICAgQ2FsbFJl
Y29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICA6IG1fY2FsbChjYWxsKQogICAgICAgICAsIG1f
ZnVuY3Rpb24oZnVuY3Rpb24pCi0gICAgICAgICwgbV9leGNlcHRpb25JbmZvKGV4Y2VwdGlvbklu
Zm8pCisgICAgICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV9oYW5k
bGVzRXhjZXB0aW9ucyh0cnVlKQogICAgIHsKICAgICB9CkBAIC0xMDQsNyArMTA1LDcgQEAgc3Ry
dWN0IENhbGxSZWNvcmQgewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fY2FsbDsKICAgICBG
dW5jdGlvblB0ciBtX2Z1bmN0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fZXhjZXB0
aW9uQ2hlY2s7Ci0gICAgRXhjZXB0aW9uSW5mbyBtX2V4Y2VwdGlvbkluZm87CisgICAgQ29kZU9y
aWdpbiBtX2NvZGVPcmlnaW47CiAgICAgYm9vbCBtX2hhbmRsZXNFeGNlcHRpb25zOwogfTsKIApA
QCAtMTkyLDkgKzE5Myw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBOb3RpZnkgdGhlIEpJ
VCBvZiBhIGNhbGwgdGhhdCBkb2VzIG5vdCByZXF1aXJlIGxpbmtpbmcuCi0gICAgdm9pZCBub3Rp
ZnlDYWxsKENhbGwgY2FsbCwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICB2b2lkIG5vdGlm
eUNhbGwoQ2FsbCBjYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICBt
X2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIEZ1bmN0aW9uUHRyKCksIGV4Y2VwdGlvbklu
Zm8pKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBGdW5jdGlvblB0
cigpLCBjb2RlT3JpZ2luKSk7CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBK
SVQgY29kZSwgd2l0aG91dCBhbiBleGNlcHRpb24gY2hlY2suCkBAIC0yMDUsMjAgKzIwNiwyMCBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwg
d2l0aCBhbiBleGNlcHRpb24gY2hlY2suCi0gICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgdW5zaWduZWQgZXhjZXB0aW9uSW5m
bykKKyAgICBDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25Q
dHImIGZ1bmN0aW9uLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBDYWxs
IGZ1bmN0aW9uQ2FsbCA9IGNhbGwoKTsKICAgICAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGJy
YW5jaFRlc3RQdHIoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKCZnbG9iYWxEYXRhKCktPmV4Y2Vw
dGlvbikpOwotICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwg
ZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBleGNlcHRpb25JbmZvKSk7CisgICAgICAgIG1fY2Fs
bHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hl
Y2ssIGNvZGVPcmlnaW4pKTsKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICB9CiAg
ICAgCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aCBhIGZhc3QgZXhj
ZXB0aW9uIGNoZWNrIHRoYXQgdGVzdHMgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLgotICAg
IENhbGwgYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHIm
IGZ1bmN0aW9uLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIENhbGwgYXBwZW5kQ2FsbFdp
dGhGYXN0RXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGwo
KTsKICAgICAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGJyYW5jaFRlc3RQdHIoWmVybywgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3Jk
KGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBleGNlcHRpb25JbmZvKSk7
CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlv
biwgZXhjZXB0aW9uQ2hlY2ssIGNvZGVPcmlnaW4pKTsKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
Q2FsbDsKICAgICB9CiAgICAgCkBAIC0zMTEsOSArMzEyLDE0IEBAIHB1YmxpYzoKICAgICAgICAg
bV9tZXRob2RHZXRzLmFwcGVuZChNZXRob2RHZXRSZWNvcmQoc2xvd0NhbGwsIHN0cnVjdFRvQ29t
cGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlvbikpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxs
LCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2lnbmVkIGV4Y2Vw
dGlvbkluZm8pCisgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2Fs
bCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCiAgICAgewotICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChm
YXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgZXhjZXB0aW9uSW5mbykp
OworICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0Q2FsbCwgc2xvd0Nh
bGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgY29kZU9yaWdpbikpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIG5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2spCisgICAgeworICAg
ICAgICBtX2ppdENvZGVNYXBFbmNvZGVyLmFwcGVuZChiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4s
IGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKICAgICB9CiAKIHBy
aXZhdGU6CkBAIC0zMjYsOCArMzMyLDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaWxsTnVtZXJp
Y1RvRG91YmxlKE5vZGVJbmRleCwgRlBSUmVnLCBHUFJSZWcgdGVtcG9yYXJ5KTsKICAgICB2b2lk
IGZpbGxJbnQzMlRvSW50ZWdlcihOb2RlSW5kZXgsIEdQUlJlZyk7CiAgICAgdm9pZCBmaWxsVG9K
UyhOb2RlSW5kZXgsIEdQUlJlZyk7CisgICAgCisjaWYgREZHX09TUl9FWElUCisgICAgdm9pZCBl
eGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmLCBTcGVjdWxhdGlvblJlY292ZXJ5
KiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKTsKKyAg
ICB2b2lkIGxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYpOworI2Vsc2UKICAgICB2b2lkIGp1
bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1bGF0aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2sm
LCBjb25zdCBFbnRyeUxvY2F0aW9uJiwgU3BlY3VsYXRpb25SZWNvdmVyeSosIE5vZGVUb1JlZ2lz
dGVyTWFwJiBjaGVja05vZGVUb1JlZ2lzdGVyTWFwLCBOb2RlVG9SZWdpc3Rlck1hcCYgZW50cnlO
b2RlVG9SZWdpc3Rlck1hcCk7CiAgICAgdm9pZCBsaW5rU3BlY3VsYXRpb25DaGVja3MoU3BlY3Vs
YXRpdmVKSVQmLCBOb25TcGVjdWxhdGl2ZUpJVCYpOworI2VuZGlmCiAKICAgICAvLyBUaGUgZ2xv
YmFsRGF0YSwgdXNlZCB0byBhY2Nlc3MgY29uc3RhbnRzIHN1Y2ggYXMgdGhlIHZQdHJzLgogICAg
IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwpAQCAtMzQyLDYgKzM1NCwxMCBAQCBwcml2YXRl
OgogICAgIC8vIENvdW50IG9mIHRoZSBudW1iZXIgb2YgQ2FsbFJlY29yZHMgd2l0aCBleGNlcHRp
b24gaGFuZGxlcnMuCiAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAgICAgdW5zaWdu
ZWQgbV9leGNlcHRpb25DaGVja0NvdW50OworICAgIAorICAgIC8vIEpJVCBjb2RlIG1hcCBmb3Ig
T1NSIGVudHJ5cG9pbnRzLgorICAgIExhYmVsIG1fc3RhcnRPZkNvZGU7CisgICAgQ29tcGFjdEpJ
VENvZGVNYXA6OkVuY29kZXIgbV9qaXRDb2RlTWFwRW5jb2RlcjsKIAogICAgIHN0cnVjdCBQcm9w
ZXJ0eUFjY2Vzc1JlY29yZCB7CiAgICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKENhbGwgZnVu
Y3Rpb25DYWxsLCBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGwsIGludDE2X3QgZGVsdGFDYWxs
VG9TdHJ1Y3RDaGVjaywgaW50MTZfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBpbnQxNl90IGRl
bHRhQ2FsbFRvU2xvd0Nhc2UsIGludDE2X3QgZGVsdGFDYWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQ
UiwgaW50OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2NyYXRjaEdQUikKQEAgLTM4NiwxMiArNDAyLDEy
IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICAKICAgICBzdHJ1Y3QgSlNDYWxsUmVjb3JkIHsKLSAg
ICAgICAgSlNDYWxsUmVjb3JkKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJl
bFB0ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykK
KyAgICAgICAgSlNDYWxsUmVjb3JkKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFM
YWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogICAgICAgICAgICAgOiBtX2Zhc3RDYWxsKGZhc3RDYWxsKQogICAgICAgICAgICAgLCBtX3Ns
b3dDYWxsKHNsb3dDYWxsKQogICAgICAgICAgICAgLCBtX3RhcmdldFRvQ2hlY2sodGFyZ2V0VG9D
aGVjaykKICAgICAgICAgICAgICwgbV9pc0NhbGwoaXNDYWxsKQotICAgICAgICAgICAgLCBtX2V4
Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgICAgICwgbV9jb2RlT3JpZ2luKGNv
ZGVPcmlnaW4pCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKQEAgLTM5OSw3ICs0MTUs
NyBAQCBwcml2YXRlOgogICAgICAgICBDYWxsIG1fc2xvd0NhbGw7CiAgICAgICAgIERhdGFMYWJl
bFB0ciBtX3RhcmdldFRvQ2hlY2s7CiAgICAgICAgIGJvb2wgbV9pc0NhbGw7Ci0gICAgICAgIHVu
c2lnbmVkIG1fZXhjZXB0aW9uSW5mbzsKKyAgICAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47
CiAgICAgfTsKIAogICAgIFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9wZXJ0
eUFjY2Vzc2VzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDk0OTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDggKzI2LDggQEAKICNpZm5kZWYgREZHTm9kZV9oCiAjZGVmaW5lIERGR05v
ZGVfaAogCi0vLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5n
LCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgotI2RlZmluZSBERkdfREVC
VUdfVkVSQk9TRSAwCisvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVi
dWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLiBTZXQgdG8gMSBm
b3IgYmFzaWMgdmVyYm9zaXR5LCBvciB0byAyIGZvciBtb3JlIHZlcmJvc2l0eS4KKyNkZWZpbmUg
REZHX0RFQlVHX1ZFUkJPU0UgMQogLy8gRW5hYmxlIGdlbmVyYXRpb24gb2YgZHluYW1pYyBjaGVj
a3MgaW50byB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLgogI2lmICFBU1NFUlRfRElTQUJMRUQKICNk
ZWZpbmUgREZHX0pJVF9BU1NFUlQgMQpAQCAtNDUsMTEgKzQ1LDE1IEBACiAvLyBFbWl0IGEgYnJl
YWtwb2ludCBpbnRvIHRoZSBzcGVjdWxhdGlvbiBmYWlsdXJlIGNvZGUuCiAjZGVmaW5lIERGR19K
SVRfQlJFQUtfT05fU1BFQ1VMQVRJT05fRkFJTFVSRSAwCiAvLyBMb2cgZXZlcnkgc3BlY3VsYXRp
b24gZmFpbHVyZS4KLSNkZWZpbmUgREZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSAwCisj
ZGVmaW5lIERGR19WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUgMQogLy8gRGlzYWJsZSB0aGUg
REZHIEpJVCB3aXRob3V0IGhhdmluZyB0byB0b3VjaCBQbGF0Zm9ybS5oIQogI2RlZmluZSBERkdf
REVCVUdfTE9DQUxfRElTQkFMRSAwCiAvLyBEaXNhYmxlIHRoZSBTcGVjdWxhdGl2ZUpJVCB3aXRo
b3V0IGhhdmluZyB0byB0b3VjaCBQbGF0Zm9ybS5oIQogI2RlZmluZSBERkdfREVCVUdfTE9DQUxf
RElTQkFMRV9TUEVDVUxBVElWRSAwCisvLyBFbmFibGUgT1NSIGVudHJ5IGZyb20gYmFzZWxpbmUg
SklULgorI2RlZmluZSBERkdfT1NSX0VOVFJZIDEKKy8vIERpc2FibGUgdGhlIG5vbi1zcGVjdWxh
dGl2ZSBKSVQgYW5kIHVzZSBPU1IgaW5zdGVhZC4KKyNkZWZpbmUgREZHX09TUl9FWElUIEVOQUJM
RShUSUVSRURfQ09NUElMQVRJT04pCiAvLyBHZW5lcmF0ZSBzdGF0cyBvbiBob3cgc3VjY2Vzc2Z1
bCB3ZSB3ZXJlIGluIG1ha2luZyB1c2Ugb2YgdGhlIERGRyBqaXQsIGFuZCByZW1haW5pbmcgb24g
dGhlIGhvdCBwYXRoLgogI2RlZmluZSBERkdfU1VDQ0VTU19TVEFUUyAwCiAKQEAgLTU4LDYgKzYy
LDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKKyNp
bmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC03Miw5ICs3NywzMiBAQCBDT01QSUxFX0FTU0VSVChz
aXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9CiB0eXBlZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKIHN0
YXRpYyBjb25zdCBOb2RlSW5kZXggTm9Ob2RlID0gVUlOVF9NQVg7CiAKLS8vIEluZm9ybWF0aW9u
IHVzZWQgdG8gbWFwIGJhY2sgZnJvbSBhbiBleGNlcHRpb24gdG8gYW55IGhhbmRsZXIvc291cmNl
IGluZm9ybWF0aW9uLgorLy8gSW5mb3JtYXRpb24gdXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4
Y2VwdGlvbiB0byBhbnkgaGFuZGxlci9zb3VyY2UgaW5mb3JtYXRpb24sCisvLyBhbmQgdG8gaW1w
bGVtZW50IE9TUi4KIC8vIChQcmVzZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRl
eCkuCi10eXBlZGVmIHVpbnQzMl90IEV4Y2VwdGlvbkluZm87CitjbGFzcyBDb2RlT3JpZ2luIHsK
K3B1YmxpYzoKKyAgICBDb2RlT3JpZ2luKCkKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgZXhwbGljaXQgQ29kZU9yaWdpbih1aW50MzJfdCBieXRlY29kZUluZGV4KQorICAgICAgICA6
IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7IH0KKyAgICAKKyAgICB1aW50MzJfdCBieXRlY29k
ZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAg
cmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVpbnQz
Ml90IG1fYnl0ZWNvZGVJbmRleDsKK307CiAKIC8vIEVudHJpZXMgaW4gdGhlIE5vZGVUeXBlIGVu
dW0gKGJlbG93KSBhcmUgY29tcG9zZWQgb2YgYW4gaWQsIGEgcmVzdWx0IHR5cGUgKHBvc3NpYmx5
IG5vbmUpCiAvLyBhbmQgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aXZlIGZsYWdzIChtdXN0IGdl
bmVyYXRlLCBpcyBjb25zdGFudCwgZXRjKS4KQEAgLTE5NCwxNjIgKzIyMiw2IEBAIHN0cnVjdCBP
cEluZm8gewogICAgIHVuc2lnbmVkIG1fdmFsdWU7CiB9OwogCi10eXBlZGVmIHVpbnQ4X3QgUHJl
ZGljdGVkVHlwZTsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3ROb25lICAgPSAw
Owotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdENlbGwgICA9IDB4MDE7Ci1zdGF0
aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0QXJyYXkgID0gMHgwMzsKLXN0YXRpYyBjb25z
dCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RJbnQzMiAgPSAweDA0Owotc3RhdGljIGNvbnN0IFByZWRp
Y3RlZFR5cGUgUHJlZGljdERvdWJsZSA9IDB4MDg7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlw
ZSBQcmVkaWN0TnVtYmVyID0gMHgwYzsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRp
Y3RCb29sZWFuID0gMHgxMDsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RUb3Ag
ICAgPSAweDFmOwotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgU3Ryb25nUHJlZGljdGlvblRh
ZyA9IDB4ODA7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0aW9uVGFnTWFzayAg
ICA9IDB4ODA7Ci0KLWVudW0gUHJlZGljdGlvblNvdXJjZSB7IFdlYWtQcmVkaWN0aW9uLCBTdHJv
bmdQcmVkaWN0aW9uIH07Ci0KLWlubGluZSBib29sIGlzQ2VsbFByZWRpY3Rpb24oUHJlZGljdGVk
VHlwZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFByZWRp
Y3RDZWxsICYmICEodmFsdWUgJiB+KFByZWRpY3RBcnJheSB8IFByZWRpY3Rpb25UYWdNYXNrKSk7
Ci19Ci0KLWlubGluZSBib29sIGlzQXJyYXlQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0gUHJlZGljdEFy
cmF5OwotfQotCi1pbmxpbmUgYm9vbCBpc0ludDMyUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZh
bHVlKQotewotICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spID09IFByZWRp
Y3RJbnQzMjsKLX0KLQotaW5saW5lIGJvb2wgaXNEb3VibGVQcmVkaWN0aW9uKFByZWRpY3RlZFR5
cGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0g
UHJlZGljdERvdWJsZTsKLX0KLQotaW5saW5lIGJvb2wgaXNOdW1iZXJQcmVkaWN0aW9uKFByZWRp
Y3RlZFR5cGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGljdE51bWJlcikg
JiYgISh2YWx1ZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3Rpb25UYWdNYXNrKSk7Ci19Ci0K
LWlubGluZSBib29sIGlzQm9vbGVhblByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0Qm9vbGVh
bjsKLX0KLQotaW5saW5lIGJvb2wgaXNTdHJvbmdQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFs
dWUpCi17Ci0gICAgQVNTRVJUKHZhbHVlICE9IChQcmVkaWN0Tm9uZSB8IFN0cm9uZ1ByZWRpY3Rp
b25UYWcpKTsKLSAgICByZXR1cm4gISEodmFsdWUgJiBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKLX0K
LQotI2lmbmRlZiBOREVCVUcKLWlubGluZSBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmco
UHJlZGljdGVkVHlwZSB2YWx1ZSkKLXsKLSAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHZhbHVl
KSkgewotICAgICAgICBzd2l0Y2ggKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSB7Ci0gICAg
ICAgIGNhc2UgUHJlZGljdE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWJvdHRv
bSI7Ci0gICAgICAgIGNhc2UgUHJlZGljdENlbGw6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ry
b25nLWNlbGwiOwotICAgICAgICBjYXNlIFByZWRpY3RBcnJheToKLSAgICAgICAgICAgIHJldHVy
biAicC1zdHJvbmctYXJyYXkiOwotICAgICAgICBjYXNlIFByZWRpY3RJbnQzMjoKLSAgICAgICAg
ICAgIHJldHVybiAicC1zdHJvbmctaW50MzIiOwotICAgICAgICBjYXNlIFByZWRpY3REb3VibGU6
Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWRvdWJsZSI7Ci0gICAgICAgIGNhc2UgUHJl
ZGljdE51bWJlcjoKLSAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctbnVtYmVyIjsKLSAgICAg
ICAgY2FzZSBQcmVkaWN0Qm9vbGVhbjoKLSAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctYm9v
bGVhbiI7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLXRv
cCI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgUHJl
ZGljdE5vbmU6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWJvdHRvbSI7Ci0gICAgY2FzZSBQcmVk
aWN0Q2VsbDoKLSAgICAgICAgcmV0dXJuICJwLXdlYWstY2VsbCI7Ci0gICAgY2FzZSBQcmVkaWN0
QXJyYXk6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWFycmF5IjsKLSAgICBjYXNlIFByZWRpY3RJ
bnQzMjoKLSAgICAgICAgcmV0dXJuICJwLXdlYWstaW50MzIiOwotICAgIGNhc2UgUHJlZGljdERv
dWJsZToKLSAgICAgICAgcmV0dXJuICJwLXdlYWstZG91YmxlIjsKLSAgICBjYXNlIFByZWRpY3RO
dW1iZXI6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLW51bWJlciI7Ci0gICAgY2FzZSBQcmVkaWN0
Qm9vbGVhbjoKLSAgICAgICAgcmV0dXJuICJwLXdlYWstYm9vbGVhbiI7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuICJwLXdlYWstdG9wIjsKLSAgICB9Ci19Ci0jZW5kaWYKLQotaW5saW5l
IFByZWRpY3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQcmVkaWN0ZWRUeXBlIGxlZnQsIFByZWRp
Y3RlZFR5cGUgcmlnaHQpCi17Ci0gICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSA9PSBp
c1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKQotICAgICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0Owot
ICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkpIHsKLSAgICAgICAgQVNTRVJUKCFpc1N0
cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKTsKLSAgICAgICAgcmV0dXJuIGxlZnQ7Ci0gICAgfQotICAg
IEFTU0VSVCghaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpKTsKLSAgICBBU1NFUlQoaXNTdHJvbmdQ
cmVkaWN0aW9uKHJpZ2h0KSk7Ci0gICAgcmV0dXJuIHJpZ2h0OwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotaW5saW5lIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3RlZFR5
cGUgcmlnaHQpCi17Ci0gICAgUHJlZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gc3RhdGljX2Nh
c3Q8VD4obWVyZ2VQcmVkaWN0aW9ucyhzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0KSwg
cmlnaHQpKTsKLSAgICBib29sIHJlc3VsdCA9IG5ld1ByZWRpY3Rpb24gIT0gc3RhdGljX2Nhc3Q8
UHJlZGljdGVkVHlwZT4obGVmdCk7Ci0gICAgbGVmdCA9IG5ld1ByZWRpY3Rpb247Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oUHJl
ZGljdGVkVHlwZSB0eXBlLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKLXsKLSAgICBBU1NFUlQo
ISh0eXBlICYgU3Ryb25nUHJlZGljdGlvblRhZykpOwotICAgIEFTU0VSVChzb3VyY2UgPT0gU3Ry
b25nUHJlZGljdGlvbiB8fCBzb3VyY2UgPT0gV2Vha1ByZWRpY3Rpb24pOwotICAgIGlmICh0eXBl
ID09IFByZWRpY3ROb25lKQotICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAgcmV0dXJu
IHR5cGUgfCAoc291cmNlID09IFN0cm9uZ1ByZWRpY3Rpb24gPyBTdHJvbmdQcmVkaWN0aW9uVGFn
IDogMCk7Ci19Ci0KLSNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi1pbmxpbmUgUHJlZGljdGVk
VHlwZSBtYWtlUHJlZGljdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFZhbHVl
UHJvZmlsZSYgcHJvZmlsZSkKLXsKLSAgICBWYWx1ZVByb2ZpbGU6OlN0YXRpc3RpY3Mgc3RhdGlz
dGljczsKLSAgICBwcm9maWxlLmNvbXB1dGVTdGF0aXN0aWNzKGdsb2JhbERhdGEsIHN0YXRpc3Rp
Y3MpOwotICAgIAotICAgIGlmICghc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4g
UHJlZGljdE5vbmU7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzID09IHN0YXRpc3Rp
Y3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0
SW50MzI7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuZG91YmxlcyA9PSBzdGF0aXN0aWNzLnNh
bXBsZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdERvdWJs
ZTsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5pbnQzMnMgKyBzdGF0aXN0aWNzLmRvdWJsZXMg
PT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRh
ZyB8IFByZWRpY3ROdW1iZXI7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuYXJyYXlzID09IHN0
YXRpc3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQ
cmVkaWN0QXJyYXk7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuY2VsbHMgPT0gc3RhdGlzdGlj
cy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RD
ZWxsOwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmJvb2xlYW5zID09IHN0YXRpc3RpY3Muc2Ft
cGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Qm9vbGVh
bjsKLSAgICAKLSAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RUb3A7Ci19
Ci0jZW5kaWYKLQogLy8gPT09IE5vZGUgPT09CiAvLwogLy8gTm9kZSByZXByZXNlbnRzIGEgc2lu
Z2xlIG9wZXJhdGlvbiBpbiB0aGUgZGF0YSBmbG93IGdyYXBoLgpAQCAtMzU3LDkgKzIyOSw5IEBA
IHN0cnVjdCBOb2RlIHsKICAgICBlbnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OwogCiAgICAgLy8g
Q29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1
ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE5v
ZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJ
bmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0g
Tm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAg
ICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2lu
KGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgewpAQCAtMzcwLDkgKzI0Miw5
IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGgg
dXAgdG8gMyBjaGlsZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5
cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbSwgTm9kZUluZGV4
IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNo
aWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGls
ZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3Ap
Ci0gICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVP
cmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5m
byhpbW0ubV92YWx1ZSkKQEAgLTM4NCw5ICsyNTYsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQog
CiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBp
bW1lZGlhdGUgdmFsdWVzLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhj
ZXB0aW9uSW5mbywgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0g
Tm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9O
b2RlKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZv
IGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXgg
Y2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9w
KG9wKQotICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBj
b2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxp
ZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9v
cEluZm8oaW1tMS5tX3ZhbHVlKQpAQCAtMzk5LDkgKzI3MSw5IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICB9CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIGEgdmFyaWFibGUgbnVtYmVy
IG9mIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKFZhckFyZ1Rh
ZywgTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbTEs
IE9wSW5mbyBpbW0yLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikK
KyAgICBOb2RlKFZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
T3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBu
dW1DaGlsZHJlbikKICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4
Y2VwdGlvbkluZm8pCisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAs
IG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9y
ZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKQEAgLTY0Myw2ICs1
MTUsMTQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJB
cmdzKSk7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDE7CiAgICAgfQorICAg
IAorICAgIC8vIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGRvIGEgZmFzdCBjaGVjayBv
biB0aGUgZmlyc3QgY2hpbGQKKyAgICAvLyBiZWZvcmUgYWxzbyBkb2luZyBhIGNoZWNrIG9uIHRo
ZSBvcGNvZGUuIFVzZSB0aGlzIHdpdGggY2FyZSBhbmQKKyAgICAvLyBhdm9pZCBpdCBpZiBwb3Nz
aWJsZS4KKyAgICBOb2RlSW5kZXggY2hpbGQxVW5jaGVja2VkKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDE7CisgICAgfQogCiAgICAgTm9kZUluZGV4IGNoaWxk
MigpCiAgICAgewpAQCAtNjcxLDcgKzU1MSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAvLyBUaGlz
IGVudW0gdmFsdWUgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAgIE5vZGVUeXBl
IG9wOwogICAgIC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRp
b24gKGN1cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KLSAgICBFeGNl
cHRpb25JbmZvIGV4Y2VwdGlvbkluZm87CisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAg
IC8vIFJlZmVyZW5jZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiAoMCBmb3Igbm8gY2hpbGQpLgogICAg
IHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NDkyNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MzQsNiArNDM0LDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFz
aWNBcml0aE9wKE5vZAogCiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0
aW9uQ2hlY2tJbmRleEl0ZXJhdG9yJiBjaGVja0l0ZXJhdG9yLCBOb2RlJiBub2RlKQogeworI2lm
IERGR19PU1JfRVhJVAorICAgIFVOVVNFRF9QQVJBTShjaGVja0l0ZXJhdG9yKTsKKyNlbHNlCiAg
ICAgLy8gQ2hlY2sgZm9yIHNwZWN1bGF0aW9uIGNoZWNrcyBmcm9tIHRoZSBjb3JyZXNwb25kaW5n
IGluc3RydWN0aW9uIGluIHRoZQogICAgIC8vIHNwZWN1bGF0aXZlIHBhdGguIERvIG5vdCBjaGVj
ayBmb3IgTm9kZUluZGV4IDAsIHNpbmNlIHRoaXMgaXMgY2hlY2tlZAogICAgIC8vIGluIHRoZSBv
dXRlcm1vc3QgY29tcGlsZSBsYXllciwgYXQgdGhlIGhlYWQgb2YgdGhlIG5vbi1zcGVjdWxhdGl2
ZSBwYXRoCkBAIC00NDIsNiArNDQ1LDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShTcGVjdWxhdAogICAgIC8vIGFzIHNwZWN1bGF0aW9uIGNoZWNrcyBhdCB0aGlzIGluZGV4KS4K
ICAgICBpZiAobV9jb21waWxlSW5kZXggJiYgY2hlY2tJdGVyYXRvci5oYXNDaGVja0F0SW5kZXgo
bV9jb21waWxlSW5kZXgpKQogICAgICAgICB0cmFja0VudHJ5KG1faml0LmxhYmVsKCkpOworI2Vu
ZGlmCiAKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CiAKQEAgLTEyODMsOCArMTI4NywxMCBA
QCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiB2b2lkIE5vblNwZWN1
bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yJiBjaGVja0l0
ZXJhdG9yKQogewogICAgIC8vIENoZWNrIGZvciBzcGVjdWxhdGlvbiBjaGVja3MgYWRkZWQgYXQg
ZnVuY3Rpb24gZW50cnkgKGNoZWNraW5nIGFyZ3VtZW50IHR5cGVzKS4KKyNpZiAhREZHX09TUl9F
WElUCiAgICAgaWYgKGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdEluZGV4KG1fY29tcGlsZUluZGV4
KSkKICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgpKTsKKyNlbmRpZgogCiAgICAgQVNT
RVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAgZm9yIChtX2Jsb2NrID0gMDsgbV9ibG9jayA8IG1f
aml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkpJVC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2lubGluZSBib29sIHByZWRpY3Rpb25Jc1ZhbGlkKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSB2YWx1ZSwgUHJlZGljdGVkVHlwZSB0eXBl
KQoreworICAgIC8vIHRoaXMgdGFrZXMgaW50byBhY2NvdW50IG9ubHkgbG9jYWwgdmFyaWFibGUg
cHJlZGljdGlvbnMgdGhhdCBnZXQgZW5mb3JjZWQKKyAgICAvLyBvbiBTZXRMb2NhbC4KKyAgICAK
KyAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24odHlwZSkpCisgICAgICAgIHJldHVybiB2YWx1ZS5p
c0ludDMyKCk7CisgICAgCisgICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHR5cGUpKQorICAgICAg
ICByZXR1cm4gaXNKU0FycmF5KGdsb2JhbERhdGEsIHZhbHVlKTsKKyAgICAKKyAgICBpZiAoaXNC
b29sZWFuUHJlZGljdGlvbih0eXBlKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigp
OworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhl
Y1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCkKK3sKKyNpZiBERkdfT1NSX0VOVFJZCisgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlw
ZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKSk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgp
ID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CisgICAgcHJpbnRmKCJPU1IgaW4gJXAoJXApIGZyb20gYmMjJXVcbiIsIGNvZGVCbG9jaywgY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBieXRlY29kZUluZGV4KTsKKyNlbmRpZgorICAgIAorICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAg
ICAKKyAgICAvLyBUaGUgY29kZSBiZWxvdyBjaGVja3MgaWYgaXQgaXMgc2FmZSB0byBwZXJmb3Jt
IE9TUiBlbnRyeS4gSXQgbWF5IGZpbmQKKyAgICAvLyB0aGF0IGl0IGlzIHVuc2FmZSB0byBkbyBz
bywgZm9yIGFueSBudW1iZXIgb2YgcmVhc29ucywgd2hpY2ggYXJlIGRvY3VtZW50ZWQKKyAgICAv
LyBiZWxvdy4gSWYgdGhlIGNvZGUgZGVjaWRlcyBub3QgdG8gT1NSIHRoZW4gaXQgcmV0dXJucyAw
LCBhbmQgaXQncyB0aGUgY2FsbGVyJ3MKKyAgICAvLyByZXNwb25zaWJpbGl0eSB0byBwYXRjaCB1
cCB0aGUgc3RhdGUgaW4gc3VjaCBhIHdheSBhcyB0byBlbnN1cmUgdGhhdCBpdCdzCisgICAgLy8g
Ym90aCBzYWZlIGFuZCBlZmZpY2llbnQgdG8gY29udGludWUgZXhlY3V0aW5nIGJhc2VsaW5lIGNv
ZGUgZm9yIG5vdy4gVGhpcworICAgIC8vIHNob3VsZCBhbG1vc3QgY2VydGFpbmx5IGluY2x1ZGUg
Y2FsbGluZyBlaXRoZXIgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCkKKyAgICAvLyBv
ciBjb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCkuCisgICAgCisgICAgLy8gMSkg
Q2hlY2sgaWYgdGhlIERGRyBjb2RlIHNldCBhIGNvZGUgbWFwLiBJZiBpdCBkaWRuJ3QsIGl0IG1l
YW5zIHRoYXQgaXQKKyAgICAvLyAgICBjYW5ub3QgaGFuZGxlIE9TUiBlbnRyeS4gVGhpcyBjdXJy
ZW50bHkgb25seSBoYXBwZW5zIGlmIHdlIGRpc2FibGUKKyAgICAvLyAgICBkeW5hbWljIHNwZWN1
bGF0aW9uIHRlcm1pbmF0aW9uIGFuZCBlbmQgdXAgd2l0aCBhIERGRyBjb2RlIGJsb2NrIHRoYXQK
KyAgICAvLyAgICB3YXMgY29tcGlsZWQgZW50aXJlbHkgd2l0aCB0aGUgbm9uLXNwZWN1bGF0aXZl
IEpJVC4gVGhlIG5vbi1zcGVjdWxhdGl2ZQorICAgIC8vICAgIEpJVCBkb2VzIG5vdCBzdXBwb3J0
IE9TUiBlbnRyeSBhbmQgcHJvYmFibHkgbmV2ZXIgd2lsbCwgc2luY2UgaXQgaXMKKyAgICAvLyAg
ICBraW5kIG9mIGEgZGVwcmVjYXRlZCBjb21waWxlciByaWdodCBub3cuCisgICAgCisjaWYgRU5B
QkxFKERZTkFNSUNfVEVSTUlOQVRFX1NQRUNVTEFUSU9OKQorICAgIEFTU0VSVChjb2RlQmxvY2st
PmppdENvZGVNYXAoKSk7CisjZWxzZQorICAgIGlmICghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkp
IHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICBwcmludGYoIiAgICBPU1Ig
ZmFpbGVkIGJlY2F1c2Ugb2YgYSBtaXNzaW5nIEpJVCBjb2RlIG1hcC5cbiIpOworI2VuZGlmCisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIC8vIDIpIFZlcmlmeSBw
cmVkaWN0aW9ucy4gSWYgdGhlIHByZWRpY3Rpb25zIGFyZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUg
YWN0dWFsCisgICAgLy8gICAgdmFsdWVzLCB0aGVuIE9TUiBlbnRyeSBpcyBub3QgcG9zc2libGUg
YXQgdGhpcyB0aW1lLiBJdCdzIHRlbXB0aW5nIHRvCisgICAgLy8gICAgYXNzdW1lIHRoYXQgd2Ug
Y291bGQgc29tZWhvdyBhdm9pZCB0aGlzIGNhc2UuIFdlIGNhbiBjZXJ0YWlubHkgYXZvaWQgaXQK
KyAgICAvLyAgICBmb3IgZmlyc3QtdGltZSBsb29wIE9TUiAtIHRoYXQgaXMsIE9TUiBpbnRvIGEg
Q29kZUJsb2NrIHRoYXQgd2UgaGF2ZSBqdXN0CisgICAgLy8gICAgY29tcGlsZWQuIFRoZW4gd2Ug
YXJlIGFsbW9zdCBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRoZSBwcmVkaWN0aW9ucyB3aWxsCisg
ICAgLy8gICAgY2hlY2sgb3V0LiBJdCB3b3VsZCBiZSBwcmV0dHkgZWFzeSB0byBtYWtlIHRoYXQg
YSBoYXJkIGd1YXJhbnRlZS4gQnV0CisgICAgLy8gICAgdGhlbiB0aGVyZSB3b3VsZCBzdGlsbCBi
ZSB0aGUgY2FzZSB3aGVyZSB0d28gY2FsbCBmcmFtZXMgd2l0aCB0aGUgc2FtZQorICAgIC8vICAg
IGJhc2VsaW5lIENvZGVCbG9jayBhcmUgb24gdGhlIHN0YWNrIGF0IHRoZSBzYW1lIHRpbWUuIFRo
ZSB0b3Agb25lCisgICAgLy8gICAgdHJpZ2dlcnMgY29tcGlsYXRpb24gYW5kIE9TUi4gSW4gdGhh
dCBjYXNlLCB3ZSBtYXkgbm8gbG9uZ2VyIGhhdmUKKyAgICAvLyAgICBhY2N1cmF0ZSB2YWx1ZSBw
cm9maWxlcyBmb3IgdGhlIG9uZSBkZWVwZXIgaW4gdGhlIHN0YWNrLiBIZW5jZSwgd2hlbiB3ZQor
ICAgIC8vICAgIHBvcCBpbnRvIHRoZSBDb2RlQmxvY2sgdGhhdCBpcyBkZWVwZXIgb24gdGhlIHN0
YWNrLCB3ZSBtaWdodCBPU1IgYW5kCisgICAgLy8gICAgcmVhbGl6ZSB0aGF0IHRoZSBwcmVkaWN0
aW9ucyBhcmUgd3JvbmcuIFByb2JhYmx5LCBpbiBtb3N0IGNhc2VzLCB0aGlzIGlzCisgICAgLy8g
ICAganVzdCBhbiBhbm9tYWx5IGluIHRoZSBzZW5zZSB0aGF0IHRoZSBvbGRlciBDb2RlQmxvY2sg
c2ltcGx5IHdlbnQgb2ZmCisgICAgLy8gICAgaW50byBhIGxlc3MtbGlrZWx5IHBhdGguIFNvLCB0
aGUgd2lzZXN0IGNvdXJzZSBvZiBhY3Rpb24gaXMgdG8gc2ltcGx5IG5vdAorICAgIC8vICAgIE9T
UiBhdCB0aGlzIHRpbWUuCisgICAgCisgICAgUHJlZGljdGlvblRyYWNrZXIqIHByZWRpY3Rpb25z
ID0gYmFzZWxpbmVDb2RlQmxvY2stPnByZWRpY3Rpb25zKCk7CisgICAgCisgICAgaWYgKHByZWRp
Y3Rpb25zLT5udW1iZXJPZkFyZ3VtZW50cygpID4gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAg
aWYgKCFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSks
IHByZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKSB7CisjaWYgRU5BQkxFKEpJ
VF9WRVJCT1NFX09TUikKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVz
ZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4iLCBpLCBleGVjLT5hcmd1bWVudChp
IC0gMSkuZGVzY3JpcHRpb24oKSwgcHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb25zLT5nZXRB
cmd1bWVudFByZWRpY3Rpb24oaSkpKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8ga25vdyBpZiBh
dCBhbiBPU1IgZW50cnksIGEgdmFyaWFibGUgaXMgbGl2ZS4gSWYgaXQgaXNuJ3QKKyAgICAvLyB0
aGVuIHdlIHNob3VsZG4ndCB0cnkgdG8gdmVyaWZ5IGl0cyBwcmVkaWN0aW9uLgorICAgIAorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZWYXJpYWJsZXMo
KTsgKytpKSB7CisgICAgICAgIGlmICghcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFsRGF0YSwgZXhl
Yy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0aW9ucy0+Z2V0UHJlZGljdGlvbihp
KSkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAgcHJpbnRmKCIg
ICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIs
IGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0
aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdldFByZWRpY3Rpb24oaSkpKTsKKyNlbmRpZgorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gMykgQ2hl
Y2sgdGhlIHN0YWNrIGhlaWdodC4gVGhlIERGRyBKSVQgbWF5IHJlcXVpcmUgYSB0YWxsZXIgc3Rh
Y2sgdGhhbiB0aGUKKyAgICAvLyAgICBiYXNlbGluZSBKSVQsIGluIHNvbWUgY2FzZXMuIElmIHdl
IGNhbid0IGdyb3cgdGhlIHN0YWNrLCB0aGVuIGRvbid0IGRvCisgICAgLy8gICAgT1NSIHJpZ2h0
IG5vdy4gVGhhdCdzIHRoZSBvbmx5IG9wdGlvbiB3ZSBoYXZlIHVubGVzcyB3ZSB3YW50IGJhc2lj
IGJsb2NrCisgICAgLy8gICAgYm91bmRhcmllcyB0byBzdGFydCB0aHJvd2luZyBSYW5nZUVycm9y
cy4gQWx0aG91Z2ggdGhhdCB3b3VsZCBiZSBwb3NzaWJsZSwKKyAgICAvLyAgICBpdCBzZWVtcyBz
aWxseTogeW91J2QgYmUgZGl2ZXJ0aW5nIHRoZSBwcm9ncmFtIHRvIGVycm9yIGhhbmRsaW5nIHdo
ZW4gaXQKKyAgICAvLyAgICB3b3VsZCBoYXZlIG90aGVyd2lzZSBqdXN0IGtlcHQgcnVubmluZyBh
bGJlaXQgbGVzcyBxdWlja2x5LgorICAgIAorICAgIGlmICghZ2xvYmFsRGF0YS0+aW50ZXJwcmV0
ZXItPnJlZ2lzdGVyRmlsZSgpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2NvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnNdKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAg
ICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLi5c
biIpOworI2VuZGlmCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiICAgIE9TUiBzaG91bGQgc3VjY2VlZC5cbiIp
OworI2VuZGlmCisgICAgCisgICAgLy8gNCkgRml4IHRoZSBjYWxsIGZyYW1lLgorICAgIAorICAg
IGV4ZWMtPnNldENvZGVCbG9jayhjb2RlQmxvY2spOworICAgIAorICAgIC8vIDUpIEZpbmQgYW5k
IHJldHVybiB0aGUgZGVzdGluYXRpb24gbWFjaGluZSBjb2RlIGFkZHJlc3MuIFRoZSBERkcgc3Rv
cmVzCisgICAgLy8gICAgdGhlIG1hY2hpbmUgY29kZSBvZmZzZXRzIG9mIE9TUiB0YXJnZXRzIGlu
IGEgQ29tcGFjdEpJVENvZGVNYXAuCisgICAgLy8gICAgRGVjb2RpbmcgaXQgaXMgbm90IHN1cGVy
IGVmZmljaWVudCwgYnV0IHdlIGV4cGVjdCB0aGF0IE9TUiBlbnRyeQorICAgIC8vICAgIGhhcHBl
bnMgc3VmZmljaWVudGx5IHJhcmVseSwgYW5kIHRoYXQgT1NSIGVudHJ5cG9pbnRzIGFyZSBzdWZm
aWNpZW50bHkKKyAgICAvLyAgICBmZXcsIHRoYXQgdGhpcyB3b24ndCBodXJ0IHRocm91Z2hwdXQu
IE5vdGUgdGhhdCB0aGUgb25seSByZWFsCisgICAgLy8gICAgcmVhc29uIHdoeSB3ZSB1c2UgYSBD
b21wYWN0SklUQ29kZU1hcCBpcyB0byBhdm9pZCBoYXZpbmcgdG8gaW50cm9kdWNlCisgICAgLy8g
ICAgeWV0IGFub3RoZXIgZGF0YSBzdHJ1Y3R1cmUgZm9yIG1hcHBpbmcgYmV0d2VlbiBieXRlY29k
ZSBpbmRpY2VzIGFuZAorICAgIC8vICAgIG1hY2hpbmUgY29kZSBvZmZzZXRzLgorICAgIAorICAg
IENvbXBhY3RKSVRDb2RlTWFwOjpEZWNvZGVyIGRlY29kZXIoY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCkpOworICAgIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpOworICAgIHdoaWxlIChkZWNvZGVyLm51bWJlck9mRW50cmllc1Jl
bWFpbmluZygpKSB7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRCeXRlY29kZUluZGV4OworICAg
ICAgICB1bnNpZ25lZCBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAgIGRlY29kZXIu
cmVhZChjdXJyZW50Qnl0ZWNvZGVJbmRleCwgY3VycmVudE1hY2hpbmVDb2RlT2Zmc2V0KTsKKyAg
ICAgICAgaWYgKGN1cnJlbnRCeXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5kZXgpIHsKKyAgICAg
ICAgICAgIG1hY2hpbmVDb2RlT2Zmc2V0ID0gY3VycmVudE1hY2hpbmVDb2RlT2Zmc2V0OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQVNTRVJUKG1hY2hp
bmVDb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7Cisg
ICAgCisgICAgdm9pZCogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFj
aGluZUNvZGVPZmZzZXQpOworICAgIAorI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAg
cHJpbnRmKCIgICAgT1NSIHJldHVybmluZyBtYWNoaW5lIGNvZGUgYWRkcmVzcyAlcC5cbiIsIHJl
c3VsdCk7CisjZW5kaWYKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UgLy8gREZHX09T
Ul9FTlRSWQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRW50cnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09T
UkVudHJ5X2gKKyNkZWZpbmUgREZHT1NSRW50cnlfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgRXhlY1N0YXRlOworY2xhc3MgQ29kZUJsb2NrOworCituYW1lc3BhY2UgREZHIHsKKworI2lm
IEVOQUJMRShERkdfSklUKQordm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVC
bG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworI2Vsc2UKK2lubGluZSB2b2lkKiBwcmVw
YXJlT1NSRW50cnkoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIDA7
IH0KKyNlbmRpZgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBERkdP
U1JFbnRyeV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blRyYWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25UcmFja2VyLmgJKHJldmlzaW9uIDk0OTI3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uVHJhY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgREZHUHJlZGljdGlvblRyYWNrZXJfaAotI2RlZmluZSBERkdQcmVkaWN0aW9uVHJhY2tl
cl9oCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkRGR05vZGUuaCIKLQotbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi0vLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGlz
dGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgotaW5saW5lIGJvb2wg
b3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9Ci0K
LXN0cnVjdCBQcmVkaWN0aW9uU2xvdCB7Ci1wdWJsaWM6Ci0gICAgUHJlZGljdGlvblNsb3QoKQot
ICAgICAgICA6IG1fdmFsdWUoUHJlZGljdE5vbmUpCi0gICAgewotICAgIH0KLSAgICBQcmVkaWN0
ZWRUeXBlIG1fdmFsdWU7Ci19OwotCi1jbGFzcyBQcmVkaWN0aW9uVHJhY2tlciB7Ci1wdWJsaWM6
Ci0gICAgUHJlZGljdGlvblRyYWNrZXIoKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgUHJlZGlj
dGlvblRyYWNrZXIodW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1WYXJpYWJsZXMp
Ci0gICAgICAgIDogbV9hcmd1bWVudHMobnVtQXJndW1lbnRzKQotICAgICAgICAsIG1fdmFyaWFi
bGVzKG51bVZhcmlhYmxlcykKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgaW5pdGlhbGl6
ZVNpbWlsYXJUbyhjb25zdCBQcmVkaWN0aW9uVHJhY2tlciYgb3RoZXIpCi0gICAgewotICAgICAg
ICBtX2FyZ3VtZW50cy5yZXNpemUob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAg
IG1fdmFyaWFibGVzLnJlc2l6ZShvdGhlci5udW1iZXJPZlZhcmlhYmxlcygpKTsKLSAgICB9Ci0g
ICAgCi0gICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1
bWVudHMuc2l6ZSgpOyB9Ci0gICAgc2l6ZV90IG51bWJlck9mVmFyaWFibGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9Ci0gICAgCi0gICAgdW5zaWduZWQgYXJndW1lbnRJ
bmRleEZvck9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmQgKyBtX2Fy
Z3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7IH0KLQot
ICAgIGJvb2wgcHJlZGljdEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50LCBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1lcmdlUHJlZGljdGlvbihtX2FyZ3VtZW50c1thcmd1bWVudF0ubV92YWx1ZSwgbWFrZVBy
ZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgcHJl
ZGljdChpbnQgb3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291
cmNlIHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5k
KSkKLSAgICAgICAgICAgIHJldHVybiBwcmVkaWN0QXJndW1lbnQoYXJndW1lbnRJbmRleEZvck9w
ZXJhbmQob3BlcmFuZCksIHByZWRpY3Rpb24sIHNvdXJjZSk7Ci0gICAgICAgIGlmICgodW5zaWdu
ZWQpb3BlcmFuZCA+PSBtX3ZhcmlhYmxlcy5zaXplKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChv
cGVyYW5kID49IDApOwotICAgICAgICAgICAgbV92YXJpYWJsZXMucmVzaXplKG9wZXJhbmQgKyAx
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbiht
X3ZhcmlhYmxlc1tvcGVyYW5kXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBz
b3VyY2UpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVk
IHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNv
dXJjZSkKLSAgICB7Ci0gICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90Pjo6
aXRlcmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFycy5maW5kKHZhck51bWJlciArIDEpOwotICAgICAg
ICBpZiAoaXRlciA9PSBtX2dsb2JhbFZhcnMuZW5kKCkpIHsKLSAgICAgICAgICAgIFByZWRpY3Rp
b25TbG90IHByZWRpY3Rpb25TbG90OwotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtZXJnZVBy
ZWRpY3Rpb24ocHJlZGljdGlvblNsb3QubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlv
biwgc291cmNlKSk7Ci0gICAgICAgICAgICBtX2dsb2JhbFZhcnMuYWRkKHZhck51bWJlciArIDEs
IHByZWRpY3Rpb25TbG90KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgbWFr
ZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
cHJlZGljdChOb2RlJiBub2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25T
b3VyY2Ugc291cmNlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7Ci0gICAgICAg
IGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gcHJlZGljdChub2RlLmxvY2FsKCks
IHByZWRpY3Rpb24sIHNvdXJjZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBH
ZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICByZXR1cm4gcHJlZGljdEdsb2JhbFZhcihub2RlLnZh
ck51bWJlcigpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR2V0QnlJZDoKLSAgICAgICAgY2FzZSBHZXRNZXRob2Q6Ci0gICAgICAgIGNhc2Ug
R2V0QnlWYWw6Ci0gICAgICAgIGNhc2UgQ2FsbDoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0g
ICAgICAgICAgICByZXR1cm4gbm9kZS5wcmVkaWN0KHByZWRpY3Rpb24sIHNvdXJjZSk7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgUHJlZGljdGVkVHlwZSBnZXRBcmd1bWVudFByZWRpY3Rpb24odW5zaWduZWQg
YXJndW1lbnQpCi0gICAgewotICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdLm1f
dmFsdWU7Ci0gICAgfQotCi0gICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBvcGVy
YW5kKQotICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAg
ICAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50UHJlZGljdGlvbihhcmd1bWVudEluZGV4Rm9yT3Bl
cmFuZChvcGVyYW5kKSk7Ci0gICAgICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA8IG1fdmFyaWFi
bGVzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXS5tX3Zh
bHVlOwotICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAgfQotICAgIAotICAgIFByZWRp
Y3RlZFR5cGUgZ2V0R2xvYmFsVmFyUHJlZGljdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIpCi0gICAg
ewotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2dsb2JhbFZhcnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKLSAgICAgICAgaWYgKGl0ZXIg
PT0gbV9nbG9iYWxWYXJzLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwot
ICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kLm1fdmFsdWU7Ci0gICAgfQotICAgIAotICAgIFBy
ZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihOb2RlJiBub2RlKQotICAgIHsKLSAgICAgICAgc3dp
dGNoIChub2RlLm9wKSB7Ci0gICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICByZXR1
cm4gZ2V0UHJlZGljdGlvbihub2RlLmxvY2FsKCkpOwotICAgICAgICBjYXNlIEdldEdsb2JhbFZh
cjoKLSAgICAgICAgICAgIHJldHVybiBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGUudmFyTnVt
YmVyKCkpOwotICAgICAgICBjYXNlIEdldEJ5SWQ6Ci0gICAgICAgIGNhc2UgR2V0TWV0aG9kOgot
ICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICBjYXNlIENhbGw6Ci0gICAgICAgIGNhc2Ug
Q29uc3RydWN0OgotICAgICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0UHJlZGljdGlvbigpOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2PiBt
X2FyZ3VtZW50czsKLSAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2PiBtX3ZhcmlhYmxlczsK
LSAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD4gbV9nbG9iYWxWYXJzOwotfTsK
LQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
Ci0KLSNlbmRpZiAvLyBERkdQcmVkaWN0aW9uVHJhY2tlcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTQ5MjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDMsMTQgKzEwMywxNCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
Z3JhcGhbbm9kZUluZGV4XS5oYXNSZXN1bHQoKSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4g
REZHOjptZXJnZVByZWRpY3Rpb24obV91c2VzW25vZGVJbmRleF0sIHByZWRpY3Rpb24pOworICAg
ICAgICByZXR1cm4gSlNDOjptZXJnZVByZWRpY3Rpb24obV91c2VzW25vZGVJbmRleF0sIHByZWRp
Y3Rpb24pOwogICAgIH0KICAgICAKICAgICBib29sIG1lcmdlUHJlZGljdGlvbihQcmVkaWN0ZWRU
eXBlIHByZWRpY3Rpb24pCiAgICAgewogICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJ
bmRleF0uaGFzUmVzdWx0KCkpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIERGRzo6bWVyZ2VQ
cmVkaWN0aW9uKG1fcHJlZGljdGlvbnNbbV9jb21waWxlSW5kZXhdLCBwcmVkaWN0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIEpTQzo6bWVyZ2VQcmVkaWN0aW9uKG1fcHJlZGljdGlvbnNbbV9jb21waWxl
SW5kZXhdLCBwcmVkaWN0aW9uKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBwcm9wYWdhdGVOb2Rl
KE5vZGUmIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTQ5MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0
NCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICByZXR1
cm4gSW52YWxpZEdQUlJlZzsKIH0KIAorI2lmICFERkdfT1NSX0VYSVQKIFNwZWN1bGF0aW9uQ2hl
Y2s6OlNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0
aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBtX2NoZWNrKGNoZWNr
KQogICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKQEAgLTE3MCw2ICsxNzEs
NzMgQEAgU3BlY3VsYXRpb25DaGVjazo6U3BlY3VsYXRpb25DaGVjayhNYWNybwogICAgICAgICAg
ICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gTm9Ob2RlOwogICAgIH0KIH0K
KyNlbmRpZgorCisjaWZuZGVmIE5ERUJVRwordm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBv
dXQpIGNvbnN0Cit7CisgICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsK
K30KKwordm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wKEZJTEUqIG91dCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKHRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGU6Cisg
ICAgICAgIGZwcmludGYob3V0LCAiLSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluR1BS
OgorICAgICAgICBmcHJpbnRmKG91dCwgIiUlJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAg
ZnByaW50ZihvdXQsICJpbnQzMiglJSVzKSIsIEdQUkluZm86OmRlYnVnTmFtZShncHIoKSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEluRlBSOgorICAgICAgICBmcHJpbnRmKG91dCwgIiUl
JXMiLCBGUFJJbmZvOjpkZWJ1Z05hbWUoZnByKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICIqJWQiLCB2
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RhbnQ6Cisg
ICAgICAgIGZwcmludGYob3V0LCAiWyVzXSIsIGNvbnN0YW50KCkuZGVzY3JpcHRpb24oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9udEtub3c6CisgICAgICAgIGZwcmludGYob3V0LCAi
ISIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBmcHJpbnRmKG91dCwg
Ij8lZCIsIHRlY2huaXF1ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorI2VuZGlmCisK
KyNpZiBERkdfT1NSX0VYSVQKK09TUkV4aXQ6Ok9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
Y2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCisgICAg
OiBtX2NoZWNrKGNoZWNrKQorICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkK
KyAgICAsIG1fYnl0ZWNvZGVJbmRleChqaXQtPm1fYnl0ZWNvZGVJbmRleEZvck9TUikKKyAgICAs
IG1fcmVjb3ZlcnlJbmRleChyZWNvdmVyeUluZGV4KQorICAgICwgbV9hcmd1bWVudHMoaml0LT5t
X2FyZ3VtZW50cy5zaXplKCkpCisgICAgLCBtX3ZhcmlhYmxlcyhqaXQtPm1fdmFyaWFibGVzLnNp
emUoKSkKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQorewor
ICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBt
X2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCisgICAgICAgIG1fYXJndW1lbnRzW2FyZ3Vt
ZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1
bWVudF0pOworICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFy
aWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKKyAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVd
ID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxl
XSk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCit2b2lkIE9TUkV4aXQ6OmR1bXAoRklMRSogb3V0KSBj
b25zdAoreworICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fYXJn
dW1lbnRzLnNpemUoKTsgKythcmd1bWVudCkKKyAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRd
LmR1bXAob3V0KTsKKyAgICBmcHJpbnRmKG91dCwgIiA6ICIpOworICAgIGZvciAodW5zaWduZWQg
dmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkK
KyAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdLmR1bXAob3V0KTsKK30KKyNlbmRpZgorI2Vu
ZGlmCiAKIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludChOb2RlSW5kZXgg
bm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCiB7CkBAIC02NTAsNiArNzE4LDQy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAg
ICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgIC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBoaW50
IGFzIHRvIHdoZXJlIGEgbm9kZSB3aWxsIGJlIHN0b3JlZCBhbmQKKyAgICAgICAgLy8gYXMgYSBz
cGVjdWxhdGlvbiBwb2ludC4gU28gYmVmb3JlIHdlIHNwZWN1bGF0ZSBtYWtlIHN1cmUgdGhhdCB3
ZQorICAgICAgICAvLyBrbm93IHdoZXJlIHRoZSBjaGlsZCBvZiB0aGlzIG5vZGUgbmVlZHMgdG8g
Z28gaW4gdGhlIHZpcnR1YWwKKyAgICAgICAgLy8gcmVnaXN0ZXIgZmlsZS4KKyAgICAgICAgY29t
cGlsZU1vdkhpbnQobm9kZSk7CisgICAgICAgIAorICAgICAgICAvLyBBcyBmYXIgYXMgT1NSIGlz
IGNvbmNlcm5lZCwgd2UncmUgb24gdGhlIGJ5dGVjb2RlIGluZGV4IGNvcnJlc3BvbmRpbmcKKyAg
ICAgICAgLy8gdG8gdGhlICpuZXh0KiBpbnN0cnVjdGlvbiwgc2luY2Ugd2UndmUgYWxyZWFkeSAi
ZXhlY3V0ZWQiIHRoZQorICAgICAgICAvLyBTZXRMb2NhbCBhbmQgd2hhdGV2ZXIgb3RoZXIgREZH
IE5vZGVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUKKyAgICAgICAgLy8gYnl0ZWNvZGUg
aW5kZXggYXMgdGhlIFNldExvY2FsLgorICAgICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4Rm9y
T1NSID09IG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBOb2RlJiBu
ZXh0Tm9kZSA9IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXgrMV07CisgICAgICAgIAorICAg
ICAgICAvLyBUaGlzIGFzc2VydGlvbiB3aWxsIGZhaWwgaWYgd2UgZXZlciBlbWl0IG11bHRpcGxl
IFNldExvY2FsJ3MgZm9yCisgICAgICAgIC8vIGEgc2luZ2xlIGJ5dGVjb2RlIGluc3RydWN0aW9u
LiBUaGF0J3MgdW5saWtlbHkgdG8gaGFwcGVuLiBCdXQgaWYKKyAgICAgICAgLy8gaXQgZG9lcywg
dGhlIHNvbHV0aW9uIGlzIHRvIHRvIGhhdmUgdGhpcyBwZXJmb3JtIGEgc2VhcmNoIHVudGlsCisg
ICAgICAgIC8vIGl0IGZpbmRzIGEgTm9kZSB3aXRoIGEgZGlmZmVyZW50IGJ5dGVjb2RlIGluZGV4
IGZyb20gdGhlIG9uZSB3ZSd2ZQorICAgICAgICAvLyBnb3QsIGFuZCB0byBhYnN0cmFjdGx5IGV4
ZWN1dGUgdGhlIFNldExvY2FsJ3MgYWxvbmcgdGhlIHdheS4gT3IsCisgICAgICAgIC8vIGJldHRl
ciB5ZXQsIGhhbmRsZSBhbGwgb2YgdGhlIFNldExvY2FsJ3MgYXQgb25jZTogYWJzdHJhY3QgaW50
ZXJwcmV0CisgICAgICAgIC8vIGFsbCBvZiB0aGVtLCB0aGVuIGVtaXQgY29kZSBmb3IgYWxsIG9m
IHRoZW0sIHdpdGggT1NSIGV4aXRpbmcgdG8KKyAgICAgICAgLy8gdGhlIG5leHQgbm9uLVNldExv
Y2FsIGluc3RydWN0aW9uLiBOb3RlIHRoZSBzcGVjaWFsIGNhc2UgZm9yIHdoZW4KKyAgICAgICAg
Ly8gYm90aCB0aGlzIFNldExvY2FsIGFuZCB0aGUgbmV4dCBvcCBoYXZlIGEgYnl0ZWNvZGUgaW5k
ZXggb2YgMDsgdGhpcworICAgICAgICAvLyBvY2N1cnMgZm9yIFNldExvY2FsJ3MgZ2VuZXJhdGVk
IGF0IHRoZSB0b3Agb2YgdGhlIGNvZGUgYmxvY2sgdG8KKyAgICAgICAgLy8gaW5pdGlhbGl6ZSBs
b2NhbHMgdG8gdW5kZWZpbmVkLiBJZGVhbGx5LCB3ZSdkIGhhdmUgYSB3YXkgb2YgbWFya2luZwor
ICAgICAgICAvLyBpbiB0aGUgQ29kZU9yaWdpbiB0aGF0IGEgU2V0TG9jYWwgaXMgc3ludGhldGlj
LiBUaGlzIHdpbGwgbWFrZSB0aGUKKyAgICAgICAgLy8gYXNzZXJ0aW9uIG1vcmUgc2Vuc2libGUt
bG9va2luZy4gV2Ugc2hvdWxkIHRoZW4gYWxzbyBhc3NlcnQgdGhhdAorICAgICAgICAvLyBzeW50
aGV0aWMgU2V0TG9jYWwncyBkb24ndCBoYXZlIHNwZWN1bGF0aW9uIGNoZWNrcywgc2luY2UgdGhl
eQorICAgICAgICAvLyBzaG91bGQgb25seSBiZSBkcm9wcGluZyB2YWx1ZXMgdGhhdCB3ZSBzdGF0
aWNhbGx5IGtub3cgd2UgYXJlCisgICAgICAgIC8vIGFsbG93ZWQgdG8gZHJvcCBpbnRvIHRoZSB2
YXJpYWJsZXMuIERGR1Byb3BhZ2F0b3Igd2lsbCBndWFyYW50ZWUKKyAgICAgICAgLy8gdGhpcywg
c2luY2UgaXQgc2hvdWxkIGhhdmUgYXQgbGVhc3QgYW4gYXBwcm94aW1hdGlvbiAoaWYgbm90Cisg
ICAgICAgIC8vIGV4YWN0IGtub3dsZWRnZSkgb2YgdGhlIHR5cGUgb2YgdGhlIFNldExvY2FsJ3Mg
Y2hpbGQgbm9kZSwgYW5kCisgICAgICAgIC8vIHNob3VsZCBtZXJnZSB0aGF0IGluZm9ybWF0aW9u
IGludG8gdGhlIGxvY2FsIHRoYXQgaXMgYmVpbmcgc2V0LgorICAgICAgICBBU1NFUlQobV9ieXRl
Y29kZUluZGV4Rm9yT1NSICE9IG5leHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpCisg
ICAgICAgICAgICAgICB8fCAoIW1fYnl0ZWNvZGVJbmRleEZvck9TUiAmJiAhbmV4dE5vZGUuY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpKTsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NS
ID0gbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIAogICAgICAg
ICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rp
b24obm9kZS5sb2NhbCgpKTsKICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3Rl
ZFR5cGUpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKQEAgLTY3MCw2ICs3NzQsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWUu
Z3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBJbmRpY2F0ZSB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byByZXRyaWV2ZSB0
aGUgdmFsdWUgb2YKKyAgICAgICAgLy8gdGhpcyBieXRlY29kZSB2YXJpYWJsZSBmcm9tIHJlZ2lz
dGVycyBvciBvdGhlciBsb2NhdGlvbnMgaW4gdGhlIHJlZ2lzdGVyIGZpbGUuCisgICAgICAgIHZh
bHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2Uo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMzY5LDQ4ICsxNDc3LDk5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIH0KLQorICAgIAogICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmIG5vZGUubXVzdEdl
bmVyYXRlKCkpCiAgICAgICAgIHVzZShtX2NvbXBpbGVJbmRleCk7CiB9CiAKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUu
b3AgPT0gU2V0TG9jYWwpOworICAgIAorICAgIHNldE5vZGVJbmRleEZvck9wZXJhbmQobm9kZS5j
aGlsZDEoKSwgbm9kZS5sb2NhbCgpKTsKKyAgICBtX2xhc3RTZXRPcGVyYW5kID0gbm9kZS5sb2Nh
bCgpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smIGJsb2Nr
KQogewogICAgIEFTU0VSVChtX2NvbXBpbGVPa2F5KTsKICAgICBBU1NFUlQobV9jb21waWxlSW5k
ZXggPT0gYmxvY2suYmVnaW4pOworICAgIAorICAgIGlmIChibG9jay5pc09TUlRhcmdldCkKKyAg
ICAgICAgbV9qaXQubm90aWNlT1NSRW50cnkoYmxvY2spOworICAgIAogICAgIG1fYmxvY2tIZWFk
c1ttX2Jsb2NrXSA9IG1faml0LmxhYmVsKCk7CiAjaWYgREZHX0pJVF9CUkVBS19PTl9FVkVSWV9C
TE9DSwogICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgorICAgIAorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYXJndW1l
bnRzW2ldID0gVmFsdWVTb3VyY2UoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFy
aWFibGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNl
KCk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCk7CisgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50
MzJfdD46Om1heCgpOwogCiAgICAgZm9yICg7IG1fY29tcGlsZUluZGV4IDwgYmxvY2suZW5kOyAr
K21fY29tcGlsZUluZGV4KSB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW21f
Y29tcGlsZUluZGV4XTsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCisgICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9T
UiA9IG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKSB7CiAjaWYgREZHX0RFQlVHX1ZFUkJPU0UKLSAgICAgICAgZnByaW50
ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIGF0IEpJVCBvZmZz
ZXQgMHgleCAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBza2lwcGluZyBOb2Rl
IEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgleCAgICAgIiwgKGludCltX2NvbXBpbGVJbmRl
eCwgbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwgbV9qaXQuZGVidWdPZmZzZXQoKSk7
CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChub2RlLm9wID09IFNldExvY2FsKQorICAgICAgICAg
ICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
U3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQg
MHgleCAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4KCksIG1faml0LmRlYnVnT2Zmc2V0KCkpOwogI2VuZGlmCiAjaWYgREZHX0pJVF9CUkVBS19P
Tl9FVkVSWV9OT0RFCi0gICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgICAgIG1f
aml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgotICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0g
ICAgICAgIGNvbXBpbGUobm9kZSk7Ci0gICAgICAgIGlmICghbV9jb21waWxlT2theSkgeworICAg
ICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgY29tcGlsZShub2RlKTsK
KyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkgewogI2lmIEVOQUJMRShEWU5BTUlDX1RF
Uk1JTkFURV9TUEVDVUxBVElPTikKLSAgICAgICAgICAgIG1fY29tcGlsZU9rYXkgPSB0cnVlOwot
ICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBibG9jay5lbmQ7Ci0gICAgICAgICAgICBjbGVh
ckdlbmVyYXRpb25JbmZvKCk7CisgICAgICAgICAgICAgICAgbV9jb21waWxlT2theSA9IHRydWU7
CisgICAgICAgICAgICAgICAgbV9jb21waWxlSW5kZXggPSBibG9jay5lbmQ7CisgICAgICAgICAg
ICAgICAgY2xlYXJHZW5lcmF0aW9uSW5mbygpOwogI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKICNpZiBERkdfREVCVUdfVkVSQk9TRQotICAgICAgICBpZiAobm9kZS5oYXNSZXN1
bHQoKSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXNcbiIsIGRhdGFGb3JtYXRU
b1N0cmluZyhtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldLnJlZ2lzdGVy
Rm9ybWF0KCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJc
biIpOworICAgICAgICAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpIHsKKyAgICAgICAgICAgICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVn
aXN0ZXIoKV07CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICItPiAlcywgdnIjJWQi
LCBkYXRhRm9ybWF0VG9TdHJpbmcoaW5mby5yZWdpc3RlckZvcm1hdCgpKSwgKGludClub2RlLnZp
cnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1h
dCgpICE9IERhdGFGb3JtYXROb25lKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLnJl
Z2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiLCAlcyIsIEZQUkluZm86OmRlYnVnTmFtZShpbmZvLmZwcigp
KSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiLCAlcyIsIEdQUkluZm86OmRlYnVnTmFtZShpbmZvLmdwcigpKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIp
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIg
ICAgIik7CiAjZW5kaWYKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICB9Cisg
ICAgICAgIAorI2lmIERGR19ERUJVR19WRVJCT1NFID49IDIgICAgICAgIAorICAgICAgICBmb3Ig
KGludCBvcGVyYW5kID0gLW1fYXJndW1lbnRzLnNpemUoKSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZTsgb3BlcmFuZCA8IC1SZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emU7ICsrb3BlcmFuZCkKKyAgICAgICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJh
bmQpLmR1bXAoc3RkZXJyKTsKKyAgICAgICAgCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIDog
Iik7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBvcGVyYW5kID0gMDsgb3BlcmFuZCA8IChp
bnQpbV92YXJpYWJsZXMuc2l6ZSgpOyArK29wZXJhbmQpCisgICAgICAgICAgICBjb21wdXRlVmFs
dWVSZWNvdmVyeUZvcihvcGVyYW5kKS5kdW1wKHN0ZGVycik7CisjZW5kaWYKKyAgICAgIAorI2lm
IERGR19ERUJVR19WRVJCT1NFICAKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworI2Vu
ZGlmCisgICAgICAgIAorICAgICAgICBpZiAobm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAg
ICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KIH0KIApAQCAtMTQxOSw2ICsxNTc4LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKIHsKICAgICBBU1NFUlQoIW1fY29tcGlsZUlu
ZGV4KTsKKyAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSAwOwogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbV9qaXQuY29kZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVyczsgKytpKSB7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSAoVmlydHVhbFJlZ2lzdGVyKShtX2pp
dC5jb2RlQmxvY2soKS0+dGhpc1JlZ2lzdGVyKCkgKyBpKTsKICAgICAgICAgUHJlZGljdGVkVHlw
ZSBwcmVkaWN0ZWRUeXBlID0gbV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKHZpcnR1YWxSZWdp
c3Rlcik7CkBAIC0xNDU0LDcgKzE2MTQsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KCkKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsKICAgICBmb3IgKG1fYmxvY2sgPSAwOyBt
X2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCk7ICsrbV9ibG9jaykgewogICAg
ICAgICBjb21waWxlKCptX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdKTsKLSNpZiAhRU5B
QkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorI2lmICFFTkFCTEUoRFlOQU1JQ19URVJNSU5BVEVf
U1BFQ1VMQVRJT04pCiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICNlbmRpZgpAQCAtMTQ2Myw2ICsxNjIzLDExOSBAQCBib29sIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorVmFsdWVSZWNvdmVyeSBT
cGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoY29uc3QgVmFsdWVTb3VyY2Um
IHZhbHVlU291cmNlKQoreworICAgIGlmICghdmFsdWVTb3VyY2UuaXNTZXQoKSkKKyAgICAgICAg
cmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZSgpOworCisgICAgaWYg
KG1faml0LmlzQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKQorICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobV9qaXQudmFsdWVPZkpTQ29uc3RhbnQodmFsdWVT
b3VyY2Uubm9kZUluZGV4KCkpKTsKKyAgICAKKyAgICBOb2RlKiBub2RlUHRyID0gJm1faml0Lmdy
YXBoKClbdmFsdWVTb3VyY2Uubm9kZUluZGV4KCldOworICAgIGlmICghbm9kZVB0ci0+c2hvdWxk
R2VuZXJhdGUoKSkgeworICAgICAgICAvLyBJdCdzIGxlZ2l0aW1hdGVseSBkZWFkLiBBcyBpbiwg
bm9ib2R5IHdpbGwgZXZlciB1c2UgdGhpcyBub2RlLCBvciBvcGVyYW5kLAorICAgICAgICAvLyBl
dmVyLiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRvIG1ha2UgdGhlIEdDIGhhcHB5IGFmdGVyIHRoZSBP
U1IuCisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgp
KTsKKyAgICB9CisgICAgCisgICAgR2VuZXJhdGlvbkluZm8qIGluZm9QdHIgPSAmbV9nZW5lcmF0
aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgaWYgKCFpbmZvUHRyLT5h
bGl2ZSgpIHx8IGluZm9QdHItPm5vZGVJbmRleCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgp
KSB7CisgICAgICAgIC8vIFRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gYWx0ZXJuYXRlIG5vZGUg
dGhhdCB3b3VsZCBjb250YWluIHRoZSB2YWx1ZSB3ZSB3YW50LgorICAgICAgICAvLyBUaGVyZSBh
cmUgZm91ciBwb3NzaWJpbGl0aWVzOgorICAgICAgICAvLworICAgICAgICAvLyBWYWx1ZVRvTnVt
YmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzIGEgVmFsdWVUb051
bWJlciBub2RlCisgICAgICAgIC8vICAgIHRoZW4gaXQgbWVhbnMgdGhhdCBhbGwgcmVtYWluaW5n
IHVzZXMgb2YgdGhlIHZhbHVlIHdvdWxkIGhhdmUgcGVyZm9ybWVkIGEKKyAgICAgICAgLy8gICAg
VmFsdWVUb051bWJlciBjb252ZXJzaW9uIGFueXdheS4gVGh1cywgd2UgY2FuIHN1YnN0aXR1dGUg
VmFsdWVUb051bWJlci4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVmFsdWVUb0ludDMyOiBMaWtl
d2lzZSwgaWYgdGhlIG9ubHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMK
KyAgICAgICAgLy8gICAgVmFsdWVUb0ludDMyLCB0aGVuIHdlIGNhbiB1c2UgaXQuIEJ1dCBpZiB0
aGVyZSBpcyBib3RoIGEgVmFsdWVUb0ludDMyCisgICAgICAgIC8vICAgIGFuZCBhIFZhbHVlVG9O
dW1iZXIsIHRoZW4gd2UgYmV0dGVyIGdvIHdpdGggVmFsdWVUb051bWJlciBiZWNhdXNlIGl0Cisg
ICAgICAgIC8vICAgIG1lYW5zIHRoYXQgc29tZSByZW1haW5pbmcgdXNlcyB3b3VsZCBoYXZlIGNv
bnZlcnRlZCB0byBudW1iZXIgd2hpbGUKKyAgICAgICAgLy8gICAgb3RoZXJzIHdvdWxkIGhhdmUg
Y29udmVydGVkIHRvIEludDMyLgorICAgICAgICAvLworICAgICAgICAvLyBVSW50MzJUb051bWJl
cjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFVJbnQzMlRvTnVt
YmVyCisgICAgICAgIC8vICAgIHRoZW4gdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgYXJlIG9uZXMg
dGhhdCB3YW50IGEgcHJvcGVybHkgZm9ybWVkIG51bWJlcgorICAgICAgICAvLyAgICByYXRoZXIg
dGhhbiBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSBy
ZXZlcnNlIG9mIHRoZSBhYm92ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEgVUludDMyVG9OdW1iZXIs
IGJ1dCBpdHMKKyAgICAgICAgLy8gICAgYWx0ZXJuYXRpdmUgaXMgc3RpbGwgYWxpdmUuIFRoaXMg
bWVhbnMgdGhhdCB0aGUgb25seSByZW1haW5pbmcgdXNlcyBvZgorICAgICAgICAvLyAgICB0aGUg
bnVtYmVyIHdvdWxkIGJlIGZpbmUgd2l0aCBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCisgICAgICAg
IAorICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAobm9k
ZVB0ci0+b3AgPT0gVUludDMyVG9OdW1iZXIpIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBub2RlUHRyLT5jaGlsZDEoKTsKKyAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQu
Z3JhcGgoKVtub2RlSW5kZXhdOworICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25J
bmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgIGlmIChpbmZvUHRy
LT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRleCkKKyAgICAgICAg
ICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgh
Zm91bmQpIHsKKyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZVRvTnVtYmVySW5kZXggPSBOb05v
ZGU7CisgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb0ludDMySW5kZXggPSBOb05vZGU7Cisg
ICAgICAgICAgICBOb2RlSW5kZXggdWludDMyVG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2
aXJ0dWFsUmVnaXN0ZXIgPCBtX2dlbmVyYXRpb25JbmZvLnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0
ZXIpIHsKKyAgICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlv
bkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAgICAgICBpZiAoIWluZm8uYWxpdmUo
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGlu
Zm8ubm9kZUluZGV4KCkgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtpbmZvLm5vZGVJbmRl
eCgpXTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDFVbmNoZWNrZWQoKSAhPSB2YWx1
ZVNvdXJjZS5ub2RlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgICAgICAgICAgY2FzZSBWYWx1
ZVRvTnVtYmVyOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvTnVtYmVySW5kZXggPSBpbmZv
Lm5vZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMySW5k
ZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICAgICAgICAgICAgICB1aW50
MzJUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4VG9Vc2U7CisgICAgICAgICAgICBpZiAodmFsdWVU
b051bWJlckluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9
IHZhbHVlVG9OdW1iZXJJbmRleDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlVG9JbnQzMklu
ZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZhbHVlVG9J
bnQzMkluZGV4OworICAgICAgICAgICAgZWxzZSBpZiAodWludDMyVG9OdW1iZXJJbmRleCAhPSBO
b05vZGUpCisgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB1aW50MzJUb051bWJlcklu
ZGV4OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0g
Tm9Ob2RlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZUluZGV4VG9Vc2UgIT0g
Tm9Ob2RlKSB7CisgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJ
bmRleFRvVXNlXTsKKyAgICAgICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9b
bm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICAgICAgICAgIEFTU0VSVChpbmZv
UHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRleFRvVXNlKTsK
KyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmICghZm91bmQpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVS
ZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIAorICAgIEFTU0VS
VChpbmZvUHRyLT5hbGl2ZSgpKTsKKworICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgp
ICE9IERhdGFGb3JtYXROb25lKSB7CisgICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1h
dCgpID09IERhdGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVy
eTo6aW5GUFIoaW5mb1B0ci0+ZnByKCkpOworICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6
aW5HUFIoaW5mb1B0ci0+Z3ByKCksIGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkpOworICAgIH0K
KyAgICBpZiAoaW5mb1B0ci0+c3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAg
ICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVmFsdWVSZWNvdmVyeSgpOwor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTQ5Mjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9zcmM7CiB9
OwogCisjaWYgIURGR19PU1JfRVhJVAogLy8gPT09IFNwZWN1bGF0aW9uQ2hlY2sgPT09CiAvLwog
Ly8gVGhpcyBzdHJ1Y3R1cmUgcmVjb3JkcyBhIGJhaWwtb3V0IGZyb20gdGhlIHNwZWN1bGF0aXZl
IHBhdGgsCkBAIC05MSw3ICs5MiwxOTYgQEAgc3RydWN0IFNwZWN1bGF0aW9uQ2hlY2sgewogICAg
IFJlZ2lzdGVySW5mbyBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOwogfTsK
IHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2ssIDE2PiBTcGVjdWxhdGlv
bkNoZWNrVmVjdG9yOworI2VuZGlmIC8vICFERkdfT1NSX0VYSVQKIAorY2xhc3MgVmFsdWVTb3Vy
Y2UgeworcHVibGljOgorICAgIFZhbHVlU291cmNlKCkKKyAgICAgICAgOiBtX25vZGVJbmRleChO
b05vZGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShOb2Rl
SW5kZXggbm9kZUluZGV4KQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleCkKKyAgICB7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fbm9kZUluZGV4ICE9IE5vTm9kZTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAg
IHJldHVybiBtX25vZGVJbmRleDsKKyAgICB9CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIHZv
aWQgZHVtcChGSUxFKiBvdXQpIGNvbnN0OworI2VuZGlmCisgICAgCitwcml2YXRlOgorICAgIE5v
ZGVJbmRleCBtX25vZGVJbmRleDsKK307CisgICAgCisvLyBEZXNjcmliZXMgaG93IHRvIHJlY292
ZXIgYSBnaXZlbiBieXRlY29kZSB2aXJ0dWFsIHJlZ2lzdGVyIGF0IGEgZ2l2ZW4KKy8vIGNvZGUg
cG9pbnQuCitlbnVtIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgeworICAgIC8vIEl0J3MgYWxyZWFk
eSBpbiB0aGUgcmVnaXN0ZXIgZmlsZSBhdCB0aGUgcmlnaHQgbG9jYXRpb24uCisgICAgQWxyZWFk
eUluUmVnaXN0ZXJGaWxlLAorICAgIC8vIEl0J3MgaW4gYSByZWdpc3Rlci4KKyAgICBJbkdQUiwK
KyAgICBVbmJveGVkSW50MzJJbkdQUiwKKyAgICBJbkZQUiwKKyAgICAvLyBJdCdzIGluIHRoZSBy
ZWdpc3RlciBmaWxlLCBidXQgYXQgYSBkaWZmZXJlbnQgbG9jYXRpb24uCisgICAgRGlzcGxhY2Vk
SW5SZWdpc3RlckZpbGUsCisgICAgLy8gSXQncyBhIGNvbnN0YW50LgorICAgIENvbnN0YW50LAor
ICAgIC8vIERvbid0IGtub3cgaG93IHRvIHJlY292ZXIgaXQuCisgICAgRG9udEtub3cKK307CisK
K2NsYXNzIFZhbHVlUmVjb3ZlcnkgeworcHVibGljOgorICAgIFZhbHVlUmVjb3ZlcnkoKQorICAg
ICAgICA6IG1fdGVjaG5pcXVlKERvbnRLbm93KQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFZhbHVlUmVjb3ZlcnkgYWxyZWFkeUluUmVnaXN0ZXJGaWxlKCkKKyAgICB7CisgICAgICAg
IFZhbHVlUmVjb3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBBbHJl
YWR5SW5SZWdpc3RlckZpbGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGluR1BSKEdQUlJlZyBncHIsIERhdGFGb3JtYXQgZGF0
YUZvcm1hdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0ICE9IERhdGFGb3JtYXRO
b25lKTsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIGlmIChkYXRhRm9y
bWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQorICAgICAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVl
ID0gVW5ib3hlZEludDMySW5HUFI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5t
X3RlY2huaXF1ZSA9IEluR1BSOworICAgICAgICByZXN1bHQubV9zb3VyY2UuZ3ByID0gZ3ByOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNv
dmVyeSBpbkZQUihGUFJSZWcgZnByKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEluRlBSOworICAgICAgICByZXN1bHQu
bV9zb3VyY2UuZnByID0gZnByOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZykKKyAgICB7CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0
OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZTsK
KyAgICAgICAgcmVzdWx0Lm1fc291cmNlLnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBj
b25zdGFudChKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IENvbnN0YW50OworICAgICAgICByZXN1
bHQubV9zb3VyY2UuY29uc3RhbnQgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBWYWx1ZVJlY292ZXJ5VGVjaG5pcXVlIHRl
Y2huaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGVjaG5pcXVlOyB9CisgICAgCisgICAgR1BSUmVn
IGdwcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gSW5HUFIg
fHwgbV90ZWNobmlxdWUgPT0gVW5ib3hlZEludDMySW5HUFIpOworICAgICAgICByZXR1cm4gbV9z
b3VyY2UuZ3ByOworICAgIH0KKyAgICAKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJbkZQUik7CisgICAgICAgIHJldHVybiBtX3Nv
dXJjZS5mcHI7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IERpc3BsYWNl
ZEluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgcmV0dXJuIG1fc291cmNlLnZpcnR1YWxSZWc7Cisg
ICAgfQorICAgIAorICAgIEpTVmFsdWUgY29uc3RhbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fdGVjaG5pcXVlID09IENvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmRlY29kZShtX3NvdXJjZS5jb25zdGFudCk7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcK
KyAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKKyNlbmRpZgorICAgIAorcHJpdmF0ZToK
KyAgICBWYWx1ZVJlY292ZXJ5VGVjaG5pcXVlIG1fdGVjaG5pcXVlOworICAgIHVuaW9uIHsKKyAg
ICAgICAgR1BSUmVnIGdwcjsKKyAgICAgICAgRlBSUmVnIGZwcjsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWc7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlIGNvbnN0YW50OworICAg
IH0gbV9zb3VyY2U7Cit9OworCisjaWYgREZHX09TUl9FWElUCisvLyA9PT0gT1NSRXhpdCA9PT0K
Ky8vCisvLyBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgaG93IHRvIGV4aXQgdGhlIHNwZWN1bGF0
aXZlIHBhdGggYnkKKy8vIGdvaW5nIGludG8gYmFzZWxpbmUgY29kZS4KK3N0cnVjdCBPU1JFeGl0
IHsKKyAgICBPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1wLCBTcGVjdWxhdGl2ZUpJVCosIHVu
c2lnbmVkIHJlY292ZXJ5SW5kZXggPSAwKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBtX2NoZWNrOworICAgIE5vZGVJbmRleCBtX25vZGVJbmRleDsKKyAgICB1bnNpZ25lZCBtX2J5
dGVjb2RlSW5kZXg7CisgICAgCisgICAgdW5zaWduZWQgbV9yZWNvdmVyeUluZGV4OworICAgIAor
ICAgIC8vIENvbnZlbmllbnQgd2F5IG9mIGl0ZXJhdGluZyBvdmVyIFZhbHVlUmVjb3ZlcmllcyB3
aGlsZSBiZWluZworICAgIC8vIGdlbmVyaWMgb3ZlciBhcmd1bWVudCB2ZXJzdXMgdmFyaWFibGUu
CisgICAgaW50IG51bWJlck9mUmVjb3ZlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRz
LnNpemUoKSArIG1fdmFyaWFibGVzLnNpemUoKTsgfQorICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHZhbHVlUmVjb3ZlcnkoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4
IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHNbaW5kZXhdOworICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbaW5kZXggLSBtX2FyZ3VtZW50
cy5zaXplKCldOworICAgIH0KKyAgICBib29sIGlzQXJndW1lbnQoaW50IGluZGV4KSBjb25zdCB7
IHJldHVybiBpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisgICAgYm9vbCBpc1Zh
cmlhYmxlKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gIWlzQXJndW1lbnQoaW5kZXgpOyB9Cisg
ICAgaW50IGFyZ3VtZW50Rm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGluZGV4OworICAgIH0KKyAgICBpbnQgdmFyaWFibGVGb3JJbmRleChpbnQgaW5kZXgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCk7
CisgICAgfQorICAgIGludCBvcGVyYW5kRm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCkpCisgICAgICAgICAg
ICByZXR1cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxG
cmFtZUhlYWRlclNpemU7CisgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUo
KTsKKyAgICB9CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBvdXQp
IGNvbnN0OworI2VuZGlmCisgICAgCisgICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fYXJn
dW1lbnRzOworICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAwPiBtX3ZhcmlhYmxlczsKKyAgICBp
bnQgbV9sYXN0U2V0T3BlcmFuZDsKK307Cit0eXBlZGVmIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0
LCAxNj4gT1NSRXhpdFZlY3RvcjsKKyNlbmRpZiAvLyBERkdfT1NSX0VYSVQKIAogLy8gPT09IFNw
ZWN1bGF0aXZlSklUID09PQogLy8KQEAgLTEwNSwyMSArMjk1LDI1IEBAIHR5cGVkZWYgU2VnbWVu
dGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2sKIC8vIG9ubHkgc3BlY3VsYXRpdmVseSBiZWVuIGFz
c2VydGVkKSB0aHJvdWdoIHRoZSBkYXRhZmxvdy4KIGNsYXNzIFNwZWN1bGF0aXZlSklUIDogcHVi
bGljIEpJVENvZGVHZW5lcmF0b3IgewogICAgIGZyaWVuZCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVj
azsKKyAgICBmcmllbmQgc3RydWN0IE9TUkV4aXQ7CiBwdWJsaWM6Ci0gICAgU3BlY3VsYXRpdmVK
SVQoSklUQ29tcGlsZXImIGppdCkKLSAgICAgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1
ZSkKLSAgICAgICAgLCBtX2NvbXBpbGVPa2F5KHRydWUpCi0gICAgewotICAgIH0KKyAgICBTcGVj
dWxhdGl2ZUpJVChKSVRDb21waWxlciYpOwogCiAgICAgYm9vbCBjb21waWxlKCk7CiAKICAgICAv
LyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0
aCwKICAgICAvLyBhbmQgYWRkaXRpb25hbCByZWNvdmVyeSBpbmZvcm1hdGlvbi4KKyNpZiAhREZH
X09TUl9FWElUCiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3RvciYgc3BlY3VsYXRpb25DaGVja3Mo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3BlY3VsYXRpb25DaGVja3M7CiAgICAgfQorI2Vs
c2UKKyAgICBPU1JFeGl0VmVjdG9yJiBvc3JFeGl0cygpCisgICAgeworICAgICAgICByZXR1cm4g
bV9vc3JFeGl0czsKKyAgICB9CisjZW5kaWYKICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiBzcGVj
dWxhdGlvblJlY292ZXJ5KHNpemVfdCBpbmRleCkKICAgICB7CiAgICAgICAgIC8vIFNwZWN1bGF0
aW9uQ2hlY2s6Om1fcmVjb3ZlcnlJbmRleCBpcyBvZmZzZXQgYnkgMSwKQEAgLTEzOSw2ICszMzMs
NyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb2RlR2VuZXJhdG9yOwogICAgIAog
ICAgIHZvaWQgY29tcGlsZShOb2RlJik7CisgICAgdm9pZCBjb21waWxlTW92SGludChOb2RlJik7
CiAgICAgdm9pZCBjb21waWxlKEJhc2ljQmxvY2smKTsKIAogICAgIHZvaWQgY2hlY2tBcmd1bWVu
dFR5cGVzKCk7CkBAIC0yMDMsNyArMzk4LDExIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm47CisjaWYgIURGR19PU1JfRVhJ
VAogICAgICAgICBtX3NwZWN1bGF0aW9uQ2hlY2tzLmFwcGVuZChTcGVjdWxhdGlvbkNoZWNrKGp1
bXBUb0ZhaWwsIHRoaXMpKTsKKyNlbHNlCisgICAgICAgIG1fb3NyRXhpdHMuYXBwZW5kKE9TUkV4
aXQoanVtcFRvRmFpbCwgdGhpcykpOworI2VuZGlmCiAgICAgfQogICAgIC8vIEFkZCBhIHNwZWN1
bGF0aW9uIGNoZWNrIHdpdGggYWRkaXRpb25hbCByZWNvdmVyeS4KICAgICB2b2lkIHNwZWN1bGF0
aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRp
b25SZWNvdmVyeSYgcmVjb3ZlcnkpCkBAIC0yMTEsNyArNDEwLDExIEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9z
cGVjdWxhdGlvblJlY292ZXJ5TGlzdC5hcHBlbmQocmVjb3ZlcnkpOworI2lmICFERkdfT1NSX0VY
SVQKICAgICAgICAgbV9zcGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhq
dW1wVG9GYWlsLCB0aGlzLCBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2Vs
c2UKKyAgICAgICAgbV9vc3JFeGl0cy5hcHBlbmQoT1NSRXhpdChqdW1wVG9GYWlsLCB0aGlzLCBt
X3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2VuZGlmCiAgICAgfQogCiAgICAg
Ly8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9u
IHdpbGwgZmFpbC4KQEAgLTIzNCwxOCArNDM3LDY1IEBAIHByaXZhdGU6CiAKICAgICB0ZW1wbGF0
ZTxib29sIHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJ
bmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKLQorICAgIAogICAgIC8vIEl0IGlzIHBv
c3NpYmxlLCBkdXJpbmcgc3BlY3VsYXRpdmUgZ2VuZXJhdGlvbiwgdG8gcmVhY2ggYSBzaXR1YXRp
b24gaW4gd2hpY2ggd2UKICAgICAvLyBjYW4gc3RhdGljYWxseSBkZXRlcm1pbmUgYSBzcGVjdWxh
dGlvbiB3aWxsIGZhaWwgKGZvciBleGFtcGxlLCB3aGVuIHR3byBub2RlcwogICAgIC8vIHdpbGwg
bWFrZSBjb25mbGljdGluZyBzcGVjdWxhdGlvbnMgYWJvdXQgdGhlIHNhbWUgb3BlcmFuZCkuIElu
IHN1Y2ggY2FzZXMgdGhpcwogICAgIC8vIGZsYWcgaXMgY2xlYXJlZCwgaW5kaWNhdGluZyBubyBm
dXJ0aGVyIGNvZGUgZ2VuZXJhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS4KICAgICBib29sIG1fY29t
cGlsZU9rYXk7CisjaWYgIURGR19PU1JfRVhJVAogICAgIC8vIFRoaXMgdmVjdG9yIHRyYWNrcyBi
YWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aCB0byB0aGUgbm9uLXNwZWN1bGF0aXZl
IG9uZS4KICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yIG1fc3BlY3VsYXRpb25DaGVja3M7Cisj
ZWxzZQorICAgIC8vIFRoaXMgdmVjdG9yIHRyYWNrcyBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3Vs
YXRpdmUgcGF0aCB0byB0aGUgb2xkIEpJVC4KKyAgICBPU1JFeGl0VmVjdG9yIG1fb3NyRXhpdHM7
CisjZW5kaWYKICAgICAvLyBTb21lIGJhaWwtb3V0cyBuZWVkIHRvIHJlY29yZCBhZGRpdGlvbmFs
IGluZm9ybWF0aW9uIHJlY29yZGluZyBzcGVjaWZpYyByZWNvdmVyeQogICAgIC8vIHRvIGJlIHBl
cmZvcm1lZCAoZm9yIGV4YW1wbGUsIG9uIGRldGVjdGVkIG92ZXJmbG93IGZyb20gYW4gYWRkLCB3
ZSBtYXkgbmVlZCB0bwogICAgIC8vIHJldmVyc2UgdGhlIGFkZGl0aW9uIGlmIGFuIG9wZXJhbmQg
aXMgYmVpbmcgb3ZlcndyaXR0ZW4pLgogICAgIFZlY3RvcjxTcGVjdWxhdGlvblJlY292ZXJ5LCAx
Nj4gbV9zcGVjdWxhdGlvblJlY292ZXJ5TGlzdDsKKyAgICAKKyAgICAvLyBUcmFja2luZyBmb3Ig
d2hpY2ggbm9kZXMgYXJlIGN1cnJlbnRseSBob2xkaW5nIHRoZSB2YWx1ZXMgb2YgYXJndW1lbnRz
IGFuZCBieXRlY29kZQorICAgIC8vIG9wZXJhbmQtaW5kZXhlZCB2YXJpYWJsZXMuCisKKyAgICBW
YWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZUZvck9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgeworICAg
ICAgICByZXR1cm4gdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNldE5vZGVJbmRleEZvck9wZXJhbmQoTm9kZUluZGV4IG5vZGVJ
bmRleCwgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZv
ck9wZXJhbmQob3BlcmFuZCkgPSBWYWx1ZVNvdXJjZShub2RlSW5kZXgpOworICAgIH0KKyAgICAK
KyAgICAvLyBDYWxsIHRoaXMgd2l0aCBjYXJlLCBzaW5jZSBpdCBib3RoIHJldHVybnMgYSByZWZl
cmVuY2UgaW50byBhbiBhcnJheQorICAgIC8vIGFuZCBwb3RlbnRpYWxseSByZXNpemVzIHRoZSBh
cnJheS4gU28gaXQgd291bGQgbm90IGJlIHJpZ2h0IHRvIGNhbGwgdGhpcworICAgIC8vIHR3aWNl
IGFuZCB0aGVuIHBlcmZvcm0gb3BlcmFuZHMgb24gYm90aCByZWZlcmVuY2VzLCBzaW5jZSB0aGUg
b25lIGZyb20KKyAgICAvLyB0aGUgZmlyc3QgY2FsbCBtYXkgbm8gbG9uZ2VyIGJlIHZhbGlkLgor
ICAgIFZhbHVlU291cmNlJiB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQoaW50IG9wZXJh
bmQpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAg
ICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2FyZ3VtZW50cy5zaXplKCkgKyBS
ZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICByZXR1cm4gbV9h
cmd1bWVudHNbYXJndW1lbnRdOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoKHVu
c2lnbmVkKW9wZXJhbmQgPj0gbV92YXJpYWJsZXMuc2l6ZSgpKQorICAgICAgICAgICAgbV92YXJp
YWJsZXMucmVzaXplKG9wZXJhbmQgKyAxKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX3Zh
cmlhYmxlc1tvcGVyYW5kXTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPFZhbHVlU291cmNlLCAw
PiBtX2FyZ3VtZW50czsKKyAgICBWZWN0b3I8VmFsdWVTb3VyY2UsIDA+IG1fdmFyaWFibGVzOwor
ICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleEZv
ck9TUjsKKyAgICAKKyAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNv
bnN0IFZhbHVlU291cmNlJik7CisKKyAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292
ZXJ5Rm9yKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVWYWx1ZVJl
Y292ZXJ5Rm9yKHZhbHVlU291cmNlRm9yT3BlcmFuZChvcGVyYW5kKSk7CisgICAgfQogfTsKIAog
CkBAIC00NjUsMTEgKzcxNSwxNyBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBtX2dwck9ySW52YWxp
ZDsKIH07CiAKLQogLy8gPT09IFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yID09PQogLy8K
IC8vIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVCB0byBjaGVj
ayB3aGljaAogLy8gbm9kZXMgcmVxdWlyZSBlbnRyeSBwb2ludHMgZnJvbSB0aGUgc3BlY3VsYXRp
dmUgcGF0aC4KKyNpZiBERkdfT1NSX0VYSVQKKy8vIFRoaXMgYmVjb21lcyBhIHN0dWIgaWYgT1NS
IGlzIGVuYWJsZWQuCitjbGFzcyBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciB7CitwdWJs
aWM6CisgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IoKSB7IH0KK307CisjZWxzZQog
Y2xhc3MgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgewogcHVibGljOgogICAgIFNwZWN1
bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3ImIHNwZWN1bGF0
aW9uQ2hlY2tzKQpAQCAtNDk1LDcgKzc1MSwxNyBAQCBwcml2YXRlOgogICAgIFNwZWN1bGF0aW9u
Q2hlY2tWZWN0b3I6Okl0ZXJhdG9yIG1faXRlcjsKICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9y
OjpJdGVyYXRvciBtX2VuZDsKIH07CisjZW5kaWYKIAoraW5saW5lIFNwZWN1bGF0aXZlSklUOjpT
cGVjdWxhdGl2ZUpJVChKSVRDb21waWxlciYgaml0KQorICAgIDogSklUQ29kZUdlbmVyYXRvcihq
aXQsIHRydWUpCisgICAgLCBtX2NvbXBpbGVPa2F5KHRydWUpCisgICAgLCBtX2FyZ3VtZW50cyhq
aXQuY29kZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVycykKKyAgICAsIG1fdmFyaWFibGVzKGppdC5j
b2RlQmxvY2soKS0+bV9udW1WYXJzKQorICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKQorICAgICwgbV9ieXRlY29kZUluZGV4Rm9yT1NSKHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKK3sKK30KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5
NDkyNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAxLDYgKzEwMSw4IEBAIHZvaWQgSklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0
aW1pemEKICAgICAKICAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyKFNpZ25lZCwg
VHJ1c3RlZEltbTMyKGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrID8gMSA6IDMwKSwgQWJz
b2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+bV9leGVjdXRlQ291bnRlcikpOwogICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrID8gY3Rp
X29wdGltaXplX2Zyb21fbG9vcCA6IGN0aV9vcHRpbWl6ZV9mcm9tX3JldCk7CisgICAgaWYgKGtp
bmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrKQorICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVu
dChJbW0zMihtX2J5dGVjb2RlT2Zmc2V0KSk7CiAgICAgc3R1YkNhbGwuY2FsbCgpOwogICAgIHNr
aXBPcHRpbWl6ZS5saW5rKHRoaXMpOwogfQpAQCAtMTE1LDggKzExNyw2IEBAIHZvaWQgSklUOjpl
bWl0VGltZW91dENoZWNrKCkKICAgICBzdHViQ2FsbC5jYWxsKHRpbWVvdXRDaGVja1JlZ2lzdGVy
KTsKICAgICBzdHViQ2FsbC5nZXRBcmd1bWVudCgwLCByZWdUMSwgcmVnVDApOyAvLyByZWxvYWQg
bGFzdCByZXN1bHQgcmVnaXN0ZXJzLgogICAgIHNraXBUaW1lb3V0LmxpbmsodGhpcyk7Ci0gICAg
Ci0gICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKExvb3BPcHRpbWl6YXRpb25DaGVjayk7CiB9CiAj
ZWxzZQogdm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQpAQCAtMTI2LDggKzEyNiw2IEBAIHZv
aWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKICAgICBza2lwVGltZW91dC5saW5rKHRoaXMpOwog
CiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwotICAgIAotICAgIGVtaXRPcHRpbWl6YXRp
b25DaGVjayhMb29wT3B0aW1pemF0aW9uQ2hlY2spOwogfQogI2VuZGlmCiAKQEAgLTIwOSw2ICsy
MDcsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgIG1f
bGFiZWxzW21fYnl0ZWNvZGVPZmZzZXRdID0gbGFiZWwoKTsKIAorI2lmIEVOQUJMRShUSUVSRURf
Q09NUElMQVRJT04pCisgICAgICAgIGlmIChtX2NhbkJlT3B0aW1pemVkKQorICAgICAgICAgICAg
bV9qaXRDb2RlTWFwRW5jb2Rlci5hcHBlbmQobV9ieXRlY29kZU9mZnNldCwgZGlmZmVyZW5jZUJl
dHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworI2VuZGlmCisKICAgICAgICAgc3dpdGNo
IChtX2ludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2Rl
KSkgewogICAgICAgICBERUZJTkVfQklOQVJZX09QKG9wX2RlbF9ieV92YWwpCiAgICAgICAgIERF
RklORV9CSU5BUllfT1Aob3BfaW4pCkBAIC0yNzgsNiArMjgxLDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfanRydWUpCiAgICAgICAg
IERFRklORV9PUChvcF9sb2FkX3ZhcmFyZ3MpCiAgICAgICAgIERFRklORV9PUChvcF9sb29wKQor
ICAgICAgICBERUZJTkVfT1Aob3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfT1Aob3BfbG9v
cF9pZl9sZXNzKQogICAgICAgICBERUZJTkVfT1Aob3BfbG9vcF9pZl9sZXNzZXEpCiAgICAgICAg
IERFRklORV9PUChvcF9sb29wX2lmX2dyZWF0ZXIpCkBAIC0zNzMsNyArMzc3LDYgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogI2VuZGlmCiB9CiAKLQogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTGlua1Bhc3MoKQogewogICAgIHVuc2lnbmVkIGptcFRhYmxlQ291bnQgPSBt
X2ptcFRhYmxlLnNpemUoKTsKQEAgLTUwMiw2ICs1MDUsOCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0
ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiB7CiAjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikK
ICAgICBtX2NhbkJlT3B0aW1pemVkID0gbV9jb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRoREZHKCk7
CisgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgICAgIG1fc3RhcnRPZkNvZGUgPSBsYWJl
bCgpOwogI2VuZGlmCiAgICAgCiAgICAgLy8gSnVzdCBhZGQgYSBsaXR0bGUgYml0IG9mIHJhbmRv
bW5lc3MgdG8gdGhlIGNvZGVnZW4KQEAgLTY0Miw2ICs2NDcsMTEgQEAgSklUQ29kZSBKSVQ6OnBy
aXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
biA9IG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhtX21ldGhvZENhbGxDb21waWxhdGlv
bkluZm9baV0ucHJvcGVydHlBY2Nlc3NJbmRleCkuY2FsbFJldHVybkxvY2F0aW9uOwogICAgIH0K
IAorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgaWYgKG1fY2FuQmVPcHRpbWl6
ZWQpCisgICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKG1faml0Q29kZU1hcEVuY29k
ZXIuZmluaXNoKCkpOworI2VuZGlmCisKICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkg
PT0gRnVuY3Rpb25Db2RlICYmIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrKQogICAgICAgICAqZnVu
Y3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGFyaXR5Q2hlY2sp
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiA5NDkyNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDkgQEAKIAogI2lmIEVOQUJMRShKSVQpCiAKKy8vIFZlcmJvc2UgbG9nZ2luZyBmb3IgT1NS
LXJlbGF0ZWQgY29kZS4KKyNkZWZpbmUgRU5BQkxFX0pJVF9WRVJCT1NFX09TUiAxCisKIC8vIFdl
J3ZlIHJ1biBpbnRvIHNvbWUgcHJvYmxlbXMgd2hlcmUgY2hhbmdpbmcgdGhlIHNpemUgb2YgdGhl
IGNsYXNzIEpJVCBsZWFkcyB0bwogLy8gcGVyZm9ybWFuY2UgZmx1Y3R1YXRpb25zLiAgVHJ5IGZv
cmNpbmcgYWxpZ25tZW50IGluIGFuIGF0dGVtcHQgdG8gc3RhYmFsaXplIHRoaXMuCiAjaWYgQ09N
UElMRVIoR0NDKQpAQCAtNDAsNiArNDMsNyBAQAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChh
Y3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwg
IkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBz
dGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCiAj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2lu
Y2x1ZGUgIk9wY29kZS5oIgpAQCAtNzkyLDYgKzc5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRfb3BfanRydWUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2xvYWRfdmFyYXJncyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9v
cChJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfbG9vcF9oaW50KEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb29wX2lmX2xlc3MoSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2xvb3BfaWZfbGVzc2VxKEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9sb29wX2lmX2dyZWF0ZXIoSW5zdHJ1Y3Rpb24qKTsKQEAgLTEwNTQs
NiArMTA1OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICNpZiBFTkFCTEUoVElFUkVE
X0NPTVBJTEFUSU9OKQogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7CisgICAgICAgIExh
YmVsIG1fc3RhcnRPZkNvZGU7CisgICAgICAgIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyIG1f
aml0Q29kZU1hcEVuY29kZXI7CiAjZW5kaWYKICAgICB9IEpJVF9DTEFTU19BTElHTk1FTlQ7CiAK
QEAgLTEwNjMsNiArMTA3MCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW1pdF9vcF9q
bXAoY3VycmVudEluc3RydWN0aW9uKTsKICAgICB9CiAKKyAgICBpbmxpbmUgdm9pZCBKSVQ6OmVt
aXRfb3BfbG9vcF9oaW50KEluc3RydWN0aW9uKikKKyAgICB7CisgICAgICAgIGVtaXRPcHRpbWl6
YXRpb25DaGVjayhMb29wT3B0aW1pemF0aW9uQ2hlY2spOworICAgIH0KKwogICAgIGlubGluZSB2
b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2lmX3RydWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICB7CiAgICAgICAgIGVtaXRUaW1lb3V0Q2hlY2soKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5NDkyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICsz
Nyw3IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiRGVi
dWdnZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVy
U2V0dGVyLmgiCkBAIC0xODIzLDEwICsxODI0LDQyIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wdGltaXplX2Zyb20KICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUu
Y2FsbEZyYW1lOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKTsKICAgICBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiA9IGNhbGxGcmFtZS0+c2NvcGVD
aGFpbigpOwotCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJnc1sw
XS5pbnQzMigpOworICAgIAogICAgIEpTT2JqZWN0KiBlcnJvciA9IGNvZGVCbG9jay0+Y29tcGls
ZU9wdGltaXplZChjYWxsRnJhbWUsIHNjb3BlQ2hhaW4pOwogICAgIGlmIChlcnJvcikKICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBvcHRpbWl6ZWQgY29tcGlsYXRpb24gZnJvbSBs
b29wIGZhaWxlZC5cbiIpOworICAgIAorICAgIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkg
PT0gY29kZUJsb2NrKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJp
bnRmKCJPcHRpbWl6aW5nICVwIGZyb20gbG9vcCBmYWlsZWQuXG4iLCBjb2RlQmxvY2spOworI2Vu
ZGlmCisKKyAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6
OkJhc2VsaW5lSklUKTsKKyAgICAgICAgY29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29v
bigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIENvZGVCbG9jayogb3B0aW1p
emVkQ29kZUJsb2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOworICAgIEFTU0VSVChvcHRp
bWl6ZWRDb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIAor
ICAgIGlmICh2b2lkKiBhZGRyZXNzID0gREZHOjpwcmVwYXJlT1NSRW50cnkoY2FsbEZyYW1lLCBv
cHRpbWl6ZWRDb2RlQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJC
T1NFX09TUikKKyAgICAgICAgcHJpbnRmKCJPcHRpbWl6aW5nICVwIGZyb20gbG9vcCBzdWNjZWVk
ZWQsIHBlcmZvcm1pbmcgT1NSLlxuIiwgY29kZUJsb2NrKTsKKyNlbmRpZgorCisgICAgICAgIGNv
ZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CisgICAgICAgIFNUVUJfU0VUX1JFVFVSTl9BRERSRVNT
KGFkZHJlc3MpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCisgICAgcHJpbnRmKCJPcHRpbWl6aW5nICVwIGZyb20gbG9vcCBzdWNjZWVk
ZWQsIE9TUiBmYWlsZWQuXG4iLCBjb2RlQmxvY2spOworI2VuZGlmCisKKyAgICAvLyBPU1IgZmFp
bGVkIHRoaXMgdGltZSwgYnV0IGl0IG1pZ2h0IHN1Y2NlZWQgbmV4dCB0aW1lISAgTGV0IHRoZSBj
b2RlIHJ1biBhIGJpdAorICAgIC8vIGxvbmdlciBhbmQgdGhlbiB0cnkgYWdhaW4uCisgICAgY29k
ZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIG9wdGltaXplX2Zyb21fcmV0KQpAQCAtMTg0MCw2ICsxODczLDI0IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICBKU09iamVjdCogZXJyb3IgPSBj
b2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKICAgICBp
ZiAoZXJyb3IpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVkIGNv
bXBpbGF0aW9uIGZyb20gcmV0IGZhaWxlZC5cbiIpOworICAgIAorICAgIGlmIChjb2RlQmxvY2st
PnJlcGxhY2VtZW50KCkgPT0gY29kZUJsb2NrKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09T
UikKKyAgICAgICAgcHJpbnRmKCJPcHRpbWl6aW5nICVwIGZyb20gcmV0dXJuIGZhaWxlZC5cbiIs
IGNvZGVCbG9jayk7CisjZW5kaWYKKworICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5nZXRKSVRU
eXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAgICBjb2RlQmxvY2stPmRvbnRP
cHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
QVNTRVJUKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6
OkRGR0pJVCk7CisKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiT3B0
aW1pemluZyAlcCBmcm9tIHJldHVybiBzdWNjZWVkZWQuXG4iLCBjb2RlQmxvY2spOworI2VuZGlm
CisgICAgCisgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsKIH0KIAogREVGSU5FX1NUVUJf
RlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2luc3RhbmNlb2YpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTQ5MjcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTcxLDcgKzE3MSw2IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGls
ZUludGVybmEKICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhbHJlYWR5IGFuIGFsdGVybmF0
aXZlIHBpZWNlIG9mIGNvZGUgY29tcGlsZWQgd2l0aCBhIGRpZmZlcmVudAogICAgICAgICAgICAg
ICAgIC8vIEpJVCwgc28gd2UgY2FuIHNpbGVudGx5IGZhaWwuCiAgICAgICAgICAgICAgICAgbV9l
dmFsQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxD
b2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAgICAgICAgICBtX2V2YWxD
b2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklU
Ojpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2V2YWxDb2RlQmxvY2suZ2V0
KCkpOwpAQCAtMjkxLDcgKzI5MCw2IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29t
cGlsZUludGUKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtX3Byb2dyYW1Db2Rl
QmxvY2stPmFsdGVybmF0aXZlKCkpIHsKICAgICAgICAgICAgICAgICBtX3Byb2dyYW1Db2RlQmxv
Y2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2dyYW1Db2RlQmxvY2s+KG1fcHJvZ3JhbUNvZGVC
bG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwotICAgICAgICAgICAgICAgIG1fcHJvZ3JhbUNv
ZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBKSVQ6
OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIG1fcHJvZ3JhbUNvZGVCbG9jay5n
ZXQoKSk7CkBAIC00MTcsNyArNDE1LDYgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y29tcGlsZUZvcgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKSkgewogICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9y
Q2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwotICAgICAgICAgICAgICAgIG1fY29kZUJs
b2NrRm9yQ2FsbC0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKICAgICAgICAgICAgICAgICBt
X3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xUYWJsZSgpOwog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQpAQCAtNDk0LDcgKzQ5MSw2
IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRp
dmUoKSkgewogICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gc3RhdGlj
X3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVCbG9jaz4obV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qt
PnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdC0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKICAgICAgICAgICAgICAgICBtX3N5
bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDk0
OTI3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxE
YXRhKEdsb2JhbERhdGFUeXAKICAgICAsIHBhcnNlcihuZXcgUGFyc2VyKQogICAgICwgaW50ZXJw
cmV0ZXIoMCkKICAgICAsIGhlYXAodGhpcywgaGVhcFNpemUpCisjaWYgRU5BQkxFKFRJRVJFRF9D
T01QSUxBVElPTikKKyAgICAsIG51bWJlck9mU2xvdHNJbkxhc3RPU1JTY3JhdGNoQnVmZmVyKDAp
CisjZW5kaWYKICAgICAsIGR5bmFtaWNHbG9iYWxPYmplY3QoMCkKICAgICAsIGNhY2hlZFVUQ09m
ZnNldChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKQogICAgICwgbWF4
UmVlbnRyeURlcHRoKHRocmVhZFN0YWNrVHlwZSA9PSBUaHJlYWRTdGFja1R5cGVTbWFsbCA/IE1h
eFNtYWxsVGhyZWFkUmVlbnRyeURlcHRoIDogTWF4TGFyZ2VUaHJlYWRSZWVudHJ5RGVwdGgpCkBA
IC0zNTYsNiArMzU5LDExIEBAIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAjaWYgRU5B
QkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIGRlbGV0ZSBtX3J0VHJhY2VMaXN0OwogI2VuZGlmCisK
KyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBvc3JTY3JhdGNoQnVmZmVycy5zaXplKCk7ICsraSkKKyAgICAgICAgZmFzdEZyZWUob3Ny
U2NyYXRjaEJ1ZmZlcnNbaV0pOworI2VuZGlmCiB9CiAKIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRh
PiBKU0dsb2JhbERhdGE6OmNyZWF0ZUNvbnRleHRHcm91cChUaHJlYWRTdGFja1R5cGUgdHlwZSwg
SGVhcFNpemUgaGVhcFNpemUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gOTQ5MjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDYgKzIzNCwy
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIGludDY0X3QgZGVi
dWdEYXRhQnVmZmVyWzY0XTsKICNlbmRpZgorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04p
CisgICAgICAgIFZlY3RvcjxpbnQ2NF90Kj4gb3NyU2NyYXRjaEJ1ZmZlcnM7CisgICAgICAgIHNp
emVfdCBudW1iZXJPZlNsb3RzSW5MYXN0T1NSU2NyYXRjaEJ1ZmZlcjsKKyAgICAgICAgCisgICAg
ICAgIGludDY0X3QqIG9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKHVuc2lnbmVkIG51bWJlck9mU2xv
dHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbnVtYmVyT2ZTbG90cykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG51bWJlck9m
U2xvdHMgPiBudW1iZXJPZlNsb3RzSW5MYXN0T1NSU2NyYXRjaEJ1ZmZlcikgeworICAgICAgICAg
ICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBhIE5eMiBtZW1vcnkgdXNhZ2UgcGF0aG9sb2d5IGJ5
IGVuc3VyaW5nCisgICAgICAgICAgICAgICAgLy8gdGhhdCBhdCB3b3JzdCwgd2UgZ2V0IGEgZ2Vv
bWV0cmljIHNlcmllcywgbWVhbmluZyB0aGF0IHRoZQorICAgICAgICAgICAgICAgIC8vIHRvdGFs
IG1lbW9yeSB1c2FnZSBpcyBzb21ld2hlcmUgYXJvdW5kCisgICAgICAgICAgICAgICAgLy8gbWF4
KHNjcmF0Y2ggYnVmZmVyIHNpemUpICogNC4KKyAgICAgICAgICAgICAgICBudW1iZXJPZlNsb3Rz
SW5MYXN0T1NSU2NyYXRjaEJ1ZmZlciA9IG51bWJlck9mU2xvdHMgKiAyOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIG9zclNjcmF0Y2hCdWZmZXJzLmFwcGVuZChzdGF0aWNfY2Fz
dDxpbnQ2NF90Kj4oZmFzdE1hbGxvYyhzaXplb2YoaW50NjRfdCkgKiBudW1iZXJPZlNsb3RzSW5M
YXN0T1NSU2NyYXRjaEJ1ZmZlcikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgcmV0dXJuIG9zclNjcmF0Y2hCdWZmZXJzLmxhc3QoKTsKKyAgICAgICAgfQorI2Vu
ZGlmCiAjZW5kaWYKIAogICAgICAgICBIYXNoTWFwPE9wYXF1ZUpTQ2xhc3MqLCBPcGFxdWVKU0Ns
YXNzQ29udGV4dERhdGEqPiBvcGFxdWVKU0NsYXNzRGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCShyZXZpc2lvbiA5NDkyNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTks
NyArMTE5LDcgQEAgSlNPYmplY3QqIEpTVmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUoRQogI2lm
bmRlZiBOREVCVUcKIGNoYXIqIEpTVmFsdWU6OmRlc2NyaXB0aW9uKCkKIHsKLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNpemUgPSAzMjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSA2
NDsKICAgICBzdGF0aWMgY2hhciBkZXNjcmlwdGlvbltzaXplXTsKIAogICAgIGlmICghKnRoaXMp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA5NDkyNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpA
QCAtOTYxLDcgKzk2MSw3IEBACiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9USUVSRURf
Q09NUElMQVRJT04pCi0jZGVmaW5lIEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04gMAorI2RlZmlu
ZSBFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OIDEKICNlbmRpZgogCiAvKiBDdXJyZW50bHkgb25s
eSBpbXBsZW1lbnRlZCBmb3IgSlNWQUxVRTY0LCBvbmx5IHRlc3RlZCBvbiBQTEFURk9STShNQUMp
ICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107125</attachid>
            <date>2011-09-12 19:01:11 -0700</date>
            <delta_ts>2011-09-12 19:12:51 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>osrentry_patch_2.diff</filename>
            <type>text/plain</type>
            <size>82118</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE1IEBA
CisyMDExLTA5LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBiYXNlbGluZS0+c3BlY3VsYXRpdmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzkyMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIG9uLXN0YWNrLXJlcGxhY2UgKE9TUikgZnJvbSBjb2RlIHRo
YXQgaXMKKyAgICAgICAgcnVubmluZyBob3QgaW4gdGhlIG9sZCBKSVQgdG8gY29kZSBjb21waWxl
ZCBieSB0aGUgbmV3IEpJVC4gIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0IGxvbmctcnVubmlu
ZyBsb29wcyBiZW5lZml0IGZyb20gREZHIG9wdGltaXphdGlvbi4KKyAgICAgICAgSXQgYWxzbyBl
bnN1cmVzIHRoYXQgaWYgY29kZSBleHBlcmllbmNlcyBhIHNwZWN1bGF0aW9uIGZhaWx1cmUKKyAg
ICAgICAgaW4gREZHIGNvZGUsIGl0IGhhcyBhbiBvcHBvcnR1bml0eSB0byByZWVudGVyIHRoZSBE
Rkcgb25jZSBldmVyeQorICAgICAgICAxLDAwMCBsb29wIGl0ZXJhdGlvbnMgb3Igc28uCisgICAg
ICAgIAorICAgICAgICBUaGlzIHJlc3VsdHMgaW4gYSAyLjg4eCBzcGVlZC11cCBvbiBLcmFrZW4v
aW1hZ2luZy1kZXNhdHVyYXRlLAorICAgICAgICBhbmQgaXMgYSBwdXJlIHdpbiBvbiB0aGUgbWFp
biB0aHJlZSBiZW5jaG1hcmsgc3VpdGVzIChTdW5TcGlkZXIsCisgICAgICAgIFY4LCBLcmFrZW4p
LCB3aGVuIHRpZXJlZCBjb21waWxhdGlvbiBpcyBlbmFibGVkLgorCisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxv
Y2s6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpjb21w
aWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmNvbXBpbGVP
cHRpbWl6ZWQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5
dGVjb2RlL09wY29kZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OmlzQ2VsbFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjppc0Fy
cmF5UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OmlzSW50MzJQcmVkaWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6aXNEb3VibGVQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6aXNOdW1iZXJQcmVk
aWN0aW9uKToKKyAgICAgICAgKEpTQzo6aXNCb29sZWFuUHJlZGljdGlvbik6CisgICAgICAgIChK
U0M6OmlzU3Ryb25nUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OnByZWRpY3Rpb25Ub1N0cmlu
Zyk6CisgICAgICAgIChKU0M6Om1lcmdlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjptZXJn
ZVByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjptYWtlUHJlZGljdGlvbik6CisgICAgICAgICog
Ynl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6Om9wZXJh
bmRJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblNsb3Q6OlByZWRpY3Rpb25T
bG90KToKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblRyYWNrZXI6OlByZWRpY3Rpb25UcmFja2Vy
KToKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblRyYWNrZXI6OmluaXRpYWxpemVTaW1pbGFyVG8p
OgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6Y29weUxvY2Fsc0Zyb20pOgorICAg
ICAgICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6bnVtYmVyT2ZBcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6bnVtYmVyT2ZWYXJpYWJsZXMpOgorICAgICAgICAo
SlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6YXJndW1lbnRJbmRleEZvck9wZXJhbmQpOgorICAgICAg
ICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6cHJlZGljdEFyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6UHJlZGljdGlvblRyYWNrZXI6OnByZWRpY3QpOgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9u
VHJhY2tlcjo6cHJlZGljdEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OlByZWRpY3Rpb25UcmFj
a2VyOjpnZXRBcmd1bWVudFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9uVHJh
Y2tlcjo6Z2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OlByZWRpY3Rpb25UcmFja2VyOjpn
ZXRHbG9iYWxWYXJQcmVkaWN0aW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvb3BI
aW50KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6RG9XaGls
ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OldoaWxlTm9kZTo6ZW1pdEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6Rm9yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sp
OgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpj
YW5Db21waWxlT3Bjb2RlKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6cHJlZGljdCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldFByZWRp
Y3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OnByZWRpY3Rpb25Jc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6
REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uVHJhY2tlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjptZXJnZVVzZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQvQ29tcGFjdEpJVENvZGVNYXAuaDoKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6Om51bWJlck9mRW50cmllcyk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAgICAgIChKU0M6OkNvbXBhY3RKSVRDb2Rl
TWFwOjpEZWNvZGVyOjpudW1iZXJPZkVudHJpZXNSZW1haW5pbmcpOgorICAgICAgICAoSlNDOjpD
b21wYWN0SklUQ29kZU1hcDo6RGVjb2Rlcjo6cmVhZCk6CisgICAgICAgICogaml0L0pJVC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0VGltZW91dENoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVy
bmFsKToKKwogMjAxMS0wOS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIEphdmFTY3JpcHRDb3JlIGRvZXMgbm90IGhhdmUgc3BlY3VsYXRpdmUtPmJhc2VsaW5l
IE9TUgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0OTk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEwIEBACiAJCTBGRDNDODI4MTQx
MTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIu
aCAqLzsgfTsKIAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUx
RTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKIAkJMEZEODJF
MzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQg
LyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkQ4MkU1NDE0MURBRUVFMDAxNzlDOTQgLyogUHJlZGljdGVkVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJF
NEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkU1NTE0MURBRUVFMDAxNzlDOTQg
LyogUHJlZGljdGlvblRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDgyRTUwMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
RDgyRTU2MTQxREFGMDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQg
LyogREZHT1NSRW50cnkuY3BwICovOyB9OworCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyog
REZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjc3MTJBNkY3ODMw
MDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2
OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIz
IC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VDMjU1MDA1REJD
OEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVX
cmFwcGVyLmNwcCAqLzsgfTsKQEAgLTc5OSw2ICs4MDMsMTAgQEAKIAkJMEZEODJFMUUxNDE3MkMy
RjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuY3BwOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFGMTQxNzJDMkYw
MDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQ2FwYWJpbGl0aWVzLmg7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBD
b21wYWN0SklUQ29kZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21w
YWN0SklUQ29kZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkU0RjE0
MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcmVkaWN0ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDgyRTUwMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVkaWN0aW9uVHJhY2tlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRW50cnku
Y3BwOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZEODJFNTMxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkVudHJ5Lmg7IHBhdGggPSBkZmcvREZHT1NS
RW50cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjkyMTJB
NkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAyLDYgKzIyMTAsOCBAQAogCQk4NkVDOURCMzEz
MjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3Bw
ICovLAorCQkJCTBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovLAog
CQkJCTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovLAog
CQkJCTBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLywKIAkJ
CQkwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovLApAQCAtMjI5
OCw2ICsyMzA4LDggQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkU0RjE0
MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovLAorCQkJCTBGRDgyRTUwMTQxREFF
QTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICovLAogCQkJCTBGOTYzQjM2MTNGQzZG
REUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQk5NjlBMDc5MDBFRDFEM0FFMDBG
MUY2ODEgLyogQ29kZUJsb2NrLmNwcCAqLywKIAkJCQk5NjlBMDc5MTBFRDFEM0FFMDBGMUY2ODEg
LyogQ29kZUJsb2NrLmggKi8sCkBAIC0yMzk3LDYgKzI0MDksOSBAQAogCQkJCUJDMjU3REU4MEUx
RjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM0
MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkQ4MkU1NTE0MURBRUVFMDAxNzlDOTQgLyogUHJlZGljdGlvblRyYWNrZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5NCAvKiBQcmVkaWN0
ZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyog
Q29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2
RTBFMTZGNUNEMDBCMzQ0NjAgLyogVENTcGluTG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDY4
LDYgKzMwODMsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEZEODJFNTYxNDFEQUYw
ODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTYzQjJD
MTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZEM0M4MjUxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3Niw2ICsxMDc2LDEw
IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgICAg
IHByaW50ZigiWyU0ZF0gbG9vcF9pZl9ncmVhdGVyZXFcdCAlcywgJXMsICVkKC0+JWQpXG4iLCBs
b2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVj
LCByMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbG9vcF9oaW50OiB7CisgICAgICAgICAg
ICBwcmludGYoIlslNGRdIGxvb3BfaGludFxuIiwgbG9jYXRpb24pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7CiAgICAgICAgICAg
ICBpbnQgdGFibGVJbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGRl
ZmF1bHRUYXJnZXQgPSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTE0MDUsNyArMTQwOSw2IEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wU3RhdGlzdGljcygpCiBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2Jh
bE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQ
cm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBib29s
IGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAgICA6
IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFi
bGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKS5oZWFwKQotICAgICwgbV9leGVjdXRlQ291bnRlcigtMTAwMCkgLy8gdHJpZ2dlciBvcHRp
bWl6YXRpb24gd2hlbiBzaWduIGJpdCBjbGVhcnMKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJz
KDApCiAgICAgLCBtX251bVZhcnMoMCkKICAgICAsIG1fbnVtUGFyYW1ldGVycygwKQpAQCAtMTQy
Nyw2ICsxNDMwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwog
ICAgICwgbV9hbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSkKIHsKICAgICBBU1NFUlQobV9zb3VyY2Up
OworICAgIAorICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIAogI2lmIERVTVBfQ09ERV9CTE9D
S19TVEFUSVNUSUNTCiAgICAgbGl2ZUNvZGVCbG9ja1NldC5hZGQodGhpcyk7CkBAIC0xOTAxLDMz
ICsxOTA2LDI0IEBAIENvZGVCbG9jayogRnVuY3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VtZW4KIAog
SlNPYmplY3QqIFByb2dyYW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBl
eGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAgaWYgKHJlcGxhY2Vt
ZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkp
KSB7Ci0gICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoaXQgdGhp
cyBhZ2FpbiBhbnl0aW1lIHNvb24uCi0gICAgICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7
CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGll
ckpJVChnZXRKSVRUeXBlKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAgICAgSlNPYmpl
Y3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwogICAgIHJldHVy
biBlcnJvcjsKIH0KIAogSlNPYmplY3QqIEV2YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAg
aWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChn
ZXRKSVRUeXBlKCkpKSB7Ci0gICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBk
b24ndCBoaXQgdGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCi0gICAgICAgIGRvbnRPcHRpbWl6ZUFu
eXRpbWVTb29uKCk7CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRD
b2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9
CiAgICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwog
ICAgIHJldHVybiBlcnJvcjsKIH0KIAogSlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21w
aWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5O
b2RlKQogewotICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6
bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkgewotICAgICAgICAvLyBObyBPU1IgeWV0LCBzbyBt
YWtlIHN1cmUgd2UgZG9uJ3QgaGl0IHRoaXMgYWdhaW4gYW55dGltZSBzb29uLgotICAgICAgICBk
b250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRU
eXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQogICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZEZvcihleGVj
LCBzY29wZUNoYWluTm9kZSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENv
ZGVGb3JDYWxsKTsKICAgICByZXR1cm4gZXJyb3I7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSnVtcFRh
YmxlLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKKyNpbmNsdWRlICJQcmVkaWN0aW9uVHJhY2tlci5o
IgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKICNpbmNs
dWRlICJXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCkBAIC0yMjYsNiArMjI3LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgeyBy
ZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQogICAgICAgICBQYXNzT3duUHRyPENvZGVCbG9j
az4gcmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5yZWxlYXNlKCk7
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0UHJlZGljdGlvbnMoUGFzc093blB0cjxQcmVk
aWN0aW9uVHJhY2tlcj4gcHJlZGljdGlvbnMpIHsgbV9wcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25z
OyB9CisgICAgICAgIFByZWRpY3Rpb25UcmFja2VyKiBwcmVkaWN0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlZGljdGlvbnMuZ2V0KCk7IH0KIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90Vmlz
aXRvciYpOwpAQCAtNTg5LDE2ICs1OTMsODggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIGNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAgICAgICAgIAorICAgICAg
ICAvLyBGdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHdoZW4gdGllcmVkIGNvbXBpbGF0aW9uIGtp
Y2tzIGluLiAgVGhpcworICAgICAgICAvLyBjb250cm9scyBib3RoIHdoZW4gdGhlIG9wdGltaXpp
bmcgY29tcGlsZXIgaXMgaW52b2tlZCBhbmQgd2hlbiBPU1IKKyAgICAgICAgLy8gZW50cnkgaGFw
cGVucy4gVHdvIHRyaWdnZXJzIGV4aXN0OiB0aGUgbG9vcCB0cmlnZ2VyIGFuZCB0aGUgcmV0dXJu
CisgICAgICAgIC8vIHRyaWdnZXIuIEluIGVpdGhlciBjYXNlLCB3aGVuIGFuIGFkZGl0aW9uIHRv
IG1fZXhlY3V0ZUNvdW50ZXIKKyAgICAgICAgLy8gY2F1c2VzIGl0IHRvIGJlY29tZSBub24tbmVn
YXRpdmUsIHRoZSBvcHRpbWl6aW5nIGNvbXBpbGVyIGlzCisgICAgICAgIC8vIGludm9rZWQuIFRo
aXMgaW5jbHVkZXMgYSBmYXN0IGNoZWNrIHRvIHNlZSBpZiB0aGlzIENvZGVCbG9jayBoYXMKKyAg
ICAgICAgLy8gYWxyZWFkeSBiZWVuIG9wdGltaXplZCAoaS5lLiByZXBsYWNlbWVudCgpIHJldHVy
bnMgYSBDb2RlQmxvY2sKKyAgICAgICAgLy8gdGhhdCB3YXMgb3B0aW1pemVkIHdpdGggYSBoaWdo
ZXIgdGllciBKSVQgdGhhbiB0aGlzIG9uZSkuIEluIHRoZQorICAgICAgICAvLyBjYXNlIG9mIHRo
ZSBsb29wIHRyaWdnZXIsIGlmIHRoZSBvcHRpbWl6ZWQgY29tcGlsYXRpb24gc3VjY2VlZHMKKyAg
ICAgICAgLy8gKG9yIGhhcyBhbHJlYWR5IHN1Y2NlZWRlZCBpbiB0aGUgcGFzdCkgdGhlbiBPU1Ig
aXMgYXR0ZW1wdGVkIHRvCisgICAgICAgIC8vIHJlZGlyZWN0IHByb2dyYW0gZmxvdyBpbnRvIHRo
ZSBvcHRpbWl6ZWQgY29kZS4KKyAgICAgICAgCisgICAgICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBh
cmUgY2FsbGVkIGZyb20gd2l0aGluIHRoZSBvcHRpbWl6YXRpb24gdHJpZ2dlcnMsCisgICAgICAg
IC8vIGFuZCBhcmUgdXNlZCBhcyBhIHNpbmdsZSBwb2ludCBhdCB3aGljaCB3ZSBkZWZpbmUgdGhl
IGhldXJpc3RpY3MKKyAgICAgICAgLy8gZm9yIGhvdyBtdWNoIHdhcm0tdXAgaXMgbWFuZGF0ZWQg
YmVmb3JlIHRoZSBuZXh0IG9wdGltaXphdGlvbgorICAgICAgICAvLyB0cmlnZ2VyIGZpbGVzLiBB
bGwgQ29kZUJsb2NrcyBzdGFydCBvdXQgd2l0aCBvcHRpbWl6ZUFmdGVyV2FybVVwKCksCisgICAg
ICAgIC8vIGFzIHRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIENvZGVCbG9jayBjb25zdHJ1Y3Rvci4K
KyAgICAgICAgCisgICAgICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgdG8gc3Vw
cG9ydCBjYWxsaW5nCisgICAgICAgIC8vIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSBmcm9tIEpJVC1n
ZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyV2FybVVwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIC0xMDAwOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpbnQzMl90KiBhZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmbV9leGVjdXRlQ291bnRlcjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIHRoZSBuZXh0IG9w
dGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUuIFRoaXMgaXMKKyAgICAgICAgLy8gcmFyZWx5IHdp
c2UsIHNpbmNlIG9wdGltaXphdGlvbiB0cmlnZ2VycyBhcmUgdHlwaWNhbGx5IG1vcmUKKyAgICAg
ICAgLy8gZXhwZW5zaXZlIHRoYW4gZXhlY3V0aW5nIGJhc2VsaW5lIGNvZGUuCiAgICAgICAgIHZv
aWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhl
Y3V0ZUNvdW50ZXIgPSAwOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICAvLyBDYWxsIHRo
aXMgdG8gcHJldmVudCBvcHRpbWl6YXRpb24gZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhh
dAorICAgICAgICAvLyBvcHRpbWl6YXRpb24gd2lsbCBzdGlsbCBoYXBwZW4gYWZ0ZXIgcm91Z2hs
eSAyXjI5IGludm9jYXRpb25zLAorICAgICAgICAvLyBzbyB0aGlzIGlzIHJlYWxseSBtZWFudCB0
byBkZWxheSB0aGF0IGFzIG11Y2ggYXMgcG9zc2libGUuIFRoaXMKKyAgICAgICAgLy8gaXMgY2Fs
bGVkIGlmIG9wdGltaXphdGlvbiBmYWlsZWQsIGFuZCB3ZSBleHBlY3QgaXQgdG8gZmFpbCBpbgor
ICAgICAgICAvLyB0aGUgZnV0dXJlIGFzIHdlbGwuCiAgICAgICAgIHZvaWQgZG9udE9wdGltaXpl
QW55dGltZVNvb24oKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCk7CiAgICAgICAgIH0KICAgICAgICAg
CisgICAgICAgIC8vIENhbGwgdGhpcyB0byByZWluaXRpYWxpemUgdGhlIGNvdW50ZXIgdG8gaXRz
IHN0YXJ0aW5nIHN0YXRlLAorICAgICAgICAvLyBmb3JjaW5nIGEgd2FybS11cCB0byBoYXBwZW4g
YmVmb3JlIHRoZSBuZXh0IG9wdGltaXphdGlvbiB0cmlnZ2VyCisgICAgICAgIC8vIGZpcmVzLiBU
aGlzIGlzIGNhbGxlZCBpbiB0aGUgQ29kZUJsb2NrIGNvbnN0cnVjdG9yLiBJdCBhbHNvCisgICAg
ICAgIC8vIG1ha2VzIHNlbnNlIHRvIGNhbGwgdGhpcyBpZiBhbiBPU1IgZXhpdCBvY2N1cnJlZC4g
Tm90ZSB0aGF0CisgICAgICAgIC8vIE9TUiBleGl0IGNvZGUgaXMgY29kZSBnZW5lcmF0ZWQsIHNv
IHRoZSB2YWx1ZSBvZiB0aGUgZXhlY3V0ZQorICAgICAgICAvLyBjb3VudGVyIHRoYXQgdGhpcyBj
b3JyZXNwb25kcyB0byBpcyBhbHNvIGF2YWlsYWJsZSBkaXJlY3RseS4KKyAgICAgICAgdm9pZCBv
cHRpbWl6ZUFmdGVyV2FybVVwKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9leGVjdXRlQ291
bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGNhdXNlIGFuIG9wdGltaXphdGlvbiB0
cmlnZ2VyIHRvIGZpcmUgc29vbiwgYnV0CisgICAgICAgIC8vIG5vdCBuZWNlc3NhcmlseSB0aGUg
bmV4dCBvbmUuIFRoaXMgbWFrZXMgc2Vuc2UgaWYgb3B0aW1pemF0aW9uCisgICAgICAgIC8vIHN1
Y2NlZWRzLiBTdWNjZXNzZnVseSBvcHRpbWl6YXRpb24gbWVhbnMgdGhhdCBhbGwgY2FsbHMgYXJl
CisgICAgICAgIC8vIHJlbGlua2VkIHRvIHRoZSBvcHRpbWl6ZWQgY29kZSwgc28gdGhpcyBvbmx5
IGFmZmVjdHMgY2FsbAorICAgICAgICAvLyBmcmFtZXMgdGhhdCBhcmUgc3RpbGwgZXhlY3V0aW5n
IHRoaXMgQ29kZUJsb2NrLiBUaGUgdmFsdWUgaGVyZQorICAgICAgICAvLyBpcyB0dW5lZCB0byBz
dHJpa2UgYSBiYWxhbmNlIGJldHdlZW4gdGhlIGNvc3Qgb2YgT1NSIGVudHJ5CisgICAgICAgIC8v
ICh3aGljaCBpcyB0b28gaGlnaCB0byB3YXJyYW50IG1ha2luZyBldmVyeSBsb29wIGJhY2sgZWRn
ZSB0bworICAgICAgICAvLyB0cmlnZ2VyIE9TUiBpbW1lZGlhdGVseSkgYW5kIHRoZSBjb3N0IG9m
IGV4ZWN1dGluZyBiYXNlbGluZQorICAgICAgICAvLyBjb2RlICh3aGljaCBpcyBoaWdoIGVub3Vn
aCB0aGF0IHdlIGRvbid0IG5lY2Vzc2FyaWx5IHdhbnQgdG8KKyAgICAgICAgLy8gaGF2ZSBhIGZ1
bGwgd2FybS11cCkuIFRoZSBpbnR1aXRpb24gZm9yIGNhbGxpbmcgdGhpcyBpbnN0ZWFkIG9mCisg
ICAgICAgIC8vIG9wdGltaXplTmV4dEludm9jYXRpb24oKSBpcyBmb3IgdGhlIGNhc2Ugb2YgcmVj
dXJzaXZlIGZ1bmN0aW9ucworICAgICAgICAvLyB3aXRoIGxvb3BzLiBDb25zaWRlciB0aGF0IHRo
ZXJlIG1heSBiZSBOIGNhbGwgZnJhbWVzIG9mIHNvbWUKKyAgICAgICAgLy8gcmVjdXJzaXZlIGZ1
bmN0aW9uLCBmb3IgYSByZWFzb25hYmx5IGxhcmdlIHZhbHVlIG9mIE4uIFRoZSB0b3AKKyAgICAg
ICAgLy8gb25lIHRyaWdnZXJzIG9wdGltaXphdGlvbiwgYW5kIHRoZW4gcmV0dXJucywgYW5kIHRo
ZW4gYWxsIG9mCisgICAgICAgIC8vIHRoZSBvdGhlcnMgcmV0dXJuLiBXZSBkb24ndCB3YW50IG9w
dGltaXphdGlvbiB0byBiZSB0cmlnZ2VyZWQgb24KKyAgICAgICAgLy8gZWFjaCByZXR1cm4sIGFz
IHRoYXQgd291bGQgYmUgc3VwZXJmbHVvdXMuIEl0IG9ubHkgbWFrZXMgc2Vuc2UKKyAgICAgICAg
Ly8gdG8gdHJpZ2dlciBvcHRpbWl6YXRpb24gaWYgb25lIG9mIHRob3NlIGZ1bmN0aW9ucyBiZWNv
bWVzIGhvdAorICAgICAgICAvLyBpbiB0aGUgYmFzZWxpbmUgY29kZS4KKyAgICAgICAgdm9pZCBv
cHRpbWl6ZVNvb24oKQorICAgICAgICB7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0g
LTEwMDsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaW50MzJfdCBtX2V4ZWN1dGVDb3Vu
dGVyOwogCiAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHJlbWFpbmluZyBtZW1iZXJzIHBy
aXZhdGUuCkBAIC02NzEsNiArNzQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogICAg
ICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fanVtcFRhcmdldHM7CisgICAgICAgIFZlY3Rvcjx1bnNp
Z25lZD4gbV9sb29wVGFyZ2V0czsKIAogICAgICAgICAvLyBDb25zdGFudCBQb29sCiAgICAgICAg
IFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzOwpAQCAtNjgyLDYgKzc1OSw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKIAogICAg
ICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOworICAgICAgICAKKyAgICAgICAg
T3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBtX3ByZWRpY3Rpb25zOwogCiAgICAgICAgIHN0cnVj
dCBSYXJlRGF0YSB7CiAgICAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24gOTQ5OTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1Nyw2ICsxNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbWFjcm8ob3BfbG9v
cF9pZl9sZXNzZXEsIDQpIFwKICAgICAgICAgbWFjcm8ob3BfbG9vcF9pZl9ncmVhdGVyLCA0KSBc
CiAgICAgICAgIG1hY3JvKG9wX2xvb3BfaWZfZ3JlYXRlcmVxLCA0KSBcCisgICAgICAgIG1hY3Jv
KG9wX2xvb3BfaGludCwgMSkgXAogICAgICAgICBtYWNybyhvcF9zd2l0Y2hfaW1tLCA0KSBcCiAg
ICAgICAgIG1hY3JvKG9wX3N3aXRjaF9jaGFyLCA0KSBcCiAgICAgICAgIG1hY3JvKG9wX3N3aXRj
aF9zdHJpbmcsIDQpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVk
aWN0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ByZWRpY3RlZFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTk0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFByZWRpY3RlZFR5cGVfaAorI2RlZmluZSBQcmVkaWN0ZWRUeXBlX2gKKworI2luY2x1
ZGUgIlZhbHVlUHJvZmlsZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordHlwZWRlZiB1aW50OF90
IFByZWRpY3RlZFR5cGU7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Tm9uZSAg
ID0gMDsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RDZWxsICAgPSAweDAxOwor
c3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEFycmF5ICA9IDB4MDM7CitzdGF0aWMg
Y29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0SW50MzIgID0gMHgwNDsKK3N0YXRpYyBjb25zdCBQ
cmVkaWN0ZWRUeXBlIFByZWRpY3REb3VibGUgPSAweDA4Oworc3RhdGljIGNvbnN0IFByZWRpY3Rl
ZFR5cGUgUHJlZGljdE51bWJlciA9IDB4MGM7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQ
cmVkaWN0Qm9vbGVhbiA9IDB4MTA7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0
VG9wICAgID0gMHgxZjsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFN0cm9uZ1ByZWRpY3Rp
b25UYWcgPSAweDgwOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01h
c2sgICAgPSAweDgwOworCitlbnVtIFByZWRpY3Rpb25Tb3VyY2UgeyBXZWFrUHJlZGljdGlvbiwg
U3Ryb25nUHJlZGljdGlvbiB9OworCitpbmxpbmUgYm9vbCBpc0NlbGxQcmVkaWN0aW9uKFByZWRp
Y3RlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSAmIFByZWRpY3RDZWxsKSA9PSBQ
cmVkaWN0Q2VsbCAmJiAhKHZhbHVlICYgfihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0aW9uVGFnTWFz
aykpOworfQorCitpbmxpbmUgYm9vbCBpc0FycmF5UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZh
bHVlKQoreworICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spID09IFByZWRp
Y3RBcnJheTsKK30KKworaW5saW5lIGJvb2wgaXNJbnQzMlByZWRpY3Rpb24oUHJlZGljdGVkVHlw
ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQ
cmVkaWN0SW50MzI7Cit9CisKK2lubGluZSBib29sIGlzRG91YmxlUHJlZGljdGlvbihQcmVkaWN0
ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2sp
ID09IFByZWRpY3REb3VibGU7Cit9CisKK2lubGluZSBib29sIGlzTnVtYmVyUHJlZGljdGlvbihQ
cmVkaWN0ZWRUeXBlIHZhbHVlKQoreworICAgIHJldHVybiAhISh2YWx1ZSAmIFByZWRpY3ROdW1i
ZXIpICYmICEodmFsdWUgJiB+KFByZWRpY3ROdW1iZXIgfCBQcmVkaWN0aW9uVGFnTWFzaykpOwor
fQorCitpbmxpbmUgYm9vbCBpc0Jvb2xlYW5QcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUp
Cit7CisgICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0gUHJlZGljdEJv
b2xlYW47Cit9CisKK2lubGluZSBib29sIGlzU3Ryb25nUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBl
IHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1ZSAhPSAoUHJlZGljdE5vbmUgfCBTdHJvbmdQcmVk
aWN0aW9uVGFnKSk7CisgICAgcmV0dXJuICEhKHZhbHVlICYgU3Ryb25nUHJlZGljdGlvblRhZyk7
Cit9CisKKyNpZm5kZWYgTkRFQlVHCitpbmxpbmUgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3Ry
aW5nKFByZWRpY3RlZFR5cGUgdmFsdWUpCit7CisgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbih2
YWx1ZSkpIHsKKyAgICAgICAgc3dpdGNoICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgewor
ICAgICAgICBjYXNlIFByZWRpY3ROb25lOgorICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1i
b3R0b20iOworICAgICAgICBjYXNlIFByZWRpY3RDZWxsOgorICAgICAgICAgICAgcmV0dXJuICJw
LXN0cm9uZy1jZWxsIjsKKyAgICAgICAgY2FzZSBQcmVkaWN0QXJyYXk6CisgICAgICAgICAgICBy
ZXR1cm4gInAtc3Ryb25nLWFycmF5IjsKKyAgICAgICAgY2FzZSBQcmVkaWN0SW50MzI6CisgICAg
ICAgICAgICByZXR1cm4gInAtc3Ryb25nLWludDMyIjsKKyAgICAgICAgY2FzZSBQcmVkaWN0RG91
YmxlOgorICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1kb3VibGUiOworICAgICAgICBjYXNl
IFByZWRpY3ROdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLW51bWJlciI7Cisg
ICAgICAgIGNhc2UgUHJlZGljdEJvb2xlYW46CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25n
LWJvb2xlYW4iOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9u
Zy10b3AiOworICAgICAgICB9CisgICAgfQorICAgIHN3aXRjaCAodmFsdWUpIHsKKyAgICBjYXNl
IFByZWRpY3ROb25lOgorICAgICAgICByZXR1cm4gInAtd2Vhay1ib3R0b20iOworICAgIGNhc2Ug
UHJlZGljdENlbGw6CisgICAgICAgIHJldHVybiAicC13ZWFrLWNlbGwiOworICAgIGNhc2UgUHJl
ZGljdEFycmF5OgorICAgICAgICByZXR1cm4gInAtd2Vhay1hcnJheSI7CisgICAgY2FzZSBQcmVk
aWN0SW50MzI6CisgICAgICAgIHJldHVybiAicC13ZWFrLWludDMyIjsKKyAgICBjYXNlIFByZWRp
Y3REb3VibGU6CisgICAgICAgIHJldHVybiAicC13ZWFrLWRvdWJsZSI7CisgICAgY2FzZSBQcmVk
aWN0TnVtYmVyOgorICAgICAgICByZXR1cm4gInAtd2Vhay1udW1iZXIiOworICAgIGNhc2UgUHJl
ZGljdEJvb2xlYW46CisgICAgICAgIHJldHVybiAicC13ZWFrLWJvb2xlYW4iOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiAicC13ZWFrLXRvcCI7CisgICAgfQorfQorI2VuZGlmCisKK2lu
bGluZSBQcmVkaWN0ZWRUeXBlIG1lcmdlUHJlZGljdGlvbnMoUHJlZGljdGVkVHlwZSBsZWZ0LCBQ
cmVkaWN0ZWRUeXBlIHJpZ2h0KQoreworICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkg
PT0gaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSkKKyAgICAgICAgcmV0dXJuIGxlZnQgfCByaWdo
dDsKKyAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpKSB7CisgICAgICAgIEFTU0VSVCgh
aXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSk7CisgICAgICAgIHJldHVybiBsZWZ0OworICAgIH0K
KyAgICBBU1NFUlQoIWlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSk7CisgICAgQVNTRVJUKGlzU3Ry
b25nUHJlZGljdGlvbihyaWdodCkpOworICAgIHJldHVybiByaWdodDsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2lubGluZSBib29sIG1lcmdlUHJlZGljdGlvbihUJiBsZWZ0LCBQcmVkaWN0
ZWRUeXBlIHJpZ2h0KQoreworICAgIFByZWRpY3RlZFR5cGUgbmV3UHJlZGljdGlvbiA9IHN0YXRp
Y19jYXN0PFQ+KG1lcmdlUHJlZGljdGlvbnMoc3RhdGljX2Nhc3Q8UHJlZGljdGVkVHlwZT4obGVm
dCksIHJpZ2h0KSk7CisgICAgYm9vbCByZXN1bHQgPSBuZXdQcmVkaWN0aW9uICE9IHN0YXRpY19j
YXN0PFByZWRpY3RlZFR5cGU+KGxlZnQpOworICAgIGxlZnQgPSBuZXdQcmVkaWN0aW9uOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBQcmVkaWN0ZWRUeXBlIG1ha2VQcmVkaWN0aW9u
KFByZWRpY3RlZFR5cGUgdHlwZSwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCit7CisgICAgQVNT
RVJUKCEodHlwZSAmIFN0cm9uZ1ByZWRpY3Rpb25UYWcpKTsKKyAgICBBU1NFUlQoc291cmNlID09
IFN0cm9uZ1ByZWRpY3Rpb24gfHwgc291cmNlID09IFdlYWtQcmVkaWN0aW9uKTsKKyAgICBpZiAo
dHlwZSA9PSBQcmVkaWN0Tm9uZSkKKyAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgIHJl
dHVybiB0eXBlIHwgKHNvdXJjZSA9PSBTdHJvbmdQcmVkaWN0aW9uID8gU3Ryb25nUHJlZGljdGlv
blRhZyA6IDApOworfQorCisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQoraW5saW5lIFByZWRp
Y3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBW
YWx1ZVByb2ZpbGUmIHByb2ZpbGUpCit7CisgICAgVmFsdWVQcm9maWxlOjpTdGF0aXN0aWNzIHN0
YXRpc3RpY3M7CisgICAgcHJvZmlsZS5jb21wdXRlU3RhdGlzdGljcyhnbG9iYWxEYXRhLCBzdGF0
aXN0aWNzKTsKKyAgICAKKyAgICBpZiAoIXN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0
dXJuIFByZWRpY3ROb25lOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmludDMycyA9PSBzdGF0
aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJl
ZGljdEludDMyOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGlj
cy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RE
b3VibGU7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzICsgc3RhdGlzdGljcy5kb3Vi
bGVzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rp
b25UYWcgfCBQcmVkaWN0TnVtYmVyOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmFycmF5cyA9
PSBzdGF0aXN0aWNzLnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFn
IHwgUHJlZGljdEFycmF5OworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmNlbGxzID09IHN0YXRp
c3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVk
aWN0Q2VsbDsKKyAgICAKKyAgICBpZiAoc3RhdGlzdGljcy5ib29sZWFucyA9PSBzdGF0aXN0aWNz
LnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEJv
b2xlYW47CisgICAgCisgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0VG9w
OworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJlZGljdGVk
VHlwZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGlvblRy
YWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJl
ZGljdGlvblRyYWNrZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QcmVkaWN0aW9uVHJhY2tlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFByZWRpY3Rpb25UcmFja2VyX2gKKyNkZWZpbmUgUHJlZGljdGlvblRyYWNrZXJfaAorCisjaW5j
bHVkZSAiUHJlZGljdGVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gaGVscGVyIGZ1bmN0aW9u
IHRvIGRpc3Rpbmd1aXNoIHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KK2lubGlu
ZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwg
MDsgfQorCitzdHJ1Y3QgUHJlZGljdGlvblNsb3QgeworcHVibGljOgorICAgIFByZWRpY3Rpb25T
bG90KCkKKyAgICAgICAgOiBtX3ZhbHVlKFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9CisgICAg
UHJlZGljdGVkVHlwZSBtX3ZhbHVlOworfTsKKworY2xhc3MgUHJlZGljdGlvblRyYWNrZXIgewor
cHVibGljOgorICAgIFByZWRpY3Rpb25UcmFja2VyKCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IFByZWRpY3Rpb25UcmFja2VyKHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtVmFy
aWFibGVzKQorICAgICAgICA6IG1fYXJndW1lbnRzKG51bUFyZ3VtZW50cykKKyAgICAgICAgLCBt
X3ZhcmlhYmxlcyhudW1WYXJpYWJsZXMpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGlu
aXRpYWxpemVTaW1pbGFyVG8oY29uc3QgUHJlZGljdGlvblRyYWNrZXImIG90aGVyKQorICAgIHsK
KyAgICAgICAgbV9hcmd1bWVudHMucmVzaXplKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpOwor
ICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUob3RoZXIubnVtYmVyT2ZWYXJpYWJsZXMoKSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY29weUxvY2Fsc0Zyb20oY29uc3QgUHJlZGljdGlvblRyYWNr
ZXImIG90aGVyKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMgPSBvdGhlci5tX2FyZ3VtZW50
czsKKyAgICAgICAgbV92YXJpYWJsZXMgPSBvdGhlci5tX3ZhcmlhYmxlczsKKyAgICB9CisgICAg
CisgICAgc2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVu
dHMuc2l6ZSgpOyB9CisgICAgc2l6ZV90IG51bWJlck9mVmFyaWFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgCisgICAgdW5zaWduZWQgYXJndW1lbnRJbmRl
eEZvck9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmQgKyBtX2FyZ3Vt
ZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7IH0KKworICAg
IGJvb2wgcHJlZGljdEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50LCBQcmVkaWN0ZWRUeXBlIHBy
ZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1lcmdlUHJlZGljdGlvbihtX2FyZ3VtZW50c1thcmd1bWVudF0ubV92YWx1ZSwgbWFrZVByZWRp
Y3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHJlZGlj
dChpbnQgb3BlcmFuZCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNl
IHNvdXJjZSkKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkK
KyAgICAgICAgICAgIHJldHVybiBwcmVkaWN0QXJndW1lbnQoYXJndW1lbnRJbmRleEZvck9wZXJh
bmQob3BlcmFuZCksIHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAgICAgIGlmICgodW5zaWduZWQp
b3BlcmFuZCA+PSBtX3ZhcmlhYmxlcy5zaXplKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChvcGVy
YW5kID49IDApOworICAgICAgICAgICAgbV92YXJpYWJsZXMucmVzaXplKG9wZXJhbmQgKyAxKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX3Zh
cmlhYmxlc1tvcGVyYW5kXS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3Vy
Y2UpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZh
ck51bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJj
ZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90Pjo6aXRl
cmF0b3IgaXRlciA9IG1fZ2xvYmFsVmFycy5maW5kKHZhck51bWJlciArIDEpOworICAgICAgICBp
ZiAoaXRlciA9PSBtX2dsb2JhbFZhcnMuZW5kKCkpIHsKKyAgICAgICAgICAgIFByZWRpY3Rpb25T
bG90IHByZWRpY3Rpb25TbG90OworICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtZXJnZVByZWRp
Y3Rpb24ocHJlZGljdGlvblNsb3QubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwg
c291cmNlKSk7CisgICAgICAgICAgICBtX2dsb2JhbFZhcnMuYWRkKHZhck51bWJlciArIDEsIHBy
ZWRpY3Rpb25TbG90KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihpdGVyLT5zZWNvbmQubV92YWx1ZSwgbWFrZVBy
ZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7CisgICAgfQorICAgIAorICAgIFByZWRpY3Rl
ZFR5cGUgZ2V0QXJndW1lbnRQcmVkaWN0aW9uKHVuc2lnbmVkIGFyZ3VtZW50KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XS5tX3ZhbHVlOworICAgIH0KKworICAg
IFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAg
IGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgICAgIHJldHVybiBnZXRB
cmd1bWVudFByZWRpY3Rpb24oYXJndW1lbnRJbmRleEZvck9wZXJhbmQob3BlcmFuZCkpOworICAg
ICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPCBtX3ZhcmlhYmxlcy5zaXplKCkpCisgICAgICAg
ICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF0ubV92YWx1ZTsKKyAgICAgICAgcmV0dXJu
IFByZWRpY3ROb25lOworICAgIH0KKyAgICAKKyAgICBQcmVkaWN0ZWRUeXBlIGdldEdsb2JhbFZh
clByZWRpY3Rpb24odW5zaWduZWQgdmFyTnVtYmVyKQorICAgIHsKKyAgICAgICAgSGFzaE1hcDx1
bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBpdGVyID0gbV9nbG9iYWxWYXJzLmZp
bmQodmFyTnVtYmVyICsgMSk7CisgICAgICAgIGlmIChpdGVyID09IG1fZ2xvYmFsVmFycy5lbmQo
KSkKKyAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKKyAgICAgICAgcmV0dXJuIGl0ZXIt
PnNlY29uZC5tX3ZhbHVlOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFByZWRp
Y3Rpb25TbG90LCAxNj4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFByZWRpY3Rpb25TbG90LCAx
Nj4gbV92YXJpYWJsZXM7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+IG1f
Z2xvYmFsVmFyczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHJlZGlj
dGlvblRyYWNrZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTQ5OTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjU4LDYgKzY1OCwxMyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0T3Bjb2RlKE9wY29kCiAgICAgbV9sYXN0T3Bjb2RlSUQgPSBvcGNvZGVJRDsKIH0K
IAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvb3BIaW50KCkKK3sKKyNpZiBFTkFCTEUo
VElFUkVEX0NPTVBJTEFUSU9OKQorICAgIGVtaXRPcGNvZGUob3BfbG9vcF9oaW50KTsKKyNlbmRp
ZgorfQorCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZXRyaWV2ZUxhc3RCaW5hcnlPcChpbnQm
IGRzdEluZGV4LCBpbnQmIHNyYzFJbmRleCwgaW50JiBzcmMySW5kZXgpCiB7CiAgICAgQVNTRVJU
KGluc3RydWN0aW9ucygpLnNpemUoKSA+PSA0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDk0OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsNiArMzQ1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdFRvUHJpbWl0aXZlKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKTsKIAogICAgICAgICBQYXNzUmVmUHRyPExhYmVsPiBlbWl0TGFiZWwoTGFiZWwq
KTsKKyAgICAgICAgdm9pZCBlbWl0TG9vcEhpbnQoKTsKICAgICAgICAgUGFzc1JlZlB0cjxMYWJl
bD4gZW1pdEp1bXAoTGFiZWwqIHRhcmdldCk7CiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVt
aXRKdW1wSWZUcnVlKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsKiB0YXJnZXQpOwogICAgICAgICBQ
YXNzUmVmUHRyPExhYmVsPiBlbWl0SnVtcElmRmFsc2UoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwq
IHRhcmdldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ2OSw3ICsxNDY5LDcgQEAgUmVnaXN0ZXJJRCogRG9XaGlsZU5vZGU6OmVtaXRCeXRlY29kZShC
eQogCiAgICAgUmVmUHRyPExhYmVsPiB0b3BPZkxvb3AgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsK
ICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHRvcE9mTG9vcC5nZXQoKSk7Ci0KKyAgICBnZW5lcmF0
b3IuZW1pdExvb3BIaW50KCk7CiAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1
dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKTsKICAgIAogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7
CkBAIC0xNDk3LDYgKzE0OTcsNyBAQCBSZWdpc3RlcklEKiBXaGlsZU5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlCiAKICAgICBSZWZQdHI8TGFiZWw+IHRvcE9mTG9vcCA9IGdlbmVyYXRvci5uZXdMYWJl
bCgpOwogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwodG9wT2ZMb29wLmdldCgpKTsKKyAgICBnZW5l
cmF0b3IuZW1pdExvb3BIaW50KCk7CiAgICAgCiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9zdGF0ZW1lbnQpOwogCkBAIC0xNTMyLDYgKzE1MzMsNyBAQCBSZWdpc3RlcklEKiBGb3JOb2Rl
OjplbWl0Qnl0ZWNvZGUoQnl0ZWNvCiAKICAgICBSZWZQdHI8TGFiZWw+IHRvcE9mTG9vcCA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOwogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwodG9wT2ZMb29wLmdl
dCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7CiAKICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOwogCkBA
IC0xNTc5LDYgKzE1ODEsNyBAQCBSZWdpc3RlcklEKiBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShC
eXRlCiAKICAgICBSZWZQdHI8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgp
OwogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0YXJ0LmdldCgpKTsKKyAgICBnZW5lcmF0
b3IuZW1pdExvb3BIaW50KCk7CiAKICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWU7CiAgICAg
Ym9vbCBvcHRpbWl6ZWRGb3JpbkFjY2VzcyA9IGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk0OTk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU5NCw2ICs1OTQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX2dsb2JhbERh
dGEtPmludGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIHVuc2lnbmVkIGJsb2NrQmVn
aW4gPSBtX2N1cnJlbnRJbmRleDsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBEb24n
dCBleHRlbmQgb3ZlciBqdW1wIGRlc3RpbmF0aW9ucy4KICAgICAgICAgaWYgKG1fY3VycmVudElu
ZGV4ID09IGxpbWl0KSB7CkBAIC0xMjExLDYgKzEyMTIsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9yZXNv
bHZlX2Jhc2UpOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9sb29w
X2hpbnQ6IHsKKyAgICAgICAgICAgIC8vIEJhc2VsaW5lLT5ERkcgT1NSIGp1bXBzIGJldHdlZW4g
bG9vcCBoaW50cy4gVGhlIERGRyBhc3N1bWVzIHRoYXQgQmFzZWxpbmUtPkRGRworICAgICAgICAg
ICAgLy8gT1NSIGNhbiBvbmx5IGhhcHBlbiBhdCBiYXNpYyBibG9jayBib3VuZGFyaWVzLiBBc3Nl
cnQgdGhhdCB0aGVzZSB0d28gc3RhdGVtZW50cworICAgICAgICAgICAgLy8gYXJlIGNvbXBhdGli
bGUuCisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGJsb2NrQmVnaW4sIG1fY3VycmVudEluZGV4
ID09IGJsb2NrQmVnaW4pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+aXNPU1JUYXJnZXQgPSB0cnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9sb29wX2hpbnQpOworICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIC8vIFBhcnNlIGZhaWxlZCEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAw
LDcgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCBvcAogICAgIGNhc2Ug
b3Bfam5sZXNzZXE6CiAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CiAgICAgY2FzZSBvcF9qbmdyZWF0
ZXJlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzczoK
ICAgICBjYXNlIG9wX2xvb3BfaWZfbGVzc2VxOgogICAgIGNhc2Ugb3BfbG9vcF9pZl9ncmVhdGVy
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24g
OTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDYgKzQ3LDE3IEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1v
ZGUgY29tcGlsZU0KICAgICAKICAgICBwcm9wYWdhdGUoZGZnLCBnbG9iYWxEYXRhLCBjb2RlQmxv
Y2spOwogICAgIAorI2lmIEVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKKyAgICAvLyBTYXZl
IHRoZSBwcmVkaWN0aW9ucyB3ZSd2ZSBtYWRlLCBzbyB0aGF0IE9TUiBlbnRyeSBjYW4gdmVyaWZ5
IHRoZW0uIFByZWRpY3Rpb25zCisgICAgLy8gYXJlIHNhdmVkIGluIHRoZSBDb2RlQmxvY2sgZnJv
bSB3aGljaCB3ZSB3aWxsIGJlIGRvaW5nIE9TUiBlbnRyeSwgc2luY2UgdGhlCisgICAgLy8gQ29k
ZUJsb2NrIHRvIHdoaWNoIHdlIGFyZSBPU1JpbmcgbWF5IGJlIHJlcGxhY2VkIGF0IGFueSB0aW1l
LgorICAgIE93blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4gcHJlZGljdGlvbnMgPSBhZG9wdFB0cihu
ZXcgUHJlZGljdGlvblRyYWNrZXIoKSk7CisgICAgKnByZWRpY3Rpb25zID0gZGZnLnByZWRpY3Rp
b25zKCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAgQVNTRVJU
KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUKTsKKyAgICBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPnNldFByZWRpY3Rpb25zKHBy
ZWRpY3Rpb25zLnJlbGVhc2UoKSk7CisjZW5kaWYKKyAgICAKICAgICBKSVRDb21waWxlciBkYXRh
Rmxvd0pJVChnbG9iYWxEYXRhLCBkZmcsIGNvZGVCbG9jayk7CiAgICAgaWYgKGNvbXBpbGVNb2Rl
ID09IENvbXBpbGVGdW5jdGlvbikgewogICAgICAgICBBU1NFUlQoaml0Q29kZVdpdGhBcml0eUNo
ZWNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXgg
bm9kZUluZGV4LCBDbwogdm9pZCBHcmFwaDo6ZHVtcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
ICAgICBmb3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxvY2tzLnNpemUoKTsgKytiKSB7Ci0gICAg
ICAgIHByaW50ZigiQmxvY2sgIyV1OlxuIiwgKGludCliKTsKKyAgICAgICAgcHJpbnRmKCJCbG9j
ayAjJXUgKGJjIyV1KTogICVzXG4iLCAoaW50KWIsIG1fYmxvY2tzW2JdLT5ieXRlY29kZUJlZ2lu
LCBtX2Jsb2Nrc1tiXS0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIik7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSBtX2Jsb2Nrc1tiXS0+YmVnaW47IGkgPCBtX2Jsb2Nrc1tiXS0+
ZW5kOyArK2kpCiAgICAgICAgICAgICBkdW1wKGksIGNvZGVCbG9jayk7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIK
LSNpbmNsdWRlICJERkdQcmVkaWN0aW9uVHJhY2tlci5oIgorI2luY2x1ZGUgIlByZWRpY3Rpb25U
cmFja2VyLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJGaWxlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC02NCw2ICs2NCw3IEBAIHN0cnVjdCBC
YXNpY0Jsb2NrIHsKICAgICAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4pCiAgICAg
ICAgICwgYmVnaW4oYmVnaW4pCiAgICAgICAgICwgZW5kKE5vTm9kZSkKKyAgICAgICAgLCBpc09T
UlRhcmdldChmYWxzZSkKICAgICAgICAgLCBtX2FyZ3VtZW50cyhudW1Bcmd1bWVudHMpCiAgICAg
ICAgICwgbV9sb2NhbHMobnVtTG9jYWxzKQogICAgIHsKQEAgLTc3LDYgKzc4LDcgQEAgc3RydWN0
IEJhc2ljQmxvY2sgewogICAgIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW47CiAgICAgTm9kZUluZGV4
IGJlZ2luOwogICAgIE5vZGVJbmRleCBlbmQ7CisgICAgYm9vbCBpc09TUlRhcmdldDsKIAogICAg
IFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKICAgICBWZWN0b3IgPFZhcmlhYmxlUmVj
b3JkLCA4PiBtX2FyZ3VtZW50czsKQEAgLTE0MSw3ICsxNDMsMjIgQEAgcHVibGljOgogICAgIAog
ICAgIGJvb2wgcHJlZGljdChOb2RlJiBub2RlLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFBy
ZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlv
bnMucHJlZGljdChub2RlLCBwcmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICBzd2l0Y2ggKG5v
ZGUub3ApIHsKKyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIHJldHVybiBwcmVk
aWN0KG5vZGUubG9jYWwoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAgICAgIHJldHVybiBwcmVkaWN0
R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVyKCksIHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICBjYXNlIEdldE1ldGhv
ZDoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBj
YXNlIENvbnN0cnVjdDoKKyAgICAgICAgICAgIHJldHVybiBub2RlLnByZWRpY3QocHJlZGljdGlv
biwgc291cmNlKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihpbnQg
b3BlcmFuZCkKQEAgLTE2NCw3ICsxODEsMjAgQEAgcHVibGljOgogICAgICAgICBpZiAobm9kZVB0
ci0+b3AgPT0gVmFsdWVUb0ludDMyKQogICAgICAgICAgICAgbm9kZVB0ciA9ICYoKnRoaXMpW25v
ZGVQdHItPmNoaWxkMSgpXTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBtX3ByZWRpY3Rpb25z
LmdldFByZWRpY3Rpb24oKm5vZGVQdHIpOworICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPm9wKSB7
CisgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlv
bihub2RlUHRyLT5sb2NhbCgpKTsKKyAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAg
ICAgICByZXR1cm4gZ2V0R2xvYmFsVmFyUHJlZGljdGlvbihub2RlUHRyLT52YXJOdW1iZXIoKSk7
CisgICAgICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAgY2FzZSBHZXRNZXRob2Q6CisgICAgICAg
IGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBDb25zdHJ1
Y3Q6CisgICAgICAgICAgICByZXR1cm4gbm9kZVB0ci0+Z2V0UHJlZGljdGlvbigpOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgICAgICB9CiAg
ICAgfQogICAgIAogICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25z
dGFudHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDE3ICszODcsNDggQEAgdm9pZCBK
SVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIC8vIDExKSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0
aW9uIGludG8gcmVnVDAuCisgICAgLy8gMTEpIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUg
Y291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93CisgICAgLy8gICAgIHRo
YXQgYWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29kZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBz
byB0aGUgZXhlY3V0ZQorICAgIC8vICAgICBjb3VudGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1l
cyB0aGF0IHBlcmZvcm1lZCBPU1IgZXhpdCBhbmQgY2FsbCBmcmFtZXMKKyAgICAvLyAgICAgdGhh
dCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xkIEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVy
IGNhbGwgZnJhbWUncworICAgIC8vICAgICBPU1IgZXhpdC4gV2Ugd2FudCB0byBlbnN1cmUgdGhh
dCB0aGUgZm9sbG93aW5nIGlzIHRydWU6CisgICAgLy8KKyAgICAvLyAgICAgKGEpIENvZGUgdGhl
IHBlcmZvcm1zIGFuIE9TUiBleGl0IGdldHMgYSBjaGFuY2UgdG8gcmVlbnRlciBvcHRpbWl6ZWQK
KyAgICAvLyAgICAgICAgIGNvZGUgZXZlbnR1YWxseSwgc2luY2Ugb3B0aW1pemVkIGNvZGUgaXMg
ZmFzdGVyLiBCdXQgd2UgZG9uJ3QKKyAgICAvLyAgICAgICAgIHdhbnQgdG8gZG8gc3VjaCByZWVu
dGVyeSB0b28gYWdncmVzc2l2ZWx5IChzZWUgKGMpIGJlbG93KS4KKyAgICAvLworICAgIC8vICAg
ICAoYikgSWYgdGhlcmUgaXMgY29kZSBvbiB0aGUgY2FsbCBzdGFjayB0aGF0IGlzIHN0aWxsIHJ1
bm5pbmcgdGhlIG9sZAorICAgIC8vICAgICAgICAgSklUJ3MgY29kZSBhbmQgaGFzIG5ldmVyIE9T
UidkLCB0aGVuIGl0IHNob3VsZCBnZXQgYSBjaGFuY2UgdG8KKyAgICAvLyAgICAgICAgIHBlcmZv
cm0gT1NSIGVudHJ5IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBleGl0ZWQuCisgICAgLy8K
KyAgICAvLyAgICAgKGMpIENvZGUgdGhlIHBlcmZvcm1zIGFuIE9TUiBleGl0IHNob3VsZCBub3Qg
aW1tZWRpYXRlbHkgcmV0cnkgT1NSCisgICAgLy8gICAgICAgICBlbnRyeSwgc2luY2UgYm90aCBm
b3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5IGlzCisgICAgLy8gICAgICAgICBw
YXJ0aWN1bGFybHkgZXhwZW5zaXZlLgorICAgIC8vCisgICAgLy8gICAgIFRvIGVuc3VyZSAoYyks
IHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRlciB0bworICAgIC8vICAgICBjb3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3Vs
ZCBlbmRhbmdlcgorICAgIC8vICAgICAoYSkgYW5kIChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1Ig
ZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9yCisgICAgLy8gICAgIGV2ZXJ5IGNh
bGwgZnJhbWUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEVzc2VudGlhbGx5LCBpZiBPU1IgZXhpdCBo
YXBwZW5zCisgICAgLy8gICAgIGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxv
b3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKKyAgICAvLyAgICAgYmVjb21lIG5vbi1u
ZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkK
KyAgICAvLyAgICAgd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9s
ZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKKyAgICAvLyAgICAgZ29vZCBqb2Igb2YgZW5zdXJp
bmcgKGEpIGFuZCAoYikuIFRoaXMgaGV1cmlzdGljIG1heSBuZWVkIHRvIGJlCisgICAgLy8gICAg
IHJldGhvdWdodCBpbiB0aGUgZnV0dXJlLCBwYXJ0aWN1bGFybHkgaWYgd2Ugc3VwcG9ydCByZW9w
dGltaXppbmcgY29kZQorICAgIC8vICAgICB3aXRoIG5ldyB2YWx1ZSBwcm9maWxlcyBnYXRoZXJl
ZCBmcm9tIGNvZGUgdGhhdCBkaWQgT1NSIGV4aXQuCisgICAgCisgICAgc3RvcmUzMihJbW0zMihj
b2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Y291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldh
cm1VcCgpKSwgY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmFkZHJlc3NPZkV4ZWN1dGVDb3Vu
dGVyKCkpOworICAgIAorICAgIC8vIDEyKSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0
ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCiAgICAgCiAgICAgaWYgKGV4aXQubV9sYXN0U2V0
T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQogICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBH
UFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CiAgICAgCi0gICAgLy8gMTIpIEZpeCBjYWxs
IGZyYW1lLgorICAgIC8vIDEzKSBGaXggY2FsbCBmcmFtZS4KICAgICAKICAgICBBU1NFUlQoY29k
ZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVCk7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2soKS0+YWx0ZXJuYXRp
dmUoKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilSZWdpc3RlckZpbGU6OkNvZGVCbG9j
aykpOwogICAgIAotICAgIC8vIDEzKSBKdW1wIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYmFzZWxp
bmUgSklUIGNvZGUuCisgICAgLy8gMTQpIEp1bXAgaW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNl
bGluZSBKSVQgY29kZS4KICAgICAKICAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBp
bmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4PihkZWNvZGVkQ29kZU1hcC5i
ZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9ieXRlY29kZUluZGV4KTsKICAg
ICAKQEAgLTExNDEsNiArMTE3Miw4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtTcGVjdWxhdGlv
bkNoZWNrcygKIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKIHsKKyAgICBtX3N0
YXJ0T2ZDb2RlID0gbGFiZWwoKTsKKyAgICAKICAgICAvLyBUaGlzIGNvZGUgY3VycmVudGx5IG1h
dGNoZXMgdGhlIG9sZCBKSVQuIEluIHRoZSBmdW5jdGlvbiBoZWFkZXIgd2UgbmVlZCB0bwogICAg
IC8vIHBvcCB0aGUgcmV0dXJuIGFkZHJlc3MgKHNpbmNlIHdlIGRvIG5vdCBhbGxvdyBhbnkgcmVj
dXJzaW9uIG9uIHRoZSBtYWNoaW5lCiAgICAgLy8gc3RhY2spLCBhbmQgcGVyZm9ybSBhIGZhc3Qg
cmVnaXN0ZXIgZmlsZSBjaGVjay4KQEAgLTExNzksNiArMTIxMiw4IEBAIHZvaWQgSklUQ29tcGls
ZXI6OmNvbXBpbGVCb2R5KCkKICAgICAvLyB0byBhbGxvdyBpdCB0byBjaGVjayB3aGljaCBub2Rl
cyBpbiB0aGUgZ3JhcGggbWF5IGJhaWwgb3V0LCBhbmQgbWF5IG5lZWQgdG8gcmVlbnRlciB0aGUK
ICAgICAvLyBub24tc3BlY3VsYXRpdmUgcGF0aC4KICAgICBpZiAoY29tcGlsZWRTcGVjdWxhdGl2
ZSkgeworICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChtX2ppdENvZGVNYXBFbmNv
ZGVyLmZpbmlzaCgpKTsKKyAgICAgICAgCiAjaWYgRU5BQkxFKERGR19PU1JfRVhJVCkKICAgICAg
ICAgbGlua09TUkV4aXRzKHNwZWN1bGF0aXZlKTsKICNlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzE2LDYgKzMxNiwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBtX2pzQ2FsbHMuYXBwZW5k
KEpTQ2FsbFJlY29yZChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwg
Y29kZU9yaWdpbikpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIG5vdGljZU9TUkVudHJ5KEJhc2lj
QmxvY2smIGJhc2ljQmxvY2spCisgICAgeworICAgICAgICBtX2ppdENvZGVNYXBFbmNvZGVyLmFw
cGVuZChiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRP
ZkNvZGUsIGxhYmVsKCkpKTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgLy8gSW50ZXJuYWwgaW1w
bGVtZW50YXRpb24gdG8gY29tcGlsZS4KQEAgLTM0OSw2ICszNTQsMTAgQEAgcHJpdmF0ZToKICAg
ICAvLyBDb3VudCBvZiB0aGUgbnVtYmVyIG9mIENhbGxSZWNvcmRzIHdpdGggZXhjZXB0aW9uIGhh
bmRsZXJzLgogICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwogICAgIHVuc2lnbmVkIG1f
ZXhjZXB0aW9uQ2hlY2tDb3VudDsKKyAgICAKKyAgICAvLyBKSVQgY29kZSBtYXAgZm9yIE9TUiBl
bnRyeXBvaW50cy4KKyAgICBMYWJlbCBtX3N0YXJ0T2ZDb2RlOworICAgIENvbXBhY3RKSVRDb2Rl
TWFwOjpFbmNvZGVyIG1faml0Q29kZU1hcEVuY29kZXI7CiAKICAgICBzdHJ1Y3QgUHJvcGVydHlB
Y2Nlc3NSZWNvcmQgewogICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChDYWxsIGZ1bmN0aW9u
Q2FsbCwgaW50MTZfdCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBpbnQxNl90IGRlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2ssIGludDE2X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgaW50MTZfdCBkZWx0YUNh
bGxUb1Nsb3dDYXNlLCBpbnQxNl90IGRlbHRhQ2FsbFRvRG9uZSwgaW50OF90IGJhc2VHUFIsIGlu
dDhfdCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hHUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBAQAogI2RlZmluZSBE
RkdfREVCVUdfTE9DQUxfRElTQkFMRSAwCiAvLyBEaXNhYmxlIHRoZSBTcGVjdWxhdGl2ZUpJVCB3
aXRob3V0IGhhdmluZyB0byB0b3VjaCBQbGF0Zm9ybS5oIQogI2RlZmluZSBERkdfREVCVUdfTE9D
QUxfRElTQkFMRV9TUEVDVUxBVElWRSAwCisvLyBFbmFibGUgT1NSIGVudHJ5IGZyb20gYmFzZWxp
bmUgSklULgorI2RlZmluZSBFTkFCTEVfREZHX09TUl9FTlRSWSBFTkFCTEVfVElFUkVEX0NPTVBJ
TEFUSU9OCiAvLyBEaXNhYmxlIHRoZSBub24tc3BlY3VsYXRpdmUgSklUIGFuZCB1c2UgT1NSIGlu
c3RlYWQuCiAjZGVmaW5lIEVOQUJMRV9ERkdfT1NSX0VYSVQgRU5BQkxFX1RJRVJFRF9DT01QSUxB
VElPTgogLy8gR2VuZXJhdGUgc3RhdHMgb24gaG93IHN1Y2Nlc3NmdWwgd2Ugd2VyZSBpbiBtYWtp
bmcgdXNlIG9mIHRoZSBERkcgaml0LCBhbmQgcmVtYWluaW5nIG9uIHRoZSBob3QgcGF0aC4KQEAg
LTY1LDYgKzY3LDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTVmFs
dWUuaCIKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxl
LmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0yMjQsMTYyICsyMjcsNiBAQCBzdHJ1
Y3QgT3BJbmZvIHsKICAgICB1bnNpZ25lZCBtX3ZhbHVlOwogfTsKIAotdHlwZWRlZiB1aW50OF90
IFByZWRpY3RlZFR5cGU7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0Tm9uZSAg
ID0gMDsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RDZWxsICAgPSAweDAxOwot
c3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdEFycmF5ICA9IDB4MDM7Ci1zdGF0aWMg
Y29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0SW50MzIgID0gMHgwNDsKLXN0YXRpYyBjb25zdCBQ
cmVkaWN0ZWRUeXBlIFByZWRpY3REb3VibGUgPSAweDA4Owotc3RhdGljIGNvbnN0IFByZWRpY3Rl
ZFR5cGUgUHJlZGljdE51bWJlciA9IDB4MGM7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQ
cmVkaWN0Qm9vbGVhbiA9IDB4MTA7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0
VG9wICAgID0gMHgxZjsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFN0cm9uZ1ByZWRpY3Rp
b25UYWcgPSAweDgwOwotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdGlvblRhZ01h
c2sgICAgPSAweDgwOwotCi1lbnVtIFByZWRpY3Rpb25Tb3VyY2UgeyBXZWFrUHJlZGljdGlvbiwg
U3Ryb25nUHJlZGljdGlvbiB9OwotCi1pbmxpbmUgYm9vbCBpc0NlbGxQcmVkaWN0aW9uKFByZWRp
Y3RlZFR5cGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuICh2YWx1ZSAmIFByZWRpY3RDZWxsKSA9PSBQ
cmVkaWN0Q2VsbCAmJiAhKHZhbHVlICYgfihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0aW9uVGFnTWFz
aykpOwotfQotCi1pbmxpbmUgYm9vbCBpc0FycmF5UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZh
bHVlKQotewotICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spID09IFByZWRp
Y3RBcnJheTsKLX0KLQotaW5saW5lIGJvb2wgaXNJbnQzMlByZWRpY3Rpb24oUHJlZGljdGVkVHlw
ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQ
cmVkaWN0SW50MzI7Ci19Ci0KLWlubGluZSBib29sIGlzRG91YmxlUHJlZGljdGlvbihQcmVkaWN0
ZWRUeXBlIHZhbHVlKQotewotICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2sp
ID09IFByZWRpY3REb3VibGU7Ci19Ci0KLWlubGluZSBib29sIGlzTnVtYmVyUHJlZGljdGlvbihQ
cmVkaWN0ZWRUeXBlIHZhbHVlKQotewotICAgIHJldHVybiAhISh2YWx1ZSAmIFByZWRpY3ROdW1i
ZXIpICYmICEodmFsdWUgJiB+KFByZWRpY3ROdW1iZXIgfCBQcmVkaWN0aW9uVGFnTWFzaykpOwot
fQotCi1pbmxpbmUgYm9vbCBpc0Jvb2xlYW5QcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0gUHJlZGljdEJv
b2xlYW47Ci19Ci0KLWlubGluZSBib29sIGlzU3Ryb25nUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBl
IHZhbHVlKQotewotICAgIEFTU0VSVCh2YWx1ZSAhPSAoUHJlZGljdE5vbmUgfCBTdHJvbmdQcmVk
aWN0aW9uVGFnKSk7Ci0gICAgcmV0dXJuICEhKHZhbHVlICYgU3Ryb25nUHJlZGljdGlvblRhZyk7
Ci19Ci0KLSNpZm5kZWYgTkRFQlVHCi1pbmxpbmUgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3Ry
aW5nKFByZWRpY3RlZFR5cGUgdmFsdWUpCi17Ci0gICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbih2
YWx1ZSkpIHsKLSAgICAgICAgc3dpdGNoICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgewot
ICAgICAgICBjYXNlIFByZWRpY3ROb25lOgotICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1i
b3R0b20iOwotICAgICAgICBjYXNlIFByZWRpY3RDZWxsOgotICAgICAgICAgICAgcmV0dXJuICJw
LXN0cm9uZy1jZWxsIjsKLSAgICAgICAgY2FzZSBQcmVkaWN0QXJyYXk6Ci0gICAgICAgICAgICBy
ZXR1cm4gInAtc3Ryb25nLWFycmF5IjsKLSAgICAgICAgY2FzZSBQcmVkaWN0SW50MzI6Ci0gICAg
ICAgICAgICByZXR1cm4gInAtc3Ryb25nLWludDMyIjsKLSAgICAgICAgY2FzZSBQcmVkaWN0RG91
YmxlOgotICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9uZy1kb3VibGUiOwotICAgICAgICBjYXNl
IFByZWRpY3ROdW1iZXI6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLW51bWJlciI7Ci0g
ICAgICAgIGNhc2UgUHJlZGljdEJvb2xlYW46Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25n
LWJvb2xlYW4iOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuICJwLXN0cm9u
Zy10b3AiOwotICAgICAgICB9Ci0gICAgfQotICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICBjYXNl
IFByZWRpY3ROb25lOgotICAgICAgICByZXR1cm4gInAtd2Vhay1ib3R0b20iOwotICAgIGNhc2Ug
UHJlZGljdENlbGw6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWNlbGwiOwotICAgIGNhc2UgUHJl
ZGljdEFycmF5OgotICAgICAgICByZXR1cm4gInAtd2Vhay1hcnJheSI7Ci0gICAgY2FzZSBQcmVk
aWN0SW50MzI6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWludDMyIjsKLSAgICBjYXNlIFByZWRp
Y3REb3VibGU6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWRvdWJsZSI7Ci0gICAgY2FzZSBQcmVk
aWN0TnVtYmVyOgotICAgICAgICByZXR1cm4gInAtd2Vhay1udW1iZXIiOwotICAgIGNhc2UgUHJl
ZGljdEJvb2xlYW46Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWJvb2xlYW4iOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLXRvcCI7Ci0gICAgfQotfQotI2VuZGlmCi0KLWlu
bGluZSBQcmVkaWN0ZWRUeXBlIG1lcmdlUHJlZGljdGlvbnMoUHJlZGljdGVkVHlwZSBsZWZ0LCBQ
cmVkaWN0ZWRUeXBlIHJpZ2h0KQotewotICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkg
PT0gaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSkKLSAgICAgICAgcmV0dXJuIGxlZnQgfCByaWdo
dDsKLSAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpKSB7Ci0gICAgICAgIEFTU0VSVCgh
aXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSk7Ci0gICAgICAgIHJldHVybiBsZWZ0OwotICAgIH0K
LSAgICBBU1NFUlQoIWlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSk7Ci0gICAgQVNTRVJUKGlzU3Ry
b25nUHJlZGljdGlvbihyaWdodCkpOwotICAgIHJldHVybiByaWdodDsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLWlubGluZSBib29sIG1lcmdlUHJlZGljdGlvbihUJiBsZWZ0LCBQcmVkaWN0
ZWRUeXBlIHJpZ2h0KQotewotICAgIFByZWRpY3RlZFR5cGUgbmV3UHJlZGljdGlvbiA9IHN0YXRp
Y19jYXN0PFQ+KG1lcmdlUHJlZGljdGlvbnMoc3RhdGljX2Nhc3Q8UHJlZGljdGVkVHlwZT4obGVm
dCksIHJpZ2h0KSk7Ci0gICAgYm9vbCByZXN1bHQgPSBuZXdQcmVkaWN0aW9uICE9IHN0YXRpY19j
YXN0PFByZWRpY3RlZFR5cGU+KGxlZnQpOwotICAgIGxlZnQgPSBuZXdQcmVkaWN0aW9uOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBQcmVkaWN0ZWRUeXBlIG1ha2VQcmVkaWN0aW9u
KFByZWRpY3RlZFR5cGUgdHlwZSwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCi17Ci0gICAgQVNT
RVJUKCEodHlwZSAmIFN0cm9uZ1ByZWRpY3Rpb25UYWcpKTsKLSAgICBBU1NFUlQoc291cmNlID09
IFN0cm9uZ1ByZWRpY3Rpb24gfHwgc291cmNlID09IFdlYWtQcmVkaWN0aW9uKTsKLSAgICBpZiAo
dHlwZSA9PSBQcmVkaWN0Tm9uZSkKLSAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwotICAgIHJl
dHVybiB0eXBlIHwgKHNvdXJjZSA9PSBTdHJvbmdQcmVkaWN0aW9uID8gU3Ryb25nUHJlZGljdGlv
blRhZyA6IDApOwotfQotCi0jaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQotaW5saW5lIFByZWRp
Y3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBW
YWx1ZVByb2ZpbGUmIHByb2ZpbGUpCi17Ci0gICAgVmFsdWVQcm9maWxlOjpTdGF0aXN0aWNzIHN0
YXRpc3RpY3M7Ci0gICAgcHJvZmlsZS5jb21wdXRlU3RhdGlzdGljcyhnbG9iYWxEYXRhLCBzdGF0
aXN0aWNzKTsKLSAgICAKLSAgICBpZiAoIXN0YXRpc3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0
dXJuIFByZWRpY3ROb25lOwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmludDMycyA9PSBzdGF0
aXN0aWNzLnNhbXBsZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJl
ZGljdEludDMyOwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGlj
cy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RE
b3VibGU7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzICsgc3RhdGlzdGljcy5kb3Vi
bGVzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rp
b25UYWcgfCBQcmVkaWN0TnVtYmVyOwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmFycmF5cyA9
PSBzdGF0aXN0aWNzLnNhbXBsZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFn
IHwgUHJlZGljdEFycmF5OwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmNlbGxzID09IHN0YXRp
c3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVk
aWN0Q2VsbDsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5ib29sZWFucyA9PSBzdGF0aXN0aWNz
LnNhbXBsZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdEJv
b2xlYW47Ci0gICAgCi0gICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0VG9w
OwotfQotI2VuZGlmCi0KIC8vID09PSBOb2RlID09PQogLy8KIC8vIE5vZGUgcmVwcmVzZW50cyBh
IHNpbmdsZSBvcGVyYXRpb24gaW4gdGhlIGRhdGEgZmxvdyBncmFwaC4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJDYWxsRnJhbWUuaCIKKyNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiSklULmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworaW5saW5lIGJvb2wgcHJlZGljdGlvbklzVmFsaWQo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHZhbHVlLCBQcmVkaWN0ZWRUeXBlIHR5
cGUpCit7CisgICAgLy8gdGhpcyB0YWtlcyBpbnRvIGFjY291bnQgb25seSBsb2NhbCB2YXJpYWJs
ZSBwcmVkaWN0aW9ucyB0aGF0IGdldCBlbmZvcmNlZAorICAgIC8vIG9uIFNldExvY2FsLgorICAg
IAorICAgIGlmIChpc0ludDMyUHJlZGljdGlvbih0eXBlKSkKKyAgICAgICAgcmV0dXJuIHZhbHVl
LmlzSW50MzIoKTsKKyAgICAKKyAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24odHlwZSkpCisgICAg
ICAgIHJldHVybiBpc0pTQXJyYXkoZ2xvYmFsRGF0YSwgdmFsdWUpOworICAgIAorICAgIGlmIChp
c0Jvb2xlYW5QcmVkaWN0aW9uKHR5cGUpKQorICAgICAgICByZXR1cm4gdmFsdWUuaXNCb29sZWFu
KCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQqIHByZXBhcmVPU1JFbnRyeShF
eGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQoreworI2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQorICAgIEFTU0VSVChjb2RlQmxvY2st
PmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCkpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmdl
dEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisKKyNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQorICAgIHByaW50ZigiT1NSIGluICVwKCVwKSBmcm9tIGJjIyV1XG4iLCBjb2Rl
QmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgYnl0ZWNvZGVJbmRleCk7CisjZW5kaWYK
KyAgICAKKyAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCk7CisgICAgCisgICAgLy8gVGhlIGNvZGUgYmVsb3cgY2hlY2tzIGlmIGl0IGlzIHNhZmUg
dG8gcGVyZm9ybSBPU1IgZW50cnkuIEl0IG1heSBmaW5kCisgICAgLy8gdGhhdCBpdCBpcyB1bnNh
ZmUgdG8gZG8gc28sIGZvciBhbnkgbnVtYmVyIG9mIHJlYXNvbnMsIHdoaWNoIGFyZSBkb2N1bWVu
dGVkCisgICAgLy8gYmVsb3cuIElmIHRoZSBjb2RlIGRlY2lkZXMgbm90IHRvIE9TUiB0aGVuIGl0
IHJldHVybnMgMCwgYW5kIGl0J3MgdGhlIGNhbGxlcidzCisgICAgLy8gcmVzcG9uc2liaWxpdHkg
dG8gcGF0Y2ggdXAgdGhlIHN0YXRlIGluIHN1Y2ggYSB3YXkgYXMgdG8gZW5zdXJlIHRoYXQgaXQn
cworICAgIC8vIGJvdGggc2FmZSBhbmQgZWZmaWNpZW50IHRvIGNvbnRpbnVlIGV4ZWN1dGluZyBi
YXNlbGluZSBjb2RlIGZvciBub3cuIFRoaXMKKyAgICAvLyBzaG91bGQgYWxtb3N0IGNlcnRhaW5s
eSBpbmNsdWRlIGNhbGxpbmcgZWl0aGVyIGNvZGVCbG9jay0+b3B0aW1pemVBZnRlcldhcm1VcCgp
CisgICAgLy8gb3IgY29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpLgorICAgIAor
ICAgIC8vIDEpIENoZWNrIGlmIHRoZSBERkcgY29kZSBzZXQgYSBjb2RlIG1hcC4gSWYgaXQgZGlk
bid0LCBpdCBtZWFucyB0aGF0IGl0CisgICAgLy8gICAgY2Fubm90IGhhbmRsZSBPU1IgZW50cnku
IFRoaXMgY3VycmVudGx5IG9ubHkgaGFwcGVucyBpZiB3ZSBkaXNhYmxlCisgICAgLy8gICAgZHlu
YW1pYyBzcGVjdWxhdGlvbiB0ZXJtaW5hdGlvbiBhbmQgZW5kIHVwIHdpdGggYSBERkcgY29kZSBi
bG9jayB0aGF0CisgICAgLy8gICAgd2FzIGNvbXBpbGVkIGVudGlyZWx5IHdpdGggdGhlIG5vbi1z
cGVjdWxhdGl2ZSBKSVQuIFRoZSBub24tc3BlY3VsYXRpdmUKKyAgICAvLyAgICBKSVQgZG9lcyBu
b3Qgc3VwcG9ydCBPU1IgZW50cnkgYW5kIHByb2JhYmx5IG5ldmVyIHdpbGwsIHNpbmNlIGl0IGlz
CisgICAgLy8gICAga2luZCBvZiBhIGRlcHJlY2F0ZWQgY29tcGlsZXIgcmlnaHQgbm93LgorICAg
IAorI2lmIEVOQUJMRShEWU5BTUlDX1RFUk1JTkFURV9TUEVDVUxBVElPTikKKyAgICBBU1NFUlQo
Y29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOworI2Vsc2UKKyAgICBpZiAoIWNvZGVCbG9jay0+aml0
Q29kZU1hcCgpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRm
KCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIG9mIGEgbWlzc2luZyBKSVQgY29kZSBtYXAuXG4iKTsK
KyNlbmRpZgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICAvLyAy
KSBWZXJpZnkgcHJlZGljdGlvbnMuIElmIHRoZSBwcmVkaWN0aW9ucyBhcmUgaW5jb25zaXN0ZW50
IHdpdGggdGhlIGFjdHVhbAorICAgIC8vICAgIHZhbHVlcywgdGhlbiBPU1IgZW50cnkgaXMgbm90
IHBvc3NpYmxlIGF0IHRoaXMgdGltZS4gSXQncyB0ZW1wdGluZyB0bworICAgIC8vICAgIGFzc3Vt
ZSB0aGF0IHdlIGNvdWxkIHNvbWVob3cgYXZvaWQgdGhpcyBjYXNlLiBXZSBjYW4gY2VydGFpbmx5
IGF2b2lkIGl0CisgICAgLy8gICAgZm9yIGZpcnN0LXRpbWUgbG9vcCBPU1IgLSB0aGF0IGlzLCBP
U1IgaW50byBhIENvZGVCbG9jayB0aGF0IHdlIGhhdmUganVzdAorICAgIC8vICAgIGNvbXBpbGVk
LiBUaGVuIHdlIGFyZSBhbG1vc3QgZ3VhcmFudGVlZCB0aGF0IGFsbCBvZiB0aGUgcHJlZGljdGlv
bnMgd2lsbAorICAgIC8vICAgIGNoZWNrIG91dC4gSXQgd291bGQgYmUgcHJldHR5IGVhc3kgdG8g
bWFrZSB0aGF0IGEgaGFyZCBndWFyYW50ZWUuIEJ1dAorICAgIC8vICAgIHRoZW4gdGhlcmUgd291
bGQgc3RpbGwgYmUgdGhlIGNhc2Ugd2hlcmUgdHdvIGNhbGwgZnJhbWVzIHdpdGggdGhlIHNhbWUK
KyAgICAvLyAgICBiYXNlbGluZSBDb2RlQmxvY2sgYXJlIG9uIHRoZSBzdGFjayBhdCB0aGUgc2Ft
ZSB0aW1lLiBUaGUgdG9wIG9uZQorICAgIC8vICAgIHRyaWdnZXJzIGNvbXBpbGF0aW9uIGFuZCBP
U1IuIEluIHRoYXQgY2FzZSwgd2UgbWF5IG5vIGxvbmdlciBoYXZlCisgICAgLy8gICAgYWNjdXJh
dGUgdmFsdWUgcHJvZmlsZXMgZm9yIHRoZSBvbmUgZGVlcGVyIGluIHRoZSBzdGFjay4gSGVuY2Us
IHdoZW4gd2UKKyAgICAvLyAgICBwb3AgaW50byB0aGUgQ29kZUJsb2NrIHRoYXQgaXMgZGVlcGVy
IG9uIHRoZSBzdGFjaywgd2UgbWlnaHQgT1NSIGFuZAorICAgIC8vICAgIHJlYWxpemUgdGhhdCB0
aGUgcHJlZGljdGlvbnMgYXJlIHdyb25nLiBQcm9iYWJseSwgaW4gbW9zdCBjYXNlcywgdGhpcyBp
cworICAgIC8vICAgIGp1c3QgYW4gYW5vbWFseSBpbiB0aGUgc2Vuc2UgdGhhdCB0aGUgb2xkZXIg
Q29kZUJsb2NrIHNpbXBseSB3ZW50IG9mZgorICAgIC8vICAgIGludG8gYSBsZXNzLWxpa2VseSBw
YXRoLiBTbywgdGhlIHdpc2VzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIHNpbXBseSBub3QKKyAg
ICAvLyAgICBPU1IgYXQgdGhpcyB0aW1lLgorICAgIAorICAgIFByZWRpY3Rpb25UcmFja2VyKiBw
cmVkaWN0aW9ucyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5wcmVkaWN0aW9ucygpOworICAgIAorICAg
IGlmIChwcmVkaWN0aW9ucy0+bnVtYmVyT2ZBcmd1bWVudHMoKSA+IGV4ZWMtPmFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7
CisgICAgICAgIGlmICghcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+YXJndW1l
bnQoaSAtIDEpLCBwcmVkaWN0aW9ucy0+Z2V0QXJndW1lbnRQcmVkaWN0aW9uKGkpKSkgeworI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFp
bGVkIGJlY2F1c2UgYXJndW1lbnQgJXUgaXMgJXMsIGV4cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+
YXJndW1lbnQoaSAtIDEpLmRlc2NyaXB0aW9uKCksIHByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0
aW9ucy0+Z2V0QXJndW1lbnRQcmVkaWN0aW9uKGkpKSk7CisjZW5kaWYKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRv
IGtub3cgaWYgYXQgYW4gT1NSIGVudHJ5LCBhIHZhcmlhYmxlIGlzIGxpdmUuIElmIGl0IGlzbid0
CisgICAgLy8gdGhlbiB3ZSBzaG91bGRuJ3QgdHJ5IHRvIHZlcmlmeSBpdHMgcHJlZGljdGlvbi4K
KyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGljdGlvbnMtPm51bWJlck9m
VmFyaWFibGVzKCk7ICsraSkgeworICAgICAgICBpZiAoIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2Jh
bERhdGEsIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbnMtPmdldFBy
ZWRpY3Rpb24oaSkpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgICAg
IHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAldSBpcyAlcywgZXhwZWN0
ZWQgJXMuXG4iLCBpLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCkuZGVzY3JpcHRpb24o
KSwgcHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkpKSk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IC8vIDMpIENoZWNrIHRoZSBzdGFjayBoZWlnaHQuIFRoZSBERkcgSklUIG1heSByZXF1aXJlIGEg
dGFsbGVyIHN0YWNrIHRoYW4gdGhlCisgICAgLy8gICAgYmFzZWxpbmUgSklULCBpbiBzb21lIGNh
c2VzLiBJZiB3ZSBjYW4ndCBncm93IHRoZSBzdGFjaywgdGhlbiBkb24ndCBkbworICAgIC8vICAg
IE9TUiByaWdodCBub3cuIFRoYXQncyB0aGUgb25seSBvcHRpb24gd2UgaGF2ZSB1bmxlc3Mgd2Ug
d2FudCBiYXNpYyBibG9jaworICAgIC8vICAgIGJvdW5kYXJpZXMgdG8gc3RhcnQgdGhyb3dpbmcg
UmFuZ2VFcnJvcnMuIEFsdGhvdWdoIHRoYXQgd291bGQgYmUgcG9zc2libGUsCisgICAgLy8gICAg
aXQgc2VlbXMgc2lsbHk6IHlvdSdkIGJlIGRpdmVydGluZyB0aGUgcHJvZ3JhbSB0byBlcnJvciBo
YW5kbGluZyB3aGVuIGl0CisgICAgLy8gICAgd291bGQgaGF2ZSBvdGhlcndpc2UganVzdCBrZXB0
IHJ1bm5pbmcgYWxiZWl0IGxlc3MgcXVpY2tseS4KKyAgICAKKyAgICBpZiAoIWdsb2JhbERhdGEt
PmludGVycHJldGVyLT5yZWdpc3RlckZpbGUoKS5ncm93KCZleGVjLT5yZWdpc3RlcnMoKVtjb2Rl
QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzXSkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQorICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugc3RhY2sgZ3Jvd3Ro
IGZhaWxlZC4uXG4iKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisj
aWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIiAgICBPU1Igc2hvdWxkIHN1
Y2NlZWQuXG4iKTsKKyNlbmRpZgorICAgIAorICAgIC8vIDQpIEZpeCB0aGUgY2FsbCBmcmFtZS4K
KyAgICAKKyAgICBleGVjLT5zZXRDb2RlQmxvY2soY29kZUJsb2NrKTsKKyAgICAKKyAgICAvLyA1
KSBGaW5kIGFuZCByZXR1cm4gdGhlIGRlc3RpbmF0aW9uIG1hY2hpbmUgY29kZSBhZGRyZXNzLiBU
aGUgREZHIHN0b3JlcworICAgIC8vICAgIHRoZSBtYWNoaW5lIGNvZGUgb2Zmc2V0cyBvZiBPU1Ig
dGFyZ2V0cyBpbiBhIENvbXBhY3RKSVRDb2RlTWFwLgorICAgIC8vICAgIERlY29kaW5nIGl0IGlz
IG5vdCBzdXBlciBlZmZpY2llbnQsIGJ1dCB3ZSBleHBlY3QgdGhhdCBPU1IgZW50cnkKKyAgICAv
LyAgICBoYXBwZW5zIHN1ZmZpY2llbnRseSByYXJlbHksIGFuZCB0aGF0IE9TUiBlbnRyeXBvaW50
cyBhcmUgc3VmZmljaWVudGx5CisgICAgLy8gICAgZmV3LCB0aGF0IHRoaXMgd29uJ3QgaHVydCB0
aHJvdWdocHV0LiBOb3RlIHRoYXQgdGhlIG9ubHkgcmVhbAorICAgIC8vICAgIHJlYXNvbiB3aHkg
d2UgdXNlIGEgQ29tcGFjdEpJVENvZGVNYXAgaXMgdG8gYXZvaWQgaGF2aW5nIHRvIGludHJvZHVj
ZQorICAgIC8vICAgIHlldCBhbm90aGVyIGRhdGEgc3RydWN0dXJlIGZvciBtYXBwaW5nIGJldHdl
ZW4gYnl0ZWNvZGUgaW5kaWNlcyBhbmQKKyAgICAvLyAgICBtYWNoaW5lIGNvZGUgb2Zmc2V0cy4K
KyAgICAKKyAgICBDb21wYWN0SklUQ29kZU1hcDo6RGVjb2RlciBkZWNvZGVyKGNvZGVCbG9jay0+
aml0Q29kZU1hcCgpKTsKKyAgICB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICB3aGlsZSAoZGVjb2Rlci5udW1iZXJP
ZkVudHJpZXNSZW1haW5pbmcoKSkgeworICAgICAgICB1bnNpZ25lZCBjdXJyZW50Qnl0ZWNvZGVJ
bmRleDsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudE1hY2hpbmVDb2RlT2Zmc2V0OworICAgICAg
ICBkZWNvZGVyLnJlYWQoY3VycmVudEJ5dGVjb2RlSW5kZXgsIGN1cnJlbnRNYWNoaW5lQ29kZU9m
ZnNldCk7CisgICAgICAgIGlmIChjdXJyZW50Qnl0ZWNvZGVJbmRleCA9PSBieXRlY29kZUluZGV4
KSB7CisgICAgICAgICAgICBtYWNoaW5lQ29kZU9mZnNldCA9IGN1cnJlbnRNYWNoaW5lQ29kZU9m
ZnNldDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFT
U0VSVChtYWNoaW5lQ29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpOworICAgIAorICAgIHZvaWQqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFy
dCgpKSArIG1hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQorICAgIHByaW50ZigiICAgIE9TUiByZXR1cm5pbmcgbWFjaGluZSBjb2RlIGFkZHJlc3Mg
JXAuXG4iLCByZXN1bHQpOworI2VuZGlmCisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNl
IC8vIEVOQUJMRShERkdfT1NSX0VOVFJZKQorICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBV
TlVTRURfUEFSQU0oY29kZUJsb2NrKTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7
CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSRW50cnlf
aAorI2RlZmluZSBERkdPU1JFbnRyeV9oCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBFeGVj
U3RhdGU7CitjbGFzcyBDb2RlQmxvY2s7CisKK25hbWVzcGFjZSBERkcgeworCisjaWYgRU5BQkxF
KERGR19KSVQpCit2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisjZWxzZQoraW5saW5lIHZvaWQqIHByZXBhcmVPU1JF
bnRyeShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCkgeyByZXR1cm4gMDsgfQorI2Vu
ZGlmCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIERGR09TUkVudHJ5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uVHJhY2tl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blRyYWNrZXIuaAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25UcmFja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBE
RkdQcmVkaWN0aW9uVHJhY2tlcl9oCi0jZGVmaW5lIERGR1ByZWRpY3Rpb25UcmFja2VyX2gKLQot
I2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZHTm9kZS5oIgotCi1uYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLS8vIGhlbHBlciBmdW5jdGlvbiB0byBkaXN0aW5ndWlz
aCB2YXJzICYgdGVtcG9yYXJpZXMgZnJvbSBhcmd1bWVudHMuCi1pbmxpbmUgYm9vbCBvcGVyYW5k
SXNBcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCA8IDA7IH0KLQotc3RydWN0
IFByZWRpY3Rpb25TbG90IHsKLXB1YmxpYzoKLSAgICBQcmVkaWN0aW9uU2xvdCgpCi0gICAgICAg
IDogbV92YWx1ZShQcmVkaWN0Tm9uZSkKLSAgICB7Ci0gICAgfQotICAgIFByZWRpY3RlZFR5cGUg
bV92YWx1ZTsKLX07Ci0KLWNsYXNzIFByZWRpY3Rpb25UcmFja2VyIHsKLXB1YmxpYzoKLSAgICBQ
cmVkaWN0aW9uVHJhY2tlcigpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBQcmVkaWN0aW9uVHJh
Y2tlcih1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bVZhcmlhYmxlcykKLSAgICAg
ICAgOiBtX2FyZ3VtZW50cyhudW1Bcmd1bWVudHMpCi0gICAgICAgICwgbV92YXJpYWJsZXMobnVt
VmFyaWFibGVzKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBpbml0aWFsaXplU2ltaWxh
clRvKGNvbnN0IFByZWRpY3Rpb25UcmFja2VyJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIG1fYXJn
dW1lbnRzLnJlc2l6ZShvdGhlci5udW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICAgICAgbV92YXJp
YWJsZXMucmVzaXplKG90aGVyLm51bWJlck9mVmFyaWFibGVzKCkpOwotICAgIH0KLSAgICAKLSAg
ICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5z
aXplKCk7IH0KLSAgICBzaXplX3QgbnVtYmVyT2ZWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBt
X3ZhcmlhYmxlcy5zaXplKCk7IH0KLSAgICAKLSAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4Rm9y
T3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZCArIG1fYXJndW1lbnRz
LnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgfQotCi0gICAgYm9v
bCBwcmVkaWN0QXJndW1lbnQodW5zaWduZWQgYXJndW1lbnQsIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCi0gICAgewotICAgICAgICByZXR1cm4gbWVy
Z2VQcmVkaWN0aW9uKG1fYXJndW1lbnRzW2FyZ3VtZW50XS5tX3ZhbHVlLCBtYWtlUHJlZGljdGlv
bihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBwcmVkaWN0KGlu
dCBvcGVyYW5kLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291
cmNlKQotICAgIHsKLSAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAg
ICAgICAgICAgcmV0dXJuIHByZWRpY3RBcmd1bWVudChhcmd1bWVudEluZGV4Rm9yT3BlcmFuZChv
cGVyYW5kKSwgcHJlZGljdGlvbiwgc291cmNlKTsKLSAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVy
YW5kID49IG1fdmFyaWFibGVzLnNpemUoKSkgewotICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmQg
Pj0gMCk7Ci0gICAgICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUob3BlcmFuZCArIDEpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdmFyaWFi
bGVzW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkp
OwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3RHbG9iYWxWYXIodW5zaWduZWQgdmFyTnVt
YmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNlKQot
ICAgIHsKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRv
ciBpdGVyID0gbV9nbG9iYWxWYXJzLmZpbmQodmFyTnVtYmVyICsgMSk7Ci0gICAgICAgIGlmIChp
dGVyID09IG1fZ2xvYmFsVmFycy5lbmQoKSkgewotICAgICAgICAgICAgUHJlZGljdGlvblNsb3Qg
cHJlZGljdGlvblNsb3Q7Ci0gICAgICAgICAgICBib29sIHJlc3VsdCA9IG1lcmdlUHJlZGljdGlv
bihwcmVkaWN0aW9uU2xvdC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBzb3Vy
Y2UpKTsKLSAgICAgICAgICAgIG1fZ2xvYmFsVmFycy5hZGQodmFyTnVtYmVyICsgMSwgcHJlZGlj
dGlvblNsb3QpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGl0ZXItPnNlY29uZC5tX3ZhbHVlLCBtYWtlUHJlZGlj
dGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBwcmVkaWN0
KE5vZGUmIG5vZGUsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBz
b3VyY2UpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAgICAgICAgY2FzZSBH
ZXRMb2NhbDoKLSAgICAgICAgICAgIHJldHVybiBwcmVkaWN0KG5vZGUubG9jYWwoKSwgcHJlZGlj
dGlvbiwgc291cmNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEdsb2Jh
bFZhcjoKLSAgICAgICAgICAgIHJldHVybiBwcmVkaWN0R2xvYmFsVmFyKG5vZGUudmFyTnVtYmVy
KCksIHByZWRpY3Rpb24sIHNvdXJjZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHZXRCeUlkOgotICAgICAgICBjYXNlIEdldE1ldGhvZDoKLSAgICAgICAgY2FzZSBHZXRCeVZh
bDoKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVjdDoKLSAgICAgICAg
ICAgIHJldHVybiBub2RlLnByZWRpY3QocHJlZGljdGlvbiwgc291cmNlKTsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICBQcmVkaWN0ZWRUeXBlIGdldEFyZ3VtZW50UHJlZGljdGlvbih1bnNpZ25lZCBhcmd1bWVu
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1thcmd1bWVudF0ubV92YWx1ZTsK
LSAgICB9Ci0KLSAgICBQcmVkaWN0ZWRUeXBlIGdldFByZWRpY3Rpb24oaW50IG9wZXJhbmQpCi0g
ICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAg
ICByZXR1cm4gZ2V0QXJndW1lbnRQcmVkaWN0aW9uKGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKG9w
ZXJhbmQpKTsKLSAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kIDwgbV92YXJpYWJsZXMuc2l6
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzW29wZXJhbmRdLm1fdmFsdWU7Ci0g
ICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAgICB9Ci0gICAgCi0gICAgUHJlZGljdGVkVHlw
ZSBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKHVuc2lnbmVkIHZhck51bWJlcikKLSAgICB7Ci0gICAg
ICAgIEhhc2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90Pjo6aXRlcmF0b3IgaXRlciA9IG1f
Z2xvYmFsVmFycy5maW5kKHZhck51bWJlciArIDEpOwotICAgICAgICBpZiAoaXRlciA9PSBtX2ds
b2JhbFZhcnMuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAgICAg
IHJldHVybiBpdGVyLT5zZWNvbmQubV92YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgUHJlZGljdGVk
VHlwZSBnZXRQcmVkaWN0aW9uKE5vZGUmIG5vZGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG5v
ZGUub3ApIHsKLSAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIHJldHVybiBnZXRQ
cmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7Ci0gICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAg
ICAgICAgICAgcmV0dXJuIGdldEdsb2JhbFZhclByZWRpY3Rpb24obm9kZS52YXJOdW1iZXIoKSk7
Ci0gICAgICAgIGNhc2UgR2V0QnlJZDoKLSAgICAgICAgY2FzZSBHZXRNZXRob2Q6Ci0gICAgICAg
IGNhc2UgR2V0QnlWYWw6Ci0gICAgICAgIGNhc2UgQ2FsbDoKLSAgICAgICAgY2FzZSBDb25zdHJ1
Y3Q6Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5nZXRQcmVkaWN0aW9uKCk7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi1wcml2YXRlOgotICAgIFZlY3RvcjxQcmVkaWN0aW9uU2xvdCwgMTY+IG1fYXJndW1l
bnRzOwotICAgIFZlY3RvcjxQcmVkaWN0aW9uU2xvdCwgMTY+IG1fdmFyaWFibGVzOwotICAgIEhh
c2hNYXA8dW5zaWduZWQsIFByZWRpY3Rpb25TbG90PiBtX2dsb2JhbFZhcnM7Ci19OwotCi19IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2Vu
ZGlmIC8vIERGR1ByZWRpY3Rpb25UcmFja2VyX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MywxNCArMTAzLDE0IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlQobV9ncmFwaFtu
b2RlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBERkc6Om1l
cmdlUHJlZGljdGlvbihtX3VzZXNbbm9kZUluZGV4XSwgcHJlZGljdGlvbik7CisgICAgICAgIHJl
dHVybiBKU0M6Om1lcmdlUHJlZGljdGlvbihtX3VzZXNbbm9kZUluZGV4XSwgcHJlZGljdGlvbik7
CiAgICAgfQogICAgIAogICAgIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5o
YXNSZXN1bHQoKSk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gREZHOjptZXJnZVByZWRpY3Rp
b24obV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0sIHByZWRpY3Rpb24pOworICAgICAgICBy
ZXR1cm4gSlNDOjptZXJnZVByZWRpY3Rpb24obV9wcmVkaWN0aW9uc1ttX2NvbXBpbGVJbmRleF0s
IHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKICAgICB2b2lkIHByb3BhZ2F0ZU5vZGUoTm9kZSYg
bm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDk0LDYgKzE0OTQsMTAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogewogICAgIEFTU0VS
VChtX2NvbXBpbGVPa2F5KTsKICAgICBBU1NFUlQobV9jb21waWxlSW5kZXggPT0gYmxvY2suYmVn
aW4pOworICAgIAorICAgIGlmIChibG9jay5pc09TUlRhcmdldCkKKyAgICAgICAgbV9qaXQubm90
aWNlT1NSRW50cnkoYmxvY2spOworICAgIAogICAgIG1fYmxvY2tIZWFkc1ttX2Jsb2NrXSA9IG1f
aml0LmxhYmVsKCk7CiAjaWYgRU5BQkxFKERGR19KSVRfQlJFQUtfT05fRVZFUllfQkxPQ0spCiAg
ICAgbV9qaXQuYnJlYWtwb2ludCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
b21wYWN0SklUQ29kZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ29tcGFjdEpJVENvZGVNYXAuaAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDIy
ICs4NywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CiAgICAg
fQogICAgIAotICAgIHZvaWQgZGVjb2RlKFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+
JiByZXN1bHQpIGNvbnN0CisgICAgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHVuc2lnbmVkIHByZXZpb3VzQnl0ZWNvZGVJbmRleCA9IDA7Ci0gICAgICAg
IHVuc2lnbmVkIHByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQgPSAwOwotICAgICAgICAKLSAgICAg
ICAgcmVzdWx0LnJlc2l6ZShtX251bWJlck9mRW50cmllcyk7Ci0gICAgICAgIHVuc2lnbmVkIGog
PSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1iZXJPZkVudHJpZXM7
ICsraSkgewotICAgICAgICAgICAgcHJldmlvdXNCeXRlY29kZUluZGV4ICs9IGRlY29kZU51bWJl
cihqKTsKLSAgICAgICAgICAgIHByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQgKz0gZGVjb2RlTnVt
YmVyKGopOwotICAgICAgICAgICAgcmVzdWx0W2ldLm1fYnl0ZWNvZGVJbmRleCA9IHByZXZpb3Vz
Qnl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAgIHJlc3VsdFtpXS5tX21hY2hpbmVDb2RlT2Zmc2V0
ID0gcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldDsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQo
aiA9PSBtX3NpemUpOworICAgICAgICByZXR1cm4gbV9udW1iZXJPZkVudHJpZXM7CiAgICAgfQog
ICAgIAorICAgIHZvaWQgZGVjb2RlKFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBy
ZXN1bHQpIGNvbnN0OworICAgIAogcHJpdmF0ZToKICAgICBDb21wYWN0SklUQ29kZU1hcCh1aW50
OF90KiBidWZmZXIsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIG51bWJlck9mRW50cmllcykKICAg
ICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCkBAIC0xNjIsMTEgKzE1MywzOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHVuc2lnbmVkIG1fcHJldmlvdXNCeXRlY29kZUluZGV4OwogICAgICAgICB1bnNpZ25l
ZCBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQ7CiAgICAgfTsKKyAgICAKKyAgICBjbGFzcyBE
ZWNvZGVyIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGVjb2Rlcik7CisgICAgcHVi
bGljOgorICAgICAgICBEZWNvZGVyKGNvbnN0IENvbXBhY3RKSVRDb2RlTWFwKiBqaXRDb2RlTWFw
KTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mRW50cmllc1JlbWFpbmluZygp
IGNvbnN0OworICAgICAgICB2b2lkIHJlYWQodW5zaWduZWQmIGJ5dGVjb2RlSW5kZXgsIHVuc2ln
bmVkJiBtYWNoaW5lQ29kZU9mZnNldCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IGNvbnN0IENvbXBhY3RKSVRDb2RlTWFwKiBtX2ppdENvZGVNYXA7CisgICAgICAgIHVuc2lnbmVk
IG1fcHJldmlvdXNCeXRlY29kZUluZGV4OworICAgICAgICB1bnNpZ25lZCBtX3ByZXZpb3VzTWFj
aGluZUNvZGVPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWlu
aW5nOworICAgICAgICB1bnNpZ25lZCBtX2J1ZmZlckluZGV4OworICAgIH07CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIEVuY29kZXI7CisgICAgZnJpZW5kIGNsYXNzIERlY29kZXI7CiB9
OwogCitpbmxpbmUgdm9pZCBDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlKFZlY3RvcjxCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQ+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgRGVjb2RlciBkZWNvZGVy
KHRoaXMpOworICAgIHJlc3VsdC5yZXNpemUoZGVjb2Rlci5udW1iZXJPZkVudHJpZXNSZW1haW5p
bmcoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkK
KyAgICAgICAgZGVjb2Rlci5yZWFkKHJlc3VsdFtpXS5tX2J5dGVjb2RlSW5kZXgsIHJlc3VsdFtp
XS5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAKKyAgICBBU1NFUlQoIWRlY29kZXIubnVtYmVy
T2ZFbnRyaWVzUmVtYWluaW5nKCkpOworfQorCiBpbmxpbmUgQ29tcGFjdEpJVENvZGVNYXA6OkVu
Y29kZXI6OkVuY29kZXIoKQogICAgIDogbV9idWZmZXIoMCkKICAgICAsIG1fc2l6ZSgwKQpAQCAt
MjQ5LDYgKzI2NywzMiBAQCBpbmxpbmUgdm9pZCBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6
CiAgICAgfQogfQogCitpbmxpbmUgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29kZXI6OkRlY29kZXIo
Y29uc3QgQ29tcGFjdEpJVENvZGVNYXAqIGppdENvZGVNYXApCisgICAgOiBtX2ppdENvZGVNYXAo
aml0Q29kZU1hcCkKKyAgICAsIG1fcHJldmlvdXNCeXRlY29kZUluZGV4KDApCisgICAgLCBtX3By
ZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQoMCkKKyAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWlu
aW5nKGppdENvZGVNYXAtPm1fbnVtYmVyT2ZFbnRyaWVzKQorICAgICwgbV9idWZmZXJJbmRleCgw
KQoreworfQorCitpbmxpbmUgdW5zaWduZWQgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29kZXI6Om51
bWJlck9mRW50cmllc1JlbWFpbmluZygpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbnVtYmVyT2ZF
bnRyaWVzUmVtYWluaW5nIHx8IG1fYnVmZmVySW5kZXggPT0gbV9qaXRDb2RlTWFwLT5tX3NpemUp
OworICAgIHJldHVybiBtX251bWJlck9mRW50cmllc1JlbWFpbmluZzsKK30KKworaW5saW5lIHZv
aWQgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29kZXI6OnJlYWQodW5zaWduZWQmIGJ5dGVjb2RlSW5k
ZXgsIHVuc2lnbmVkJiBtYWNoaW5lQ29kZU9mZnNldCkKK3sKKyAgICBBU1NFUlQobnVtYmVyT2ZF
bnRyaWVzUmVtYWluaW5nKCkpOworICAgIAorICAgIG1fcHJldmlvdXNCeXRlY29kZUluZGV4ICs9
IG1faml0Q29kZU1hcC0+ZGVjb2RlTnVtYmVyKG1fYnVmZmVySW5kZXgpOworICAgIG1fcHJldmlv
dXNNYWNoaW5lQ29kZU9mZnNldCArPSBtX2ppdENvZGVNYXAtPmRlY29kZU51bWJlcihtX2J1ZmZl
ckluZGV4KTsKKyAgICBieXRlY29kZUluZGV4ID0gbV9wcmV2aW91c0J5dGVjb2RlSW5kZXg7Cisg
ICAgbWFjaGluZUNvZGVPZmZzZXQgPSBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQ7CisgICAg
bV9udW1iZXJPZkVudHJpZXNSZW1haW5pbmctLTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBDb21wYWN0SklUQ29kZU1hcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSw4IEBAIHZvaWQgSklUOjplbWl0T3B0
aW1pemF0aW9uQ2hlY2soT3B0aW1pemEKICAgICAKICAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJy
YW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNo
ZWNrID8gMSA6IDMwKSwgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+bV9leGVjdXRlQ291
bnRlcikpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGtpbmQgPT0gTG9vcE9wdGlt
aXphdGlvbkNoZWNrID8gY3RpX29wdGltaXplX2Zyb21fbG9vcCA6IGN0aV9vcHRpbWl6ZV9mcm9t
X3JldCk7CisgICAgaWYgKGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrKQorICAgICAgICBz
dHViQ2FsbC5hZGRBcmd1bWVudChJbW0zMihtX2J5dGVjb2RlT2Zmc2V0KSk7CiAgICAgc3R1YkNh
bGwuY2FsbCgpOwogICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOwogfQpAQCAtMTE1LDggKzEx
Nyw2IEBAIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKICAgICBzdHViQ2FsbC5jYWxsKHRp
bWVvdXRDaGVja1JlZ2lzdGVyKTsKICAgICBzdHViQ2FsbC5nZXRBcmd1bWVudCgwLCByZWdUMSwg
cmVnVDApOyAvLyByZWxvYWQgbGFzdCByZXN1bHQgcmVnaXN0ZXJzLgogICAgIHNraXBUaW1lb3V0
LmxpbmsodGhpcyk7Ci0gICAgCi0gICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKExvb3BPcHRpbWl6
YXRpb25DaGVjayk7CiB9CiAjZWxzZQogdm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQpAQCAt
MTI2LDggKzEyNiw2IEBAIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKICAgICBza2lwVGlt
ZW91dC5saW5rKHRoaXMpOwogCiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwotICAgIAot
ICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhMb29wT3B0aW1pemF0aW9uQ2hlY2spOwogfQogI2Vu
ZGlmCiAKQEAgLTI4Myw2ICsyODEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIERFRklORV9PUChvcF9qdHJ1ZSkKICAgICAgICAgREVGSU5FX09QKG9wX2xv
YWRfdmFyYXJncykKICAgICAgICAgREVGSU5FX09QKG9wX2xvb3ApCisgICAgICAgIERFRklORV9P
UChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9PUChvcF9sb29wX2lmX2xlc3MpCiAgICAg
ICAgIERFRklORV9PUChvcF9sb29wX2lmX2xlc3NlcSkKICAgICAgICAgREVGSU5FX09QKG9wX2xv
b3BfaWZfZ3JlYXRlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gOTQ5
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoSklUKQogCisvLyBWZXJib3NlIGxvZ2dpbmcg
Zm9yIE9TUi1yZWxhdGVkIGNvZGUuCisjZGVmaW5lIEVOQUJMRV9KSVRfVkVSQk9TRV9PU1IgMAor
CiAvLyBXZSd2ZSBydW4gaW50byBzb21lIHByb2JsZW1zIHdoZXJlIGNoYW5naW5nIHRoZSBzaXpl
IG9mIHRoZSBjbGFzcyBKSVQgbGVhZHMgdG8KIC8vIHBlcmZvcm1hbmNlIGZsdWN0dWF0aW9ucy4g
IFRyeSBmb3JjaW5nIGFsaWdubWVudCBpbiBhbiBhdHRlbXB0IHRvIHN0YWJhbGl6ZSB0aGlzLgog
I2lmIENPTVBJTEVSKEdDQykKQEAgLTc5Myw2ICs3OTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2p0cnVlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9sb2FkX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xv
b3AoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2xvb3BfaGludChJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9vcF9pZl9sZXNzKEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb29wX2lmX2xlc3NlcShJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfbG9vcF9pZl9ncmVhdGVyKEluc3RydWN0aW9uKik7CkBAIC0xMDY2
LDYgKzEwNzAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVtaXRfb3Bfam1wKGN1cnJl
bnRJbnN0cnVjdGlvbik7CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQgSklUOjplbWl0X29wX2xv
b3BfaGludChJbnN0cnVjdGlvbiopCisgICAgeworICAgICAgICBlbWl0T3B0aW1pemF0aW9uQ2hl
Y2soTG9vcE9wdGltaXphdGlvbkNoZWNrKTsKKyAgICB9CisKICAgICBpbmxpbmUgdm9pZCBKSVQ6
OmVtaXRfb3BfbG9vcF9pZl90cnVlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgewogICAgICAgICBlbWl0VGltZW91dENoZWNrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkhlYXAuaCIKKyNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVscGVycy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5o
IgpAQCAtMTgyMywxMCArMTgyNCw0MiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRp
bWl6ZV9mcm9tCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFt
ZTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAg
ICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsK
LQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIo
KTsKKyAgICAKICAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6
ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZyb20gbG9vcCBmYWls
ZWQuXG4iKTsKKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpID09IGNvZGVC
bG9jaykgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiT3B0
aW1pemluZyAlcCBmcm9tIGxvb3AgZmFpbGVkLlxuIiwgY29kZUJsb2NrKTsKKyNlbmRpZgorCisg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVCk7CisgICAgICAgIGNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVC
bG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKKyAgICBBU1NFUlQob3B0aW1pemVkQ29k
ZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICAKKyAgICBpZiAo
dm9pZCogYWRkcmVzcyA9IERGRzo6cHJlcGFyZU9TUkVudHJ5KGNhbGxGcmFtZSwgb3B0aW1pemVk
Q29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CisgICAgICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9tIGxvb3Agc3VjY2VlZGVkLCBwZXJm
b3JtaW5nIE9TUi5cbiIsIGNvZGVCbG9jayk7CisjZW5kaWYKKworICAgICAgICBjb2RlQmxvY2st
Pm9wdGltaXplU29vbigpOworICAgICAgICBTVFVCX1NFVF9SRVRVUk5fQUREUkVTUyhhZGRyZXNz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQorICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9tIGxvb3Agc3VjY2VlZGVkLCBPU1Ig
ZmFpbGVkLlxuIiwgY29kZUJsb2NrKTsKKyNlbmRpZgorCisgICAgLy8gT1NSIGZhaWxlZCB0aGlz
IHRpbWUsIGJ1dCBpdCBtaWdodCBzdWNjZWVkIG5leHQgdGltZSEgIExldCB0aGUgY29kZSBydW4g
YSBiaXQKKyAgICAvLyBsb25nZXIgYW5kIHRoZW4gdHJ5IGFnYWluLgorICAgIGNvZGVCbG9jay0+
b3B0aW1pemVBZnRlcldhcm1VcCgpOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBv
cHRpbWl6ZV9mcm9tX3JldCkKQEAgLTE4NDAsNiArMTg3MywyNCBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAgSlNPYmplY3QqIGVycm9yID0gY29kZUJsb2Nr
LT5jb21waWxlT3B0aW1pemVkKGNhbGxGcmFtZSwgc2NvcGVDaGFpbik7CiAgICAgaWYgKGVycm9y
KQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlv
biBmcm9tIHJldCBmYWlsZWQuXG4iKTsKKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNl
bWVudCgpID09IGNvZGVCbG9jaykgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAg
ICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9tIHJldHVybiBmYWlsZWQuXG4iLCBjb2RlQmxv
Y2spOworI2VuZGlmCisKKyAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09
IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgY29kZUJsb2NrLT5kb250T3B0aW1pemVB
bnl0aW1lU29vbigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFTU0VSVChj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQp
OworCisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIk9wdGltaXppbmcg
JXAgZnJvbSByZXR1cm4gc3VjY2VlZGVkLlxuIiwgY29kZUJsb2NrKTsKKyNlbmRpZgorICAgIAor
ICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9O
KEVuY29kZWRKU1ZhbHVlLCBvcF9pbnN0YW5jZW9mKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk0OTk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3MSw3ICsxNzEsNiBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5h
CiAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYWxyZWFkeSBhbiBhbHRlcm5hdGl2ZSBwaWVj
ZSBvZiBjb2RlIGNvbXBpbGVkIHdpdGggYSBkaWZmZXJlbnQKICAgICAgICAgICAgICAgICAvLyBK
SVQsIHNvIHdlIGNhbiBzaWxlbnRseSBmYWlsLgogICAgICAgICAgICAgICAgIG1fZXZhbENvZGVC
bG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RXZhbENvZGVCbG9jaz4obV9ldmFsQ29kZUJsb2Nr
LT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2Nr
LT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGls
ZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwgbV9ldmFsQ29kZUJsb2NrLmdldCgpKTsKQEAg
LTI5MSw3ICsyOTAsNiBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRl
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpKSB7CiAgICAgICAgICAgICAgICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gc3Rh
dGljX3BvaW50ZXJfY2FzdDxQcm9ncmFtQ29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2stPnJl
bGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAgICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2st
PmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklUOjpjb21waWxl
KHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpOwpA
QCAtNDE3LDcgKzQxNSw2IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVG
b3IKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNhbGwt
PmFsdGVybmF0aXZlKCkpIHsKICAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBz
dGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0aW9uQ29kZUJsb2NrPihtX2NvZGVCbG9ja0ZvckNhbGwt
PnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNh
bGwtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CiAgICAgICAgICAgICAgICAgbV9zeW1ib2xU
YWJsZSA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+c2hhcmVkU3ltYm9sVGFibGUoKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KQEAgLTQ5NCw3ICs0OTEsNiBAQCBKU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkpIHsK
ICAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IHN0YXRpY19wb2ludGVy
X2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5yZWxlYXNl
QWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAgICAgICAgICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qt
PmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CiAgICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJs
ZSA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5zaGFyZWRTeW1ib2xUYWJsZSgpOwogICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTk2NSw3ICs5NjUsNyBAQAogI2Vu
ZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OKQotI2RlZmluZSBF
TkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OIDAKKyNkZWZpbmUgRU5BQkxFX1RJRVJFRF9DT01QSUxB
VElPTiAxCiAjZW5kaWYKIAogLyogQ3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgZm9yIEpTVkFM
VUU2NCwgb25seSB0ZXN0ZWQgb24gUExBVEZPUk0oTUFDKSAqLwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107126</attachid>
            <date>2011-09-12 19:09:19 -0700</date>
            <delta_ts>2011-09-12 19:12:51 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>osrentry_patch_3.diff</filename>
            <type>text/plain</type>
            <size>82430</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE1IEBA
CisyMDExLTA5LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBiYXNlbGluZS0+c3BlY3VsYXRpdmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzkyMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIG9uLXN0YWNrLXJlcGxhY2UgKE9TUikgZnJvbSBjb2RlIHRo
YXQgaXMKKyAgICAgICAgcnVubmluZyBob3QgaW4gdGhlIG9sZCBKSVQgdG8gY29kZSBjb21waWxl
ZCBieSB0aGUgbmV3IEpJVC4gIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0IGxvbmctcnVubmlu
ZyBsb29wcyBiZW5lZml0IGZyb20gREZHIG9wdGltaXphdGlvbi4KKyAgICAgICAgSXQgYWxzbyBl
bnN1cmVzIHRoYXQgaWYgY29kZSBleHBlcmllbmNlcyBhIHNwZWN1bGF0aW9uIGZhaWx1cmUKKyAg
ICAgICAgaW4gREZHIGNvZGUsIGl0IGhhcyBhbiBvcHBvcnR1bml0eSB0byByZWVudGVyIHRoZSBE
Rkcgb25jZSBldmVyeQorICAgICAgICAxLDAwMCBsb29wIGl0ZXJhdGlvbnMgb3Igc28uCisgICAg
ICAgIAorICAgICAgICBUaGlzIHJlc3VsdHMgaW4gYSAyLjg4eCBzcGVlZC11cCBvbiBLcmFrZW4v
aW1hZ2luZy1kZXNhdHVyYXRlLAorICAgICAgICBhbmQgaXMgYSBwdXJlIHdpbiBvbiB0aGUgbWFp
biB0aHJlZSBiZW5jaG1hcmsgc3VpdGVzIChTdW5TcGlkZXIsCisgICAgICAgIFY4LCBLcmFrZW4p
LCB3aGVuIHRpZXJlZCBjb21waWxhdGlvbiBpcyBlbmFibGVkLgorCisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxv
Y2s6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpjb21w
aWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmNvbXBpbGVP
cHRpbWl6ZWQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5
dGVjb2RlL09wY29kZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OmlzQ2VsbFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjppc0Fy
cmF5UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OmlzSW50MzJQcmVkaWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6aXNEb3VibGVQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6aXNOdW1iZXJQcmVk
aWN0aW9uKToKKyAgICAgICAgKEpTQzo6aXNCb29sZWFuUHJlZGljdGlvbik6CisgICAgICAgIChK
U0M6OmlzU3Ryb25nUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OnByZWRpY3Rpb25Ub1N0cmlu
Zyk6CisgICAgICAgIChKU0M6Om1lcmdlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjptZXJn
ZVByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjptYWtlUHJlZGljdGlvbik6CisgICAgICAgICog
Ynl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6Om9wZXJh
bmRJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblNsb3Q6OlByZWRpY3Rpb25T
bG90KToKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblRyYWNrZXI6OlByZWRpY3Rpb25UcmFja2Vy
KToKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblRyYWNrZXI6OmluaXRpYWxpemVTaW1pbGFyVG8p
OgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6Y29weUxvY2Fsc0Zyb20pOgorICAg
ICAgICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6bnVtYmVyT2ZBcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6bnVtYmVyT2ZWYXJpYWJsZXMpOgorICAgICAgICAo
SlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6YXJndW1lbnRJbmRleEZvck9wZXJhbmQpOgorICAgICAg
ICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6cHJlZGljdEFyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6UHJlZGljdGlvblRyYWNrZXI6OnByZWRpY3QpOgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9u
VHJhY2tlcjo6cHJlZGljdEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OlByZWRpY3Rpb25UcmFj
a2VyOjpnZXRBcmd1bWVudFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9uVHJh
Y2tlcjo6Z2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OlByZWRpY3Rpb25UcmFja2VyOjpn
ZXRHbG9iYWxWYXJQcmVkaWN0aW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvb3BI
aW50KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6RG9XaGls
ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OldoaWxlTm9kZTo6ZW1pdEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6Rm9yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sp
OgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpj
YW5Db21waWxlT3Bjb2RlKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6cHJlZGljdCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldFByZWRp
Y3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OnByZWRpY3Rpb25Jc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6
REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uVHJhY2tlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjptZXJnZVVzZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQvQ29tcGFjdEpJVENvZGVNYXAuaDoKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6Om51bWJlck9mRW50cmllcyk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAgICAgIChKU0M6OkNvbXBhY3RKSVRDb2Rl
TWFwOjpEZWNvZGVyOjpudW1iZXJPZkVudHJpZXNSZW1haW5pbmcpOgorICAgICAgICAoSlNDOjpD
b21wYWN0SklUQ29kZU1hcDo6RGVjb2Rlcjo6cmVhZCk6CisgICAgICAgICogaml0L0pJVC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0VGltZW91dENoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVy
bmFsKToKKwogMjAxMS0wOS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIEphdmFTY3JpcHRDb3JlIGRvZXMgbm90IGhhdmUgc3BlY3VsYXRpdmUtPmJhc2VsaW5l
IE9TUgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0OTk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEwIEBACiAJCTBGRDNDODI4MTQx
MTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIu
aCAqLzsgfTsKIAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUx
RTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKIAkJMEZEODJF
MzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQg
LyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkQ4MkU1NDE0MURBRUVFMDAxNzlDOTQgLyogUHJlZGljdGVkVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJF
NEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkU1NTE0MURBRUVFMDAxNzlDOTQg
LyogUHJlZGljdGlvblRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDgyRTUwMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
RDgyRTU2MTQxREFGMDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQg
LyogREZHT1NSRW50cnkuY3BwICovOyB9OworCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyog
REZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjc3MTJBNkY3ODMw
MDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2
OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIz
IC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VDMjU1MDA1REJD
OEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVX
cmFwcGVyLmNwcCAqLzsgfTsKQEAgLTc5OSw2ICs4MDMsMTAgQEAKIAkJMEZEODJFMUUxNDE3MkMy
RjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuY3BwOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFGMTQxNzJDMkYw
MDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQ2FwYWJpbGl0aWVzLmg7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBD
b21wYWN0SklUQ29kZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21w
YWN0SklUQ29kZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkU0RjE0
MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcmVkaWN0ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDgyRTUwMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVkaWN0aW9uVHJhY2tlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRW50cnku
Y3BwOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZEODJFNTMxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkVudHJ5Lmg7IHBhdGggPSBkZmcvREZHT1NS
RW50cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjkyMTJB
NkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAyLDYgKzIyMTAsOCBAQAogCQk4NkVDOURCMzEz
MjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3Bw
ICovLAorCQkJCTBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovLAog
CQkJCTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovLAog
CQkJCTBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLywKIAkJ
CQkwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovLApAQCAtMjI5
OCw2ICsyMzA4LDggQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkU0RjE0
MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovLAorCQkJCTBGRDgyRTUwMTQxREFF
QTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICovLAogCQkJCTBGOTYzQjM2MTNGQzZG
REUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQk5NjlBMDc5MDBFRDFEM0FFMDBG
MUY2ODEgLyogQ29kZUJsb2NrLmNwcCAqLywKIAkJCQk5NjlBMDc5MTBFRDFEM0FFMDBGMUY2ODEg
LyogQ29kZUJsb2NrLmggKi8sCkBAIC0yMzk3LDYgKzI0MDksOSBAQAogCQkJCUJDMjU3REU4MEUx
RjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM0
MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkQ4MkU1NTE0MURBRUVFMDAxNzlDOTQgLyogUHJlZGljdGlvblRyYWNrZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5NCAvKiBQcmVkaWN0
ZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyog
Q29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2
RTBFMTZGNUNEMDBCMzQ0NjAgLyogVENTcGluTG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDY4
LDYgKzMwODMsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEZEODJFNTYxNDFEQUYw
ODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTYzQjJD
MTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZEM0M4MjUxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3Niw2ICsxMDc2LDEw
IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgICAg
IHByaW50ZigiWyU0ZF0gbG9vcF9pZl9ncmVhdGVyZXFcdCAlcywgJXMsICVkKC0+JWQpXG4iLCBs
b2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVj
LCByMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbG9vcF9oaW50OiB7CisgICAgICAgICAg
ICBwcmludGYoIlslNGRdIGxvb3BfaGludFxuIiwgbG9jYXRpb24pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7CiAgICAgICAgICAg
ICBpbnQgdGFibGVJbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGRl
ZmF1bHRUYXJnZXQgPSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTE0MDUsNyArMTQwOSw2IEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wU3RhdGlzdGljcygpCiBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2Jh
bE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQ
cm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBib29s
IGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAgICA6
IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFi
bGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKS5oZWFwKQotICAgICwgbV9leGVjdXRlQ291bnRlcigtMTAwMCkgLy8gdHJpZ2dlciBvcHRp
bWl6YXRpb24gd2hlbiBzaWduIGJpdCBjbGVhcnMKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJz
KDApCiAgICAgLCBtX251bVZhcnMoMCkKICAgICAsIG1fbnVtUGFyYW1ldGVycygwKQpAQCAtMTQy
Nyw2ICsxNDMwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwog
ICAgICwgbV9hbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSkKIHsKICAgICBBU1NFUlQobV9zb3VyY2Up
OworICAgIAorICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIAogI2lmIERVTVBfQ09ERV9CTE9D
S19TVEFUSVNUSUNTCiAgICAgbGl2ZUNvZGVCbG9ja1NldC5hZGQodGhpcyk7CkBAIC0xOTAxLDMz
ICsxOTA2LDI0IEBAIENvZGVCbG9jayogRnVuY3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VtZW4KIAog
SlNPYmplY3QqIFByb2dyYW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBl
eGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAgaWYgKHJlcGxhY2Vt
ZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkp
KSB7Ci0gICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoaXQgdGhp
cyBhZ2FpbiBhbnl0aW1lIHNvb24uCi0gICAgICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7
CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGll
ckpJVChnZXRKSVRUeXBlKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAgICAgSlNPYmpl
Y3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwogICAgIHJldHVy
biBlcnJvcjsKIH0KIAogSlNPYmplY3QqIEV2YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAg
aWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChn
ZXRKSVRUeXBlKCkpKSB7Ci0gICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBk
b24ndCBoaXQgdGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCi0gICAgICAgIGRvbnRPcHRpbWl6ZUFu
eXRpbWVTb29uKCk7CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRD
b2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9
CiAgICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwog
ICAgIHJldHVybiBlcnJvcjsKIH0KIAogSlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21w
aWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5O
b2RlKQogewotICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6
bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkgewotICAgICAgICAvLyBObyBPU1IgeWV0LCBzbyBt
YWtlIHN1cmUgd2UgZG9uJ3QgaGl0IHRoaXMgYWdhaW4gYW55dGltZSBzb29uLgotICAgICAgICBk
b250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRU
eXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQogICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZEZvcihleGVj
LCBzY29wZUNoYWluTm9kZSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENv
ZGVGb3JDYWxsKTsKICAgICByZXR1cm4gZXJyb3I7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSnVtcFRh
YmxlLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKKyNpbmNsdWRlICJQcmVkaWN0aW9uVHJhY2tlci5o
IgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKICNpbmNs
dWRlICJXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCkBAIC0yMjYsNiArMjI3LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgeyBy
ZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQogICAgICAgICBQYXNzT3duUHRyPENvZGVCbG9j
az4gcmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5yZWxlYXNlKCk7
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0UHJlZGljdGlvbnMoUGFzc093blB0cjxQcmVk
aWN0aW9uVHJhY2tlcj4gcHJlZGljdGlvbnMpIHsgbV9wcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25z
OyB9CisgICAgICAgIFByZWRpY3Rpb25UcmFja2VyKiBwcmVkaWN0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlZGljdGlvbnMuZ2V0KCk7IH0KIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90Vmlz
aXRvciYpOwpAQCAtNTg5LDE2ICs1OTMsODggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIGNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAgICAgICAgIAorICAgICAg
ICAvLyBGdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHdoZW4gdGllcmVkIGNvbXBpbGF0aW9uIGtp
Y2tzIGluLiBUaGlzCisgICAgICAgIC8vIGNvbnRyb2xzIGJvdGggd2hlbiB0aGUgb3B0aW1pemlu
ZyBjb21waWxlciBpcyBpbnZva2VkIGFuZCB3aGVuIE9TUgorICAgICAgICAvLyBlbnRyeSBoYXBw
ZW5zLiBUd28gdHJpZ2dlcnMgZXhpc3Q6IHRoZSBsb29wIHRyaWdnZXIgYW5kIHRoZSByZXR1cm4K
KyAgICAgICAgLy8gdHJpZ2dlci4gSW4gZWl0aGVyIGNhc2UsIHdoZW4gYW4gYWRkaXRpb24gdG8g
bV9leGVjdXRlQ291bnRlcgorICAgICAgICAvLyBjYXVzZXMgaXQgdG8gYmVjb21lIG5vbi1uZWdh
dGl2ZSwgdGhlIG9wdGltaXppbmcgY29tcGlsZXIgaXMKKyAgICAgICAgLy8gaW52b2tlZC4gVGhp
cyBpbmNsdWRlcyBhIGZhc3QgY2hlY2sgdG8gc2VlIGlmIHRoaXMgQ29kZUJsb2NrIGhhcworICAg
ICAgICAvLyBhbHJlYWR5IGJlZW4gb3B0aW1pemVkIChpLmUuIHJlcGxhY2VtZW50KCkgcmV0dXJu
cyBhIENvZGVCbG9jaworICAgICAgICAvLyB0aGF0IHdhcyBvcHRpbWl6ZWQgd2l0aCBhIGhpZ2hl
ciB0aWVyIEpJVCB0aGFuIHRoaXMgb25lKS4gSW4gdGhlCisgICAgICAgIC8vIGNhc2Ugb2YgdGhl
IGxvb3AgdHJpZ2dlciwgaWYgdGhlIG9wdGltaXplZCBjb21waWxhdGlvbiBzdWNjZWVkcworICAg
ICAgICAvLyAob3IgaGFzIGFscmVhZHkgc3VjY2VlZGVkIGluIHRoZSBwYXN0KSB0aGVuIE9TUiBp
cyBhdHRlbXB0ZWQgdG8KKyAgICAgICAgLy8gcmVkaXJlY3QgcHJvZ3JhbSBmbG93IGludG8gdGhl
IG9wdGltaXplZCBjb2RlLgorICAgICAgICAKKyAgICAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFy
ZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIG9wdGltaXphdGlvbiB0cmlnZ2VycywKKyAgICAgICAg
Ly8gYW5kIGFyZSB1c2VkIGFzIGEgc2luZ2xlIHBvaW50IGF0IHdoaWNoIHdlIGRlZmluZSB0aGUg
aGV1cmlzdGljcworICAgICAgICAvLyBmb3IgaG93IG11Y2ggd2FybS11cCBpcyBtYW5kYXRlZCBi
ZWZvcmUgdGhlIG5leHQgb3B0aW1pemF0aW9uCisgICAgICAgIC8vIHRyaWdnZXIgZmlsZXMuIEFs
bCBDb2RlQmxvY2tzIHN0YXJ0IG91dCB3aXRoIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSwKKyAgICAg
ICAgLy8gYXMgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgQ29kZUJsb2NrIGNvbnN0cnVjdG9yLgor
ICAgICAgICAKKyAgICAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBzdXBw
b3J0IGNhbGxpbmcKKyAgICAgICAgLy8gb3B0aW1pemVBZnRlcldhcm1VcCgpIGZyb20gSklULWdl
bmVyYXRlZCBjb2RlLgorICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0
ZXJXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gLTEwMDA7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QqIGFkZHJlc3NPZkV4ZWN1dGVDb3VudGVyKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICZtX2V4ZWN1dGVDb3VudGVyOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgdG8gZm9yY2UgdGhlIG5leHQgb3B0
aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZS4gVGhpcyBpcworICAgICAgICAvLyByYXJlbHkgd2lz
ZSwgc2luY2Ugb3B0aW1pemF0aW9uIHRyaWdnZXJzIGFyZSB0eXBpY2FsbHkgbW9yZQorICAgICAg
ICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcgYmFzZWxpbmUgY29kZS4KICAgICAgICAgdm9p
ZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKICAgICAgICAgewogICAgICAgICAgICAgbV9leGVj
dXRlQ291bnRlciA9IDA7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhp
cyB0byBwcmV2ZW50IG9wdGltaXphdGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0aGF0
CisgICAgICAgIC8vIG9wdGltaXphdGlvbiB3aWxsIHN0aWxsIGhhcHBlbiBhZnRlciByb3VnaGx5
IDJeMjkgaW52b2NhdGlvbnMsCisgICAgICAgIC8vIHNvIHRoaXMgaXMgcmVhbGx5IG1lYW50IHRv
IGRlbGF5IHRoYXQgYXMgbXVjaCBhcyBwb3NzaWJsZS4gVGhpcworICAgICAgICAvLyBpcyBjYWxs
ZWQgaWYgb3B0aW1pemF0aW9uIGZhaWxlZCwgYW5kIHdlIGV4cGVjdCBpdCB0byBmYWlsIGluCisg
ICAgICAgIC8vIHRoZSBmdXR1cmUgYXMgd2VsbC4KICAgICAgICAgdm9pZCBkb250T3B0aW1pemVB
bnl0aW1lU29vbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKTsKICAgICAgICAgfQogICAgICAgICAK
KyAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIHJlaW5pdGlhbGl6ZSB0aGUgY291bnRlciB0byBpdHMg
c3RhcnRpbmcgc3RhdGUsCisgICAgICAgIC8vIGZvcmNpbmcgYSB3YXJtLXVwIHRvIGhhcHBlbiBi
ZWZvcmUgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIKKyAgICAgICAgLy8gZmlyZXMuIFRo
aXMgaXMgY2FsbGVkIGluIHRoZSBDb2RlQmxvY2sgY29uc3RydWN0b3IuIEl0IGFsc28KKyAgICAg
ICAgLy8gbWFrZXMgc2Vuc2UgdG8gY2FsbCB0aGlzIGlmIGFuIE9TUiBleGl0IG9jY3VycmVkLiBO
b3RlIHRoYXQKKyAgICAgICAgLy8gT1NSIGV4aXQgY29kZSBpcyBjb2RlIGdlbmVyYXRlZCwgc28g
dGhlIHZhbHVlIG9mIHRoZSBleGVjdXRlCisgICAgICAgIC8vIGNvdW50ZXIgdGhhdCB0aGlzIGNv
cnJlc3BvbmRzIHRvIGlzIGFsc28gYXZhaWxhYmxlIGRpcmVjdGx5LgorICAgICAgICB2b2lkIG9w
dGltaXplQWZ0ZXJXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3Vu
dGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0aW9uIHRy
aWdnZXIgdG8gZmlyZSBzb29uLCBidXQKKyAgICAgICAgLy8gbm90IG5lY2Vzc2FyaWx5IHRoZSBu
ZXh0IG9uZS4gVGhpcyBtYWtlcyBzZW5zZSBpZiBvcHRpbWl6YXRpb24KKyAgICAgICAgLy8gc3Vj
Y2VlZHMuIFN1Y2Nlc3NmdWx5IG9wdGltaXphdGlvbiBtZWFucyB0aGF0IGFsbCBjYWxscyBhcmUK
KyAgICAgICAgLy8gcmVsaW5rZWQgdG8gdGhlIG9wdGltaXplZCBjb2RlLCBzbyB0aGlzIG9ubHkg
YWZmZWN0cyBjYWxsCisgICAgICAgIC8vIGZyYW1lcyB0aGF0IGFyZSBzdGlsbCBleGVjdXRpbmcg
dGhpcyBDb2RlQmxvY2suIFRoZSB2YWx1ZSBoZXJlCisgICAgICAgIC8vIGlzIHR1bmVkIHRvIHN0
cmlrZSBhIGJhbGFuY2UgYmV0d2VlbiB0aGUgY29zdCBvZiBPU1IgZW50cnkKKyAgICAgICAgLy8g
KHdoaWNoIGlzIHRvbyBoaWdoIHRvIHdhcnJhbnQgbWFraW5nIGV2ZXJ5IGxvb3AgYmFjayBlZGdl
IHRvCisgICAgICAgIC8vIHRyaWdnZXIgT1NSIGltbWVkaWF0ZWx5KSBhbmQgdGhlIGNvc3Qgb2Yg
ZXhlY3V0aW5nIGJhc2VsaW5lCisgICAgICAgIC8vIGNvZGUgKHdoaWNoIGlzIGhpZ2ggZW5vdWdo
IHRoYXQgd2UgZG9uJ3QgbmVjZXNzYXJpbHkgd2FudCB0bworICAgICAgICAvLyBoYXZlIGEgZnVs
bCB3YXJtLXVwKS4gVGhlIGludHVpdGlvbiBmb3IgY2FsbGluZyB0aGlzIGluc3RlYWQgb2YKKyAg
ICAgICAgLy8gb3B0aW1pemVOZXh0SW52b2NhdGlvbigpIGlzIGZvciB0aGUgY2FzZSBvZiByZWN1
cnNpdmUgZnVuY3Rpb25zCisgICAgICAgIC8vIHdpdGggbG9vcHMuIENvbnNpZGVyIHRoYXQgdGhl
cmUgbWF5IGJlIE4gY2FsbCBmcmFtZXMgb2Ygc29tZQorICAgICAgICAvLyByZWN1cnNpdmUgZnVu
Y3Rpb24sIGZvciBhIHJlYXNvbmFibHkgbGFyZ2UgdmFsdWUgb2YgTi4gVGhlIHRvcAorICAgICAg
ICAvLyBvbmUgdHJpZ2dlcnMgb3B0aW1pemF0aW9uLCBhbmQgdGhlbiByZXR1cm5zLCBhbmQgdGhl
biBhbGwgb2YKKyAgICAgICAgLy8gdGhlIG90aGVycyByZXR1cm4uIFdlIGRvbid0IHdhbnQgb3B0
aW1pemF0aW9uIHRvIGJlIHRyaWdnZXJlZCBvbgorICAgICAgICAvLyBlYWNoIHJldHVybiwgYXMg
dGhhdCB3b3VsZCBiZSBzdXBlcmZsdW91cy4gSXQgb25seSBtYWtlcyBzZW5zZQorICAgICAgICAv
LyB0byB0cmlnZ2VyIG9wdGltaXphdGlvbiBpZiBvbmUgb2YgdGhvc2UgZnVuY3Rpb25zIGJlY29t
ZXMgaG90CisgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgorICAgICAgICB2b2lkIG9w
dGltaXplU29vbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAt
MTAwOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50
ZXI7CiAKICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhlc2UgcmVtYWluaW5nIG1lbWJlcnMgcHJp
dmF0ZS4KQEAgLTY3MSw2ICs3NDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAgICAg
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9qdW1wVGFyZ2V0czsKKyAgICAgICAgVmVjdG9yPHVuc2ln
bmVkPiBtX2xvb3BUYXJnZXRzOwogCiAgICAgICAgIC8vIENvbnN0YW50IFBvb2wKICAgICAgICAg
VmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CkBAIC02ODIsNiArNzU5LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwogCiAgICAg
ICAgIE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CisgICAgICAgIAorICAgICAgICBP
d25QdHI8UHJlZGljdGlvblRyYWNrZXI+IG1fcHJlZGljdGlvbnM7CiAKICAgICAgICAgc3RydWN0
IFJhcmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiA5NDk5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTU3LDYgKzE1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBtYWNybyhvcF9sb29w
X2lmX2xlc3NlcSwgNCkgXAogICAgICAgICBtYWNybyhvcF9sb29wX2lmX2dyZWF0ZXIsIDQpIFwK
ICAgICAgICAgbWFjcm8ob3BfbG9vcF9pZl9ncmVhdGVyZXEsIDQpIFwKKyAgICAgICAgbWFjcm8o
b3BfbG9vcF9oaW50LCAxKSBcCiAgICAgICAgIG1hY3JvKG9wX3N3aXRjaF9pbW0sIDQpIFwKICAg
ICAgICAgbWFjcm8ob3Bfc3dpdGNoX2NoYXIsIDQpIFwKICAgICAgICAgbWFjcm8ob3Bfc3dpdGNo
X3N0cmluZywgNCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRp
Y3RlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHJlZGljdGVkVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgUHJlZGljdGVkVHlwZV9oCisjZGVmaW5lIFByZWRpY3RlZFR5cGVfaAorCisjaW5jbHVk
ZSAiVmFsdWVQcm9maWxlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIHVpbnQ4X3Qg
UHJlZGljdGVkVHlwZTsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3ROb25lICAg
PSAwOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdENlbGwgICA9IDB4MDE7Citz
dGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0QXJyYXkgID0gMHgwMzsKK3N0YXRpYyBj
b25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RJbnQzMiAgPSAweDA0Oworc3RhdGljIGNvbnN0IFBy
ZWRpY3RlZFR5cGUgUHJlZGljdERvdWJsZSA9IDB4MDg7CitzdGF0aWMgY29uc3QgUHJlZGljdGVk
VHlwZSBQcmVkaWN0TnVtYmVyID0gMHgwYzsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFBy
ZWRpY3RCb29sZWFuID0gMHgxMDsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RU
b3AgICAgPSAweDFmOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgU3Ryb25nUHJlZGljdGlv
blRhZyA9IDB4ODA7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0aW9uVGFnTWFz
ayAgICA9IDB4ODA7CisKK2VudW0gUHJlZGljdGlvblNvdXJjZSB7IFdlYWtQcmVkaWN0aW9uLCBT
dHJvbmdQcmVkaWN0aW9uIH07CisKK2lubGluZSBib29sIGlzQ2VsbFByZWRpY3Rpb24oUHJlZGlj
dGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFBy
ZWRpY3RDZWxsICYmICEodmFsdWUgJiB+KFByZWRpY3RBcnJheSB8IFByZWRpY3Rpb25UYWdNYXNr
KSk7Cit9CisKK2lubGluZSBib29sIGlzQXJyYXlQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFs
dWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0gUHJlZGlj
dEFycmF5OworfQorCitpbmxpbmUgYm9vbCBpc0ludDMyUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBl
IHZhbHVlKQoreworICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spID09IFBy
ZWRpY3RJbnQzMjsKK30KKworaW5saW5lIGJvb2wgaXNEb3VibGVQcmVkaWN0aW9uKFByZWRpY3Rl
ZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykg
PT0gUHJlZGljdERvdWJsZTsKK30KKworaW5saW5lIGJvb2wgaXNOdW1iZXJQcmVkaWN0aW9uKFBy
ZWRpY3RlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGljdE51bWJl
cikgJiYgISh2YWx1ZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3Rpb25UYWdNYXNrKSk7Cit9
CisKK2lubGluZSBib29sIGlzQm9vbGVhblByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0Qm9v
bGVhbjsKK30KKworaW5saW5lIGJvb2wgaXNTdHJvbmdQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUg
dmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlICE9IChQcmVkaWN0Tm9uZSB8IFN0cm9uZ1ByZWRp
Y3Rpb25UYWcpKTsKKyAgICByZXR1cm4gISEodmFsdWUgJiBTdHJvbmdQcmVkaWN0aW9uVGFnKTsK
K30KKworI2lmbmRlZiBOREVCVUcKK2lubGluZSBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJp
bmcoUHJlZGljdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHZh
bHVlKSkgeworICAgICAgICBzd2l0Y2ggKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSB7Cisg
ICAgICAgIGNhc2UgUHJlZGljdE5vbmU6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWJv
dHRvbSI7CisgICAgICAgIGNhc2UgUHJlZGljdENlbGw6CisgICAgICAgICAgICByZXR1cm4gInAt
c3Ryb25nLWNlbGwiOworICAgICAgICBjYXNlIFByZWRpY3RBcnJheToKKyAgICAgICAgICAgIHJl
dHVybiAicC1zdHJvbmctYXJyYXkiOworICAgICAgICBjYXNlIFByZWRpY3RJbnQzMjoKKyAgICAg
ICAgICAgIHJldHVybiAicC1zdHJvbmctaW50MzIiOworICAgICAgICBjYXNlIFByZWRpY3REb3Vi
bGU6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWRvdWJsZSI7CisgICAgICAgIGNhc2Ug
UHJlZGljdE51bWJlcjoKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctbnVtYmVyIjsKKyAg
ICAgICAgY2FzZSBQcmVkaWN0Qm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmct
Ym9vbGVhbiI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25n
LXRvcCI7CisgICAgICAgIH0KKyAgICB9CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2Ug
UHJlZGljdE5vbmU6CisgICAgICAgIHJldHVybiAicC13ZWFrLWJvdHRvbSI7CisgICAgY2FzZSBQ
cmVkaWN0Q2VsbDoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstY2VsbCI7CisgICAgY2FzZSBQcmVk
aWN0QXJyYXk6CisgICAgICAgIHJldHVybiAicC13ZWFrLWFycmF5IjsKKyAgICBjYXNlIFByZWRp
Y3RJbnQzMjoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstaW50MzIiOworICAgIGNhc2UgUHJlZGlj
dERvdWJsZToKKyAgICAgICAgcmV0dXJuICJwLXdlYWstZG91YmxlIjsKKyAgICBjYXNlIFByZWRp
Y3ROdW1iZXI6CisgICAgICAgIHJldHVybiAicC13ZWFrLW51bWJlciI7CisgICAgY2FzZSBQcmVk
aWN0Qm9vbGVhbjoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstYm9vbGVhbiI7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstdG9wIjsKKyAgICB9Cit9CisjZW5kaWYKKworaW5s
aW5lIFByZWRpY3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQcmVkaWN0ZWRUeXBlIGxlZnQsIFBy
ZWRpY3RlZFR5cGUgcmlnaHQpCit7CisgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSA9
PSBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKQorICAgICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0
OworICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkpIHsKKyAgICAgICAgQVNTRVJUKCFp
c1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKTsKKyAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgfQor
ICAgIEFTU0VSVCghaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpKTsKKyAgICBBU1NFUlQoaXNTdHJv
bmdQcmVkaWN0aW9uKHJpZ2h0KSk7CisgICAgcmV0dXJuIHJpZ2h0OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3Rl
ZFR5cGUgcmlnaHQpCit7CisgICAgUHJlZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gc3RhdGlj
X2Nhc3Q8VD4obWVyZ2VQcmVkaWN0aW9ucyhzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0
KSwgcmlnaHQpKTsKKyAgICBib29sIHJlc3VsdCA9IG5ld1ByZWRpY3Rpb24gIT0gc3RhdGljX2Nh
c3Q8UHJlZGljdGVkVHlwZT4obGVmdCk7CisgICAgbGVmdCA9IG5ld1ByZWRpY3Rpb247CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24o
UHJlZGljdGVkVHlwZSB0eXBlLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKK3sKKyAgICBBU1NF
UlQoISh0eXBlICYgU3Ryb25nUHJlZGljdGlvblRhZykpOworICAgIEFTU0VSVChzb3VyY2UgPT0g
U3Ryb25nUHJlZGljdGlvbiB8fCBzb3VyY2UgPT0gV2Vha1ByZWRpY3Rpb24pOworICAgIGlmICh0
eXBlID09IFByZWRpY3ROb25lKQorICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgcmV0
dXJuIHR5cGUgfCAoc291cmNlID09IFN0cm9uZ1ByZWRpY3Rpb24gPyBTdHJvbmdQcmVkaWN0aW9u
VGFnIDogMCk7Cit9CisKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCitpbmxpbmUgUHJlZGlj
dGVkVHlwZSBtYWtlUHJlZGljdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFZh
bHVlUHJvZmlsZSYgcHJvZmlsZSkKK3sKKyAgICBWYWx1ZVByb2ZpbGU6OlN0YXRpc3RpY3Mgc3Rh
dGlzdGljczsKKyAgICBwcm9maWxlLmNvbXB1dGVTdGF0aXN0aWNzKGdsb2JhbERhdGEsIHN0YXRp
c3RpY3MpOworICAgIAorICAgIGlmICghc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1
cm4gUHJlZGljdE5vbmU7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzID09IHN0YXRp
c3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVk
aWN0SW50MzI7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuZG91YmxlcyA9PSBzdGF0aXN0aWNz
LnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdERv
dWJsZTsKKyAgICAKKyAgICBpZiAoc3RhdGlzdGljcy5pbnQzMnMgKyBzdGF0aXN0aWNzLmRvdWJs
ZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlv
blRhZyB8IFByZWRpY3ROdW1iZXI7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuYXJyYXlzID09
IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcg
fCBQcmVkaWN0QXJyYXk7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuY2VsbHMgPT0gc3RhdGlz
dGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRp
Y3RDZWxsOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmJvb2xlYW5zID09IHN0YXRpc3RpY3Mu
c2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Qm9v
bGVhbjsKKyAgICAKKyAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RUb3A7
Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQcmVkaWN0ZWRU
eXBlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0aW9uVHJh
Y2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVk
aWN0aW9uVHJhY2tlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
UHJlZGljdGlvblRyYWNrZXJfaAorI2RlZmluZSBQcmVkaWN0aW9uVHJhY2tlcl9oCisKKyNpbmNs
dWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBoZWxwZXIgZnVuY3Rpb24g
dG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgoraW5saW5l
IGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAw
OyB9CisKK3N0cnVjdCBQcmVkaWN0aW9uU2xvdCB7CitwdWJsaWM6CisgICAgUHJlZGljdGlvblNs
b3QoKQorICAgICAgICA6IG1fdmFsdWUoUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICBQ
cmVkaWN0ZWRUeXBlIG1fdmFsdWU7Cit9OworCitjbGFzcyBQcmVkaWN0aW9uVHJhY2tlciB7Citw
dWJsaWM6CisgICAgUHJlZGljdGlvblRyYWNrZXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
UHJlZGljdGlvblRyYWNrZXIodW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1WYXJp
YWJsZXMpCisgICAgICAgIDogbV9hcmd1bWVudHMobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1f
dmFyaWFibGVzKG51bVZhcmlhYmxlcykKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5p
dGlhbGl6ZVNpbWlsYXJUbyhjb25zdCBQcmVkaWN0aW9uVHJhY2tlciYgb3RoZXIpCisgICAgewor
ICAgICAgICBtX2FyZ3VtZW50cy5yZXNpemUob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7Cisg
ICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvdGhlci5udW1iZXJPZlZhcmlhYmxlcygpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb3B5TG9jYWxzRnJvbShjb25zdCBQcmVkaWN0aW9uVHJhY2tl
ciYgb3RoZXIpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50cyA9IG90aGVyLm1fYXJndW1lbnRz
OworICAgICAgICBtX3ZhcmlhYmxlcyA9IG90aGVyLm1fdmFyaWFibGVzOworICAgIH0KKyAgICAK
KyAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50
cy5zaXplKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVy
biBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4
Rm9yT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZCArIG1fYXJndW1l
bnRzLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgfQorCisgICAg
Ym9vbCBwcmVkaWN0QXJndW1lbnQodW5zaWduZWQgYXJndW1lbnQsIFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4g
bWVyZ2VQcmVkaWN0aW9uKG1fYXJndW1lbnRzW2FyZ3VtZW50XS5tX3ZhbHVlLCBtYWtlUHJlZGlj
dGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBwcmVkaWN0
KGludCBvcGVyYW5kLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ug
c291cmNlKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQor
ICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RBcmd1bWVudChhcmd1bWVudEluZGV4Rm9yT3BlcmFu
ZChvcGVyYW5kKSwgcHJlZGljdGlvbiwgc291cmNlKTsKKyAgICAgICAgaWYgKCh1bnNpZ25lZClv
cGVyYW5kID49IG1fdmFyaWFibGVzLnNpemUoKSkgeworICAgICAgICAgICAgQVNTRVJUKG9wZXJh
bmQgPj0gMCk7CisgICAgICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUob3BlcmFuZCArIDEpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdmFy
aWFibGVzW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJj
ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHByZWRpY3RHbG9iYWxWYXIodW5zaWduZWQgdmFy
TnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNl
KQorICAgIHsKKyAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVy
YXRvciBpdGVyID0gbV9nbG9iYWxWYXJzLmZpbmQodmFyTnVtYmVyICsgMSk7CisgICAgICAgIGlm
IChpdGVyID09IG1fZ2xvYmFsVmFycy5lbmQoKSkgeworICAgICAgICAgICAgUHJlZGljdGlvblNs
b3QgcHJlZGljdGlvblNsb3Q7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IG1lcmdlUHJlZGlj
dGlvbihwcmVkaWN0aW9uU2xvdC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBz
b3VyY2UpKTsKKyAgICAgICAgICAgIG1fZ2xvYmFsVmFycy5hZGQodmFyTnVtYmVyICsgMSwgcHJl
ZGljdGlvblNsb3QpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGl0ZXItPnNlY29uZC5tX3ZhbHVlLCBtYWtlUHJl
ZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGVk
VHlwZSBnZXRBcmd1bWVudFByZWRpY3Rpb24odW5zaWduZWQgYXJndW1lbnQpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdLm1fdmFsdWU7CisgICAgfQorCisgICAg
UHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
aWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICAgICAgcmV0dXJuIGdldEFy
Z3VtZW50UHJlZGljdGlvbihhcmd1bWVudEluZGV4Rm9yT3BlcmFuZChvcGVyYW5kKSk7CisgICAg
ICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA8IG1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXS5tX3ZhbHVlOworICAgICAgICByZXR1cm4g
UHJlZGljdE5vbmU7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgZ2V0R2xvYmFsVmFy
UHJlZGljdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAgeworICAgICAgICBIYXNoTWFwPHVu
c2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dsb2JhbFZhcnMuZmlu
ZCh2YXJOdW1iZXIgKyAxKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9nbG9iYWxWYXJzLmVuZCgp
KQorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgICAgICByZXR1cm4gaXRlci0+
c2Vjb25kLm1fdmFsdWU7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8UHJlZGlj
dGlvblNsb3QsIDE2PiBtX2FyZ3VtZW50czsKKyAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2
PiBtX3ZhcmlhYmxlczsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD4gbV9n
bG9iYWxWYXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQcmVkaWN0
aW9uVHJhY2tlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDk5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NTgsNiArNjU4LDEzIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRPcGNvZGUoT3Bjb2QKICAgICBtX2xhc3RPcGNvZGVJRCA9IG9wY29kZUlEOwogfQog
Cit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9vcEhpbnQoKQoreworI2lmIEVOQUJMRShU
SUVSRURfQ09NUElMQVRJT04pCisgICAgZW1pdE9wY29kZShvcF9sb29wX2hpbnQpOworI2VuZGlm
Cit9CisKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJldHJpZXZlTGFzdEJpbmFyeU9wKGludCYg
ZHN0SW5kZXgsIGludCYgc3JjMUluZGV4LCBpbnQmIHNyYzJJbmRleCkKIHsKICAgICBBU1NFUlQo
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpID49IDQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
OTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0VG9QcmltaXRpdmUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRMYWJlbChMYWJlbCop
OworICAgICAgICB2b2lkIGVtaXRMb29wSGludCgpOwogICAgICAgICBQYXNzUmVmUHRyPExhYmVs
PiBlbWl0SnVtcChMYWJlbCogdGFyZ2V0KTsKICAgICAgICAgUGFzc1JlZlB0cjxMYWJlbD4gZW1p
dEp1bXBJZlRydWUoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRhcmdldCk7CiAgICAgICAgIFBh
c3NSZWZQdHI8TGFiZWw+IGVtaXRKdW1wSWZGYWxzZShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCog
dGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDk0OTk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDY5LDcgKzE0NjksNyBAQCBSZWdpc3RlcklEKiBEb1doaWxlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
CiAKICAgICBSZWZQdHI8TGFiZWw+IHRvcE9mTG9vcCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwog
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwodG9wT2ZMb29wLmdldCgpKTsKLQorICAgIGdlbmVyYXRv
ci5lbWl0TG9vcEhpbnQoKTsKICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0
ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCkpOwogICAgCiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsK
QEAgLTE0OTcsNiArMTQ5Nyw3IEBAIFJlZ2lzdGVySUQqIFdoaWxlTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGUKIAogICAgIFJlZlB0cjxMYWJlbD4gdG9wT2ZMb29wID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0b3BPZkxvb3AuZ2V0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0TG9vcEhpbnQoKTsKICAgICAKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBt
X3N0YXRlbWVudCk7CiAKQEAgLTE1MzIsNiArMTUzMyw3IEBAIFJlZ2lzdGVySUQqIEZvck5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY28KIAogICAgIFJlZlB0cjxMYWJlbD4gdG9wT2ZMb29wID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0b3BPZkxvb3AuZ2V0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKIAogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAKQEAg
LTE1NzksNiArMTU4MSw3IEBAIFJlZ2lzdGVySUQqIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
dGUKIAogICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgIGdlbmVyYXRv
ci5lbWl0TG9vcEhpbnQoKTsKIAogICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZTsKICAgICBi
b29sIG9wdGltaXplZEZvcmluQWNjZXNzID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ5OTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTk0LDYgKzU5NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKIAogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFsRGF0
YS0+aW50ZXJwcmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgdW5zaWduZWQgYmxvY2tCZWdp
biA9IG1fY3VycmVudEluZGV4OwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIC8vIERvbid0
IGV4dGVuZCBvdmVyIGp1bXAgZGVzdGluYXRpb25zLgogICAgICAgICBpZiAobV9jdXJyZW50SW5k
ZXggPT0gbGltaXQpIHsKQEAgLTEyMTEsNiArMTIxMiwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Jlc29s
dmVfYmFzZSk7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2xvb3Bf
aGludDogeworICAgICAgICAgICAgLy8gQmFzZWxpbmUtPkRGRyBPU1IganVtcHMgYmV0d2VlbiBs
b29wIGhpbnRzLiBUaGUgREZHIGFzc3VtZXMgdGhhdCBCYXNlbGluZS0+REZHCisgICAgICAgICAg
ICAvLyBPU1IgY2FuIG9ubHkgaGFwcGVuIGF0IGJhc2ljIGJsb2NrIGJvdW5kYXJpZXMuIEFzc2Vy
dCB0aGF0IHRoZXNlIHR3byBzdGF0ZW1lbnRzCisgICAgICAgICAgICAvLyBhcmUgY29tcGF0aWJs
ZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYmxvY2tCZWdpbiwgbV9jdXJyZW50SW5kZXgg
PT0gYmxvY2tCZWdpbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5pc09TUlRhcmdldCA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2xvb3BfaGludCk7CisgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgLy8gUGFyc2UgZmFpbGVkIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAs
NyBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wCiAgICAgY2FzZSBv
cF9qbmxlc3NlcToKICAgICBjYXNlIG9wX2puZ3JlYXRlcjoKICAgICBjYXNlIG9wX2puZ3JlYXRl
cmVxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgogICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOgog
ICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzZXE6CiAgICAgY2FzZSBvcF9sb29wX2lmX2dyZWF0ZXI6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiA5
NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsMTcgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9k
ZSBjb21waWxlTQogICAgIAogICAgIHByb3BhZ2F0ZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9j
ayk7CiAgICAgCisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgIC8vIFNhdmUg
dGhlIHByZWRpY3Rpb25zIHdlJ3ZlIG1hZGUsIHNvIHRoYXQgT1NSIGVudHJ5IGNhbiB2ZXJpZnkg
dGhlbS4gUHJlZGljdGlvbnMKKyAgICAvLyBhcmUgc2F2ZWQgaW4gdGhlIENvZGVCbG9jayBmcm9t
IHdoaWNoIHdlIHdpbGwgYmUgZG9pbmcgT1NSIGVudHJ5LCBzaW5jZSB0aGUKKyAgICAvLyBDb2Rl
QmxvY2sgdG8gd2hpY2ggd2UgYXJlIE9TUmluZyBtYXkgYmUgcmVwbGFjZWQgYXQgYW55IHRpbWUu
CisgICAgT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBwcmVkaWN0aW9ucyA9IGFkb3B0UHRyKG5l
dyBQcmVkaWN0aW9uVHJhY2tlcigpKTsKKyAgICAqcHJlZGljdGlvbnMgPSBkZmcucHJlZGljdGlv
bnMoKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpOworICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+c2V0UHJlZGljdGlvbnMocHJl
ZGljdGlvbnMucmVsZWFzZSgpKTsKKyNlbmRpZgorICAgIAogICAgIEpJVENvbXBpbGVyIGRhdGFG
bG93SklUKGdsb2JhbERhdGEsIGRmZywgY29kZUJsb2NrKTsKICAgICBpZiAoY29tcGlsZU1vZGUg
PT0gQ29tcGlsZUZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VSVChqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9u
IDk0OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBu
b2RlSW5kZXgsIENvCiB2b2lkIEdyYXBoOjpkdW1wKENvZGVCbG9jayogY29kZUJsb2NrKQogewog
ICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKLSAgICAg
ICAgcHJpbnRmKCJCbG9jayAjJXU6XG4iLCAoaW50KWIpOworICAgICAgICBwcmludGYoIkJsb2Nr
ICMldSAoYmMjJXUpOiAgJXNcbiIsIChpbnQpYiwgbV9ibG9ja3NbYl0tPmJ5dGVjb2RlQmVnaW4s
IG1fYmxvY2tzW2JdLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG1fYmxvY2tzW2JdLT5iZWdpbjsgaSA8IG1fYmxvY2tzW2JdLT5l
bmQ7ICsraSkKICAgICAgICAgICAgIGR1bXAoaSwgY29kZUJsb2NrKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgot
I2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25UcmFja2VyLmgiCisjaW5jbHVkZSAiUHJlZGljdGlvblRy
YWNrZXIuaCIKICNpbmNsdWRlICJSZWdpc3RlckZpbGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTY0LDYgKzY0LDcgQEAgc3RydWN0IEJh
c2ljQmxvY2sgewogICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAg
ICAgLCBiZWdpbihiZWdpbikKICAgICAgICAgLCBlbmQoTm9Ob2RlKQorICAgICAgICAsIGlzT1NS
VGFyZ2V0KGZhbHNlKQogICAgICAgICAsIG1fYXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAg
ICAgLCBtX2xvY2FscyhudW1Mb2NhbHMpCiAgICAgewpAQCAtNzcsNiArNzgsNyBAQCBzdHJ1Y3Qg
QmFzaWNCbG9jayB7CiAgICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbjsKICAgICBOb2RlSW5kZXgg
YmVnaW47CiAgICAgTm9kZUluZGV4IGVuZDsKKyAgICBib29sIGlzT1NSVGFyZ2V0OwogCiAgICAg
UHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwogICAgIFZlY3RvciA8VmFyaWFibGVSZWNv
cmQsIDg+IG1fYXJndW1lbnRzOwpAQCAtMTQxLDcgKzE0MywyMiBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgYm9vbCBwcmVkaWN0KE5vZGUmIG5vZGUsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJl
ZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewotICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9u
cy5wcmVkaWN0KG5vZGUsIHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCkgeworICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgcmV0dXJuIHByZWRp
Y3Qobm9kZS5sb2NhbCgpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgorICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RH
bG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgIGNhc2UgR2V0TWV0aG9k
OgorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNh
c2UgQ29uc3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIG5vZGUucHJlZGljdChwcmVkaWN0aW9u
LCBzb3VyY2UpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBv
cGVyYW5kKQpAQCAtMTY0LDcgKzE4MSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChub2RlUHRy
LT5vcCA9PSBWYWx1ZVRvSW50MzIpCiAgICAgICAgICAgICBub2RlUHRyID0gJigqdGhpcylbbm9k
ZVB0ci0+Y2hpbGQxKCldOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMu
Z2V0UHJlZGljdGlvbigqbm9kZVB0cik7CisgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+b3ApIHsK
KyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9u
KG5vZGVQdHItPmxvY2FsKCkpOworICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAg
ICAgIHJldHVybiBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGVQdHItPnZhck51bWJlcigpKTsK
KyAgICAgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICBjYXNlIEdldE1ldGhvZDoKKyAgICAgICAg
Y2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIENvbnN0cnVj
dDoKKyAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT5nZXRQcmVkaWN0aW9uKCk7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgICAgIH0KICAg
ICB9CiAgICAgCiAgICAgLy8gSGVscGVyIG1ldGhvZHMgdG8gY2hlY2sgbm9kZXMgZm9yIGNvbnN0
YW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcsMTcgKzM4Nyw0OCBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgLy8gMTEpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRp
b24gaW50byByZWdUMC4KKyAgICAvLyAxMSkgQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBj
b3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKKyAgICAvLyAgICAgdGhh
dCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNv
IHRoZSBleGVjdXRlCisgICAgLy8gICAgIGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVz
IHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxsIGZyYW1lcworICAgIC8vICAgICB0aGF0
IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIg
Y2FsbCBmcmFtZSdzCisgICAgLy8gICAgIE9TUiBleGl0LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0
IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAgICAvLworICAgIC8vICAgICAoYSkgQ29kZSB0aGUg
cGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5jZSB0byByZWVudGVyIG9wdGltaXplZAor
ICAgIC8vICAgICAgICAgY29kZSBldmVudHVhbGx5LCBzaW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBm
YXN0ZXIuIEJ1dCB3ZSBkb24ndAorICAgIC8vICAgICAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50
ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgorICAgIC8vCisgICAgLy8gICAg
IChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwgcnVu
bmluZyB0aGUgb2xkCisgICAgLy8gICAgICAgICBKSVQncyBjb2RlIGFuZCBoYXMgbmV2ZXIgT1NS
J2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bworICAgIC8vICAgICAgICAgcGVyZm9y
bSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRlZC4KKyAgICAvLwor
ICAgIC8vICAgICAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBp
bW1lZGlhdGVseSByZXRyeSBPU1IKKyAgICAvLyAgICAgICAgIGVudHJ5LCBzaW5jZSBib3RoIGZv
cm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKKyAgICAvLyAgICAgICAgIHBh
cnRpY3VsYXJseSBleHBlbnNpdmUuCisgICAgLy8KKyAgICAvLyAgICAgVG8gZW5zdXJlIChjKSwg
d2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCisgICAgLy8gICAgIGNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxk
IGVuZGFuZ2VyCisgICAgLy8gICAgIChhKSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBl
eGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1bml0eSBmb3IKKyAgICAvLyAgICAgZXZlcnkgY2Fs
bCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhh
cHBlbnMKKyAgICAvLyAgICAgZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcgbG9v
cHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgorICAgIC8vICAgICBiZWNvbWUgbm9uLW5l
Z2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQor
ICAgIC8vICAgICB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xk
IEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0eQorICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmlu
ZyAoYSkgYW5kIChiKS4gVGhpcyBoZXVyaXN0aWMgbWF5IG5lZWQgdG8gYmUKKyAgICAvLyAgICAg
cmV0aG91Z2h0IGluIHRoZSBmdXR1cmUsIHBhcnRpY3VsYXJseSBpZiB3ZSBzdXBwb3J0IHJlb3B0
aW1pemluZyBjb2RlCisgICAgLy8gICAgIHdpdGggbmV3IHZhbHVlIHByb2ZpbGVzIGdhdGhlcmVk
IGZyb20gY29kZSB0aGF0IGRpZCBPU1IgZXhpdC4KKyAgICAKKyAgICBzdG9yZTMyKEltbTMyKGNv
ZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwKCkpLCBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+YWRkcmVzc09mRXhlY3V0ZUNvdW50
ZXIoKSk7CisgICAgCisgICAgLy8gMTIpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRl
Y29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KICAgICAKICAgICBpZiAoZXhpdC5tX2xhc3RTZXRP
cGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQ
UkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAKLSAgICAvLyAxMikgRml4IGNhbGwg
ZnJhbWUuCisgICAgLy8gMTMpIEZpeCBjYWxsIGZyYW1lLgogICAgIAogICAgIEFTU0VSVChjb2Rl
QmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5l
SklUKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2
ZSgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVyRmlsZTo6Q29kZUJsb2Nr
KSk7CiAgICAgCi0gICAgLy8gMTMpIEp1bXAgaW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGlu
ZSBKSVQgY29kZS4KKyAgICAvLyAxNCkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2Vs
aW5lIEpJVCBjb2RlLgogICAgIAogICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGlu
ZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJl
Z2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2J5dGVjb2RlSW5kZXgpOwogICAg
IApAQCAtMTE0MSw2ICsxMTcyLDggQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua1NwZWN1bGF0aW9u
Q2hlY2tzKAogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRW50cnkoKQogeworICAgIG1fc3Rh
cnRPZkNvZGUgPSBsYWJlbCgpOworICAgIAogICAgIC8vIFRoaXMgY29kZSBjdXJyZW50bHkgbWF0
Y2hlcyB0aGUgb2xkIEpJVC4gSW4gdGhlIGZ1bmN0aW9uIGhlYWRlciB3ZSBuZWVkIHRvCiAgICAg
Ly8gcG9wIHRoZSByZXR1cm4gYWRkcmVzcyAoc2luY2Ugd2UgZG8gbm90IGFsbG93IGFueSByZWN1
cnNpb24gb24gdGhlIG1hY2hpbmUKICAgICAvLyBzdGFjayksIGFuZCBwZXJmb3JtIGEgZmFzdCBy
ZWdpc3RlciBmaWxlIGNoZWNrLgpAQCAtMTE3OSw2ICsxMjEyLDggQEAgdm9pZCBKSVRDb21waWxl
cjo6Y29tcGlsZUJvZHkoKQogICAgIC8vIHRvIGFsbG93IGl0IHRvIGNoZWNrIHdoaWNoIG5vZGVz
IGluIHRoZSBncmFwaCBtYXkgYmFpbCBvdXQsIGFuZCBtYXkgbmVlZCB0byByZWVudGVyIHRoZQog
ICAgIC8vIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgogICAgIGlmIChjb21waWxlZFNwZWN1bGF0aXZl
KSB7CisgICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKG1faml0Q29kZU1hcEVuY29k
ZXIuZmluaXNoKCkpOworICAgICAgICAKICNpZiBFTkFCTEUoREZHX09TUl9FWElUKQogICAgICAg
ICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDk0OTk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTYsNiArMzE2LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fanNDYWxscy5hcHBlbmQo
SlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBj
b2RlT3JpZ2luKSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgbm90aWNlT1NSRW50cnkoQmFzaWNC
bG9jayYgYmFzaWNCbG9jaykKKyAgICB7CisgICAgICAgIG1faml0Q29kZU1hcEVuY29kZXIuYXBw
ZW5kKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgZGlmZmVyZW5jZUJldHdlZW4obV9zdGFydE9m
Q29kZSwgbGFiZWwoKSkpOworICAgIH0KIAogcHJpdmF0ZToKICAgICAvLyBJbnRlcm5hbCBpbXBs
ZW1lbnRhdGlvbiB0byBjb21waWxlLgpAQCAtMzQ5LDYgKzM1NCwxMCBAQCBwcml2YXRlOgogICAg
IC8vIENvdW50IG9mIHRoZSBudW1iZXIgb2YgQ2FsbFJlY29yZHMgd2l0aCBleGNlcHRpb24gaGFu
ZGxlcnMuCiAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAgICAgdW5zaWduZWQgbV9l
eGNlcHRpb25DaGVja0NvdW50OworICAgIAorICAgIC8vIEpJVCBjb2RlIG1hcCBmb3IgT1NSIGVu
dHJ5cG9pbnRzLgorICAgIExhYmVsIG1fc3RhcnRPZkNvZGU7CisgICAgQ29tcGFjdEpJVENvZGVN
YXA6OkVuY29kZXIgbV9qaXRDb2RlTWFwRW5jb2RlcjsKIAogICAgIHN0cnVjdCBQcm9wZXJ0eUFj
Y2Vzc1JlY29yZCB7CiAgICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKENhbGwgZnVuY3Rpb25D
YWxsLCBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGwsIGludDE2X3QgZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjaywgaW50MTZfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBpbnQxNl90IGRlbHRhQ2Fs
bFRvU2xvd0Nhc2UsIGludDE2X3QgZGVsdGFDYWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50
OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2NyYXRjaEdQUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4IEBACiAjZGVmaW5lIERG
R19ERUJVR19MT0NBTF9ESVNCQUxFIDAKIC8vIERpc2FibGUgdGhlIFNwZWN1bGF0aXZlSklUIHdp
dGhvdXQgaGF2aW5nIHRvIHRvdWNoIFBsYXRmb3JtLmghCiAjZGVmaW5lIERGR19ERUJVR19MT0NB
TF9ESVNCQUxFX1NQRUNVTEFUSVZFIDAKKy8vIEVuYWJsZSBPU1IgZW50cnkgZnJvbSBiYXNlbGlu
ZSBKSVQuCisjZGVmaW5lIEVOQUJMRV9ERkdfT1NSX0VOVFJZIEVOQUJMRV9USUVSRURfQ09NUElM
QVRJT04KIC8vIERpc2FibGUgdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQgYW5kIHVzZSBPU1IgaW5z
dGVhZC4KICNkZWZpbmUgRU5BQkxFX0RGR19PU1JfRVhJVCBFTkFCTEVfVElFUkVEX0NPTVBJTEFU
SU9OCiAvLyBHZW5lcmF0ZSBzdGF0cyBvbiBob3cgc3VjY2Vzc2Z1bCB3ZSB3ZXJlIGluIG1ha2lu
ZyB1c2Ugb2YgdGhlIERGRyBqaXQsIGFuZCByZW1haW5pbmcgb24gdGhlIGhvdCBwYXRoLgpAQCAt
NjUsNiArNjcsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNWYWx1
ZS5oIgorI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUu
aCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTIyNCwxNjIgKzIyNyw2IEBAIHN0cnVj
dCBPcEluZm8gewogICAgIHVuc2lnbmVkIG1fdmFsdWU7CiB9OwogCi10eXBlZGVmIHVpbnQ4X3Qg
UHJlZGljdGVkVHlwZTsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3ROb25lICAg
PSAwOwotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdENlbGwgICA9IDB4MDE7Ci1z
dGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0QXJyYXkgID0gMHgwMzsKLXN0YXRpYyBj
b25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RJbnQzMiAgPSAweDA0Owotc3RhdGljIGNvbnN0IFBy
ZWRpY3RlZFR5cGUgUHJlZGljdERvdWJsZSA9IDB4MDg7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVk
VHlwZSBQcmVkaWN0TnVtYmVyID0gMHgwYzsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFBy
ZWRpY3RCb29sZWFuID0gMHgxMDsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RU
b3AgICAgPSAweDFmOwotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgU3Ryb25nUHJlZGljdGlv
blRhZyA9IDB4ODA7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0aW9uVGFnTWFz
ayAgICA9IDB4ODA7Ci0KLWVudW0gUHJlZGljdGlvblNvdXJjZSB7IFdlYWtQcmVkaWN0aW9uLCBT
dHJvbmdQcmVkaWN0aW9uIH07Ci0KLWlubGluZSBib29sIGlzQ2VsbFByZWRpY3Rpb24oUHJlZGlj
dGVkVHlwZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFBy
ZWRpY3RDZWxsICYmICEodmFsdWUgJiB+KFByZWRpY3RBcnJheSB8IFByZWRpY3Rpb25UYWdNYXNr
KSk7Ci19Ci0KLWlubGluZSBib29sIGlzQXJyYXlQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFs
dWUpCi17Ci0gICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0gUHJlZGlj
dEFycmF5OwotfQotCi1pbmxpbmUgYm9vbCBpc0ludDMyUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBl
IHZhbHVlKQotewotICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spID09IFBy
ZWRpY3RJbnQzMjsKLX0KLQotaW5saW5lIGJvb2wgaXNEb3VibGVQcmVkaWN0aW9uKFByZWRpY3Rl
ZFR5cGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykg
PT0gUHJlZGljdERvdWJsZTsKLX0KLQotaW5saW5lIGJvb2wgaXNOdW1iZXJQcmVkaWN0aW9uKFBy
ZWRpY3RlZFR5cGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGljdE51bWJl
cikgJiYgISh2YWx1ZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3Rpb25UYWdNYXNrKSk7Ci19
Ci0KLWlubGluZSBib29sIGlzQm9vbGVhblByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0Qm9v
bGVhbjsKLX0KLQotaW5saW5lIGJvb2wgaXNTdHJvbmdQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUg
dmFsdWUpCi17Ci0gICAgQVNTRVJUKHZhbHVlICE9IChQcmVkaWN0Tm9uZSB8IFN0cm9uZ1ByZWRp
Y3Rpb25UYWcpKTsKLSAgICByZXR1cm4gISEodmFsdWUgJiBTdHJvbmdQcmVkaWN0aW9uVGFnKTsK
LX0KLQotI2lmbmRlZiBOREVCVUcKLWlubGluZSBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJp
bmcoUHJlZGljdGVkVHlwZSB2YWx1ZSkKLXsKLSAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHZh
bHVlKSkgewotICAgICAgICBzd2l0Y2ggKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSB7Ci0g
ICAgICAgIGNhc2UgUHJlZGljdE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWJv
dHRvbSI7Ci0gICAgICAgIGNhc2UgUHJlZGljdENlbGw6Ci0gICAgICAgICAgICByZXR1cm4gInAt
c3Ryb25nLWNlbGwiOwotICAgICAgICBjYXNlIFByZWRpY3RBcnJheToKLSAgICAgICAgICAgIHJl
dHVybiAicC1zdHJvbmctYXJyYXkiOwotICAgICAgICBjYXNlIFByZWRpY3RJbnQzMjoKLSAgICAg
ICAgICAgIHJldHVybiAicC1zdHJvbmctaW50MzIiOwotICAgICAgICBjYXNlIFByZWRpY3REb3Vi
bGU6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWRvdWJsZSI7Ci0gICAgICAgIGNhc2Ug
UHJlZGljdE51bWJlcjoKLSAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctbnVtYmVyIjsKLSAg
ICAgICAgY2FzZSBQcmVkaWN0Qm9vbGVhbjoKLSAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmct
Ym9vbGVhbiI7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25n
LXRvcCI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2Ug
UHJlZGljdE5vbmU6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWJvdHRvbSI7Ci0gICAgY2FzZSBQ
cmVkaWN0Q2VsbDoKLSAgICAgICAgcmV0dXJuICJwLXdlYWstY2VsbCI7Ci0gICAgY2FzZSBQcmVk
aWN0QXJyYXk6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWFycmF5IjsKLSAgICBjYXNlIFByZWRp
Y3RJbnQzMjoKLSAgICAgICAgcmV0dXJuICJwLXdlYWstaW50MzIiOwotICAgIGNhc2UgUHJlZGlj
dERvdWJsZToKLSAgICAgICAgcmV0dXJuICJwLXdlYWstZG91YmxlIjsKLSAgICBjYXNlIFByZWRp
Y3ROdW1iZXI6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLW51bWJlciI7Ci0gICAgY2FzZSBQcmVk
aWN0Qm9vbGVhbjoKLSAgICAgICAgcmV0dXJuICJwLXdlYWstYm9vbGVhbiI7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuICJwLXdlYWstdG9wIjsKLSAgICB9Ci19Ci0jZW5kaWYKLQotaW5s
aW5lIFByZWRpY3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQcmVkaWN0ZWRUeXBlIGxlZnQsIFBy
ZWRpY3RlZFR5cGUgcmlnaHQpCi17Ci0gICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSA9
PSBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKQotICAgICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0
OwotICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkpIHsKLSAgICAgICAgQVNTRVJUKCFp
c1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKTsKLSAgICAgICAgcmV0dXJuIGxlZnQ7Ci0gICAgfQot
ICAgIEFTU0VSVCghaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpKTsKLSAgICBBU1NFUlQoaXNTdHJv
bmdQcmVkaWN0aW9uKHJpZ2h0KSk7Ci0gICAgcmV0dXJuIHJpZ2h0OwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotaW5saW5lIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3Rl
ZFR5cGUgcmlnaHQpCi17Ci0gICAgUHJlZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gc3RhdGlj
X2Nhc3Q8VD4obWVyZ2VQcmVkaWN0aW9ucyhzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0
KSwgcmlnaHQpKTsKLSAgICBib29sIHJlc3VsdCA9IG5ld1ByZWRpY3Rpb24gIT0gc3RhdGljX2Nh
c3Q8UHJlZGljdGVkVHlwZT4obGVmdCk7Ci0gICAgbGVmdCA9IG5ld1ByZWRpY3Rpb247Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24o
UHJlZGljdGVkVHlwZSB0eXBlLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKLXsKLSAgICBBU1NF
UlQoISh0eXBlICYgU3Ryb25nUHJlZGljdGlvblRhZykpOwotICAgIEFTU0VSVChzb3VyY2UgPT0g
U3Ryb25nUHJlZGljdGlvbiB8fCBzb3VyY2UgPT0gV2Vha1ByZWRpY3Rpb24pOwotICAgIGlmICh0
eXBlID09IFByZWRpY3ROb25lKQotICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAgcmV0
dXJuIHR5cGUgfCAoc291cmNlID09IFN0cm9uZ1ByZWRpY3Rpb24gPyBTdHJvbmdQcmVkaWN0aW9u
VGFnIDogMCk7Ci19Ci0KLSNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi1pbmxpbmUgUHJlZGlj
dGVkVHlwZSBtYWtlUHJlZGljdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFZh
bHVlUHJvZmlsZSYgcHJvZmlsZSkKLXsKLSAgICBWYWx1ZVByb2ZpbGU6OlN0YXRpc3RpY3Mgc3Rh
dGlzdGljczsKLSAgICBwcm9maWxlLmNvbXB1dGVTdGF0aXN0aWNzKGdsb2JhbERhdGEsIHN0YXRp
c3RpY3MpOwotICAgIAotICAgIGlmICghc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1
cm4gUHJlZGljdE5vbmU7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzID09IHN0YXRp
c3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVk
aWN0SW50MzI7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuZG91YmxlcyA9PSBzdGF0aXN0aWNz
LnNhbXBsZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdERv
dWJsZTsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5pbnQzMnMgKyBzdGF0aXN0aWNzLmRvdWJs
ZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlv
blRhZyB8IFByZWRpY3ROdW1iZXI7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuYXJyYXlzID09
IHN0YXRpc3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcg
fCBQcmVkaWN0QXJyYXk7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuY2VsbHMgPT0gc3RhdGlz
dGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRp
Y3RDZWxsOwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmJvb2xlYW5zID09IHN0YXRpc3RpY3Mu
c2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Qm9v
bGVhbjsKLSAgICAKLSAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RUb3A7
Ci19Ci0jZW5kaWYKLQogLy8gPT09IE5vZGUgPT09CiAvLwogLy8gTm9kZSByZXByZXNlbnRzIGEg
c2luZ2xlIG9wZXJhdGlvbiBpbiB0aGUgZGF0YSBmbG93IGdyYXBoLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJKSVQuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitpbmxpbmUgYm9vbCBwcmVkaWN0aW9uSXNWYWxpZChK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTVmFsdWUgdmFsdWUsIFByZWRpY3RlZFR5cGUgdHlw
ZSkKK3sKKyAgICAvLyB0aGlzIHRha2VzIGludG8gYWNjb3VudCBvbmx5IGxvY2FsIHZhcmlhYmxl
IHByZWRpY3Rpb25zIHRoYXQgZ2V0IGVuZm9yY2VkCisgICAgLy8gb24gU2V0TG9jYWwuCisgICAg
CisgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHR5cGUpKQorICAgICAgICByZXR1cm4gdmFsdWUu
aXNJbnQzMigpOworICAgIAorICAgIGlmIChpc0FycmF5UHJlZGljdGlvbih0eXBlKSkKKyAgICAg
ICAgcmV0dXJuIGlzSlNBcnJheShnbG9iYWxEYXRhLCB2YWx1ZSk7CisgICAgCisgICAgaWYgKGlz
Qm9vbGVhblByZWRpY3Rpb24odHlwZSkpCisgICAgICAgIHJldHVybiB2YWx1ZS5pc0Jvb2xlYW4o
KTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4
ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCit7CisjaWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCisgICAgQVNTRVJUKGNvZGVCbG9jay0+
Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+Z2V0
SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKworI2lmIEVOQUJMRShKSVRfVkVS
Qk9TRV9PU1IpCisgICAgcHJpbnRmKCJPU1IgaW4gJXAoJXApIGZyb20gYmMjJXVcbiIsIGNvZGVC
bG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBieXRlY29kZUluZGV4KTsKKyNlbmRpZgor
ICAgIAorICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7
CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKTsKKyAgICAKKyAgICAvLyBUaGUgY29kZSBiZWxvdyBjaGVja3MgaWYgaXQgaXMgc2FmZSB0
byBwZXJmb3JtIE9TUiBlbnRyeS4gSXQgbWF5IGZpbmQKKyAgICAvLyB0aGF0IGl0IGlzIHVuc2Fm
ZSB0byBkbyBzbywgZm9yIGFueSBudW1iZXIgb2YgcmVhc29ucywgd2hpY2ggYXJlIGRvY3VtZW50
ZWQKKyAgICAvLyBiZWxvdy4gSWYgdGhlIGNvZGUgZGVjaWRlcyBub3QgdG8gT1NSIHRoZW4gaXQg
cmV0dXJucyAwLCBhbmQgaXQncyB0aGUgY2FsbGVyJ3MKKyAgICAvLyByZXNwb25zaWJpbGl0eSB0
byBwYXRjaCB1cCB0aGUgc3RhdGUgaW4gc3VjaCBhIHdheSBhcyB0byBlbnN1cmUgdGhhdCBpdCdz
CisgICAgLy8gYm90aCBzYWZlIGFuZCBlZmZpY2llbnQgdG8gY29udGludWUgZXhlY3V0aW5nIGJh
c2VsaW5lIGNvZGUgZm9yIG5vdy4gVGhpcworICAgIC8vIHNob3VsZCBhbG1vc3QgY2VydGFpbmx5
IGluY2x1ZGUgY2FsbGluZyBlaXRoZXIgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCkK
KyAgICAvLyBvciBjb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCkuCisgICAgCisg
ICAgLy8gMSkgQ2hlY2sgaWYgdGhlIERGRyBjb2RlIHNldCBhIGNvZGUgbWFwLiBJZiBpdCBkaWRu
J3QsIGl0IG1lYW5zIHRoYXQgaXQKKyAgICAvLyAgICBjYW5ub3QgaGFuZGxlIE9TUiBlbnRyeS4g
VGhpcyBjdXJyZW50bHkgb25seSBoYXBwZW5zIGlmIHdlIGRpc2FibGUKKyAgICAvLyAgICBkeW5h
bWljIHNwZWN1bGF0aW9uIHRlcm1pbmF0aW9uIGFuZCBlbmQgdXAgd2l0aCBhIERGRyBjb2RlIGJs
b2NrIHRoYXQKKyAgICAvLyAgICB3YXMgY29tcGlsZWQgZW50aXJlbHkgd2l0aCB0aGUgbm9uLXNw
ZWN1bGF0aXZlIEpJVC4gVGhlIG5vbi1zcGVjdWxhdGl2ZQorICAgIC8vICAgIEpJVCBkb2VzIG5v
dCBzdXBwb3J0IE9TUiBlbnRyeSBhbmQgcHJvYmFibHkgbmV2ZXIgd2lsbCwgc2luY2UgaXQgaXMK
KyAgICAvLyAgICBraW5kIG9mIGEgZGVwcmVjYXRlZCBjb21waWxlciByaWdodCBub3cuCisgICAg
CisjaWYgRU5BQkxFKERZTkFNSUNfVEVSTUlOQVRFX1NQRUNVTEFUSU9OKQorICAgIEFTU0VSVChj
b2RlQmxvY2stPmppdENvZGVNYXAoKSk7CisjZWxzZQorICAgIGlmICghY29kZUJsb2NrLT5qaXRD
b2RlTWFwKCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICBwcmludGYo
IiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugb2YgYSBtaXNzaW5nIEpJVCBjb2RlIG1hcC5cbiIpOwor
I2VuZGlmCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIC8vIDIp
IFZlcmlmeSBwcmVkaWN0aW9ucy4gSWYgdGhlIHByZWRpY3Rpb25zIGFyZSBpbmNvbnNpc3RlbnQg
d2l0aCB0aGUgYWN0dWFsCisgICAgLy8gICAgdmFsdWVzLCB0aGVuIE9TUiBlbnRyeSBpcyBub3Qg
cG9zc2libGUgYXQgdGhpcyB0aW1lLiBJdCdzIHRlbXB0aW5nIHRvCisgICAgLy8gICAgYXNzdW1l
IHRoYXQgd2UgY291bGQgc29tZWhvdyBhdm9pZCB0aGlzIGNhc2UuIFdlIGNhbiBjZXJ0YWlubHkg
YXZvaWQgaXQKKyAgICAvLyAgICBmb3IgZmlyc3QtdGltZSBsb29wIE9TUiAtIHRoYXQgaXMsIE9T
UiBpbnRvIGEgQ29kZUJsb2NrIHRoYXQgd2UgaGF2ZSBqdXN0CisgICAgLy8gICAgY29tcGlsZWQu
IFRoZW4gd2UgYXJlIGFsbW9zdCBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRoZSBwcmVkaWN0aW9u
cyB3aWxsCisgICAgLy8gICAgY2hlY2sgb3V0LiBJdCB3b3VsZCBiZSBwcmV0dHkgZWFzeSB0byBt
YWtlIHRoYXQgYSBoYXJkIGd1YXJhbnRlZS4gQnV0CisgICAgLy8gICAgdGhlbiB0aGVyZSB3b3Vs
ZCBzdGlsbCBiZSB0aGUgY2FzZSB3aGVyZSB0d28gY2FsbCBmcmFtZXMgd2l0aCB0aGUgc2FtZQor
ICAgIC8vICAgIGJhc2VsaW5lIENvZGVCbG9jayBhcmUgb24gdGhlIHN0YWNrIGF0IHRoZSBzYW1l
IHRpbWUuIFRoZSB0b3Agb25lCisgICAgLy8gICAgdHJpZ2dlcnMgY29tcGlsYXRpb24gYW5kIE9T
Ui4gSW4gdGhhdCBjYXNlLCB3ZSBtYXkgbm8gbG9uZ2VyIGhhdmUKKyAgICAvLyAgICBhY2N1cmF0
ZSB2YWx1ZSBwcm9maWxlcyBmb3IgdGhlIG9uZSBkZWVwZXIgaW4gdGhlIHN0YWNrLiBIZW5jZSwg
d2hlbiB3ZQorICAgIC8vICAgIHBvcCBpbnRvIHRoZSBDb2RlQmxvY2sgdGhhdCBpcyBkZWVwZXIg
b24gdGhlIHN0YWNrLCB3ZSBtaWdodCBPU1IgYW5kCisgICAgLy8gICAgcmVhbGl6ZSB0aGF0IHRo
ZSBwcmVkaWN0aW9ucyBhcmUgd3JvbmcuIFByb2JhYmx5LCBpbiBtb3N0IGNhc2VzLCB0aGlzIGlz
CisgICAgLy8gICAganVzdCBhbiBhbm9tYWx5IGluIHRoZSBzZW5zZSB0aGF0IHRoZSBvbGRlciBD
b2RlQmxvY2sgc2ltcGx5IHdlbnQgb2ZmCisgICAgLy8gICAgaW50byBhIGxlc3MtbGlrZWx5IHBh
dGguIFNvLCB0aGUgd2lzZXN0IGNvdXJzZSBvZiBhY3Rpb24gaXMgdG8gc2ltcGx5IG5vdAorICAg
IC8vICAgIE9TUiBhdCB0aGlzIHRpbWUuCisgICAgCisgICAgUHJlZGljdGlvblRyYWNrZXIqIHBy
ZWRpY3Rpb25zID0gYmFzZWxpbmVDb2RlQmxvY2stPnByZWRpY3Rpb25zKCk7CisgICAgCisgICAg
aWYgKHByZWRpY3Rpb25zLT5udW1iZXJPZkFyZ3VtZW50cygpID4gZXhlYy0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsK
KyAgICAgICAgaWYgKCFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVu
dChpIC0gMSksIHByZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKSB7CisjaWYg
RU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWls
ZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4iLCBpLCBleGVjLT5h
cmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24oKSwgcHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rp
b25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8g
a25vdyBpZiBhdCBhbiBPU1IgZW50cnksIGEgdmFyaWFibGUgaXMgbGl2ZS4gSWYgaXQgaXNuJ3QK
KyAgICAvLyB0aGVuIHdlIHNob3VsZG4ndCB0cnkgdG8gdmVyaWZ5IGl0cyBwcmVkaWN0aW9uLgor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZW
YXJpYWJsZXMoKTsgKytpKSB7CisgICAgICAgIGlmICghcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFs
RGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0aW9ucy0+Z2V0UHJl
ZGljdGlvbihpKSkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAg
cHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBlY3Rl
ZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigp
LCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdldFByZWRpY3Rpb24oaSkpKTsKKyNl
bmRpZgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Ly8gMykgQ2hlY2sgdGhlIHN0YWNrIGhlaWdodC4gVGhlIERGRyBKSVQgbWF5IHJlcXVpcmUgYSB0
YWxsZXIgc3RhY2sgdGhhbiB0aGUKKyAgICAvLyAgICBiYXNlbGluZSBKSVQsIGluIHNvbWUgY2Fz
ZXMuIElmIHdlIGNhbid0IGdyb3cgdGhlIHN0YWNrLCB0aGVuIGRvbid0IGRvCisgICAgLy8gICAg
T1NSIHJpZ2h0IG5vdy4gVGhhdCdzIHRoZSBvbmx5IG9wdGlvbiB3ZSBoYXZlIHVubGVzcyB3ZSB3
YW50IGJhc2ljIGJsb2NrCisgICAgLy8gICAgYm91bmRhcmllcyB0byBzdGFydCB0aHJvd2luZyBS
YW5nZUVycm9ycy4gQWx0aG91Z2ggdGhhdCB3b3VsZCBiZSBwb3NzaWJsZSwKKyAgICAvLyAgICBp
dCBzZWVtcyBzaWxseTogeW91J2QgYmUgZGl2ZXJ0aW5nIHRoZSBwcm9ncmFtIHRvIGVycm9yIGhh
bmRsaW5nIHdoZW4gaXQKKyAgICAvLyAgICB3b3VsZCBoYXZlIG90aGVyd2lzZSBqdXN0IGtlcHQg
cnVubmluZyBhbGJlaXQgbGVzcyBxdWlja2x5LgorICAgIAorICAgIGlmICghZ2xvYmFsRGF0YS0+
aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2NvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCisgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGgg
ZmFpbGVkLi5cbiIpOworI2VuZGlmCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiICAgIE9TUiBzaG91bGQgc3Vj
Y2VlZC5cbiIpOworI2VuZGlmCisgICAgCisgICAgLy8gNCkgRml4IHRoZSBjYWxsIGZyYW1lLgor
ICAgIAorICAgIGV4ZWMtPnNldENvZGVCbG9jayhjb2RlQmxvY2spOworICAgIAorICAgIC8vIDUp
IEZpbmQgYW5kIHJldHVybiB0aGUgZGVzdGluYXRpb24gbWFjaGluZSBjb2RlIGFkZHJlc3MuIFRo
ZSBERkcgc3RvcmVzCisgICAgLy8gICAgdGhlIG1hY2hpbmUgY29kZSBvZmZzZXRzIG9mIE9TUiB0
YXJnZXRzIGluIGEgQ29tcGFjdEpJVENvZGVNYXAuCisgICAgLy8gICAgRGVjb2RpbmcgaXQgaXMg
bm90IHN1cGVyIGVmZmljaWVudCwgYnV0IHdlIGV4cGVjdCB0aGF0IE9TUiBlbnRyeQorICAgIC8v
ICAgIGhhcHBlbnMgc3VmZmljaWVudGx5IHJhcmVseSwgYW5kIHRoYXQgT1NSIGVudHJ5cG9pbnRz
IGFyZSBzdWZmaWNpZW50bHkKKyAgICAvLyAgICBmZXcsIHRoYXQgdGhpcyB3b24ndCBodXJ0IHRo
cm91Z2hwdXQuIE5vdGUgdGhhdCB0aGUgb25seSByZWFsCisgICAgLy8gICAgcmVhc29uIHdoeSB3
ZSB1c2UgYSBDb21wYWN0SklUQ29kZU1hcCBpcyB0byBhdm9pZCBoYXZpbmcgdG8gaW50cm9kdWNl
CisgICAgLy8gICAgeWV0IGFub3RoZXIgZGF0YSBzdHJ1Y3R1cmUgZm9yIG1hcHBpbmcgYmV0d2Vl
biBieXRlY29kZSBpbmRpY2VzIGFuZAorICAgIC8vICAgIG1hY2hpbmUgY29kZSBvZmZzZXRzLgor
ICAgIAorICAgIENvbXBhY3RKSVRDb2RlTWFwOjpEZWNvZGVyIGRlY29kZXIoY29kZUJsb2NrLT5q
aXRDb2RlTWFwKCkpOworICAgIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0ID0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgIHdoaWxlIChkZWNvZGVyLm51bWJlck9m
RW50cmllc1JlbWFpbmluZygpKSB7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRCeXRlY29kZUlu
ZGV4OworICAgICAgICB1bnNpZ25lZCBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAg
IGRlY29kZXIucmVhZChjdXJyZW50Qnl0ZWNvZGVJbmRleCwgY3VycmVudE1hY2hpbmVDb2RlT2Zm
c2V0KTsKKyAgICAgICAgaWYgKGN1cnJlbnRCeXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5kZXgp
IHsKKyAgICAgICAgICAgIG1hY2hpbmVDb2RlT2Zmc2V0ID0gY3VycmVudE1hY2hpbmVDb2RlT2Zm
c2V0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQVNT
RVJUKG1hY2hpbmVDb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSk7CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0
KCkpICsgbWFjaGluZUNvZGVPZmZzZXQpOworICAgIAorI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCisgICAgcHJpbnRmKCIgICAgT1NSIHJldHVybmluZyBtYWNoaW5lIGNvZGUgYWRkcmVzcyAl
cC5cbiIsIHJlc3VsdCk7CisjZW5kaWYKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2Ug
Ly8gRU5BQkxFKERGR19PU1JfRU5UUlkpCisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVO
VVNFRF9QQVJBTShjb2RlQmxvY2spOworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsK
KyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPU1JFbnRyeV9o
CisjZGVmaW5lIERGR09TUkVudHJ5X2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEV4ZWNT
dGF0ZTsKK2NsYXNzIENvZGVCbG9jazsKKworbmFtZXNwYWNlIERGRyB7CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKK3ZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyNlbHNlCitpbmxpbmUgdm9pZCogcHJlcGFyZU9TUkVu
dHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkKSB7IHJldHVybiAwOyB9CisjZW5k
aWYKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gREZHT1NSRW50cnlf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25UcmFja2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
VHJhY2tlci5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblRyYWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERG
R1ByZWRpY3Rpb25UcmFja2VyX2gKLSNkZWZpbmUgREZHUHJlZGljdGlvblRyYWNrZXJfaAotCi0j
aWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJERkdOb2RlLmgiCi0KLW5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rpbmd1aXNo
IHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KLWlubGluZSBib29sIG9wZXJhbmRJ
c0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQotCi1zdHJ1Y3Qg
UHJlZGljdGlvblNsb3QgewotcHVibGljOgotICAgIFByZWRpY3Rpb25TbG90KCkKLSAgICAgICAg
OiBtX3ZhbHVlKFByZWRpY3ROb25lKQotICAgIHsKLSAgICB9Ci0gICAgUHJlZGljdGVkVHlwZSBt
X3ZhbHVlOwotfTsKLQotY2xhc3MgUHJlZGljdGlvblRyYWNrZXIgewotcHVibGljOgotICAgIFBy
ZWRpY3Rpb25UcmFja2VyKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFByZWRpY3Rpb25UcmFj
a2VyKHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtVmFyaWFibGVzKQotICAgICAg
ICA6IG1fYXJndW1lbnRzKG51bUFyZ3VtZW50cykKLSAgICAgICAgLCBtX3ZhcmlhYmxlcyhudW1W
YXJpYWJsZXMpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGluaXRpYWxpemVTaW1pbGFy
VG8oY29uc3QgUHJlZGljdGlvblRyYWNrZXImIG90aGVyKQotICAgIHsKLSAgICAgICAgbV9hcmd1
bWVudHMucmVzaXplKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpOwotICAgICAgICBtX3Zhcmlh
Ymxlcy5yZXNpemUob3RoZXIubnVtYmVyT2ZWYXJpYWJsZXMoKSk7Ci0gICAgfQotICAgIAotICAg
IHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNp
emUoKTsgfQotICAgIHNpemVfdCBudW1iZXJPZlZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1f
dmFyaWFibGVzLnNpemUoKTsgfQotICAgIAotICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXhGb3JP
cGVyYW5kKGludCBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBvcGVyYW5kICsgbV9hcmd1bWVudHMu
c2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyB9Ci0KLSAgICBib29s
IHByZWRpY3RBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtZXJn
ZVByZWRpY3Rpb24obV9hcmd1bWVudHNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9u
KHByZWRpY3Rpb24sIHNvdXJjZSkpOwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3QoaW50
IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3Vy
Y2UpCi0gICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAg
ICAgICAgICByZXR1cm4gcHJlZGljdEFyZ3VtZW50KGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKG9w
ZXJhbmQpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJh
bmQgPj0gbV92YXJpYWJsZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQob3BlcmFuZCA+
PSAwKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvcGVyYW5kICsgMSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV92YXJpYWJs
ZXNbb3BlcmFuZF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1i
ZXIsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCi0g
ICAgewotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9y
IGl0ZXIgPSBtX2dsb2JhbFZhcnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKLSAgICAgICAgaWYgKGl0
ZXIgPT0gbV9nbG9iYWxWYXJzLmVuZCgpKSB7Ci0gICAgICAgICAgICBQcmVkaWN0aW9uU2xvdCBw
cmVkaWN0aW9uU2xvdDsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbWVyZ2VQcmVkaWN0aW9u
KHByZWRpY3Rpb25TbG90Lm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJj
ZSkpOwotICAgICAgICAgICAgbV9nbG9iYWxWYXJzLmFkZCh2YXJOdW1iZXIgKyAxLCBwcmVkaWN0
aW9uU2xvdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUsIG1ha2VQcmVkaWN0
aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3Qo
Tm9kZSYgbm9kZSwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNv
dXJjZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICBjYXNlIEdl
dExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIHByZWRpY3Qobm9kZS5sb2NhbCgpLCBwcmVkaWN0
aW9uLCBzb3VyY2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0R2xvYmFs
VmFyOgotICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1iZXIo
KSwgcHJlZGljdGlvbiwgc291cmNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEdldEJ5SWQ6Ci0gICAgICAgIGNhc2UgR2V0TWV0aG9kOgotICAgICAgICBjYXNlIEdldEJ5VmFs
OgotICAgICAgICBjYXNlIENhbGw6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICAg
ICAgcmV0dXJuIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIFByZWRpY3RlZFR5cGUgZ2V0QXJndW1lbnRQcmVkaWN0aW9uKHVuc2lnbmVkIGFyZ3VtZW50
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XS5tX3ZhbHVlOwot
ICAgIH0KLQotICAgIFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihpbnQgb3BlcmFuZCkKLSAg
ICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAg
IHJldHVybiBnZXRBcmd1bWVudFByZWRpY3Rpb24oYXJndW1lbnRJbmRleEZvck9wZXJhbmQob3Bl
cmFuZCkpOwotICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPCBtX3ZhcmlhYmxlcy5zaXpl
KCkpCi0gICAgICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF0ubV92YWx1ZTsKLSAg
ICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwotICAgIH0KLSAgICAKLSAgICBQcmVkaWN0ZWRUeXBl
IGdldEdsb2JhbFZhclByZWRpY3Rpb24odW5zaWduZWQgdmFyTnVtYmVyKQotICAgIHsKLSAgICAg
ICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBpdGVyID0gbV9n
bG9iYWxWYXJzLmZpbmQodmFyTnVtYmVyICsgMSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fZ2xv
YmFsVmFycy5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAgICAgICAg
cmV0dXJuIGl0ZXItPnNlY29uZC5tX3ZhbHVlOwotICAgIH0KLSAgICAKLSAgICBQcmVkaWN0ZWRU
eXBlIGdldFByZWRpY3Rpb24oTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9k
ZS5vcCkgewotICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIGdldFBy
ZWRpY3Rpb24obm9kZS5sb2NhbCgpKTsKLSAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAg
ICAgICAgICByZXR1cm4gZ2V0R2xvYmFsVmFyUHJlZGljdGlvbihub2RlLnZhck51bWJlcigpKTsK
LSAgICAgICAgY2FzZSBHZXRCeUlkOgotICAgICAgICBjYXNlIEdldE1ldGhvZDoKLSAgICAgICAg
Y2FzZSBHZXRCeVZhbDoKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVj
dDoKLSAgICAgICAgICAgIHJldHVybiBub2RlLmdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLXByaXZhdGU6Ci0gICAgVmVjdG9yPFByZWRpY3Rpb25TbG90LCAxNj4gbV9hcmd1bWVu
dHM7Ci0gICAgVmVjdG9yPFByZWRpY3Rpb25TbG90LCAxNj4gbV92YXJpYWJsZXM7Ci0gICAgSGFz
aE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+IG1fZ2xvYmFsVmFyczsKLX07Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5k
aWYgLy8gREZHUHJlZGljdGlvblRyYWNrZXJfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk0OTk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAz
LDE0ICsxMDMsMTQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoW25v
ZGVJbmRleF0uaGFzUmVzdWx0KCkpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIERGRzo6bWVy
Z2VQcmVkaWN0aW9uKG1fdXNlc1tub2RlSW5kZXhdLCBwcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0
dXJuIEpTQzo6bWVyZ2VQcmVkaWN0aW9uKG1fdXNlc1tub2RlSW5kZXhdLCBwcmVkaWN0aW9uKTsK
ICAgICB9CiAgICAgCiAgICAgYm9vbCBtZXJnZVByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmhh
c1Jlc3VsdCgpKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBERkc6Om1lcmdlUHJlZGljdGlv
bihtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSwgcHJlZGljdGlvbik7CisgICAgICAgIHJl
dHVybiBKU0M6Om1lcmdlUHJlZGljdGlvbihtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSwg
cHJlZGljdGlvbik7CiAgICAgfQogICAgIAogICAgIHZvaWQgcHJvcGFnYXRlTm9kZShOb2RlJiBu
b2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDk0OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OTQsNiArMTQ5NCwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiB7CiAgICAgQVNTRVJU
KG1fY29tcGlsZU9rYXkpOwogICAgIEFTU0VSVChtX2NvbXBpbGVJbmRleCA9PSBibG9jay5iZWdp
bik7CisgICAgCisgICAgaWYgKGJsb2NrLmlzT1NSVGFyZ2V0KQorICAgICAgICBtX2ppdC5ub3Rp
Y2VPU1JFbnRyeShibG9jayk7CisgICAgCiAgICAgbV9ibG9ja0hlYWRzW21fYmxvY2tdID0gbV9q
aXQubGFiZWwoKTsKICNpZiBFTkFCTEUoREZHX0pJVF9CUkVBS19PTl9FVkVSWV9CTE9DSykKICAg
ICBtX2ppdC5icmVha3BvaW50KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nv
bXBhY3RKSVRDb2RlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Db21wYWN0SklUQ29kZU1hcC5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODcsMjIg
Kzg3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBkZWNvZGUoVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4m
IHJlc3VsdCkgY29uc3QKKyAgICB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMoKSBjb25zdAogICAg
IHsKLSAgICAgICAgdW5zaWduZWQgcHJldmlvdXNCeXRlY29kZUluZGV4ID0gMDsKLSAgICAgICAg
dW5zaWduZWQgcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IDA7Ci0gICAgICAgIAotICAgICAg
ICByZXN1bHQucmVzaXplKG1fbnVtYmVyT2ZFbnRyaWVzKTsKLSAgICAgICAgdW5zaWduZWQgaiA9
IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bWJlck9mRW50cmllczsg
KytpKSB7Ci0gICAgICAgICAgICBwcmV2aW91c0J5dGVjb2RlSW5kZXggKz0gZGVjb2RlTnVtYmVy
KGopOwotICAgICAgICAgICAgcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCArPSBkZWNvZGVOdW1i
ZXIoaik7Ci0gICAgICAgICAgICByZXN1bHRbaV0ubV9ieXRlY29kZUluZGV4ID0gcHJldmlvdXNC
eXRlY29kZUluZGV4OwotICAgICAgICAgICAgcmVzdWx0W2ldLm1fbWFjaGluZUNvZGVPZmZzZXQg
PSBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0OwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChq
ID09IG1fc2l6ZSk7CisgICAgICAgIHJldHVybiBtX251bWJlck9mRW50cmllczsKICAgICB9CiAg
ICAgCisgICAgdm9pZCBkZWNvZGUoVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIHJl
c3VsdCkgY29uc3Q7CisgICAgCiBwcml2YXRlOgogICAgIENvbXBhY3RKSVRDb2RlTWFwKHVpbnQ4
X3QqIGJ1ZmZlciwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzKQogICAg
ICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKQEAgLTE2MiwxMSArMTUzLDM4IEBAIHB1YmxpYzoKICAg
ICAgICAgdW5zaWduZWQgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXg7CiAgICAgICAgIHVuc2lnbmVk
IG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldDsKICAgICB9OworICAgIAorICAgIGNsYXNzIERl
Y29kZXIgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWNvZGVyKTsKKyAgICBwdWJs
aWM6CisgICAgICAgIERlY29kZXIoY29uc3QgQ29tcGFjdEpJVENvZGVNYXAqKTsKKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mRW50cmllc1JlbWFpbmluZygpIGNvbnN0OworICAg
ICAgICB2b2lkIHJlYWQodW5zaWduZWQmIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkJiBtYWNoaW5l
Q29kZU9mZnNldCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvbXBh
Y3RKSVRDb2RlTWFwKiBtX2ppdENvZGVNYXA7CisgICAgICAgIHVuc2lnbmVkIG1fcHJldmlvdXNC
eXRlY29kZUluZGV4OworICAgICAgICB1bnNpZ25lZCBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZz
ZXQ7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nOworICAgICAg
ICB1bnNpZ25lZCBtX2J1ZmZlckluZGV4OworICAgIH07CiAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIEVuY29kZXI7CisgICAgZnJpZW5kIGNsYXNzIERlY29kZXI7CiB9OwogCitpbmxpbmUg
dm9pZCBDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlKFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgRGVjb2RlciBkZWNvZGVyKHRoaXMpOworICAg
IHJlc3VsdC5yZXNpemUoZGVjb2Rlci5udW1iZXJPZkVudHJpZXNSZW1haW5pbmcoKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKKyAgICAgICAgZGVj
b2Rlci5yZWFkKHJlc3VsdFtpXS5tX2J5dGVjb2RlSW5kZXgsIHJlc3VsdFtpXS5tX21hY2hpbmVD
b2RlT2Zmc2V0KTsKKyAgICAKKyAgICBBU1NFUlQoIWRlY29kZXIubnVtYmVyT2ZFbnRyaWVzUmVt
YWluaW5nKCkpOworfQorCiBpbmxpbmUgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29k
ZXIoKQogICAgIDogbV9idWZmZXIoMCkKICAgICAsIG1fc2l6ZSgwKQpAQCAtMjQ5LDYgKzI2Nywz
MiBAQCBpbmxpbmUgdm9pZCBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6CiAgICAgfQogfQog
CitpbmxpbmUgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29kZXI6OkRlY29kZXIoY29uc3QgQ29tcGFj
dEpJVENvZGVNYXAqIGppdENvZGVNYXApCisgICAgOiBtX2ppdENvZGVNYXAoaml0Q29kZU1hcCkK
KyAgICAsIG1fcHJldmlvdXNCeXRlY29kZUluZGV4KDApCisgICAgLCBtX3ByZXZpb3VzTWFjaGlu
ZUNvZGVPZmZzZXQoMCkKKyAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKGppdENvZGVN
YXAtPm1fbnVtYmVyT2ZFbnRyaWVzKQorICAgICwgbV9idWZmZXJJbmRleCgwKQoreworfQorCitp
bmxpbmUgdW5zaWduZWQgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29kZXI6Om51bWJlck9mRW50cmll
c1JlbWFpbmluZygpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWlu
aW5nIHx8IG1fYnVmZmVySW5kZXggPT0gbV9qaXRDb2RlTWFwLT5tX3NpemUpOworICAgIHJldHVy
biBtX251bWJlck9mRW50cmllc1JlbWFpbmluZzsKK30KKworaW5saW5lIHZvaWQgQ29tcGFjdEpJ
VENvZGVNYXA6OkRlY29kZXI6OnJlYWQodW5zaWduZWQmIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVk
JiBtYWNoaW5lQ29kZU9mZnNldCkKK3sKKyAgICBBU1NFUlQobnVtYmVyT2ZFbnRyaWVzUmVtYWlu
aW5nKCkpOworICAgIAorICAgIG1fcHJldmlvdXNCeXRlY29kZUluZGV4ICs9IG1faml0Q29kZU1h
cC0+ZGVjb2RlTnVtYmVyKG1fYnVmZmVySW5kZXgpOworICAgIG1fcHJldmlvdXNNYWNoaW5lQ29k
ZU9mZnNldCArPSBtX2ppdENvZGVNYXAtPmRlY29kZU51bWJlcihtX2J1ZmZlckluZGV4KTsKKyAg
ICBieXRlY29kZUluZGV4ID0gbV9wcmV2aW91c0J5dGVjb2RlSW5kZXg7CisgICAgbWFjaGluZUNv
ZGVPZmZzZXQgPSBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQ7CisgICAgbV9udW1iZXJPZkVu
dHJpZXNSZW1haW5pbmctLTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBD
b21wYWN0SklUQ29kZU1hcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSw4IEBAIHZvaWQgSklUOjplbWl0T3B0aW1pemF0aW9uQ2hl
Y2soT3B0aW1pemEKICAgICAKICAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyKFNp
Z25lZCwgVHJ1c3RlZEltbTMyKGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrID8gMSA6IDMw
KSwgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+bV9leGVjdXRlQ291bnRlcikpOwogICAg
IEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNr
ID8gY3RpX29wdGltaXplX2Zyb21fbG9vcCA6IGN0aV9vcHRpbWl6ZV9mcm9tX3JldCk7CisgICAg
aWYgKGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrKQorICAgICAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChJbW0zMihtX2J5dGVjb2RlT2Zmc2V0KSk7CiAgICAgc3R1YkNhbGwuY2FsbCgpOwog
ICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOwogfQpAQCAtMTE1LDggKzExNyw2IEBAIHZvaWQg
SklUOjplbWl0VGltZW91dENoZWNrKCkKICAgICBzdHViQ2FsbC5jYWxsKHRpbWVvdXRDaGVja1Jl
Z2lzdGVyKTsKICAgICBzdHViQ2FsbC5nZXRBcmd1bWVudCgwLCByZWdUMSwgcmVnVDApOyAvLyBy
ZWxvYWQgbGFzdCByZXN1bHQgcmVnaXN0ZXJzLgogICAgIHNraXBUaW1lb3V0LmxpbmsodGhpcyk7
Ci0gICAgCi0gICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKExvb3BPcHRpbWl6YXRpb25DaGVjayk7
CiB9CiAjZWxzZQogdm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQpAQCAtMTI2LDggKzEyNiw2
IEBAIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKICAgICBza2lwVGltZW91dC5saW5rKHRo
aXMpOwogCiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwotICAgIAotICAgIGVtaXRPcHRp
bWl6YXRpb25DaGVjayhMb29wT3B0aW1pemF0aW9uQ2hlY2spOwogfQogI2VuZGlmCiAKQEAgLTI4
Myw2ICsyODEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IERFRklORV9PUChvcF9qdHJ1ZSkKICAgICAgICAgREVGSU5FX09QKG9wX2xvYWRfdmFyYXJncykK
ICAgICAgICAgREVGSU5FX09QKG9wX2xvb3ApCisgICAgICAgIERFRklORV9PUChvcF9sb29wX2hp
bnQpCiAgICAgICAgIERFRklORV9PUChvcF9sb29wX2lmX2xlc3MpCiAgICAgICAgIERFRklORV9P
UChvcF9sb29wX2lmX2xlc3NlcSkKICAgICAgICAgREVGSU5FX09QKG9wX2xvb3BfaWZfZ3JlYXRl
cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw5
IEBACiAKICNpZiBFTkFCTEUoSklUKQogCisvLyBWZXJib3NlIGxvZ2dpbmcgZm9yIE9TUi1yZWxh
dGVkIGNvZGUuCisjZGVmaW5lIEVOQUJMRV9KSVRfVkVSQk9TRV9PU1IgMAorCiAvLyBXZSd2ZSBy
dW4gaW50byBzb21lIHByb2JsZW1zIHdoZXJlIGNoYW5naW5nIHRoZSBzaXplIG9mIHRoZSBjbGFz
cyBKSVQgbGVhZHMgdG8KIC8vIHBlcmZvcm1hbmNlIGZsdWN0dWF0aW9ucy4gIFRyeSBmb3JjaW5n
IGFsaWdubWVudCBpbiBhbiBhdHRlbXB0IHRvIHN0YWJhbGl6ZSB0aGlzLgogI2lmIENPTVBJTEVS
KEdDQykKQEAgLTc5Myw2ICs3OTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0X29wX2p0cnVlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2FkX3Zh
cmFyZ3MoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvb3AoSW5zdHJ1Y3Rp
b24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2xvb3BfaGludChJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfbG9vcF9pZl9sZXNzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9sb29wX2lmX2xlc3NlcShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfbG9vcF9pZl9ncmVhdGVyKEluc3RydWN0aW9uKik7CkBAIC0xMDY2LDYgKzEwNzAsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVtaXRfb3Bfam1wKGN1cnJlbnRJbnN0cnVjdGlv
bik7CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChJbnN0
cnVjdGlvbiopCisgICAgeworICAgICAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soTG9vcE9wdGlt
aXphdGlvbkNoZWNrKTsKKyAgICB9CisKICAgICBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRfb3BfbG9v
cF9pZl90cnVlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgewogICAgICAg
ICBlbWl0VGltZW91dENoZWNrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDExIEBACiAjaW5jbHVkZSAi
QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCi0jaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVk
ZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAi
R2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiU3Ryb25nLmgiCisjaW5jbHVkZSAiSGVhcC5oIgog
I2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpT
QXJyYXkuaCIKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIK
ICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1
ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDxz
dGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTgyMywxMCArMTgyNCw0MiBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4g
PSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKLQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgg
PSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKKyAgICAKICAgICBKU09iamVjdCogZXJyb3Ig
PSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKICAg
ICBpZiAoZXJyb3IpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVk
IGNvbXBpbGF0aW9uIGZyb20gbG9vcCBmYWlsZWQuXG4iKTsKKyAgICAKKyAgICBpZiAoY29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpID09IGNvZGVCbG9jaykgeworI2lmIEVOQUJMRShKSVRfVkVSQk9T
RV9PU1IpCisgICAgICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9tIGxvb3AgZmFpbGVkLlxu
IiwgY29kZUJsb2NrKTsKKyNlbmRpZgorCisgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJ
VFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIGNvZGVCbG9jay0+ZG9u
dE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQo
KTsKKyAgICBBU1NFUlQob3B0aW1pemVkQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29k
ZTo6REZHSklUKTsKKyAgICAKKyAgICBpZiAodm9pZCogYWRkcmVzcyA9IERGRzo6cHJlcGFyZU9T
UkVudHJ5KGNhbGxGcmFtZSwgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewor
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiT3B0aW1pemluZyAl
cCBmcm9tIGxvb3Agc3VjY2VlZGVkLCBwZXJmb3JtaW5nIE9TUi5cbiIsIGNvZGVCbG9jayk7Cisj
ZW5kaWYKKworICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOworICAgICAgICBTVFVC
X1NFVF9SRVRVUk5fQUREUkVTUyhhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiT3B0aW1pemluZyAl
cCBmcm9tIGxvb3Agc3VjY2VlZGVkLCBPU1IgZmFpbGVkLlxuIiwgY29kZUJsb2NrKTsKKyNlbmRp
ZgorCisgICAgLy8gT1NSIGZhaWxlZCB0aGlzIHRpbWUsIGJ1dCBpdCBtaWdodCBzdWNjZWVkIG5l
eHQgdGltZSEgIExldCB0aGUgY29kZSBydW4gYSBiaXQKKyAgICAvLyBsb25nZXIgYW5kIHRoZW4g
dHJ5IGFnYWluLgorICAgIGNvZGVCbG9jay0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwogfQogCiBE
RUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tX3JldCkKQEAgLTE4NDAsNiAr
MTg3MywyNCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAg
SlNPYmplY3QqIGVycm9yID0gY29kZUJsb2NrLT5jb21waWxlT3B0aW1pemVkKGNhbGxGcmFtZSwg
c2NvcGVDaGFpbik7CiAgICAgaWYgKGVycm9yKQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldB
Uk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmcm9tIHJldCBmYWlsZWQuXG4iKTsKKyAgICAK
KyAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpID09IGNvZGVCbG9jaykgeworI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9t
IHJldHVybiBmYWlsZWQuXG4iLCBjb2RlQmxvY2spOworI2VuZGlmCisKKyAgICAgICAgQVNTRVJU
KGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICAg
ICAgY29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIEFTU0VSVChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPmdldEpJ
VFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworCisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09T
UikKKyAgICBwcmludGYoIk9wdGltaXppbmcgJXAgZnJvbSByZXR1cm4gc3VjY2VlZGVkLlxuIiwg
Y29kZUJsb2NrKTsKKyNlbmRpZgorICAgIAorICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7
CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF9pbnN0YW5jZW9m
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJ
KHJldmlzaW9uIDk0OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw3ICsxNzEsNiBAQCBKU09iamVjdCogRXZh
bEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMg
YWxyZWFkeSBhbiBhbHRlcm5hdGl2ZSBwaWVjZSBvZiBjb2RlIGNvbXBpbGVkIHdpdGggYSBkaWZm
ZXJlbnQKICAgICAgICAgICAgICAgICAvLyBKSVQsIHNvIHdlIGNhbiBzaWxlbnRseSBmYWlsLgog
ICAgICAgICAgICAgICAgIG1fZXZhbENvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RXZh
bENvZGVCbG9jaz4obV9ldmFsQ29kZUJsb2NrLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Ci0gICAg
ICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrLT5kb250T3B0aW1pemVBbnl0aW1lU29vbigpOwog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9q
aXRDb2RlRm9yQ2FsbCA9IEpJVDo6Y29tcGlsZShzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YSwg
bV9ldmFsQ29kZUJsb2NrLmdldCgpKTsKQEAgLTI5MSw3ICsyOTAsNiBAQCBKU09iamVjdCogUHJv
Z3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBpZiAobV9wcm9ncmFtQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKSB7CiAgICAgICAgICAgICAg
ICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxQcm9ncmFtQ29kZUJs
b2NrPihtX3Byb2dyYW1Db2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAg
ICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2pp
dENvZGVGb3JDYWxsID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBt
X3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpOwpAQCAtNDE3LDcgKzQxNSw2IEBAIEpTT2JqZWN0KiBG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGlmIChtX2NvZGVCbG9ja0ZvckNhbGwtPmFsdGVybmF0aXZlKCkpIHsKICAgICAgICAgICAg
ICAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEZ1bmN0aW9uQ29k
ZUJsb2NrPihtX2NvZGVCbG9ja0ZvckNhbGwtPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAg
ICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNhbGwtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7
CiAgICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+c2hh
cmVkU3ltYm9sVGFibGUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
IH0KQEAgLTQ5NCw3ICs0OTEsNiBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21w
aWxlRm9yCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QtPmFsdGVybmF0aXZlKCkpIHsKICAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Ci0gICAgICAgICAgICAg
ICAgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CiAg
ICAgICAgICAgICAgICAgbV9zeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5z
aGFyZWRTeW1ib2xUYWJsZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gOTQ5
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk2NSw3ICs5NjUsNyBAQAogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfVElF
UkVEX0NPTVBJTEFUSU9OKQotI2RlZmluZSBFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OIDAKKyNk
ZWZpbmUgRU5BQkxFX1RJRVJFRF9DT01QSUxBVElPTiAxCiAjZW5kaWYKIAogLyogQ3VycmVudGx5
IG9ubHkgaW1wbGVtZW50ZWQgZm9yIEpTVkFMVUU2NCwgb25seSB0ZXN0ZWQgb24gUExBVEZPUk0o
TUFDKSAqLwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107127</attachid>
            <date>2011-09-12 19:12:51 -0700</date>
            <delta_ts>2011-09-12 19:30:24 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>osrentry_patch_4.diff</filename>
            <type>text/plain</type>
            <size>82429</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE1IEBA
CisyMDExLTA5LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBiYXNlbGluZS0+c3BlY3VsYXRpdmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzkyMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIG9uLXN0YWNrLXJlcGxhY2UgKE9TUikgZnJvbSBjb2RlIHRo
YXQgaXMKKyAgICAgICAgcnVubmluZyBob3QgaW4gdGhlIG9sZCBKSVQgdG8gY29kZSBjb21waWxl
ZCBieSB0aGUgbmV3IEpJVC4gIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0IGxvbmctcnVubmlu
ZyBsb29wcyBiZW5lZml0IGZyb20gREZHIG9wdGltaXphdGlvbi4KKyAgICAgICAgSXQgYWxzbyBl
bnN1cmVzIHRoYXQgaWYgY29kZSBleHBlcmllbmNlcyBhIHNwZWN1bGF0aW9uIGZhaWx1cmUKKyAg
ICAgICAgaW4gREZHIGNvZGUsIGl0IGhhcyBhbiBvcHBvcnR1bml0eSB0byByZWVudGVyIHRoZSBE
Rkcgb25jZSBldmVyeQorICAgICAgICAxLDAwMCBsb29wIGl0ZXJhdGlvbnMgb3Igc28uCisgICAg
ICAgIAorICAgICAgICBUaGlzIHJlc3VsdHMgaW4gYSAyLjg4eCBzcGVlZC11cCBvbiBLcmFrZW4v
aW1hZ2luZy1kZXNhdHVyYXRlLAorICAgICAgICBhbmQgaXMgYSBwdXJlIHdpbiBvbiB0aGUgbWFp
biB0aHJlZSBiZW5jaG1hcmsgc3VpdGVzIChTdW5TcGlkZXIsCisgICAgICAgIFY4LCBLcmFrZW4p
LCB3aGVuIHRpZXJlZCBjb21waWxhdGlvbiBpcyBlbmFibGVkLgorCisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxv
Y2s6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpjb21w
aWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmNvbXBpbGVP
cHRpbWl6ZWQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5
dGVjb2RlL09wY29kZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OmlzQ2VsbFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjppc0Fy
cmF5UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OmlzSW50MzJQcmVkaWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6aXNEb3VibGVQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6aXNOdW1iZXJQcmVk
aWN0aW9uKToKKyAgICAgICAgKEpTQzo6aXNCb29sZWFuUHJlZGljdGlvbik6CisgICAgICAgIChK
U0M6OmlzU3Ryb25nUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OnByZWRpY3Rpb25Ub1N0cmlu
Zyk6CisgICAgICAgIChKU0M6Om1lcmdlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjptZXJn
ZVByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjptYWtlUHJlZGljdGlvbik6CisgICAgICAgICog
Ynl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6Om9wZXJh
bmRJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblNsb3Q6OlByZWRpY3Rpb25T
bG90KToKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblRyYWNrZXI6OlByZWRpY3Rpb25UcmFja2Vy
KToKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblRyYWNrZXI6OmluaXRpYWxpemVTaW1pbGFyVG8p
OgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6Y29weUxvY2Fsc0Zyb20pOgorICAg
ICAgICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6bnVtYmVyT2ZBcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6bnVtYmVyT2ZWYXJpYWJsZXMpOgorICAgICAgICAo
SlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6YXJndW1lbnRJbmRleEZvck9wZXJhbmQpOgorICAgICAg
ICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6cHJlZGljdEFyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6UHJlZGljdGlvblRyYWNrZXI6OnByZWRpY3QpOgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9u
VHJhY2tlcjo6cHJlZGljdEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OlByZWRpY3Rpb25UcmFj
a2VyOjpnZXRBcmd1bWVudFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9uVHJh
Y2tlcjo6Z2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OlByZWRpY3Rpb25UcmFja2VyOjpn
ZXRHbG9iYWxWYXJQcmVkaWN0aW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvb3BI
aW50KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6RG9XaGls
ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OldoaWxlTm9kZTo6ZW1pdEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6Rm9yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sp
OgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpj
YW5Db21waWxlT3Bjb2RlKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6cHJlZGljdCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldFByZWRp
Y3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OnByZWRpY3Rpb25Jc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6
REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uVHJhY2tlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjptZXJnZVVzZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQvQ29tcGFjdEpJVENvZGVNYXAuaDoKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6Om51bWJlck9mRW50cmllcyk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAgICAgIChKU0M6OkNvbXBhY3RKSVRDb2Rl
TWFwOjpEZWNvZGVyOjpudW1iZXJPZkVudHJpZXNSZW1haW5pbmcpOgorICAgICAgICAoSlNDOjpD
b21wYWN0SklUQ29kZU1hcDo6RGVjb2Rlcjo6cmVhZCk6CisgICAgICAgICogaml0L0pJVC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0VGltZW91dENoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVy
bmFsKToKKwogMjAxMS0wOS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIEphdmFTY3JpcHRDb3JlIGRvZXMgbm90IGhhdmUgc3BlY3VsYXRpdmUtPmJhc2VsaW5l
IE9TUgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0OTk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEwIEBACiAJCTBGRDNDODI4MTQx
MTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIu
aCAqLzsgfTsKIAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUx
RTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKIAkJMEZEODJF
MzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQg
LyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkQ4MkU1NDE0MURBRUVFMDAxNzlDOTQgLyogUHJlZGljdGVkVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJF
NEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkU1NTE0MURBRUVFMDAxNzlDOTQg
LyogUHJlZGljdGlvblRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDgyRTUwMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
RDgyRTU2MTQxREFGMDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQg
LyogREZHT1NSRW50cnkuY3BwICovOyB9OworCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyog
REZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjc3MTJBNkY3ODMw
MDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2
OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIz
IC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VDMjU1MDA1REJD
OEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVX
cmFwcGVyLmNwcCAqLzsgfTsKQEAgLTc5OSw2ICs4MDMsMTAgQEAKIAkJMEZEODJFMUUxNDE3MkMy
RjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuY3BwOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFGMTQxNzJDMkYw
MDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQ2FwYWJpbGl0aWVzLmg7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBD
b21wYWN0SklUQ29kZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21w
YWN0SklUQ29kZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkU0RjE0
MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcmVkaWN0ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDgyRTUwMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVkaWN0aW9uVHJhY2tlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRW50cnku
Y3BwOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZEODJFNTMxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkVudHJ5Lmg7IHBhdGggPSBkZmcvREZHT1NS
RW50cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjkyMTJB
NkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAyLDYgKzIyMTAsOCBAQAogCQk4NkVDOURCMzEz
MjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3Bw
ICovLAorCQkJCTBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovLAog
CQkJCTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovLAog
CQkJCTBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLywKIAkJ
CQkwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovLApAQCAtMjI5
OCw2ICsyMzA4LDggQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkU0RjE0
MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovLAorCQkJCTBGRDgyRTUwMTQxREFF
QTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICovLAogCQkJCTBGOTYzQjM2MTNGQzZG
REUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQk5NjlBMDc5MDBFRDFEM0FFMDBG
MUY2ODEgLyogQ29kZUJsb2NrLmNwcCAqLywKIAkJCQk5NjlBMDc5MTBFRDFEM0FFMDBGMUY2ODEg
LyogQ29kZUJsb2NrLmggKi8sCkBAIC0yMzk3LDYgKzI0MDksOSBAQAogCQkJCUJDMjU3REU4MEUx
RjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM0
MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkQ4MkU1NTE0MURBRUVFMDAxNzlDOTQgLyogUHJlZGljdGlvblRyYWNrZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5NCAvKiBQcmVkaWN0
ZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyog
Q29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2
RTBFMTZGNUNEMDBCMzQ0NjAgLyogVENTcGluTG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDY4
LDYgKzMwODMsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEZEODJFNTYxNDFEQUYw
ODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTYzQjJD
MTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZEM0M4MjUxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3Niw2ICsxMDc2LDEw
IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgICAg
IHByaW50ZigiWyU0ZF0gbG9vcF9pZl9ncmVhdGVyZXFcdCAlcywgJXMsICVkKC0+JWQpXG4iLCBs
b2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVj
LCByMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbG9vcF9oaW50OiB7CisgICAgICAgICAg
ICBwcmludGYoIlslNGRdIGxvb3BfaGludFxuIiwgbG9jYXRpb24pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7CiAgICAgICAgICAg
ICBpbnQgdGFibGVJbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGRl
ZmF1bHRUYXJnZXQgPSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTE0MDUsNyArMTQwOSw2IEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wU3RhdGlzdGljcygpCiBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2Jh
bE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQ
cm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBib29s
IGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAgICA6
IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFi
bGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKS5oZWFwKQotICAgICwgbV9leGVjdXRlQ291bnRlcigtMTAwMCkgLy8gdHJpZ2dlciBvcHRp
bWl6YXRpb24gd2hlbiBzaWduIGJpdCBjbGVhcnMKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJz
KDApCiAgICAgLCBtX251bVZhcnMoMCkKICAgICAsIG1fbnVtUGFyYW1ldGVycygwKQpAQCAtMTQy
Nyw2ICsxNDMwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwog
ICAgICwgbV9hbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSkKIHsKICAgICBBU1NFUlQobV9zb3VyY2Up
OworICAgIAorICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIAogI2lmIERVTVBfQ09ERV9CTE9D
S19TVEFUSVNUSUNTCiAgICAgbGl2ZUNvZGVCbG9ja1NldC5hZGQodGhpcyk7CkBAIC0xOTAxLDMz
ICsxOTA2LDI0IEBAIENvZGVCbG9jayogRnVuY3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VtZW4KIAog
SlNPYmplY3QqIFByb2dyYW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBl
eGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAgaWYgKHJlcGxhY2Vt
ZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkp
KSB7Ci0gICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoaXQgdGhp
cyBhZ2FpbiBhbnl0aW1lIHNvb24uCi0gICAgICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7
CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGll
ckpJVChnZXRKSVRUeXBlKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAgICAgSlNPYmpl
Y3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwogICAgIHJldHVy
biBlcnJvcjsKIH0KIAogSlNPYmplY3QqIEV2YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAg
aWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChn
ZXRKSVRUeXBlKCkpKSB7Ci0gICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBk
b24ndCBoaXQgdGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCi0gICAgICAgIGRvbnRPcHRpbWl6ZUFu
eXRpbWVTb29uKCk7CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRD
b2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9
CiAgICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwog
ICAgIHJldHVybiBlcnJvcjsKIH0KIAogSlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21w
aWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5O
b2RlKQogewotICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6
bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkgewotICAgICAgICAvLyBObyBPU1IgeWV0LCBzbyBt
YWtlIHN1cmUgd2UgZG9uJ3QgaGl0IHRoaXMgYWdhaW4gYW55dGltZSBzb29uLgotICAgICAgICBk
b250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRU
eXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQogICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZEZvcihleGVj
LCBzY29wZUNoYWluTm9kZSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENv
ZGVGb3JDYWxsKTsKICAgICByZXR1cm4gZXJyb3I7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSnVtcFRh
YmxlLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKKyNpbmNsdWRlICJQcmVkaWN0aW9uVHJhY2tlci5o
IgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKICNpbmNs
dWRlICJXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCkBAIC0yMjYsNiArMjI3LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgeyBy
ZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQogICAgICAgICBQYXNzT3duUHRyPENvZGVCbG9j
az4gcmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5yZWxlYXNlKCk7
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0UHJlZGljdGlvbnMoUGFzc093blB0cjxQcmVk
aWN0aW9uVHJhY2tlcj4gcHJlZGljdGlvbnMpIHsgbV9wcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25z
OyB9CisgICAgICAgIFByZWRpY3Rpb25UcmFja2VyKiBwcmVkaWN0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlZGljdGlvbnMuZ2V0KCk7IH0KIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90Vmlz
aXRvciYpOwpAQCAtNTg5LDE2ICs1OTMsODggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIGNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAgICAgICAgIAorICAgICAg
ICAvLyBGdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHdoZW4gdGllcmVkIGNvbXBpbGF0aW9uIGtp
Y2tzIGluLiBUaGlzCisgICAgICAgIC8vIGNvbnRyb2xzIGJvdGggd2hlbiB0aGUgb3B0aW1pemlu
ZyBjb21waWxlciBpcyBpbnZva2VkIGFuZCB3aGVuIE9TUgorICAgICAgICAvLyBlbnRyeSBoYXBw
ZW5zLiBUd28gdHJpZ2dlcnMgZXhpc3Q6IHRoZSBsb29wIHRyaWdnZXIgYW5kIHRoZSByZXR1cm4K
KyAgICAgICAgLy8gdHJpZ2dlci4gSW4gZWl0aGVyIGNhc2UsIHdoZW4gYW4gYWRkaXRpb24gdG8g
bV9leGVjdXRlQ291bnRlcgorICAgICAgICAvLyBjYXVzZXMgaXQgdG8gYmVjb21lIG5vbi1uZWdh
dGl2ZSwgdGhlIG9wdGltaXppbmcgY29tcGlsZXIgaXMKKyAgICAgICAgLy8gaW52b2tlZC4gVGhp
cyBpbmNsdWRlcyBhIGZhc3QgY2hlY2sgdG8gc2VlIGlmIHRoaXMgQ29kZUJsb2NrIGhhcworICAg
ICAgICAvLyBhbHJlYWR5IGJlZW4gb3B0aW1pemVkIChpLmUuIHJlcGxhY2VtZW50KCkgcmV0dXJu
cyBhIENvZGVCbG9jaworICAgICAgICAvLyB0aGF0IHdhcyBvcHRpbWl6ZWQgd2l0aCBhIGhpZ2hl
ciB0aWVyIEpJVCB0aGFuIHRoaXMgb25lKS4gSW4gdGhlCisgICAgICAgIC8vIGNhc2Ugb2YgdGhl
IGxvb3AgdHJpZ2dlciwgaWYgdGhlIG9wdGltaXplZCBjb21waWxhdGlvbiBzdWNjZWVkcworICAg
ICAgICAvLyAob3IgaGFzIGFscmVhZHkgc3VjY2VlZGVkIGluIHRoZSBwYXN0KSB0aGVuIE9TUiBp
cyBhdHRlbXB0ZWQgdG8KKyAgICAgICAgLy8gcmVkaXJlY3QgcHJvZ3JhbSBmbG93IGludG8gdGhl
IG9wdGltaXplZCBjb2RlLgorICAgICAgICAKKyAgICAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFy
ZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIG9wdGltaXphdGlvbiB0cmlnZ2VycywKKyAgICAgICAg
Ly8gYW5kIGFyZSB1c2VkIGFzIGEgc2luZ2xlIHBvaW50IGF0IHdoaWNoIHdlIGRlZmluZSB0aGUg
aGV1cmlzdGljcworICAgICAgICAvLyBmb3IgaG93IG11Y2ggd2FybS11cCBpcyBtYW5kYXRlZCBi
ZWZvcmUgdGhlIG5leHQgb3B0aW1pemF0aW9uCisgICAgICAgIC8vIHRyaWdnZXIgZmlsZXMuIEFs
bCBDb2RlQmxvY2tzIHN0YXJ0IG91dCB3aXRoIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSwKKyAgICAg
ICAgLy8gYXMgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgQ29kZUJsb2NrIGNvbnN0cnVjdG9yLgor
ICAgICAgICAKKyAgICAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBzdXBw
b3J0IGNhbGxpbmcKKyAgICAgICAgLy8gb3B0aW1pemVBZnRlcldhcm1VcCgpIGZyb20gSklULWdl
bmVyYXRlZCBjb2RlLgorICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0
ZXJXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gLTEwMDA7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QqIGFkZHJlc3NPZkV4ZWN1dGVDb3VudGVyKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICZtX2V4ZWN1dGVDb3VudGVyOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgdG8gZm9yY2UgdGhlIG5leHQgb3B0
aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZS4gVGhpcyBpcworICAgICAgICAvLyByYXJlbHkgd2lz
ZSwgc2luY2Ugb3B0aW1pemF0aW9uIHRyaWdnZXJzIGFyZSB0eXBpY2FsbHkgbW9yZQorICAgICAg
ICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcgYmFzZWxpbmUgY29kZS4KICAgICAgICAgdm9p
ZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKICAgICAgICAgewogICAgICAgICAgICAgbV9leGVj
dXRlQ291bnRlciA9IDA7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhp
cyB0byBwcmV2ZW50IG9wdGltaXphdGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0aGF0
CisgICAgICAgIC8vIG9wdGltaXphdGlvbiB3aWxsIHN0aWxsIGhhcHBlbiBhZnRlciByb3VnaGx5
IDJeMjkgaW52b2NhdGlvbnMsCisgICAgICAgIC8vIHNvIHRoaXMgaXMgcmVhbGx5IG1lYW50IHRv
IGRlbGF5IHRoYXQgYXMgbXVjaCBhcyBwb3NzaWJsZS4gVGhpcworICAgICAgICAvLyBpcyBjYWxs
ZWQgaWYgb3B0aW1pemF0aW9uIGZhaWxlZCwgYW5kIHdlIGV4cGVjdCBpdCB0byBmYWlsIGluCisg
ICAgICAgIC8vIHRoZSBmdXR1cmUgYXMgd2VsbC4KICAgICAgICAgdm9pZCBkb250T3B0aW1pemVB
bnl0aW1lU29vbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKTsKICAgICAgICAgfQogICAgICAgICAK
KyAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIHJlaW5pdGlhbGl6ZSB0aGUgY291bnRlciB0byBpdHMg
c3RhcnRpbmcgc3RhdGUsCisgICAgICAgIC8vIGZvcmNpbmcgYSB3YXJtLXVwIHRvIGhhcHBlbiBi
ZWZvcmUgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIKKyAgICAgICAgLy8gZmlyZXMuIFRo
aXMgaXMgY2FsbGVkIGluIHRoZSBDb2RlQmxvY2sgY29uc3RydWN0b3IuIEl0IGFsc28KKyAgICAg
ICAgLy8gbWFrZXMgc2Vuc2UgdG8gY2FsbCB0aGlzIGlmIGFuIE9TUiBleGl0IG9jY3VycmVkLiBO
b3RlIHRoYXQKKyAgICAgICAgLy8gT1NSIGV4aXQgY29kZSBpcyBjb2RlIGdlbmVyYXRlZCwgc28g
dGhlIHZhbHVlIG9mIHRoZSBleGVjdXRlCisgICAgICAgIC8vIGNvdW50ZXIgdGhhdCB0aGlzIGNv
cnJlc3BvbmRzIHRvIGlzIGFsc28gYXZhaWxhYmxlIGRpcmVjdGx5LgorICAgICAgICB2b2lkIG9w
dGltaXplQWZ0ZXJXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3Vu
dGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0aW9uIHRy
aWdnZXIgdG8gZmlyZSBzb29uLCBidXQKKyAgICAgICAgLy8gbm90IG5lY2Vzc2FyaWx5IHRoZSBu
ZXh0IG9uZS4gVGhpcyBtYWtlcyBzZW5zZSBpZiBvcHRpbWl6YXRpb24KKyAgICAgICAgLy8gc3Vj
Y2VlZHMuIFN1Y2Nlc3NmdWx5IG9wdGltaXphdGlvbiBtZWFucyB0aGF0IGFsbCBjYWxscyBhcmUK
KyAgICAgICAgLy8gcmVsaW5rZWQgdG8gdGhlIG9wdGltaXplZCBjb2RlLCBzbyB0aGlzIG9ubHkg
YWZmZWN0cyBjYWxsCisgICAgICAgIC8vIGZyYW1lcyB0aGF0IGFyZSBzdGlsbCBleGVjdXRpbmcg
dGhpcyBDb2RlQmxvY2suIFRoZSB2YWx1ZSBoZXJlCisgICAgICAgIC8vIGlzIHR1bmVkIHRvIHN0
cmlrZSBhIGJhbGFuY2UgYmV0d2VlbiB0aGUgY29zdCBvZiBPU1IgZW50cnkKKyAgICAgICAgLy8g
KHdoaWNoIGlzIHRvbyBoaWdoIHRvIHdhcnJhbnQgbWFraW5nIGV2ZXJ5IGxvb3AgYmFjayBlZGdl
IHRvCisgICAgICAgIC8vIHRyaWdnZXIgT1NSIGltbWVkaWF0ZWx5KSBhbmQgdGhlIGNvc3Qgb2Yg
ZXhlY3V0aW5nIGJhc2VsaW5lCisgICAgICAgIC8vIGNvZGUgKHdoaWNoIGlzIGhpZ2ggZW5vdWdo
IHRoYXQgd2UgZG9uJ3QgbmVjZXNzYXJpbHkgd2FudCB0bworICAgICAgICAvLyBoYXZlIGEgZnVs
bCB3YXJtLXVwKS4gVGhlIGludHVpdGlvbiBmb3IgY2FsbGluZyB0aGlzIGluc3RlYWQgb2YKKyAg
ICAgICAgLy8gb3B0aW1pemVOZXh0SW52b2NhdGlvbigpIGlzIGZvciB0aGUgY2FzZSBvZiByZWN1
cnNpdmUgZnVuY3Rpb25zCisgICAgICAgIC8vIHdpdGggbG9vcHMuIENvbnNpZGVyIHRoYXQgdGhl
cmUgbWF5IGJlIE4gY2FsbCBmcmFtZXMgb2Ygc29tZQorICAgICAgICAvLyByZWN1cnNpdmUgZnVu
Y3Rpb24sIGZvciBhIHJlYXNvbmFibHkgbGFyZ2UgdmFsdWUgb2YgTi4gVGhlIHRvcAorICAgICAg
ICAvLyBvbmUgdHJpZ2dlcnMgb3B0aW1pemF0aW9uLCBhbmQgdGhlbiByZXR1cm5zLCBhbmQgdGhl
biBhbGwgb2YKKyAgICAgICAgLy8gdGhlIG90aGVycyByZXR1cm4uIFdlIGRvbid0IHdhbnQgb3B0
aW1pemF0aW9uIHRvIGJlIHRyaWdnZXJlZCBvbgorICAgICAgICAvLyBlYWNoIHJldHVybiwgYXMg
dGhhdCB3b3VsZCBiZSBzdXBlcmZsdW91cy4gSXQgb25seSBtYWtlcyBzZW5zZQorICAgICAgICAv
LyB0byB0cmlnZ2VyIG9wdGltaXphdGlvbiBpZiBvbmUgb2YgdGhvc2UgZnVuY3Rpb25zIGJlY29t
ZXMgaG90CisgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgorICAgICAgICB2b2lkIG9w
dGltaXplU29vbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAt
MTAwOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50
ZXI7CiAKICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhlc2UgcmVtYWluaW5nIG1lbWJlcnMgcHJp
dmF0ZS4KQEAgLTY3MSw2ICs3NDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAgICAg
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9qdW1wVGFyZ2V0czsKKyAgICAgICAgVmVjdG9yPHVuc2ln
bmVkPiBtX2xvb3BUYXJnZXRzOwogCiAgICAgICAgIC8vIENvbnN0YW50IFBvb2wKICAgICAgICAg
VmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CkBAIC02ODIsNiArNzU5LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwogCiAgICAg
ICAgIE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CisgICAgICAgIAorICAgICAgICBP
d25QdHI8UHJlZGljdGlvblRyYWNrZXI+IG1fcHJlZGljdGlvbnM7CiAKICAgICAgICAgc3RydWN0
IFJhcmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiA5NDk5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTU3LDYgKzE1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBtYWNybyhvcF9sb29w
X2lmX2xlc3NlcSwgNCkgXAogICAgICAgICBtYWNybyhvcF9sb29wX2lmX2dyZWF0ZXIsIDQpIFwK
ICAgICAgICAgbWFjcm8ob3BfbG9vcF9pZl9ncmVhdGVyZXEsIDQpIFwKKyAgICAgICAgbWFjcm8o
b3BfbG9vcF9oaW50LCAxKSBcCiAgICAgICAgIG1hY3JvKG9wX3N3aXRjaF9pbW0sIDQpIFwKICAg
ICAgICAgbWFjcm8ob3Bfc3dpdGNoX2NoYXIsIDQpIFwKICAgICAgICAgbWFjcm8ob3Bfc3dpdGNo
X3N0cmluZywgNCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRp
Y3RlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHJlZGljdGVkVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgUHJlZGljdGVkVHlwZV9oCisjZGVmaW5lIFByZWRpY3RlZFR5cGVfaAorCisjaW5jbHVk
ZSAiVmFsdWVQcm9maWxlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIHVpbnQ4X3Qg
UHJlZGljdGVkVHlwZTsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3ROb25lICAg
PSAwOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdENlbGwgICA9IDB4MDE7Citz
dGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0QXJyYXkgID0gMHgwMzsKK3N0YXRpYyBj
b25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RJbnQzMiAgPSAweDA0Oworc3RhdGljIGNvbnN0IFBy
ZWRpY3RlZFR5cGUgUHJlZGljdERvdWJsZSA9IDB4MDg7CitzdGF0aWMgY29uc3QgUHJlZGljdGVk
VHlwZSBQcmVkaWN0TnVtYmVyID0gMHgwYzsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFBy
ZWRpY3RCb29sZWFuID0gMHgxMDsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RU
b3AgICAgPSAweDFmOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgU3Ryb25nUHJlZGljdGlv
blRhZyA9IDB4ODA7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0aW9uVGFnTWFz
ayAgICA9IDB4ODA7CisKK2VudW0gUHJlZGljdGlvblNvdXJjZSB7IFdlYWtQcmVkaWN0aW9uLCBT
dHJvbmdQcmVkaWN0aW9uIH07CisKK2lubGluZSBib29sIGlzQ2VsbFByZWRpY3Rpb24oUHJlZGlj
dGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFBy
ZWRpY3RDZWxsICYmICEodmFsdWUgJiB+KFByZWRpY3RBcnJheSB8IFByZWRpY3Rpb25UYWdNYXNr
KSk7Cit9CisKK2lubGluZSBib29sIGlzQXJyYXlQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFs
dWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0gUHJlZGlj
dEFycmF5OworfQorCitpbmxpbmUgYm9vbCBpc0ludDMyUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBl
IHZhbHVlKQoreworICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spID09IFBy
ZWRpY3RJbnQzMjsKK30KKworaW5saW5lIGJvb2wgaXNEb3VibGVQcmVkaWN0aW9uKFByZWRpY3Rl
ZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykg
PT0gUHJlZGljdERvdWJsZTsKK30KKworaW5saW5lIGJvb2wgaXNOdW1iZXJQcmVkaWN0aW9uKFBy
ZWRpY3RlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGljdE51bWJl
cikgJiYgISh2YWx1ZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3Rpb25UYWdNYXNrKSk7Cit9
CisKK2lubGluZSBib29sIGlzQm9vbGVhblByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0Qm9v
bGVhbjsKK30KKworaW5saW5lIGJvb2wgaXNTdHJvbmdQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUg
dmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlICE9IChQcmVkaWN0Tm9uZSB8IFN0cm9uZ1ByZWRp
Y3Rpb25UYWcpKTsKKyAgICByZXR1cm4gISEodmFsdWUgJiBTdHJvbmdQcmVkaWN0aW9uVGFnKTsK
K30KKworI2lmbmRlZiBOREVCVUcKK2lubGluZSBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJp
bmcoUHJlZGljdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHZh
bHVlKSkgeworICAgICAgICBzd2l0Y2ggKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSB7Cisg
ICAgICAgIGNhc2UgUHJlZGljdE5vbmU6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWJv
dHRvbSI7CisgICAgICAgIGNhc2UgUHJlZGljdENlbGw6CisgICAgICAgICAgICByZXR1cm4gInAt
c3Ryb25nLWNlbGwiOworICAgICAgICBjYXNlIFByZWRpY3RBcnJheToKKyAgICAgICAgICAgIHJl
dHVybiAicC1zdHJvbmctYXJyYXkiOworICAgICAgICBjYXNlIFByZWRpY3RJbnQzMjoKKyAgICAg
ICAgICAgIHJldHVybiAicC1zdHJvbmctaW50MzIiOworICAgICAgICBjYXNlIFByZWRpY3REb3Vi
bGU6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWRvdWJsZSI7CisgICAgICAgIGNhc2Ug
UHJlZGljdE51bWJlcjoKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctbnVtYmVyIjsKKyAg
ICAgICAgY2FzZSBQcmVkaWN0Qm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmct
Ym9vbGVhbiI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25n
LXRvcCI7CisgICAgICAgIH0KKyAgICB9CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2Ug
UHJlZGljdE5vbmU6CisgICAgICAgIHJldHVybiAicC13ZWFrLWJvdHRvbSI7CisgICAgY2FzZSBQ
cmVkaWN0Q2VsbDoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstY2VsbCI7CisgICAgY2FzZSBQcmVk
aWN0QXJyYXk6CisgICAgICAgIHJldHVybiAicC13ZWFrLWFycmF5IjsKKyAgICBjYXNlIFByZWRp
Y3RJbnQzMjoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstaW50MzIiOworICAgIGNhc2UgUHJlZGlj
dERvdWJsZToKKyAgICAgICAgcmV0dXJuICJwLXdlYWstZG91YmxlIjsKKyAgICBjYXNlIFByZWRp
Y3ROdW1iZXI6CisgICAgICAgIHJldHVybiAicC13ZWFrLW51bWJlciI7CisgICAgY2FzZSBQcmVk
aWN0Qm9vbGVhbjoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstYm9vbGVhbiI7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstdG9wIjsKKyAgICB9Cit9CisjZW5kaWYKKworaW5s
aW5lIFByZWRpY3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQcmVkaWN0ZWRUeXBlIGxlZnQsIFBy
ZWRpY3RlZFR5cGUgcmlnaHQpCit7CisgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSA9
PSBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKQorICAgICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0
OworICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkpIHsKKyAgICAgICAgQVNTRVJUKCFp
c1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKTsKKyAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgfQor
ICAgIEFTU0VSVCghaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpKTsKKyAgICBBU1NFUlQoaXNTdHJv
bmdQcmVkaWN0aW9uKHJpZ2h0KSk7CisgICAgcmV0dXJuIHJpZ2h0OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3Rl
ZFR5cGUgcmlnaHQpCit7CisgICAgUHJlZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gc3RhdGlj
X2Nhc3Q8VD4obWVyZ2VQcmVkaWN0aW9ucyhzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0
KSwgcmlnaHQpKTsKKyAgICBib29sIHJlc3VsdCA9IG5ld1ByZWRpY3Rpb24gIT0gc3RhdGljX2Nh
c3Q8UHJlZGljdGVkVHlwZT4obGVmdCk7CisgICAgbGVmdCA9IG5ld1ByZWRpY3Rpb247CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24o
UHJlZGljdGVkVHlwZSB0eXBlLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKK3sKKyAgICBBU1NF
UlQoISh0eXBlICYgU3Ryb25nUHJlZGljdGlvblRhZykpOworICAgIEFTU0VSVChzb3VyY2UgPT0g
U3Ryb25nUHJlZGljdGlvbiB8fCBzb3VyY2UgPT0gV2Vha1ByZWRpY3Rpb24pOworICAgIGlmICh0
eXBlID09IFByZWRpY3ROb25lKQorICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgcmV0
dXJuIHR5cGUgfCAoc291cmNlID09IFN0cm9uZ1ByZWRpY3Rpb24gPyBTdHJvbmdQcmVkaWN0aW9u
VGFnIDogMCk7Cit9CisKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCitpbmxpbmUgUHJlZGlj
dGVkVHlwZSBtYWtlUHJlZGljdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFZh
bHVlUHJvZmlsZSYgcHJvZmlsZSkKK3sKKyAgICBWYWx1ZVByb2ZpbGU6OlN0YXRpc3RpY3Mgc3Rh
dGlzdGljczsKKyAgICBwcm9maWxlLmNvbXB1dGVTdGF0aXN0aWNzKGdsb2JhbERhdGEsIHN0YXRp
c3RpY3MpOworICAgIAorICAgIGlmICghc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1
cm4gUHJlZGljdE5vbmU7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzID09IHN0YXRp
c3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVk
aWN0SW50MzI7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuZG91YmxlcyA9PSBzdGF0aXN0aWNz
LnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdERv
dWJsZTsKKyAgICAKKyAgICBpZiAoc3RhdGlzdGljcy5pbnQzMnMgKyBzdGF0aXN0aWNzLmRvdWJs
ZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlv
blRhZyB8IFByZWRpY3ROdW1iZXI7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuYXJyYXlzID09
IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcg
fCBQcmVkaWN0QXJyYXk7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuY2VsbHMgPT0gc3RhdGlz
dGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRp
Y3RDZWxsOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmJvb2xlYW5zID09IHN0YXRpc3RpY3Mu
c2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Qm9v
bGVhbjsKKyAgICAKKyAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RUb3A7
Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQcmVkaWN0ZWRU
eXBlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0aW9uVHJh
Y2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVk
aWN0aW9uVHJhY2tlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
UHJlZGljdGlvblRyYWNrZXJfaAorI2RlZmluZSBQcmVkaWN0aW9uVHJhY2tlcl9oCisKKyNpbmNs
dWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBoZWxwZXIgZnVuY3Rpb24g
dG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgoraW5saW5l
IGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAw
OyB9CisKK3N0cnVjdCBQcmVkaWN0aW9uU2xvdCB7CitwdWJsaWM6CisgICAgUHJlZGljdGlvblNs
b3QoKQorICAgICAgICA6IG1fdmFsdWUoUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICBQ
cmVkaWN0ZWRUeXBlIG1fdmFsdWU7Cit9OworCitjbGFzcyBQcmVkaWN0aW9uVHJhY2tlciB7Citw
dWJsaWM6CisgICAgUHJlZGljdGlvblRyYWNrZXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
UHJlZGljdGlvblRyYWNrZXIodW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1WYXJp
YWJsZXMpCisgICAgICAgIDogbV9hcmd1bWVudHMobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1f
dmFyaWFibGVzKG51bVZhcmlhYmxlcykKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5p
dGlhbGl6ZVNpbWlsYXJUbyhjb25zdCBQcmVkaWN0aW9uVHJhY2tlciYgb3RoZXIpCisgICAgewor
ICAgICAgICBtX2FyZ3VtZW50cy5yZXNpemUob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7Cisg
ICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvdGhlci5udW1iZXJPZlZhcmlhYmxlcygpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb3B5TG9jYWxzRnJvbShjb25zdCBQcmVkaWN0aW9uVHJhY2tl
ciYgb3RoZXIpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50cyA9IG90aGVyLm1fYXJndW1lbnRz
OworICAgICAgICBtX3ZhcmlhYmxlcyA9IG90aGVyLm1fdmFyaWFibGVzOworICAgIH0KKyAgICAK
KyAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50
cy5zaXplKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVy
biBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4
Rm9yT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZCArIG1fYXJndW1l
bnRzLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgfQorCisgICAg
Ym9vbCBwcmVkaWN0QXJndW1lbnQodW5zaWduZWQgYXJndW1lbnQsIFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4g
bWVyZ2VQcmVkaWN0aW9uKG1fYXJndW1lbnRzW2FyZ3VtZW50XS5tX3ZhbHVlLCBtYWtlUHJlZGlj
dGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBwcmVkaWN0
KGludCBvcGVyYW5kLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ug
c291cmNlKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQor
ICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RBcmd1bWVudChhcmd1bWVudEluZGV4Rm9yT3BlcmFu
ZChvcGVyYW5kKSwgcHJlZGljdGlvbiwgc291cmNlKTsKKyAgICAgICAgaWYgKCh1bnNpZ25lZClv
cGVyYW5kID49IG1fdmFyaWFibGVzLnNpemUoKSkgeworICAgICAgICAgICAgQVNTRVJUKG9wZXJh
bmQgPj0gMCk7CisgICAgICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUob3BlcmFuZCArIDEpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdmFy
aWFibGVzW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJj
ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHByZWRpY3RHbG9iYWxWYXIodW5zaWduZWQgdmFy
TnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNl
KQorICAgIHsKKyAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVy
YXRvciBpdGVyID0gbV9nbG9iYWxWYXJzLmZpbmQodmFyTnVtYmVyICsgMSk7CisgICAgICAgIGlm
IChpdGVyID09IG1fZ2xvYmFsVmFycy5lbmQoKSkgeworICAgICAgICAgICAgUHJlZGljdGlvblNs
b3QgcHJlZGljdGlvblNsb3Q7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IG1lcmdlUHJlZGlj
dGlvbihwcmVkaWN0aW9uU2xvdC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBz
b3VyY2UpKTsKKyAgICAgICAgICAgIG1fZ2xvYmFsVmFycy5hZGQodmFyTnVtYmVyICsgMSwgcHJl
ZGljdGlvblNsb3QpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGl0ZXItPnNlY29uZC5tX3ZhbHVlLCBtYWtlUHJl
ZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGVk
VHlwZSBnZXRBcmd1bWVudFByZWRpY3Rpb24odW5zaWduZWQgYXJndW1lbnQpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdLm1fdmFsdWU7CisgICAgfQorCisgICAg
UHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
aWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICAgICAgcmV0dXJuIGdldEFy
Z3VtZW50UHJlZGljdGlvbihhcmd1bWVudEluZGV4Rm9yT3BlcmFuZChvcGVyYW5kKSk7CisgICAg
ICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA8IG1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXS5tX3ZhbHVlOworICAgICAgICByZXR1cm4g
UHJlZGljdE5vbmU7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgZ2V0R2xvYmFsVmFy
UHJlZGljdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAgeworICAgICAgICBIYXNoTWFwPHVu
c2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dsb2JhbFZhcnMuZmlu
ZCh2YXJOdW1iZXIgKyAxKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9nbG9iYWxWYXJzLmVuZCgp
KQorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgICAgICByZXR1cm4gaXRlci0+
c2Vjb25kLm1fdmFsdWU7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8UHJlZGlj
dGlvblNsb3QsIDE2PiBtX2FyZ3VtZW50czsKKyAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2
PiBtX3ZhcmlhYmxlczsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD4gbV9n
bG9iYWxWYXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQcmVkaWN0
aW9uVHJhY2tlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDk5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NTgsNiArNjU4LDEzIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRPcGNvZGUoT3Bjb2QKICAgICBtX2xhc3RPcGNvZGVJRCA9IG9wY29kZUlEOwogfQog
Cit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9vcEhpbnQoKQoreworI2lmIEVOQUJMRShU
SUVSRURfQ09NUElMQVRJT04pCisgICAgZW1pdE9wY29kZShvcF9sb29wX2hpbnQpOworI2VuZGlm
Cit9CisKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJldHJpZXZlTGFzdEJpbmFyeU9wKGludCYg
ZHN0SW5kZXgsIGludCYgc3JjMUluZGV4LCBpbnQmIHNyYzJJbmRleCkKIHsKICAgICBBU1NFUlQo
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpID49IDQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
OTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0VG9QcmltaXRpdmUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRMYWJlbChMYWJlbCop
OworICAgICAgICB2b2lkIGVtaXRMb29wSGludCgpOwogICAgICAgICBQYXNzUmVmUHRyPExhYmVs
PiBlbWl0SnVtcChMYWJlbCogdGFyZ2V0KTsKICAgICAgICAgUGFzc1JlZlB0cjxMYWJlbD4gZW1p
dEp1bXBJZlRydWUoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRhcmdldCk7CiAgICAgICAgIFBh
c3NSZWZQdHI8TGFiZWw+IGVtaXRKdW1wSWZGYWxzZShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCog
dGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDk0OTk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDY5LDcgKzE0NjksNyBAQCBSZWdpc3RlcklEKiBEb1doaWxlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
CiAKICAgICBSZWZQdHI8TGFiZWw+IHRvcE9mTG9vcCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwog
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwodG9wT2ZMb29wLmdldCgpKTsKLQorICAgIGdlbmVyYXRv
ci5lbWl0TG9vcEhpbnQoKTsKICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0
ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCkpOwogICAgCiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsK
QEAgLTE0OTcsNiArMTQ5Nyw3IEBAIFJlZ2lzdGVySUQqIFdoaWxlTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGUKIAogICAgIFJlZlB0cjxMYWJlbD4gdG9wT2ZMb29wID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0b3BPZkxvb3AuZ2V0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0TG9vcEhpbnQoKTsKICAgICAKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBt
X3N0YXRlbWVudCk7CiAKQEAgLTE1MzIsNiArMTUzMyw3IEBAIFJlZ2lzdGVySUQqIEZvck5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY28KIAogICAgIFJlZlB0cjxMYWJlbD4gdG9wT2ZMb29wID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0b3BPZkxvb3AuZ2V0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKIAogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAKQEAg
LTE1NzksNiArMTU4MSw3IEBAIFJlZ2lzdGVySUQqIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
dGUKIAogICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgIGdlbmVyYXRv
ci5lbWl0TG9vcEhpbnQoKTsKIAogICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZTsKICAgICBi
b29sIG9wdGltaXplZEZvcmluQWNjZXNzID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ5OTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTk0LDYgKzU5NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKIAogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFsRGF0
YS0+aW50ZXJwcmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgdW5zaWduZWQgYmxvY2tCZWdp
biA9IG1fY3VycmVudEluZGV4OwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIC8vIERvbid0
IGV4dGVuZCBvdmVyIGp1bXAgZGVzdGluYXRpb25zLgogICAgICAgICBpZiAobV9jdXJyZW50SW5k
ZXggPT0gbGltaXQpIHsKQEAgLTEyMTEsNiArMTIxMiwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Jlc29s
dmVfYmFzZSk7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2xvb3Bf
aGludDogeworICAgICAgICAgICAgLy8gQmFzZWxpbmUtPkRGRyBPU1IganVtcHMgYmV0d2VlbiBs
b29wIGhpbnRzLiBUaGUgREZHIGFzc3VtZXMgdGhhdCBCYXNlbGluZS0+REZHCisgICAgICAgICAg
ICAvLyBPU1IgY2FuIG9ubHkgaGFwcGVuIGF0IGJhc2ljIGJsb2NrIGJvdW5kYXJpZXMuIEFzc2Vy
dCB0aGF0IHRoZXNlIHR3byBzdGF0ZW1lbnRzCisgICAgICAgICAgICAvLyBhcmUgY29tcGF0aWJs
ZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYmxvY2tCZWdpbiwgbV9jdXJyZW50SW5kZXgg
PT0gYmxvY2tCZWdpbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5pc09TUlRhcmdldCA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2xvb3BfaGludCk7CisgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgLy8gUGFyc2UgZmFpbGVkIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAs
NyBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wCiAgICAgY2FzZSBv
cF9qbmxlc3NlcToKICAgICBjYXNlIG9wX2puZ3JlYXRlcjoKICAgICBjYXNlIG9wX2puZ3JlYXRl
cmVxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgogICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOgog
ICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzZXE6CiAgICAgY2FzZSBvcF9sb29wX2lmX2dyZWF0ZXI6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiA5
NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsMTcgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9k
ZSBjb21waWxlTQogICAgIAogICAgIHByb3BhZ2F0ZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9j
ayk7CiAgICAgCisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgIC8vIFNhdmUg
dGhlIHByZWRpY3Rpb25zIHdlJ3ZlIG1hZGUsIHNvIHRoYXQgT1NSIGVudHJ5IGNhbiB2ZXJpZnkg
dGhlbS4gUHJlZGljdGlvbnMKKyAgICAvLyBhcmUgc2F2ZWQgaW4gdGhlIENvZGVCbG9jayBmcm9t
IHdoaWNoIHdlIHdpbGwgYmUgZG9pbmcgT1NSIGVudHJ5LCBzaW5jZSB0aGUKKyAgICAvLyBDb2Rl
QmxvY2sgdG8gd2hpY2ggd2UgYXJlIE9TUmluZyBtYXkgYmUgcmVwbGFjZWQgYXQgYW55IHRpbWUu
CisgICAgT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBwcmVkaWN0aW9ucyA9IGFkb3B0UHRyKG5l
dyBQcmVkaWN0aW9uVHJhY2tlcigpKTsKKyAgICAqcHJlZGljdGlvbnMgPSBkZmcucHJlZGljdGlv
bnMoKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpOworICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+c2V0UHJlZGljdGlvbnMocHJl
ZGljdGlvbnMucmVsZWFzZSgpKTsKKyNlbmRpZgorICAgIAogICAgIEpJVENvbXBpbGVyIGRhdGFG
bG93SklUKGdsb2JhbERhdGEsIGRmZywgY29kZUJsb2NrKTsKICAgICBpZiAoY29tcGlsZU1vZGUg
PT0gQ29tcGlsZUZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VSVChqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9u
IDk0OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBu
b2RlSW5kZXgsIENvCiB2b2lkIEdyYXBoOjpkdW1wKENvZGVCbG9jayogY29kZUJsb2NrKQogewog
ICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKLSAgICAg
ICAgcHJpbnRmKCJCbG9jayAjJXU6XG4iLCAoaW50KWIpOworICAgICAgICBwcmludGYoIkJsb2Nr
ICMldSAoYmMjJXUpOiAgJXNcbiIsIChpbnQpYiwgbV9ibG9ja3NbYl0tPmJ5dGVjb2RlQmVnaW4s
IG1fYmxvY2tzW2JdLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG1fYmxvY2tzW2JdLT5iZWdpbjsgaSA8IG1fYmxvY2tzW2JdLT5l
bmQ7ICsraSkKICAgICAgICAgICAgIGR1bXAoaSwgY29kZUJsb2NrKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgot
I2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25UcmFja2VyLmgiCisjaW5jbHVkZSAiUHJlZGljdGlvblRy
YWNrZXIuaCIKICNpbmNsdWRlICJSZWdpc3RlckZpbGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTY0LDYgKzY0LDcgQEAgc3RydWN0IEJh
c2ljQmxvY2sgewogICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAg
ICAgLCBiZWdpbihiZWdpbikKICAgICAgICAgLCBlbmQoTm9Ob2RlKQorICAgICAgICAsIGlzT1NS
VGFyZ2V0KGZhbHNlKQogICAgICAgICAsIG1fYXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAg
ICAgLCBtX2xvY2FscyhudW1Mb2NhbHMpCiAgICAgewpAQCAtNzcsNiArNzgsNyBAQCBzdHJ1Y3Qg
QmFzaWNCbG9jayB7CiAgICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbjsKICAgICBOb2RlSW5kZXgg
YmVnaW47CiAgICAgTm9kZUluZGV4IGVuZDsKKyAgICBib29sIGlzT1NSVGFyZ2V0OwogCiAgICAg
UHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwogICAgIFZlY3RvciA8VmFyaWFibGVSZWNv
cmQsIDg+IG1fYXJndW1lbnRzOwpAQCAtMTQxLDcgKzE0MywyMiBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgYm9vbCBwcmVkaWN0KE5vZGUmIG5vZGUsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJl
ZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewotICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9u
cy5wcmVkaWN0KG5vZGUsIHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCkgeworICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgcmV0dXJuIHByZWRp
Y3Qobm9kZS5sb2NhbCgpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgorICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RH
bG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgIGNhc2UgR2V0TWV0aG9k
OgorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNh
c2UgQ29uc3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIG5vZGUucHJlZGljdChwcmVkaWN0aW9u
LCBzb3VyY2UpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBv
cGVyYW5kKQpAQCAtMTY0LDcgKzE4MSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChub2RlUHRy
LT5vcCA9PSBWYWx1ZVRvSW50MzIpCiAgICAgICAgICAgICBub2RlUHRyID0gJigqdGhpcylbbm9k
ZVB0ci0+Y2hpbGQxKCldOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMu
Z2V0UHJlZGljdGlvbigqbm9kZVB0cik7CisgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+b3ApIHsK
KyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9u
KG5vZGVQdHItPmxvY2FsKCkpOworICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAg
ICAgIHJldHVybiBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGVQdHItPnZhck51bWJlcigpKTsK
KyAgICAgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICBjYXNlIEdldE1ldGhvZDoKKyAgICAgICAg
Y2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIENvbnN0cnVj
dDoKKyAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT5nZXRQcmVkaWN0aW9uKCk7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgICAgIH0KICAg
ICB9CiAgICAgCiAgICAgLy8gSGVscGVyIG1ldGhvZHMgdG8gY2hlY2sgbm9kZXMgZm9yIGNvbnN0
YW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcsMTcgKzM4Nyw0OCBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgLy8gMTEpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRp
b24gaW50byByZWdUMC4KKyAgICAvLyAxMSkgQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBj
b3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKKyAgICAvLyAgICAgdGhh
dCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNv
IHRoZSBleGVjdXRlCisgICAgLy8gICAgIGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVz
IHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxsIGZyYW1lcworICAgIC8vICAgICB0aGF0
IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIg
Y2FsbCBmcmFtZSdzCisgICAgLy8gICAgIE9TUiBleGl0LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0
IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAgICAvLworICAgIC8vICAgICAoYSkgQ29kZSB0aGUg
cGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5jZSB0byByZWVudGVyIG9wdGltaXplZAor
ICAgIC8vICAgICAgICAgY29kZSBldmVudHVhbGx5LCBzaW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBm
YXN0ZXIuIEJ1dCB3ZSBkb24ndAorICAgIC8vICAgICAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50
ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgorICAgIC8vCisgICAgLy8gICAg
IChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwgcnVu
bmluZyB0aGUgb2xkCisgICAgLy8gICAgICAgICBKSVQncyBjb2RlIGFuZCBoYXMgbmV2ZXIgT1NS
J2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bworICAgIC8vICAgICAgICAgcGVyZm9y
bSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRlZC4KKyAgICAvLwor
ICAgIC8vICAgICAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBp
bW1lZGlhdGVseSByZXRyeSBPU1IKKyAgICAvLyAgICAgICAgIGVudHJ5LCBzaW5jZSBib3RoIGZv
cm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKKyAgICAvLyAgICAgICAgIHBh
cnRpY3VsYXJseSBleHBlbnNpdmUuCisgICAgLy8KKyAgICAvLyAgICAgVG8gZW5zdXJlIChjKSwg
d2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCisgICAgLy8gICAgIGNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxk
IGVuZGFuZ2VyCisgICAgLy8gICAgIChhKSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBl
eGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1bml0eSBmb3IKKyAgICAvLyAgICAgZXZlcnkgY2Fs
bCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhh
cHBlbnMKKyAgICAvLyAgICAgZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcgbG9v
cHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgorICAgIC8vICAgICBiZWNvbWUgbm9uLW5l
Z2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQor
ICAgIC8vICAgICB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xk
IEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0eQorICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmlu
ZyAoYSkgYW5kIChiKS4gVGhpcyBoZXVyaXN0aWMgbWF5IG5lZWQgdG8gYmUKKyAgICAvLyAgICAg
cmV0aG91Z2h0IGluIHRoZSBmdXR1cmUsIHBhcnRpY3VsYXJseSBpZiB3ZSBzdXBwb3J0IHJlb3B0
aW1pemluZyBjb2RlCisgICAgLy8gICAgIHdpdGggbmV3IHZhbHVlIHByb2ZpbGVzIGdhdGhlcmVk
IGZyb20gY29kZSB0aGF0IGRpZCBPU1IgZXhpdC4KKyAgICAKKyAgICBzdG9yZTMyKEltbTMyKGNv
ZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwKCkpLCBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+YWRkcmVzc09mRXhlY3V0ZUNvdW50
ZXIoKSk7CisgICAgCisgICAgLy8gMTIpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRl
Y29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KICAgICAKICAgICBpZiAoZXhpdC5tX2xhc3RTZXRP
cGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQ
UkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAKLSAgICAvLyAxMikgRml4IGNhbGwg
ZnJhbWUuCisgICAgLy8gMTMpIEZpeCBjYWxsIGZyYW1lLgogICAgIAogICAgIEFTU0VSVChjb2Rl
QmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5l
SklUKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2
ZSgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVyRmlsZTo6Q29kZUJsb2Nr
KSk7CiAgICAgCi0gICAgLy8gMTMpIEp1bXAgaW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGlu
ZSBKSVQgY29kZS4KKyAgICAvLyAxNCkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2Vs
aW5lIEpJVCBjb2RlLgogICAgIAogICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGlu
ZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJl
Z2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2J5dGVjb2RlSW5kZXgpOwogICAg
IApAQCAtMTE0MSw2ICsxMTcyLDggQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua1NwZWN1bGF0aW9u
Q2hlY2tzKAogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRW50cnkoKQogeworICAgIG1fc3Rh
cnRPZkNvZGUgPSBsYWJlbCgpOworICAgIAogICAgIC8vIFRoaXMgY29kZSBjdXJyZW50bHkgbWF0
Y2hlcyB0aGUgb2xkIEpJVC4gSW4gdGhlIGZ1bmN0aW9uIGhlYWRlciB3ZSBuZWVkIHRvCiAgICAg
Ly8gcG9wIHRoZSByZXR1cm4gYWRkcmVzcyAoc2luY2Ugd2UgZG8gbm90IGFsbG93IGFueSByZWN1
cnNpb24gb24gdGhlIG1hY2hpbmUKICAgICAvLyBzdGFjayksIGFuZCBwZXJmb3JtIGEgZmFzdCBy
ZWdpc3RlciBmaWxlIGNoZWNrLgpAQCAtMTE3OSw2ICsxMjEyLDggQEAgdm9pZCBKSVRDb21waWxl
cjo6Y29tcGlsZUJvZHkoKQogICAgIC8vIHRvIGFsbG93IGl0IHRvIGNoZWNrIHdoaWNoIG5vZGVz
IGluIHRoZSBncmFwaCBtYXkgYmFpbCBvdXQsIGFuZCBtYXkgbmVlZCB0byByZWVudGVyIHRoZQog
ICAgIC8vIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgogICAgIGlmIChjb21waWxlZFNwZWN1bGF0aXZl
KSB7CisgICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKG1faml0Q29kZU1hcEVuY29k
ZXIuZmluaXNoKCkpOworICAgICAgICAKICNpZiBFTkFCTEUoREZHX09TUl9FWElUKQogICAgICAg
ICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDk0OTk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTYsNiArMzE2LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fanNDYWxscy5hcHBlbmQo
SlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBj
b2RlT3JpZ2luKSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgbm90aWNlT1NSRW50cnkoQmFzaWNC
bG9jayYgYmFzaWNCbG9jaykKKyAgICB7CisgICAgICAgIG1faml0Q29kZU1hcEVuY29kZXIuYXBw
ZW5kKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgZGlmZmVyZW5jZUJldHdlZW4obV9zdGFydE9m
Q29kZSwgbGFiZWwoKSkpOworICAgIH0KIAogcHJpdmF0ZToKICAgICAvLyBJbnRlcm5hbCBpbXBs
ZW1lbnRhdGlvbiB0byBjb21waWxlLgpAQCAtMzQ5LDYgKzM1NCwxMCBAQCBwcml2YXRlOgogICAg
IC8vIENvdW50IG9mIHRoZSBudW1iZXIgb2YgQ2FsbFJlY29yZHMgd2l0aCBleGNlcHRpb24gaGFu
ZGxlcnMuCiAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CiAgICAgdW5zaWduZWQgbV9l
eGNlcHRpb25DaGVja0NvdW50OworICAgIAorICAgIC8vIEpJVCBjb2RlIG1hcCBmb3IgT1NSIGVu
dHJ5cG9pbnRzLgorICAgIExhYmVsIG1fc3RhcnRPZkNvZGU7CisgICAgQ29tcGFjdEpJVENvZGVN
YXA6OkVuY29kZXIgbV9qaXRDb2RlTWFwRW5jb2RlcjsKIAogICAgIHN0cnVjdCBQcm9wZXJ0eUFj
Y2Vzc1JlY29yZCB7CiAgICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKENhbGwgZnVuY3Rpb25D
YWxsLCBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGwsIGludDE2X3QgZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjaywgaW50MTZfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBpbnQxNl90IGRlbHRhQ2Fs
bFRvU2xvd0Nhc2UsIGludDE2X3QgZGVsdGFDYWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50
OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2NyYXRjaEdQUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4IEBACiAjZGVmaW5lIERG
R19ERUJVR19MT0NBTF9ESVNCQUxFIDAKIC8vIERpc2FibGUgdGhlIFNwZWN1bGF0aXZlSklUIHdp
dGhvdXQgaGF2aW5nIHRvIHRvdWNoIFBsYXRmb3JtLmghCiAjZGVmaW5lIERGR19ERUJVR19MT0NB
TF9ESVNCQUxFX1NQRUNVTEFUSVZFIDAKKy8vIEVuYWJsZSBPU1IgZW50cnkgZnJvbSBiYXNlbGlu
ZSBKSVQuCisjZGVmaW5lIEVOQUJMRV9ERkdfT1NSX0VOVFJZIEVOQUJMRV9USUVSRURfQ09NUElM
QVRJT04KIC8vIERpc2FibGUgdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQgYW5kIHVzZSBPU1IgaW5z
dGVhZC4KICNkZWZpbmUgRU5BQkxFX0RGR19PU1JfRVhJVCBFTkFCTEVfVElFUkVEX0NPTVBJTEFU
SU9OCiAvLyBHZW5lcmF0ZSBzdGF0cyBvbiBob3cgc3VjY2Vzc2Z1bCB3ZSB3ZXJlIGluIG1ha2lu
ZyB1c2Ugb2YgdGhlIERGRyBqaXQsIGFuZCByZW1haW5pbmcgb24gdGhlIGhvdCBwYXRoLgpAQCAt
NjUsNiArNjcsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNWYWx1
ZS5oIgorI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUu
aCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTIyNCwxNjIgKzIyNyw2IEBAIHN0cnVj
dCBPcEluZm8gewogICAgIHVuc2lnbmVkIG1fdmFsdWU7CiB9OwogCi10eXBlZGVmIHVpbnQ4X3Qg
UHJlZGljdGVkVHlwZTsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3ROb25lICAg
PSAwOwotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdENlbGwgICA9IDB4MDE7Ci1z
dGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0QXJyYXkgID0gMHgwMzsKLXN0YXRpYyBj
b25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RJbnQzMiAgPSAweDA0Owotc3RhdGljIGNvbnN0IFBy
ZWRpY3RlZFR5cGUgUHJlZGljdERvdWJsZSA9IDB4MDg7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVk
VHlwZSBQcmVkaWN0TnVtYmVyID0gMHgwYzsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFBy
ZWRpY3RCb29sZWFuID0gMHgxMDsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RU
b3AgICAgPSAweDFmOwotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgU3Ryb25nUHJlZGljdGlv
blRhZyA9IDB4ODA7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0aW9uVGFnTWFz
ayAgICA9IDB4ODA7Ci0KLWVudW0gUHJlZGljdGlvblNvdXJjZSB7IFdlYWtQcmVkaWN0aW9uLCBT
dHJvbmdQcmVkaWN0aW9uIH07Ci0KLWlubGluZSBib29sIGlzQ2VsbFByZWRpY3Rpb24oUHJlZGlj
dGVkVHlwZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFBy
ZWRpY3RDZWxsICYmICEodmFsdWUgJiB+KFByZWRpY3RBcnJheSB8IFByZWRpY3Rpb25UYWdNYXNr
KSk7Ci19Ci0KLWlubGluZSBib29sIGlzQXJyYXlQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFs
dWUpCi17Ci0gICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0gUHJlZGlj
dEFycmF5OwotfQotCi1pbmxpbmUgYm9vbCBpc0ludDMyUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBl
IHZhbHVlKQotewotICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spID09IFBy
ZWRpY3RJbnQzMjsKLX0KLQotaW5saW5lIGJvb2wgaXNEb3VibGVQcmVkaWN0aW9uKFByZWRpY3Rl
ZFR5cGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykg
PT0gUHJlZGljdERvdWJsZTsKLX0KLQotaW5saW5lIGJvb2wgaXNOdW1iZXJQcmVkaWN0aW9uKFBy
ZWRpY3RlZFR5cGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGljdE51bWJl
cikgJiYgISh2YWx1ZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3Rpb25UYWdNYXNrKSk7Ci19
Ci0KLWlubGluZSBib29sIGlzQm9vbGVhblByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0Qm9v
bGVhbjsKLX0KLQotaW5saW5lIGJvb2wgaXNTdHJvbmdQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUg
dmFsdWUpCi17Ci0gICAgQVNTRVJUKHZhbHVlICE9IChQcmVkaWN0Tm9uZSB8IFN0cm9uZ1ByZWRp
Y3Rpb25UYWcpKTsKLSAgICByZXR1cm4gISEodmFsdWUgJiBTdHJvbmdQcmVkaWN0aW9uVGFnKTsK
LX0KLQotI2lmbmRlZiBOREVCVUcKLWlubGluZSBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJp
bmcoUHJlZGljdGVkVHlwZSB2YWx1ZSkKLXsKLSAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHZh
bHVlKSkgewotICAgICAgICBzd2l0Y2ggKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSB7Ci0g
ICAgICAgIGNhc2UgUHJlZGljdE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWJv
dHRvbSI7Ci0gICAgICAgIGNhc2UgUHJlZGljdENlbGw6Ci0gICAgICAgICAgICByZXR1cm4gInAt
c3Ryb25nLWNlbGwiOwotICAgICAgICBjYXNlIFByZWRpY3RBcnJheToKLSAgICAgICAgICAgIHJl
dHVybiAicC1zdHJvbmctYXJyYXkiOwotICAgICAgICBjYXNlIFByZWRpY3RJbnQzMjoKLSAgICAg
ICAgICAgIHJldHVybiAicC1zdHJvbmctaW50MzIiOwotICAgICAgICBjYXNlIFByZWRpY3REb3Vi
bGU6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWRvdWJsZSI7Ci0gICAgICAgIGNhc2Ug
UHJlZGljdE51bWJlcjoKLSAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctbnVtYmVyIjsKLSAg
ICAgICAgY2FzZSBQcmVkaWN0Qm9vbGVhbjoKLSAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmct
Ym9vbGVhbiI7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25n
LXRvcCI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2Ug
UHJlZGljdE5vbmU6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWJvdHRvbSI7Ci0gICAgY2FzZSBQ
cmVkaWN0Q2VsbDoKLSAgICAgICAgcmV0dXJuICJwLXdlYWstY2VsbCI7Ci0gICAgY2FzZSBQcmVk
aWN0QXJyYXk6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLWFycmF5IjsKLSAgICBjYXNlIFByZWRp
Y3RJbnQzMjoKLSAgICAgICAgcmV0dXJuICJwLXdlYWstaW50MzIiOwotICAgIGNhc2UgUHJlZGlj
dERvdWJsZToKLSAgICAgICAgcmV0dXJuICJwLXdlYWstZG91YmxlIjsKLSAgICBjYXNlIFByZWRp
Y3ROdW1iZXI6Ci0gICAgICAgIHJldHVybiAicC13ZWFrLW51bWJlciI7Ci0gICAgY2FzZSBQcmVk
aWN0Qm9vbGVhbjoKLSAgICAgICAgcmV0dXJuICJwLXdlYWstYm9vbGVhbiI7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuICJwLXdlYWstdG9wIjsKLSAgICB9Ci19Ci0jZW5kaWYKLQotaW5s
aW5lIFByZWRpY3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQcmVkaWN0ZWRUeXBlIGxlZnQsIFBy
ZWRpY3RlZFR5cGUgcmlnaHQpCi17Ci0gICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSA9
PSBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKQotICAgICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0
OwotICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkpIHsKLSAgICAgICAgQVNTRVJUKCFp
c1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKTsKLSAgICAgICAgcmV0dXJuIGxlZnQ7Ci0gICAgfQot
ICAgIEFTU0VSVCghaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpKTsKLSAgICBBU1NFUlQoaXNTdHJv
bmdQcmVkaWN0aW9uKHJpZ2h0KSk7Ci0gICAgcmV0dXJuIHJpZ2h0OwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotaW5saW5lIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3Rl
ZFR5cGUgcmlnaHQpCi17Ci0gICAgUHJlZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gc3RhdGlj
X2Nhc3Q8VD4obWVyZ2VQcmVkaWN0aW9ucyhzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0
KSwgcmlnaHQpKTsKLSAgICBib29sIHJlc3VsdCA9IG5ld1ByZWRpY3Rpb24gIT0gc3RhdGljX2Nh
c3Q8UHJlZGljdGVkVHlwZT4obGVmdCk7Ci0gICAgbGVmdCA9IG5ld1ByZWRpY3Rpb247Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24o
UHJlZGljdGVkVHlwZSB0eXBlLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKLXsKLSAgICBBU1NF
UlQoISh0eXBlICYgU3Ryb25nUHJlZGljdGlvblRhZykpOwotICAgIEFTU0VSVChzb3VyY2UgPT0g
U3Ryb25nUHJlZGljdGlvbiB8fCBzb3VyY2UgPT0gV2Vha1ByZWRpY3Rpb24pOwotICAgIGlmICh0
eXBlID09IFByZWRpY3ROb25lKQotICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAgcmV0
dXJuIHR5cGUgfCAoc291cmNlID09IFN0cm9uZ1ByZWRpY3Rpb24gPyBTdHJvbmdQcmVkaWN0aW9u
VGFnIDogMCk7Ci19Ci0KLSNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCi1pbmxpbmUgUHJlZGlj
dGVkVHlwZSBtYWtlUHJlZGljdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFZh
bHVlUHJvZmlsZSYgcHJvZmlsZSkKLXsKLSAgICBWYWx1ZVByb2ZpbGU6OlN0YXRpc3RpY3Mgc3Rh
dGlzdGljczsKLSAgICBwcm9maWxlLmNvbXB1dGVTdGF0aXN0aWNzKGdsb2JhbERhdGEsIHN0YXRp
c3RpY3MpOwotICAgIAotICAgIGlmICghc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1
cm4gUHJlZGljdE5vbmU7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzID09IHN0YXRp
c3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVk
aWN0SW50MzI7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuZG91YmxlcyA9PSBzdGF0aXN0aWNz
LnNhbXBsZXMpCi0gICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdERv
dWJsZTsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGljcy5pbnQzMnMgKyBzdGF0aXN0aWNzLmRvdWJs
ZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlv
blRhZyB8IFByZWRpY3ROdW1iZXI7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuYXJyYXlzID09
IHN0YXRpc3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcg
fCBQcmVkaWN0QXJyYXk7Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuY2VsbHMgPT0gc3RhdGlz
dGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRp
Y3RDZWxsOwotICAgIAotICAgIGlmIChzdGF0aXN0aWNzLmJvb2xlYW5zID09IHN0YXRpc3RpY3Mu
c2FtcGxlcykKLSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Qm9v
bGVhbjsKLSAgICAKLSAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RUb3A7
Ci19Ci0jZW5kaWYKLQogLy8gPT09IE5vZGUgPT09CiAvLwogLy8gTm9kZSByZXByZXNlbnRzIGEg
c2luZ2xlIG9wZXJhdGlvbiBpbiB0aGUgZGF0YSBmbG93IGdyYXBoLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJKSVQuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitpbmxpbmUgYm9vbCBwcmVkaWN0aW9uSXNWYWxpZChK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpTVmFsdWUgdmFsdWUsIFByZWRpY3RlZFR5cGUgdHlw
ZSkKK3sKKyAgICAvLyB0aGlzIHRha2VzIGludG8gYWNjb3VudCBvbmx5IGxvY2FsIHZhcmlhYmxl
IHByZWRpY3Rpb25zIHRoYXQgZ2V0IGVuZm9yY2VkCisgICAgLy8gb24gU2V0TG9jYWwuCisgICAg
CisgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHR5cGUpKQorICAgICAgICByZXR1cm4gdmFsdWUu
aXNJbnQzMigpOworICAgIAorICAgIGlmIChpc0FycmF5UHJlZGljdGlvbih0eXBlKSkKKyAgICAg
ICAgcmV0dXJuIGlzSlNBcnJheShnbG9iYWxEYXRhLCB2YWx1ZSk7CisgICAgCisgICAgaWYgKGlz
Qm9vbGVhblByZWRpY3Rpb24odHlwZSkpCisgICAgICAgIHJldHVybiB2YWx1ZS5pc0Jvb2xlYW4o
KTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4
ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCit7CisjaWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCisgICAgQVNTRVJUKGNvZGVCbG9jay0+
Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKSk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+Z2V0
SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKworI2lmIEVOQUJMRShKSVRfVkVS
Qk9TRV9PU1IpCisgICAgcHJpbnRmKCJPU1IgaW4gJXAoJXApIGZyb20gYmMjJXVcbiIsIGNvZGVC
bG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBieXRlY29kZUluZGV4KTsKKyNlbmRpZgor
ICAgIAorICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7
CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YWx0ZXJuYXRp
dmUoKTsKKyAgICAKKyAgICAvLyBUaGUgY29kZSBiZWxvdyBjaGVja3MgaWYgaXQgaXMgc2FmZSB0
byBwZXJmb3JtIE9TUiBlbnRyeS4gSXQgbWF5IGZpbmQKKyAgICAvLyB0aGF0IGl0IGlzIHVuc2Fm
ZSB0byBkbyBzbywgZm9yIGFueSBudW1iZXIgb2YgcmVhc29ucywgd2hpY2ggYXJlIGRvY3VtZW50
ZWQKKyAgICAvLyBiZWxvdy4gSWYgdGhlIGNvZGUgZGVjaWRlcyBub3QgdG8gT1NSIHRoZW4gaXQg
cmV0dXJucyAwLCBhbmQgaXQncyB0aGUgY2FsbGVyJ3MKKyAgICAvLyByZXNwb25zaWJpbGl0eSB0
byBwYXRjaCB1cCB0aGUgc3RhdGUgaW4gc3VjaCBhIHdheSBhcyB0byBlbnN1cmUgdGhhdCBpdCdz
CisgICAgLy8gYm90aCBzYWZlIGFuZCBlZmZpY2llbnQgdG8gY29udGludWUgZXhlY3V0aW5nIGJh
c2VsaW5lIGNvZGUgZm9yIG5vdy4gVGhpcworICAgIC8vIHNob3VsZCBhbG1vc3QgY2VydGFpbmx5
IGluY2x1ZGUgY2FsbGluZyBlaXRoZXIgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCkK
KyAgICAvLyBvciBjb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCkuCisgICAgCisg
ICAgLy8gMSkgQ2hlY2sgaWYgdGhlIERGRyBjb2RlIHNldCBhIGNvZGUgbWFwLiBJZiBpdCBkaWRu
J3QsIGl0IG1lYW5zIHRoYXQgaXQKKyAgICAvLyAgICBjYW5ub3QgaGFuZGxlIE9TUiBlbnRyeS4g
VGhpcyBjdXJyZW50bHkgb25seSBoYXBwZW5zIGlmIHdlIGRpc2FibGUKKyAgICAvLyAgICBkeW5h
bWljIHNwZWN1bGF0aW9uIHRlcm1pbmF0aW9uIGFuZCBlbmQgdXAgd2l0aCBhIERGRyBjb2RlIGJs
b2NrIHRoYXQKKyAgICAvLyAgICB3YXMgY29tcGlsZWQgZW50aXJlbHkgd2l0aCB0aGUgbm9uLXNw
ZWN1bGF0aXZlIEpJVC4gVGhlIG5vbi1zcGVjdWxhdGl2ZQorICAgIC8vICAgIEpJVCBkb2VzIG5v
dCBzdXBwb3J0IE9TUiBlbnRyeSBhbmQgcHJvYmFibHkgbmV2ZXIgd2lsbCwgc2luY2UgaXQgaXMK
KyAgICAvLyAgICBraW5kIG9mIGEgZGVwcmVjYXRlZCBjb21waWxlciByaWdodCBub3cuCisgICAg
CisjaWYgRU5BQkxFKERZTkFNSUNfVEVSTUlOQVRFX1NQRUNVTEFUSU9OKQorICAgIEFTU0VSVChj
b2RlQmxvY2stPmppdENvZGVNYXAoKSk7CisjZWxzZQorICAgIGlmICghY29kZUJsb2NrLT5qaXRD
b2RlTWFwKCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICBwcmludGYo
IiAgICBPU1IgZmFpbGVkIGJlY2F1c2Ugb2YgYSBtaXNzaW5nIEpJVCBjb2RlIG1hcC5cbiIpOwor
I2VuZGlmCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIC8vIDIp
IFZlcmlmeSBwcmVkaWN0aW9ucy4gSWYgdGhlIHByZWRpY3Rpb25zIGFyZSBpbmNvbnNpc3RlbnQg
d2l0aCB0aGUgYWN0dWFsCisgICAgLy8gICAgdmFsdWVzLCB0aGVuIE9TUiBlbnRyeSBpcyBub3Qg
cG9zc2libGUgYXQgdGhpcyB0aW1lLiBJdCdzIHRlbXB0aW5nIHRvCisgICAgLy8gICAgYXNzdW1l
IHRoYXQgd2UgY291bGQgc29tZWhvdyBhdm9pZCB0aGlzIGNhc2UuIFdlIGNhbiBjZXJ0YWlubHkg
YXZvaWQgaXQKKyAgICAvLyAgICBmb3IgZmlyc3QtdGltZSBsb29wIE9TUiAtIHRoYXQgaXMsIE9T
UiBpbnRvIGEgQ29kZUJsb2NrIHRoYXQgd2UgaGF2ZSBqdXN0CisgICAgLy8gICAgY29tcGlsZWQu
IFRoZW4gd2UgYXJlIGFsbW9zdCBndWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRoZSBwcmVkaWN0aW9u
cyB3aWxsCisgICAgLy8gICAgY2hlY2sgb3V0LiBJdCB3b3VsZCBiZSBwcmV0dHkgZWFzeSB0byBt
YWtlIHRoYXQgYSBoYXJkIGd1YXJhbnRlZS4gQnV0CisgICAgLy8gICAgdGhlbiB0aGVyZSB3b3Vs
ZCBzdGlsbCBiZSB0aGUgY2FzZSB3aGVyZSB0d28gY2FsbCBmcmFtZXMgd2l0aCB0aGUgc2FtZQor
ICAgIC8vICAgIGJhc2VsaW5lIENvZGVCbG9jayBhcmUgb24gdGhlIHN0YWNrIGF0IHRoZSBzYW1l
IHRpbWUuIFRoZSB0b3Agb25lCisgICAgLy8gICAgdHJpZ2dlcnMgY29tcGlsYXRpb24gYW5kIE9T
Ui4gSW4gdGhhdCBjYXNlLCB3ZSBtYXkgbm8gbG9uZ2VyIGhhdmUKKyAgICAvLyAgICBhY2N1cmF0
ZSB2YWx1ZSBwcm9maWxlcyBmb3IgdGhlIG9uZSBkZWVwZXIgaW4gdGhlIHN0YWNrLiBIZW5jZSwg
d2hlbiB3ZQorICAgIC8vICAgIHBvcCBpbnRvIHRoZSBDb2RlQmxvY2sgdGhhdCBpcyBkZWVwZXIg
b24gdGhlIHN0YWNrLCB3ZSBtaWdodCBPU1IgYW5kCisgICAgLy8gICAgcmVhbGl6ZSB0aGF0IHRo
ZSBwcmVkaWN0aW9ucyBhcmUgd3JvbmcuIFByb2JhYmx5LCBpbiBtb3N0IGNhc2VzLCB0aGlzIGlz
CisgICAgLy8gICAganVzdCBhbiBhbm9tYWx5IGluIHRoZSBzZW5zZSB0aGF0IHRoZSBvbGRlciBD
b2RlQmxvY2sgc2ltcGx5IHdlbnQgb2ZmCisgICAgLy8gICAgaW50byBhIGxlc3MtbGlrZWx5IHBh
dGguIFNvLCB0aGUgd2lzZXN0IGNvdXJzZSBvZiBhY3Rpb24gaXMgdG8gc2ltcGx5IG5vdAorICAg
IC8vICAgIE9TUiBhdCB0aGlzIHRpbWUuCisgICAgCisgICAgUHJlZGljdGlvblRyYWNrZXIqIHBy
ZWRpY3Rpb25zID0gYmFzZWxpbmVDb2RlQmxvY2stPnByZWRpY3Rpb25zKCk7CisgICAgCisgICAg
aWYgKHByZWRpY3Rpb25zLT5udW1iZXJPZkFyZ3VtZW50cygpID4gZXhlYy0+YXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsK
KyAgICAgICAgaWYgKCFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVu
dChpIC0gMSksIHByZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKSB7CisjaWYg
RU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWls
ZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4iLCBpLCBleGVjLT5h
cmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24oKSwgcHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rp
b25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8g
a25vdyBpZiBhdCBhbiBPU1IgZW50cnksIGEgdmFyaWFibGUgaXMgbGl2ZS4gSWYgaXQgaXNuJ3QK
KyAgICAvLyB0aGVuIHdlIHNob3VsZG4ndCB0cnkgdG8gdmVyaWZ5IGl0cyBwcmVkaWN0aW9uLgor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZW
YXJpYWJsZXMoKTsgKytpKSB7CisgICAgICAgIGlmICghcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFs
RGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0aW9ucy0+Z2V0UHJl
ZGljdGlvbihpKSkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAg
cHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBlY3Rl
ZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigp
LCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdldFByZWRpY3Rpb24oaSkpKTsKKyNl
bmRpZgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Ly8gMykgQ2hlY2sgdGhlIHN0YWNrIGhlaWdodC4gVGhlIERGRyBKSVQgbWF5IHJlcXVpcmUgYSB0
YWxsZXIgc3RhY2sgdGhhbiB0aGUKKyAgICAvLyAgICBiYXNlbGluZSBKSVQsIGluIHNvbWUgY2Fz
ZXMuIElmIHdlIGNhbid0IGdyb3cgdGhlIHN0YWNrLCB0aGVuIGRvbid0IGRvCisgICAgLy8gICAg
T1NSIHJpZ2h0IG5vdy4gVGhhdCdzIHRoZSBvbmx5IG9wdGlvbiB3ZSBoYXZlIHVubGVzcyB3ZSB3
YW50IGJhc2ljIGJsb2NrCisgICAgLy8gICAgYm91bmRhcmllcyB0byBzdGFydCB0aHJvd2luZyBS
YW5nZUVycm9ycy4gQWx0aG91Z2ggdGhhdCB3b3VsZCBiZSBwb3NzaWJsZSwKKyAgICAvLyAgICBp
dCBzZWVtcyBzaWxseTogeW91J2QgYmUgZGl2ZXJ0aW5nIHRoZSBwcm9ncmFtIHRvIGVycm9yIGhh
bmRsaW5nIHdoZW4gaXQKKyAgICAvLyAgICB3b3VsZCBoYXZlIG90aGVyd2lzZSBqdXN0IGtlcHQg
cnVubmluZyBhbGJlaXQgbGVzcyBxdWlja2x5LgorICAgIAorICAgIGlmICghZ2xvYmFsRGF0YS0+
aW50ZXJwcmV0ZXItPnJlZ2lzdGVyRmlsZSgpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2NvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnNdKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCisgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGgg
ZmFpbGVkLi5cbiIpOworI2VuZGlmCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiICAgIE9TUiBzaG91bGQgc3Vj
Y2VlZC5cbiIpOworI2VuZGlmCisgICAgCisgICAgLy8gNCkgRml4IHRoZSBjYWxsIGZyYW1lLgor
ICAgIAorICAgIGV4ZWMtPnNldENvZGVCbG9jayhjb2RlQmxvY2spOworICAgIAorICAgIC8vIDUp
IEZpbmQgYW5kIHJldHVybiB0aGUgZGVzdGluYXRpb24gbWFjaGluZSBjb2RlIGFkZHJlc3MuIFRo
ZSBERkcgc3RvcmVzCisgICAgLy8gICAgdGhlIG1hY2hpbmUgY29kZSBvZmZzZXRzIG9mIE9TUiB0
YXJnZXRzIGluIGEgQ29tcGFjdEpJVENvZGVNYXAuCisgICAgLy8gICAgRGVjb2RpbmcgaXQgaXMg
bm90IHN1cGVyIGVmZmljaWVudCwgYnV0IHdlIGV4cGVjdCB0aGF0IE9TUiBlbnRyeQorICAgIC8v
ICAgIGhhcHBlbnMgc3VmZmljaWVudGx5IHJhcmVseSwgYW5kIHRoYXQgT1NSIGVudHJ5cG9pbnRz
IGFyZSBzdWZmaWNpZW50bHkKKyAgICAvLyAgICBmZXcsIHRoYXQgdGhpcyB3b24ndCBodXJ0IHRo
cm91Z2hwdXQuIE5vdGUgdGhhdCB0aGUgb25seSByZWFsCisgICAgLy8gICAgcmVhc29uIHdoeSB3
ZSB1c2UgYSBDb21wYWN0SklUQ29kZU1hcCBpcyB0byBhdm9pZCBoYXZpbmcgdG8gaW50cm9kdWNl
CisgICAgLy8gICAgeWV0IGFub3RoZXIgZGF0YSBzdHJ1Y3R1cmUgZm9yIG1hcHBpbmcgYmV0d2Vl
biBieXRlY29kZSBpbmRpY2VzIGFuZAorICAgIC8vICAgIG1hY2hpbmUgY29kZSBvZmZzZXRzLgor
ICAgIAorICAgIENvbXBhY3RKSVRDb2RlTWFwOjpEZWNvZGVyIGRlY29kZXIoY29kZUJsb2NrLT5q
aXRDb2RlTWFwKCkpOworICAgIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0ID0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgIHdoaWxlIChkZWNvZGVyLm51bWJlck9m
RW50cmllc1JlbWFpbmluZygpKSB7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRCeXRlY29kZUlu
ZGV4OworICAgICAgICB1bnNpZ25lZCBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAg
IGRlY29kZXIucmVhZChjdXJyZW50Qnl0ZWNvZGVJbmRleCwgY3VycmVudE1hY2hpbmVDb2RlT2Zm
c2V0KTsKKyAgICAgICAgaWYgKGN1cnJlbnRCeXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5kZXgp
IHsKKyAgICAgICAgICAgIG1hY2hpbmVDb2RlT2Zmc2V0ID0gY3VycmVudE1hY2hpbmVDb2RlT2Zm
c2V0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQVNT
RVJUKG1hY2hpbmVDb2RlT2Zmc2V0ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSk7CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0
KCkpICsgbWFjaGluZUNvZGVPZmZzZXQpOworICAgIAorI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCisgICAgcHJpbnRmKCIgICAgT1NSIHJldHVybmluZyBtYWNoaW5lIGNvZGUgYWRkcmVzcyAl
cC5cbiIsIHJlc3VsdCk7CisjZW5kaWYKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2Ug
Ly8gRU5BQkxFKERGR19PU1JfRU5UUlkpCisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVO
VVNFRF9QQVJBTShjb2RlQmxvY2spOworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsK
KyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPU1JFbnRyeV9o
CisjZGVmaW5lIERGR09TUkVudHJ5X2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEV4ZWNT
dGF0ZTsKK2NsYXNzIENvZGVCbG9jazsKKworbmFtZXNwYWNlIERGRyB7CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKK3ZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4KTsKKyNlbHNlCitpbmxpbmUgdm9pZCogcHJlcGFyZU9TUkVu
dHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkKSB7IHJldHVybiAwOyB9CisjZW5k
aWYKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gREZHT1NSRW50cnlf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25UcmFja2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
VHJhY2tlci5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblRyYWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERG
R1ByZWRpY3Rpb25UcmFja2VyX2gKLSNkZWZpbmUgREZHUHJlZGljdGlvblRyYWNrZXJfaAotCi0j
aWYgRU5BQkxFKERGR19KSVQpCi0KLSNpbmNsdWRlICJERkdOb2RlLmgiCi0KLW5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKLQotLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rpbmd1aXNo
IHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KLWlubGluZSBib29sIG9wZXJhbmRJ
c0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQotCi1zdHJ1Y3Qg
UHJlZGljdGlvblNsb3QgewotcHVibGljOgotICAgIFByZWRpY3Rpb25TbG90KCkKLSAgICAgICAg
OiBtX3ZhbHVlKFByZWRpY3ROb25lKQotICAgIHsKLSAgICB9Ci0gICAgUHJlZGljdGVkVHlwZSBt
X3ZhbHVlOwotfTsKLQotY2xhc3MgUHJlZGljdGlvblRyYWNrZXIgewotcHVibGljOgotICAgIFBy
ZWRpY3Rpb25UcmFja2VyKCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFByZWRpY3Rpb25UcmFj
a2VyKHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtVmFyaWFibGVzKQotICAgICAg
ICA6IG1fYXJndW1lbnRzKG51bUFyZ3VtZW50cykKLSAgICAgICAgLCBtX3ZhcmlhYmxlcyhudW1W
YXJpYWJsZXMpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGluaXRpYWxpemVTaW1pbGFy
VG8oY29uc3QgUHJlZGljdGlvblRyYWNrZXImIG90aGVyKQotICAgIHsKLSAgICAgICAgbV9hcmd1
bWVudHMucmVzaXplKG90aGVyLm51bWJlck9mQXJndW1lbnRzKCkpOwotICAgICAgICBtX3Zhcmlh
Ymxlcy5yZXNpemUob3RoZXIubnVtYmVyT2ZWYXJpYWJsZXMoKSk7Ci0gICAgfQotICAgIAotICAg
IHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNp
emUoKTsgfQotICAgIHNpemVfdCBudW1iZXJPZlZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1f
dmFyaWFibGVzLnNpemUoKTsgfQotICAgIAotICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXhGb3JP
cGVyYW5kKGludCBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBvcGVyYW5kICsgbV9hcmd1bWVudHMu
c2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyB9Ci0KLSAgICBib29s
IHByZWRpY3RBcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtZXJn
ZVByZWRpY3Rpb24obV9hcmd1bWVudHNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9u
KHByZWRpY3Rpb24sIHNvdXJjZSkpOwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3QoaW50
IG9wZXJhbmQsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3Vy
Y2UpCi0gICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAg
ICAgICAgICByZXR1cm4gcHJlZGljdEFyZ3VtZW50KGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKG9w
ZXJhbmQpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJh
bmQgPj0gbV92YXJpYWJsZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQob3BlcmFuZCA+
PSAwKTsKLSAgICAgICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvcGVyYW5kICsgMSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV92YXJpYWJs
ZXNbb3BlcmFuZF0ubV92YWx1ZSwgbWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1i
ZXIsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCi0g
ICAgewotICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9y
IGl0ZXIgPSBtX2dsb2JhbFZhcnMuZmluZCh2YXJOdW1iZXIgKyAxKTsKLSAgICAgICAgaWYgKGl0
ZXIgPT0gbV9nbG9iYWxWYXJzLmVuZCgpKSB7Ci0gICAgICAgICAgICBQcmVkaWN0aW9uU2xvdCBw
cmVkaWN0aW9uU2xvdDsKLSAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbWVyZ2VQcmVkaWN0aW9u
KHByZWRpY3Rpb25TbG90Lm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJj
ZSkpOwotICAgICAgICAgICAgbV9nbG9iYWxWYXJzLmFkZCh2YXJOdW1iZXIgKyAxLCBwcmVkaWN0
aW9uU2xvdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBtZXJnZVByZWRpY3Rpb24oaXRlci0+c2Vjb25kLm1fdmFsdWUsIG1ha2VQcmVkaWN0
aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3Qo
Tm9kZSYgbm9kZSwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNv
dXJjZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICBjYXNlIEdl
dExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIHByZWRpY3Qobm9kZS5sb2NhbCgpLCBwcmVkaWN0
aW9uLCBzb3VyY2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0R2xvYmFs
VmFyOgotICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1iZXIo
KSwgcHJlZGljdGlvbiwgc291cmNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEdldEJ5SWQ6Ci0gICAgICAgIGNhc2UgR2V0TWV0aG9kOgotICAgICAgICBjYXNlIEdldEJ5VmFs
OgotICAgICAgICBjYXNlIENhbGw6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICAg
ICAgcmV0dXJuIG5vZGUucHJlZGljdChwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIFByZWRpY3RlZFR5cGUgZ2V0QXJndW1lbnRQcmVkaWN0aW9uKHVuc2lnbmVkIGFyZ3VtZW50
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XS5tX3ZhbHVlOwot
ICAgIH0KLQotICAgIFByZWRpY3RlZFR5cGUgZ2V0UHJlZGljdGlvbihpbnQgb3BlcmFuZCkKLSAg
ICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAg
IHJldHVybiBnZXRBcmd1bWVudFByZWRpY3Rpb24oYXJndW1lbnRJbmRleEZvck9wZXJhbmQob3Bl
cmFuZCkpOwotICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPCBtX3ZhcmlhYmxlcy5zaXpl
KCkpCi0gICAgICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF0ubV92YWx1ZTsKLSAg
ICAgICAgcmV0dXJuIFByZWRpY3ROb25lOwotICAgIH0KLSAgICAKLSAgICBQcmVkaWN0ZWRUeXBl
IGdldEdsb2JhbFZhclByZWRpY3Rpb24odW5zaWduZWQgdmFyTnVtYmVyKQotICAgIHsKLSAgICAg
ICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBpdGVyID0gbV9n
bG9iYWxWYXJzLmZpbmQodmFyTnVtYmVyICsgMSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fZ2xv
YmFsVmFycy5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAgICAgICAg
cmV0dXJuIGl0ZXItPnNlY29uZC5tX3ZhbHVlOwotICAgIH0KLSAgICAKLSAgICBQcmVkaWN0ZWRU
eXBlIGdldFByZWRpY3Rpb24oTm9kZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9k
ZS5vcCkgewotICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIGdldFBy
ZWRpY3Rpb24obm9kZS5sb2NhbCgpKTsKLSAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAg
ICAgICAgICByZXR1cm4gZ2V0R2xvYmFsVmFyUHJlZGljdGlvbihub2RlLnZhck51bWJlcigpKTsK
LSAgICAgICAgY2FzZSBHZXRCeUlkOgotICAgICAgICBjYXNlIEdldE1ldGhvZDoKLSAgICAgICAg
Y2FzZSBHZXRCeVZhbDoKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVj
dDoKLSAgICAgICAgICAgIHJldHVybiBub2RlLmdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLXByaXZhdGU6Ci0gICAgVmVjdG9yPFByZWRpY3Rpb25TbG90LCAxNj4gbV9hcmd1bWVu
dHM7Ci0gICAgVmVjdG9yPFByZWRpY3Rpb25TbG90LCAxNj4gbV92YXJpYWJsZXM7Ci0gICAgSGFz
aE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+IG1fZ2xvYmFsVmFyczsKLX07Ci0KLX0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5k
aWYgLy8gREZHUHJlZGljdGlvblRyYWNrZXJfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk0OTk2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAz
LDE0ICsxMDMsMTQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoW25v
ZGVJbmRleF0uaGFzUmVzdWx0KCkpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIERGRzo6bWVy
Z2VQcmVkaWN0aW9uKG1fdXNlc1tub2RlSW5kZXhdLCBwcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0
dXJuIEpTQzo6bWVyZ2VQcmVkaWN0aW9uKG1fdXNlc1tub2RlSW5kZXhdLCBwcmVkaWN0aW9uKTsK
ICAgICB9CiAgICAgCiAgICAgYm9vbCBtZXJnZVByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmhh
c1Jlc3VsdCgpKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBERkc6Om1lcmdlUHJlZGljdGlv
bihtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSwgcHJlZGljdGlvbik7CisgICAgICAgIHJl
dHVybiBKU0M6Om1lcmdlUHJlZGljdGlvbihtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSwg
cHJlZGljdGlvbik7CiAgICAgfQogICAgIAogICAgIHZvaWQgcHJvcGFnYXRlTm9kZShOb2RlJiBu
b2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDk0OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OTQsNiArMTQ5NCwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiB7CiAgICAgQVNTRVJU
KG1fY29tcGlsZU9rYXkpOwogICAgIEFTU0VSVChtX2NvbXBpbGVJbmRleCA9PSBibG9jay5iZWdp
bik7CisgICAgCisgICAgaWYgKGJsb2NrLmlzT1NSVGFyZ2V0KQorICAgICAgICBtX2ppdC5ub3Rp
Y2VPU1JFbnRyeShibG9jayk7CisgICAgCiAgICAgbV9ibG9ja0hlYWRzW21fYmxvY2tdID0gbV9q
aXQubGFiZWwoKTsKICNpZiBFTkFCTEUoREZHX0pJVF9CUkVBS19PTl9FVkVSWV9CTE9DSykKICAg
ICBtX2ppdC5icmVha3BvaW50KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nv
bXBhY3RKSVRDb2RlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Db21wYWN0SklUQ29kZU1hcC5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODcsMjIg
Kzg3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBkZWNvZGUoVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4m
IHJlc3VsdCkgY29uc3QKKyAgICB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMoKSBjb25zdAogICAg
IHsKLSAgICAgICAgdW5zaWduZWQgcHJldmlvdXNCeXRlY29kZUluZGV4ID0gMDsKLSAgICAgICAg
dW5zaWduZWQgcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IDA7Ci0gICAgICAgIAotICAgICAg
ICByZXN1bHQucmVzaXplKG1fbnVtYmVyT2ZFbnRyaWVzKTsKLSAgICAgICAgdW5zaWduZWQgaiA9
IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bWJlck9mRW50cmllczsg
KytpKSB7Ci0gICAgICAgICAgICBwcmV2aW91c0J5dGVjb2RlSW5kZXggKz0gZGVjb2RlTnVtYmVy
KGopOwotICAgICAgICAgICAgcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCArPSBkZWNvZGVOdW1i
ZXIoaik7Ci0gICAgICAgICAgICByZXN1bHRbaV0ubV9ieXRlY29kZUluZGV4ID0gcHJldmlvdXNC
eXRlY29kZUluZGV4OwotICAgICAgICAgICAgcmVzdWx0W2ldLm1fbWFjaGluZUNvZGVPZmZzZXQg
PSBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0OwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChq
ID09IG1fc2l6ZSk7CisgICAgICAgIHJldHVybiBtX251bWJlck9mRW50cmllczsKICAgICB9CiAg
ICAgCisgICAgdm9pZCBkZWNvZGUoVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIHJl
c3VsdCkgY29uc3Q7CisgICAgCiBwcml2YXRlOgogICAgIENvbXBhY3RKSVRDb2RlTWFwKHVpbnQ4
X3QqIGJ1ZmZlciwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzKQogICAg
ICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKQEAgLTE2MiwxMSArMTUzLDM4IEBAIHB1YmxpYzoKICAg
ICAgICAgdW5zaWduZWQgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXg7CiAgICAgICAgIHVuc2lnbmVk
IG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldDsKICAgICB9OworICAgIAorICAgIGNsYXNzIERl
Y29kZXIgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEZWNvZGVyKTsKKyAgICBwdWJs
aWM6CisgICAgICAgIERlY29kZXIoY29uc3QgQ29tcGFjdEpJVENvZGVNYXAqKTsKKyAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mRW50cmllc1JlbWFpbmluZygpIGNvbnN0OworICAg
ICAgICB2b2lkIHJlYWQodW5zaWduZWQmIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkJiBtYWNoaW5l
Q29kZU9mZnNldCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvbXBh
Y3RKSVRDb2RlTWFwKiBtX2ppdENvZGVNYXA7CisgICAgICAgIHVuc2lnbmVkIG1fcHJldmlvdXNC
eXRlY29kZUluZGV4OworICAgICAgICB1bnNpZ25lZCBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZz
ZXQ7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nOworICAgICAg
ICB1bnNpZ25lZCBtX2J1ZmZlckluZGV4OworICAgIH07CiAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIEVuY29kZXI7CisgICAgZnJpZW5kIGNsYXNzIERlY29kZXI7CiB9OwogCitpbmxpbmUg
dm9pZCBDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlKFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgRGVjb2RlciBkZWNvZGVyKHRoaXMpOworICAg
IHJlc3VsdC5yZXNpemUoZGVjb2Rlci5udW1iZXJPZkVudHJpZXNSZW1haW5pbmcoKSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKKyAgICAgICAgZGVj
b2Rlci5yZWFkKHJlc3VsdFtpXS5tX2J5dGVjb2RlSW5kZXgsIHJlc3VsdFtpXS5tX21hY2hpbmVD
b2RlT2Zmc2V0KTsKKyAgICAKKyAgICBBU1NFUlQoIWRlY29kZXIubnVtYmVyT2ZFbnRyaWVzUmVt
YWluaW5nKCkpOworfQorCiBpbmxpbmUgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29k
ZXIoKQogICAgIDogbV9idWZmZXIoMCkKICAgICAsIG1fc2l6ZSgwKQpAQCAtMjQ5LDYgKzI2Nywz
MiBAQCBpbmxpbmUgdm9pZCBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6CiAgICAgfQogfQog
CitpbmxpbmUgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29kZXI6OkRlY29kZXIoY29uc3QgQ29tcGFj
dEpJVENvZGVNYXAqIGppdENvZGVNYXApCisgICAgOiBtX2ppdENvZGVNYXAoaml0Q29kZU1hcCkK
KyAgICAsIG1fcHJldmlvdXNCeXRlY29kZUluZGV4KDApCisgICAgLCBtX3ByZXZpb3VzTWFjaGlu
ZUNvZGVPZmZzZXQoMCkKKyAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKGppdENvZGVN
YXAtPm1fbnVtYmVyT2ZFbnRyaWVzKQorICAgICwgbV9idWZmZXJJbmRleCgwKQoreworfQorCitp
bmxpbmUgdW5zaWduZWQgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29kZXI6Om51bWJlck9mRW50cmll
c1JlbWFpbmluZygpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWlu
aW5nIHx8IG1fYnVmZmVySW5kZXggPT0gbV9qaXRDb2RlTWFwLT5tX3NpemUpOworICAgIHJldHVy
biBtX251bWJlck9mRW50cmllc1JlbWFpbmluZzsKK30KKworaW5saW5lIHZvaWQgQ29tcGFjdEpJ
VENvZGVNYXA6OkRlY29kZXI6OnJlYWQodW5zaWduZWQmIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVk
JiBtYWNoaW5lQ29kZU9mZnNldCkKK3sKKyAgICBBU1NFUlQobnVtYmVyT2ZFbnRyaWVzUmVtYWlu
aW5nKCkpOworICAgIAorICAgIG1fcHJldmlvdXNCeXRlY29kZUluZGV4ICs9IG1faml0Q29kZU1h
cC0+ZGVjb2RlTnVtYmVyKG1fYnVmZmVySW5kZXgpOworICAgIG1fcHJldmlvdXNNYWNoaW5lQ29k
ZU9mZnNldCArPSBtX2ppdENvZGVNYXAtPmRlY29kZU51bWJlcihtX2J1ZmZlckluZGV4KTsKKyAg
ICBieXRlY29kZUluZGV4ID0gbV9wcmV2aW91c0J5dGVjb2RlSW5kZXg7CisgICAgbWFjaGluZUNv
ZGVPZmZzZXQgPSBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQ7CisgICAgbV9udW1iZXJPZkVu
dHJpZXNSZW1haW5pbmctLTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBD
b21wYWN0SklUQ29kZU1hcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSw4IEBAIHZvaWQgSklUOjplbWl0T3B0aW1pemF0aW9uQ2hl
Y2soT3B0aW1pemEKICAgICAKICAgICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyKFNp
Z25lZCwgVHJ1c3RlZEltbTMyKGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrID8gMSA6IDMw
KSwgQWJzb2x1dGVBZGRyZXNzKCZtX2NvZGVCbG9jay0+bV9leGVjdXRlQ291bnRlcikpOwogICAg
IEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNr
ID8gY3RpX29wdGltaXplX2Zyb21fbG9vcCA6IGN0aV9vcHRpbWl6ZV9mcm9tX3JldCk7CisgICAg
aWYgKGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrKQorICAgICAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChJbW0zMihtX2J5dGVjb2RlT2Zmc2V0KSk7CiAgICAgc3R1YkNhbGwuY2FsbCgpOwog
ICAgIHNraXBPcHRpbWl6ZS5saW5rKHRoaXMpOwogfQpAQCAtMTE1LDggKzExNyw2IEBAIHZvaWQg
SklUOjplbWl0VGltZW91dENoZWNrKCkKICAgICBzdHViQ2FsbC5jYWxsKHRpbWVvdXRDaGVja1Jl
Z2lzdGVyKTsKICAgICBzdHViQ2FsbC5nZXRBcmd1bWVudCgwLCByZWdUMSwgcmVnVDApOyAvLyBy
ZWxvYWQgbGFzdCByZXN1bHQgcmVnaXN0ZXJzLgogICAgIHNraXBUaW1lb3V0LmxpbmsodGhpcyk7
Ci0gICAgCi0gICAgZW1pdE9wdGltaXphdGlvbkNoZWNrKExvb3BPcHRpbWl6YXRpb25DaGVjayk7
CiB9CiAjZWxzZQogdm9pZCBKSVQ6OmVtaXRUaW1lb3V0Q2hlY2soKQpAQCAtMTI2LDggKzEyNiw2
IEBAIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNrKCkKICAgICBza2lwVGltZW91dC5saW5rKHRo
aXMpOwogCiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwotICAgIAotICAgIGVtaXRPcHRp
bWl6YXRpb25DaGVjayhMb29wT3B0aW1pemF0aW9uQ2hlY2spOwogfQogI2VuZGlmCiAKQEAgLTI4
Myw2ICsyODEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IERFRklORV9PUChvcF9qdHJ1ZSkKICAgICAgICAgREVGSU5FX09QKG9wX2xvYWRfdmFyYXJncykK
ICAgICAgICAgREVGSU5FX09QKG9wX2xvb3ApCisgICAgICAgIERFRklORV9PUChvcF9sb29wX2hp
bnQpCiAgICAgICAgIERFRklORV9PUChvcF9sb29wX2lmX2xlc3MpCiAgICAgICAgIERFRklORV9P
UChvcF9sb29wX2lmX2xlc3NlcSkKICAgICAgICAgREVGSU5FX09QKG9wX2xvb3BfaWZfZ3JlYXRl
cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw5
IEBACiAKICNpZiBFTkFCTEUoSklUKQogCisvLyBWZXJib3NlIGxvZ2dpbmcgZm9yIE9TUi1yZWxh
dGVkIGNvZGUuCisjZGVmaW5lIEVOQUJMRV9KSVRfVkVSQk9TRV9PU1IgMAorCiAvLyBXZSd2ZSBy
dW4gaW50byBzb21lIHByb2JsZW1zIHdoZXJlIGNoYW5naW5nIHRoZSBzaXplIG9mIHRoZSBjbGFz
cyBKSVQgbGVhZHMgdG8KIC8vIHBlcmZvcm1hbmNlIGZsdWN0dWF0aW9ucy4gIFRyeSBmb3JjaW5n
IGFsaWdubWVudCBpbiBhbiBhdHRlbXB0IHRvIHN0YWJhbGl6ZSB0aGlzLgogI2lmIENPTVBJTEVS
KEdDQykKQEAgLTc5Myw2ICs3OTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0X29wX2p0cnVlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2FkX3Zh
cmFyZ3MoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvb3AoSW5zdHJ1Y3Rp
b24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2xvb3BfaGludChJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfbG9vcF9pZl9sZXNzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9sb29wX2lmX2xlc3NlcShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfbG9vcF9pZl9ncmVhdGVyKEluc3RydWN0aW9uKik7CkBAIC0xMDY2LDYgKzEwNzAsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVtaXRfb3Bfam1wKGN1cnJlbnRJbnN0cnVjdGlv
bik7CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChJbnN0
cnVjdGlvbiopCisgICAgeworICAgICAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soTG9vcE9wdGlt
aXphdGlvbkNoZWNrKTsKKyAgICB9CisKICAgICBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRfb3BfbG9v
cF9pZl90cnVlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgewogICAgICAg
ICBlbWl0VGltZW91dENoZWNrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDExIEBACiAjaW5jbHVkZSAi
QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCi0jaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVk
ZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAi
R2V0dGVyU2V0dGVyLmgiCi0jaW5jbHVkZSAiU3Ryb25nLmgiCisjaW5jbHVkZSAiSGVhcC5oIgog
I2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpT
QXJyYXkuaCIKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIK
ICNpbmNsdWRlICJSZWdpc3Rlci5oIgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1
ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDxz
dGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMTgyMywxMCArMTgyNCw0MiBAQCBERUZJ
TkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4g
PSBjYWxsRnJhbWUtPnNjb3BlQ2hhaW4oKTsKLQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgg
PSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKKyAgICAKICAgICBKU09iamVjdCogZXJyb3Ig
PSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKICAg
ICBpZiAoZXJyb3IpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVk
IGNvbXBpbGF0aW9uIGZyb20gbG9vcCBmYWlsZWQuXG4iKTsKKyAgICAKKyAgICBpZiAoY29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpID09IGNvZGVCbG9jaykgeworI2lmIEVOQUJMRShKSVRfVkVSQk9T
RV9PU1IpCisgICAgICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9tIGxvb3AgZmFpbGVkLlxu
IiwgY29kZUJsb2NrKTsKKyNlbmRpZgorCisgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJ
VFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgICAgIGNvZGVCbG9jay0+ZG9u
dE9wdGltaXplQW55dGltZVNvb24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQo
KTsKKyAgICBBU1NFUlQob3B0aW1pemVkQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29k
ZTo6REZHSklUKTsKKyAgICAKKyAgICBpZiAodm9pZCogYWRkcmVzcyA9IERGRzo6cHJlcGFyZU9T
UkVudHJ5KGNhbGxGcmFtZSwgb3B0aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgewor
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiT3B0aW1pemluZyAl
cCBmcm9tIGxvb3Agc3VjY2VlZGVkLCBwZXJmb3JtaW5nIE9TUi5cbiIsIGNvZGVCbG9jayk7Cisj
ZW5kaWYKKworICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOworICAgICAgICBTVFVC
X1NFVF9SRVRVUk5fQUREUkVTUyhhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiT3B0aW1pemluZyAl
cCBmcm9tIGxvb3Agc3VjY2VlZGVkLCBPU1IgZmFpbGVkLlxuIiwgY29kZUJsb2NrKTsKKyNlbmRp
ZgorCisgICAgLy8gT1NSIGZhaWxlZCB0aGlzIHRpbWUsIGJ1dCBpdCBtaWdodCBzdWNjZWVkIG5l
eHQgdGltZSEgTGV0IHRoZSBjb2RlIHJ1biBhIGJpdAorICAgIC8vIGxvbmdlciBhbmQgdGhlbiB0
cnkgYWdhaW4uCisgICAgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiB9CiAKIERF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb21fcmV0KQpAQCAtMTg0MCw2ICsx
ODczLDI0IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICBK
U09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBz
Y29wZUNoYWluKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FS
TklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZyb20gcmV0IGZhaWxlZC5cbiIpOworICAgIAor
ICAgIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkgPT0gY29kZUJsb2NrKSB7CisjaWYgRU5B
QkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRmKCJPcHRpbWl6aW5nICVwIGZyb20g
cmV0dXJuIGZhaWxlZC5cbiIsIGNvZGVCbG9jayk7CisjZW5kaWYKKworICAgICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAg
ICBjb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgQVNTRVJUKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+Z2V0SklU
VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NS
KQorICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9tIHJldHVybiBzdWNjZWVkZWQuXG4iLCBj
b2RlQmxvY2spOworI2VuZGlmCisgICAgCisgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsK
IH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2luc3RhbmNlb2Yp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAko
cmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDcgKzE3MSw2IEBAIEpTT2JqZWN0KiBFdmFs
RXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmEKICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBh
bHJlYWR5IGFuIGFsdGVybmF0aXZlIHBpZWNlIG9mIGNvZGUgY29tcGlsZWQgd2l0aCBhIGRpZmZl
cmVudAogICAgICAgICAgICAgICAgIC8vIEpJVCwgc28gd2UgY2FuIHNpbGVudGx5IGZhaWwuCiAg
ICAgICAgICAgICAgICAgbV9ldmFsQ29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxFdmFs
Q29kZUJsb2NrPihtX2V2YWxDb2RlQmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAg
ICAgICAgICAgICBtX2V2YWxDb2RlQmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2pp
dENvZGVGb3JDYWxsID0gSklUOjpjb21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBt
X2V2YWxDb2RlQmxvY2suZ2V0KCkpOwpAQCAtMjkxLDcgKzI5MCw2IEBAIEpTT2JqZWN0KiBQcm9n
cmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGUKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGlmIChtX3Byb2dyYW1Db2RlQmxvY2stPmFsdGVybmF0aXZlKCkpIHsKICAgICAgICAgICAgICAg
ICBtX3Byb2dyYW1Db2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2dyYW1Db2RlQmxv
Y2s+KG1fcHJvZ3JhbUNvZGVCbG9jay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwotICAgICAgICAg
ICAgICAgIG1fcHJvZ3JhbUNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1faml0
Q29kZUZvckNhbGwgPSBKSVQ6OmNvbXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIG1f
cHJvZ3JhbUNvZGVCbG9jay5nZXQoKSk7CkBAIC00MTcsNyArNDE1LDYgQEAgSlNPYmplY3QqIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgaWYgKG1fY29kZUJsb2NrRm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKSkgewogICAgICAgICAgICAg
ICAgIG1fY29kZUJsb2NrRm9yQ2FsbCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2Rl
QmxvY2s+KG1fY29kZUJsb2NrRm9yQ2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwotICAgICAg
ICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2FsbC0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsK
ICAgICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFy
ZWRTeW1ib2xUYWJsZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
fQpAQCAtNDk0LDcgKzQ5MSw2IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVGb3IKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdC0+YWx0ZXJuYXRpdmUoKSkgewogICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0ID0gc3RhdGljX3BvaW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVCbG9jaz4obV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QtPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAgICAgICAg
ICBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKICAg
ICAgICAgICAgICAgICBtX3N5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNo
YXJlZFN5bWJvbFRhYmxlKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA5NDk5
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5
KQpAQCAtOTY1LDcgKzk2NSw3IEBACiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9USUVS
RURfQ09NUElMQVRJT04pCi0jZGVmaW5lIEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04gMAorI2Rl
ZmluZSBFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OIDEKICNlbmRpZgogCiAvKiBDdXJyZW50bHkg
b25seSBpbXBsZW1lbnRlZCBmb3IgSlNWQUxVRTY0LCBvbmx5IHRlc3RlZCBvbiBQTEFURk9STShN
QUMpICovCg==
</data>
<flag name="commit-queue"
          id="103751"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107129</attachid>
            <date>2011-09-12 19:30:24 -0700</date>
            <delta_ts>2011-09-12 22:34:03 -0700</delta_ts>
            <desc>the patch - fix build</desc>
            <filename>osrentry_patch_5.diff</filename>
            <type>text/plain</type>
            <size>82006</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE1IEBA
CisyMDExLTA5LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBiYXNlbGluZS0+c3BlY3VsYXRpdmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzkyMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIG9uLXN0YWNrLXJlcGxhY2UgKE9TUikgZnJvbSBjb2RlIHRo
YXQgaXMKKyAgICAgICAgcnVubmluZyBob3QgaW4gdGhlIG9sZCBKSVQgdG8gY29kZSBjb21waWxl
ZCBieSB0aGUgbmV3IEpJVC4gIFRoaXMKKyAgICAgICAgZW5zdXJlcyB0aGF0IGxvbmctcnVubmlu
ZyBsb29wcyBiZW5lZml0IGZyb20gREZHIG9wdGltaXphdGlvbi4KKyAgICAgICAgSXQgYWxzbyBl
bnN1cmVzIHRoYXQgaWYgY29kZSBleHBlcmllbmNlcyBhIHNwZWN1bGF0aW9uIGZhaWx1cmUKKyAg
ICAgICAgaW4gREZHIGNvZGUsIGl0IGhhcyBhbiBvcHBvcnR1bml0eSB0byByZWVudGVyIHRoZSBE
Rkcgb25jZSBldmVyeQorICAgICAgICAxLDAwMCBsb29wIGl0ZXJhdGlvbnMgb3Igc28uCisgICAg
ICAgIAorICAgICAgICBUaGlzIHJlc3VsdHMgaW4gYSAyLjg4eCBzcGVlZC11cCBvbiBLcmFrZW4v
aW1hZ2luZy1kZXNhdHVyYXRlLAorICAgICAgICBhbmQgaXMgYSBwdXJlIHdpbiBvbiB0aGUgbWFp
biB0aHJlZSBiZW5jaG1hcmsgc3VpdGVzIChTdW5TcGlkZXIsCisgICAgICAgIFY4LCBLcmFrZW4p
LCB3aGVuIHRpZXJlZCBjb21waWxhdGlvbiBpcyBlbmFibGVkLgorCisgICAgICAgICogSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxv
Y2s6OmNvbXBpbGVPcHRpbWl6ZWQpOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpjb21w
aWxlT3B0aW1pemVkKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmNvbXBpbGVP
cHRpbWl6ZWQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5
dGVjb2RlL09wY29kZS5oOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OmlzQ2VsbFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjppc0Fy
cmF5UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OmlzSW50MzJQcmVkaWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6aXNEb3VibGVQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6aXNOdW1iZXJQcmVk
aWN0aW9uKToKKyAgICAgICAgKEpTQzo6aXNCb29sZWFuUHJlZGljdGlvbik6CisgICAgICAgIChK
U0M6OmlzU3Ryb25nUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OnByZWRpY3Rpb25Ub1N0cmlu
Zyk6CisgICAgICAgIChKU0M6Om1lcmdlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjptZXJn
ZVByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjptYWtlUHJlZGljdGlvbik6CisgICAgICAgICog
Ynl0ZWNvZGUvUHJlZGljdGlvblRyYWNrZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6Om9wZXJh
bmRJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblNsb3Q6OlByZWRpY3Rpb25T
bG90KToKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblRyYWNrZXI6OlByZWRpY3Rpb25UcmFja2Vy
KToKKyAgICAgICAgKEpTQzo6UHJlZGljdGlvblRyYWNrZXI6OmluaXRpYWxpemVTaW1pbGFyVG8p
OgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6Y29weUxvY2Fsc0Zyb20pOgorICAg
ICAgICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6bnVtYmVyT2ZBcmd1bWVudHMpOgorICAgICAg
ICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6bnVtYmVyT2ZWYXJpYWJsZXMpOgorICAgICAgICAo
SlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6YXJndW1lbnRJbmRleEZvck9wZXJhbmQpOgorICAgICAg
ICAoSlNDOjpQcmVkaWN0aW9uVHJhY2tlcjo6cHJlZGljdEFyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6UHJlZGljdGlvblRyYWNrZXI6OnByZWRpY3QpOgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9u
VHJhY2tlcjo6cHJlZGljdEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OlByZWRpY3Rpb25UcmFj
a2VyOjpnZXRBcmd1bWVudFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpQcmVkaWN0aW9uVHJh
Y2tlcjo6Z2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OlByZWRpY3Rpb25UcmFja2VyOjpn
ZXRHbG9iYWxWYXJQcmVkaWN0aW9uKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvb3BI
aW50KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6RG9XaGls
ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OldoaWxlTm9kZTo6ZW1pdEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6Rm9yTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sp
OgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpj
YW5Db21waWxlT3Bjb2RlKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6cHJlZGljdCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldFByZWRp
Y3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAg
ICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OnByZWRpY3Rpb25Jc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6
REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uVHJhY2tlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjptZXJnZVVzZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6bWVyZ2VQcmVkaWN0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQvQ29tcGFjdEpJVENvZGVNYXAuaDoKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6Om51bWJlck9mRW50cmllcyk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6RGVjb2Rlcjo6RGVjb2Rlcik6CisgICAgICAgIChKU0M6OkNvbXBhY3RKSVRDb2Rl
TWFwOjpEZWNvZGVyOjpudW1iZXJPZkVudHJpZXNSZW1haW5pbmcpOgorICAgICAgICAoSlNDOjpD
b21wYWN0SklUQ29kZU1hcDo6RGVjb2Rlcjo6cmVhZCk6CisgICAgICAgICogaml0L0pJVC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0VGltZW91dENoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9sb29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
IChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKToK
KyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbCk6CisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVy
bmFsKToKKwogMjAxMS0wOS0wOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIEphdmFTY3JpcHRDb3JlIGRvZXMgbm90IGhhdmUgc3BlY3VsYXRpdmUtPmJhc2VsaW5l
IE9TUgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0OTk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEwIEBACiAJCTBGRDNDODI4MTQx
MTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIu
aCAqLzsgfTsKIAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUx
RTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKIAkJMEZEODJF
MzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQg
LyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkQ4MkU1NDE0MURBRUVFMDAxNzlDOTQgLyogUHJlZGljdGVkVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJF
NEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkU1NTE0MURBRUVFMDAxNzlDOTQg
LyogUHJlZGljdGlvblRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDgyRTUwMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
RDgyRTU2MTQxREFGMDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQg
LyogREZHT1NSRW50cnkuY3BwICovOyB9OworCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyog
REZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjc3MTJBNkY3ODMw
MDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2
OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIz
IC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VDMjU1MDA1REJD
OEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJVmFsdWVX
cmFwcGVyLmNwcCAqLzsgfTsKQEAgLTc5OSw2ICs4MDMsMTAgQEAKIAkJMEZEODJFMUUxNDE3MkMy
RjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuY3BwOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFGMTQxNzJDMkYw
MDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQ2FwYWJpbGl0aWVzLmg7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBD
b21wYWN0SklUQ29kZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21w
YWN0SklUQ29kZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkU0RjE0
MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcmVkaWN0ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRDgyRTUwMTQxREFFQTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmVkaWN0aW9uVHJhY2tlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRW50cnku
Y3BwOyBwYXRoID0gZGZnL0RGR09TUkVudHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZEODJFNTMxNDFEQUVERTAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkVudHJ5Lmg7IHBhdGggPSBkZmcvREZHT1NS
RW50cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjkyMTJB
NkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAyLDYgKzIyMTAsOCBAQAogCQk4NkVDOURCMzEz
MjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQkwRkQ4MkU1MjE0MURBRURFMDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3Bw
ICovLAorCQkJCTBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oICovLAog
CQkJCTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovLAog
CQkJCTBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLywKIAkJ
CQkwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovLApAQCAtMjI5
OCw2ICsyMzA4LDggQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkU0RjE0
MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovLAorCQkJCTBGRDgyRTUwMTQxREFF
QTEwMDE3OUM5NCAvKiBQcmVkaWN0aW9uVHJhY2tlci5oICovLAogCQkJCTBGOTYzQjM2MTNGQzZG
REUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQk5NjlBMDc5MDBFRDFEM0FFMDBG
MUY2ODEgLyogQ29kZUJsb2NrLmNwcCAqLywKIAkJCQk5NjlBMDc5MTBFRDFEM0FFMDBGMUY2ODEg
LyogQ29kZUJsb2NrLmggKi8sCkBAIC0yMzk3LDYgKzI0MDksOSBAQAogCQkJCUJDMjU3REU4MEUx
RjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM0
MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkQ4MkU1NTE0MURBRUVFMDAxNzlDOTQgLyogUHJlZGljdGlvblRyYWNrZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRTU0MTQxREFFRUUwMDE3OUM5NCAvKiBQcmVkaWN0
ZWRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyog
Q29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2
RTBFMTZGNUNEMDBCMzQ0NjAgLyogVENTcGluTG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDY4
LDYgKzMwODMsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEZEODJFNTYxNDFEQUYw
ODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTYzQjJD
MTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZEM0M4MjUxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3Niw2ICsxMDc2LDEw
IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28KICAgICAgICAgICAg
IHByaW50ZigiWyU0ZF0gbG9vcF9pZl9ncmVhdGVyZXFcdCAlcywgJXMsICVkKC0+JWQpXG4iLCBs
b2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVj
LCByMSkuZGF0YSgpLCBvZmZzZXQsIGxvY2F0aW9uICsgb2Zmc2V0KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfbG9vcF9oaW50OiB7CisgICAgICAgICAg
ICBwcmludGYoIlslNGRdIGxvb3BfaGludFxuIiwgbG9jYXRpb24pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7CiAgICAgICAgICAg
ICBpbnQgdGFibGVJbmRleCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGRl
ZmF1bHRUYXJnZXQgPSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTE0MDUsNyArMTQwOSw2IEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wU3RhdGlzdGljcygpCiBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU0dsb2Jh
bE9iamVjdCAqZ2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQ
cm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCBTeW1ib2xUYWJsZSogc3ltVGFiLCBib29s
IGlzQ29uc3RydWN0b3IsIFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkKICAgICA6
IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRGF0YSgpLCBvd25lckV4ZWN1dGFi
bGUsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPmdsb2JhbERh
dGEoKS5oZWFwKQotICAgICwgbV9leGVjdXRlQ291bnRlcigtMTAwMCkgLy8gdHJpZ2dlciBvcHRp
bWl6YXRpb24gd2hlbiBzaWduIGJpdCBjbGVhcnMKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJz
KDApCiAgICAgLCBtX251bVZhcnMoMCkKICAgICAsIG1fbnVtUGFyYW1ldGVycygwKQpAQCAtMTQy
Nyw2ICsxNDMwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwog
ICAgICwgbV9hbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSkKIHsKICAgICBBU1NFUlQobV9zb3VyY2Up
OworICAgIAorICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKIAogI2lmIERVTVBfQ09ERV9CTE9D
S19TVEFUSVNUSUNTCiAgICAgbGl2ZUNvZGVCbG9ja1NldC5hZGQodGhpcyk7CkBAIC0xOTAxLDMz
ICsxOTA2LDI0IEBAIENvZGVCbG9jayogRnVuY3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VtZW4KIAog
SlNPYmplY3QqIFByb2dyYW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBl
eGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAgaWYgKHJlcGxhY2Vt
ZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkp
KSB7Ci0gICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBkb24ndCBoaXQgdGhp
cyBhZ2FpbiBhbnl0aW1lIHNvb24uCi0gICAgICAgIGRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7
CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGll
ckpJVChnZXRKSVRUeXBlKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAgICAgSlNPYmpl
Y3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwogICAgIHJldHVy
biBlcnJvcjsKIH0KIAogSlNPYmplY3QqIEV2YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7Ci0gICAg
aWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpuZXh0VGllckpJVChn
ZXRKSVRUeXBlKCkpKSB7Ci0gICAgICAgIC8vIE5vIE9TUiB5ZXQsIHNvIG1ha2Ugc3VyZSB3ZSBk
b24ndCBoaXQgdGhpcyBhZ2FpbiBhbnl0aW1lIHNvb24uCi0gICAgICAgIGRvbnRPcHRpbWl6ZUFu
eXRpbWVTb29uKCk7CisgICAgaWYgKHJlcGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSA9PSBKSVRD
b2RlOjpuZXh0VGllckpJVChnZXRKSVRUeXBlKCkpKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9
CiAgICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwog
ICAgIHJldHVybiBlcnJvcjsKIH0KIAogSlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21w
aWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5O
b2RlKQogewotICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6
bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkgewotICAgICAgICAvLyBObyBPU1IgeWV0LCBzbyBt
YWtlIHN1cmUgd2UgZG9uJ3QgaGl0IHRoaXMgYWdhaW4gYW55dGltZSBzb29uLgotICAgICAgICBk
b250T3B0aW1pemVBbnl0aW1lU29vbigpOworICAgIGlmIChyZXBsYWNlbWVudCgpLT5nZXRKSVRU
eXBlKCkgPT0gSklUQ29kZTo6bmV4dFRpZXJKSVQoZ2V0SklUVHlwZSgpKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQogICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZEZvcihleGVj
LCBzY29wZUNoYWluTm9kZSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENv
ZGVGb3JDYWxsKTsKICAgICByZXR1cm4gZXJyb3I7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsNyBAQAogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSnVtcFRh
YmxlLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKKyNpbmNsdWRlICJQcmVkaWN0aW9uVHJhY2tlci5o
IgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKICNpbmNs
dWRlICJXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgiCkBAIC0yMjYsNiArMjI3LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlKCkgeyBy
ZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQogICAgICAgICBQYXNzT3duUHRyPENvZGVCbG9j
az4gcmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5yZWxlYXNlKCk7
IH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0UHJlZGljdGlvbnMoUGFzc093blB0cjxQcmVk
aWN0aW9uVHJhY2tlcj4gcHJlZGljdGlvbnMpIHsgbV9wcmVkaWN0aW9ucyA9IHByZWRpY3Rpb25z
OyB9CisgICAgICAgIFByZWRpY3Rpb25UcmFja2VyKiBwcmVkaWN0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlZGljdGlvbnMuZ2V0KCk7IH0KIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdG9yJik7CiAgICAgICAgIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90Vmlz
aXRvciYpOwpAQCAtNTg5LDE2ICs1OTMsODggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIGNvcHlEYXRhRnJvbUFsdGVybmF0aXZlKCk7CiAgICAgICAgIAorICAgICAg
ICAvLyBGdW5jdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHdoZW4gdGllcmVkIGNvbXBpbGF0aW9uIGtp
Y2tzIGluLiBUaGlzCisgICAgICAgIC8vIGNvbnRyb2xzIGJvdGggd2hlbiB0aGUgb3B0aW1pemlu
ZyBjb21waWxlciBpcyBpbnZva2VkIGFuZCB3aGVuIE9TUgorICAgICAgICAvLyBlbnRyeSBoYXBw
ZW5zLiBUd28gdHJpZ2dlcnMgZXhpc3Q6IHRoZSBsb29wIHRyaWdnZXIgYW5kIHRoZSByZXR1cm4K
KyAgICAgICAgLy8gdHJpZ2dlci4gSW4gZWl0aGVyIGNhc2UsIHdoZW4gYW4gYWRkaXRpb24gdG8g
bV9leGVjdXRlQ291bnRlcgorICAgICAgICAvLyBjYXVzZXMgaXQgdG8gYmVjb21lIG5vbi1uZWdh
dGl2ZSwgdGhlIG9wdGltaXppbmcgY29tcGlsZXIgaXMKKyAgICAgICAgLy8gaW52b2tlZC4gVGhp
cyBpbmNsdWRlcyBhIGZhc3QgY2hlY2sgdG8gc2VlIGlmIHRoaXMgQ29kZUJsb2NrIGhhcworICAg
ICAgICAvLyBhbHJlYWR5IGJlZW4gb3B0aW1pemVkIChpLmUuIHJlcGxhY2VtZW50KCkgcmV0dXJu
cyBhIENvZGVCbG9jaworICAgICAgICAvLyB0aGF0IHdhcyBvcHRpbWl6ZWQgd2l0aCBhIGhpZ2hl
ciB0aWVyIEpJVCB0aGFuIHRoaXMgb25lKS4gSW4gdGhlCisgICAgICAgIC8vIGNhc2Ugb2YgdGhl
IGxvb3AgdHJpZ2dlciwgaWYgdGhlIG9wdGltaXplZCBjb21waWxhdGlvbiBzdWNjZWVkcworICAg
ICAgICAvLyAob3IgaGFzIGFscmVhZHkgc3VjY2VlZGVkIGluIHRoZSBwYXN0KSB0aGVuIE9TUiBp
cyBhdHRlbXB0ZWQgdG8KKyAgICAgICAgLy8gcmVkaXJlY3QgcHJvZ3JhbSBmbG93IGludG8gdGhl
IG9wdGltaXplZCBjb2RlLgorICAgICAgICAKKyAgICAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFy
ZSBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIG9wdGltaXphdGlvbiB0cmlnZ2VycywKKyAgICAgICAg
Ly8gYW5kIGFyZSB1c2VkIGFzIGEgc2luZ2xlIHBvaW50IGF0IHdoaWNoIHdlIGRlZmluZSB0aGUg
aGV1cmlzdGljcworICAgICAgICAvLyBmb3IgaG93IG11Y2ggd2FybS11cCBpcyBtYW5kYXRlZCBi
ZWZvcmUgdGhlIG5leHQgb3B0aW1pemF0aW9uCisgICAgICAgIC8vIHRyaWdnZXIgZmlsZXMuIEFs
bCBDb2RlQmxvY2tzIHN0YXJ0IG91dCB3aXRoIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSwKKyAgICAg
ICAgLy8gYXMgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgQ29kZUJsb2NrIGNvbnN0cnVjdG9yLgor
ICAgICAgICAKKyAgICAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBzdXBw
b3J0IGNhbGxpbmcKKyAgICAgICAgLy8gb3B0aW1pemVBZnRlcldhcm1VcCgpIGZyb20gSklULWdl
bmVyYXRlZCBjb2RlLgorICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0
ZXJXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gLTEwMDA7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QqIGFkZHJlc3NPZkV4ZWN1dGVDb3VudGVyKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICZtX2V4ZWN1dGVDb3VudGVyOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgdG8gZm9yY2UgdGhlIG5leHQgb3B0
aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZS4gVGhpcyBpcworICAgICAgICAvLyByYXJlbHkgd2lz
ZSwgc2luY2Ugb3B0aW1pemF0aW9uIHRyaWdnZXJzIGFyZSB0eXBpY2FsbHkgbW9yZQorICAgICAg
ICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcgYmFzZWxpbmUgY29kZS4KICAgICAgICAgdm9p
ZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKICAgICAgICAgewogICAgICAgICAgICAgbV9leGVj
dXRlQ291bnRlciA9IDA7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIC8vIENhbGwgdGhp
cyB0byBwcmV2ZW50IG9wdGltaXphdGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0aGF0
CisgICAgICAgIC8vIG9wdGltaXphdGlvbiB3aWxsIHN0aWxsIGhhcHBlbiBhZnRlciByb3VnaGx5
IDJeMjkgaW52b2NhdGlvbnMsCisgICAgICAgIC8vIHNvIHRoaXMgaXMgcmVhbGx5IG1lYW50IHRv
IGRlbGF5IHRoYXQgYXMgbXVjaCBhcyBwb3NzaWJsZS4gVGhpcworICAgICAgICAvLyBpcyBjYWxs
ZWQgaWYgb3B0aW1pemF0aW9uIGZhaWxlZCwgYW5kIHdlIGV4cGVjdCBpdCB0byBmYWlsIGluCisg
ICAgICAgIC8vIHRoZSBmdXR1cmUgYXMgd2VsbC4KICAgICAgICAgdm9pZCBkb250T3B0aW1pemVB
bnl0aW1lU29vbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKTsKICAgICAgICAgfQogICAgICAgICAK
KyAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIHJlaW5pdGlhbGl6ZSB0aGUgY291bnRlciB0byBpdHMg
c3RhcnRpbmcgc3RhdGUsCisgICAgICAgIC8vIGZvcmNpbmcgYSB3YXJtLXVwIHRvIGhhcHBlbiBi
ZWZvcmUgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIKKyAgICAgICAgLy8gZmlyZXMuIFRo
aXMgaXMgY2FsbGVkIGluIHRoZSBDb2RlQmxvY2sgY29uc3RydWN0b3IuIEl0IGFsc28KKyAgICAg
ICAgLy8gbWFrZXMgc2Vuc2UgdG8gY2FsbCB0aGlzIGlmIGFuIE9TUiBleGl0IG9jY3VycmVkLiBO
b3RlIHRoYXQKKyAgICAgICAgLy8gT1NSIGV4aXQgY29kZSBpcyBjb2RlIGdlbmVyYXRlZCwgc28g
dGhlIHZhbHVlIG9mIHRoZSBleGVjdXRlCisgICAgICAgIC8vIGNvdW50ZXIgdGhhdCB0aGlzIGNv
cnJlc3BvbmRzIHRvIGlzIGFsc28gYXZhaWxhYmxlIGRpcmVjdGx5LgorICAgICAgICB2b2lkIG9w
dGltaXplQWZ0ZXJXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3Vu
dGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0aW9uIHRy
aWdnZXIgdG8gZmlyZSBzb29uLCBidXQKKyAgICAgICAgLy8gbm90IG5lY2Vzc2FyaWx5IHRoZSBu
ZXh0IG9uZS4gVGhpcyBtYWtlcyBzZW5zZSBpZiBvcHRpbWl6YXRpb24KKyAgICAgICAgLy8gc3Vj
Y2VlZHMuIFN1Y2Nlc3NmdWx5IG9wdGltaXphdGlvbiBtZWFucyB0aGF0IGFsbCBjYWxscyBhcmUK
KyAgICAgICAgLy8gcmVsaW5rZWQgdG8gdGhlIG9wdGltaXplZCBjb2RlLCBzbyB0aGlzIG9ubHkg
YWZmZWN0cyBjYWxsCisgICAgICAgIC8vIGZyYW1lcyB0aGF0IGFyZSBzdGlsbCBleGVjdXRpbmcg
dGhpcyBDb2RlQmxvY2suIFRoZSB2YWx1ZSBoZXJlCisgICAgICAgIC8vIGlzIHR1bmVkIHRvIHN0
cmlrZSBhIGJhbGFuY2UgYmV0d2VlbiB0aGUgY29zdCBvZiBPU1IgZW50cnkKKyAgICAgICAgLy8g
KHdoaWNoIGlzIHRvbyBoaWdoIHRvIHdhcnJhbnQgbWFraW5nIGV2ZXJ5IGxvb3AgYmFjayBlZGdl
IHRvCisgICAgICAgIC8vIHRyaWdnZXIgT1NSIGltbWVkaWF0ZWx5KSBhbmQgdGhlIGNvc3Qgb2Yg
ZXhlY3V0aW5nIGJhc2VsaW5lCisgICAgICAgIC8vIGNvZGUgKHdoaWNoIGlzIGhpZ2ggZW5vdWdo
IHRoYXQgd2UgZG9uJ3QgbmVjZXNzYXJpbHkgd2FudCB0bworICAgICAgICAvLyBoYXZlIGEgZnVs
bCB3YXJtLXVwKS4gVGhlIGludHVpdGlvbiBmb3IgY2FsbGluZyB0aGlzIGluc3RlYWQgb2YKKyAg
ICAgICAgLy8gb3B0aW1pemVOZXh0SW52b2NhdGlvbigpIGlzIGZvciB0aGUgY2FzZSBvZiByZWN1
cnNpdmUgZnVuY3Rpb25zCisgICAgICAgIC8vIHdpdGggbG9vcHMuIENvbnNpZGVyIHRoYXQgdGhl
cmUgbWF5IGJlIE4gY2FsbCBmcmFtZXMgb2Ygc29tZQorICAgICAgICAvLyByZWN1cnNpdmUgZnVu
Y3Rpb24sIGZvciBhIHJlYXNvbmFibHkgbGFyZ2UgdmFsdWUgb2YgTi4gVGhlIHRvcAorICAgICAg
ICAvLyBvbmUgdHJpZ2dlcnMgb3B0aW1pemF0aW9uLCBhbmQgdGhlbiByZXR1cm5zLCBhbmQgdGhl
biBhbGwgb2YKKyAgICAgICAgLy8gdGhlIG90aGVycyByZXR1cm4uIFdlIGRvbid0IHdhbnQgb3B0
aW1pemF0aW9uIHRvIGJlIHRyaWdnZXJlZCBvbgorICAgICAgICAvLyBlYWNoIHJldHVybiwgYXMg
dGhhdCB3b3VsZCBiZSBzdXBlcmZsdW91cy4gSXQgb25seSBtYWtlcyBzZW5zZQorICAgICAgICAv
LyB0byB0cmlnZ2VyIG9wdGltaXphdGlvbiBpZiBvbmUgb2YgdGhvc2UgZnVuY3Rpb25zIGJlY29t
ZXMgaG90CisgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgorICAgICAgICB2b2lkIG9w
dGltaXplU29vbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAt
MTAwOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50
ZXI7CiAKICAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhlc2UgcmVtYWluaW5nIG1lbWJlcnMgcHJp
dmF0ZS4KQEAgLTY3MSw2ICs3NDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAgICAg
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9qdW1wVGFyZ2V0czsKKyAgICAgICAgVmVjdG9yPHVuc2ln
bmVkPiBtX2xvb3BUYXJnZXRzOwogCiAgICAgICAgIC8vIENvbnN0YW50IFBvb2wKICAgICAgICAg
VmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CkBAIC02ODIsNiArNzU5LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwogCiAgICAg
ICAgIE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CisgICAgICAgIAorICAgICAgICBP
d25QdHI8UHJlZGljdGlvblRyYWNrZXI+IG1fcHJlZGljdGlvbnM7CiAKICAgICAgICAgc3RydWN0
IFJhcmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiA5NDk5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTU3LDYgKzE1Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBtYWNybyhvcF9sb29w
X2lmX2xlc3NlcSwgNCkgXAogICAgICAgICBtYWNybyhvcF9sb29wX2lmX2dyZWF0ZXIsIDQpIFwK
ICAgICAgICAgbWFjcm8ob3BfbG9vcF9pZl9ncmVhdGVyZXEsIDQpIFwKKyAgICAgICAgbWFjcm8o
b3BfbG9vcF9oaW50LCAxKSBcCiAgICAgICAgIG1hY3JvKG9wX3N3aXRjaF9pbW0sIDQpIFwKICAg
ICAgICAgbWFjcm8ob3Bfc3dpdGNoX2NoYXIsIDQpIFwKICAgICAgICAgbWFjcm8ob3Bfc3dpdGNo
X3N0cmluZywgNCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRp
Y3RlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHJlZGljdGVkVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgUHJlZGljdGVkVHlwZV9oCisjZGVmaW5lIFByZWRpY3RlZFR5cGVfaAorCisjaW5jbHVk
ZSAiVmFsdWVQcm9maWxlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIHVpbnQ4X3Qg
UHJlZGljdGVkVHlwZTsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3ROb25lICAg
PSAwOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdENlbGwgICA9IDB4MDE7Citz
dGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0QXJyYXkgID0gMHgwMzsKK3N0YXRpYyBj
b25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RJbnQzMiAgPSAweDA0Oworc3RhdGljIGNvbnN0IFBy
ZWRpY3RlZFR5cGUgUHJlZGljdERvdWJsZSA9IDB4MDg7CitzdGF0aWMgY29uc3QgUHJlZGljdGVk
VHlwZSBQcmVkaWN0TnVtYmVyID0gMHgwYzsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFBy
ZWRpY3RCb29sZWFuID0gMHgxMDsKK3N0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RU
b3AgICAgPSAweDFmOworc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgU3Ryb25nUHJlZGljdGlv
blRhZyA9IDB4ODA7CitzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0aW9uVGFnTWFz
ayAgICA9IDB4ODA7CisKK2VudW0gUHJlZGljdGlvblNvdXJjZSB7IFdlYWtQcmVkaWN0aW9uLCBT
dHJvbmdQcmVkaWN0aW9uIH07CisKK2lubGluZSBib29sIGlzQ2VsbFByZWRpY3Rpb24oUHJlZGlj
dGVkVHlwZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFBy
ZWRpY3RDZWxsICYmICEodmFsdWUgJiB+KFByZWRpY3RBcnJheSB8IFByZWRpY3Rpb25UYWdNYXNr
KSk7Cit9CisKK2lubGluZSBib29sIGlzQXJyYXlQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFs
dWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0gUHJlZGlj
dEFycmF5OworfQorCitpbmxpbmUgYm9vbCBpc0ludDMyUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBl
IHZhbHVlKQoreworICAgIHJldHVybiAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spID09IFBy
ZWRpY3RJbnQzMjsKK30KKworaW5saW5lIGJvb2wgaXNEb3VibGVQcmVkaWN0aW9uKFByZWRpY3Rl
ZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykg
PT0gUHJlZGljdERvdWJsZTsKK30KKworaW5saW5lIGJvb2wgaXNOdW1iZXJQcmVkaWN0aW9uKFBy
ZWRpY3RlZFR5cGUgdmFsdWUpCit7CisgICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGljdE51bWJl
cikgJiYgISh2YWx1ZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3Rpb25UYWdNYXNrKSk7Cit9
CisKK2lubGluZSBib29sIGlzQm9vbGVhblByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0Qm9v
bGVhbjsKK30KKworaW5saW5lIGJvb2wgaXNTdHJvbmdQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUg
dmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlICE9IChQcmVkaWN0Tm9uZSB8IFN0cm9uZ1ByZWRp
Y3Rpb25UYWcpKTsKKyAgICByZXR1cm4gISEodmFsdWUgJiBTdHJvbmdQcmVkaWN0aW9uVGFnKTsK
K30KKworI2lmbmRlZiBOREVCVUcKK2lubGluZSBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJp
bmcoUHJlZGljdGVkVHlwZSB2YWx1ZSkKK3sKKyAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHZh
bHVlKSkgeworICAgICAgICBzd2l0Y2ggKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSB7Cisg
ICAgICAgIGNhc2UgUHJlZGljdE5vbmU6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWJv
dHRvbSI7CisgICAgICAgIGNhc2UgUHJlZGljdENlbGw6CisgICAgICAgICAgICByZXR1cm4gInAt
c3Ryb25nLWNlbGwiOworICAgICAgICBjYXNlIFByZWRpY3RBcnJheToKKyAgICAgICAgICAgIHJl
dHVybiAicC1zdHJvbmctYXJyYXkiOworICAgICAgICBjYXNlIFByZWRpY3RJbnQzMjoKKyAgICAg
ICAgICAgIHJldHVybiAicC1zdHJvbmctaW50MzIiOworICAgICAgICBjYXNlIFByZWRpY3REb3Vi
bGU6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWRvdWJsZSI7CisgICAgICAgIGNhc2Ug
UHJlZGljdE51bWJlcjoKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctbnVtYmVyIjsKKyAg
ICAgICAgY2FzZSBQcmVkaWN0Qm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmct
Ym9vbGVhbiI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gInAtc3Ryb25n
LXRvcCI7CisgICAgICAgIH0KKyAgICB9CisgICAgc3dpdGNoICh2YWx1ZSkgeworICAgIGNhc2Ug
UHJlZGljdE5vbmU6CisgICAgICAgIHJldHVybiAicC13ZWFrLWJvdHRvbSI7CisgICAgY2FzZSBQ
cmVkaWN0Q2VsbDoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstY2VsbCI7CisgICAgY2FzZSBQcmVk
aWN0QXJyYXk6CisgICAgICAgIHJldHVybiAicC13ZWFrLWFycmF5IjsKKyAgICBjYXNlIFByZWRp
Y3RJbnQzMjoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstaW50MzIiOworICAgIGNhc2UgUHJlZGlj
dERvdWJsZToKKyAgICAgICAgcmV0dXJuICJwLXdlYWstZG91YmxlIjsKKyAgICBjYXNlIFByZWRp
Y3ROdW1iZXI6CisgICAgICAgIHJldHVybiAicC13ZWFrLW51bWJlciI7CisgICAgY2FzZSBQcmVk
aWN0Qm9vbGVhbjoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstYm9vbGVhbiI7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuICJwLXdlYWstdG9wIjsKKyAgICB9Cit9CisjZW5kaWYKKworaW5s
aW5lIFByZWRpY3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQcmVkaWN0ZWRUeXBlIGxlZnQsIFBy
ZWRpY3RlZFR5cGUgcmlnaHQpCit7CisgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSA9
PSBpc1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKQorICAgICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0
OworICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obGVmdCkpIHsKKyAgICAgICAgQVNTRVJUKCFp
c1N0cm9uZ1ByZWRpY3Rpb24ocmlnaHQpKTsKKyAgICAgICAgcmV0dXJuIGxlZnQ7CisgICAgfQor
ICAgIEFTU0VSVCghaXNTdHJvbmdQcmVkaWN0aW9uKGxlZnQpKTsKKyAgICBBU1NFUlQoaXNTdHJv
bmdQcmVkaWN0aW9uKHJpZ2h0KSk7CisgICAgcmV0dXJuIHJpZ2h0OworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgbWVyZ2VQcmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3Rl
ZFR5cGUgcmlnaHQpCit7CisgICAgUHJlZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gc3RhdGlj
X2Nhc3Q8VD4obWVyZ2VQcmVkaWN0aW9ucyhzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0
KSwgcmlnaHQpKTsKKyAgICBib29sIHJlc3VsdCA9IG5ld1ByZWRpY3Rpb24gIT0gc3RhdGljX2Nh
c3Q8UHJlZGljdGVkVHlwZT4obGVmdCk7CisgICAgbGVmdCA9IG5ld1ByZWRpY3Rpb247CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24o
UHJlZGljdGVkVHlwZSB0eXBlLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKK3sKKyAgICBBU1NF
UlQoISh0eXBlICYgU3Ryb25nUHJlZGljdGlvblRhZykpOworICAgIEFTU0VSVChzb3VyY2UgPT0g
U3Ryb25nUHJlZGljdGlvbiB8fCBzb3VyY2UgPT0gV2Vha1ByZWRpY3Rpb24pOworICAgIGlmICh0
eXBlID09IFByZWRpY3ROb25lKQorICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgcmV0
dXJuIHR5cGUgfCAoc291cmNlID09IFN0cm9uZ1ByZWRpY3Rpb24gPyBTdHJvbmdQcmVkaWN0aW9u
VGFnIDogMCk7Cit9CisKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCitpbmxpbmUgUHJlZGlj
dGVkVHlwZSBtYWtlUHJlZGljdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFZh
bHVlUHJvZmlsZSYgcHJvZmlsZSkKK3sKKyAgICBWYWx1ZVByb2ZpbGU6OlN0YXRpc3RpY3Mgc3Rh
dGlzdGljczsKKyAgICBwcm9maWxlLmNvbXB1dGVTdGF0aXN0aWNzKGdsb2JhbERhdGEsIHN0YXRp
c3RpY3MpOworICAgIAorICAgIGlmICghc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1
cm4gUHJlZGljdE5vbmU7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzID09IHN0YXRp
c3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVk
aWN0SW50MzI7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuZG91YmxlcyA9PSBzdGF0aXN0aWNz
LnNhbXBsZXMpCisgICAgICAgIHJldHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdERv
dWJsZTsKKyAgICAKKyAgICBpZiAoc3RhdGlzdGljcy5pbnQzMnMgKyBzdGF0aXN0aWNzLmRvdWJs
ZXMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlv
blRhZyB8IFByZWRpY3ROdW1iZXI7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuYXJyYXlzID09
IHN0YXRpc3RpY3Muc2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcg
fCBQcmVkaWN0QXJyYXk7CisgICAgCisgICAgaWYgKHN0YXRpc3RpY3MuY2VsbHMgPT0gc3RhdGlz
dGljcy5zYW1wbGVzKQorICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRp
Y3RDZWxsOworICAgIAorICAgIGlmIChzdGF0aXN0aWNzLmJvb2xlYW5zID09IHN0YXRpc3RpY3Mu
c2FtcGxlcykKKyAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Qm9v
bGVhbjsKKyAgICAKKyAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RUb3A7
Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQcmVkaWN0ZWRU
eXBlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0aW9uVHJh
Y2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVk
aWN0aW9uVHJhY2tlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWRpY3Rpb25UcmFja2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
UHJlZGljdGlvblRyYWNrZXJfaAorI2RlZmluZSBQcmVkaWN0aW9uVHJhY2tlcl9oCisKKyNpbmNs
dWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBoZWxwZXIgZnVuY3Rpb24g
dG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgoraW5saW5l
IGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAw
OyB9CisKK3N0cnVjdCBQcmVkaWN0aW9uU2xvdCB7CitwdWJsaWM6CisgICAgUHJlZGljdGlvblNs
b3QoKQorICAgICAgICA6IG1fdmFsdWUoUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICBQ
cmVkaWN0ZWRUeXBlIG1fdmFsdWU7Cit9OworCitjbGFzcyBQcmVkaWN0aW9uVHJhY2tlciB7Citw
dWJsaWM6CisgICAgUHJlZGljdGlvblRyYWNrZXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
UHJlZGljdGlvblRyYWNrZXIodW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1WYXJp
YWJsZXMpCisgICAgICAgIDogbV9hcmd1bWVudHMobnVtQXJndW1lbnRzKQorICAgICAgICAsIG1f
dmFyaWFibGVzKG51bVZhcmlhYmxlcykKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5p
dGlhbGl6ZVNpbWlsYXJUbyhjb25zdCBQcmVkaWN0aW9uVHJhY2tlciYgb3RoZXIpCisgICAgewor
ICAgICAgICBtX2FyZ3VtZW50cy5yZXNpemUob3RoZXIubnVtYmVyT2ZBcmd1bWVudHMoKSk7Cisg
ICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvdGhlci5udW1iZXJPZlZhcmlhYmxlcygpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb3B5TG9jYWxzRnJvbShjb25zdCBQcmVkaWN0aW9uVHJhY2tl
ciYgb3RoZXIpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50cyA9IG90aGVyLm1fYXJndW1lbnRz
OworICAgICAgICBtX3ZhcmlhYmxlcyA9IG90aGVyLm1fdmFyaWFibGVzOworICAgIH0KKyAgICAK
KyAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50
cy5zaXplKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZWYXJpYWJsZXMoKSBjb25zdCB7IHJldHVy
biBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBhcmd1bWVudEluZGV4
Rm9yT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZCArIG1fYXJndW1l
bnRzLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgfQorCisgICAg
Ym9vbCBwcmVkaWN0QXJndW1lbnQodW5zaWduZWQgYXJndW1lbnQsIFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCisgICAgeworICAgICAgICByZXR1cm4g
bWVyZ2VQcmVkaWN0aW9uKG1fYXJndW1lbnRzW2FyZ3VtZW50XS5tX3ZhbHVlLCBtYWtlUHJlZGlj
dGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBwcmVkaWN0
KGludCBvcGVyYW5kLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ug
c291cmNlKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQor
ICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RBcmd1bWVudChhcmd1bWVudEluZGV4Rm9yT3BlcmFu
ZChvcGVyYW5kKSwgcHJlZGljdGlvbiwgc291cmNlKTsKKyAgICAgICAgaWYgKCh1bnNpZ25lZClv
cGVyYW5kID49IG1fdmFyaWFibGVzLnNpemUoKSkgeworICAgICAgICAgICAgQVNTRVJUKG9wZXJh
bmQgPj0gMCk7CisgICAgICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUob3BlcmFuZCArIDEpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdmFy
aWFibGVzW29wZXJhbmRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJj
ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIHByZWRpY3RHbG9iYWxWYXIodW5zaWduZWQgdmFy
TnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24sIFByZWRpY3Rpb25Tb3VyY2Ugc291cmNl
KQorICAgIHsKKyAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGljdGlvblNsb3Q+OjppdGVy
YXRvciBpdGVyID0gbV9nbG9iYWxWYXJzLmZpbmQodmFyTnVtYmVyICsgMSk7CisgICAgICAgIGlm
IChpdGVyID09IG1fZ2xvYmFsVmFycy5lbmQoKSkgeworICAgICAgICAgICAgUHJlZGljdGlvblNs
b3QgcHJlZGljdGlvblNsb3Q7CisgICAgICAgICAgICBib29sIHJlc3VsdCA9IG1lcmdlUHJlZGlj
dGlvbihwcmVkaWN0aW9uU2xvdC5tX3ZhbHVlLCBtYWtlUHJlZGljdGlvbihwcmVkaWN0aW9uLCBz
b3VyY2UpKTsKKyAgICAgICAgICAgIG1fZ2xvYmFsVmFycy5hZGQodmFyTnVtYmVyICsgMSwgcHJl
ZGljdGlvblNsb3QpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGl0ZXItPnNlY29uZC5tX3ZhbHVlLCBtYWtlUHJl
ZGljdGlvbihwcmVkaWN0aW9uLCBzb3VyY2UpKTsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGVk
VHlwZSBnZXRBcmd1bWVudFByZWRpY3Rpb24odW5zaWduZWQgYXJndW1lbnQpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdLm1fdmFsdWU7CisgICAgfQorCisgICAg
UHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
aWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKQorICAgICAgICAgICAgcmV0dXJuIGdldEFy
Z3VtZW50UHJlZGljdGlvbihhcmd1bWVudEluZGV4Rm9yT3BlcmFuZChvcGVyYW5kKSk7CisgICAg
ICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA8IG1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXS5tX3ZhbHVlOworICAgICAgICByZXR1cm4g
UHJlZGljdE5vbmU7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgZ2V0R2xvYmFsVmFy
UHJlZGljdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIpCisgICAgeworICAgICAgICBIYXNoTWFwPHVu
c2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dsb2JhbFZhcnMuZmlu
ZCh2YXJOdW1iZXIgKyAxKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9nbG9iYWxWYXJzLmVuZCgp
KQorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgICAgICByZXR1cm4gaXRlci0+
c2Vjb25kLm1fdmFsdWU7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8UHJlZGlj
dGlvblNsb3QsIDE2PiBtX2FyZ3VtZW50czsKKyAgICBWZWN0b3I8UHJlZGljdGlvblNsb3QsIDE2
PiBtX3ZhcmlhYmxlczsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD4gbV9n
bG9iYWxWYXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQcmVkaWN0
aW9uVHJhY2tlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDk5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NTgsNiArNjU4LDEzIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRPcGNvZGUoT3Bjb2QKICAgICBtX2xhc3RPcGNvZGVJRCA9IG9wY29kZUlEOwogfQog
Cit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9vcEhpbnQoKQoreworI2lmIEVOQUJMRShU
SUVSRURfQ09NUElMQVRJT04pCisgICAgZW1pdE9wY29kZShvcF9sb29wX2hpbnQpOworI2VuZGlm
Cit9CisKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJldHJpZXZlTGFzdEJpbmFyeU9wKGludCYg
ZHN0SW5kZXgsIGludCYgc3JjMUluZGV4LCBpbnQmIHNyYzJJbmRleCkKIHsKICAgICBBU1NFUlQo
aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpID49IDQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
OTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0NSw2ICszNDUsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBlbWl0VG9QcmltaXRpdmUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8TGFiZWw+IGVtaXRMYWJlbChMYWJlbCop
OworICAgICAgICB2b2lkIGVtaXRMb29wSGludCgpOwogICAgICAgICBQYXNzUmVmUHRyPExhYmVs
PiBlbWl0SnVtcChMYWJlbCogdGFyZ2V0KTsKICAgICAgICAgUGFzc1JlZlB0cjxMYWJlbD4gZW1p
dEp1bXBJZlRydWUoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwqIHRhcmdldCk7CiAgICAgICAgIFBh
c3NSZWZQdHI8TGFiZWw+IGVtaXRKdW1wSWZGYWxzZShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCog
dGFyZ2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDk0OTk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDY5LDcgKzE0NjksNyBAQCBSZWdpc3RlcklEKiBEb1doaWxlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
CiAKICAgICBSZWZQdHI8TGFiZWw+IHRvcE9mTG9vcCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwog
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwodG9wT2ZMb29wLmdldCgpKTsKLQorICAgIGdlbmVyYXRv
ci5lbWl0TG9vcEhpbnQoKTsKICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0
ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCkpOwogICAgCiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsK
QEAgLTE0OTcsNiArMTQ5Nyw3IEBAIFJlZ2lzdGVySUQqIFdoaWxlTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGUKIAogICAgIFJlZlB0cjxMYWJlbD4gdG9wT2ZMb29wID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0b3BPZkxvb3AuZ2V0KCkpOworICAgIGdlbmVy
YXRvci5lbWl0TG9vcEhpbnQoKTsKICAgICAKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBt
X3N0YXRlbWVudCk7CiAKQEAgLTE1MzIsNiArMTUzMyw3IEBAIFJlZ2lzdGVySUQqIEZvck5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY28KIAogICAgIFJlZlB0cjxMYWJlbD4gdG9wT2ZMb29wID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0b3BPZkxvb3AuZ2V0
KCkpOworICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKIAogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CiAKQEAg
LTE1NzksNiArMTU4MSw3IEBAIFJlZ2lzdGVySUQqIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5
dGUKIAogICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgIGdlbmVyYXRv
ci5lbWl0TG9vcEhpbnQoKTsKIAogICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZTsKICAgICBi
b29sIG9wdGltaXplZEZvcmluQWNjZXNzID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ5OTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTk0LDYgKzU5NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKIAogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fZ2xvYmFsRGF0
YS0+aW50ZXJwcmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gbV9j
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgdW5zaWduZWQgYmxvY2tCZWdp
biA9IG1fY3VycmVudEluZGV4OwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIC8vIERvbid0
IGV4dGVuZCBvdmVyIGp1bXAgZGVzdGluYXRpb25zLgogICAgICAgICBpZiAobV9jdXJyZW50SW5k
ZXggPT0gbGltaXQpIHsKQEAgLTEyMTEsNiArMTIxMiwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3Jlc29s
dmVfYmFzZSk7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2xvb3Bf
aGludDogeworICAgICAgICAgICAgLy8gQmFzZWxpbmUtPkRGRyBPU1IganVtcHMgYmV0d2VlbiBs
b29wIGhpbnRzLiBUaGUgREZHIGFzc3VtZXMgdGhhdCBCYXNlbGluZS0+REZHCisgICAgICAgICAg
ICAvLyBPU1IgY2FuIG9ubHkgaGFwcGVuIGF0IGJhc2ljIGJsb2NrIGJvdW5kYXJpZXMuIEFzc2Vy
dCB0aGF0IHRoZXNlIHR3byBzdGF0ZW1lbnRzCisgICAgICAgICAgICAvLyBhcmUgY29tcGF0aWJs
ZS4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYmxvY2tCZWdpbiwgbV9jdXJyZW50SW5kZXgg
PT0gYmxvY2tCZWdpbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5pc09TUlRhcmdldCA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2xvb3BfaGludCk7CisgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgLy8gUGFyc2UgZmFpbGVkIQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAs
NyBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wCiAgICAgY2FzZSBv
cF9qbmxlc3NlcToKICAgICBjYXNlIG9wX2puZ3JlYXRlcjoKICAgICBjYXNlIG9wX2puZ3JlYXRl
cmVxOgorICAgIGNhc2Ugb3BfbG9vcF9oaW50OgogICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzOgog
ICAgIGNhc2Ugb3BfbG9vcF9pZl9sZXNzZXE6CiAgICAgY2FzZSBvcF9sb29wX2lmX2dyZWF0ZXI6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiA5
NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsNiArNDcsMTcgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9k
ZSBjb21waWxlTQogICAgIAogICAgIHByb3BhZ2F0ZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9j
ayk7CiAgICAgCisjaWYgRU5BQkxFKERZTkFNSUNfT1BUSU1JWkFUSU9OKQorICAgIC8vIFNhdmUg
dGhlIHByZWRpY3Rpb25zIHdlJ3ZlIG1hZGUsIHNvIHRoYXQgT1NSIGVudHJ5IGNhbiB2ZXJpZnkg
dGhlbS4gUHJlZGljdGlvbnMKKyAgICAvLyBhcmUgc2F2ZWQgaW4gdGhlIENvZGVCbG9jayBmcm9t
IHdoaWNoIHdlIHdpbGwgYmUgZG9pbmcgT1NSIGVudHJ5LCBzaW5jZSB0aGUKKyAgICAvLyBDb2Rl
QmxvY2sgdG8gd2hpY2ggd2UgYXJlIE9TUmluZyBtYXkgYmUgcmVwbGFjZWQgYXQgYW55IHRpbWUu
CisgICAgT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBwcmVkaWN0aW9ucyA9IGFkb3B0UHRyKG5l
dyBQcmVkaWN0aW9uVHJhY2tlcigpKTsKKyAgICAqcHJlZGljdGlvbnMgPSBkZmcucHJlZGljdGlv
bnMoKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpOworICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+c2V0UHJlZGljdGlvbnMocHJl
ZGljdGlvbnMucmVsZWFzZSgpKTsKKyNlbmRpZgorICAgIAogICAgIEpJVENvbXBpbGVyIGRhdGFG
bG93SklUKGdsb2JhbERhdGEsIGRmZywgY29kZUJsb2NrKTsKICAgICBpZiAoY29tcGlsZU1vZGUg
PT0gQ29tcGlsZUZ1bmN0aW9uKSB7CiAgICAgICAgIEFTU0VSVChqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9u
IDk0OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBu
b2RlSW5kZXgsIENvCiB2b2lkIEdyYXBoOjpkdW1wKENvZGVCbG9jayogY29kZUJsb2NrKQogewog
ICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKLSAgICAg
ICAgcHJpbnRmKCJCbG9jayAjJXU6XG4iLCAoaW50KWIpOworICAgICAgICBwcmludGYoIkJsb2Nr
ICMldSAoYmMjJXUpOiAgJXNcbiIsIChpbnQpYiwgbV9ibG9ja3NbYl0tPmJ5dGVjb2RlQmVnaW4s
IG1fYmxvY2tzW2JdLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG1fYmxvY2tzW2JdLT5iZWdpbjsgaSA8IG1fYmxvY2tzW2JdLT5l
bmQ7ICsraSkKICAgICAgICAgICAgIGR1bXAoaSwgY29kZUJsb2NrKTsKICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgot
I2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25UcmFja2VyLmgiCisjaW5jbHVkZSAiUHJlZGljdGlvblRy
YWNrZXIuaCIKICNpbmNsdWRlICJSZWdpc3RlckZpbGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTY0LDYgKzY0LDcgQEAgc3RydWN0IEJh
c2ljQmxvY2sgewogICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKICAgICAg
ICAgLCBiZWdpbihiZWdpbikKICAgICAgICAgLCBlbmQoTm9Ob2RlKQorICAgICAgICAsIGlzT1NS
VGFyZ2V0KGZhbHNlKQogICAgICAgICAsIG1fYXJndW1lbnRzKG51bUFyZ3VtZW50cykKICAgICAg
ICAgLCBtX2xvY2FscyhudW1Mb2NhbHMpCiAgICAgewpAQCAtNzcsNiArNzgsNyBAQCBzdHJ1Y3Qg
QmFzaWNCbG9jayB7CiAgICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbjsKICAgICBOb2RlSW5kZXgg
YmVnaW47CiAgICAgTm9kZUluZGV4IGVuZDsKKyAgICBib29sIGlzT1NSVGFyZ2V0OwogCiAgICAg
UHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwogICAgIFZlY3RvciA8VmFyaWFibGVSZWNv
cmQsIDg+IG1fYXJndW1lbnRzOwpAQCAtMTQxLDcgKzE0MywyMiBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgYm9vbCBwcmVkaWN0KE5vZGUmIG5vZGUsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiwgUHJl
ZGljdGlvblNvdXJjZSBzb3VyY2UpCiAgICAgewotICAgICAgICByZXR1cm4gbV9wcmVkaWN0aW9u
cy5wcmVkaWN0KG5vZGUsIHByZWRpY3Rpb24sIHNvdXJjZSk7CisgICAgICAgIHN3aXRjaCAobm9k
ZS5vcCkgeworICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgcmV0dXJuIHByZWRp
Y3Qobm9kZS5sb2NhbCgpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgorICAgICAgICAgICAgcmV0dXJuIHByZWRpY3RH
bG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbiwgc291cmNlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgIGNhc2UgR2V0TWV0aG9k
OgorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNh
c2UgQ29uc3RydWN0OgorICAgICAgICAgICAgcmV0dXJuIG5vZGUucHJlZGljdChwcmVkaWN0aW9u
LCBzb3VyY2UpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgUHJlZGljdGVkVHlwZSBnZXRQcmVkaWN0aW9uKGludCBv
cGVyYW5kKQpAQCAtMTY0LDcgKzE4MSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChub2RlUHRy
LT5vcCA9PSBWYWx1ZVRvSW50MzIpCiAgICAgICAgICAgICBub2RlUHRyID0gJigqdGhpcylbbm9k
ZVB0ci0+Y2hpbGQxKCldOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fcHJlZGljdGlvbnMu
Z2V0UHJlZGljdGlvbigqbm9kZVB0cik7CisgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+b3ApIHsK
KyAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9u
KG5vZGVQdHItPmxvY2FsKCkpOworICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAg
ICAgIHJldHVybiBnZXRHbG9iYWxWYXJQcmVkaWN0aW9uKG5vZGVQdHItPnZhck51bWJlcigpKTsK
KyAgICAgICAgY2FzZSBHZXRCeUlkOgorICAgICAgICBjYXNlIEdldE1ldGhvZDoKKyAgICAgICAg
Y2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIENvbnN0cnVj
dDoKKyAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT5nZXRQcmVkaWN0aW9uKCk7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgICAgIH0KICAg
ICB9CiAgICAgCiAgICAgLy8gSGVscGVyIG1ldGhvZHMgdG8gY2hlY2sgbm9kZXMgZm9yIGNvbnN0
YW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODcsMTcgKzM4Nyw0OCBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgLy8gMTEpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRp
b24gaW50byByZWdUMC4KKyAgICAvLyAxMSkgQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBj
b3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKKyAgICAvLyAgICAgdGhh
dCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNv
IHRoZSBleGVjdXRlCisgICAgLy8gICAgIGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVz
IHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxsIGZyYW1lcworICAgIC8vICAgICB0aGF0
IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIg
Y2FsbCBmcmFtZSdzCisgICAgLy8gICAgIE9TUiBleGl0LiBXZSB3YW50IHRvIGVuc3VyZSB0aGF0
IHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZToKKyAgICAvLworICAgIC8vICAgICAoYSkgQ29kZSB0aGUg
cGVyZm9ybXMgYW4gT1NSIGV4aXQgZ2V0cyBhIGNoYW5jZSB0byByZWVudGVyIG9wdGltaXplZAor
ICAgIC8vICAgICAgICAgY29kZSBldmVudHVhbGx5LCBzaW5jZSBvcHRpbWl6ZWQgY29kZSBpcyBm
YXN0ZXIuIEJ1dCB3ZSBkb24ndAorICAgIC8vICAgICAgICAgd2FudCB0byBkbyBzdWNoIHJlZW50
ZXJ5IHRvbyBhZ2dyZXNzaXZlbHkgKHNlZSAoYykgYmVsb3cpLgorICAgIC8vCisgICAgLy8gICAg
IChiKSBJZiB0aGVyZSBpcyBjb2RlIG9uIHRoZSBjYWxsIHN0YWNrIHRoYXQgaXMgc3RpbGwgcnVu
bmluZyB0aGUgb2xkCisgICAgLy8gICAgICAgICBKSVQncyBjb2RlIGFuZCBoYXMgbmV2ZXIgT1NS
J2QsIHRoZW4gaXQgc2hvdWxkIGdldCBhIGNoYW5jZSB0bworICAgIC8vICAgICAgICAgcGVyZm9y
bSBPU1IgZW50cnkgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGV4aXRlZC4KKyAgICAvLwor
ICAgIC8vICAgICAoYykgQ29kZSB0aGUgcGVyZm9ybXMgYW4gT1NSIGV4aXQgc2hvdWxkIG5vdCBp
bW1lZGlhdGVseSByZXRyeSBPU1IKKyAgICAvLyAgICAgICAgIGVudHJ5LCBzaW5jZSBib3RoIGZv
cm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKKyAgICAvLyAgICAgICAgIHBh
cnRpY3VsYXJseSBleHBlbnNpdmUuCisgICAgLy8KKyAgICAvLyAgICAgVG8gZW5zdXJlIChjKSwg
d2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCisgICAgLy8gICAgIGNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtlIGl0IHdvdWxk
IGVuZGFuZ2VyCisgICAgLy8gICAgIChhKSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2ZXJ5IE9TUiBl
eGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1bml0eSBmb3IKKyAgICAvLyAgICAgZXZlcnkgY2Fs
bCBmcmFtZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4gRXNzZW50aWFsbHksIGlmIE9TUiBleGl0IGhh
cHBlbnMKKyAgICAvLyAgICAgZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcgbG9v
cHMsIHRoZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgorICAgIC8vICAgICBiZWNvbWUgbm9uLW5l
Z2F0aXZlIGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQor
ICAgIC8vICAgICB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xk
IEpJVCwgd2hpY2ggZG9lcyBhIHByZXR0eQorICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmlu
ZyAoYSkgYW5kIChiKS4gVGhpcyBoZXVyaXN0aWMgbWF5IG5lZWQgdG8gYmUKKyAgICAvLyAgICAg
cmV0aG91Z2h0IGluIHRoZSBmdXR1cmUsIHBhcnRpY3VsYXJseSBpZiB3ZSBzdXBwb3J0IHJlb3B0
aW1pemluZyBjb2RlCisgICAgLy8gICAgIHdpdGggbmV3IHZhbHVlIHByb2ZpbGVzIGdhdGhlcmVk
IGZyb20gY29kZSB0aGF0IGRpZCBPU1IgZXhpdC4KKyAgICAKKyAgICBzdG9yZTMyKEltbTMyKGNv
ZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwKCkpLCBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+YWRkcmVzc09mRXhlY3V0ZUNvdW50
ZXIoKSk7CisgICAgCisgICAgLy8gMTIpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRl
Y29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KICAgICAKICAgICBpZiAoZXhpdC5tX2xhc3RTZXRP
cGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQ
UkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAKLSAgICAvLyAxMikgRml4IGNhbGwg
ZnJhbWUuCisgICAgLy8gMTMpIEZpeCBjYWxsIGZyYW1lLgogICAgIAogICAgIEFTU0VSVChjb2Rl
QmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5l
SklUKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2
ZSgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVyRmlsZTo6Q29kZUJsb2Nr
KSk7CiAgICAgCi0gICAgLy8gMTMpIEp1bXAgaW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGlu
ZSBKSVQgY29kZS4KKyAgICAvLyAxNCkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2Vs
aW5lIEpJVCBjb2RlLgogICAgIAogICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGlu
ZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJl
Z2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2J5dGVjb2RlSW5kZXgpOwogICAg
IApAQCAtMTE0MSw2ICsxMTcyLDggQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua1NwZWN1bGF0aW9u
Q2hlY2tzKAogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRW50cnkoKQogeworICAgIG1fc3Rh
cnRPZkNvZGUgPSBsYWJlbCgpOworICAgIAogICAgIC8vIFRoaXMgY29kZSBjdXJyZW50bHkgbWF0
Y2hlcyB0aGUgb2xkIEpJVC4gSW4gdGhlIGZ1bmN0aW9uIGhlYWRlciB3ZSBuZWVkIHRvCiAgICAg
Ly8gcG9wIHRoZSByZXR1cm4gYWRkcmVzcyAoc2luY2Ugd2UgZG8gbm90IGFsbG93IGFueSByZWN1
cnNpb24gb24gdGhlIG1hY2hpbmUKICAgICAvLyBzdGFjayksIGFuZCBwZXJmb3JtIGEgZmFzdCBy
ZWdpc3RlciBmaWxlIGNoZWNrLgpAQCAtMTE3OSw2ICsxMjEyLDEwIEBAIHZvaWQgSklUQ29tcGls
ZXI6OmNvbXBpbGVCb2R5KCkKICAgICAvLyB0byBhbGxvdyBpdCB0byBjaGVjayB3aGljaCBub2Rl
cyBpbiB0aGUgZ3JhcGggbWF5IGJhaWwgb3V0LCBhbmQgbWF5IG5lZWQgdG8gcmVlbnRlciB0aGUK
ICAgICAvLyBub24tc3BlY3VsYXRpdmUgcGF0aC4KICAgICBpZiAoY29tcGlsZWRTcGVjdWxhdGl2
ZSkgeworI2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQorICAgICAgICBtX2NvZGVCbG9jay0+c2V0
SklUQ29kZU1hcChtX2ppdENvZGVNYXBFbmNvZGVyLmZpbmlzaCgpKTsKKyNlbmRpZgorICAgICAg
ICAKICNpZiBFTkFCTEUoREZHX09TUl9FWElUKQogICAgICAgICBsaW5rT1NSRXhpdHMoc3BlY3Vs
YXRpdmUpOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmgJKHJldmlzaW9uIDk0OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYsNiArMzE2LDExIEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIG1fanNDYWxscy5hcHBlbmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxs
LCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBjb2RlT3JpZ2luKSk7CiAgICAgfQor
ICAgIAorICAgIHZvaWQgbm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaykKKyAg
ICB7CisgICAgICAgIG1faml0Q29kZU1hcEVuY29kZXIuYXBwZW5kKGJhc2ljQmxvY2suYnl0ZWNv
ZGVCZWdpbiwgZGlmZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworICAg
IH0KIAogcHJpdmF0ZToKICAgICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiB0byBjb21waWxl
LgpAQCAtMzQ5LDYgKzM1NCwxMCBAQCBwcml2YXRlOgogICAgIC8vIENvdW50IG9mIHRoZSBudW1i
ZXIgb2YgQ2FsbFJlY29yZHMgd2l0aCBleGNlcHRpb24gaGFuZGxlcnMuCiAgICAgVmVjdG9yPENh
bGxSZWNvcmQ+IG1fY2FsbHM7CiAgICAgdW5zaWduZWQgbV9leGNlcHRpb25DaGVja0NvdW50Owor
ICAgIAorICAgIC8vIEpJVCBjb2RlIG1hcCBmb3IgT1NSIGVudHJ5cG9pbnRzLgorICAgIExhYmVs
IG1fc3RhcnRPZkNvZGU7CisgICAgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXIgbV9qaXRDb2Rl
TWFwRW5jb2RlcjsKIAogICAgIHN0cnVjdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7CiAgICAgICAg
IFByb3BlcnR5QWNjZXNzUmVjb3JkKENhbGwgZnVuY3Rpb25DYWxsLCBpbnQxNl90IGRlbHRhQ2hl
Y2tJbW1Ub0NhbGwsIGludDE2X3QgZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjaywgaW50MTZfdCBkZWx0
YUNhbGxUb0xvYWRPclN0b3JlLCBpbnQxNl90IGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGludDE2X3Qg
ZGVsdGFDYWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHZhbHVlR1BSLCBpbnQ4X3Qg
c2NyYXRjaEdQUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lv
biA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw2ICs1NSw4IEBACiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxF
IDAKIC8vIERpc2FibGUgdGhlIFNwZWN1bGF0aXZlSklUIHdpdGhvdXQgaGF2aW5nIHRvIHRvdWNo
IFBsYXRmb3JtLmghCiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxFX1NQRUNVTEFUSVZF
IDAKKy8vIEVuYWJsZSBPU1IgZW50cnkgZnJvbSBiYXNlbGluZSBKSVQuCisjZGVmaW5lIEVOQUJM
RV9ERkdfT1NSX0VOVFJZIEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04KIC8vIERpc2FibGUgdGhl
IG5vbi1zcGVjdWxhdGl2ZSBKSVQgYW5kIHVzZSBPU1IgaW5zdGVhZC4KICNkZWZpbmUgRU5BQkxF
X0RGR19PU1JfRVhJVCBFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OCiAvLyBHZW5lcmF0ZSBzdGF0
cyBvbiBob3cgc3VjY2Vzc2Z1bCB3ZSB3ZXJlIGluIG1ha2luZyB1c2Ugb2YgdGhlIERGRyBqaXQs
IGFuZCByZW1haW5pbmcgb24gdGhlIGhvdCBwYXRoLgpAQCAtNjUsNiArNjcsNyBAQAogCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlByZWRp
Y3RlZFR5cGUuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKQEAgLTIyNCwxNjIgKzIyNyw2IEBAIHN0cnVjdCBPcEluZm8gewogICAgIHVuc2ln
bmVkIG1fdmFsdWU7CiB9OwogCi10eXBlZGVmIHVpbnQ4X3QgUHJlZGljdGVkVHlwZTsKLXN0YXRp
YyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3ROb25lICAgPSAwOwotc3RhdGljIGNvbnN0IFBy
ZWRpY3RlZFR5cGUgUHJlZGljdENlbGwgICA9IDB4MDE7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVk
VHlwZSBQcmVkaWN0QXJyYXkgID0gMHgwMzsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFBy
ZWRpY3RJbnQzMiAgPSAweDA0Owotc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJlZGljdERv
dWJsZSA9IDB4MDg7Ci1zdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0TnVtYmVyID0g
MHgwYzsKLXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RCb29sZWFuID0gMHgxMDsK
LXN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RUb3AgICAgPSAweDFmOwotc3RhdGlj
IGNvbnN0IFByZWRpY3RlZFR5cGUgU3Ryb25nUHJlZGljdGlvblRhZyA9IDB4ODA7Ci1zdGF0aWMg
Y29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0aW9uVGFnTWFzayAgICA9IDB4ODA7Ci0KLWVudW0g
UHJlZGljdGlvblNvdXJjZSB7IFdlYWtQcmVkaWN0aW9uLCBTdHJvbmdQcmVkaWN0aW9uIH07Ci0K
LWlubGluZSBib29sIGlzQ2VsbFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gKHZhbHVlICYgUHJlZGljdENlbGwpID09IFByZWRpY3RDZWxsICYmICEodmFsdWUg
JiB+KFByZWRpY3RBcnJheSB8IFByZWRpY3Rpb25UYWdNYXNrKSk7Ci19Ci0KLWlubGluZSBib29s
IGlzQXJyYXlQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuICh2
YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0gUHJlZGljdEFycmF5OwotfQotCi1pbmxpbmUg
Ym9vbCBpc0ludDMyUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQotewotICAgIHJldHVy
biAodmFsdWUgJiB+UHJlZGljdGlvblRhZ01hc2spID09IFByZWRpY3RJbnQzMjsKLX0KLQotaW5s
aW5lIGJvb2wgaXNEb3VibGVQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCi17Ci0gICAg
cmV0dXJuICh2YWx1ZSAmIH5QcmVkaWN0aW9uVGFnTWFzaykgPT0gUHJlZGljdERvdWJsZTsKLX0K
LQotaW5saW5lIGJvb2wgaXNOdW1iZXJQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCi17
Ci0gICAgcmV0dXJuICEhKHZhbHVlICYgUHJlZGljdE51bWJlcikgJiYgISh2YWx1ZSAmIH4oUHJl
ZGljdE51bWJlciB8IFByZWRpY3Rpb25UYWdNYXNrKSk7Ci19Ci0KLWlubGluZSBib29sIGlzQm9v
bGVhblByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gKHZhbHVl
ICYgflByZWRpY3Rpb25UYWdNYXNrKSA9PSBQcmVkaWN0Qm9vbGVhbjsKLX0KLQotaW5saW5lIGJv
b2wgaXNTdHJvbmdQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCi17Ci0gICAgQVNTRVJU
KHZhbHVlICE9IChQcmVkaWN0Tm9uZSB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcpKTsKLSAgICByZXR1
cm4gISEodmFsdWUgJiBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKLX0KLQotI2lmbmRlZiBOREVCVUcK
LWlubGluZSBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkVHlwZSB2YWx1
ZSkKLXsKLSAgICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKHZhbHVlKSkgewotICAgICAgICBzd2l0
Y2ggKHZhbHVlICYgflByZWRpY3Rpb25UYWdNYXNrKSB7Ci0gICAgICAgIGNhc2UgUHJlZGljdE5v
bmU6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWJvdHRvbSI7Ci0gICAgICAgIGNhc2Ug
UHJlZGljdENlbGw6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLWNlbGwiOwotICAgICAg
ICBjYXNlIFByZWRpY3RBcnJheToKLSAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctYXJyYXki
OwotICAgICAgICBjYXNlIFByZWRpY3RJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiAicC1zdHJv
bmctaW50MzIiOwotICAgICAgICBjYXNlIFByZWRpY3REb3VibGU6Ci0gICAgICAgICAgICByZXR1
cm4gInAtc3Ryb25nLWRvdWJsZSI7Ci0gICAgICAgIGNhc2UgUHJlZGljdE51bWJlcjoKLSAgICAg
ICAgICAgIHJldHVybiAicC1zdHJvbmctbnVtYmVyIjsKLSAgICAgICAgY2FzZSBQcmVkaWN0Qm9v
bGVhbjoKLSAgICAgICAgICAgIHJldHVybiAicC1zdHJvbmctYm9vbGVhbiI7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gInAtc3Ryb25nLXRvcCI7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgc3dpdGNoICh2YWx1ZSkgewotICAgIGNhc2UgUHJlZGljdE5vbmU6Ci0gICAgICAg
IHJldHVybiAicC13ZWFrLWJvdHRvbSI7Ci0gICAgY2FzZSBQcmVkaWN0Q2VsbDoKLSAgICAgICAg
cmV0dXJuICJwLXdlYWstY2VsbCI7Ci0gICAgY2FzZSBQcmVkaWN0QXJyYXk6Ci0gICAgICAgIHJl
dHVybiAicC13ZWFrLWFycmF5IjsKLSAgICBjYXNlIFByZWRpY3RJbnQzMjoKLSAgICAgICAgcmV0
dXJuICJwLXdlYWstaW50MzIiOwotICAgIGNhc2UgUHJlZGljdERvdWJsZToKLSAgICAgICAgcmV0
dXJuICJwLXdlYWstZG91YmxlIjsKLSAgICBjYXNlIFByZWRpY3ROdW1iZXI6Ci0gICAgICAgIHJl
dHVybiAicC13ZWFrLW51bWJlciI7Ci0gICAgY2FzZSBQcmVkaWN0Qm9vbGVhbjoKLSAgICAgICAg
cmV0dXJuICJwLXdlYWstYm9vbGVhbiI7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuICJw
LXdlYWstdG9wIjsKLSAgICB9Ci19Ci0jZW5kaWYKLQotaW5saW5lIFByZWRpY3RlZFR5cGUgbWVy
Z2VQcmVkaWN0aW9ucyhQcmVkaWN0ZWRUeXBlIGxlZnQsIFByZWRpY3RlZFR5cGUgcmlnaHQpCi17
Ci0gICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihsZWZ0KSA9PSBpc1N0cm9uZ1ByZWRpY3Rpb24o
cmlnaHQpKQotICAgICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0OwotICAgIGlmIChpc1N0cm9uZ1By
ZWRpY3Rpb24obGVmdCkpIHsKLSAgICAgICAgQVNTRVJUKCFpc1N0cm9uZ1ByZWRpY3Rpb24ocmln
aHQpKTsKLSAgICAgICAgcmV0dXJuIGxlZnQ7Ci0gICAgfQotICAgIEFTU0VSVCghaXNTdHJvbmdQ
cmVkaWN0aW9uKGxlZnQpKTsKLSAgICBBU1NFUlQoaXNTdHJvbmdQcmVkaWN0aW9uKHJpZ2h0KSk7
Ci0gICAgcmV0dXJuIHJpZ2h0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIGJv
b2wgbWVyZ2VQcmVkaWN0aW9uKFQmIGxlZnQsIFByZWRpY3RlZFR5cGUgcmlnaHQpCi17Ci0gICAg
UHJlZGljdGVkVHlwZSBuZXdQcmVkaWN0aW9uID0gc3RhdGljX2Nhc3Q8VD4obWVyZ2VQcmVkaWN0
aW9ucyhzdGF0aWNfY2FzdDxQcmVkaWN0ZWRUeXBlPihsZWZ0KSwgcmlnaHQpKTsKLSAgICBib29s
IHJlc3VsdCA9IG5ld1ByZWRpY3Rpb24gIT0gc3RhdGljX2Nhc3Q8UHJlZGljdGVkVHlwZT4obGVm
dCk7Ci0gICAgbGVmdCA9IG5ld1ByZWRpY3Rpb247Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
aW5saW5lIFByZWRpY3RlZFR5cGUgbWFrZVByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSB0eXBlLCBQ
cmVkaWN0aW9uU291cmNlIHNvdXJjZSkKLXsKLSAgICBBU1NFUlQoISh0eXBlICYgU3Ryb25nUHJl
ZGljdGlvblRhZykpOwotICAgIEFTU0VSVChzb3VyY2UgPT0gU3Ryb25nUHJlZGljdGlvbiB8fCBz
b3VyY2UgPT0gV2Vha1ByZWRpY3Rpb24pOwotICAgIGlmICh0eXBlID09IFByZWRpY3ROb25lKQot
ICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAgcmV0dXJuIHR5cGUgfCAoc291cmNlID09
IFN0cm9uZ1ByZWRpY3Rpb24gPyBTdHJvbmdQcmVkaWN0aW9uVGFnIDogMCk7Ci19Ci0KLSNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCi1pbmxpbmUgUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIGNvbnN0IFZhbHVlUHJvZmlsZSYgcHJvZmlsZSkK
LXsKLSAgICBWYWx1ZVByb2ZpbGU6OlN0YXRpc3RpY3Mgc3RhdGlzdGljczsKLSAgICBwcm9maWxl
LmNvbXB1dGVTdGF0aXN0aWNzKGdsb2JhbERhdGEsIHN0YXRpc3RpY3MpOwotICAgIAotICAgIGlm
ICghc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAgICByZXR1cm4gUHJlZGljdE5vbmU7Ci0gICAg
Ci0gICAgaWYgKHN0YXRpc3RpY3MuaW50MzJzID09IHN0YXRpc3RpY3Muc2FtcGxlcykKLSAgICAg
ICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0SW50MzI7Ci0gICAgCi0gICAg
aWYgKHN0YXRpc3RpY3MuZG91YmxlcyA9PSBzdGF0aXN0aWNzLnNhbXBsZXMpCi0gICAgICAgIHJl
dHVybiBTdHJvbmdQcmVkaWN0aW9uVGFnIHwgUHJlZGljdERvdWJsZTsKLSAgICAKLSAgICBpZiAo
c3RhdGlzdGljcy5pbnQzMnMgKyBzdGF0aXN0aWNzLmRvdWJsZXMgPT0gc3RhdGlzdGljcy5zYW1w
bGVzKQotICAgICAgICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3ROdW1iZXI7
Ci0gICAgCi0gICAgaWYgKHN0YXRpc3RpY3MuYXJyYXlzID09IHN0YXRpc3RpY3Muc2FtcGxlcykK
LSAgICAgICAgcmV0dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0QXJyYXk7Ci0gICAg
Ci0gICAgaWYgKHN0YXRpc3RpY3MuY2VsbHMgPT0gc3RhdGlzdGljcy5zYW1wbGVzKQotICAgICAg
ICByZXR1cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RDZWxsOwotICAgIAotICAgIGlm
IChzdGF0aXN0aWNzLmJvb2xlYW5zID09IHN0YXRpc3RpY3Muc2FtcGxlcykKLSAgICAgICAgcmV0
dXJuIFN0cm9uZ1ByZWRpY3Rpb25UYWcgfCBQcmVkaWN0Qm9vbGVhbjsKLSAgICAKLSAgICByZXR1
cm4gU3Ryb25nUHJlZGljdGlvblRhZyB8IFByZWRpY3RUb3A7Ci19Ci0jZW5kaWYKLQogLy8gPT09
IE5vZGUgPT09CiAvLwogLy8gTm9kZSByZXByZXNlbnRzIGEgc2luZ2xlIG9wZXJhdGlvbiBpbiB0
aGUgZGF0YSBmbG93IGdyYXBoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJKSVQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitpbmxpbmUgYm9vbCBwcmVkaWN0aW9uSXNWYWxpZChKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEpTVmFsdWUgdmFsdWUsIFByZWRpY3RlZFR5cGUgdHlwZSkKK3sKKyAgICAvLyB0aGlzIHRh
a2VzIGludG8gYWNjb3VudCBvbmx5IGxvY2FsIHZhcmlhYmxlIHByZWRpY3Rpb25zIHRoYXQgZ2V0
IGVuZm9yY2VkCisgICAgLy8gb24gU2V0TG9jYWwuCisgICAgCisgICAgaWYgKGlzSW50MzJQcmVk
aWN0aW9uKHR5cGUpKQorICAgICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOworICAgIAorICAg
IGlmIChpc0FycmF5UHJlZGljdGlvbih0eXBlKSkKKyAgICAgICAgcmV0dXJuIGlzSlNBcnJheShn
bG9iYWxEYXRhLCB2YWx1ZSk7CisgICAgCisgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24odHlw
ZSkpCisgICAgICAgIHJldHVybiB2YWx1ZS5pc0Jvb2xlYW4oKTsKKyAgICAKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7CisjaWYgRU5BQkxFKERG
R19PU1JfRU5UUlkpCisgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENv
ZGU6OkRGR0pJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6
OkJhc2VsaW5lSklUKTsKKworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgcHJpbnRm
KCJPU1IgaW4gJXAoJXApIGZyb20gYmMjJXVcbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLCBieXRlY29kZUluZGV4KTsKKyNlbmRpZgorICAgIAorICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICAKKyAgICAvLyBU
aGUgY29kZSBiZWxvdyBjaGVja3MgaWYgaXQgaXMgc2FmZSB0byBwZXJmb3JtIE9TUiBlbnRyeS4g
SXQgbWF5IGZpbmQKKyAgICAvLyB0aGF0IGl0IGlzIHVuc2FmZSB0byBkbyBzbywgZm9yIGFueSBu
dW1iZXIgb2YgcmVhc29ucywgd2hpY2ggYXJlIGRvY3VtZW50ZWQKKyAgICAvLyBiZWxvdy4gSWYg
dGhlIGNvZGUgZGVjaWRlcyBub3QgdG8gT1NSIHRoZW4gaXQgcmV0dXJucyAwLCBhbmQgaXQncyB0
aGUgY2FsbGVyJ3MKKyAgICAvLyByZXNwb25zaWJpbGl0eSB0byBwYXRjaCB1cCB0aGUgc3RhdGUg
aW4gc3VjaCBhIHdheSBhcyB0byBlbnN1cmUgdGhhdCBpdCdzCisgICAgLy8gYm90aCBzYWZlIGFu
ZCBlZmZpY2llbnQgdG8gY29udGludWUgZXhlY3V0aW5nIGJhc2VsaW5lIGNvZGUgZm9yIG5vdy4g
VGhpcworICAgIC8vIHNob3VsZCBhbG1vc3QgY2VydGFpbmx5IGluY2x1ZGUgY2FsbGluZyBlaXRo
ZXIgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCkKKyAgICAvLyBvciBjb2RlQmxvY2st
PmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCkuCisgICAgCisgICAgLy8gMSkgQ2hlY2sgaWYgdGhl
IERGRyBjb2RlIHNldCBhIGNvZGUgbWFwLiBJZiBpdCBkaWRuJ3QsIGl0IG1lYW5zIHRoYXQgaXQK
KyAgICAvLyAgICBjYW5ub3QgaGFuZGxlIE9TUiBlbnRyeS4gVGhpcyBjdXJyZW50bHkgb25seSBo
YXBwZW5zIGlmIHdlIGRpc2FibGUKKyAgICAvLyAgICBkeW5hbWljIHNwZWN1bGF0aW9uIHRlcm1p
bmF0aW9uIGFuZCBlbmQgdXAgd2l0aCBhIERGRyBjb2RlIGJsb2NrIHRoYXQKKyAgICAvLyAgICB3
YXMgY29tcGlsZWQgZW50aXJlbHkgd2l0aCB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVC4gVGhlIG5v
bi1zcGVjdWxhdGl2ZQorICAgIC8vICAgIEpJVCBkb2VzIG5vdCBzdXBwb3J0IE9TUiBlbnRyeSBh
bmQgcHJvYmFibHkgbmV2ZXIgd2lsbCwgc2luY2UgaXQgaXMKKyAgICAvLyAgICBraW5kIG9mIGEg
ZGVwcmVjYXRlZCBjb21waWxlciByaWdodCBub3cuCisgICAgCisjaWYgRU5BQkxFKERZTkFNSUNf
VEVSTUlOQVRFX1NQRUNVTEFUSU9OKQorICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGVNYXAo
KSk7CisjZWxzZQorICAgIGlmICghY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpIHsKKyNpZiBFTkFC
TEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1
c2Ugb2YgYSBtaXNzaW5nIEpJVCBjb2RlIG1hcC5cbiIpOworI2VuZGlmCisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIC8vIDIpIFZlcmlmeSBwcmVkaWN0aW9ucy4g
SWYgdGhlIHByZWRpY3Rpb25zIGFyZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgYWN0dWFsCisgICAg
Ly8gICAgdmFsdWVzLCB0aGVuIE9TUiBlbnRyeSBpcyBub3QgcG9zc2libGUgYXQgdGhpcyB0aW1l
LiBJdCdzIHRlbXB0aW5nIHRvCisgICAgLy8gICAgYXNzdW1lIHRoYXQgd2UgY291bGQgc29tZWhv
dyBhdm9pZCB0aGlzIGNhc2UuIFdlIGNhbiBjZXJ0YWlubHkgYXZvaWQgaXQKKyAgICAvLyAgICBm
b3IgZmlyc3QtdGltZSBsb29wIE9TUiAtIHRoYXQgaXMsIE9TUiBpbnRvIGEgQ29kZUJsb2NrIHRo
YXQgd2UgaGF2ZSBqdXN0CisgICAgLy8gICAgY29tcGlsZWQuIFRoZW4gd2UgYXJlIGFsbW9zdCBn
dWFyYW50ZWVkIHRoYXQgYWxsIG9mIHRoZSBwcmVkaWN0aW9ucyB3aWxsCisgICAgLy8gICAgY2hl
Y2sgb3V0LiBJdCB3b3VsZCBiZSBwcmV0dHkgZWFzeSB0byBtYWtlIHRoYXQgYSBoYXJkIGd1YXJh
bnRlZS4gQnV0CisgICAgLy8gICAgdGhlbiB0aGVyZSB3b3VsZCBzdGlsbCBiZSB0aGUgY2FzZSB3
aGVyZSB0d28gY2FsbCBmcmFtZXMgd2l0aCB0aGUgc2FtZQorICAgIC8vICAgIGJhc2VsaW5lIENv
ZGVCbG9jayBhcmUgb24gdGhlIHN0YWNrIGF0IHRoZSBzYW1lIHRpbWUuIFRoZSB0b3Agb25lCisg
ICAgLy8gICAgdHJpZ2dlcnMgY29tcGlsYXRpb24gYW5kIE9TUi4gSW4gdGhhdCBjYXNlLCB3ZSBt
YXkgbm8gbG9uZ2VyIGhhdmUKKyAgICAvLyAgICBhY2N1cmF0ZSB2YWx1ZSBwcm9maWxlcyBmb3Ig
dGhlIG9uZSBkZWVwZXIgaW4gdGhlIHN0YWNrLiBIZW5jZSwgd2hlbiB3ZQorICAgIC8vICAgIHBv
cCBpbnRvIHRoZSBDb2RlQmxvY2sgdGhhdCBpcyBkZWVwZXIgb24gdGhlIHN0YWNrLCB3ZSBtaWdo
dCBPU1IgYW5kCisgICAgLy8gICAgcmVhbGl6ZSB0aGF0IHRoZSBwcmVkaWN0aW9ucyBhcmUgd3Jv
bmcuIFByb2JhYmx5LCBpbiBtb3N0IGNhc2VzLCB0aGlzIGlzCisgICAgLy8gICAganVzdCBhbiBh
bm9tYWx5IGluIHRoZSBzZW5zZSB0aGF0IHRoZSBvbGRlciBDb2RlQmxvY2sgc2ltcGx5IHdlbnQg
b2ZmCisgICAgLy8gICAgaW50byBhIGxlc3MtbGlrZWx5IHBhdGguIFNvLCB0aGUgd2lzZXN0IGNv
dXJzZSBvZiBhY3Rpb24gaXMgdG8gc2ltcGx5IG5vdAorICAgIC8vICAgIE9TUiBhdCB0aGlzIHRp
bWUuCisgICAgCisgICAgUHJlZGljdGlvblRyYWNrZXIqIHByZWRpY3Rpb25zID0gYmFzZWxpbmVD
b2RlQmxvY2stPnByZWRpY3Rpb25zKCk7CisgICAgCisgICAgaWYgKHByZWRpY3Rpb25zLT5udW1i
ZXJPZkFyZ3VtZW50cygpID4gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHByZWRp
Y3Rpb25zLT5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgaWYgKCFwcmVkaWN0
aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rpb25z
LT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09T
UikKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAl
dSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4iLCBpLCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3Jp
cHRpb24oKSwgcHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRp
Y3Rpb24oaSkpKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8ga25vdyBpZiBhdCBhbiBPU1IgZW50
cnksIGEgdmFyaWFibGUgaXMgbGl2ZS4gSWYgaXQgaXNuJ3QKKyAgICAvLyB0aGVuIHdlIHNob3Vs
ZG4ndCB0cnkgdG8gdmVyaWZ5IGl0cyBwcmVkaWN0aW9uLgorICAgIAorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZWYXJpYWJsZXMoKTsgKytpKSB7Cisg
ICAgICAgIGlmICghcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJz
KClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpIHsKKyNpZiBF
TkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxl
ZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJl
Z2lzdGVycygpW2ldLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmco
cHJlZGljdGlvbnMtPmdldFByZWRpY3Rpb24oaSkpKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gMykgQ2hlY2sgdGhlIHN0YWNr
IGhlaWdodC4gVGhlIERGRyBKSVQgbWF5IHJlcXVpcmUgYSB0YWxsZXIgc3RhY2sgdGhhbiB0aGUK
KyAgICAvLyAgICBiYXNlbGluZSBKSVQsIGluIHNvbWUgY2FzZXMuIElmIHdlIGNhbid0IGdyb3cg
dGhlIHN0YWNrLCB0aGVuIGRvbid0IGRvCisgICAgLy8gICAgT1NSIHJpZ2h0IG5vdy4gVGhhdCdz
IHRoZSBvbmx5IG9wdGlvbiB3ZSBoYXZlIHVubGVzcyB3ZSB3YW50IGJhc2ljIGJsb2NrCisgICAg
Ly8gICAgYm91bmRhcmllcyB0byBzdGFydCB0aHJvd2luZyBSYW5nZUVycm9ycy4gQWx0aG91Z2gg
dGhhdCB3b3VsZCBiZSBwb3NzaWJsZSwKKyAgICAvLyAgICBpdCBzZWVtcyBzaWxseTogeW91J2Qg
YmUgZGl2ZXJ0aW5nIHRoZSBwcm9ncmFtIHRvIGVycm9yIGhhbmRsaW5nIHdoZW4gaXQKKyAgICAv
LyAgICB3b3VsZCBoYXZlIG90aGVyd2lzZSBqdXN0IGtlcHQgcnVubmluZyBhbGJlaXQgbGVzcyBx
dWlja2x5LgorICAgIAorICAgIGlmICghZ2xvYmFsRGF0YS0+aW50ZXJwcmV0ZXItPnJlZ2lzdGVy
RmlsZSgpLmdyb3coJmV4ZWMtPnJlZ2lzdGVycygpW2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdp
c3RlcnNdKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50Zigi
ICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBzdGFjayBncm93dGggZmFpbGVkLi5cbiIpOworI2VuZGlm
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQorICAgIHByaW50ZigiICAgIE9TUiBzaG91bGQgc3VjY2VlZC5cbiIpOworI2VuZGlmCisg
ICAgCisgICAgLy8gNCkgRml4IHRoZSBjYWxsIGZyYW1lLgorICAgIAorICAgIGV4ZWMtPnNldENv
ZGVCbG9jayhjb2RlQmxvY2spOworICAgIAorICAgIC8vIDUpIEZpbmQgYW5kIHJldHVybiB0aGUg
ZGVzdGluYXRpb24gbWFjaGluZSBjb2RlIGFkZHJlc3MuIFRoZSBERkcgc3RvcmVzCisgICAgLy8g
ICAgdGhlIG1hY2hpbmUgY29kZSBvZmZzZXRzIG9mIE9TUiB0YXJnZXRzIGluIGEgQ29tcGFjdEpJ
VENvZGVNYXAuCisgICAgLy8gICAgRGVjb2RpbmcgaXQgaXMgbm90IHN1cGVyIGVmZmljaWVudCwg
YnV0IHdlIGV4cGVjdCB0aGF0IE9TUiBlbnRyeQorICAgIC8vICAgIGhhcHBlbnMgc3VmZmljaWVu
dGx5IHJhcmVseSwgYW5kIHRoYXQgT1NSIGVudHJ5cG9pbnRzIGFyZSBzdWZmaWNpZW50bHkKKyAg
ICAvLyAgICBmZXcsIHRoYXQgdGhpcyB3b24ndCBodXJ0IHRocm91Z2hwdXQuIE5vdGUgdGhhdCB0
aGUgb25seSByZWFsCisgICAgLy8gICAgcmVhc29uIHdoeSB3ZSB1c2UgYSBDb21wYWN0SklUQ29k
ZU1hcCBpcyB0byBhdm9pZCBoYXZpbmcgdG8gaW50cm9kdWNlCisgICAgLy8gICAgeWV0IGFub3Ro
ZXIgZGF0YSBzdHJ1Y3R1cmUgZm9yIG1hcHBpbmcgYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFu
ZAorICAgIC8vICAgIG1hY2hpbmUgY29kZSBvZmZzZXRzLgorICAgIAorICAgIENvbXBhY3RKSVRD
b2RlTWFwOjpEZWNvZGVyIGRlY29kZXIoY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOworICAgIHVu
c2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpOworICAgIHdoaWxlIChkZWNvZGVyLm51bWJlck9mRW50cmllc1JlbWFpbmluZygpKSB7
CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRCeXRlY29kZUluZGV4OworICAgICAgICB1bnNpZ25l
ZCBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAgIGRlY29kZXIucmVhZChjdXJyZW50
Qnl0ZWNvZGVJbmRleCwgY3VycmVudE1hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAgICAgaWYgKGN1
cnJlbnRCeXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5kZXgpIHsKKyAgICAgICAgICAgIG1hY2hp
bmVDb2RlT2Zmc2V0ID0gY3VycmVudE1hY2hpbmVDb2RlT2Zmc2V0OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQVNTRVJUKG1hY2hpbmVDb2RlT2Zmc2V0
ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CisgICAgCisgICAgdm9p
ZCogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFjaGluZUNvZGVPZmZz
ZXQpOworICAgIAorI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgcHJpbnRmKCIgICAg
T1NSIHJldHVybmluZyBtYWNoaW5lIGNvZGUgYWRkcmVzcyAlcC5cbiIsIHJlc3VsdCk7CisjZW5k
aWYKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UgLy8gRU5BQkxFKERGR19PU1JfRU5U
UlkpCisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2sp
OworICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKKyAgICByZXR1cm4gMDsKKyNlbmRp
ZgorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPU1JFbnRyeV9oCisjZGVmaW5lIERGR09TUkVudHJ5
X2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEV4ZWNTdGF0ZTsKK2NsYXNzIENvZGVCbG9j
azsKKworbmFtZXNwYWNlIERGRyB7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK3ZvaWQqIHByZXBh
cmVPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
KTsKKyNlbHNlCitpbmxpbmUgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVC
bG9jayosIHVuc2lnbmVkKSB7IHJldHVybiAwOyB9CisjZW5kaWYKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gREZHT1NSRW50cnlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25UcmFja2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uVHJhY2tlci5oCShyZXZpc2lvbiA5
NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblRyYWNrZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERGR1ByZWRpY3Rpb25UcmFja2VyX2gK
LSNkZWZpbmUgREZHUHJlZGljdGlvblRyYWNrZXJfaAotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0K
LSNpbmNsdWRlICJERkdOb2RlLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
LQotLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rpbmd1aXNoIHZhcnMgJiB0ZW1wb3JhcmllcyBm
cm9tIGFyZ3VtZW50cy4KLWlubGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5k
KSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQotCi1zdHJ1Y3QgUHJlZGljdGlvblNsb3QgewotcHVi
bGljOgotICAgIFByZWRpY3Rpb25TbG90KCkKLSAgICAgICAgOiBtX3ZhbHVlKFByZWRpY3ROb25l
KQotICAgIHsKLSAgICB9Ci0gICAgUHJlZGljdGVkVHlwZSBtX3ZhbHVlOwotfTsKLQotY2xhc3Mg
UHJlZGljdGlvblRyYWNrZXIgewotcHVibGljOgotICAgIFByZWRpY3Rpb25UcmFja2VyKCkKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIFByZWRpY3Rpb25UcmFja2VyKHVuc2lnbmVkIG51bUFyZ3Vt
ZW50cywgdW5zaWduZWQgbnVtVmFyaWFibGVzKQotICAgICAgICA6IG1fYXJndW1lbnRzKG51bUFy
Z3VtZW50cykKLSAgICAgICAgLCBtX3ZhcmlhYmxlcyhudW1WYXJpYWJsZXMpCi0gICAgewotICAg
IH0KLSAgICAKLSAgICB2b2lkIGluaXRpYWxpemVTaW1pbGFyVG8oY29uc3QgUHJlZGljdGlvblRy
YWNrZXImIG90aGVyKQotICAgIHsKLSAgICAgICAgbV9hcmd1bWVudHMucmVzaXplKG90aGVyLm51
bWJlck9mQXJndW1lbnRzKCkpOwotICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUob3RoZXIubnVt
YmVyT2ZWYXJpYWJsZXMoKSk7Ci0gICAgfQotICAgIAotICAgIHNpemVfdCBudW1iZXJPZkFyZ3Vt
ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKTsgfQotICAgIHNpemVfdCBu
dW1iZXJPZlZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGVzLnNpemUoKTsgfQot
ICAgIAotICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKGludCBvcGVyYW5kKSBj
b25zdCB7IHJldHVybiBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxl
OjpDYWxsRnJhbWVIZWFkZXJTaXplOyB9Ci0KLSAgICBib29sIHByZWRpY3RBcmd1bWVudCh1bnNp
Z25lZCBhcmd1bWVudCwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNl
IHNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV9hcmd1bWVu
dHNbYXJndW1lbnRdLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkp
OwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3QoaW50IG9wZXJhbmQsIFByZWRpY3RlZFR5
cGUgcHJlZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCi0gICAgewotICAgICAgICBp
ZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4gcHJlZGlj
dEFyZ3VtZW50KGFyZ3VtZW50SW5kZXhGb3JPcGVyYW5kKG9wZXJhbmQpLCBwcmVkaWN0aW9uLCBz
b3VyY2UpOwotICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPj0gbV92YXJpYWJsZXMuc2l6
ZSgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQob3BlcmFuZCA+PSAwKTsKLSAgICAgICAgICAgIG1f
dmFyaWFibGVzLnJlc2l6ZShvcGVyYW5kICsgMSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV92YXJpYWJsZXNbb3BlcmFuZF0ubV92YWx1ZSwg
bWFrZVByZWRpY3Rpb24ocHJlZGljdGlvbiwgc291cmNlKSk7Ci0gICAgfQotICAgIAotICAgIGJv
b2wgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1iZXIsIFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbiwgUHJlZGljdGlvblNvdXJjZSBzb3VyY2UpCi0gICAgewotICAgICAgICBIYXNoTWFw
PHVuc2lnbmVkLCBQcmVkaWN0aW9uU2xvdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dsb2JhbFZhcnMu
ZmluZCh2YXJOdW1iZXIgKyAxKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9nbG9iYWxWYXJzLmVu
ZCgpKSB7Ci0gICAgICAgICAgICBQcmVkaWN0aW9uU2xvdCBwcmVkaWN0aW9uU2xvdDsKLSAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb25TbG90Lm1fdmFs
dWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJjZSkpOwotICAgICAgICAgICAgbV9n
bG9iYWxWYXJzLmFkZCh2YXJOdW1iZXIgKyAxLCBwcmVkaWN0aW9uU2xvdCk7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rp
b24oaXRlci0+c2Vjb25kLm1fdmFsdWUsIG1ha2VQcmVkaWN0aW9uKHByZWRpY3Rpb24sIHNvdXJj
ZSkpOwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3QoTm9kZSYgbm9kZSwgUHJlZGljdGVk
VHlwZSBwcmVkaWN0aW9uLCBQcmVkaWN0aW9uU291cmNlIHNvdXJjZSkKLSAgICB7Ci0gICAgICAg
IHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAg
cmV0dXJuIHByZWRpY3Qobm9kZS5sb2NhbCgpLCBwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICAgICAgcmV0
dXJuIHByZWRpY3RHbG9iYWxWYXIobm9kZS52YXJOdW1iZXIoKSwgcHJlZGljdGlvbiwgc291cmNl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEJ5SWQ6Ci0gICAgICAgIGNh
c2UgR2V0TWV0aG9kOgotICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICBjYXNlIENhbGw6
Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICAgICAgcmV0dXJuIG5vZGUucHJlZGlj
dChwcmVkaWN0aW9uLCBzb3VyY2UpOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIFByZWRpY3RlZFR5cGUgZ2V0
QXJndW1lbnRQcmVkaWN0aW9uKHVuc2lnbmVkIGFyZ3VtZW50KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XS5tX3ZhbHVlOwotICAgIH0KLQotICAgIFByZWRpY3Rl
ZFR5cGUgZ2V0UHJlZGljdGlvbihpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRBcmd1bWVudFBy
ZWRpY3Rpb24oYXJndW1lbnRJbmRleEZvck9wZXJhbmQob3BlcmFuZCkpOwotICAgICAgICBpZiAo
KHVuc2lnbmVkKW9wZXJhbmQgPCBtX3ZhcmlhYmxlcy5zaXplKCkpCi0gICAgICAgICAgICByZXR1
cm4gbV92YXJpYWJsZXNbb3BlcmFuZF0ubV92YWx1ZTsKLSAgICAgICAgcmV0dXJuIFByZWRpY3RO
b25lOwotICAgIH0KLSAgICAKLSAgICBQcmVkaWN0ZWRUeXBlIGdldEdsb2JhbFZhclByZWRpY3Rp
b24odW5zaWduZWQgdmFyTnVtYmVyKQotICAgIHsKLSAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwg
UHJlZGljdGlvblNsb3Q+OjppdGVyYXRvciBpdGVyID0gbV9nbG9iYWxWYXJzLmZpbmQodmFyTnVt
YmVyICsgMSk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fZ2xvYmFsVmFycy5lbmQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKLSAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZC5t
X3ZhbHVlOwotICAgIH0KLSAgICAKLSAgICBQcmVkaWN0ZWRUeXBlIGdldFByZWRpY3Rpb24oTm9k
ZSYgbm9kZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICBjYXNl
IEdldExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb24obm9kZS5sb2NhbCgp
KTsKLSAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0R2xv
YmFsVmFyUHJlZGljdGlvbihub2RlLnZhck51bWJlcigpKTsKLSAgICAgICAgY2FzZSBHZXRCeUlk
OgotICAgICAgICBjYXNlIEdldE1ldGhvZDoKLSAgICAgICAgY2FzZSBHZXRCeVZhbDoKLSAgICAg
ICAgY2FzZSBDYWxsOgotICAgICAgICBjYXNlIENvbnN0cnVjdDoKLSAgICAgICAgICAgIHJldHVy
biBub2RlLmdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBQcmVkaWN0Tm9uZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAg
VmVjdG9yPFByZWRpY3Rpb25TbG90LCAxNj4gbV9hcmd1bWVudHM7Ci0gICAgVmVjdG9yPFByZWRp
Y3Rpb25TbG90LCAxNj4gbV92YXJpYWJsZXM7Ci0gICAgSGFzaE1hcDx1bnNpZ25lZCwgUHJlZGlj
dGlvblNsb3Q+IG1fZ2xvYmFsVmFyczsKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
LQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5kaWYgLy8gREZHUHJlZGljdGlvblRy
YWNrZXJfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRv
ci5jcHAJKHJldmlzaW9uIDk0OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDE0ICsxMDMsMTQgQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoW25vZGVJbmRleF0uaGFzUmVzdWx0KCkp
OwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIERGRzo6bWVyZ2VQcmVkaWN0aW9uKG1fdXNlc1tu
b2RlSW5kZXhdLCBwcmVkaWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIEpTQzo6bWVyZ2VQcmVkaWN0
aW9uKG1fdXNlc1tub2RlSW5kZXhdLCBwcmVkaWN0aW9uKTsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBtZXJnZVByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKICAgICAgICAg
Ci0gICAgICAgIHJldHVybiBERkc6Om1lcmdlUHJlZGljdGlvbihtX3ByZWRpY3Rpb25zW21fY29t
cGlsZUluZGV4XSwgcHJlZGljdGlvbik7CisgICAgICAgIHJldHVybiBKU0M6Om1lcmdlUHJlZGlj
dGlvbihtX3ByZWRpY3Rpb25zW21fY29tcGlsZUluZGV4XSwgcHJlZGljdGlvbik7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgcHJvcGFnYXRlTm9kZShOb2RlJiBub2RlKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk0
OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0OTQsNiArMTQ5NCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKEJhc2ljQmxvY2smCiB7CiAgICAgQVNTRVJUKG1fY29tcGlsZU9rYXkpOwogICAg
IEFTU0VSVChtX2NvbXBpbGVJbmRleCA9PSBibG9jay5iZWdpbik7CisgICAgCisgICAgaWYgKGJs
b2NrLmlzT1NSVGFyZ2V0KQorICAgICAgICBtX2ppdC5ub3RpY2VPU1JFbnRyeShibG9jayk7Cisg
ICAgCiAgICAgbV9ibG9ja0hlYWRzW21fYmxvY2tdID0gbV9qaXQubGFiZWwoKTsKICNpZiBFTkFC
TEUoREZHX0pJVF9CUkVBS19PTl9FVkVSWV9CTE9DSykKICAgICBtX2ppdC5icmVha3BvaW50KCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0SklUQ29kZU1hcC5o
CShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ29tcGFjdEpJ
VENvZGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODcsMjIgKzg3LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkZWNv
ZGUoVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIHJlc3VsdCkgY29uc3QKKyAgICB1
bnNpZ25lZCBudW1iZXJPZkVudHJpZXMoKSBjb25zdAogICAgIHsKLSAgICAgICAgdW5zaWduZWQg
cHJldmlvdXNCeXRlY29kZUluZGV4ID0gMDsKLSAgICAgICAgdW5zaWduZWQgcHJldmlvdXNNYWNo
aW5lQ29kZU9mZnNldCA9IDA7Ci0gICAgICAgIAotICAgICAgICByZXN1bHQucmVzaXplKG1fbnVt
YmVyT2ZFbnRyaWVzKTsKLSAgICAgICAgdW5zaWduZWQgaiA9IDA7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX251bWJlck9mRW50cmllczsgKytpKSB7Ci0gICAgICAgICAgICBw
cmV2aW91c0J5dGVjb2RlSW5kZXggKz0gZGVjb2RlTnVtYmVyKGopOwotICAgICAgICAgICAgcHJl
dmlvdXNNYWNoaW5lQ29kZU9mZnNldCArPSBkZWNvZGVOdW1iZXIoaik7Ci0gICAgICAgICAgICBy
ZXN1bHRbaV0ubV9ieXRlY29kZUluZGV4ID0gcHJldmlvdXNCeXRlY29kZUluZGV4OwotICAgICAg
ICAgICAgcmVzdWx0W2ldLm1fbWFjaGluZUNvZGVPZmZzZXQgPSBwcmV2aW91c01hY2hpbmVDb2Rl
T2Zmc2V0OwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChqID09IG1fc2l6ZSk7CisgICAgICAg
IHJldHVybiBtX251bWJlck9mRW50cmllczsKICAgICB9CiAgICAgCisgICAgdm9pZCBkZWNvZGUo
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIHJlc3VsdCkgY29uc3Q7CisgICAgCiBw
cml2YXRlOgogICAgIENvbXBhY3RKSVRDb2RlTWFwKHVpbnQ4X3QqIGJ1ZmZlciwgdW5zaWduZWQg
c2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzKQogICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZl
cikKQEAgLTE2MiwxMSArMTUzLDM4IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgbV9wcmV2
aW91c0J5dGVjb2RlSW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fcHJldmlvdXNNYWNoaW5lQ29k
ZU9mZnNldDsKICAgICB9OworICAgIAorICAgIGNsYXNzIERlY29kZXIgeworICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEZWNvZGVyKTsKKyAgICBwdWJsaWM6CisgICAgICAgIERlY29kZXIo
Y29uc3QgQ29tcGFjdEpJVENvZGVNYXAqKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG51
bWJlck9mRW50cmllc1JlbWFpbmluZygpIGNvbnN0OworICAgICAgICB2b2lkIHJlYWQodW5zaWdu
ZWQmIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkJiBtYWNoaW5lQ29kZU9mZnNldCk7CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvbXBhY3RKSVRDb2RlTWFwKiBtX2ppdENv
ZGVNYXA7CisgICAgICAgIHVuc2lnbmVkIG1fcHJldmlvdXNCeXRlY29kZUluZGV4OworICAgICAg
ICB1bnNpZ25lZCBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVk
IG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nOworICAgICAgICB1bnNpZ25lZCBtX2J1ZmZlcklu
ZGV4OworICAgIH07CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEVuY29kZXI7CisgICAg
ZnJpZW5kIGNsYXNzIERlY29kZXI7CiB9OwogCitpbmxpbmUgdm9pZCBDb21wYWN0SklUQ29kZU1h
cDo6ZGVjb2RlKFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiByZXN1bHQpIGNvbnN0
Cit7CisgICAgRGVjb2RlciBkZWNvZGVyKHRoaXMpOworICAgIHJlc3VsdC5yZXNpemUoZGVjb2Rl
ci5udW1iZXJPZkVudHJpZXNSZW1haW5pbmcoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlc3VsdC5zaXplKCk7ICsraSkKKyAgICAgICAgZGVjb2Rlci5yZWFkKHJlc3VsdFtpXS5t
X2J5dGVjb2RlSW5kZXgsIHJlc3VsdFtpXS5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAKKyAg
ICBBU1NFUlQoIWRlY29kZXIubnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKCkpOworfQorCiBpbmxp
bmUgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIoKQogICAgIDogbV9idWZmZXIo
MCkKICAgICAsIG1fc2l6ZSgwKQpAQCAtMjQ5LDYgKzI2NywzMiBAQCBpbmxpbmUgdm9pZCBDb21w
YWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6CiAgICAgfQogfQogCitpbmxpbmUgQ29tcGFjdEpJVENv
ZGVNYXA6OkRlY29kZXI6OkRlY29kZXIoY29uc3QgQ29tcGFjdEpJVENvZGVNYXAqIGppdENvZGVN
YXApCisgICAgOiBtX2ppdENvZGVNYXAoaml0Q29kZU1hcCkKKyAgICAsIG1fcHJldmlvdXNCeXRl
Y29kZUluZGV4KDApCisgICAgLCBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQoMCkKKyAgICAs
IG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKGppdENvZGVNYXAtPm1fbnVtYmVyT2ZFbnRyaWVz
KQorICAgICwgbV9idWZmZXJJbmRleCgwKQoreworfQorCitpbmxpbmUgdW5zaWduZWQgQ29tcGFj
dEpJVENvZGVNYXA6OkRlY29kZXI6Om51bWJlck9mRW50cmllc1JlbWFpbmluZygpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1fbnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nIHx8IG1fYnVmZmVySW5kZXgg
PT0gbV9qaXRDb2RlTWFwLT5tX3NpemUpOworICAgIHJldHVybiBtX251bWJlck9mRW50cmllc1Jl
bWFpbmluZzsKK30KKworaW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29kZXI6OnJl
YWQodW5zaWduZWQmIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkJiBtYWNoaW5lQ29kZU9mZnNldCkK
K3sKKyAgICBBU1NFUlQobnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKCkpOworICAgIAorICAgIG1f
cHJldmlvdXNCeXRlY29kZUluZGV4ICs9IG1faml0Q29kZU1hcC0+ZGVjb2RlTnVtYmVyKG1fYnVm
ZmVySW5kZXgpOworICAgIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCArPSBtX2ppdENvZGVN
YXAtPmRlY29kZU51bWJlcihtX2J1ZmZlckluZGV4KTsKKyAgICBieXRlY29kZUluZGV4ID0gbV9w
cmV2aW91c0J5dGVjb2RlSW5kZXg7CisgICAgbWFjaGluZUNvZGVPZmZzZXQgPSBtX3ByZXZpb3Vz
TWFjaGluZUNvZGVPZmZzZXQ7CisgICAgbV9udW1iZXJPZkVudHJpZXNSZW1haW5pbmctLTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBDb21wYWN0SklUQ29kZU1hcF9oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDk5NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEw
MSw4IEBAIHZvaWQgSklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2soT3B0aW1pemEKICAgICAKICAg
ICBKdW1wIHNraXBPcHRpbWl6ZSA9IGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKGtp
bmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrID8gMSA6IDMwKSwgQWJzb2x1dGVBZGRyZXNzKCZt
X2NvZGVCbG9jay0+bV9leGVjdXRlQ291bnRlcikpOwogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxs
KHRoaXMsIGtpbmQgPT0gTG9vcE9wdGltaXphdGlvbkNoZWNrID8gY3RpX29wdGltaXplX2Zyb21f
bG9vcCA6IGN0aV9vcHRpbWl6ZV9mcm9tX3JldCk7CisgICAgaWYgKGtpbmQgPT0gTG9vcE9wdGlt
aXphdGlvbkNoZWNrKQorICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW0zMihtX2J5dGVj
b2RlT2Zmc2V0KSk7CiAgICAgc3R1YkNhbGwuY2FsbCgpOwogICAgIHNraXBPcHRpbWl6ZS5saW5r
KHRoaXMpOwogfQpAQCAtMTE1LDggKzExNyw2IEBAIHZvaWQgSklUOjplbWl0VGltZW91dENoZWNr
KCkKICAgICBzdHViQ2FsbC5jYWxsKHRpbWVvdXRDaGVja1JlZ2lzdGVyKTsKICAgICBzdHViQ2Fs
bC5nZXRBcmd1bWVudCgwLCByZWdUMSwgcmVnVDApOyAvLyByZWxvYWQgbGFzdCByZXN1bHQgcmVn
aXN0ZXJzLgogICAgIHNraXBUaW1lb3V0LmxpbmsodGhpcyk7Ci0gICAgCi0gICAgZW1pdE9wdGlt
aXphdGlvbkNoZWNrKExvb3BPcHRpbWl6YXRpb25DaGVjayk7CiB9CiAjZWxzZQogdm9pZCBKSVQ6
OmVtaXRUaW1lb3V0Q2hlY2soKQpAQCAtMTI2LDggKzEyNiw2IEBAIHZvaWQgSklUOjplbWl0VGlt
ZW91dENoZWNrKCkKICAgICBza2lwVGltZW91dC5saW5rKHRoaXMpOwogCiAgICAga2lsbExhc3RS
ZXN1bHRSZWdpc3RlcigpOwotICAgIAotICAgIGVtaXRPcHRpbWl6YXRpb25DaGVjayhMb29wT3B0
aW1pemF0aW9uQ2hlY2spOwogfQogI2VuZGlmCiAKQEAgLTI4Myw2ICsyODEsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9qdHJ1ZSkK
ICAgICAgICAgREVGSU5FX09QKG9wX2xvYWRfdmFyYXJncykKICAgICAgICAgREVGSU5FX09QKG9w
X2xvb3ApCisgICAgICAgIERFRklORV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9P
UChvcF9sb29wX2lmX2xlc3MpCiAgICAgICAgIERFRklORV9PUChvcF9sb29wX2lmX2xlc3NlcSkK
ICAgICAgICAgREVGSU5FX09QKG9wX2xvb3BfaWZfZ3JlYXRlcikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gOTQ5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoSklU
KQogCisvLyBWZXJib3NlIGxvZ2dpbmcgZm9yIE9TUi1yZWxhdGVkIGNvZGUuCisjZGVmaW5lIEVO
QUJMRV9KSVRfVkVSQk9TRV9PU1IgMAorCiAvLyBXZSd2ZSBydW4gaW50byBzb21lIHByb2JsZW1z
IHdoZXJlIGNoYW5naW5nIHRoZSBzaXplIG9mIHRoZSBjbGFzcyBKSVQgbGVhZHMgdG8KIC8vIHBl
cmZvcm1hbmNlIGZsdWN0dWF0aW9ucy4gIFRyeSBmb3JjaW5nIGFsaWdubWVudCBpbiBhbiBhdHRl
bXB0IHRvIHN0YWJhbGl6ZSB0aGlzLgogI2lmIENPTVBJTEVSKEdDQykKQEAgLTc5Myw2ICs3OTYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2p0cnVlKEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2FkX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2xvb3AoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBl
bWl0X29wX2xvb3BfaGludChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9v
cF9pZl9sZXNzKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb29wX2lmX2xl
c3NlcShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9vcF9pZl9ncmVhdGVy
KEluc3RydWN0aW9uKik7CkBAIC0xMDY2LDYgKzEwNzAsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGVtaXRfb3Bfam1wKGN1cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgfQogCisgICAgaW5s
aW5lIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChJbnN0cnVjdGlvbiopCisgICAgeworICAg
ICAgICBlbWl0T3B0aW1pemF0aW9uQ2hlY2soTG9vcE9wdGltaXphdGlvbkNoZWNrKTsKKyAgICB9
CisKICAgICBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9pZl90cnVlKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgewogICAgICAgICBlbWl0VGltZW91dENoZWNrKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gOTQ5
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYsMTEgKzM2LDExIEBACiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVk
ZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSGVhcC5o
IgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25IZWxwZXJzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCi0jaW5j
bHVkZSAiU3Ryb25nLmgiCisjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2lu
Y2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKQEAgLTU5LDYgKzU5
LDcgQEAKICNpbmNsdWRlICJSZWdFeHBQcm90b3R5cGUuaCIKICNpbmNsdWRlICJSZWdpc3Rlci5o
IgogI2luY2x1ZGUgIlNhbXBsaW5nVG9vbC5oIgorI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxz
dGRpby5oPgpAQCAtMTgyMywxMCArMTgyNCw0MiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcHRpbWl6ZV9mcm9tCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNh
bGxGcmFtZTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCk7CiAgICAgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4gPSBjYWxsRnJhbWUtPnNjb3BlQ2hh
aW4oKTsKLQorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBzdGFja0ZyYW1lLmFyZ3NbMF0u
aW50MzIoKTsKKyAgICAKICAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNvbXBpbGVP
cHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZyb20gbG9v
cCBmYWlsZWQuXG4iKTsKKyAgICAKKyAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpID09
IGNvZGVCbG9jaykgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50
ZigiT3B0aW1pemluZyAlcCBmcm9tIGxvb3AgZmFpbGVkLlxuIiwgY29kZUJsb2NrKTsKKyNlbmRp
ZgorCisgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpC
YXNlbGluZUpJVCk7CisgICAgICAgIGNvZGVCbG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24o
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIG9wdGltaXpl
ZENvZGVCbG9jayA9IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKKyAgICBBU1NFUlQob3B0aW1p
emVkQ29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICAKKyAg
ICBpZiAodm9pZCogYWRkcmVzcyA9IERGRzo6cHJlcGFyZU9TUkVudHJ5KGNhbGxGcmFtZSwgb3B0
aW1pemVkQ29kZUJsb2NrLCBieXRlY29kZUluZGV4KSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9T
RV9PU1IpCisgICAgICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9tIGxvb3Agc3VjY2VlZGVk
LCBwZXJmb3JtaW5nIE9TUi5cbiIsIGNvZGVCbG9jayk7CisjZW5kaWYKKworICAgICAgICBjb2Rl
QmxvY2stPm9wdGltaXplU29vbigpOworICAgICAgICBTVFVCX1NFVF9SRVRVUk5fQUREUkVTUyhh
ZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQorICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9tIGxvb3Agc3VjY2VlZGVk
LCBPU1IgZmFpbGVkLlxuIiwgY29kZUJsb2NrKTsKKyNlbmRpZgorCisgICAgLy8gT1NSIGZhaWxl
ZCB0aGlzIHRpbWUsIGJ1dCBpdCBtaWdodCBzdWNjZWVkIG5leHQgdGltZSEgTGV0IHRoZSBjb2Rl
IHJ1biBhIGJpdAorICAgIC8vIGxvbmdlciBhbmQgdGhlbiB0cnkgYWdhaW4uCisgICAgY29kZUJs
b2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wdGltaXplX2Zyb21fcmV0KQpAQCAtMTg0MCw2ICsxODczLDI0IEBAIERFRklORV9TVFVC
X0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICBKU09iamVjdCogZXJyb3IgPSBjb2Rl
QmxvY2stPmNvbXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZUNoYWluKTsKICAgICBpZiAo
ZXJyb3IpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogb3B0aW1pemVkIGNvbXBp
bGF0aW9uIGZyb20gcmV0IGZhaWxlZC5cbiIpOworICAgIAorICAgIGlmIChjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCkgPT0gY29kZUJsb2NrKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
KyAgICAgICAgcHJpbnRmKCJPcHRpbWl6aW5nICVwIGZyb20gcmV0dXJuIGZhaWxlZC5cbiIsIGNv
ZGVCbG9jayk7CisjZW5kaWYKKworICAgICAgICBBU1NFUlQoY29kZUJsb2NrLT5nZXRKSVRUeXBl
KCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAgICBjb2RlQmxvY2stPmRvbnRPcHRp
bWl6ZUFueXRpbWVTb29uKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQVNT
RVJUKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRG
R0pJVCk7CisKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiT3B0aW1p
emluZyAlcCBmcm9tIHJldHVybiBzdWNjZWVkZWQuXG4iLCBjb2RlQmxvY2spOworI2VuZGlmCisg
ICAgCisgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsKIH0KIAogREVGSU5FX1NUVUJfRlVO
Q1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX2luc3RhbmNlb2YpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTQ5OTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTcxLDcgKzE3MSw2IEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUlu
dGVybmEKICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhbHJlYWR5IGFuIGFsdGVybmF0aXZl
IHBpZWNlIG9mIGNvZGUgY29tcGlsZWQgd2l0aCBhIGRpZmZlcmVudAogICAgICAgICAgICAgICAg
IC8vIEpJVCwgc28gd2UgY2FuIHNpbGVudGx5IGZhaWwuCiAgICAgICAgICAgICAgICAgbV9ldmFs
Q29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxFdmFsQ29kZUJsb2NrPihtX2V2YWxDb2Rl
QmxvY2stPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAgICAgICAgICBtX2V2YWxDb2Rl
QmxvY2stPmRvbnRPcHRpbWl6ZUFueXRpbWVTb29uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gSklUOjpj
b21waWxlKHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhLCBtX2V2YWxDb2RlQmxvY2suZ2V0KCkp
OwpAQCAtMjkxLDcgKzI5MCw2IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGls
ZUludGUKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtX3Byb2dyYW1Db2RlQmxv
Y2stPmFsdGVybmF0aXZlKCkpIHsKICAgICAgICAgICAgICAgICBtX3Byb2dyYW1Db2RlQmxvY2sg
PSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2dyYW1Db2RlQmxvY2s+KG1fcHJvZ3JhbUNvZGVCbG9j
ay0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwotICAgICAgICAgICAgICAgIG1fcHJvZ3JhbUNvZGVC
bG9jay0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBKSVQ6OmNv
bXBpbGUoc2NvcGVDaGFpbk5vZGUtPmdsb2JhbERhdGEsIG1fcHJvZ3JhbUNvZGVCbG9jay5nZXQo
KSk7CkBAIC00MTcsNyArNDE1LDYgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29t
cGlsZUZvcgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrRm9y
Q2FsbC0+YWx0ZXJuYXRpdmUoKSkgewogICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ2Fs
bCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2s+KG1fY29kZUJsb2NrRm9y
Q2FsbC0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwotICAgICAgICAgICAgICAgIG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKICAgICAgICAgICAgICAgICBtX3N5
bWJvbFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5zaGFyZWRTeW1ib2xUYWJsZSgpOwogICAg
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQpAQCAtNDk0LDcgKzQ5MSw2IEBA
IEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+YWx0ZXJuYXRpdmUo
KSkgewogICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gc3RhdGljX3Bv
aW50ZXJfY2FzdDxGdW5jdGlvbkNvZGVCbG9jaz4obV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnJl
bGVhc2VBbHRlcm5hdGl2ZSgpKTsKLSAgICAgICAgICAgICAgICBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdC0+ZG9udE9wdGltaXplQW55dGltZVNvb24oKTsKICAgICAgICAgICAgICAgICBtX3N5bWJv
bFRhYmxlID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnNoYXJlZFN5bWJvbFRhYmxlKCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9Cg==
</data>
<flag name="review"
          id="103759"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="103760"
          type_id="3"
          status="-"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>