<?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>165093</bug_id>
          
          <creation_ts>2016-11-28 10:16:32 -0800</creation_ts>
          <short_desc>Introduce StringImpl::StaticStringImpl with constexpr constructor</short_desc>
          <delta_ts>2017-01-03 12:21:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=165031</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>158863</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1253862</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-28 10:16:32 -0800</bug_when>
    <thetext>Add constexpr StringImpl constructor. It allows us to initialize static StringImpl without global constructor.
And let&apos;s use it to inline StringImpl::empty()!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253876</commentid>
    <comment_count>1</comment_count>
      <attachid>295499</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-28 10:33:20 -0800</bug_when>
    <thetext>Created attachment 295499
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254230</commentid>
    <comment_count>2</comment_count>
      <attachid>295588</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-29 01:14:00 -0800</bug_when>
    <thetext>Created attachment 295588
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254231</commentid>
    <comment_count>3</comment_count>
      <attachid>295589</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-29 01:24:20 -0800</bug_when>
    <thetext>Created attachment 295589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254628</commentid>
    <comment_count>4</comment_count>
      <attachid>295690</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-29 18:35:02 -0800</bug_when>
    <thetext>Created attachment 295690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1254796</commentid>
    <comment_count>5</comment_count>
      <attachid>295690</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-30 09:32:12 -0800</bug_when>
    <thetext>Comment on attachment 295690
Patch

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

&gt; Source/WTF/wtf/Hasher.h:299
&gt; +// FIXME: WebKitGTK+ requires GCC 4.9, which does not support relaxed constexpr in C++14.
&gt; +// Once it is supported, we can simplify the implementation.

I would have written a different comment here.

- I don’t think we need to specify WebKitGTK+ here, just mention that the project still supports GCC 4.9.
- I would have been more specific about what kind of simplification we are talking about.

// FIXME: This code limits itself to the older, more limited C++11 constexpr capabilities, using
// recursion instead of looping, for example. Would be nice to rewrite this in a simpler way
// once we no longer need to support compilers like GCC 4.9 that do not yet support it.

