<?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>69314</bug_id>
          
          <creation_ts>2011-10-03 19:10:03 -0700</creation_ts>
          <short_desc>DFG should inline Array.push and Array.pop</short_desc>
          <delta_ts>2011-10-03 20:21:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ggaren</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>477405</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-03 19:10:03 -0700</bug_when>
    <thetext>Array.push and pop have a common case that is trivial to inline.  They are both easy to mark intrinsic and recognize in the DFG parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477407</commentid>
    <comment_count>1</comment_count>
      <attachid>109571</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-03 19:12:52 -0700</bug_when>
    <thetext>Created attachment 109571
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477408</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-03 19:13:08 -0700</bug_when>
    <thetext>Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;ArrayPushPop&quot; at /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc

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

                                            TipOfTree              ArrayPushPop                                  
SunSpider:
   3d-cube                                7.5292+-0.2685          7.4916+-0.2162       
   3d-morph                               7.3690+-0.1498          7.3064+-0.1296       
   3d-raytrace                            7.4644+-0.1651          7.4570+-0.2123       
   access-binary-trees                    1.7149+-0.0517    ?     1.7663+-0.0731       ? might be 1.0300x slower
   access-fannkuch                        6.4593+-0.2204          6.3815+-0.1350         might be 1.0122x faster
   access-nbody                           3.4865+-0.0837    ?     3.5506+-0.0637       ? might be 1.0184x slower
   access-nsieve                          2.6700+-0.0462          2.6154+-0.0684         might be 1.0209x faster
   bitops-3bit-bits-in-byte               1.7404+-0.0418          1.7285+-0.0722       
   bitops-bits-in-byte                    2.7215+-0.0405    ?     2.7849+-0.0656       ? might be 1.0233x slower
   bitops-bitwise-and                     3.3357+-0.0719    ?     3.3819+-0.0840       ? might be 1.0139x slower
   bitops-nsieve-bits                     5.4838+-0.1237          5.4370+-0.1371       
   controlflow-recursive                  2.1070+-0.0606          2.0732+-0.0486         might be 1.0163x faster
   crypto-aes                             6.5896+-0.2535    ?     6.6451+-0.2620       ?
   crypto-md5                             2.8113+-0.0864    ?     2.8687+-0.1216       ? might be 1.0204x slower
   crypto-sha1                            2.5359+-0.0903          2.4997+-0.0786         might be 1.0145x faster
   date-format-tofte                     10.3008+-0.3695         10.0081+-0.2452         might be 1.0292x faster
   date-format-xparb                      9.2723+-0.2153    ?     9.6544+-0.3292       ? might be 1.0412x slower
   math-cordic                            6.4975+-0.1773          6.2694+-0.0924         might be 1.0364x faster
   math-partial-sums                      7.6509+-0.1885          7.5679+-0.1814         might be 1.0110x faster
   math-spectral-norm                     2.8249+-0.0756          2.8108+-0.0630       
   regexp-dna                            10.6957+-0.2133    ?    10.8980+-0.2347       ? might be 1.0189x slower
   string-base64                          5.6088+-0.2108          5.4974+-0.1223         might be 1.0203x faster
   string-fasta                           6.7084+-0.2026          6.5720+-0.1958         might be 1.0208x faster
   string-tagcloud                       11.8739+-0.4024         11.7775+-0.3457       
   string-unpack-code                    21.2762+-0.3991         21.1529+-0.5638       
   string-validate-input                  6.3806+-0.2175          6.3697+-0.1696       

   &lt;arithmetic&gt; *                         6.2734+-0.0391          6.2525+-0.0317       
   &lt;geometric&gt;                            5.1439+-0.0283          5.1324+-0.0220       
   &lt;harmonic&gt;                             4.2177+-0.0296          4.2156+-0.0345       

                                            TipOfTree              ArrayPushPop                                  
V8:
   crypto                                71.9777+-0.3315         71.9465+-0.4020       
   deltablue                            226.6944+-1.3479    ^   213.3755+-1.1471       ^ definitely 1.0624x faster
   earley-boyer                          87.8452+-1.3144         87.5402+-0.2419       
   raytrace                              61.2115+-0.4091    !    61.9857+-0.3375       ! definitely 1.0126x slower
   regexp                               103.9358+-0.7486        103.5198+-0.4380       
   richards                             187.2110+-0.4576        186.3760+-0.7210       
   splay                                 91.3657+-0.6363         90.6163+-0.6436       

   &lt;arithmetic&gt;                         118.6059+-0.2335    ^   116.4800+-0.2288       ^ definitely 1.0183x faster
   &lt;geometric&gt; *                        106.5501+-0.2310    ^   105.5149+-0.1960       ^ definitely 1.0098x faster
   &lt;harmonic&gt;                            97.3001+-0.2407         96.9440+-0.1968       

                                            TipOfTree              ArrayPushPop                                  
Kraken:
   ai-astar                             490.0243+-3.5827        488.5005+-2.0491       
   audio-beat-detection                 189.5874+-0.9309    ?   190.0763+-1.3708       ?
   audio-dft                            269.2471+-2.7212    ?   269.3562+-2.5368       ?
   audio-fft                            125.3247+-0.8031        125.3164+-0.2451       
   audio-oscillator                     245.6467+-1.8417        244.7928+-1.9703       
   imaging-darkroom                     418.5553+-1.0923    ?   419.8428+-1.6280       ?
   imaging-desaturate                   224.0831+-0.4321        223.2770+-0.8439       
   imaging-gaussian-blur                583.0219+-0.8408        582.1372+-0.7914       
   json-parse-financial                  48.3008+-0.4007    ?    48.9651+-0.2916       ? might be 1.0138x slower
   json-stringify-tinderbox              67.4519+-0.2791    !    68.7807+-0.6156       ! definitely 1.0197x slower
   stanford-crypto-aes                  129.2170+-1.4831    ?   130.8275+-2.3204       ? might be 1.0125x slower
   stanford-crypto-ccm                  100.7769+-0.5569        100.6993+-0.7224       
   stanford-crypto-pbkdf2               194.2613+-0.7755    ^   192.3477+-0.8872       ^ definitely 1.0099x faster
   stanford-crypto-sha256-iterative      76.3842+-0.2803    ^    75.0738+-0.4485       ^ definitely 1.0175x faster

   &lt;arithmetic&gt; *                       225.8488+-0.4877        225.7138+-0.5722       
   &lt;geometric&gt;                          175.5947+-0.4593    ?   175.7403+-0.4814       ?
   &lt;harmonic&gt;                           135.8117+-0.4880    ?   136.2780+-0.4244       ?

                                            TipOfTree              ArrayPushPop                                  
All benchmarks:
   &lt;arithmetic&gt;                          88.4092+-0.1537    ^    88.0408+-0.1957       ^ definitely 1.0042x faster
   &lt;geometric&gt;                           23.1224+-0.0772         23.0659+-0.0677       
   &lt;harmonic&gt;                             7.4137+-0.0508          7.4102+-0.0592       

                                            TipOfTree              ArrayPushPop                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.2459+-0.1127    ^    53.0037+-0.1270       ^ definitely 1.0046x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477414</commentid>
    <comment_count>3</comment_count>
      <attachid>109574</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-03 19:32:47 -0700</bug_when>
    <thetext>Created attachment 109574
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477415</commentid>
    <comment_count>4</comment_count>
      <attachid>109574</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-10-03 19:36:16 -0700</bug_when>
    <thetext>Comment on attachment 109574
the patch

