<?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>69560</bug_id>
          
          <creation_ts>2011-10-06 13:49:29 -0700</creation_ts>
          <short_desc>DFG::shouldSpeculate methods are too complicated</short_desc>
          <delta_ts>2011-10-06 16:39:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>479444</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-06 13:49:29 -0700</bug_when>
    <thetext>The DFG::shouldSpeculateXYZ methods have some hold-overs from the static speculation days, as well as some hold-overs from when nodes did not remember their predictions after propagation.  They should now be simplified to just use the node&apos;s prediction, instead of also querying if it&apos;s a constant, what its generation info is, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479511</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-06 14:49:49 -0700</bug_when>
    <thetext>I don&apos;t know how or why but this is a performance progression:


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;SimpleSpec&quot; at /Volumes/Data/pizlo/quartary/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               SimpleSpec                                   
SunSpider:
   3d-cube                                7.4846+-0.1938          7.3904+-0.1589         might be 1.0127x faster
   3d-morph                               7.3235+-0.1097    ?     7.3891+-0.1346       ?
   3d-raytrace                            7.6127+-0.1929    ?     7.7139+-0.3390       ? might be 1.0133x slower
   access-binary-trees                    1.7695+-0.0618          1.7312+-0.0529         might be 1.0221x faster
   access-fannkuch                        6.3561+-0.1230    ?     6.4046+-0.1169       ?
   access-nbody                           3.4766+-0.0878          3.4593+-0.0674       
   access-nsieve                          2.6102+-0.0673          2.6090+-0.0636       
   bitops-3bit-bits-in-byte               1.6826+-0.0267    ?     1.6976+-0.0402       ?
   bitops-bits-in-byte                    2.6937+-0.0781    ?     2.7330+-0.0736       ? might be 1.0146x slower
   bitops-bitwise-and                     3.3954+-0.0767          3.3739+-0.1450       
   bitops-nsieve-bits                     5.5211+-0.1235          5.4688+-0.1827       
   controlflow-recursive                  2.0641+-0.0427          2.0219+-0.0362         might be 1.0209x faster
   crypto-aes                             6.6308+-0.1933          6.4991+-0.1958         might be 1.0203x faster
   crypto-md5                             2.8396+-0.0868    ?     2.8502+-0.0976       ?
   crypto-sha1                            2.5092+-0.0877          2.4994+-0.0765       
   date-format-tofte                      9.8208+-0.2289          9.6545+-0.1639         might be 1.0172x faster
   date-format-xparb                      9.0871+-0.2624    ?     9.1752+-0.1927       ?
   math-cordic                            6.6069+-0.1143    ?     6.7638+-0.1043       ? might be 1.0238x slower
   math-partial-sums                      7.5417+-0.1169    ?     7.5588+-0.1163       ?
   math-spectral-norm                     2.8797+-0.0740          2.7982+-0.0634         might be 1.0291x faster
   regexp-dna                            10.7476+-0.1960         10.7336+-0.1182       
   string-base64                          5.5433+-0.1854          5.4857+-0.1473         might be 1.0105x faster
   string-fasta                           6.6210+-0.1331          6.5756+-0.1248       
   string-tagcloud                       11.6307+-0.1731         11.4985+-0.2257         might be 1.0115x faster
   string-unpack-code                    21.0739+-0.2537         21.0662+-0.2105       
   string-validate-input                  6.2776+-0.1459    ?     6.3075+-0.1592       ?

   &lt;arithmetic&gt; *                         6.2231+-0.0252          6.2100+-0.0290       
   &lt;geometric&gt;                            5.1154+-0.0224          5.0997+-0.0362       
   &lt;harmonic&gt;                             4.1997+-0.0283          4.1810+-0.0474       

                                            TipOfTree               SimpleSpec                                   
V8:
   crypto                                72.0093+-0.4413    ?    72.1674+-0.3549       ?
   deltablue                            218.1208+-1.6580        216.5963+-1.1503       
   earley-boyer                          87.0210+-0.3445    ?    87.3982+-0.2968       ?
   raytrace                              59.0426+-0.9198    ^    57.4898+-0.2626       ^ definitely 1.0270x faster
   regexp                               103.3065+-0.4788    ?   103.4281+-0.3658       ?
   richards                             208.0894+-1.3868        206.7795+-0.6596       
   splay                                 90.8671+-0.5588    ^    89.7117+-0.4158       ^ definitely 1.0129x faster

   &lt;arithmetic&gt;                         119.7795+-0.2368    ^   119.0816+-0.2255       ^ definitely 1.0059x faster
   &lt;geometric&gt; *                        106.7105+-0.2330    ^   106.0308+-0.1675       ^ definitely 1.0064x faster
   &lt;harmonic&gt;                            96.6827+-0.3646    ^    95.9378+-0.1593       ^ definitely 1.0078x faster

                                            TipOfTree               SimpleSpec                                   
Kraken:
   ai-astar                             499.2093+-2.2369    ^   492.1926+-2.0969       ^ definitely 1.0143x faster
   audio-beat-detection                 191.4963+-1.1932        190.6489+-1.3148       
   audio-dft                            271.2691+-2.8687        266.2812+-2.3493         might be 1.0187x faster
   audio-fft                            125.6523+-0.2270    ?   126.5136+-0.7651       ?
   audio-oscillator                     244.6052+-1.6766    ?   247.0725+-2.0585       ? might be 1.0101x slower
   imaging-darkroom                     419.3021+-1.0464    ?   425.8465+-5.9273       ? might be 1.0156x slower
   imaging-desaturate                   230.7208+-0.4309    ?   231.6531+-1.7522       ?
   imaging-gaussian-blur                583.7580+-1.5630        581.8522+-1.2108       
   json-parse-financial                  48.6361+-0.2707         48.1809+-0.2972       
   json-stringify-tinderbox              69.4407+-0.4426    ^    68.4374+-0.4581       ^ definitely 1.0147x faster
   stanford-crypto-aes                  129.0581+-1.4862        128.3939+-1.4514       
   stanford-crypto-ccm                   99.9955+-0.5684    ?   100.7834+-1.5850       ?
   stanford-crypto-pbkdf2               190.7082+-1.1493    ^   187.6297+-0.5089       ^ definitely 1.0164x faster
   stanford-crypto-sha256-iterative      75.5406+-0.3227         75.1208+-0.4026       

   &lt;arithmetic&gt; *                       227.0995+-0.4739        226.4719+-0.6494       
   &lt;geometric&gt;                          176.4004+-0.4323        175.8015+-0.5336       
   &lt;harmonic&gt;                           136.4659+-0.3668        135.7894+-0.4376       

                                            TipOfTree               SimpleSpec                                   
All benchmarks:
   &lt;arithmetic&gt;                          88.9287+-0.1346         88.6306+-0.2067       
   &lt;geometric&gt;                           23.0881+-0.0641         23.0034+-0.1058       
   &lt;harmonic&gt;                             7.3831+-0.0486          7.3499+-0.0813       

                                            TipOfTree               SimpleSpec                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.2280+-0.0818    ^    53.0284+-0.1145       ^ definitely 1.0038x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479516</commentid>
    <comment_count>2</comment_count>
      <attachid>110031</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-06 14:54:24 -0700</bug_when>
    <thetext>Created attachment 110031
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479538</commentid>
    <comment_count>3</comment_count>
      <attachid>110040</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-06 15:11:53 -0700</bug_when>
    <thetext>Created attachment 110040
the patch

