<?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>163234</bug_id>
          
          <creation_ts>2016-10-10 12:47:53 -0700</creation_ts>
          <short_desc>B3-&gt;Air lowering should be able to emit complex leas on x86</short_desc>
          <delta_ts>2016-10-10 20:47:59 -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>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>163171</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1238463</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-10 12:47:53 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238464</commentid>
    <comment_count>1</comment_count>
      <attachid>291145</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-10 12:48:36 -0700</bug_when>
    <thetext>Created attachment 291145
this might work

I haven&apos;t tried it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238545</commentid>
    <comment_count>2</comment_count>
      <attachid>291166</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-10 14:38:25 -0700</bug_when>
    <thetext>Created attachment 291166
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238549</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-10 14:41:25 -0700</bug_when>
    <thetext>Attachment 291166 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:13541:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1 in 8 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>1238551</commentid>
    <comment_count>4</comment_count>
      <attachid>291167</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-10 14:42:17 -0700</bug_when>
    <thetext>Created attachment 291167
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238555</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-10 14:44:12 -0700</bug_when>
    <thetext>Attachment 291167 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:13541:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1 in 8 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>1238566</commentid>
    <comment_count>6</comment_count>
      <attachid>291171</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-10 15:16:35 -0700</bug_when>
    <thetext>Created attachment 291171
the patch

Fixed some UB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238568</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-10 15:18:57 -0700</bug_when>
    <thetext>Attachment 291171 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:13541:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1 in 8 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>1238578</commentid>
    <comment_count>8</comment_count>
      <attachid>291171</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-10-10 15:46:10 -0700</bug_when>
    <thetext>Comment on attachment 291171
the patch

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

r=me

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1912
&gt; +            // Use 64-bit math to perform the shift so that &lt;&lt;32 does the right thing.

Can you add a test for this?

&gt; Source/JavaScriptCore/b3/testb3.cpp:13477
&gt; +    checkUsesInstruction(*code, &quot;lea (%rdi,%rsi,4), %rax&quot;);

Can you also add a test for when the multiplier is 8?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238579</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-10 15:53:22 -0700</bug_when>
    <thetext>Perf looks OK.


Benchmark report for SunSpider, LongSpider, Octane, Kraken, and AsmBench on murderface (MacBookPro11,5).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r207004)
&quot;Things&quot; at /Volumes/Data/quinary/OpenSource/WebKitBuild/Release/jsc (r207004)

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

                                                TipOfTree                   Things                                      
SunSpider:
   3d-cube                                    4.8081+-0.2238     ?      4.8262+-0.2977        ?
   3d-morph                                   4.6882+-0.0978     ?      4.7601+-0.2533        ? might be 1.0153x slower
   3d-raytrace                                4.7714+-0.0548            4.7458+-0.0474        
   access-binary-trees                        1.9676+-0.0293            1.9565+-0.0566        
   access-fannkuch                            4.9313+-0.3643            4.7004+-0.0593          might be 1.0491x faster
   access-nbody                               2.3885+-0.0917     ?      2.4575+-0.1884        ? might be 1.0289x slower
   access-nsieve                              3.1593+-0.1057     ?      3.2587+-0.2102        ? might be 1.0314x slower
   bitops-3bit-bits-in-byte                   1.1943+-0.2344            1.1272+-0.0670          might be 1.0595x faster
   bitops-bits-in-byte                        2.7194+-0.1502            2.7065+-0.0672        
   bitops-bitwise-and                         1.9384+-0.0574     ?      2.0792+-0.3127        ? might be 1.0727x slower
   bitops-nsieve-bits                         3.0229+-0.0852     ?      3.0520+-0.1305        ?
   controlflow-recursive                      2.2252+-0.0363     ?      2.2671+-0.1093        ? might be 1.0189x slower
   crypto-aes                                 4.4934+-0.4792            4.4124+-0.3744          might be 1.0184x faster
   crypto-md5                                 2.6387+-0.0298     ?      2.6655+-0.0540        ? might be 1.0102x slower
   crypto-sha1                                2.6890+-0.0374            2.6641+-0.0297        
   date-format-tofte                          6.6390+-0.1583            6.5411+-0.1523          might be 1.0150x faster
   date-format-xparb                          4.3767+-0.0671     ?      4.5150+-0.3943        ? might be 1.0316x slower
   math-cordic                                2.6641+-0.0350            2.6508+-0.0256        
   math-partial-sums                          3.8015+-0.0254     ?      3.9691+-0.2808        ? might be 1.0441x slower
   math-spectral-norm                         2.0075+-0.0824     ?      2.0110+-0.0383        ?
   regexp-dna                                 6.0497+-0.2065     ?      6.1086+-0.2067        ?
   string-base64                              4.5950+-0.3812     ?      4.5957+-0.3264        ?
   string-fasta                               5.3043+-0.0763            5.2775+-0.0581        
   string-tagcloud                            8.3661+-0.4766     ?      8.3822+-0.5256        ?
   string-unpack-code                        18.1754+-1.3383     ?     18.2402+-1.0321        ?
   string-validate-input                      4.1697+-0.0361     ?      4.1760+-0.1303        ?

   &lt;arithmetic&gt;                               4.3763+-0.0727     ?      4.3902+-0.0511        ? might be 1.0032x slower

                                                TipOfTree                   Things                                      
LongSpider:
   3d-cube                                  791.8907+-11.6104         789.3553+-17.6858       
   3d-morph                                 565.1932+-3.7603          562.6833+-2.6864        
   3d-raytrace                              456.1164+-5.2722          453.4562+-4.8183        
   access-binary-trees                      774.3717+-7.9252     ?    779.0691+-1.0611        ?
   access-fannkuch                          233.1144+-11.8863         229.0910+-4.4792          might be 1.0176x faster
   access-nbody                             503.3042+-3.8408          497.9259+-6.5190          might be 1.0108x faster
   access-nsieve                            284.1951+-10.1249         278.1833+-4.1534          might be 1.0216x faster
   bitops-3bit-bits-in-byte                  31.8182+-1.2447     ?     33.1229+-2.1330        ? might be 1.0410x slower
   bitops-bits-in-byte                       81.7782+-1.9792     ?     81.8352+-1.2246        ?
   bitops-nsieve-bits                       367.6414+-4.2287     ?    371.5944+-7.1039        ? might be 1.0108x slower
   controlflow-recursive                    429.9538+-6.1434          428.6799+-4.3455        
   crypto-aes                               531.7749+-1.9364     ?    535.2872+-2.0557        ?
   crypto-md5                               453.6676+-7.6862     ?    458.8516+-2.8962        ? might be 1.0114x slower
   crypto-sha1                              588.7456+-6.7503     !    606.1940+-10.6159       ! definitely 1.0296x slower
   date-format-tofte                        332.4270+-6.3292          330.9482+-2.4590        
   date-format-xparb                        590.6508+-2.7649     ?    618.2487+-66.2687       ? might be 1.0467x slower
   hash-map                                 143.4471+-5.5083          138.0060+-4.2588          might be 1.0394x faster
   math-cordic                              421.8797+-14.5175    ?    429.3605+-13.2129       ? might be 1.0177x slower
   math-partial-sums                        282.8370+-3.0053          282.4237+-3.3276        
   math-spectral-norm                       515.3109+-4.1812          514.1577+-2.6478        
   string-base64                            479.2913+-5.1687          477.2460+-5.5475        
   string-fasta                             331.6859+-6.6387          324.6578+-3.3975          might be 1.0216x faster
   string-tagcloud                          163.1533+-2.9448          161.6974+-2.8722        

   &lt;geometric&gt;                              337.1272+-2.4717     ?    337.3787+-1.7645        ? might be 1.0007x slower

                                                TipOfTree                   Things                                      
Octane:
   encrypt                                   0.15235+-0.00413          0.14988+-0.00144         might be 1.0165x faster
   decrypt                                   2.71068+-0.02175    ^     2.59835+-0.03295       ^ definitely 1.0432x faster
   deltablue                        x2       0.11573+-0.00146    ?     0.11728+-0.00203       ? might be 1.0134x slower
   earley                                    0.23706+-0.00174          0.23662+-0.00292       
   boyer                                     4.19900+-0.14777          4.19524+-0.12439       
   navier-stokes                    x2       4.60230+-0.02294    ?     4.61005+-0.01454       ?
   raytrace                         x2       0.65030+-0.00117    ?     0.65509+-0.00530       ?
   richards                         x2       0.07858+-0.00116    ?     0.07873+-0.00165       ?
   splay                            x2       0.31164+-0.00299          0.30971+-0.00130       
   regexp                           x2      16.77981+-0.36453         16.67011+-0.42146       
   pdfjs                            x2      38.85408+-0.21052    ?    39.25619+-0.39671       ? might be 1.0103x slower
   mandreel                         x2      39.55364+-0.15019    ?    39.76014+-0.21737       ?
   gbemu                            x2      28.56973+-0.20802    ?    28.67272+-0.50951       ?
   closure                                   0.47103+-0.00270          0.47065+-0.00359       
   jquery                                    6.48439+-0.02125    ^     6.44658+-0.01626       ^ definitely 1.0059x faster
   box2d                            x2       8.63412+-0.08616    ?     8.65745+-0.06238       ?
   zlib                             x2     342.75494+-1.76345        341.00248+-2.91578       
   typescript                       x2     600.84261+-15.17109   ?   615.36666+-10.28872      ? might be 1.0242x slower

   &lt;geometric&gt;                               4.70961+-0.01883    ?     4.71523+-0.01932       ? might be 1.0012x slower

                                                TipOfTree                   Things                                      
Kraken:
   ai-astar                                   91.181+-4.377             88.676+-1.336           might be 1.0282x faster
   audio-beat-detection                       35.557+-0.457             35.508+-0.675         
   audio-dft                                  95.656+-3.304             93.495+-0.763           might be 1.0231x faster
   audio-fft                                  27.399+-0.173      ?      27.479+-0.363         ?
   audio-oscillator                           43.152+-0.492             42.877+-0.339         
   imaging-darkroom                           57.639+-1.814             55.640+-0.235           might be 1.0359x faster
   imaging-desaturate                         41.546+-0.498             41.069+-0.368           might be 1.0116x faster
   imaging-gaussian-blur                      60.018+-1.997      ?      60.225+-4.629         ?
   json-parse-financial                       31.531+-0.486      ?      32.750+-1.794         ? might be 1.0387x slower
   json-stringify-tinderbox                   21.355+-0.855             21.347+-0.918         
   stanford-crypto-aes                        34.679+-1.461             33.782+-0.171           might be 1.0265x faster
   stanford-crypto-ccm                        31.952+-1.692      ?      33.252+-1.862         ? might be 1.0407x slower
   stanford-crypto-pbkdf2                     89.356+-0.941             88.743+-0.664         
   stanford-crypto-sha256-iterative           29.510+-0.917      ?      29.746+-1.058         ?

   &lt;arithmetic&gt;                               49.324+-0.493             48.899+-0.579           might be 1.0087x faster

                                                TipOfTree                   Things                                      
AsmBench:
   bigfib.cpp                               405.6467+-3.5323     ?    409.2070+-5.8495        ?
   cray.c                                   357.7287+-4.7686          356.4018+-2.3540        
   dry.c                                    397.8157+-11.8652         396.8417+-6.9671        
   FloatMM.c                                657.4486+-20.8368         630.6041+-35.1956         might be 1.0426x faster
   gcc-loops.cpp                           3381.3095+-14.3842    ^   3341.0881+-17.5972       ^ definitely 1.0120x faster
   n-body.c                                 744.0028+-3.7649     ?    748.3889+-3.9711        ?
   Quicksort.c                              379.1238+-6.0500     ^    362.0960+-3.7614        ^ definitely 1.0470x faster
   stepanov_container.cpp                  3182.4114+-65.9123        3147.4892+-43.5650         might be 1.0111x faster
   Towers.c                                 242.2733+-5.1053     ?    246.2947+-9.4203        ? might be 1.0166x slower

   &lt;geometric&gt;                              671.8334+-6.8226          665.3898+-4.1114          might be 1.0097x faster

                                                TipOfTree                   Things                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                           47.0355+-0.1865           46.9124+-0.1819          might be 1.0026x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238580</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-10 15:53:55 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 291171 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=291171&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:1912
&gt; &gt; +            // Use 64-bit math to perform the shift so that &lt;&lt;32 does the right thing.
&gt; 
&gt; Can you add a test for this?
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/testb3.cpp:13477
&gt; &gt; +    checkUsesInstruction(*code, &quot;lea (%rdi,%rsi,4), %rax&quot;);
&gt; 
&gt; Can you also add a test for when the multiplier is 8?

Yup, I can add those tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238679</commentid>
    <comment_count>11</comment_count>
      <attachid>291207</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-10 19:02:39 -0700</bug_when>
    <thetext>Created attachment 291207
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238683</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-10 19:08:45 -0700</bug_when>
    <thetext>Attachment 291207 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:13658:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1 in 8 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>1238712</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-10 20:47:59 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/207039</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291145</attachid>
            <date>2016-10-10 12:48:36 -0700</date>
            <delta_ts>2016-10-10 14:38:25 -0700</delta_ts>
            <desc>this might work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>16204</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHJldmlzaW9uIDIwNzAwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM1OCw5ICsxMzU4LDE0IEBA
IHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAotICAgIHZvaWQgbGVhKEFkZHJlc3MgYWRkcmVzcywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHZvaWQgbGVhMzIoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zm
c2V0KSwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKGFk
ZHJlc3Mub2Zmc2V0KSwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxl
YTY0KEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgYWRk
NjQoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkcmVzcy5iYXNlLCBkZXN0KTsKICAg
ICB9CiAKICAgICBib29sIHNob3VsZEJsaW5kKEltbTMyIGltbSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAyMDcwMDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzk5LDcgKzM5OSw4IEBAIHByaXZhdGU6CiAgICAgLy8gc2hvcnQsIHlvdSBzaG91bGQgYXZvaWQg
dGhpcyBieSB1c2luZyB0aGUgcGF0dGVybiBtYXRjaGVyIHRvIG1hdGNoIHBhdHRlcm5zLgogICAg
IHZvaWQgY29tbWl0SW50ZXJuYWwoVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgbV9sb2Nr
ZWQuYWRkKHZhbHVlKTsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbV9sb2NrZWQu
YWRkKHZhbHVlKTsKICAgICB9CiAKICAgICBib29sIGNyb3NzZXNJbnRlcmZlcmVuY2UoVmFsdWUq
IHZhbHVlKQpAQCAtMTc5OCw2ICsxNzk5LDEzOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSwK
ICAgICAgICAgICAgIGZhbHNlKTsKICAgICB9CisgICAgCisgICAgYm9vbCB0cnlBcHBlbmRMZWEo
KQorICAgIHsKKyAgICAgICAgQWlyOjpPcGNvZGUgbGVhT3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlw
ZShMZWEzMiwgTGVhNjQsIG1fdmFsdWUtPnR5cGUoKSk7CisgICAgICAgIGlmICghaXNWYWxpZEZv
cm0obGVhT3Bjb2RlLCBBcmc6OkluZGV4LCBBcmc6OlRtcCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGxldHMgdXMgdHVybiB0aGluZ3MgbGlr
ZSB0aGlzOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgQWRkKEFkZChAeCwgU2hsKEB5LCAk
MikpLCAkMTAwKQorICAgICAgICAvLworICAgICAgICAvLyBJbnRvIHRoaXM6CisgICAgICAgIC8v
CisgICAgICAgIC8vICAgICBsZWEgMTAwKCVyZGksJXNpLDIpLCAlcmF4CisgICAgICAgIC8vCisg
ICAgICAgIC8vIFdlIGhhdmUgYSBjaG9pY2UgaGVyZSBiZXR3ZWVuIGNvbW1pdHRpbmcgdGhlIGlu
dGVybmFsIGJpdHMgb2YgYW4gaW5kZXggb3Igc2hhcmluZworICAgICAgICAvLyB0aGVtLiBUaGVy
ZSBhcmUgc29saWQgYXJndW1lbnRzIGZvciBib3RoLgorICAgICAgICAvLworICAgICAgICAvLyBT
aGFyaW5nOiBUaGUgd29yZCBvbiB0aGUgc3RyZWV0IGlzIHRoYXQgdGhlIGNvc3Qgb2YgYSBsZWEg
aXMgb25lIGN5Y2xlIG5vIG1hdHRlcgorICAgICAgICAvLyB3aGF0IGl0IGRvZXMuIEV2ZXJ5IGV4
cGVyaW1lbnQgSSd2ZSBldmVyIHNlZW4gc2VlbXMgdG8gY29uZmlybSB0aGlzLiBTbywgc2hhcmlu
ZworICAgICAgICAvLyBoZWxwcyB1cyBpbiBzaXR1YXRpb25zIHdoZXJlIFdhc20gaW5wdXQgZGlk
IHRoaXM6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICB4ID0gYVtpXS54OworICAgICAgICAv
LyAgICAgeSA9IGFbaV0ueTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2l0aCBzaGFyaW5nIHdl
IHdvdWxkIGRvOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgbGVhbCAoJWEsJWksNCksICV0
bXAKKyAgICAgICAgLy8gICAgIGNtcCAoJXNpemUsICV0bXApCisgICAgICAgIC8vICAgICBqYSBf
ZmFpbAorICAgICAgICAvLyAgICAgbW92bCAoJWJhc2UsICV0bXApLCAleAorICAgICAgICAvLyAg
ICAgbGVhbCA0KCVhLCVpLDQpLCAldG1wCisgICAgICAgIC8vICAgICBjbXAgKCVzaXplLCAldG1w
KQorICAgICAgICAvLyAgICAgamEgX2ZhaWwKKyAgICAgICAgLy8gICAgIG1vdmwgKCViYXNlLCAl
dG1wKSwgJXkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW4gdGhlIGFic2VuY2Ugb2Ygc2hhcmlu
Zywgd2UgbWF5IGZpbmQgb3Vyc2VsdmVzIG5lZWRpbmcgc2VwYXJhdGUgcmVnaXN0ZXJzIGZvcgor
ICAgICAgICAvLyB0aGUgaW5uYXJkcyBvZiB0aGUgaW5kZXguIFRoYXQncyByZWxhdGl2ZWx5IHVu
bGlrZWx5IHRvIGJlIGEgdGhpbmcgZHVlIHRvIG90aGVyCisgICAgICAgIC8vIG9wdGltaXphdGlv
bnMgdGhhdCB3ZSBhbHJlYWR5IGhhdmUsIGJ1dCBpdCBjb3VsZCBoYXBwZW4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gQ29tbWl0dGluZzogVGhlIHdvcnN0IGNhc2UgaXMgdGhhdCB0aGVyZSBpcyBh
IGNvbXBsaWNhdGVkIGdyYXBoIG9mIGFkZGl0aW9ucyBhbmQKKyAgICAgICAgLy8gc2hpZnRzLCB3
aGVyZSBlYWNoIHZhbHVlIGhhcyBtdWx0aXBsZSB1c2VzLiBJbiB0aGF0IGNhc2UsIGl0J3MgYmV0
dGVyIHRvIGNvbXB1dGUKKyAgICAgICAgLy8gZWFjaCBvbmUgc2VwYXJhdGVseSBmcm9tIHRoZSBv
dGhlcnMgc2luY2UgdGhhdCB3YXksIGVhY2ggY2FsY3VsYXRpb24gd2lsbCB1c2UgYQorICAgICAg
ICAvLyByZWxhdGl2ZWx5IG5lYXJieSB0bXAgYXMgaXRzIGlucHV0LiBUaGF0IHNlZW1zIHVuY29t
bW9uLCBidXQgaW4gdGhvc2UgY2FzZXMsCisgICAgICAgIC8vIGNvbW1pdHRpbmcgaXMgYSBjbGVh
ciB3aW5uZXI6IGl0IHdvdWxkIHJlc3VsdCBpbiBhIHNpbXBsZSBpbnRlcmZlcmVuY2UgZ3JhcGgK
KyAgICAgICAgLy8gd2hpbGUgc2hhcmluZyB3b3VsZCByZXN1bHQgaW4gYSBjb21wbGV4IG9uZS4g
SW50ZXJmZXJlbmNlIHN1Y2tzIGJlY2F1c2UgaXQgbWVhbnMKKyAgICAgICAgLy8gbW9yZSB0aW1l
IGluIElSQyBhbmQgaXQgbWVhbnMgd29yc2UgY29kZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
SXQncyBub3Qgc3VwZXIgY2xlYXIgaWYgYW55IG9mIHRoZXNlIGNvcm5lciBjYXNlcyB3b3VsZCBl
dmVyIGFyaXNlLiBDb21taXR0aW5nCisgICAgICAgIC8vIGhhcyB0aGUgYmVuZWZpdCB0aGF0IGl0
J3MgZWFzaWVyIHRvIHJlYXNvbiBhYm91dCwgYW5kIHByb3RlY3RzIGEgbXVjaCBkYXJrZXIKKyAg
ICAgICAgLy8gY29ybmVyIGNhc2UgKG1vcmUgaW50ZXJmZXJlbmNlKS4KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgLy8gSGVyZSBhcmUgdGhlIHRoaW5ncyB3ZSB3YW50IHRvIG1hdGNoOgorICAg
ICAgICAvLyBBZGQoQWRkKEB4LCBAeSksICRjKQorICAgICAgICAvLyBBZGQoU2hsKEB4LCAkYyks
IEB5KQorICAgICAgICAvLyBBZGQoQHgsIFNobChAeSwgJGMpKQorICAgICAgICAvLyBBZGQoQWRk
KEB4LCBTaGwoQHksICRjKSksICRkKQorICAgICAgICAvLyBBZGQoQWRkKFNobChAeCwgJGMpLCBA
eSksICRkKQorICAgICAgICAvLworICAgICAgICAvLyBOb3RlIHRoYXQgaWYgeW91IGRvIEFkZChT
aGwoQHgsICRjKSwgJGQpIHRoZW4gd2Ugd2lsbCB0cmVhdCAkZCBhcyBhIG5vbi1jb25zdGFudCBh
bmQKKyAgICAgICAgLy8gZm9yY2UgaXQgdG8gbWF0ZXJpYWxpemUuIFlvdSdsbCBnZXQgc29tZXRo
aW5nIGxpa2UgdGhpczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gbW92bCAkZCwgJXRtcAorICAg
ICAgICAvLyBsZWFsICgldG1wLCV4LGMpLCAlcmVzdWx0CisgICAgICAgIC8vCisgICAgICAgIC8v
IFdoaWNoIGlzIHByZXR0eSBjbG9zZSB0byBvcHRpbWFsIGFuZCBoYXMgdGhlIG5pY2UgZWZmZWN0
IG9mIGJlaW5nIGFibGUgdG8gaGFuZGxlIGxhcmdlCisgICAgICAgIC8vIGNvbnN0YW50cyBncmFj
ZWZ1bGx5LgorICAgICAgICAKKyAgICAgICAgVmFsdWUqIGlubmVyQWRkID0gbnVsbHB0cjsKKyAg
ICAgICAgCisgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fdmFsdWU7CisgICAgICAgIAorICAgICAg
ICAvLyBXZSdyZSBnb2luZyB0byBjb25zdW1lIEFkZChBZGQoXyksICRjKS4gSWYgd2Ugc3VjY2Vl
ZCBhdCBjb25zdW1pbmcgaXQgdGhlbiB3ZSBoYXZlIHRoZXNlCisgICAgICAgIC8vIHBhdHRlcm5z
IGxlZnQgKGkuZS4gaW4gdGhlIEFkZChfKSk6CisgICAgICAgIC8vCisgICAgICAgIC8vIEFkZChB
ZGQoQHgsIEB5KSwgJGMpCisgICAgICAgIC8vIEFkZChBZGQoQHgsIFNobChAeSwgJGMpKSwgJGQp
CisgICAgICAgIC8vIEFkZChBZGQoU2hsKEB4LCAkYyksIEB5KSwgJGQpCisgICAgICAgIC8vCisg
ICAgICAgIC8vIE90aGVyd2lzZSB3ZSBhcmUgbG9va2luZyBhdCB0aGVzZSBwYXR0ZXJuczoKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gQWRkKFNobChAeCwgJGMpLCBAeSkKKyAgICAgICAgLy8gQWRk
KEB4LCBTaGwoQHksICRjKSkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0
IHRoZSBzdWJzZXF1ZW50IGNvZGUgb25seSBoYXMgdG8gd29ycnkgYWJvdXQgdGhyZWUgcGF0dGVy
bnM6CisgICAgICAgIC8vCisgICAgICAgIC8vIEFkZChTaGwoQHgsICRjKSwgQHkpCisgICAgICAg
IC8vIEFkZChAeCwgU2hsKEB5LCAkYykpCisgICAgICAgIC8vIEFkZChAeCwgQHkpIChvbmx5IGlm
IG9mZnNldCAhPSAwKQorICAgICAgICBpbnQzMl90IG9mZnNldCA9IDA7CisgICAgICAgIGlmICh2
YWx1ZS0+Y2hpbGQoMSktPmlzUmVwcmVzZW50YWJsZUFzPGludDMyX3Q+KCkKKyAgICAgICAgICAg
ICYmIGNhbkJlSW50ZXJuYWwodmFsdWUtPmNoaWxkKDApKQorICAgICAgICAgICAgJiYgdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBZGQpIHsKKyAgICAgICAgICAgIGhhc09mZnNldCA9IHRy
dWU7CisgICAgICAgICAgICBvZmZzZXRIb2xlID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICAg
ICAgb2Zmc2V0ID0gdmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCk7CisgICAgICAgICAgICB2YWx1
ZSA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYXV0byB0
cnlTaGwgPSBbJl0gKFZhbHVlKiBzaGwsIFZhbHVlKiBvdGhlcikgLT4gYm9vbCB7CisgICAgICAg
ICAgICBpZiAoc2hsLT5vcGNvZGUoKSAhPSBTaGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKHNobCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFzaGwtPmNoaWxkKDEpLT5oYXNJbnQz
MigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghQXJn
Ojppc1ZhbGlkSW5kZXhGb3JtKHNobC0+Y2hpbGQoMSktPmhhc0ludDMyKCksIG9mZnNldCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBB
U1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5zKHNobC0+Y2hpbGQoMCkpKTsKKyAgICAgICAgICAgIEFT
U0VSVCghbV9sb2NrZWQuY29udGFpbnMob3RoZXIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgYXBwZW5kKGxlYU9wY29kZSwgQXJnOjppbmRleCh0bXAob3RoZXIpLCB0bXAoc2hsLT5jaGls
ZCgwKSksIHNobC0+Y2hpbGQoMSktPmFzSW50MzIoKSwgb2Zmc2V0KSwgdG1wKG1fdmFsdWUpKTsK
KyAgICAgICAgICAgIGNvbW1pdEludGVybmFsKG9mZnNldEhvbGUpOworICAgICAgICAgICAgY29t
bWl0SW50ZXJuYWwoc2hsKTsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGlmICh0cnlT
aGwodmFsdWUtPmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSkpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGlmICh0cnlTaGwodmFsdWUtPmNoaWxkKDEpLCB2YWx1ZS0+Y2hpbGQo
MCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICAvLyBUaGUg
cmVtYWluaW5nIHBhdHRlcm4gaXMganVzdDoKKyAgICAgICAgLy8gQWRkKEB4LCBAeSkgKG9ubHkg
aWYgb2Zmc2V0ICE9IDApCisgICAgICAgIGlmICghb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5zKHZhbHVlLT5jaGlsZCgw
KSkpOworICAgICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5zKHZhbHVlLT5jaGlsZCgxKSkp
OworICAgICAgICBhcHBlbmQobGVhT3Bjb2RlLCBBcmc6OmluZGV4KHRtcCh2YWx1ZS0+Y2hpbGQo
MCkpLCB0bXAodmFsdWUtPmNoaWxkKDEpKSwgMSwgb2Zmc2V0KSwgdG1wKG1fdmFsdWUpKTsKKyAg
ICAgICAgY29tbWl0SW50ZXJuYWwob2Zmc2V0SG9sZSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KIAogICAgIHZvaWQgbG93ZXIoKQogICAgIHsKQEAgLTE4MzQsOSArMTk2NywxMSBAQCBw
cml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBZGQ6IHsKKyAgICAgICAgICAgIGlm
ICh0cnlBcHBlbmRMZWEoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG11bHRpcGx5QWRkT3Bjb2RlID0gdHJ5T3Bjb2RlRm9y
VHlwZShNdWx0aXBseUFkZDMyLCBNdWx0aXBseUFkZDY0LCBtX3ZhbHVlLT50eXBlKCkpOwotICAg
ICAgICAgICAgaWYgKG11bHRpcGx5QWRkT3Bjb2RlICE9IEFpcjo6T29wcwotICAgICAgICAgICAg
ICAgICYmIGlzVmFsaWRGb3JtKG11bHRpcGx5QWRkT3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAs
IEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShtdWx0
aXBseUFkZE9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7
CiAgICAgICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKICAgICAg
ICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSBtX3ZhbHVlLT5jaGlsZCgxKTsKICAgICAgICAgICAg
ICAgICBpZiAoIWltbShyaWdodCkgfHwgbV92YWx1ZVRvVG1wW3JpZ2h0XSkgewpAQCAtMTg0Niw3
ICsxOTgxLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG11
bHRpcGx5TGVmdCA9IGxlZnQtPmNoaWxkKDApOwogICAgICAgICAgICAgICAgICAgICAgICAgVmFs
dWUqIG11bHRpcGx5UmlnaHQgPSBsZWZ0LT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2xvY2tlZC5jb250YWlucyhtdWx0aXBseUxlZnQpIHx8IG1fbG9ja2VkLmNvbnRh
aW5zKG11bHRpcGx5UmlnaHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbkJlSW50
ZXJuYWwobXVsdGlwbHlMZWZ0KSB8fCBjYW5CZUludGVybmFsKG11bHRpcGx5UmlnaHQpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kKG11bHRpcGx5QWRkT3Bjb2RlLCB0bXAobXVsdGlwbHlMZWZ0KSwgdG1w
KG11bHRpcGx5UmlnaHQpLCB0bXAocmlnaHQpLCB0bXAobV92YWx1ZSkpOwpAQCAtMjIxNSw3ICsy
MzUwLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNlIFNsb3RCYXNlOiB7CiAgICAgICAgICAg
ICBhcHBlbmQoCi0gICAgICAgICAgICAgICAgTGVhLAorICAgICAgICAgICAgICAgIHBvaW50ZXJU
eXBlKCkgPT0gSW50NjQgPyBMZWE2NCA6IExlYTMyLAogICAgICAgICAgICAgICAgIEFyZzo6c3Rh
Y2sobV9zdGFja1RvU3RhY2suZ2V0KG1fdmFsdWUtPmFzPFNsb3RCYXNlVmFsdWU+KCktPnNsb3Qo
KSkpLAogICAgICAgICAgICAgICAgIHRtcChtX3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
CShyZXZpc2lvbiAyMDcwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MiwxOSArNDgyLDU0IEBAIHByaXZhdGU6
CiAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2RlKCkpIHsKICAgICAgICAgY2FzZSBBZGQ6
CiAgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0KLSAgICAgICAgICAgIC8vIFR1
cm4gdGhpczogQWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQotICAgICAgICAg
ICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIGNvbnN0YW50MSArIGNvbnN0YW50MikKKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBB
ZGQgJiYgaXNJbnQobV92YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogQWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQorICAgICAgICAgICAg
ICAgIC8vIEludG8gdGhpczogQWRkKHZhbHVlLCBjb25zdGFudDEgKyBjb25zdGFudDIpCiAgICAg
ICAgICAgICAgICAgVmFsdWUqIG5ld1N1bSA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hZGRDb25zdGFu
dChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICAgICAg
aWYgKG5ld1N1bSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRW
YWx1ZShtX2luZGV4LCBuZXdTdW0pOwogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGls
ZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKICAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZS0+Y2hpbGQoMSkgPSBuZXdTdW07CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChBZGQo
dmFsdWUsIGNvbnN0YW50KSwgb3RoZXJWYWx1ZSkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IEFkZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25zdGFudCkKKyAgICAgICAgICAgICAg
ICBpZiAoIW1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMSktPmhhc0ludCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUq
IGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpOworICAgICAgICAgICAgICAg
ICAgICBWYWx1ZSogb3RoZXJWYWx1ZSA9IG1fdmFsdWUtPmNoaWxkKDEpOworICAgICAgICAgICAg
ICAgICAgICAvLyBUaGlzIGNvdWxkIGNyZWF0ZSBkdXBsaWNhdGUgY29kZSBpZiBBZGQodmFsdWUs
IGNvbnN0YW50KSBpcyB1c2VkIGVsc2V3aGVyZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gSG93
ZXZlciwgd2UgYWxyZWFkeSBtb2RlbCBhZGRpbmcgYSBjb25zdGFudCBhcyBpZiBpdCB3YXMgZnJl
ZSBpbiBvdGhlciBwbGFjZXMKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gbGV0J3MganVzdCBy
b2xsIHdpdGggaXQuIFRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBtZWFuIGhhdmluZyB0byBkbyBnb29k
IHVzZQorICAgICAgICAgICAgICAgICAgICAvLyBjb3VudHMsIHdoaWNoIHJlZHVjZVN0cmVuZ3Ro
KCkgY3VycmVudGx5IGRvZXNuJ3QgaGF2ZS4KKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMCkgPQorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
TmV3PFZhbHVlPihtX2luZGV4LCBBZGQsIE9yaWdpbigpLCB2YWx1ZSwgb3RoZXJWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gY29uc3RhbnQ7CisgICAgICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChvdGhlclZhbHVlLCBBZGQodmFsdWUsIGNvbnN0YW50
KSkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogQWRkKEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSks
IGNvbnN0YW50KQorICAgICAgICAgICAgaWYgKGlzSW50KG1fdmFsdWUtPnR5cGUoKSkKKyAgICAg
ICAgICAgICAgICAmJiAhbV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludCgpCisgICAgICAgICAgICAg
ICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEFkZAorICAgICAgICAgICAgICAg
ICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAg
ICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7CisgICAgICAg
ICAgICAgICAgVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpOwor
ICAgICAgICAgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMCk7Cisg
ICAgICAgICAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgZHVwbGljYXRlIGFkZC4gVGhhdCdzIGRh
bmdlcm91cyBidXQgcHJvYmFibHkgZmluZSwgc2VlIGFib3ZlLgorICAgICAgICAgICAgICAgIG1f
dmFsdWUtPmNoaWxkKDApID0KKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0TmV3PFZhbHVlPihtX2luZGV4LCBBZGQsIE9yaWdpbigpLCB2YWx1ZSwgb3RoZXJWYWx1ZSk7
CisgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBjb25zdGFudDsKKyAgICAgICAg
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChjb25z
dGFudDEsIGNvbnN0YW50MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICsg
Y29uc3RhbnQyCiAgICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50QWRkID0gbV92YWx1ZS0+
Y2hpbGQoMCktPmFkZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDIwNzAwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsy
MjUsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgYXNGbG9hdCgpIGNvbnN0OwogCiAgICAgYm9vbCBo
YXNOdW1iZXIoKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHJlcHJlc2Vu
dGFibGVBcygpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgaXNSZXByZXNl
bnRhYmxlQXMoKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGFzTnVtYmVyKCkg
Y29uc3Q7CiAKICAgICAvLyBCb29sZWFucyBpbiBCMyBhcmUgQ29uc3QzMigwKSBvciBDb25zdDMy
KDEpLiBTbyB0aGlzIGlzIHRydWUgaWYgdGhlIHR5cGUgaXMgSW50MzIgYW5kIHRoZSBvbmx5Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24g
MjA3MDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsNyBAQCBpbmxpbmUgYm9vbCBWYWx1ZTo6aXNOZWdh
dGl2ZVplcm8oKSBjb25zCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgYm9vbCBW
YWx1ZTo6cmVwcmVzZW50YWJsZUFzKCkgY29uc3QKK2lubGluZSBib29sIFZhbHVlOjppc1JlcHJl
c2VudGFibGVBcygpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChvcGNvZGUoKSkgewogICAgIGNhc2Ug
Q29uc3QzMjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAy
MDcwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMzODEsNiArMTMzODEsMjcgQEAgdm9pZCB0ZXN0UGluUmVnaXN0ZXJzKCkKICAg
ICBnbyhmYWxzZSk7CiB9CiAKK3ZvaWQgdGVzdFg4NkxlYSgpCit7CisgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSog
cmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgQWRkLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2Ms
IEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFNobCwgT3Jp
Z2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAorICAgICAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAyKSkpLAorICAg
ICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwMCkp
OworICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVz
dWx0KTsKKyAgICAKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGNoZWNrVXNl
c0luc3RydWN0aW9uKCpjb2RlLCAibGVhICglcmRpLCVyc2ksMiksICVyYXgiKTsKKyAgICBDSEVD
S19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgKDEgKyAoMiA8PCAyKSkgKyAxMDAp
OworfQorCiAvLyBNYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGRvZXMgbm90IHRyeSB0byBvcHRpbWl6
ZSBhbnl0aGluZyBvdXQuCiBORVZFUl9JTkxJTkUgZG91YmxlIHplcm8oKQogewpAQCAtMTQ4MDEs
NiArMTQ4MjIsMTggQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0
UGF0Y2hwb2ludFRlcm1pbmFsUmV0dXJuVmFsdWUodHJ1ZSkpOwogICAgIFJVTih0ZXN0UGF0Y2hw
b2ludFRlcm1pbmFsUmV0dXJuVmFsdWUoZmFsc2UpKTsKICAgICAKKyAgICBSVU4odGVzdE1lbW9y
eUZlbmNlKCkpOworICAgIFJVTih0ZXN0U3RvcmVGZW5jZSgpKTsKKyAgICBSVU4odGVzdExvYWRG
ZW5jZSgpKTsKKyAgICBSVU4odGVzdFRyYXBwaW5nTG9hZCgpKTsKKyAgICBSVU4odGVzdFRyYXBw
aW5nU3RvcmUoKSk7CisgICAgUlVOKHRlc3RUcmFwcGluZ0xvYWRBZGRTdG9yZSgpKTsKKyAgICBS
VU4odGVzdFRyYXBwaW5nTG9hZERDRSgpKTsKKyAgICBSVU4odGVzdFRyYXBwaW5nU3RvcmVFbGlt
aW5hdGlvbigpKTsKKyAgICBSVU4odGVzdE1vdmVDb25zdGFudHMoKSk7CisgICAgUlVOKHRlc3RQ
Q09yaWdpbk1hcERvZXNudEluc2VydE5vcHMoKSk7CisgICAgUlVOKHRlc3RQaW5SZWdpc3RlcnMo
KSk7CisgICAgCiAgICAgaWYgKGlzWDg2KCkpIHsKICAgICAgICAgUlVOKHRlc3RCcmFuY2hCaXRB
bmRJbW1GdXNpb24oSWRlbnRpdHksIEludDY0LCAxLCBBaXI6OkJyYW5jaFRlc3QzMiwgQWlyOjpB
cmc6OlRtcCkpOwogICAgICAgICBSVU4odGVzdEJyYW5jaEJpdEFuZEltbUZ1c2lvbihJZGVudGl0
eSwgSW50NjQsIDB4ZmYsIEFpcjo6QnJhbmNoVGVzdDMyLCBBaXI6OkFyZzo6VG1wKSk7CkBAIC0x
NDgxMCw3ICsxNDg0Myw3IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICAgICAg
UlVOKHRlc3RCcmFuY2hCaXRBbmRJbW1GdXNpb24oTG9hZDhaLCBJbnQzMiwgMSwgQWlyOjpCcmFu
Y2hUZXN0OCwgQWlyOjpBcmc6OkFkZHIpKTsKICAgICAgICAgUlVOKHRlc3RCcmFuY2hCaXRBbmRJ
bW1GdXNpb24oTG9hZCwgSW50MzIsIDEsIEFpcjo6QnJhbmNoVGVzdDMyLCBBaXI6OkFyZzo6QWRk
cikpOwogICAgICAgICBSVU4odGVzdEJyYW5jaEJpdEFuZEltbUZ1c2lvbihMb2FkLCBJbnQ2NCwg
MSwgQWlyOjpCcmFuY2hUZXN0MzIsIEFpcjo6QXJnOjpBZGRyKSk7Ci0gICAgICAgIAorICAgICAg
ICBSVU4odGVzdFg4NkxlYSgpKTsKICAgICB9CiAKICAgICBpZiAoaXNBUk02NCgpKSB7CkBAIC0x
NDgxOCwxOCArMTQ4NTEsNiBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgICAg
IFJVTih0ZXN0VGVybmFyeVN1Ykluc3RydWN0aW9uU2VsZWN0aW9uKFRydW5jLCBJbnQzMiwgQWly
OjpTdWIzMikpOwogICAgIH0KIAotICAgIFJVTih0ZXN0TWVtb3J5RmVuY2UoKSk7Ci0gICAgUlVO
KHRlc3RTdG9yZUZlbmNlKCkpOwotICAgIFJVTih0ZXN0TG9hZEZlbmNlKCkpOwotICAgIFJVTih0
ZXN0VHJhcHBpbmdMb2FkKCkpOwotICAgIFJVTih0ZXN0VHJhcHBpbmdTdG9yZSgpKTsKLSAgICBS
VU4odGVzdFRyYXBwaW5nTG9hZEFkZFN0b3JlKCkpOwotICAgIFJVTih0ZXN0VHJhcHBpbmdMb2Fk
RENFKCkpOwotICAgIFJVTih0ZXN0VHJhcHBpbmdTdG9yZUVsaW1pbmF0aW9uKCkpOwotICAgIFJV
Tih0ZXN0TW92ZUNvbnN0YW50cygpKTsKLSAgICBSVU4odGVzdFBDT3JpZ2luTWFwRG9lc250SW5z
ZXJ0Tm9wcygpKTsKLSAgICBSVU4odGVzdFBpblJlZ2lzdGVycygpKTsKLSAgICAKICAgICBpZiAo
dGFza3MuaXNFbXB0eSgpKQogICAgICAgICB1c2FnZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDIwNzAwNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtp
bmcgY29weSkKQEAgLTMwMCw4ICszMDAsMTMgQEAgeDg2OiBYODZEaXYzMiBVWkQ6RzozMiwgVVpE
Okc6MzIsIFU6RzozMgogeDg2XzY0OiBYODZEaXY2NCBVWkQ6Rzo2NCwgVVpEOkc6NjQsIFU6Rzo2
NAogICAgIFRtcCosIFRtcCosIFRtcAogCi1MZWEgVUE6RzpQdHIsIEQ6RzpQdHIKK0xlYTMyIFVB
Okc6MzIsIEQ6RzozMgogICAgIEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcCBhcyB4ODZM
ZWEzMgorCitMZWE2NCBVQTpHOjY0LCBEOkc6NjQKKyAgICBBZGRyLCBUbXAKKyAgICB4ODY6IElu
ZGV4LCBUbXAgYXMgeDg2TGVhNjQKIAogQW5kMzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKICAg
ICBUbXAsIFRtcCwgVG1wCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291166</attachid>
            <date>2016-10-10 14:38:25 -0700</date>
            <delta_ts>2016-10-10 14:42:17 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25772</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3MDI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBA
CisyMDE2LTEwLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMtPkFpciBsb3dlcmluZyBzaG91bGQgYmUgYWJsZSB0byBlbWl0IGNvbXBsZXggbGVhcyBvbiB4
ODYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzIz
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBhZGRzIGNvbXByZWhlbnNpdmUgc3VwcG9ydCBmb3IgZW1pdHRpbmcgbGVhIG9uIHg4
Ni4KKyAgICAgICAgCisgICAgICAgIFdoZW4gYWRkaW5nIHRoaXMsIEkgZm91bmQgdGhhdCBpdCB3
YXMgdXNlZnVsIHRvIGFsc28gZmluYWxseSBhZGQgbW9yZSByZWFzc29jaWF0aW9uLiBUaGF0Cisg
ICAgICAgIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBwYXR0ZXJucyB0aGF0IHRoZSBpbnN0cnVjdGlv
biBzZWxlY3RvciBoYXMgdG8gZGVhbCB3aXRoLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpsZWEzMik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpsZWE2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyOjpsZWEpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNvbW1pdEludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5QXBwZW5kTGVhKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjpjcmVhdGVTZWxlY3QpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzUmVkdWNl
U3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL0IzVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM1Zh
bHVlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzUmVwcmVzZW50YWJsZUFz
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpyZXByZXNlbnRhYmxlQXMpOiBEZWxldGVkLgor
ICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy90ZXN0YjMu
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6Y2hlY2tEaXNhc3NlbWJseSk6CisgICAgICAgIChKU0M6
OkIzOjpjaGVja1VzZXNJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpjaGVja0RvZXNO
b3RVc2VJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2TGVhQWRkQWRkU2hs
MSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2TGVhQWRkQWRkU2hsMik6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0WDg2TGVhQWRkQWRkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RYODZMZWFB
ZGRTaGwxKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RYODZMZWFBZGRTaGwyKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RSZWR1Y2VTdHJlbmd0aFJlYXNzb2NpYXRpb24pOgorICAgICAgICAoSlND
OjpCMzo6cnVuKToKKwogMjAxNi0xMC0xMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmVuYW1lIHRoZSBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3Igc3RyaW5nIHRvIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24g
MjA3MDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU4LDkgKzEzNTgsMTQgQEAgcHVibGljOgogICAgIH0K
ICNlbmRpZgogCi0gICAgdm9pZCBsZWEoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgdm9pZCBsZWEzMihBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7
Ci0gICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBhZGRyZXNzLmJh
c2UsIGRlc3QpOworICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBh
ZGRyZXNzLmJhc2UsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgbGVhNjQoQWRkcmVzcyBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBhZGQ2NChUcnVzdGVkSW1tMzIo
YWRkcmVzcy5vZmZzZXQpLCBhZGRyZXNzLmJhc2UsIGRlc3QpOwogICAgIH0KIAogICAgIGJvb2wg
c2hvdWxkQmxpbmQoSW1tMzIgaW1tKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDIwNzAwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTksNyArMzk5LDggQEAg
cHJpdmF0ZToKICAgICAvLyBzaG9ydCwgeW91IHNob3VsZCBhdm9pZCB0aGlzIGJ5IHVzaW5nIHRo
ZSBwYXR0ZXJuIG1hdGNoZXIgdG8gbWF0Y2ggcGF0dGVybnMuCiAgICAgdm9pZCBjb21taXRJbnRl
cm5hbChWYWx1ZSogdmFsdWUpCiAgICAgewotICAgICAgICBtX2xvY2tlZC5hZGQodmFsdWUpOwor
ICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBtX2xvY2tlZC5hZGQodmFsdWUpOwogICAg
IH0KIAogICAgIGJvb2wgY3Jvc3Nlc0ludGVyZmVyZW5jZShWYWx1ZSogdmFsdWUpCkBAIC0xNzk4
LDYgKzE3OTksMTQ0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgZmFs
c2UpOwogICAgIH0KKyAgICAKKyAgICBib29sIHRyeUFwcGVuZExlYSgpCisgICAgeworICAgICAg
ICBBaXI6Ok9wY29kZSBsZWFPcGNvZGUgPSB0cnlPcGNvZGVGb3JUeXBlKExlYTMyLCBMZWE2NCwg
bV92YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShsZWFPcGNvZGUsIEFy
Zzo6SW5kZXgsIEFyZzo6VG1wKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIC8vIFRoaXMgbGV0cyB1cyB0dXJuIHRoaW5ncyBsaWtlIHRoaXM6CisgICAgICAg
IC8vCisgICAgICAgIC8vICAgICBBZGQoQWRkKEB4LCBTaGwoQHksICQyKSksICQxMDApCisgICAg
ICAgIC8vCisgICAgICAgIC8vIEludG8gdGhpczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAg
IGxlYSAxMDAoJXJkaSwlc2ksMiksICVyYXgKKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgaGF2
ZSBhIGNob2ljZSBoZXJlIGJldHdlZW4gY29tbWl0dGluZyB0aGUgaW50ZXJuYWwgYml0cyBvZiBh
biBpbmRleCBvciBzaGFyaW5nCisgICAgICAgIC8vIHRoZW0uIFRoZXJlIGFyZSBzb2xpZCBhcmd1
bWVudHMgZm9yIGJvdGguCisgICAgICAgIC8vCisgICAgICAgIC8vIFNoYXJpbmc6IFRoZSB3b3Jk
IG9uIHRoZSBzdHJlZXQgaXMgdGhhdCB0aGUgY29zdCBvZiBhIGxlYSBpcyBvbmUgY3ljbGUgbm8g
bWF0dGVyCisgICAgICAgIC8vIHdoYXQgaXQgZG9lcy4gRXZlcnkgZXhwZXJpbWVudCBJJ3ZlIGV2
ZXIgc2VlbiBzZWVtcyB0byBjb25maXJtIHRoaXMuIFNvLCBzaGFyaW5nCisgICAgICAgIC8vIGhl
bHBzIHVzIGluIHNpdHVhdGlvbnMgd2hlcmUgV2FzbSBpbnB1dCBkaWQgdGhpczoKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gICAgIHggPSBhW2ldLng7CisgICAgICAgIC8vICAgICB5ID0gYVtpXS55
OworICAgICAgICAvLworICAgICAgICAvLyBXaXRoIHNoYXJpbmcgd2Ugd291bGQgZG86CisgICAg
ICAgIC8vCisgICAgICAgIC8vICAgICBsZWFsICglYSwlaSw0KSwgJXRtcAorICAgICAgICAvLyAg
ICAgY21wICglc2l6ZSwgJXRtcCkKKyAgICAgICAgLy8gICAgIGphIF9mYWlsCisgICAgICAgIC8v
ICAgICBtb3ZsICglYmFzZSwgJXRtcCksICV4CisgICAgICAgIC8vICAgICBsZWFsIDQoJWEsJWks
NCksICV0bXAKKyAgICAgICAgLy8gICAgIGNtcCAoJXNpemUsICV0bXApCisgICAgICAgIC8vICAg
ICBqYSBfZmFpbAorICAgICAgICAvLyAgICAgbW92bCAoJWJhc2UsICV0bXApLCAleQorICAgICAg
ICAvLworICAgICAgICAvLyBJbiB0aGUgYWJzZW5jZSBvZiBzaGFyaW5nLCB3ZSBtYXkgZmluZCBv
dXJzZWx2ZXMgbmVlZGluZyBzZXBhcmF0ZSByZWdpc3RlcnMgZm9yCisgICAgICAgIC8vIHRoZSBp
bm5hcmRzIG9mIHRoZSBpbmRleC4gVGhhdCdzIHJlbGF0aXZlbHkgdW5saWtlbHkgdG8gYmUgYSB0
aGluZyBkdWUgdG8gb3RoZXIKKyAgICAgICAgLy8gb3B0aW1pemF0aW9ucyB0aGF0IHdlIGFscmVh
ZHkgaGF2ZSwgYnV0IGl0IGNvdWxkIGhhcHBlbgorICAgICAgICAvLworICAgICAgICAvLyBDb21t
aXR0aW5nOiBUaGUgd29yc3QgY2FzZSBpcyB0aGF0IHRoZXJlIGlzIGEgY29tcGxpY2F0ZWQgZ3Jh
cGggb2YgYWRkaXRpb25zIGFuZAorICAgICAgICAvLyBzaGlmdHMsIHdoZXJlIGVhY2ggdmFsdWUg
aGFzIG11bHRpcGxlIHVzZXMuIEluIHRoYXQgY2FzZSwgaXQncyBiZXR0ZXIgdG8gY29tcHV0ZQor
ICAgICAgICAvLyBlYWNoIG9uZSBzZXBhcmF0ZWx5IGZyb20gdGhlIG90aGVycyBzaW5jZSB0aGF0
IHdheSwgZWFjaCBjYWxjdWxhdGlvbiB3aWxsIHVzZSBhCisgICAgICAgIC8vIHJlbGF0aXZlbHkg
bmVhcmJ5IHRtcCBhcyBpdHMgaW5wdXQuIFRoYXQgc2VlbXMgdW5jb21tb24sIGJ1dCBpbiB0aG9z
ZSBjYXNlcywKKyAgICAgICAgLy8gY29tbWl0dGluZyBpcyBhIGNsZWFyIHdpbm5lcjogaXQgd291
bGQgcmVzdWx0IGluIGEgc2ltcGxlIGludGVyZmVyZW5jZSBncmFwaAorICAgICAgICAvLyB3aGls
ZSBzaGFyaW5nIHdvdWxkIHJlc3VsdCBpbiBhIGNvbXBsZXggb25lLiBJbnRlcmZlcmVuY2Ugc3Vj
a3MgYmVjYXVzZSBpdCBtZWFucworICAgICAgICAvLyBtb3JlIHRpbWUgaW4gSVJDIGFuZCBpdCBt
ZWFucyB3b3JzZSBjb2RlLgorICAgICAgICAvLworICAgICAgICAvLyBJdCdzIG5vdCBzdXBlciBj
bGVhciBpZiBhbnkgb2YgdGhlc2UgY29ybmVyIGNhc2VzIHdvdWxkIGV2ZXIgYXJpc2UuIENvbW1p
dHRpbmcKKyAgICAgICAgLy8gaGFzIHRoZSBiZW5lZml0IHRoYXQgaXQncyBlYXNpZXIgdG8gcmVh
c29uIGFib3V0LCBhbmQgcHJvdGVjdHMgYSBtdWNoIGRhcmtlcgorICAgICAgICAvLyBjb3JuZXIg
Y2FzZSAobW9yZSBpbnRlcmZlcmVuY2UpLgorICAgICAgICAgICAgICAgIAorICAgICAgICAvLyBI
ZXJlIGFyZSB0aGUgdGhpbmdzIHdlIHdhbnQgdG8gbWF0Y2g6CisgICAgICAgIC8vIEFkZChBZGQo
QHgsIEB5KSwgJGMpCisgICAgICAgIC8vIEFkZChTaGwoQHgsICRjKSwgQHkpCisgICAgICAgIC8v
IEFkZChAeCwgU2hsKEB5LCAkYykpCisgICAgICAgIC8vIEFkZChBZGQoQHgsIFNobChAeSwgJGMp
KSwgJGQpCisgICAgICAgIC8vIEFkZChBZGQoU2hsKEB4LCAkYyksIEB5KSwgJGQpCisgICAgICAg
IC8vCisgICAgICAgIC8vIE5vdGUgdGhhdCBpZiB5b3UgZG8gQWRkKFNobChAeCwgJGMpLCAkZCkg
dGhlbiB3ZSB3aWxsIHRyZWF0ICRkIGFzIGEgbm9uLWNvbnN0YW50IGFuZAorICAgICAgICAvLyBm
b3JjZSBpdCB0byBtYXRlcmlhbGl6ZS4gWW91J2xsIGdldCBzb21ldGhpbmcgbGlrZSB0aGlzOgor
ICAgICAgICAvLworICAgICAgICAvLyBtb3ZsICRkLCAldG1wCisgICAgICAgIC8vIGxlYWwgKCV0
bXAsJXgsYyksICVyZXN1bHQKKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2hpY2ggaXMgcHJldHR5
IGNsb3NlIHRvIG9wdGltYWwgYW5kIGhhcyB0aGUgbmljZSBlZmZlY3Qgb2YgYmVpbmcgYWJsZSB0
byBoYW5kbGUgbGFyZ2UKKyAgICAgICAgLy8gY29uc3RhbnRzIGdyYWNlZnVsbHkuCisgICAgICAg
IAorICAgICAgICBWYWx1ZSogaW5uZXJBZGQgPSBudWxscHRyOworICAgICAgICAKKyAgICAgICAg
VmFsdWUqIHZhbHVlID0gbV92YWx1ZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlJ3JlIGdvaW5n
IHRvIGNvbnN1bWUgQWRkKEFkZChfKSwgJGMpLiBJZiB3ZSBzdWNjZWVkIGF0IGNvbnN1bWluZyBp
dCB0aGVuIHdlIGhhdmUgdGhlc2UKKyAgICAgICAgLy8gcGF0dGVybnMgbGVmdCAoaS5lLiBpbiB0
aGUgQWRkKF8pKToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWRkKEFkZChAeCwgQHkpLCAkYykK
KyAgICAgICAgLy8gQWRkKEFkZChAeCwgU2hsKEB5LCAkYykpLCAkZCkKKyAgICAgICAgLy8gQWRk
KEFkZChTaGwoQHgsICRjKSwgQHkpLCAkZCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3RoZXJ3
aXNlIHdlIGFyZSBsb29raW5nIGF0IHRoZXNlIHBhdHRlcm5zOgorICAgICAgICAvLworICAgICAg
ICAvLyBBZGQoU2hsKEB4LCAkYyksIEB5KQorICAgICAgICAvLyBBZGQoQHgsIFNobChAeSwgJGMp
KQorICAgICAgICAvLworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHN1YnNlcXVlbnQg
Y29kZSBvbmx5IGhhcyB0byB3b3JyeSBhYm91dCB0aHJlZSBwYXR0ZXJuczoKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gQWRkKFNobChAeCwgJGMpLCBAeSkKKyAgICAgICAgLy8gQWRkKEB4LCBTaGwo
QHksICRjKSkKKyAgICAgICAgLy8gQWRkKEB4LCBAeSkgKG9ubHkgaWYgb2Zmc2V0ICE9IDApCisg
ICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsKKyAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+
aXNSZXByZXNlbnRhYmxlQXM8aW50MzJfdD4oKQorICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5h
bCh2YWx1ZS0+Y2hpbGQoMCkpCisgICAgICAgICAgICAmJiB2YWx1ZS0+Y2hpbGQoMCktPm9wY29k
ZSgpID09IEFkZCkgeworICAgICAgICAgICAgaW5uZXJBZGQgPSB2YWx1ZS0+Y2hpbGQoMCk7Cisg
ICAgICAgICAgICBvZmZzZXQgPSB2YWx1ZS0+Y2hpbGQoMSktPmFzSW50MzIoKTsKKyAgICAgICAg
ICAgIHZhbHVlID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBhdXRvIHRyeVNobCA9IFsmXSAoVmFsdWUqIHNobCwgVmFsdWUqIG90aGVyKSAtPiBib29sIHsK
KyAgICAgICAgICAgIGlmIChzaGwtPm9wY29kZSgpICE9IFNobCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNhbkJlSW50ZXJuYWwoc2hsKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIXNobC0+Y2hpbGQoMSkt
Pmhhc0ludDMyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
dW5zaWduZWQgbG9nU2NhbGUgPSBzaGwtPmNoaWxkKDEpLT5hc0ludDMyKCk7CisgICAgICAgICAg
ICBpZiAobV92YWx1ZS0+dHlwZSgpID09IEludDMyKQorICAgICAgICAgICAgICAgIGxvZ1NjYWxl
ICY9IDMxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvZ1NjYWxlICY9IDYz
OworICAgICAgICAgICAgdW5zaWduZWQgc2NhbGUgPSAxIDw8IGxvZ1NjYWxlOworICAgICAgICAg
ICAgaWYgKCFBcmc6OmlzVmFsaWRJbmRleEZvcm0oc2NhbGUsIG9mZnNldCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQoIW1f
bG9ja2VkLmNvbnRhaW5zKHNobC0+Y2hpbGQoMCkpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9s
b2NrZWQuY29udGFpbnMob3RoZXIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5k
KGxlYU9wY29kZSwgQXJnOjppbmRleCh0bXAob3RoZXIpLCB0bXAoc2hsLT5jaGlsZCgwKSksIHNj
YWxlLCBvZmZzZXQpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwo
aW5uZXJBZGQpOworICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoc2hsKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAgaWYgKHRyeVNobCh2
YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGlsZCgxKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKHRyeVNobCh2YWx1ZS0+Y2hpbGQoMSksIHZhbHVlLT5jaGlsZCgwKSkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSByZW1h
aW5pbmcgcGF0dGVybiBpcyBqdXN0OgorICAgICAgICAvLyBBZGQoQHgsIEB5KSAob25seSBpZiBv
ZmZzZXQgIT0gMCkKKyAgICAgICAgaWYgKCFvZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIEFTU0VSVCghbV9sb2NrZWQuY29udGFpbnModmFsdWUtPmNoaWxkKDApKSk7
CisgICAgICAgIEFTU0VSVCghbV9sb2NrZWQuY29udGFpbnModmFsdWUtPmNoaWxkKDEpKSk7Cisg
ICAgICAgIGFwcGVuZChsZWFPcGNvZGUsIEFyZzo6aW5kZXgodG1wKHZhbHVlLT5jaGlsZCgwKSks
IHRtcCh2YWx1ZS0+Y2hpbGQoMSkpLCAxLCBvZmZzZXQpLCB0bXAobV92YWx1ZSkpOworICAgICAg
ICBjb21taXRJbnRlcm5hbChpbm5lckFkZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
IAogICAgIHZvaWQgbG93ZXIoKQogICAgIHsKQEAgLTE4MzQsOSArMTk3MywxMSBAQCBwcml2YXRl
OgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBZGQ6IHsKKyAgICAgICAgICAgIGlmICh0cnlB
cHBlbmRMZWEoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKICAgICAg
ICAgICAgIEFpcjo6T3Bjb2RlIG11bHRpcGx5QWRkT3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShN
dWx0aXBseUFkZDMyLCBNdWx0aXBseUFkZDY0LCBtX3ZhbHVlLT50eXBlKCkpOwotICAgICAgICAg
ICAgaWYgKG11bHRpcGx5QWRkT3Bjb2RlICE9IEFpcjo6T29wcwotICAgICAgICAgICAgICAgICYm
IGlzVmFsaWRGb3JtKG11bHRpcGx5QWRkT3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6
VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShtdWx0aXBseUFk
ZE9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CiAgICAg
ICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKICAgICAgICAgICAg
ICAgICBWYWx1ZSogcmlnaHQgPSBtX3ZhbHVlLT5jaGlsZCgxKTsKICAgICAgICAgICAgICAgICBp
ZiAoIWltbShyaWdodCkgfHwgbV92YWx1ZVRvVG1wW3JpZ2h0XSkgewpAQCAtMTg0Niw3ICsxOTg3
LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG11bHRpcGx5
TGVmdCA9IGxlZnQtPmNoaWxkKDApOwogICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG11
bHRpcGx5UmlnaHQgPSBsZWZ0LT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2xvY2tlZC5jb250YWlucyhtdWx0aXBseUxlZnQpIHx8IG1fbG9ja2VkLmNvbnRhaW5zKG11
bHRpcGx5UmlnaHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbkJlSW50ZXJuYWwo
bXVsdGlwbHlMZWZ0KSB8fCBjYW5CZUludGVybmFsKG11bHRpcGx5UmlnaHQpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kKG11bHRpcGx5QWRkT3Bjb2RlLCB0bXAobXVsdGlwbHlMZWZ0KSwgdG1wKG11bHRp
cGx5UmlnaHQpLCB0bXAocmlnaHQpLCB0bXAobV92YWx1ZSkpOwpAQCAtMjIxNSw3ICsyMzU2LDcg
QEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNlIFNsb3RCYXNlOiB7CiAgICAgICAgICAgICBhcHBl
bmQoCi0gICAgICAgICAgICAgICAgTGVhLAorICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlKCkg
PT0gSW50NjQgPyBMZWE2NCA6IExlYTMyLAogICAgICAgICAgICAgICAgIEFyZzo6c3RhY2sobV9z
dGFja1RvU3RhY2suZ2V0KG1fdmFsdWUtPmFzPFNsb3RCYXNlVmFsdWU+KCktPnNsb3QoKSkpLAog
ICAgICAgICAgICAgICAgIHRtcChtX3ZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZp
c2lvbiAyMDcwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MiwxOSArNDgyLDU2IEBAIHByaXZhdGU6CiAgICAg
ICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2RlKCkpIHsKICAgICAgICAgY2FzZSBBZGQ6CiAgICAg
ICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogQWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBBZGQodmFsdWUsIGNvbnN0YW50MSArIGNvbnN0YW50MikKKyAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBZGQgJiYg
aXNJbnQobV92YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczog
QWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQorICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogQWRkKHZhbHVlLCBjb25zdGFudDEgKyBjb25zdGFudDIpCiAgICAgICAgICAg
ICAgICAgVmFsdWUqIG5ld1N1bSA9IG1fdmFsdWUtPmNoaWxkKDEpLT5hZGRDb25zdGFudChtX3By
b2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICAgICAgaWYgKG5l
d1N1bSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZSht
X2luZGV4LCBuZXdTdW0pOwogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+Y2hpbGQoMSkgPSBuZXdTdW07CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChBZGQodmFsdWUs
IGNvbnN0YW50KSwgb3RoZXJWYWx1ZSkKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFk
ZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25zdGFudCkKKyAgICAgICAgICAgICAgICBpZiAo
IW1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSktPmhhc0ludCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fdmFs
dWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNvbnN0
YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpOworICAgICAgICAgICAgICAgICAgICBW
YWx1ZSogb3RoZXJWYWx1ZSA9IG1fdmFsdWUtPmNoaWxkKDEpOworICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGNvdWxkIGNyZWF0ZSBkdXBsaWNhdGUgY29kZSBpZiBBZGQodmFsdWUsIGNvbnN0
YW50KSBpcyB1c2VkIGVsc2V3aGVyZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gSG93ZXZlciwg
d2UgYWxyZWFkeSBtb2RlbCBhZGRpbmcgYSBjb25zdGFudCBhcyBpZiBpdCB3YXMgZnJlZSBpbiBv
dGhlciBwbGFjZXMKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gbGV0J3MganVzdCByb2xsIHdp
dGggaXQuIFRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBtZWFuIGhhdmluZyB0byBkbyBnb29kIHVzZQor
ICAgICAgICAgICAgICAgICAgICAvLyBjb3VudHMsIHdoaWNoIHJlZHVjZVN0cmVuZ3RoKCkgY3Vy
cmVudGx5IGRvZXNuJ3QgaGF2ZS4KKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQo
MCkgPQorICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVl
PigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9y
aWdpbigpLCB2YWx1ZSwgb3RoZXJWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUt
PmNoaWxkKDEpID0gY29uc3RhbnQ7CisgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChv
dGhlclZhbHVlLCBBZGQodmFsdWUsIGNvbnN0YW50KSkKKyAgICAgICAgICAgIC8vIEludG8gdGhp
czogQWRkKEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSksIGNvbnN0YW50KQorICAgICAgICAgICAgaWYg
KGlzSW50KG1fdmFsdWUtPnR5cGUoKSkKKyAgICAgICAgICAgICAgICAmJiAhbV92YWx1ZS0+Y2hp
bGQoMCktPmhhc0ludCgpCisgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9w
Y29kZSgpID09IEFkZAorICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGls
ZCgxKS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVl
LT5jaGlsZCgxKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIGNvbnN0YW50ID0g
bV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIFZhbHVlKiBvdGhl
clZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjcmVh
dGVzIGEgZHVwbGljYXRlIGFkZC4gVGhhdCdzIGRhbmdlcm91cyBidXQgcHJvYmFibHkgZmluZSwg
c2VlIGFib3ZlLgorICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0KKyAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5kZXgsIEFkZCwgbV92YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBvdGhlclZh
bHVlKTsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IGNvbnN0YW50OworICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRk
KGNvbnN0YW50MSwgY29uc3RhbnQyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFu
dDEgKyBjb25zdGFudDIKICAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnRBZGQgPSBtX3Zh
bHVlLT5jaGlsZCgwKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMjA3MDA0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjI1
LDcgKzIyNSw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCBhc0Zsb2F0KCkgY29uc3Q7CiAKICAgICBi
b29sIGhhc051bWJlcigpIGNvbnN0OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgcmVw
cmVzZW50YWJsZUFzKCkgY29uc3Q7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBpc1Jl
cHJlc2VudGFibGVBcygpIGNvbnN0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgYXNOdW1i
ZXIoKSBjb25zdDsKIAogICAgIC8vIEJvb2xlYW5zIGluIEIzIGFyZSBDb25zdDMyKDApIG9yIENv
bnN0MzIoMSkuIFNvIHRoaXMgaXMgdHJ1ZSBpZiB0aGUgdHlwZSBpcyBJbnQzMiBhbmQgdGhlIG9u
bHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZp
c2lvbiAyMDcwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDE3ICsxODYsMTcgQEAgaW5saW5lIGJvb2wgVmFsdWU6
OmlzTmVnYXRpdmVaZXJvKCkgY29ucwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5l
IGJvb2wgVmFsdWU6OnJlcHJlc2VudGFibGVBcygpIGNvbnN0CitpbmxpbmUgYm9vbCBWYWx1ZTo6
aXNSZXByZXNlbnRhYmxlQXMoKSBjb25zdAogewogICAgIHN3aXRjaCAob3Bjb2RlKCkpIHsKICAg
ICBjYXNlIENvbnN0MzI6Ci0gICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczxUPihhc0lu
dDMyKCkpOworICAgICAgICByZXR1cm4gQjM6OmlzUmVwcmVzZW50YWJsZUFzPFQ+KGFzSW50MzIo
KSk7CiAgICAgY2FzZSBDb25zdDY0OgotICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8
VD4oYXNJbnQ2NCgpKTsKKyAgICAgICAgcmV0dXJuIEIzOjppc1JlcHJlc2VudGFibGVBczxUPihh
c0ludDY0KCkpOwogICAgIGNhc2UgQ29uc3REb3VibGU6Ci0gICAgICAgIHJldHVybiBpc1JlcHJl
c2VudGFibGVBczxUPihhc0RvdWJsZSgpKTsKKyAgICAgICAgcmV0dXJuIEIzOjppc1JlcHJlc2Vu
dGFibGVBczxUPihhc0RvdWJsZSgpKTsKICAgICBjYXNlIENvbnN0RmxvYXQ6Ci0gICAgICAgIHJl
dHVybiBpc1JlcHJlc2VudGFibGVBczxUPihhc0Zsb2F0KCkpOworICAgICAgICByZXR1cm4gQjM6
OmlzUmVwcmVzZW50YWJsZUFzPFQ+KGFzRmxvYXQoKSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
CShyZXZpc2lvbiAyMDcwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDI4ICsxNTQsMzcgQEAgdm9pZCBsb3dlclRvQWlyRm9y
VGVzdGluZyhQcm9jZWR1cmUmIHBybwogICAgIEFpcjo6dmFsaWRhdGUocHJvYy5jb2RlKCkpOwog
fQogCi12b2lkIGNoZWNrVXNlc0luc3RydWN0aW9uKENvbXBpbGF0aW9uJiBjb21waWxhdGlvbiwg
Y29uc3QgY2hhciogdGV4dCkKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGNoZWNrRGlz
YXNzZW1ibHkoQ29tcGlsYXRpb24mIGNvbXBpbGF0aW9uLCBjb25zdCBGdW5jJiBmdW5jLCBDU3Ry
aW5nIGZhaWxUZXh0KQogewogICAgIENTdHJpbmcgZGlzYXNzZW1ibHkgPSBjb21waWxhdGlvbi5k
aXNhc3NlbWJseSgpOwotICAgIGlmIChzdHJzdHIoZGlzYXNzZW1ibHkuZGF0YSgpLCB0ZXh0KSkK
KyAgICBpZiAoZnVuYyhkaXNhc3NlbWJseS5kYXRhKCkpKQogICAgICAgICByZXR1cm47Ci0KKyAg
ICAKICAgICBjcmFzaExvY2subG9jaygpOwotICAgIGRhdGFMb2coIkJhZCBsb3dlcmluZyEgIEV4
cGVjdGVkIHRvIGZpbmQgIiwgdGV4dCwgIiBidXQgZGlkbid0OlxuIik7CisgICAgZGF0YUxvZygi
QmFkIGxvd2VyaW5nISAgIiwgZmFpbFRleHQsICJcbiIpOwogICAgIGRhdGFMb2coZGlzYXNzZW1i
bHkpOwogICAgIENSQVNIKCk7CiB9CiAKLXZvaWQgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24o
Q29tcGlsYXRpb24mIGNvbXBpbGF0aW9uLCBjb25zdCBjaGFyKiB0ZXh0KQordm9pZCBjaGVja1Vz
ZXNJbnN0cnVjdGlvbihDb21waWxhdGlvbiYgY29tcGlsYXRpb24sIGNvbnN0IGNoYXIqIHRleHQp
CiB7Ci0gICAgQ1N0cmluZyBkaXNhc3NlbWJseSA9IGNvbXBpbGF0aW9uLmRpc2Fzc2VtYmx5KCk7
Ci0gICAgaWYgKCFzdHJzdHIoZGlzYXNzZW1ibHkuZGF0YSgpLCB0ZXh0KSkKLSAgICAgICAgcmV0
dXJuOworICAgIGNoZWNrRGlzYXNzZW1ibHkoCisgICAgICAgIGNvbXBpbGF0aW9uLAorICAgICAg
ICBbJl0gKGNvbnN0IGNoYXIqIGRpc2Fzc2VtYmx5KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJl
dHVybiBzdHJzdHIoZGlzYXNzZW1ibHksIHRleHQpOworICAgICAgICB9LAorICAgICAgICB0b0NT
dHJpbmcoIkV4cGVjdGVkIHRvIGZpbmQgIiwgdGV4dCwgIiBidXQgZGlkbnQhIikpOworfQogCi0g
ICAgY3Jhc2hMb2NrLmxvY2soKTsKLSAgICBkYXRhTG9nKCJCYWQgbG93ZXJpbmchICBEaWQgbm90
IGV4cGVjdGVkIHRvIGZpbmQgIiwgdGV4dCwgIiBidXQgaXQncyB0aGVyZTpcbiIpOwotICAgIGRh
dGFMb2coZGlzYXNzZW1ibHkpOwotICAgIENSQVNIKCk7Cit2b2lkIGNoZWNrRG9lc05vdFVzZUlu
c3RydWN0aW9uKENvbXBpbGF0aW9uJiBjb21waWxhdGlvbiwgY29uc3QgY2hhciogdGV4dCkKK3sK
KyAgICBjaGVja0Rpc2Fzc2VtYmx5KAorICAgICAgICBjb21waWxhdGlvbiwKKyAgICAgICAgWyZd
IChjb25zdCBjaGFyKiBkaXNhc3NlbWJseSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4g
IXN0cnN0cihkaXNhc3NlbWJseSwgdGV4dCk7CisgICAgICAgIH0sCisgICAgICAgIHRvQ1N0cmlu
ZygiRGlkIG5vdCBleHBlY3RlZCB0byBmaW5kICIsIHRleHQsICIgYnV0IGl0J3MgdGhlcmUhIikp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgpAQCAtMTMzODEsNiArMTMzOTAsMTU4IEBA
IHZvaWQgdGVzdFBpblJlZ2lzdGVycygpCiAgICAgZ28oZmFsc2UpOwogfQogCit2b2lkIHRlc3RY
ODZMZWFBZGRBZGRTaGwxKCkKK3sKKyAgICAvLyBBZGQoQWRkKFNobChAeCwgJGMpLCBAeSksICRk
KQorICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBTaGwsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMikpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAxMDApKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CisgICAgCisgICAgYXV0byBjb2RlID0gY29tcGlsZShw
cm9jKTsKKyAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxlYSAweDY0KCVyZGksJXJz
aSw0KSwgJXJheCIpOworICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIp
LCAoMSArICgyIDw8IDIpKSArIDEwMCk7Cit9CisKK3ZvaWQgdGVzdFg4NkxlYUFkZEFkZFNobDIo
KQoreworICAgIC8vIEFkZChBZGQoQHgsIFNobChAeSwgJGMpKSwgJGQpCisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1
ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgQWRkLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFNobCwg
T3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAorICAgICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAyKSkpLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEw
MCkpOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
cmVzdWx0KTsKKyAgICAKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGNoZWNr
VXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGVhIDB4NjQoJXJkaSwlcnNpLDQpLCAlcmF4Iik7Cisg
ICAgQ0hFQ0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksICgxICsgKDIgPDwgMikp
ICsgMTAwKTsKK30KKwordm9pZCB0ZXN0WDg2TGVhQWRkQWRkKCkKK3sKKyAgICAvLyBBZGQoQWRk
KEB4LCBAeSksICRjKQorICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMDApKTsK
KyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3Vs
dCk7CisgICAgCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBjaGVja0Rpc2Fz
c2VtYmx5KAorICAgICAgICAqY29kZSwKKyAgICAgICAgWyZdIChjb25zdCBjaGFyKiBkaXNhc3Nl
bWJseSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gc3Ryc3RyKGRpc2Fzc2VtYmx5LCAi
bGVhIDB4NjQoJXJkaSwlcnNpKSwgJXJheCIpCisgICAgICAgICAgICAgICAgfHwgc3Ryc3RyKGRp
c2Fzc2VtYmx5LCAibGVhIDB4NjQoJXJzaSwlcmRpKSwgJXJheCIpOworICAgICAgICB9LAorICAg
ICAgICAiRXhwZWN0ZWQgdG8gZmluZCBzb21ldGhpbmcgbGlrZSBsZWEgMHg2NCglcmRpLCVyc2kp
LCAlcmF4IGJ1dCBkaWRuJ3QhIik7CisgICAgQ0hFQ0tfRVEoaW52b2tlPGludHB0cl90PigqY29k
ZSwgMSwgMiksICgxICsgMikgKyAxMDApOworfQorCit2b2lkIHRlc3RYODZMZWFBZGRTaGwxKCkK
K3sKKyAgICAvLyBBZGQoU2hsKEB4LCAkYyksIEB5KQorICAgIFByb2NlZHVyZSBwcm9jOworICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIHJlc3VsdCA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTaGwsIE9y
aWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDIpKSwKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwg
T3JpZ2luKCksIHJlc3VsdCk7CisgICAgCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsK
KyAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxlYSAoJXJkaSwlcnNpLDQpLCAlcmF4
Iik7CisgICAgQ0hFQ0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksIDEgKyAoMiA8
PCAyKSk7Cit9CisKK3ZvaWQgdGVzdFg4NkxlYUFkZFNobDIoKQoreworICAgIC8vIEFkZChTaGwo
QHgsICRjKSwgQHkpCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywg
U2hsLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAyKSkpOworICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsK
KyAgICAKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGNoZWNrVXNlc0luc3Ry
dWN0aW9uKCpjb2RlLCAibGVhICglcmRpLCVyc2ksNCksICVyYXgiKTsKKyAgICBDSEVDS19FUShp
bnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8IDIpKTsKK30KKwordm9pZCB0
ZXN0UmVkdWNlU3RyZW5ndGhSZWFzc29jaWF0aW9uKGJvb2wgZmxpcCkKK3sKKyAgICAvLyBBZGQo
QWRkKEB4LCAkYyksIEB5KSAtPiBBZGQoQWRkKEB4LCBAeSksICRjKQorICAgIC8vIGFuZAorICAg
IC8vIEFkZChAeSwgQWRkKEB4LCAkYykpIC0+IEFkZChBZGQoQHgsIEB5KSwgJGMpCisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICAKKyAgICBWYWx1ZSogaW5uZXJBZGQgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLCBhcmcxLAorICAgICAgICByb290
LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQyKSk7CisgICAgCisg
ICAgVmFsdWUqIG91dGVyQWRkOworICAgIGlmIChmbGlwKQorICAgICAgICBvdXRlckFkZCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYXJnMiwgaW5uZXJBZGQp
OworICAgIGVsc2UKKyAgICAgICAgb3V0ZXJBZGQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEFkZCwgT3JpZ2luKCksIGlubmVyQWRkLCBhcmcyKTsKKyAgICAKKyAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIG91dGVyQWRkKTsKKyAgICAKKyAg
ICBwcm9jLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICBpZiAoc2hvdWxkQmVWZXJib3NlKCkp
IHsKKyAgICAgICAgZGF0YUxvZygiSVIgYmVmb3JlIHJlZHVjZVN0cmVuZ3RoOlxuIik7CisgICAg
ICAgIGRhdGFMb2cocHJvYyk7CisgICAgfQorICAgIAorICAgIHJlZHVjZVN0cmVuZ3RoKHByb2Mp
OworICAgIAorICAgIGlmIChzaG91bGRCZVZlcmJvc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJJ
UiBhZnRlciByZWR1Y2VTdHJlbmd0aDpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2MpOworICAg
IH0KKyAgICAKKyAgICBDSEVDS19FUShyb290LT5sYXN0KCktPm9wY29kZSgpLCBSZXR1cm4pOwor
ICAgIENIRUNLX0VRKHJvb3QtPmxhc3QoKS0+Y2hpbGQoMCktPm9wY29kZSgpLCBBZGQpOworICAg
IENIRUNLKHJvb3QtPmxhc3QoKS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc0ludFB0cig0MikpOwor
ICAgIENIRUNLX0VRKHJvb3QtPmxhc3QoKS0+Y2hpbGQoMCktPmNoaWxkKDApLT5vcGNvZGUoKSwg
QWRkKTsKKyAgICBDSEVDSygKKyAgICAgICAgKHJvb3QtPmxhc3QoKS0+Y2hpbGQoMCktPmNoaWxk
KDApLT5jaGlsZCgwKSA9PSBhcmcxICYmIHJvb3QtPmxhc3QoKS0+Y2hpbGQoMCktPmNoaWxkKDAp
LT5jaGlsZCgxKSA9PSBhcmcyKSB8fAorICAgICAgICAocm9vdC0+bGFzdCgpLT5jaGlsZCgwKS0+
Y2hpbGQoMCktPmNoaWxkKDApID09IGFyZzIgJiYgcm9vdC0+bGFzdCgpLT5jaGlsZCgwKS0+Y2hp
bGQoMCktPmNoaWxkKDEpID09IGFyZzEpKTsKK30KKwogLy8gTWFrZSBzdXJlIHRoZSBjb21waWxl
ciBkb2VzIG5vdCB0cnkgdG8gb3B0aW1pemUgYW55dGhpbmcgb3V0LgogTkVWRVJfSU5MSU5FIGRv
dWJsZSB6ZXJvKCkKIHsKQEAgLTE0ODAxLDYgKzE0OTYyLDIwIEBAIHZvaWQgcnVuKGNvbnN0IGNo
YXIqIGZpbHRlcikKICAgICBSVU4odGVzdFBhdGNocG9pbnRUZXJtaW5hbFJldHVyblZhbHVlKHRy
dWUpKTsKICAgICBSVU4odGVzdFBhdGNocG9pbnRUZXJtaW5hbFJldHVyblZhbHVlKGZhbHNlKSk7
CiAgICAgCisgICAgUlVOKHRlc3RNZW1vcnlGZW5jZSgpKTsKKyAgICBSVU4odGVzdFN0b3JlRmVu
Y2UoKSk7CisgICAgUlVOKHRlc3RMb2FkRmVuY2UoKSk7CisgICAgUlVOKHRlc3RUcmFwcGluZ0xv
YWQoKSk7CisgICAgUlVOKHRlc3RUcmFwcGluZ1N0b3JlKCkpOworICAgIFJVTih0ZXN0VHJhcHBp
bmdMb2FkQWRkU3RvcmUoKSk7CisgICAgUlVOKHRlc3RUcmFwcGluZ0xvYWREQ0UoKSk7CisgICAg
UlVOKHRlc3RUcmFwcGluZ1N0b3JlRWxpbWluYXRpb24oKSk7CisgICAgUlVOKHRlc3RNb3ZlQ29u
c3RhbnRzKCkpOworICAgIFJVTih0ZXN0UENPcmlnaW5NYXBEb2VzbnRJbnNlcnROb3BzKCkpOwor
ICAgIFJVTih0ZXN0UGluUmVnaXN0ZXJzKCkpOworICAgIFJVTih0ZXN0UmVkdWNlU3RyZW5ndGhS
ZWFzc29jaWF0aW9uKHRydWUpKTsKKyAgICBSVU4odGVzdFJlZHVjZVN0cmVuZ3RoUmVhc3NvY2lh
dGlvbihmYWxzZSkpOworICAgIAogICAgIGlmIChpc1g4NigpKSB7CiAgICAgICAgIFJVTih0ZXN0
QnJhbmNoQml0QW5kSW1tRnVzaW9uKElkZW50aXR5LCBJbnQ2NCwgMSwgQWlyOjpCcmFuY2hUZXN0
MzIsIEFpcjo6QXJnOjpUbXApKTsKICAgICAgICAgUlVOKHRlc3RCcmFuY2hCaXRBbmRJbW1GdXNp
b24oSWRlbnRpdHksIEludDY0LCAweGZmLCBBaXI6OkJyYW5jaFRlc3QzMiwgQWlyOjpBcmc6OlRt
cCkpOwpAQCAtMTQ4MTAsNyArMTQ5ODUsMTEgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVy
KQogICAgICAgICBSVU4odGVzdEJyYW5jaEJpdEFuZEltbUZ1c2lvbihMb2FkOFosIEludDMyLCAx
LCBBaXI6OkJyYW5jaFRlc3Q4LCBBaXI6OkFyZzo6QWRkcikpOwogICAgICAgICBSVU4odGVzdEJy
YW5jaEJpdEFuZEltbUZ1c2lvbihMb2FkLCBJbnQzMiwgMSwgQWlyOjpCcmFuY2hUZXN0MzIsIEFp
cjo6QXJnOjpBZGRyKSk7CiAgICAgICAgIFJVTih0ZXN0QnJhbmNoQml0QW5kSW1tRnVzaW9uKExv
YWQsIEludDY0LCAxLCBBaXI6OkJyYW5jaFRlc3QzMiwgQWlyOjpBcmc6OkFkZHIpKTsKLSAgICAg
ICAgCisgICAgICAgIFJVTih0ZXN0WDg2TGVhQWRkQWRkU2hsMSgpKTsKKyAgICAgICAgUlVOKHRl
c3RYODZMZWFBZGRBZGRTaGwyKCkpOworICAgICAgICBSVU4odGVzdFg4NkxlYUFkZEFkZCgpKTsK
KyAgICAgICAgUlVOKHRlc3RYODZMZWFBZGRTaGwxKCkpOworICAgICAgICBSVU4odGVzdFg4Nkxl
YUFkZFNobDIoKSk7CiAgICAgfQogCiAgICAgaWYgKGlzQVJNNjQoKSkgewpAQCAtMTQ4MTgsMTgg
KzE0OTk3LDYgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgICAgICBSVU4odGVz
dFRlcm5hcnlTdWJJbnN0cnVjdGlvblNlbGVjdGlvbihUcnVuYywgSW50MzIsIEFpcjo6U3ViMzIp
KTsKICAgICB9CiAKLSAgICBSVU4odGVzdE1lbW9yeUZlbmNlKCkpOwotICAgIFJVTih0ZXN0U3Rv
cmVGZW5jZSgpKTsKLSAgICBSVU4odGVzdExvYWRGZW5jZSgpKTsKLSAgICBSVU4odGVzdFRyYXBw
aW5nTG9hZCgpKTsKLSAgICBSVU4odGVzdFRyYXBwaW5nU3RvcmUoKSk7Ci0gICAgUlVOKHRlc3RU
cmFwcGluZ0xvYWRBZGRTdG9yZSgpKTsKLSAgICBSVU4odGVzdFRyYXBwaW5nTG9hZERDRSgpKTsK
LSAgICBSVU4odGVzdFRyYXBwaW5nU3RvcmVFbGltaW5hdGlvbigpKTsKLSAgICBSVU4odGVzdE1v
dmVDb25zdGFudHMoKSk7Ci0gICAgUlVOKHRlc3RQQ09yaWdpbk1hcERvZXNudEluc2VydE5vcHMo
KSk7Ci0gICAgUlVOKHRlc3RQaW5SZWdpc3RlcnMoKSk7Ci0gICAgCiAgICAgaWYgKHRhc2tzLmlz
RW1wdHkoKSkKICAgICAgICAgdXNhZ2UoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAyMDcwMDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDAsOCArMzAwLDEzIEBAIHg4NjogWDg2RGl2MzIgVVpEOkc6MzIsIFVaRDpHOjMyLCBV
Okc6MzIKIHg4Nl82NDogWDg2RGl2NjQgVVpEOkc6NjQsIFVaRDpHOjY0LCBVOkc6NjQKICAgICBU
bXAqLCBUbXAqLCBUbXAKIAotTGVhIFVBOkc6UHRyLCBEOkc6UHRyCitMZWEzMiBVQTpHOjMyLCBE
Okc6MzIKICAgICBBZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAgYXMgeDg2TGVhMzIKKwor
TGVhNjQgVUE6Rzo2NCwgRDpHOjY0CisgICAgQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1w
IGFzIHg4NkxlYTY0CiAKIEFuZDMyIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiAgICAgVG1wLCBU
bXAsIFRtcAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291167</attachid>
            <date>2016-10-10 14:42:17 -0700</date>
            <delta_ts>2016-10-10 15:16:35 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25881</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3MDI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBA
