<?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>228543</bug_id>
          
          <creation_ts>2021-07-28 01:49:56 -0700</creation_ts>
          <short_desc>[JSC] load/store with BaseIndex is inefficient in ARM64</short_desc>
          <delta_ts>2021-07-28 13:24:20 -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>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1779991</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-07-28 01:49:56 -0700</bug_when>
    <thetext>[JSC] load/store with BaseIndex is inefficient in ARM64</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779992</commentid>
    <comment_count>1</comment_count>
      <attachid>434411</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-07-28 01:51:21 -0700</bug_when>
    <thetext>Created attachment 434411
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780074</commentid>
    <comment_count>2</comment_count>
      <attachid>434411</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-07-28 09:08:09 -0700</bug_when>
    <thetext>Comment on attachment 434411
Patch

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

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:1433
&gt; +        if (!address.scale || address.scale == 3) {

Can you use the Scale enum values instead here?
    if (address.scale == TimesOne || address.scale == TimesEight) {

&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:1435
&gt; +            if (auto baseGPR = tryFoldBaseAndOffsetPart(address)) {
&gt; +                m_assembler.ldr&lt;64&gt;(dest, baseGPR.value(), address.index, indexExtendType(address), address.scale);

I think you can do better: if (scale == TimesEight &amp;&amp; isUInt12(address.offset / 8)), then you can use the `ALWAYS_INLINE void ldr(RegisterID rt, RegisterID rn, unsigned pimm)` form and just issue 1 instruction to do this load.  See also section C6.2.101 of the spec.

See also LDUR in section C6.2.136 if scale == TimesOne.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780075</commentid>
    <comment_count>3</comment_count>
      <attachid>434411</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-07-28 09:10:38 -0700</bug_when>
    <thetext>Comment on attachment 434411
Patch

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

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:1435
&gt;&gt; +                m_assembler.ldr&lt;64&gt;(dest, baseGPR.value(), address.index, indexExtendType(address), address.scale);
&gt; 
&gt; I think you can do better: if (scale == TimesEight &amp;&amp; isUInt12(address.offset / 8)), then you can use the `ALWAYS_INLINE void ldr(RegisterID rt, RegisterID rn, unsigned pimm)` form and just issue 1 instruction to do this load.  See also section C6.2.101 of the spec.
&gt; 
&gt; See also LDUR in section C6.2.136 if scale == TimesOne.

I should clarify: my point is that you may be able to do this with just 1 instruction instead of 2.  Ditto for other cases below.  So, I think it&apos;s worth checking the spec manual for available instructions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780106</commentid>
    <comment_count>4</comment_count>
      <attachid>434411</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-07-28 10:31:13 -0700</bug_when>
    <thetext>Comment on attachment 434411
Patch

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

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:1433
&gt;&gt; +        if (!address.scale || address.scale == 3) {
&gt; 
&gt; Can you use the Scale enum values instead here?
&gt;     if (address.scale == TimesOne || address.scale == TimesEight) {

Changed.

&gt;&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:1435
&gt;&gt;&gt; +                m_assembler.ldr&lt;64&gt;(dest, baseGPR.value(), address.index, indexExtendType(address), address.scale);
&gt;&gt; 
&gt;&gt; I think you can do better: if (scale == TimesEight &amp;&amp; isUInt12(address.offset / 8)), then you can use the `ALWAYS_INLINE void ldr(RegisterID rt, RegisterID rn, unsigned pimm)` form and just issue 1 instruction to do this load.  See also section C6.2.101 of the spec.
&gt;&gt; 
&gt;&gt; See also LDUR in section C6.2.136 if scale == TimesOne.
&gt; 
&gt; I should clarify: my point is that you may be able to do this with just 1 instruction instead of 2.  Ditto for other cases below.  So, I think it&apos;s worth checking the spec manual for available instructions.

I don&apos;t think it is available since here there is base and index registers (since this is BaseIndex). But `ALWAYS_INLINE void ldr(RegisterID rt, RegisterID rn, unsigned pimm)` only takes base register.
So if we would like to use `ALWAYS_INLINE void ldr(RegisterID rt, RegisterID rn, unsigned pimm)`, then we first need to fold index into base. This means that it requires 2 instructions anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780108</commentid>
    <comment_count>5</comment_count>
      <attachid>434434</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-07-28 10:32:09 -0700</bug_when>
    <thetext>Created attachment 434434
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780135</commentid>
    <comment_count>6</comment_count>
      <attachid>434434</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-07-28 11:35:32 -0700</bug_when>
    <thetext>Comment on attachment 434434
Patch

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

r=me with suggestions.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4224
&gt; +        uint64_t array[] = { 1, 2, 3, 4, 5, };
&gt; +        CHECK_EQ(invoke&lt;uint64_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), 3);

nit: can you add  INT64_MAX to each of the values in array so that this test will also catch bugs where the load instruction doesn&apos;t load the full 8 bytes?

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4234
&gt; +        uint64_t array[] = { 1, 2, 3, 4, 5, };
&gt; +        CHECK_EQ(invoke&lt;uint64_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), 5);

Ditto.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4247
&gt; +        uint32_t array[] = { 1, 2, 3, 4, 5, };
&gt; +        CHECK_EQ(invoke&lt;uint32_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), 3);

Ditto: add INT32_MAX.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4257
&gt; +        uint32_t array[] = { 1, 2, 3, 4, 5, };
&gt; +        CHECK_EQ(invoke&lt;uint32_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), 5);

Ditto.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4269
&gt; +        uint16_t array[] = { 1, 2, 3, 4, 5, };
&gt; +        CHECK_EQ(invoke&lt;uint32_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), 3);

Ditto: add INT16_MAX.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4279
&gt; +        uint16_t array[] = { 1, 2, 3, 4, static_cast&lt;uint16_t&gt;(-1), };
&gt; +        CHECK_EQ(invoke&lt;uint32_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), 0xffff);

Ditto.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4291
&gt; +        uint16_t array[] = { 1, 2, 3, 4, 5, };
&gt; +        CHECK_EQ(invoke&lt;uint32_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), 3);

nit: add (INT16_MAX - 10)?

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4301
&gt; +        uint16_t array[] = { 1, 2, 3, 4, static_cast&lt;uint16_t&gt;(-1), };
&gt; +        CHECK_EQ(invoke&lt;uint32_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), static_cast&lt;uint32_t&gt;(-1));

nit: add (INT16_MAX - 10) but make leave the last one as -1?

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4406
&gt; +        invoke&lt;void&gt;(test, array, 3, 42);
&gt; +        CHECK_EQ(array[2], 42);

nit: Add INT64_MAX to 42.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4417
&gt; +        invoke&lt;void&gt;(test, array, 3, 42);
&gt; +        CHECK_EQ(array[4], 42);

Ditto.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4431
&gt; +        invoke&lt;void&gt;(test, array, 3, 42);
&gt; +        CHECK_EQ(array[2], 42);

nit: Add INT32_MAX to 42.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4442
&gt; +        invoke&lt;void&gt;(test, array, 3, 42);
&gt; +        CHECK_EQ(array[4], 42);

Ditto.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4455
&gt; +        invoke&lt;void&gt;(test, array, 3, 42);
&gt; +        CHECK_EQ(array[2], 42);

nit: Add INT16_MAX to 42.

&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4466
&gt; +        invoke&lt;void&gt;(test, array, 3, 42);
&gt; +        CHECK_EQ(array[4], 42);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780138</commentid>
    <comment_count>7</comment_count>
      <attachid>434434</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-07-28 11:47:08 -0700</bug_when>
    <thetext>Comment on attachment 434434
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4224
&gt;&gt; +        CHECK_EQ(invoke&lt;uint64_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), 3);
&gt; 
&gt; nit: can you add  INT64_MAX to each of the values in array so that this test will also catch bugs where the load instruction doesn&apos;t load the full 8 bytes?

Changed.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4234
&gt;&gt; +        CHECK_EQ(invoke&lt;uint64_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), 5);
&gt; 
&gt; Ditto.

Changed.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4247
&gt;&gt; +        CHECK_EQ(invoke&lt;uint32_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), 3);
&gt; 
&gt; Ditto: add INT32_MAX.

Changed.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4257
&gt;&gt; +        CHECK_EQ(invoke&lt;uint32_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), 5);
&gt; 
&gt; Ditto.

Changed.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4279
&gt;&gt; +        CHECK_EQ(invoke&lt;uint32_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), 0xffff);
&gt; 
&gt; Ditto.

Changed.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4291
&gt;&gt; +        CHECK_EQ(invoke&lt;uint32_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), 3);
&gt; 
&gt; nit: add (INT16_MAX - 10)?

Changed.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4301
&gt;&gt; +        CHECK_EQ(invoke&lt;uint32_t&gt;(test, array, static_cast&lt;UCPURegister&gt;(3)), static_cast&lt;uint32_t&gt;(-1));
&gt; 
&gt; nit: add (INT16_MAX - 10) but make leave the last one as -1?

Changed.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4406
&gt;&gt; +        CHECK_EQ(array[2], 42);
&gt; 
&gt; nit: Add INT64_MAX to 42.

Changed.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4417
&gt;&gt; +        CHECK_EQ(array[4], 42);
&gt; 
&gt; Ditto.

Changed.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4431
&gt;&gt; +        CHECK_EQ(array[2], 42);
&gt; 
&gt; nit: Add INT32_MAX to 42.

Changed.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4442
&gt;&gt; +        CHECK_EQ(array[4], 42);
&gt; 
&gt; Ditto.

Changed.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4455
&gt;&gt; +        CHECK_EQ(array[2], 42);
&gt; 
&gt; nit: Add INT16_MAX to 42.

Changed.

&gt;&gt; Source/JavaScriptCore/assembler/testmasm.cpp:4466
&gt;&gt; +        CHECK_EQ(array[4], 42);
&gt; 
&gt; Ditto.

Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780139</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-07-28 11:49:36 -0700</bug_when>
    <thetext>Committed r280391 (240032@main): &lt;https://commits.webkit.org/240032@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780140</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-28 11:50:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/81227865&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780182</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-07-28 13:23:08 -0700</bug_when>
    <thetext>There is 0% chance that https://ews-build.webkit.org/#/builders/56/builds/12242 failures are related to this patch since

1. This is x64 EWS
2. This patch does nothing on x64. It only affects on ARM64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780183</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-07-28 13:24:20 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #10)
&gt; There is 0% chance that
&gt; https://ews-build.webkit.org/#/builders/56/builds/12242 failures are related
&gt; to this patch since
&gt; 
&gt; 1. This is x64 EWS
&gt; 2. This patch does nothing on x64. It only affects on ARM64.

Looks like checking-out is failing. So, it is EWS issue.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434411</attachid>
            <date>2021-07-28 01:51:21 -0700</date>
            <delta_ts>2021-07-28 10:32:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228543-20210728015120.patch</filename>
            <type>text/plain</type>
            <size>27982</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZGQ5ZDNmNTYxNTQ1ZjhjNWU4NzdjMjQwYjQ4NGFjNzAzYWIyZjlkLi41YmYzY2NhYTQ0N2YzZDg1