I realized that I had to make the patch bigger by adding more code.  (I forgot about JITCodeGenerator64.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479542</commentid>
    <comment_count>4</comment_count>
      <attachid>110040</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-06 15:16:54 -0700</bug_when>
    <thetext>Comment on attachment 110040
the patch

&quot;at&quot; might be a little too concise. I think &quot;node&quot; might be a better name.

shouldSpeculate vs canSpeculate is still a bit mind blowing in the bad way.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479612</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-06 16:39:04 -0700</bug_when>
    <thetext>Landed in r96871.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110031</attachid>
            <date>2011-10-06 14:54:24 -0700</date>
            <delta_ts>2011-10-06 15:11:53 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>simplespec_patch_1.diff</filename>
            <type>text/plain</type>
            <size>62180</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY4NjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTUgQEAK
KzIwMTEtMTAtMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkc6OnNob3VsZFNwZWN1bGF0ZSBtZXRob2RzIGFyZSB0b28gY29tcGxpY2F0ZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBNb3ZlZCBzaG91
bGRTcGVjdWxhdGUgbWV0aG9kcyB0byBERkc6Ok5vZGUsIGFuZCBjbGVhbmVkIHRoZW0gdXAgdG8K
KyAgICAgICAganVzdCB1c2Ugbm9kZSBwcmVkaWN0aW9ucy4KKyAgICAgICAgCisgICAgICAgIEJ5
IGl0c2VsZiB0aGlzIHdvdWxkIGhhdmUgbWVhbnQgdGhhdCBTcGVjdWxhdGl2ZUpJVCBjb2RlIHdv
dWxkIGhhdmUKKyAgICAgICAgaGFkIHRvIHNheSB0aGluZ3MgbGlrZSBtX2ppdC5ncmFwaCgpW25v
ZGVJbmRleF0uc2hvdWxkU3BlY3VsYXRlWFlaKCkuCisgICAgICAgIFNvIHRoaXMgYWRkcyBhbiBh
dChOb2RlSW5kZXgpIG1ldGhvZCB0byBKSVRDb2RlR2VuZXJhdG9yLiBJIHJlcGxhY2VkCisgICAg
ICAgIGFsbCB1c2VzIG9mIHRoZSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF0gaWRpb20gd2l0aCBh
dChub2RlSW5kZXgpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhbiAwLjQlIHByb2dyZXNz
aW9uIG92ZXJhbGwgdGhhdCBzaG93cyB1cCBpbiBhbGwgYmVuY2htYXJrcywKKyAgICAgICAgZm9y
IHJlYXNvbnMgdW5rbm93bi4KKworICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmg6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6YXQpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmNhblJldXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb2RlR2VuZXJhdG9yOjppc0ZpbGxlZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdl
bmVyYXRvcjo6aXNGaWxsZWREb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5l
cmF0b3I6OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6c2lsZW50
U3BpbGxGUFIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNpbGVudEZp
bGxHUFIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNpbGVudEZpbGxG
UFIpOgorICAgICAgICAoSlNDOjpERkc6OmRldGVjdFBlZXBIb2xlQnJhbmNoKToKKyAgICAgICAg
KEpTQzo6REZHOjppbnRlZ2VyUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpub1Jlc3VsdCk6
CisgICAgICAgIChKU0M6OkRGRzo6Y2VsbFJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6anNW
YWx1ZVJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6c3RvcmFnZVJlc3VsdCk6CisgICAgICAg
IChKU0M6OkRGRzo6ZG91YmxlUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjppbml0Q29uc3Rh
bnRJbmZvKToKKyAgICAgICAgKEpTQzo6REZHOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSW50ZWdlcik6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6ZmlsbERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29kZUdlbmVyYXRvcjo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
ZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlVmFsdWVUb051bWJlcik6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIpOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlVUludDMyVG9O
dW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0
aXZlS25vd25Db25zdGFudEFyaXRoT3ApOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5l
cmF0b3I6Om5vblNwZWN1bGF0aXZlQmFzaWNBcml0aE9wKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRp
dmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9y
OjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpzaG91bGRTcGVjdWxhdGVEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2hvdWxkTm90U3Bl
Y3VsYXRlSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2hvdWxkU3BlY3VsYXRl
RmluYWxPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0T3JPdGhlcik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2hvdWxkU3BlY3Vs
YXRlQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5
T3JPdGhlcik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2hvdWxkU3BlY3VsYXRlT2JqZWN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzaG91bGRTcGVjdWxhdGVDZWxsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpjYW5TcGVjdWxhdGVJbnRlZ2VyKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2gpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuY2gpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjppc0ludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpp
c0tub3duQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0tub3du
U3RyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRUb0RvdWJsZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJ
bnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFy
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorCiAyMDExLTEwLTA2ICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIGltcGxlbWVudGF0
aW9uIG9mIFVJbnQzMlRvTnVtYmVyIGlzIG1pc3NpbmcgYSBicmVhayBzdGF0ZW1lbnQKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IzMl82NC5jcHAJKHJldmlzaW9uIDk2ODUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICsz
OCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogR1BSUmVnIEpJVENvZGVH
ZW5lcmF0b3I6OmZpbGxJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQmIHJl
dHVybkZvcm1hdCkKIHsKLSAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhd
OworICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25J
bmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCkBAIC05Nyw3
ICs5Nyw3IEBAIEdQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSW50ZWdlcihOb2QKIAogRlBS
UmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxEb3VibGUoTm9kZUluZGV4IG5vZGVJbmRleCkKIHsK
LSAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgIE5vZGUmIG5v
ZGUgPSBhdChub2RlSW5kZXgpOwogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9n
ZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCkBAIC0yMTIsNyArMjEyLDcgQEAgYm9v
bCBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSlNWYWx1ZShOb2RlSQogICAgIC8vIEZJWE1FOiBGb3Ig
ZG91YmxlIHdlIGNvdWxkIGZpbGwgd2l0aCBhIEZQUi4KICAgICBVTlVTRURfUEFSQU0oZnByKTsK
IAotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgTm9kZSYg
bm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBt
X2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAgLTM1MCw3ICszNTAsNyBAQCB2
b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlVmFsCiAgICAgbV9qaXQucHVzaChw
YXlsb2FkR1BSKTsKICAgICBtX2ppdC5wdXNoKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
ICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGRmZ0NvbnZlcnRKU1ZhbHVlVG9OdW1i
ZXIpOwotICAgIGJveERvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0VGFnR1BS
LCByZXN1bHRQYXlsb2FkR1BSLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS52aXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgYm94RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCByZXN1
bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIGF0KG1fY29tcGlsZUluZGV4KS52aXJ0dWFsUmVn
aXN0ZXIoKSk7CiAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRUYWdHUFIsIHJlc3Vs
dFBheWxvYWRHUFIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRvTnVtYmVyID0g
bV9qaXQuanVtcCgpOwogICAgIApAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQgSklUQ29kZUdlbmVy
YXRvcjo6bm9uU3BlY3VsYXRpdmVWYWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdl
bmVyYXRpb25JbmZvJiBjaGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClb
bm9kZS5jaGlsZDEoKV0udmlydHVhbFJlZ2lzdGVyKCldOworICAgIEdlbmVyYXRpb25JbmZvJiBj
aGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW2F0KG5vZGUuY2hpbGQxKCkpXS52aXJ0dWFsUmVn
aXN0ZXIoKV07CiAgICAgaWYgKGlzSlNEb3VibGUoY2hpbGRJbmZvLnJlZ2lzdGVyRm9ybWF0KCkp
KSB7CiAgICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtNDM4LDcgKzQzOCw3IEBAIHZvaWQg
SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVVSW4KICAgICBtX2ppdC5tb3ZlKEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tUHRyKCZ0d29Ub1RoZTMyKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7
IC8vIHJldXNlIHJlc3VsdFBheWxvYWQgcmVnaXN0ZXIgaGVyZS4KICAgICBtX2ppdC5hZGREb3Vi
bGUoSklUQ29tcGlsZXI6OkFkZHJlc3MocmVzdWx0UGF5bG9hZC5ncHIoKSwgMCksIGJveGVyLmZw
cigpKTsKICAgICAgICAgCi0gICAgYm94RG91YmxlKGJveGVyLmZwcigpLCByZXN1bHRUYWcuZ3By
KCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLnZp
cnR1YWxSZWdpc3RlcigpKTsKKyAgICBib3hEb3VibGUoYm94ZXIuZnByKCksIHJlc3VsdFRhZy5n
cHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgYXQobV9jb21waWxlSW5kZXgpLnZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKICAgICAgICAgCkBAIC01NTgsNyArNTU4LDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9y
Ojpub25TcGVjdWxhdGl2ZUtubwogICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmbV9qaXQpOwog
ICAgIH0KICAgICAKLSAgICBib3hEb3VibGUodG1wMkZQUiwgcmVzdWx0VGFnR1BSLCByZXN1bHRQ
YXlsb2FkR1BSLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS52aXJ0dWFsUmVnaXN0ZXIo
KSk7CisgICAgYm94RG91YmxlKHRtcDJGUFIsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQ
UiwgYXQobV9jb21waWxlSW5kZXgpLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgCiAgICAg
aWYgKCFpc0tub3duTnVtZXJpYyhyZWdDaGlsZCkpIHsKICAgICAgICAgQVNTRVJUKG5vdEludC5p
c1NldCgpKTsKQEAgLTY0OCw3ICs2NDgsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNw
ZWN1bGF0aXZlQmFzCiAgICAgaWYgKGFyZzEuaXNEb3VibGUoKSkgewogICAgICAgICBhcmcxVGFn
R1BSID0gdG1wVGFnLmdwcigpOwogICAgICAgICBhcmcxUGF5bG9hZEdQUiA9IHRtcFBheWxvYWQu
Z3ByKCk7Ci0gICAgICAgIGJveERvdWJsZShhcmcxLmZwcigpLCBhcmcxVGFnR1BSLCBhcmcxUGF5
bG9hZEdQUiwgbV9qaXQuZ3JhcGgoKVthcmcxLmluZGV4KCldLnZpcnR1YWxSZWdpc3RlcigpKTsK
KyAgICAgICAgYm94RG91YmxlKGFyZzEuZnByKCksIGFyZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BS
LCBhdChhcmcxLmluZGV4KCkpLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgYXJnMlRhZ0dQ
UiA9IGFyZzIudGFnR1BSKCk7CiAgICAgICAgIGFyZzJQYXlsb2FkR1BSID0gYXJnMi5wYXlsb2Fk
R1BSKCk7CiAgICAgfSBlbHNlIGlmIChhcmcyLmlzRG91YmxlKCkpIHsKQEAgLTY1Niw3ICs2NTYs
NyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlQmFzCiAgICAgICAgIGFy
ZzFQYXlsb2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7CiAgICAgICAgIGFyZzJUYWdHUFIgPSB0
bXBUYWcuZ3ByKCk7CiAgICAgICAgIGFyZzJQYXlsb2FkR1BSID0gdG1wUGF5bG9hZC5ncHIoKTsK
LSAgICAgICAgYm94RG91YmxlKGFyZzIuZnByKCksIGFyZzJUYWdHUFIsIGFyZzJQYXlsb2FkR1BS
LCBtX2ppdC5ncmFwaCgpW2FyZzIuaW5kZXgoKV0udmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAg
ICBib3hEb3VibGUoYXJnMi5mcHIoKSwgYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRHUFIsIGF0KGFy
ZzIuaW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGFy
ZzFUYWdHUFIgPSBhcmcxLnRhZ0dQUigpOwogICAgICAgICBhcmcxUGF5bG9hZEdQUiA9IGFyZzEu
cGF5bG9hZEdQUigpOwpAQCAtNzI4LDcgKzcyOCw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6
bm9uU3BlY3VsYXRpdmVCYXMKICAgICAgICAgaWYgKGFyZzEuaXNEb3VibGUoKSkKICAgICAgICAg
ICAgIG1faml0Lm1vdmVEb3VibGUoYXJnMS5mcHIoKSwgdG1wMUZQUik7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHVuYm94RG91YmxlKGFyZzFUYWdHUFIsIGFyZzFQYXlsb2FkR1BSLCB0bXAx
RlBSLCBtX2ppdC5ncmFwaCgpW2FyZzEuaW5kZXgoKV0udmlydHVhbFJlZ2lzdGVyKCkpOworICAg
ICAgICAgICAgdW5ib3hEb3VibGUoYXJnMVRhZ0dQUiwgYXJnMVBheWxvYWRHUFIsIHRtcDFGUFIs
IGF0KGFyZzEuaW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgCiAgICAg
ICAgIC8vIGNoaWxkMSBpcyBjb252ZXJ0ZWQgdG8gYSBkb3VibGU7IGNoaWxkMiBtYXkgZWl0aGVy
IGJlIGFuIGludCBvcgogICAgICAgICAvLyBhIGJveGVkIGRvdWJsZQpAQCAtNzY4LDcgKzc2OCw3
IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVCYXMKICAgICAgICAgaWYg
KGFyZzIuaXNEb3VibGUoKSkKICAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoYXJnMi5mcHIo
KSwgdG1wMkZQUik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVuYm94RG91YmxlKGFyZzJU
YWdHUFIsIGFyZzJQYXlsb2FkR1BSLCB0bXAyRlBSLCBtX2ppdC5ncmFwaCgpW2FyZzIuaW5kZXgo
KV0udmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgdW5ib3hEb3VibGUoYXJnMlRhZ0dQ
UiwgYXJnMlBheWxvYWRHUFIsIHRtcDJGUFIsIGF0KGFyZzIuaW5kZXgoKSkudmlydHVhbFJlZ2lz
dGVyKCkpOwogICAgIH0KICAgICAgICAgCiAgICAgaGF2ZUZQUkFyZ3VtZW50cy5saW5rKCZtX2pp
dCk7CkBAIC04MDMsNyArODAzLDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxh
dGl2ZUJhcwogICAgICAgICBmYWlsdXJlQ2FzZXMubGluaygmbV9qaXQpOwogICAgIH0KICAgICAg
ICAgCi0gICAgYm94RG91YmxlKHRtcDFGUFIsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQ
UiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0udmlydHVhbFJlZ2lzdGVyKCkpOworICAg
IGJveERvdWJsZSh0bXAxRlBSLCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIGF0KG1f
Y29tcGlsZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgIAogICAgIGlmICghbm90
TnVtYmVycy5lbXB0eSgpKSB7CiAgICAgICAgIEFTU0VSVChvcCA9PSBWYWx1ZUFkZCk7CkBAIC0x
MTkyLDcgKzExOTIsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9u
CiAKIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51
bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52
ZXJ0KQogewotICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpW2JyYW5jaE5vZGVJ
bmRleF07CisgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7CiAgICAg
QmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zm
c2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKICAgICBCbG9ja0luZGV4IG5v
dFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNo
Tm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwogICAgIApAQCAtMTI1Myw3ICsxMjUzLDcg
QEAgYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUNvbQogCiB2b2lkIEpJVENv
ZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSYgbm9kZSwgTm9k
ZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24gY29uZCwgWl9ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewotICAgIE5vZGUm
IGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpW2JyYW5jaE5vZGVJbmRleF07CisgICAgTm9kZSYg
YnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7CiAgICAgQmxvY2tJbmRleCB0YWtlbiA9
IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFr
ZW5CeXRlY29kZU9mZnNldCgpKTsKICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3Jh
cGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVj
b2RlT2Zmc2V0KCkpOwogCkBAIC0xMzk1LDcgKzEzOTUsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0
b3I6Om5vblNwZWN1bGF0aXZlTm9uCiAKIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3Vs
YXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5k
ZXgsIGJvb2wgaW52ZXJ0KQogewotICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgp
W2JyYW5jaE5vZGVJbmRleF07CisgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJ
bmRleCk7CiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZv
ckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKICAgICBC
bG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwogCkBAIC0xNTkyLDcg
KzE1OTIsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAg
bV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVy
cyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAKICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7Ci0gICAgbV9q
aXQubm90aWZ5Q2FsbChmYXN0Q2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29k
ZU9yaWdpbik7CisgICAgbV9qaXQubm90aWZ5Q2FsbChmYXN0Q2FsbCwgYXQobV9jb21waWxlSW5k
ZXgpLmNvZGVPcmlnaW4pOwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKIApAQCAtMTYwMCwxMCArMTYwMCwxMCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVt
aXRDYWxsKE5vZGUmIG5vCiAKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2Nr
KCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIG1faml0LnB1c2go
R1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9
IG1faml0LmFwcGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKHNsb3dDYWxsRnVuY3Rpb24s
IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOworICAgIEpJVENvbXBp
bGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hl
Y2soc2xvd0NhbGxGdW5jdGlvbiwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwogICAg
IG1faml0Lm1vdmUoSW1tMzIobnVtUGFzc2VkQXJncyksIEdQUkluZm86OnJlZ1QxKTsKICAgICBt
X2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBt
X2ppdC5ub3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBtX2pp
dC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKKyAgICBtX2ppdC5ub3RpZnlD
YWxsKG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBhdChtX2NvbXBpbGVJbmRl
eCkuY29kZU9yaWdpbik7CiAKICAgICBkb25lLmxpbmsoJm1faml0KTsKIApAQCAtMTYxMSw3ICsx
NjExLDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwogCiAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1fY29tcGlsZUlu
ZGV4LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAKLSAgICBt
X2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGws
IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOworICAgIG1faml0LmFk
ZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgYXQobV9j
b21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5Njg1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSB0d29Ub1RoZTMyOwogCiBwdWJsaWM6CisgICAgTm9kZSYgYXQoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ppdC5ncmFwaCgpW25vZGVJbmRl
eF07CisgICAgfQorICAgIAogICAgIEdQUlJlZyBmaWxsSW50ZWdlcihOb2RlSW5kZXgsIERhdGFG
b3JtYXQmIHJldHVybkZvcm1hdCk7CiAgICAgRlBSUmVnIGZpbGxEb3VibGUoTm9kZUluZGV4KTsK
ICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTA0LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAvLyBh
bmQgaXRzIG1hY2hpbmUgcmVnaXN0ZXJzIG1heSBiZSByZXVzZWQuCiAgICAgYm9vbCBjYW5SZXVz
ZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XS52aXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGF0KG5vZGVJbmRl
eCkudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9n
ZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogICAgICAgICByZXR1cm4gaW5mby5jYW5S
ZXVzZSgpOwogICAgIH0KQEAgLTE2OSwxMyArMTc0LDEzIEBAIHB1YmxpYzoKICAgICAvLyBhdm9p
ZCBzcGlsbGluZyB2YWx1ZXMgd2Ugd2lsbCBuZWVkIGltbWVkaWF0ZWx5KS4KICAgICBib29sIGlz
RmlsbGVkKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZpcnR1YWxSZWdp
c3RlcigpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gYXQobm9k
ZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAgICAgICAgIHJldHVybiBpbmZv
LnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmU7CiAgICAgfQogICAgIGJvb2wgaXNG
aWxsZWREb3VibGUoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmlydHVh
bFJlZ2lzdGVyKCk7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBh
dChub2RlSW5kZXgpLnZpcnR1YWxSZWdpc3RlcigpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYg
aW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKICAgICAgICAgcmV0dXJu
IGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlOwogICAgIH0KQEAgLTE4
Myw3ICsxODgsNyBAQCBwdWJsaWM6CiAgICAgLy8gQ2FsbGVkIG9uIGFuIG9wZXJhbmQgb25jZSBp
dCBoYXMgYmVlbiBjb25zdW1lZCBieSBhIHBhcmVudCBub2RlLgogICAgIHZvaWQgdXNlKE5vZGVJ
bmRleCBub2RlSW5kZXgpCiAgICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdLnZpcnR1YWxSZWdpc3RlcigpOworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gYXQobm9kZUluZGV4KS52aXJ0
dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRp
b25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKICAgICAgICAgLy8gdXNlKCkgcmV0dXJucyB0cnVl
IHdoZW4gdGhlIHZhbHVlIGJlY29tZXMgZGVhZCwgYW5kIGFueQpAQCAtMzAzLDEyICszMDgsMTIg
QEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoIWluZm8ubmVl
ZHNTcGlsbCgpKSB7CiAgICAgICAgICAgICAvLyBpdCdzIGVpdGhlciBhIGNvbnN0YW50IG9yIGl0
J3MgYWxyZWFkeSBiZWVuIHNwaWxsZWQKLSAgICAgICAgICAgIEFTU0VSVChtX2ppdC5ncmFwaCgp
W2luZm8ubm9kZUluZGV4KCldLmhhc0NvbnN0YW50KCkgfHwgaW5mby5zcGlsbEZvcm1hdCgpICE9
IERhdGFGb3JtYXROb25lKTsKKyAgICAgICAgICAgIEFTU0VSVChhdChpbmZvLm5vZGVJbmRleCgp
KS5oYXNDb25zdGFudCgpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIGl0
J3MgbmVpdGhlciBhIGNvbnN0YW50IG5vciBoYXMgaXQgYmVlbiBzcGlsbGVkLgotICAgICAgICBB
U1NFUlQoIW1faml0LmdyYXBoKClbaW5mby5ub2RlSW5kZXgoKV0uaGFzQ29uc3RhbnQoKSk7Cisg
ICAgICAgIEFTU0VSVCghYXQoaW5mby5ub2RlSW5kZXgoKSkuaGFzQ29uc3RhbnQoKSk7CiAgICAg
ICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpOwogCiAgICAg
ICAgIG1faml0LnN0b3JlRG91YmxlKGluZm8uZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHNwaWxsTWUpKTsKQEAgLTMyNiw3ICszMzEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7
Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgICAg
IE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3Rl
ckZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKTsKICAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0
ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0RG91YmxlKTsKICAgICAgICAgRGF0YUZvcm1hdCByZWdp
c3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsKQEAgLTM2OCw3ICszNzMsNyBAQCBw
cm90ZWN0ZWQ6CiAKICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4
KCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBo
KClbbm9kZUluZGV4XTsKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAg
ICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSk7CiAK
ICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewpAQCAtNzA5LDEyICs3MTQsMTIgQEAg
cHJvdGVjdGVkOgogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMg
d2lsbCBiZSBnZW5lcmF0ZWQuCiAgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21w
aWxlSW5kZXggKyAxOyBpbmRleCA8IGxhc3ROb2RlSW5kZXg7ICsraW5kZXgpIHsKLSAgICAgICAg
ICAgIGlmIChtX2ppdC5ncmFwaCgpW2luZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAg
ICAgaWYgKGF0KGluZGV4KS5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdE5vZGUg
aXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgotICAgICAgICBOb2RlJiBsYXN0Tm9kZSA9IG1faml0
LmdyYXBoKClbbGFzdE5vZGVJbmRleF07CisgICAgICAgIE5vZGUmIGxhc3ROb2RlID0gYXQobGFz
dE5vZGVJbmRleCk7CiAgICAgICAgIHJldHVybiBsYXN0Tm9kZS5vcCA9PSBCcmFuY2ggJiYgbGFz
dE5vZGUuY2hpbGQxKCkgPT0gbV9jb21waWxlSW5kZXggPyBsYXN0Tm9kZUluZGV4IDogTm9Ob2Rl
OwogICAgIH0KICAgICAKQEAgLTgwNiw3ICs4MTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gdG8g
ZGVzY3JpYmUgdGhlIHJlc3VsdCBvZiBhbiBvcGVyYXRpb24uCiAgICAgdm9pZCBpbnRlZ2VyUmVz
dWx0KEdQUlJlZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQgZm9ybWF0ID0g
RGF0YUZvcm1hdEludGVnZXIsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVu
KQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsK
KyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgICAgIGlmIChtb2RlID09
IENhbGxVc2VDaGlsZHJlbikKICAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwogCkBAIC04
MzYsMTIgKzg0MSwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgICAgICBpZiAobW9kZSA9PSBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgICAgIE5vZGUmIG5v
ZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKICAgICB9CiAg
ICAgdm9pZCBjZWxsUmVzdWx0KEdQUlJlZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNo
aWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQogICAgIHsKLSAgICAgICAgTm9kZSYg
bm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0
KG5vZGVJbmRleCk7CiAgICAgICAgIGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKICAgICAg
ICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwogCkBAIC04NTYsNyArODYxLDcgQEAgcHJvdGVjdGVk
OgogICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKU0ludGVnZXIpCiAgICAgICAgICAg
ICBtX2ppdC5qaXRBc3NlcnRJc0pTSW50MzIocmVnKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUm
IG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgICAgIE5vZGUmIG5vZGUgPSBh
dChub2RlSW5kZXgpOwogICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAg
ICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKIApAQCAtODcyLDcgKzg3Nyw3IEBAIHByb3RlY3Rl
ZDoKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJl
ZyB0YWcsIEdQUlJlZyBwYXlsb2FkLCBOb2RlSW5kZXggbm9kZUluZGV4LCBEYXRhRm9ybWF0IGZv
cm1hdCA9IERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRy
ZW4pCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhd
OworICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgaWYgKG1vZGUg
PT0gQ2FsbFVzZUNoaWxkcmVuKQogICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAKQEAg
LTg4OSw3ICs4OTQsNyBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKICAgICB2b2lkIHN0b3JhZ2VSZXN1
bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUg
PSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3Jh
cGgoKVtub2RlSW5kZXhdOworICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAg
ICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQogICAgICAgICAgICAgdXNlQ2hpbGRy
ZW4obm9kZSk7CiAgICAgICAgIApAQCAtOTAwLDcgKzkwNSw3IEBAIHByb3RlY3RlZDoKICAgICB9
CiAgICAgdm9pZCBkb3VibGVSZXN1bHQoRlBSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwg
VXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBO
b2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgICAgICBOb2RlJiBub2Rl
ID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQog
ICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAKQEAgLTkxMiw3ICs5MTcsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBpbml0Q29uc3RhbnRJbmZvKE5vZGVJbmRleCBub2RlSW5kZXgpCiAg
ICAgewogICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkgfHwgaXNOdW1i
ZXJDb25zdGFudChub2RlSW5kZXgpIHx8IGlzSlNDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAg
ICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgTm9kZSYg
bm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgICAgIG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0
dWFsUmVnaXN0ZXIoKV0uaW5pdENvbnN0YW50KG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpKTsK
ICAgICB9CiAKQEAgLTEzNTAsNyArMTM1NSw3IEBAIHByb3RlY3RlZDoKIAogICAgIEpJVENvbXBp
bGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHIm
IGZ1bmN0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faml0LmFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soZnVuY3Rpb24sIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVP
cmlnaW4pOworICAgICAgICByZXR1cm4gbV9qaXQuYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhmdW5jdGlvbiwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwogICAgIH0KIAogICAg
IHZvaWQgYWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBqdW1wLCBCbG9ja0lu
ZGV4IGRlc3RpbmF0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJl
dmlzaW9uIDk2ODUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTkzMyw2ICs5MzMsODMgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBy
ZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fcHJlZGljdGlvbiwgcHJlZGljdGlvbik7CiAgICAgfQog
ICAgIAorICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpCisgICAgeworICAgICAgICBy
ZXR1cm4gaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlvbigpKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRG91
YmxlUHJlZGljdGlvbihwcmVkaWN0aW9uKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpCisgICAgeworICAgICAgICByZXR1cm4gaXNOdW1iZXJQcmVkaWN0
aW9uKHByZWRpY3Rpb24oKSkgfHwgcHJlZGljdGlvbigpID09IFByZWRpY3ROb25lOworICAgIH0K
KyAgICAKKyAgICBib29sIHNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEhKHByZWRpY3Rpb24oKSAmIFByZWRpY3REb3VibGUpOworICAgIH0KKyAgICAK
KyAgICBib29sIHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbihwcmVkaWN0aW9uKCkpOworICAgIH0KKyAgICAK
KyAgICBib29sIHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpCisgICAgeworICAg
ICAgICByZXR1cm4gaXNGaW5hbE9iamVjdE9yT3RoZXJQcmVkaWN0aW9uKHByZWRpY3Rpb24oKSk7
CisgICAgfQorICAgIAorICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQXJyYXkoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24oKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0FycmF5T3JPdGhlclByZWRpY3Rpb24ocHJlZGljdGlvbigpKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPYmplY3QoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzT2JqZWN0UHJlZGljdGlvbihwcmVkaWN0aW9uKCkpOworICAgIH0KKyAgICAKKyAgICBi
b29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzQ2VsbFBy
ZWRpY3Rpb24ocHJlZGljdGlvbigpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICB7CisgICAgICAg
IHJldHVybiAhKG9wMS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkgfHwgb3AyLnNob3VsZE5v
dFNwZWN1bGF0ZUludGVnZXIoKSkgJiYgKG9wMS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgfHwg
b3AyLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBi
b29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkgJiYgb3AyLnNob3VsZFNw
ZWN1bGF0ZU51bWJlcigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVj
dWxhdGVGaW5hbE9iamVjdChOb2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICB7CisgICAgICAgIHJl
dHVybiAob3AxLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkgJiYgb3AyLnNob3VsZFNwZWN1
bGF0ZU9iamVjdCgpKQorICAgICAgICAgICAgfHwgKG9wMS5zaG91bGRTcGVjdWxhdGVPYmplY3Qo
KSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSk7CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlQXJyYXkoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAg
eworICAgICAgICByZXR1cm4gKG9wMS5zaG91bGRTcGVjdWxhdGVBcnJheSgpICYmIG9wMi5zaG91
bGRTcGVjdWxhdGVPYmplY3QoKSkKKyAgICAgICAgICAgIHx8IChvcDEuc2hvdWxkU3BlY3VsYXRl
T2JqZWN0KCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZUFycmF5KCkpOworICAgIH0KKyAgICAKKyAg
ICBib29sIGNhblNwZWN1bGF0ZUludGVnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGVD
YW5TcGVjdWxhdGVJbnRlZ2VyKGFyaXRoTm9kZUZsYWdzKCkpOworICAgIH0KKyAgICAKICAgICAv
LyBUaGlzIGVudW0gdmFsdWUgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAgIE5v
ZGVUeXBlIG9wOwogICAgIC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5m
b3JtYXRpb24gKGN1cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkocmV2aXNpb24gOTY4NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICNpZiBFTkFCTEUo
REZHX0RFQlVHX1ZFUkJPU0UpCiAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjSW50QCVkICAgIiwg
bm9kZUluZGV4KTsKICNlbmRpZgotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJ
bmRleF07CisgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAg
LTEzNyw3ICsxMzcsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3Vi
CiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQogICAgIGZwcmludGYoc3RkZXJyLCAiU3Bl
Y0RvdWJsZUAlZCAgICIsIG5vZGVJbmRleCk7CiAjZW5kaWYKLSAgICBOb2RlJiBub2RlID0gbV9q
aXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwog
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3Rl
cigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFs
UmVnaXN0ZXJdOwogCkBAIC0yNTEsNyArMjUxLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQ2VsbAogI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKICAgICBmcHJp
bnRmKHN0ZGVyciwgIlNwZWNDZWxsQCVkICAgIiwgbm9kZUluZGV4KTsKICNlbmRpZgotICAgIE5v
ZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgTm9kZSYgbm9kZSA9IGF0
KG5vZGVJbmRleCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUu
dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRp
b25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAgLTMzNiw3ICszMzYsNyBAQCBKSVRDb21waWxl
cjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVyCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJ
bnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBvcC50YWdHUFIo
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CiAgICAgSklUQ29tcGlsZXI6Okp1
bXAgbm90TnVtYmVyID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgb3AucGF5bG9hZEdQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CiAK
LSAgICB1bmJveERvdWJsZShvcC50YWdHUFIoKSwgb3AucGF5bG9hZEdQUigpLCByZXN1bHQsIG1f
aml0LmdyYXBoKClbb3AuaW5kZXgoKV0udmlydHVhbFJlZ2lzdGVyKCkpOworICAgIHVuYm94RG91
YmxlKG9wLnRhZ0dQUigpLCBvcC5wYXlsb2FkR1BSKCksIHJlc3VsdCwgYXQob3AuaW5kZXgoKSku
dmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5q
dW1wKCk7CiAKICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwpAQCAtMzc5LDEzICszNzksMTMg
QEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBub2RlLAogICAgIGlmIChjb21w
aWxlUGVlcEhvbGVCcmFuY2gobm9kZSwgY29uZGl0aW9uLCBkb3VibGVDb25kaXRpb24sIG9wZXJh
dGlvbikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKHNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKQorICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGls
ZDIoKSkpKQogICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7Ci0gICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRl
QXJyYXkobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpCisgICAgZWxzZSBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlQXJyYXkoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkp
KSkKICAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEo
KS0+anNBcnJheVZQdHIpOwotICAgIGVsc2UgaWYgKCFzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9k
ZS5jaGlsZDEoKSkgJiYgIXNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLmNoaWxkMigpKSkKKyAg
ICBlbHNlIGlmICghYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkgJiYg
IWF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICBub25T
cGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7
Ci0gICAgZWxzZSBpZiAoKHNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLmNoaWxkMSgpKSB8fCBz
aG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS5jaGlsZDIoKSkpICYmICFzaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgZWxzZSBpZiAoKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpIHx8IGF0KG5vZGUuY2hpbGQy
KCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSAmJiAhTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7CiAgICAgICAgIC8v
IE5vcm1hbCBjYXNlLCBub3QgZnVzZWQgdG8gYnJhbmNoLgogICAgICAgICBTcGVjdWxhdGVEb3Vi
bGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgU3BlY3VsYXRlRG91
YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC00NzEsMTUgKzQ3MSwxNSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiB7CiAgICAgLy8gRklY
TUU6IE5lZWQgdG8gYWRkIGZhc3QgcGF0aHMgZm9yIGtub3duIGJvb2xlYW5zLgogCi0gICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcihub2RlLmNoaWxkMSgpKSkgeworICAg
IGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIo
KSkgewogICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEo
KSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgaWYgKHNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcihub2RlLmNoaWxk
MSgpKSkgeworICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9y
T3RoZXIoKSkgewogICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5j
aGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkp
IHsKKyAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7
CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCB2YWx1ZSk7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CkBAIC00ODgsNyArNDg4LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
IChzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICBpZiAoYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRl
RG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgRlBSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhp
cyk7CkBAIC01NzMsMTIgKzU3MywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNo
KE5vZGUmIG5vCiAKICAgICAvLyBGSVhNRTogQWRkIGZhc3QgY2FzZXMgZm9yIGtub3duIEJvb2xl
YW4hCiAKLSAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKG5vZGUuY2hp
bGQxKCkpKSB7CisgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFs
T2JqZWN0T3JPdGhlcigpKSB7CiAgICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUu
Y2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2Jq
ZWN0VlB0cik7Ci0gICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIobm9k
ZS5jaGlsZDEoKSkpIHsKKyAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNw
ZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7CiAgICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNo
KG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0Fy
cmF5VlB0cik7Ci0gICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS5jaGls
ZDEoKSkpIHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEo
KSkpIHsKKyAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51
bWJlcigpKSB7CisgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CkBAIC02OTksNyAr
Njk5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAvLyBTZXRMb2NhbCBhbmQgd2hhdGV2ZXIgb3RoZXIgREZHIE5vZGVzIGFyZSBhc3NvY2lhdGVk
IHdpdGggdGhlIHNhbWUKICAgICAgICAgLy8gYnl0ZWNvZGUgaW5kZXggYXMgdGhlIFNldExvY2Fs
LgogICAgICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4Rm9yT1NSID09IG5vZGUuY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICBOb2RlJiBuZXh0Tm9kZSA9IG1faml0LmdyYXBo
KClbbV9jb21waWxlSW5kZXgrMV07CisgICAgICAgIE5vZGUmIG5leHROb2RlID0gYXQobV9jb21w
aWxlSW5kZXggKyAxKTsKICAgICAgICAgCiAgICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9
IG5leHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAKQEAgLTgyMCwx
MyArODIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
IH0KIAogICAgIGNhc2UgVmFsdWVUb0ludDMyOiB7Ci0gICAgICAgIGlmIChzaG91bGROb3RTcGVj
dWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7Ci0gICAgICAgICAgICAvLyBEbyBpdCB0aGUg
c2FmZSB3YXkuCi0gICAgICAgICAgICBub25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQzMihub2RlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc2hv
dWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBpZiAoYXQo
bm9kZS5jaGlsZDEoKSkuc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAg
ICAvLyBEbyBpdCB0aGUgc2FmZSB3YXkuCiAgICAgICAgICAgICBub25TcGVjdWxhdGl2ZVZhbHVl
VG9JbnQzMihub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtODQwLDcgKzgzNCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNl
IFZhbHVlVG9OdW1iZXI6IHsKLSAgICAgICAgaWYgKHNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIo
bm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZE5v
dFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIG9wMSk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwg
cmVzdWx0LmZwcigpKTsKQEAgLTg2NSw3ICs4NTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAKICAgICBjYXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhB
ZGQ6IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwg
bm9kZS5jaGlsZDIoKSkgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVG
bGFncygpKSkgeworICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChu
b2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CiAgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkp
KSB7CiAgICAgICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQo
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtOTI2LDcgKzkyMCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUuY2hp
bGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVOdW1iZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgewogICAgICAg
ICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigp
KTsKICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwpAQCAt
OTQ1LDcgKzkzOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICB9CiAKICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgIGlmIChzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpICYmIG5vZGVDYW5TcGVjdWxh
dGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkp
KSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgaWYgKGlzSW50
MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBp
bnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKTsKQEAgLTk4
OCw3ICs5ODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSAmJiBub2RlQ2FuU3BlY3VsYXRl
SW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkg
JiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC0xMDMyLDcgKzEwMjYsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0
aERpdjogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgp
LCBub2RlLmNoaWxkMigpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9k
ZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGF0
KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9w
Mih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBlYXgodGhp
cywgWDg2UmVnaXN0ZXJzOjplYXgpOwpAQCAtMTA4NSw4ICsxMDc5LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhNb2Q6
IHsKLSAgICAgICAgaWYgKHNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkg
fHwgc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMigpKQotICAgICAgICAgICAg
fHwgIW5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAg
ICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSB8
fCBhdChub2RlLmNoaWxkMigpKS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkKKyAgICAgICAg
ICAgIHx8ICFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAg
ICAgIApAQCAtMTEzMSw3ICsxMTI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhBYnM6IHsKLSAgICAgICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkgJiYgbm9kZUNhblNwZWN1bGF0ZUlu
dGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdl
cigpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKQEAgLTExNTgsNyArMTE1
Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
CiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OiB7Ci0gICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpICYmIG5v
ZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAg
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5v
ZGUuY2hpbGQyKCkpKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CkBA
IC0xNTE1LDcgKzE1MDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgfQogCiAgICAgY2FzZSBCcmFuY2g6Ci0gICAgICAgIGlmIChpc1N0cmljdEludDMy
KG5vZGUuY2hpbGQxKCkpIHx8IHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkp
IHsKKyAgICAgICAgaWYgKGlzU3RyaWN0SW50MzIobm9kZS5jaGlsZDEoKSkgfHwgYXQobm9kZS5j
aGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZv
ckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKQEAgLTE1NTQsNyAr
MTU0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBvcDEu
ZmlsbCgpOwogICAgICAgICBpZiAob3AxLmlzRG91YmxlKCkpCi0gICAgICAgICAgICBib3hEb3Vi
bGUob3AxLmZwcigpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBtX2ppdC5ncmFwaCgpW29wMS5pbmRleCgpXS52aXJ0dWFsUmVnaXN0ZXIoKSk7Cisg
ICAgICAgICAgICBib3hEb3VibGUob3AxLmZwcigpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBhdChvcDEuaW5kZXgoKSkudmlydHVhbFJlZ2lzdGVy
KCkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChvcDEucGF5bG9hZEdQUigpID09
IEdQUkluZm86OnJldHVyblZhbHVlR1BSMiAmJiBvcDEudGFnR1BSKCkgPT0gR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpCiAgICAgICAgICAgICAgICAgbV9qaXQuc3dhcChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKQEAgLTE1ODgsNyArMTU4Miw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgLy8gSXQncyByZWFsbHkgcHJv
Zml0YWJsZSB0byBzcGVjdWxhdGUgaW50ZWdlciwgc2luY2UgaXQncyByZWFsbHkgY2hlYXAsCiAg
ICAgICAgICAgICAvLyBpdCBtZWFucyB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueSByZWFsIHdvcmss
IGFuZCB3ZSBlbWl0IGEgbG90IGxlc3MgY29kZS4KICAgICAgICAgICAgIApAQCAtMTc0NSw3ICsx
NzM5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAvLyBOZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LiBJZiB3
ZSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlCiAgICAgICAgIC8vIHRoYXQgaXQncyBhIEZpbmFsT2Jq
ZWN0IHRoZW4gd2Ugc3BlY3VsYXRlIG9uIHRoYXQgZGlyZWN0bHkuIE90aGVyd2lzZSB3ZQogICAg
ICAgICAvLyBkbyB0aGUgc2xvdyAoc3RydWN0dXJlLWJhc2VkKSBjaGVjay4KLSAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAo
YXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkKICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocHJvdG9HUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gOTY4NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICNpZiBFTkFCTEUoREZH
X0RFQlVHX1ZFUkJPU0UpCiAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjSW50QCVkICAgIiwgbm9k
ZUluZGV4KTsKICNlbmRpZgotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRl
eF07CisgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAgLTE3
MCw3ICsxNzAsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAj
aWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQogICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY0Rv
dWJsZUAlZCAgICIsIG5vZGVJbmRleCk7CiAjZW5kaWYKLSAgICBOb2RlJiBub2RlID0gbV9qaXQu
Z3JhcGgoKVtub2RlSW5kZXhdOworICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3Rlcigp
OwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVn
aXN0ZXJdOwogCkBAIC0yOTQsNyArMjk0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQ2VsbAogI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKICAgICBmcHJpbnRm
KHN0ZGVyciwgIlNwZWNDZWxsQCVkICAgIiwgbm9kZUluZGV4KTsKICNlbmRpZgotICAgIE5vZGUm
IG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgTm9kZSYgbm9kZSA9IGF0KG5v
ZGVJbmRleCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmly
dHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAgLTM2Miw3ICszNjIsNyBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NF
KQogICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY0Jvb2xAJWQgICAiLCBub2RlSW5kZXgpOwogI2Vu
ZGlmCi0gICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICBOb2Rl
JiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIApAQCAtNDc5LDcgKzQ3OSw3IEBA
IGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwKICAgICBpZiAoY29tcGls
ZVBlZXBIb2xlQnJhbmNoKG5vZGUsIGNvbmRpdGlvbiwgZG91YmxlQ29uZGl0aW9uLCBvcGVyYXRp
b24pKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkg
ewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxk
MigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CkBAIC00
ODksNyArNDg5LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBub2RlLAog
ICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBo
ZXJlLgogICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0
LmdwcigpKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKLSAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0
ZU51bWJlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkgeworICAgIH0gZWxzZSBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNo
aWxkMigpKSkpIHsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtNTAw
LDkgKzUwMCw5IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwKICAg
ICAgICAgdHJ1ZUNhc2UubGluaygmbV9qaXQpOwogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0gICAgfSBl
bHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVj
dChub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkKKyAgICB9IGVsc2UgaWYgKG5vZGUub3Ag
PT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGF0KG5vZGUu
Y2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpCiAgICAgICAgIGNvbXBpbGVPYmplY3RFcXVh
bGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKLSAgICBl
bHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBzaG91bGRTcGVjdWxhdGVBcnJheShub2Rl
LmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkKKyAgICBlbHNlIGlmIChub2RlLm9wID09IENvbXBh
cmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShhdChub2RlLmNoaWxkMSgpKSwgYXQo
bm9kZS5jaGlsZDIoKSkpKQogICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9q
aXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CiAgICAgZWxzZQogICAgICAgICBub25TcGVj
dWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CkBA
IC01NjUsMTUgKzU2NSwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5v
dChOCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwg
RGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHNo
b3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcihub2RlLmNoaWxkMSgpKSkgeworICAgIGlm
IChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkg
ewogICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwg
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgaWYgKHNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcihub2RlLmNoaWxkMSgp
KSkgeworICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3Ro
ZXIoKSkgewogICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGls
ZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsK
KyAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAg
ICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHZhbHVlKTsKICAgICAgICAgbV9q
aXQuY29tcGFyZTMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWUuZ3ByKCksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJlc3VsdC5ncHIoKSk7CkBAIC01ODEsNyArNTgxLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xl
YW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1i
ZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC02NzUsMTIgKzY3NSwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgICAgICAgICBh
ZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CiAgICAgICAgIAogICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVGaW5h
bE9iamVjdE9yT3RoZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICB9IGVsc2UgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7CiAgICAgICAg
IGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwg
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7Ci0gICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICB9IGVsc2Ug
aWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7CiAg
ICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RU
YWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7Ci0gICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICB9IGVsc2UgaWYgKGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAgICAgIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIGJv
b2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh0YWtlbiA9
PSAobV9ibG9jayArIDEpKSB7CkBAIC04MDQsNyArODA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBTZXRMb2NhbCBhbmQgd2hhdGV2ZXIg
b3RoZXIgREZHIE5vZGVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUKICAgICAgICAgLy8g
Ynl0ZWNvZGUgaW5kZXggYXMgdGhlIFNldExvY2FsLgogICAgICAgICBBU1NFUlQobV9ieXRlY29k
ZUluZGV4Rm9yT1NSID09IG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAg
ICBOb2RlJiBuZXh0Tm9kZSA9IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXgrMV07CisgICAg
ICAgIE5vZGUmIG5leHROb2RlID0gYXQobV9jb21waWxlSW5kZXggKyAxKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIE9kZGx5LCBpdCdzIHBvc3NpYmxlIGZvciB0aGUgYnl0ZWNvZGUgaW5kZXggZm9y
IHRoZSBuZXh0IG5vZGUgdG8gYmUKICAgICAgICAgLy8gZXF1YWwgdG8gb3Vycy4gVGhpcyB3aWxs
IGhhcHBlbiBmb3Igb3BfcG9zdF9pbmMuIEFuZCwgZXZlbiBtb3JlIG9kZGx5LApAQCAtOTM4LDEz
ICs5MzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
fQogCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAgICAgICAgaWYgKHNob3VsZE5vdFNwZWN1
bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgICAgIC8vIERvIGl0IHRoZSBz
YWZlIHdheS4KLSAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKG5vZGUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzaG91
bGROb3RTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgICAgIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAg
IC8vIERvIGl0IHRoZSBzYWZlIHdheS4KICAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlVmFsdWVU
b0ludDMyKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC05NTgsNyArOTUyLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2Ug
VmFsdWVUb051bWJlcjogewotICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihu
b2RlLmNoaWxkMSgpKSkgeworICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkTm90
U3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxKTsKICAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCBy
ZXN1bHQuZnByKCkpOwpAQCAtOTgzLDcgKzk3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKIAogICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgY2FzZSBBcml0aEFk
ZDogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBu
b2RlLmNoaWxkMigpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZs
YWdzKCkpKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGF0KG5v
ZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKICAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkp
IHsKICAgICAgICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25zdGFudChu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBv
cDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0xMDQ0LDcgKzEwMzgsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLmNo
aWxkMSgpLCBub2RlLmNoaWxkMigpKSkgeworICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwog
ICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIo
KSk7CiAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKQEAg
LTEwNjMsNyArMTA1Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpICYmIG5vZGVDYW5TcGVj
dWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQy
KCkpKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgaWYgKGlz
SW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkgewogICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAg
ICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKTsKQEAg
LTExMDYsNyArMTEwMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoTXVsOiB7Ci0gICAgICAgIGlmIChzaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpICYmIG5vZGVDYW5TcGVj
dWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQy
KCkpKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTExNTAsNyArMTE0NCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNl
IEFyaXRoRGl2OiB7Ci0gICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hp
bGQxKCksIG5vZGUuY2hpbGQyKCkpICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJp
dGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSAmJiBub2RlLmNhblNwZWN1
bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IGVh
eCh0aGlzLCBYODZSZWdpc3RlcnM6OmVheCk7CkBAIC0xMjAzLDggKzExOTcsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0
aE1vZDogewotICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxk
MSgpKSB8fCBzaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQyKCkpCi0gICAgICAg
ICAgICB8fCAhbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkg
eworICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdl
cigpIHx8IGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKQorICAg
ICAgICAgICAgfHwgIW5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAg
ICAgICAgICAgCkBAIC0xMjQ5LDcgKzEyNDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aEFiczogewotICAgICAgICBp
ZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpKSAmJiBub2RlQ2FuU3BlY3Vs
YXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChhdChub2Rl
LmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
b3AxKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAtMTI3Niw3
ICsxMjcwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAKICAgICBjYXNlIEFyaXRoTWluOgogICAgIGNhc2UgQXJpdGhNYXg6IHsKLSAgICAgICAg
aWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkg
JiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAg
ICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlLmNoaWxkMSgpKSwg
YXQobm9kZS5jaGlsZDIoKSkpICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMih0aGlzLCBu
b2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3Ax
KTsKQEAgLTE2MTcsNyArMTYxMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEJyYW5jaDoKLSAgICAgICAgaWYgKGlzU3RyaWN0
SW50MzIobm9kZS5jaGlsZDEoKSkgfHwgc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxk
MSgpKSkgeworICAgICAgICBpZiAoaXNTdHJpY3RJbnQzMihub2RlLmNoaWxkMSgpKSB8fCBhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0lu
ZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwpAQCAtMTY3
Nyw3ICsxNjcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBUb1ByaW1pdGl2ZTogewotICAgICAgICBpZiAoc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBpZiAoYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICAvLyBJ
dCdzIHJlYWxseSBwcm9maXRhYmxlIHRvIHNwZWN1bGF0ZSBpbnRlZ2VyLCBzaW5jZSBpdCdzIHJl
YWxseSBjaGVhcCwKICAgICAgICAgICAgIC8vIGl0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gZG8g
YW55IHJlYWwgd29yaywgYW5kIHdlIGVtaXQgYSBsb3QgbGVzcyBjb2RlLgogICAgICAgICAgICAg
CkBAIC0xODIxLDcgKzE4MTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIC8vIE5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIHByb3RvdHlwZSBpcyBh
biBvYmplY3QuIElmIHdlIGhhdmUgcmVhc29uIHRvIGJlbGlldmUKICAgICAgICAgLy8gdGhhdCBp
dCdzIGEgRmluYWxPYmplY3QgdGhlbiB3ZSBzcGVjdWxhdGUgb24gdGhhdCBkaXJlY3RseS4gT3Ro
ZXJ3aXNlIHdlCiAgICAgICAgIC8vIGRvIHRoZSBzbG93IChzdHJ1Y3R1cmUtYmFzZWQpIGNoZWNr
LgotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3Qobm9kZS5jaGlsZDEoKSkp
CisgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVj
dCgpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9i
amVjdFZQdHIpKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIHNjcmF0Y2hHUFIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk2ODUyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3
ICsxMjQsNyBAQCB2b2lkIE9TUkV4aXQ6OmR1bXAoRklMRSogb3V0KSBjb25zdAogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSYgbm9kZSwgTm9k
ZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25k
aXRpb24pCiB7Ci0gICAgTm9kZSYgYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKClbYnJhbmNoTm9k
ZUluZGV4XTsKKyAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKICAg
ICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwogICAgIEJsb2NrSW5kZXgg
bm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFu
Y2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgCkBAIC0xMzksNyArMTM5LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91YgogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShOb2RlJiBub2RlLCBOb2Rl
SW5kZXggYnJhbmNoTm9kZUluZGV4LCB2b2lkKiB2cHRyKQogewotICAgIE5vZGUmIGJyYW5jaE5v
ZGUgPSBtX2ppdC5ncmFwaCgpW2JyYW5jaE5vZGVJbmRleF07CisgICAgTm9kZSYgYnJhbmNoTm9k
ZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7CiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29k
ZU9mZnNldCgpKTsKICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0
KCkpOwogCkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlT2JqZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlZ2Vy
QnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKLSAgICBOb2RlJiBicmFuY2hOb2Rl
ID0gbV9qaXQuZ3JhcGgoKVticmFuY2hOb2RlSW5kZXhdOworICAgIE5vZGUmIGJyYW5jaE5vZGUg
PSBhdChicmFuY2hOb2RlSW5kZXgpOwogICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFw
aCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVP
ZmZzZXQoKSk7CiAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJ
bmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgp
KTsKIApAQCAtMjEwLDE5ICsyMTAsMTkgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlQnJhbgogICAgICAgICAvLyBzbyBjYW4gYmUgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMgdG8g
YWxzbyByZWZlcmVuY2UgdGhlIGNvbXBhcmUuIAogICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3Rl
ZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkg
ewogICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hO
b2RlSW5kZXgsIGNvbmRpdGlvbik7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAg
IH0gZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGF0KG5vZGUuY2hpbGQxKCkp
LCBhdChub2RlLmNoaWxkMigpKSkpIHsKICAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZURvdWJs
ZUJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgsIGRvdWJsZUNvbmRpdGlvbik7CiAgICAgICAg
ICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgc2hvdWxkU3BlY3Vs
YXRlRmluYWxPYmplY3Qobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAg
fSBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVG
aW5hbE9iamVjdChhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7CiAgICAg
ICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5k
ZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOwogICAgICAgICAgICAg
dXNlKG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwotICAg
ICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIHNob3VsZFNwZWN1bGF0ZUFy
cmF5KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIH0gZWxzZSBpZiAo
bm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlQXJyYXkoYXQobm9k
ZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgewogICAgICAgICAgICAgY29tcGlsZVBl
ZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBtX2ppdC5nbG9iYWxE
YXRhKCktPmpzQXJyYXlWUHRyKTsKICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgICAgIGlmIChub2RlSW5kZXgg
PT0gTm9Ob2RlKQogICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1
ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9hcmd1bWVudHNb
aV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihtX2ppdC5ncmFwaCgpW25vZGVJbmRleF0u
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBtX2FyZ3Vt
ZW50c1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVCht
X3ZhcmlhYmxlcy5zaXplKCkgPT0gYmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpKTsKQEAgLTI3
MSwxNCArMjcxLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYK
ICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCiAgICAgICAgICAgICBtX3ZhcmlhYmxl
c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKG1f
aml0LmdyYXBoKClbbm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigp
KTsKKyAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2U6OmZvclByZWRpY3Rp
b24oYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKICAg
ICB9CiAgICAgCiAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCk7CiAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpOwogCiAgICAgZm9yICg7IG1fY29tcGlsZUluZGV4IDwgYmxvY2su
ZW5kOyArK21fY29tcGlsZUluZGV4KSB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFw
aCgpW21fY29tcGlsZUluZGV4XTsKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gbm9kZS5jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKTsKICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKICNp
ZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCkBAIC0zNTYsNyArMzU2LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogICAgIAogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbV9qaXQuY29kZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVyczsgKytpKSB7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSAoVmlydHVhbFJlZ2lzdGVyKShtX2pp
dC5jb2RlQmxvY2soKS0+dGhpc1JlZ2lzdGVyKCkgKyBpKTsKLSAgICAgICAgUHJlZGljdGVkVHlw
ZSBwcmVkaWN0ZWRUeXBlID0gbV9qaXQuZ3JhcGgoKVttX2ppdC5ncmFwaCgpLm1fYXJndW1lbnRz
W2ldXS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAgICAgICBQcmVkaWN0
ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBhdChtX2ppdC5ncmFwaCgpLm1fYXJndW1lbnRzW2ldKS52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywg
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKSk7CkBAIC00MTIsNyArNDEyLDcgQEAgVmFsdWVSZWNvdmVyeSBTcGVj
dWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbAogICAgICAgICBpZiAobV9qaXQuaXNDb25zdGFudCh2YWx1
ZVNvdXJjZS5ub2RlSW5kZXgoKSkpCiAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6
Y29uc3RhbnQobV9qaXQudmFsdWVPZkpTQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkp
KTsKICAgICAKLSAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW3ZhbHVlU291
cmNlLm5vZGVJbmRleCgpXTsKKyAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZhdCh2YWx1ZVNvdXJj
ZS5ub2RlSW5kZXgoKSk7CiAgICAgICAgIGlmICghbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkg
ewogICAgICAgICAgICAgLy8gSXQncyBsZWdpdGltYXRlbHkgZGVhZC4gQXMgaW4sIG5vYm9keSB3
aWxsIGV2ZXIgdXNlIHRoaXMgbm9kZSwgb3Igb3BlcmFuZCwKICAgICAgICAgICAgIC8vIGV2ZXIu
IFNldCBpdCB0byBVbmRlZmluZWQgdG8gbWFrZSB0aGUgR0MgaGFwcHkgYWZ0ZXIgdGhlIE9TUi4K
QEAgLTQ0Niw3ICs0NDYsNyBAQCBWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRl
VmFsCiAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVt
YmVyKSB7CiAgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGVQdHItPmNo
aWxkMSgpOwotICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5k
ZXhdOworICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmYXQobm9kZUluZGV4KTsKICAgICAgICAg
ICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lz
dGVyKCldOwogICAgICAgICAgICAgICAgIGlmIChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHIt
Pm5vZGVJbmRleCgpID09IG5vZGVJbmRleCkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwpAQCAtNDYzLDcgKzQ2Myw3IEBAIFZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNv
bXB1dGVWYWwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5mby5ub2RlSW5kZXgoKSA9PSBOb05vZGUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0
LmdyYXBoKClbaW5mby5ub2RlSW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBhdChpbmZvLm5vZGVJbmRleCgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUu
Y2hpbGQxVW5jaGVja2VkKCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKSB7CkBAIC00OTMsNyArNDkzLDcgQEAgVmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6
Y29tcHV0ZVZhbAogICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IE5vTm9kZTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXhUb1VzZSAhPSBOb05v
ZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJ
bmRleFRvVXNlXTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZhdChub2RlSW5kZXhU
b1VzZSk7CiAgICAgICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tu
b2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChp
bmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRleFRvVXNl
KTsKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTY4NTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQwNCw3ICs0MDQsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBpc0ludGVnZXIo
Tm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5n
cmFwaCgpW25vZGVJbmRleF07CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwog
ICAgICAgICBpZiAobm9kZS5oYXNJbnQzMlJlc3VsdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKQEAgLTQxNywxNjYgKzQxNyw5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBpbmZv
LmlzSlNJbnRlZ2VyKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKGlzSW50ZWdlcihu
b2RlSW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoaXNJbnQzMlByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlvbihub2RlSW5kZXgpKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZShOb2RlSW5kZXggbm9k
ZUluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKGlzRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5n
cmFwaCgpW25vZGVJbmRleF07Ci0KLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotCi0gICAgICAgIGlmIChp
bmZvLmlzSlNEb3VibGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAg
ICAgICAgaWYgKGlzRG91YmxlUHJlZGljdGlvbihtX2ppdC5nZXRQcmVkaWN0aW9uKG5vZGVJbmRl
eCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKE5vZGVJ
bmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgo
KVtub2RlSW5kZXhdOwotICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUuaGFzTnVtYmVyUmVzdWx0
KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChpc051
bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1
YWxSZWdpc3RlcigpOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlv
bkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLQotICAgICAgICBpZiAoaW5mby5pc0pTSW50ZWdlcigp
IHx8IGluZm8uaXNKU0RvdWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IAotICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBtX2ppdC5nZXRQcmVkaWN0aW9u
KG5vZGVJbmRleCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNOdW1iZXJQcmVkaWN0aW9uKHBy
ZWRpY3Rpb24pIHx8IHByZWRpY3Rpb24gPT0gUHJlZGljdE5vbmUpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0g
ICAgYm9vbCBzaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCi0g
ICAgewotICAgICAgICBpZiAoaXNEb3VibGVDb25zdGFudChub2RlSW5kZXgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9k
ZUluZGV4XTsKLQotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9k
ZS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dl
bmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0KLSAgICAgICAgaWYgKGluZm8uaXNKU0Rv
dWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICBpZiAo
bV9qaXQuZ2V0UHJlZGljdGlvbihub2RlSW5kZXgpICYgUHJlZGljdERvdWJsZSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICAKLSAgICBib29sIHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KE5vZGVJbmRleCBub2Rl
SW5kZXgpCi0gICAgewotICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb247Ci0gICAgICAg
IGlmIChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSkKLSAgICAgICAgICAgIHByZWRpY3Rpb24gPSBw
cmVkaWN0aW9uRnJvbVZhbHVlKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBwcmVkaWN0aW9uID0gbV9qaXQuZ2V0UHJlZGljdGlvbihub2Rl
SW5kZXgpOwotICAgICAgICByZXR1cm4gaXNGaW5hbE9iamVjdFByZWRpY3Rpb24ocHJlZGljdGlv
bik7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90
aGVyKE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICByZXR1cm4gaXNGaW5hbE9i
amVjdE9yT3RoZXJQcmVkaWN0aW9uKG1faml0LmdldFByZWRpY3Rpb24obm9kZUluZGV4KSk7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQXJyYXkoTm9kZUluZGV4IG5vZGVJ
bmRleCkKLSAgICB7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbjsKLSAgICAgICAg
aWYgKGlzSlNDb25zdGFudChub2RlSW5kZXgpKQotICAgICAgICAgICAgcHJlZGljdGlvbiA9IHBy
ZWRpY3Rpb25Gcm9tVmFsdWUodmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHByZWRpY3Rpb24gPSBtX2ppdC5nZXRQcmVkaWN0aW9uKG5vZGVJ
bmRleCk7Ci0gICAgICAgIHJldHVybiBpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKTsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoTm9kZUluZGV4
IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc0FycmF5T3JPdGhlclByZWRpY3Rp
b24obV9qaXQuZ2V0UHJlZGljdGlvbihub2RlSW5kZXgpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBzaG91bGRTcGVjdWxhdGVPYmplY3QoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Ci0gICAgICAgIGlmIChu
b2RlLm9wID09IENvbnZlcnRUaGlzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbjsKLSAgICAgICAgaWYgKGlzSlNDb25zdGFudChub2Rl
SW5kZXgpKQotICAgICAgICAgICAgcHJlZGljdGlvbiA9IHByZWRpY3Rpb25Gcm9tVmFsdWUodmFs
dWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBy
ZWRpY3Rpb24gPSBtX2ppdC5nZXRQcmVkaWN0aW9uKG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVy
biBpc09iamVjdFByZWRpY3Rpb24ocHJlZGljdGlvbik7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlQ2VsbChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAg
aWYgKGlzSlNDb25zdGFudChub2RlSW5kZXgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRl
eCkuaXNDZWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAg
IE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Ci0KLSAgICAgICAgaWYgKGlz
Q2VsbFByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlvbihub2RlSW5kZXgpKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0
ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgCi0gICAgICAg
IGlmIChpbmZvLmlzSlNDZWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKE5vZGVJbmRleCBvcDEsIE5vZGVJbmRleCBvcDIpCi0gICAgewotICAgICAg
ICByZXR1cm4gIShzaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKG9wMSkgfHwgc2hvdWxkTm90U3Bl
Y3VsYXRlSW50ZWdlcihvcDIpKSAmJiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihvcDEpIHx8IHNo
b3VsZFNwZWN1bGF0ZUludGVnZXIob3AyKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlTnVtYmVyKE5vZGVJbmRleCBvcDEsIE5vZGVJbmRleCBvcDIpCi0gICAgewotICAg
ICAgICByZXR1cm4gc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG9wMik7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRmluYWxP
YmplY3QoTm9kZUluZGV4IG9wMSwgTm9kZUluZGV4IG9wMikKLSAgICB7Ci0gICAgICAgIHJldHVy
biAoc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3Qob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVPYmpl
Y3Qob3AyKSkKLSAgICAgICAgICAgIHx8IChzaG91bGRTcGVjdWxhdGVPYmplY3Qob3AxKSAmJiBz
aG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChvcDIpKTsKLSAgICB9Ci0KLSAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZUFycmF5KE5vZGVJbmRleCBvcDEsIE5vZGVJbmRleCBvcDIpCi0gICAgewotICAg
ICAgICByZXR1cm4gKHNob3VsZFNwZWN1bGF0ZUFycmF5KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRl
T2JqZWN0KG9wMikpCi0gICAgICAgICAgICB8fCAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KG9wMSkg
JiYgc2hvdWxkU3BlY3VsYXRlQXJyYXkob3AyKSk7Ci0gICAgfQotICAgIAogICAgIGJvb2wgaXNL
bm93bkFycmF5KE5vZGVJbmRleCBvcDEpCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9q
aXQuZ3JhcGgoKVtvcDFdOworICAgICAgICBOb2RlJiBub2RlID0gYXQob3AxKTsKICAgICAgICAg
c3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICBy
ZXR1cm4gaXNBcnJheVByZWRpY3Rpb24obm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dGlvbigpKTsKQEAgLTU5Miw3ICs0MzUsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBpc0tub3du
U3RyaW5nKE5vZGVJbmRleCBvcDEpCiAgICAgewotICAgICAgICBzd2l0Y2ggKG1faml0LmdyYXBo
KClbb3AxXS5vcCkgeworICAgICAgICBzd2l0Y2ggKGF0KG9wMSkub3ApIHsKICAgICAgICAgY2Fz
ZSBTdHJDYXQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110040</attachid>
            <date>2011-10-06 15:11:53 -0700</date>
            <delta_ts>2011-10-06 15:16:54 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>simplespec_patch_2.diff</filename>
            <type>text/plain</type>
            <size>67568</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY4NjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA0IEBA
CisyMDExLTEwLTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHOjpzaG91bGRTcGVjdWxhdGUgbWV0aG9kcyBhcmUgdG9vIGNvbXBsaWNhdGVkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU2MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgTW92ZWQgc2hv
dWxkU3BlY3VsYXRlIG1ldGhvZHMgdG8gREZHOjpOb2RlLCBhbmQgY2xlYW5lZCB0aGVtIHVwIHRv
CisgICAgICAgIGp1c3QgdXNlIG5vZGUgcHJlZGljdGlvbnMuCisgICAgICAgIAorICAgICAgICBC
eSBpdHNlbGYgdGhpcyB3b3VsZCBoYXZlIG1lYW50IHRoYXQgU3BlY3VsYXRpdmVKSVQgY29kZSB3
b3VsZCBoYXZlCisgICAgICAgIGhhZCB0byBzYXkgdGhpbmdzIGxpa2UgbV9qaXQuZ3JhcGgoKVtu
b2RlSW5kZXhdLnNob3VsZFNwZWN1bGF0ZVhZWigpLgorICAgICAgICBTbyB0aGlzIGFkZHMgYW4g
YXQoTm9kZUluZGV4KSBtZXRob2QgdG8gSklUQ29kZUdlbmVyYXRvci4gSSByZXBsYWNlZAorICAg
ICAgICBhbGwgdXNlcyBvZiB0aGUgbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdIGlkaW9tIHdpdGgg
YXQobm9kZUluZGV4KS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYW4gMC40JSBwcm9ncmVz
c2lvbiBvdmVyYWxsIHRoYXQgc2hvd3MgdXAgaW4gYWxsIGJlbmNobWFya3MsCisgICAgICAgIGZv
ciByZWFzb25zIHVua25vd24uCisKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5o
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmF0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpjYW5SZXVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29kZUdlbmVyYXRvcjo6aXNGaWxsZWQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVH
ZW5lcmF0b3I6OmlzRmlsbGVkRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2Vu
ZXJhdG9yOjp1c2UpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNpbGVu
dFNwaWxsRlBSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzaWxlbnRG
aWxsR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzaWxlbnRGaWxs
RlBSKToKKyAgICAgICAgKEpTQzo6REZHOjpkZXRlY3RQZWVwSG9sZUJyYW5jaCk6CisgICAgICAg
IChKU0M6OkRGRzo6aW50ZWdlclJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6bm9SZXN1bHQp
OgorICAgICAgICAoSlNDOjpERkc6OmNlbGxSZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6Ompz
VmFsdWVSZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OnN0b3JhZ2VSZXN1bHQpOgorICAgICAg
ICAoSlNDOjpERkc6OmRvdWJsZVJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6aW5pdENvbnN0
YW50SW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6ZmlsbEludGVnZXIpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVZhbHVlVG9OdW1iZXIpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVVJbnQzMlRv
TnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxh
dGl2ZUtub3duQ29uc3RhbnRBcml0aE9wKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2Vu
ZXJhdG9yOjpub25TcGVjdWxhdGl2ZUJhc2ljQXJpdGhPcCk6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVC
cmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0
aXZlUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxJbnRlZ2VyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFu
Y2hOdWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxh
dGl2ZVBlZXBob2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9y
Ojpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnNob3VsZFNwZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpzaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpz
aG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2hv
dWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpzaG91bGRTcGVjdWxhdGVBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2hvdWxk
U3BlY3VsYXRlQXJyYXlPck90aGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzaG91bGRT
cGVjdWxhdGVPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNob3VsZFNwZWN1bGF0
ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNhblNwZWN1bGF0ZUludGVnZXIpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZWdl
ckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVw
SG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVy
eUZvcik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmlzSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmlzS25vd25BcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmlzS25vd25TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUludEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29udmVy
dFRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisK
IDIwMTEtMTAtMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBE
RkcgaW1wbGVtZW50YXRpb24gb2YgVUludDMyVG9OdW1iZXIgaXMgbWlzc2luZyBhIGJyZWFrIHN0
YXRlbWVudApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcAkocmV2aXNpb24gOTY4NjEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBH
UFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEludGVnZXIoTm9kZUluZGV4IG5vZGVJbmRleCwg
RGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFw
aCgpW25vZGVJbmRleF07CisgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAg
ICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rl
cl07CiAKQEAgLTk3LDcgKzk3LDcgQEAgR1BSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxJbnRl
Z2VyKE5vZAogCiBGUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbERvdWJsZShOb2RlSW5kZXgg
bm9kZUluZGV4KQogewotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07
CisgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbklu
Zm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAgLTIxMiw3
ICsyMTIsNyBAQCBib29sIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxKU1ZhbHVlKE5vZGVJCiAgICAg
Ly8gRklYTUU6IEZvciBkb3VibGUgd2UgY291bGQgZmlsbCB3aXRoIGEgRlBSLgogICAgIFVOVVNF
RF9QQVJBTShmcHIpOwogCi0gICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4
XTsKKyAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
dmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIApAQCAtMzUw
LDcgKzM1MCw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVWYWwKICAg
ICBtX2ppdC5wdXNoKHBheWxvYWRHUFIpOwogICAgIG1faml0LnB1c2goR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOwogICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZGZnQ29udmVy
dEpTVmFsdWVUb051bWJlcik7Ci0gICAgYm94RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBS
LCByZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1faml0LmdyYXBoKClbbV9jb21waWxl
SW5kZXhdLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICBib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgYXQobV9jb21waWxlSW5k
ZXgpLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzQ2Fs
bGVkVG9OdW1iZXIgPSBtX2ppdC5qdW1wKCk7CiAgICAgCkBAIC0zNzUsNyArMzc1LDcgQEAgdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVZhbAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgR2VuZXJhdGlvbkluZm8mIGNoaWxkSW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9b
bV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMSgpXS52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgR2Vu
ZXJhdGlvbkluZm8mIGNoaWxkSW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bYXQobm9kZS5jaGlsZDEo
KSldLnZpcnR1YWxSZWdpc3RlcigpXTsKICAgICBpZiAoaXNKU0RvdWJsZShjaGlsZEluZm8ucmVn
aXN0ZXJGb3JtYXQoKSkpIHsKICAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC00MzgsNyAr
NDM4LDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVVJbgogICAgIG1f
aml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIoJnR3b1RvVGhlMzIpLCByZXN1bHRQ
YXlsb2FkLmdwcigpKTsgLy8gcmV1c2UgcmVzdWx0UGF5bG9hZCByZWdpc3RlciBoZXJlLgogICAg
IG1faml0LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWRkcmVzcyhyZXN1bHRQYXlsb2FkLmdwcigp
LCAwKSwgYm94ZXIuZnByKCkpOwogICAgICAgICAKLSAgICBib3hEb3VibGUoYm94ZXIuZnByKCks
IHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9qaXQuZ3JhcGgoKVttX2Nv
bXBpbGVJbmRleF0udmlydHVhbFJlZ2lzdGVyKCkpOworICAgIGJveERvdWJsZShib3hlci5mcHIo
KSwgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBhdChtX2NvbXBpbGVJbmRl
eCkudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOwogICAgICAgICAKQEAgLTU1OCw3ICs1NTgsNyBAQCB2b2lkIEpJ
VENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlS25vCiAgICAgICAgIGZhaWx1cmVDYXNlcy5s
aW5rKCZtX2ppdCk7CiAgICAgfQogICAgIAotICAgIGJveERvdWJsZSh0bXAyRlBSLCByZXN1bHRU
YWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLnZp
cnR1YWxSZWdpc3RlcigpKTsKKyAgICBib3hEb3VibGUodG1wMkZQUiwgcmVzdWx0VGFnR1BSLCBy
ZXN1bHRQYXlsb2FkR1BSLCBhdChtX2NvbXBpbGVJbmRleCkudmlydHVhbFJlZ2lzdGVyKCkpOwog
ICAgICAgICAKICAgICBpZiAoIWlzS25vd25OdW1lcmljKHJlZ0NoaWxkKSkgewogICAgICAgICBB
U1NFUlQobm90SW50LmlzU2V0KCkpOwpAQCAtNjQ4LDcgKzY0OCw3IEBAIHZvaWQgSklUQ29kZUdl
bmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVCYXMKICAgICBpZiAoYXJnMS5pc0RvdWJsZSgpKSB7CiAg
ICAgICAgIGFyZzFUYWdHUFIgPSB0bXBUYWcuZ3ByKCk7CiAgICAgICAgIGFyZzFQYXlsb2FkR1BS
ID0gdG1wUGF5bG9hZC5ncHIoKTsKLSAgICAgICAgYm94RG91YmxlKGFyZzEuZnByKCksIGFyZzFU
YWdHUFIsIGFyZzFQYXlsb2FkR1BSLCBtX2ppdC5ncmFwaCgpW2FyZzEuaW5kZXgoKV0udmlydHVh
bFJlZ2lzdGVyKCkpOworICAgICAgICBib3hEb3VibGUoYXJnMS5mcHIoKSwgYXJnMVRhZ0dQUiwg
YXJnMVBheWxvYWRHUFIsIGF0KGFyZzEuaW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpOwogICAg
ICAgICBhcmcyVGFnR1BSID0gYXJnMi50YWdHUFIoKTsKICAgICAgICAgYXJnMlBheWxvYWRHUFIg
PSBhcmcyLnBheWxvYWRHUFIoKTsKICAgICB9IGVsc2UgaWYgKGFyZzIuaXNEb3VibGUoKSkgewpA
QCAtNjU2LDcgKzY1Niw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVC
YXMKICAgICAgICAgYXJnMVBheWxvYWRHUFIgPSBhcmcxLnBheWxvYWRHUFIoKTsKICAgICAgICAg
YXJnMlRhZ0dQUiA9IHRtcFRhZy5ncHIoKTsKICAgICAgICAgYXJnMlBheWxvYWRHUFIgPSB0bXBQ
YXlsb2FkLmdwcigpOwotICAgICAgICBib3hEb3VibGUoYXJnMi5mcHIoKSwgYXJnMlRhZ0dQUiwg
YXJnMlBheWxvYWRHUFIsIG1faml0LmdyYXBoKClbYXJnMi5pbmRleCgpXS52aXJ0dWFsUmVnaXN0
ZXIoKSk7CisgICAgICAgIGJveERvdWJsZShhcmcyLmZwcigpLCBhcmcyVGFnR1BSLCBhcmcyUGF5
bG9hZEdQUiwgYXQoYXJnMi5pbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgYXJnMVRhZ0dQUiA9IGFyZzEudGFnR1BSKCk7CiAgICAgICAgIGFyZzFQYXls
b2FkR1BSID0gYXJnMS5wYXlsb2FkR1BSKCk7CkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBKSVRD
b2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUJhcwogICAgICAgICBpZiAoYXJnMS5pc0RvdWJs
ZSgpKQogICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShhcmcxLmZwcigpLCB0bXAxRlBSKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgdW5ib3hEb3VibGUoYXJnMVRhZ0dQUiwgYXJnMVBh
eWxvYWRHUFIsIHRtcDFGUFIsIG1faml0LmdyYXBoKClbYXJnMS5pbmRleCgpXS52aXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgICAgICAgICB1bmJveERvdWJsZShhcmcxVGFnR1BSLCBhcmcxUGF5bG9h
ZEdQUiwgdG1wMUZQUiwgYXQoYXJnMS5pbmRleCgpKS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgLy8gY2hpbGQxIGlzIGNvbnZlcnRlZCB0byBhIGRvdWJsZTsgY2hp
bGQyIG1heSBlaXRoZXIgYmUgYW4gaW50IG9yCiAgICAgICAgIC8vIGEgYm94ZWQgZG91YmxlCkBA
IC03NjgsNyArNzY4LDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUJh
cwogICAgICAgICBpZiAoYXJnMi5pc0RvdWJsZSgpKQogICAgICAgICAgICAgbV9qaXQubW92ZURv
dWJsZShhcmcyLmZwcigpLCB0bXAyRlBSKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdW5i
b3hEb3VibGUoYXJnMlRhZ0dQUiwgYXJnMlBheWxvYWRHUFIsIHRtcDJGUFIsIG1faml0LmdyYXBo
KClbYXJnMi5pbmRleCgpXS52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICB1bmJveERv
dWJsZShhcmcyVGFnR1BSLCBhcmcyUGF5bG9hZEdQUiwgdG1wMkZQUiwgYXQoYXJnMi5pbmRleCgp
KS52aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgfQogICAgICAgICAKICAgICBoYXZlRlBSQXJndW1l
bnRzLmxpbmsoJm1faml0KTsKQEAgLTgwMyw3ICs4MDMsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0
b3I6Om5vblNwZWN1bGF0aXZlQmFzCiAgICAgICAgIGZhaWx1cmVDYXNlcy5saW5rKCZtX2ppdCk7
CiAgICAgfQogICAgICAgICAKLSAgICBib3hEb3VibGUodG1wMUZQUiwgcmVzdWx0VGFnR1BSLCBy
ZXN1bHRQYXlsb2FkR1BSLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS52aXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgYm94RG91YmxlKHRtcDFGUFIsIHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5
bG9hZEdQUiwgYXQobV9jb21waWxlSW5kZXgpLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAg
CiAgICAgaWYgKCFub3ROdW1iZXJzLmVtcHR5KCkpIHsKICAgICAgICAgQVNTRVJUKG9wID09IFZh
bHVlQWRkKTsKQEAgLTExOTIsNyArMTE5Miw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9u
U3BlY3VsYXRpdmVOb24KIAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBl
ZXBob2xlQnJhbmNoTnVsbChOb2RlSW5kZXggb3BlcmFuZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJ
bmRleCwgYm9vbCBpbnZlcnQpCiB7Ci0gICAgTm9kZSYgYnJhbmNoTm9kZSA9IG1faml0LmdyYXBo
KClbYnJhbmNoTm9kZUluZGV4XTsKKyAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9k
ZUluZGV4KTsKICAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4
Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwogICAg
IEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29k
ZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgCkBAIC0x
MjUzLDcgKzEyNTMsNyBAQCBib29sIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlQ29t
CiAKIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChO
b2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBaX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24p
CiB7Ci0gICAgTm9kZSYgYnJhbmNoTm9kZSA9IG1faml0LmdyYXBoKClbYnJhbmNoTm9kZUluZGV4
XTsKKyAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKICAgICBCbG9j
a0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQo
YnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwogICAgIEJsb2NrSW5kZXggbm90VGFr
ZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2Rl
Lm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CiAKQEAgLTEzOTUsNyArMTM5NSw3IEBAIHZvaWQg
SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KIAogdm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSYgbm9kZSwgTm9kZUluZGV4
IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZlcnQpCiB7Ci0gICAgTm9kZSYgYnJhbmNoTm9kZSA9
IG1faml0LmdyYXBoKClbYnJhbmNoTm9kZUluZGV4XTsKKyAgICBOb2RlJiBicmFuY2hOb2RlID0g
YXQoYnJhbmNoTm9kZUluZGV4KTsKICAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgo
KS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zm
c2V0KCkpOwogICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
CiAKQEAgLTE1OTIsNyArMTU5Miw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwo
Tm9kZSYgbm8KICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVt
Q2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNh
bGwoKTsKLSAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29t
cGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBh
dChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7CiAKICAgICBKSVRDb21waWxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOwogCkBAIC0xNjAwLDEwICsxNjAwLDEwIEBAIHZvaWQgSklUQ29k
ZUdlbmVyYXRvcjo6ZW1pdENhbGwoTm9kZSYgbm8KIAogICAgIG1faml0LmFkZFB0cihJbW0zMiht
X2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAg
ICAgbV9qaXQucHVzaChHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVyOjpD
YWxsIHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2soc2xv
d0NhbGxGdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZh
c3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBhdChtX2NvbXBpbGVJbmRleCkuY29k
ZU9yaWdpbik7CiAgICAgbV9qaXQubW92ZShJbW0zMihudW1QYXNzZWRBcmdzKSwgR1BSSW5mbzo6
cmVnVDEpOwogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1D
YWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpOwotICAgIG1faml0Lm5vdGlmeUNhbGwobV9qaXQuY2FsbChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiksIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOworICAg
IG1faml0Lm5vdGlmeUNhbGwobV9qaXQuY2FsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIGF0
KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKTsKIAogICAgIGRvbmUubGluaygmbV9qaXQpOwog
CkBAIC0xNjExLDcgKzE2MTEsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5v
ZGUmIG5vCiAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQ
UiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKIAotICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRv
Q2hlY2ssIGlzQ2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7
CisgICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywg
aXNDYWxsLCBhdChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7CiB9CiAKICNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRv
cjY0LmNwcAkocmV2aXNpb24gOTY4NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3I2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBHUFJSZWcgSklUQ29kZUdlbmVyYXRv
cjo6ZmlsbEludGVnZXIoTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9y
bWF0KQogewotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAg
Tm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAgLTExMSw3ICsxMTEs
NyBAQCBHUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEludGVnZXIoTm9kCiAKIEZQUlJlZyBK
SVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKE5vZGVJbmRleCBub2RlSW5kZXgpCiB7Ci0gICAg
Tm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICBOb2RlJiBub2RlID0g
YXQobm9kZUluZGV4KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9k
ZS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJh
dGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKIApAQCAtMjM2LDcgKzIzNiw3IEBAIEZQUlJlZyBK
SVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKE5vZGUKIAogR1BSUmVnIEpJVENvZGVHZW5lcmF0
b3I6OmZpbGxKU1ZhbHVlKE5vZGVJbmRleCBub2RlSW5kZXgpCiB7Ci0gICAgTm9kZSYgbm9kZSA9
IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4
KTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVn
aXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmly
dHVhbFJlZ2lzdGVyXTsKIApAQCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVWYWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBH
ZW5lcmF0aW9uSW5mbyYgY2hpbGRJbmZvID0gbV9nZW5lcmF0aW9uSW5mb1ttX2ppdC5ncmFwaCgp
W25vZGUuY2hpbGQxKCldLnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICBHZW5lcmF0aW9uSW5mbyYg
Y2hpbGRJbmZvID0gbV9nZW5lcmF0aW9uSW5mb1thdChub2RlLmNoaWxkMSgpKS52aXJ0dWFsUmVn
aXN0ZXIoKV07CiAgICAgaWYgKGlzSlNEb3VibGUoY2hpbGRJbmZvLnJlZ2lzdGVyRm9ybWF0KCkp
KSB7CiAgICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMTEzMCw3ICsxMTMwLDcgQEAgdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogCiB2b2lkIEpJVENvZGVHZW5l
cmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKE5vZGVJbmRleCBvcGVyYW5k
LCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKIHsKLSAgICBOb2RlJiBi
cmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKVticmFuY2hOb2RlSW5kZXhdOworICAgIE5vZGUmIGJy
YW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwogICAgIEJsb2NrSW5kZXggdGFrZW4gPSBt
X2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2Vu
Qnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBo
KCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29k
ZU9mZnNldCgpKTsKICAgICAKQEAgLTExOTEsNyArMTE5MSw3IEBAIGJvb2wgSklUQ29kZUdlbmVy
YXRvcjo6bm9uU3BlY3VsYXRpdmVDb20KIAogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVj
dWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5k
ZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFpfREZHT3BlcmF0
aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKLSAgICBOb2RlJiBicmFuY2hOb2RlID0gbV9qaXQu
Z3JhcGgoKVticmFuY2hOb2RlSW5kZXhdOworICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFu
Y2hOb2RlSW5kZXgpOwogICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2Nr
SW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
CiAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKIApAQCAt
MTMyMCw3ICsxMzIwLDcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5v
bgogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RF
cShOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKIHsK
LSAgICBOb2RlJiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKVticmFuY2hOb2RlSW5kZXhdOwor
ICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwogICAgIEJsb2NrSW5k
ZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFu
Y2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9
IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90
VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKIApAQCAtMTUyNywxNyArMTUyNywxNyBAQCB2b2lkIEpJ
VENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgbV9qaXQuYWRkUHRyKEltbTMy
KG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rl
cikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6
OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwotICAgIG1faml0Lm5vdGlmeUNhbGwo
ZmFzdENhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOworICAg
IG1faml0Lm5vdGlmeUNhbGwoZmFzdENhbGwsIGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2lu
KTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAg
IAogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAKICAgICBtX2ppdC5hZGRQdHIoSW1t
MzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lz
dGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhG
YXN0RXhjZXB0aW9uQ2hlY2soc2xvd0NhbGxGdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBp
bGVJbmRleF0uY29kZU9yaWdpbik7CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBt
X2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBh
dChtX2NvbXBpbGVJbmRleCkuY29kZU9yaWdpbik7CiAgICAgbV9qaXQubW92ZShJbW0zMihudW1Q
YXNzZWRBcmdzKSwgR1BSSW5mbzo6cmVnVDEpOwogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2pp
dC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIG1faml0Lm5vdGlmeUNhbGwobV9qaXQu
Y2FsbChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiksIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5k
ZXhdLmNvZGVPcmlnaW4pOworICAgIG1faml0Lm5vdGlmeUNhbGwobV9qaXQuY2FsbChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiksIGF0KG1fY29tcGlsZUluZGV4KS5jb2RlT3JpZ2luKTsKICAgICAK
ICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAKQEAgLTE1NDUsNyArMTU0NSw3IEBAIHZvaWQg
SklUQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoTm9kZSYgbm8KICAgICAKICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKICAgICAKLSAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNs
b3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5k
ZXhdLmNvZGVPcmlnaW4pOworICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGws
IHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgYXQobV9jb21waWxlSW5kZXgpLmNvZGVPcmlnaW4pOwog
fQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5Njg2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Mywx
MSBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSB0d29Ub1RoZTMyOwogCiBw
dWJsaWM6CisgICAgTm9kZSYgYXQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgfQorICAgIAogICAgIEdQUlJl
ZyBmaWxsSW50ZWdlcihOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7CiAgICAg
RlBSUmVnIGZpbGxEb3VibGUoTm9kZUluZGV4KTsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTA0
LDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICAvLyBhbmQgaXRzIG1hY2hpbmUgcmVnaXN0ZXJzIG1h
eSBiZSByZXVzZWQuCiAgICAgYm9vbCBjYW5SZXVzZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAg
IHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG1faml0LmdyYXBo
KClbbm9kZUluZGV4XS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IGF0KG5vZGVJbmRleCkudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0
ZXJdOwogICAgICAgICByZXR1cm4gaW5mby5jYW5SZXVzZSgpOwogICAgIH0KQEAgLTE2OSwxMyAr
MTc0LDEzIEBAIHB1YmxpYzoKICAgICAvLyBhdm9pZCBzcGlsbGluZyB2YWx1ZXMgd2Ugd2lsbCBu
ZWVkIGltbWVkaWF0ZWx5KS4KICAgICBib29sIGlzRmlsbGVkKE5vZGVJbmRleCBub2RlSW5kZXgp
CiAgICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbV9qaXQu
Z3JhcGgoKVtub2RlSW5kZXhdLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gYXQobm9kZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIoKTsK
ICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxS
ZWdpc3Rlcl07CiAgICAgICAgIHJldHVybiBpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZv
cm1hdE5vbmU7CiAgICAgfQogICAgIGJvb2wgaXNGaWxsZWREb3VibGUoTm9kZUluZGV4IG5vZGVJ
bmRleCkKICAgICB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBt
X2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBhdChub2RlSW5kZXgpLnZpcnR1YWxSZWdpc3Rl
cigpOwogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmly
dHVhbFJlZ2lzdGVyXTsKICAgICAgICAgcmV0dXJuIGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0RG91YmxlOwogICAgIH0KQEAgLTE4Myw3ICsxODgsNyBAQCBwdWJsaWM6CiAgICAg
Ly8gQ2FsbGVkIG9uIGFuIG9wZXJhbmQgb25jZSBpdCBoYXMgYmVlbiBjb25zdW1lZCBieSBhIHBh
cmVudCBub2RlLgogICAgIHZvaWQgdXNlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewotICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbV9qaXQuZ3JhcGgoKVtub2Rl
SW5kZXhdLnZpcnR1YWxSZWdpc3RlcigpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyID0gYXQobm9kZUluZGV4KS52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICAgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAK
ICAgICAgICAgLy8gdXNlKCkgcmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlIGJlY29tZXMgZGVh
ZCwgYW5kIGFueQpAQCAtMzAzLDEyICszMDgsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKSB7CiAgICAgICAgICAgICAv
LyBpdCdzIGVpdGhlciBhIGNvbnN0YW50IG9yIGl0J3MgYWxyZWFkeSBiZWVuIHNwaWxsZWQKLSAg
ICAgICAgICAgIEFTU0VSVChtX2ppdC5ncmFwaCgpW2luZm8ubm9kZUluZGV4KCldLmhhc0NvbnN0
YW50KCkgfHwgaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKTsKKyAgICAgICAg
ICAgIEFTU0VSVChhdChpbmZvLm5vZGVJbmRleCgpKS5oYXNDb25zdGFudCgpIHx8IGluZm8uc3Bp
bGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIGl0J3MgbmVpdGhlciBhIGNvbnN0YW50IG5vciBo
YXMgaXQgYmVlbiBzcGlsbGVkLgotICAgICAgICBBU1NFUlQoIW1faml0LmdyYXBoKClbaW5mby5u
b2RlSW5kZXgoKV0uaGFzQ29uc3RhbnQoKSk7CisgICAgICAgIEFTU0VSVCghYXQoaW5mby5ub2Rl
SW5kZXgoKSkuaGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0
KCkgPT0gRGF0YUZvcm1hdE5vbmUpOwogCiAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKGluZm8u
ZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKQEAgLTMyNiw3ICszMzEs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2pp
dC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgp
OwogICAgICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXROb25l
KTsKICAgICAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0RG91
YmxlKTsKICAgICAgICAgRGF0YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJG
b3JtYXQoKTsKQEAgLTM2OCw3ICszNzMsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgTm9k
ZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSk7CiAKICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3Rh
bnQoKSkgewpAQCAtNzA5LDEyICs3MTQsMTIgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIC8vIENo
ZWNrIHRoYXQgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMgd2lsbCBiZSBnZW5lcmF0ZWQuCiAgICAgICAg
IGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXggKyAxOyBpbmRleCA8IGxhc3RO
b2RlSW5kZXg7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChtX2ppdC5ncmFwaCgpW2luZGV4
XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgaWYgKGF0KGluZGV4KS5zaG91bGRHZW5l
cmF0ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdE5vZGUgaXMgYSBicmFuY2ggb24gdGhpcyBub2RlLgot
ICAgICAgICBOb2RlJiBsYXN0Tm9kZSA9IG1faml0LmdyYXBoKClbbGFzdE5vZGVJbmRleF07Cisg
ICAgICAgIE5vZGUmIGxhc3ROb2RlID0gYXQobGFzdE5vZGVJbmRleCk7CiAgICAgICAgIHJldHVy
biBsYXN0Tm9kZS5vcCA9PSBCcmFuY2ggJiYgbGFzdE5vZGUuY2hpbGQxKCkgPT0gbV9jb21waWxl
SW5kZXggPyBsYXN0Tm9kZUluZGV4IDogTm9Ob2RlOwogICAgIH0KICAgICAKQEAgLTgwNiw3ICs4
MTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gdG8gZGVzY3JpYmUgdGhlIHJlc3VsdCBvZiBhbiBv
cGVyYXRpb24uCiAgICAgdm9pZCBpbnRlZ2VyUmVzdWx0KEdQUlJlZyByZWcsIE5vZGVJbmRleCBu
b2RlSW5kZXgsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXIsIFVzZUNoaWxk
cmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9k
ZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5v
ZGVJbmRleCk7CiAgICAgICAgIGlmIChtb2RlID09IENhbGxVc2VDaGlsZHJlbikKICAgICAgICAg
ICAgIHVzZUNoaWxkcmVuKG5vZGUpOwogCkBAIC04MzYsMTIgKzg0MSwxMiBAQCBwcm90ZWN0ZWQ6
CiAgICAgewogICAgICAgICBpZiAobW9kZSA9PSBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgp
W25vZGVJbmRleF07CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAg
ICB1c2VDaGlsZHJlbihub2RlKTsKICAgICB9CiAgICAgdm9pZCBjZWxsUmVzdWx0KEdQUlJlZyBy
ZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNo
aWxkcmVuKQogICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUlu
ZGV4XTsKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgICAgIGlmICht
b2RlID09IENhbGxVc2VDaGlsZHJlbikKICAgICAgICAgICAgIHVzZUNoaWxkcmVuKG5vZGUpOwog
CkBAIC04NTYsNyArODYxLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBpZiAoZm9ybWF0ID09IERh
dGFGb3JtYXRKU0ludGVnZXIpCiAgICAgICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pTSW50MzIo
cmVnKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJ
bmRleF07CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICBpZiAo
bW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsK
IApAQCAtODcyLDcgKzg3Nyw3IEBAIHByb3RlY3RlZDoKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
CiAgICAgdm9pZCBqc1ZhbHVlUmVzdWx0KEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkLCBOb2Rl
SW5kZXggbm9kZUluZGV4LCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUywgVXNlQ2hp
bGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBOb2RlJiBu
b2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgICAgICBOb2RlJiBub2RlID0gYXQo
bm9kZUluZGV4KTsKICAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQogICAgICAg
ICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAKQEAgLTg4OSw3ICs4OTQsNyBAQCBwcm90ZWN0ZWQ6
CiAjZW5kaWYKICAgICB2b2lkIHN0b3JhZ2VSZXN1bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5v
ZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewot
ICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgICAgICBO
b2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNo
aWxkcmVuKQogICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CiAgICAgICAgIApAQCAtOTAw
LDcgKzkwNSw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAgdm9pZCBkb3VibGVSZXN1bHQoRlBS
UmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxs
VXNlQ2hpbGRyZW4pCiAgICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtu
b2RlSW5kZXhdOworICAgICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAgICAgICAg
aWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQogICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9k
ZSk7CiAKQEAgLTkxMiw3ICs5MTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBpbml0Q29uc3Rh
bnRJbmZvKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNJbnQz
MkNvbnN0YW50KG5vZGVJbmRleCkgfHwgaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpIHx8IGlz
SlNDb25zdGFudChub2RlSW5kZXgpKTsKLSAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBo
KClbbm9kZUluZGV4XTsKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAg
ICAgIG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV0uaW5pdENvbnN0YW50
KG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpKTsKICAgICB9CiAKQEAgLTEzNTAsNyArMTM1NSw3
IEBAIHByb3RlY3RlZDoKIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1faml0LmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24sIG1faml0
LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOworICAgICAgICByZXR1cm4gbV9q
aXQuYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbiwgYXQobV9jb21waWxlSW5k
ZXgpLmNvZGVPcmlnaW4pOwogICAgIH0KIAogICAgIHZvaWQgYWRkQnJhbmNoKGNvbnN0IE1hY3Jv
QXNzZW1ibGVyOjpKdW1wJiBqdW1wLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk2ODYxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzMyw2ICs5MzMs
ODMgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fcHJl
ZGljdGlvbiwgcHJlZGljdGlvbik7CiAgICAgfQogICAgIAorICAgIGJvb2wgc2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpCisgICAgeworICAgICAgICByZXR1cm4gaXNJbnQzMlByZWRpY3Rpb24ocHJl
ZGljdGlvbigpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRG91YmxlUHJlZGljdGlvbihwcmVkaWN0aW9uKCkp
OworICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcigpCisgICAgewor
ICAgICAgICByZXR1cm4gaXNOdW1iZXJQcmVkaWN0aW9uKHByZWRpY3Rpb24oKSkgfHwgcHJlZGlj
dGlvbigpID09IFByZWRpY3ROb25lOworICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZE5vdFNw
ZWN1bGF0ZUludGVnZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKHByZWRpY3Rpb24oKSAm
IFByZWRpY3REb3VibGUpOworICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0ZpbmFsT2JqZWN0UHJlZGljdGlv
bihwcmVkaWN0aW9uKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0T3JPdGhlcigpCisgICAgeworICAgICAgICByZXR1cm4gaXNGaW5hbE9iamVjdE9y
T3RoZXJQcmVkaWN0aW9uKHByZWRpY3Rpb24oKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2hv
dWxkU3BlY3VsYXRlQXJyYXkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzQXJyYXlQcmVkaWN0
aW9uKHByZWRpY3Rpb24oKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRl
QXJyYXlPck90aGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0FycmF5T3JPdGhlclByZWRp
Y3Rpb24ocHJlZGljdGlvbigpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzaG91bGRTcGVjdWxh
dGVPYmplY3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzT2JqZWN0UHJlZGljdGlvbihwcmVk
aWN0aW9uKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIHNob3VsZFNwZWN1bGF0ZUNlbGwoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzQ2VsbFByZWRpY3Rpb24ocHJlZGljdGlvbigpKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBv
cDEsIE5vZGUmIG9wMikKKyAgICB7CisgICAgICAgIHJldHVybiAhKG9wMS5zaG91bGROb3RTcGVj
dWxhdGVJbnRlZ2VyKCkgfHwgb3AyLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSkgJiYgKG9w
MS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgfHwgb3AyLnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcihO
b2RlJiBvcDEsIE5vZGUmIG9wMikKKyAgICB7CisgICAgICAgIHJldHVybiBvcDEuc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChOb2RlJiBvcDEs
IE5vZGUmIG9wMikKKyAgICB7CisgICAgICAgIHJldHVybiAob3AxLnNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0KCkgJiYgb3AyLnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpKQorICAgICAgICAgICAg
fHwgKG9wMS5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSAmJiBvcDIuc2hvdWxkU3BlY3VsYXRlRmlu
YWxPYmplY3QoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgc2hvdWxkU3BlY3VsYXRlQXJy
YXkoTm9kZSYgb3AxLCBOb2RlJiBvcDIpCisgICAgeworICAgICAgICByZXR1cm4gKG9wMS5zaG91
bGRTcGVjdWxhdGVBcnJheSgpICYmIG9wMi5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkKKyAgICAg
ICAgICAgIHx8IChvcDEuc2hvdWxkU3BlY3VsYXRlT2JqZWN0KCkgJiYgb3AyLnNob3VsZFNwZWN1
bGF0ZUFycmF5KCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGNhblNwZWN1bGF0ZUludGVnZXIo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKGFyaXRoTm9k
ZUZsYWdzKCkpOworICAgIH0KKyAgICAKICAgICAvLyBUaGlzIGVudW0gdmFsdWUgZGVzY3JpYmVz
IHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAgIE5vZGVUeXBlIG9wOwogICAgIC8vIFVzZWQgdG8g
bG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24gKGN1cnJlbnRseSBpbXBsZW1l
bnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gOTY4NjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludEkKICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCiAgICAgZnBy
aW50ZihzdGRlcnIsICJTcGVjSW50QCVkICAgIiwgbm9kZUluZGV4KTsKICNlbmRpZgotICAgIE5v
ZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgTm9kZSYgbm9kZSA9IGF0
KG5vZGVJbmRleCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUu
dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRp
b25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAgLTEzNyw3ICsxMzcsNyBAQCBGUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJC
T1NFKQogICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY0RvdWJsZUAlZCAgICIsIG5vZGVJbmRleCk7
CiAjZW5kaWYKLSAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAg
IE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBp
bmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCkBAIC0yNTEsNyArMjUx
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogI2lmIEVOQUJM
RShERkdfREVCVUdfVkVSQk9TRSkKICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWNDZWxsQCVkICAg
Iiwgbm9kZUluZGV4KTsKICNlbmRpZgotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25v
ZGVJbmRleF07CisgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2Vu
ZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAK
QEAgLTMzNiw3ICszMzYsNyBAQCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29u
dmVyCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCBvcC50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90TnVtYmVyID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgb3AucGF5bG9hZEdQUigpLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CiAKLSAgICB1bmJveERvdWJsZShvcC50YWdHUFIo
KSwgb3AucGF5bG9hZEdQUigpLCByZXN1bHQsIG1faml0LmdyYXBoKClbb3AuaW5kZXgoKV0udmly
dHVhbFJlZ2lzdGVyKCkpOworICAgIHVuYm94RG91YmxlKG9wLnRhZ0dQUigpLCBvcC5wYXlsb2Fk
R1BSKCksIHJlc3VsdCwgYXQob3AuaW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAKICAgICBpc0ludGVnZXIubGlu
aygmbV9qaXQpOwpAQCAtMzc5LDEzICszNzksMTMgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGFyZShOb2RlJiBub2RlLAogICAgIGlmIChjb21waWxlUGVlcEhvbGVCcmFuY2gobm9kZSwgY29u
ZGl0aW9uLCBkb3VibGVDb25kaXRpb24sIG9wZXJhdGlvbikpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCi0gICAgaWYgKHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KG5vZGUuY2hpbGQxKCksIG5v
ZGUuY2hpbGQyKCkpKQorICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChh
dChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQogICAgICAgICBjb21waWxlT2Jq
ZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7
Ci0gICAgZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlQXJyYXkobm9kZS5jaGlsZDEoKSwgbm9kZS5j
aGlsZDIoKSkpCisgICAgZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlQXJyYXkoYXQobm9k
ZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkKICAgICAgICAgY29tcGlsZU9iamVjdEVx
dWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOwotICAgIGVsc2Ug
aWYgKCFzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS5jaGlsZDEoKSkgJiYgIXNob3VsZFNwZWN1
bGF0ZU51bWJlcihub2RlLmNoaWxkMigpKSkKKyAgICBlbHNlIGlmICghYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkgJiYgIWF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNw
ZWN1bGF0ZU51bWJlcigpKQogICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFy
ZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7Ci0gICAgZWxzZSBpZiAoKHNob3VsZFNwZWN1
bGF0ZU51bWJlcihub2RlLmNoaWxkMSgpKSB8fCBzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS5j
aGlsZDIoKSkpICYmICFzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUu
Y2hpbGQyKCkpKSB7CisgICAgZWxzZSBpZiAoKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZU51bWJlcigpIHx8IGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigp
KSAmJiAhTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlLmNoaWxkMSgpKSwgYXQo
bm9kZS5jaGlsZDIoKSkpKSB7CiAgICAgICAgIC8vIE5vcm1hbCBjYXNlLCBub3QgZnVzZWQgdG8g
YnJhbmNoLgogICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5j
aGlsZDIoKSk7CkBAIC00NzEsMTUgKzQ3MSwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTG9naWNhbE5vdChOCiB7CiAgICAgLy8gRklYTUU6IE5lZWQgdG8gYWRkIGZhc3QgcGF0aHMg
Zm9yIGtub3duIGJvb2xlYW5zLgogCi0gICAgaWYgKHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0
T3JPdGhlcihub2RlLmNoaWxkMSgpKSkgeworICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkgewogICAgICAgICBjb21waWxlT2JqZWN0
T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0Zp
bmFsT2JqZWN0VlB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUFycmF5T3JPdGhlcihub2RlLmNoaWxkMSgpKSkgeworICAgIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewogICAgICAgICBjb21waWxl
T2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0FycmF5VlB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0UGF5bG9hZCh0aGlzLCB2YWx1ZSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRU
YWcodGhpcyk7CkBAIC00ODgsNyArNDg4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUxvZ2ljYWxOb3QoTgogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVz
dWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9k
ZS5jaGlsZDEoKSkpIHsKKyAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CkBAIC01NzMsMTIgKzU3MywxMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAKICAgICAvLyBGSVhNRTog
QWRkIGZhc3QgY2FzZXMgZm9yIGtub3duIEJvb2xlYW4hCiAKLSAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlRmluYWxPYmplY3RPck90aGVyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7CiAgICAgICAg
IGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwg
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7Ci0gICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICB9IGVsc2Ug
aWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7CiAg
ICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RU
YWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7Ci0gICAgfSBlbHNlIGlmIChz
aG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS5jaGlsZDEoKSkpIHsKLSAgICAgICAgaWYgKHNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICB9IGVsc2UgaWYgKGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CisgICAgICAgIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIGJv
b2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh0YWtlbiA9
PSAobV9ibG9jayArIDEpKSB7CkBAIC02OTksNyArNjk5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBTZXRMb2NhbCBhbmQgd2hhdGV2ZXIg
b3RoZXIgREZHIE5vZGVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUKICAgICAgICAgLy8g
Ynl0ZWNvZGUgaW5kZXggYXMgdGhlIFNldExvY2FsLgogICAgICAgICBBU1NFUlQobV9ieXRlY29k
ZUluZGV4Rm9yT1NSID09IG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAg
ICBOb2RlJiBuZXh0Tm9kZSA9IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXgrMV07CisgICAg
ICAgIE5vZGUmIG5leHROb2RlID0gYXQobV9jb21waWxlSW5kZXggKyAxKTsKICAgICAgICAgCiAg
ICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IG5leHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpOwogICAgICAgICAKQEAgLTgyMSwxMyArODIxLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgVmFsdWVUb0ludDMy
OiB7Ci0gICAgICAgIGlmIChzaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCkp
KSB7Ci0gICAgICAgICAgICAvLyBEbyBpdCB0aGUgc2FmZSB3YXkuCi0gICAgICAgICAgICBub25T
cGVjdWxhdGl2ZVZhbHVlVG9JbnQzMihub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2Rl
LmNoaWxkMSgpKSkgeworICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkTm90U3Bl
Y3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICAvLyBEbyBpdCB0aGUgc2FmZSB3YXkuCiAg
ICAgICAgICAgICBub25TcGVjdWxhdGl2ZVZhbHVlVG9JbnQzMihub2RlKTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtODQxLDcgKzgzNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6IHsKLSAgICAgICAg
aWYgKHNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAg
aWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAg
ICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7
CiAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgICAg
ICBtX2ppdC5tb3ZlRG91YmxlKG9wMS5mcHIoKSwgcmVzdWx0LmZwcigpKTsKQEAgLTg2Niw3ICs4
NjAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICBj
YXNlIFZhbHVlQWRkOgogICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgaWYgKHNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkgJiYgbm9kZUNhblNw
ZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGls
ZDIoKSkpICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBpZiAo
aXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKCkpKSB7CiAgICAgICAgICAgICAgICAgaW50MzJf
dCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpA
QCAtOTI3LDcgKzkyMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAo
c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpKSB7Cisg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIoYXQobm9kZS5jaGlsZDEoKSks
IGF0KG5vZGUuY2hpbGQyKCkpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVP
cGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEZQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwpAQCAtOTQ2LDcgKzk0MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoU3Vi
OiB7Ci0gICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5v
ZGUuY2hpbGQyKCkpICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxh
Z3MoKSkpIHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9k
ZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVn
ZXIoKSkgewogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigpKSkg
ewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJD
b25zdGFudChub2RlLmNoaWxkMigpKTsKQEAgLTk4OSw3ICs5ODMsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aE11bDog
ewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2Rl
LmNoaWxkMigpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdz
KCkpKSB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGF0KG5vZGUu
Y2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2Vy
KCkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CkBAIC0xMDMzLDcgKzEwMjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aERpdjogewotICAgICAgICBpZiAoc2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSAmJiBub2RlQ2Fu
U3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNo
aWxkMigpKSkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSBlYXgodGhpcywgWDg2UmVnaXN0ZXJzOjplYXgpOwpAQCAt
MTA4Niw4ICsxMDgwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgaWYgKHNob3VsZE5vdFNw
ZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkgfHwgc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdl
cihub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgfHwgIW5vZGVDYW5TcGVjdWxhdGVJbnRlZ2Vy
KG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSB8fCBhdChub2RlLmNoaWxkMigpKS5zaG91bGRO
b3RTcGVjdWxhdGVJbnRlZ2VyKCkKKyAgICAgICAgICAgIHx8ICFub2RlLmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0
aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIApAQCAtMTEzMiw3ICsxMTI2LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNh
c2UgQXJpdGhBYnM6IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5j
aGlsZDEoKSkgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygp
KSkgeworICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBTcGVjdWxh
dGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKQEAgLTExNTksNyArMTE1Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBj
YXNlIEFyaXRoTWF4OiB7Ci0gICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUu
Y2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUu
YXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSAmJiBub2RlLmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CkBAIC0xNTE2LDcgKzE1MTAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBCcmFu
Y2g6Ci0gICAgICAgIGlmIChpc1N0cmljdEludDMyKG5vZGUuY2hpbGQxKCkpIHx8IHNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICAgICAgaWYgKGlzU3RyaWN0SW50
MzIobm9kZS5jaGlsZDEoKSkgfHwgYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcCh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtl
biA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5C
eXRlY29kZU9mZnNldCgpKTsKQEAgLTE1NTUsNyArMTU0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBvcDEuZmlsbCgpOwogICAgICAgICBpZiAob3AxLmlz
RG91YmxlKCkpCi0gICAgICAgICAgICBib3hEb3VibGUob3AxLmZwcigpLCBHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtX2ppdC5ncmFwaCgpW29wMS5p
bmRleCgpXS52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBib3hEb3VibGUob3AxLmZw
cigpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUjIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBh
dChvcDEuaW5kZXgoKSkudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIGlmIChvcDEucGF5bG9hZEdQUigpID09IEdQUkluZm86OnJldHVyblZhbHVlR1BSMiAm
JiBvcDEudGFnR1BSKCkgPT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpCiAgICAgICAgICAgICAg
ICAgbV9qaXQuc3dhcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIyKTsKQEAgLTE1ODksNyArMTU4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgVG9QcmltaXRpdmU6IHsK
LSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAg
ICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewog
ICAgICAgICAgICAgLy8gSXQncyByZWFsbHkgcHJvZml0YWJsZSB0byBzcGVjdWxhdGUgaW50ZWdl
ciwgc2luY2UgaXQncyByZWFsbHkgY2hlYXAsCiAgICAgICAgICAgICAvLyBpdCBtZWFucyB3ZSBk
b24ndCBoYXZlIHRvIGRvIGFueSByZWFsIHdvcmssIGFuZCB3ZSBlbWl0IGEgbG90IGxlc3MgY29k
ZS4KICAgICAgICAgICAgIApAQCAtMTc0Niw3ICsxNzQwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBOZWVkIHRvIHZlcmlmeSB0aGF0IHRo
ZSBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LiBJZiB3ZSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlCiAg
ICAgICAgIC8vIHRoYXQgaXQncyBhIEZpbmFsT2JqZWN0IHRoZW4gd2Ugc3BlY3VsYXRlIG9uIHRo
YXQgZGlyZWN0bHkuIE90aGVyd2lzZSB3ZQogICAgICAgICAvLyBkbyB0aGUgc2xvdyAoc3RydWN0
dXJlLWJhc2VkKSBjaGVjay4KLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0
KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3Bl
Y3VsYXRlRmluYWxPYmplY3QoKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIsIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gOTY4NjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludEkKICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCiAgICAgZnByaW50
ZihzdGRlcnIsICJTcGVjSW50QCVkICAgIiwgbm9kZUluZGV4KTsKICNlbmRpZgotICAgIE5vZGUm
IG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgTm9kZSYgbm9kZSA9IGF0KG5v
ZGVJbmRleCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmly
dHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAgLTE3MCw3ICsxNzAsNyBAQCBGUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NF
KQogICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY0RvdWJsZUAlZCAgICIsIG5vZGVJbmRleCk7CiAj
ZW5kaWYKLSAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgIE5v
ZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwogCkBAIC0yOTQsNyArMjk0LDcg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogI2lmIEVOQUJMRShE
RkdfREVCVUdfVkVSQk9TRSkKICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWNDZWxsQCVkICAgIiwg
bm9kZUluZGV4KTsKICNlbmRpZgotICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJ
bmRleF07CisgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CiAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CiAKQEAg
LTM2Miw3ICszNjIsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29s
CiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQogICAgIGZwcmludGYoc3RkZXJyLCAiU3Bl
Y0Jvb2xAJWQgICAiLCBub2RlSW5kZXgpOwogI2VuZGlmCi0gICAgTm9kZSYgbm9kZSA9IG1faml0
LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIo
KTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKIApAQCAtNDc5LDcgKzQ3OSw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBh
cmUoTm9kZSYgbm9kZSwKICAgICBpZiAoY29tcGlsZVBlZXBIb2xlQnJhbmNoKG5vZGUsIGNvbmRp
dGlvbiwgZG91YmxlQ29uZGl0aW9uLCBvcGVyYXRpb24pKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hp
bGQyKCkpKSB7CisgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5j
aGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgewogICAgICAgICBTcGVjdWxhdGVJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZUludGVn
ZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7CkBAIC00ODksNyArNDg5LDcgQEAgYm9vbCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBub2RlLAogICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRh
Rm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgogICAgICAgICBtX2ppdC5vcjMyKFRy
dXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsK
LSAgICB9IGVsc2UgaWYgKHNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLmNoaWxkMSgpLCBub2Rl
LmNoaWxkMigpKSkgeworICAgIH0gZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVy
KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKICAgICAgICAgU3BlY3Vs
YXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtNTAwLDkgKzUwMCw5IEBAIGJvb2wgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwKICAgICAgICAgdHJ1ZUNhc2UubGluaygmbV9qaXQp
OwogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwg
RGF0YUZvcm1hdEpTQm9vbGVhbik7Ci0gICAgfSBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVF
cSAmJiBzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxk
MigpKSkKKyAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigp
KSkpCiAgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRh
KCktPmpzRmluYWxPYmplY3RWUHRyKTsKLSAgICBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVF
cSAmJiBzaG91bGRTcGVjdWxhdGVBcnJheShub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkK
KyAgICBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxh
dGVBcnJheShhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQogICAgICAgICBj
b21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0
cik7CiAgICAgZWxzZQogICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShu
b2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CkBAIC01NjUsMTUgKzU2NSwxNSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JP
dGhlcihub2RlLmNoaWxkMSgpKSkgeworICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkgewogICAgICAgICBjb21waWxlT2JqZWN0T3JP
dGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFs
T2JqZWN0VlB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUFycmF5T3JPdGhlcihub2RlLmNoaWxkMSgpKSkgeworICAgIGlmIChhdChub2RlLmNoaWxk
MSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewogICAgICAgICBjb21waWxlT2Jq
ZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c0FycmF5VlB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHNob3VsZFNwZWN1
bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSku
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIHZhbHVlKTsKICAgICAgICAgbV9qaXQuY29tcGFyZTMyKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgdmFsdWUuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJl
c3VsdC5ncHIoKSk7CkBAIC01ODEsNyArNTgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS5jaGlsZDEoKSkpIHsKKyAgICBp
ZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKICAgICAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CkBAIC02NzUsMTIgKzY3NSwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
QnJhbmNoKE5vZGUmIG5vCiAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RU
YWtlbik7CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAg
fSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIobm9kZS5jaGlsZDEo
KSkpIHsKKyAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0T3JPdGhlcigpKSB7CiAgICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5v
ZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFs
T2JqZWN0VlB0cik7Ci0gICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIo
bm9kZS5jaGlsZDEoKSkpIHsKKyAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3Vs
ZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7CiAgICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJh
bmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c0FycmF5VlB0cik7Ci0gICAgfSBlbHNlIGlmIChzaG91bGRTcGVjdWxhdGVOdW1iZXIobm9kZS5j
aGlsZDEoKSkpIHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGls
ZDEoKSkpIHsKKyAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZU51bWJlcigpKSB7CisgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CkBAIC04MDQs
NyArODA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAvLyBTZXRMb2NhbCBhbmQgd2hhdGV2ZXIgb3RoZXIgREZHIE5vZGVzIGFyZSBhc3NvY2lh
dGVkIHdpdGggdGhlIHNhbWUKICAgICAgICAgLy8gYnl0ZWNvZGUgaW5kZXggYXMgdGhlIFNldExv
Y2FsLgogICAgICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4Rm9yT1NSID09IG5vZGUuY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCkpOwotICAgICAgICBOb2RlJiBuZXh0Tm9kZSA9IG1faml0Lmdy
YXBoKClbbV9jb21waWxlSW5kZXgrMV07CisgICAgICAgIE5vZGUmIG5leHROb2RlID0gYXQobV9j
b21waWxlSW5kZXggKyAxKTsKICAgICAgICAgCiAgICAgICAgIC8vIE9kZGx5LCBpdCdzIHBvc3Np
YmxlIGZvciB0aGUgYnl0ZWNvZGUgaW5kZXggZm9yIHRoZSBuZXh0IG5vZGUgdG8gYmUKICAgICAg
ICAgLy8gZXF1YWwgdG8gb3Vycy4gVGhpcyB3aWxsIGhhcHBlbiBmb3Igb3BfcG9zdF9pbmMuIEFu
ZCwgZXZlbiBtb3JlIG9kZGx5LApAQCAtOTM5LDEzICs5MzksNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
IHsKLSAgICAgICAgaWYgKHNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSkp
IHsKLSAgICAgICAgICAgIC8vIERvIGl0IHRoZSBzYWZlIHdheS4KLSAgICAgICAgICAgIG5vblNw
ZWN1bGF0aXZlVmFsdWVUb0ludDMyKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKG5vZGUu
Y2hpbGQxKCkpKSB7CisgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGROb3RTcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIC8vIERvIGl0IHRoZSBzYWZlIHdheS4KICAg
ICAgICAgICAgIG5vblNwZWN1bGF0aXZlVmFsdWVUb0ludDMyKG5vZGUpOwogICAgICAgICAgICAg
YnJlYWs7CkBAIC05NTksNyArOTUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgVmFsdWVUb051bWJlcjogewotICAgICAgICBp
ZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBp
ZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAg
ICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgICAg
IG1faml0Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwpAQCAtOTg0LDcgKzk3
OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgIGNh
c2UgVmFsdWVBZGQ6CiAgICAgY2FzZSBBcml0aEFkZDogewotICAgICAgICBpZiAoc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSAmJiBub2RlQ2FuU3Bl
Y3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgIGlmIChOb2Rl
OjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxk
MigpKSkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIGlmIChp
c0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEoKSkpIHsKICAgICAgICAgICAgICAgICBpbnQzMl90
IGltbTEgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAg
ICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBA
IC0xMDQ1LDcgKzEwMzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYg
KHNob3VsZFNwZWN1bGF0ZU51bWJlcihub2RlLmNoaWxkMSgpLCBub2RlLmNoaWxkMigpKSkgewor
ICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGF0KG5vZGUuY2hpbGQxKCkp
LCBhdChub2RlLmNoaWxkMigpKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBGUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIG9wMSwgb3AyKTsKQEAgLTEwNjQsNyArMTA1OCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRo
U3ViOiB7Ci0gICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCks
IG5vZGUuY2hpbGQyKCkpICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2Rl
RmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQo
bm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSAmJiBub2RlLmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkgewogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMigp
KSkgewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlLmNoaWxkMigpKTsKQEAgLTExMDcsNyArMTEwMSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRo
TXVsOiB7Ci0gICAgICAgIGlmIChzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCks
IG5vZGUuY2hpbGQyKCkpICYmIG5vZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2Rl
RmxhZ3MoKSkpIHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQo
bm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSAmJiBub2RlLmNhblNwZWN1bGF0ZUlu
dGVnZXIoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKQEAgLTExNTEsNyArMTE0NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgIGlmIChz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCksIG5vZGUuY2hpbGQyKCkpICYmIG5v
ZGVDYW5TcGVjdWxhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAg
aWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5v
ZGUuY2hpbGQyKCkpKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAg
ICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkp
OwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IGVheCh0aGlzLCBYODZSZWdpc3RlcnM6OmVheCk7
CkBAIC0xMjA0LDggKzExOTgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICBpZiAoc2hvdWxk
Tm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpKSB8fCBzaG91bGROb3RTcGVjdWxhdGVJ
bnRlZ2VyKG5vZGUuY2hpbGQyKCkpCi0gICAgICAgICAgICB8fCAhbm9kZUNhblNwZWN1bGF0ZUlu
dGVnZXIobm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpIHx8IGF0KG5vZGUuY2hpbGQyKCkpLnNo
b3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKQorICAgICAgICAgICAgfHwgIW5vZGUuY2FuU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgCkBAIC0xMjUwLDcgKzEyNDQs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBBcml0aEFiczogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihu
b2RlLmNoaWxkMSgpKSAmJiBub2RlQ2FuU3BlY3VsYXRlSW50ZWdlcihub2RlLmFyaXRoTm9kZUZs
YWdzKCkpKSB7CisgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwpAQCAtMTI3Nyw3ICsxMjcxLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICBjYXNlIEFyaXRoTWluOgog
ICAgIGNhc2UgQXJpdGhNYXg6IHsKLSAgICAgICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIo
bm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIoKSkgJiYgbm9kZUNhblNwZWN1bGF0ZUludGVnZXIo
bm9kZS5hcml0aE5vZGVGbGFncygpKSkgeworICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpICYmIG5vZGUu
Y2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKQEAgLTE2MTgsNyArMTYxMiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNl
IEJyYW5jaDoKLSAgICAgICAgaWYgKGlzU3RyaWN0SW50MzIobm9kZS5jaGlsZDEoKSkgfHwgc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgpKSkgeworICAgICAgICBpZiAoaXNTdHJp
Y3RJbnQzMihub2RlLmNoaWxkMSgpKSB8fCBhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBCbG9ja0luZGV4
IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50
YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwpAQCAtMTY3OCw3ICsxNjcyLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBU
b1ByaW1pdGl2ZTogewotICAgICAgICBpZiAoc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlLmNo
aWxkMSgpKSkgeworICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpKSB7CiAgICAgICAgICAgICAvLyBJdCdzIHJlYWxseSBwcm9maXRhYmxlIHRvIHNw
ZWN1bGF0ZSBpbnRlZ2VyLCBzaW5jZSBpdCdzIHJlYWxseSBjaGVhcCwKICAgICAgICAgICAgIC8v
IGl0IG1lYW5zIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55IHJlYWwgd29yaywgYW5kIHdlIGVtaXQg
YSBsb3QgbGVzcyBjb2RlLgogICAgICAgICAgICAgCkBAIC0xODIyLDcgKzE4MTYsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIE5lZWQgdG8g
dmVyaWZ5IHRoYXQgdGhlIHByb3RvdHlwZSBpcyBhbiBvYmplY3QuIElmIHdlIGhhdmUgcmVhc29u
IHRvIGJlbGlldmUKICAgICAgICAgLy8gdGhhdCBpdCdzIGEgRmluYWxPYmplY3QgdGhlbiB3ZSBz
cGVjdWxhdGUgb24gdGhhdCBkaXJlY3RseS4gT3RoZXJ3aXNlIHdlCiAgICAgICAgIC8vIGRvIHRo
ZSBzbG93IChzdHJ1Y3R1cmUtYmFzZWQpIGNoZWNrLgotICAgICAgICBpZiAoc2hvdWxkU3BlY3Vs
YXRlRmluYWxPYmplY3Qobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmIChhdChub2RlLmNoaWxk
MSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpKQogICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90
b0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlz
aW9uIDk2ODYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIE9TUkV4aXQ6OmR1
bXAoRklMRSogb3V0KSBjb25zdAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhv
bGVEb3VibGVCcmFuY2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklU
Q29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCiB7Ci0gICAgTm9kZSYgYnJhbmNo
Tm9kZSA9IG1faml0LmdyYXBoKClbYnJhbmNoTm9kZUluZGV4XTsKKyAgICBOb2RlJiBicmFuY2hO
b2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKICAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQu
Z3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVj
b2RlT2Zmc2V0KCkpOwogICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJs
b2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZz
ZXQoKSk7CiAgICAgCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVBlZXBIb2xlRG91YgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVP
YmplY3RFcXVhbGl0eShOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2b2lk
KiB2cHRyKQogewotICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBtX2ppdC5ncmFwaCgpW2JyYW5jaE5v
ZGVJbmRleF07CisgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7CiAg
ICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2Rl
T2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKICAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJh
bmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwogCkBAIC0xNjgsNyArMTY4LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRl
eCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRp
dGlvbikKIHsKLSAgICBOb2RlJiBicmFuY2hOb2RlID0gbV9qaXQuZ3JhcGgoKVticmFuY2hOb2Rl
SW5kZXhdOworICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwogICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9m
ZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgQmxvY2tJbmRleCBu
b3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5j
aE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKIApAQCAtMjEwLDE5ICsyMTAsMTkgQEAg
Ym9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbgogICAgICAgICAvLyBzbyBj
YW4gYmUgbm8gaW50ZXJ2ZW5pbmcgbm9kZXMgdG8gYWxzbyByZWZlcmVuY2UgdGhlIGNvbXBhcmUu
IAogICAgICAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CiAKLSAgICAg
ICAgaWYgKHNob3VsZFNwZWN1bGF0ZUludGVnZXIobm9kZS5jaGlsZDEoKSwgbm9kZS5jaGlsZDIo
KSkpIHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5j
aGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgewogICAgICAgICAgICAgY29tcGlsZVBlZXBI
b2xlSW50ZWdlckJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5kZXgsIGNvbmRpdGlvbik7CiAgICAg
ICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIo
KSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG5vZGUuY2hpbGQx
KCksIG5vZGUuY2hpbGQyKCkpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKICAg
ICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChub2RlLCBicmFuY2hOb2RlSW5k
ZXgsIGRvdWJsZUNvbmRpdGlvbik7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS5v
cCA9PSBDb21wYXJlRXEgJiYgc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3Qobm9kZS5jaGlsZDEo
KSwgbm9kZS5jaGlsZDIoKSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChub2RlLm9wID09IENvbXBh
cmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChhdChub2RlLmNoaWxkMSgp
KSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7CiAgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmpl
Y3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNG
aW5hbE9iamVjdFZQdHIpOwogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0g
Q29tcGFyZUVxICYmIHNob3VsZFNwZWN1bGF0ZUFycmF5KG5vZGUuY2hpbGQxKCksIG5vZGUuY2hp
bGQyKCkpKSB7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlQXJyYXkoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQy
KCkpKSkgewogICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwg
YnJhbmNoTm9kZUluZGV4LCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKTsKICAgICAg
ICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigp
KTsKQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2lj
QmxvY2smCiAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAgICAgbV9h
cmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGlj
dGlvbihtX2ppdC5ncmFwaCgpW25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3Rpb24oKSk7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlOjpmb3JQ
cmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24o
KSk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5zaXplKCkgPT0gYmxvY2su
bV9sb2NhbHNBdEhlYWQuc2l6ZSgpKTsKQEAgLTI3MSwxNCArMjcxLDE0IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBO
b05vZGUpCiAgICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5S
ZWdpc3RlckZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9
IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKG1faml0LmdyYXBoKClbbm9kZUluZGV4XS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIG1fdmFyaWFibGVz
W2ldID0gVmFsdWVTb3VyY2U6OmZvclByZWRpY3Rpb24oYXQobm9kZUluZGV4KS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKICAgICB9CiAgICAgCiAgICAgbV9sYXN0U2V0T3Bl
cmFuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CiAgICAgbV9ieXRlY29kZUlu
ZGV4Rm9yT1NSID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOwogCiAgICAg
Zm9yICg7IG1fY29tcGlsZUluZGV4IDwgYmxvY2suZW5kOyArK21fY29tcGlsZUluZGV4KSB7Ci0g
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XTsKKyAgICAg
ICAgTm9kZSYgbm9kZSA9IGF0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgbV9ieXRlY29kZUlu
ZGV4Rm9yT1NSID0gbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgaWYg
KCFub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0Up
CkBAIC0zNTYsNyArMzU2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5
cGVzKAogICAgIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9qaXQuY29kZUJsb2NrKCktPm1f
bnVtUGFyYW1ldGVyczsgKytpKSB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSAoVmlydHVhbFJlZ2lzdGVyKShtX2ppdC5jb2RlQmxvY2soKS0+dGhpc1JlZ2lzdGVy
KCkgKyBpKTsKLSAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbV9qaXQuZ3Jh
cGgoKVttX2ppdC5ncmFwaCgpLm1fYXJndW1lbnRzW2ldXS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
cHJlZGljdGlvbigpOworICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBhdCht
X2ppdC5ncmFwaCgpLm1fYXJndW1lbnRzW2ldKS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dGlvbigpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlv
bihwcmVkaWN0ZWRUeXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CkBAIC00MTIs
NyArNDEyLDcgQEAgVmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbAogICAg
ICAgICBpZiAobV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpCiAgICAg
ICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobV9qaXQudmFsdWVPZkpTQ29u
c3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKTsKICAgICAKLSAgICAgICAgTm9kZSogbm9k
ZVB0ciA9ICZtX2ppdC5ncmFwaCgpW3ZhbHVlU291cmNlLm5vZGVJbmRleCgpXTsKKyAgICAgICAg
Tm9kZSogbm9kZVB0ciA9ICZhdCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSk7CiAgICAgICAgIGlm
ICghbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkgewogICAgICAgICAgICAgLy8gSXQncyBsZWdp
dGltYXRlbHkgZGVhZC4gQXMgaW4sIG5vYm9keSB3aWxsIGV2ZXIgdXNlIHRoaXMgbm9kZSwgb3Ig
b3BlcmFuZCwKICAgICAgICAgICAgIC8vIGV2ZXIuIFNldCBpdCB0byBVbmRlZmluZWQgdG8gbWFr
ZSB0aGUgR0MgaGFwcHkgYWZ0ZXIgdGhlIE9TUi4KQEAgLTQ0Niw3ICs0NDYsNyBAQCBWYWx1ZVJl
Y292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsCiAgICAgICAgIAogICAgICAgICAgICAg
aWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7CiAgICAgICAgICAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpOwotICAgICAgICAgICAgICAgIG5v
ZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIG5vZGVQ
dHIgPSAmYXQobm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJh
dGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOwogICAgICAgICAgICAgICAgIGlm
IChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRleCkK
ICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwpAQCAtNDYzLDcgKzQ2Myw3IEBAIFZh
bHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5ub2RlSW5kZXgo
KSA9PSBOb05vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbaW5mby5ub2RlSW5kZXgoKV07
CisgICAgICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChpbmZvLm5vZGVJbmRleCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0gdmFsdWVT
b3VyY2Uubm9kZUluZGV4KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CkBAIC00OTMsNyArNDkzLDcgQEAg
VmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbAogICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXhUb1VzZSA9IE5vTm9kZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChub2RlSW5kZXhUb1VzZSAhPSBOb05vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleFRvVXNlXTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZVB0ciA9ICZhdChub2RlSW5kZXhUb1VzZSk7CiAgICAgICAgICAgICAgICAgICAg
IGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHIt
Pm5vZGVJbmRleCgpID09IG5vZGVJbmRleFRvVXNlKTsKICAgICAgICAgICAgICAgICAgICAgZm91
bmQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkocmV2aXNpb24gOTY4NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQwNCw3ICs0MDQsNyBAQCBw
cml2YXRlOgogCiAgICAgYm9vbCBpc0ludGVnZXIoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7
Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgICAg
IE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwogICAgICAgICBpZiAobm9kZS5oYXNJbnQzMlJl
c3VsdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTQxNywxNjYgKzQxNyw5IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiBpbmZvLmlzSlNJbnRlZ2VyKCk7CiAgICAgfQogICAg
IAotICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlSW5kZXggbm9kZUluZGV4KQot
ICAgIHsKLSAgICAgICAgaWYgKGlzSW50ZWdlcihub2RlSW5kZXgpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24obV9qaXQu
Z2V0UHJlZGljdGlvbihub2RlSW5kZXgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3Vs
ZFNwZWN1bGF0ZURvdWJsZShOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgaWYg
KGlzRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07Ci0KLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVy
KCk7Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdOwotCi0gICAgICAgIGlmIChpbmZvLmlzSlNEb3VibGUoKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKGlzRG91YmxlUHJlZGljdGlv
bihtX2ppdC5nZXRQcmVkaWN0aW9uKG5vZGVJbmRleCkpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGJv
b2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAg
ICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwotICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUuaGFzTnVtYmVyUmVzdWx0KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICBHZW5l
cmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLQot
ICAgICAgICBpZiAoaW5mby5pc0pTSW50ZWdlcigpIHx8IGluZm8uaXNKU0RvdWJsZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgICAgICBQcmVkaWN0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBtX2ppdC5nZXRQcmVkaWN0aW9uKG5vZGVJbmRleCk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoaXNOdW1iZXJQcmVkaWN0aW9uKHByZWRpY3Rpb24pIHx8IHByZWRpY3Rpb24gPT0g
UHJlZGljdE5vbmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGROb3RTcGVjdWxhdGVJ
bnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICBpZiAoaXNEb3VibGVD
b25zdGFudChub2RlSW5kZXgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAg
Tm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKLQotICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAg
ICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rl
cl07Ci0KLSAgICAgICAgaWYgKGluZm8uaXNKU0RvdWJsZSgpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9qaXQuZ2V0UHJlZGljdGlvbihub2RlSW5k
ZXgpICYgUHJlZGljdERvdWJsZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZFNwZWN1
bGF0ZUZpbmFsT2JqZWN0KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgewotICAgICAgICBQcmVk
aWN0ZWRUeXBlIHByZWRpY3Rpb247Ci0gICAgICAgIGlmIChpc0pTQ29uc3RhbnQobm9kZUluZGV4
KSkKLSAgICAgICAgICAgIHByZWRpY3Rpb24gPSBwcmVkaWN0aW9uRnJvbVZhbHVlKHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGVJbmRleCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcmVkaWN0
aW9uID0gbV9qaXQuZ2V0UHJlZGljdGlvbihub2RlSW5kZXgpOwotICAgICAgICByZXR1cm4gaXNG
aW5hbE9iamVjdFByZWRpY3Rpb24ocHJlZGljdGlvbik7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKE5vZGVJbmRleCBub2RlSW5kZXgpCi0g
ICAgewotICAgICAgICByZXR1cm4gaXNGaW5hbE9iamVjdE9yT3RoZXJQcmVkaWN0aW9uKG1faml0
LmdldFByZWRpY3Rpb24obm9kZUluZGV4KSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxk
U3BlY3VsYXRlQXJyYXkoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbjsKLSAgICAgICAgaWYgKGlzSlNDb25zdGFudChub2RlSW5kZXgp
KQotICAgICAgICAgICAgcHJlZGljdGlvbiA9IHByZWRpY3Rpb25Gcm9tVmFsdWUodmFsdWVPZkpT
Q29uc3RhbnQobm9kZUluZGV4KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByZWRpY3Rp
b24gPSBtX2ppdC5nZXRQcmVkaWN0aW9uKG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBpc0Fy
cmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRT
cGVjdWxhdGVBcnJheU9yT3RoZXIoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBpc0FycmF5T3JPdGhlclByZWRpY3Rpb24obV9qaXQuZ2V0UHJlZGljdGlvbihub2Rl
SW5kZXgpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRTcGVjdWxhdGVPYmplY3QoTm9k
ZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFw
aCgpW25vZGVJbmRleF07Ci0gICAgICAgIGlmIChub2RlLm9wID09IENvbnZlcnRUaGlzKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbjsK
LSAgICAgICAgaWYgKGlzSlNDb25zdGFudChub2RlSW5kZXgpKQotICAgICAgICAgICAgcHJlZGlj
dGlvbiA9IHByZWRpY3Rpb25Gcm9tVmFsdWUodmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByZWRpY3Rpb24gPSBtX2ppdC5nZXRQcmVkaWN0
aW9uKG5vZGVJbmRleCk7Ci0gICAgICAgIHJldHVybiBpc09iamVjdFByZWRpY3Rpb24ocHJlZGlj
dGlvbik7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlQ2VsbChOb2RlSW5k
ZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKGlzSlNDb25zdGFudChub2RlSW5kZXgp
ICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkuaXNDZWxsKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgp
W25vZGVJbmRleF07Ci0KLSAgICAgICAgaWYgKGlzQ2VsbFByZWRpY3Rpb24obV9qaXQuZ2V0UHJl
ZGljdGlvbihub2RlSW5kZXgpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdpc3Rlcigp
OwotICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVh
bFJlZ2lzdGVyXTsKLSAgICAgICAgCi0gICAgICAgIGlmIChpbmZvLmlzSlNDZWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGVJbmRleCBvcDEs
IE5vZGVJbmRleCBvcDIpCi0gICAgewotICAgICAgICByZXR1cm4gIShzaG91bGROb3RTcGVjdWxh
dGVJbnRlZ2VyKG9wMSkgfHwgc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihvcDIpKSAmJiAoc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihvcDEpIHx8IHNob3VsZFNwZWN1bGF0ZUludGVnZXIob3AyKSk7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKE5vZGVJbmRleCBv
cDEsIE5vZGVJbmRleCBvcDIpCi0gICAgewotICAgICAgICByZXR1cm4gc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKG9wMik7Ci0gICAgfQotICAgIAot
ICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoTm9kZUluZGV4IG9wMSwgTm9kZUlu
ZGV4IG9wMikKLSAgICB7Ci0gICAgICAgIHJldHVybiAoc2hvdWxkU3BlY3VsYXRlRmluYWxPYmpl
Y3Qob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVPYmplY3Qob3AyKSkKLSAgICAgICAgICAgIHx8IChz
aG91bGRTcGVjdWxhdGVPYmplY3Qob3AxKSAmJiBzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChv
cDIpKTsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZFNwZWN1bGF0ZUFycmF5KE5vZGVJbmRleCBv
cDEsIE5vZGVJbmRleCBvcDIpCi0gICAgewotICAgICAgICByZXR1cm4gKHNob3VsZFNwZWN1bGF0
ZUFycmF5KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlT2JqZWN0KG9wMikpCi0gICAgICAgICAgICB8
fCAoc2hvdWxkU3BlY3VsYXRlT2JqZWN0KG9wMSkgJiYgc2hvdWxkU3BlY3VsYXRlQXJyYXkob3Ay
KSk7Ci0gICAgfQotICAgIAogICAgIGJvb2wgaXNLbm93bkFycmF5KE5vZGVJbmRleCBvcDEpCiAg
ICAgewotICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtvcDFdOworICAgICAgICBO
b2RlJiBub2RlID0gYXQob3AxKTsKICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAg
IGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICByZXR1cm4gaXNBcnJheVByZWRpY3Rpb24obm9k
ZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKQEAgLTU5Miw3ICs0MzUsNyBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCBpc0tub3duU3RyaW5nKE5vZGVJbmRleCBvcDEpCiAgICAg
ewotICAgICAgICBzd2l0Y2ggKG1faml0LmdyYXBoKClbb3AxXS5vcCkgeworICAgICAgICBzd2l0
Y2ggKGF0KG9wMSkub3ApIHsKICAgICAgICAgY2FzZSBTdHJDYXQ6CiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIAo=
</data>
<flag name="review"
          id="107430"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>