So much sadness in seeing this code written twice :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477416</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-03 19:40:28 -0700</bug_when>
    <thetext>Updated performance numbers after implementing 32-bit.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;ArrayPushPop&quot; at /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc

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

                                            TipOfTree              ArrayPushPop                                  
SunSpider:
   3d-cube                                7.4501+-0.2440          7.3643+-0.1557         might be 1.0117x faster
   3d-morph                               7.5153+-0.1409          7.3244+-0.1445         might be 1.0261x faster
   3d-raytrace                            7.7931+-0.3258          7.4860+-0.1856         might be 1.0410x faster
   access-binary-trees                    1.7623+-0.0869          1.7397+-0.0671         might be 1.0130x faster
   access-fannkuch                        6.3620+-0.1525          6.3063+-0.1004       
   access-nbody                           3.5119+-0.0704    ?     3.5548+-0.1139       ? might be 1.0122x slower
   access-nsieve                          2.6261+-0.0668    ?     2.6422+-0.0647       ?
   bitops-3bit-bits-in-byte               1.7484+-0.0531    ?     1.7505+-0.0409       ?
   bitops-bits-in-byte                    2.7235+-0.0699          2.7132+-0.0929       
   bitops-bitwise-and                     3.3628+-0.0731          3.3303+-0.0849       
   bitops-nsieve-bits                     5.3552+-0.1130    ?     5.5315+-0.1475       ? might be 1.0329x slower
   controlflow-recursive                  2.0652+-0.0315    ?     2.0902+-0.0544       ? might be 1.0121x slower
   crypto-aes                             6.7184+-0.2505    ?     6.7252+-0.2908       ?
   crypto-md5                             2.7716+-0.0827    ?     2.8147+-0.0787       ? might be 1.0155x slower
   crypto-sha1                            2.4449+-0.0748    ?     2.5473+-0.0594       ? might be 1.0419x slower
   date-format-tofte                     10.0495+-0.2735    ?    10.1968+-0.2721       ? might be 1.0147x slower
   date-format-xparb                      9.2339+-0.2371    ?     9.4363+-0.1953       ? might be 1.0219x slower
   math-cordic                            6.4047+-0.1813    ?     6.4916+-0.1603       ? might be 1.0136x slower
   math-partial-sums                      7.6492+-0.1104          7.5506+-0.1539         might be 1.0130x faster
   math-spectral-norm                     2.8396+-0.0693    ?     2.8464+-0.0796       ?
   regexp-dna                            10.8828+-0.2515         10.8588+-0.2314       
   string-base64                          5.3824+-0.0973    ?     5.5847+-0.1752       ? might be 1.0376x slower
   string-fasta                           6.6755+-0.1671          6.5792+-0.1215         might be 1.0146x faster
   string-tagcloud                       11.8123+-0.3088         11.5394+-0.3608         might be 1.0236x faster
   string-unpack-code                    21.2662+-0.4159    ?    21.2771+-0.4652       ?
   string-validate-input                  6.4247+-0.1741    ?     6.5574+-0.1890       ? might be 1.0207x slower

   &lt;arithmetic&gt; *                         6.2627+-0.0328    ?     6.2630+-0.0282       ?
   &lt;geometric&gt;                            5.1298+-0.0249    ?     5.1429+-0.0272       ?
   &lt;harmonic&gt;                             4.2046+-0.0371    ?     4.2236+-0.0369       ?

                                            TipOfTree              ArrayPushPop                                  
V8:
   crypto                                72.2659+-0.5199         72.0394+-0.2829       
   deltablue                            226.7959+-2.5189    ^   212.2174+-1.2944       ^ definitely 1.0687x faster
   earley-boyer                          87.3534+-0.2806         87.2338+-0.2535       
   raytrace                              61.2481+-0.2701    ?    61.6174+-0.6874       ?
   regexp                               103.8244+-0.4626    ?   104.3105+-1.5225       ?
   richards                             187.4970+-1.4137        185.9868+-0.7538       
   splay                                 91.2620+-0.4211    ?    92.0918+-0.6788       ?

   &lt;arithmetic&gt;                         118.6067+-0.4224    ^   116.4996+-0.5168       ^ definitely 1.0181x faster
   &lt;geometric&gt; *                        106.5333+-0.2654    ^   105.6339+-0.5156       ^ definitely 1.0085x faster
   &lt;harmonic&gt;                            97.2911+-0.2082         97.0665+-0.5095       

                                            TipOfTree              ArrayPushPop                                  
Kraken:
   ai-astar                             499.3114+-1.7404    ^   495.2293+-1.4996       ^ definitely 1.0082x faster
   audio-beat-detection                 189.2983+-1.3873    ?   190.5103+-0.8675       ?
   audio-dft                            270.4937+-2.4771    ?   279.0681+-8.9224       ? might be 1.0317x slower
   audio-fft                            125.6829+-0.8037        125.4832+-0.4322       
   audio-oscillator                     247.0646+-1.6372        245.4810+-1.8741       
   imaging-darkroom                     418.2131+-1.3020    ?   420.0575+-1.9099       ?
   imaging-desaturate                   223.7626+-0.6231    ?   224.0123+-0.9501       ?
   imaging-gaussian-blur                583.4748+-1.6843        580.2892+-1.7409       
   json-parse-financial                  48.2553+-0.2874    ?    48.6114+-0.3813       ?
   json-stringify-tinderbox              69.0173+-0.9414         67.9909+-0.2805         might be 1.0151x faster
   stanford-crypto-aes                  130.2836+-1.5283    ?   130.7792+-1.7017       ?
   stanford-crypto-ccm                  101.0237+-0.4357    ^    99.8091+-0.5694       ^ definitely 1.0122x faster
   stanford-crypto-pbkdf2               194.9367+-1.6563        192.7134+-1.9841         might be 1.0115x faster
   stanford-crypto-sha256-iterative      76.9176+-0.2668    ?    77.6517+-2.6786       ?

   &lt;arithmetic&gt; *                       226.9811+-0.3435        226.9776+-0.8794       
   &lt;geometric&gt;                          176.4986+-0.3526    ?   176.5179+-0.7770       ?
   &lt;harmonic&gt;                           136.5980+-0.3590        136.5628+-0.7900       

                                            TipOfTree              ArrayPushPop                                  
All benchmarks:
   &lt;arithmetic&gt;                          88.7407+-0.1208         88.4260+-0.3158       
   &lt;geometric&gt;                           23.1221+-0.0698    ?    23.1261+-0.0792       ?
   &lt;harmonic&gt;                             7.3920+-0.0636    ?     7.4244+-0.0632       ?

                                            TipOfTree              ArrayPushPop                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.3020+-0.1172         53.1518+-0.1505</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477418</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-03 19:55:19 -0700</bug_when>
    <thetext>Landed in r96567.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477421</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-03 20:01:30 -0700</bug_when>
    <thetext>Looks good overall, but I found some potential problems.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:1284
&gt; +        speculationCheck(m_jit.branch32(MacroAssembler::Above, storageLengthGPR, TrustedImm32(0x7ffffffe)));

Why is 0x7ffffffe special? I think we only need to guard unsigned overflow here. Could this just turn into a jo after the increment of storageLengthGPR?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:1346
&gt; +        MacroAssembler::Jump notHole = m_jit.branchTestPtr(MacroAssembler::NonZero, valueTagGPR);
&gt; +        MacroAssembler::Jump holeCase = m_jit.branchTestPtr(MacroAssembler::Zero, valuePayloadGPR);

