<?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>75291</bug_id>
          
          <creation_ts>2011-12-27 22:45:08 -0800</creation_ts>
          <short_desc>spill unboxed values in DFG 32_64</short_desc>
          <delta_ts>2011-12-28 20:36:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Yuqiang Xian">yuqiang.xian</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>527563</commentid>
    <comment_count>0</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-12-27 22:45:08 -0800</bug_when>
    <thetext>Currently all the values are spilled as boxed in DFG 32_64, which is not necessary and introduces additional stores/loads. Instead we can spill them as unboxed if feasible. It can be applied to the Integers, Cells and Booleans in DFG 32_64. Doubles are left as is because they don&apos;t need to be boxed at all. The modifications to the spill/fill and the OSR exit are required, as well as a bug fix to the &quot;isUnknownJS&quot; logic.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527565</commentid>
    <comment_count>1</comment_count>
      <attachid>120636</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-12-27 22:51:23 -0800</bug_when>
    <thetext>Created attachment 120636
the patch

Performance result: slight win (~0.6%) on V8 on ia32 (Core i7 Nehalem) Linux.

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

                                               ToT             SpillIntCellBoolean
SunSpider:
   3d-cube                                7.3869+-0.0443          7.3310+-0.0571
   3d-morph                              10.6693+-0.0507    ?    10.6780+-0.0314       ?
   3d-raytrace                            9.6109+-0.0488          9.5656+-0.0453
   access-binary-trees                    1.8772+-0.0392          1.8675+-0.0386
   access-fannkuch                       10.5697+-0.0564    !    10.8662+-0.0418       ! definitely 1.0280x slower
   access-nbody                           5.3871+-0.0445    ?     5.4150+-0.0481       ?
   access-nsieve                          3.7314+-0.0487          3.6964+-0.0520
   bitops-3bit-bits-in-byte               1.1904+-0.0395    ?     1.1929+-0.0411       ?
   bitops-bits-in-byte                    4.5915+-0.0400          4.5815+-0.0261
   bitops-bitwise-and                     4.2406+-0.0293          4.2254+-0.0214
   bitops-nsieve-bits                     6.7305+-0.0821    ?     6.7554+-0.0808       ?
   controlflow-recursive                  2.8442+-0.0548          2.7793+-0.0585         might be 1.0234x faster
   crypto-aes                             9.6263+-0.0558    ^     9.5084+-0.0599       ^ definitely 1.0124x faster
   crypto-md5                             2.9443+-0.0457    ?     2.9561+-0.0424       ?
   crypto-sha1                            2.5448+-0.0583          2.5068+-0.0467         might be 1.0152x faster
   date-format-tofte                     12.5186+-0.0811    ^    11.6395+-0.0432       ^ definitely 1.0755x faster
   date-format-xparb                     12.0059+-1.0066         11.8873+-0.0705
   math-cordic                            9.2077+-0.0509          9.1939+-0.0435
   math-partial-sums                     13.8908+-0.0561    ?    13.9097+-0.0466       ?
   math-spectral-norm                     2.6147+-0.0503          2.5875+-0.0421         might be 1.0105x faster
   regexp-dna                             9.1039+-0.0630    ?     9.1299+-0.0819       ?
   string-base64                          5.4430+-0.0586          5.4265+-0.0555
   string-fasta                           9.5071+-0.0423          9.4714+-0.0579
   string-tagcloud                       15.4707+-0.0764    ^    15.3426+-0.0423       ^ definitely 1.0083x faster
   string-unpack-code                    24.3361+-0.1073         24.2747+-0.0494
   string-validate-input                  7.4383+-0.0473    ^     7.2637+-0.0198       ^ definitely 1.0240x faster

   &lt;arithmetic&gt; *                         7.9032+-0.0457          7.8482+-0.0194         might be 1.0070x faster
   &lt;geometric&gt;                            6.3109+-0.0261          6.2710+-0.0247         might be 1.0064x faster
   &lt;harmonic&gt;                             4.8023+-0.0345          4.7752+-0.0385         might be 1.0057x faster

                                               ToT             SpillIntCellBoolean
V8:
   crypto                                97.2088+-0.4892    ^    95.0872+-0.3198       ^ definitely 1.0223x faster
   deltablue                            168.1859+-0.7193        167.2954+-0.5290
   earley-boyer                         107.8478+-0.3034        107.5352+-0.1209
   raytrace                              53.3845+-0.7817         52.8807+-0.5329
   regexp                               127.4918+-0.1960        126.9930+-0.3157
   richards                             173.9396+-0.4849    ?   176.4387+-2.2390       ? might be 1.0144x slower
   splay                                126.4676+-0.4146    ^   124.5180+-0.4407       ^ definitely 1.0157x faster

   &lt;arithmetic&gt;                         122.0751+-0.2284        121.5355+-0.3470         might be 1.0044x faster
   &lt;geometric&gt; *                        114.8709+-0.3256    ^   114.1350+-0.2897       ^ definitely 1.0064x faster
   &lt;harmonic&gt;                           106.4733+-0.5046    ^   105.6085+-0.3493       ^ definitely 1.0082x faster

                                               ToT             SpillIntCellBoolean