CisyMDE2LTEwLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMtPkFpciBsb3dlcmluZyBzaG91bGQgYmUgYWJsZSB0byBlbWl0IGNvbXBsZXggbGVhcyBvbiB4
ODYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzIz
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBhZGRzIGNvbXByZWhlbnNpdmUgc3VwcG9ydCBmb3IgZW1pdHRpbmcgbGVhIG9uIHg4
Ni4KKyAgICAgICAgCisgICAgICAgIFdoZW4gYWRkaW5nIHRoaXMsIEkgZm91bmQgdGhhdCBpdCB3
YXMgdXNlZnVsIHRvIGFsc28gZmluYWxseSBhZGQgbW9yZSByZWFzc29jaWF0aW9uLiBUaGF0Cisg
ICAgICAgIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBwYXR0ZXJucyB0aGF0IHRoZSBpbnN0cnVjdGlv
biBzZWxlY3RvciBoYXMgdG8gZGVhbCB3aXRoLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpsZWEzMik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpsZWE2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyOjpsZWEpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNvbW1pdEludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5QXBwZW5kTGVhKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjpjcmVhdGVTZWxlY3QpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzUmVkdWNl
U3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL0IzVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM1Zh
bHVlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzUmVwcmVzZW50YWJsZUFz
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpyZXByZXNlbnRhYmxlQXMpOiBEZWxldGVkLgor
ICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy90ZXN0YjMu
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6Y2hlY2tEaXNhc3NlbWJseSk6CisgICAgICAgIChKU0M6
OkIzOjpjaGVja1VzZXNJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpjaGVja0RvZXNO
b3RVc2VJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2TGVhQWRkQWRkU2hs
MSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2TGVhQWRkQWRkU2hsMik6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0WDg2TGVhQWRkQWRkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RYODZMZWFB
ZGRTaGwxKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RYODZMZWFBZGRTaGwyKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RSZWR1Y2VTdHJlbmd0aFJlYXNzb2NpYXRpb24pOgorICAgICAgICAoSlND
OjpCMzo6cnVuKToKKwogMjAxNi0xMC0xMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmVuYW1lIHRoZSBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3Igc3RyaW5nIHRvIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24g
MjA3MDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU4LDExICsxMzU4LDE4IEBAIHB1YmxpYzoKICAgICB9
CiAjZW5kaWYKIAotICAgIHZvaWQgbGVhKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHZvaWQgbGVhMzIoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAg
ewotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkcmVzcy5i
YXNlLCBkZXN0KTsKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwg
YWRkcmVzcy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJN
NjQpCisgICAgdm9pZCBsZWE2NChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJlc3Mu
YmFzZSwgZGVzdCk7CisgICAgfQorI2VuZGlmIC8vIENQVShYODZfNjQpIHx8IENQVShBUk02NCkK
KwogICAgIGJvb2wgc2hvdWxkQmxpbmQoSW1tMzIgaW1tKQogICAgIHsKICNpZiBFTkFCTEUoRk9S
Q0VEX0pJVF9CTElORElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCShyZXZpc2lvbiAyMDcwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDcgKzM5OSw4IEBAIHByaXZh
dGU6CiAgICAgLy8gc2hvcnQsIHlvdSBzaG91bGQgYXZvaWQgdGhpcyBieSB1c2luZyB0aGUgcGF0
dGVybiBtYXRjaGVyIHRvIG1hdGNoIHBhdHRlcm5zLgogICAgIHZvaWQgY29tbWl0SW50ZXJuYWwo
VmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgbV9sb2NrZWQuYWRkKHZhbHVlKTsKKyAgICAg
ICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbV9sb2NrZWQuYWRkKHZhbHVlKTsKICAgICB9CiAK
ICAgICBib29sIGNyb3NzZXNJbnRlcmZlcmVuY2UoVmFsdWUqIHZhbHVlKQpAQCAtMTc5OCw2ICsx
Nzk5LDE0NCBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIGZhbHNlKTsK
ICAgICB9CisgICAgCisgICAgYm9vbCB0cnlBcHBlbmRMZWEoKQorICAgIHsKKyAgICAgICAgQWly
OjpPcGNvZGUgbGVhT3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShMZWEzMiwgTGVhNjQsIG1fdmFs
dWUtPnR5cGUoKSk7CisgICAgICAgIGlmICghaXNWYWxpZEZvcm0obGVhT3Bjb2RlLCBBcmc6Oklu
ZGV4LCBBcmc6OlRtcCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICAvLyBUaGlzIGxldHMgdXMgdHVybiB0aGluZ3MgbGlrZSB0aGlzOgorICAgICAgICAvLwor
ICAgICAgICAvLyAgICAgQWRkKEFkZChAeCwgU2hsKEB5LCAkMikpLCAkMTAwKQorICAgICAgICAv
LworICAgICAgICAvLyBJbnRvIHRoaXM6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBsZWEg
MTAwKCVyZGksJXNpLDIpLCAlcmF4CisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGhhdmUgYSBj
aG9pY2UgaGVyZSBiZXR3ZWVuIGNvbW1pdHRpbmcgdGhlIGludGVybmFsIGJpdHMgb2YgYW4gaW5k
ZXggb3Igc2hhcmluZworICAgICAgICAvLyB0aGVtLiBUaGVyZSBhcmUgc29saWQgYXJndW1lbnRz
IGZvciBib3RoLgorICAgICAgICAvLworICAgICAgICAvLyBTaGFyaW5nOiBUaGUgd29yZCBvbiB0
aGUgc3RyZWV0IGlzIHRoYXQgdGhlIGNvc3Qgb2YgYSBsZWEgaXMgb25lIGN5Y2xlIG5vIG1hdHRl
cgorICAgICAgICAvLyB3aGF0IGl0IGRvZXMuIEV2ZXJ5IGV4cGVyaW1lbnQgSSd2ZSBldmVyIHNl
ZW4gc2VlbXMgdG8gY29uZmlybSB0aGlzLiBTbywgc2hhcmluZworICAgICAgICAvLyBoZWxwcyB1
cyBpbiBzaXR1YXRpb25zIHdoZXJlIFdhc20gaW5wdXQgZGlkIHRoaXM6CisgICAgICAgIC8vCisg
ICAgICAgIC8vICAgICB4ID0gYVtpXS54OworICAgICAgICAvLyAgICAgeSA9IGFbaV0ueTsKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gV2l0aCBzaGFyaW5nIHdlIHdvdWxkIGRvOgorICAgICAgICAv
LworICAgICAgICAvLyAgICAgbGVhbCAoJWEsJWksNCksICV0bXAKKyAgICAgICAgLy8gICAgIGNt
cCAoJXNpemUsICV0bXApCisgICAgICAgIC8vICAgICBqYSBfZmFpbAorICAgICAgICAvLyAgICAg
bW92bCAoJWJhc2UsICV0bXApLCAleAorICAgICAgICAvLyAgICAgbGVhbCA0KCVhLCVpLDQpLCAl
dG1wCisgICAgICAgIC8vICAgICBjbXAgKCVzaXplLCAldG1wKQorICAgICAgICAvLyAgICAgamEg
X2ZhaWwKKyAgICAgICAgLy8gICAgIG1vdmwgKCViYXNlLCAldG1wKSwgJXkKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gSW4gdGhlIGFic2VuY2Ugb2Ygc2hhcmluZywgd2UgbWF5IGZpbmQgb3Vyc2Vs
dmVzIG5lZWRpbmcgc2VwYXJhdGUgcmVnaXN0ZXJzIGZvcgorICAgICAgICAvLyB0aGUgaW5uYXJk
cyBvZiB0aGUgaW5kZXguIFRoYXQncyByZWxhdGl2ZWx5IHVubGlrZWx5IHRvIGJlIGEgdGhpbmcg
ZHVlIHRvIG90aGVyCisgICAgICAgIC8vIG9wdGltaXphdGlvbnMgdGhhdCB3ZSBhbHJlYWR5IGhh
dmUsIGJ1dCBpdCBjb3VsZCBoYXBwZW4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29tbWl0dGlu
ZzogVGhlIHdvcnN0IGNhc2UgaXMgdGhhdCB0aGVyZSBpcyBhIGNvbXBsaWNhdGVkIGdyYXBoIG9m
IGFkZGl0aW9ucyBhbmQKKyAgICAgICAgLy8gc2hpZnRzLCB3aGVyZSBlYWNoIHZhbHVlIGhhcyBt
dWx0aXBsZSB1c2VzLiBJbiB0aGF0IGNhc2UsIGl0J3MgYmV0dGVyIHRvIGNvbXB1dGUKKyAgICAg
ICAgLy8gZWFjaCBvbmUgc2VwYXJhdGVseSBmcm9tIHRoZSBvdGhlcnMgc2luY2UgdGhhdCB3YXks
IGVhY2ggY2FsY3VsYXRpb24gd2lsbCB1c2UgYQorICAgICAgICAvLyByZWxhdGl2ZWx5IG5lYXJi
eSB0bXAgYXMgaXRzIGlucHV0LiBUaGF0IHNlZW1zIHVuY29tbW9uLCBidXQgaW4gdGhvc2UgY2Fz
ZXMsCisgICAgICAgIC8vIGNvbW1pdHRpbmcgaXMgYSBjbGVhciB3aW5uZXI6IGl0IHdvdWxkIHJl
c3VsdCBpbiBhIHNpbXBsZSBpbnRlcmZlcmVuY2UgZ3JhcGgKKyAgICAgICAgLy8gd2hpbGUgc2hh
cmluZyB3b3VsZCByZXN1bHQgaW4gYSBjb21wbGV4IG9uZS4gSW50ZXJmZXJlbmNlIHN1Y2tzIGJl
Y2F1c2UgaXQgbWVhbnMKKyAgICAgICAgLy8gbW9yZSB0aW1lIGluIElSQyBhbmQgaXQgbWVhbnMg
d29yc2UgY29kZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSXQncyBub3Qgc3VwZXIgY2xlYXIg
aWYgYW55IG9mIHRoZXNlIGNvcm5lciBjYXNlcyB3b3VsZCBldmVyIGFyaXNlLiBDb21taXR0aW5n
CisgICAgICAgIC8vIGhhcyB0aGUgYmVuZWZpdCB0aGF0IGl0J3MgZWFzaWVyIHRvIHJlYXNvbiBh
Ym91dCwgYW5kIHByb3RlY3RzIGEgbXVjaCBkYXJrZXIKKyAgICAgICAgLy8gY29ybmVyIGNhc2Ug
KG1vcmUgaW50ZXJmZXJlbmNlKS4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgLy8gSGVyZSBh
cmUgdGhlIHRoaW5ncyB3ZSB3YW50IHRvIG1hdGNoOgorICAgICAgICAvLyBBZGQoQWRkKEB4LCBA
eSksICRjKQorICAgICAgICAvLyBBZGQoU2hsKEB4LCAkYyksIEB5KQorICAgICAgICAvLyBBZGQo
QHgsIFNobChAeSwgJGMpKQorICAgICAgICAvLyBBZGQoQWRkKEB4LCBTaGwoQHksICRjKSksICRk
KQorICAgICAgICAvLyBBZGQoQWRkKFNobChAeCwgJGMpLCBAeSksICRkKQorICAgICAgICAvLwor
ICAgICAgICAvLyBOb3RlIHRoYXQgaWYgeW91IGRvIEFkZChTaGwoQHgsICRjKSwgJGQpIHRoZW4g
d2Ugd2lsbCB0cmVhdCAkZCBhcyBhIG5vbi1jb25zdGFudCBhbmQKKyAgICAgICAgLy8gZm9yY2Ug
aXQgdG8gbWF0ZXJpYWxpemUuIFlvdSdsbCBnZXQgc29tZXRoaW5nIGxpa2UgdGhpczoKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gbW92bCAkZCwgJXRtcAorICAgICAgICAvLyBsZWFsICgldG1wLCV4
LGMpLCAlcmVzdWx0CisgICAgICAgIC8vCisgICAgICAgIC8vIFdoaWNoIGlzIHByZXR0eSBjbG9z
ZSB0byBvcHRpbWFsIGFuZCBoYXMgdGhlIG5pY2UgZWZmZWN0IG9mIGJlaW5nIGFibGUgdG8gaGFu
ZGxlIGxhcmdlCisgICAgICAgIC8vIGNvbnN0YW50cyBncmFjZWZ1bGx5LgorICAgICAgICAKKyAg
ICAgICAgVmFsdWUqIGlubmVyQWRkID0gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIFZhbHVl
KiB2YWx1ZSA9IG1fdmFsdWU7CisgICAgICAgIAorICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBj
b25zdW1lIEFkZChBZGQoXyksICRjKS4gSWYgd2Ugc3VjY2VlZCBhdCBjb25zdW1pbmcgaXQgdGhl
biB3ZSBoYXZlIHRoZXNlCisgICAgICAgIC8vIHBhdHRlcm5zIGxlZnQgKGkuZS4gaW4gdGhlIEFk
ZChfKSk6CisgICAgICAgIC8vCisgICAgICAgIC8vIEFkZChBZGQoQHgsIEB5KSwgJGMpCisgICAg
ICAgIC8vIEFkZChBZGQoQHgsIFNobChAeSwgJGMpKSwgJGQpCisgICAgICAgIC8vIEFkZChBZGQo
U2hsKEB4LCAkYyksIEB5KSwgJGQpCisgICAgICAgIC8vCisgICAgICAgIC8vIE90aGVyd2lzZSB3
ZSBhcmUgbG9va2luZyBhdCB0aGVzZSBwYXR0ZXJuczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
QWRkKFNobChAeCwgJGMpLCBAeSkKKyAgICAgICAgLy8gQWRkKEB4LCBTaGwoQHksICRjKSkKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBzdWJzZXF1ZW50IGNvZGUg
b25seSBoYXMgdG8gd29ycnkgYWJvdXQgdGhyZWUgcGF0dGVybnM6CisgICAgICAgIC8vCisgICAg
ICAgIC8vIEFkZChTaGwoQHgsICRjKSwgQHkpCisgICAgICAgIC8vIEFkZChAeCwgU2hsKEB5LCAk
YykpCisgICAgICAgIC8vIEFkZChAeCwgQHkpIChvbmx5IGlmIG9mZnNldCAhPSAwKQorICAgICAg
ICBpbnQzMl90IG9mZnNldCA9IDA7CisgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPmlzUmVw
cmVzZW50YWJsZUFzPGludDMyX3Q+KCkKKyAgICAgICAgICAgICYmIGNhbkJlSW50ZXJuYWwodmFs
dWUtPmNoaWxkKDApKQorICAgICAgICAgICAgJiYgdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9
PSBBZGQpIHsKKyAgICAgICAgICAgIGlubmVyQWRkID0gdmFsdWUtPmNoaWxkKDApOworICAgICAg
ICAgICAgb2Zmc2V0ID0gdmFsdWUtPmNoaWxkKDEpLT5hc0ludDMyKCk7CisgICAgICAgICAgICB2
YWx1ZSA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYXV0
byB0cnlTaGwgPSBbJl0gKFZhbHVlKiBzaGwsIFZhbHVlKiBvdGhlcikgLT4gYm9vbCB7CisgICAg
ICAgICAgICBpZiAoc2hsLT5vcGNvZGUoKSAhPSBTaGwpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKHNobCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFzaGwtPmNoaWxkKDEpLT5oYXNJ
bnQzMigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGxvZ1NjYWxlID0gc2hsLT5jaGlsZCgxKS0+YXNJbnQzMigpOworICAgICAgICAgICAgaWYg
KG1fdmFsdWUtPnR5cGUoKSA9PSBJbnQzMikKKyAgICAgICAgICAgICAgICBsb2dTY2FsZSAmPSAz
MTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2dTY2FsZSAmPSA2MzsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHNjYWxlID0gMSA8PCBsb2dTY2FsZTsKKyAgICAgICAgICAgIGlm
ICghQXJnOjppc1ZhbGlkSW5kZXhGb3JtKHNjYWxlLCBvZmZzZXQpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKCFtX2xvY2tl
ZC5jb250YWlucyhzaGwtPmNoaWxkKDApKSk7CisgICAgICAgICAgICBBU1NFUlQoIW1fbG9ja2Vk
LmNvbnRhaW5zKG90aGVyKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFwcGVuZChsZWFP
cGNvZGUsIEFyZzo6aW5kZXgodG1wKG90aGVyKSwgdG1wKHNobC0+Y2hpbGQoMCkpLCBzY2FsZSwg
b2Zmc2V0KSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGlubmVy
QWRkKTsKKyAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHNobCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGlmICh0cnlTaGwodmFsdWUt
PmNoaWxkKDApLCB2YWx1ZS0+Y2hpbGQoMSkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmICh0cnlTaGwodmFsdWUtPmNoaWxkKDEpLCB2YWx1ZS0+Y2hpbGQoMCkpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgcmVtYWluaW5n
IHBhdHRlcm4gaXMganVzdDoKKyAgICAgICAgLy8gQWRkKEB4LCBAeSkgKG9ubHkgaWYgb2Zmc2V0
ICE9IDApCisgICAgICAgIGlmICghb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5zKHZhbHVlLT5jaGlsZCgwKSkpOworICAg
ICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5zKHZhbHVlLT5jaGlsZCgxKSkpOworICAgICAg
ICBhcHBlbmQobGVhT3Bjb2RlLCBBcmc6OmluZGV4KHRtcCh2YWx1ZS0+Y2hpbGQoMCkpLCB0bXAo
dmFsdWUtPmNoaWxkKDEpKSwgMSwgb2Zmc2V0KSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgY29t
bWl0SW50ZXJuYWwoaW5uZXJBZGQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAg
ICB2b2lkIGxvd2VyKCkKICAgICB7CkBAIC0xODM0LDkgKzE5NzMsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogCiAgICAgICAgIGNhc2UgQWRkOiB7CisgICAgICAgICAgICBpZiAodHJ5QXBwZW5k
TGVhKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCiAgICAgICAgICAg
ICBBaXI6Ok9wY29kZSBtdWx0aXBseUFkZE9wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTXVsdGlw
bHlBZGQzMiwgTXVsdGlwbHlBZGQ2NCwgbV92YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGlm
IChtdWx0aXBseUFkZE9wY29kZSAhPSBBaXI6Ok9vcHMKLSAgICAgICAgICAgICAgICAmJiBpc1Zh
bGlkRm9ybShtdWx0aXBseUFkZE9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCwg
QXJnOjpUbXApKSB7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0obXVsdGlwbHlBZGRPcGNv
ZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgewogICAgICAgICAg
ICAgICAgIFZhbHVlKiBsZWZ0ID0gbV92YWx1ZS0+Y2hpbGQoMCk7CiAgICAgICAgICAgICAgICAg
VmFsdWUqIHJpZ2h0ID0gbV92YWx1ZS0+Y2hpbGQoMSk7CiAgICAgICAgICAgICAgICAgaWYgKCFp
bW0ocmlnaHQpIHx8IG1fdmFsdWVUb1RtcFtyaWdodF0pIHsKQEAgLTE4NDYsNyArMTk4Nyw3IEBA
IHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBtdWx0aXBseUxlZnQg
PSBsZWZ0LT5jaGlsZCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBtdWx0aXBs
eVJpZ2h0ID0gbGVmdC0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9s
b2NrZWQuY29udGFpbnMobXVsdGlwbHlMZWZ0KSB8fCBtX2xvY2tlZC5jb250YWlucyhtdWx0aXBs
eVJpZ2h0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5CZUludGVybmFsKG11bHRp
cGx5TGVmdCkgfHwgY2FuQmVJbnRlcm5hbChtdWx0aXBseVJpZ2h0KSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZChtdWx0aXBseUFkZE9wY29kZSwgdG1wKG11bHRpcGx5TGVmdCksIHRtcChtdWx0aXBseVJp
Z2h0KSwgdG1wKHJpZ2h0KSwgdG1wKG1fdmFsdWUpKTsKQEAgLTIyMTUsNyArMjM1Niw3IEBAIHBy
aXZhdGU6CiAKICAgICAgICAgY2FzZSBTbG90QmFzZTogewogICAgICAgICAgICAgYXBwZW5kKAot
ICAgICAgICAgICAgICAgIExlYSwKKyAgICAgICAgICAgICAgICBwb2ludGVyVHlwZSgpID09IElu
dDY0ID8gTGVhNjQgOiBMZWEzMiwKICAgICAgICAgICAgICAgICBBcmc6OnN0YWNrKG1fc3RhY2tU
b1N0YWNrLmdldChtX3ZhbHVlLT5hczxTbG90QmFzZVZhbHVlPigpLT5zbG90KCkpKSwKICAgICAg
ICAgICAgICAgICB0bXAobV92YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24g
MjA3MDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00ODIsMTkgKzQ4Miw1NiBAQCBwcml2YXRlOgogICAgICAgICBz
d2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CiAgICAgICAgIGNhc2UgQWRkOgogICAgICAgICAg
ICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwotCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFk
ZChBZGQodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8g
dGhpczogQWRkKHZhbHVlLCBjb25zdGFudDEgKyBjb25zdGFudDIpCisgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQWRkICYmIGlzSW50
KG1fdmFsdWUtPnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChB
ZGQodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKKyAgICAgICAgICAgICAgICAvLyBJbnRv
IHRoaXM6IEFkZCh2YWx1ZSwgY29uc3RhbnQxICsgY29uc3RhbnQyKQogICAgICAgICAgICAgICAg
IFZhbHVlKiBuZXdTdW0gPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgICAgIGlmIChuZXdTdW0p
IHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRl
eCwgbmV3U3VtKTsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CiAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNo
aWxkKDEpID0gbmV3U3VtOwogICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQoQWRkKHZhbHVlLCBjb25z
dGFudCksIG90aGVyVmFsdWUpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQoQWRk
KHZhbHVlLCBvdGhlclZhbHVlKSwgY29uc3RhbnQpCisgICAgICAgICAgICAgICAgaWYgKCFtX3Zh
bHVlLT5jaGlsZCgxKS0+aGFzSW50KCkgJiYgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5o
YXNJbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5j
aGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBjb25zdGFudCA9
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUq
IG90aGVyVmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBjb3VsZCBjcmVhdGUgZHVwbGljYXRlIGNvZGUgaWYgQWRkKHZhbHVlLCBjb25zdGFudCkg
aXMgdXNlZCBlbHNld2hlcmUuCisgICAgICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFs
cmVhZHkgbW9kZWwgYWRkaW5nIGEgY29uc3RhbnQgYXMgaWYgaXQgd2FzIGZyZWUgaW4gb3RoZXIg
cGxhY2VzCisgICAgICAgICAgICAgICAgICAgIC8vIHNvIGxldCdzIGp1c3Qgcm9sbCB3aXRoIGl0
LiBUaGUgYWx0ZXJuYXRpdmUgd291bGQgbWVhbiBoYXZpbmcgdG8gZG8gZ29vZCB1c2UKKyAgICAg
ICAgICAgICAgICAgICAgLy8gY291bnRzLCB3aGljaCByZWR1Y2VTdHJlbmd0aCgpIGN1cnJlbnRs
eSBkb2Vzbid0IGhhdmUuCisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0K
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5vcmlnaW4o
KSwgdmFsdWUsIG90aGVyVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGls
ZCgxKSA9IGNvbnN0YW50OworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9Ci0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQob3RoZXJW
YWx1ZSwgQWRkKHZhbHVlLCBjb25zdGFudCkpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFk
ZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25zdGFudCkKKyAgICAgICAgICAgIGlmIChpc0lu
dChtX3ZhbHVlLT50eXBlKCkpCisgICAgICAgICAgICAgICAgJiYgIW1fdmFsdWUtPmNoaWxkKDAp
LT5oYXNJbnQoKQorICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUo
KSA9PSBBZGQKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSkt
Pmhhc0ludCgpKSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gbV92YWx1ZS0+Y2hp
bGQoMSktPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiBjb25zdGFudCA9IG1fdmFs
dWUtPmNoaWxkKDEpLT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogb3RoZXJWYWx1
ZSA9IG1fdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIC8vIFRoaXMgY3JlYXRlcyBh
IGR1cGxpY2F0ZSBhZGQuIFRoYXQncyBkYW5nZXJvdXMgYnV0IHByb2JhYmx5IGZpbmUsIHNlZSBh
Ym92ZS4KKyAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9CisgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCB2YWx1ZSwgb3RoZXJWYWx1ZSk7
CisgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBjb25zdGFudDsKKyAgICAgICAg
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChjb25z
dGFudDEsIGNvbnN0YW50MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICsg
Y29uc3RhbnQyCiAgICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50QWRkID0gbV92YWx1ZS0+
Y2hpbGQoMCktPmFkZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDIwNzAwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw3ICsy
MjUsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgYXNGbG9hdCgpIGNvbnN0OwogCiAgICAgYm9vbCBo
YXNOdW1iZXIoKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIHJlcHJlc2Vu
dGFibGVBcygpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgaXNSZXByZXNl
bnRhYmxlQXMoKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUIGFzTnVtYmVyKCkg
Y29uc3Q7CiAKICAgICAvLyBCb29sZWFucyBpbiBCMyBhcmUgQ29uc3QzMigwKSBvciBDb25zdDMy
KDEpLiBTbyB0aGlzIGlzIHRydWUgaWYgdGhlIHR5cGUgaXMgSW50MzIgYW5kIHRoZSBvbmx5Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24g
MjA3MDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE4NiwxNyArMTg2LDE3IEBAIGlubGluZSBib29sIFZhbHVlOjppc05l
Z2F0aXZlWmVybygpIGNvbnMKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBib29s
IFZhbHVlOjpyZXByZXNlbnRhYmxlQXMoKSBjb25zdAoraW5saW5lIGJvb2wgVmFsdWU6OmlzUmVw
cmVzZW50YWJsZUFzKCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG9wY29kZSgpKSB7CiAgICAgY2Fz
ZSBDb25zdDMyOgotICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8VD4oYXNJbnQzMigp
KTsKKyAgICAgICAgcmV0dXJuIEIzOjppc1JlcHJlc2VudGFibGVBczxUPihhc0ludDMyKCkpOwog
ICAgIGNhc2UgQ29uc3Q2NDoKLSAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPFQ+KGFz
SW50NjQoKSk7CisgICAgICAgIHJldHVybiBCMzo6aXNSZXByZXNlbnRhYmxlQXM8VD4oYXNJbnQ2
NCgpKTsKICAgICBjYXNlIENvbnN0RG91YmxlOgotICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRh
YmxlQXM8VD4oYXNEb3VibGUoKSk7CisgICAgICAgIHJldHVybiBCMzo6aXNSZXByZXNlbnRhYmxl
QXM8VD4oYXNEb3VibGUoKSk7CiAgICAgY2FzZSBDb25zdEZsb2F0OgotICAgICAgICByZXR1cm4g
aXNSZXByZXNlbnRhYmxlQXM8VD4oYXNGbG9hdCgpKTsKKyAgICAgICAgcmV0dXJuIEIzOjppc1Jl
cHJlc2VudGFibGVBczxUPihhc0Zsb2F0KCkpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2
aXNpb24gMjA3MDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1NCwyOCArMTU0LDM3IEBAIHZvaWQgbG93ZXJUb0FpckZvclRlc3Rp
bmcoUHJvY2VkdXJlJiBwcm8KICAgICBBaXI6OnZhbGlkYXRlKHByb2MuY29kZSgpKTsKIH0KIAot
dm9pZCBjaGVja1VzZXNJbnN0cnVjdGlvbihDb21waWxhdGlvbiYgY29tcGlsYXRpb24sIGNvbnN0
IGNoYXIqIHRleHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgordm9pZCBjaGVja0Rpc2Fzc2Vt
Ymx5KENvbXBpbGF0aW9uJiBjb21waWxhdGlvbiwgY29uc3QgRnVuYyYgZnVuYywgQ1N0cmluZyBm
YWlsVGV4dCkKIHsKICAgICBDU3RyaW5nIGRpc2Fzc2VtYmx5ID0gY29tcGlsYXRpb24uZGlzYXNz
ZW1ibHkoKTsKLSAgICBpZiAoc3Ryc3RyKGRpc2Fzc2VtYmx5LmRhdGEoKSwgdGV4dCkpCisgICAg
aWYgKGZ1bmMoZGlzYXNzZW1ibHkuZGF0YSgpKSkKICAgICAgICAgcmV0dXJuOwotCisgICAgCiAg
ICAgY3Jhc2hMb2NrLmxvY2soKTsKLSAgICBkYXRhTG9nKCJCYWQgbG93ZXJpbmchICBFeHBlY3Rl
ZCB0byBmaW5kICIsIHRleHQsICIgYnV0IGRpZG4ndDpcbiIpOworICAgIGRhdGFMb2coIkJhZCBs
b3dlcmluZyEgICIsIGZhaWxUZXh0LCAiXG4iKTsKICAgICBkYXRhTG9nKGRpc2Fzc2VtYmx5KTsK
ICAgICBDUkFTSCgpOwogfQogCi12b2lkIGNoZWNrRG9lc05vdFVzZUluc3RydWN0aW9uKENvbXBp
bGF0aW9uJiBjb21waWxhdGlvbiwgY29uc3QgY2hhciogdGV4dCkKK3ZvaWQgY2hlY2tVc2VzSW5z
dHJ1Y3Rpb24oQ29tcGlsYXRpb24mIGNvbXBpbGF0aW9uLCBjb25zdCBjaGFyKiB0ZXh0KQogewot
ICAgIENTdHJpbmcgZGlzYXNzZW1ibHkgPSBjb21waWxhdGlvbi5kaXNhc3NlbWJseSgpOwotICAg
IGlmICghc3Ryc3RyKGRpc2Fzc2VtYmx5LmRhdGEoKSwgdGV4dCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBjaGVja0Rpc2Fzc2VtYmx5KAorICAgICAgICBjb21waWxhdGlvbiwKKyAgICAgICAgWyZd
IChjb25zdCBjaGFyKiBkaXNhc3NlbWJseSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4g
c3Ryc3RyKGRpc2Fzc2VtYmx5LCB0ZXh0KTsKKyAgICAgICAgfSwKKyAgICAgICAgdG9DU3RyaW5n
KCJFeHBlY3RlZCB0byBmaW5kICIsIHRleHQsICIgYnV0IGRpZG50ISIpKTsKK30KIAotICAgIGNy
YXNoTG9jay5sb2NrKCk7Ci0gICAgZGF0YUxvZygiQmFkIGxvd2VyaW5nISAgRGlkIG5vdCBleHBl
Y3RlZCB0byBmaW5kICIsIHRleHQsICIgYnV0IGl0J3MgdGhlcmU6XG4iKTsKLSAgICBkYXRhTG9n
KGRpc2Fzc2VtYmx5KTsKLSAgICBDUkFTSCgpOwordm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVj
dGlvbihDb21waWxhdGlvbiYgY29tcGlsYXRpb24sIGNvbnN0IGNoYXIqIHRleHQpCit7CisgICAg
Y2hlY2tEaXNhc3NlbWJseSgKKyAgICAgICAgY29tcGlsYXRpb24sCisgICAgICAgIFsmXSAoY29u
c3QgY2hhciogZGlzYXNzZW1ibHkpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuICFzdHJz
dHIoZGlzYXNzZW1ibHksIHRleHQpOworICAgICAgICB9LAorICAgICAgICB0b0NTdHJpbmcoIkRp
ZCBub3QgZXhwZWN0ZWQgdG8gZmluZCAiLCB0ZXh0LCAiIGJ1dCBpdCdzIHRoZXJlISIpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KQEAgLTEzMzgxLDYgKzEzMzkwLDE1OCBAQCB2b2lk
IHRlc3RQaW5SZWdpc3RlcnMoKQogICAgIGdvKGZhbHNlKTsKIH0KIAordm9pZCB0ZXN0WDg2TGVh
QWRkQWRkU2hsMSgpCit7CisgICAgLy8gQWRkKEFkZChTaGwoQHgsICRjKSwgQHkpLCAkZCkKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBw
cm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgU2hsLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDIpKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgMTAwKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCByZXN1bHQpOworICAgIAorICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsZWEgMHg2NCglcmRpLCVyc2ksNCks
ICVyYXgiKTsKKyAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgKDEg
KyAoMiA8PCAyKSkgKyAxMDApOworfQorCit2b2lkIHRlc3RYODZMZWFBZGRBZGRTaGwyKCkKK3sK
KyAgICAvLyBBZGQoQWRkKEB4LCBTaGwoQHksICRjKSksICRkKQorICAgIFByb2NlZHVyZSBwcm9j
OworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIHJl
c3VsdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEFkZCwgT3JpZ2lu
KCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBB
ZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBTaGwsIE9yaWdp
bigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKKyAgICAgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMikpKSwKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMDApKTsK
KyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3Vs
dCk7CisgICAgCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBjaGVja1VzZXNJ
bnN0cnVjdGlvbigqY29kZSwgImxlYSAweDY0KCVyZGksJXJzaSw0KSwgJXJheCIpOworICAgIENI
RUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAoMSArICgyIDw8IDIpKSArIDEw
MCk7Cit9CisKK3ZvaWQgdGVzdFg4NkxlYUFkZEFkZCgpCit7CisgICAgLy8gQWRkKEFkZChAeCwg
QHkpLCAkYykKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTAwKSk7CisgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwor
ICAgIAorICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgY2hlY2tEaXNhc3NlbWJs
eSgKKyAgICAgICAgKmNvZGUsCisgICAgICAgIFsmXSAoY29uc3QgY2hhciogZGlzYXNzZW1ibHkp
IC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIHN0cnN0cihkaXNhc3NlbWJseSwgImxlYSAw
eDY0KCVyZGksJXJzaSksICVyYXgiKQorICAgICAgICAgICAgICAgIHx8IHN0cnN0cihkaXNhc3Nl
bWJseSwgImxlYSAweDY0KCVyc2ksJXJkaSksICVyYXgiKTsKKyAgICAgICAgfSwKKyAgICAgICAg
IkV4cGVjdGVkIHRvIGZpbmQgc29tZXRoaW5nIGxpa2UgbGVhIDB4NjQoJXJkaSwlcnNpKSwgJXJh
eCBidXQgZGlkbid0ISIpOworICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEs
IDIpLCAoMSArIDIpICsgMTAwKTsKK30KKwordm9pZCB0ZXN0WDg2TGVhQWRkU2hsMSgpCit7Cisg
ICAgLy8gQWRkKFNobChAeCwgJGMpLCBAeSkKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiByZXN1bHQgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgU2hsLCBPcmlnaW4o
KSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAyKSksCisgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCByZXN1bHQpOworICAgIAorICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAg
Y2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsZWEgKCVyZGksJXJzaSw0KSwgJXJheCIpOwor
ICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAxICsgKDIgPDwgMikp
OworfQorCit2b2lkIHRlc3RYODZMZWFBZGRTaGwyKCkKK3sKKyAgICAvLyBBZGQoU2hsKEB4LCAk
YyksIEB5KQorICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSwK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFNobCwg
T3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMikpKTsKKyAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CisgICAg
CisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBjaGVja1VzZXNJbnN0cnVjdGlv
bigqY29kZSwgImxlYSAoJXJkaSwlcnNpLDQpLCAlcmF4Iik7CisgICAgQ0hFQ0tfRVEoaW52b2tl
PGludHB0cl90PigqY29kZSwgMSwgMiksIDEgKyAoMiA8PCAyKSk7Cit9CisKK3ZvaWQgdGVzdFJl
ZHVjZVN0cmVuZ3RoUmVhc3NvY2lhdGlvbihib29sIGZsaXApCit7CisgICAgLy8gQWRkKEFkZChA
eCwgJGMpLCBAeSkgLT4gQWRkKEFkZChAeCwgQHkpLCAkYykKKyAgICAvLyBhbmQKKyAgICAvLyBB
ZGQoQHksIEFkZChAeCwgJGMpKSAtPiBBZGQoQWRkKEB4LCBAeSksICRjKQorICAgIFByb2NlZHVy
ZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFs
dWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgCisgICAgVmFsdWUqIGlubmVyQWRkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwgYXJnMSwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0MikpOworICAgIAorICAgIFZh
bHVlKiBvdXRlckFkZDsKKyAgICBpZiAoZmxpcCkKKyAgICAgICAgb3V0ZXJBZGQgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFyZzIsIGlubmVyQWRkKTsKKyAg
ICBlbHNlCisgICAgICAgIG91dGVyQWRkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBB
ZGQsIE9yaWdpbigpLCBpbm5lckFkZCwgYXJnMik7CisgICAgCisgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBvdXRlckFkZCk7CisgICAgCisgICAgcHJv
Yy5yZXNldFJlYWNoYWJpbGl0eSgpOworCisgICAgaWYgKHNob3VsZEJlVmVyYm9zZSgpKSB7Cisg
ICAgICAgIGRhdGFMb2coIklSIGJlZm9yZSByZWR1Y2VTdHJlbmd0aDpcbiIpOworICAgICAgICBk
YXRhTG9nKHByb2MpOworICAgIH0KKyAgICAKKyAgICByZWR1Y2VTdHJlbmd0aChwcm9jKTsKKyAg
ICAKKyAgICBpZiAoc2hvdWxkQmVWZXJib3NlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiSVIgYWZ0
ZXIgcmVkdWNlU3RyZW5ndGg6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9jKTsKKyAgICB9Cisg
ICAgCisgICAgQ0hFQ0tfRVEocm9vdC0+bGFzdCgpLT5vcGNvZGUoKSwgUmV0dXJuKTsKKyAgICBD
SEVDS19FUShyb290LT5sYXN0KCktPmNoaWxkKDApLT5vcGNvZGUoKSwgQWRkKTsKKyAgICBDSEVD
Syhyb290LT5sYXN0KCktPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNJbnRQdHIoNDIpKTsKKyAgICBD
SEVDS19FUShyb290LT5sYXN0KCktPmNoaWxkKDApLT5jaGlsZCgwKS0+b3Bjb2RlKCksIEFkZCk7
CisgICAgQ0hFQ0soCisgICAgICAgIChyb290LT5sYXN0KCktPmNoaWxkKDApLT5jaGlsZCgwKS0+
Y2hpbGQoMCkgPT0gYXJnMSAmJiByb290LT5sYXN0KCktPmNoaWxkKDApLT5jaGlsZCgwKS0+Y2hp
bGQoMSkgPT0gYXJnMikgfHwKKyAgICAgICAgKHJvb3QtPmxhc3QoKS0+Y2hpbGQoMCktPmNoaWxk
KDApLT5jaGlsZCgwKSA9PSBhcmcyICYmIHJvb3QtPmxhc3QoKS0+Y2hpbGQoMCktPmNoaWxkKDAp
LT5jaGlsZCgxKSA9PSBhcmcxKSk7Cit9CisKIC8vIE1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgZG9l
cyBub3QgdHJ5IHRvIG9wdGltaXplIGFueXRoaW5nIG91dC4KIE5FVkVSX0lOTElORSBkb3VibGUg
emVybygpCiB7CkBAIC0xNDgwMSw2ICsxNDk2MiwyMCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBm
aWx0ZXIpCiAgICAgUlVOKHRlc3RQYXRjaHBvaW50VGVybWluYWxSZXR1cm5WYWx1ZSh0cnVlKSk7
CiAgICAgUlVOKHRlc3RQYXRjaHBvaW50VGVybWluYWxSZXR1cm5WYWx1ZShmYWxzZSkpOwogICAg
IAorICAgIFJVTih0ZXN0TWVtb3J5RmVuY2UoKSk7CisgICAgUlVOKHRlc3RTdG9yZUZlbmNlKCkp
OworICAgIFJVTih0ZXN0TG9hZEZlbmNlKCkpOworICAgIFJVTih0ZXN0VHJhcHBpbmdMb2FkKCkp
OworICAgIFJVTih0ZXN0VHJhcHBpbmdTdG9yZSgpKTsKKyAgICBSVU4odGVzdFRyYXBwaW5nTG9h
ZEFkZFN0b3JlKCkpOworICAgIFJVTih0ZXN0VHJhcHBpbmdMb2FkRENFKCkpOworICAgIFJVTih0
ZXN0VHJhcHBpbmdTdG9yZUVsaW1pbmF0aW9uKCkpOworICAgIFJVTih0ZXN0TW92ZUNvbnN0YW50
cygpKTsKKyAgICBSVU4odGVzdFBDT3JpZ2luTWFwRG9lc250SW5zZXJ0Tm9wcygpKTsKKyAgICBS
VU4odGVzdFBpblJlZ2lzdGVycygpKTsKKyAgICBSVU4odGVzdFJlZHVjZVN0cmVuZ3RoUmVhc3Nv
Y2lhdGlvbih0cnVlKSk7CisgICAgUlVOKHRlc3RSZWR1Y2VTdHJlbmd0aFJlYXNzb2NpYXRpb24o
ZmFsc2UpKTsKKyAgICAKICAgICBpZiAoaXNYODYoKSkgewogICAgICAgICBSVU4odGVzdEJyYW5j
aEJpdEFuZEltbUZ1c2lvbihJZGVudGl0eSwgSW50NjQsIDEsIEFpcjo6QnJhbmNoVGVzdDMyLCBB
aXI6OkFyZzo6VG1wKSk7CiAgICAgICAgIFJVTih0ZXN0QnJhbmNoQml0QW5kSW1tRnVzaW9uKElk
ZW50aXR5LCBJbnQ2NCwgMHhmZiwgQWlyOjpCcmFuY2hUZXN0MzIsIEFpcjo6QXJnOjpUbXApKTsK
QEAgLTE0ODEwLDcgKzE0OTg1LDExIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAg
ICAgICAgUlVOKHRlc3RCcmFuY2hCaXRBbmRJbW1GdXNpb24oTG9hZDhaLCBJbnQzMiwgMSwgQWly
OjpCcmFuY2hUZXN0OCwgQWlyOjpBcmc6OkFkZHIpKTsKICAgICAgICAgUlVOKHRlc3RCcmFuY2hC
aXRBbmRJbW1GdXNpb24oTG9hZCwgSW50MzIsIDEsIEFpcjo6QnJhbmNoVGVzdDMyLCBBaXI6OkFy
Zzo6QWRkcikpOwogICAgICAgICBSVU4odGVzdEJyYW5jaEJpdEFuZEltbUZ1c2lvbihMb2FkLCBJ
bnQ2NCwgMSwgQWlyOjpCcmFuY2hUZXN0MzIsIEFpcjo6QXJnOjpBZGRyKSk7Ci0gICAgICAgIAor
ICAgICAgICBSVU4odGVzdFg4NkxlYUFkZEFkZFNobDEoKSk7CisgICAgICAgIFJVTih0ZXN0WDg2
TGVhQWRkQWRkU2hsMigpKTsKKyAgICAgICAgUlVOKHRlc3RYODZMZWFBZGRBZGQoKSk7CisgICAg
ICAgIFJVTih0ZXN0WDg2TGVhQWRkU2hsMSgpKTsKKyAgICAgICAgUlVOKHRlc3RYODZMZWFBZGRT
aGwyKCkpOwogICAgIH0KIAogICAgIGlmIChpc0FSTTY0KCkpIHsKQEAgLTE0ODE4LDE4ICsxNDk5
Nyw2IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICAgICAgUlVOKHRlc3RUZXJu
YXJ5U3ViSW5zdHJ1Y3Rpb25TZWxlY3Rpb24oVHJ1bmMsIEludDMyLCBBaXI6OlN1YjMyKSk7CiAg
ICAgfQogCi0gICAgUlVOKHRlc3RNZW1vcnlGZW5jZSgpKTsKLSAgICBSVU4odGVzdFN0b3JlRmVu
Y2UoKSk7Ci0gICAgUlVOKHRlc3RMb2FkRmVuY2UoKSk7Ci0gICAgUlVOKHRlc3RUcmFwcGluZ0xv
YWQoKSk7Ci0gICAgUlVOKHRlc3RUcmFwcGluZ1N0b3JlKCkpOwotICAgIFJVTih0ZXN0VHJhcHBp
bmdMb2FkQWRkU3RvcmUoKSk7Ci0gICAgUlVOKHRlc3RUcmFwcGluZ0xvYWREQ0UoKSk7Ci0gICAg
UlVOKHRlc3RUcmFwcGluZ1N0b3JlRWxpbWluYXRpb24oKSk7Ci0gICAgUlVOKHRlc3RNb3ZlQ29u
c3RhbnRzKCkpOwotICAgIFJVTih0ZXN0UENPcmlnaW5NYXBEb2VzbnRJbnNlcnROb3BzKCkpOwot
ICAgIFJVTih0ZXN0UGluUmVnaXN0ZXJzKCkpOwotICAgIAogICAgIGlmICh0YXNrcy5pc0VtcHR5
KCkpCiAgICAgICAgIHVzYWdlKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMjA3MDA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAt
MzAwLDggKzMwMCwxMyBAQCB4ODY6IFg4NkRpdjMyIFVaRDpHOjMyLCBVWkQ6RzozMiwgVTpHOjMy
CiB4ODZfNjQ6IFg4NkRpdjY0IFVaRDpHOjY0LCBVWkQ6Rzo2NCwgVTpHOjY0CiAgICAgVG1wKiwg
VG1wKiwgVG1wCiAKLUxlYSBVQTpHOlB0ciwgRDpHOlB0cgorTGVhMzIgVUE6RzozMiwgRDpHOjMy
CiAgICAgQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1wIGFzIHg4NkxlYTMyCisKK0xlYTY0
IFVBOkc6NjQsIEQ6Rzo2NAorICAgIEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcCBhcyB4
ODZMZWE2NAogCiBBbmQzMiBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wLCBU
bXAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291171</attachid>
            <date>2016-10-10 15:16:35 -0700</date>
            <delta_ts>2016-10-10 19:02:39 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>26170</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3MDI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBA
CisyMDE2LTEwLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMtPkFpciBsb3dlcmluZyBzaG91bGQgYmUgYWJsZSB0byBlbWl0IGNvbXBsZXggbGVhcyBvbiB4
ODYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzIz
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBhZGRzIGNvbXByZWhlbnNpdmUgc3VwcG9ydCBmb3IgZW1pdHRpbmcgbGVhIG9uIHg4
Ni4KKyAgICAgICAgCisgICAgICAgIFdoZW4gYWRkaW5nIHRoaXMsIEkgZm91bmQgdGhhdCBpdCB3
YXMgdXNlZnVsIHRvIGFsc28gZmluYWxseSBhZGQgbW9yZSByZWFzc29jaWF0aW9uLiBUaGF0Cisg
ICAgICAgIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBwYXR0ZXJucyB0aGF0IHRoZSBpbnN0cnVjdGlv
biBzZWxlY3RvciBoYXMgdG8gZGVhbCB3aXRoLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpsZWEzMik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpsZWE2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyOjpsZWEpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNvbW1pdEludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5QXBwZW5kTGVhKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjpjcmVhdGVTZWxlY3QpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzUmVkdWNl
U3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL0IzVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM1Zh
bHVlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzUmVwcmVzZW50YWJsZUFz
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpyZXByZXNlbnRhYmxlQXMpOiBEZWxldGVkLgor
ICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy90ZXN0YjMu
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6Y2hlY2tEaXNhc3NlbWJseSk6CisgICAgICAgIChKU0M6
OkIzOjpjaGVja1VzZXNJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpjaGVja0RvZXNO
b3RVc2VJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2TGVhQWRkQWRkU2hs
MSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0WDg2TGVhQWRkQWRkU2hsMik6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0WDg2TGVhQWRkQWRkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RYODZMZWFB
ZGRTaGwxKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RYODZMZWFBZGRTaGwyKToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RSZWR1Y2VTdHJlbmd0aFJlYXNzb2NpYXRpb24pOgorICAgICAgICAoSlND
OjpCMzo6cnVuKToKKwogMjAxNi0xMC0xMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmVuYW1lIHRoZSBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3Igc3RyaW5nIHRvIFJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24g
MjA3MDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU4LDExICsxMzU4LDE4IEBAIHB1YmxpYzoKICAgICB9
CiAjZW5kaWYKIAotICAgIHZvaWQgbGVhKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHZvaWQgbGVhMzIoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAg
ewotICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgYWRkcmVzcy5i
YXNlLCBkZXN0KTsKKyAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwg
YWRkcmVzcy5iYXNlLCBkZXN0KTsKICAgICB9CiAKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJN
NjQpCisgICAgdm9pZCBsZWE2NChBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJlc3Mu
YmFzZSwgZGVzdCk7CisgICAgfQorI2VuZGlmIC8vIENQVShYODZfNjQpIHx8IENQVShBUk02NCkK
KwogICAgIGJvb2wgc2hvdWxkQmxpbmQoSW1tMzIgaW1tKQogICAgIHsKICNpZiBFTkFCTEUoRk9S
Q0VEX0pJVF9CTElORElORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
VG9BaXIuY3BwCShyZXZpc2lvbiAyMDcwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDcgKzM5OSw4IEBAIHByaXZh
dGU6CiAgICAgLy8gc2hvcnQsIHlvdSBzaG91bGQgYXZvaWQgdGhpcyBieSB1c2luZyB0aGUgcGF0
dGVybiBtYXRjaGVyIHRvIG1hdGNoIHBhdHRlcm5zLgogICAgIHZvaWQgY29tbWl0SW50ZXJuYWwo
VmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgbV9sb2NrZWQuYWRkKHZhbHVlKTsKKyAgICAg
ICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgbV9sb2NrZWQuYWRkKHZhbHVlKTsKICAgICB9CiAK
ICAgICBib29sIGNyb3NzZXNJbnRlcmZlcmVuY2UoVmFsdWUqIHZhbHVlKQpAQCAtMTc5OCw2ICsx
Nzk5LDE0OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIGZhbHNlKTsK
ICAgICB9CisgICAgCisgICAgYm9vbCB0cnlBcHBlbmRMZWEoKQorICAgIHsKKyAgICAgICAgQWly
OjpPcGNvZGUgbGVhT3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShMZWEzMiwgTGVhNjQsIG1fdmFs
dWUtPnR5cGUoKSk7CisgICAgICAgIGlmICghaXNWYWxpZEZvcm0obGVhT3Bjb2RlLCBBcmc6Oklu
ZGV4LCBBcmc6OlRtcCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICAvLyBUaGlzIGxldHMgdXMgdHVybiB0aGluZ3MgbGlrZSB0aGlzOgorICAgICAgICAvLwor
ICAgICAgICAvLyAgICAgQWRkKEFkZChAeCwgU2hsKEB5LCAkMikpLCAkMTAwKQorICAgICAgICAv
LworICAgICAgICAvLyBJbnRvIHRoaXM6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBsZWEg
MTAwKCVyZGksJXJzaSw0KSwgJXJheAorICAgICAgICAvLworICAgICAgICAvLyBXZSBoYXZlIGEg
Y2hvaWNlIGhlcmUgYmV0d2VlbiBjb21taXR0aW5nIHRoZSBpbnRlcm5hbCBiaXRzIG9mIGFuIGlu
ZGV4IG9yIHNoYXJpbmcKKyAgICAgICAgLy8gdGhlbS4gVGhlcmUgYXJlIHNvbGlkIGFyZ3VtZW50
cyBmb3IgYm90aC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2hhcmluZzogVGhlIHdvcmQgb24g
dGhlIHN0cmVldCBpcyB0aGF0IHRoZSBjb3N0IG9mIGEgbGVhIGlzIG9uZSBjeWNsZSBubyBtYXR0
ZXIKKyAgICAgICAgLy8gd2hhdCBpdCBkb2VzLiBFdmVyeSBleHBlcmltZW50IEkndmUgZXZlciBz
ZWVuIHNlZW1zIHRvIGNvbmZpcm0gdGhpcy4gU28sIHNoYXJpbmcKKyAgICAgICAgLy8gaGVscHMg
dXMgaW4gc2l0dWF0aW9ucyB3aGVyZSBXYXNtIGlucHV0IGRpZCB0aGlzOgorICAgICAgICAvLwor
ICAgICAgICAvLyAgICAgeCA9IGFbaV0ueDsKKyAgICAgICAgLy8gICAgIHkgPSBhW2ldLnk7Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIFdpdGggc2hhcmluZyB3ZSB3b3VsZCBkbzoKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gICAgIGxlYWwgKCVhLCVpLDQpLCAldG1wCisgICAgICAgIC8vICAgICBj
bXAgKCVzaXplLCAldG1wKQorICAgICAgICAvLyAgICAgamEgX2ZhaWwKKyAgICAgICAgLy8gICAg
IG1vdmwgKCViYXNlLCAldG1wKSwgJXgKKyAgICAgICAgLy8gICAgIGxlYWwgNCglYSwlaSw0KSwg
JXRtcAorICAgICAgICAvLyAgICAgY21wICglc2l6ZSwgJXRtcCkKKyAgICAgICAgLy8gICAgIGph
IF9mYWlsCisgICAgICAgIC8vICAgICBtb3ZsICglYmFzZSwgJXRtcCksICV5CisgICAgICAgIC8v
CisgICAgICAgIC8vIEluIHRoZSBhYnNlbmNlIG9mIHNoYXJpbmcsIHdlIG1heSBmaW5kIG91cnNl
bHZlcyBuZWVkaW5nIHNlcGFyYXRlIHJlZ2lzdGVycyBmb3IKKyAgICAgICAgLy8gdGhlIGlubmFy
ZHMgb2YgdGhlIGluZGV4LiBUaGF0J3MgcmVsYXRpdmVseSB1bmxpa2VseSB0byBiZSBhIHRoaW5n
IGR1ZSB0byBvdGhlcgorICAgICAgICAvLyBvcHRpbWl6YXRpb25zIHRoYXQgd2UgYWxyZWFkeSBo
YXZlLCBidXQgaXQgY291bGQgaGFwcGVuCisgICAgICAgIC8vCisgICAgICAgIC8vIENvbW1pdHRp
bmc6IFRoZSB3b3JzdCBjYXNlIGlzIHRoYXQgdGhlcmUgaXMgYSBjb21wbGljYXRlZCBncmFwaCBv
ZiBhZGRpdGlvbnMgYW5kCisgICAgICAgIC8vIHNoaWZ0cywgd2hlcmUgZWFjaCB2YWx1ZSBoYXMg
bXVsdGlwbGUgdXNlcy4gSW4gdGhhdCBjYXNlLCBpdCdzIGJldHRlciB0byBjb21wdXRlCisgICAg
ICAgIC8vIGVhY2ggb25lIHNlcGFyYXRlbHkgZnJvbSB0aGUgb3RoZXJzIHNpbmNlIHRoYXQgd2F5
LCBlYWNoIGNhbGN1bGF0aW9uIHdpbGwgdXNlIGEKKyAgICAgICAgLy8gcmVsYXRpdmVseSBuZWFy
YnkgdG1wIGFzIGl0cyBpbnB1dC4gVGhhdCBzZWVtcyB1bmNvbW1vbiwgYnV0IGluIHRob3NlIGNh
c2VzLAorICAgICAgICAvLyBjb21taXR0aW5nIGlzIGEgY2xlYXIgd2lubmVyOiBpdCB3b3VsZCBy
ZXN1bHQgaW4gYSBzaW1wbGUgaW50ZXJmZXJlbmNlIGdyYXBoCisgICAgICAgIC8vIHdoaWxlIHNo
YXJpbmcgd291bGQgcmVzdWx0IGluIGEgY29tcGxleCBvbmUuIEludGVyZmVyZW5jZSBzdWNrcyBi
ZWNhdXNlIGl0IG1lYW5zCisgICAgICAgIC8vIG1vcmUgdGltZSBpbiBJUkMgYW5kIGl0IG1lYW5z
IHdvcnNlIGNvZGUuCisgICAgICAgIC8vCisgICAgICAgIC8vIEl0J3Mgbm90IHN1cGVyIGNsZWFy
IGlmIGFueSBvZiB0aGVzZSBjb3JuZXIgY2FzZXMgd291bGQgZXZlciBhcmlzZS4gQ29tbWl0dGlu
ZworICAgICAgICAvLyBoYXMgdGhlIGJlbmVmaXQgdGhhdCBpdCdzIGVhc2llciB0byByZWFzb24g
YWJvdXQsIGFuZCBwcm90ZWN0cyBhIG11Y2ggZGFya2VyCisgICAgICAgIC8vIGNvcm5lciBjYXNl
IChtb3JlIGludGVyZmVyZW5jZSkuCisgICAgICAgICAgICAgICAgCisgICAgICAgIC8vIEhlcmUg
YXJlIHRoZSB0aGluZ3Mgd2Ugd2FudCB0byBtYXRjaDoKKyAgICAgICAgLy8gQWRkKEFkZChAeCwg
QHkpLCAkYykKKyAgICAgICAgLy8gQWRkKFNobChAeCwgJGMpLCBAeSkKKyAgICAgICAgLy8gQWRk
KEB4LCBTaGwoQHksICRjKSkKKyAgICAgICAgLy8gQWRkKEFkZChAeCwgU2hsKEB5LCAkYykpLCAk
ZCkKKyAgICAgICAgLy8gQWRkKEFkZChTaGwoQHgsICRjKSwgQHkpLCAkZCkKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gTm90ZSB0aGF0IGlmIHlvdSBkbyBBZGQoU2hsKEB4LCAkYyksICRkKSB0aGVu
IHdlIHdpbGwgdHJlYXQgJGQgYXMgYSBub24tY29uc3RhbnQgYW5kCisgICAgICAgIC8vIGZvcmNl
IGl0IHRvIG1hdGVyaWFsaXplLiBZb3UnbGwgZ2V0IHNvbWV0aGluZyBsaWtlIHRoaXM6CisgICAg
ICAgIC8vCisgICAgICAgIC8vIG1vdmwgJGQsICV0bXAKKyAgICAgICAgLy8gbGVhbCAoJXRtcCwl
eCwxPDxjKSwgJXJlc3VsdAorICAgICAgICAvLworICAgICAgICAvLyBXaGljaCBpcyBwcmV0dHkg
Y2xvc2UgdG8gb3B0aW1hbCBhbmQgaGFzIHRoZSBuaWNlIGVmZmVjdCBvZiBiZWluZyBhYmxlIHRv
IGhhbmRsZSBsYXJnZQorICAgICAgICAvLyBjb25zdGFudHMgZ3JhY2VmdWxseS4KKyAgICAgICAg
CisgICAgICAgIFZhbHVlKiBpbm5lckFkZCA9IG51bGxwdHI7CisgICAgICAgIAorICAgICAgICBW
YWx1ZSogdmFsdWUgPSBtX3ZhbHVlOworICAgICAgICAKKyAgICAgICAgLy8gV2UncmUgZ29pbmcg
dG8gY29uc3VtZSBBZGQoQWRkKF8pLCAkYykuIElmIHdlIHN1Y2NlZWQgYXQgY29uc3VtaW5nIGl0
IHRoZW4gd2UgaGF2ZSB0aGVzZQorICAgICAgICAvLyBwYXR0ZXJucyBsZWZ0IChpLmUuIGluIHRo
ZSBBZGQoXykpOgorICAgICAgICAvLworICAgICAgICAvLyBBZGQoQWRkKEB4LCBAeSksICRjKQor
ICAgICAgICAvLyBBZGQoQWRkKEB4LCBTaGwoQHksICRjKSksICRkKQorICAgICAgICAvLyBBZGQo
QWRkKFNobChAeCwgJGMpLCBAeSksICRkKQorICAgICAgICAvLworICAgICAgICAvLyBPdGhlcndp
c2Ugd2UgYXJlIGxvb2tpbmcgYXQgdGhlc2UgcGF0dGVybnM6CisgICAgICAgIC8vCisgICAgICAg
IC8vIEFkZChTaGwoQHgsICRjKSwgQHkpCisgICAgICAgIC8vIEFkZChAeCwgU2hsKEB5LCAkYykp
CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3Vic2VxdWVudCBj
b2RlIG9ubHkgaGFzIHRvIHdvcnJ5IGFib3V0IHRocmVlIHBhdHRlcm5zOgorICAgICAgICAvLwor
ICAgICAgICAvLyBBZGQoU2hsKEB4LCAkYyksIEB5KQorICAgICAgICAvLyBBZGQoQHgsIFNobChA
eSwgJGMpKQorICAgICAgICAvLyBBZGQoQHgsIEB5KSAob25seSBpZiBvZmZzZXQgIT0gMCkKKyAg
ICAgICAgaW50MzJfdCBvZmZzZXQgPSAwOworICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDEpLT5p
c1JlcHJlc2VudGFibGVBczxpbnQzMl90PigpCisgICAgICAgICAgICAmJiBjYW5CZUludGVybmFs
KHZhbHVlLT5jaGlsZCgwKSkKKyAgICAgICAgICAgICYmIHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2Rl
KCkgPT0gQWRkKSB7CisgICAgICAgICAgICBpbm5lckFkZCA9IHZhbHVlLT5jaGlsZCgwKTsKKyAg
ICAgICAgICAgIG9mZnNldCA9IHZhbHVlLT5jaGlsZCgxKS0+YXNJbnQzMigpOworICAgICAgICAg
ICAgdmFsdWUgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGF1dG8gdHJ5U2hsID0gWyZdIChWYWx1ZSogc2hsLCBWYWx1ZSogb3RoZXIpIC0+IGJvb2wgewor
ICAgICAgICAgICAgaWYgKHNobC0+b3Bjb2RlKCkgIT0gU2hsKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghY2FuQmVJbnRlcm5hbChzaGwpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghc2hsLT5jaGlsZCgxKS0+
aGFzSW50MzIoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB1
bnNpZ25lZCBsb2dTY2FsZSA9IHNobC0+Y2hpbGQoMSktPmFzSW50MzIoKTsKKyAgICAgICAgICAg
IGlmIChtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIpCisgICAgICAgICAgICAgICAgbG9nU2NhbGUg
Jj0gMzE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9nU2NhbGUgJj0gNjM7
CisgICAgICAgICAgICAvLyBVc2UgNjQtYml0IG1hdGggdG8gcGVyZm9ybSB0aGUgc2hpZnQgc28g
dGhhdCA8PDMyIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgorICAgICAgICAgICAgaW50NjRfdCBiaWdT
Y2FsZSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PigxKSA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
bG9nU2NhbGUpOworICAgICAgICAgICAgaWYgKCFpc1JlcHJlc2VudGFibGVBczxpbnQzMl90Pihi
aWdTY2FsZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdW5z
aWduZWQgc2NhbGUgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihiaWdTY2FsZSk7CisgICAgICAgICAg
ICBpZiAoIUFyZzo6aXNWYWxpZEluZGV4Rm9ybShzY2FsZSwgb2Zmc2V0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVCghbV9s
b2NrZWQuY29udGFpbnMoc2hsLT5jaGlsZCgwKSkpOworICAgICAgICAgICAgQVNTRVJUKCFtX2xv
Y2tlZC5jb250YWlucyhvdGhlcikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhcHBlbmQo
bGVhT3Bjb2RlLCBBcmc6OmluZGV4KHRtcChvdGhlciksIHRtcChzaGwtPmNoaWxkKDApKSwgc2Nh
bGUsIG9mZnNldCksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICBjb21taXRJbnRlcm5hbChp
bm5lckFkZCk7CisgICAgICAgICAgICBjb21taXRJbnRlcm5hbChzaGwpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpZiAodHJ5U2hsKHZh
bHVlLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDEpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBpZiAodHJ5U2hsKHZhbHVlLT5jaGlsZCgxKSwgdmFsdWUtPmNoaWxkKDApKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIHJlbWFp
bmluZyBwYXR0ZXJuIGlzIGp1c3Q6CisgICAgICAgIC8vIEFkZChAeCwgQHkpIChvbmx5IGlmIG9m
ZnNldCAhPSAwKQorICAgICAgICBpZiAoIW9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgQVNTRVJUKCFtX2xvY2tlZC5jb250YWlucyh2YWx1ZS0+Y2hpbGQoMCkpKTsK
KyAgICAgICAgQVNTRVJUKCFtX2xvY2tlZC5jb250YWlucyh2YWx1ZS0+Y2hpbGQoMSkpKTsKKyAg
ICAgICAgYXBwZW5kKGxlYU9wY29kZSwgQXJnOjppbmRleCh0bXAodmFsdWUtPmNoaWxkKDApKSwg
dG1wKHZhbHVlLT5jaGlsZCgxKSksIDEsIG9mZnNldCksIHRtcChtX3ZhbHVlKSk7CisgICAgICAg
IGNvbW1pdEludGVybmFsKGlubmVyQWRkKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQog
CiAgICAgdm9pZCBsb3dlcigpCiAgICAgewpAQCAtMTgzNCw5ICsxOTc3LDExIEBAIHByaXZhdGU6
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFkZDogeworICAgICAgICAgICAgaWYgKHRyeUFw
cGVuZExlYSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAogICAgICAg
ICAgICAgQWlyOjpPcGNvZGUgbXVsdGlwbHlBZGRPcGNvZGUgPSB0cnlPcGNvZGVGb3JUeXBlKE11
bHRpcGx5QWRkMzIsIE11bHRpcGx5QWRkNjQsIG1fdmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgICAg
ICBpZiAobXVsdGlwbHlBZGRPcGNvZGUgIT0gQWlyOjpPb3BzCi0gICAgICAgICAgICAgICAgJiYg
aXNWYWxpZEZvcm0obXVsdGlwbHlBZGRPcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpU
bXAsIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG11bHRpcGx5QWRk
T3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKICAgICAg
ICAgICAgICAgICBWYWx1ZSogbGVmdCA9IG1fdmFsdWUtPmNoaWxkKDApOwogICAgICAgICAgICAg
ICAgIFZhbHVlKiByaWdodCA9IG1fdmFsdWUtPmNoaWxkKDEpOwogICAgICAgICAgICAgICAgIGlm
ICghaW1tKHJpZ2h0KSB8fCBtX3ZhbHVlVG9UbXBbcmlnaHRdKSB7CkBAIC0xODQ2LDcgKzE5OTEs
NyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbHlM
ZWZ0ID0gbGVmdC0+Y2hpbGQoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVs
dGlwbHlSaWdodCA9IGxlZnQtPmNoaWxkKDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG1fbG9ja2VkLmNvbnRhaW5zKG11bHRpcGx5TGVmdCkgfHwgbV9sb2NrZWQuY29udGFpbnMobXVs
dGlwbHlSaWdodCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuQmVJbnRlcm5hbCht
dWx0aXBseUxlZnQpIHx8IGNhbkJlSW50ZXJuYWwobXVsdGlwbHlSaWdodCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAgICAgICAgICAg
ICBhcHBlbmQobXVsdGlwbHlBZGRPcGNvZGUsIHRtcChtdWx0aXBseUxlZnQpLCB0bXAobXVsdGlw
bHlSaWdodCksIHRtcChyaWdodCksIHRtcChtX3ZhbHVlKSk7CkBAIC0yMjE1LDcgKzIzNjAsNyBA
QCBwcml2YXRlOgogCiAgICAgICAgIGNhc2UgU2xvdEJhc2U6IHsKICAgICAgICAgICAgIGFwcGVu
ZCgKLSAgICAgICAgICAgICAgICBMZWEsCisgICAgICAgICAgICAgICAgcG9pbnRlclR5cGUoKSA9
PSBJbnQ2NCA/IExlYTY0IDogTGVhMzIsCiAgICAgICAgICAgICAgICAgQXJnOjpzdGFjayhtX3N0
YWNrVG9TdGFjay5nZXQobV92YWx1ZS0+YXM8U2xvdEJhc2VWYWx1ZT4oKS0+c2xvdCgpKSksCiAg
ICAgICAgICAgICAgICAgdG1wKG1fdmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlz
aW9uIDIwNzAwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3Ro
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgyLDE5ICs0ODIsNTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgewogICAgICAgICBjYXNlIEFkZDoKICAgICAg
ICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKLQotICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBBZGQoQWRkKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IEFkZCh2YWx1ZSwgY29uc3RhbnQxICsgY29uc3RhbnQyKQorICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEFkZCAmJiBp
c0ludChtX3ZhbHVlLT50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBB
ZGQoQWRkKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCisgICAgICAgICAgICAgICAgLy8g
SW50byB0aGlzOiBBZGQodmFsdWUsIGNvbnN0YW50MSArIGNvbnN0YW50MikKICAgICAgICAgICAg
ICAgICBWYWx1ZSogbmV3U3VtID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFkZENvbnN0YW50KG1fcHJv
YywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKICAgICAgICAgICAgICAgICBpZiAobmV3
U3VtKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1f
aW5kZXgsIG5ld1N1bSk7CiAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0g
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
LT5jaGlsZCgxKSA9IG5ld1N1bTsKICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRkKEFkZCh2YWx1ZSwg
Y29uc3RhbnQpLCBvdGhlclZhbHVlKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQWRk
KEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSksIGNvbnN0YW50KQorICAgICAgICAgICAgICAgIGlmICgh
bV92YWx1ZS0+Y2hpbGQoMSktPmhhc0ludCgpICYmIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgx
KS0+aGFzSW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gbV92YWx1
ZS0+Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY29uc3Rh
bnQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgICAgIFZh
bHVlKiBvdGhlclZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgY291bGQgY3JlYXRlIGR1cGxpY2F0ZSBjb2RlIGlmIEFkZCh2YWx1ZSwgY29uc3Rh
bnQpIGlzIHVzZWQgZWxzZXdoZXJlLgorICAgICAgICAgICAgICAgICAgICAvLyBIb3dldmVyLCB3
ZSBhbHJlYWR5IG1vZGVsIGFkZGluZyBhIGNvbnN0YW50IGFzIGlmIGl0IHdhcyBmcmVlIGluIG90
aGVyIHBsYWNlcworICAgICAgICAgICAgICAgICAgICAvLyBzbyBsZXQncyBqdXN0IHJvbGwgd2l0
aCBpdC4gVGhlIGFsdGVybmF0aXZlIHdvdWxkIG1lYW4gaGF2aW5nIHRvIGRvIGdvb2QgdXNlCisg
ICAgICAgICAgICAgICAgICAgIC8vIGNvdW50cywgd2hpY2ggcmVkdWNlU3RyZW5ndGgoKSBjdXJy
ZW50bHkgZG9lc24ndCBoYXZlLgorICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgw
KSA9CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEFkZCwgbV92YWx1ZS0+b3Jp
Z2luKCksIHZhbHVlLCBvdGhlclZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+
Y2hpbGQoMSkgPSBjb25zdGFudDsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQotCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRkKG90
aGVyVmFsdWUsIEFkZCh2YWx1ZSwgY29uc3RhbnQpKQorICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBBZGQoQWRkKHZhbHVlLCBvdGhlclZhbHVlKSwgY29uc3RhbnQpCisgICAgICAgICAgICBpZiAo
aXNJbnQobV92YWx1ZS0+dHlwZSgpKQorICAgICAgICAgICAgICAgICYmICFtX3ZhbHVlLT5jaGls
ZCgwKS0+aGFzSW50KCkKKyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bj
b2RlKCkgPT0gQWRkCisgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxk
KDEpLT5oYXNJbnQoKSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fdmFsdWUt
PmNoaWxkKDEpLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogY29uc3RhbnQgPSBt
X3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG90aGVy
VmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGNyZWF0
ZXMgYSBkdXBsaWNhdGUgYWRkLiBUaGF0J3MgZGFuZ2Vyb3VzIGJ1dCBwcm9iYWJseSBmaW5lLCBz
ZWUgYWJvdmUuCisgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPQorICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAorICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIG90aGVyVmFs
dWUpOworICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gY29uc3RhbnQ7CisgICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQo
Y29uc3RhbnQxLCBjb25zdGFudDIpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50
MSArIGNvbnN0YW50MgogICAgICAgICAgICAgaWYgKFZhbHVlKiBjb25zdGFudEFkZCA9IG1fdmFs
dWUtPmNoaWxkKDApLT5hZGRDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAyMDcwMDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUs
NyArMjI1LDcgQEAgcHVibGljOgogICAgIGZsb2F0IGFzRmxvYXQoKSBjb25zdDsKIAogICAgIGJv
b2wgaGFzTnVtYmVyKCkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCByZXBy
ZXNlbnRhYmxlQXMoKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIGlzUmVw
cmVzZW50YWJsZUFzKCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBhc051bWJl
cigpIGNvbnN0OwogCiAgICAgLy8gQm9vbGVhbnMgaW4gQjMgYXJlIENvbnN0MzIoMCkgb3IgQ29u
c3QzMigxKS4gU28gdGhpcyBpcyB0cnVlIGlmIHRoZSB0eXBlIGlzIEludDMyIGFuZCB0aGUgb25s
eQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHJldmlz
aW9uIDIwNzAwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODYsMTcgKzE4NiwxNyBAQCBpbmxpbmUgYm9vbCBWYWx1ZTo6
aXNOZWdhdGl2ZVplcm8oKSBjb25zCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUg
Ym9vbCBWYWx1ZTo6cmVwcmVzZW50YWJsZUFzKCkgY29uc3QKK2lubGluZSBib29sIFZhbHVlOjpp
c1JlcHJlc2VudGFibGVBcygpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChvcGNvZGUoKSkgewogICAg
IGNhc2UgQ29uc3QzMjoKLSAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPFQ+KGFzSW50
MzIoKSk7CisgICAgICAgIHJldHVybiBCMzo6aXNSZXByZXNlbnRhYmxlQXM8VD4oYXNJbnQzMigp
KTsKICAgICBjYXNlIENvbnN0NjQ6Ci0gICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczxU
Pihhc0ludDY0KCkpOworICAgICAgICByZXR1cm4gQjM6OmlzUmVwcmVzZW50YWJsZUFzPFQ+KGFz
SW50NjQoKSk7CiAgICAgY2FzZSBDb25zdERvdWJsZToKLSAgICAgICAgcmV0dXJuIGlzUmVwcmVz
ZW50YWJsZUFzPFQ+KGFzRG91YmxlKCkpOworICAgICAgICByZXR1cm4gQjM6OmlzUmVwcmVzZW50
YWJsZUFzPFQ+KGFzRG91YmxlKCkpOwogICAgIGNhc2UgQ29uc3RGbG9hdDoKLSAgICAgICAgcmV0
dXJuIGlzUmVwcmVzZW50YWJsZUFzPFQ+KGFzRmxvYXQoKSk7CisgICAgICAgIHJldHVybiBCMzo6
aXNSZXByZXNlbnRhYmxlQXM8VD4oYXNGbG9hdCgpKTsKICAgICBkZWZhdWx0OgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJ
KHJldmlzaW9uIDIwNzAwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMjggKzE1NCwzNyBAQCB2b2lkIGxvd2VyVG9BaXJGb3JU
ZXN0aW5nKFByb2NlZHVyZSYgcHJvCiAgICAgQWlyOjp2YWxpZGF0ZShwcm9jLmNvZGUoKSk7CiB9
CiAKLXZvaWQgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oQ29tcGlsYXRpb24mIGNvbXBpbGF0aW9uLCBj
b25zdCBjaGFyKiB0ZXh0KQordGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KK3ZvaWQgY2hlY2tEaXNh
c3NlbWJseShDb21waWxhdGlvbiYgY29tcGlsYXRpb24sIGNvbnN0IEZ1bmMmIGZ1bmMsIENTdHJp
bmcgZmFpbFRleHQpCiB7CiAgICAgQ1N0cmluZyBkaXNhc3NlbWJseSA9IGNvbXBpbGF0aW9uLmRp
c2Fzc2VtYmx5KCk7Ci0gICAgaWYgKHN0cnN0cihkaXNhc3NlbWJseS5kYXRhKCksIHRleHQpKQor
ICAgIGlmIChmdW5jKGRpc2Fzc2VtYmx5LmRhdGEoKSkpCiAgICAgICAgIHJldHVybjsKLQorICAg
IAogICAgIGNyYXNoTG9jay5sb2NrKCk7Ci0gICAgZGF0YUxvZygiQmFkIGxvd2VyaW5nISAgRXhw
ZWN0ZWQgdG8gZmluZCAiLCB0ZXh0LCAiIGJ1dCBkaWRuJ3Q6XG4iKTsKKyAgICBkYXRhTG9nKCJC
YWQgbG93ZXJpbmchICAiLCBmYWlsVGV4dCwgIlxuIik7CiAgICAgZGF0YUxvZyhkaXNhc3NlbWJs
eSk7CiAgICAgQ1JBU0goKTsKIH0KIAotdm9pZCBjaGVja0RvZXNOb3RVc2VJbnN0cnVjdGlvbihD
b21waWxhdGlvbiYgY29tcGlsYXRpb24sIGNvbnN0IGNoYXIqIHRleHQpCit2b2lkIGNoZWNrVXNl
c0luc3RydWN0aW9uKENvbXBpbGF0aW9uJiBjb21waWxhdGlvbiwgY29uc3QgY2hhciogdGV4dCkK
IHsKLSAgICBDU3RyaW5nIGRpc2Fzc2VtYmx5ID0gY29tcGlsYXRpb24uZGlzYXNzZW1ibHkoKTsK
LSAgICBpZiAoIXN0cnN0cihkaXNhc3NlbWJseS5kYXRhKCksIHRleHQpKQotICAgICAgICByZXR1
cm47CisgICAgY2hlY2tEaXNhc3NlbWJseSgKKyAgICAgICAgY29tcGlsYXRpb24sCisgICAgICAg
IFsmXSAoY29uc3QgY2hhciogZGlzYXNzZW1ibHkpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0
dXJuIHN0cnN0cihkaXNhc3NlbWJseSwgdGV4dCk7CisgICAgICAgIH0sCisgICAgICAgIHRvQ1N0
cmluZygiRXhwZWN0ZWQgdG8gZmluZCAiLCB0ZXh0LCAiIGJ1dCBkaWRudCEiKSk7Cit9CiAKLSAg
ICBjcmFzaExvY2subG9jaygpOwotICAgIGRhdGFMb2coIkJhZCBsb3dlcmluZyEgIERpZCBub3Qg
ZXhwZWN0ZWQgdG8gZmluZCAiLCB0ZXh0LCAiIGJ1dCBpdCdzIHRoZXJlOlxuIik7Ci0gICAgZGF0
YUxvZyhkaXNhc3NlbWJseSk7Ci0gICAgQ1JBU0goKTsKK3ZvaWQgY2hlY2tEb2VzTm90VXNlSW5z
dHJ1Y3Rpb24oQ29tcGlsYXRpb24mIGNvbXBpbGF0aW9uLCBjb25zdCBjaGFyKiB0ZXh0KQorewor
ICAgIGNoZWNrRGlzYXNzZW1ibHkoCisgICAgICAgIGNvbXBpbGF0aW9uLAorICAgICAgICBbJl0g
KGNvbnN0IGNoYXIqIGRpc2Fzc2VtYmx5KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiAh
c3Ryc3RyKGRpc2Fzc2VtYmx5LCB0ZXh0KTsKKyAgICAgICAgfSwKKyAgICAgICAgdG9DU3RyaW5n
KCJEaWQgbm90IGV4cGVjdGVkIHRvIGZpbmQgIiwgdGV4dCwgIiBidXQgaXQncyB0aGVyZSEiKSk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CkBAIC0xMzM4MSw2ICsxMzM5MCwxNTggQEAg
dm9pZCB0ZXN0UGluUmVnaXN0ZXJzKCkKICAgICBnbyhmYWxzZSk7CiB9CiAKK3ZvaWQgdGVzdFg4
NkxlYUFkZEFkZFNobDEoKQoreworICAgIC8vIEFkZChBZGQoU2hsKEB4LCAkYyksIEB5KSwgJGQp
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksCisgICAg
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAyKSksCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCkpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDEwMCkpOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKKyAgICAKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGVhIDB4NjQoJXJkaSwlcnNp
LDQpLCAlcmF4Iik7CisgICAgQ0hFQ0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiks
ICgxICsgKDIgPDwgMikpICsgMTAwKTsKK30KKwordm9pZCB0ZXN0WDg2TGVhQWRkQWRkU2hsMigp
Cit7CisgICAgLy8gQWRkKEFkZChAeCwgU2hsKEB5LCAkYykpLCAkZCkKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVl
KiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9jLCBBZGQsIE9y
aWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJv
YywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgU2hsLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDIpKSksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTAw
KSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBy
ZXN1bHQpOworICAgIAorICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgY2hlY2tV
c2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJsZWEgMHg2NCglcmRpLCVyc2ksNCksICVyYXgiKTsKKyAg
ICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgKDEgKyAoMiA8PCAyKSkg
KyAxMDApOworfQorCit2b2lkIHRlc3RYODZMZWFBZGRBZGQoKQoreworICAgIC8vIEFkZChBZGQo
QHgsIEB5KSwgJGMpCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEwMCkpOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0
KTsKKyAgICAKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGNoZWNrRGlzYXNz
ZW1ibHkoCisgICAgICAgICpjb2RlLAorICAgICAgICBbJl0gKGNvbnN0IGNoYXIqIGRpc2Fzc2Vt
Ymx5KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJzdHIoZGlzYXNzZW1ibHksICJs
ZWEgMHg2NCglcmRpLCVyc2kpLCAlcmF4IikKKyAgICAgICAgICAgICAgICB8fCBzdHJzdHIoZGlz
YXNzZW1ibHksICJsZWEgMHg2NCglcnNpLCVyZGkpLCAlcmF4Iik7CisgICAgICAgIH0sCisgICAg
ICAgICJFeHBlY3RlZCB0byBmaW5kIHNvbWV0aGluZyBsaWtlIGxlYSAweDY0KCVyZGksJXJzaSks
ICVyYXggYnV0IGRpZG4ndCEiKTsKKyAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2Rl
LCAxLCAyKSwgKDEgKyAyKSArIDEwMCk7Cit9CisKK3ZvaWQgdGVzdFg4NkxlYUFkZFNobDEoKQor
eworICAgIC8vIEFkZChTaGwoQHgsICRjKSwgQHkpCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogcmVzdWx0ID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFNobCwgT3Jp
Z2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMikpLAorICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCkpOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgcmVzdWx0KTsKKyAgICAKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
ICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCAibGVhICglcmRpLCVyc2ksNCksICVyYXgi
KTsKKyAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8
IDIpKTsKK30KKwordm9pZCB0ZXN0WDg2TGVhQWRkU2hsMigpCit7CisgICAgLy8gQWRkKFNobChA
eCwgJGMpLCBAeSkKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0g
cHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBT
aGwsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDIpKSk7CisgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwor
ICAgIAorICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgY2hlY2tVc2VzSW5zdHJ1
Y3Rpb24oKmNvZGUsICJsZWEgKCVyZGksJXJzaSw0KSwgJXJheCIpOworICAgIENIRUNLX0VRKGlu
dm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAxICsgKDIgPDwgMikpOworfQorCit2b2lkIHRl
c3RSZWR1Y2VTdHJlbmd0aFJlYXNzb2NpYXRpb24oYm9vbCBmbGlwKQoreworICAgIC8vIEFkZChB
ZGQoQHgsICRjKSwgQHkpIC0+IEFkZChBZGQoQHgsIEB5KSwgJGMpCisgICAgLy8gYW5kCisgICAg
Ly8gQWRkKEB5LCBBZGQoQHgsICRjKSkgLT4gQWRkKEFkZChAeCwgQHkpLCAkYykKKyAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAg
IFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOworICAgIAorICAgIFZhbHVlKiBpbm5lckFkZCA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksIGFyZzEsCisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDIpKTsKKyAgICAKKyAg
ICBWYWx1ZSogb3V0ZXJBZGQ7CisgICAgaWYgKGZsaXApCisgICAgICAgIG91dGVyQWRkID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhcmcyLCBpbm5lckFkZCk7
CisgICAgZWxzZQorICAgICAgICBvdXRlckFkZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQWRkLCBPcmlnaW4oKSwgaW5uZXJBZGQsIGFyZzIpOworICAgIAorICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgb3V0ZXJBZGQpOworICAgIAorICAg
IHByb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKworICAgIGlmIChzaG91bGRCZVZlcmJvc2UoKSkg
eworICAgICAgICBkYXRhTG9nKCJJUiBiZWZvcmUgcmVkdWNlU3RyZW5ndGg6XG4iKTsKKyAgICAg
ICAgZGF0YUxvZyhwcm9jKTsKKyAgICB9CisgICAgCisgICAgcmVkdWNlU3RyZW5ndGgocHJvYyk7
CisgICAgCisgICAgaWYgKHNob3VsZEJlVmVyYm9zZSgpKSB7CisgICAgICAgIGRhdGFMb2coIklS
IGFmdGVyIHJlZHVjZVN0cmVuZ3RoOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvYyk7CisgICAg
fQorICAgIAorICAgIENIRUNLX0VRKHJvb3QtPmxhc3QoKS0+b3Bjb2RlKCksIFJldHVybik7Cisg
ICAgQ0hFQ0tfRVEocm9vdC0+bGFzdCgpLT5jaGlsZCgwKS0+b3Bjb2RlKCksIEFkZCk7CisgICAg
Q0hFQ0socm9vdC0+bGFzdCgpLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50UHRyKDQyKSk7Cisg
ICAgQ0hFQ0tfRVEocm9vdC0+bGFzdCgpLT5jaGlsZCgwKS0+Y2hpbGQoMCktPm9wY29kZSgpLCBB
ZGQpOworICAgIENIRUNLKAorICAgICAgICAocm9vdC0+bGFzdCgpLT5jaGlsZCgwKS0+Y2hpbGQo
MCktPmNoaWxkKDApID09IGFyZzEgJiYgcm9vdC0+bGFzdCgpLT5jaGlsZCgwKS0+Y2hpbGQoMCkt
PmNoaWxkKDEpID09IGFyZzIpIHx8CisgICAgICAgIChyb290LT5sYXN0KCktPmNoaWxkKDApLT5j
aGlsZCgwKS0+Y2hpbGQoMCkgPT0gYXJnMiAmJiByb290LT5sYXN0KCktPmNoaWxkKDApLT5jaGls
ZCgwKS0+Y2hpbGQoMSkgPT0gYXJnMSkpOworfQorCiAvLyBNYWtlIHN1cmUgdGhlIGNvbXBpbGVy
IGRvZXMgbm90IHRyeSB0byBvcHRpbWl6ZSBhbnl0aGluZyBvdXQuCiBORVZFUl9JTkxJTkUgZG91
YmxlIHplcm8oKQogewpAQCAtMTQ4MDEsNiArMTQ5NjIsMjAgQEAgdm9pZCBydW4oY29uc3QgY2hh
ciogZmlsdGVyKQogICAgIFJVTih0ZXN0UGF0Y2hwb2ludFRlcm1pbmFsUmV0dXJuVmFsdWUodHJ1
ZSkpOwogICAgIFJVTih0ZXN0UGF0Y2hwb2ludFRlcm1pbmFsUmV0dXJuVmFsdWUoZmFsc2UpKTsK
ICAgICAKKyAgICBSVU4odGVzdE1lbW9yeUZlbmNlKCkpOworICAgIFJVTih0ZXN0U3RvcmVGZW5j
ZSgpKTsKKyAgICBSVU4odGVzdExvYWRGZW5jZSgpKTsKKyAgICBSVU4odGVzdFRyYXBwaW5nTG9h
ZCgpKTsKKyAgICBSVU4odGVzdFRyYXBwaW5nU3RvcmUoKSk7CisgICAgUlVOKHRlc3RUcmFwcGlu
Z0xvYWRBZGRTdG9yZSgpKTsKKyAgICBSVU4odGVzdFRyYXBwaW5nTG9hZERDRSgpKTsKKyAgICBS
VU4odGVzdFRyYXBwaW5nU3RvcmVFbGltaW5hdGlvbigpKTsKKyAgICBSVU4odGVzdE1vdmVDb25z
dGFudHMoKSk7CisgICAgUlVOKHRlc3RQQ09yaWdpbk1hcERvZXNudEluc2VydE5vcHMoKSk7Cisg
ICAgUlVOKHRlc3RQaW5SZWdpc3RlcnMoKSk7CisgICAgUlVOKHRlc3RSZWR1Y2VTdHJlbmd0aFJl
YXNzb2NpYXRpb24odHJ1ZSkpOworICAgIFJVTih0ZXN0UmVkdWNlU3RyZW5ndGhSZWFzc29jaWF0
aW9uKGZhbHNlKSk7CisgICAgCiAgICAgaWYgKGlzWDg2KCkpIHsKICAgICAgICAgUlVOKHRlc3RC
cmFuY2hCaXRBbmRJbW1GdXNpb24oSWRlbnRpdHksIEludDY0LCAxLCBBaXI6OkJyYW5jaFRlc3Qz
MiwgQWlyOjpBcmc6OlRtcCkpOwogICAgICAgICBSVU4odGVzdEJyYW5jaEJpdEFuZEltbUZ1c2lv
bihJZGVudGl0eSwgSW50NjQsIDB4ZmYsIEFpcjo6QnJhbmNoVGVzdDMyLCBBaXI6OkFyZzo6VG1w
KSk7CkBAIC0xNDgxMCw3ICsxNDk4NSwxMSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIp
CiAgICAgICAgIFJVTih0ZXN0QnJhbmNoQml0QW5kSW1tRnVzaW9uKExvYWQ4WiwgSW50MzIsIDEs
IEFpcjo6QnJhbmNoVGVzdDgsIEFpcjo6QXJnOjpBZGRyKSk7CiAgICAgICAgIFJVTih0ZXN0QnJh
bmNoQml0QW5kSW1tRnVzaW9uKExvYWQsIEludDMyLCAxLCBBaXI6OkJyYW5jaFRlc3QzMiwgQWly
OjpBcmc6OkFkZHIpKTsKICAgICAgICAgUlVOKHRlc3RCcmFuY2hCaXRBbmRJbW1GdXNpb24oTG9h
ZCwgSW50NjQsIDEsIEFpcjo6QnJhbmNoVGVzdDMyLCBBaXI6OkFyZzo6QWRkcikpOwotICAgICAg
ICAKKyAgICAgICAgUlVOKHRlc3RYODZMZWFBZGRBZGRTaGwxKCkpOworICAgICAgICBSVU4odGVz
dFg4NkxlYUFkZEFkZFNobDIoKSk7CisgICAgICAgIFJVTih0ZXN0WDg2TGVhQWRkQWRkKCkpOwor
ICAgICAgICBSVU4odGVzdFg4NkxlYUFkZFNobDEoKSk7CisgICAgICAgIFJVTih0ZXN0WDg2TGVh
QWRkU2hsMigpKTsKICAgICB9CiAKICAgICBpZiAoaXNBUk02NCgpKSB7CkBAIC0xNDgxOCwxOCAr
MTQ5OTcsNiBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAgICAgIFJVTih0ZXN0
VGVybmFyeVN1Ykluc3RydWN0aW9uU2VsZWN0aW9uKFRydW5jLCBJbnQzMiwgQWlyOjpTdWIzMikp
OwogICAgIH0KIAotICAgIFJVTih0ZXN0TWVtb3J5RmVuY2UoKSk7Ci0gICAgUlVOKHRlc3RTdG9y
ZUZlbmNlKCkpOwotICAgIFJVTih0ZXN0TG9hZEZlbmNlKCkpOwotICAgIFJVTih0ZXN0VHJhcHBp
bmdMb2FkKCkpOwotICAgIFJVTih0ZXN0VHJhcHBpbmdTdG9yZSgpKTsKLSAgICBSVU4odGVzdFRy
YXBwaW5nTG9hZEFkZFN0b3JlKCkpOwotICAgIFJVTih0ZXN0VHJhcHBpbmdMb2FkRENFKCkpOwot
ICAgIFJVTih0ZXN0VHJhcHBpbmdTdG9yZUVsaW1pbmF0aW9uKCkpOwotICAgIFJVTih0ZXN0TW92
ZUNvbnN0YW50cygpKTsKLSAgICBSVU4odGVzdFBDT3JpZ2luTWFwRG9lc250SW5zZXJ0Tm9wcygp
KTsKLSAgICBSVU4odGVzdFBpblJlZ2lzdGVycygpKTsKLSAgICAKICAgICBpZiAodGFza3MuaXNF
bXB0eSgpKQogICAgICAgICB1c2FnZSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDIwNzAwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkK
QEAgLTMwMCw4ICszMDAsMTMgQEAgeDg2OiBYODZEaXYzMiBVWkQ6RzozMiwgVVpEOkc6MzIsIFU6
RzozMgogeDg2XzY0OiBYODZEaXY2NCBVWkQ6Rzo2NCwgVVpEOkc6NjQsIFU6Rzo2NAogICAgIFRt
cCosIFRtcCosIFRtcAogCi1MZWEgVUE6RzpQdHIsIEQ6RzpQdHIKK0xlYTMyIFVBOkc6MzIsIEQ6
RzozMgogICAgIEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcCBhcyB4ODZMZWEzMgorCitM
ZWE2NCBVQTpHOjY0LCBEOkc6NjQKKyAgICBBZGRyLCBUbXAKKyAgICB4ODY6IEluZGV4LCBUbXAg
YXMgeDg2TGVhNjQKIAogQW5kMzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKICAgICBUbXAsIFRt
cCwgVG1wCg==
</data>
<flag name="review"
          id="314306"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291207</attachid>
            <date>2016-10-10 19:02:39 -0700</date>
            <delta_ts>2016-10-10 19:02:39 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30498</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA3MDI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDE2LTEwLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMtPkFpciBsb3dlcmluZyBzaG91bGQgYmUgYWJsZSB0byBlbWl0IGNvbXBsZXggbGVhcyBvbiB4
ODYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzIz
NAorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorICAgICAgICAKKyAgICAgICAg
VGhpcyBhZGRzIGNvbXByZWhlbnNpdmUgc3VwcG9ydCBmb3IgZW1pdHRpbmcgbGVhIG9uIHg4Ni4K
KyAgICAgICAgCisgICAgICAgIFdoZW4gYWRkaW5nIHRoaXMsIEkgZm91bmQgdGhhdCBpdCB3YXMg
dXNlZnVsIHRvIGFsc28gZmluYWxseSBhZGQgbW9yZSByZWFzc29jaWF0aW9uLiBUaGF0CisgICAg
ICAgIHJlZHVjZXMgdGhlIGFtb3VudCBvZiBwYXR0ZXJucyB0aGF0IHRoZSBpbnN0cnVjdGlvbiBz
ZWxlY3RvciBoYXMgdG8gZGVhbCB3aXRoLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpsZWEzMik6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpsZWE2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyOjpsZWEpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNvbW1pdEludGVybmFsKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5QXBwZW5kTGVhKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjpjcmVhdGVTZWxlY3QpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzUmVkdWNlU3Ry
ZW5ndGguY3BwOgorICAgICAgICAqIGIzL0IzVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM1ZhbHVl
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzUmVwcmVzZW50YWJsZUFzKToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpyZXByZXNlbnRhYmxlQXMpOiBEZWxldGVkLgorICAg
ICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy90ZXN0YjMuY3Bw
OiBMb3RzIG9mIHRlc3RzIGZvciBsZWEgYW5kIHJlYXNzb2NpYXRpb24uCisKIDIwMTYtMTAtMTAg
IE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmFtZSB0aGUgU3Ry
aWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yIHN0cmluZyB0byBSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDIwNzAwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM1
OCwxMSArMTM1OCwxOCBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKLSAgICB2b2lkIGxlYShB
ZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB2b2lkIGxlYTMyKEFkZHJlc3Mg
YWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJlc3MuYmFzZSwgZGVzdCk7CisgICAgICAgIGFkZDMy
KFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIGFkZHJlc3MuYmFzZSwgZGVzdCk7CiAgICAg
fQogCisjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQorICAgIHZvaWQgbGVhNjQoQWRkcmVz
cyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBhZGQ2NChUcnVzdGVk
SW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBhZGRyZXNzLmJhc2UsIGRlc3QpOworICAgIH0KKyNlbmRp
ZiAvLyBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCisKICAgICBib29sIHNob3VsZEJsaW5kKElt
bTMyIGltbSkKICAgICB7CiAjaWYgRU5BQkxFKEZPUkNFRF9KSVRfQkxJTkRJTkcpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMjA3MDA0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5OSw3ICszOTksOCBAQCBwcml2YXRlOgogICAgIC8vIHNob3J0LCB5b3Ugc2hv
dWxkIGF2b2lkIHRoaXMgYnkgdXNpbmcgdGhlIHBhdHRlcm4gbWF0Y2hlciB0byBtYXRjaCBwYXR0
ZXJucy4KICAgICB2b2lkIGNvbW1pdEludGVybmFsKFZhbHVlKiB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIG1fbG9ja2VkLmFkZCh2YWx1ZSk7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAg
IG1fbG9ja2VkLmFkZCh2YWx1ZSk7CiAgICAgfQogCiAgICAgYm9vbCBjcm9zc2VzSW50ZXJmZXJl
bmNlKFZhbHVlKiB2YWx1ZSkKQEAgLTE3OTgsNiArMTc5OSwxNDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIH0sCiAgICAgICAgICAgICBmYWxzZSk7CiAgICAgfQorICAgIAorICAgIGJvb2wgdHJ5
QXBwZW5kTGVhKCkKKyAgICB7CisgICAgICAgIEFpcjo6T3Bjb2RlIGxlYU9wY29kZSA9IHRyeU9w
Y29kZUZvclR5cGUoTGVhMzIsIExlYTY0LCBtX3ZhbHVlLT50eXBlKCkpOworICAgICAgICBpZiAo
IWlzVmFsaWRGb3JtKGxlYU9wY29kZSwgQXJnOjpJbmRleCwgQXJnOjpUbXApKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBsZXRzIHVzIHR1cm4g
dGhpbmdzIGxpa2UgdGhpczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIEFkZChBZGQoQHgs
IFNobChAeSwgJDIpKSwgJDEwMCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW50byB0aGlzOgor
ICAgICAgICAvLworICAgICAgICAvLyAgICAgbGVhIDEwMCglcmRpLCVyc2ksNCksICVyYXgKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gV2UgaGF2ZSBhIGNob2ljZSBoZXJlIGJldHdlZW4gY29tbWl0
dGluZyB0aGUgaW50ZXJuYWwgYml0cyBvZiBhbiBpbmRleCBvciBzaGFyaW5nCisgICAgICAgIC8v
IHRoZW0uIFRoZXJlIGFyZSBzb2xpZCBhcmd1bWVudHMgZm9yIGJvdGguCisgICAgICAgIC8vCisg
ICAgICAgIC8vIFNoYXJpbmc6IFRoZSB3b3JkIG9uIHRoZSBzdHJlZXQgaXMgdGhhdCB0aGUgY29z
dCBvZiBhIGxlYSBpcyBvbmUgY3ljbGUgbm8gbWF0dGVyCisgICAgICAgIC8vIHdoYXQgaXQgZG9l
cy4gRXZlcnkgZXhwZXJpbWVudCBJJ3ZlIGV2ZXIgc2VlbiBzZWVtcyB0byBjb25maXJtIHRoaXMu
IFNvLCBzaGFyaW5nCisgICAgICAgIC8vIGhlbHBzIHVzIGluIHNpdHVhdGlvbnMgd2hlcmUgV2Fz
bSBpbnB1dCBkaWQgdGhpczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIHggPSBhW2ldLng7
CisgICAgICAgIC8vICAgICB5ID0gYVtpXS55OworICAgICAgICAvLworICAgICAgICAvLyBXaXRo
IHNoYXJpbmcgd2Ugd291bGQgZG86CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBsZWFsICgl
YSwlaSw0KSwgJXRtcAorICAgICAgICAvLyAgICAgY21wICglc2l6ZSwgJXRtcCkKKyAgICAgICAg
Ly8gICAgIGphIF9mYWlsCisgICAgICAgIC8vICAgICBtb3ZsICglYmFzZSwgJXRtcCksICV4Cisg
ICAgICAgIC8vICAgICBsZWFsIDQoJWEsJWksNCksICV0bXAKKyAgICAgICAgLy8gICAgIGNtcCAo
JXNpemUsICV0bXApCisgICAgICAgIC8vICAgICBqYSBfZmFpbAorICAgICAgICAvLyAgICAgbW92
bCAoJWJhc2UsICV0bXApLCAleQorICAgICAgICAvLworICAgICAgICAvLyBJbiB0aGUgYWJzZW5j
ZSBvZiBzaGFyaW5nLCB3ZSBtYXkgZmluZCBvdXJzZWx2ZXMgbmVlZGluZyBzZXBhcmF0ZSByZWdp
c3RlcnMgZm9yCisgICAgICAgIC8vIHRoZSBpbm5hcmRzIG9mIHRoZSBpbmRleC4gVGhhdCdzIHJl
bGF0aXZlbHkgdW5saWtlbHkgdG8gYmUgYSB0aGluZyBkdWUgdG8gb3RoZXIKKyAgICAgICAgLy8g
b3B0aW1pemF0aW9ucyB0aGF0IHdlIGFscmVhZHkgaGF2ZSwgYnV0IGl0IGNvdWxkIGhhcHBlbgor
ICAgICAgICAvLworICAgICAgICAvLyBDb21taXR0aW5nOiBUaGUgd29yc3QgY2FzZSBpcyB0aGF0
IHRoZXJlIGlzIGEgY29tcGxpY2F0ZWQgZ3JhcGggb2YgYWRkaXRpb25zIGFuZAorICAgICAgICAv
LyBzaGlmdHMsIHdoZXJlIGVhY2ggdmFsdWUgaGFzIG11bHRpcGxlIHVzZXMuIEluIHRoYXQgY2Fz
ZSwgaXQncyBiZXR0ZXIgdG8gY29tcHV0ZQorICAgICAgICAvLyBlYWNoIG9uZSBzZXBhcmF0ZWx5
IGZyb20gdGhlIG90aGVycyBzaW5jZSB0aGF0IHdheSwgZWFjaCBjYWxjdWxhdGlvbiB3aWxsIHVz
ZSBhCisgICAgICAgIC8vIHJlbGF0aXZlbHkgbmVhcmJ5IHRtcCBhcyBpdHMgaW5wdXQuIFRoYXQg
c2VlbXMgdW5jb21tb24sIGJ1dCBpbiB0aG9zZSBjYXNlcywKKyAgICAgICAgLy8gY29tbWl0dGlu
ZyBpcyBhIGNsZWFyIHdpbm5lcjogaXQgd291bGQgcmVzdWx0IGluIGEgc2ltcGxlIGludGVyZmVy
ZW5jZSBncmFwaAorICAgICAgICAvLyB3aGlsZSBzaGFyaW5nIHdvdWxkIHJlc3VsdCBpbiBhIGNv
bXBsZXggb25lLiBJbnRlcmZlcmVuY2Ugc3Vja3MgYmVjYXVzZSBpdCBtZWFucworICAgICAgICAv
LyBtb3JlIHRpbWUgaW4gSVJDIGFuZCBpdCBtZWFucyB3b3JzZSBjb2RlLgorICAgICAgICAvLwor
ICAgICAgICAvLyBJdCdzIG5vdCBzdXBlciBjbGVhciBpZiBhbnkgb2YgdGhlc2UgY29ybmVyIGNh
c2VzIHdvdWxkIGV2ZXIgYXJpc2UuIENvbW1pdHRpbmcKKyAgICAgICAgLy8gaGFzIHRoZSBiZW5l
Zml0IHRoYXQgaXQncyBlYXNpZXIgdG8gcmVhc29uIGFib3V0LCBhbmQgcHJvdGVjdHMgYSBtdWNo
IGRhcmtlcgorICAgICAgICAvLyBjb3JuZXIgY2FzZSAobW9yZSBpbnRlcmZlcmVuY2UpLgorICAg
ICAgICAgICAgICAgIAorICAgICAgICAvLyBIZXJlIGFyZSB0aGUgdGhpbmdzIHdlIHdhbnQgdG8g
bWF0Y2g6CisgICAgICAgIC8vIEFkZChBZGQoQHgsIEB5KSwgJGMpCisgICAgICAgIC8vIEFkZChT
aGwoQHgsICRjKSwgQHkpCisgICAgICAgIC8vIEFkZChAeCwgU2hsKEB5LCAkYykpCisgICAgICAg
IC8vIEFkZChBZGQoQHgsIFNobChAeSwgJGMpKSwgJGQpCisgICAgICAgIC8vIEFkZChBZGQoU2hs
KEB4LCAkYyksIEB5KSwgJGQpCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUgdGhhdCBpZiB5
b3UgZG8gQWRkKFNobChAeCwgJGMpLCAkZCkgdGhlbiB3ZSB3aWxsIHRyZWF0ICRkIGFzIGEgbm9u
LWNvbnN0YW50IGFuZAorICAgICAgICAvLyBmb3JjZSBpdCB0byBtYXRlcmlhbGl6ZS4gWW91J2xs
IGdldCBzb21ldGhpbmcgbGlrZSB0aGlzOgorICAgICAgICAvLworICAgICAgICAvLyBtb3ZsICRk
LCAldG1wCisgICAgICAgIC8vIGxlYWwgKCV0bXAsJXgsMTw8YyksICVyZXN1bHQKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gV2hpY2ggaXMgcHJldHR5IGNsb3NlIHRvIG9wdGltYWwgYW5kIGhhcyB0
aGUgbmljZSBlZmZlY3Qgb2YgYmVpbmcgYWJsZSB0byBoYW5kbGUgbGFyZ2UKKyAgICAgICAgLy8g
Y29uc3RhbnRzIGdyYWNlZnVsbHkuCisgICAgICAgIAorICAgICAgICBWYWx1ZSogaW5uZXJBZGQg
PSBudWxscHRyOworICAgICAgICAKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV92YWx1ZTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGNvbnN1bWUgQWRkKEFkZChfKSwgJGMp
LiBJZiB3ZSBzdWNjZWVkIGF0IGNvbnN1bWluZyBpdCB0aGVuIHdlIGhhdmUgdGhlc2UKKyAgICAg
ICAgLy8gcGF0dGVybnMgbGVmdCAoaS5lLiBpbiB0aGUgQWRkKF8pKToKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gQWRkKEFkZChAeCwgQHkpLCAkYykKKyAgICAgICAgLy8gQWRkKEFkZChAeCwgU2hs
KEB5LCAkYykpLCAkZCkKKyAgICAgICAgLy8gQWRkKEFkZChTaGwoQHgsICRjKSwgQHkpLCAkZCkK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIGFyZSBsb29raW5nIGF0IHRoZXNl
IHBhdHRlcm5zOgorICAgICAgICAvLworICAgICAgICAvLyBBZGQoU2hsKEB4LCAkYyksIEB5KQor
ICAgICAgICAvLyBBZGQoQHgsIFNobChAeSwgJGMpKQorICAgICAgICAvLworICAgICAgICAvLyBU
aGlzIG1lYW5zIHRoYXQgdGhlIHN1YnNlcXVlbnQgY29kZSBvbmx5IGhhcyB0byB3b3JyeSBhYm91
dCB0aHJlZSBwYXR0ZXJuczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWRkKFNobChAeCwgJGMp
LCBAeSkKKyAgICAgICAgLy8gQWRkKEB4LCBTaGwoQHksICRjKSkKKyAgICAgICAgLy8gQWRkKEB4
LCBAeSkgKG9ubHkgaWYgb2Zmc2V0ICE9IDApCisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsK
KyAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgxKS0+aXNSZXByZXNlbnRhYmxlQXM8aW50MzJfdD4o
KQorICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbCh2YWx1ZS0+Y2hpbGQoMCkpCisgICAgICAg
ICAgICAmJiB2YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEFkZCkgeworICAgICAgICAgICAg
aW5uZXJBZGQgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBvZmZzZXQgPSB2YWx1ZS0+
Y2hpbGQoMSktPmFzSW50MzIoKTsKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUtPmNoaWxkKDAp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBhdXRvIHRyeVNobCA9IFsmXSAoVmFsdWUq
IHNobCwgVmFsdWUqIG90aGVyKSAtPiBib29sIHsKKyAgICAgICAgICAgIGlmIChzaGwtPm9wY29k
ZSgpICE9IFNobCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBp
ZiAoIWNhbkJlSW50ZXJuYWwoc2hsKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBpZiAoIXNobC0+Y2hpbGQoMSktPmhhc0ludDMyKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdW5zaWduZWQgbG9nU2NhbGUgPSBzaGwtPmNo
aWxkKDEpLT5hc0ludDMyKCk7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+dHlwZSgpID09IElu
dDMyKQorICAgICAgICAgICAgICAgIGxvZ1NjYWxlICY9IDMxOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGxvZ1NjYWxlICY9IDYzOworICAgICAgICAgICAgLy8gVXNlIDY0LWJp
dCBtYXRoIHRvIHBlcmZvcm0gdGhlIHNoaWZ0IHNvIHRoYXQgPDwzMiBkb2VzIHRoZSByaWdodCB0
aGluZy4KKyAgICAgICAgICAgIGludDY0X3QgYmlnU2NhbGUgPSBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oMSkgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGxvZ1NjYWxlKTsKKyAgICAgICAgICAgIGlm
ICghaXNSZXByZXNlbnRhYmxlQXM8aW50MzJfdD4oYmlnU2NhbGUpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNjYWxlID0gc3RhdGljX2Nhc3Q8
aW50MzJfdD4oYmlnU2NhbGUpOworICAgICAgICAgICAgaWYgKCFBcmc6OmlzVmFsaWRJbmRleEZv
cm0oc2NhbGUsIG9mZnNldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBBU1NFUlQoIW1fbG9ja2VkLmNvbnRhaW5zKHNobC0+Y2hpbGQo
MCkpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9sb2NrZWQuY29udGFpbnMob3RoZXIpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYXBwZW5kKGxlYU9wY29kZSwgQXJnOjppbmRleCh0bXAo
b3RoZXIpLCB0bXAoc2hsLT5jaGlsZCgwKSksIHNjYWxlLCBvZmZzZXQpLCB0bXAobV92YWx1ZSkp
OworICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoaW5uZXJBZGQpOworICAgICAgICAgICAgY29t
bWl0SW50ZXJuYWwoc2hsKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Owor
ICAgICAgICAKKyAgICAgICAgaWYgKHRyeVNobCh2YWx1ZS0+Y2hpbGQoMCksIHZhbHVlLT5jaGls
ZCgxKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKHRyeVNobCh2YWx1
ZS0+Y2hpbGQoMSksIHZhbHVlLT5jaGlsZCgwKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgCisgICAgICAgIC8vIFRoZSByZW1haW5pbmcgcGF0dGVybiBpcyBqdXN0OgorICAg
ICAgICAvLyBBZGQoQHgsIEB5KSAob25seSBpZiBvZmZzZXQgIT0gMCkKKyAgICAgICAgaWYgKCFv
ZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIEFTU0VSVCghbV9sb2Nr
ZWQuY29udGFpbnModmFsdWUtPmNoaWxkKDApKSk7CisgICAgICAgIEFTU0VSVCghbV9sb2NrZWQu
Y29udGFpbnModmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgIGFwcGVuZChsZWFPcGNvZGUsIEFy
Zzo6aW5kZXgodG1wKHZhbHVlLT5jaGlsZCgwKSksIHRtcCh2YWx1ZS0+Y2hpbGQoMSkpLCAxLCBv
ZmZzZXQpLCB0bXAobV92YWx1ZSkpOworICAgICAgICBjb21taXRJbnRlcm5hbChpbm5lckFkZCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIHZvaWQgbG93ZXIoKQogICAgIHsK
QEAgLTE4MzQsOSArMTk3NywxMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBBZGQ6IHsKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRMZWEoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAKICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG11bHRpcGx5
QWRkT3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShNdWx0aXBseUFkZDMyLCBNdWx0aXBseUFkZDY0
LCBtX3ZhbHVlLT50eXBlKCkpOwotICAgICAgICAgICAgaWYgKG11bHRpcGx5QWRkT3Bjb2RlICE9
IEFpcjo6T29wcwotICAgICAgICAgICAgICAgICYmIGlzVmFsaWRGb3JtKG11bHRpcGx5QWRkT3Bj
b2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAg
ICAgIGlmIChpc1ZhbGlkRm9ybShtdWx0aXBseUFkZE9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1w
LCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CiAgICAgICAgICAgICAgICAgVmFsdWUqIGxlZnQgPSBt
X3ZhbHVlLT5jaGlsZCgwKTsKICAgICAgICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSBtX3ZhbHVl
LT5jaGlsZCgxKTsKICAgICAgICAgICAgICAgICBpZiAoIWltbShyaWdodCkgfHwgbV92YWx1ZVRv
VG1wW3JpZ2h0XSkgewpAQCAtMTg0Niw3ICsxOTkxLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgVmFsdWUqIG11bHRpcGx5TGVmdCA9IGxlZnQtPmNoaWxkKDApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG11bHRpcGx5UmlnaHQgPSBsZWZ0LT5jaGlsZCgx
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2xvY2tlZC5jb250YWlucyhtdWx0aXBs
eUxlZnQpIHx8IG1fbG9ja2VkLmNvbnRhaW5zKG11bHRpcGx5UmlnaHQpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNhbkJlSW50ZXJuYWwobXVsdGlwbHlMZWZ0KSB8fCBjYW5CZUludGVy
bmFsKG11bHRpcGx5UmlnaHQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG11bHRpcGx5QWRkT3Bjb2Rl
LCB0bXAobXVsdGlwbHlMZWZ0KSwgdG1wKG11bHRpcGx5UmlnaHQpLCB0bXAocmlnaHQpLCB0bXAo
bV92YWx1ZSkpOwpAQCAtMjIxNSw3ICsyMzYwLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNl
IFNsb3RCYXNlOiB7CiAgICAgICAgICAgICBhcHBlbmQoCi0gICAgICAgICAgICAgICAgTGVhLAor
ICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlKCkgPT0gSW50NjQgPyBMZWE2NCA6IExlYTMyLAog
ICAgICAgICAgICAgICAgIEFyZzo6c3RhY2sobV9zdGFja1RvU3RhY2suZ2V0KG1fdmFsdWUtPmFz
PFNsb3RCYXNlVmFsdWU+KCktPnNsb3QoKSkpLAogICAgICAgICAgICAgICAgIHRtcChtX3ZhbHVl
KSk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAyMDcwMDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4
MiwxOSArNDgyLDU2IEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAobV92YWx1ZS0+b3Bjb2Rl
KCkpIHsKICAgICAgICAgY2FzZSBBZGQ6CiAgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5
KCk7Ci0KLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQx
KSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBBZGQodmFsdWUsIGNvbnN0
YW50MSArIGNvbnN0YW50MikKKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fdmFsdWUt
PmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBZGQgJiYgaXNJbnQobV92YWx1ZS0+dHlwZSgpKSkgewor
ICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQxKSwg
Y29uc3RhbnQyKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQWRkKHZhbHVlLCBjb25z
dGFudDEgKyBjb25zdGFudDIpCiAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld1N1bSA9IG1fdmFs
dWUtPmNoaWxkKDEpLT5hZGRDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGls
ZCgxKSk7CiAgICAgICAgICAgICAgICAgaWYgKG5ld1N1bSkgewogICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZXdTdW0pOwogICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgw
KTsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZXdTdW07CiAgICAg
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IEFkZChBZGQodmFsdWUsIGNvbnN0YW50KSwgb3RoZXJWYWx1ZSkKKyAg
ICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBj
b25zdGFudCkKKyAgICAgICAgICAgICAgICBpZiAoIW1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQo
KSAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmhhc0ludCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAg
ICAgICAgICAgICAgICAgICAgVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNo
aWxkKDEpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogb3RoZXJWYWx1ZSA9IG1fdmFsdWUt
PmNoaWxkKDEpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNvdWxkIGNyZWF0ZSBkdXBs
aWNhdGUgY29kZSBpZiBBZGQodmFsdWUsIGNvbnN0YW50KSBpcyB1c2VkIGVsc2V3aGVyZS4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gSG93ZXZlciwgd2UgYWxyZWFkeSBtb2RlbCBhZGRpbmcgYSBj
b25zdGFudCBhcyBpZiBpdCB3YXMgZnJlZSBpbiBvdGhlciBwbGFjZXMKKyAgICAgICAgICAgICAg
ICAgICAgLy8gc28gbGV0J3MganVzdCByb2xsIHdpdGggaXQuIFRoZSBhbHRlcm5hdGl2ZSB3b3Vs
ZCBtZWFuIGhhdmluZyB0byBkbyBnb29kIHVzZQorICAgICAgICAgICAgICAgICAgICAvLyBjb3Vu
dHMsIHdoaWNoIHJlZHVjZVN0cmVuZ3RoKCkgY3VycmVudGx5IGRvZXNuJ3QgaGF2ZS4KKyAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPQorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCB2YWx1ZSwgb3RoZXJWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gY29uc3RhbnQ7CisgICAg
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChvdGhlclZhbHVlLCBBZGQodmFsdWUsIGNvbnN0
YW50KSkKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogQWRkKEFkZCh2YWx1ZSwgb3RoZXJWYWx1
ZSksIGNvbnN0YW50KQorICAgICAgICAgICAgaWYgKGlzSW50KG1fdmFsdWUtPnR5cGUoKSkKKyAg
ICAgICAgICAgICAgICAmJiAhbV92YWx1ZS0+Y2hpbGQoMCktPmhhc0ludCgpCisgICAgICAgICAg
ICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEFkZAorICAgICAgICAgICAg
ICAgICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKS0+aGFzSW50KCkpIHsKKyAgICAgICAg
ICAgICAgICBWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMCk7CisgICAg
ICAgICAgICAgICAgVmFsdWUqIGNvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDEp
OworICAgICAgICAgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMCk7
CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjcmVhdGVzIGEgZHVwbGljYXRlIGFkZC4gVGhhdCdz
IGRhbmdlcm91cyBidXQgcHJvYmFibHkgZmluZSwgc2VlIGFib3ZlLgorICAgICAgICAgICAgICAg
IG1fdmFsdWUtPmNoaWxkKDApID0KKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEFkZCwgbV92
YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBvdGhlclZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlLT5jaGlsZCgxKSA9IGNvbnN0YW50OworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQWRkKGNvbnN0YW50MSwgY29uc3RhbnQyKQogICAg
ICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgKyBjb25zdGFudDIKICAgICAgICAgICAg
IGlmIChWYWx1ZSogY29uc3RhbnRBZGQgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+YWRkQ29uc3RhbnQo
bV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWUuaAkocmV2aXNpb24gMjA3MDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDcgKzIyNSw3IEBAIHB1YmxpYzoKICAgICBm
bG9hdCBhc0Zsb2F0KCkgY29uc3Q7CiAKICAgICBib29sIGhhc051bWJlcigpIGNvbnN0OwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgcmVwcmVzZW50YWJsZUFzKCkgY29uc3Q7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBpc1JlcHJlc2VudGFibGVBcygpIGNvbnN0OwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQgYXNOdW1iZXIoKSBjb25zdDsKIAogICAgIC8vIEJvb2xl
YW5zIGluIEIzIGFyZSBDb25zdDMyKDApIG9yIENvbnN0MzIoMSkuIFNvIHRoaXMgaXMgdHJ1ZSBp
ZiB0aGUgdHlwZSBpcyBJbnQzMiBhbmQgdGhlIG9ubHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAyMDcwMDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDE3
ICsxODYsMTcgQEAgaW5saW5lIGJvb2wgVmFsdWU6OmlzTmVnYXRpdmVaZXJvKCkgY29ucwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIGJvb2wgVmFsdWU6OnJlcHJlc2VudGFibGVB
cygpIGNvbnN0CitpbmxpbmUgYm9vbCBWYWx1ZTo6aXNSZXByZXNlbnRhYmxlQXMoKSBjb25zdAog
ewogICAgIHN3aXRjaCAob3Bjb2RlKCkpIHsKICAgICBjYXNlIENvbnN0MzI6Ci0gICAgICAgIHJl
dHVybiBpc1JlcHJlc2VudGFibGVBczxUPihhc0ludDMyKCkpOworICAgICAgICByZXR1cm4gQjM6
OmlzUmVwcmVzZW50YWJsZUFzPFQ+KGFzSW50MzIoKSk7CiAgICAgY2FzZSBDb25zdDY0OgotICAg
ICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8VD4oYXNJbnQ2NCgpKTsKKyAgICAgICAgcmV0
dXJuIEIzOjppc1JlcHJlc2VudGFibGVBczxUPihhc0ludDY0KCkpOwogICAgIGNhc2UgQ29uc3RE
b3VibGU6Ci0gICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczxUPihhc0RvdWJsZSgpKTsK
KyAgICAgICAgcmV0dXJuIEIzOjppc1JlcHJlc2VudGFibGVBczxUPihhc0RvdWJsZSgpKTsKICAg
ICBjYXNlIENvbnN0RmxvYXQ6Ci0gICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczxUPihh
c0Zsb2F0KCkpOworICAgICAgICByZXR1cm4gQjM6OmlzUmVwcmVzZW50YWJsZUFzPFQ+KGFzRmxv
YXQoKSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMDcwMDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDI4
ICsxNTQsMzcgQEAgdm9pZCBsb3dlclRvQWlyRm9yVGVzdGluZyhQcm9jZWR1cmUmIHBybwogICAg
IEFpcjo6dmFsaWRhdGUocHJvYy5jb2RlKCkpOwogfQogCi12b2lkIGNoZWNrVXNlc0luc3RydWN0
aW9uKENvbXBpbGF0aW9uJiBjb21waWxhdGlvbiwgY29uc3QgY2hhciogdGV4dCkKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Cit2b2lkIGNoZWNrRGlzYXNzZW1ibHkoQ29tcGlsYXRpb24mIGNvbXBp
bGF0aW9uLCBjb25zdCBGdW5jJiBmdW5jLCBDU3RyaW5nIGZhaWxUZXh0KQogewogICAgIENTdHJp
bmcgZGlzYXNzZW1ibHkgPSBjb21waWxhdGlvbi5kaXNhc3NlbWJseSgpOwotICAgIGlmIChzdHJz
dHIoZGlzYXNzZW1ibHkuZGF0YSgpLCB0ZXh0KSkKKyAgICBpZiAoZnVuYyhkaXNhc3NlbWJseS5k
YXRhKCkpKQogICAgICAgICByZXR1cm47Ci0KKyAgICAKICAgICBjcmFzaExvY2subG9jaygpOwot
ICAgIGRhdGFMb2coIkJhZCBsb3dlcmluZyEgIEV4cGVjdGVkIHRvIGZpbmQgIiwgdGV4dCwgIiBi
dXQgZGlkbid0OlxuIik7CisgICAgZGF0YUxvZygiQmFkIGxvd2VyaW5nISAgIiwgZmFpbFRleHQs
ICJcbiIpOwogICAgIGRhdGFMb2coZGlzYXNzZW1ibHkpOwogICAgIENSQVNIKCk7CiB9CiAKLXZv
aWQgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oQ29tcGlsYXRpb24mIGNvbXBpbGF0aW9uLCBj
b25zdCBjaGFyKiB0ZXh0KQordm9pZCBjaGVja1VzZXNJbnN0cnVjdGlvbihDb21waWxhdGlvbiYg
Y29tcGlsYXRpb24sIGNvbnN0IGNoYXIqIHRleHQpCiB7Ci0gICAgQ1N0cmluZyBkaXNhc3NlbWJs
eSA9IGNvbXBpbGF0aW9uLmRpc2Fzc2VtYmx5KCk7Ci0gICAgaWYgKCFzdHJzdHIoZGlzYXNzZW1i
bHkuZGF0YSgpLCB0ZXh0KSkKLSAgICAgICAgcmV0dXJuOworICAgIGNoZWNrRGlzYXNzZW1ibHko
CisgICAgICAgIGNvbXBpbGF0aW9uLAorICAgICAgICBbJl0gKGNvbnN0IGNoYXIqIGRpc2Fzc2Vt
Ymx5KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJzdHIoZGlzYXNzZW1ibHksIHRl
eHQpOworICAgICAgICB9LAorICAgICAgICB0b0NTdHJpbmcoIkV4cGVjdGVkIHRvIGZpbmQgIiwg
dGV4dCwgIiBidXQgZGlkbnQhIikpOworfQogCi0gICAgY3Jhc2hMb2NrLmxvY2soKTsKLSAgICBk
YXRhTG9nKCJCYWQgbG93ZXJpbmchICBEaWQgbm90IGV4cGVjdGVkIHRvIGZpbmQgIiwgdGV4dCwg
IiBidXQgaXQncyB0aGVyZTpcbiIpOwotICAgIGRhdGFMb2coZGlzYXNzZW1ibHkpOwotICAgIENS
QVNIKCk7Cit2b2lkIGNoZWNrRG9lc05vdFVzZUluc3RydWN0aW9uKENvbXBpbGF0aW9uJiBjb21w
aWxhdGlvbiwgY29uc3QgY2hhciogdGV4dCkKK3sKKyAgICBjaGVja0Rpc2Fzc2VtYmx5KAorICAg
ICAgICBjb21waWxhdGlvbiwKKyAgICAgICAgWyZdIChjb25zdCBjaGFyKiBkaXNhc3NlbWJseSkg
LT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gIXN0cnN0cihkaXNhc3NlbWJseSwgdGV4dCk7
CisgICAgICAgIH0sCisgICAgICAgIHRvQ1N0cmluZygiRGlkIG5vdCBleHBlY3RlZCB0byBmaW5k
ICIsIHRleHQsICIgYnV0IGl0J3MgdGhlcmUhIikpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
eXBlPgpAQCAtMTMzODEsNiArMTMzOTAsMjc1IEBAIHZvaWQgdGVzdFBpblJlZ2lzdGVycygpCiAg
ICAgZ28oZmFsc2UpOwogfQogCit2b2lkIHRlc3RYODZMZWFBZGRBZGRTaGxMZWZ0KCkKK3sKKyAg
ICAvLyBBZGQoQWRkKFNobChAeCwgJGMpLCBAeSksICRkKQorICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIHJlc3Vs
dCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQs
IE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgICAgICBwcm9jLCBTaGwsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgMikpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKKyAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMDApKTsKKyAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7
CisgICAgCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBjaGVja1VzZXNJbnN0
cnVjdGlvbigqY29kZSwgImxlYSAweDY0KCVyZGksJXJzaSw0KSwgJXJheCIpOworICAgIENIRUNL
X0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAoMSArICgyIDw8IDIpKSArIDEwMCk7
Cit9CisKK3ZvaWQgdGVzdFg4NkxlYUFkZEFkZFNobFJpZ2h0KCkKK3sKKyAgICAvLyBBZGQoQWRk
KEB4LCBTaGwoQHksICRjKSksICRkKQorICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBTaGwsIE9yaWdpbigpLAorICAgICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMikpKSwKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMDApKTsKKyAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CisgICAgCisgICAg
YXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29k
ZSwgImxlYSAweDY0KCVyZGksJXJzaSw0KSwgJXJheCIpOworICAgIENIRUNLX0VRKGludm9rZTxp
bnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAoMSArICgyIDw8IDIpKSArIDEwMCk7Cit9CisKK3ZvaWQg
dGVzdFg4NkxlYUFkZEFkZCgpCit7CisgICAgLy8gQWRkKEFkZChAeCwgQHkpLCAkYykKKyAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
ICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBwcm9j
LCBBZGQsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwK
KyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxD
b25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTAwKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOworICAgIAorICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgY2hlY2tEaXNhc3NlbWJseSgKKyAgICAgICAgKmNv
ZGUsCisgICAgICAgIFsmXSAoY29uc3QgY2hhciogZGlzYXNzZW1ibHkpIC0+IGJvb2wgeworICAg
ICAgICAgICAgcmV0dXJuIHN0cnN0cihkaXNhc3NlbWJseSwgImxlYSAweDY0KCVyZGksJXJzaSks
ICVyYXgiKQorICAgICAgICAgICAgICAgIHx8IHN0cnN0cihkaXNhc3NlbWJseSwgImxlYSAweDY0
KCVyc2ksJXJkaSksICVyYXgiKTsKKyAgICAgICAgfSwKKyAgICAgICAgIkV4cGVjdGVkIHRvIGZp
bmQgc29tZXRoaW5nIGxpa2UgbGVhIDB4NjQoJXJkaSwlcnNpKSwgJXJheCBidXQgZGlkbid0ISIp
OworICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAoMSArIDIpICsg
MTAwKTsKK30KKwordm9pZCB0ZXN0WDg2TGVhQWRkU2hsUmlnaHQoKQoreworICAgIC8vIEFkZChT
aGwoQHgsICRjKSwgQHkpCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJv
YywgU2hsLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAyKSkpOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0
KTsKKyAgICAKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGNoZWNrVXNlc0lu
c3RydWN0aW9uKCpjb2RlLCAibGVhICglcmRpLCVyc2ksNCksICVyYXgiKTsKKyAgICBDSEVDS19F
UShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8IDIpKTsKK30KKwordm9p
ZCB0ZXN0WDg2TGVhQWRkU2hsTGVmdFNjYWxlMSgpCit7CisgICAgLy8gQWRkKFNobChAeCwgJGMp
LCBAeSkKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTaGwsIE9y
aWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKSk7CisgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOworICAgIAor
ICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgY2hlY2tEaXNhc3NlbWJseSgKKyAg
ICAgICAgKmNvZGUsCisgICAgICAgIFsmXSAoY29uc3QgY2hhciogZGlzYXNzZW1ibHkpIC0+IGJv
b2wgeworICAgICAgICAgICAgcmV0dXJuIHN0cnN0cihkaXNhc3NlbWJseSwgImxlYSAoJXJkaSwl
cnNpKSwgJXJheCIpCisgICAgICAgICAgICAgICAgfHwgc3Ryc3RyKGRpc2Fzc2VtYmx5LCAibGVh
ICglcnNpLCVyZGkpLCAlcmF4Iik7CisgICAgICAgIH0sCisgICAgICAgICJFeHBlY3RlZCB0byBm
aW5kIHNvbWV0aGluZyBsaWtlIGxlYSAoJXJkaSwlcnNpKSwgJXJheCBidXQgZGlkbid0ISIpOwor
ICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAxICsgMik7Cit9CisK
K3ZvaWQgdGVzdFg4NkxlYUFkZFNobExlZnRTY2FsZTIoKQoreworICAgIC8vIEFkZChTaGwoQHgs
ICRjKSwgQHkpCisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
LAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgU2hs
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSwKKyAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKSkpOworICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKKyAg
ICAKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIGNoZWNrVXNlc0luc3RydWN0
aW9uKCpjb2RlLCAibGVhICglcmRpLCVyc2ksMiksICVyYXgiKTsKKyAgICBDSEVDS19FUShpbnZv
a2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwgMSArICgyIDw8IDEpKTsKK30KKwordm9pZCB0ZXN0
WDg2TGVhQWRkU2hsTGVmdFNjYWxlNCgpCit7CisgICAgLy8gQWRkKFNobChAeCwgJGMpLCBAeSkK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgcHJvYywgU2hsLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAyKSksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOworICAgIAorICAgIGF1
dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUs
ICJsZWEgKCVyZGksJXJzaSw0KSwgJXJheCIpOworICAgIENIRUNLX0VRKGludm9rZTxpbnRwdHJf
dD4oKmNvZGUsIDEsIDIpLCAxICsgKDIgPDwgMikpOworfQorCit2b2lkIHRlc3RYODZMZWFBZGRT
aGxMZWZ0U2NhbGU4KCkKK3sKKyAgICAvLyBBZGQoU2hsKEB4LCAkYyksIEB5KQorICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
VmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEFk
ZCwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFNobCwgT3JpZ2luKCksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMykpKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CisgICAgCisgICAgYXV0byBjb2RlID0g
Y29tcGlsZShwcm9jKTsKKyAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImxlYSAoJXJk
aSwlcnNpLDgpLCAlcmF4Iik7CisgICAgQ0hFQ0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwg
MSwgMiksIDEgKyAoMiA8PCAzKSk7Cit9CisKK3ZvaWQgdGVzdEFkZFNobDMyKCkKK3sKKyAgICAv
LyBBZGQoU2hsKEB4LCAkYyksIEB5KQorICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgIHByb2MsIFNobCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSksCisg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
MzIpKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCByZXN1bHQpOworICAgIAorICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgQ0hF
Q0tfRVEoaW52b2tlPGludHB0cl90PigqY29kZSwgMSwgMiksIDEgKyAoc3RhdGljX2Nhc3Q8aW50
cHRyX3Q+KDIpIDw8IHN0YXRpY19jYXN0PGludHB0cl90PigzMikpKTsKK30KKwordm9pZCB0ZXN0
QWRkU2hsNjQoKQoreworICAgIC8vIEFkZChTaGwoQHgsICRjKSwgQHkpCisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1
ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJvYywgQWRkLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgU2hsLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCA2NCkpKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CisgICAgCisgICAgYXV0byBjb2RlID0gY29t
cGlsZShwcm9jKTsKKyAgICBDSEVDS19FUShpbnZva2U8aW50cHRyX3Q+KCpjb2RlLCAxLCAyKSwg
MSArIDIpOworfQorCit2b2lkIHRlc3RBZGRTaGw2NSgpCit7CisgICAgLy8gQWRkKFNobChAeCwg
JGMpLCBAeSkKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBTaGws
IE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDY1KSkpOworICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKKyAg
ICAKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworICAgIENIRUNLX0VRKGludm9rZTxp
bnRwdHJfdD4oKmNvZGUsIDEsIDIpLCAxICsgKDIgPDwgMSkpOworfQorCit2b2lkIHRlc3RSZWR1
Y2VTdHJlbmd0aFJlYXNzb2NpYXRpb24oYm9vbCBmbGlwKQoreworICAgIC8vIEFkZChBZGQoQHgs
ICRjKSwgQHkpIC0+IEFkZChBZGQoQHgsIEB5KSwgJGMpCisgICAgLy8gYW5kCisgICAgLy8gQWRk
KEB5LCBBZGQoQHgsICRjKSkgLT4gQWRkKEFkZChAeCwgQHkpLCAkYykKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVl
KiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgIAorICAgIFZhbHVlKiBpbm5lckFkZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksIGFyZzEsCisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDIpKTsKKyAgICAKKyAgICBWYWx1
ZSogb3V0ZXJBZGQ7CisgICAgaWYgKGZsaXApCisgICAgICAgIG91dGVyQWRkID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhcmcyLCBpbm5lckFkZCk7CisgICAg
ZWxzZQorICAgICAgICBvdXRlckFkZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRk
LCBPcmlnaW4oKSwgaW5uZXJBZGQsIGFyZzIpOworICAgIAorICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgb3V0ZXJBZGQpOworICAgIAorICAgIHByb2Mu
cmVzZXRSZWFjaGFiaWxpdHkoKTsKKworICAgIGlmIChzaG91bGRCZVZlcmJvc2UoKSkgeworICAg
ICAgICBkYXRhTG9nKCJJUiBiZWZvcmUgcmVkdWNlU3RyZW5ndGg6XG4iKTsKKyAgICAgICAgZGF0
YUxvZyhwcm9jKTsKKyAgICB9CisgICAgCisgICAgcmVkdWNlU3RyZW5ndGgocHJvYyk7CisgICAg
CisgICAgaWYgKHNob3VsZEJlVmVyYm9zZSgpKSB7CisgICAgICAgIGRhdGFMb2coIklSIGFmdGVy
IHJlZHVjZVN0cmVuZ3RoOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvYyk7CisgICAgfQorICAg
IAorICAgIENIRUNLX0VRKHJvb3QtPmxhc3QoKS0+b3Bjb2RlKCksIFJldHVybik7CisgICAgQ0hF
Q0tfRVEocm9vdC0+bGFzdCgpLT5jaGlsZCgwKS0+b3Bjb2RlKCksIEFkZCk7CisgICAgQ0hFQ0so
cm9vdC0+bGFzdCgpLT5jaGlsZCgwKS0+Y2hpbGQoMSktPmlzSW50UHRyKDQyKSk7CisgICAgQ0hF
Q0tfRVEocm9vdC0+bGFzdCgpLT5jaGlsZCgwKS0+Y2hpbGQoMCktPm9wY29kZSgpLCBBZGQpOwor
ICAgIENIRUNLKAorICAgICAgICAocm9vdC0+bGFzdCgpLT5jaGlsZCgwKS0+Y2hpbGQoMCktPmNo
aWxkKDApID09IGFyZzEgJiYgcm9vdC0+bGFzdCgpLT5jaGlsZCgwKS0+Y2hpbGQoMCktPmNoaWxk
KDEpID09IGFyZzIpIHx8CisgICAgICAgIChyb290LT5sYXN0KCktPmNoaWxkKDApLT5jaGlsZCgw
KS0+Y2hpbGQoMCkgPT0gYXJnMiAmJiByb290LT5sYXN0KCktPmNoaWxkKDApLT5jaGlsZCgwKS0+
Y2hpbGQoMSkgPT0gYXJnMSkpOworfQorCiAvLyBNYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGRvZXMg
bm90IHRyeSB0byBvcHRpbWl6ZSBhbnl0aGluZyBvdXQuCiBORVZFUl9JTkxJTkUgZG91YmxlIHpl
cm8oKQogewpAQCAtMTQ4MDEsNiArMTUwNzksMjMgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmls
dGVyKQogICAgIFJVTih0ZXN0UGF0Y2hwb2ludFRlcm1pbmFsUmV0dXJuVmFsdWUodHJ1ZSkpOwog
ICAgIFJVTih0ZXN0UGF0Y2hwb2ludFRlcm1pbmFsUmV0dXJuVmFsdWUoZmFsc2UpKTsKICAgICAK
KyAgICBSVU4odGVzdE1lbW9yeUZlbmNlKCkpOworICAgIFJVTih0ZXN0U3RvcmVGZW5jZSgpKTsK
KyAgICBSVU4odGVzdExvYWRGZW5jZSgpKTsKKyAgICBSVU4odGVzdFRyYXBwaW5nTG9hZCgpKTsK
KyAgICBSVU4odGVzdFRyYXBwaW5nU3RvcmUoKSk7CisgICAgUlVOKHRlc3RUcmFwcGluZ0xvYWRB
ZGRTdG9yZSgpKTsKKyAgICBSVU4odGVzdFRyYXBwaW5nTG9hZERDRSgpKTsKKyAgICBSVU4odGVz
dFRyYXBwaW5nU3RvcmVFbGltaW5hdGlvbigpKTsKKyAgICBSVU4odGVzdE1vdmVDb25zdGFudHMo
KSk7CisgICAgUlVOKHRlc3RQQ09yaWdpbk1hcERvZXNudEluc2VydE5vcHMoKSk7CisgICAgUlVO
KHRlc3RQaW5SZWdpc3RlcnMoKSk7CisgICAgUlVOKHRlc3RSZWR1Y2VTdHJlbmd0aFJlYXNzb2Np
YXRpb24odHJ1ZSkpOworICAgIFJVTih0ZXN0UmVkdWNlU3RyZW5ndGhSZWFzc29jaWF0aW9uKGZh
bHNlKSk7CisgICAgUlVOKHRlc3RBZGRTaGwzMigpKTsKKyAgICBSVU4odGVzdEFkZFNobDY0KCkp
OworICAgIFJVTih0ZXN0QWRkU2hsNjUoKSk7CisgICAgCiAgICAgaWYgKGlzWDg2KCkpIHsKICAg
ICAgICAgUlVOKHRlc3RCcmFuY2hCaXRBbmRJbW1GdXNpb24oSWRlbnRpdHksIEludDY0LCAxLCBB
aXI6OkJyYW5jaFRlc3QzMiwgQWlyOjpBcmc6OlRtcCkpOwogICAgICAgICBSVU4odGVzdEJyYW5j
aEJpdEFuZEltbUZ1c2lvbihJZGVudGl0eSwgSW50NjQsIDB4ZmYsIEFpcjo6QnJhbmNoVGVzdDMy
LCBBaXI6OkFyZzo6VG1wKSk7CkBAIC0xNDgxMCw3ICsxNTEwNSwxNCBAQCB2b2lkIHJ1bihjb25z
dCBjaGFyKiBmaWx0ZXIpCiAgICAgICAgIFJVTih0ZXN0QnJhbmNoQml0QW5kSW1tRnVzaW9uKExv
YWQ4WiwgSW50MzIsIDEsIEFpcjo6QnJhbmNoVGVzdDgsIEFpcjo6QXJnOjpBZGRyKSk7CiAgICAg
ICAgIFJVTih0ZXN0QnJhbmNoQml0QW5kSW1tRnVzaW9uKExvYWQsIEludDMyLCAxLCBBaXI6OkJy
YW5jaFRlc3QzMiwgQWlyOjpBcmc6OkFkZHIpKTsKICAgICAgICAgUlVOKHRlc3RCcmFuY2hCaXRB
bmRJbW1GdXNpb24oTG9hZCwgSW50NjQsIDEsIEFpcjo6QnJhbmNoVGVzdDMyLCBBaXI6OkFyZzo6
QWRkcikpOwotICAgICAgICAKKyAgICAgICAgUlVOKHRlc3RYODZMZWFBZGRBZGRTaGxMZWZ0KCkp
OworICAgICAgICBSVU4odGVzdFg4NkxlYUFkZEFkZFNobFJpZ2h0KCkpOworICAgICAgICBSVU4o
dGVzdFg4NkxlYUFkZEFkZCgpKTsKKyAgICAgICAgUlVOKHRlc3RYODZMZWFBZGRTaGxSaWdodCgp
KTsKKyAgICAgICAgUlVOKHRlc3RYODZMZWFBZGRTaGxMZWZ0U2NhbGUxKCkpOworICAgICAgICBS
VU4odGVzdFg4NkxlYUFkZFNobExlZnRTY2FsZTIoKSk7CisgICAgICAgIFJVTih0ZXN0WDg2TGVh
QWRkU2hsTGVmdFNjYWxlNCgpKTsKKyAgICAgICAgUlVOKHRlc3RYODZMZWFBZGRTaGxMZWZ0U2Nh
bGU4KCkpOwogICAgIH0KIAogICAgIGlmIChpc0FSTTY0KCkpIHsKQEAgLTE0ODE4LDE4ICsxNTEy
MCw2IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICAgICAgUlVOKHRlc3RUZXJu
YXJ5U3ViSW5zdHJ1Y3Rpb25TZWxlY3Rpb24oVHJ1bmMsIEludDMyLCBBaXI6OlN1YjMyKSk7CiAg
ICAgfQogCi0gICAgUlVOKHRlc3RNZW1vcnlGZW5jZSgpKTsKLSAgICBSVU4odGVzdFN0b3JlRmVu
Y2UoKSk7Ci0gICAgUlVOKHRlc3RMb2FkRmVuY2UoKSk7Ci0gICAgUlVOKHRlc3RUcmFwcGluZ0xv
YWQoKSk7Ci0gICAgUlVOKHRlc3RUcmFwcGluZ1N0b3JlKCkpOwotICAgIFJVTih0ZXN0VHJhcHBp
bmdMb2FkQWRkU3RvcmUoKSk7Ci0gICAgUlVOKHRlc3RUcmFwcGluZ0xvYWREQ0UoKSk7Ci0gICAg
UlVOKHRlc3RUcmFwcGluZ1N0b3JlRWxpbWluYXRpb24oKSk7Ci0gICAgUlVOKHRlc3RNb3ZlQ29u
c3RhbnRzKCkpOwotICAgIFJVTih0ZXN0UENPcmlnaW5NYXBEb2VzbnRJbnNlcnROb3BzKCkpOwot
ICAgIFJVTih0ZXN0UGluUmVnaXN0ZXJzKCkpOwotICAgIAogICAgIGlmICh0YXNrcy5pc0VtcHR5
KCkpCiAgICAgICAgIHVzYWdlKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMjA3MDA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAt
MzAwLDggKzMwMCwxMyBAQCB4ODY6IFg4NkRpdjMyIFVaRDpHOjMyLCBVWkQ6RzozMiwgVTpHOjMy
CiB4ODZfNjQ6IFg4NkRpdjY0IFVaRDpHOjY0LCBVWkQ6Rzo2NCwgVTpHOjY0CiAgICAgVG1wKiwg
VG1wKiwgVG1wCiAKLUxlYSBVQTpHOlB0ciwgRDpHOlB0cgorTGVhMzIgVUE6RzozMiwgRDpHOjMy
CiAgICAgQWRkciwgVG1wCisgICAgeDg2OiBJbmRleCwgVG1wIGFzIHg4NkxlYTMyCisKK0xlYTY0
IFVBOkc6NjQsIEQ6Rzo2NAorICAgIEFkZHIsIFRtcAorICAgIHg4NjogSW5kZXgsIFRtcCBhcyB4
ODZMZWE2NAogCiBBbmQzMiBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogICAgIFRtcCwgVG1wLCBU
bXAK
</data>

          </attachment>
      

    </bug>

</bugzilla>