The whole value test in 32_64 should test the tag for equality to JSValue::EmptyValueTag. I think this is one more branch than necessary, and not correct.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:1351
&gt; +        m_jit.store32(storageLengthGPR, MacroAssembler::BaseIndex(storageGPR, storageLengthGPR, MacroAssembler::ScalePtr, OBJECT_OFFSETOF(ArrayStorage, m_vector[0]) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)));
&gt; +        m_jit.store32(storageLengthGPR, MacroAssembler::BaseIndex(storageGPR, storageLengthGPR, MacroAssembler::ScalePtr, OBJECT_OFFSETOF(ArrayStorage, m_vector[0]) + OBJECT_OFFSETOF(JSValue, u.asBits.payload)));

I think you&apos;re trying to leave JSValue() behind in the popped location. Storing zero is not the right way to do that. (See comment above.)

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:1371
&gt; +        silentSpillAllRegisters(valueTagGPR, valuePayloadGPR);
&gt; +        m_jit.push(baseGPR);
&gt; +        m_jit.push(GPRInfo::callFrameRegister);
&gt; +        appendCallWithExceptionCheck(operationArrayPop);
&gt; +        setupResults(valueTagGPR, valuePayloadGPR);
&gt; +        silentFillAllRegisters(valueTagGPR, valuePayloadGPR);

Is inlining pop on a discontiguous array worth it? I&apos;d expect the operation to be very rare.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477425</commentid>
    <comment_count>8</comment_count>
      <attachid>109576</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-03 20:10:06 -0700</bug_when>
    <thetext>Created attachment 109576
the patch to fix Geoff&apos;s concerns</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477426</commentid>
    <comment_count>9</comment_count>
      <attachid>109576</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-03 20:17:44 -0700</bug_when>
    <thetext>Comment on attachment 109576
the patch to fix Geoff&apos;s concerns

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477427</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-03 20:21:40 -0700</bug_when>
    <thetext>32-bit fix landed in r96569.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109571</attachid>
            <date>2011-10-03 19:12:52 -0700</date>
            <delta_ts>2011-10-03 19:32:47 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>arraypushpop_patch_1.diff</filename>
            <type>text/plain</type>
            <size>19351</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY1NjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAK
KzIwMTEtMTAtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIGlubGluZSBBcnJheS5wdXNoIGFuZCBBcnJheS5wb3AKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5MzE0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXT1JLIElOIFBST0dSRVNT
LiBTdGlsbCBuZWVkIHRvIHN1cHBvcnQgMzItYml0LgorICAgICAgICAKKyAgICAgICAgMSUgc3Bl
ZWQtdXAgaW4gVjggZHVlIHRvIDYlIHNwZWVkLXVwIGluIFY4LWRlbHRhYmx1ZS4KKworICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlclg4Nl82NDo6c3RvcmVQdHIpOgorICAgICAgICAqIGNyZWF0ZV9oYXNoX3RhYmxl
OgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdJbnRy
aW5zaWMuaDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHUHJvcGFn
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9kZVBy
ZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpnZXRCeVZhbExvYWRF
bGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0TWV0aG9kTG9h
ZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorCiAyMDExLTEwLTAz
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgSlNDIEFTU0VSVCBP
cGVuaW5nIHRoZSBXZWIgSW5zcGVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvY3Jl
YXRlX2hhc2hfdGFibGUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2NyZWF0
ZV9oYXNoX3RhYmxlCShyZXZpc2lvbiA5NjU2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9j
cmVhdGVfaGFzaF90YWJsZQkod29ya2luZyBjb3B5KQpAQCAtMzIxLDYgKzMyMSwxNCBAQCBzdWIg
b3V0cHV0KCkgewogICAgICAgICAgICAgICAgICR0aHVua0dlbmVyYXRvciA9ICJsb2dUaHVua0dl
bmVyYXRvciI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCRuYW1lIGVx
ICJhcnJheVByb3RvdHlwZVRhYmxlIikgeworICAgICAgICAgICAgaWYgKCRrZXkgZXEgInB1c2gi
KSB7CisgICAgICAgICAgICAgICAgJGludHJpbnNpYyA9ICJERkc6OkFycmF5UHVzaEludHJpbnNp
YyI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoJGtleSBlcSAicG9wIikgeworICAg
ICAgICAgICAgICAgICRpbnRyaW5zaWMgPSAiREZHOjpBcnJheVBvcEludHJpbnNpYyI7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgcHJpbnQgIiAgIHsgXCIka2V5XCIsICRhdHRy
c1skaV0sIChpbnRwdHJfdCkiIC4gJGNhc3RTdHIgLiAiKCRmaXJzdFZhbHVlKSwgKGludHB0cl90
KSRzZWNvbmRWYWx1ZSBUSFVOS19HRU5FUkFUT1IoJHRodW5rR2VuZXJhdG9yKSBJTlRSSU5TSUMo
JGludHJpbnNpYykgfSxcbiI7CiAgICAgICAgICRpKys7CiAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQu
aAkocmV2aXNpb24gOTY1NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5OCw2ICsyOTgsMTIgQEAg
cHVibGljOgogICAgICAgICBzdG9yZVB0cihzY3JhdGNoUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAg
IH0KIAorICAgIHZvaWQgc3RvcmVQdHIoVHJ1c3RlZEltbVB0ciBpbW0sIEJhc2VJbmRleCBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnFfcm0oc2NyYXRjaFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKyAgICB9CisgICAgCiAg
ICAgRGF0YUxhYmVsMzIgc3RvcmVQdHJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQg
c3JjLCBBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3Jt
X2Rpc3AzMihzcmMsIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDk2NTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhh
bmRsZU1pbk1heChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBv
cCwgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZyk7CiAgICAgCiAgICAgLy8gSGFuZGxlIGludHJp
bnNpYyBmdW5jdGlvbnMuCi0gICAgYm9vbCBoYW5kbGVJbnRyaW5zaWMoYm9vbCB1c2VzUmVzdWx0
LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJn
KTsKKyAgICBib29sIGhhbmRsZUludHJpbnNpYyhib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRP
cGVyYW5kLCBJbnRyaW5zaWMsIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIFByZWRpY3RlZFR5
cGUgcHJlZGljdGlvbik7CiAgICAgLy8gUGFyc2UgYSBzaW5nbGUgYmFzaWMgYmxvY2sgb2YgYnl0
ZWNvZGUgaW5zdHJ1Y3Rpb25zLgogICAgIGJvb2wgcGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCk7
CiAgICAgLy8gU2V0dXAgcHJlZGVjZXNzb3IgbGlua3MgaW4gdGhlIGdyYXBoJ3MgQmFzaWNCbG9j
a3MuCkBAIC02ODEsNyArNjgxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4
KGJvb2wgdQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW50cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNp
YyBpbnRyaW5zaWMsIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcpCitib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwg
SW50cmluc2ljIGludHJpbnNpYywgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZywgUHJlZGljdGVk
VHlwZSBwcmVkaWN0aW9uKQogewogICAgIHN3aXRjaCAoaW50cmluc2ljKSB7CiAgICAgY2FzZSBB
YnNJbnRyaW5zaWM6IHsKQEAgLTcyMCw2ICs3MjAsMjcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAg
IAorICAgIGNhc2UgQXJyYXlQdXNoSW50cmluc2ljOiB7CisgICAgICAgIGlmIChmaXJzdEFyZyAr
IDEgIT0gbGFzdEFyZykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAg
ICAgIE5vZGVJbmRleCBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFycmF5UHVzaCwgT3BJbmZvKDAp
LCBPcEluZm8ocHJlZGljdGlvbiksIGdldChmaXJzdEFyZyksIGdldChmaXJzdEFyZyArIDEpKTsK
KyAgICAgICAgaWYgKHVzZXNSZXN1bHQpCisgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwg
YXJyYXlQdXNoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAg
ICAgCisgICAgY2FzZSBBcnJheVBvcEludHJpbnNpYzogeworICAgICAgICBpZiAoZmlyc3RBcmcg
IT0gbGFzdEFyZykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IE5vZGVJbmRleCBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbygwKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLCBnZXQoZmlyc3RBcmcpKTsKKyAgICAgICAgaWYgKHVzZXNSZXN1bHQp
CisgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQb3ApOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChp
bnRyaW5zaWMgPT0gTm9JbnRyaW5zaWMpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNTMx
LDE0ICsxNTUyLDE2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgICAgICBib29sIHVzZXNSZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICBpbnQgcmVzdWx0T3BlcmFuZCA9IDA7IC8vIG1ha2UgY29tcGlsZXIgaGFwcHkKICAgICAgICAg
ICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24g
KyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOworICAgICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
cHJlZGljdGlvbiA9IFByZWRpY3ROb25lOwogICAgICAgICAgICAgICAgIGlmIChpbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9y
ZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T3BlcmFuZCA9IHB1dEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgICAgICAgICAgdXNlc1Jlc3VsdCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKG1fZ3JhcGgu
c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBERkc6OkludHJp
bnNpYyBpbnRyaW5zaWMgPSBtX2dyYXBoLnZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KG1fY29kZUJs
b2NrLCBjYWxsVGFyZ2V0KS0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWMoKTsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHVzZXNSZXN1bHQsIHJl
c3VsdE9wZXJhbmQsIGludHJpbnNpYywgZmlyc3RBcmcsIGxhc3RBcmcpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGhhbmRsZUludHJpbnNpYyh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBpbnRy
aW5zaWMsIGZpcnN0QXJnLCBsYXN0QXJnLCBwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAgICAg
ICAgICAvLyBORVhUX09QQ09ERSgpIGhhcyB0byBiZSBpbnNpZGUgYnJhY2VzLgogICAgICAgICAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsKTsKICAgICAgICAgICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTY1NjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjA4LDcgKzIwOCwyOCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgs
IENvCiAgICAgICAgICAgICBwcmludGYoIiAgcHJlZGljdGluZyAlcyIsIHByZWRpY3Rpb25Ub1N0
cmluZyhub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS5o
YXNNZXRob2RDaGVja0RhdGEoKSkgewogICAgICAgICAgICAgTWV0aG9kQ2hlY2tEYXRhJiBtZXRo
b2RDaGVja0RhdGEgPSBtX21ldGhvZENoZWNrRGF0YVtub2RlLm1ldGhvZENoZWNrRGF0YUluZGV4
KCldOwotICAgICAgICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgZnVuY3Rpb24gJXAiLCBtZXRo
b2RDaGVja0RhdGEuZnVuY3Rpb24pOworICAgICAgICAgICAgSlNDZWxsKiBmdW5jdGlvbkNlbGwg
PSBnZXRKU0Z1bmN0aW9uKG1ldGhvZENoZWNrRGF0YS5mdW5jdGlvbik7CisgICAgICAgICAgICBF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IDA7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHBy
aW1hcnlGb3JDYWxsID0gMDsKKyAgICAgICAgICAgIENvZGVCbG9jayogc2Vjb25kYXJ5Rm9yQ2Fs
bCA9IDA7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHByaW1hcnlGb3JDb25zdHJ1Y3QgPSAwOwor
ICAgICAgICAgICAgQ29kZUJsb2NrKiBzZWNvbmRhcnlGb3JDb25zdHJ1Y3QgPSAwOworICAgICAg
ICAgICAgaWYgKGZ1bmN0aW9uQ2VsbCkgeworICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uID0gYXNGdW5jdGlvbihmdW5jdGlvbkNlbGwpOworICAgICAgICAgICAgICAgIGV4ZWN1
dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOworICAgICAgICAgICAgICAgIGlmICghZXhl
Y3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkgeworICAgICAgICAgICAgICAgICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25F
eGVjdXRhYmxlLT5pc0dlbmVyYXRlZEZvckNhbGwoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcHJpbWFyeUZvckNhbGwgPSAmZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29k
ZUZvckNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeUZvckNhbGwgPSBw
cmltYXJ5Rm9yQ2FsbC0+YWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25FeGVjdXRhYmxlLT5pc0dlbmVyYXRlZEZvckNv
bnN0cnVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmltYXJ5Rm9yQ29uc3RydWN0
ID0gJmZ1bmN0aW9uRXhlY3V0YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDb25zdHJ1Y3QoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeUZvckNvbnN0cnVjdCA9IHByaW1hcnlG
b3JDb25zdHJ1Y3QtPmFsdGVybmF0aXZlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludGYoIiAgcHJlZGlj
dGluZyBmdW5jdGlvbiAlcCglcCglcCglcCkgJXAoJXApKSkiLCBtZXRob2RDaGVja0RhdGEuZnVu
Y3Rpb24sIGV4ZWN1dGFibGUsIHByaW1hcnlGb3JDYWxsLCBzZWNvbmRhcnlGb3JDYWxsLCBwcmlt
YXJ5Rm9yQ29uc3RydWN0LCBzZWNvbmRhcnlGb3JDb25zdHJ1Y3QpOwogICAgICAgICB9CiAgICAg
fQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRyaW5zaWMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludHJpbnNpYy5oCShy
ZXZpc2lvbiA5NjU2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50cmluc2lj
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDkgQEAgZW51bSBJbnRyaW5zaWMgewogICAg
IEFic0ludHJpbnNpYywKICAgICBNaW5JbnRyaW5zaWMsCiAgICAgTWF4SW50cmluc2ljLAotICAg
IFNxcnRJbnRyaW5zaWMKKyAgICBTcXJ0SW50cmluc2ljLAorICAgIEFycmF5UHVzaEludHJpbnNp
YywKKyAgICBBcnJheVBvcEludHJpbnNpYwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk2NTY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0Miw2ICszNDIsMTAgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBhcml0aE5vZGVGbGFn
cwogICAgIG1hY3JvKEdldEdsb2JhbFZhciwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKFB1dEdsb2JhbFZhciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9i
YmVyc1dvcmxkKSBcCiAgICAgXAorICAgIC8qIE9wdGltaXphdGlvbnMgZm9yIGFycmF5IG11dGF0
aW9uLiAqL1wKKyAgICBtYWNybyhBcnJheVB1c2gsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKEFycmF5UG9wLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKKyAgICBcCiAg
ICAgLyogTm9kZXMgZm9yIGNvbXBhcmlzb24gb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQ29t
cGFyZUxlc3MsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdo
dENsb2JiZXIpIFwKICAgICBtYWNybyhDb21wYXJlTGVzc0VxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8
IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCkBAIC03NzIsNiArNzc2LDgg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIFJlc29sdmVCYXNlOgogICAgICAgICBjYXNl
IFJlc29sdmVCYXNlU3RyaWN0UHV0OgogICAgICAgICBjYXNlIFJlc29sdmVHbG9iYWw6CisgICAg
ICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgQXJyYXlQdXNoOgogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDk2NTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDYgKzM3NSwxOCBAQCB2b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uUHV0QnlWYWxCZXlvCiAgICAgYXJyYXktPkpTQXJyYXk6OnB1dChleGVjLCBp
bmRleCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOwogfQogCitFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7Cisg
ICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkp
OworICAgIGFycmF5LT5wdXNoKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgoKSkpOwor
fQorICAgICAgICAKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQ
b3AoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UpCit7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhc0FycmF5KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkpLT5w
b3AoKSk7Cit9CisgICAgICAgIAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRT
dHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3QodHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gOTY1NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsOCBA
QCB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dIYXNJbnN0CiB2b2lkIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKTsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5v
blN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpOwogdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHMoRXhlY1N0
YXRlKiwgSlNBcnJheSosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSk7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKTsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3Ao
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UpOwogdm9pZCBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciopOwogdm9p
ZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRl
bnRpZmllciopOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJp
Y3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NjU2NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNSw3
ICszMzUsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlv
bihQcmVkaWN0SW50MzIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7
CisgICAgICAgICAgICBpZiAobm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKQorICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQXJpdGhNb2Q6IHsKICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpOwogICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBy
aWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwpAQCAtOTY2LDYgKzk3
Myw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gZm9yIGEgc3RydWN0dXJlIGNoYW5n
ZSBvciBhIHB1dCB0byBwcm9wZXJ0eSBzdG9yYWdlIHRvIGFmZmVjdAogICAgICAgICAgICAgICAg
IC8vIHRoZSBHZXRCeVZhbC4KICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQXJyYXlQdXNoOgorICAgICAgICAgICAgICAgIC8vIEEgcHVzaCBjYW5ub3QgYWZmZWN0IHBy
ZXZpb3VzbHkgZXhpc3RpbmcgZWxlbWVudHMgaW4gdGhlIGFycmF5LgorICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAoY2xvYmJl
cnNXb3JsZChpbmRleCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CkBAIC05
OTksNiArMTAwOSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXlQdXNoOgorICAgICAgICAgICAgY2FzZSBBcnJheVBvcDoKKyAgICAgICAgICAgICAgICAv
LyBQdXNoaW5nIGFuZCBwb3BwaW5nIGNhbm5vdCBkZXNwZWNpZnkgYSBmdW5jdGlvbi4KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTm9Ob2RlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiA5NjU2NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNTMsNiArMTM1MywxMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJheVB1c2g6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRlbXBv
cmFyeSBzdG9yYWdlKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxlbmd0aCh0
aGlzKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9y
YWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIg
PSBzdG9yYWdlTGVuZ3RoLmdwcigpOworICAgICAgICAKKyAgICAgICAgd3JpdGVCYXJyaWVyKGJh
c2VHUFIsIHZhbHVlR1BSLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFj
Y2Vzcywgc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUik7CisKKyAgICAgICAgaWYgKCFpc0tu
b3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0
KCkpLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3Ro
KSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAKKyAgICAgICAgLy8gUmVmdXNlIHRvIGhh
bmRsZSBiaXphcnJlIGxlbmd0aHMuCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1t
MzIoMHg3ZmZmZmZmZSkpKTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
c3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJh
eTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3Jl
UHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5hZGQz
MihJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIG1faml0LnN0b3JlMzIoc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNU
X09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisgICAgICAgIG1faml0LmFkZDMy
KEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAgICBtX2pp
dC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHN0b3JhZ2VMZW5ndGhHUFIp
OworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKKyAgICAgICAgCisgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICAgICAg
CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHN0b3JhZ2VMZW5ndGhHUFIpOworICAg
ICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYmFzZUdQUiwgdmFsdWVHUFIpOworICAgICAgICBtX2pp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkFycmF5UHVz
aCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHN0b3JhZ2VM
ZW5ndGhHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHN0b3JhZ2VMZW5ndGhH
UFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFycmF5UG9wOiB7CisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSB2YWx1ZSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3Jh
Z2UodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlTGVuZ3RoKHRoaXMpOworICAg
ICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBz
dG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VM
ZW5ndGguZ3ByKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNo
aWxkMSgpKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJh
eVZQdHIpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIp
OworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
UiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0
aEdQUik7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBlbXB0eUFycmF5
Q2FzZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZUxl
bmd0aEdQUik7CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdWIzMihJbW0zMigxKSwgc3RvcmFn
ZUxlbmd0aEdQUik7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93
Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkpLCB2YWx1ZUdQUik7CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZTMyKHN0
b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkpOworCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGhvbGVDYXNlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgdmFsdWVHUFIpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKKyAgICAgICAgbV9q
aXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0lu
VmVjdG9yKSkpOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRv
bmU7CisgICAgICAgIAorICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAg
ICAKKyAgICAgICAgaG9sZUNhc2UubGluaygmbV9qaXQpOworICAgICAgICBlbXB0eUFycmF5Q2Fz
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgdmFsdWVHUFIpOworICAg
ICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAKKyAgICAgICAgc2xvd0Nh
c2UubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3Rl
cnModmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKGJhc2VHUFIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uQXJyYXlQb3ApOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLCB2YWx1ZUdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMo
dmFsdWVHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAg
IAorICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgREZHOjpKdW1wOiB7CiAgICAgICAgIEJsb2Nr
SW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChu
b2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109574</attachid>
            <date>2011-10-03 19:32:47 -0700</date>
            <delta_ts>2011-10-03 19:36:16 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>arraypushpop_patch_2.diff</filename>
            <type>text/plain</type>
            <size>26155</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY1NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAK
KzIwMTEtMTAtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIGlubGluZSBBcnJheS5wdXNoIGFuZCBBcnJheS5wb3AKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5MzE0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICAxJSBzcGVlZC11cCBpbiBW
OCBkdWUgdG8gNiUgc3BlZWQtdXAgaW4gVjgtZGVsdGFibHVlLgorCisgICAgICAgICogYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
WDg2XzY0OjpzdG9yZVB0cik6CisgICAgICAgICogY3JlYXRlX2hhc2hfdGFibGU6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0ludHJpbnNpYy5oOgor
ICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVh
cFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVOb2RlUHJlZGljdGlvbnMp
OgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldEJ5VmFsTG9hZEVsaW1pbmF0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpnZXRNZXRob2RMb2FkRWxpbWluYXRp
b24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKwogMjAxMS0xMC0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIEpTQyBBU1NFUlQgT3BlbmluZyB0aGUgV2ViIEluc3BlY3RvcgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2NyZWF0ZV9oYXNoX3RhYmxlCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9jcmVhdGVfaGFzaF90YWJsZQkocmV2aXNpb24gOTY1NjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvY3JlYXRlX2hhc2hfdGFibGUJKHdvcmtpbmcgY29weSkKQEAg
LTMyMSw2ICszMjEsMTQgQEAgc3ViIG91dHB1dCgpIHsKICAgICAgICAgICAgICAgICAkdGh1bmtH
ZW5lcmF0b3IgPSAibG9nVGh1bmtHZW5lcmF0b3IiOwogICAgICAgICAgICAgfQogICAgICAgICB9
CisgICAgICAgIGlmICgkbmFtZSBlcSAiYXJyYXlQcm90b3R5cGVUYWJsZSIpIHsKKyAgICAgICAg
ICAgIGlmICgka2V5IGVxICJwdXNoIikgeworICAgICAgICAgICAgICAgICRpbnRyaW5zaWMgPSAi
REZHOjpBcnJheVB1c2hJbnRyaW5zaWMiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCRrZXkgZXEgInBvcCIpIHsKKyAgICAgICAgICAgICAgICAkaW50cmluc2ljID0gIkRGRzo6QXJy
YXlQb3BJbnRyaW5zaWMiOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIHByaW50
ICIgICB7IFwiJGtleVwiLCAkYXR0cnNbJGldLCAoaW50cHRyX3QpIiAuICRjYXN0U3RyIC4gIigk
Zmlyc3RWYWx1ZSksIChpbnRwdHJfdCkkc2Vjb25kVmFsdWUgVEhVTktfR0VORVJBVE9SKCR0aHVu
a0dlbmVyYXRvcikgSU5UUklOU0lDKCRpbnRyaW5zaWMpIH0sXG4iOwogICAgICAgICAkaSsrOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDk2NTY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTgsNiArMjk4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmVQdHIoc2NyYXRjaFJl
Z2lzdGVyLCBhZGRyZXNzKTsKICAgICB9CiAKKyAgICB2b2lkIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIgaW1tLCBCYXNlSW5kZXggYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBzY3Jh
dGNoUmVnaXN0ZXIpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZxX3JtKHNjcmF0Y2hSZWdpc3Rl
ciwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5z
Y2FsZSk7CisgICAgfQorICAgIAogICAgIERhdGFMYWJlbDMyIHN0b3JlUHRyV2l0aEFkZHJlc3NP
ZmZzZXRQYXRjaChSZWdpc3RlcklEIHNyYywgQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAg
ICAgbV9hc3NlbWJsZXIubW92cV9ybV9kaXNwMzIoc3JjLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVz
cy5iYXNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NjU2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVNaW5NYXgoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVz
dWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcpOwogICAg
IAogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLgotICAgIGJvb2wgaGFuZGxlSW50
cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYywgaW50
IGZpcnN0QXJnLCBpbnQgbGFzdEFyZyk7CisgICAgYm9vbCBoYW5kbGVJbnRyaW5zaWMoYm9vbCB1
c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgZmlyc3RBcmcsIGlu
dCBsYXN0QXJnLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pOwogICAgIC8vIFBhcnNlIGEgc2lu
Z2xlIGJhc2ljIGJsb2NrIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KICAgICBib29sIHBhcnNl
QmxvY2sodW5zaWduZWQgbGltaXQpOwogICAgIC8vIFNldHVwIHByZWRlY2Vzc29yIGxpbmtzIGlu
IHRoZSBncmFwaCdzIEJhc2ljQmxvY2tzLgpAQCAtNjgxLDcgKzY4MSw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZU1pbk1heChib29sIHUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib29sIHVzZXNSZXN1bHQsIGludCBy
ZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0
QXJnKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvb2wgdXNlc1Jlc3Vs
dCwgaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5zaWMsIGludCBmaXJzdEFyZywg
aW50IGxhc3RBcmcsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBzd2l0Y2ggKGlu
dHJpbnNpYykgewogICAgIGNhc2UgQWJzSW50cmluc2ljOiB7CkBAIC03MjAsNiArNzIwLDI3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEFycmF5UHVzaEludHJpbnNpYzogewor
ICAgICAgICBpZiAoZmlyc3RBcmcgKyAxICE9IGxhc3RBcmcpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggYXJyYXlQdXNoID0gYWRkVG9HcmFw
aChBcnJheVB1c2gsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQoZmlyc3RBcmcp
LCBnZXQoZmlyc3RBcmcgKyAxKSk7CisgICAgICAgIGlmICh1c2VzUmVzdWx0KQorICAgICAgICAg
ICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFycmF5UHVzaCk7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJyYXlQb3BJbnRyaW5zaWM6IHsK
KyAgICAgICAgaWYgKGZpcnN0QXJnICE9IGxhc3RBcmcpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggYXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFy
cmF5UG9wLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KGZpcnN0QXJnKSk7Cisg
ICAgICAgIGlmICh1c2VzUmVzdWx0KQorICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFy
cmF5UG9wKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgICAgICAKICAgICBkZWZh
dWx0OgogICAgICAgICBBU1NFUlQoaW50cmluc2ljID09IE5vSW50cmluc2ljKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTUzMSwxNCArMTU1MiwxNiBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgYm9vbCB1c2VzUmVzdWx0ID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgaW50IHJlc3VsdE9wZXJhbmQgPSAwOyAvLyBtYWtlIGNv
bXBpbGVyIGhhcHB5CiAgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIHB1dEluc3RydWN0aW9u
ID0gY3VycmVudEluc3RydWN0aW9uICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKKyAgICAgICAg
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBQcmVkaWN0Tm9uZTsKICAgICAgICAg
ICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9w
Y29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dE9wZXJhbmQgPSBwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAg
ICAgIHVzZXNSZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uID0g
Z2V0UHJlZGljdGlvbihtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVO
R1RIKG9wX2NhbGwpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgREZHOjpJbnRyaW5zaWMgaW50cmluc2ljID0gbV9ncmFwaC52YWx1ZU9mRnVu
Y3Rpb25Db25zdGFudChtX2NvZGVCbG9jaywgY2FsbFRhcmdldCktPmV4ZWN1dGFibGUoKS0+aW50
cmluc2ljKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZUlu
dHJpbnNpYyh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIGZpcnN0QXJnLCBs
YXN0QXJnKSkgeworICAgICAgICAgICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWModXNlc1Jlc3Vs
dCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCBmaXJzdEFyZywgbGFzdEFyZywgcHJlZGljdGlv
bikpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTkVYVF9PUENPREUoKSBoYXMgdG8gYmUgaW5z
aWRlIGJyYWNlcy4KICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbCk7CiAg
ICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHJldmlzaW9uIDk2NTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsMjggQEAgdm9pZCBHcmFwaDo6ZHVt
cChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgICAgICAgICAgcHJpbnRmKCIgIHByZWRpY3Rp
bmcgJXMiLCBwcmVkaWN0aW9uVG9TdHJpbmcobm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKSk7CiAg
ICAgICAgIGVsc2UgaWYgKG5vZGUuaGFzTWV0aG9kQ2hlY2tEYXRhKCkpIHsKICAgICAgICAgICAg
IE1ldGhvZENoZWNrRGF0YSYgbWV0aG9kQ2hlY2tEYXRhID0gbV9tZXRob2RDaGVja0RhdGFbbm9k
ZS5tZXRob2RDaGVja0RhdGFJbmRleCgpXTsKLSAgICAgICAgICAgIHByaW50ZigiICBwcmVkaWN0
aW5nIGZ1bmN0aW9uICVwIiwgbWV0aG9kQ2hlY2tEYXRhLmZ1bmN0aW9uKTsKKyAgICAgICAgICAg
IEpTQ2VsbCogZnVuY3Rpb25DZWxsID0gZ2V0SlNGdW5jdGlvbihtZXRob2RDaGVja0RhdGEuZnVu
Y3Rpb24pOworICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSAwOworICAg
ICAgICAgICAgQ29kZUJsb2NrKiBwcmltYXJ5Rm9yQ2FsbCA9IDA7CisgICAgICAgICAgICBDb2Rl
QmxvY2sqIHNlY29uZGFyeUZvckNhbGwgPSAwOworICAgICAgICAgICAgQ29kZUJsb2NrKiBwcmlt
YXJ5Rm9yQ29uc3RydWN0ID0gMDsKKyAgICAgICAgICAgIENvZGVCbG9jayogc2Vjb25kYXJ5Rm9y
Q29uc3RydWN0ID0gMDsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkNlbGwpIHsKKyAgICAgICAg
ICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rpb24oZnVuY3Rpb25DZWxsKTsK
KyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBz
dGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGZ1bmN0aW9uRXhlY3V0YWJsZS0+aXNHZW5lcmF0ZWRGb3JDYWxsKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlGb3JDYWxsID0gJmZ1bmN0aW9uRXhlY3V0
YWJsZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3JDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzZWNvbmRhcnlGb3JDYWxsID0gcHJpbWFyeUZvckNhbGwtPmFsdGVybmF0aXZlKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRXhlY3V0
YWJsZS0+aXNHZW5lcmF0ZWRGb3JDb25zdHJ1Y3QoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcHJpbWFyeUZvckNvbnN0cnVjdCA9ICZmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5
dGVjb2RlRm9yQ29uc3RydWN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnlG
b3JDb25zdHJ1Y3QgPSBwcmltYXJ5Rm9yQ29uc3RydWN0LT5hbHRlcm5hdGl2ZSgpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcHJpbnRmKCIgIHByZWRpY3RpbmcgZnVuY3Rpb24gJXAoJXAoJXAoJXApICVwKCVwKSkp
IiwgbWV0aG9kQ2hlY2tEYXRhLmZ1bmN0aW9uLCBleGVjdXRhYmxlLCBwcmltYXJ5Rm9yQ2FsbCwg
c2Vjb25kYXJ5Rm9yQ2FsbCwgcHJpbWFyeUZvckNvbnN0cnVjdCwgc2Vjb25kYXJ5Rm9yQ29uc3Ry
dWN0KTsKICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW50cmluc2ljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnRyaW5zaWMuaAkocmV2aXNpb24gOTY1NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ludHJpbnNpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw5IEBA
IGVudW0gSW50cmluc2ljIHsKICAgICBBYnNJbnRyaW5zaWMsCiAgICAgTWluSW50cmluc2ljLAog
ICAgIE1heEludHJpbnNpYywKLSAgICBTcXJ0SW50cmluc2ljCisgICAgU3FydEludHJpbnNpYywK
KyAgICBBcnJheVB1c2hJbnRyaW5zaWMsCisgICAgQXJyYXlQb3BJbnRyaW5zaWMKIH07CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiA5NjU2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDIsNiArMzQyLDEwIEBAIHN0YXRpYyBpbmxpbmUgY29u
c3QgY2hhciogYXJpdGhOb2RlRmxhZ3MKICAgICBtYWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1
bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRHbG9iYWxWYXIsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKKyAgICAvKiBPcHRpbWl6
YXRpb25zIGZvciBhcnJheSBtdXRhdGlvbi4gKi9cCisgICAgbWFjcm8oQXJyYXlQdXNoLCBOb2Rl
UmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKKyAgICBt
YWNybyhBcnJheVBvcCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9i
YmVyc1dvcmxkKSBcCisgICAgXAogICAgIC8qIE5vZGVzIGZvciBjb21wYXJpc29uIG9wZXJhdGlv
bnMuICovXAogICAgIG1hY3JvKENvbXBhcmVMZXNzLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgbWFjcm8oQ29tcGFyZUxlc3NF
cSwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJl
cikgXApAQCAtNzcyLDYgKzc3Niw4IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBSZXNv
bHZlQmFzZToKICAgICAgICAgY2FzZSBSZXNvbHZlQmFzZVN0cmljdFB1dDoKICAgICAgICAgY2Fz
ZSBSZXNvbHZlR2xvYmFsOgorICAgICAgICBjYXNlIEFycmF5UG9wOgorICAgICAgICBjYXNlIEFy
cmF5UHVzaDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA5NjU2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw2ICszNzUs
MTcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogICAgIGFycmF5
LT5KU0FycmF5OjpwdXQoZXhlYywgaW5kZXgsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
KTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVB1c2go
RXhlY1N0YXRlKiBleGVjLCBKU0FycmF5KiBhcnJheSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZh
bHVlKQoreworICAgIGFycmF5LT5wdXNoKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFs
dWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGFycmF5LT5sZW5ndGgo
KSkpOworfQorICAgICAgICAKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
QXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNBcnJheSogYXJyYXkpCit7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShhcnJheS0+cG9wKCkpOworfQorICAgICAgICAKIHZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciogcHJv
cGVydHlOYW1lKQogewogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRydWUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDk2NTY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTk3LDYgKzk3LDggQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93SGFz
SW5zdAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJv
cGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSk7CiB2b2lkIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxOb25TdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKTsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9u
ZEFycmF5Qm91bmRzKEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpOworRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25BcnJheVB1c2goRXhlY1N0YXRlKiwgSlNBcnJheSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSk7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UG9w
KEV4ZWNTdGF0ZSosIEpTQXJyYXkqKTsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsKIHZvaWQgREZHX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsKIHZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElk
ZW50aWZpZXIqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdh
dG9yLmNwcAkocmV2aXNpb24gOTY1NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUsNyArMzM1LDE0IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdEludDMyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEFycmF5UG9wOgorICAgICAgICBjYXNlIEFycmF5UHVzaDogeworICAgICAgICAgICAgaWYg
KG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTW9kOiB7CiAg
ICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKTsKICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25v
ZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKQEAgLTk2Niw2ICs5NzMsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIC8vIGZvciBhIHN0cnVjdHVyZSBjaGFuZ2Ugb3IgYSBwdXQgdG8gcHJv
cGVydHkgc3RvcmFnZSB0byBhZmZlY3QKICAgICAgICAgICAgICAgICAvLyB0aGUgR2V0QnlWYWwu
CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5UHVzaDoKKyAg
ICAgICAgICAgICAgICAvLyBBIHB1c2ggY2Fubm90IGFmZmVjdCBwcmV2aW91c2x5IGV4aXN0aW5n
IGVsZW1lbnRzIGluIHRoZSBhcnJheS4KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwpAQCAtOTk5LDYgKzEwMDksMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UuCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFycmF5UHVzaDoKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgICAgICAgICAgLy8gUHVzaGluZyBhbmQgcG9w
cGluZyBjYW5ub3QgZGVzcGVjaWZ5IGEgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gOTY1NjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjYwLDYgKzEyNjAsMTIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBBcnJheVB1c2g6IHsKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZUxl
bmd0aCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CisgICAgICAg
IEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CisgICAgICAgIEdQ
UlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VM
ZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOworICAgICAgICAKKyAgICAgICAgd3JpdGVC
YXJyaWVyKGJhc2VHUFIsIHZhbHVlVGFnR1BSLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJG
b3JQcm9wZXJ0eUFjY2Vzcywgc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUik7CisKKyAgICAg
ICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAKKyAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojpz
dG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAKKyAgICAgICAgLy8g
UmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BS
LCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgCisgICAgICAg
IG1faml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5
bG9hZEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSkpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuYWRkMzIoSW1tMzIoMSksIHN0b3Jh
Z2VMZW5ndGhHUFIpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbGVuZ3RoKSkpOworICAgICAgICBtX2ppdC5hZGQzMihJbW0zMigxKSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICAgICAgbV9qaXQubW92ZShJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZyksIHN0b3JhZ2VHUFIpOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIHNsb3dQ
YXRoLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBtX2ppdC5wdXNoKHZh
bHVlVGFnR1BSKTsKKyAgICAgICAgbV9qaXQucHVzaCh2YWx1ZVBheWxvYWRHUFIpOworICAgICAg
ICBtX2ppdC5wdXNoKGJhc2VHUFIpOworICAgICAgICBtX2ppdC5wdXNoKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVy
YXRpb25BcnJheVB1c2gpOworICAgICAgICBzZXR1cFJlc3VsdHMoc3RvcmFnZUdQUiwgc3RvcmFn
ZUxlbmd0aEdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoc3RvcmFnZUdQUiwg
c3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICAgICAgCisgICAgICAgIGpzVmFsdWVSZXN1bHQoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0
aEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgQXJyYXlQb3A6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlVGFnKHRoaXMp
OworICAgICAgICBHUFJUZW1wb3JhcnkgdmFsdWVQYXlsb2FkKHRoaXMpOworICAgICAgICBHUFJU
ZW1wb3Jhcnkgc3RvcmFnZSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5n
dGgodGhpcyk7CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlVGFnLmdwcigpOworICAgICAgICBH
UFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWVQYXlsb2FkLmdwcigpOworICAgICAgICBHUFJS
ZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVu
Z3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghaXNL
bm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNl
dCgpKSwgc3RvcmFnZUdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0
aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGVtcHR5QXJyYXlDYXNlID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LnN1YjMy
KEltbTMyKDEpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgCisgICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCB2YWx1ZVRhZ0dQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0p
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgdmFsdWVQYXls
b2FkR1BSKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bm90SG9sZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZh
bHVlVGFnR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaG9sZUNhc2UgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB2YWx1ZVBheWxvYWRHUFIpOwor
ICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm1v
dmUoSW1tMzIoMCksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHN0
b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3Rv
cmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsK
KyAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKDEpLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIAorICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1w
KCkpOworICAgICAgICAKKyAgICAgICAgaG9sZUNhc2UubGluaygmbV9qaXQpOworICAgICAgICBl
bXB0eUFycmF5Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbTMyKGpzVW5kZWZpbmVkKCkudGFnKCkpLCB2YWx1ZVRhZ0dQUik7CisgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGpzVW5kZWZpbmVkKCkucGF5bG9hZCgp
KSwgdmFsdWVQYXlsb2FkR1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KyAgICAgICAgCisgICAgICAgIHNsb3dDYXNlLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAg
ICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIp
OworICAgICAgICBtX2ppdC5wdXNoKGJhc2VHUFIpOworICAgICAgICBtX2ppdC5wdXNoKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb25BcnJheVBvcCk7CisgICAgICAgIHNldHVwUmVzdWx0cyh2YWx1ZVRhZ0dQ
UiwgdmFsdWVQYXlsb2FkR1BSKTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyh2YWx1
ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygm
bV9qaXQpOworICAgICAgICAKKyAgICAgICAganNWYWx1ZVJlc3VsdCh2YWx1ZVRhZ0dQUiwgdmFs
dWVQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwog
ICAgIGNhc2UgREZHOjpKdW1wOiB7CiAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5n
cmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZz
ZXQoKSk7CiAgICAgICAgIGlmICh0YWtlbiAhPSAobV9ibG9jayArIDEpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiA5NjU2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNTMsNiArMTM1MywxMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcnJh
eVB1c2g6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIo
KSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMpOworICAgICAgICBHUFJUZW1w
b3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOworICAgICAgICAKKyAg
ICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLmNoaWxkMigpLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUik7
CisKKyAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAK
KyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAKKyAg
ICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdl
TGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKKyAgICAgICAgCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAg
CisgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0
ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSk7CisgICAgICAg
IAorICAgICAgICBtX2ppdC5hZGQzMihJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAg
ICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSk7
CisgICAgICAgIG1faml0LmFkZDMyKEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX251bVZhbHVlc0luVmVj
dG9yKSkpOworICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHN0
b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBzZXR1cFN0dWJBcmd1bWVudHMoYmFzZUdQUiwgdmFs
dWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbkFycmF5UHVzaCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKHN0b3JhZ2VMZW5ndGhHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CisgICAgICAgIAorICAgICAgICBqc1ZhbHVlUmVzdWx0KHN0b3JhZ2VMZW5ndGhHUFIs
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIEFycmF5UG9wOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSB2YWx1ZSh0aGlzKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9y
YWdlTGVuZ3RoKHRoaXMpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFn
ZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CisgICAgICAgIAorICAgICAgICBpZiAo
IWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VP
ZmZzZXQoKSksIHN0b3JhZ2VHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9s
ZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBlbXB0eUFycmF5Q2FzZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIAorICAgICAgICBtX2ppdC5z
dWIzMihJbW0zMigxKSwgc3RvcmFnZUxlbmd0aEdQUik7CisgICAgICAgIAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisgICAgICAgIAorICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwg
c3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCB2YWx1ZUdQUik7CisgICAgICAgIAorICAg
ICAgICBtX2ppdC5zdG9yZTMyKHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSkp
OworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGhvbGVDYXNlID0gbV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgdmFsdWVHUFIpOworICAgICAgICAKKyAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3Rv
clswXSkpKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKDEpLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX251bVZhbHVlc0luVmVjdG9yKSkpOworICAgICAgICAKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIAorICAgICAgICBkb25lLmFwcGVuZCht
X2ppdC5qdW1wKCkpOworICAgICAgICAKKyAgICAgICAgaG9sZUNhc2UubGluaygmbV9qaXQpOwor
ICAgICAgICBlbXB0eUFycmF5Q2FzZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpKSwgdmFsdWVHUFIpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAg
ICAgICAKKyAgICAgICAgc2xvd0Nhc2UubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICAgICAg
c2lsZW50U3BpbGxBbGxSZWdpc3RlcnModmFsdWVHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKGJh
c2VHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uQXJyYXlQb3ApOworICAgICAgICBt
X2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCB2YWx1ZUdQUik7CisgICAgICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnModmFsdWVHUFIpOworICAgICAgICAKKyAgICAgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBqc1ZhbHVlUmVzdWx0KHZhbHVlR1BSLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgREZHOjpK
dW1wOiB7CiAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Cg==
</data>
<flag name="review"
          id="106842"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109576</attachid>
            <date>2011-10-03 20:10:06 -0700</date>
            <delta_ts>2011-10-03 20:17:44 -0700</delta_ts>
            <desc>the patch to fix Geoff&apos;s concerns</desc>
            <filename>fix32bitpop_patch_1.diff</filename>
            <type>text/plain</type>
            <size>2189</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY1NjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMTAtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIGlubGluZSBBcnJheS5wdXNoIGFuZCBBcnJheS5wb3AKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5MzE0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBGaXggMzItYml0LgorCisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMS0xMC0wMyAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgaW5saW5lIEFycmF5LnB1
c2ggYW5kIEFycmF5LnBvcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiA5NjU2NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNDIsMTMgKzEzNDIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmUzMihzdG9yYWdlTGVu
Z3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpKTsKIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBub3RIb2xlID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgdmFsdWVUYWdHUFIpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBob2xlQ2FzZSA9
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHZhbHVlUGF5bG9hZEdQ
Uik7Ci0gICAgICAgIG5vdEhvbGUubGluaygmbV9qaXQpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBob2xlQ2FzZSA9IG1faml0LmJyYW5jaDMyKEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpLCB2YWx1ZVRhZ0dQUik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5tb3ZlKEltbTMy
KDApLCBzdG9yYWdlTGVuZ3RoR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShJbW0zMihKU1ZhbHVl
OjpFbXB0eVZhbHVlVGFnKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIG1faml0LnN0b3Jl
MzIoc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BS
LCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZT
RVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIG1faml0LnN0b3JlMzIoc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2Fk
KSkpOworCiAgICAgICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpJbW0zMigxKSwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV9udW1WYWx1ZXNJblZlY3RvcikpKTsKICAgICAgICAgCiAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBkb25lOwo=
</data>
<flag name="review"
          id="106845"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>