&gt; Source/WTF/wtf/Hasher.h:300
&gt; +class ConstexprStringHasher {

Why does this need to be a separate class? Can we just make constexpr functions named computeLiteralHash and computeLiteralHashAndMaskTop8Bits in the StringHasher class? Whatever names we need for the private functions.

&gt; Source/WTF/wtf/Hasher.h:343
&gt; +    // This avoids ever returning a hash code of 0, since that is used to
&gt; +    // signal &quot;hash not computed yet&quot;. Setting the high bit maintains
&gt; +    // reasonable fidelity to a hash code of 0 because it is likely to yield
&gt; +    // exactly 0 when hash lookup masks out the high bits.

It’s annoying to have this whole comment repeated twice. Can we find a way to just have this refer to the code above, or perhaps even find a way to share the code? Code should be able to call a constexpr function with a non-constexpr argument.

&gt; Source/WTF/wtf/Hasher.h:357
&gt; +        // Reserving space from the high bits for flags preserves most of the hash&apos;s
&gt; +        // value, since hash lookup typically masks out the high bits anyway.

Same thought. It’s strange to have this comment here when the real issue is that this needs to exactly match the behavior of the code above.

&gt; Source/WTF/wtf/Hasher.h:420
&gt;  using WTF::IntegerHasher;
&gt;  using WTF::StringHasher;
&gt; +using WTF::ConstexprStringHasher;

Please sort alphabetically.

&gt; Source/WTF/wtf/text/StringImpl.h:-869
&gt; -    WTF_EXPORT_PRIVATE static StringImpl* null();

I don’t think this function should be named null, and it’s not great to make the function public while keeping the name null. For StringImpl*, the null value is nullptr. I believe you added StringImpl::null, adding yet another different kind of null string, to help implement Symbol. But it’s very confusing to have a function named null() that returns it; the name should be more specific to the specific use. I think it’s a special kind of empty string. I don’t think we should call it null.

Let me give you an example of why it’s confusing: if we called String(StringImpl::null()).isNull() we would get false.

&gt; Source/WTF/wtf/text/StringImpl.h:931
&gt; +static_assert(sizeof(StringImpl) == sizeof(StringImpl::StaticStringImpl), &quot;sizeof(StringImpl) should be the same to sizeof(StaticStringImpl)&quot;);

The comment here is simply repeats exactly what the expression says. I would use &quot;&quot; or write a comment that explains wy.

&gt; Tools/ChangeLog:3
&gt; +        [WTF] Introduce StringImpl::StaticStringImpl with constexpr constructor

No good reason for the [WTF] prefix on the bug name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255188</commentid>
    <comment_count>6</comment_count>
      <attachid>295690</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-12-01 01:19:35 -0800</bug_when>
    <thetext>Comment on attachment 295690
Patch

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

Thanks

&gt;&gt; Source/WTF/wtf/Hasher.h:299
&gt;&gt; +// Once it is supported, we can simplify the implementation.
&gt; 
&gt; I would have written a different comment here.
&gt; 
&gt; - I don’t think we need to specify WebKitGTK+ here, just mention that the project still supports GCC 4.9.
&gt; - I would have been more specific about what kind of simplification we are talking about.
&gt; 
&gt; // FIXME: This code limits itself to the older, more limited C++11 constexpr capabilities, using
&gt; // recursion instead of looping, for example. Would be nice to rewrite this in a simpler way
&gt; // once we no longer need to support compilers like GCC 4.9 that do not yet support it.

Sounds nice. Fixed.

&gt;&gt; Source/WTF/wtf/Hasher.h:300
&gt;&gt; +class ConstexprStringHasher {
&gt; 
&gt; Why does this need to be a separate class? Can we just make constexpr functions named computeLiteralHash and computeLiteralHashAndMaskTop8Bits in the StringHasher class? Whatever names we need for the private functions.

OK, imported it. Once C++14 constexpr is enabled, we can unify these things.

&gt;&gt; Source/WTF/wtf/Hasher.h:343
&gt;&gt; +    // exactly 0 when hash lookup masks out the high bits.
&gt; 
&gt; It’s annoying to have this whole comment repeated twice. Can we find a way to just have this refer to the code above, or perhaps even find a way to share the code? Code should be able to call a constexpr function with a non-constexpr argument.

Share avalancheBits, finalize, and avoidZero phases with StringHasher.

&gt;&gt; Source/WTF/wtf/Hasher.h:357
&gt;&gt; +        // value, since hash lookup typically masks out the high bits anyway.
&gt; 
&gt; Same thought. It’s strange to have this comment here when the real issue is that this needs to exactly match the behavior of the code above.

Ditto.

&gt;&gt; Source/WTF/wtf/Hasher.h:420
&gt;&gt; +using WTF::ConstexprStringHasher;
&gt; 
&gt; Please sort alphabetically.

Fixed.

&gt;&gt; Source/WTF/wtf/text/StringImpl.h:-869
&gt;&gt; -    WTF_EXPORT_PRIVATE static StringImpl* null();
&gt; 
&gt; I don’t think this function should be named null, and it’s not great to make the function public while keeping the name null. For StringImpl*, the null value is nullptr. I believe you added StringImpl::null, adding yet another different kind of null string, to help implement Symbol. But it’s very confusing to have a function named null() that returns it; the name should be more specific to the specific use. I think it’s a special kind of empty string. I don’t think we should call it null.
&gt; 
&gt; Let me give you an example of why it’s confusing: if we called String(StringImpl::null()).isNull() we would get false.

It seems that this is introduced in https://trac.webkit.org/changeset/198168. The reason why we introduced it seems that we need to distinguish Symbol() from Symbol(&quot;&quot;).
It seems a bit dangerous to me. It breaks some invariant that empty string is always StringImpl::empty().

Rather than that, I think SymbolImpl should have a flag for that. I&apos;ll refactor SymbolImpl and drop this StringImpl::null() later. In the meantime, I&apos;ll leave it as is.
https://bugs.webkit.org/show_bug.cgi?id=165247

&gt;&gt; Source/WTF/wtf/text/StringImpl.h:931
&gt;&gt; +static_assert(sizeof(StringImpl) == sizeof(StringImpl::StaticStringImpl), &quot;sizeof(StringImpl) should be the same to sizeof(StaticStringImpl)&quot;);
&gt; 
&gt; The comment here is simply repeats exactly what the expression says. I would use &quot;&quot; or write a comment that explains wy.

Fixed.

&gt;&gt; Tools/ChangeLog:3
&gt;&gt; +        [WTF] Introduce StringImpl::StaticStringImpl with constexpr constructor
&gt; 
&gt; No good reason for the [WTF] prefix on the bug name.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1255189</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-12-01 01:24:47 -0800</bug_when>
    <thetext>Committed r209179: &lt;http://trac.webkit.org/changeset/209179&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263490</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-01-03 12:21:21 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1263491</commentid>
    <comment_count>9</comment_count>
      <attachid>297942</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-01-03 12:21:27 -0800</bug_when>
    <thetext>Created attachment 297942
C++14 relaxed constexpr

WIP</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295499</attachid>
            <date>2016-11-28 10:33:20 -0800</date>
            <delta_ts>2016-11-29 01:13:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165093-20161129033256.patch</filename>
            <type>text/plain</type>
            <size>12662</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5MDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGZhMmU2MWNmNzk2NGUzNTFiODMxOGVk
ZDQ3OGE1NTBlOTA4MGJkZTIuLjI2YjA3YzkwMGFmOGYzYTllOGU3NWUwMGIwNTcyN2IxZTM5NTdi
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTYtMTEtMjggIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gQWRkIGNvbnN0ZXhwciBTdHJpbmdJ
bXBsIGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjUwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHd0Zi9IYXNoZXIuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSGFzaGVyOjpoYXNo
V2l0aFRvcDhCaXRzTWFza2VkKToKKyAgICAgICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFzaGVy
Ojpjb21wdXRlSGFzaCk6CisgICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hhc2hlcjo6Y29t
cHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMpOgorICAgICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdI
YXNoZXI6OmF2YWxhbmNoZUJpdHMzKToKKyAgICAgICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFz
aGVyOjphdmFsYW5jaGVCaXRzMik6CisgICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hhc2hl
cjo6YXZhbGFuY2hlQml0czEpOgorICAgICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6
OmF2YWxhbmNoZUJpdHMwKToKKyAgICAgICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFzaGVyOjph
dmFsYW5jaGVCaXRzKToKKyAgICAgICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFzaGVyOjphdm9p
ZFplcm8pOgorICAgICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmZpbmFsaXplKToK
KyAgICAgICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFzaGVyOjpmaW5hbGl6ZUFuZE1hc2tUb3A4
Qml0cyk6CisgICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hhc2hlcjo6Y2FsY3VsYXRlV2l0
aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIxKToKKyAgICAgICAgKFdURjo6Q29uc3RleHByU3RyaW5n
SGFzaGVyOjpjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcjApOgorICAgICAgICAo
V1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hh
cmFjdGVyKToKKyAgICAgICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFzaGVyOjpjYWxjdWxhdGUx
KToKKyAgICAgICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFzaGVyOjpjYWxjdWxhdGUwKToKKyAg
ICAgICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFzaGVyOjpjYWxjdWxhdGUpOgorICAgICAgICAo
V1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6Omhhc2hJbXBsKToKKyAgICAgICAgKiB3dGYvdGV4
dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OlN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJ
bXBsOjplbXB0eSk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nU3RhdGljcy5jcHA6CisgICAg
ICAgIChXVEY6OlN0cmluZ0ltcGw6OmVtcHR5KTogRGVsZXRlZC4KKwogMjAxNi0xMS0yNiAgWXVz
dWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbV1RGXSBJbXBv
cnQgc3RkOjpvcHRpb25hbCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gYXMgV1RGOjpPcHRpb25h
bApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9I
YXNoZXIuaAppbmRleCAwMjM0YmIyNzA2YjkyYWM4NmI4OGNkN2U3NWJmMjA0ZGI3OTE3NzRlLi5l
NjMyMjMxNDVhZWY5MWM5MjZlNzFmZjk2MTc1MjRmYjBkMjc1OWQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAtMzYs
MTEgKzM2LDEyIEBAIG5hbWVzcGFjZSBXVEYgewogLy8gSmF2YVNjcmlwdENvcmUgYW5kIHRoZSBD
b2RlR2VuZXJhdG9ySlMucG0gc2NyaXB0IGluIFdlYkNvcmUuCiAKIC8vIEdvbGRlbiByYXRpby4g
QXJiaXRyYXJ5IHN0YXJ0IHZhbHVlIHRvIGF2b2lkIG1hcHBpbmcgYWxsIHplcm9zIHRvIGEgaGFz
aCB2YWx1ZSBvZiB6ZXJvLgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHN0cmluZ0hhc2hpbmdTdGFy
dFZhbHVlID0gMHg5RTM3NzlCOVU7CitzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIHN0
cmluZ0hhc2hpbmdTdGFydFZhbHVlID0gMHg5RTM3NzlCOVU7CiAKIGNsYXNzIFN0cmluZ0hhc2hl
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZsYWdDb3VudCA9IDg7IC8v
IFNhdmUgOCBiaXRzIGZvciBTdHJpbmdJbXBsIHRvIHVzZSBhcyBmbGFncy4KKyAgICBzdGF0aWMg
Y29uc3RleHByIGNvbnN0IHVuc2lnbmVkIGZsYWdDb3VudCA9IDg7IC8vIFNhdmUgOCBiaXRzIGZv
ciBTdHJpbmdJbXBsIHRvIHVzZSBhcyBmbGFncy4KKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0
IHVuc2lnbmVkIG1hc2tIYXNoID0gKDFVIDw8IChzaXplb2YodW5zaWduZWQpICogOCAtIGZsYWdD
b3VudCkpIC0gMTsKIAogICAgIFN0cmluZ0hhc2hlcigpCiAgICAgICAgIDogbV9oYXNoKHN0cmlu
Z0hhc2hpbmdTdGFydFZhbHVlKQpAQCAtMTY2LDcgKzE2Nyw3IEBAIGNsYXNzIFN0cmluZ0hhc2hl
ciB7CiAKICAgICAgICAgLy8gUmVzZXJ2aW5nIHNwYWNlIGZyb20gdGhlIGhpZ2ggYml0cyBmb3Ig
ZmxhZ3MgcHJlc2VydmVzIG1vc3Qgb2YgdGhlIGhhc2gncwogICAgICAgICAvLyB2YWx1ZSwgc2lu
Y2UgaGFzaCBsb29rdXAgdHlwaWNhbGx5IG1hc2tzIG91dCB0aGUgaGlnaCBiaXRzIGFueXdheS4K
LSAgICAgICAgcmVzdWx0ICY9ICgxVSA8PCAoc2l6ZW9mKHJlc3VsdCkgKiA4IC0gZmxhZ0NvdW50
KSkgLSAxOworICAgICAgICByZXN1bHQgJj0gbWFza0hhc2g7CiAKICAgICAgICAgLy8gVGhpcyBh
dm9pZHMgZXZlciByZXR1cm5pbmcgYSBoYXNoIGNvZGUgb2YgMCwgc2luY2UgdGhhdCBpcyB1c2Vk
IHRvCiAgICAgICAgIC8vIHNpZ25hbCAiaGFzaCBub3QgY29tcHV0ZWQgeWV0Ii4gU2V0dGluZyB0
aGUgaGlnaCBiaXQgbWFpbnRhaW5zCkBAIC0yOTQsNiArMjk1LDEwOCBAQCBjbGFzcyBTdHJpbmdI
YXNoZXIgewogICAgIFVDaGFyIG1fcGVuZGluZ0NoYXJhY3RlcjsKIH07CiAKKy8vIEZJWE1FOiBX
ZWJLaXRHVEsrIHJlcXVpcmVzIEdDQyA0LjksIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgcmVsYXhl
ZCBjb25zdGV4cHIgaW4gQysrMTQuCisvLyBPbmNlIGl0IGlzIHN1cHBvcnRlZCwgd2UgY2FuIHNp
bXBsaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbi4KK2NsYXNzIENvbnN0ZXhwclN0cmluZ0hhc2hlciB7
CitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgY2hhcmFjdGVyc0Nv
dW50PgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgVCAo
JmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pCisgICAgeworICAgICAgICByZXR1cm4gZmlu
YWxpemUoaGFzaEltcGwoc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUsIDAsIGNoYXJhY3RlcnMsIGNo
YXJhY3RlcnNDb3VudCAtIDEpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1
bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBj
b21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBUICgmY2hhcmFjdGVycylbY2hhcmFjdGVy
c0NvdW50XSkKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5hbGl6ZUFuZE1hc2tUb3A4Qml0cyho
YXNoSW1wbChzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZSwgMCwgY2hhcmFjdGVycywgY2hhcmFjdGVy
c0NvdW50IC0gMSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGF2YWxhbmNoZUJpdHMzKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1
cm4gaGFzaCBeIChoYXNoIDw8IDEwKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGF2YWxhbmNoZUJpdHMyKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1
cm4gYXZhbGFuY2hlQml0czMoaGFzaCArIChoYXNoID4+IDE1KSk7CisgICAgfQorCisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzMSh1bnNpZ25lZCBoYXNoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGF2YWxhbmNoZUJpdHMyKGhhc2ggXiAoaGFzaCA8PCAyKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzMCh1bnNp
Z25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF2YWxhbmNoZUJpdHMxKGhhc2ggKyAo
aGFzaCA+PiA1KSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFs
YW5jaGVCaXRzKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gYXZhbGFuY2hl
Qml0czAoaGFzaCBeIChoYXNoIDw8IDMpKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGF2b2lkcyBl
dmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5jZSB0aGF0IGlzIHVzZWQgdG8KKyAg
ICAvLyBzaWduYWwgImhhc2ggbm90IGNvbXB1dGVkIHlldCIuIFNldHRpbmcgdGhlIGhpZ2ggYml0
IG1haW50YWlucworICAgIC8vIHJlYXNvbmFibGUgZmlkZWxpdHkgdG8gYSBoYXNoIGNvZGUgb2Yg
MCBiZWNhdXNlIGl0IGlzIGxpa2VseSB0byB5aWVsZAorICAgIC8vIGV4YWN0bHkgMCB3aGVuIGhh
c2ggbG9va3VwIG1hc2tzIG91dCB0aGUgaGlnaCBiaXRzLgorICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgYXZvaWRaZXJvKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4g
aGFzaCA/IGhhc2ggOiAoMHg4MDAwMDAwMCA+PiBTdHJpbmdIYXNoZXI6OmZsYWdDb3VudCk7Cisg
ICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBmaW5hbGl6ZSh1bnNpZ25lZCBo
YXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF2b2lkWmVybyhhdmFsYW5jaGVCaXRzKGhhc2gp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGZpbmFsaXplQW5kTWFz
a1RvcDhCaXRzKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICAvLyBSZXNlcnZpbmcgc3Bh
Y2UgZnJvbSB0aGUgaGlnaCBiaXRzIGZvciBmbGFncyBwcmVzZXJ2ZXMgbW9zdCBvZiB0aGUgaGFz
aCdzCisgICAgICAgIC8vIHZhbHVlLCBzaW5jZSBoYXNoIGxvb2t1cCB0eXBpY2FsbHkgbWFza3Mg
b3V0IHRoZSBoaWdoIGJpdHMgYW55d2F5LgorICAgICAgICByZXR1cm4gYXZvaWRaZXJvKGF2YWxh
bmNoZUJpdHMoaGFzaCkgJiBTdHJpbmdIYXNoZXI6Om1hc2tIYXNoKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFj
dGVyMSh1bnNpZ25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhhc2ggKyAoaGFzaCA+
PiAxNyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGVX
aXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcjAodW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAg
IHJldHVybiBjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcjEoKGhhc2ggPDwgMTEp
IF4gaGFzaCk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxh
dGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3Rlcih1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBjaGFy
YWN0ZXIpCisgICAgeworICAgICAgICByZXR1cm4gY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RD
aGFyYWN0ZXIwKGhhc2ggKyBjaGFyYWN0ZXIpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgY2FsY3VsYXRlMSh1bnNpZ25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGhhc2ggKyAoaGFzaCA+PiAxMSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBjYWxjdWxhdGUwKHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIHNlY29uZENoYXJhY3Rl
cikKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxjdWxhdGUxKChoYXNoIDw8IDE2KSBeICgoc2Vj
b25kQ2hhcmFjdGVyIDw8IDExKSBeIGhhc2gpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGNhbGN1bGF0ZSh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBmaXJzdENoYXJh
Y3RlciwgdW5zaWduZWQgc2Vjb25kQ2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNh
bGN1bGF0ZTAoaGFzaCArIGZpcnN0Q2hhcmFjdGVyLCBzZWNvbmRDaGFyYWN0ZXIpOworICAgIH0K
KworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaGFzaEltcGwodW5zaWduZWQgaGFzaCwg
dW5zaWduZWQgaW5kZXgsIGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICB7CisgICAgICAgIHJldHVybiAoaW5kZXggPT0gbGVuZ3RoKQorICAgICAgICAgICAgPyBo
YXNoIDogKChpbmRleCArIDEpID09IGxlbmd0aCkKKyAgICAgICAgICAgID8gY2FsY3VsYXRlV2l0
aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIoaGFzaCwgY2hhcmFjdGVyc1tpbmRleF0pCisgICAgICAg
ICAgICA6IGhhc2hJbXBsKGNhbGN1bGF0ZShoYXNoLCBjaGFyYWN0ZXJzW2luZGV4XSwgY2hhcmFj
dGVyc1tpbmRleCArIDFdKSwgaW5kZXggKyAyLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIH0K
K307CisKIGNsYXNzIEludGVnZXJIYXNoZXIgewogcHVibGljOgogICAgIHZvaWQgYWRkKHVuc2ln
bmVkIGludGVnZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwu
Y3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAppbmRleCA1Y2Q2NmMxMDgx
YWJmM2VjMmUyMjFlZGMyYjVjOGVkYWUyMjE4NmY3Li4yM2FjNzY0OWUzNzhmN2ZjY2RhZmJhZTEz
MDAzZTMxZmE1ODM2MjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0lt
cGwuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKQEAgLTEwMiw2
ICsxMDIsOCBAQCB2b2lkIFN0cmluZ1N0YXRzOjpwcmludFN0YXRzKCkKICNlbmRpZgogCiAKK1N0
cmluZ0ltcGwgU3RyaW5nSW1wbDo6c19lbXB0eVN0cmluZyhTdHJpbmdJbXBsOjpDb25zdHJ1Y3RF
bXB0eVN0cmluZywgIiIpOworCiBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiB7CiAgICAgQVNT
RVJUKCFpc1N0YXRpYygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKaW5kZXggMTc2YWE1OWM3
NDAzNzM5N2Q5ZWE3MzRhMWJlYzY1MzY0ODY0OTRmOC4uZDRiYjg5YmExZTk1N2QyYjllZWVjNDg0
YTNlZTU0NDMwOWVlYmM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKQEAgLTE0OSwxOCAr
MTQ5LDE4IEBAIGNsYXNzIFN0cmluZ0ltcGwgewogCiAgICAgLy8gVGhlIGJvdHRvbSA2IGJpdHMg
aW4gdGhlIGhhc2ggYXJlIGZsYWdzLgogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBzX2ZsYWdDb3VudCA9IDY7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBz
X2ZsYWdDb3VudCA9IDY7CiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2Zs
YWdNYXNrID0gKDF1IDw8IHNfZmxhZ0NvdW50KSAtIDE7Ci0gICAgQ09NUElMRV9BU1NFUlQoc19m
bGFnQ291bnQgPD0gU3RyaW5nSGFzaGVyOjpmbGFnQ291bnQsIFN0cmluZ0hhc2hlcl9yZXNlcnZl
c19lbm91Z2hfYml0c19mb3JfU3RyaW5nSW1wbF9mbGFncyk7Ci0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHNfZmxhZ1N0cmluZ0tpbmRDb3VudCA9IDQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBj
b25zdCB1bnNpZ25lZCBzX2ZsYWdNYXNrID0gKDF1IDw8IHNfZmxhZ0NvdW50KSAtIDE7CisgICAg
c3RhdGljX2Fzc2VydChzX2ZsYWdDb3VudCA8PSBTdHJpbmdIYXNoZXI6OmZsYWdDb3VudCwgIlN0
cmluZ0hhc2hlciByZXNlcnZlcyBlbm91Z2ggYml0cyBmb3IgU3RyaW5nSW1wbCBmbGFncyIpOwor
ICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19mbGFnU3RyaW5nS2luZENvdW50
ID0gNDsKIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnU3RyaW5nS2luZElz
QXRvbWljID0gMXUgPDwgKHNfZmxhZ1N0cmluZ0tpbmRDb3VudCk7Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1ib2wgPSAxdSA8PCAoc19mbGFnU3Ry
aW5nS2luZENvdW50ICsgMSk7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaE1hc2tT
dHJpbmdLaW5kID0gc19oYXNoRmxhZ1N0cmluZ0tpbmRJc0F0b21pYyB8IHNfaGFzaEZsYWdTdHJp
bmdLaW5kSXNTeW1ib2w7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWc4Qml0
QnVmZmVyID0gMXUgPDwgMzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ0Rp
ZFJlcG9ydENvc3QgPSAxdSA8PCAyOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hN
YXNrQnVmZmVyT3duZXJzaGlwID0gKDF1IDw8IDApIHwgKDF1IDw8IDEpOworICAgIHN0YXRpYyBj
b25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ1N0cmluZ0tpbmRJc0F0b21pYyA9IDF1
IDw8IChzX2ZsYWdTdHJpbmdLaW5kQ291bnQpOworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3Qg
dW5zaWduZWQgc19oYXNoRmxhZ1N0cmluZ0tpbmRJc1N5bWJvbCA9IDF1IDw8IChzX2ZsYWdTdHJp
bmdLaW5kQ291bnQgKyAxKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIHNf
aGFzaE1hc2tTdHJpbmdLaW5kID0gc19oYXNoRmxhZ1N0cmluZ0tpbmRJc0F0b21pYyB8IHNfaGFz
aEZsYWdTdHJpbmdLaW5kSXNTeW1ib2w7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNp
Z25lZCBzX2hhc2hGbGFnOEJpdEJ1ZmZlciA9IDF1IDw8IDM7CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnRGlkUmVwb3J0Q29zdCA9IDF1IDw8IDI7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2hhc2hNYXNrQnVmZmVyT3duZXJzaGlw
ID0gKDF1IDw8IDApIHwgKDF1IDw8IDEpOwogCiAgICAgZW51bSBTdHJpbmdLaW5kIHsKICAgICAg
ICAgU3RyaW5nTm9ybWFsID0gMHUsIC8vIG5vbi1zeW1ib2wsIG5vbi1hdG9taWMKQEAgLTE3Mywx
OCArMTczLDE0IEBAIGNsYXNzIFN0cmluZ0ltcGwgewogICAgIC8vIHN0YXRpYyBzdHJpbmdzIHdp
bGwgYmUgc2hhcmVkIGFjcm9zcyB0aHJlYWRzICYgcmVmLWNvdW50ZWQgaW4gYSBub24tdGhyZWFk
c2FmZSBtYW5uZXIuCiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFN0cmluZ0ltcGw+
OwogICAgIGVudW0gQ29uc3RydWN0RW1wdHlTdHJpbmdUYWcgeyBDb25zdHJ1Y3RFbXB0eVN0cmlu
ZyB9OwotICAgIFN0cmluZ0ltcGwoQ29uc3RydWN0RW1wdHlTdHJpbmdUYWcpCisgICAgdGVtcGxh
dGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PgorICAgIGNvbnN0ZXhwciBTdHJpbmdJbXBsKENv
bnN0cnVjdEVtcHR5U3RyaW5nVGFnLCBjb25zdCBjaGFyICgmY2hhcmFjdGVycylbY2hhcmFjdGVy
c0NvdW50XSkKICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJp
bmcpCiAgICAgICAgICwgbV9sZW5ndGgoMCkKLSAgICAgICAgLCBtX2RhdGE4KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgTENoYXIqPigmbV9sZW5ndGgpKQotICAgICAgICAsIG1faGFzaEFuZEZsYWdz
KHNfaGFzaEZsYWc4Qml0QnVmZmVyIHwgU3RyaW5nQXRvbWljIHwgQnVmZmVyT3duZWQpCisgICAg
ICAgICwgbV9kYXRhOEZvclN0YXRpY1N0cmluZ0xpdGVyYWwoY2hhcmFjdGVycykKKyAgICAgICAg
LCBtX2hhc2hBbmRGbGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IFN0cmluZ0F0b21pYyB8IEJ1
ZmZlckludGVybmFsIHwgKENvbnN0ZXhwclN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNr
VG9wOEJpdHMoY2hhcmFjdGVycykgPDwgc19mbGFnQ291bnQpKQogICAgIHsKLSAgICAgICAgLy8g
RW5zdXJlIHRoYXQgdGhlIGhhc2ggaXMgY29tcHV0ZWQgc28gdGhhdCBBdG9taWNTdHJpbmdIYXNo
IGNhbiBjYWxsIGV4aXN0aW5nSGFzaCgpCi0gICAgICAgIC8vIHdpdGggaW1wdW5pdHkuIFRoZSBl
bXB0eSBzdHJpbmcgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGlzIG5ldmVyIGVudGVyZWQgaW50bwot
ICAgICAgICAvLyBBdG9taWNTdHJpbmcncyBIYXNoS2V5LCBidXQgc3RpbGwgbmVlZHMgdG8gY29t
cGFyZSBjb3JyZWN0bHkuCi0gICAgICAgIFNUUklOR19TVEFUU19BRERfOEJJVF9TVFJJTkcobV9s
ZW5ndGgpOwotCi0gICAgICAgIGhhc2goKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChjaGFyYWN0
ZXJzQ291bnQgPT0gMSwgImNoYXJhY3RlcnMgc2hvdWxkIGJlIGVtcHR5IHN0cmluZyBsaXRlcmFs
Iik7CiAgICAgfQogCiAgICAgLy8gRklYTUU6IHRoZXJlIGhhcyB0byBiZSBhIGxlc3MgaGFja3kg
d2F5IHRvIGRvIHRoaXMuCkBAIC02MDYsNyArNjAyLDggQEAgY2xhc3MgU3RyaW5nSW1wbCB7CiAg
ICAgICAgIG1fcmVmQ291bnQgPSB0ZW1wUmVmQ291bnQ7CiAgICAgfQogCi0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBTdHJpbmdJbXBsKiBlbXB0eSgpOworICAgIFdURl9FWFBPUlREQVRB
IHN0YXRpYyBTdHJpbmdJbXBsIHNfZW1wdHlTdHJpbmc7CisgICAgc3RhdGljIFN0cmluZ0ltcGwq
IGVtcHR5KCk7CiAKICAgICAvLyBGSVhNRTogRG9lcyB0aGlzIHJlYWxseSBiZWxvbmcgaW4gU3Ry
aW5nSW1wbD8KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgY29weUNoYXJz
KFQqIGRlc3RpbmF0aW9uLCBjb25zdCBUKiBzb3VyY2UsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMp
CkBAIC05MDUsNiArOTAyLDggQEAgY2xhc3MgU3RyaW5nSW1wbCB7CiAgICAgdW5pb24gewogICAg
ICAgICBjb25zdCBMQ2hhciogbV9kYXRhODsKICAgICAgICAgY29uc3QgVUNoYXIqIG1fZGF0YTE2
OworICAgICAgICBjb25zdCBjaGFyKiBtX2RhdGE4Rm9yU3RhdGljU3RyaW5nTGl0ZXJhbDsKKyAg
ICAgICAgY29uc3QgY2hhcjE2X3QqIG1fZGF0YTE2Rm9yU3RhdGljU3RyaW5nTGl0ZXJhbDsKICAg
ICB9OwogICAgIG11dGFibGUgdW5zaWduZWQgbV9oYXNoQW5kRmxhZ3M7CiB9OwpAQCAtMTEzMCw2
ICsxMTI5LDExIEBAIGlubGluZSBSZWY8U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6aXNvbGF0ZWRD
b3B5KCkgY29uc3QKICAgICByZXR1cm4gY3JlYXRlKG1fZGF0YTE2LCBtX2xlbmd0aCk7CiB9CiAK
K2lubGluZSBTdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjplbXB0eSgpCit7CisgICAgcmV0dXJuICZz
X2VtcHR5U3RyaW5nOworfQorCiAvLyBTdHJpbmdIYXNoIGlzIHRoZSBkZWZhdWx0IGhhc2ggZm9y
IFN0cmluZ0ltcGwqIGFuZCBSZWZQdHI8U3RyaW5nSW1wbD4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFN0cmlu
Z0ltcGwqPiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1N0YXRpY3Mu
Y3BwIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcAppbmRleCBhZDllNmUz
OGI3ZWVjYjczYmY5ZDVmNDcxMDg5YWM2ZWZmMzdmNjI3Li4xZmNlMGJhZWY0YTFiNzk3NzFiYTkz
MzA3NTBlOTM2ZDE5NWZiZWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmlu
Z1N0YXRpY3MuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nU3RhdGljcy5jcHAK
QEAgLTQ3LDEyICs0Nyw2IEBAIFN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6Om51bGwoKQogICAgIHJl
dHVybiAmbnVsbFN0cmluZy5nZXQoKTsKIH0KIAotU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6ZW1w
dHkoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmdJbXBsPiBlbXB0eVN0cmlu
ZyhDb25zdHJ1Y3RFbXB0eVN0cmluZyk7Ci0gICAgcmV0dXJuICZlbXB0eVN0cmluZy5nZXQoKTsK
LX0KLQogLy8gSW4gYWRkaXRpb24gdG8gdGhlIG5vcm1hbCBoYXNoIHZhbHVlLCBzdG9yZSBzcGVj
aWFsaXplZCBoYXNoIHZhbHVlIGZvcgogLy8gc3ltYm9saXplZCBTdHJpbmdJbXBsKi4gQW5kIGRv
bid0IHVzZSB0aGUgbm9ybWFsIGhhc2ggdmFsdWUgZm9yIHN5bWJvbGl6ZWQKIC8vIFN0cmluZ0lt
cGwqIHdoZW4gdGhleSBhcmUgdHJlYXRlZCBhcyBJZGVudGlmaWVycy4gVW5pcXVlIG5hdHVyZSBv
ZiB0aGVzZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295588</attachid>
            <date>2016-11-29 01:14:00 -0800</date>
            <delta_ts>2016-11-29 01:24:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165093-20161129181335.patch</filename>
            <type>text/plain</type>
            <size>18534</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5MDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiMWEyNGY5OGViZGQ0MTI3YmM5Y2M0
NWUwN2QyOWFhMmM3YThiZTguLjhjYTU1ZTJhNmUwYWQ0ZWUwMGNjMWQ3MGJmZjEyYWNlNmM1ZWJi
YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTYtMTEtMjkgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFN0cmluZ0ltcGw6
OlN0YXRpY1N0cmluZ0ltcGwgd2l0aCBjb25zdGV4cHIgY29uc3RydWN0b3IKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTA5MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBuZXcg
Y2xhc3MsIFN0cmluZ0ltcGw6OlN0YXRpY1N0cmluZ0ltcGwuCisgICAgICAgIEJ5IHVzaW5nIHRo
aXMgY2xhc3MsIHdlIGNhbiBlYXNpbHkgY3JlYXRlIHN0YXRpYyBTdHJpbmdJbXBscy4KKyAgICAg
ICAgVGhpcyBjbGFzcyBoYXMgY29uc3RleHByIGNvbnN0cnVjdG9yLiBZb3UgY2FuIGluaXRpYWxp
emUgaW5zdGFuY2VzCisgICAgICAgIG9mIHRoaXMgY2xhc3MgYXMgZ2xvYmFsIHN0YXRpYyB2YXJp
YWJsZXMgd2l0aG91dCBpbnZva2luZyBnbG9iYWwKKyAgICAgICAgY29uc3RydWN0b3JzLgorCisg
ICAgICAgIFdlIGFscmVhZHkgaGF2ZSBzaW1pbGFyIHN5c3RlbSwgU3RhdGljQVNDSUlMaXRlcmFs
LiBCdXQgdXNpbmcgaXQKKyAgICAgICAgcmVxdWlyZXMgc29tZSBzcGVjaWFsIHBlcmwgc2NyaXB0
IHNpbmNlIHdlIG5lZWQgdG8gY2FsY3VsYXRlCisgICAgICAgIGhhc2ggdmFsdWUuIE9uIHRoZSBv
dGhlciBoYW5kLCB3ZSBjYW4gdXNlIFN0YXRpY1N0cmluZ0ltcGwgd2l0aG91dAorICAgICAgICBh
bnkgc2NyaXB0IHN1cHBvcnRzIHNpbmNlIHdlIGltcGxlbWVudCBjb25zdGV4cHIgaGFzaCBmdW5j
dGlvbi4KKyAgICAgICAgSW4gdGhlIGZ1dHVyZSwgd2Ugd2lsbCByZXBsYWNlIGFsbCB0aGUgdXNl
IG9mIFN0YXRpY0FTQ0lJTGl0ZXJhbAorICAgICAgICB3aXRoIHRoaXMgU3RhdGljU3RyaW5nSW1w
bC4KKworICAgICAgICBXZSBkZWZpbmUgZW1wdHkgLyBudWxsIHN0cmluZ3MgYXMgU3RhdGljU3Ry
aW5nSW1wbC4gQW5kIHdlIG1ha2UKKyAgICAgICAgU3RyaW5nSW1wbDo6ZW1wdHkoKSAmIFN0cmlu
Z0ltcGw6Om51bGwoKSBpbmxpbmUgZnVuY3Rpb25zLgorCisgICAgICAgICogd3RmL0hhc2hlci5o
OgorICAgICAgICAoV1RGOjpTdHJpbmdIYXNoZXI6Omhhc2hXaXRoVG9wOEJpdHNNYXNrZWQpOgor
ICAgICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKToKKyAgICAg
ICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0
cyk6CisgICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hhc2hlcjo6YXZhbGFuY2hlQml0czMp
OgorICAgICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmF2YWxhbmNoZUJpdHMyKToK
KyAgICAgICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFzaGVyOjphdmFsYW5jaGVCaXRzMSk6Cisg
ICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hhc2hlcjo6YXZhbGFuY2hlQml0czApOgorICAg
ICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmF2YWxhbmNoZUJpdHMpOgorICAgICAg
ICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmF2b2lkWmVybyk6CisgICAgICAgIChXVEY6
OkNvbnN0ZXhwclN0cmluZ0hhc2hlcjo6ZmluYWxpemUpOgorICAgICAgICAoV1RGOjpDb25zdGV4
cHJTdHJpbmdIYXNoZXI6OmZpbmFsaXplQW5kTWFza1RvcDhCaXRzKToKKyAgICAgICAgKFdURjo6
Q29uc3RleHByU3RyaW5nSGFzaGVyOjpjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3Rl
cjEpOgorICAgICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmNhbGN1bGF0ZVdpdGhS
ZW1haW5pbmdMYXN0Q2hhcmFjdGVyMCk6CisgICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hh
c2hlcjo6Y2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIpOgorICAgICAgICAoV1RG
OjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmNhbGN1bGF0ZTEpOgorICAgICAgICAoV1RGOjpDb25z
dGV4cHJTdHJpbmdIYXNoZXI6OmNhbGN1bGF0ZTApOgorICAgICAgICAoV1RGOjpDb25zdGV4cHJT
dHJpbmdIYXNoZXI6OmNhbGN1bGF0ZSk6CisgICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hh
c2hlcjo6aGFzaEltcGwpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAg
ICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6
U3RhdGljU3RyaW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6Om51bGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjplbXB0eSk6CisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nU3RhdGljcy5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6
Om51bGwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjplbXB0eSk6IERlbGV0
ZWQuCisKIDIwMTYtMTEtMjggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFN0cmVhbWxpbmUgYW5kIHNwZWVkIHVwIHRva2VuaXplciBhbmQgc2VnbWVudGVkIHN0cmlu
ZyBjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaCBiL1NvdXJjZS9X
VEYvd3RmL0hhc2hlci5oCmluZGV4IDAyMzRiYjI3MDZiOTJhYzg2Yjg4Y2Q3ZTc1YmYyMDRkYjc5
MTc3NGUuLjY3MDllMmNkYTQzYWViZDljMzJmZThkNWMzNzM3NzQ3NjZjNzAwMmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5o
CkBAIC0zNiwxMSArMzYsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAvLyBKYXZhU2NyaXB0Q29yZSBh
bmQgdGhlIENvZGVHZW5lcmF0b3JKUy5wbSBzY3JpcHQgaW4gV2ViQ29yZS4KIAogLy8gR29sZGVu
IHJhdGlvLiBBcmJpdHJhcnkgc3RhcnQgdmFsdWUgdG8gYXZvaWQgbWFwcGluZyBhbGwgemVyb3Mg
dG8gYSBoYXNoIHZhbHVlIG9mIHplcm8uCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3RyaW5nSGFz
aGluZ1N0YXJ0VmFsdWUgPSAweDlFMzc3OUI5VTsKK3N0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5z
aWduZWQgc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUgPSAweDlFMzc3OUI5VTsKIAogY2xhc3MgU3Ry
aW5nSGFzaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmxhZ0NvdW50
ID0gODsgLy8gU2F2ZSA4IGJpdHMgZm9yIFN0cmluZ0ltcGwgdG8gdXNlIGFzIGZsYWdzLgorICAg
IHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgZmxhZ0NvdW50ID0gODsgLy8gU2F2ZSA4
IGJpdHMgZm9yIFN0cmluZ0ltcGwgdG8gdXNlIGFzIGZsYWdzLgorICAgIHN0YXRpYyBjb25zdGV4
cHIgY29uc3QgdW5zaWduZWQgbWFza0hhc2ggPSAoMVUgPDwgKHNpemVvZih1bnNpZ25lZCkgKiA4
IC0gZmxhZ0NvdW50KSkgLSAxOwogCiAgICAgU3RyaW5nSGFzaGVyKCkKICAgICAgICAgOiBtX2hh
c2goc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUpCkBAIC0xNjYsNyArMTY3LDcgQEAgY2xhc3MgU3Ry
aW5nSGFzaGVyIHsKIAogICAgICAgICAvLyBSZXNlcnZpbmcgc3BhY2UgZnJvbSB0aGUgaGlnaCBi
aXRzIGZvciBmbGFncyBwcmVzZXJ2ZXMgbW9zdCBvZiB0aGUgaGFzaCdzCiAgICAgICAgIC8vIHZh
bHVlLCBzaW5jZSBoYXNoIGxvb2t1cCB0eXBpY2FsbHkgbWFza3Mgb3V0IHRoZSBoaWdoIGJpdHMg
YW55d2F5LgotICAgICAgICByZXN1bHQgJj0gKDFVIDw8IChzaXplb2YocmVzdWx0KSAqIDggLSBm
bGFnQ291bnQpKSAtIDE7CisgICAgICAgIHJlc3VsdCAmPSBtYXNrSGFzaDsKIAogICAgICAgICAv
LyBUaGlzIGF2b2lkcyBldmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5jZSB0aGF0
IGlzIHVzZWQgdG8KICAgICAgICAgLy8gc2lnbmFsICJoYXNoIG5vdCBjb21wdXRlZCB5ZXQiLiBT
ZXR0aW5nIHRoZSBoaWdoIGJpdCBtYWludGFpbnMKQEAgLTI5NCw2ICsyOTUsMTA4IEBAIGNsYXNz
IFN0cmluZ0hhc2hlciB7CiAgICAgVUNoYXIgbV9wZW5kaW5nQ2hhcmFjdGVyOwogfTsKIAorLy8g
RklYTUU6IFdlYktpdEdUSysgcmVxdWlyZXMgR0NDIDQuOSwgd2hpY2ggZG9lcyBub3Qgc3VwcG9y
dCByZWxheGVkIGNvbnN0ZXhwciBpbiBDKysxNC4KKy8vIE9uY2UgaXQgaXMgc3VwcG9ydGVkLCB3
ZSBjYW4gc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9uLgorY2xhc3MgQ29uc3RleHByU3RyaW5n
SGFzaGVyIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBjaGFy
YWN0ZXJzQ291bnQ+CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlSGFzaChj
b25zdCBUICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmaW5hbGl6ZShoYXNoSW1wbChzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZSwgMCwgY2hhcmFj
dGVycywgY2hhcmFjdGVyc0NvdW50IC0gMSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGNvbnN0IFQgKCZjaGFyYWN0ZXJzKVtj
aGFyYWN0ZXJzQ291bnRdKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmFsaXplQW5kTWFza1Rv
cDhCaXRzKGhhc2hJbXBsKHN0cmluZ0hhc2hpbmdTdGFydFZhbHVlLCAwLCBjaGFyYWN0ZXJzLCBj
aGFyYWN0ZXJzQ291bnQgLSAxKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czModW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBoYXNoIF4gKGhhc2ggPDwgMTApOworICAgIH0KKworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czIodW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhdmFsYW5jaGVCaXRzMyhoYXNoICsgKGhhc2ggPj4gMTUpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHMxKHVuc2lnbmVkIGhh
c2gpCisgICAgeworICAgICAgICByZXR1cm4gYXZhbGFuY2hlQml0czIoaGFzaCBeIChoYXNoIDw8
IDIpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJp
dHMwKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gYXZhbGFuY2hlQml0czEo
aGFzaCArIChoYXNoID4+IDUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGF2YWxhbmNoZUJpdHModW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
dmFsYW5jaGVCaXRzMChoYXNoIF4gKGhhc2ggPDwgMykpOworICAgIH0KKworICAgIC8vIFRoaXMg
YXZvaWRzIGV2ZXIgcmV0dXJuaW5nIGEgaGFzaCBjb2RlIG9mIDAsIHNpbmNlIHRoYXQgaXMgdXNl
ZCB0bworICAgIC8vIHNpZ25hbCAiaGFzaCBub3QgY29tcHV0ZWQgeWV0Ii4gU2V0dGluZyB0aGUg
aGlnaCBiaXQgbWFpbnRhaW5zCisgICAgLy8gcmVhc29uYWJsZSBmaWRlbGl0eSB0byBhIGhhc2gg
Y29kZSBvZiAwIGJlY2F1c2UgaXQgaXMgbGlrZWx5IHRvIHlpZWxkCisgICAgLy8gZXhhY3RseSAw
IHdoZW4gaGFzaCBsb29rdXAgbWFza3Mgb3V0IHRoZSBoaWdoIGJpdHMuCisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBhdm9pZFplcm8odW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAg
IHJldHVybiBoYXNoID8gaGFzaCA6ICgweDgwMDAwMDAwID4+IFN0cmluZ0hhc2hlcjo6ZmxhZ0Nv
dW50KTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGZpbmFsaXplKHVu
c2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gYXZvaWRaZXJvKGF2YWxhbmNoZUJp
dHMoaGFzaCkpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZmluYWxp
emVBbmRNYXNrVG9wOEJpdHModW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIC8vIFJlc2Vy
dmluZyBzcGFjZSBmcm9tIHRoZSBoaWdoIGJpdHMgZm9yIGZsYWdzIHByZXNlcnZlcyBtb3N0IG9m
IHRoZSBoYXNoJ3MKKyAgICAgICAgLy8gdmFsdWUsIHNpbmNlIGhhc2ggbG9va3VwIHR5cGljYWxs
eSBtYXNrcyBvdXQgdGhlIGhpZ2ggYml0cyBhbnl3YXkuCisgICAgICAgIHJldHVybiBhdm9pZFpl
cm8oYXZhbGFuY2hlQml0cyhoYXNoKSAmIFN0cmluZ0hhc2hlcjo6bWFza0hhc2gpOworICAgIH0K
KworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xh
c3RDaGFyYWN0ZXIxKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gaGFzaCAr
IChoYXNoID4+IDE3KTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNh
bGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyMCh1bnNpZ25lZCBoYXNoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyMSgoaGFz
aCA8PCAxMSkgXiBoYXNoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyKHVuc2lnbmVkIGhhc2gsIHVuc2ln
bmVkIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxjdWxhdGVXaXRoUmVtYWlu
aW5nTGFzdENoYXJhY3RlcjAoaGFzaCArIGNoYXJhY3Rlcik7CisgICAgfQorCisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGUxKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAg
ICAgICByZXR1cm4gaGFzaCArIChoYXNoID4+IDExKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIGNhbGN1bGF0ZTAodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgc2Vjb25k
Q2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZTEoKGhhc2ggPDwgMTYp
IF4gKChzZWNvbmRDaGFyYWN0ZXIgPDwgMTEpIF4gaGFzaCkpOworICAgIH0KKworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlKHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIGZp
cnN0Q2hhcmFjdGVyLCB1bnNpZ25lZCBzZWNvbmRDaGFyYWN0ZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gY2FsY3VsYXRlMChoYXNoICsgZmlyc3RDaGFyYWN0ZXIsIHNlY29uZENoYXJhY3Rlcik7
CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBoYXNoSW1wbCh1bnNpZ25l
ZCBoYXNoLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChpbmRleCA9PSBsZW5ndGgpCisgICAgICAg
ICAgICA/IGhhc2ggOiAoKGluZGV4ICsgMSkgPT0gbGVuZ3RoKQorICAgICAgICAgICAgPyBjYWxj
dWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcihoYXNoLCBjaGFyYWN0ZXJzW2luZGV4XSkK
KyAgICAgICAgICAgIDogaGFzaEltcGwoY2FsY3VsYXRlKGhhc2gsIGNoYXJhY3RlcnNbaW5kZXhd
LCBjaGFyYWN0ZXJzW2luZGV4ICsgMV0pLCBpbmRleCArIDIsIGNoYXJhY3RlcnMsIGxlbmd0aCk7
CisgICAgfQorfTsKKwogY2xhc3MgSW50ZWdlckhhc2hlciB7CiBwdWJsaWM6CiAgICAgdm9pZCBh
ZGQodW5zaWduZWQgaW50ZWdlcikKQEAgLTMxNCw1ICs0MTcsNiBAQCBjbGFzcyBJbnRlZ2VySGFz
aGVyIHsKIAogdXNpbmcgV1RGOjpJbnRlZ2VySGFzaGVyOwogdXNpbmcgV1RGOjpTdHJpbmdIYXNo
ZXI7Cit1c2luZyBXVEY6OkNvbnN0ZXhwclN0cmluZ0hhc2hlcjsKIAogI2VuZGlmIC8vIFdURl9I
YXNoZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKaW5kZXggNWNkNjZjMTA4MWFiZjNl
YzJlMjIxZWRjMmI1YzhlZGFlMjIxODZmNy4uN2QwYTcwMThiNDllYzliODJiNWIyYmY2ODllNmRl
ZjE5YjM3OTkwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0xMDEsNiArMTAx
LDggQEAgdm9pZCBTdHJpbmdTdGF0czo6cHJpbnRTdGF0cygpCiB9CiAjZW5kaWYKIAorU3RyaW5n
SW1wbDo6U3RhdGljU3RyaW5nSW1wbCBTdHJpbmdJbXBsOjpzX2F0b21pY051bGxTdHJpbmcoIiIs
IFN0cmluZ0ltcGw6OlN0cmluZ0F0b21pYyk7CitTdHJpbmdJbXBsOjpTdGF0aWNTdHJpbmdJbXBs
IFN0cmluZ0ltcGw6OnNfYXRvbWljRW1wdHlTdHJpbmcoIiIsIFN0cmluZ0ltcGw6OlN0cmluZ0F0
b21pYyk7CiAKIFN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgKaW5kZXggMTc2YWE1OWM3NDAzNzM5N2Q5ZWE3MzRhMWJlYzY1MzY0ODY0OTRmOC4uNWQ4
NDFkMjYwNTZmMzE1MzcwNTRjNmZlYWU2ZGM0ZTg0ZWRlOGFmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmgKQEAgLTE0OSwxOCArMTQ5LDE4IEBAIGNsYXNzIFN0cmluZ0ltcGwgewogCiAgICAg
Ly8gVGhlIGJvdHRvbSA2IGJpdHMgaW4gdGhlIGhhc2ggYXJlIGZsYWdzLgogcHVibGljOgotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2ZsYWdDb3VudCA9IDY7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBjb25zdCB1bnNpZ25lZCBzX2ZsYWdDb3VudCA9IDY7CiBwcml2YXRlOgotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzX2ZsYWdNYXNrID0gKDF1IDw8IHNfZmxhZ0NvdW50KSAtIDE7Ci0g
ICAgQ09NUElMRV9BU1NFUlQoc19mbGFnQ291bnQgPD0gU3RyaW5nSGFzaGVyOjpmbGFnQ291bnQs
IFN0cmluZ0hhc2hlcl9yZXNlcnZlc19lbm91Z2hfYml0c19mb3JfU3RyaW5nSW1wbF9mbGFncyk7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfZmxhZ1N0cmluZ0tpbmRDb3VudCA9IDQ7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2ZsYWdNYXNrID0gKDF1IDw8IHNf
ZmxhZ0NvdW50KSAtIDE7CisgICAgc3RhdGljX2Fzc2VydChzX2ZsYWdDb3VudCA8PSBTdHJpbmdI
YXNoZXI6OmZsYWdDb3VudCwgIlN0cmluZ0hhc2hlciByZXNlcnZlcyBlbm91Z2ggYml0cyBmb3Ig
U3RyaW5nSW1wbCBmbGFncyIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQg
c19mbGFnU3RyaW5nS2luZENvdW50ID0gNDsKIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
X2hhc2hGbGFnU3RyaW5nS2luZElzQXRvbWljID0gMXUgPDwgKHNfZmxhZ1N0cmluZ0tpbmRDb3Vu
dCk7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1i
b2wgPSAxdSA8PCAoc19mbGFnU3RyaW5nS2luZENvdW50ICsgMSk7Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNfaGFzaE1hc2tTdHJpbmdLaW5kID0gc19oYXNoRmxhZ1N0cmluZ0tpbmRJc0F0
b21pYyB8IHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1ib2w7Ci0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHNfaGFzaEZsYWc4Qml0QnVmZmVyID0gMXUgPDwgMzsKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgc19oYXNoRmxhZ0RpZFJlcG9ydENvc3QgPSAxdSA8PCAyOwotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBzX2hhc2hNYXNrQnVmZmVyT3duZXJzaGlwID0gKDF1IDw8IDApIHwgKDF1
IDw8IDEpOworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ1N0
cmluZ0tpbmRJc0F0b21pYyA9IDF1IDw8IChzX2ZsYWdTdHJpbmdLaW5kQ291bnQpOworICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ1N0cmluZ0tpbmRJc1N5bWJv
bCA9IDF1IDw8IChzX2ZsYWdTdHJpbmdLaW5kQ291bnQgKyAxKTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGNvbnN0IHVuc2lnbmVkIHNfaGFzaE1hc2tTdHJpbmdLaW5kID0gc19oYXNoRmxhZ1N0cmlu
Z0tpbmRJc0F0b21pYyB8IHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1ib2w7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnOEJpdEJ1ZmZlciA9IDF1IDw8IDM7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnRGlkUmVwb3J0
Q29zdCA9IDF1IDw8IDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2hh
c2hNYXNrQnVmZmVyT3duZXJzaGlwID0gKDF1IDw8IDApIHwgKDF1IDw8IDEpOwogCiAgICAgZW51
bSBTdHJpbmdLaW5kIHsKICAgICAgICAgU3RyaW5nTm9ybWFsID0gMHUsIC8vIG5vbi1zeW1ib2ws
IG5vbi1hdG9taWMKQEAgLTE2OCwyNSArMTY4LDYgQEAgY2xhc3MgU3RyaW5nSW1wbCB7CiAgICAg
ICAgIFN0cmluZ1N5bWJvbCA9IHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1ib2wsIC8vIHN5bWJv
bCwgbm9uLWF0b21pYwogICAgIH07CiAKLSAgICAvLyBVc2VkIHRvIGNvbnN0cnVjdCBzdGF0aWMg
c3RyaW5ncywgd2hpY2ggaGF2ZSBhbiBzcGVjaWFsIHJlZkNvdW50IHRoYXQgY2FuIG5ldmVyIGhp
dCB6ZXJvLgotICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RhdGljIHN0cmluZyB3aWxsIG5l
dmVyIGJlIGRlc3Ryb3llZCwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UKLSAgICAvLyBzdGF0
aWMgc3RyaW5ncyB3aWxsIGJlIHNoYXJlZCBhY3Jvc3MgdGhyZWFkcyAmIHJlZi1jb3VudGVkIGlu
IGEgbm9uLXRocmVhZHNhZmUgbWFubmVyLgotICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmdJbXBsPjsKLSAgICBlbnVtIENvbnN0cnVjdEVtcHR5U3RyaW5nVGFnIHsgQ29uc3Ry
dWN0RW1wdHlTdHJpbmcgfTsKLSAgICBTdHJpbmdJbXBsKENvbnN0cnVjdEVtcHR5U3RyaW5nVGFn
KQotICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZykKLSAg
ICAgICAgLCBtX2xlbmd0aCgwKQotICAgICAgICAsIG1fZGF0YTgocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCZtX2xlbmd0aCkpCi0gICAgICAgICwgbV9oYXNoQW5kRmxhZ3Moc19oYXNo
RmxhZzhCaXRCdWZmZXIgfCBTdHJpbmdBdG9taWMgfCBCdWZmZXJPd25lZCkKLSAgICB7Ci0gICAg
ICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXNoIGlzIGNvbXB1dGVkIHNvIHRoYXQgQXRvbWljU3Ry
aW5nSGFzaCBjYW4gY2FsbCBleGlzdGluZ0hhc2goKQotICAgICAgICAvLyB3aXRoIGltcHVuaXR5
LiBUaGUgZW1wdHkgc3RyaW5nIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBpcyBuZXZlciBlbnRlcmVk
IGludG8KLSAgICAgICAgLy8gQXRvbWljU3RyaW5nJ3MgSGFzaEtleSwgYnV0IHN0aWxsIG5lZWRz
IHRvIGNvbXBhcmUgY29ycmVjdGx5LgotICAgICAgICBTVFJJTkdfU1RBVFNfQUREXzhCSVRfU1RS
SU5HKG1fbGVuZ3RoKTsKLQotICAgICAgICBoYXNoKCk7Ci0gICAgfQotCiAgICAgLy8gRklYTUU6
IHRoZXJlIGhhcyB0byBiZSBhIGxlc3MgaGFja3kgd2F5IHRvIGRvIHRoaXMuCiAgICAgZW51bSBG
b3JjZThCaXQgeyBGb3JjZThCaXRDb25zdHJ1Y3RvciB9OwogICAgIC8vIENyZWF0ZSBhIG5vcm1h
bCA4LWJpdCBzdHJpbmcgd2l0aCBpbnRlcm5hbCBzdG9yYWdlIChCdWZmZXJJbnRlcm5hbCkKQEAg
LTYwNiw3ICs1ODcsNDQgQEAgY2xhc3MgU3RyaW5nSW1wbCB7CiAgICAgICAgIG1fcmVmQ291bnQg
PSB0ZW1wUmVmQ291bnQ7CiAgICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBT
dHJpbmdJbXBsKiBlbXB0eSgpOworICAgIGNsYXNzIFN0YXRpY1N0cmluZ0ltcGwgeworICAgIHB1
YmxpYzoKKyAgICAgICAgLy8gVXNlZCB0byBjb25zdHJ1Y3Qgc3RhdGljIHN0cmluZ3MsIHdoaWNo
IGhhdmUgYW4gc3BlY2lhbCByZWZDb3VudCB0aGF0IGNhbiBuZXZlciBoaXQgemVyby4KKyAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBzdGF0aWMgc3RyaW5nIHdpbGwgbmV2ZXIgYmUgZGVz
dHJveWVkLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZQorICAgICAgICAvLyBzdGF0aWMgc3Ry
aW5ncyB3aWxsIGJlIHNoYXJlZCBhY3Jvc3MgdGhyZWFkcyAmIHJlZi1jb3VudGVkIGluIGEgbm9u
LXRocmVhZHNhZmUgbWFubmVyLgorICAgICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJz
Q291bnQ+CisgICAgICAgIGNvbnN0ZXhwciBTdGF0aWNTdHJpbmdJbXBsKGNvbnN0IGNoYXIgKCZj
aGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdLCBTdHJpbmdLaW5kIHN0cmluZ0tpbmQgPSBTdHJp
bmdOb3JtYWwpCisgICAgICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEZsYWdJc1N0YXRp
Y1N0cmluZykKKyAgICAgICAgICAgICwgbV9sZW5ndGgoY2hhcmFjdGVyc0NvdW50IC0gMSkKKyAg
ICAgICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQorICAgICAgICAgICAgLCBtX2hhc2hBbmRG
bGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IHN0cmluZ0tpbmQgfCBCdWZmZXJJbnRlcm5hbCB8
IChDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGNoYXJh
Y3RlcnMpIDw8IHNfZmxhZ0NvdW50KSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
dGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PgorICAgICAgICBjb25zdGV4cHIgU3Rh
dGljU3RyaW5nSW1wbChjb25zdCBjaGFyMTZfdCAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3Vu
dF0sIFN0cmluZ0tpbmQgc3RyaW5nS2luZCA9IFN0cmluZ05vcm1hbCkKKyAgICAgICAgICAgIDog
bV9yZWZDb3VudChzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nKQorICAgICAgICAgICAgLCBt
X2xlbmd0aChjaGFyYWN0ZXJzQ291bnQgLSAxKQorICAgICAgICAgICAgLCBtX2RhdGExNihjaGFy
YWN0ZXJzKQorICAgICAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhzdHJpbmdLaW5kIHwgQnVmZmVy
SW50ZXJuYWwgfCAoQ29uc3RleHByU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4
Qml0cyhjaGFyYWN0ZXJzKSA8PCBzX2ZsYWdDb3VudCkpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gVGhlc2UgbWVtYmVyIHZhcmlhYmxlcyBtdXN0IG1h
dGNoIHRoZSBsYXlvdXQgb2YgU3RyaW5nSW1wbC4KKyAgICAgICAgdW5zaWduZWQgbV9yZWZDb3Vu
dDsKKyAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIG1fZGF0YTg7CisgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogbV9k
YXRhMTY7CisgICAgICAgIH07CisgICAgICAgIHVuc2lnbmVkIG1faGFzaEFuZEZsYWdzOworICAg
IH07CisKKyAgICBXVEZfRVhQT1JUREFUQSBzdGF0aWMgU3RhdGljU3RyaW5nSW1wbCBzX2F0b21p
Y051bGxTdHJpbmc7CisgICAgV1RGX0VYUE9SVERBVEEgc3RhdGljIFN0YXRpY1N0cmluZ0ltcGwg
c19hdG9taWNFbXB0eVN0cmluZzsKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBTdHJpbmdJbXBs
KiBudWxsKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJpbmdJbXBsKj4oJnNfYXRvbWlj
TnVsbFN0cmluZyk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyBTdHJpbmdJbXBsKiBlbXB0
eSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RyaW5nSW1wbCo+KCZzX2F0b21pY0VtcHR5
U3RyaW5nKTsgfQogCiAgICAgLy8gRklYTUU6IERvZXMgdGhpcyByZWFsbHkgYmVsb25nIGluIFN0
cmluZ0ltcGw/CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0YXRpYyB2b2lkIGNvcHlDaGFy
cyhUKiBkZXN0aW5hdGlvbiwgY29uc3QgVCogc291cmNlLCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJz
KQpAQCAtODY2LDcgKzg4NCw2IEBAIGNsYXNzIFN0cmluZ0ltcGwgewogICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBDaGFyVHlwZT4gc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBjcmVhdGVJbnRlcm5hbChj
b25zdCBDaGFyVHlwZSosIHVuc2lnbmVkKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTkVWRVJf
SU5MSU5FIHVuc2lnbmVkIGhhc2hTbG93Q2FzZSgpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdW5zaWduZWQgbmV4dEhhc2hGb3JTeW1ib2woKTsKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFN0cmluZ0ltcGwqIG51bGwoKTsKIAogICAgIC8vIFRoZSBib3R0b20g
Yml0IGluIHRoZSByZWYgY291bnQgaW5kaWNhdGVzIGEgc3RhdGljIChpbW1vcnRhbCkgc3RyaW5n
LgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5n
ID0gMHgxOwpAQCAtODc3LDYgKzg5NCw4IEBAIGNsYXNzIFN0cmluZ0ltcGwgewogI2VuZGlmCiAK
IHB1YmxpYzoKKyAgICAvLyBGSVhNRTogSXQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggU3RhdGlj
U3RyaW5nSW1wbC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1MTM0CiAgICAgc3RydWN0IFN0YXRpY0FTQ0lJTGl0ZXJhbCB7CiAgICAgICAgIC8vIFRo
ZXNlIG1lbWJlciB2YXJpYWJsZXMgbXVzdCBtYXRjaCB0aGUgbGF5b3V0IG9mIFN0cmluZ0ltcGwu
CiAgICAgICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7CkBAIC04OTksNyArOTE4LDcgQEAgY2xhc3Mg
U3RyaW5nSW1wbCB7CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICAvLyBUaGVzZSBtZW1iZXIgdmFy
aWFibGVzIG11c3QgbWF0Y2ggdGhlIGxheW91dCBvZiBTdGF0aWNBU0NJSUxpdGVyYWwuCisgICAg
Ly8gVGhlc2UgbWVtYmVyIHZhcmlhYmxlcyBtdXN0IG1hdGNoIHRoZSBsYXlvdXQgb2YgU3RhdGlj
QVNDSUlMaXRlcmFsIGFuZCBTdGF0aWNTdHJpbmdJbXBsLgogICAgIHVuc2lnbmVkIG1fcmVmQ291
bnQ7CiAgICAgdW5zaWduZWQgbV9sZW5ndGg7CiAgICAgdW5pb24gewpAQCAtOTEwLDYgKzkyOSw3
IEBAIGNsYXNzIFN0cmluZ0ltcGwgewogfTsKIAogc3RhdGljX2Fzc2VydChzaXplb2YoU3RyaW5n
SW1wbCkgPT0gc2l6ZW9mKFN0cmluZ0ltcGw6OlN0YXRpY0FTQ0lJTGl0ZXJhbCksICIiKTsKK3N0
YXRpY19hc3NlcnQoc2l6ZW9mKFN0cmluZ0ltcGwpID09IHNpemVvZihTdHJpbmdJbXBsOjpTdGF0
aWNTdHJpbmdJbXBsKSwgInNpemVvZihTdHJpbmdJbXBsKSBzaG91bGQgYmUgdGhlIHNhbWUgdG8g
c2l6ZW9mKFN0YXRpY1N0cmluZ0ltcGwpIik7CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAvLyBT
dHJpbmdJbXBscyBjcmVhdGVkIGZyb20gU3RhdGljQVNDSUlMaXRlcmFsIHdpbGwgQVNTRVJUCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1N0YXRpY3MuY3BwIGIvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcAppbmRleCBhZDllNmUzOGI3ZWVjYjczYmY5
ZDVmNDcxMDg5YWM2ZWZmMzdmNjI3Li4wZDI1NGE1ZTEwMzZiYmJiNTU4MjlkMDA1OGJkYWY3MTlh
MDg3NDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1N0YXRpY3MuY3Bw
CisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nU3RhdGljcy5jcHAKQEAgLTQxLDE4ICs0
MSw2IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi1TdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjpudWxs
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nSW1wbD4gbnVsbFN0cmluZyhD
b25zdHJ1Y3RFbXB0eVN0cmluZyk7Ci0gICAgcmV0dXJuICZudWxsU3RyaW5nLmdldCgpOwotfQot
Ci1TdHJpbmdJbXBsKiBTdHJpbmdJbXBsOjplbXB0eSgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFN0cmluZ0ltcGw+IGVtcHR5U3RyaW5nKENvbnN0cnVjdEVtcHR5U3RyaW5nKTsKLSAg
ICByZXR1cm4gJmVtcHR5U3RyaW5nLmdldCgpOwotfQotCiAvLyBJbiBhZGRpdGlvbiB0byB0aGUg
bm9ybWFsIGhhc2ggdmFsdWUsIHN0b3JlIHNwZWNpYWxpemVkIGhhc2ggdmFsdWUgZm9yCiAvLyBz
eW1ib2xpemVkIFN0cmluZ0ltcGwqLiBBbmQgZG9uJ3QgdXNlIHRoZSBub3JtYWwgaGFzaCB2YWx1
ZSBmb3Igc3ltYm9saXplZAogLy8gU3RyaW5nSW1wbCogd2hlbiB0aGV5IGFyZSB0cmVhdGVkIGFz
IElkZW50aWZpZXJzLiBVbmlxdWUgbmF0dXJlIG9mIHRoZXNlCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOTg0ZGM5NTFiMDFkZDM4ZjExMmQwNmJj
ODc4NjQzN2YzOWEyMGZiNi4uMmU3MDNiZDEzNTQwNzE5OTNjOTQyYzRkMmYxN2Q1NWIyZDNlOWI2
NyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzIEBACisyMDE2LTExLTI5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgorCisgICAgICAgIFtXVEZdIEludHJvZHVjZSBTdHJpbmdJbXBsOjpTdGF0aWNTdHJp
bmdJbXBsIHdpdGggY29uc3RleHByIGNvbnN0cnVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmlu
Z0ltcGwuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTYtMTEtMjgg
IFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjIwOTAwOC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
U3RyaW5nSW1wbC5jcHAKaW5kZXggOTg0OWRlYzNlNWI5MjU3OTllZjlmNzczYWZhZmExNmQxNzRl
NTI5OS4uMzRkMDg3Y2UyODRhNzA3MmU2YjNhMmZlNDQ5MmIxNWM0YzA0OWM0YiAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHAKQEAgLTI1LDYgKzI1LDcg
QEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N5bWJvbEltcGwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIApAQCAtNTc0LDQgKzU3NSwyMCBAQCBURVNUKFdURiwgU3RyaW5nSW1wbE51bGxTeW1i
b2xUb0F0b21pY1N0cmluZykKICAgICBBU1NFUlRfRkFMU0UocmVmZXJlbmNlLT5pc0F0b21pYygp
KTsKIH0KIAorVEVTVChXVEYsIFN0cmluZ0ltcGxDb25zdGV4cHJIYXNoZXIpCit7CisgICAgQVNT
RVJUX0VRKHN0cmluZ0Zyb21VVEY4KCIiKS0+aGFzaCgpLCBDb25zdGV4cHJTdHJpbmdIYXNoZXI6
OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKCIiKSk7CisgICAgQVNTRVJUX0VRKHN0cmluZ0Zy
b21VVEY4KCJBIiktPmhhc2goKSwgQ29uc3RleHByU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFu
ZE1hc2tUb3A4Qml0cygiQSIpKTsKKyAgICBBU1NFUlRfRVEoc3RyaW5nRnJvbVVURjgoIkFBIikt
Pmhhc2goKSwgQ29uc3RleHByU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0
cygiQUEiKSk7CisgICAgQVNTRVJUX0VRKHN0cmluZ0Zyb21VVEY4KCJDb2NvYSIpLT5oYXNoKCks
IENvbnN0ZXhwclN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoIkNvY29h
IikpOworICAgIEFTU0VSVF9FUShzdHJpbmdGcm9tVVRGOCgiQ2FwcHVjY2lubyIpLT5oYXNoKCks
IENvbnN0ZXhwclN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoIkNhcHB1
Y2Npbm8iKSk7Cit9CisKK1RFU1QoV1RGLCBTdHJpbmdJbXBsRW1wdHkpCit7CisgICAgQVNTRVJU
X0VRKFN0cmluZ0ltcGw6OmVtcHR5KCktPmxlbmd0aCgpLCAwKTsKKyAgICBBU1NFUlRfRVEoU3Ry
aW5nSW1wbDo6bnVsbCgpLT5sZW5ndGgoKSwgMCk7CisgICAgQVNTRVJUX05FKFN0cmluZ0ltcGw6
Om51bGwoKSwgU3RyaW5nSW1wbDo6ZW1wdHkoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295589</attachid>
            <date>2016-11-29 01:24:20 -0800</date>
            <delta_ts>2016-11-29 18:34:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165093-20161129182354.patch</filename>
            <type>text/plain</type>
            <size>18520</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5MDYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiMWEyNGY5OGViZGQ0MTI3YmM5Y2M0
NWUwN2QyOWFhMmM3YThiZTguLjhjYTU1ZTJhNmUwYWQ0ZWUwMGNjMWQ3MGJmZjEyYWNlNmM1ZWJi
YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTYtMTEtMjkgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFN0cmluZ0ltcGw6
OlN0YXRpY1N0cmluZ0ltcGwgd2l0aCBjb25zdGV4cHIgY29uc3RydWN0b3IKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTA5MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBuZXcg
Y2xhc3MsIFN0cmluZ0ltcGw6OlN0YXRpY1N0cmluZ0ltcGwuCisgICAgICAgIEJ5IHVzaW5nIHRo
aXMgY2xhc3MsIHdlIGNhbiBlYXNpbHkgY3JlYXRlIHN0YXRpYyBTdHJpbmdJbXBscy4KKyAgICAg
ICAgVGhpcyBjbGFzcyBoYXMgY29uc3RleHByIGNvbnN0cnVjdG9yLiBZb3UgY2FuIGluaXRpYWxp
emUgaW5zdGFuY2VzCisgICAgICAgIG9mIHRoaXMgY2xhc3MgYXMgZ2xvYmFsIHN0YXRpYyB2YXJp
YWJsZXMgd2l0aG91dCBpbnZva2luZyBnbG9iYWwKKyAgICAgICAgY29uc3RydWN0b3JzLgorCisg
ICAgICAgIFdlIGFscmVhZHkgaGF2ZSBzaW1pbGFyIHN5c3RlbSwgU3RhdGljQVNDSUlMaXRlcmFs
LiBCdXQgdXNpbmcgaXQKKyAgICAgICAgcmVxdWlyZXMgc29tZSBzcGVjaWFsIHBlcmwgc2NyaXB0
IHNpbmNlIHdlIG5lZWQgdG8gY2FsY3VsYXRlCisgICAgICAgIGhhc2ggdmFsdWUuIE9uIHRoZSBv
dGhlciBoYW5kLCB3ZSBjYW4gdXNlIFN0YXRpY1N0cmluZ0ltcGwgd2l0aG91dAorICAgICAgICBh
bnkgc2NyaXB0IHN1cHBvcnRzIHNpbmNlIHdlIGltcGxlbWVudCBjb25zdGV4cHIgaGFzaCBmdW5j
dGlvbi4KKyAgICAgICAgSW4gdGhlIGZ1dHVyZSwgd2Ugd2lsbCByZXBsYWNlIGFsbCB0aGUgdXNl
IG9mIFN0YXRpY0FTQ0lJTGl0ZXJhbAorICAgICAgICB3aXRoIHRoaXMgU3RhdGljU3RyaW5nSW1w
bC4KKworICAgICAgICBXZSBkZWZpbmUgZW1wdHkgLyBudWxsIHN0cmluZ3MgYXMgU3RhdGljU3Ry
aW5nSW1wbC4gQW5kIHdlIG1ha2UKKyAgICAgICAgU3RyaW5nSW1wbDo6ZW1wdHkoKSAmIFN0cmlu
Z0ltcGw6Om51bGwoKSBpbmxpbmUgZnVuY3Rpb25zLgorCisgICAgICAgICogd3RmL0hhc2hlci5o
OgorICAgICAgICAoV1RGOjpTdHJpbmdIYXNoZXI6Omhhc2hXaXRoVG9wOEJpdHNNYXNrZWQpOgor
ICAgICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKToKKyAgICAg
ICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0
cyk6CisgICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hhc2hlcjo6YXZhbGFuY2hlQml0czMp
OgorICAgICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmF2YWxhbmNoZUJpdHMyKToK
KyAgICAgICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFzaGVyOjphdmFsYW5jaGVCaXRzMSk6Cisg
ICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hhc2hlcjo6YXZhbGFuY2hlQml0czApOgorICAg
ICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmF2YWxhbmNoZUJpdHMpOgorICAgICAg
ICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmF2b2lkWmVybyk6CisgICAgICAgIChXVEY6
OkNvbnN0ZXhwclN0cmluZ0hhc2hlcjo6ZmluYWxpemUpOgorICAgICAgICAoV1RGOjpDb25zdGV4
cHJTdHJpbmdIYXNoZXI6OmZpbmFsaXplQW5kTWFza1RvcDhCaXRzKToKKyAgICAgICAgKFdURjo6
Q29uc3RleHByU3RyaW5nSGFzaGVyOjpjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3Rl
cjEpOgorICAgICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmNhbGN1bGF0ZVdpdGhS
ZW1haW5pbmdMYXN0Q2hhcmFjdGVyMCk6CisgICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hh
c2hlcjo6Y2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIpOgorICAgICAgICAoV1RG
OjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmNhbGN1bGF0ZTEpOgorICAgICAgICAoV1RGOjpDb25z
dGV4cHJTdHJpbmdIYXNoZXI6OmNhbGN1bGF0ZTApOgorICAgICAgICAoV1RGOjpDb25zdGV4cHJT
dHJpbmdIYXNoZXI6OmNhbGN1bGF0ZSk6CisgICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hh
c2hlcjo6aGFzaEltcGwpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAg
ICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6
U3RhdGljU3RyaW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6Om51bGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjplbXB0eSk6CisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nU3RhdGljcy5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6
Om51bGwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjplbXB0eSk6IERlbGV0
ZWQuCisKIDIwMTYtMTEtMjggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFN0cmVhbWxpbmUgYW5kIHNwZWVkIHVwIHRva2VuaXplciBhbmQgc2VnbWVudGVkIHN0cmlu
ZyBjbGFzc2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaCBiL1NvdXJjZS9X
VEYvd3RmL0hhc2hlci5oCmluZGV4IDAyMzRiYjI3MDZiOTJhYzg2Yjg4Y2Q3ZTc1YmYyMDRkYjc5
MTc3NGUuLjY3MDllMmNkYTQzYWViZDljMzJmZThkNWMzNzM3NzQ3NjZjNzAwMmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hlci5o
CkBAIC0zNiwxMSArMzYsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAvLyBKYXZhU2NyaXB0Q29yZSBh
bmQgdGhlIENvZGVHZW5lcmF0b3JKUy5wbSBzY3JpcHQgaW4gV2ViQ29yZS4KIAogLy8gR29sZGVu
IHJhdGlvLiBBcmJpdHJhcnkgc3RhcnQgdmFsdWUgdG8gYXZvaWQgbWFwcGluZyBhbGwgemVyb3Mg
dG8gYSBoYXNoIHZhbHVlIG9mIHplcm8uCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc3RyaW5nSGFz
aGluZ1N0YXJ0VmFsdWUgPSAweDlFMzc3OUI5VTsKK3N0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5z
aWduZWQgc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUgPSAweDlFMzc3OUI5VTsKIAogY2xhc3MgU3Ry
aW5nSGFzaGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZmxhZ0NvdW50
ID0gODsgLy8gU2F2ZSA4IGJpdHMgZm9yIFN0cmluZ0ltcGwgdG8gdXNlIGFzIGZsYWdzLgorICAg
IHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgZmxhZ0NvdW50ID0gODsgLy8gU2F2ZSA4
IGJpdHMgZm9yIFN0cmluZ0ltcGwgdG8gdXNlIGFzIGZsYWdzLgorICAgIHN0YXRpYyBjb25zdGV4
cHIgY29uc3QgdW5zaWduZWQgbWFza0hhc2ggPSAoMVUgPDwgKHNpemVvZih1bnNpZ25lZCkgKiA4
IC0gZmxhZ0NvdW50KSkgLSAxOwogCiAgICAgU3RyaW5nSGFzaGVyKCkKICAgICAgICAgOiBtX2hh
c2goc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUpCkBAIC0xNjYsNyArMTY3LDcgQEAgY2xhc3MgU3Ry
aW5nSGFzaGVyIHsKIAogICAgICAgICAvLyBSZXNlcnZpbmcgc3BhY2UgZnJvbSB0aGUgaGlnaCBi
aXRzIGZvciBmbGFncyBwcmVzZXJ2ZXMgbW9zdCBvZiB0aGUgaGFzaCdzCiAgICAgICAgIC8vIHZh
bHVlLCBzaW5jZSBoYXNoIGxvb2t1cCB0eXBpY2FsbHkgbWFza3Mgb3V0IHRoZSBoaWdoIGJpdHMg
YW55d2F5LgotICAgICAgICByZXN1bHQgJj0gKDFVIDw8IChzaXplb2YocmVzdWx0KSAqIDggLSBm
bGFnQ291bnQpKSAtIDE7CisgICAgICAgIHJlc3VsdCAmPSBtYXNrSGFzaDsKIAogICAgICAgICAv
LyBUaGlzIGF2b2lkcyBldmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5jZSB0aGF0
IGlzIHVzZWQgdG8KICAgICAgICAgLy8gc2lnbmFsICJoYXNoIG5vdCBjb21wdXRlZCB5ZXQiLiBT
ZXR0aW5nIHRoZSBoaWdoIGJpdCBtYWludGFpbnMKQEAgLTI5NCw2ICsyOTUsMTA4IEBAIGNsYXNz
IFN0cmluZ0hhc2hlciB7CiAgICAgVUNoYXIgbV9wZW5kaW5nQ2hhcmFjdGVyOwogfTsKIAorLy8g
RklYTUU6IFdlYktpdEdUSysgcmVxdWlyZXMgR0NDIDQuOSwgd2hpY2ggZG9lcyBub3Qgc3VwcG9y
dCByZWxheGVkIGNvbnN0ZXhwciBpbiBDKysxNC4KKy8vIE9uY2UgaXQgaXMgc3VwcG9ydGVkLCB3
ZSBjYW4gc2ltcGxpZnkgdGhlIGltcGxlbWVudGF0aW9uLgorY2xhc3MgQ29uc3RleHByU3RyaW5n
SGFzaGVyIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBjaGFy
YWN0ZXJzQ291bnQ+CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlSGFzaChj
b25zdCBUICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0NvdW50XSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmaW5hbGl6ZShoYXNoSW1wbChzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZSwgMCwgY2hhcmFj
dGVycywgY2hhcmFjdGVyc0NvdW50IC0gMSkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGNvbnN0IFQgKCZjaGFyYWN0ZXJzKVtj
aGFyYWN0ZXJzQ291bnRdKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmFsaXplQW5kTWFza1Rv
cDhCaXRzKGhhc2hJbXBsKHN0cmluZ0hhc2hpbmdTdGFydFZhbHVlLCAwLCBjaGFyYWN0ZXJzLCBj
aGFyYWN0ZXJzQ291bnQgLSAxKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czModW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBoYXNoIF4gKGhhc2ggPDwgMTApOworICAgIH0KKworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYXZhbGFuY2hlQml0czIodW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhdmFsYW5jaGVCaXRzMyhoYXNoICsgKGhhc2ggPj4gMTUpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHMxKHVuc2lnbmVkIGhh
c2gpCisgICAgeworICAgICAgICByZXR1cm4gYXZhbGFuY2hlQml0czIoaGFzaCBeIChoYXNoIDw8
IDIpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJp
dHMwKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gYXZhbGFuY2hlQml0czEo
aGFzaCArIChoYXNoID4+IDUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGF2YWxhbmNoZUJpdHModW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
dmFsYW5jaGVCaXRzMChoYXNoIF4gKGhhc2ggPDwgMykpOworICAgIH0KKworICAgIC8vIFRoaXMg
YXZvaWRzIGV2ZXIgcmV0dXJuaW5nIGEgaGFzaCBjb2RlIG9mIDAsIHNpbmNlIHRoYXQgaXMgdXNl
ZCB0bworICAgIC8vIHNpZ25hbCAiaGFzaCBub3QgY29tcHV0ZWQgeWV0Ii4gU2V0dGluZyB0aGUg
aGlnaCBiaXQgbWFpbnRhaW5zCisgICAgLy8gcmVhc29uYWJsZSBmaWRlbGl0eSB0byBhIGhhc2gg
Y29kZSBvZiAwIGJlY2F1c2UgaXQgaXMgbGlrZWx5IHRvIHlpZWxkCisgICAgLy8gZXhhY3RseSAw
IHdoZW4gaGFzaCBsb29rdXAgbWFza3Mgb3V0IHRoZSBoaWdoIGJpdHMuCisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBhdm9pZFplcm8odW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAg
IHJldHVybiBoYXNoID8gaGFzaCA6ICgweDgwMDAwMDAwID4+IFN0cmluZ0hhc2hlcjo6ZmxhZ0Nv
dW50KTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGZpbmFsaXplKHVu
c2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gYXZvaWRaZXJvKGF2YWxhbmNoZUJp
dHMoaGFzaCkpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZmluYWxp
emVBbmRNYXNrVG9wOEJpdHModW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAgIC8vIFJlc2Vy
dmluZyBzcGFjZSBmcm9tIHRoZSBoaWdoIGJpdHMgZm9yIGZsYWdzIHByZXNlcnZlcyBtb3N0IG9m
IHRoZSBoYXNoJ3MKKyAgICAgICAgLy8gdmFsdWUsIHNpbmNlIGhhc2ggbG9va3VwIHR5cGljYWxs
eSBtYXNrcyBvdXQgdGhlIGhpZ2ggYml0cyBhbnl3YXkuCisgICAgICAgIHJldHVybiBhdm9pZFpl
cm8oYXZhbGFuY2hlQml0cyhoYXNoKSAmIFN0cmluZ0hhc2hlcjo6bWFza0hhc2gpOworICAgIH0K
KworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xh
c3RDaGFyYWN0ZXIxKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gaGFzaCAr
IChoYXNoID4+IDE3KTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNh
bGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyMCh1bnNpZ25lZCBoYXNoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyMSgoaGFz
aCA8PCAxMSkgXiBoYXNoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyKHVuc2lnbmVkIGhhc2gsIHVuc2ln
bmVkIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxjdWxhdGVXaXRoUmVtYWlu
aW5nTGFzdENoYXJhY3RlcjAoaGFzaCArIGNoYXJhY3Rlcik7CisgICAgfQorCisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGUxKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAg
ICAgICByZXR1cm4gaGFzaCArIChoYXNoID4+IDExKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29u
c3RleHByIHVuc2lnbmVkIGNhbGN1bGF0ZTAodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgc2Vjb25k
Q2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZTEoKGhhc2ggPDwgMTYp
IF4gKChzZWNvbmRDaGFyYWN0ZXIgPDwgMTEpIF4gaGFzaCkpOworICAgIH0KKworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlKHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIGZp
cnN0Q2hhcmFjdGVyLCB1bnNpZ25lZCBzZWNvbmRDaGFyYWN0ZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gY2FsY3VsYXRlMChoYXNoICsgZmlyc3RDaGFyYWN0ZXIsIHNlY29uZENoYXJhY3Rlcik7
CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBoYXNoSW1wbCh1bnNpZ25l
ZCBoYXNoLCB1bnNpZ25lZCBpbmRleCwgY29uc3QgY2hhciogY2hhcmFjdGVycywgdW5zaWduZWQg
bGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChpbmRleCA9PSBsZW5ndGgpCisgICAgICAg
ICAgICA/IGhhc2ggOiAoKGluZGV4ICsgMSkgPT0gbGVuZ3RoKQorICAgICAgICAgICAgPyBjYWxj
dWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcihoYXNoLCBjaGFyYWN0ZXJzW2luZGV4XSkK
KyAgICAgICAgICAgIDogaGFzaEltcGwoY2FsY3VsYXRlKGhhc2gsIGNoYXJhY3RlcnNbaW5kZXhd
LCBjaGFyYWN0ZXJzW2luZGV4ICsgMV0pLCBpbmRleCArIDIsIGNoYXJhY3RlcnMsIGxlbmd0aCk7
CisgICAgfQorfTsKKwogY2xhc3MgSW50ZWdlckhhc2hlciB7CiBwdWJsaWM6CiAgICAgdm9pZCBh
ZGQodW5zaWduZWQgaW50ZWdlcikKQEAgLTMxNCw1ICs0MTcsNiBAQCBjbGFzcyBJbnRlZ2VySGFz
aGVyIHsKIAogdXNpbmcgV1RGOjpJbnRlZ2VySGFzaGVyOwogdXNpbmcgV1RGOjpTdHJpbmdIYXNo
ZXI7Cit1c2luZyBXVEY6OkNvbnN0ZXhwclN0cmluZ0hhc2hlcjsKIAogI2VuZGlmIC8vIFdURl9I
YXNoZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKaW5kZXggNWNkNjZjMTA4MWFiZjNl
YzJlMjIxZWRjMmI1YzhlZGFlMjIxODZmNy4uN2QwYTcwMThiNDllYzliODJiNWIyYmY2ODllNmRl
ZjE5YjM3OTkwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCkBAIC0xMDEsNiArMTAx
LDggQEAgdm9pZCBTdHJpbmdTdGF0czo6cHJpbnRTdGF0cygpCiB9CiAjZW5kaWYKIAorU3RyaW5n
SW1wbDo6U3RhdGljU3RyaW5nSW1wbCBTdHJpbmdJbXBsOjpzX2F0b21pY051bGxTdHJpbmcoIiIs
IFN0cmluZ0ltcGw6OlN0cmluZ0F0b21pYyk7CitTdHJpbmdJbXBsOjpTdGF0aWNTdHJpbmdJbXBs
IFN0cmluZ0ltcGw6OnNfYXRvbWljRW1wdHlTdHJpbmcoIiIsIFN0cmluZ0ltcGw6OlN0cmluZ0F0
b21pYyk7CiAKIFN0cmluZ0ltcGw6On5TdHJpbmdJbXBsKCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgKaW5kZXggMTc2YWE1OWM3NDAzNzM5N2Q5ZWE3MzRhMWJlYzY1MzY0ODY0OTRmOC4uYzAx
YjlkNzY0ZWJmNTc5MGM5NzdmYTI0Y2ZmZWU4NjdjMmY2YTBlYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmgKQEAgLTE0OSwxOCArMTQ5LDE4IEBAIGNsYXNzIFN0cmluZ0ltcGwgewogCiAgICAg
Ly8gVGhlIGJvdHRvbSA2IGJpdHMgaW4gdGhlIGhhc2ggYXJlIGZsYWdzLgogcHVibGljOgotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2ZsYWdDb3VudCA9IDY7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBjb25zdCB1bnNpZ25lZCBzX2ZsYWdDb3VudCA9IDY7CiBwcml2YXRlOgotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzX2ZsYWdNYXNrID0gKDF1IDw8IHNfZmxhZ0NvdW50KSAtIDE7Ci0g
ICAgQ09NUElMRV9BU1NFUlQoc19mbGFnQ291bnQgPD0gU3RyaW5nSGFzaGVyOjpmbGFnQ291bnQs
IFN0cmluZ0hhc2hlcl9yZXNlcnZlc19lbm91Z2hfYml0c19mb3JfU3RyaW5nSW1wbF9mbGFncyk7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfZmxhZ1N0cmluZ0tpbmRDb3VudCA9IDQ7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2ZsYWdNYXNrID0gKDF1IDw8IHNf
ZmxhZ0NvdW50KSAtIDE7CisgICAgc3RhdGljX2Fzc2VydChzX2ZsYWdDb3VudCA8PSBTdHJpbmdI
YXNoZXI6OmZsYWdDb3VudCwgIlN0cmluZ0hhc2hlciByZXNlcnZlcyBlbm91Z2ggYml0cyBmb3Ig
U3RyaW5nSW1wbCBmbGFncyIpOworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQg
c19mbGFnU3RyaW5nS2luZENvdW50ID0gNDsKIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
X2hhc2hGbGFnU3RyaW5nS2luZElzQXRvbWljID0gMXUgPDwgKHNfZmxhZ1N0cmluZ0tpbmRDb3Vu
dCk7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1i
b2wgPSAxdSA8PCAoc19mbGFnU3RyaW5nS2luZENvdW50ICsgMSk7Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNfaGFzaE1hc2tTdHJpbmdLaW5kID0gc19oYXNoRmxhZ1N0cmluZ0tpbmRJc0F0
b21pYyB8IHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1ib2w7Ci0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHNfaGFzaEZsYWc4Qml0QnVmZmVyID0gMXUgPDwgMzsKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgc19oYXNoRmxhZ0RpZFJlcG9ydENvc3QgPSAxdSA8PCAyOwotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBzX2hhc2hNYXNrQnVmZmVyT3duZXJzaGlwID0gKDF1IDw8IDApIHwgKDF1
IDw8IDEpOworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ1N0
cmluZ0tpbmRJc0F0b21pYyA9IDF1IDw8IChzX2ZsYWdTdHJpbmdLaW5kQ291bnQpOworICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ1N0cmluZ0tpbmRJc1N5bWJv
bCA9IDF1IDw8IChzX2ZsYWdTdHJpbmdLaW5kQ291bnQgKyAxKTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGNvbnN0IHVuc2lnbmVkIHNfaGFzaE1hc2tTdHJpbmdLaW5kID0gc19oYXNoRmxhZ1N0cmlu
Z0tpbmRJc0F0b21pYyB8IHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1ib2w7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnOEJpdEJ1ZmZlciA9IDF1IDw8IDM7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnRGlkUmVwb3J0
Q29zdCA9IDF1IDw8IDI7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBzX2hh
c2hNYXNrQnVmZmVyT3duZXJzaGlwID0gKDF1IDw8IDApIHwgKDF1IDw8IDEpOwogCiAgICAgZW51
bSBTdHJpbmdLaW5kIHsKICAgICAgICAgU3RyaW5nTm9ybWFsID0gMHUsIC8vIG5vbi1zeW1ib2ws
IG5vbi1hdG9taWMKQEAgLTE2OCwyNSArMTY4LDYgQEAgY2xhc3MgU3RyaW5nSW1wbCB7CiAgICAg
ICAgIFN0cmluZ1N5bWJvbCA9IHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1ib2wsIC8vIHN5bWJv
bCwgbm9uLWF0b21pYwogICAgIH07CiAKLSAgICAvLyBVc2VkIHRvIGNvbnN0cnVjdCBzdGF0aWMg
c3RyaW5ncywgd2hpY2ggaGF2ZSBhbiBzcGVjaWFsIHJlZkNvdW50IHRoYXQgY2FuIG5ldmVyIGhp
dCB6ZXJvLgotICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RhdGljIHN0cmluZyB3aWxsIG5l
dmVyIGJlIGRlc3Ryb3llZCwgd2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UKLSAgICAvLyBzdGF0
aWMgc3RyaW5ncyB3aWxsIGJlIHNoYXJlZCBhY3Jvc3MgdGhyZWFkcyAmIHJlZi1jb3VudGVkIGlu
IGEgbm9uLXRocmVhZHNhZmUgbWFubmVyLgotICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmdJbXBsPjsKLSAgICBlbnVtIENvbnN0cnVjdEVtcHR5U3RyaW5nVGFnIHsgQ29uc3Ry
dWN0RW1wdHlTdHJpbmcgfTsKLSAgICBTdHJpbmdJbXBsKENvbnN0cnVjdEVtcHR5U3RyaW5nVGFn
KQotICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZykKLSAg
ICAgICAgLCBtX2xlbmd0aCgwKQotICAgICAgICAsIG1fZGF0YTgocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBMQ2hhcio+KCZtX2xlbmd0aCkpCi0gICAgICAgICwgbV9oYXNoQW5kRmxhZ3Moc19oYXNo
RmxhZzhCaXRCdWZmZXIgfCBTdHJpbmdBdG9taWMgfCBCdWZmZXJPd25lZCkKLSAgICB7Ci0gICAg
ICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBoYXNoIGlzIGNvbXB1dGVkIHNvIHRoYXQgQXRvbWljU3Ry
aW5nSGFzaCBjYW4gY2FsbCBleGlzdGluZ0hhc2goKQotICAgICAgICAvLyB3aXRoIGltcHVuaXR5
LiBUaGUgZW1wdHkgc3RyaW5nIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBpcyBuZXZlciBlbnRlcmVk
IGludG8KLSAgICAgICAgLy8gQXRvbWljU3RyaW5nJ3MgSGFzaEtleSwgYnV0IHN0aWxsIG5lZWRz
IHRvIGNvbXBhcmUgY29ycmVjdGx5LgotICAgICAgICBTVFJJTkdfU1RBVFNfQUREXzhCSVRfU1RS
SU5HKG1fbGVuZ3RoKTsKLQotICAgICAgICBoYXNoKCk7Ci0gICAgfQotCiAgICAgLy8gRklYTUU6
IHRoZXJlIGhhcyB0byBiZSBhIGxlc3MgaGFja3kgd2F5IHRvIGRvIHRoaXMuCiAgICAgZW51bSBG
b3JjZThCaXQgeyBGb3JjZThCaXRDb25zdHJ1Y3RvciB9OwogICAgIC8vIENyZWF0ZSBhIG5vcm1h
bCA4LWJpdCBzdHJpbmcgd2l0aCBpbnRlcm5hbCBzdG9yYWdlIChCdWZmZXJJbnRlcm5hbCkKQEAg
LTYwNiw3ICs1ODcsNDMgQEAgY2xhc3MgU3RyaW5nSW1wbCB7CiAgICAgICAgIG1fcmVmQ291bnQg
PSB0ZW1wUmVmQ291bnQ7CiAgICAgfQogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBT
dHJpbmdJbXBsKiBlbXB0eSgpOworICAgIGNsYXNzIFN0YXRpY1N0cmluZ0ltcGwgeworICAgIHB1
YmxpYzoKKyAgICAgICAgLy8gVXNlZCB0byBjb25zdHJ1Y3Qgc3RhdGljIHN0cmluZ3MsIHdoaWNo
IGhhdmUgYW4gc3BlY2lhbCByZWZDb3VudCB0aGF0IGNhbiBuZXZlciBoaXQgemVyby4KKyAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBzdGF0aWMgc3RyaW5nIHdpbGwgbmV2ZXIgYmUgZGVz
dHJveWVkLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZQorICAgICAgICAvLyBzdGF0aWMgc3Ry
aW5ncyB3aWxsIGJlIHNoYXJlZCBhY3Jvc3MgdGhyZWFkcyAmIHJlZi1jb3VudGVkIGluIGEgbm9u
LXRocmVhZHNhZmUgbWFubmVyLgorICAgICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBjaGFyYWN0ZXJz
Q291bnQ+CisgICAgICAgIGNvbnN0ZXhwciBTdGF0aWNTdHJpbmdJbXBsKGNvbnN0IGNoYXIgKCZj
aGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdLCBTdHJpbmdLaW5kIHN0cmluZ0tpbmQgPSBTdHJp
bmdOb3JtYWwpCisgICAgICAgICAgICA6IG1fcmVmQ291bnQoc19yZWZDb3VudEZsYWdJc1N0YXRp
Y1N0cmluZykKKyAgICAgICAgICAgICwgbV9sZW5ndGgoY2hhcmFjdGVyc0NvdW50IC0gMSkKKyAg
ICAgICAgICAgICwgbV9kYXRhOChjaGFyYWN0ZXJzKQorICAgICAgICAgICAgLCBtX2hhc2hBbmRG
bGFncyhzX2hhc2hGbGFnOEJpdEJ1ZmZlciB8IHN0cmluZ0tpbmQgfCBCdWZmZXJJbnRlcm5hbCB8
IChDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKGNoYXJh
Y3RlcnMpIDw8IHNfZmxhZ0NvdW50KSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
dGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PgorICAgICAgICBjb25zdGV4cHIgU3Rh
dGljU3RyaW5nSW1wbChjb25zdCBjaGFyMTZfdCAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3Vu
dF0sIFN0cmluZ0tpbmQgc3RyaW5nS2luZCA9IFN0cmluZ05vcm1hbCkKKyAgICAgICAgICAgIDog
bV9yZWZDb3VudChzX3JlZkNvdW50RmxhZ0lzU3RhdGljU3RyaW5nKQorICAgICAgICAgICAgLCBt
X2xlbmd0aChjaGFyYWN0ZXJzQ291bnQgLSAxKQorICAgICAgICAgICAgLCBtX2RhdGExNihjaGFy
YWN0ZXJzKQorICAgICAgICAgICAgLCBtX2hhc2hBbmRGbGFncyhzdHJpbmdLaW5kIHwgQnVmZmVy
SW50ZXJuYWwgfCAoQ29uc3RleHByU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4
Qml0cyhjaGFyYWN0ZXJzKSA8PCBzX2ZsYWdDb3VudCkpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIFRoZXNlIG1lbWJlciB2YXJpYWJsZXMgbXVzdCBtYXRjaCB0aGUgbGF5b3V0
IG9mIFN0cmluZ0ltcGwuCisgICAgICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7CisgICAgICAgIHVu
c2lnbmVkIG1fbGVuZ3RoOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBjb25zdCBjaGFy
KiBtX2RhdGE4OworICAgICAgICAgICAgY29uc3QgY2hhcjE2X3QqIG1fZGF0YTE2OworICAgICAg
ICB9OworICAgICAgICB1bnNpZ25lZCBtX2hhc2hBbmRGbGFnczsKKyAgICB9OworCisgICAgV1RG
X0VYUE9SVERBVEEgc3RhdGljIFN0YXRpY1N0cmluZ0ltcGwgc19hdG9taWNOdWxsU3RyaW5nOwor
ICAgIFdURl9FWFBPUlREQVRBIHN0YXRpYyBTdGF0aWNTdHJpbmdJbXBsIHNfYXRvbWljRW1wdHlT
dHJpbmc7CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgU3RyaW5nSW1wbCogbnVsbCgpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RyaW5nSW1wbCo+KCZzX2F0b21pY051bGxTdHJpbmcpOyB9
CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgU3RyaW5nSW1wbCogZW1wdHkoKSB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PFN0cmluZ0ltcGwqPigmc19hdG9taWNFbXB0eVN0cmluZyk7IH0KIAog
ICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgcmVhbGx5IGJlbG9uZyBpbiBTdHJpbmdJbXBsPwogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgdm9pZCBjb3B5Q2hhcnMoVCogZGVzdGluYXRp
b24sIGNvbnN0IFQqIHNvdXJjZSwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycykKQEAgLTg2Niw3ICs4
ODMsNiBAQCBjbGFzcyBTdHJpbmdJbXBsIHsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5
cGU+IHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gY3JlYXRlSW50ZXJuYWwoY29uc3QgQ2hhclR5cGUq
LCB1bnNpZ25lZCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIE5FVkVSX0lOTElORSB1bnNpZ25l
ZCBoYXNoU2xvd0Nhc2UoKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHVu
c2lnbmVkIG5leHRIYXNoRm9yU3ltYm9sKCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBTdHJpbmdJbXBsKiBudWxsKCk7CiAKICAgICAvLyBUaGUgYm90dG9tIGJpdCBpbiB0aGUgcmVm
IGNvdW50IGluZGljYXRlcyBhIHN0YXRpYyAoaW1tb3J0YWwpIHN0cmluZy4KICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZyA9IDB4MTsKQEAgLTg3
Nyw2ICs4OTMsOCBAQCBjbGFzcyBTdHJpbmdJbXBsIHsKICNlbmRpZgogCiBwdWJsaWM6CisgICAg
Ly8gRklYTUU6IEl0IHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIFN0YXRpY1N0cmluZ0ltcGwuCisg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTEzNAogICAg
IHN0cnVjdCBTdGF0aWNBU0NJSUxpdGVyYWwgewogICAgICAgICAvLyBUaGVzZSBtZW1iZXIgdmFy
aWFibGVzIG11c3QgbWF0Y2ggdGhlIGxheW91dCBvZiBTdHJpbmdJbXBsLgogICAgICAgICB1bnNp
Z25lZCBtX3JlZkNvdW50OwpAQCAtODk5LDcgKzkxNyw3IEBAIGNsYXNzIFN0cmluZ0ltcGwgewog
I2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgLy8gVGhlc2UgbWVtYmVyIHZhcmlhYmxlcyBtdXN0IG1h
dGNoIHRoZSBsYXlvdXQgb2YgU3RhdGljQVNDSUlMaXRlcmFsLgorICAgIC8vIFRoZXNlIG1lbWJl
ciB2YXJpYWJsZXMgbXVzdCBtYXRjaCB0aGUgbGF5b3V0IG9mIFN0YXRpY0FTQ0lJTGl0ZXJhbCBh
bmQgU3RhdGljU3RyaW5nSW1wbC4KICAgICB1bnNpZ25lZCBtX3JlZkNvdW50OwogICAgIHVuc2ln
bmVkIG1fbGVuZ3RoOwogICAgIHVuaW9uIHsKQEAgLTkxMCw2ICs5MjgsNyBAQCBjbGFzcyBTdHJp
bmdJbXBsIHsKIH07CiAKIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFN0cmluZ0ltcGwpID09IHNpemVv
ZihTdHJpbmdJbXBsOjpTdGF0aWNBU0NJSUxpdGVyYWwpLCAiIik7CitzdGF0aWNfYXNzZXJ0KHNp
emVvZihTdHJpbmdJbXBsKSA9PSBzaXplb2YoU3RyaW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbCks
ICJzaXplb2YoU3RyaW5nSW1wbCkgc2hvdWxkIGJlIHRoZSBzYW1lIHRvIHNpemVvZihTdGF0aWNT
dHJpbmdJbXBsKSIpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogLy8gU3RyaW5nSW1wbHMgY3Jl
YXRlZCBmcm9tIFN0YXRpY0FTQ0lJTGl0ZXJhbCB3aWxsIEFTU0VSVApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nU3RhdGljcy5jcHAKaW5kZXggYWQ5ZTZlMzhiN2VlY2I3M2JmOWQ1ZjQ3MTA4OWFjNmVm
ZjM3ZjYyNy4uMGQyNTRhNWUxMDM2YmJiYjU1ODI5ZDAwNThiZGFmNzE5YTA4NzQ1MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdTdGF0aWNzLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ1N0YXRpY3MuY3BwCkBAIC00MSwxOCArNDEsNiBAQAogCiBuYW1l
c3BhY2UgV1RGIHsKIAotU3RyaW5nSW1wbCogU3RyaW5nSW1wbDo6bnVsbCgpCi17Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFN0cmluZ0ltcGw+IG51bGxTdHJpbmcoQ29uc3RydWN0RW1wdHlT
dHJpbmcpOwotICAgIHJldHVybiAmbnVsbFN0cmluZy5nZXQoKTsKLX0KLQotU3RyaW5nSW1wbCog
U3RyaW5nSW1wbDo6ZW1wdHkoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmdJ
bXBsPiBlbXB0eVN0cmluZyhDb25zdHJ1Y3RFbXB0eVN0cmluZyk7Ci0gICAgcmV0dXJuICZlbXB0
eVN0cmluZy5nZXQoKTsKLX0KLQogLy8gSW4gYWRkaXRpb24gdG8gdGhlIG5vcm1hbCBoYXNoIHZh
bHVlLCBzdG9yZSBzcGVjaWFsaXplZCBoYXNoIHZhbHVlIGZvcgogLy8gc3ltYm9saXplZCBTdHJp
bmdJbXBsKi4gQW5kIGRvbid0IHVzZSB0aGUgbm9ybWFsIGhhc2ggdmFsdWUgZm9yIHN5bWJvbGl6
ZWQKIC8vIFN0cmluZ0ltcGwqIHdoZW4gdGhleSBhcmUgdHJlYXRlZCBhcyBJZGVudGlmaWVycy4g
VW5pcXVlIG5hdHVyZSBvZiB0aGVzZQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDk4NGRjOTUxYjAxZGQzOGYxMTJkMDZiYzg3ODY0MzdmMzlhMjBm
YjYuLjJlNzAzYmQxMzU0MDcxOTkzYzk0MmM0ZDJmMTdkNTViMmQzZTliNjcgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxNi0xMS0yOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAg
ICAgICBbV1RGXSBJbnRyb2R1Y2UgU3RyaW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbCB3aXRoIGNv
bnN0ZXhwciBjb25zdHJ1Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTY1MDkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJbXBsLmNwcDoKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE2LTExLTI4ICBSeWFuIEhhZGRhZCAg
PHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIyMDkwMDguCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJp
bmdJbXBsLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3Bw
CmluZGV4IDk4NDlkZWMzZTViOTI1Nzk5ZWY5Zjc3M2FmYWZhMTZkMTc0ZTUyOTkuLjM0ZDA4N2Nl
Mjg0YTcwNzJlNmIzYTJmZTQ0OTJiMTVjNGMwNDljNGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRl
ICJjb25maWcuaCIKIAorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TeW1ib2xJbXBsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU3
NCw0ICs1NzUsMjAgQEAgVEVTVChXVEYsIFN0cmluZ0ltcGxOdWxsU3ltYm9sVG9BdG9taWNTdHJp
bmcpCiAgICAgQVNTRVJUX0ZBTFNFKHJlZmVyZW5jZS0+aXNBdG9taWMoKSk7CiB9CiAKK1RFU1Qo
V1RGLCBTdHJpbmdJbXBsQ29uc3RleHBySGFzaGVyKQoreworICAgIEFTU0VSVF9FUShzdHJpbmdG
cm9tVVRGOCgiIiktPmhhc2goKSwgQ29uc3RleHByU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFu
ZE1hc2tUb3A4Qml0cygiIikpOworICAgIEFTU0VSVF9FUShzdHJpbmdGcm9tVVRGOCgiQSIpLT5o
YXNoKCksIENvbnN0ZXhwclN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMo
IkEiKSk7CisgICAgQVNTRVJUX0VRKHN0cmluZ0Zyb21VVEY4KCJBQSIpLT5oYXNoKCksIENvbnN0
ZXhwclN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoIkFBIikpOworICAg
IEFTU0VSVF9FUShzdHJpbmdGcm9tVVRGOCgiQ29jb2EiKS0+aGFzaCgpLCBDb25zdGV4cHJTdHJp
bmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKCJDb2NvYSIpKTsKKyAgICBBU1NF
UlRfRVEoc3RyaW5nRnJvbVVURjgoIkNhcHB1Y2Npbm8iKS0+aGFzaCgpLCBDb25zdGV4cHJTdHJp
bmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKCJDYXBwdWNjaW5vIikpOworfQor
CitURVNUKFdURiwgU3RyaW5nSW1wbEVtcHR5KQoreworICAgIEFTU0VSVF9FUShTdHJpbmdJbXBs
OjplbXB0eSgpLT5sZW5ndGgoKSwgMCk7CisgICAgQVNTRVJUX0VRKFN0cmluZ0ltcGw6Om51bGwo
KS0+bGVuZ3RoKCksIDApOworICAgIEFTU0VSVF9ORShTdHJpbmdJbXBsOjpudWxsKCksIFN0cmlu
Z0ltcGw6OmVtcHR5KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295690</attachid>
            <date>2016-11-29 18:35:02 -0800</date>
            <delta_ts>2016-11-30 09:32:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165093-20161130113435.patch</filename>
            <type>text/plain</type>
            <size>18574</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5MTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGE5MjU3ZTFmMTQwMDdjNzc4OTdlMGNi
YTliMThlMDVkMTQxNmM4MjQuLjdiZjM0OTg5YjYxNzA1M2I2NTUzYzQyMjZiZGQ5YWE2NTAzZjdh
YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTYtMTEtMjkgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dURl0gSW50cm9kdWNlIFN0cmluZ0ltcGw6
OlN0YXRpY1N0cmluZ0ltcGwgd2l0aCBjb25zdGV4cHIgY29uc3RydWN0b3IKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTA5MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBuZXcg
Y2xhc3MsIFN0cmluZ0ltcGw6OlN0YXRpY1N0cmluZ0ltcGwuCisgICAgICAgIEJ5IHVzaW5nIHRo
aXMgY2xhc3MsIHdlIGNhbiBlYXNpbHkgY3JlYXRlIHN0YXRpYyBTdHJpbmdJbXBscy4KKyAgICAg
ICAgVGhpcyBjbGFzcyBoYXMgY29uc3RleHByIGNvbnN0cnVjdG9yLiBZb3UgY2FuIGluaXRpYWxp
emUgaW5zdGFuY2VzCisgICAgICAgIG9mIHRoaXMgY2xhc3MgYXMgZ2xvYmFsIHN0YXRpYyB2YXJp
YWJsZXMgd2l0aG91dCBpbnZva2luZyBnbG9iYWwKKyAgICAgICAgY29uc3RydWN0b3JzLgorCisg
ICAgICAgIFdlIGFscmVhZHkgaGF2ZSBzaW1pbGFyIHN5c3RlbSwgU3RhdGljQVNDSUlMaXRlcmFs
LiBCdXQgdXNpbmcgaXQKKyAgICAgICAgcmVxdWlyZXMgc29tZSBzcGVjaWFsIHBlcmwgc2NyaXB0
IHNpbmNlIHdlIG5lZWQgdG8gY2FsY3VsYXRlCisgICAgICAgIGhhc2ggdmFsdWUuIE9uIHRoZSBv
dGhlciBoYW5kLCB3ZSBjYW4gdXNlIFN0YXRpY1N0cmluZ0ltcGwgd2l0aG91dAorICAgICAgICBh
bnkgc2NyaXB0IHN1cHBvcnRzIHNpbmNlIHdlIGltcGxlbWVudCBjb25zdGV4cHIgaGFzaCBmdW5j
dGlvbi4KKyAgICAgICAgSW4gdGhlIGZ1dHVyZSwgd2Ugd2lsbCByZXBsYWNlIGFsbCB0aGUgdXNl
IG9mIFN0YXRpY0FTQ0lJTGl0ZXJhbAorICAgICAgICB3aXRoIHRoaXMgU3RhdGljU3RyaW5nSW1w
bC4KKworICAgICAgICBXZSBkZWZpbmUgZW1wdHkgLyBudWxsIHN0cmluZ3MgYXMgU3RhdGljU3Ry
aW5nSW1wbC4gQW5kIHdlIG1ha2UKKyAgICAgICAgU3RyaW5nSW1wbDo6ZW1wdHkoKSAmIFN0cmlu
Z0ltcGw6Om51bGwoKSBpbmxpbmUgZnVuY3Rpb25zLgorCisgICAgICAgICogd3RmL0hhc2hlci5o
OgorICAgICAgICAoV1RGOjpTdHJpbmdIYXNoZXI6Omhhc2hXaXRoVG9wOEJpdHNNYXNrZWQpOgor
ICAgICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKToKKyAgICAg
ICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0
cyk6CisgICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hhc2hlcjo6YXZhbGFuY2hlQml0czMp
OgorICAgICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmF2YWxhbmNoZUJpdHMyKToK
KyAgICAgICAgKFdURjo6Q29uc3RleHByU3RyaW5nSGFzaGVyOjphdmFsYW5jaGVCaXRzMSk6Cisg
ICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hhc2hlcjo6YXZhbGFuY2hlQml0czApOgorICAg
ICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmF2YWxhbmNoZUJpdHMpOgorICAgICAg
ICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmF2b2lkWmVybyk6CisgICAgICAgIChXVEY6
OkNvbnN0ZXhwclN0cmluZ0hhc2hlcjo6ZmluYWxpemUpOgorICAgICAgICAoV1RGOjpDb25zdGV4
cHJTdHJpbmdIYXNoZXI6OmZpbmFsaXplQW5kTWFza1RvcDhCaXRzKToKKyAgICAgICAgKFdURjo6
Q29uc3RleHByU3RyaW5nSGFzaGVyOjpjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3Rl
cjEpOgorICAgICAgICAoV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmNhbGN1bGF0ZVdpdGhS
ZW1haW5pbmdMYXN0Q2hhcmFjdGVyMCk6CisgICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hh
c2hlcjo6Y2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIpOgorICAgICAgICAoV1RG
OjpDb25zdGV4cHJTdHJpbmdIYXNoZXI6OmNhbGN1bGF0ZTEpOgorICAgICAgICAoV1RGOjpDb25z
dGV4cHJTdHJpbmdIYXNoZXI6OmNhbGN1bGF0ZTApOgorICAgICAgICAoV1RGOjpDb25zdGV4cHJT
dHJpbmdIYXNoZXI6OmNhbGN1bGF0ZSk6CisgICAgICAgIChXVEY6OkNvbnN0ZXhwclN0cmluZ0hh
c2hlcjo6aGFzaEltcGwpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAg
ICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6
U3RhdGljU3RyaW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6Om51bGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjplbXB0eSk6CisgICAgICAg
ICogd3RmL3RleHQvU3RyaW5nU3RhdGljcy5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6
Om51bGwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjplbXB0eSk6IERlbGV0
ZWQuCisKIDIwMTYtMTEtMjkgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtDb2NvYV0gRW5hYmxlIHR3byBjbGFuZyB3YXJuaW5ncyByZWNvbW1lbmRlZCBieSBYY29k
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9I
YXNoZXIuaAppbmRleCAwMjM0YmIyNzA2YjkyYWM4NmI4OGNkN2U3NWJmMjA0ZGI3OTE3NzRlLi42
NzA5ZTJjZGE0M2FlYmQ5YzMyZmU4ZDVjMzczNzc0NzY2YzcwMDJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9IYXNoZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAtMzYs
MTEgKzM2LDEyIEBAIG5hbWVzcGFjZSBXVEYgewogLy8gSmF2YVNjcmlwdENvcmUgYW5kIHRoZSBD
b2RlR2VuZXJhdG9ySlMucG0gc2NyaXB0IGluIFdlYkNvcmUuCiAKIC8vIEdvbGRlbiByYXRpby4g
QXJiaXRyYXJ5IHN0YXJ0IHZhbHVlIHRvIGF2b2lkIG1hcHBpbmcgYWxsIHplcm9zIHRvIGEgaGFz
aCB2YWx1ZSBvZiB6ZXJvLgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHN0cmluZ0hhc2hpbmdTdGFy
dFZhbHVlID0gMHg5RTM3NzlCOVU7CitzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIHN0
cmluZ0hhc2hpbmdTdGFydFZhbHVlID0gMHg5RTM3NzlCOVU7CiAKIGNsYXNzIFN0cmluZ0hhc2hl
ciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZsYWdDb3VudCA9IDg7IC8v
IFNhdmUgOCBiaXRzIGZvciBTdHJpbmdJbXBsIHRvIHVzZSBhcyBmbGFncy4KKyAgICBzdGF0aWMg
Y29uc3RleHByIGNvbnN0IHVuc2lnbmVkIGZsYWdDb3VudCA9IDg7IC8vIFNhdmUgOCBiaXRzIGZv
ciBTdHJpbmdJbXBsIHRvIHVzZSBhcyBmbGFncy4KKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0
IHVuc2lnbmVkIG1hc2tIYXNoID0gKDFVIDw8IChzaXplb2YodW5zaWduZWQpICogOCAtIGZsYWdD
b3VudCkpIC0gMTsKIAogICAgIFN0cmluZ0hhc2hlcigpCiAgICAgICAgIDogbV9oYXNoKHN0cmlu
Z0hhc2hpbmdTdGFydFZhbHVlKQpAQCAtMTY2LDcgKzE2Nyw3IEBAIGNsYXNzIFN0cmluZ0hhc2hl
ciB7CiAKICAgICAgICAgLy8gUmVzZXJ2aW5nIHNwYWNlIGZyb20gdGhlIGhpZ2ggYml0cyBmb3Ig
ZmxhZ3MgcHJlc2VydmVzIG1vc3Qgb2YgdGhlIGhhc2gncwogICAgICAgICAvLyB2YWx1ZSwgc2lu
Y2UgaGFzaCBsb29rdXAgdHlwaWNhbGx5IG1hc2tzIG91dCB0aGUgaGlnaCBiaXRzIGFueXdheS4K
LSAgICAgICAgcmVzdWx0ICY9ICgxVSA8PCAoc2l6ZW9mKHJlc3VsdCkgKiA4IC0gZmxhZ0NvdW50
KSkgLSAxOworICAgICAgICByZXN1bHQgJj0gbWFza0hhc2g7CiAKICAgICAgICAgLy8gVGhpcyBh
dm9pZHMgZXZlciByZXR1cm5pbmcgYSBoYXNoIGNvZGUgb2YgMCwgc2luY2UgdGhhdCBpcyB1c2Vk
IHRvCiAgICAgICAgIC8vIHNpZ25hbCAiaGFzaCBub3QgY29tcHV0ZWQgeWV0Ii4gU2V0dGluZyB0
aGUgaGlnaCBiaXQgbWFpbnRhaW5zCkBAIC0yOTQsNiArMjk1LDEwOCBAQCBjbGFzcyBTdHJpbmdI
YXNoZXIgewogICAgIFVDaGFyIG1fcGVuZGluZ0NoYXJhY3RlcjsKIH07CiAKKy8vIEZJWE1FOiBX
ZWJLaXRHVEsrIHJlcXVpcmVzIEdDQyA0LjksIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgcmVsYXhl
ZCBjb25zdGV4cHIgaW4gQysrMTQuCisvLyBPbmNlIGl0IGlzIHN1cHBvcnRlZCwgd2UgY2FuIHNp
bXBsaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbi4KK2NsYXNzIENvbnN0ZXhwclN0cmluZ0hhc2hlciB7
CitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgY2hhcmFjdGVyc0Nv
dW50PgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgVCAo
JmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3VudF0pCisgICAgeworICAgICAgICByZXR1cm4gZmlu
YWxpemUoaGFzaEltcGwoc3RyaW5nSGFzaGluZ1N0YXJ0VmFsdWUsIDAsIGNoYXJhY3RlcnMsIGNo
YXJhY3RlcnNDb3VudCAtIDEpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1
bnNpZ25lZCBjaGFyYWN0ZXJzQ291bnQ+CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBj
b21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBUICgmY2hhcmFjdGVycylbY2hhcmFjdGVy
c0NvdW50XSkKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5hbGl6ZUFuZE1hc2tUb3A4Qml0cyho
YXNoSW1wbChzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZSwgMCwgY2hhcmFjdGVycywgY2hhcmFjdGVy
c0NvdW50IC0gMSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGF2YWxhbmNoZUJpdHMzKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1
cm4gaGFzaCBeIChoYXNoIDw8IDEwKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGF2YWxhbmNoZUJpdHMyKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1
cm4gYXZhbGFuY2hlQml0czMoaGFzaCArIChoYXNoID4+IDE1KSk7CisgICAgfQorCisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzMSh1bnNpZ25lZCBoYXNoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGF2YWxhbmNoZUJpdHMyKGhhc2ggXiAoaGFzaCA8PCAyKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzMCh1bnNp
Z25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF2YWxhbmNoZUJpdHMxKGhhc2ggKyAo
aGFzaCA+PiA1KSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFs
YW5jaGVCaXRzKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gYXZhbGFuY2hl
Qml0czAoaGFzaCBeIChoYXNoIDw8IDMpKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGF2b2lkcyBl
dmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5jZSB0aGF0IGlzIHVzZWQgdG8KKyAg
ICAvLyBzaWduYWwgImhhc2ggbm90IGNvbXB1dGVkIHlldCIuIFNldHRpbmcgdGhlIGhpZ2ggYml0
IG1haW50YWlucworICAgIC8vIHJlYXNvbmFibGUgZmlkZWxpdHkgdG8gYSBoYXNoIGNvZGUgb2Yg
MCBiZWNhdXNlIGl0IGlzIGxpa2VseSB0byB5aWVsZAorICAgIC8vIGV4YWN0bHkgMCB3aGVuIGhh
c2ggbG9va3VwIG1hc2tzIG91dCB0aGUgaGlnaCBiaXRzLgorICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgYXZvaWRaZXJvKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4g
aGFzaCA/IGhhc2ggOiAoMHg4MDAwMDAwMCA+PiBTdHJpbmdIYXNoZXI6OmZsYWdDb3VudCk7Cisg
ICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBmaW5hbGl6ZSh1bnNpZ25lZCBo
YXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF2b2lkWmVybyhhdmFsYW5jaGVCaXRzKGhhc2gp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGZpbmFsaXplQW5kTWFz
a1RvcDhCaXRzKHVuc2lnbmVkIGhhc2gpCisgICAgeworICAgICAgICAvLyBSZXNlcnZpbmcgc3Bh
Y2UgZnJvbSB0aGUgaGlnaCBiaXRzIGZvciBmbGFncyBwcmVzZXJ2ZXMgbW9zdCBvZiB0aGUgaGFz
aCdzCisgICAgICAgIC8vIHZhbHVlLCBzaW5jZSBoYXNoIGxvb2t1cCB0eXBpY2FsbHkgbWFza3Mg
b3V0IHRoZSBoaWdoIGJpdHMgYW55d2F5LgorICAgICAgICByZXR1cm4gYXZvaWRaZXJvKGF2YWxh
bmNoZUJpdHMoaGFzaCkgJiBTdHJpbmdIYXNoZXI6Om1hc2tIYXNoKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFj
dGVyMSh1bnNpZ25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGhhc2ggKyAoaGFzaCA+
PiAxNyk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGVX
aXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcjAodW5zaWduZWQgaGFzaCkKKyAgICB7CisgICAgICAg
IHJldHVybiBjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcjEoKGhhc2ggPDwgMTEp
IF4gaGFzaCk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxh
dGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3Rlcih1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBjaGFy
YWN0ZXIpCisgICAgeworICAgICAgICByZXR1cm4gY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RD
aGFyYWN0ZXIwKGhhc2ggKyBjaGFyYWN0ZXIpOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgY2FsY3VsYXRlMSh1bnNpZ25lZCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGhhc2ggKyAoaGFzaCA+PiAxMSk7CisgICAgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBjYWxjdWxhdGUwKHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIHNlY29uZENoYXJhY3Rl
cikKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxjdWxhdGUxKChoYXNoIDw8IDE2KSBeICgoc2Vj
b25kQ2hhcmFjdGVyIDw8IDExKSBeIGhhc2gpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGNhbGN1bGF0ZSh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBmaXJzdENoYXJh
Y3RlciwgdW5zaWduZWQgc2Vjb25kQ2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNh
bGN1bGF0ZTAoaGFzaCArIGZpcnN0Q2hhcmFjdGVyLCBzZWNvbmRDaGFyYWN0ZXIpOworICAgIH0K
KworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgaGFzaEltcGwodW5zaWduZWQgaGFzaCwg
dW5zaWduZWQgaW5kZXgsIGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkK
KyAgICB7CisgICAgICAgIHJldHVybiAoaW5kZXggPT0gbGVuZ3RoKQorICAgICAgICAgICAgPyBo
YXNoIDogKChpbmRleCArIDEpID09IGxlbmd0aCkKKyAgICAgICAgICAgID8gY2FsY3VsYXRlV2l0
aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIoaGFzaCwgY2hhcmFjdGVyc1tpbmRleF0pCisgICAgICAg
ICAgICA6IGhhc2hJbXBsKGNhbGN1bGF0ZShoYXNoLCBjaGFyYWN0ZXJzW2luZGV4XSwgY2hhcmFj
dGVyc1tpbmRleCArIDFdKSwgaW5kZXggKyAyLCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIH0K
K307CisKIGNsYXNzIEludGVnZXJIYXNoZXIgewogcHVibGljOgogICAgIHZvaWQgYWRkKHVuc2ln
bmVkIGludGVnZXIpCkBAIC0zMTQsNSArNDE3LDYgQEAgY2xhc3MgSW50ZWdlckhhc2hlciB7CiAK
IHVzaW5nIFdURjo6SW50ZWdlckhhc2hlcjsKIHVzaW5nIFdURjo6U3RyaW5nSGFzaGVyOwordXNp
bmcgV1RGOjpDb25zdGV4cHJTdHJpbmdIYXNoZXI7CiAKICNlbmRpZiAvLyBXVEZfSGFzaGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCmluZGV4IDVjZDY2YzEwODFhYmYzZWMyZTIyMWVk
YzJiNWM4ZWRhZTIyMTg2ZjcuLjdkMGE3MDE4YjQ5ZWM5YjgyYjViMmJmNjg5ZTZkZWYxOWIzNzk5
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcApAQCAtMTAxLDYgKzEwMSw4IEBAIHZv
aWQgU3RyaW5nU3RhdHM6OnByaW50U3RhdHMoKQogfQogI2VuZGlmCiAKK1N0cmluZ0ltcGw6OlN0
YXRpY1N0cmluZ0ltcGwgU3RyaW5nSW1wbDo6c19hdG9taWNOdWxsU3RyaW5nKCIiLCBTdHJpbmdJ
bXBsOjpTdHJpbmdBdG9taWMpOworU3RyaW5nSW1wbDo6U3RhdGljU3RyaW5nSW1wbCBTdHJpbmdJ
bXBsOjpzX2F0b21pY0VtcHR5U3RyaW5nKCIiLCBTdHJpbmdJbXBsOjpTdHJpbmdBdG9taWMpOwog
CiBTdHJpbmdJbXBsOjp+U3RyaW5nSW1wbCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCmlu
ZGV4IDE3NmFhNTljNzQwMzczOTdkOWVhNzM0YTFiZWM2NTM2NDg2NDk0ZjguLmMwMWI5ZDc2NGVi
ZjU3OTBjOTc3ZmEyNGNmZmVlODY3YzJmNmEwZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5o
CkBAIC0xNDksMTggKzE0OSwxOCBAQCBjbGFzcyBTdHJpbmdJbXBsIHsKIAogICAgIC8vIFRoZSBi
b3R0b20gNiBiaXRzIGluIHRoZSBoYXNoIGFyZSBmbGFncy4KIHB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgc19mbGFnQ291bnQgPSA2OworICAgIHN0YXRpYyBjb25zdGV4cHIgY29u
c3QgdW5zaWduZWQgc19mbGFnQ291bnQgPSA2OwogcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgc19mbGFnTWFzayA9ICgxdSA8PCBzX2ZsYWdDb3VudCkgLSAxOwotICAgIENPTVBJ
TEVfQVNTRVJUKHNfZmxhZ0NvdW50IDw9IFN0cmluZ0hhc2hlcjo6ZmxhZ0NvdW50LCBTdHJpbmdI
YXNoZXJfcmVzZXJ2ZXNfZW5vdWdoX2JpdHNfZm9yX1N0cmluZ0ltcGxfZmxhZ3MpOwotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBzX2ZsYWdTdHJpbmdLaW5kQ291bnQgPSA0OworICAgIHN0YXRp
YyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19mbGFnTWFzayA9ICgxdSA8PCBzX2ZsYWdDb3Vu
dCkgLSAxOworICAgIHN0YXRpY19hc3NlcnQoc19mbGFnQ291bnQgPD0gU3RyaW5nSGFzaGVyOjpm
bGFnQ291bnQsICJTdHJpbmdIYXNoZXIgcmVzZXJ2ZXMgZW5vdWdoIGJpdHMgZm9yIFN0cmluZ0lt
cGwgZmxhZ3MiKTsKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIHNfZmxhZ1N0
cmluZ0tpbmRDb3VudCA9IDQ7CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19oYXNoRmxh
Z1N0cmluZ0tpbmRJc0F0b21pYyA9IDF1IDw8IChzX2ZsYWdTdHJpbmdLaW5kQ291bnQpOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hGbGFnU3RyaW5nS2luZElzU3ltYm9sID0gMXUg
PDwgKHNfZmxhZ1N0cmluZ0tpbmRDb3VudCArIDEpOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBzX2hhc2hNYXNrU3RyaW5nS2luZCA9IHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNBdG9taWMgfCBz
X2hhc2hGbGFnU3RyaW5nS2luZElzU3ltYm9sOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
X2hhc2hGbGFnOEJpdEJ1ZmZlciA9IDF1IDw8IDM7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHNfaGFzaEZsYWdEaWRSZXBvcnRDb3N0ID0gMXUgPDwgMjsKLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgc19oYXNoTWFza0J1ZmZlck93bmVyc2hpcCA9ICgxdSA8PCAwKSB8ICgxdSA8PCAxKTsK
KyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdTdHJpbmdLaW5k
SXNBdG9taWMgPSAxdSA8PCAoc19mbGFnU3RyaW5nS2luZENvdW50KTsKKyAgICBzdGF0aWMgY29u
c3RleHByIGNvbnN0IHVuc2lnbmVkIHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNTeW1ib2wgPSAxdSA8
PCAoc19mbGFnU3RyaW5nS2luZENvdW50ICsgMSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25z
dCB1bnNpZ25lZCBzX2hhc2hNYXNrU3RyaW5nS2luZCA9IHNfaGFzaEZsYWdTdHJpbmdLaW5kSXNB
dG9taWMgfCBzX2hhc2hGbGFnU3RyaW5nS2luZElzU3ltYm9sOworICAgIHN0YXRpYyBjb25zdGV4
cHIgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZzhCaXRCdWZmZXIgPSAxdSA8PCAzOworICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19oYXNoRmxhZ0RpZFJlcG9ydENvc3QgPSAx
dSA8PCAyOworICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgc19oYXNoTWFza0J1
ZmZlck93bmVyc2hpcCA9ICgxdSA8PCAwKSB8ICgxdSA8PCAxKTsKIAogICAgIGVudW0gU3RyaW5n
S2luZCB7CiAgICAgICAgIFN0cmluZ05vcm1hbCA9IDB1LCAvLyBub24tc3ltYm9sLCBub24tYXRv
bWljCkBAIC0xNjgsMjUgKzE2OCw2IEBAIGNsYXNzIFN0cmluZ0ltcGwgewogICAgICAgICBTdHJp
bmdTeW1ib2wgPSBzX2hhc2hGbGFnU3RyaW5nS2luZElzU3ltYm9sLCAvLyBzeW1ib2wsIG5vbi1h
dG9taWMKICAgICB9OwogCi0gICAgLy8gVXNlZCB0byBjb25zdHJ1Y3Qgc3RhdGljIHN0cmluZ3Ms
IHdoaWNoIGhhdmUgYW4gc3BlY2lhbCByZWZDb3VudCB0aGF0IGNhbiBuZXZlciBoaXQgemVyby4K
LSAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0YXRpYyBzdHJpbmcgd2lsbCBuZXZlciBiZSBk
ZXN0cm95ZWQsIHdoaWNoIGlzIGltcG9ydGFudCBiZWNhdXNlCi0gICAgLy8gc3RhdGljIHN0cmlu
Z3Mgd2lsbCBiZSBzaGFyZWQgYWNyb3NzIHRocmVhZHMgJiByZWYtY291bnRlZCBpbiBhIG5vbi10
aHJlYWRzYWZlIG1hbm5lci4KLSAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5n
SW1wbD47Ci0gICAgZW51bSBDb25zdHJ1Y3RFbXB0eVN0cmluZ1RhZyB7IENvbnN0cnVjdEVtcHR5
U3RyaW5nIH07Ci0gICAgU3RyaW5nSW1wbChDb25zdHJ1Y3RFbXB0eVN0cmluZ1RhZykKLSAgICAg
ICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcpCi0gICAgICAgICwg
bV9sZW5ndGgoMCkKLSAgICAgICAgLCBtX2RhdGE4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTENo
YXIqPigmbV9sZW5ndGgpKQotICAgICAgICAsIG1faGFzaEFuZEZsYWdzKHNfaGFzaEZsYWc4Qml0
QnVmZmVyIHwgU3RyaW5nQXRvbWljIHwgQnVmZmVyT3duZWQpCi0gICAgewotICAgICAgICAvLyBF
bnN1cmUgdGhhdCB0aGUgaGFzaCBpcyBjb21wdXRlZCBzbyB0aGF0IEF0b21pY1N0cmluZ0hhc2gg
Y2FuIGNhbGwgZXhpc3RpbmdIYXNoKCkKLSAgICAgICAgLy8gd2l0aCBpbXB1bml0eS4gVGhlIGVt
cHR5IHN0cmluZyBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgaXMgbmV2ZXIgZW50ZXJlZCBpbnRvCi0g
ICAgICAgIC8vIEF0b21pY1N0cmluZydzIEhhc2hLZXksIGJ1dCBzdGlsbCBuZWVkcyB0byBjb21w
YXJlIGNvcnJlY3RseS4KLSAgICAgICAgU1RSSU5HX1NUQVRTX0FERF84QklUX1NUUklORyhtX2xl
bmd0aCk7Ci0KLSAgICAgICAgaGFzaCgpOwotICAgIH0KLQogICAgIC8vIEZJWE1FOiB0aGVyZSBo
YXMgdG8gYmUgYSBsZXNzIGhhY2t5IHdheSB0byBkbyB0aGlzLgogICAgIGVudW0gRm9yY2U4Qml0
IHsgRm9yY2U4Qml0Q29uc3RydWN0b3IgfTsKICAgICAvLyBDcmVhdGUgYSBub3JtYWwgOC1iaXQg
c3RyaW5nIHdpdGggaW50ZXJuYWwgc3RvcmFnZSAoQnVmZmVySW50ZXJuYWwpCkBAIC02MDYsNyAr
NTg3LDQzIEBAIGNsYXNzIFN0cmluZ0ltcGwgewogICAgICAgICBtX3JlZkNvdW50ID0gdGVtcFJl
ZkNvdW50OwogICAgIH0KIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5nSW1w
bCogZW1wdHkoKTsKKyAgICBjbGFzcyBTdGF0aWNTdHJpbmdJbXBsIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIC8vIFVzZWQgdG8gY29uc3RydWN0IHN0YXRpYyBzdHJpbmdzLCB3aGljaCBoYXZlIGFu
IHNwZWNpYWwgcmVmQ291bnQgdGhhdCBjYW4gbmV2ZXIgaGl0IHplcm8uCisgICAgICAgIC8vIFRo
aXMgbWVhbnMgdGhhdCB0aGUgc3RhdGljIHN0cmluZyB3aWxsIG5ldmVyIGJlIGRlc3Ryb3llZCwg
d2hpY2ggaXMgaW1wb3J0YW50IGJlY2F1c2UKKyAgICAgICAgLy8gc3RhdGljIHN0cmluZ3Mgd2ls
bCBiZSBzaGFyZWQgYWNyb3NzIHRocmVhZHMgJiByZWYtY291bnRlZCBpbiBhIG5vbi10aHJlYWRz
YWZlIG1hbm5lci4KKyAgICAgICAgdGVtcGxhdGU8dW5zaWduZWQgY2hhcmFjdGVyc0NvdW50Pgor
ICAgICAgICBjb25zdGV4cHIgU3RhdGljU3RyaW5nSW1wbChjb25zdCBjaGFyICgmY2hhcmFjdGVy
cylbY2hhcmFjdGVyc0NvdW50XSwgU3RyaW5nS2luZCBzdHJpbmdLaW5kID0gU3RyaW5nTm9ybWFs
KQorICAgICAgICAgICAgOiBtX3JlZkNvdW50KHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcp
CisgICAgICAgICAgICAsIG1fbGVuZ3RoKGNoYXJhY3RlcnNDb3VudCAtIDEpCisgICAgICAgICAg
ICAsIG1fZGF0YTgoY2hhcmFjdGVycykKKyAgICAgICAgICAgICwgbV9oYXNoQW5kRmxhZ3Moc19o
YXNoRmxhZzhCaXRCdWZmZXIgfCBzdHJpbmdLaW5kIHwgQnVmZmVySW50ZXJuYWwgfCAoQ29uc3Rl
eHByU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjaGFyYWN0ZXJzKSA8
PCBzX2ZsYWdDb3VudCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRl
PHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KKyAgICAgICAgY29uc3RleHByIFN0YXRpY1N0cmlu
Z0ltcGwoY29uc3QgY2hhcjE2X3QgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdLCBTdHJp
bmdLaW5kIHN0cmluZ0tpbmQgPSBTdHJpbmdOb3JtYWwpCisgICAgICAgICAgICA6IG1fcmVmQ291
bnQoc19yZWZDb3VudEZsYWdJc1N0YXRpY1N0cmluZykKKyAgICAgICAgICAgICwgbV9sZW5ndGgo
Y2hhcmFjdGVyc0NvdW50IC0gMSkKKyAgICAgICAgICAgICwgbV9kYXRhMTYoY2hhcmFjdGVycykK
KyAgICAgICAgICAgICwgbV9oYXNoQW5kRmxhZ3Moc3RyaW5nS2luZCB8IEJ1ZmZlckludGVybmFs
IHwgKENvbnN0ZXhwclN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY2hh
cmFjdGVycykgPDwgc19mbGFnQ291bnQpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBUaGVzZSBtZW1iZXIgdmFyaWFibGVzIG11c3QgbWF0Y2ggdGhlIGxheW91dCBvZiBTdHJp
bmdJbXBsLgorICAgICAgICB1bnNpZ25lZCBtX3JlZkNvdW50OworICAgICAgICB1bnNpZ25lZCBt
X2xlbmd0aDsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgY29uc3QgY2hhciogbV9kYXRh
ODsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIxNl90KiBtX2RhdGExNjsKKyAgICAgICAgfTsKKyAg
ICAgICAgdW5zaWduZWQgbV9oYXNoQW5kRmxhZ3M7CisgICAgfTsKKworICAgIFdURl9FWFBPUlRE
QVRBIHN0YXRpYyBTdGF0aWNTdHJpbmdJbXBsIHNfYXRvbWljTnVsbFN0cmluZzsKKyAgICBXVEZf
RVhQT1JUREFUQSBzdGF0aWMgU3RhdGljU3RyaW5nSW1wbCBzX2F0b21pY0VtcHR5U3RyaW5nOwor
ICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFN0cmluZ0ltcGwqIG51bGwoKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PFN0cmluZ0ltcGwqPigmc19hdG9taWNOdWxsU3RyaW5nKTsgfQorICAgIEFM
V0FZU19JTkxJTkUgc3RhdGljIFN0cmluZ0ltcGwqIGVtcHR5KCkgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxTdHJpbmdJbXBsKj4oJnNfYXRvbWljRW1wdHlTdHJpbmcpOyB9CiAKICAgICAvLyBG
SVhNRTogRG9lcyB0aGlzIHJlYWxseSBiZWxvbmcgaW4gU3RyaW5nSW1wbD8KICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4gc3RhdGljIHZvaWQgY29weUNoYXJzKFQqIGRlc3RpbmF0aW9uLCBjb25z
dCBUKiBzb3VyY2UsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMpCkBAIC04NjYsNyArODgzLDYgQEAg
Y2xhc3MgU3RyaW5nSW1wbCB7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPiBzdGF0
aWMgUmVmPFN0cmluZ0ltcGw+IGNyZWF0ZUludGVybmFsKGNvbnN0IENoYXJUeXBlKiwgdW5zaWdu
ZWQpOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBORVZFUl9JTkxJTkUgdW5zaWduZWQgaGFzaFNs
b3dDYXNlKCkgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB1bnNpZ25lZCBu
ZXh0SGFzaEZvclN5bWJvbCgpOwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RyaW5n
SW1wbCogbnVsbCgpOwogCiAgICAgLy8gVGhlIGJvdHRvbSBiaXQgaW4gdGhlIHJlZiBjb3VudCBp
bmRpY2F0ZXMgYSBzdGF0aWMgKGltbW9ydGFsKSBzdHJpbmcuCiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHNfcmVmQ291bnRGbGFnSXNTdGF0aWNTdHJpbmcgPSAweDE7CkBAIC04NzcsNiArODkz
LDggQEAgY2xhc3MgU3RyaW5nSW1wbCB7CiAjZW5kaWYKIAogcHVibGljOgorICAgIC8vIEZJWE1F
OiBJdCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBTdGF0aWNTdHJpbmdJbXBsLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUxMzQKICAgICBzdHJ1Y3Qg
U3RhdGljQVNDSUlMaXRlcmFsIHsKICAgICAgICAgLy8gVGhlc2UgbWVtYmVyIHZhcmlhYmxlcyBt
dXN0IG1hdGNoIHRoZSBsYXlvdXQgb2YgU3RyaW5nSW1wbC4KICAgICAgICAgdW5zaWduZWQgbV9y
ZWZDb3VudDsKQEAgLTg5OSw3ICs5MTcsNyBAQCBjbGFzcyBTdHJpbmdJbXBsIHsKICNlbmRpZgog
CiBwcml2YXRlOgotICAgIC8vIFRoZXNlIG1lbWJlciB2YXJpYWJsZXMgbXVzdCBtYXRjaCB0aGUg
bGF5b3V0IG9mIFN0YXRpY0FTQ0lJTGl0ZXJhbC4KKyAgICAvLyBUaGVzZSBtZW1iZXIgdmFyaWFi
bGVzIG11c3QgbWF0Y2ggdGhlIGxheW91dCBvZiBTdGF0aWNBU0NJSUxpdGVyYWwgYW5kIFN0YXRp
Y1N0cmluZ0ltcGwuCiAgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKICAgICB1bnNpZ25lZCBtX2xl
bmd0aDsKICAgICB1bmlvbiB7CkBAIC05MTAsNiArOTI4LDcgQEAgY2xhc3MgU3RyaW5nSW1wbCB7
CiB9OwogCiBzdGF0aWNfYXNzZXJ0KHNpemVvZihTdHJpbmdJbXBsKSA9PSBzaXplb2YoU3RyaW5n
SW1wbDo6U3RhdGljQVNDSUlMaXRlcmFsKSwgIiIpOworc3RhdGljX2Fzc2VydChzaXplb2YoU3Ry
aW5nSW1wbCkgPT0gc2l6ZW9mKFN0cmluZ0ltcGw6OlN0YXRpY1N0cmluZ0ltcGwpLCAic2l6ZW9m
KFN0cmluZ0ltcGwpIHNob3VsZCBiZSB0aGUgc2FtZSB0byBzaXplb2YoU3RhdGljU3RyaW5nSW1w
bCkiKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKIC8vIFN0cmluZ0ltcGxzIGNyZWF0ZWQgZnJv
bSBTdGF0aWNBU0NJSUxpdGVyYWwgd2lsbCBBU1NFUlQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nU3RhdGljcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ1N0
YXRpY3MuY3BwCmluZGV4IGFkOWU2ZTM4YjdlZWNiNzNiZjlkNWY0NzEwODlhYzZlZmYzN2Y2Mjcu
LjBkMjU0YTVlMTAzNmJiYmI1NTgyOWQwMDU4YmRhZjcxOWEwODc0NTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nU3RhdGljcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdTdGF0aWNzLmNwcApAQCAtNDEsMTggKzQxLDYgQEAKIAogbmFtZXNwYWNlIFdU
RiB7CiAKLVN0cmluZ0ltcGwqIFN0cmluZ0ltcGw6Om51bGwoKQotewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxTdHJpbmdJbXBsPiBudWxsU3RyaW5nKENvbnN0cnVjdEVtcHR5U3RyaW5nKTsK
LSAgICByZXR1cm4gJm51bGxTdHJpbmcuZ2V0KCk7Ci19Ci0KLVN0cmluZ0ltcGwqIFN0cmluZ0lt
cGw6OmVtcHR5KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nSW1wbD4gZW1w
dHlTdHJpbmcoQ29uc3RydWN0RW1wdHlTdHJpbmcpOwotICAgIHJldHVybiAmZW1wdHlTdHJpbmcu
Z2V0KCk7Ci19Ci0KIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgaGFzaCB2YWx1ZSwgc3Rv
cmUgc3BlY2lhbGl6ZWQgaGFzaCB2YWx1ZSBmb3IKIC8vIHN5bWJvbGl6ZWQgU3RyaW5nSW1wbCou
IEFuZCBkb24ndCB1c2UgdGhlIG5vcm1hbCBoYXNoIHZhbHVlIGZvciBzeW1ib2xpemVkCiAvLyBT
dHJpbmdJbXBsKiB3aGVuIHRoZXkgYXJlIHRyZWF0ZWQgYXMgSWRlbnRpZmllcnMuIFVuaXF1ZSBu
YXR1cmUgb2YgdGhlc2UKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCA3NDNmZjljYjMwZDIzNmZkYjgyNTkxMzU0MGViNDNkZDk2OTRkZTNjLi5lMGZj
M2QyNjVlMDliOTYzYTkxMzI2N2IyNjk3NjgxYjBmNDFhNmE2IDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMTEt
MjkgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgW1dU
Rl0gSW50cm9kdWNlIFN0cmluZ0ltcGw6OlN0YXRpY1N0cmluZ0ltcGwgd2l0aCBjb25zdGV4cHIg
Y29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTA5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNi0xMS0yOSAgQ2FybG9zIEFsYmVydG8gTG9wZXog
UGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbTGludXhdIHJ1bi1iZW5jaG1h
cmsgc2hvdWxkIGJlIGFibGUgdG8gZXhlY3V0ZSB0aGUgYmVuY2htYXJrcyB3aXRoIG1vcmUgYnJv
d3NlcnMuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TdHJpbmdJ
bXBsLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCmlu
ZGV4IDk4NDlkZWMzZTViOTI1Nzk5ZWY5Zjc3M2FmYWZhMTZkMTc0ZTUyOTkuLjJiOTZjZmZlMDI3
MzY1MDUxOWYyY2ViODQ1YjQ3Y2UzZDliYTZhN2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1N0cmluZ0ltcGwuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJj
b25maWcuaCIKIAorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
eW1ib2xJbXBsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTU3NCw0
ICs1NzUsMjAgQEAgVEVTVChXVEYsIFN0cmluZ0ltcGxOdWxsU3ltYm9sVG9BdG9taWNTdHJpbmcp
CiAgICAgQVNTRVJUX0ZBTFNFKHJlZmVyZW5jZS0+aXNBdG9taWMoKSk7CiB9CiAKK1RFU1QoV1RG
LCBTdHJpbmdJbXBsQ29uc3RleHBySGFzaGVyKQoreworICAgIEFTU0VSVF9FUShzdHJpbmdGcm9t
VVRGOCgiIiktPmhhc2goKSwgQ29uc3RleHByU3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaEFuZE1h
c2tUb3A4Qml0cygiIikpOworICAgIEFTU0VSVF9FUShzdHJpbmdGcm9tVVRGOCgiQSIpLT5oYXNo
KCksIENvbnN0ZXhwclN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoIkEi
KSk7CisgICAgQVNTRVJUX0VRKHN0cmluZ0Zyb21VVEY4KCJBQSIpLT5oYXNoKCksIENvbnN0ZXhw
clN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoIkFBIikpOworICAgIEFT
U0VSVF9FUShzdHJpbmdGcm9tVVRGOCgiQ29jb2EiKS0+aGFzaCgpLCBDb25zdGV4cHJTdHJpbmdI
YXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKCJDb2NvYSIpKTsKKyAgICBBU1NFUlRf
RVEoc3RyaW5nRnJvbVVURjgoIkNhcHB1Y2Npbm8iKS0+aGFzaCgpLCBDb25zdGV4cHJTdHJpbmdI
YXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKCJDYXBwdWNjaW5vIikpOworfQorCitU
RVNUKFdURiwgU3RyaW5nSW1wbEVtcHR5KQoreworICAgIEFTU0VSVF9GQUxTRShTdHJpbmdJbXBs
OjplbXB0eSgpLT5sZW5ndGgoKSk7CisgICAgQVNTRVJUX0ZBTFNFKFN0cmluZ0ltcGw6Om51bGwo
KS0+bGVuZ3RoKCkpOworICAgIEFTU0VSVF9ORShTdHJpbmdJbXBsOjpudWxsKCksIFN0cmluZ0lt
cGw6OmVtcHR5KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="318233"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297942</attachid>
            <date>2017-01-03 12:21:27 -0800</date>
            <delta_ts>2017-01-03 12:21:27 -0800</delta_ts>
            <desc>C++14 relaxed constexpr</desc>
            <filename>bug-165093-20170104052002.patch</filename>
            <type>text/plain</type>
            <size>13486</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEwMjQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBkMjMyZjllNGQ5NjU0Njg2Y2M3NjNh
YTg5MGRjMzFiY2UzY2IyM2YuLjU3Yzc4ODgyZWJmYjY0MTM2MGI4M2I0YjY1YzYyNGU0MTE4MTBi
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTctMDEtMDMgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIFN0cmluZ0ltcGw6OlN0YXRp
Y1N0cmluZ0ltcGwgd2l0aCBjb25zdGV4cHIgY29uc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTA5MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0hhc2hlci5oOgorICAgICAgICAo
V1RGOjpTdHJpbmdIYXNoZXI6OmFkZENoYXJhY3RlcnNBc3N1bWluZ0FsaWduZWQpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoQW5kTWFza1RvcDhCaXRzKToKKyAgICAg
ICAgKFdURjo6U3RyaW5nSGFzaGVyOjpjb21wdXRlSGFzaCk6CisgICAgICAgIChXVEY6OlN0cmlu
Z0hhc2hlcjo6Y29tcHV0ZUxpdGVyYWxIYXNoKToKKyAgICAgICAgKFdURjo6U3RyaW5nSGFzaGVy
Ojpjb21wdXRlTGl0ZXJhbEhhc2hBbmRNYXNrVG9wOEJpdHMpOgorICAgICAgICAoV1RGOjpTdHJp
bmdIYXNoZXI6OmRlZmF1bHRDb252ZXJ0ZXIpOgorICAgICAgICAoV1RGOjpTdHJpbmdIYXNoZXI6
OmF2YWxhbmNoZUJpdHMpOgorICAgICAgICAoV1RGOjpTdHJpbmdIYXNoZXI6OmZpbmFsaXplKToK
KyAgICAgICAgKFdURjo6U3RyaW5nSGFzaGVyOjpmaW5hbGl6ZUFuZE1hc2tUb3A4Qml0cyk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0hhc2hlcjo6YXZvaWRaZXJvKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nSGFzaGVyOjpjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3Rlcik6CisgICAgICAg
IChXVEY6OlN0cmluZ0hhc2hlcjo6Y2FsY3VsYXRlV2l0aFR3b0NoYXJhY3RlcnMpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoSW1wbCk6CisgICAgICAgIChXVEY6OlN0
cmluZ0hhc2hlcjo6cHJvY2Vzc1BlbmRpbmdDaGFyYWN0ZXIpOgorICAgICAgICAoV1RGOjpTdHJp
bmdIYXNoZXI6OmF2YWxhbmNoZUJpdHMzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5n
SGFzaGVyOjphdmFsYW5jaGVCaXRzMik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0hh
c2hlcjo6YXZhbGFuY2hlQml0czEpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTdHJpbmdIYXNo
ZXI6OmF2YWxhbmNoZUJpdHMwKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3RyaW5nSGFzaGVy
OjpjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcjEpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpTdHJpbmdIYXNoZXI6OmNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVy
MCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0hhc2hlcjo6Y2FsY3VsYXRlMSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlN0cmluZ0hhc2hlcjo6Y2FsY3VsYXRlMCk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OlN0cmluZ0hhc2hlcjo6Y2FsY3VsYXRlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6U3RyaW5nSGFzaGVyOjpjb21wdXRlTGl0ZXJhbEhhc2hJbXBsKTogRGVsZXRlZC4K
KwogMjAxNy0wMS0wMiAgSnVsaWVuIEJyaWFuY2VhdSAgPGpicmlhbmNlQGNpc2NvLmNvbT4KIAog
ICAgICAgICBSZW1vdmUgc2g0IHNwZWNpZmljIGNvZGUgZnJvbSBKYXZhU2NyaXB0Q29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaGVyLmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIu
aAppbmRleCBjMGEyZThjZjI5N2M1MGE0ZDViZTAwNzU0OTU3ZjBhYTRjMjMxMzljLi4yNWYyNTky
YTBlYmMxMmJjNWUzZGYzY2ZkMGVmOWM3ZjU0Y2IxNWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9IYXNoZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoZXIuaApAQCAtNTYsOSArNTYs
NyBAQCBjbGFzcyBTdHJpbmdIYXNoZXIgewogICAgIHZvaWQgYWRkQ2hhcmFjdGVyc0Fzc3VtaW5n
QWxpZ25lZChVQ2hhciBhLCBVQ2hhciBiKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2hhc1Bl
bmRpbmdDaGFyYWN0ZXIpOwotICAgICAgICBtX2hhc2ggKz0gYTsKLSAgICAgICAgbV9oYXNoID0g
KG1faGFzaCA8PCAxNikgXiAoKGIgPDwgMTEpIF4gbV9oYXNoKTsKLSAgICAgICAgbV9oYXNoICs9
IG1faGFzaCA+PiAxMTsKKyAgICAgICAgbV9oYXNoID0gY2FsY3VsYXRlV2l0aFR3b0NoYXJhY3Rl
cnMobV9oYXNoLCBhLCBiKTsKICAgICB9CiAKICAgICB2b2lkIGFkZENoYXJhY3RlcihVQ2hhciBj
aGFyYWN0ZXIpCkBAIC0xNzEsNTQgKzE2OSw1OCBAQCBjbGFzcyBTdHJpbmdIYXNoZXIgewogICAg
ICAgICByZXR1cm4gZmluYWxpemUocHJvY2Vzc1BlbmRpbmdDaGFyYWN0ZXIoKSk7CiAgICAgfQog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5z
aWduZWQgY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gc3Rh
dGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBU
KiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewotICAgICAgICBTdHJpbmdIYXNoZXIgaGFz
aGVyOwotICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVyc0Fzc3VtaW5nQWxpZ25lZDxULCBDb252
ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBoYXNoZXIuaGFzaFdpdGhUb3A4
Qml0c01hc2tlZCgpOworICAgICAgICByZXR1cm4gZmluYWxpemVBbmRNYXNrVG9wOEJpdHMoY29t
cHV0ZUhhc2hJbXBsPFQsIENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKSk7CiAgICAgfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWduZWQg
Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCogZGF0YSkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0ZXIoVCk+IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Y29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCogZGF0YSkKICAgICB7Ci0gICAgICAg
IFN0cmluZ0hhc2hlciBoYXNoZXI7Ci0gICAgICAgIGhhc2hlci5hZGRDaGFyYWN0ZXJzQXNzdW1p
bmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSk7Ci0gICAgICAgIHJldHVybiBoYXNoZXIuaGFz
aFdpdGhUb3A4Qml0c01hc2tlZCgpOworICAgICAgICByZXR1cm4gZmluYWxpemVBbmRNYXNrVG9w
OEJpdHMoY29tcHV0ZUhhc2hJbXBsPFQsIENvbnZlcnRlcj4oZGF0YSkpOwogICAgIH0KIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1hc2tU
b3A4Qml0cyhjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlSGFzaEFuZE1hc2tUb3A4
Qml0cyhjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewogICAgICAgICByZXR1
cm4gY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHM8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSwg
bGVuZ3RoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWdu
ZWQgY29tcHV0ZUhhc2hBbmRNYXNrVG9wOEJpdHMoY29uc3QgVCogZGF0YSkKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNvbXB1dGVIYXNoQW5kTWFz
a1RvcDhCaXRzKGNvbnN0IFQqIGRhdGEpCiAgICAgewogICAgICAgICByZXR1cm4gY29tcHV0ZUhh
c2hBbmRNYXNrVG9wOEJpdHM8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSk7CiAgICAgfQogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWdu
ZWQgY29tcHV0ZUhhc2goY29uc3QgVCogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4gc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBjb21wdXRlSGFzaChjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewot
ICAgICAgICBTdHJpbmdIYXNoZXIgaGFzaGVyOwotICAgICAgICBoYXNoZXIuYWRkQ2hhcmFjdGVy
c0Fzc3VtaW5nQWxpZ25lZDxULCBDb252ZXJ0ZXI+KGRhdGEsIGxlbmd0aCk7Ci0gICAgICAgIHJl
dHVybiBoYXNoZXIuaGFzaCgpOworICAgICAgICByZXR1cm4gZmluYWxpemUoY29tcHV0ZUhhc2hJ
bXBsPFQsIENvbnZlcnRlcj4oZGF0YSwgbGVuZ3RoKSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgVUNoYXIgQ29udmVydGVyKFQpPiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUhh
c2goY29uc3QgVCogZGF0YSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBVQ2hhciBDb252ZXJ0
ZXIoVCk+IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUhhc2goY29uc3QgVCogZGF0
YSkKICAgICB7Ci0gICAgICAgIFN0cmluZ0hhc2hlciBoYXNoZXI7Ci0gICAgICAgIGhhc2hlci5h
ZGRDaGFyYWN0ZXJzQXNzdW1pbmdBbGlnbmVkPFQsIENvbnZlcnRlcj4oZGF0YSk7Ci0gICAgICAg
IHJldHVybiBoYXNoZXIuaGFzaCgpOworICAgICAgICByZXR1cm4gZmluYWxpemUoY29tcHV0ZUhh
c2hJbXBsPFQsIENvbnZlcnRlcj4oZGF0YSkpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSGFzaChjb25zdCBUKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBjb21wdXRlSGFzaChjb25zdCBUKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewog
ICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2g8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSwgbGVu
Z3RoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQg
Y29tcHV0ZUhhc2goY29uc3QgVCogZGF0YSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIGNvbXB1dGVIYXNoKGNvbnN0IFQqIGRhdGEpCiAgICAgewog
ICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2g8VCwgZGVmYXVsdENvbnZlcnRlcj4oZGF0YSk7CiAg
ICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgY2hhcmFjdGVyc0NvdW50
PgorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY29tcHV0ZUxpdGVyYWxIYXNoKGNvbnN0
IFQgKCZjaGFyYWN0ZXJzKVtjaGFyYWN0ZXJzQ291bnRdKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNvbXB1dGVIYXNoPFQsIGRlZmF1bHRDb252ZXJ0ZXI+KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnND
b3VudCAtIDEpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGNo
YXJhY3RlcnNDb3VudD4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNvbXB1dGVMaXRl
cmFsSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBUICgmY2hhcmFjdGVycylbY2hhcmFjdGVyc0Nv
dW50XSkKKyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlSGFzaEFuZE1hc2tUb3A4Qml0czxU
LCBkZWZhdWx0Q29udmVydGVyPihjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzQ291bnQgLSAxKTsKKyAg
ICB9CisKICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaE1lbW9yeShjb25zdCB2b2lkKiBkYXRhLCB1
bnNpZ25lZCBsZW5ndGgpCiAgICAgewogICAgICAgICBzaXplX3QgbGVuZ3RoSW5VQ2hhciA9IGxl
bmd0aCAvIHNpemVvZihVQ2hhcik7CkBAIC0yMzYsNjQgKzIzOCw1MCBAQCBjbGFzcyBTdHJpbmdI
YXNoZXIgewogICAgICAgICByZXR1cm4gaGFzaE1lbW9yeShkYXRhLCBsZW5ndGgpOwogICAgIH0K
IAotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgZmluYWxpemUodW5zaWduZWQgaGFzaCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhdm9pZFplcm8oYXZhbGFuY2hlQml0cyhoYXNoKSk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBmaW5hbGl6ZUFuZE1hc2tUb3A4
Qml0cyh1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAgICAgLy8gUmVzZXJ2aW5nIHNwYWNlIGZy
b20gdGhlIGhpZ2ggYml0cyBmb3IgZmxhZ3MgcHJlc2VydmVzIG1vc3Qgb2YgdGhlIGhhc2gncwot
ICAgICAgICAvLyB2YWx1ZSwgc2luY2UgaGFzaCBsb29rdXAgdHlwaWNhbGx5IG1hc2tzIG91dCB0
aGUgaGlnaCBiaXRzIGFueXdheS4KLSAgICAgICAgcmV0dXJuIGF2b2lkWmVybyhhdmFsYW5jaGVC
aXRzKGhhc2gpICYgU3RyaW5nSGFzaGVyOjptYXNrSGFzaCk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdW5zaWduZWQgY2hhcmFjdGVyc0NvdW50PgotICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgY29tcHV0ZUxpdGVyYWxIYXNoKGNvbnN0IFQgKCZjaGFyYWN0ZXJzKVtj
aGFyYWN0ZXJzQ291bnRdKQorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIFVDaGFyIGRl
ZmF1bHRDb252ZXJ0ZXIoVUNoYXIgY2hhcmFjdGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0
cmluZ0hhc2hlcjo6ZmluYWxpemUoY29tcHV0ZUxpdGVyYWxIYXNoSW1wbChzdHJpbmdIYXNoaW5n
U3RhcnRWYWx1ZSwgMCwgY2hhcmFjdGVycywgY2hhcmFjdGVyc0NvdW50IC0gMSkpOworICAgICAg
ICByZXR1cm4gY2hhcmFjdGVyOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHVu
c2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNv
bXB1dGVMaXRlcmFsSGFzaEFuZE1hc2tUb3A4Qml0cyhjb25zdCBUICgmY2hhcmFjdGVycylbY2hh
cmFjdGVyc0NvdW50XSkKKyAgICBzdGF0aWMgY29uc3RleHByIFVDaGFyIGRlZmF1bHRDb252ZXJ0
ZXIoTENoYXIgY2hhcmFjdGVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6
ZmluYWxpemVBbmRNYXNrVG9wOEJpdHMoY29tcHV0ZUxpdGVyYWxIYXNoSW1wbChzdHJpbmdIYXNo
aW5nU3RhcnRWYWx1ZSwgMCwgY2hhcmFjdGVycywgY2hhcmFjdGVyc0NvdW50IC0gMSkpOworICAg
ICAgICByZXR1cm4gY2hhcmFjdGVyOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBzdGF0aWMgVUNo
YXIgZGVmYXVsdENvbnZlcnRlcihVQ2hhciBjaGFyYWN0ZXIpCisgICAgc3RhdGljIGNvbnN0ZXhw
ciBVQ2hhciBkZWZhdWx0Q29udmVydGVyKGNoYXIgY2hhcmFjdGVyKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGNoYXJhY3RlcjsKICAgICB9CiAKLSAgICBzdGF0aWMgVUNoYXIgZGVmYXVsdENvbnZl
cnRlcihMQ2hhciBjaGFyYWN0ZXIpCisgICAgc3RhdGljIGNvbnN0ZXhwciBVQ2hhciBkZWZhdWx0
Q29udmVydGVyKGNoYXIxNl90IGNoYXJhY3RlcikKICAgICB7CiAgICAgICAgIHJldHVybiBjaGFy
YWN0ZXI7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGF2YWxhbmNoZUJpdHMzKHVuc2lnbmVkIGhhc2gpCisgICAgQUxXQVlTX0lOTElORSBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHModW5zaWduZWQgaGFzaCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBoYXNoIF4gKGhhc2ggPDwgMTApOwotICAgIH0KKyAgICAgICAgdW5z
aWduZWQgcmVzdWx0ID0gaGFzaDsKIAotICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0ZXhw
ciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzMih1bnNpZ25lZCBoYXNoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGF2YWxhbmNoZUJpdHMzKGhhc2ggKyAoaGFzaCA+PiAxNSkpOwotICAgIH0KKyAgICAg
ICAgcmVzdWx0IF49IHJlc3VsdCA8PCAzOworICAgICAgICByZXN1bHQgKz0gcmVzdWx0ID4+IDU7
CisgICAgICAgIHJlc3VsdCBePSByZXN1bHQgPDwgMjsKKyAgICAgICAgcmVzdWx0ICs9IHJlc3Vs
dCA+PiAxNTsKKyAgICAgICAgcmVzdWx0IF49IHJlc3VsdCA8PCAxMDsKIAotICAgIEFMV0FZU19J
TkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdmFsYW5jaGVCaXRzMSh1bnNpZ25lZCBo
YXNoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGF2YWxhbmNoZUJpdHMyKGhhc2ggXiAoaGFzaCA8
PCAyKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElO
RSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJpdHMwKHVuc2lnbmVkIGhhc2gp
CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBmaW5hbGl6ZSh1bnNpZ25lZCBoYXNoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGF2YWxhbmNoZUJpdHMxKGhhc2ggKyAoaGFzaCA+PiA1KSk7
CisgICAgICAgIHJldHVybiBhdm9pZFplcm8oYXZhbGFuY2hlQml0cyhoYXNoKSk7CiAgICAgfQog
Ci0gICAgQUxXQVlTX0lOTElORSBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF2YWxhbmNoZUJp
dHModW5zaWduZWQgaGFzaCkKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGZpbmFsaXpl
QW5kTWFza1RvcDhCaXRzKHVuc2lnbmVkIGhhc2gpCiAgICAgewotICAgICAgICByZXR1cm4gYXZh
bGFuY2hlQml0czAoaGFzaCBeIChoYXNoIDw8IDMpKTsKKyAgICAgICAgLy8gUmVzZXJ2aW5nIHNw
YWNlIGZyb20gdGhlIGhpZ2ggYml0cyBmb3IgZmxhZ3MgcHJlc2VydmVzIG1vc3Qgb2YgdGhlIGhh
c2gncworICAgICAgICAvLyB2YWx1ZSwgc2luY2UgaGFzaCBsb29rdXAgdHlwaWNhbGx5IG1hc2tz
IG91dCB0aGUgaGlnaCBiaXRzIGFueXdheS4KKyAgICAgICAgcmV0dXJuIGF2b2lkWmVybyhhdmFs
YW5jaGVCaXRzKGhhc2gpICYgU3RyaW5nSGFzaGVyOjptYXNrSGFzaCk7CiAgICAgfQogCiAgICAg
Ly8gVGhpcyBhdm9pZHMgZXZlciByZXR1cm5pbmcgYSBoYXNoIGNvZGUgb2YgMCwgc2luY2UgdGhh
dCBpcyB1c2VkIHRvCkBAIC0zMDIsNjIgKzI5MCw3MiBAQCBjbGFzcyBTdHJpbmdIYXNoZXIgewog
ICAgIC8vIGV4YWN0bHkgMCB3aGVuIGhhc2ggbG9va3VwIG1hc2tzIG91dCB0aGUgaGlnaCBiaXRz
LgogICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdm9pZFplcm8o
dW5zaWduZWQgaGFzaCkKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNoID8gaGFzaCA6ICgweDgw
MDAwMDAwID4+IFN0cmluZ0hhc2hlcjo6ZmxhZ0NvdW50KTsKKyAgICAgICAgaWYgKGhhc2gpCisg
ICAgICAgICAgICByZXR1cm4gaGFzaDsKKyAgICAgICAgcmV0dXJuIDB4ODAwMDAwMDAgPj4gU3Ry
aW5nSGFzaGVyOjpmbGFnQ291bnQ7CiAgICAgfQogCi0gICAgdW5zaWduZWQgcHJvY2Vzc1BlbmRp
bmdDaGFyYWN0ZXIoKSBjb25zdAorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3Vs
YXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIodW5zaWduZWQgaGFzaCwgdW5zaWduZWQgY2hh
cmFjdGVyKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9oYXNoOworICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBoYXNoOworCisgICAgICAgIHJlc3VsdCArPSBjaGFyYWN0ZXI7
CisgICAgICAgIHJlc3VsdCBePSByZXN1bHQgPDwgMTE7CisgICAgICAgIHJlc3VsdCArPSByZXN1
bHQgPj4gMTc7CiAKLSAgICAgICAgLy8gSGFuZGxlIGVuZCBjYXNlLgotICAgICAgICBpZiAobV9o
YXNQZW5kaW5nQ2hhcmFjdGVyKSB7Ci0gICAgICAgICAgICByZXN1bHQgKz0gbV9wZW5kaW5nQ2hh
cmFjdGVyOwotICAgICAgICAgICAgcmVzdWx0IF49IHJlc3VsdCA8PCAxMTsKLSAgICAgICAgICAg
IHJlc3VsdCArPSByZXN1bHQgPj4gMTc7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKLQotICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgbGltaXRzIGl0c2VsZiB0byB0
aGUgb2xkZXIsIG1vcmUgbGltaXRlZCBDKysxMSBjb25zdGV4cHIgY2FwYWJpbGl0aWVzLCB1c2lu
ZwotICAgIC8vIHJlY3Vyc2lvbiBpbnN0ZWFkIG9mIGxvb3BpbmcsIGZvciBleGFtcGxlLiBXb3Vs
ZCBiZSBuaWNlIHRvIHJld3JpdGUgdGhpcyBpbiBhIHNpbXBsZXIgd2F5Ci0gICAgLy8gb25jZSB3
ZSBubyBsb25nZXIgbmVlZCB0byBzdXBwb3J0IGNvbXBpbGVycyBsaWtlIEdDQyA0LjkgdGhhdCBk
byBub3QgeWV0IHN1cHBvcnQgaXQuCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxj
dWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcjEodW5zaWduZWQgaGFzaCkKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIGNhbGN1bGF0ZVdpdGhUd29DaGFyYWN0ZXJzKHVuc2lnbmVk
IGhhc2gsIHVuc2lnbmVkIGZpcnN0Q2hhcmFjdGVyLCB1bnNpZ25lZCBzZWNvbmRDaGFyYWN0ZXIp
CiAgICAgewotICAgICAgICByZXR1cm4gaGFzaCArIChoYXNoID4+IDE3KTsKLSAgICB9CisgICAg
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IGhhc2g7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyMCh1bnNpZ25lZCBoYXNoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVy
MSgoaGFzaCA8PCAxMSkgXiBoYXNoKTsKLSAgICB9CisgICAgICAgIHJlc3VsdCArPSBmaXJzdENo
YXJhY3RlcjsKKyAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8PCAxNikgXiAoKHNlY29uZENoYXJh
Y3RlciA8PCAxMSkgXiByZXN1bHQpOworICAgICAgICByZXN1bHQgKz0gcmVzdWx0ID4+IDExOwog
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFz
dENoYXJhY3Rlcih1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBjaGFyYWN0ZXIpCi0gICAgewotICAg
ICAgICByZXR1cm4gY2FsY3VsYXRlV2l0aFJlbWFpbmluZ0xhc3RDaGFyYWN0ZXIwKGhhc2ggKyBj
aGFyYWN0ZXIpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlMSh1bnNpZ25lZCBoYXNoKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIFVDaGFyIENvbnZlcnRlcihUKT4KKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIGNvbXB1dGVIYXNoSW1wbChjb25zdCBUKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5n
dGgpCiAgICAgewotICAgICAgICByZXR1cm4gaGFzaCArIChoYXNoID4+IDExKTsKLSAgICB9Cisg
ICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IHN0cmluZ0hhc2hpbmdTdGFydFZhbHVlOworICAgICAg
ICBib29sIHJlbWFpbmRlciA9IGxlbmd0aCAmIDE7CisgICAgICAgIGxlbmd0aCA+Pj0gMTsKIAot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgY2FsY3VsYXRlMCh1bnNpZ25lZCBoYXNoLCB1
bnNpZ25lZCBzZWNvbmRDaGFyYWN0ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsY3VsYXRl
MSgoaGFzaCA8PCAxNikgXiAoKHNlY29uZENoYXJhY3RlciA8PCAxMSkgXiBoYXNoKSk7CisgICAg
ICAgIHdoaWxlIChsZW5ndGgtLSkgeworICAgICAgICAgICAgcmVzdWx0ID0gY2FsY3VsYXRlV2l0
aFR3b0NoYXJhY3RlcnMocmVzdWx0LCBDb252ZXJ0ZXIoY2hhcmFjdGVyc1swXSksIENvbnZlcnRl
cihjaGFyYWN0ZXJzWzFdKSk7CisgICAgICAgICAgICBjaGFyYWN0ZXJzICs9IDI7CisgICAgICAg
IH0KKworICAgICAgICBpZiAocmVtYWluZGVyKQorICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0
ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyKHJlc3VsdCwgQ29udmVydGVyKGNoYXJhY3RlcnNb
MF0pKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIGNhbGN1bGF0ZSh1bnNpZ25lZCBoYXNoLCB1bnNpZ25lZCBmaXJzdENoYXJh
Y3RlciwgdW5zaWduZWQgc2Vjb25kQ2hhcmFjdGVyKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IFVDaGFyIENvbnZlcnRlcihUKT4KKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGNvbXB1
dGVIYXNoSW1wbChjb25zdCBUKiBjaGFyYWN0ZXJzKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNh
bGN1bGF0ZTAoaGFzaCArIGZpcnN0Q2hhcmFjdGVyLCBzZWNvbmRDaGFyYWN0ZXIpOworICAgICAg
ICB1bnNpZ25lZCByZXN1bHQgPSBzdHJpbmdIYXNoaW5nU3RhcnRWYWx1ZTsKKyAgICAgICAgd2hp
bGUgKFQgYSA9ICpjaGFyYWN0ZXJzKyspIHsKKyAgICAgICAgICAgIFQgYiA9ICpjaGFyYWN0ZXJz
Kys7CisgICAgICAgICAgICBpZiAoIWIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0
ZVdpdGhSZW1haW5pbmdMYXN0Q2hhcmFjdGVyKHJlc3VsdCwgQ29udmVydGVyKGEpKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGNhbGN1bGF0ZVdpdGhUd29DaGFyYWN0ZXJzKHJlc3VsdCwgQ29udmVy
dGVyKGEpLCBDb252ZXJ0ZXIoYikpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCi0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBjb21wdXRlTGl0ZXJhbEhh
c2hJbXBsKHVuc2lnbmVkIGhhc2gsIHVuc2lnbmVkIGluZGV4LCBjb25zdCBjaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCisgICAgdW5zaWduZWQgcHJvY2Vzc1BlbmRpbmdDaGFyYWN0
ZXIoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIChpbmRleCA9PSBsZW5ndGgpCi0gICAg
ICAgICAgICA/IGhhc2ggOiAoKGluZGV4ICsgMSkgPT0gbGVuZ3RoKQotICAgICAgICAgICAgPyBj
YWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJhY3RlcihoYXNoLCBjaGFyYWN0ZXJzW2luZGV4
XSkKLSAgICAgICAgICAgIDogY29tcHV0ZUxpdGVyYWxIYXNoSW1wbChjYWxjdWxhdGUoaGFzaCwg
Y2hhcmFjdGVyc1tpbmRleF0sIGNoYXJhY3RlcnNbaW5kZXggKyAxXSksIGluZGV4ICsgMiwgY2hh
cmFjdGVycywgbGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9oYXNoOworCisg
ICAgICAgIC8vIEhhbmRsZSBlbmQgY2FzZS4KKyAgICAgICAgaWYgKG1faGFzUGVuZGluZ0NoYXJh
Y3RlcikKKyAgICAgICAgICAgIHJldHVybiBjYWxjdWxhdGVXaXRoUmVtYWluaW5nTGFzdENoYXJh
Y3RlcihyZXN1bHQsIG1fcGVuZGluZ0NoYXJhY3Rlcik7CisKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKICAgICB1bnNpZ25lZCBtX2hhc2g7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>