<?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>154572</bug_id>
          
          <creation_ts>2016-02-22 18:35:58 -0800</creation_ts>
          <short_desc>[JSC] Improve Select of Doubles based on Double condition</short_desc>
          <delta_ts>2016-03-02 21:18:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1167287</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-02-22 18:35:58 -0800</bug_when>
    <thetext>[JSC] Improve Select of Doubles based on Double condition</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167290</commentid>
    <comment_count>1</comment_count>
      <attachid>271979</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-02-22 18:44:15 -0800</bug_when>
    <thetext>Created attachment 271979
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167291</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-02-22 18:44:36 -0800</bug_when>
    <thetext>ARM64 results:


                                                  Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                   10.4678+-0.1776           10.4234+-0.0884        
   3d-morph                                   8.2765+-0.0665     ?      8.4501+-0.1354        ? might be 1.0210x slower
   3d-raytrace                                9.6306+-0.4978     ?     10.1917+-0.4832        ? might be 1.0583x slower
   access-binary-trees                        4.3589+-0.0500            4.2659+-0.1246          might be 1.0218x faster
   access-fannkuch                           11.6872+-0.9625     ?     11.7824+-1.1008        ?
   access-nbody                               4.8167+-0.1337            4.7069+-0.0507          might be 1.0233x faster
   access-nsieve                              3.5576+-0.2040            3.5423+-0.0670        
   bitops-3bit-bits-in-byte                   1.8202+-0.1677     ?      1.8905+-0.2034        ? might be 1.0386x slower
   bitops-bits-in-byte                        4.3246+-0.1038            4.3028+-0.0341        
   bitops-bitwise-and                         3.2191+-0.0285     ?      3.2289+-0.0516        ?
   bitops-nsieve-bits                         5.8892+-0.0526     ?      5.9472+-0.0683        ?
   controlflow-recursive                      3.8726+-0.3588            3.5500+-0.3637          might be 1.0909x faster
   crypto-aes                                 6.5471+-0.1118     ?      6.5686+-0.1597        ?
   crypto-md5                                 4.3004+-0.3622            4.1703+-0.2402          might be 1.0312x faster
   crypto-sha1                                3.8150+-0.1209            3.7923+-0.0568        
   date-format-tofte                         11.1752+-0.1305           11.1364+-0.1037        
   date-format-xparb                          7.5310+-0.4663            7.4216+-0.1289          might be 1.0147x faster
   math-cordic                                5.4047+-0.0895            5.3905+-0.0984        
   math-partial-sums                         11.6647+-0.1398     ?     11.7150+-0.1698        ?
   math-spectral-norm                         3.2741+-0.2327     ?      3.4810+-0.2925        ? might be 1.0632x slower
   regexp-dna                                 9.7617+-0.0705     ?      9.7723+-0.1063        ?
   string-base64                              6.5264+-0.0964            6.4979+-0.0381        
   string-fasta                               9.8154+-0.1679     ?      9.9933+-0.1529        ? might be 1.0181x slower
   string-tagcloud                           11.1328+-0.1967           11.0198+-0.1089          might be 1.0103x faster
   string-unpack-code                        23.7781+-0.1873           23.6078+-0.1298        
   string-validate-input                      6.6788+-0.1459            6.4669+-0.1227          might be 1.0328x faster

   &lt;arithmetic&gt;                               7.4356+-0.0563            7.4352+-0.0629          might be 1.0001x faster

                                                  Conf#1                    Conf#2                                      
Octane:
   encrypt                                   0.19860+-0.00155    ?     0.19905+-0.00139       ?
   decrypt                                   3.71906+-0.00576    ?     3.72646+-0.02533       ?
   deltablue                        x2       0.17446+-0.00461          0.17203+-0.00338         might be 1.0141x faster
   earley                                    0.42984+-0.01644          0.41700+-0.00675         might be 1.0308x faster
   boyer                                     7.96326+-0.37931          7.65866+-0.18503         might be 1.0398x faster
   navier-stokes                    x2       7.18257+-0.00512    ?     7.22201+-0.06471       ?
   raytrace                         x2       1.29717+-0.01003          1.28950+-0.00698       
   richards                         x2       0.11467+-0.00100          0.11424+-0.00093       
   splay                            x2       0.74971+-0.01588    ^     0.72347+-0.00926       ^ definitely 1.0363x faster
   regexp                           x2      36.87020+-0.23798         36.68169+-0.09856       
   pdfjs                            x2      56.57145+-0.63483    ?    56.76323+-0.61822       ?
   mandreel                         x2      72.11990+-0.76653         71.65942+-1.14959       
   gbemu                            x2      45.95830+-3.68361         45.76195+-4.04929       
   closure                                   0.65412+-0.00613    ?     0.66838+-0.02829       ? might be 1.0218x slower
   jquery                                    9.68256+-0.04040    ?     9.68319+-0.01521       ?
   box2d                            x2      16.84773+-1.92125         15.97744+-0.13870         might be 1.0545x faster
   zlib                             x2     679.09902+-8.46445    ?   684.17057+-2.34361       ?
   typescript                       x2    1142.23555+-12.20514   ?  1150.15195+-6.53485       ?

   &lt;geometric&gt;                               8.18626+-0.05766          8.12227+-0.04894         might be 1.0079x faster

                                                  Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                  155.956+-0.867            155.788+-0.440         
   audio-beat-detection                       58.734+-0.314      ?      58.992+-1.435         ?
   audio-dft                                 147.326+-5.702            142.967+-5.213           might be 1.0305x faster
   audio-fft                                  41.914+-0.093             41.891+-0.106         
   audio-oscillator                           58.072+-0.486      ?      58.177+-0.838         ?
   imaging-darkroom                           69.077+-0.105      ?      69.194+-0.120         ?
   imaging-desaturate                         78.536+-0.889      ?      78.565+-0.645         ?
   imaging-gaussian-blur                     106.425+-1.281      ?     107.502+-0.876         ? might be 1.0101x slower
   json-parse-financial                       48.121+-0.129      ?      48.355+-0.798         ?
   json-stringify-tinderbox                   27.058+-0.410      ?      27.198+-0.250         ?
   stanford-crypto-aes                        58.242+-0.182      !      58.820+-0.387         ! definitely 1.0099x slower
   stanford-crypto-ccm                        47.393+-1.320             46.965+-0.834         
   stanford-crypto-pbkdf2                    139.804+-0.623      !     141.403+-0.799         ! definitely 1.0114x slower
   stanford-crypto-sha256-iterative           51.459+-0.142      ?      51.518+-0.220         ?

   &lt;arithmetic&gt;                               77.723+-0.467             77.667+-0.399           might be 1.0007x faster

                                                  Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                               673.9739+-3.9344          672.6627+-29.9566       
   cray.c                                   561.9127+-1.1886     ?    561.9176+-0.7776        ?
   dry.c                                    473.7460+-3.9622          473.5770+-4.6664        
   FloatMM.c                                793.6519+-1.1961          792.6264+-0.3668        
   gcc-loops.cpp                           4599.4011+-4.4631     ?   4608.1185+-19.9831       ?
   n-body.c                                1773.3995+-2.5473         1749.8401+-40.9771         might be 1.0135x faster
   Quicksort.c                              569.5708+-3.3983          567.4153+-3.5734        
   stepanov_container.cpp                  5640.3250+-80.4516        5602.4305+-15.8436       
   Towers.c                                 282.4936+-0.7417     ?    282.8061+-0.6463        ?

   &lt;geometric&gt;                             1005.8344+-2.2890         1002.8776+-4.2186          might be 1.0029x faster

                                                  Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                           46.7043+-0.1008           46.5694+-0.0792          might be 1.0029x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1167293</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-22 18:46:35 -0800</bug_when>
    <thetext>Attachment 271979 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:9691:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:9729:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10021:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10022:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10023:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10024:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10025:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10026:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10027:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10243:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10244:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10245:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10246:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10247:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10248:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:10249:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 16 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170099</commentid>
    <comment_count>4</comment_count>
      <attachid>271979</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-02 21:18:54 -0800</bug_when>
    <thetext>Comment on attachment 271979
Patch

Clearing flags on attachment: 271979

Committed r197490: &lt;http://trac.webkit.org/changeset/197490&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170100</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-02 21:18:58 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271979</attachid>
            <date>2016-02-22 18:44:15 -0800</date>
            <delta_ts>2016-03-02 21:18:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154572-20160222184357.patch</filename>
            <type>text/plain</type>
            <size>55185</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2OTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ZmFhOTU0MDVlY2E2MDUxM2VjMTMxNDVjZjkxNDUxMWM4Yzc1MzUwLi41Yzc1MjMyNTdlN2UwYmY5