Kraken:
   ai-astar                             782.0847+-2.3402        779.7733+-0.9971
   audio-beat-detection                 241.6800+-1.9073        239.4006+-0.5053
   audio-dft                            364.3798+-3.5149        363.2535+-4.4820
   audio-fft                            155.4703+-0.3388    ^   153.7778+-0.0465       ^ definitely 1.0110x faster
   audio-oscillator                     336.4074+-2.4092    ?   338.0959+-2.2200       ?
   imaging-darkroom                     382.7754+-10.0518       381.5660+-9.4657
   imaging-desaturate                   315.5066+-0.1044    !   316.6295+-0.7696       ! definitely 1.0036x slower
   imaging-gaussian-blur                590.4285+-1.8883    ?   593.3130+-1.6824       ?
   json-parse-financial                  68.5218+-0.4322         67.9758+-0.3699
   json-stringify-tinderbox             102.3024+-1.0079        101.5212+-0.4966
   stanford-crypto-aes                  131.8947+-0.3136    ?   131.8996+-0.3047       ?
   stanford-crypto-ccm                  128.3543+-0.4875    ^   126.8451+-0.5070       ^ definitely 1.0119x faster
   stanford-crypto-pbkdf2               278.4242+-0.7731    ?   278.9995+-0.9072       ?
   stanford-crypto-sha256-iterative     108.8647+-0.4102        107.9071+-0.7944

   &lt;arithmetic&gt; *                       284.7925+-1.1519        284.3541+-1.0069         might be 1.0015x faster
   &lt;geometric&gt;                          226.2851+-0.8740        225.4726+-0.7258         might be 1.0036x faster
   &lt;harmonic&gt;                           180.4876+-0.6601        179.4361+-0.5094         might be 1.0059x faster

                                               ToT             SpillIntCellBoolean
All benchmarks:
   &lt;arithmetic&gt;                         107.3852+-0.3860        107.1438+-0.3251         might be 1.0023x faster
   &lt;geometric&gt;                           28.2377+-0.0990         28.0817+-0.0866         might be 1.0056x faster
   &lt;harmonic&gt;                             8.4572+-0.0597          8.4093+-0.0663         might be 1.0057x faster

                                               ToT             SpillIntCellBoolean
Geomean of preferred means:
   &lt;scaled-result&gt;                       63.7054+-0.2187         63.3890+-0.1483         might be 1.0050x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527834</commentid>
    <comment_count>2</comment_count>
      <attachid>120636</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-28 20:01:45 -0800</bug_when>
    <thetext>Comment on attachment 120636
the patch

Good stuff!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527837</commentid>
    <comment_count>3</comment_count>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-12-28 20:36:22 -0800</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/103792</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527839</commentid>
    <comment_count>4</comment_count>
      <attachid>120636</attachid>
    <who name="Yuqiang Xian">yuqiang.xian</who>
    <bug_when>2011-12-28 20:36:53 -0800</bug_when>
    <thetext>Comment on attachment 120636
the patch

Clearing flags.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120636</attachid>
            <date>2011-12-27 22:51:23 -0800</date>
            <delta_ts>2011-12-28 20:36:53 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>75291.patch</filename>
            <type>text/plain</type>
            <size>43224</size>
            <attacher name="Yuqiang Xian">yuqiang.xian</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAzNzU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDExLTEyLTI3ICBZdXFpYW5nIFhpYW4gIDx5dXFpYW5nLnhpYW5AaW50ZWwuY29tPgorCisg