YTY1ZWEwZjQyZjAyYzY1M2VjYzIxY2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAyMS0wNy0yOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIGxvYWQvc3RvcmUgd2l0aCBCYXNlSW5kZXggaXMgaW5lZmZpY2ll
bnQgaW4gQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODU0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdoaWxlIHdlIGFyZSBmcmVxdWVudGx5IHVzaW5nIGxvYWQgKyBCYXNlSW5kZXggKHdpdGgg
b2Zmc2V0KSBpbiBSZWdFeHAgY29kZSwKKyAgICAgICAgd2UgZW1pdCAzIGluc3RydWN0aW9ucyBp
biBBUk02NC4gVGhpcyBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gMiBpbnN0cnVjdGlvbnMuCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGF0IHBhdGggdG8gbWFrZSBnZW5lcmF0ZWQgY29kZSB0aWdo
dCBpbiBBUk02NCBSZWdFeHAuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMTYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTTY0Ojpsb2FkMTZTaWduZWRFeHRlbmRUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk02NDo6bG9hZDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojps
b2FkOFNpZ25lZEV4dGVuZFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RvcmUzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN0b3JlMTYpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdG9yZTgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlckFSTTY0Ojpsb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6bG9hZEZsb2F0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3Rv
cmVEb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdG9yZUZsb2F0
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6dHJ5Rm9sZEJhc2VBbmRPZmZz
ZXRQYXJ0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlND
Ojp0ZXN0TG9hZEJhc2VJbmRleCk6CisgICAgICAgIChKU0M6OnRlc3RTdG9yZUJhc2VJbmRleCk6
CisKIDIwMjEtMDctMjcgIFBhdHJpY2sgQW5nbGUgIDxwYW5nbGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IFtDb2NvYV0gIlJlbW90ZUluc3BlY3RvciBYUEMgY29ubmVjdGlv
biB0byByZWxheSBmYWlsZWQuIiBtZXNzYWdlcyBhcmUgY29uZnVzaW5nIGluIFN0ZEVycgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZkLi4yMTQ1
ZTg1YmViYjIxYWU0MjM3M2FiYTljNGZhMGEwM2Y0OTEwNjhjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtMTQz
MCw5ICsxNDMwLDExIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyQVJNNjQgOiBwdWJsaWMgQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXI+IHsKIAogICAgIHZvaWQgbG9hZDY0KEJhc2VJbmRl
eCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBpZiAoIWFkZHJlc3Mu
b2Zmc2V0ICYmICghYWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDMpKSB7Ci0gICAg
ICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRyZXNzLnNjYWxlKTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFhZGRyZXNzLnNjYWxlIHx8IGFkZHJlc3Muc2NhbGUg
PT0gMykgeworICAgICAgICAgICAgaWYgKGF1dG8gYmFzZUdQUiA9IHRyeUZvbGRCYXNlQW5kT2Zm
c2V0UGFydChhZGRyZXNzKSkgeworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4o
ZGVzdCwgYmFzZUdQUi52YWx1ZSgpLCBhZGRyZXNzLmluZGV4LCBpbmRleEV4dGVuZFR5cGUoYWRk
cmVzcyksIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKFRydXN0ZWRJbW0z
MihhZGRyZXNzLm9mZnNldCksIGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxp
ZGF0ZSgpKTsKQEAgLTE1MjksOSArMTUzMSwxMSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTTY0
IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7CiAKICAgICB2b2lk
IGxvYWQzMihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAg
ICAgaWYgKCFhZGRyZXNzLm9mZnNldCAmJiAoIWFkZHJlc3Muc2NhbGUgfHwgYWRkcmVzcy5zY2Fs
ZSA9PSAyKSkgewotICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihkZXN0LCBhZGRyZXNz
LmJhc2UsIGFkZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5z
Y2FsZSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghYWRkcmVzcy5zY2FsZSB8
fCBhZGRyZXNzLnNjYWxlID09IDIpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGJhc2VHUFIgPSB0
cnlGb2xkQmFzZUFuZE9mZnNldFBhcnQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sZHI8MzI+KGRlc3QsIGJhc2VHUFIudmFsdWUoKSwgYWRkcmVzcy5pbmRleCwgaW5k
ZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBzaWduRXh0ZW5kMzJU
b1B0cihUcnVzdGVkSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVn
aXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CkBAIC0xNTc2LDkgKzE1ODAsMTEgQEAgY2xhc3MgTWFj
cm9Bc3NlbWJsZXJBUk02NCA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxl
cj4gewogICAgIAogICAgIHZvaWQgbG9hZDE2KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewotICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICghYWRkcmVzcy5z
Y2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDEpKSB7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5s
ZHJoKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFk
ZHJlc3MpLCBhZGRyZXNzLnNjYWxlKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYg
KCFhZGRyZXNzLnNjYWxlIHx8IGFkZHJlc3Muc2NhbGUgPT0gMSkgeworICAgICAgICAgICAgaWYg
KGF1dG8gYmFzZUdQUiA9IHRyeUZvbGRCYXNlQW5kT2Zmc2V0UGFydChhZGRyZXNzKSkgeworICAg
ICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcmgoZGVzdCwgYmFzZUdQUi52YWx1ZSgpLCBhZGRy
ZXNzLmluZGV4LCBpbmRleEV4dGVuZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIGdldENhY2hl
ZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKQEAgLTE2MjAsOSArMTYyNiwx
MSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTTY0IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3Nl
bWJsZXI8QXNzZW1ibGVyPiB7CiAKICAgICB2b2lkIGxvYWQxNlNpZ25lZEV4dGVuZFRvMzIoQmFz
ZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIGlmICghYWRk
cmVzcy5vZmZzZXQgJiYgKCFhZGRyZXNzLnNjYWxlIHx8IGFkZHJlc3Muc2NhbGUgPT0gMSkpIHsK
LSAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcnNoPDMyPihkZXN0LCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7Ci0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghYWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNz
LnNjYWxlID09IDEpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGJhc2VHUFIgPSB0cnlGb2xkQmFz
ZUFuZE9mZnNldFBhcnQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
ZHJzaDwzMj4oZGVzdCwgYmFzZUdQUi52YWx1ZSgpLCBhZGRyZXNzLmluZGV4LCBpbmRleEV4dGVu
ZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKFRy
dXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklE
QW5kSW52YWxpZGF0ZSgpKTsKQEAgLTE2NTEsOSArMTY1OSwxMSBAQCBjbGFzcyBNYWNyb0Fzc2Vt
YmxlckFSTTY0IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7CiAK
ICAgICB2b2lkIGxvYWQ4KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAg
ewotICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICFhZGRyZXNzLnNjYWxlKSB7Ci0gICAg
ICAgICAgICBtX2Fzc2VtYmxlci5sZHJiKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRl
eCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRyZXNzLnNjYWxlKTsKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgaWYgKCFhZGRyZXNzLnNjYWxlKSB7CisgICAgICAgICAgICBpZiAo
YXV0byBiYXNlR1BSID0gdHJ5Rm9sZEJhc2VBbmRPZmZzZXRQYXJ0KGFkZHJlc3MpKSB7CisgICAg
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRyYihkZXN0LCBiYXNlR1BSLnZhbHVlKCksIGFkZHJl
c3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAg
c2lnbkV4dGVuZDMyVG9QdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgZ2V0Q2FjaGVk
TWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwpAQCAtMTY4NSw5ICsxNjk1LDEx
IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyQVJNNjQgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2Vt
YmxlcjxBc3NlbWJsZXI+IHsKIAogICAgIHZvaWQgbG9hZDhTaWduZWRFeHRlbmRUbzMyKEJhc2VJ
bmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBpZiAoIWFkZHJl
c3Mub2Zmc2V0ICYmICFhZGRyZXNzLnNjYWxlKSB7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5s
ZHJzYjwzMj4oZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBpbmRleEV4dGVuZFR5
cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBpZiAoIWFkZHJlc3Muc2NhbGUpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGJhc2VHUFIgPSB0
cnlGb2xkQmFzZUFuZE9mZnNldFBhcnQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5sZHJzYjwzMj4oZGVzdCwgYmFzZUdQUi52YWx1ZSgpLCBhZGRyZXNzLmluZGV4LCBp
bmRleEV4dGVuZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHNpZ25FeHRlbmQz
MlRvUHRyKFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIGdldENhY2hlZE1lbW9yeVRlbXBS
ZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKQEAgLTE3MjQsOSArMTczNiwxMSBAQCBjbGFzcyBN
YWNyb0Fzc2VtYmxlckFSTTY0IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1i
bGVyPiB7CiAKICAgICB2b2lkIHN0b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRy
ZXNzKQogICAgIHsKLSAgICAgICAgaWYgKCFhZGRyZXNzLm9mZnNldCAmJiAoIWFkZHJlc3Muc2Nh
bGUgfHwgYWRkcmVzcy5zY2FsZSA9PSAzKSkgewotICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3Ry
PDY0PihzcmMsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFk
ZHJlc3MpLCBhZGRyZXNzLnNjYWxlKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYg
KCFhZGRyZXNzLnNjYWxlIHx8IGFkZHJlc3Muc2NhbGUgPT0gMykgeworICAgICAgICAgICAgaWYg
KGF1dG8gYmFzZUdQUiA9IHRyeUZvbGRCYXNlQW5kT2Zmc2V0UGFydChhZGRyZXNzKSkgeworICAg
ICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBiYXNlR1BSLnZhbHVlKCksIGFk
ZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAg
ICAgc2lnbkV4dGVuZDMyVG9QdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgZ2V0Q2Fj
aGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwpAQCAtMTgzMSw5ICsxODQ1
LDExIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyQVJNNjQgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjxBc3NlbWJsZXI+IHsKIAogICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywg
QmFzZUluZGV4IGFkZHJlc3MpCiAgICAgewotICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYm
ICghYWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDIpKSB7Ci0gICAgICAgICAgICBt
X2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBpbmRl
eEV4dGVuZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOwotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBpZiAoIWFkZHJlc3Muc2NhbGUgfHwgYWRkcmVzcy5zY2FsZSA9PSAyKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byBiYXNlR1BSID0gdHJ5Rm9sZEJhc2VBbmRPZmZzZXRQYXJ0KGFk
ZHJlc3MpKSB7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RyPDMyPihzcmMsIGJhc2VH
UFIudmFsdWUoKSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRy
ZXNzLnNjYWxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIAogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihUcnVzdGVkSW1tMzIoYWRkcmVzcy5v
ZmZzZXQpLCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CkBA
IC0xODk4LDkgKzE5MTQsMTEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk02NCA6IHB1YmxpYyBB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlcj4gewogCiAgICAgdm9pZCBzdG9yZTE2KFJl
Z2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKICAgICB7Ci0gICAgICAgIGlmICghYWRk
cmVzcy5vZmZzZXQgJiYgKCFhZGRyZXNzLnNjYWxlIHx8IGFkZHJlc3Muc2NhbGUgPT0gMSkpIHsK
LSAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0cmgoc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
aW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7Ci0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmICghYWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxl
ID09IDEpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGJhc2VHUFIgPSB0cnlGb2xkQmFzZUFuZE9m
ZnNldFBhcnQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHJoKHNy
YywgYmFzZUdQUi52YWx1ZSgpLCBhZGRyZXNzLmluZGV4LCBpbmRleEV4dGVuZFR5cGUoYWRkcmVz
cyksIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogCiAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKFRydXN0ZWRJbW0zMihh
ZGRyZXNzLm9mZnNldCksIGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0
ZSgpKTsKQEAgLTE5MjYsOSArMTk0NCwxMSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTTY0IDog
cHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7CiAKICAgICB2b2lkIHN0
b3JlOChSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCiAgICAgewotICAgICAgICBp
ZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICFhZGRyZXNzLnNjYWxlKSB7Ci0gICAgICAgICAgICBtX2Fz
c2VtYmxlci5zdHJiKHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBpbmRleEV4dGVu
ZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOwotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBpZiAoIWFkZHJlc3Muc2NhbGUpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGJhc2VHUFIg
PSB0cnlGb2xkQmFzZUFuZE9mZnNldFBhcnQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBt
X2Fzc2VtYmxlci5zdHJiKHNyYywgYmFzZUdQUi52YWx1ZSgpLCBhZGRyZXNzLmluZGV4LCBpbmRl
eEV4dGVuZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHNpZ25FeHRlbmQzMlRv
UHRyKFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIGdldENhY2hlZE1lbW9yeVRlbXBSZWdp
c3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKQEAgLTIyMzksOSArMjI1OSwxMSBAQCBjbGFzcyBNYWNy
b0Fzc2VtYmxlckFSTTY0IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVy
PiB7CiAKICAgICB2b2lkIGxvYWREb3VibGUoQmFzZUluZGV4IGFkZHJlc3MsIEZQUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKLSAgICAgICAgaWYgKCFhZGRyZXNzLm9mZnNldCAmJiAoIWFkZHJlc3Mu
c2NhbGUgfHwgYWRkcmVzcy5zY2FsZSA9PSAzKSkgewotICAgICAgICAgICAgbV9hc3NlbWJsZXIu
bGRyPDY0PihkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlw
ZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmICghYWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDMpIHsKKyAgICAgICAgICAg
IGlmIChhdXRvIGJhc2VHUFIgPSB0cnlGb2xkQmFzZUFuZE9mZnNldFBhcnQoYWRkcmVzcykpIHsK
KyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3QsIGJhc2VHUFIudmFsdWUo
KSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRyZXNzLnNjYWxl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihUcnVzdGVkSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBn
ZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CkBAIC0yMjY2LDkg
KzIyODgsMTEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk02NCA6IHB1YmxpYyBBYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyPEFzc2VtYmxlcj4gewogCiAgICAgdm9pZCBsb2FkRmxvYXQoQmFzZUluZGV4
IGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgaWYgKCFhZGRyZXNz
Lm9mZnNldCAmJiAoIWFkZHJlc3Muc2NhbGUgfHwgYWRkcmVzcy5zY2FsZSA9PSAyKSkgewotICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubGRyPDMyPihkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
aW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7Ci0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmICghYWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxl
ID09IDIpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGJhc2VHUFIgPSB0cnlGb2xkQmFzZUFuZE9m
ZnNldFBhcnQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+
KGRlc3QsIGJhc2VHUFIudmFsdWUoKSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFk
ZHJlc3MpLCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihUcnVzdGVkSW1t
MzIoYWRkcmVzcy5vZmZzZXQpLCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFs
aWRhdGUoKSk7CkBAIC0yNTIzLDkgKzI1NDcsMTEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk02
NCA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlcj4gewogCiAgICAgdm9p
ZCBzdG9yZURvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKICAgICB7
Ci0gICAgICAgIGlmICghYWRkcmVzcy5vZmZzZXQgJiYgKCFhZGRyZXNzLnNjYWxlIHx8IGFkZHJl
c3Muc2NhbGUgPT0gMykpIHsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBh
ZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRk
cmVzcy5zY2FsZSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghYWRkcmVzcy5z
Y2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDMpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGJhc2VH
UFIgPSB0cnlGb2xkQmFzZUFuZE9mZnNldFBhcnQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zdHI8NjQ+KHNyYywgYmFzZUdQUi52YWx1ZSgpLCBhZGRyZXNzLmluZGV4
LCBpbmRleEV4dGVuZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHNpZ25FeHRl
bmQzMlRvUHRyKFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIGdldENhY2hlZE1lbW9yeVRl
bXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKQEAgLTI1NDQsOSArMjU3MCwxMSBAQCBjbGFz
cyBNYWNyb0Fzc2VtYmxlckFSTTY0IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNz
ZW1ibGVyPiB7CiAgICAgCiAgICAgdm9pZCBzdG9yZUZsb2F0KEZQUmVnaXN0ZXJJRCBzcmMsIEJh
c2VJbmRleCBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgaWYgKCFhZGRyZXNzLm9mZnNldCAmJiAo
IWFkZHJlc3Muc2NhbGUgfHwgYWRkcmVzcy5zY2FsZSA9PSAyKSkgewotICAgICAgICAgICAgbV9h
c3NlbWJsZXIuc3RyPDMyPihzcmMsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgaW5kZXhF
eHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRyZXNzLnNjYWxlKTsKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKCFhZGRyZXNzLnNjYWxlIHx8IGFkZHJlc3Muc2NhbGUgPT0gMikgeworICAg
ICAgICAgICAgaWYgKGF1dG8gYmFzZUdQUiA9IHRyeUZvbGRCYXNlQW5kT2Zmc2V0UGFydChhZGRy
ZXNzKSkgeworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0cjwzMj4oc3JjLCBiYXNlR1BS
LnZhbHVlKCksIGFkZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVz
cy5zY2FsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zm
c2V0KSwgZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwpAQCAt
NDc5OSw2ICs0ODI3LDIxIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyQVJNNjQgOiBwdWJsaWMgQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXI+IHsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxSZWdpc3RlcklEPiB0cnlGb2xk
QmFzZUFuZE9mZnNldFBhcnQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAgICBpZiAo
IWFkZHJlc3Mub2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3MuYmFzZTsKKyAgICAg
ICAgaWYgKGlzVUludDEyKGFkZHJlc3Mub2Zmc2V0KSkgeworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkPDY0PihnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSwg
YWRkcmVzcy5iYXNlLCBVSW50MTIoYWRkcmVzcy5vZmZzZXQpKTsKKyAgICAgICAgICAgIHJldHVy
biBtZW1vcnlUZW1wUmVnaXN0ZXI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzVUludDEyKC1h
ZGRyZXNzLm9mZnNldCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN1Yjw2ND4oZ2V0Q2Fj
aGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCksIGFkZHJlc3MuYmFzZSwgVUlu
dDEyKC1hZGRyZXNzLm9mZnNldCkpOworICAgICAgICAgICAgcmV0dXJuIG1lbW9yeVRlbXBSZWdp
c3RlcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0KICAg
ICAKICAgICB0ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CiAgICAgdm9pZCBsb2FkTGluayhSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL3Rlc3RtYXNtLmNwcAppbmRleCBmMjJiZmZjZTE1NTRiMDJjMjI2YzIxNDkyYWIwNjdiYWIz
OGM0MGI1Li4wNWRjY2QzZjAzZWQ3OTY4ZGI2OGJiMzc0MjE5OWI5ZjhiMGJlMTg2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtNDIwOSw2ICs0
MjA5LDMzNiBAQCB2b2lkIHRlc3RNb3ZlRG91YmxlQ29uZGl0aW9uYWxseTY0KCkKICNlbmRpZgog
fQogCit2b2lkIHRlc3RMb2FkQmFzZUluZGV4KCkKK3sKKyNpZiBDUFUoQVJNNjQpIHx8IENQVShY
ODZfNjQpCisgICAgLy8gbG9hZDY0CisgICAgeworICAgICAgICBhdXRvIHRlc3QgPSBjb21waWxl
KFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9n
dWUoaml0KTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgo
R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVscGVy
czo6VGltZXNFaWdodCwgLTgpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAg
ICAgICB9KTsKKyAgICAgICAgdWludDY0X3QgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90Pih0ZXN0LCBhcnJheSwgc3RhdGljX2Nh
c3Q8VUNQVVJlZ2lzdGVyPigzKSksIDMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gdGVz
dCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVu
Y3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6
OkJhc2VJbmRleChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwg
Q0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCA4KSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwor
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5y
ZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHVpbnQ2NF90IGFycmF5W10gPSB7IDEsIDIsIDMs
IDQsIDUsIH07CisgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50NjRfdD4odGVzdCwgYXJyYXks
IHN0YXRpY19jYXN0PFVDUFVSZWdpc3Rlcj4oMykpLCA1KTsKKyAgICB9CisjZW5kaWYKKworICAg
IC8vIGxvYWQzMgorICAgIHsKKyAgICAgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0oQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7Cisg
ICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRm91
ciwgLTQpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBlbWl0RnVuY3Rp
b25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAg
ICAgICAgdWludDMyX3QgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPHVpbnQzMl90Pih0ZXN0LCBhcnJheSwgc3RhdGljX2Nhc3Q8VUNQVVJlZ2lz
dGVyPigzKSksIDMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUo
Wz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1
ZShqaXQpOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChH
UFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJz
OjpUaW1lc0ZvdXIsIDQpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBl
bWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAg
ICB9KTsKKyAgICAgICAgdWludDMyX3QgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQzMl90Pih0ZXN0LCBhcnJheSwgc3RhdGljX2Nhc3Q8
VUNQVVJlZ2lzdGVyPigzKSksIDUpOworICAgIH0KKworICAgIC8vIGxvYWQxNgorICAgIHsKKyAg
ICAgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0oQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQubG9hZDE2
KENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzVHdvLCAtMiksIEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAg
ICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICB1aW50MTZfdCBhcnJheVtd
ID0geyAxLCAyLCAzLCA0LCA1LCB9OworICAgICAgICBDSEVDS19FUShpbnZva2U8dWludDMyX3Q+
KHRlc3QsIGFycmF5LCBzdGF0aWNfY2FzdDxVQ1BVUmVnaXN0ZXI+KDMpKSwgMyk7CisgICAgfQor
ICAgIHsKKyAgICAgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0oQ0NhbGxIZWxwZXJzJiBqaXQp
IHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisgICAgICAgICAgICBq
aXQubG9hZDE2KENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzVHdvLCAyKSwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0
KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHVpbnQxNl90
IGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIHN0YXRpY19jYXN0PHVpbnQxNl90PigtMSksIH07Cisg
ICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50MzJfdD4odGVzdCwgYXJyYXksIHN0YXRpY19jYXN0
PFVDUFVSZWdpc3Rlcj4oMykpLCAweGZmZmYpOworICAgIH0KKworICAgIC8vIGxvYWQxNlNpZ25l
ZEV4dGVuZFRvMzIKKyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOwor
ICAgICAgICAgICAgaml0LmxvYWQxNlNpZ25lZEV4dGVuZFRvMzIoQ0NhbGxIZWxwZXJzOjpCYXNl
SW5kZXgoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxs
SGVscGVyczo6VGltZXNUd28sIC0yKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHVpbnQxNl90IGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIDUs
IH07CisgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50MzJfdD4odGVzdCwgYXJyYXksIHN0YXRp
Y19jYXN0PFVDUFVSZWdpc3Rlcj4oMykpLCAzKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRv
IHRlc3QgPSBjb21waWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5sb2FkMTZTaWduZWRFeHRl
bmRUbzMyKENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzVHdvLCAyKSwgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsK
KyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHVpbnQxNl90IGFy
cmF5W10gPSB7IDEsIDIsIDMsIDQsIHN0YXRpY19jYXN0PHVpbnQxNl90PigtMSksIH07CisgICAg
ICAgIENIRUNLX0VRKGludm9rZTx1aW50MzJfdD4odGVzdCwgYXJyYXksIHN0YXRpY19jYXN0PFVD
UFVSZWdpc3Rlcj4oMykpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEpKTsKKyAgICB9CisKKyAg
ICAvLyBsb2FkOAorICAgIHsKKyAgICAgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0oQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7Cisg
ICAgICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6VGltZXNPbmUs
IC0xKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHVpbnQ4X3QgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsKKyAgICAgICAgQ0hFQ0tf
RVEoaW52b2tlPHVpbnQzMl90Pih0ZXN0LCBhcnJheSwgc3RhdGljX2Nhc3Q8VUNQVVJlZ2lzdGVy
PigzKSksIDMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1d
KENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShq
aXQpOworICAgICAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzT25lLCAxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7
CisgICAgICAgIHVpbnQ4X3QgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oLTEpLCB9OworICAgICAgICBDSEVDS19FUShpbnZva2U8dWludDMyX3Q+KHRlc3QsIGFy
cmF5LCBzdGF0aWNfY2FzdDxVQ1BVUmVnaXN0ZXI+KDMpKSwgMHhmZik7CisgICAgfQorCisgICAg
Ly8gbG9hZDhTaWduZWRFeHRlbmRUbzMyCisgICAgeworICAgICAgICBhdXRvIHRlc3QgPSBjb21w
aWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5sb2FkOFNpZ25lZEV4dGVuZFRvMzIoQ0NhbGxI
ZWxwZXJzOjpCYXNlSW5kZXgoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIENDYWxsSGVscGVyczo6VGltZXNPbmUsIC0xKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAg
IGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHVpbnQ4X3QgYXJyYXlbXSA9IHsgMSwg
MiwgMywgNCwgNSwgfTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQzMl90Pih0ZXN0LCBh
cnJheSwgc3RhdGljX2Nhc3Q8VUNQVVJlZ2lzdGVyPigzKSksIDMpOworICAgIH0KKyAgICB7Cisg
ICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LmxvYWQ4
U2lnbmVkRXh0ZW5kVG8zMihDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjphcmd1bWVu
dEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSwgMSks
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICB1
aW50OF90IGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KC0xKSwg
fTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQzMl90Pih0ZXN0LCBhcnJheSwgc3RhdGlj
X2Nhc3Q8VUNQVVJlZ2lzdGVyPigzKSksIHN0YXRpY19jYXN0PHVpbnQzMl90PigtMSkpOworICAg
IH0KKworICAgIC8vIGxvYWREb3VibGUKKyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBp
bGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9s
b2d1ZShqaXQpOworICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0NhbGxIZWxwZXJzOjpCYXNl
SW5kZXgoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxs
SGVscGVyczo6VGltZXNFaWdodCwgLTgpLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgp
OworICAgICAgICB9KTsKKyAgICAgICAgZG91YmxlIGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIDUs
IH07CisgICAgICAgIENIRUNLX0VRKGludm9rZTxkb3VibGU+KHRlc3QsIGFycmF5LCBzdGF0aWNf
Y2FzdDxVQ1BVUmVnaXN0ZXI+KDMpKSwgMy4wKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRv
IHRlc3QgPSBjb21waWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKENDYWxs
SGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIDgpLCBGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUik7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAg
ICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgZG91YmxlIGFycmF5W10gPSB7IDEs
IDIsIDMsIDQsIDUsIH07CisgICAgICAgIENIRUNLX0VRKGludm9rZTxkb3VibGU+KHRlc3QsIGFy
cmF5LCBzdGF0aWNfY2FzdDxVQ1BVUmVnaXN0ZXI+KDMpKSwgNS4wKTsKKyAgICB9CisKKyAgICAv
LyBsb2FkRmxvYXQKKyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOwor
ICAgICAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChHUFJJbmZv
Ojphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUaW1l
c0ZvdXIsIC00KSwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7
CisgICAgICAgIGZsb2F0IGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIDUsIH07CisgICAgICAgIENI
RUNLX0VRKGludm9rZTxmbG9hdD4odGVzdCwgYXJyYXksIHN0YXRpY19jYXN0PFVDUFVSZWdpc3Rl
cj4oMykpLCAzLjApOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUo
Wz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1
ZShqaXQpOworICAgICAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OkJhc2VJbmRl
eChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxw
ZXJzOjpUaW1lc0ZvdXIsIDQpLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAg
ICAgICB9KTsKKyAgICAgICAgZmxvYXQgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsKKyAg
ICAgICAgQ0hFQ0tfRVEoaW52b2tlPGZsb2F0Pih0ZXN0LCBhcnJheSwgc3RhdGljX2Nhc3Q8VUNQ
VVJlZ2lzdGVyPigzKSksIDUuMCk7CisgICAgfQorfQorCit2b2lkIHRlc3RTdG9yZUJhc2VJbmRl
eCgpCit7CisjaWYgQ1BVKEFSTTY0KSB8fCBDUFUoWDg2XzY0KQorICAgIC8vIHN0b3JlNjQKKyAg
ICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0
LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChH
UFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJz
OjpUaW1lc0VpZ2h0LCAtOCkpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0
KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHVpbnQ2NF90
IGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIDUsIH07CisgICAgICAgIGludm9rZTx2b2lkPih0ZXN0
LCBhcnJheSwgMywgNDIpOworICAgICAgICBDSEVDS19FUShhcnJheVsyXSwgNDIpOworICAgIH0K
KyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0
KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAg
aml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRl
eChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxw
ZXJzOjpUaW1lc0VpZ2h0LCA4KSk7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShq
aXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgdWludDY0
X3QgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KHRl
c3QsIGFycmF5LCAzLCA0Mik7CisgICAgICAgIENIRUNLX0VRKGFycmF5WzRdLCA0Mik7CisgICAg
fQorI2VuZGlmCisKKyAgICAvLyBzdG9yZTMyCisgICAgeworICAgICAgICBhdXRvIHRlc3QgPSBj
b21waWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQUkluZm86OmFyZ3VtZW50
R1BSMiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6VGltZXNGb3VyLCAtNCkpOworICAgICAg
ICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHVpbnQzMl90IGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIDUs
IH07CisgICAgICAgIGludm9rZTx2b2lkPih0ZXN0LCBhcnJheSwgMywgNDIpOworICAgICAgICBD
SEVDS19FUShhcnJheVsyXSwgNDIpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9
IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rp
b25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnN0b3JlMzIoR1BSSW5mbzo6YXJndW1l
bnRHUFIyLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUaW1lc0ZvdXIsIDQpKTsKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7
CisgICAgICAgIH0pOworICAgICAgICB1aW50MzJfdCBhcnJheVtdID0geyAxLCAyLCAzLCA0LCA1
LCB9OworICAgICAgICBpbnZva2U8dm9pZD4odGVzdCwgYXJyYXksIDMsIDQyKTsKKyAgICAgICAg
Q0hFQ0tfRVEoYXJyYXlbNF0sIDQyKTsKKyAgICB9CisKKyAgICAvLyBzdG9yZTE2CisgICAgewor
ICAgICAgICBhdXRvIHRlc3QgPSBjb21waWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5zdG9y
ZTE2KEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoR1BSSW5m
bzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6VGlt
ZXNUd28sIC0yKSk7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAg
ICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgdWludDE2X3QgYXJyYXlb
XSA9IHsgMSwgMiwgMywgNCwgNSwgfTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KHRlc3QsIGFycmF5
LCAzLCA0Mik7CisgICAgICAgIENIRUNLX0VRKGFycmF5WzJdLCA0Mik7CisgICAgfQorICAgIHsK
KyAgICAgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0oQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQuc3Rv
cmUxNihHUFJJbmZvOjphcmd1bWVudEdQUjIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzVHdvLCAyKSk7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAg
ICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgdWludDE2X3QgYXJyYXlb
XSA9IHsgMSwgMiwgMywgNCwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KC0xKSwgfTsKKyAgICAgICAg
aW52b2tlPHZvaWQ+KHRlc3QsIGFycmF5LCAzLCA0Mik7CisgICAgICAgIENIRUNLX0VRKGFycmF5
WzRdLCA0Mik7CisgICAgfQorCisgICAgLy8gc3RvcmU4CisgICAgeworICAgICAgICBhdXRvIHRl
c3QgPSBjb21waWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5zdG9yZTgoR1BSSW5mbzo6YXJn
dW1lbnRHUFIyLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjphcmd1bWVudEdQUjAs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUaW1lc09uZSwgLTEpKTsKKyAg
ICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0
KCk7CisgICAgICAgIH0pOworICAgICAgICB1aW50OF90IGFycmF5W10gPSB7IDEsIDIsIDMsIDQs
IDUsIH07CisgICAgICAgIGludm9rZTx2b2lkPih0ZXN0LCBhcnJheSwgMywgNDIpOworICAgICAg
ICBDSEVDS19FUShhcnJheVsyXSwgNDIpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gdGVz
dCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVu
Y3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnN0b3JlOChHUFJJbmZvOjphcmd1
bWVudEdQUjIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzT25lLCAxKSk7CisgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgp
OworICAgICAgICB9KTsKKyAgICAgICAgdWludDhfdCBhcnJheVtdID0geyAxLCAyLCAzLCA0LCBz
dGF0aWNfY2FzdDx1aW50OF90PigtMSksIH07CisgICAgICAgIGludm9rZTx2b2lkPih0ZXN0LCBh
cnJheSwgMywgNDIpOworICAgICAgICBDSEVDS19FUShhcnJheVs0XSwgNDIpOworICAgIH0KKwor
ICAgIC8vIHN0b3JlRG91YmxlCisgICAgeworICAgICAgICBhdXRvIHRlc3QgPSBjb21waWxlKFs9
XShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
aml0KTsKKyAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjphcmd1bWVudEZQUjAs
IENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIC04KSk7CisgICAgICAgICAg
ICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAg
ICAgICB9KTsKKyAgICAgICAgZG91YmxlIGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIDUsIH07Cisg
ICAgICAgIGludm9rZTx2b2lkPih0ZXN0LCBhcnJheSwgc3RhdGljX2Nhc3Q8VUNQVVJlZ2lzdGVy
PigzKSwgNDIuMCk7CisgICAgICAgIENIRUNLX0VRKGFycmF5WzJdLCA0Mi4wKTsKKyAgICB9Cisg
ICAgeworICAgICAgICBhdXRvIHRlc3QgPSBjb21waWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkg
eworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGpp
dC5zdG9yZURvdWJsZShGUFJJbmZvOjphcmd1bWVudEZQUjAsIENDYWxsSGVscGVyczo6QmFzZUlu
ZGV4KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhl
bHBlcnM6OlRpbWVzRWlnaHQsIDgpKTsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICBkb3Vi
bGUgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KHRl
c3QsIGFycmF5LCBzdGF0aWNfY2FzdDxVQ1BVUmVnaXN0ZXI+KDMpLCA0Mi4wKTsKKyAgICAgICAg
Q0hFQ0tfRVEoYXJyYXlbNF0sIDQyLjApOworICAgIH0KKworICAgIC8vIHN0b3JlRmxvYXQKKyAg
ICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7
CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0
LnN0b3JlRmxvYXQoRlBSSW5mbzo6YXJndW1lbnRGUFIwLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRl
eChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxw
ZXJzOjpUaW1lc0ZvdXIsIC00KSk7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShq
aXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgZmxvYXQg
YXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KHRlc3Qs
IGFycmF5LCBzdGF0aWNfY2FzdDxVQ1BVUmVnaXN0ZXI+KDMpLCA0Mi4wZik7CisgICAgICAgIENI
RUNLX0VRKGFycmF5WzJdLCA0Mi4wZik7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byB0ZXN0
ID0gY29tcGlsZShbPV0oQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5j
dGlvblByb2xvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQuc3RvcmVGbG9hdChGUFJJbmZvOjph
cmd1bWVudEZQUjAsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86OmFyZ3VtZW50R1BS
MCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRm91ciwgNCkpOwor
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5y
ZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGZsb2F0IGFycmF5W10gPSB7IDEsIDIsIDMsIDQs
IDUsIH07CisgICAgICAgIGludm9rZTx2b2lkPih0ZXN0LCBhcnJheSwgc3RhdGljX2Nhc3Q8VUNQ
VVJlZ2lzdGVyPigzKSwgNDIuMGYpOworICAgICAgICBDSEVDS19FUShhcnJheVs0XSwgNDIuMGYp
OworICAgIH0KK30KKwogc3RhdGljIHZvaWQgdGVzdENhZ2VQcmVzZXJ2ZXNQQUNGYWlsdXJlQml0
KCkKIHsKICNpZiBHSUdBQ0FHRV9FTkFCTEVECkBAIC00NTIzLDYgKzQ4NTMsOCBAQCB2b2lkIHJ1
bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVBRF9TQUZFVFlfQU5BTFlTSVMK
ICAgICBSVU4odGVzdEJ5dGVTd2FwKCkpOwogICAgIFJVTih0ZXN0TW92ZURvdWJsZUNvbmRpdGlv
bmFsbHkzMigpKTsKICAgICBSVU4odGVzdE1vdmVEb3VibGVDb25kaXRpb25hbGx5NjQoKSk7Cisg
ICAgUlVOKHRlc3RMb2FkQmFzZUluZGV4KCkpOworICAgIFJVTih0ZXN0U3RvcmVCYXNlSW5kZXgo
KSk7CiAKICAgICBSVU4odGVzdENhZ2VQcmVzZXJ2ZXNQQUNGYWlsdXJlQml0KCkpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434434</attachid>
            <date>2021-07-28 10:32:09 -0700</date>
            <delta_ts>2021-07-28 13:21:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228543-20210728103208.patch</filename>
            <type>text/plain</type>
            <size>28225</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZGQ5ZDNmNTYxNTQ1ZjhjNWU4NzdjMjQwYjQ4NGFjNzAzYWIyZjlkLi41YmYzY2NhYTQ0N2YzZDg1