NmM0N2JiNzU2ZDAyZjI2MjZiYzE3MTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MSBAQAorMjAxNi0wMi0yMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBJbXByb3ZlIFNlbGVjdCBvZiBEb3VibGVzIGJhc2VkIG9u
IERvdWJsZSBjb25kaXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NDU3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE9jdGFuZSBoYXMgYSBidW5jaCBvZiBTZWxlY3Qgb24gRG91YmxlIGJhc2VkIG9u
IGNvbXBhcmluZyBEb3VibGVzLgorICAgICAgICBBIGZldyBub2RlcyBnZW5lcmF0ZSB0aGF0OiBW
YWx1ZVJlcCwgTWluLCBNYXgsIGV0Yy4KKworICAgICAgICBPbiBBUk02NCwgd2UgY2FuIGltcHJv
dmUgb3VyIGNvZGUgYSBsb3QuIEFSTSBjYW4gZG8gYSBzZWxlY3QKKyAgICAgICAgYmFzZWQgb24g
ZmxhZ3Mgd2l0aCB0aGUgRkNTRUwgaW5zdHJ1Y3Rpb24uCisKKyAgICAgICAgT24geDg2LCB0aGlz
IHBhdGNoIGFkZHMgYWdncmVzc2l2ZSBhbGlhc2luZyBmb3IgbW92ZURvdWJsZUNvbmRpdGlvbmFs
bHlYWFguCisgICAgICAgIFRoaXMgaGFzIG9idmlvdXNseSBhIG11Y2ggbW9yZSBsaW1pdGVkIGlt
cGFjdC4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6bW92ZURvdWJsZUNvbmRpdGlvbmFsbHkzMik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjptb3ZlRG91YmxlQ29uZGl0aW9uYWxseTY0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Om1vdmVEb3VibGVDb25k
aXRpb25hbGx5VGVzdDMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6
Om1vdmVEb3VibGVDb25kaXRpb25hbGx5VGVzdDY0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXI6Om1vdmVEb3VibGVDb25kaXRpb25hbGx5RG91YmxlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Om1vdmVEb3VibGVDb25kaXRpb25hbGx5Rmxv
YXQpOiBEZWxldGVkLgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om1vdmVEb3VibGVDb25kaXRpb25h
bGx5QWZ0ZXJGbG9hdGluZ1BvaW50Q29tcGFyZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNNjQ6Om1vdmVEb3VibGVDb25kaXRpb25hbGx5RG91YmxlKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk02NDo6bW92ZURvdWJsZUNvbmRpdGlvbmFsbHlGbG9hdCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om1vdmVDb25kaXRpb25hbGx5MzIpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojptb3ZlRG91YmxlQ29uZGl0aW9uYWxseTMy
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bW92ZURvdWJsZUNvbmRpdGlv
bmFsbHk2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om1vdmVEb3VibGVD
b25kaXRpb25hbGx5VGVzdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6
bW92ZURvdWJsZUNvbmRpdGlvbmFsbHlUZXN0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTTY0OjpicmFuY2g2NCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjptb3Zl
Q29uZGl0aW9uYWxseTMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246
Om1vdmVEb3VibGVDb25kaXRpb25hbGx5MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
clg4NkNvbW1vbjo6bW92ZURvdWJsZUNvbmRpdGlvbmFsbHlUZXN0MzIpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bW92ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3VibGUp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bW92ZURvdWJsZUNvbmRp
dGlvbmFsbHlGbG9hdCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0
Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojptb3ZlRG91YmxlQ29uZGl0
aW9uYWxseTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om1vdmVEb3Vi
bGVDb25kaXRpb25hbGx5VGVzdDY0KToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6c2hvdWxkVHJ5QWxpYXNpbmdEZWYpOgor
ICAgICAgICAqIGIzL2Fpci9BaXJPcGNvZGUub3Bjb2RlczoKKyAgICAgICAgKiBiMy90ZXN0YjMu
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6cG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdWYWx1ZXMpOgor
ICAgICAgICAoSlNDOjpCMzo6ZmxvYXRpbmdQb2ludE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6
QjM6OmludDY0T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpCMzo6aW50MzJPcGVyYW5kcyk6Cisg
ICAgICAgIChKU0M6OkIzOjp0ZXN0U2VsZWN0Q29tcGFyZUZsb2F0KToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RTZWxlY3RDb21wYXJlRmxvYXRUb0RvdWJsZSk6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0U2VsZWN0RG91YmxlQ29tcGFyZURvdWJsZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U2Vs
ZWN0RG91YmxlQ29tcGFyZURvdWJsZVdpdGhBbGlhc2luZyk6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0U2VsZWN0RmxvYXRDb21wYXJlRmxvYXQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNlbGVj
dEZsb2F0Q29tcGFyZUZsb2F0V2l0aEFsaWFzaW5nKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6
CisKIDIwMTYtMDItMjIgIFRpbmctV2VpIExhbiAgPGxhbnR3NDRAZ21haWwuY29tPgogCiAgICAg
ICAgIEZpeCBidWlsZCBhbmQgaW1wbGVtZW50IGZ1bmN0aW9ucyB0byByZXRyaWV2ZSByZWdpc3Rl
cnMgb24gRnJlZUJTRApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlci5oCmluZGV4IDFhMGY5YzQ4ZWYxNDhhZGJjMDI0MTRhMGM1NDVhOTc5ZDBlMzcx
MjIuLjBiMWNjYjdlNzEwMTQ5NWI1YjZlY2NkOGZmMGM4NDMzZDg4NmUxZGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKQEAgLTEzMTUs
NjggKzEzMTUsNiBAQCBwdWJsaWM6CiAjZW5kaWYgLy8gIUNQVShYODZfNjQpCiAKICNpZiBFTkFC
TEUoQjNfSklUKQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIExlZnRUeXBlLCB0eXBlbmFtZSBSaWdo
dFR5cGU+Ci0gICAgdm9pZCBtb3ZlRG91YmxlQ29uZGl0aW9uYWxseTMyKFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZCwgTGVmdFR5cGUgbGVmdCwgUmlnaHRUeXBlIHJpZ2h0LCBGUFJlZ2lzdGVySUQg
c3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKLSAgICB7Ci0gICAgICAgIEp1bXAgZmFsc2VDYXNlID0g
YnJhbmNoMzIoaW52ZXJ0KGNvbmQpLCBsZWZ0LCByaWdodCk7Ci0gICAgICAgIG1vdmVEb3VibGUo
c3JjLCBkZXN0KTsKLSAgICAgICAgZmFsc2VDYXNlLmxpbmsodGhpcyk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgTGVmdFR5cGUsIHR5cGVuYW1lIFJpZ2h0VHlwZT4KLSAgICB2b2lk
IG1vdmVEb3VibGVDb25kaXRpb25hbGx5NjQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBMZWZ0
VHlwZSBsZWZ0LCBSaWdodFR5cGUgcmlnaHQsIEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJ
RCBkZXN0KQotICAgIHsKLSAgICAgICAgSnVtcCBmYWxzZUNhc2UgPSBicmFuY2g2NChpbnZlcnQo
Y29uZCksIGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgbW92ZURvdWJsZShzcmMsIGRlc3QpOwotICAg
ICAgICBmYWxzZUNhc2UubGluayh0aGlzKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUZXN0VHlwZSwgdHlwZW5hbWUgTWFza1R5cGU+Ci0gICAgdm9pZCBtb3ZlRG91YmxlQ29uZGl0
aW9uYWxseVRlc3QzMihSZXN1bHRDb25kaXRpb24gY29uZCwgVGVzdFR5cGUgdGVzdCwgTWFza1R5
cGUgbWFzaywgRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCi0gICAgewotICAg
ICAgICBpZiAoaXNJbnZlcnRpYmxlKGNvbmQpKSB7Ci0gICAgICAgICAgICBKdW1wIGZhbHNlQ2Fz
ZSA9IGJyYW5jaFRlc3QzMihpbnZlcnQoY29uZCksIHRlc3QsIG1hc2spOwotICAgICAgICAgICAg
bW92ZURvdWJsZShzcmMsIGRlc3QpOwotICAgICAgICAgICAgZmFsc2VDYXNlLmxpbmsodGhpcyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBKdW1wIHRydWVDYXNlID0gYnJhbmNoVGVzdDMyKGNvbmQs
IHRlc3QsIG1hc2spOwotICAgICAgICBKdW1wIGZhbHNlQ2FzZSA9IGp1bXAoKTsKLSAgICAgICAg
dHJ1ZUNhc2UubGluayh0aGlzKTsKLSAgICAgICAgbW92ZURvdWJsZShzcmMsIGRlc3QpOwotICAg
ICAgICBmYWxzZUNhc2UubGluayh0aGlzKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUZXN0VHlwZSwgdHlwZW5hbWUgTWFza1R5cGU+Ci0gICAgdm9pZCBtb3ZlRG91YmxlQ29uZGl0
aW9uYWxseVRlc3Q2NChSZXN1bHRDb25kaXRpb24gY29uZCwgVGVzdFR5cGUgdGVzdCwgTWFza1R5
cGUgbWFzaywgRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCi0gICAgewotICAg
ICAgICBpZiAoaXNJbnZlcnRpYmxlKGNvbmQpKSB7Ci0gICAgICAgICAgICBKdW1wIGZhbHNlQ2Fz
ZSA9IGJyYW5jaFRlc3Q2NChpbnZlcnQoY29uZCksIHRlc3QsIG1hc2spOwotICAgICAgICAgICAg
bW92ZURvdWJsZShzcmMsIGRlc3QpOwotICAgICAgICAgICAgZmFsc2VDYXNlLmxpbmsodGhpcyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBKdW1wIHRydWVDYXNlID0gYnJhbmNoVGVzdDY0KGNvbmQs
IHRlc3QsIG1hc2spOwotICAgICAgICBKdW1wIGZhbHNlQ2FzZSA9IGp1bXAoKTsKLSAgICAgICAg
dHJ1ZUNhc2UubGluayh0aGlzKTsKLSAgICAgICAgbW92ZURvdWJsZShzcmMsIGRlc3QpOwotICAg
ICAgICBmYWxzZUNhc2UubGluayh0aGlzKTsKLSAgICB9Ci0KLSAgICB2b2lkIG1vdmVEb3VibGVD
b25kaXRpb25hbGx5RG91YmxlKERvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVm
dCwgRlBSZWdpc3RlcklEIHJpZ2h0LCBGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVz
dCkKLSAgICB7Ci0gICAgICAgIEp1bXAgZmFsc2VDYXNlID0gYnJhbmNoRG91YmxlKGludmVydChj
b25kKSwgbGVmdCwgcmlnaHQpOwotICAgICAgICBtb3ZlRG91YmxlKHNyYywgZGVzdCk7Ci0gICAg
ICAgIGZhbHNlQ2FzZS5saW5rKHRoaXMpOwotICAgIH0KLQotICAgIHZvaWQgbW92ZURvdWJsZUNv
bmRpdGlvbmFsbHlGbG9hdChEb3VibGVDb25kaXRpb24gY29uZCwgRlBSZWdpc3RlcklEIGxlZnQs
IEZQUmVnaXN0ZXJJRCByaWdodCwgRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3Qp
Ci0gICAgewotICAgICAgICBKdW1wIGZhbHNlQ2FzZSA9IGJyYW5jaEZsb2F0KGludmVydChjb25k
KSwgbGVmdCwgcmlnaHQpOwotICAgICAgICBtb3ZlRG91YmxlKHNyYywgZGVzdCk7Ci0gICAgICAg
IGZhbHNlQ2FzZS5saW5rKHRoaXMpOwotICAgIH0KLQogICAgIC8vIFdlIHNob3VsZCBpbXBsZW1l
bnQgdGhpcyB0aGUgcmlnaHQgd2F5IGV2ZW50dWFsbHksIGJ1dCBmb3Igbm93LCBpdCdzIGZpbmUg
YmVjYXVzZSBpdCBhcmlzZXMgc28KICAgICAvLyBpbmZyZXF1ZW50bHkuCiAgICAgdm9pZCBjb21w
YXJlRG91YmxlKERvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVmdCwgRlBSZWdp
c3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCmluZGV4IGE1OTBiNDQ3Nzcx
MWQyOGY5NTgyOGIwOTQ3NjQ2OWQ0NDhhNGQ5M2YuLmY0ZmEzMjczZTRhMGFiMzcyYmE2MTZjN2Vh
ZTg2MTljMDA1OGVmNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC0xNjYxLDYgKzE2NjEsMzkgQEAgcHVibGlj
OgogICAgICAgICBtX2Fzc2VtYmxlci5jc2VsPGRhdGFzaXplPihkZXN0LCB0aGVuQ2FzZSwgZWxz
ZUNhc2UsIEFSTTY0Q29uZGl0aW9uKGNvbmQpKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTxpbnQg
ZGF0YXNpemU+CisgICAgdm9pZCBtb3ZlRG91YmxlQ29uZGl0aW9uYWxseUFmdGVyRmxvYXRpbmdQ
b2ludENvbXBhcmUoRG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUmVnaXN0ZXJJRCB0aGVuQ2FzZSwg
RlBSZWdpc3RlcklEIGVsc2VDYXNlLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IGlmIChjb25kID09IERvdWJsZU5vdEVxdWFsKSB7CisgICAgICAgICAgICBKdW1wIHVub3JkZXJl
ZCA9IG1ha2VCcmFuY2goQVJNNjRBc3NlbWJsZXI6OkNvbmRpdGlvblZTKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmZjc2VsPGRhdGFzaXplPihkZXN0LCB0aGVuQ2FzZSwgZWxzZUNhc2UsIEFS
TTY0QXNzZW1ibGVyOjpDb25kaXRpb25ORSk7CisgICAgICAgICAgICB1bm9yZGVyZWQubGluayh0
aGlzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29uZCA9
PSBEb3VibGVFcXVhbE9yVW5vcmRlcmVkKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgY29tcGFy
ZSBpcyB1bm9yZGVyZWQsIHRoZW5DYXNlIGlzIGNvcGllZCB0byBkZXN0IGFuZCB0aGUKKyAgICAg
ICAgICAgIC8vIG5leHQgY3NlbCBoYXMgYWxsIGFyZ3VtZW50cyBlcXVhbCB0byB0aGVuQ2FzZS4K
KyAgICAgICAgICAgIC8vIElmIHRoZSBjb21wYXJlIGlzIG9yZGVyZWQsIGRlc3QgaXMgdW5jaGFu
Z2VkIGFuZCBFUSBkZWNpZGVzCisgICAgICAgICAgICAvLyB3aGF0IHZhbHVlIHRvIHNldC4KKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmZjc2VsPGRhdGFzaXplPihkZXN0LCB0aGVuQ2FzZSwgZWxz
ZUNhc2UsIEFSTTY0QXNzZW1ibGVyOjpDb25kaXRpb25WUyk7CisgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5mY3NlbDxkYXRhc2l6ZT4oZGVzdCwgdGhlbkNhc2UsIGRlc3QsIEFSTTY0QXNzZW1ibGVy
OjpDb25kaXRpb25FUSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
bV9hc3NlbWJsZXIuZmNzZWw8ZGF0YXNpemU+KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSwgQVJN
NjRDb25kaXRpb24oY29uZCkpOworICAgIH0KKworICAgIHZvaWQgbW92ZURvdWJsZUNvbmRpdGlv
bmFsbHlEb3VibGUoRG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUmVnaXN0ZXJJRCBsZWZ0LCBGUFJl
Z2lzdGVySUQgcmlnaHQsIEZQUmVnaXN0ZXJJRCB0aGVuQ2FzZSwgRlBSZWdpc3RlcklEIGVsc2VD
YXNlLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmZjbXA8
NjQ+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgbW92ZURvdWJsZUNvbmRpdGlvbmFsbHlBZnRlckZs
b2F0aW5nUG9pbnRDb21wYXJlPDY0Pihjb25kLCB0aGVuQ2FzZSwgZWxzZUNhc2UsIGRlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgbW92ZURvdWJsZUNvbmRpdGlvbmFsbHlGbG9hdChEb3VibGVDb25k
aXRpb24gY29uZCwgRlBSZWdpc3RlcklEIGxlZnQsIEZQUmVnaXN0ZXJJRCByaWdodCwgRlBSZWdp
c3RlcklEIHRoZW5DYXNlLCBGUFJlZ2lzdGVySUQgZWxzZUNhc2UsIEZQUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZmNtcDwzMj4obGVmdCwgcmlnaHQpOworICAg
ICAgICBtb3ZlRG91YmxlQ29uZGl0aW9uYWxseUFmdGVyRmxvYXRpbmdQb2ludENvbXBhcmU8NjQ+
KGNvbmQsIHRoZW5DYXNlLCBlbHNlQ2FzZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBtdWxE
b3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAg
ICBtdWxEb3VibGUoZGVzdCwgc3JjLCBkZXN0KTsKQEAgLTE5MzMsNiArMTk2NiwxOSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmNzZWw8MzI+KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2Fz
ZSwgQVJNNjRDb25kaXRpb24oY29uZCkpOwogICAgIH0KIAorICAgIHZvaWQgbW92ZUNvbmRpdGlv
bmFsbHkzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgVHJ1c3Rl
ZEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIHRoZW5DYXNlLCBSZWdpc3RlcklEIGVsc2VDYXNlLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoaXNVSW50MTIocmlnaHQubV92YWx1
ZSkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXA8MzI+KGxlZnQsIFVJbnQxMihyaWdodC5t
X3ZhbHVlKSk7CisgICAgICAgIGVsc2UgaWYgKGlzVUludDEyKC1yaWdodC5tX3ZhbHVlKSkKKyAg
ICAgICAgICAgIG1fYXNzZW1ibGVyLmNtbjwzMj4obGVmdCwgVUludDEyKC1yaWdodC5tX3ZhbHVl
KSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbW92ZVRvQ2FjaGVkUmVnKHJpZ2h0LCBk
YXRhTWVtb3J5VGVtcFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wPDMy
PihsZWZ0LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2VtYmxl
ci5jc2VsPDY0PihkZXN0LCB0aGVuQ2FzZSwgZWxzZUNhc2UsIEFSTTY0Q29uZGl0aW9uKGNvbmQp
KTsKKyAgICB9CisKICAgICB2b2lkIG1vdmVDb25kaXRpb25hbGx5NjQoUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQg
c3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5jbXA8NjQ+
KGxlZnQsIHJpZ2h0KTsKQEAgLTE5NjksNiArMjAxNSw1NiBAQCBwdWJsaWM6CiAgICAgICAgIG1f
YXNzZW1ibGVyLmNzZWw8NjQ+KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSwgQVJNNjRDb25kaXRp
b24oY29uZCkpOwogICAgIH0KIAorICAgIHZvaWQgbW92ZURvdWJsZUNvbmRpdGlvbmFsbHkzMihS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdo
dCwgRlBSZWdpc3RlcklEIHRoZW5DYXNlLCBGUFJlZ2lzdGVySUQgZWxzZUNhc2UsIEZQUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wPDMyPihsZWZ0LCByaWdo
dCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmZjc2VsPDMyPihkZXN0LCB0aGVuQ2FzZSwgZWxzZUNh
c2UsIEFSTTY0Q29uZGl0aW9uKGNvbmQpKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmVEb3VibGVD
b25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQs
IFRydXN0ZWRJbW0zMiByaWdodCwgRlBSZWdpc3RlcklEIHRoZW5DYXNlLCBGUFJlZ2lzdGVySUQg
ZWxzZUNhc2UsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGlzVUludDEy
KHJpZ2h0Lm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wPDMyPihsZWZ0LCBV
SW50MTIocmlnaHQubV92YWx1ZSkpOworICAgICAgICBlbHNlIGlmIChpc1VJbnQxMigtcmlnaHQu
bV92YWx1ZSkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbW48MzI+KGxlZnQsIFVJbnQxMigt
cmlnaHQubV92YWx1ZSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmVUb0NhY2hl
ZFJlZyhyaWdodCwgZGF0YU1lbW9yeVRlbXBSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcDwzMj4obGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0KKyAgICAg
ICAgbV9hc3NlbWJsZXIuZmNzZWw8NjQ+KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSwgQVJNNjRD
b25kaXRpb24oY29uZCkpOworICAgIH0KKworICAgIHZvaWQgbW92ZURvdWJsZUNvbmRpdGlvbmFs
bHk2NChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJ
RCByaWdodCwgRlBSZWdpc3RlcklEIHRoZW5DYXNlLCBGUFJlZ2lzdGVySUQgZWxzZUNhc2UsIEZQ
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wPDY0PihsZWZ0
LCByaWdodCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmZjc2VsPDY0PihkZXN0LCB0aGVuQ2FzZSwg
ZWxzZUNhc2UsIEFSTTY0Q29uZGl0aW9uKGNvbmQpKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmVE
b3VibGVDb25kaXRpb25hbGx5NjQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklE
IGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCwgRlBSZWdpc3RlcklEIHRoZW5DYXNlLCBGUFJlZ2lz
dGVySUQgZWxzZUNhc2UsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKGlz
VUludDEyKHJpZ2h0Lm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wPDY0Pihs
ZWZ0LCBVSW50MTIocmlnaHQubV92YWx1ZSkpOworICAgICAgICBlbHNlIGlmIChpc1VJbnQxMigt
cmlnaHQubV92YWx1ZSkpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbW48NjQ+KGxlZnQsIFVJ
bnQxMigtcmlnaHQubV92YWx1ZSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmVU
b0NhY2hlZFJlZyhyaWdodCwgZGF0YU1lbW9yeVRlbXBSZWdpc3RlcigpKTsKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmNtcDw2ND4obGVmdCwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIH0K
KyAgICAgICAgbV9hc3NlbWJsZXIuZmNzZWw8NjQ+KGRlc3QsIHRoZW5DYXNlLCBlbHNlQ2FzZSwg
QVJNNjRDb25kaXRpb24oY29uZCkpOworICAgIH0KKworICAgIHZvaWQgbW92ZURvdWJsZUNvbmRp
dGlvbmFsbHlUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVn
aXN0ZXJJRCByaWdodCwgRlBSZWdpc3RlcklEIHRoZW5DYXNlLCBGUFJlZ2lzdGVySUQgZWxzZUNh
c2UsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIudHN0PDMy
PihsZWZ0LCByaWdodCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmZjc2VsPDY0PihkZXN0LCB0aGVu
Q2FzZSwgZWxzZUNhc2UsIEFSTTY0Q29uZGl0aW9uKGNvbmQpKTsKKyAgICB9CisKKyAgICB2b2lk
IG1vdmVEb3VibGVDb25kaXRpb25hbGx5VGVzdDY0KFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdp
c3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIEZQUmVnaXN0ZXJJRCB0aGVuQ2FzZSwgRlBS
ZWdpc3RlcklEIGVsc2VDYXNlLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLnRzdDw2ND4obGVmdCwgcmlnaHQpOworICAgICAgICBtX2Fzc2VtYmxlci5mY3Nl
bDw2ND4oZGVzdCwgdGhlbkNhc2UsIGVsc2VDYXNlLCBBUk02NENvbmRpdGlvbihjb25kKSk7Cisg
ICAgfQorCiAgICAgLy8gRm9yd2FyZHMgLyBleHRlcm5hbCBjb250cm9sIGZsb3cgb3BlcmF0aW9u
czoKICAgICAvLwogICAgIC8vIFRoaXMgc2V0IG9mIGp1bXAgYW5kIGNvbmRpdGlvbmFsIGJyYW5j
aCBvcGVyYXRpb25zIHJldHVybiBhIEp1bXAKQEAgLTIwNTgsNiArMjE1NCwxOSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBKdW1wKG1ha2VCcmFuY2goY29uZCkpOwogICAgIH0KIAorICAgIEp1
bXAgYnJhbmNoNjQoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRy
dXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGlmIChpc1VJbnQxMihyaWdodC5tX3Zh
bHVlKSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcDw2ND4obGVmdCwgVUludDEyKHJpZ2h0
Lm1fdmFsdWUpKTsKKyAgICAgICAgZWxzZSBpZiAoaXNVSW50MTIoLXJpZ2h0Lm1fdmFsdWUpKQor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21uPDY0PihsZWZ0LCBVSW50MTIoLXJpZ2h0Lm1fdmFs
dWUpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtb3ZlVG9DYWNoZWRSZWcocmlnaHQs
IGRhdGFNZW1vcnlUZW1wUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXA8
NjQ+KGxlZnQsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBK
dW1wKG1ha2VCcmFuY2goY29uZCkpOworICAgIH0KKwogICAgIEp1bXAgYnJhbmNoNjQoUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFRydXN0ZWRJbW02NCByaWdodCkK
ICAgICB7CiAgICAgICAgIGludHB0cl90IGltbWVkaWF0ZSA9IHJpZ2h0Lm1fdmFsdWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uLmgKaW5kZXggM2VmOTg4NTY0MTUyNjhmZDkyYTgwODM1ODBmODg2ZmQxOTljNWQ2
Yy4uZTgzNGVmNzNhOTM3M2Y1ZWFhODJiMGJhNTFkYTUyNjlmMzdlMWRkYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaApAQCAtMTc2Myw2ICsxNzYzLDI0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNtb3Yo
eDg2Q29uZGl0aW9uKGludmVydChjb25kKSksIGVsc2VDYXNlLCBkZXN0KTsKICAgICB9CiAKKyAg
ICB2b2lkIG1vdmVDb25kaXRpb25hbGx5MzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdp
c3RlcklEIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCwgUmVnaXN0ZXJJRCB0aGVuQ2FzZSwgUmVn
aXN0ZXJJRCBlbHNlQ2FzZSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKCgo
Y29uZCA9PSBFcXVhbCkgfHwgKGNvbmQgPT0gTm90RXF1YWwpKSAmJiAhcmlnaHQubV92YWx1ZSkK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX3JyKGxlZnQsIGxlZnQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2lyKHJpZ2h0Lm1fdmFsdWUsIGxlZnQp
OworCisgICAgICAgIGlmICh0aGVuQ2FzZSAhPSBkZXN0ICYmIGVsc2VDYXNlICE9IGRlc3QpIHsK
KyAgICAgICAgICAgIG1vdmUoZWxzZUNhc2UsIGRlc3QpOworICAgICAgICAgICAgZWxzZUNhc2Ug
PSBkZXN0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVsc2VDYXNlID09IGRlc3QpCisgICAg
ICAgICAgICBjbW92KHg4NkNvbmRpdGlvbihjb25kKSwgdGhlbkNhc2UsIGRlc3QpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBjbW92KHg4NkNvbmRpdGlvbihpbnZlcnQoY29uZCkpLCBlbHNl
Q2FzZSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCBtb3ZlQ29uZGl0aW9uYWxseVRlc3QzMihS
ZXN1bHRDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCB0ZXN0UmVnLCBSZWdpc3RlcklEIG1hc2ss
IFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2Vt
Ymxlci50ZXN0bF9ycih0ZXN0UmVnLCBtYXNrKTsKQEAgLTE4MTEsNiArMTgyOSw5MCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBjbW92KHg4NkNvbmRpdGlvbihpbnZlcnQoY29uZCkpLCBlbHNlQ2Fz
ZSwgZGVzdCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGVmdFR5cGUsIHR5cGVu
YW1lIFJpZ2h0VHlwZT4KKyAgICB2b2lkIG1vdmVEb3VibGVDb25kaXRpb25hbGx5MzIoUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kLCBMZWZ0VHlwZSBsZWZ0LCBSaWdodFR5cGUgcmlnaHQsIEZQUmVn
aXN0ZXJJRCB0aGVuQ2FzZSwgRlBSZWdpc3RlcklEIGVsc2VDYXNlLCBGUFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfc2FtZTxMZWZ0VHlwZSwg
RlBSZWdpc3RlcklEPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxSaWdodFR5cGUsIEZQUmVnaXN0
ZXJJRD46OnZhbHVlLCAiT25lIG9mIHRoZSB0ZXN0ZWQgYXJndW1lbnQgY291bGQgYmUgYWxpYXNl
ZCBvbiBkZXN0LiBVc2UgbW92ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3VibGUoKS4iKTsKKworICAg
ICAgICBpZiAodGhlbkNhc2UgIT0gZGVzdCAmJiBlbHNlQ2FzZSAhPSBkZXN0KSB7CisgICAgICAg
ICAgICBtb3ZlRG91YmxlKGVsc2VDYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIGVsc2VDYXNlID0g
ZGVzdDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbHNlQ2FzZSA9PSBkZXN0KSB7CisgICAg
ICAgICAgICBKdW1wIGZhbHNlQ2FzZSA9IGJyYW5jaDMyKGludmVydChjb25kKSwgbGVmdCwgcmln
aHQpOworICAgICAgICAgICAgbW92ZURvdWJsZSh0aGVuQ2FzZSwgZGVzdCk7CisgICAgICAgICAg
ICBmYWxzZUNhc2UubGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEp1
bXAgdHJ1ZUNhc2UgPSBicmFuY2gzMihjb25kLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBt
b3ZlRG91YmxlKGVsc2VDYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHRydWVDYXNlLmxpbmsodGhp
cyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZSwg
dHlwZW5hbWUgTWFza1R5cGU+CisgICAgdm9pZCBtb3ZlRG91YmxlQ29uZGl0aW9uYWxseVRlc3Qz
MihSZXN1bHRDb25kaXRpb24gY29uZCwgVGVzdFR5cGUgdGVzdCwgTWFza1R5cGUgbWFzaywgRlBS
ZWdpc3RlcklEIHRoZW5DYXNlLCBGUFJlZ2lzdGVySUQgZWxzZUNhc2UsIEZQUmVnaXN0ZXJJRCBk
ZXN0KQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghc3RkOjppc19zYW1lPFRlc3RUeXBl
LCBGUFJlZ2lzdGVySUQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19zYW1lPE1hc2tUeXBlLCBGUFJlZ2lz
dGVySUQ+Ojp2YWx1ZSwgIk9uZSBvZiB0aGUgdGVzdGVkIGFyZ3VtZW50IGNvdWxkIGJlIGFsaWFz
ZWQgb24gZGVzdC4gVXNlIG1vdmVEb3VibGVDb25kaXRpb25hbGx5RG91YmxlKCkuIik7CisKKyAg
ICAgICAgaWYgKGVsc2VDYXNlID09IGRlc3QgJiYgaXNJbnZlcnRpYmxlKGNvbmQpKSB7CisgICAg
ICAgICAgICBKdW1wIGZhbHNlQ2FzZSA9IGJyYW5jaFRlc3QzMihpbnZlcnQoY29uZCksIHRlc3Qs
IG1hc2spOworICAgICAgICAgICAgbW92ZURvdWJsZSh0aGVuQ2FzZSwgZGVzdCk7CisgICAgICAg
ICAgICBmYWxzZUNhc2UubGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGVuQ2FzZSA9
PSBkZXN0KSB7CisgICAgICAgICAgICBKdW1wIHRydWVDYXNlID0gYnJhbmNoVGVzdDMyKGNvbmQs
IHRlc3QsIG1hc2spOworICAgICAgICAgICAgbW92ZURvdWJsZShlbHNlQ2FzZSwgZGVzdCk7Cisg
ICAgICAgICAgICB0cnVlQ2FzZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgSnVt
cCB0cnVlQ2FzZSA9IGJyYW5jaFRlc3QzMihjb25kLCB0ZXN0LCBtYXNrKTsKKyAgICAgICAgbW92
ZURvdWJsZShlbHNlQ2FzZSwgZGVzdCk7CisgICAgICAgIEp1bXAgZmFsc2VDYXNlID0ganVtcCgp
OworICAgICAgICB0cnVlQ2FzZS5saW5rKHRoaXMpOworICAgICAgICBtb3ZlRG91YmxlKHRoZW5D
YXNlLCBkZXN0KTsKKyAgICAgICAgZmFsc2VDYXNlLmxpbmsodGhpcyk7CisgICAgfQorCisgICAg
dm9pZCBtb3ZlRG91YmxlQ29uZGl0aW9uYWxseURvdWJsZShEb3VibGVDb25kaXRpb24gY29uZCwg
RlBSZWdpc3RlcklEIGxlZnQsIEZQUmVnaXN0ZXJJRCByaWdodCwgRlBSZWdpc3RlcklEIHRoZW5D
YXNlLCBGUFJlZ2lzdGVySUQgZWxzZUNhc2UsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgaWYgKGVsc2VDYXNlID09IGRlc3QpIHsKKyAgICAgICAgICAgIEp1bXAgZmFsc2VDYXNl
ID0gYnJhbmNoRG91YmxlKGludmVydChjb25kKSwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAg
bW92ZURvdWJsZSh0aGVuQ2FzZSwgZGVzdCk7CisgICAgICAgICAgICBmYWxzZUNhc2UubGluayh0
aGlzKTsKKyAgICAgICAgfSBlbHNlIGlmICh0aGVuQ2FzZSA9PSBkZXN0KSB7CisgICAgICAgICAg
ICBKdW1wIHRydWVDYXNlID0gYnJhbmNoRG91YmxlKGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICAg
ICAgICAgIG1vdmVEb3VibGUoZWxzZUNhc2UsIGRlc3QpOworICAgICAgICAgICAgdHJ1ZUNhc2Uu
bGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEp1bXAgdHJ1ZUNhc2Ug
PSBicmFuY2hEb3VibGUoY29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICAgICAgbW92ZURvdWJs
ZShlbHNlQ2FzZSwgZGVzdCk7CisgICAgICAgICAgICBKdW1wIGZhbHNlQ2FzZSA9IGp1bXAoKTsK
KyAgICAgICAgICAgIHRydWVDYXNlLmxpbmsodGhpcyk7CisgICAgICAgICAgICBtb3ZlRG91Ymxl
KHRoZW5DYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIGZhbHNlQ2FzZS5saW5rKHRoaXMpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCBtb3ZlRG91YmxlQ29uZGl0aW9uYWxseUZsb2F0KERv
dWJsZUNvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVmdCwgRlBSZWdpc3RlcklEIHJpZ2h0
LCBGUFJlZ2lzdGVySUQgdGhlbkNhc2UsIEZQUmVnaXN0ZXJJRCBlbHNlQ2FzZSwgRlBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoZWxzZUNhc2UgPT0gZGVzdCkgeworICAgICAg
ICAgICAgSnVtcCBmYWxzZUNhc2UgPSBicmFuY2hGbG9hdChpbnZlcnQoY29uZCksIGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIG1vdmVEb3VibGUodGhlbkNhc2UsIGRlc3QpOworICAgICAgICAg
ICAgZmFsc2VDYXNlLmxpbmsodGhpcyk7CisgICAgICAgIH0gZWxzZSBpZiAodGhlbkNhc2UgPT0g
ZGVzdCkgeworICAgICAgICAgICAgSnVtcCB0cnVlQ2FzZSA9IGJyYW5jaEZsb2F0KGNvbmQsIGxl
ZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1vdmVEb3VibGUoZWxzZUNhc2UsIGRlc3QpOworICAg
ICAgICAgICAgdHJ1ZUNhc2UubGluayh0aGlzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIEp1bXAgdHJ1ZUNhc2UgPSBicmFuY2hGbG9hdChjb25kLCBsZWZ0LCByaWdodCk7CisgICAg
ICAgICAgICBtb3ZlRG91YmxlKGVsc2VDYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIEp1bXAgZmFs
c2VDYXNlID0ganVtcCgpOworICAgICAgICAgICAgdHJ1ZUNhc2UubGluayh0aGlzKTsKKyAgICAg
ICAgICAgIG1vdmVEb3VibGUodGhlbkNhc2UsIGRlc3QpOworICAgICAgICAgICAgZmFsc2VDYXNl
LmxpbmsodGhpcyk7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBGb3J3YXJkcyAvIGV4dGVy
bmFsIGNvbnRyb2wgZmxvdyBvcGVyYXRpb25zOgogICAgIC8vCiAgICAgLy8gVGhpcyBzZXQgb2Yg
anVtcCBhbmQgY29uZGl0aW9uYWwgYnJhbmNoIG9wZXJhdGlvbnMgcmV0dXJuIGEgSnVtcApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oCmluZGV4IDA2NzI5M2U1ZWVlNDM2Y2I1YzkyZmMwMWZiYzc3MmQ3YTY4OWRhNzIuLmY3
ZWIyYzlmNWVjZWJlZjA4M2Q2NjdmZTc1MDQxM2VmYjQ4M2UxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAg
LTEwNTIsNiArMTA1Miw1MCBAQCBwdWJsaWM6CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNt
b3YoeDg2Q29uZGl0aW9uKGludmVydChjb25kKSksIGVsc2VDYXNlLCBkZXN0KTsKICAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMZWZ0VHlwZSwgdHlwZW5hbWUgUmlnaHRUeXBlPgorICAg
IHZvaWQgbW92ZURvdWJsZUNvbmRpdGlvbmFsbHk2NChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQs
IExlZnRUeXBlIGxlZnQsIFJpZ2h0VHlwZSByaWdodCwgRlBSZWdpc3RlcklEIHRoZW5DYXNlLCBG
UFJlZ2lzdGVySUQgZWxzZUNhc2UsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
c3RhdGljX2Fzc2VydCghc3RkOjppc19zYW1lPExlZnRUeXBlLCBGUFJlZ2lzdGVySUQ+Ojp2YWx1
ZSAmJiAhc3RkOjppc19zYW1lPFJpZ2h0VHlwZSwgRlBSZWdpc3RlcklEPjo6dmFsdWUsICJPbmUg
b2YgdGhlIHRlc3RlZCBhcmd1bWVudCBjb3VsZCBiZSBhbGlhc2VkIG9uIGRlc3QuIFVzZSBtb3Zl
RG91YmxlQ29uZGl0aW9uYWxseURvdWJsZSgpLiIpOworCisgICAgICAgIGlmICh0aGVuQ2FzZSAh
PSBkZXN0ICYmIGVsc2VDYXNlICE9IGRlc3QpIHsKKyAgICAgICAgICAgIG1vdmVEb3VibGUoZWxz
ZUNhc2UsIGRlc3QpOworICAgICAgICAgICAgZWxzZUNhc2UgPSBkZXN0OworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGVsc2VDYXNlID09IGRlc3QpIHsKKyAgICAgICAgICAgIEp1bXAgZmFsc2VD
YXNlID0gYnJhbmNoNjQoaW52ZXJ0KGNvbmQpLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBt
b3ZlRG91YmxlKHRoZW5DYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIGZhbHNlQ2FzZS5saW5rKHRo
aXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSnVtcCB0cnVlQ2FzZSA9IGJyYW5j
aDY0KGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIG1vdmVEb3VibGUoZWxzZUNhc2Us
IGRlc3QpOworICAgICAgICAgICAgdHJ1ZUNhc2UubGluayh0aGlzKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlLCB0eXBlbmFtZSBNYXNrVHlwZT4K
KyAgICB2b2lkIG1vdmVEb3VibGVDb25kaXRpb25hbGx5VGVzdDY0KFJlc3VsdENvbmRpdGlvbiBj
b25kLCBUZXN0VHlwZSB0ZXN0LCBNYXNrVHlwZSBtYXNrLCBGUFJlZ2lzdGVySUQgdGhlbkNhc2Us
IEZQUmVnaXN0ZXJJRCBlbHNlQ2FzZSwgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX3NhbWU8VGVzdFR5cGUsIEZQUmVnaXN0ZXJJRD46OnZh
bHVlICYmICFzdGQ6OmlzX3NhbWU8TWFza1R5cGUsIEZQUmVnaXN0ZXJJRD46OnZhbHVlLCAiT25l
IG9mIHRoZSB0ZXN0ZWQgYXJndW1lbnQgY291bGQgYmUgYWxpYXNlZCBvbiBkZXN0LiBVc2UgbW92
ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3VibGUoKS4iKTsKKworICAgICAgICBpZiAoZWxzZUNhc2Ug
PT0gZGVzdCAmJiBpc0ludmVydGlibGUoY29uZCkpIHsKKyAgICAgICAgICAgIEp1bXAgZmFsc2VD
YXNlID0gYnJhbmNoVGVzdDY0KGludmVydChjb25kKSwgdGVzdCwgbWFzayk7CisgICAgICAgICAg
ICBtb3ZlRG91YmxlKHRoZW5DYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIGZhbHNlQ2FzZS5saW5r
KHRoaXMpOworICAgICAgICB9IGVsc2UgaWYgKHRoZW5DYXNlID09IGRlc3QpIHsKKyAgICAgICAg
ICAgIEp1bXAgdHJ1ZUNhc2UgPSBicmFuY2hUZXN0NjQoY29uZCwgdGVzdCwgbWFzayk7CisgICAg
ICAgICAgICBtb3ZlRG91YmxlKGVsc2VDYXNlLCBkZXN0KTsKKyAgICAgICAgICAgIHRydWVDYXNl
LmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBKdW1wIHRydWVDYXNlID0gYnJhbmNo
VGVzdDY0KGNvbmQsIHRlc3QsIG1hc2spOworICAgICAgICBtb3ZlRG91YmxlKGVsc2VDYXNlLCBk
ZXN0KTsKKyAgICAgICAgSnVtcCBmYWxzZUNhc2UgPSBqdW1wKCk7CisgICAgICAgIHRydWVDYXNl
LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmVEb3VibGUodGhlbkNhc2UsIGRlc3QpOworICAgICAg
ICBmYWxzZUNhc2UubGluayh0aGlzKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBhYm9ydFdpdGhS
ZWFzb24oQWJvcnRSZWFzb24gcmVhc29uKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zdElubGluZXMuaAppbmRleCBhYTk0NTg4NzQ0ZTU1NWFlMTUxMTQwNzJh
OTVmZGFmZjk1YzBiNTJkLi45OTBkOTMwZDAzODdhNDFkYTMwYTVlNDkxYjc4ZmYyYmY5MzljMGQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCkBA
IC0yMDIsNiArMjAyLDEyIEBAIGlubGluZSBPcHRpb25hbDx1bnNpZ25lZD4gSW5zdDo6c2hvdWxk
VHJ5QWxpYXNpbmdEZWYoKQogICAgIGNhc2UgTW92ZUNvbmRpdGlvbmFsbHlUZXN0NjQ6CiAgICAg
Y2FzZSBNb3ZlQ29uZGl0aW9uYWxseURvdWJsZToKICAgICBjYXNlIE1vdmVDb25kaXRpb25hbGx5
RmxvYXQ6CisgICAgY2FzZSBNb3ZlRG91YmxlQ29uZGl0aW9uYWxseTMyOgorICAgIGNhc2UgTW92
ZURvdWJsZUNvbmRpdGlvbmFsbHk2NDoKKyAgICBjYXNlIE1vdmVEb3VibGVDb25kaXRpb25hbGx5
VGVzdDMyOgorICAgIGNhc2UgTW92ZURvdWJsZUNvbmRpdGlvbmFsbHlUZXN0NjQ6CisgICAgY2Fz
ZSBNb3ZlRG91YmxlQ29uZGl0aW9uYWxseURvdWJsZToKKyAgICBjYXNlIE1vdmVEb3VibGVDb25k
aXRpb25hbGx5RmxvYXQ6CiAgICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSA2KQogICAgICAgICAg
ICAgcmV0dXJuIDU7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggNWI1MDZkOGQxZDA1Mzc1ODFkOWNjZTk1MWMz
ODU1OTdiYzE1ZTAxOS4uMDQzYzA1NjMwMGVhNjM1NDRmODY0OTBhNmMzMTI2ZTk4YTBmZTk2ZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBA
IC02MjQsNyArNjI0LDcgQEAgQnJhbmNoMzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiAvYnJhbmNo
CiAKIDY0OiBCcmFuY2g2NCBVOkc6MzIsIFU6Rzo2NCwgVTpHOjY0IC9icmFuY2gKICAgICBSZWxD
b25kLCBUbXAsIFRtcAotICAgIHg4NjogUmVsQ29uZCwgVG1wLCBJbW0KKyAgICBSZWxDb25kLCBU
bXAsIEltbQogICAgIHg4NjogUmVsQ29uZCwgVG1wLCBBZGRyCiAgICAgeDg2OiBSZWxDb25kLCBB
ZGRyLCBUbXAKICAgICB4ODY6IFJlbENvbmQsIEFkZHIsIEltbQpAQCAtNzE1LDYgKzcxNSw3IEBA
IE1vdmVDb25kaXRpb25hbGx5MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgVTpHOlB0ciwgVUQ6
RzpQdHIKIAogTW92ZUNvbmRpdGlvbmFsbHkzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBVOkc6
UHRyLCBVOkc6UHRyLCBEOkc6UHRyCiAgICAgUmVsQ29uZCwgVG1wLCBUbXAsIFRtcCwgVG1wLCBU
bXAKKyAgICBSZWxDb25kLCBUbXAsIEltbSwgVG1wLCBUbXAsIFRtcAogCiA2NDogTW92ZUNvbmRp
dGlvbmFsbHk2NCBVOkc6MzIsIFU6Rzo2NCwgVTpHOjY0LCBVOkc6UHRyLCBVRDpHOlB0cgogICAg
IFJlbENvbmQsIFRtcCwgVG1wLCBUbXAsIFRtcApAQCAtNzUwLDI1ICs3NTEsNDIgQEAgTW92ZUNv
bmRpdGlvbmFsbHlGbG9hdCBVOkc6MzIsIFU6RjozMiwgVTpGOjMyLCBVOkc6UHRyLCBVOkc6UHRy
LCBEOkc6UHRyCiBNb3ZlQ29uZGl0aW9uYWxseUZsb2F0IFU6RzozMiwgVTpGOjMyLCBVOkY6MzIs
IFU6RzpQdHIsIFVEOkc6UHRyCiAgICAgRG91YmxlQ29uZCwgVG1wLCBUbXAsIFRtcCwgVG1wCiAK
LU1vdmVEb3VibGVDb25kaXRpb25hbGx5MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgVTpGOjY0
LCBVRDpGOjY0Ci0gICAgUmVsQ29uZCwgVG1wLCBUbXAsIFRtcCwgVG1wCitNb3ZlRG91YmxlQ29u
ZGl0aW9uYWxseTMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFU6Rjo2NCwgVTpGOjY0LCBEOkY6
NjQKKyAgICBSZWxDb25kLCBUbXAsIFRtcCwgVG1wLCBUbXAsIFRtcAorICAgIFJlbENvbmQsIFRt
cCwgSW1tLCBUbXAsIFRtcCwgVG1wCisgICAgeDg2OiBSZWxDb25kLCBBZGRyLCBJbW0sIFRtcCwg
VG1wLCBUbXAKKyAgICB4ODY6IFJlbENvbmQsIFRtcCwgQWRkciwgVG1wLCBUbXAsIFRtcAorICAg
IHg4NjogUmVsQ29uZCwgQWRkciwgVG1wLCBUbXAsIFRtcCwgVG1wCisgICAgeDg2OiBSZWxDb25k
LCBJbmRleCwgSW1tLCBUbXAsIFRtcCwgVG1wCiAKLTY0OiBNb3ZlRG91YmxlQ29uZGl0aW9uYWxs
eTY0IFU6RzozMiwgVTpHOjY0LCBVOkc6NjQsIFU6Rjo2NCwgVUQ6Rjo2NAotICAgIFJlbENvbmQs
IFRtcCwgVG1wLCBUbXAsIFRtcAorNjQ6IE1vdmVEb3VibGVDb25kaXRpb25hbGx5NjQgVTpHOjMy
LCBVOkc6NjQsIFU6Rzo2NCwgVTpGOjY0LCBVOkY6NjQsIEQ6Rjo2NAorICAgIFJlbENvbmQsIFRt
cCwgVG1wLCBUbXAsIFRtcCwgVG1wCisgICAgUmVsQ29uZCwgVG1wLCBJbW0sIFRtcCwgVG1wLCBU
bXAKKyAgICB4ODZfNjQ6IFJlbENvbmQsIFRtcCwgQWRkciwgVG1wLCBUbXAsIFRtcAorICAgIHg4
Nl82NDogUmVsQ29uZCwgQWRkciwgVG1wLCBUbXAsIFRtcCwgVG1wCisgICAgeDg2XzY0OiBSZWxD
b25kLCBBZGRyLCBJbW0sIFRtcCwgVG1wLCBUbXAKKyAgICB4ODZfNjQ6IFJlbENvbmQsIEluZGV4
LCBUbXAsIFRtcCwgVG1wLCBUbXAKIAotTW92ZURvdWJsZUNvbmRpdGlvbmFsbHlUZXN0MzIgVTpH
OjMyLCBVOkc6MzIsIFU6RzozMiwgVTpGOjY0LCBVRDpGOjY0Ci0gICAgUmVzQ29uZCwgVG1wLCBU
bXAsIFRtcCwgVG1wCi0gICAgeDg2OiBSZXNDb25kLCBUbXAsIEltbSwgVG1wLCBUbXAKK01vdmVE
b3VibGVDb25kaXRpb25hbGx5VGVzdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFU6Rjo2NCwg
VTpGOjY0LCBEOkY6NjQKKyAgICBSZXNDb25kLCBUbXAsIFRtcCwgVG1wLCBUbXAsIFRtcAorICAg
IHg4NjogUmVzQ29uZCwgVG1wLCBJbW0sIFRtcCwgVG1wLCBUbXAKKyAgICB4ODY6IFJlc0NvbmQs
IEFkZHIsIEltbSwgVG1wLCBUbXAsIFRtcAorICAgIHg4NjogUmVzQ29uZCwgSW5kZXgsIEltbSwg
VG1wLCBUbXAsIFRtcAogCi02NDogTW92ZURvdWJsZUNvbmRpdGlvbmFsbHlUZXN0NjQgVTpHOjMy
LCBVOkc6NjQsIFU6Rzo2NCwgVTpGOjY0LCBVRDpGOjY0Ci0gICAgUmVzQ29uZCwgVG1wLCBUbXAs
IFRtcCwgVG1wCi0gICAgUmVzQ29uZCwgVG1wLCBJbW0sIFRtcCwgVG1wCisjIFdhcm5pbmc6IGZv
cm1zIHRoYXQgdGFrZSBhbiBpbW1lZGlhdGUgd2lsbCBzaWduLWV4dGVuZCB0aGVpciBpbW1lZGlh
dGUuIFlvdSBwcm9iYWJseSB3YW50CisjIE1vdmVEb3VibGVDb25kaXRpb25hbGx5VGVzdDMyIGlu
IG1vc3QgY2FzZXMgd2hlcmUgeW91IHVzZSBhbiBpbW1lZGlhdGUuCis2NDogTW92ZURvdWJsZUNv
bmRpdGlvbmFsbHlUZXN0NjQgVTpHOjMyLCBVOkc6NjQsIFU6Rzo2NCwgVTpGOjY0LCBVOkY6NjQs
IEQ6Rjo2NAorICAgIFJlc0NvbmQsIFRtcCwgVG1wLCBUbXAsIFRtcCwgVG1wCisgICAgeDg2XzY0
OiBSZXNDb25kLCBUbXAsIEltbSwgVG1wLCBUbXAsIFRtcAorICAgIHg4Nl82NDogUmVzQ29uZCwg
QWRkciwgSW1tLCBUbXAsIFRtcCwgVG1wCisgICAgeDg2XzY0OiBSZXNDb25kLCBBZGRyLCBUbXAs
IFRtcCwgVG1wLCBUbXAKKyAgICB4ODZfNjQ6IFJlc0NvbmQsIEluZGV4LCBJbW0sIFRtcCwgVG1w
LCBUbXAKIAotTW92ZURvdWJsZUNvbmRpdGlvbmFsbHlEb3VibGUgVTpHOjMyLCBVOkY6NjQsIFU6
Rjo2NCwgVTpGOjY0LCBVRDpGOjY0Ci0gICAgRG91YmxlQ29uZCwgVG1wLCBUbXAsIFRtcCwgVG1w
CitNb3ZlRG91YmxlQ29uZGl0aW9uYWxseURvdWJsZSBVOkc6MzIsIFU6Rjo2NCwgVTpGOjY0LCBV
OkY6NjQsIFU6Rjo2NCwgRDpGOjY0CisgICAgRG91YmxlQ29uZCwgVG1wLCBUbXAsIFRtcCwgVG1w
LCBUbXAKIAotTW92ZURvdWJsZUNvbmRpdGlvbmFsbHlGbG9hdCBVOkc6MzIsIFU6RjozMiwgVTpG
OjMyLCBVOkY6NjQsIFVEOkY6NjQKLSAgICBEb3VibGVDb25kLCBUbXAsIFRtcCwgVG1wLCBUbXAK
K01vdmVEb3VibGVDb25kaXRpb25hbGx5RmxvYXQgVTpHOjMyLCBVOkY6MzIsIFU6RjozMiwgVTpG
OjY0LCBVOkY6NjQsIEQ6Rjo2NAorICAgIERvdWJsZUNvbmQsIFRtcCwgVG1wLCBUbXAsIFRtcCwg
VG1wCiAKIEp1bXAgL2JyYW5jaAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCmluZGV4
IGE5YmUwNjM3MzA4N2JkYWQzMTViOGEzNDA5YmVlNmY5MDI3NDlkZDEuLjEwNTQ2N2JlZmIyZjdj
MTllNWZiODRjNzMwNGRiYzI5NWEwMmJkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwCkBAIC0xMDQsNiArMTA0LDc4IEBAIFQgY29tcGlsZUFuZFJ1bihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKICAgICByZXR1cm4gaW52b2tlPFQ+KCpjb21w
aWxlKHByb2NlZHVyZSksIGFyZ3VtZW50cy4uLik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFR5
cGU+CitzdHJ1Y3QgT3BlcmFuZCB7CisgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICBUeXBlIHZh
bHVlOworfTsKKwordHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+IEludDY0T3BlcmFuZDsKK3R5cGVk
ZWYgT3BlcmFuZDxpbnQzMl90PiBJbnQzMk9wZXJhbmQ7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZs
b2F0VHlwZT4KK3ZvaWQgcG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdWYWx1ZXMoVmVjdG9yPE9wZXJh
bmQ8RmxvYXRUeXBlPj4mIG9wZXJhbmRzKQoreworICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIwLiIs
IHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC4pIH0pOworICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIt
MC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0wLikgfSk7CisgICAgb3BlcmFuZHMuYXBwZW5k
KHsgIjAuNCIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC41KSB9KTsKKyAgICBvcGVyYW5kcy5h
cHBlbmQoeyAiLTAuNCIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oLTAuNSkgfSk7CisgICAgb3Bl
cmFuZHMuYXBwZW5kKHsgIjAuNSIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC41KSB9KTsKKyAg
ICBvcGVyYW5kcy5hcHBlbmQoeyAiLTAuNSIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oLTAuNSkg
fSk7CisgICAgb3BlcmFuZHMuYXBwZW5kKHsgIjAuNiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4o
MC41KSB9KTsKKyAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTAuNiIsIHN0YXRpY19jYXN0PEZsb2F0
VHlwZT4oLTAuNSkgfSk7CisgICAgb3BlcmFuZHMuYXBwZW5kKHsgIjEuIiwgc3RhdGljX2Nhc3Q8
RmxvYXRUeXBlPigxLikgfSk7CisgICAgb3BlcmFuZHMuYXBwZW5kKHsgIi0xLiIsIHN0YXRpY19j
YXN0PEZsb2F0VHlwZT4oLTEuKSB9KTsKKyAgICBvcGVyYW5kcy5hcHBlbmQoeyAiMi4iLCBzdGF0
aWNfY2FzdDxGbG9hdFR5cGU+KDIuKSB9KTsKKyAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTIuIiwg
c3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigtMi4pIH0pOworICAgIG9wZXJhbmRzLmFwcGVuZCh7ICJN
X1BJIiwgc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPihNX1BJKSB9KTsKKyAgICBvcGVyYW5kcy5hcHBl
bmQoeyAiLU1fUEkiLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC1NX1BJKSB9KTsKKyAgICBvcGVy
YW5kcy5hcHBlbmQoeyAibWluIiwgc3RkOjpudW1lcmljX2xpbWl0czxGbG9hdFR5cGU+OjptaW4o
KSB9KTsKKyAgICBvcGVyYW5kcy5hcHBlbmQoeyAibWF4Iiwgc3RkOjpudW1lcmljX2xpbWl0czxG
bG9hdFR5cGU+OjptYXgoKSB9KTsKKyAgICBvcGVyYW5kcy5hcHBlbmQoeyAibG93ZXN0Iiwgc3Rk
OjpudW1lcmljX2xpbWl0czxGbG9hdFR5cGU+Ojpsb3dlc3QoKSB9KTsKKyAgICBvcGVyYW5kcy5h
cHBlbmQoeyAiZXBzaWxvbiIsIHN0ZDo6bnVtZXJpY19saW1pdHM8RmxvYXRUeXBlPjo6ZXBzaWxv
bigpIH0pOworICAgIG9wZXJhbmRzLmFwcGVuZCh7ICJpbmZpbml0aSIsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8RmxvYXRUeXBlPjo6aW5maW5pdHkoKSB9KTsKKyAgICBvcGVyYW5kcy5hcHBlbmQoeyAi
LWluZmluaXRpIiwgLSBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46OmluZmluaXR5KCkg
fSk7CisgICAgb3BlcmFuZHMuYXBwZW5kKHsgIlBOYU4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+
KFBOYU4pIH0pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGbG9hdFR5cGU+CitWZWN0b3I8T3Bl
cmFuZDxGbG9hdFR5cGU+PiBmbG9hdGluZ1BvaW50T3BlcmFuZHMoKQoreworICAgIFZlY3RvcjxP
cGVyYW5kPEZsb2F0VHlwZT4+IG9wZXJhbmRzOworICAgIHBvcHVsYXRlV2l0aEludGVyZXN0aW5n
VmFsdWVzKG9wZXJhbmRzKTsKKyAgICByZXR1cm4gb3BlcmFuZHM7Cit9OworCitzdGF0aWMgVmVj
dG9yPEludDY0T3BlcmFuZD4gaW50NjRPcGVyYW5kcygpCit7CisgICAgVmVjdG9yPEludDY0T3Bl
cmFuZD4gb3BlcmFuZHM7CisgICAgZm9yIChjb25zdCBhdXRvJiBkb3VibGVPcGVyYW5kIDogZmxv
YXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkKKyAgICAgICAgb3BlcmFuZHMuYXBwZW5kKHsg
ZG91YmxlT3BlcmFuZC5uYW1lLCBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oZG91YmxlT3BlcmFuZC52
YWx1ZSkgfSk7CisgICAgb3BlcmFuZHMuYXBwZW5kKHsgIjEiLCAxIH0pOworICAgIG9wZXJhbmRz
LmFwcGVuZCh7ICItMSIsIC0xIH0pOworICAgIG9wZXJhbmRzLmFwcGVuZCh7ICJpbnQ2NC1tYXgi
LCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSB9KTsKKyAgICBvcGVyYW5kcy5h
cHBlbmQoeyAiaW50NjQtbWluIiwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkg
fSk7CisgICAgb3BlcmFuZHMuYXBwZW5kKHsgImludDMyLW1heCIsIHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50MzJfdD46Om1heCgpIH0pOworICAgIG9wZXJhbmRzLmFwcGVuZCh7ICJpbnQzMi1taW4i
LCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSB9KTsKKworICAgIHJldHVybiBv
cGVyYW5kczsKK30KKworc3RhdGljIFZlY3RvcjxJbnQzMk9wZXJhbmQ+IGludDMyT3BlcmFuZHMo
KQoreworICAgIFZlY3RvcjxJbnQzMk9wZXJhbmQ+IG9wZXJhbmRzKHsKKyAgICAgICAgeyAiMCIs
IDAgfSwKKyAgICAgICAgeyAiMSIsIDEgfSwKKyAgICAgICAgeyAiLTEiLCAtMSB9LAorICAgICAg
ICB7ICI0MiIsIDQyIH0sCisgICAgICAgIHsgIi00MiIsIC00MiB9LAorICAgICAgICB7ICJpbnQz
Mi1tYXgiLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSB9LAorICAgICAgICB7
ICJpbnQzMi1taW4iLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSB9CisgICAg
fSk7CisgICAgcmV0dXJuIG9wZXJhbmRzOworfQorCiB2b2lkIGFkZDMyKENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgc3JjMSwgR1BSUmVnIHNyYzIsIEdQUlJlZyBkZXN0KQogewogICAgIGlmIChz
cmMyID09IGRlc3QpCkBAIC05NjE2LDYgKzk2ODgsNyBAQCB2b2lkIHRlc3RTZWxlY3RDb21wYXJl
RmxvYXQoZmxvYXQgYSwgZmxvYXQgYikKICAgICB0ZXN0U2VsZWN0Q29tcGFyZUZsb2F0PEdyZWF0
ZXJUaGFuPihhLCBiLCBbXShmbG9hdCBhLCBmbG9hdCBiKSAtPiBib29sIHsgcmV0dXJuIGEgPiBi
OyB9KTsKICAgICB0ZXN0U2VsZWN0Q29tcGFyZUZsb2F0PExlc3NFcXVhbD4oYSwgYiwgW10oZmxv
YXQgYSwgZmxvYXQgYikgLT4gYm9vbCB7IHJldHVybiBhIDw9IGI7IH0pOwogICAgIHRlc3RTZWxl
Y3RDb21wYXJlRmxvYXQ8R3JlYXRlckVxdWFsPihhLCBiLCBbXShmbG9hdCBhLCBmbG9hdCBiKSAt
PiBib29sIHsgcmV0dXJuIGEgPj0gYjsgfSk7CisgICAgdGVzdFNlbGVjdENvbXBhcmVGbG9hdDxF
cXVhbE9yVW5vcmRlcmVkPihhLCBiLCBbXShmbG9hdCBhLCBmbG9hdCBiKSAtPiBib29sIHsgcmV0
dXJuIGEgIT0gYSB8fCBiICE9IGIgfHwgYSA9PSBiOyB9KTsKIH0KIAogdGVtcGxhdGU8QjM6Ok9w
Y29kZSBvcGNvZGU+CkBAIC05NjUzLDYgKzk3MjYsNyBAQCB2b2lkIHRlc3RTZWxlY3RDb21wYXJl
RmxvYXRUb0RvdWJsZShmbG9hdCBhLCBmbG9hdCBiKQogICAgIHRlc3RTZWxlY3RDb21wYXJlRmxv
YXRUb0RvdWJsZTxHcmVhdGVyVGhhbj4oYSwgYiwgW10oZmxvYXQgYSwgZmxvYXQgYikgLT4gYm9v
bCB7IHJldHVybiBhID4gYjsgfSk7CiAgICAgdGVzdFNlbGVjdENvbXBhcmVGbG9hdFRvRG91Ymxl
PExlc3NFcXVhbD4oYSwgYiwgW10oZmxvYXQgYSwgZmxvYXQgYikgLT4gYm9vbCB7IHJldHVybiBh
IDw9IGI7IH0pOwogICAgIHRlc3RTZWxlY3RDb21wYXJlRmxvYXRUb0RvdWJsZTxHcmVhdGVyRXF1
YWw+KGEsIGIsIFtdKGZsb2F0IGEsIGZsb2F0IGIpIC0+IGJvb2wgeyByZXR1cm4gYSA+PSBiOyB9
KTsKKyAgICB0ZXN0U2VsZWN0Q29tcGFyZUZsb2F0VG9Eb3VibGU8RXF1YWxPclVub3JkZXJlZD4o
YSwgYiwgW10oZmxvYXQgYSwgZmxvYXQgYikgLT4gYm9vbCB7IHJldHVybiBhICE9IGEgfHwgYiAh
PSBiIHx8IGEgPT0gYjsgfSk7CiB9CiAKIHZvaWQgdGVzdFNlbGVjdERvdWJsZSgpCkBAIC05Nzc1
LDYgKzk4NDksNDA2IEBAIHZvaWQgdGVzdFNlbGVjdEZsb2F0Q29tcGFyZUZsb2F0KGZsb2F0IGEs
IGZsb2F0IGIpCiAgICAgQ0hFQ0soaXNJZGVudGljYWwoY29tcGlsZUFuZFJ1bjxmbG9hdD4ocHJv
YywgYml0d2lzZV9jYXN0PGludDMyX3Q+KGEpLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oYiksIGJp
dHdpc2VfY2FzdDxpbnQzMl90PigxLjFmKSwgYml0d2lzZV9jYXN0PGludDMyX3Q+KC00Mi5mKSks
IGEgPCBiID8gMS4xZiA6IC00Mi5mKSk7CiB9CiAKKwordGVtcGxhdGU8QjM6Ok9wY29kZSBvcGNv
ZGU+Cit2b2lkIHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91YmxlKGJvb2wgKCpvcGVyYXRpb24p
KGRvdWJsZSwgZG91YmxlKSkKK3sKKyAgICB7IC8vIENvbXBhcmUgYXJndW1lbnRzIGFuZCBzZWxl
Y3RlZCBhcmd1bWVudHMgYXJlIGFsbCBkaWZmZXJlbnQuCisgICAgICAgIFByb2NlZHVyZSBwcm9j
OworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBW
YWx1ZSogYXJnMCA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgRlBSSW5mbzo6YXJndW1lbnRGUFIwKTsKKyAgICAgICAgVmFsdWUqIGFyZzEgPSByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFy
Z3VtZW50RlBSMSk7CisgICAgICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjIpOworICAg
ICAgICBWYWx1ZSogYXJnMyA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRGUFIzKTsKKworICAgICAgICByb290LT5hcHBl
bmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHBy
b2MsIFNlbGVjdCwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgb3Bjb2RlLCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgICAgICAgICAgYXJnMCwKKyAgICAgICAgICAgICAgICAgICAgYXJnMSksCisgICAgICAg
ICAgICAgICAgYXJnMiwKKyAgICAgICAgICAgICAgICBhcmczKSk7CisgICAgICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQ
b2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6
IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCkpIHsKKyAgICAgICAgICAgICAgICBkb3Vi
bGUgZXhwZWN0ZWQgPSBvcGVyYXRpb24obGVmdC52YWx1ZSwgcmlnaHQudmFsdWUpID8gNDIuNSA6
IC02Ni41OworICAgICAgICAgICAgICAgIENIRUNLKGlzSWRlbnRpY2FsKGludm9rZTxkb3VibGU+
KCpjb2RlLCBsZWZ0LnZhbHVlLCByaWdodC52YWx1ZSwgNDIuNSwgLTY2LjUpLCBleHBlY3RlZCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHsgLy8gQ29tcGFyZSBhcmd1
bWVudHMgYW5kIHNlbGVjdGVkIGFyZ3VtZW50cyBhcmUgYWxsIGRpZmZlcmVudC4gInRoZW5DYXNl
IiBpcyBsaXZlIGFmdGVyIG9wZXJhdGlvbi4KKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIFZhbHVlKiBh
cmcwID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBG
UFJJbmZvOjphcmd1bWVudEZQUjApOworICAgICAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRG
UFIxKTsKKyAgICAgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMik7CisgICAgICAgIFZh
bHVlKiBhcmczID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjMpOworCisgICAgICAgIFZhbHVlKiByZXN1bHQgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNlbGVjdCwgT3JpZ2luKCksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIG9wY29kZSwgT3JpZ2luKCksIGFyZzAsIGFy
ZzEpLAorICAgICAgICAgICAgYXJnMiwKKyAgICAgICAgICAgIGFyZzMpOworCisgICAgICAgIFBh
dGNocG9pbnRWYWx1ZSoga2VlcFZhbHVlc0xpdmUgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2lu
dFZhbHVlPihwcm9jLCBWb2lkLCBPcmlnaW4oKSk7CisgICAgICAgIGtlZXBWYWx1ZXNMaXZlLT5h
cHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcyLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7Cisg
ICAgICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7IH0pOworCisgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7Cisg
ICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICAgICAgZm9yIChhdXRvJiBs
ZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgeworICAgICAgICAgICAgZm9y
IChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCkpIHsKKyAgICAg
ICAgICAgICAgICBkb3VibGUgZXhwZWN0ZWQgPSBvcGVyYXRpb24obGVmdC52YWx1ZSwgcmlnaHQu
dmFsdWUpID8gNDIuNSA6IC02Ni41OworICAgICAgICAgICAgICAgIENIRUNLKGlzSWRlbnRpY2Fs
KGludm9rZTxkb3VibGU+KCpjb2RlLCBsZWZ0LnZhbHVlLCByaWdodC52YWx1ZSwgNDIuNSwgLTY2
LjUpLCBleHBlY3RlZCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHsg
Ly8gQ29tcGFyZSBhcmd1bWVudHMgYW5kIHNlbGVjdGVkIGFyZ3VtZW50cyBhcmUgYWxsIGRpZmZl
cmVudC4gImVsc2VDYXNlIiBpcyBsaXZlIGFmdGVyIG9wZXJhdGlvbi4KKyAgICAgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgICAgIFZhbHVlKiBhcmcwID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApOworICAgICAgICBWYWx1ZSogYXJn
MSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBS
SW5mbzo6YXJndW1lbnRGUFIxKTsKKyAgICAgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBS
Mik7CisgICAgICAgIFZhbHVlKiBhcmczID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjMpOworCisgICAgICAgIFZh
bHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNlbGVjdCwgT3JpZ2lu
KCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIG9wY29kZSwgT3Jp
Z2luKCksIGFyZzAsIGFyZzEpLAorICAgICAgICAgICAgYXJnMiwKKyAgICAgICAgICAgIGFyZzMp
OworCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSoga2VlcFZhbHVlc0xpdmUgPSByb290LT5hcHBl
bmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBWb2lkLCBPcmlnaW4oKSk7CisgICAgICAgIGtl
ZXBWYWx1ZXNMaXZlLT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmczLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKSk7CisgICAgICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRHZW5lcmF0b3IoWyZdIChD
Q2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7IH0pOworCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIHJlc3VsdCk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICAg
ICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRvdWJsZT4oKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxkb3Vi
bGU+KCkpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgZXhwZWN0ZWQgPSBvcGVyYXRpb24obGVm
dC52YWx1ZSwgcmlnaHQudmFsdWUpID8gNDIuNSA6IC02Ni41OworICAgICAgICAgICAgICAgIENI
RUNLKGlzSWRlbnRpY2FsKGludm9rZTxkb3VibGU+KCpjb2RlLCBsZWZ0LnZhbHVlLCByaWdodC52
YWx1ZSwgNDIuNSwgLTY2LjUpLCBleHBlY3RlZCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIHsgLy8gQ29tcGFyZSBhcmd1bWVudHMgYW5kIHNlbGVjdGVkIGFyZ3VtZW50
cyBhcmUgYWxsIGRpZmZlcmVudC4gQm90aCBjYXNlcyBhcmUgbGl2ZSBhZnRlciBvcGVyYXRpb24u
CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgICAgICBWYWx1ZSogYXJnMCA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRGUFIwKTsKKyAg
ICAgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMSk7CisgICAgICAgIFZhbHVlKiBhcmcy
ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJ
bmZvOjphcmd1bWVudEZQUjIpOworICAgICAgICBWYWx1ZSogYXJnMyA9IHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRGUFIz
KTsKKworICAgICAgICBWYWx1ZSogcmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBTZWxlY3QsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBvcGNvZGUsIE9yaWdpbigpLCBhcmcwLCBhcmcxKSwKKyAgICAgICAgICAgIGFyZzIsCisg
ICAgICAgICAgICBhcmczKTsKKworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIGtlZXBWYWx1ZXNM
aXZlID0gcm9vdC0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgVm9pZCwgT3JpZ2lu
KCkpOworICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJn
MiwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOworICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+YXBw
ZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnMywgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOworICAg
ICAgICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9yKFsmXSAoQ0NhbGxIZWxwZXJzJiwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsKKworICAgICAgICByb290LT5hcHBl
bmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOworICAg
ICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAgICAgIGZvciAoYXV0byYgbGVm
dCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCkpIHsKKyAgICAgICAgICAgIGZvciAo
YXV0byYgcmlnaHQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpKSB7CisgICAgICAg
ICAgICAgICAgZG91YmxlIGV4cGVjdGVkID0gb3BlcmF0aW9uKGxlZnQudmFsdWUsIHJpZ2h0LnZh
bHVlKSA/IDQyLjUgOiAtNjYuNTsKKyAgICAgICAgICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChp
bnZva2U8ZG91YmxlPigqY29kZSwgbGVmdC52YWx1ZSwgcmlnaHQudmFsdWUsIDQyLjUsIC02Ni41
KSwgZXhwZWN0ZWQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB7IC8v
IFRoZSBsZWZ0IGFyZ3VtZW50IGlzIHRoZSBzYW1lIGFzIHRoZSAiZWxzZUNhc2UiIGFyZ3VtZW50
LgorICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICAgICAgVmFsdWUqIGFyZzAgPSByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMCk7Cisg
ICAgICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjEpOworICAgICAgICBWYWx1ZSogYXJn
MiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBS
SW5mbzo6YXJndW1lbnRGUFIyKTsKKworICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZh
bHVlPigKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFNlbGVjdCwgT3Jp
Z2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAg
ICAgICAgICAgICAgcHJvYywgb3Bjb2RlLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAg
YXJnMCwKKyAgICAgICAgICAgICAgICAgICAgYXJnMSksCisgICAgICAgICAgICAgICAgYXJnMiwK
KyAgICAgICAgICAgICAgICBhcmcwKSk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJv
Yyk7CisKKyAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGRv
dWJsZT4oKSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRP
cGVyYW5kczxkb3VibGU+KCkpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgZXhwZWN0ZWQgPSBv
cGVyYXRpb24obGVmdC52YWx1ZSwgcmlnaHQudmFsdWUpID8gNDIuNSA6IGxlZnQudmFsdWU7Cisg
ICAgICAgICAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGRvdWJsZT4oKmNvZGUsIGxl
ZnQudmFsdWUsIHJpZ2h0LnZhbHVlLCA0Mi41LCBsZWZ0LnZhbHVlKSwgZXhwZWN0ZWQpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB7IC8vIFRoZSBsZWZ0IGFyZ3VtZW50
IGlzIHRoZSBzYW1lIGFzIHRoZSAiZWxzZUNhc2UiIGFyZ3VtZW50LiAidGhlbkNhc2UiIGlzIGxp
dmUgYWZ0ZXIgb3BlcmF0aW9uLgorICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICAgICAgVmFsdWUqIGFyZzAgPSBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86
OmFyZ3VtZW50RlBSMCk7CisgICAgICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjEpOwor
ICAgICAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRGUFIyKTsKKworICAgICAgICBWYWx1ZSog
cmVzdWx0ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTZWxlY3QsIE9yaWdpbigpLAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBvcGNvZGUsIE9yaWdpbigp
LCBhcmcwLCBhcmcxKSwKKyAgICAgICAgICAgIGFyZzIsCisgICAgICAgICAgICBhcmcwKTsKKwor
ICAgICAgICBQYXRjaHBvaW50VmFsdWUqIGtlZXBWYWx1ZXNMaXZlID0gcm9vdC0+YXBwZW5kTmV3
PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgVm9pZCwgT3JpZ2luKCkpOworICAgICAgICBrZWVwVmFs
dWVzTGl2ZS0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnMiwgVmFsdWVSZXA6OlNvbWVSZWdp
c3RlcikpOworICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9yKFsmXSAoQ0NhbGxI
ZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsKKworICAgICAg
ICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBy
ZXN1bHQpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAgICAgIGZv
ciAoYXV0byYgbGVmdCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCkpIHsKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgcmlnaHQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigp
KSB7CisgICAgICAgICAgICAgICAgZG91YmxlIGV4cGVjdGVkID0gb3BlcmF0aW9uKGxlZnQudmFs
dWUsIHJpZ2h0LnZhbHVlKSA/IDQyLjUgOiBsZWZ0LnZhbHVlOworICAgICAgICAgICAgICAgIENI
RUNLKGlzSWRlbnRpY2FsKGludm9rZTxkb3VibGU+KCpjb2RlLCBsZWZ0LnZhbHVlLCByaWdodC52
YWx1ZSwgNDIuNSwgbGVmdC52YWx1ZSksIGV4cGVjdGVkKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFNlbGVjdERvdWJsZUNvbXBhcmVEb3VibGVXaXRo
QWxpYXNpbmcoKQoreworICAgIHRlc3RTZWxlY3REb3VibGVDb21wYXJlRG91YmxlPEVxdWFsPihb
XShkb3VibGUgYSwgZG91YmxlIGIpIC0+IGJvb2wgeyByZXR1cm4gYSA9PSBiOyB9KTsKKyAgICB0
ZXN0U2VsZWN0RG91YmxlQ29tcGFyZURvdWJsZTxOb3RFcXVhbD4oW10oZG91YmxlIGEsIGRvdWJs
ZSBiKSAtPiBib29sIHsgcmV0dXJuIGEgIT0gYjsgfSk7CisgICAgdGVzdFNlbGVjdERvdWJsZUNv
bXBhcmVEb3VibGU8TGVzc1RoYW4+KFtdKGRvdWJsZSBhLCBkb3VibGUgYikgLT4gYm9vbCB7IHJl
dHVybiBhIDwgYjsgfSk7CisgICAgdGVzdFNlbGVjdERvdWJsZUNvbXBhcmVEb3VibGU8R3JlYXRl
clRoYW4+KFtdKGRvdWJsZSBhLCBkb3VibGUgYikgLT4gYm9vbCB7IHJldHVybiBhID4gYjsgfSk7
CisgICAgdGVzdFNlbGVjdERvdWJsZUNvbXBhcmVEb3VibGU8TGVzc0VxdWFsPihbXShkb3VibGUg
YSwgZG91YmxlIGIpIC0+IGJvb2wgeyByZXR1cm4gYSA8PSBiOyB9KTsKKyAgICB0ZXN0U2VsZWN0
RG91YmxlQ29tcGFyZURvdWJsZTxHcmVhdGVyRXF1YWw+KFtdKGRvdWJsZSBhLCBkb3VibGUgYikg
LT4gYm9vbCB7IHJldHVybiBhID49IGI7IH0pOworICAgIHRlc3RTZWxlY3REb3VibGVDb21wYXJl
RG91YmxlPEVxdWFsT3JVbm9yZGVyZWQ+KFtdKGRvdWJsZSBhLCBkb3VibGUgYikgLT4gYm9vbCB7
IHJldHVybiBhICE9IGEgfHwgYiAhPSBiIHx8IGEgPT0gYjsgfSk7Cit9CisKK3RlbXBsYXRlPEIz
OjpPcGNvZGUgb3Bjb2RlPgordm9pZCB0ZXN0U2VsZWN0RmxvYXRDb21wYXJlRmxvYXQoYm9vbCAo
Km9wZXJhdGlvbikoZmxvYXQsIGZsb2F0KSkKK3sKKyAgICB7IC8vIENvbXBhcmUgYXJndW1lbnRz
IGFuZCBzZWxlY3RlZCBhcmd1bWVudHMgYXJlIGFsbCBkaWZmZXJlbnQuCisgICAgICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
CisgICAgICAgIFZhbHVlKiBhcmcwID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXR3
aXNlQ2FzdCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsK
KyAgICAgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdHdp
c2VDYXN0LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOwor
ICAgICAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0d2lz
ZUNhc3QsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKSk7Cisg
ICAgICAgIFZhbHVlKiBhcmczID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXR3aXNl
Q2FzdCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMykpKTsKKwor
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgICAgIHByb2MsIFNlbGVjdCwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJvYywgb3Bjb2Rl
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgYXJnMCwKKyAgICAgICAgICAgICAgICAg
ICAgYXJnMSksCisgICAgICAgICAgICAgICAgYXJnMiwKKyAgICAgICAgICAgICAgICBhcmczKSk7
CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICAgICAgZm9yIChhdXRv
JiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKSB7CisgICAg
ICAgICAgICAgICAgZmxvYXQgZXhwZWN0ZWQgPSBvcGVyYXRpb24obGVmdC52YWx1ZSwgcmlnaHQu
dmFsdWUpID8gNDIuNSA6IC02Ni41OworICAgICAgICAgICAgICAgIENIRUNLKGlzSWRlbnRpY2Fs
KGludm9rZTxmbG9hdD4oKmNvZGUsIGJpdHdpc2VfY2FzdDxpbnQzMl90PihsZWZ0LnZhbHVlKSwg
Yml0d2lzZV9jYXN0PGludDMyX3Q+KHJpZ2h0LnZhbHVlKSwgYml0d2lzZV9jYXN0PGludDMyX3Q+
KDQyLjVmKSwgYml0d2lzZV9jYXN0PGludDMyX3Q+KC02Ni41ZikpLCBleHBlY3RlZCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHsgLy8gQ29tcGFyZSBhcmd1bWVudHMg
YW5kIHNlbGVjdGVkIGFyZ3VtZW50cyBhcmUgYWxsIGRpZmZlcmVudC4gInRoZW5DYXNlIiBpcyBs
aXZlIGFmdGVyIG9wZXJhdGlvbi4KKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIFZhbHVlKiBhcmcwID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXR3aXNlQ2FzdCwgT3JpZ2luKCksCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKKyAgICAgICAgVmFsdWUqIGFyZzEgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdHdpc2VDYXN0LCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOworICAgICAgICBWYWx1ZSogYXJnMiA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0d2lzZUNhc3QsIE9yaWdpbigpLAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAg
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKSk7CisgICAgICAgIFZhbHVlKiBhcmczID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXR3aXNlQ2FzdCwgT3JpZ2luKCksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMykpKTsKKworICAgICAgICBWYWx1ZSogcmVzdWx0ID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTZWxlY3QsIE9yaWdpbigpLAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBvcGNvZGUsIE9yaWdpbigpLCBhcmcwLCBh
cmcxKSwKKyAgICAgICAgICAgIGFyZzIsCisgICAgICAgICAgICBhcmczKTsKKworICAgICAgICBQ
YXRjaHBvaW50VmFsdWUqIGtlZXBWYWx1ZXNMaXZlID0gcm9vdC0+YXBwZW5kTmV3PFBhdGNocG9p
bnRWYWx1ZT4ocHJvYywgVm9pZCwgT3JpZ2luKCkpOworICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+
YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnMiwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOwor
ICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9yKFsmXSAoQ0NhbGxIZWxwZXJzJiwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9KTsKKworICAgICAgICByb290LT5h
cHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByZXN1bHQpOwor
ICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAgICAgIGZvciAoYXV0byYg
bGVmdCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgeworICAgICAgICAgICAgZm9y
IChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSkgeworICAgICAg
ICAgICAgICAgIGZsb2F0IGV4cGVjdGVkID0gb3BlcmF0aW9uKGxlZnQudmFsdWUsIHJpZ2h0LnZh
bHVlKSA/IDQyLjUgOiAtNjYuNTsKKyAgICAgICAgICAgICAgICBDSEVDSyhpc0lkZW50aWNhbChp
bnZva2U8ZmxvYXQ+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4obGVmdC52YWx1ZSksIGJp
dHdpc2VfY2FzdDxpbnQzMl90PihyaWdodC52YWx1ZSksIGJpdHdpc2VfY2FzdDxpbnQzMl90Pig0
Mi41ZiksIGJpdHdpc2VfY2FzdDxpbnQzMl90PigtNjYuNWYpKSwgZXhwZWN0ZWQpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB7IC8vIENvbXBhcmUgYXJndW1lbnRzIGFu
ZCBzZWxlY3RlZCBhcmd1bWVudHMgYXJlIGFsbCBkaWZmZXJlbnQuICJlbHNlQ2FzZSIgaXMgbGl2
ZSBhZnRlciBvcGVyYXRpb24uCisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgICAgICBWYWx1ZSogYXJnMCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0d2lzZUNhc3QsIE9yaWdpbigpLAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAg
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSk7CisgICAgICAgIFZhbHVlKiBhcmcxID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXR3aXNlQ2FzdCwgT3JpZ2luKCksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKyAgICAgICAgVmFsdWUqIGFyZzIgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdHdpc2VDYXN0LCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKSkpOworICAgICAgICBWYWx1ZSogYXJnMyA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0d2lzZUNhc3QsIE9yaWdpbigpLAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjMpKSk7CisKKyAgICAgICAgVmFsdWUqIHJlc3VsdCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2VsZWN0LCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgb3Bjb2RlLCBPcmlnaW4oKSwgYXJnMCwgYXJn
MSksCisgICAgICAgICAgICBhcmcyLAorICAgICAgICAgICAgYXJnMyk7CisKKyAgICAgICAgUGF0
Y2hwb2ludFZhbHVlKiBrZWVwVmFsdWVzTGl2ZSA9IHJvb3QtPmFwcGVuZE5ldzxQYXRjaHBvaW50
VmFsdWU+KHByb2MsIFZvaWQsIE9yaWdpbigpKTsKKyAgICAgICAga2VlcFZhbHVlc0xpdmUtPmFw
cGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZzMsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAg
ICAgICAga2VlcFZhbHVlc0xpdmUtPnNldEdlbmVyYXRvcihbJl0gKENDYWxsSGVscGVycyYsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsgfSk7CisKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKKyAg
ICAgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKworICAgICAgICBmb3IgKGF1dG8mIGxl
ZnQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpIHsKKyAgICAgICAgICAgIGZvciAo
YXV0byYgcmlnaHQgOiBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZmxvYXQ+KCkpIHsKKyAgICAgICAg
ICAgICAgICBmbG9hdCBleHBlY3RlZCA9IG9wZXJhdGlvbihsZWZ0LnZhbHVlLCByaWdodC52YWx1
ZSkgPyA0Mi41IDogLTY2LjU7CisgICAgICAgICAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52
b2tlPGZsb2F0PigqY29kZSwgYml0d2lzZV9jYXN0PGludDMyX3Q+KGxlZnQudmFsdWUpLCBiaXR3
aXNlX2Nhc3Q8aW50MzJfdD4ocmlnaHQudmFsdWUpLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oNDIu
NWYpLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oLTY2LjVmKSksIGV4cGVjdGVkKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgeyAvLyBDb21wYXJlIGFyZ3VtZW50cyBhbmQg
c2VsZWN0ZWQgYXJndW1lbnRzIGFyZSBhbGwgZGlmZmVyZW50LiBCb3RoIGNhc2VzIGFyZSBsaXZl
IGFmdGVyIG9wZXJhdGlvbi4KKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgICAgIFZhbHVlKiBhcmcwID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXR3aXNlQ2FzdCwgT3JpZ2luKCksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKKyAgICAgICAgVmFsdWUqIGFyZzEgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdHdpc2VDYXN0LCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOworICAgICAgICBWYWx1ZSogYXJnMiA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0d2lzZUNhc3QsIE9yaWdpbigpLAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKSk7CisgICAgICAgIFZhbHVlKiBhcmczID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXR3aXNlQ2FzdCwgT3JpZ2luKCksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMykpKTsKKworICAgICAgICBWYWx1ZSogcmVzdWx0ID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTZWxlY3QsIE9yaWdpbigpLAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBvcGNvZGUsIE9yaWdpbigpLCBhcmcwLCBhcmcx
KSwKKyAgICAgICAgICAgIGFyZzIsCisgICAgICAgICAgICBhcmczKTsKKworICAgICAgICBQYXRj
aHBvaW50VmFsdWUqIGtlZXBWYWx1ZXNMaXZlID0gcm9vdC0+YXBwZW5kTmV3PFBhdGNocG9pbnRW
YWx1ZT4ocHJvYywgVm9pZCwgT3JpZ2luKCkpOworICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+YXBw
ZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnMiwgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikpOworICAg
ICAgICBrZWVwVmFsdWVzTGl2ZS0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnMywgVmFsdWVS
ZXA6OlNvbWVSZWdpc3RlcikpOworICAgICAgICBrZWVwVmFsdWVzTGl2ZS0+c2V0R2VuZXJhdG9y
KFsmXSAoQ0NhbGxIZWxwZXJzJiwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeyB9
KTsKKworICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCByZXN1bHQpOworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOwor
CisgICAgICAgIGZvciAoYXV0byYgbGVmdCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4o
KSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiByaWdodCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5k
czxmbG9hdD4oKSkgeworICAgICAgICAgICAgICAgIGZsb2F0IGV4cGVjdGVkID0gb3BlcmF0aW9u
KGxlZnQudmFsdWUsIHJpZ2h0LnZhbHVlKSA/IDQyLjUgOiAtNjYuNTsKKyAgICAgICAgICAgICAg
ICBDSEVDSyhpc0lkZW50aWNhbChpbnZva2U8ZmxvYXQ+KCpjb2RlLCBiaXR3aXNlX2Nhc3Q8aW50
MzJfdD4obGVmdC52YWx1ZSksIGJpdHdpc2VfY2FzdDxpbnQzMl90PihyaWdodC52YWx1ZSksIGJp
dHdpc2VfY2FzdDxpbnQzMl90Pig0Mi41ZiksIGJpdHdpc2VfY2FzdDxpbnQzMl90PigtNjYuNWYp
KSwgZXhwZWN0ZWQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB7IC8v
IFRoZSBsZWZ0IGFyZ3VtZW50IGlzIHRoZSBzYW1lIGFzIHRoZSAiZWxzZUNhc2UiIGFyZ3VtZW50
LgorICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICAgICAgVmFsdWUqIGFyZzAgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdHdpc2VDYXN0LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKSkpOworICAgICAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgQml0d2lzZUNhc3QsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpKSk7CisgICAgICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBCaXR3aXNlQ2FzdCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMikpKTsKKworICAgICAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFNlbGVjdCwgT3JpZ2luKCksCisg
ICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAg
ICAgcHJvYywgb3Bjb2RlLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgYXJnMCwKKyAg
ICAgICAgICAgICAgICAgICAgYXJnMSksCisgICAgICAgICAgICAgICAgYXJnMiwKKyAgICAgICAg
ICAgICAgICBhcmcwKSk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAg
ICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZs
b2F0PigpKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgZXhwZWN0ZWQgPSBvcGVyYXRpb24obGVm
dC52YWx1ZSwgcmlnaHQudmFsdWUpID8gNDIuNSA6IGxlZnQudmFsdWU7CisgICAgICAgICAgICAg
ICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29kZSwgYml0d2lzZV9jYXN0PGlu
dDMyX3Q+KGxlZnQudmFsdWUpLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4ocmlnaHQudmFsdWUpLCBi
aXR3aXNlX2Nhc3Q8aW50MzJfdD4oNDIuNWYpLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4obGVmdC52
YWx1ZSkpLCBleHBlY3RlZCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IHsgLy8gVGhlIGxlZnQgYXJndW1lbnQgaXMgdGhlIHNhbWUgYXMgdGhlICJlbHNlQ2FzZSIgYXJn
dW1lbnQuICJ0aGVuQ2FzZSIgaXMgbGl2ZSBhZnRlciBvcGVyYXRpb24uCisgICAgICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
ICAgICAgICBWYWx1ZSogYXJnMCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0d2lz
ZUNhc3QsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSk7Cisg
ICAgICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXR3aXNl
Q2FzdCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKyAg
ICAgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdHdpc2VD
YXN0LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
VHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKSkpOworCisg
ICAgICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNlbGVj
dCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIG9w
Y29kZSwgT3JpZ2luKCksIGFyZzAsIGFyZzEpLAorICAgICAgICAgICAgYXJnMiwKKyAgICAgICAg
ICAgIGFyZzApOworCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSoga2VlcFZhbHVlc0xpdmUgPSBy
b290LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBWb2lkLCBPcmlnaW4oKSk7Cisg
ICAgICAgIGtlZXBWYWx1ZXNMaXZlLT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcyLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisgICAgICAgIGtlZXBWYWx1ZXNMaXZlLT5zZXRHZW5lcmF0
b3IoWyZdIChDQ2FsbEhlbHBlcnMmLCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7
IH0pOworCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCksIHJlc3VsdCk7CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7
CisKKyAgICAgICAgZm9yIChhdXRvJiBsZWZ0IDogZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0
PigpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJpZ2h0IDogZmxvYXRpbmdQb2ludE9wZXJh
bmRzPGZsb2F0PigpKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgZXhwZWN0ZWQgPSBvcGVyYXRp
b24obGVmdC52YWx1ZSwgcmlnaHQudmFsdWUpID8gNDIuNSA6IGxlZnQudmFsdWU7CisgICAgICAg
ICAgICAgICAgQ0hFQ0soaXNJZGVudGljYWwoaW52b2tlPGZsb2F0PigqY29kZSwgYml0d2lzZV9j
YXN0PGludDMyX3Q+KGxlZnQudmFsdWUpLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4ocmlnaHQudmFs
dWUpLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oNDIuNWYpLCBiaXR3aXNlX2Nhc3Q8aW50MzJfdD4o
bGVmdC52YWx1ZSkpLCBleHBlY3RlZCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIHRlc3RTZWxlY3RGbG9hdENvbXBhcmVGbG9hdFdpdGhBbGlhc2luZygpCit7
CisgICAgdGVzdFNlbGVjdEZsb2F0Q29tcGFyZUZsb2F0PEVxdWFsPihbXShmbG9hdCBhLCBmbG9h
dCBiKSAtPiBib29sIHsgcmV0dXJuIGEgPT0gYjsgfSk7CisgICAgdGVzdFNlbGVjdEZsb2F0Q29t
cGFyZUZsb2F0PE5vdEVxdWFsPihbXShmbG9hdCBhLCBmbG9hdCBiKSAtPiBib29sIHsgcmV0dXJu
IGEgIT0gYjsgfSk7CisgICAgdGVzdFNlbGVjdEZsb2F0Q29tcGFyZUZsb2F0PExlc3NUaGFuPihb
XShmbG9hdCBhLCBmbG9hdCBiKSAtPiBib29sIHsgcmV0dXJuIGEgPCBiOyB9KTsKKyAgICB0ZXN0
U2VsZWN0RmxvYXRDb21wYXJlRmxvYXQ8R3JlYXRlclRoYW4+KFtdKGZsb2F0IGEsIGZsb2F0IGIp
IC0+IGJvb2wgeyByZXR1cm4gYSA+IGI7IH0pOworICAgIHRlc3RTZWxlY3RGbG9hdENvbXBhcmVG
bG9hdDxMZXNzRXF1YWw+KFtdKGZsb2F0IGEsIGZsb2F0IGIpIC0+IGJvb2wgeyByZXR1cm4gYSA8
PSBiOyB9KTsKKyAgICB0ZXN0U2VsZWN0RmxvYXRDb21wYXJlRmxvYXQ8R3JlYXRlckVxdWFsPihb
XShmbG9hdCBhLCBmbG9hdCBiKSAtPiBib29sIHsgcmV0dXJuIGEgPj0gYjsgfSk7CisgICAgdGVz
dFNlbGVjdEZsb2F0Q29tcGFyZUZsb2F0PEVxdWFsT3JVbm9yZGVyZWQ+KFtdKGZsb2F0IGEsIGZs
b2F0IGIpIC0+IGJvb2wgeyByZXR1cm4gYSAhPSBhIHx8IGIgIT0gYiB8fCBhID09IGI7IH0pOwor
fQorCiB2b2lkIHRlc3RTZWxlY3RGb2xkKGludHB0cl90IHZhbHVlKQogewogICAgIFByb2NlZHVy
ZSBwcm9jOwpAQCAtMTA0MzcsNzcgKzEwOTExLDcgQEAgZG91YmxlIG5lZ2F0aXZlWmVybygpCiAg
ICAgcmV0dXJuIC16ZXJvKCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFR5cGU+Ci1zdHJ1Y3Qg
T3BlcmFuZCB7Ci0gICAgY29uc3QgY2hhciogbmFtZTsKLSAgICBUeXBlIHZhbHVlOwotfTsKLQot
dHlwZWRlZiBPcGVyYW5kPGludDY0X3Q+IEludDY0T3BlcmFuZDsKLXR5cGVkZWYgT3BlcmFuZDxp
bnQzMl90PiBJbnQzMk9wZXJhbmQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEZsb2F0VHlwZT4KLXZv
aWQgcG9wdWxhdGVXaXRoSW50ZXJlc3RpbmdWYWx1ZXMoVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBl
Pj4mIG9wZXJhbmRzKQotewotICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIwLiIsIHN0YXRpY19jYXN0
PEZsb2F0VHlwZT4oMC4pIH0pOwotICAgIG9wZXJhbmRzLmFwcGVuZCh7ICItMC4iLCBzdGF0aWNf
Y2FzdDxGbG9hdFR5cGU+KC0wLikgfSk7Ci0gICAgb3BlcmFuZHMuYXBwZW5kKHsgIjAuNCIsIHN0
YXRpY19jYXN0PEZsb2F0VHlwZT4oMC41KSB9KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTAu
NCIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oLTAuNSkgfSk7Ci0gICAgb3BlcmFuZHMuYXBwZW5k
KHsgIjAuNSIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC41KSB9KTsKLSAgICBvcGVyYW5kcy5h
cHBlbmQoeyAiLTAuNSIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oLTAuNSkgfSk7Ci0gICAgb3Bl
cmFuZHMuYXBwZW5kKHsgIjAuNiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMC41KSB9KTsKLSAg
ICBvcGVyYW5kcy5hcHBlbmQoeyAiLTAuNiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oLTAuNSkg
fSk7Ci0gICAgb3BlcmFuZHMuYXBwZW5kKHsgIjEuIiwgc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigx
LikgfSk7Ci0gICAgb3BlcmFuZHMuYXBwZW5kKHsgIi0xLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlw
ZT4oLTEuKSB9KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAiMi4iLCBzdGF0aWNfY2FzdDxGbG9h
dFR5cGU+KDIuKSB9KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTIuIiwgc3RhdGljX2Nhc3Q8
RmxvYXRUeXBlPigtMi4pIH0pOwotICAgIG9wZXJhbmRzLmFwcGVuZCh7ICJNX1BJIiwgc3RhdGlj
X2Nhc3Q8RmxvYXRUeXBlPihNX1BJKSB9KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLU1fUEki
LCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC1NX1BJKSB9KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQo
eyAibWluIiwgc3RkOjpudW1lcmljX2xpbWl0czxGbG9hdFR5cGU+OjptaW4oKSB9KTsKLSAgICBv
cGVyYW5kcy5hcHBlbmQoeyAibWF4Iiwgc3RkOjpudW1lcmljX2xpbWl0czxGbG9hdFR5cGU+Ojpt
YXgoKSB9KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAibG93ZXN0Iiwgc3RkOjpudW1lcmljX2xp
bWl0czxGbG9hdFR5cGU+Ojpsb3dlc3QoKSB9KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAiZXBz
aWxvbiIsIHN0ZDo6bnVtZXJpY19saW1pdHM8RmxvYXRUeXBlPjo6ZXBzaWxvbigpIH0pOwotICAg
IG9wZXJhbmRzLmFwcGVuZCh7ICJpbmZpbml0aSIsIHN0ZDo6bnVtZXJpY19saW1pdHM8RmxvYXRU
eXBlPjo6aW5maW5pdHkoKSB9KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLWluZmluaXRpIiwg
LSBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46OmluZmluaXR5KCkgfSk7Ci0gICAgb3Bl
cmFuZHMuYXBwZW5kKHsgIlBOYU4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KFBOYU4pIH0pOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGbG9hdFR5cGU+Ci1WZWN0b3I8T3BlcmFuZDxGbG9hdFR5
cGU+PiBmbG9hdGluZ1BvaW50T3BlcmFuZHMoKQotewotICAgIFZlY3RvcjxPcGVyYW5kPEZsb2F0
VHlwZT4+IG9wZXJhbmRzOwotICAgIHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKG9wZXJh
bmRzKTsKLSAgICByZXR1cm4gb3BlcmFuZHM7Ci19OwotCi1zdGF0aWMgVmVjdG9yPEludDY0T3Bl
cmFuZD4gaW50NjRPcGVyYW5kcygpCi17Ci0gICAgVmVjdG9yPEludDY0T3BlcmFuZD4gb3BlcmFu
ZHM7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBkb3VibGVPcGVyYW5kIDogZmxvYXRpbmdQb2ludE9w
ZXJhbmRzPGRvdWJsZT4oKSkKLSAgICAgICAgb3BlcmFuZHMuYXBwZW5kKHsgZG91YmxlT3BlcmFu
ZC5uYW1lLCBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oZG91YmxlT3BlcmFuZC52YWx1ZSkgfSk7Ci0g
ICAgb3BlcmFuZHMuYXBwZW5kKHsgIjEiLCAxIH0pOwotICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIt
MSIsIC0xIH0pOwotICAgIG9wZXJhbmRzLmFwcGVuZCh7ICJpbnQ2NC1tYXgiLCBzdGQ6Om51bWVy
aWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSB9KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAiaW50
NjQtbWluIiwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWluKCkgfSk7Ci0gICAgb3Bl
cmFuZHMuYXBwZW5kKHsgImludDMyLW1heCIsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46
Om1heCgpIH0pOwotICAgIG9wZXJhbmRzLmFwcGVuZCh7ICJpbnQzMi1taW4iLCBzdGQ6Om51bWVy
aWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSB9KTsKLQotICAgIHJldHVybiBvcGVyYW5kczsKLX0K
IAotc3RhdGljIFZlY3RvcjxJbnQzMk9wZXJhbmQ+IGludDMyT3BlcmFuZHMoKQotewotICAgIFZl
Y3RvcjxJbnQzMk9wZXJhbmQ+IG9wZXJhbmRzKHsKLSAgICAgICAgeyAiMCIsIDAgfSwKLSAgICAg
ICAgeyAiMSIsIDEgfSwKLSAgICAgICAgeyAiLTEiLCAtMSB9LAotICAgICAgICB7ICI0MiIsIDQy
IH0sCi0gICAgICAgIHsgIi00MiIsIC00MiB9LAotICAgICAgICB7ICJpbnQzMi1tYXgiLCBzdGQ6
Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSB9LAotICAgICAgICB7ICJpbnQzMi1taW4i
LCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSB9Ci0gICAgfSk7Ci0gICAgcmV0
dXJuIG9wZXJhbmRzOwotfQogCiAjZGVmaW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgIGlmICghc2hvdWxkUnVuKCN0ZXN0KSkgICAgICAgICAgICAg
ICAgICBcCkBAIC0xMTY5Niw2ICsxMjEwMCw4IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRl
cikKICAgICBSVU4odGVzdFNlbGVjdERvdWJsZUNvbXBhcmVEb3VibGUoKSk7CiAgICAgUlVOX0JJ
TkFSWSh0ZXN0U2VsZWN0RG91YmxlQ29tcGFyZUZsb2F0LCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8
ZmxvYXQ+KCksIGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9hdD4oKSk7CiAgICAgUlVOX0JJTkFS
WSh0ZXN0U2VsZWN0RmxvYXRDb21wYXJlRmxvYXQsIGZsb2F0aW5nUG9pbnRPcGVyYW5kczxmbG9h
dD4oKSwgZmxvYXRpbmdQb2ludE9wZXJhbmRzPGZsb2F0PigpKTsKKyAgICBSVU4odGVzdFNlbGVj
dERvdWJsZUNvbXBhcmVEb3VibGVXaXRoQWxpYXNpbmcoKSk7CisgICAgUlVOKHRlc3RTZWxlY3RG
bG9hdENvbXBhcmVGbG9hdFdpdGhBbGlhc2luZygpKTsKICAgICBSVU4odGVzdFNlbGVjdEZvbGQo
NDIpKTsKICAgICBSVU4odGVzdFNlbGVjdEZvbGQoNDMpKTsKICAgICBSVU4odGVzdFNlbGVjdElu
dmVydCgpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>