ICAgICAgIHNwaWxsIHVuYm94ZWQgdmFsdWVzIGluIERGRyAzMl82NAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyOTEKKworICAgICAgICBDdXJyZW50
bHkgYWxsIHRoZSB2YWx1ZXMgYXJlIHNwaWxsZWQgYXMgYm94ZWQgaW4gREZHIDMyXzY0LCB3aGlj
aCBpcworICAgICAgICBub3QgbmVjZXNzYXJ5IGFuZCBpbnRyb2R1Y2VzIGFkZGl0aW9uYWwgc3Rv
cmVzL2xvYWRzLiBJbnN0ZWFkIHdlCisgICAgICAgIGNhbiBzcGlsbCB0aGVtIGFzIHVuYm94ZWQg
aWYgZmVhc2libGUuIEl0IGNhbiBiZSBhcHBsaWVkIHRvIHRoZQorICAgICAgICBJbnRlZ2Vycywg
Q2VsbHMgYW5kIEJvb2xlYW5zIGluIERGRyAzMl82NC4gRG91YmxlcyBhcmUgbGVmdCBhcyBpcwor
ICAgICAgICBiZWNhdXNlIHRoZXkgZG9uJ3QgbmVlZCB0byBiZSBib3hlZCBhdCBhbGwuIFRoZSBt
b2RpZmljYXRpb25zIHRvIHRoZQorICAgICAgICBzcGlsbC9maWxsIGFuZCB0aGUgT1NSIGV4aXQg
YXJlIHJlcXVpcmVkLCBhcyB3ZWxsIGFzIGEgYnVnIGZpeCB0byB0aGUKKyAgICAgICAgImlzVW5r
bm93bkpTIiBsb2dpYy4KKworICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaDoKKyAg
ICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpOgorICAg
ICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5Ojp2aXJ0dWFsUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpWYWx1ZVJlY292ZXJ5OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR2VuZXJhdGlvbkluZm8u
aDoKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aXNVbmtub3duSlMpOgorICAg
ICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpzcGlsbCk6CisgICAgICAgICogZGZnL0RG
R09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29t
cGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0tub3duTm90Qm9vbGVhbik6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGxHUFIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpzcGlsbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTEtMTItMjcgIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBNaXNjIGZpeGVz
IGFuZCBjbGVhbnVwcyBpbiBGdW5jdGlvbmFsLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAkocmV2aXNpb24gMTAzNzQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNiArNjIsOCBAQCBlbnVtIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgewogICAgIC8v
IEl0J3MgaW4gdGhlIHJlZ2lzdGVyIGZpbGUsIGF0IGEgZGlmZmVyZW50IGxvY2F0aW9uLCBhbmQg
aXQncyB1bmJveGVkLgogICAgIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUsCiAgICAgRG91
YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUsCisgICAgQ2VsbERpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlLAorICAgIEJvb2xlYW5EaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSwKICAgICAvLyBJdCdzIGEg
Y29uc3RhbnQuCiAgICAgQ29uc3RhbnQsCiAgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gcmVjb3Zl
ciBpdC4KQEAgLTE2Niw2ICsxNjgsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgcmVzdWx0Lm1f
dGVjaG5pcXVlID0gRG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU7CiAgICAgICAgICAgICBi
cmVhazsKIAorICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgICAgICAgICAgcmVzdWx0
Lm1fdGVjaG5pcXVlID0gQ2VsbERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKKyAg
ICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEJvb2xlYW5EaXNwbGFjZWRJblJlZ2lzdGVy
RmlsZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICBBU1NFUlQoZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBkYXRh
Rm9ybWF0ICE9IERhdGFGb3JtYXRTdG9yYWdlKTsKICAgICAgICAgICAgIHJlc3VsdC5tX3RlY2hu
aXF1ZSA9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOwpAQCAtMjI5LDcgKzIzOSw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBEaXNwbGFjZWRJblJlZ2lzdGVyRmls
ZSB8fCBtX3RlY2huaXF1ZSA9PSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlIHx8IG1fdGVj
aG5pcXVlID09IERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgQVNTRVJU
KG1fdGVjaG5pcXVlID09IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlIHx8IG1fdGVjaG5pcXVlID09
IEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUgfHwgbV90ZWNobmlxdWUgPT0gRG91YmxlRGlz
cGxhY2VkSW5SZWdpc3RlckZpbGUgfHwgbV90ZWNobmlxdWUgPT0gQ2VsbERpc3BsYWNlZEluUmVn
aXN0ZXJGaWxlIHx8IG1fdGVjaG5pcXVlID09IEJvb2xlYW5EaXNwbGFjZWRJblJlZ2lzdGVyRmls
ZSk7CiAgICAgICAgIHJldHVybiBtX3NvdXJjZS52aXJ0dWFsUmVnOwogICAgIH0KICAgICAKQEAg
LTI4Nyw2ICsyOTcsMTIgQEAgcHVibGljOgogICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgZnByaW50ZihvdXQsICIqZG91YmxlKCVkKSIsIHZp
cnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENlbGxE
aXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiKmNlbGwo
JWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQm9vbGVhbkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgZnByaW50Zihv
dXQsICIqYm9vbCglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDb25zdGFudDoKICAgICAgICAgICAgIGZwcmludGYob3V0LCAiWyVzXSIs
IGNvbnN0YW50KCkuZGVzY3JpcHRpb24oKSk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHJldmlzaW9u
IDEwMzc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDggKzE5NSw5IEBAIHB1YmxpYzoKICAgICAKICAgICBi
b29sIGlzVW5rbm93bkpTKCkKICAgICB7Ci0gICAgICAgIHJldHVybiByZWdpc3RlckZvcm1hdCgp
ID09IERhdGFGb3JtYXROb25lIHx8IHJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTCi0g
ICAgICAgICAgICB8fCBzcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXROb25lIHx8IHNwaWxsRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdEpTOworICAgICAgICByZXR1cm4gc3BpbGxGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0Tm9uZQorICAgICAgICAgICAgPyByZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3Jt
YXRKUyB8fCByZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXROb25lCisgICAgICAgICAgICA6
IHNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpTOwogICAgIH0KIAogICAgIC8vIEdldCB0aGUg
bWFjaGluZSByZXNpc3RlciBjdXJyZW50bHkgaG9sZGluZyB0aGUgdmFsdWUuCkBAIC0yMzAsMTIg
KzIzMSw2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fc3BpbGxGb3JtYXQgPT0gRGF0YUZv
cm1hdE5vbmUpOwogICAgICAgICAvLyBXZSBzaG91bGQgb25seSBiZSBzcGlsbGluZyB2YWx1ZXMg
dGhhdCBhcmUgY3VycmVudGx5IGluIG1hY2hpbmUgcmVnaXN0ZXJzLgogICAgICAgICBBU1NFUlQo
bV9yZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7Ci0gICAgICAgIC8vIFdlIG9ubHkg
c3BpbGwgdmFsdWVzIHRoYXQgaGF2ZSBiZWVuIGJveGVkIGFzIGEgSlNWYWx1ZSBiZWNhdXNlIGhp
c3RvcmljYWxseQotICAgICAgICAvLyB3ZSBhc3N1bWVkIHRoYXQgdGhlIEdDIHdvdWxkIHdhbnQg
dG8gYmUgYWJsZSB0byBwcmVjaXNlbHkgaWRlbnRpZnkgaGVhcAotICAgICAgICAvLyBwb2ludGVy
cy4gVGhpcyBpcyBub3QgdHJ1ZSBhbnltb3JlLCBidXQgd2Ugc3RpbGwgYXNzdW1lLCBpbiB0aGUg
ZmlsbCBjb2RlLAotICAgICAgICAvLyB0aGF0IGFueSBzcGlsbCBzbG90IGZvciBhIEpTIHZhbHVl
IGlzIGJveGVkLiBGb3Igc3RvcmFnZSBwb2ludGVycywgdGhlcmUgaXMKLSAgICAgICAgLy8gbm90
aGluZyB3ZSBjYW4gZG8gdG8gYm94IHRoZW0sIHNvIHdlIGFsbG93IHRoYXQgdG8gYmUgYW4gZXhj
ZXB0aW9uLgotICAgICAgICBBU1NFUlQoKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBz
cGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFnZSB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9y
bWF0SW50ZWdlciB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlKTsKIAogICAgICAg
ICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fc3BpbGxGb3Jt
YXQgPSBzcGlsbEZvcm1hdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxMDM3NDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMzLDYgKzEzMyw5IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21w
aWxlRXhpdChjb25zdAogICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4
aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5p
cXVlKCkpIHsKICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAg
Y2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICBjYXNlIENlbGxEaXNw
bGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5SZWdp
c3RlckZpbGU6CiAgICAgICAgICAgICBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMr
KzsKICAgICAgICAgICAgIEFTU0VSVCgoaW50KXJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpID49
IDApOwogICAgICAgICAgICAgCkBAIC0zNDYsMTkgKzM0OSw0MiBAQCB2b2lkIE9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgIHVuc2lnbmVkIGRpc3BsYWNlbWVu
dEluZGV4ID0gMDsKICAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0
Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CiAgICAgICAgICAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAg
ICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lz
dGVyRmlsZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKykpOwot
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihyZWNv
dmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50
SW5kZXgrKykpOworICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKHJl
Y292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1l
bnRJbmRleCsrKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhl
bHBlcnM6OnRhZ0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVn
aXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKykpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAg
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Io
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNl
bWVudEluZGV4KyspKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIEdQUkluZm86OnRvUmVnaXN0
ZXIoZGlzcGxhY2VtZW50SW5kZXgrKykpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihyZWNv
dmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50
SW5kZXgrKykpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRp
c3BsYWNlbWVudEluZGV4KyspKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudElu
ZGV4KyspKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgR1BSSW5mbzo6dG9SZWdpc3Rlcihk
aXNwbGFjZW1lbnRJbmRleCsrKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBkaXNwbGFjZW1l
bnRJbmRleCA9IDA7CiAgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhp
dC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewogICAgICAgICAgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAg
ICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdp
c3RlckZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwg
QXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAg
ICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgIGNhc2UgSW50
MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAgICBjYXNlIENlbGxEaXNw
bGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OnBh
eWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRp
c3BsYWNlbWVudEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lz
dGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHRoZSBzaHVmZmxpbmcgYWxnb3Jp
dGhtIHRoYXQgd2UgdXNlCkBAIC0zODEsMjUgKzQwNyw1NCBAQCB2b2lkIE9TUkV4aXRDb21waWxl
cjo6Y29tcGlsZUV4aXQoY29uc3QKICAgICAgICAgICAgIHVuc2lnbmVkIHNjcmF0Y2hJbmRleCA9
IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzOwogICAgICAgICAgICAgZm9yIChpbnQg
aW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsK
ICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFs
dWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1
ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoQXNzZW1ibHlIZWxwZXJzOjpwYXls
b2FkRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOwotICAg
ICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihyZWNvdmVy
eS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QxKTsKLSAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3Jh
dGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVE
ZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIoR1BSSW5mbzo6cmVnVDEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIg
KyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy50YWcpKTsKLSAgICAgICAgICAgICAgICBzY3JhdGNoSW5kZXgrKzsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0
ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMy
KEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BS
SW5mbzo6cmVnVDEpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86
OnJlZ1QwLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaElu
ZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5
bG9hZCkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1Qx
LCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hJbmRleCsrOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6
CisgICAgICAgICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAg
ICAgICAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAg
ICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IocmVj
b3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKykgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5j
b2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgICAgIHNjcmF0Y2hJbmRleCA9IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzOwog
ICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNv
dmVyaWVzKCk7ICsraW5kZXgpIHsKICAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09GRlNF
VE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpLCBHUFJJbmZvOjpyZWdUMSk7
Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwg
QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJ
bmRleChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICBzY3JhdGNoSW5kZXgrKzsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5k
ZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXls
b2FkKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZyksIEdQUklu
Zm86OnJlZ1QxKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpy
ZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5v
cGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIoR1BSSW5mbzo6cmVnVDEsIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIHNj
cmF0Y2hJbmRleCsrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgc2Ny
YXRjaEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFn
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRG
b3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJ
bmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
ZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc2Ny
YXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFs
dWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rl
cilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86
OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0
YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09
IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0
dWFsUmVnaXN0ZXJzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTAzNzQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNyArNTYsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2Vy
KE5vZGVJCiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIo
anNWYWx1ZS5wYXlsb2FkKCkpLCBncHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlMg
fHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAg
ICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlMgfHwgaW5mby5zcGls
bEZvcm1hdCgpID09IERhdGFGb3JtYXRKU0ludGVnZXIgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09
IERhdGFGb3JtYXRJbnRlZ2VyKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgICAgIG1faml0LmxvYWQz
MihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAg
ICB9CkBAIC0xMzYsNyArMTM2LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91Ymxl
KE5vZGVJbgogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgRGF0
YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKLSAgICAgICAgICAgIEFT
U0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBBU1NFUlQoKHNw
aWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50
ZWdlcik7CiAgICAgICAgICAgICBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEpTRG91Ymxl
KSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAg
ICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBmcHIpOwpAQCAtMTQ2LDE0ICsxNDYsMjAgQEAgRlBSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBGUFJS
ZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
SW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgSklUQ29tcGls
ZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgZnByKTsKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBoYXNVbmJveGVkRG91YmxlOworCisgICAgICAgICAgICBpZiAoc3BpbGxGb3JtYXQg
IT0gRGF0YUZvcm1hdEpTSW50ZWdlciAmJiBzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0SW50ZWdl
cikgeworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxS
ZWdpc3RlciksIGZwcik7CisgICAgICAgICAgICAgICAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0
Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwogICAgICAgICAg
ICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgZnByKTsKIAotICAgICAgICAgICAgaGFzVW5ib3hlZERvdWJsZS5saW5r
KCZtX2ppdCk7CisgICAgICAgICAgICBpZiAoaGFzVW5ib3hlZERvdWJsZS5pc1NldCgpKQorICAg
ICAgICAgICAgICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOworCiAgICAgICAgICAg
ICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7
CiAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKICAgICAgICAgICAgIHJldHVybiBm
cHI7CkBAIC0xOTIsNyArMTk4LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91Ymxl
KE5vZGVJbgogCiAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHBheWxvYWRHUFIs
IGZwcik7CiAKLSAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0
SlNJbnRlZ2VyKQorICAgICAgICBpZiAoaGFzVW5ib3hlZERvdWJsZS5pc1NldCgpKQogICAgICAg
ICAgICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgbV9ncHJzLnJl
bGVhc2UodGFnR1BSKTsKQEAgLTI0OCwxMCArMjU0LDI2IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxKU1ZhbHVlKE5vZGVJbmQKICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUodGFnR1BS
LCBwYXlsb2FkR1BSLCBpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSA/IERhdGFGb3JtYXRKU0lu
dGVnZXIgOiBEYXRhRm9ybWF0SlMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgRGF0
YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKLSAgICAgICAgICAgIEFT
U0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBBU1NFUlQoc3Bp
bGxGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUgJiYgc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdFN0
b3JhZ2UpOwogICAgICAgICAgICAgdGFnR1BSID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIHBh
eWxvYWRHUFIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBp
bGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGFnR1BSKTsKKyAgICAgICAgICAgIHN3aXRj
aCAoc3BpbGxGb3JtYXQpIHsKKyAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6Cisg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCB0YWdHUFIpOworICAgICAgICAgICAgICAgIHNwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdEpTSW50
ZWdlcjsgLy8gVGhpcyB3aWxsIGJlIHVzZWQgYXMgdGhlIG5ldyByZWdpc3RlciBmb3JtYXQuCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgor
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCB0YWdHUFIpOworICAgICAgICAgICAgICAgIHNwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdEpTQ2Vs
bDsgLy8gVGhpcyB3aWxsIGJlIHVzZWQgYXMgdGhlIG5ldyByZWdpc3RlciBmb3JtYXQuCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgor
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5U
YWcpLCB0YWdHUFIpOworICAgICAgICAgICAgICAgIHNwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdEpT
Qm9vbGVhbjsgLy8gVGhpcyB3aWxsIGJlIHVzZWQgYXMgdGhlIG5ldyByZWdpc3RlciBmb3JtYXQu
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3Rlciks
IHRhZ0dQUik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVy
KSwgcGF5bG9hZEdQUik7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKHRhZ0dQUiwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWlu
KHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwpAQCAtOTU2
LDM3ICs5NzgsMzkgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQog
I2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWNJ
bnRAJWQgICAiLCBub2RlSW5kZXgpOwogI2VuZGlmCisgICAgaWYgKGlzS25vd25Ob3RJbnRlZ2Vy
KG5vZGVJbmRleCkpIHsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHJldHVybkZvcm1hdCA9
IERhdGFGb3JtYXRJbnRlZ2VyOworICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKKyAgICB9CisK
ICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIHN3aXRj
aCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewot
ICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAogICAgICAgICBpZiAobm9kZS5oYXND
b25zdGFudCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRl
eCkpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2Rl
SW5kZXgpKSwgZ3ByKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgZ3ByKTsKLSAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
Rm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgaW5mby5m
aWxsSW50ZWdlcihncHIpOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdElu
dGVnZXI7Ci0gICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKKyAgICAgICAgICAgIHJldHVy
biBncHI7CiAgICAgICAgIH0KIAogICAgICAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5m
by5zcGlsbEZvcm1hdCgpOwotICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0
SlMpOwotCi0gICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJTcGlsbGVkKTsKKyAgICAgICAgQVNTRVJUKChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRK
UykgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpOwogCiAgICAgICAgIC8vIElm
IHdlIGtub3cgdGhpcyB3YXMgc3BpbGxlZCBhcyBhbiBpbnRlZ2VyIHdlIGNhbiBmaWxsIHdpdGhv
dXQgY2hlY2tpbmcuCi0gICAgICAgIGlmIChzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0SlNJbnRl
Z2VyKQorICAgICAgICBpZiAoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdEpTSW50ZWdlciAmJiBz
cGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0SW50ZWdlcikKICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwogCisgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0
ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVh
bFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7
CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICByZXR1
cm4gZ3ByOwpAQCAtMTAyMywxMiArMTA0Nyw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludEkKICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgogICAgIGNhc2UgRGF0
YUZvcm1hdEpTRG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKLSAgICBjYXNlIERh
dGFGb3JtYXRKU0Jvb2xlYW46IHsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7Ci0gICAgICAgIHJldHVybkZv
cm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwotICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKLSAg
ICB9Ci0KKyAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CiAgICAgY2FzZSBEYXRhRm9ybWF0
U3RvcmFnZToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpAQCAtMTA1NSw2
ICsxMDc0LDExIEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjRG91
YmxlQCVkICAgIiwgbm9kZUluZGV4KTsKICNlbmRpZgorICAgIGlmIChpc0tub3duTm90TnVtYmVy
KG5vZGVJbmRleCkpIHsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHJldHVybiBmcHJBbGxv
Y2F0ZSgpOworICAgIH0KKwogICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwog
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0
ZXJdOwpAQCAtMTA3NCwxMyArMTA5OCwxMSBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxE
b3VibGUoZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZnByQWxsb2NhdGUoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKLSAgICAg
ICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBB
U1NFUlQoKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9PSBEYXRh
Rm9ybWF0SW50ZWdlcik7CiAgICAgICAgICAgICBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1h
dEpTRG91YmxlKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7
CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwpAQCAtMTA5MCwxNSArMTExMiwyMiBAQCBGUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZykpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpLCBu
b2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIEpJ
VENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Okxvd2VzdFRhZykpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZnByKTsKLSAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBoYXNVbmJveGVkRG91YmxlOworCisgICAgICAgICAgICBpZiAoc3Bp
bGxGb3JtYXQgIT0gRGF0YUZvcm1hdEpTSW50ZWdlciAmJiBzcGlsbEZvcm1hdCAhPSBEYXRhRm9y
bWF0SW50ZWdlcikgeworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdl
ciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OnRh
Z0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2Uo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSksIG5vZGVJbmRleCwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgSklUQ29tcGlsZXI6OnRh
Z0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkp
OworICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgZnByKTsKKyAgICAgICAgICAgICAgICBoYXNVbmJveGVkRG91
YmxlID0gbV9qaXQuanVtcCgpOworCisgICAgICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0
KTsKICAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGZwcik7CiAKLSAgICAgICAgICAgIGhhc1VuYm94
ZWREb3VibGUubGluaygmbV9qaXQpOworICAgICAgICAgICAgaWYgKGhhc1VuYm94ZWREb3VibGUu
aXNTZXQoKSkKKyAgICAgICAgICAgICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsK
KwogICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOwogICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CiAgICAgICAg
ICAgICByZXR1cm4gZnByOwpAQCAtMTEwNiwyMCArMTEzNSw4IEBAIEZQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICB9CiAKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0
ZXJGb3JtYXQoKSkgewotICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6Ci0gICAgY2FzZSBEYXRhRm9y
bWF0Qm9vbGVhbjoKLSAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgotICAgICAgICAvLyBTaG91
bGQgaGF2ZSBmaWxsZWQsIGFib3ZlLgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQot
ICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwotICAgICAgICByZXR1
cm4gZnByQWxsb2NhdGUoKTsKLQotICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKICAgICBjYXNl
IERhdGFGb3JtYXRKUzoKLSAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6Ci0gICAgY2FzZSBE
YXRhRm9ybWF0SlNCb29sZWFuOiB7CisgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOiB7CiAg
ICAgICAgIEdQUlJlZyB0YWdHUFIgPSBpbmZvLnRhZ0dQUigpOwogICAgICAgICBHUFJSZWcgcGF5
bG9hZEdQUiA9IGluZm8ucGF5bG9hZEdQUigpOwogICAgICAgICBGUFJSZWcgZnByID0gZnByQWxs
b2NhdGUoKTsKQEAgLTExNDAsNyArMTE1Nyw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZURvdWIKIAogICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShwYXls
b2FkR1BSLCBmcHIpOwogCi0gICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0
YUZvcm1hdEpTSW50ZWdlcikKKyAgICAgICAgaWYgKGhhc1VuYm94ZWREb3VibGUuaXNTZXQoKSkK
ICAgICAgICAgICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwogCiAgICAgICAgIG1f
Z3Bycy5yZWxlYXNlKHRhZ0dQUik7CkBAIC0xMTY4LDYgKzExODUsMTQgQEAgRlBSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICBtX2ZwcnMubG9jayhmcHIpOwog
ICAgICAgICByZXR1cm4gZnByOwogICAgIH0KKworICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6Cisg
ICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKKyAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAg
IGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAg
IGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTc5LDYgKzEyMDQsMTEg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWNDZWxsQCVkICAgIiwg
bm9kZUluZGV4KTsKICNlbmRpZgorICAgIGlmIChpc0tub3duTm90Q2VsbChub2RlSW5kZXgpKSB7
CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUpOworICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKKyAgICB9CisK
ICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKQEAgLTExODYsMjEg
KzEyMTYsMjAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAg
IHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9u
ZTogewogCi0gICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBpZiAobm9k
ZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9m
SlNDb25zdGFudChub2RlSW5kZXgpOwotICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkp
IHsKLSAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoanNWYWx1ZS5hc0NlbGwoKSksIGdwcik7Ci0gICAgICAgICAg
ICAgICAgaW5mby5maWxsQ2VsbChncHIpOwotICAgICAgICAgICAgICAgIHJldHVybiBncHI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIEFTU0VSVChq
c1ZhbHVlLmlzQ2VsbCgpKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwor
ICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
ckNvbnN0YW50KTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoanNWYWx1ZS5hc0NlbGwoKSksIGdwcik7CisgICAgICAgICAgICBpbmZvLmZpbGxD
ZWxsKGdwcik7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9Ci0gICAgICAgIEFT
U0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOwotICAgICAgICBpZiAoaW5m
by5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0NlbGwpCisKKyAgICAgICAgQVNTRVJUKChp
bmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9
PSBEYXRhRm9ybWF0Q2VsbCk7CisgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0
YUZvcm1hdEpTQ2VsbCAmJiBpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdENlbGwpCiAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSksIG5vZGVJbmRleCwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1
YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICBH
UFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgIG1fZ3Bycy5yZXRh
aW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgaW5m
by5maWxsQ2VsbChncHIpOwpAQCAtMTIzNCwxMSArMTI2Myw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZToKICAg
ICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgot
ICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46IHsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7Ci0gICAgICAg
IHJldHVybiBhbGxvY2F0ZSgpOwotICAgIH0KLQorICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46
CiAgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgfQpAQCAtMTI1MiwzMiArMTI3NywzNiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVCb29sCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICBm
cHJpbnRmKHN0ZGVyciwgIlNwZWNCb29sQCVkICAgIiwgbm9kZUluZGV4KTsKICNlbmRpZgorICAg
IGlmIChpc0tub3duTm90Qm9vbGVhbihub2RlSW5kZXgpKSB7CisgICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwor
ICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKKyAgICB9CisKICAgICBOb2RlJiBub2RlID0gYXQo
bm9kZUluZGV4KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52
aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlv
bkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1h
dCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewotICAgICAgICBHUFJSZWcgZ3ByID0g
YWxsb2NhdGUoKTsKIAogICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwotICAg
ICAgICAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFuKCkpIHsKLSAgICAgICAgICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihqc1Zh
bHVlLmFzQm9vbGVhbigpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxCb29sZWFu
KGdwcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgQVNTRVJUKGpzVmFsdWUuaXNCb29sZWFuKCkp
OworICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CisgICAgICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOworICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVmFsdWUu
YXNCb29sZWFuKCkpLCBncHIpOworICAgICAgICAgICAgaW5mby5maWxsQm9vbGVhbihncHIpOwog
ICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQoaW5mby5z
cGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgbV9ncHJzLnJldGFpbihncHIs
IHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogCi0gICAgICAgIGlmIChpbmZv
LnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTQm9vbGVhbikKKyAgICAgICAgQVNTRVJUKChp
bmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9
PSBEYXRhRm9ybWF0Qm9vbGVhbik7CisKKyAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAh
PSBEYXRhRm9ybWF0SlNCb29sZWFuICYmIGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0
Qm9vbGVhbikKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgbm9kZUluZGV4
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0
YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcp
KSk7CiAKKyAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxl
ZCk7CiAgICAgICAgIGluZm8uZmlsbEJvb2xlYW4oZ3ByKTsKICAgICAgICAgcmV0dXJuIGdwcjsK
ICAgICB9CkBAIC0xMzEwLDExICsxMzM5LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQm9vbAogICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgogICAgIGNhc2UgRGF0
YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6Ci0gICAgY2FzZSBEYXRh
Rm9ybWF0Q2VsbDogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRl
KCk7Ci0gICAgfQotICAgICAgICAKKyAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgogICAgIGNhc2Ug
RGF0YUZvcm1hdFN0b3JhZ2U6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
QEAgLTEzNDUsMTcgKzEzNzAsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVj
dEVxdWFsaQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgb3AyKTsKLSAgICAKICAgICBH
UFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7
Ci0gICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwogICAg
IAogICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpKQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiwg
SlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KGNsYXNzSW5mbykpKTsKICAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDIoKSkubV90eXBlKSkKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLmNoaWxkMigpLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDJHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihjbGFzc0luZm8pKSk7CiAgICAgCisgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dFBheWxvYWQodGhpcywgb3AyKTsKKyAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3Vs
dFBheWxvYWQuZ3ByKCk7CisgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNl
ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxR1BSLCBvcDJH
UFIpOwogICAgIG1faml0Lm1vdmUoSW1tMzIoMSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CkBAIC0xOTg2LDggKzIwMTEs
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAjaWYgQ1BVKFg4
NikKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBu
b2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBlYXgodGhpcywgWDg2UmVn
aXN0ZXJzOjplYXgpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IGVkeCh0aGlzLCBYODZSZWdp
c3RlcnM6OmVkeCk7CiAgICAgICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwogICAg
ICAgICAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICAgICAgICAgIApAQCAtMjAw
MSw2ICsyMDI0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAgICAgICAgIG51bWVyYXRvck5vblplcm8ubGluaygmbV9qaXQpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4
NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBlZHgodGhpcywgWDg2
UmVnaXN0ZXJzOjplZHgpOworCiAgICAgICAgICAgICBHUFJSZWcgdGVtcDIgPSBJbnZhbGlkR1BS
UmVnOwogICAgICAgICAgICAgaWYgKG9wMkdQUiA9PSBYODZSZWdpc3RlcnM6OmVheCB8fCBvcDJH
UFIgPT0gWDg2UmVnaXN0ZXJzOjplZHgpIHsKICAgICAgICAgICAgICAgICB0ZW1wMiA9IGFsbG9j
YXRlKCk7CkBAIC0yOTE3LDEzICsyOTQzLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rpb24o
YXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCB0aGlzVmFsdWUpOwogICAgICAgICAgICAgR1BSUmVn
IHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaXNP
YmplY3RQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQog
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwodGhpc1ZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRy
KEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSLCBK
U0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJkpT
U3RyaW5nOjpzX2luZm8pKSk7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgcmVz
dWx0R1BSKTsKICAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTMxMzMsMTQgKzMxNTksMTQgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgY2FzZSBHZXRBcnJheUxlbmd0
aDogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAKICAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZUdQ
UiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zm
c2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkp
OwogICAgICAgICAKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKwogICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQo
KSksIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSks
IHJlc3VsdEdQUik7CiAgICAgICAgIApAQCAtMzE2OCwxNCArMzE5NCwxNCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICBjYXNlIEdldEJ5dGVBcnJheUxl
bmd0aDogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAKICAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKICAgICAgICAgaWYgKCFpc0J5dGVBcnJheVBy
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OmNsYXNz
SW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQnl0ZUFycmF5
OjpzX2luZm8pKSk7CiAgICAgICAgIAorICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0J5
dGVBcnJheTo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgQnl0ZUFycmF5OjpvZmZzZXRP
ZlNpemUoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEwMzc0NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTksNiArMTk5LDE2IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmlzS25vd25C
b29sZWFuKE5vZGUKICAgICByZXR1cm4gaW5mby5pc0pTQm9vbGVhbigpOwogfQogCitib29sIFNw
ZWN1bGF0aXZlSklUOjppc0tub3duTm90Qm9vbGVhbihOb2RlSW5kZXggbm9kZUluZGV4KQorewor
ICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CisgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Cisg
ICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSAmJiAhdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4
KS5pc0Jvb2xlYW4oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuICEoaW5mby5p
c0pTQm9vbGVhbigpIHx8IGluZm8uaXNVbmtub3duSlMoKSk7Cit9CisKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OndyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYgaml0LCBHUFJSZWcgb3duZXIsIEdQ
UlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtp
bmQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGppdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMDM3NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4MSwxNCArNDgxLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0
YW50KCkpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdiA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJ
bmRleCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKGluZm8udGFnR1BSKCkgPT0gdGFyZ2V0ID8g
SW1tMzIodi50YWcoKSkgOiBJbW0zMih2LnBheWxvYWQoKSksIHRhcmdldCk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcik7Ci0g
ICAgICAgICAgICBpZiAoaW5mby5wYXlsb2FkR1BSKCkgPT0gdGFyZ2V0KSAKLSAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIHRhcmdl
dCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgIH0gZWxzZSBpZiAoaW5mby5wYXlsb2FkR1BS
KCkgPT0gdGFyZ2V0KQorICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKHNwaWxsTWUpLCB0YXJnZXQpOworICAgICAgICBlbHNlIHsgLy8gRmlsbCB0aGUgVGFn
CisgICAgICAgICAgICBzd2l0Y2ggKGluZm8uc3BpbGxGb3JtYXQoKSkgeworICAgICAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJG
b3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCB0YXJnZXQpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihpbmZvLnRhZ0dQUigpID09IHRhcmdldCA/IEpJ
VENvbXBpbGVyOjp0YWdGb3Ioc3BpbGxNZSkgOiBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGls
bE1lKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdENlbGw6CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ID09
IERhdGFGb3JtYXRKU0NlbGwpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgICAgICAgICBBU1NF
UlQocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHRhcmdldCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHNwaWxsTWUpLCB0YXJnZXQp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAjZW5k
aWYKICAgICB9CiAKQEAgLTYzNiw2ICs2NDksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6IHsKKyAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRG
b3Ioc3BpbGxNZSkpOworICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0SW50ZWdlcik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogewogICAgICAgICAgICAgbV9qaXQuc3RvcmVE
b3VibGUoaW5mby5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwpAQCAt
NjQzLDEyICs2NjIsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogewotICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihpbmZvLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihz
cGlsbE1lKSk7Ci0gICAgICAgICAgICBpbmZvLnNwaWxsKERhdGFGb3JtYXRJbnRlZ2VyKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgaGFuZGxlcyBKU1ZhbHVlcywgaW50MzJzLCBhbmQg
Y2VsbHMuCiAgICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwg
fHwgc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwpAQCAtNjY0LDYgKzY3NywxMyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgaW5mby5zcGlsbCgoRGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBE
YXRhRm9ybWF0SlMpKTsKICAgICAgICAgICAgIHJldHVybjsKICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgIGNhc2UgRGF0YUZvcm1h
dEJvb2xlYW46IHsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby5ncHIoKSwgSklUQ29t
cGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSkpOworICAgICAgICAgICAgaW5mby5zcGlsbChzcGls
bEZvcm1hdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBjYXNl
IERhdGFGb3JtYXREb3VibGU6CiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOiB7CiAg
ICAgICAgICAgICAvLyBPbiBKU1ZBTFVFMzJfNjQgYm94aW5nIGEgZG91YmxlIGlzIGEgbm8tb3Au
CkBAIC02NzEsMjUgKzY5MSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaW5mby5zcGlsbChE
YXRhRm9ybWF0SlNEb3VibGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgaGFuZGxlcyBK
U1ZhbHVlcywgaW50MzJzLCBjZWxscyBhbmQgYm9vbGVhbnMuCi0gICAgICAgICAgICBBU1NFUlQo
c3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZv
cm1hdENlbGwgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEJvb2xlYW4gfHwgKHNwaWxsRm9y
bWF0ICYgRGF0YUZvcm1hdEpTKSk7CiAKLSAgICAgICAgICAgIGlmIChzcGlsbEZvcm1hdCAmIERh
dGFGb3JtYXRKUykgeyAvLyBKU1ZhbHVlCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihp
bmZvLnRhZ0dQUigpLCBKSVRDb21waWxlcjo6dGFnRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKGluZm8ucGF5bG9hZEdQUigpLCBKSVRDb21waWxlcjo6cGF5bG9h
ZEZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEdQ
UlJlZyByZWcgPSBpbmZvLmdwcigpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVn
LCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byBib3ggaW50MzJzLCBib29sZWFucyBhbmQgY2VsbHMuCi0gICAgICAgICAgICAg
ICAgaWYgKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIEpJVENv
bXBpbGVyOjp0YWdGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNwaWxs
Rm9ybWF0ID09IERhdGFGb3JtYXRDZWxsKQotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgSklUQ29tcGlsZXI6OnRhZ0Zvcihz
cGlsbE1lKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgSklUQ29tcGlsZXI6
OnRhZ0ZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbmZvLnNwaWxs
KChEYXRhRm9ybWF0KShzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykpOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGhhbmRsZXMgSlNWYWx1ZXMu
CisgICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihpbmZvLnRhZ0dQUigpLCBKSVRDb21waWxlcjo6dGFnRm9yKHNw
aWxsTWUpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby5wYXlsb2FkR1BSKCksIEpJ
VENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwo
c3BpbGxGb3JtYXQpOwogICAgICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAgICAgICAgIH0KQEAg
LTcwNSw2ICs3MTMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNLbm93bk5vdE51bWJlcihOb2Rl
SW5kZXgpOwogCiAgICAgYm9vbCBpc0tub3duQm9vbGVhbihOb2RlSW5kZXgpOworICAgIGJvb2wg
aXNLbm93bk5vdEJvb2xlYW4oTm9kZUluZGV4KTsKIAogICAgIGJvb2wgaXNLbm93bk5vdENlbGwo
Tm9kZUluZGV4KTsKICAgICAK
</data>

          </attachment>
      

    </bug>

</bugzilla>