YTY1ZWEwZjQyZjAyYzY1M2VjYzIxY2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAyMS0wNy0yOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIGxvYWQvc3RvcmUgd2l0aCBCYXNlSW5kZXggaXMgaW5lZmZpY2ll
bnQgaW4gQVJNNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyODU0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdoaWxlIHdlIGFyZSBmcmVxdWVudGx5IHVzaW5nIGxvYWQgKyBCYXNlSW5kZXggKHdpdGgg
b2Zmc2V0KSBpbiBSZWdFeHAgY29kZSwKKyAgICAgICAgd2UgZW1pdCAzIGluc3RydWN0aW9ucyBp
biBBUk02NC4gVGhpcyBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gMiBpbnN0cnVjdGlvbnMuCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGF0IHBhdGggdG8gbWFrZSBnZW5lcmF0ZWQgY29kZSB0aWdo
dCBpbiBBUk02NCBSZWdFeHAuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkNjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMzIpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTY0Ojpsb2FkMTYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTTY0Ojpsb2FkMTZTaWduZWRFeHRlbmRUbzMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk02NDo6bG9hZDgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojps
b2FkOFNpZ25lZEV4dGVuZFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0
OjpzdG9yZTY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3RvcmUzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6OnN0b3JlMTYpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdG9yZTgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlckFSTTY0Ojpsb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6bG9hZEZsb2F0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6c3Rv
cmVEb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpzdG9yZUZsb2F0
KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6dHJ5Rm9sZEJhc2VBbmRPZmZz
ZXRQYXJ0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20uY3BwOgorICAgICAgICAoSlND
Ojp0ZXN0TG9hZEJhc2VJbmRleCk6CisgICAgICAgIChKU0M6OnRlc3RTdG9yZUJhc2VJbmRleCk6
CisKIDIwMjEtMDctMjcgIFBhdHJpY2sgQW5nbGUgIDxwYW5nbGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IFtDb2NvYV0gIlJlbW90ZUluc3BlY3RvciBYUEMgY29ubmVjdGlv
biB0byByZWxheSBmYWlsZWQuIiBtZXNzYWdlcyBhcmUgY29uZnVzaW5nIGluIFN0ZEVycgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
NjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZkLi4yOTZl
ODhmOWI1NDYyYzRhZjdkMWY0NzQwZGM4MmJiYWViNTZmMDQwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtMTQz
MCw5ICsxNDMwLDExIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyQVJNNjQgOiBwdWJsaWMgQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXI+IHsKIAogICAgIHZvaWQgbG9hZDY0KEJhc2VJbmRl
eCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBpZiAoIWFkZHJlc3Mu
b2Zmc2V0ICYmICghYWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDMpKSB7Ci0gICAg
ICAgICAgICBtX2Fzc2VtYmxlci5sZHI8NjQ+KGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRyZXNzLnNjYWxlKTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKGFkZHJlc3Muc2NhbGUgPT0gVGltZXNPbmUgfHwgYWRk
cmVzcy5zY2FsZSA9PSBUaW1lc0VpZ2h0KSB7CisgICAgICAgICAgICBpZiAoYXV0byBiYXNlR1BS
ID0gdHJ5Rm9sZEJhc2VBbmRPZmZzZXRQYXJ0KGFkZHJlc3MpKSB7CisgICAgICAgICAgICAgICAg
bV9hc3NlbWJsZXIubGRyPDY0PihkZXN0LCBiYXNlR1BSLnZhbHVlKCksIGFkZHJlc3MuaW5kZXgs
IGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgc2lnbkV4dGVu
ZDMyVG9QdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgZ2V0Q2FjaGVkTWVtb3J5VGVt
cFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwpAQCAtMTUyOSw5ICsxNTMxLDExIEBAIGNsYXNz
IE1hY3JvQXNzZW1ibGVyQVJNNjQgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3Nl
bWJsZXI+IHsKIAogICAgIHZvaWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewotICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICghYWRkcmVzcy5z
Y2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDIpKSB7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5s
ZHI8MzI+KGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBl
KGFkZHJlc3MpLCBhZGRyZXNzLnNjYWxlKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
aWYgKGFkZHJlc3Muc2NhbGUgPT0gVGltZXNPbmUgfHwgYWRkcmVzcy5zY2FsZSA9PSBUaW1lc0Zv
dXIpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGJhc2VHUFIgPSB0cnlGb2xkQmFzZUFuZE9mZnNl
dFBhcnQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRl
c3QsIGJhc2VHUFIudmFsdWUoKSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJl
c3MpLCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihUcnVzdGVkSW1tMzIo
YWRkcmVzcy5vZmZzZXQpLCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRh
dGUoKSk7CkBAIC0xNTc2LDkgKzE1ODAsMTEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk02NCA6
IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlcj4gewogICAgIAogICAgIHZv
aWQgbG9hZDE2KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAg
ICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICghYWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNj
YWxlID09IDEpKSB7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHJoKGRlc3QsIGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRyZXNzLnNj
YWxlKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGFkZHJlc3Muc2NhbGUgPT0g
VGltZXNPbmUgfHwgYWRkcmVzcy5zY2FsZSA9PSBUaW1lc1R3bykgeworICAgICAgICAgICAgaWYg
KGF1dG8gYmFzZUdQUiA9IHRyeUZvbGRCYXNlQW5kT2Zmc2V0UGFydChhZGRyZXNzKSkgeworICAg
ICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcmgoZGVzdCwgYmFzZUdQUi52YWx1ZSgpLCBhZGRy
ZXNzLmluZGV4LCBpbmRleEV4dGVuZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAg
IHNpZ25FeHRlbmQzMlRvUHRyKFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIGdldENhY2hl
ZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKQEAgLTE2MjAsOSArMTYyNiwx
MSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTTY0IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3Nl
bWJsZXI8QXNzZW1ibGVyPiB7CiAKICAgICB2b2lkIGxvYWQxNlNpZ25lZEV4dGVuZFRvMzIoQmFz
ZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIGlmICghYWRk
cmVzcy5vZmZzZXQgJiYgKCFhZGRyZXNzLnNjYWxlIHx8IGFkZHJlc3Muc2NhbGUgPT0gMSkpIHsK
LSAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcnNoPDMyPihkZXN0LCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7Ci0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChhZGRyZXNzLnNjYWxlID09IFRpbWVzT25l
IHx8IGFkZHJlc3Muc2NhbGUgPT0gVGltZXNUd28pIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGJh
c2VHUFIgPSB0cnlGb2xkQmFzZUFuZE9mZnNldFBhcnQoYWRkcmVzcykpIHsKKyAgICAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5sZHJzaDwzMj4oZGVzdCwgYmFzZUdQUi52YWx1ZSgpLCBhZGRyZXNz
LmluZGV4LCBpbmRleEV4dGVuZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHNp
Z25FeHRlbmQzMlRvUHRyKFRydXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIGdldENhY2hlZE1l
bW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKQEAgLTE2NTEsOSArMTY1OSwxMSBA
QCBjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTTY0IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXI8QXNzZW1ibGVyPiB7CiAKICAgICB2b2lkIGxvYWQ4KEJhc2VJbmRleCBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICFhZGRy
ZXNzLnNjYWxlKSB7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHJiKGRlc3QsIGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRyZXNzLnNj
YWxlKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGFkZHJlc3Muc2NhbGUgPT0g
VGltZXNPbmUpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGJhc2VHUFIgPSB0cnlGb2xkQmFzZUFu
ZE9mZnNldFBhcnQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHJi
KGRlc3QsIGJhc2VHUFIudmFsdWUoKSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFk
ZHJlc3MpLCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihUcnVzdGVkSW1t
MzIoYWRkcmVzcy5vZmZzZXQpLCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFs
aWRhdGUoKSk7CkBAIC0xNjg1LDkgKzE2OTUsMTEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk02
NCA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlcj4gewogCiAgICAgdm9p
ZCBsb2FkOFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKICAgICB7Ci0gICAgICAgIGlmICghYWRkcmVzcy5vZmZzZXQgJiYgIWFkZHJlc3Muc2NhbGUp
IHsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcnNiPDMyPihkZXN0LCBhZGRyZXNzLmJhc2Us
IGFkZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChhZGRyZXNzLnNjYWxlID09IFRpbWVz
T25lKSB7CisgICAgICAgICAgICBpZiAoYXV0byBiYXNlR1BSID0gdHJ5Rm9sZEJhc2VBbmRPZmZz
ZXRQYXJ0KGFkZHJlc3MpKSB7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRyc2I8MzI+
KGRlc3QsIGJhc2VHUFIudmFsdWUoKSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFk
ZHJlc3MpLCBhZGRyZXNzLnNjYWxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihUcnVzdGVkSW1t
MzIoYWRkcmVzcy5vZmZzZXQpLCBnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFs
aWRhdGUoKSk7CkBAIC0xNzI0LDkgKzE3MzYsMTEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk02
NCA6IHB1YmxpYyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlcj4gewogCiAgICAgdm9p
ZCBzdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKICAgICB7Ci0gICAg
ICAgIGlmICghYWRkcmVzcy5vZmZzZXQgJiYgKCFhZGRyZXNzLnNjYWxlIHx8IGFkZHJlc3Muc2Nh
bGUgPT0gMykpIHsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNz
LmJhc2UsIGFkZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5z
Y2FsZSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChhZGRyZXNzLnNjYWxlID09
IFRpbWVzT25lIHx8IGFkZHJlc3Muc2NhbGUgPT0gVGltZXNFaWdodCkgeworICAgICAgICAgICAg
aWYgKGF1dG8gYmFzZUdQUiA9IHRyeUZvbGRCYXNlQW5kT2Zmc2V0UGFydChhZGRyZXNzKSkgewor
ICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBiYXNlR1BSLnZhbHVlKCks
IGFkZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAg
ICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgZ2V0
Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwpAQCAtMTgzMSw5ICsx
ODQ1LDExIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyQVJNNjQgOiBwdWJsaWMgQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlcjxBc3NlbWJsZXI+IHsKIAogICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNy
YywgQmFzZUluZGV4IGFkZHJlc3MpCiAgICAgewotICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0
ICYmICghYWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDIpKSB7Ci0gICAgICAgICAg
ICBtX2Fzc2VtYmxlci5zdHI8MzI+KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBp
bmRleEV4dGVuZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOwotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAoYWRkcmVzcy5zY2FsZSA9PSBUaW1lc09uZSB8fCBhZGRyZXNzLnNj
YWxlID09IFRpbWVzRm91cikgeworICAgICAgICAgICAgaWYgKGF1dG8gYmFzZUdQUiA9IHRyeUZv
bGRCYXNlQW5kT2Zmc2V0UGFydChhZGRyZXNzKSkgeworICAgICAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnN0cjwzMj4oc3JjLCBiYXNlR1BSLnZhbHVlKCksIGFkZHJlc3MuaW5kZXgsIGluZGV4RXh0
ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIo
VHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVy
SURBbmRJbnZhbGlkYXRlKCkpOwpAQCAtMTg5OCw5ICsxOTE0LDExIEBAIGNsYXNzIE1hY3JvQXNz
ZW1ibGVyQVJNNjQgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXI+IHsK
IAogICAgIHZvaWQgc3RvcmUxNihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCiAg
ICAgewotICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICghYWRkcmVzcy5zY2FsZSB8fCBh
ZGRyZXNzLnNjYWxlID09IDEpKSB7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5zdHJoKHNyYywg
YWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBpbmRleEV4dGVuZFR5cGUoYWRkcmVzcyksIGFk
ZHJlc3Muc2NhbGUpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoYWRkcmVzcy5z
Y2FsZSA9PSBUaW1lc09uZSB8fCBhZGRyZXNzLnNjYWxlID09IFRpbWVzVHdvKSB7CisgICAgICAg
ICAgICBpZiAoYXV0byBiYXNlR1BSID0gdHJ5Rm9sZEJhc2VBbmRPZmZzZXRQYXJ0KGFkZHJlc3Mp
KSB7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RyaChzcmMsIGJhc2VHUFIudmFsdWUo
KSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRyZXNzLnNjYWxl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihUcnVzdGVkSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBn
ZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CkBAIC0xOTI2LDkg
KzE5NDQsMTEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk02NCA6IHB1YmxpYyBBYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyPEFzc2VtYmxlcj4gewogCiAgICAgdm9pZCBzdG9yZTgoUmVnaXN0ZXJJRCBz
cmMsIEJhc2VJbmRleCBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgaWYgKCFhZGRyZXNzLm9mZnNl
dCAmJiAhYWRkcmVzcy5zY2FsZSkgewotICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3RyYihzcmMs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBh
ZGRyZXNzLnNjYWxlKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGFkZHJlc3Mu
c2NhbGUgPT0gVGltZXNPbmUpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGJhc2VHUFIgPSB0cnlG
b2xkQmFzZUFuZE9mZnNldFBhcnQoYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdHJiKHNyYywgYmFzZUdQUi52YWx1ZSgpLCBhZGRyZXNzLmluZGV4LCBpbmRleEV4dGVu
ZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKFRy
dXN0ZWRJbW0zMihhZGRyZXNzLm9mZnNldCksIGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklE
QW5kSW52YWxpZGF0ZSgpKTsKQEAgLTIyMzksOSArMjI1OSwxMSBAQCBjbGFzcyBNYWNyb0Fzc2Vt
YmxlckFSTTY0IDogcHVibGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7CiAK
ICAgICB2b2lkIGxvYWREb3VibGUoQmFzZUluZGV4IGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKLSAgICAgICAgaWYgKCFhZGRyZXNzLm9mZnNldCAmJiAoIWFkZHJlc3Muc2NhbGUg
fHwgYWRkcmVzcy5zY2FsZSA9PSAzKSkgewotICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRyPDY0
PihkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRy
ZXNzKSwgYWRkcmVzcy5zY2FsZSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChh
ZGRyZXNzLnNjYWxlID09IFRpbWVzT25lIHx8IGFkZHJlc3Muc2NhbGUgPT0gVGltZXNFaWdodCkg
eworICAgICAgICAgICAgaWYgKGF1dG8gYmFzZUdQUiA9IHRyeUZvbGRCYXNlQW5kT2Zmc2V0UGFy
dChhZGRyZXNzKSkgeworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcjw2ND4oZGVzdCwg
YmFzZUdQUi52YWx1ZSgpLCBhZGRyZXNzLmluZGV4LCBpbmRleEV4dGVuZFR5cGUoYWRkcmVzcyks
IGFkZHJlc3Muc2NhbGUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCiAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKFRydXN0ZWRJbW0zMihhZGRy
ZXNzLm9mZnNldCksIGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgp
KTsKQEAgLTIyNjYsOSArMjI4OCwxMSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTTY0IDogcHVi
bGljIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI8QXNzZW1ibGVyPiB7CiAKICAgICB2b2lkIGxvYWRG
bG9hdChCYXNlSW5kZXggYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAg
ICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICghYWRkcmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxl
ID09IDIpKSB7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRyZXNzLnNj
YWxlKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGFkZHJlc3Muc2NhbGUgPT0g
VGltZXNPbmUgfHwgYWRkcmVzcy5zY2FsZSA9PSBUaW1lc0ZvdXIpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvIGJhc2VHUFIgPSB0cnlGb2xkQmFzZUFuZE9mZnNldFBhcnQoYWRkcmVzcykpIHsKKyAg
ICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHI8MzI+KGRlc3QsIGJhc2VHUFIudmFsdWUoKSwg
YWRkcmVzcy5pbmRleCwgaW5kZXhFeHRlbmRUeXBlKGFkZHJlc3MpLCBhZGRyZXNzLnNjYWxlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAg
ICAgICBzaWduRXh0ZW5kMzJUb1B0cihUcnVzdGVkSW1tMzIoYWRkcmVzcy5vZmZzZXQpLCBnZXRD
YWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CkBAIC0yNTIzLDkgKzI1
NDcsMTEgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk02NCA6IHB1YmxpYyBBYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyPEFzc2VtYmxlcj4gewogCiAgICAgdm9pZCBzdG9yZURvdWJsZShGUFJlZ2lzdGVy
SUQgc3JjLCBCYXNlSW5kZXggYWRkcmVzcykKICAgICB7Ci0gICAgICAgIGlmICghYWRkcmVzcy5v
ZmZzZXQgJiYgKCFhZGRyZXNzLnNjYWxlIHx8IGFkZHJlc3Muc2NhbGUgPT0gMykpIHsKLSAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5k
ZXgsIGluZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7Ci0gICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmIChhZGRyZXNzLnNjYWxlID09IFRpbWVzT25lIHx8IGFkZHJl
c3Muc2NhbGUgPT0gVGltZXNFaWdodCkgeworICAgICAgICAgICAgaWYgKGF1dG8gYmFzZUdQUiA9
IHRyeUZvbGRCYXNlQW5kT2Zmc2V0UGFydChhZGRyZXNzKSkgeworICAgICAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnN0cjw2ND4oc3JjLCBiYXNlR1BSLnZhbHVlKCksIGFkZHJlc3MuaW5kZXgsIGlu
ZGV4RXh0ZW5kVHlwZShhZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgc2lnbkV4dGVuZDMy
VG9QdHIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgZ2V0Q2FjaGVkTWVtb3J5VGVtcFJl
Z2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOwpAQCAtMjU0NCw5ICsyNTcwLDExIEBAIGNsYXNzIE1h
Y3JvQXNzZW1ibGVyQVJNNjQgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJs
ZXI+IHsKICAgICAKICAgICB2b2lkIHN0b3JlRmxvYXQoRlBSZWdpc3RlcklEIHNyYywgQmFzZUlu
ZGV4IGFkZHJlc3MpCiAgICAgewotICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0ICYmICghYWRk
cmVzcy5zY2FsZSB8fCBhZGRyZXNzLnNjYWxlID09IDIpKSB7Ci0gICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5zdHI8MzI+KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBpbmRleEV4dGVu
ZFR5cGUoYWRkcmVzcyksIGFkZHJlc3Muc2NhbGUpOwotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBpZiAoYWRkcmVzcy5zY2FsZSA9PSBUaW1lc09uZSB8fCBhZGRyZXNzLnNjYWxlID09IFRp
bWVzRm91cikgeworICAgICAgICAgICAgaWYgKGF1dG8gYmFzZUdQUiA9IHRyeUZvbGRCYXNlQW5k
T2Zmc2V0UGFydChhZGRyZXNzKSkgeworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnN0cjwz
Mj4oc3JjLCBiYXNlR1BSLnZhbHVlKCksIGFkZHJlc3MuaW5kZXgsIGluZGV4RXh0ZW5kVHlwZShh
ZGRyZXNzKSwgYWRkcmVzcy5zY2FsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgc2lnbkV4dGVuZDMyVG9QdHIoVHJ1c3RlZElt
bTMyKGFkZHJlc3Mub2Zmc2V0KSwgZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZh
bGlkYXRlKCkpOwpAQCAtNDc5OSw2ICs0ODI3LDIxIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyQVJN
NjQgOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBc3NlbWJsZXI+IHsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxSZWdp
c3RlcklEPiB0cnlGb2xkQmFzZUFuZE9mZnNldFBhcnQoQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBpZiAoIWFkZHJlc3Mub2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGFkZHJl
c3MuYmFzZTsKKyAgICAgICAgaWYgKGlzVUludDEyKGFkZHJlc3Mub2Zmc2V0KSkgeworICAgICAg
ICAgICAgbV9hc3NlbWJsZXIuYWRkPDY0PihnZXRDYWNoZWRNZW1vcnlUZW1wUmVnaXN0ZXJJREFu
ZEludmFsaWRhdGUoKSwgYWRkcmVzcy5iYXNlLCBVSW50MTIoYWRkcmVzcy5vZmZzZXQpKTsKKyAg
ICAgICAgICAgIHJldHVybiBtZW1vcnlUZW1wUmVnaXN0ZXI7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGlzVUludDEyKC1hZGRyZXNzLm9mZnNldCkpIHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVy
LnN1Yjw2ND4oZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCksIGFk
ZHJlc3MuYmFzZSwgVUludDEyKC1hZGRyZXNzLm9mZnNldCkpOworICAgICAgICAgICAgcmV0dXJu
IG1lbW9yeVRlbXBSZWdpc3RlcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OworICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CiAgICAgdm9pZCBs
b2FkTGluayhSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAppbmRleCBmMjJiZmZjZTE1NTRiMDJjMjI2
YzIxNDkyYWIwNjdiYWIzOGM0MGI1Li4wNWRjY2QzZjAzZWQ3OTY4ZGI2OGJiMzc0MjE5OWI5Zjhi
MGJlMTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3Rt
YXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNw
cApAQCAtNDIwOSw2ICs0MjA5LDMzNiBAQCB2b2lkIHRlc3RNb3ZlRG91YmxlQ29uZGl0aW9uYWxs
eTY0KCkKICNlbmRpZgogfQogCit2b2lkIHRlc3RMb2FkQmFzZUluZGV4KCkKK3sKKyNpZiBDUFUo
QVJNNjQpIHx8IENQVShYODZfNjQpCisgICAgLy8gbG9hZDY0CisgICAgeworICAgICAgICBhdXRv
IHRlc3QgPSBjb21waWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxw
ZXJzOjpCYXNlSW5kZXgoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgLTgpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAg
aml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgdWludDY0X3QgYXJyYXlbXSA9IHsgMSwg
MiwgMywgNCwgNSwgfTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQ2NF90Pih0ZXN0LCBh
cnJheSwgc3RhdGljX2Nhc3Q8VUNQVVJlZ2lzdGVyPigzKSksIDMpOworICAgIH0KKyAgICB7Cisg
ICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LmxvYWQ2
NChDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86
OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCA4KSwgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAg
ICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHVpbnQ2NF90IGFycmF5
W10gPSB7IDEsIDIsIDMsIDQsIDUsIH07CisgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50NjRf
dD4odGVzdCwgYXJyYXksIHN0YXRpY19jYXN0PFVDUFVSZWdpc3Rlcj4oMykpLCA1KTsKKyAgICB9
CisjZW5kaWYKKworICAgIC8vIGxvYWQzMgorICAgIHsKKyAgICAgICAgYXV0byB0ZXN0ID0gY29t
cGlsZShbPV0oQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQubG9hZDMyKENDYWxsSGVscGVyczo6QmFzZUlu
ZGV4KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhl
bHBlcnM6OlRpbWVzRm91ciwgLTQpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
ICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICB9KTsKKyAgICAgICAgdWludDMyX3QgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwg
fTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQzMl90Pih0ZXN0LCBhcnJheSwgc3RhdGlj
X2Nhc3Q8VUNQVVJlZ2lzdGVyPigzKSksIDMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8g
dGVzdCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0
RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LmxvYWQzMihDQ2FsbEhlbHBl
cnM6OkJhc2VJbmRleChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BS
MSwgQ0NhbGxIZWxwZXJzOjpUaW1lc0ZvdXIsIDQpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0
LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgdWludDMyX3QgYXJyYXlbXSA9IHsgMSwgMiwg
MywgNCwgNSwgfTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQzMl90Pih0ZXN0LCBhcnJh
eSwgc3RhdGljX2Nhc3Q8VUNQVVJlZ2lzdGVyPigzKSksIDUpOworICAgIH0KKworICAgIC8vIGxv
YWQxNgorICAgIHsKKyAgICAgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0oQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisgICAgICAg
ICAgICBqaXQubG9hZDE2KENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86OmFyZ3VtZW50
R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzVHdvLCAtMiks
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxv
Z3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICB1
aW50MTZfdCBhcnJheVtdID0geyAxLCAyLCAzLCA0LCA1LCB9OworICAgICAgICBDSEVDS19FUShp
bnZva2U8dWludDMyX3Q+KHRlc3QsIGFycmF5LCBzdGF0aWNfY2FzdDxVQ1BVUmVnaXN0ZXI+KDMp
KSwgMyk7CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0oQ0Nh
bGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7
CisgICAgICAgICAgICBqaXQubG9hZDE2KENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
VHdvLCAyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHVpbnQxNl90IGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIHN0YXRpY19jYXN0PHVpbnQx
Nl90PigtMSksIH07CisgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50MzJfdD4odGVzdCwgYXJy
YXksIHN0YXRpY19jYXN0PFVDUFVSZWdpc3Rlcj4oMykpLCAweGZmZmYpOworICAgIH0KKworICAg
IC8vIGxvYWQxNlNpZ25lZEV4dGVuZFRvMzIKKyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNv
bXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Q
cm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LmxvYWQxNlNpZ25lZEV4dGVuZFRvMzIoQ0Nh
bGxIZWxwZXJzOjpCYXNlSW5kZXgoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEsIENDYWxsSGVscGVyczo6VGltZXNUd28sIC0yKSwgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAg
ICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHVpbnQxNl90IGFycmF5W10gPSB7
IDEsIDIsIDMsIDQsIDUsIH07CisgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50MzJfdD4odGVz
dCwgYXJyYXksIHN0YXRpY19jYXN0PFVDUFVSZWdpc3Rlcj4oMykpLCAzKTsKKyAgICB9CisgICAg
eworICAgICAgICBhdXRvIHRlc3QgPSBjb21waWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgewor
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5s
b2FkMTZTaWduZWRFeHRlbmRUbzMyKENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86OmFy
Z3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzVHdv
LCAyKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHVpbnQxNl90IGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIHN0YXRpY19jYXN0PHVpbnQxNl90
PigtMSksIH07CisgICAgICAgIENIRUNLX0VRKGludm9rZTx1aW50MzJfdD4odGVzdCwgYXJyYXks
IHN0YXRpY19jYXN0PFVDUFVSZWdpc3Rlcj4oMykpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oLTEp
KTsKKyAgICB9CisKKyAgICAvLyBsb2FkOAorICAgIHsKKyAgICAgICAgYXV0byB0ZXN0ID0gY29t
cGlsZShbPV0oQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblBy
b2xvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQubG9hZDgoQ0NhbGxIZWxwZXJzOjpCYXNlSW5k
ZXgoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVs
cGVyczo6VGltZXNPbmUsIC0xKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIHVpbnQ4X3QgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsK
KyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQzMl90Pih0ZXN0LCBhcnJheSwgc3RhdGljX2Nh
c3Q8VUNQVVJlZ2lzdGVyPigzKSksIDMpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gdGVz
dCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVu
Y3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LmxvYWQ4KENDYWxsSGVscGVyczo6
QmFzZUluZGV4KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzT25lLCAxKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHVpbnQ4X3QgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwg
c3RhdGljX2Nhc3Q8dWludDhfdD4oLTEpLCB9OworICAgICAgICBDSEVDS19FUShpbnZva2U8dWlu
dDMyX3Q+KHRlc3QsIGFycmF5LCBzdGF0aWNfY2FzdDxVQ1BVUmVnaXN0ZXI+KDMpKSwgMHhmZik7
CisgICAgfQorCisgICAgLy8gbG9hZDhTaWduZWRFeHRlbmRUbzMyCisgICAgeworICAgICAgICBh
dXRvIHRlc3QgPSBjb21waWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAg
ZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5sb2FkOFNpZ25lZEV4
dGVuZFRvMzIoQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6VGltZXNPbmUsIC0xKSwgR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0
KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHVpbnQ4X3Qg
YXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVp
bnQzMl90Pih0ZXN0LCBhcnJheSwgc3RhdGljX2Nhc3Q8VUNQVVJlZ2lzdGVyPigzKSksIDMpOwor
ICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVy
cyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAg
ICAgICAgaml0LmxvYWQ4U2lnbmVkRXh0ZW5kVG8zMihDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChH
UFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJz
OjpUaW1lc09uZSwgMSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIGVt
aXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAg
IH0pOworICAgICAgICB1aW50OF90IGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KC0xKSwgfTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPHVpbnQzMl90Pih0ZXN0
LCBhcnJheSwgc3RhdGljX2Nhc3Q8VUNQVVJlZ2lzdGVyPigzKSksIHN0YXRpY19jYXN0PHVpbnQz
Ml90PigtMSkpOworICAgIH0KKworICAgIC8vIGxvYWREb3VibGUKKyAgICB7CisgICAgICAgIGF1
dG8gdGVzdCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBl
bWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LmxvYWREb3VibGUoQ0Nh
bGxIZWxwZXJzOjpCYXNlSW5kZXgoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEsIENDYWxsSGVscGVyczo6VGltZXNFaWdodCwgLTgpLCBGUFJJbmZvOjpyZXR1cm5W
YWx1ZUZQUik7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAg
ICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgZG91YmxlIGFycmF5W10gPSB7
IDEsIDIsIDMsIDQsIDUsIH07CisgICAgICAgIENIRUNLX0VRKGludm9rZTxkb3VibGU+KHRlc3Qs
IGFycmF5LCBzdGF0aWNfY2FzdDxVQ1BVUmVnaXN0ZXI+KDMpKSwgMy4wKTsKKyAgICB9CisgICAg
eworICAgICAgICBhdXRvIHRlc3QgPSBjb21waWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgewor
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5s
b2FkRG91YmxlKENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIDgpLCBGUFJJ
bmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShq
aXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgZG91Ymxl
IGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIDUsIH07CisgICAgICAgIENIRUNLX0VRKGludm9rZTxk
b3VibGU+KHRlc3QsIGFycmF5LCBzdGF0aWNfY2FzdDxVQ1BVUmVnaXN0ZXI+KDMpKSwgNS4wKTsK
KyAgICB9CisKKyAgICAvLyBsb2FkRmxvYXQKKyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNv
bXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Q
cm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhlbHBlcnM6OkJh
c2VJbmRleChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0Nh
bGxIZWxwZXJzOjpUaW1lc0ZvdXIsIC00KSwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgfSk7CisgICAgICAgIGZsb2F0IGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIDUs
IH07CisgICAgICAgIENIRUNLX0VRKGludm9rZTxmbG9hdD4odGVzdCwgYXJyYXksIHN0YXRpY19j
YXN0PFVDUFVSZWdpc3Rlcj4oMykpLCAzLjApOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8g
dGVzdCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0
RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LmxvYWRGbG9hdChDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgQ0NhbGxIZWxwZXJzOjpUaW1lc0ZvdXIsIDQpLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
Uik7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAg
aml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgZmxvYXQgYXJyYXlbXSA9IHsgMSwgMiwg
MywgNCwgNSwgfTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGZsb2F0Pih0ZXN0LCBhcnJheSwg
c3RhdGljX2Nhc3Q8VUNQVVJlZ2lzdGVyPigzKSksIDUuMCk7CisgICAgfQorfQorCit2b2lkIHRl
c3RTdG9yZUJhc2VJbmRleCgpCit7CisjaWYgQ1BVKEFSTTY0KSB8fCBDUFUoWDg2XzY0KQorICAg
IC8vIHN0b3JlNjQKKyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOwor
ICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBDQ2FsbEhlbHBl
cnM6OkJhc2VJbmRleChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BS
MSwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCAtOCkpOworICAgICAgICAgICAgZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHVpbnQ2NF90IGFycmF5W10gPSB7IDEsIDIsIDMsIDQsIDUsIH07CisgICAgICAgIGlu
dm9rZTx2b2lkPih0ZXN0LCBhcnJheSwgMywgNDIpOworICAgICAgICBDSEVDS19FUShhcnJheVsy
XSwgNDIpOworICAgIH0KKyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dKEND
YWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQp
OworICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgQ0NhbGxIZWxwZXJzOjpUaW1lc0VpZ2h0LCA4KSk7CisgICAgICAgICAgICBlbWl0RnVu
Y3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsK
KyAgICAgICAgdWludDY0X3QgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsKKyAgICAgICAg
aW52b2tlPHZvaWQ+KHRlc3QsIGFycmF5LCAzLCA0Mik7CisgICAgICAgIENIRUNLX0VRKGFycmF5
WzRdLCA0Mik7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBzdG9yZTMyCisgICAgeworICAgICAg
ICBhdXRvIHRlc3QgPSBjb21waWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAg
ICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5zdG9yZTMyKEdQ
UkluZm86OmFyZ3VtZW50R1BSMiwgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIENDYWxsSGVscGVyczo6VGltZXNGb3Vy
LCAtNCkpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAg
ICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHVpbnQzMl90IGFycmF5W10gPSB7
IDEsIDIsIDMsIDQsIDUsIH07CisgICAgICAgIGludm9rZTx2b2lkPih0ZXN0LCBhcnJheSwgMywg
NDIpOworICAgICAgICBDSEVDS19FUShhcnJheVsyXSwgNDIpOworICAgIH0KKyAgICB7CisgICAg
ICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAg
ICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnN0b3JlMzIo
R1BSSW5mbzo6YXJndW1lbnRHUFIyLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjph
cmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUaW1lc0Zv
dXIsIDQpKTsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAg
ICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICB1aW50MzJfdCBhcnJheVtdID0g
eyAxLCAyLCAzLCA0LCA1LCB9OworICAgICAgICBpbnZva2U8dm9pZD4odGVzdCwgYXJyYXksIDMs
IDQyKTsKKyAgICAgICAgQ0hFQ0tfRVEoYXJyYXlbNF0sIDQyKTsKKyAgICB9CisKKyAgICAvLyBz
dG9yZTE2CisgICAgeworICAgICAgICBhdXRvIHRlc3QgPSBjb21waWxlKFs9XShDQ2FsbEhlbHBl
cnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKyAgICAg
ICAgICAgIGppdC5zdG9yZTE2KEdQUkluZm86OmFyZ3VtZW50R1BSMiwgQ0NhbGxIZWxwZXJzOjpC
YXNlSW5kZXgoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEND
YWxsSGVscGVyczo6VGltZXNUd28sIC0yKSk7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAg
dWludDE2X3QgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsKKyAgICAgICAgaW52b2tlPHZv
aWQ+KHRlc3QsIGFycmF5LCAzLCA0Mik7CisgICAgICAgIENIRUNLX0VRKGFycmF5WzJdLCA0Mik7
CisgICAgfQorICAgIHsKKyAgICAgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0oQ0NhbGxIZWxw
ZXJzJiBqaXQpIHsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisgICAg
ICAgICAgICBqaXQuc3RvcmUxNihHUFJJbmZvOjphcmd1bWVudEdQUjIsIENDYWxsSGVscGVyczo6
QmFzZUluZGV4KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBD
Q2FsbEhlbHBlcnM6OlRpbWVzVHdvLCAyKSk7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAg
dWludDE2X3QgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgc3RhdGljX2Nhc3Q8dWludDE2X3Q+KC0x
KSwgfTsKKyAgICAgICAgaW52b2tlPHZvaWQ+KHRlc3QsIGFycmF5LCAzLCA0Mik7CisgICAgICAg
IENIRUNLX0VRKGFycmF5WzRdLCA0Mik7CisgICAgfQorCisgICAgLy8gc3RvcmU4CisgICAgewor
ICAgICAgICBhdXRvIHRlc3QgPSBjb21waWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAg
ICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5zdG9y
ZTgoR1BSSW5mbzo6YXJndW1lbnRHUFIyLCBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChHUFJJbmZv
Ojphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgQ0NhbGxIZWxwZXJzOjpUaW1l
c09uZSwgLTEpKTsKKyAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAg
ICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0pOworICAgICAgICB1aW50OF90IGFycmF5W10g
PSB7IDEsIDIsIDMsIDQsIDUsIH07CisgICAgICAgIGludm9rZTx2b2lkPih0ZXN0LCBhcnJheSwg
MywgNDIpOworICAgICAgICBDSEVDS19FUShhcnJheVsyXSwgNDIpOworICAgIH0KKyAgICB7Cisg
ICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dKENDYWxsSGVscGVycyYgaml0KSB7CisgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnN0b3Jl
OChHUFJJbmZvOjphcmd1bWVudEdQUjIsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVz
T25lLCAxKSk7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAg
ICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgdWludDhfdCBhcnJheVtdID0g
eyAxLCAyLCAzLCA0LCBzdGF0aWNfY2FzdDx1aW50OF90PigtMSksIH07CisgICAgICAgIGludm9r
ZTx2b2lkPih0ZXN0LCBhcnJheSwgMywgNDIpOworICAgICAgICBDSEVDS19FUShhcnJheVs0XSwg
NDIpOworICAgIH0KKworICAgIC8vIHN0b3JlRG91YmxlCisgICAgeworICAgICAgICBhdXRvIHRl
c3QgPSBjb21waWxlKFs9XShDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoaml0KTsKKyAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZv
Ojphcmd1bWVudEZQUjAsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86OmFyZ3VtZW50
R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIC04
KSk7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAg
aml0LnJldCgpOworICAgICAgICB9KTsKKyAgICAgICAgZG91YmxlIGFycmF5W10gPSB7IDEsIDIs
IDMsIDQsIDUsIH07CisgICAgICAgIGludm9rZTx2b2lkPih0ZXN0LCBhcnJheSwgc3RhdGljX2Nh
c3Q8VUNQVVJlZ2lzdGVyPigzKSwgNDIuMCk7CisgICAgICAgIENIRUNLX0VRKGFycmF5WzJdLCA0
Mi4wKTsKKyAgICB9CisgICAgeworICAgICAgICBhdXRvIHRlc3QgPSBjb21waWxlKFs9XShDQ2Fs
bEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsK
KyAgICAgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjphcmd1bWVudEZQUjAsIENDYWxs
SGVscGVyczo6QmFzZUluZGV4KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRpbWVzRWlnaHQsIDgpKTsKKyAgICAgICAgICAgIGVtaXRG
dW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgIH0p
OworICAgICAgICBkb3VibGUgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsKKyAgICAgICAg
aW52b2tlPHZvaWQ+KHRlc3QsIGFycmF5LCBzdGF0aWNfY2FzdDxVQ1BVUmVnaXN0ZXI+KDMpLCA0
Mi4wKTsKKyAgICAgICAgQ0hFQ0tfRVEoYXJyYXlbNF0sIDQyLjApOworICAgIH0KKworICAgIC8v
IHN0b3JlRmxvYXQKKyAgICB7CisgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOwor
ICAgICAgICAgICAgaml0LnN0b3JlRmxvYXQoRlBSSW5mbzo6YXJndW1lbnRGUFIwLCBDQ2FsbEhl
bHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50
R1BSMSwgQ0NhbGxIZWxwZXJzOjpUaW1lc0ZvdXIsIC00KSk7CisgICAgICAgICAgICBlbWl0RnVu
Y3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICB9KTsK
KyAgICAgICAgZmxvYXQgYXJyYXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgfTsKKyAgICAgICAgaW52
b2tlPHZvaWQ+KHRlc3QsIGFycmF5LCBzdGF0aWNfY2FzdDxVQ1BVUmVnaXN0ZXI+KDMpLCA0Mi4w
Zik7CisgICAgICAgIENIRUNLX0VRKGFycmF5WzJdLCA0Mi4wZik7CisgICAgfQorICAgIHsKKyAg
ICAgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0oQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisgICAgICAgICAgICBqaXQuc3RvcmVG
bG9hdChGUFJJbmZvOjphcmd1bWVudEZQUjAsIENDYWxsSGVscGVyczo6QmFzZUluZGV4KEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBDQ2FsbEhlbHBlcnM6OlRp
bWVzRm91ciwgNCkpOworICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAg
ICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGZsb2F0IGFycmF5W10g
PSB7IDEsIDIsIDMsIDQsIDUsIH07CisgICAgICAgIGludm9rZTx2b2lkPih0ZXN0LCBhcnJheSwg
c3RhdGljX2Nhc3Q8VUNQVVJlZ2lzdGVyPigzKSwgNDIuMGYpOworICAgICAgICBDSEVDS19FUShh
cnJheVs0XSwgNDIuMGYpOworICAgIH0KK30KKwogc3RhdGljIHZvaWQgdGVzdENhZ2VQcmVzZXJ2
ZXNQQUNGYWlsdXJlQml0KCkKIHsKICNpZiBHSUdBQ0FHRV9FTkFCTEVECkBAIC00NTIzLDYgKzQ4
NTMsOCBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVBRF9T
QUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdEJ5dGVTd2FwKCkpOwogICAgIFJVTih0ZXN0TW92
ZURvdWJsZUNvbmRpdGlvbmFsbHkzMigpKTsKICAgICBSVU4odGVzdE1vdmVEb3VibGVDb25kaXRp
b25hbGx5NjQoKSk7CisgICAgUlVOKHRlc3RMb2FkQmFzZUluZGV4KCkpOworICAgIFJVTih0ZXN0
U3RvcmVCYXNlSW5kZXgoKSk7CiAKICAgICBSVU4odGVzdENhZ2VQcmVzZXJ2ZXNQQUNGYWlsdXJl
Qml0KCkpOwogCg==
</data>
<flag name="review"
          id="456929"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
    <flag name="commit-queue"
          id="456950"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>