<?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>139776</bug_id>
          
          <creation_ts>2014-12-18 09:48:32 -0800</creation_ts>
          <short_desc>Add strong typing to RefCounter interface, return value as a bool.</short_desc>
          <delta_ts>2014-12-18 18:12:46 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>139744</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>bdakin</cc>
    
    <cc>bfulgham</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1056799</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-12-18 09:48:32 -0800</bug_when>
    <thetext>Currently all token vended by a RefCounter have the same type – Ref&lt;RefCounter::Count&gt;. This means there is no compile time type checking to prevent mistakes. Update the count() method to token&lt;&gt;(), templated on type used to identify the token being returned. Calls to token&lt;T&gt;() will return a result of type RefCounter::Token&lt;T&gt;.

There are a few problems with the fact the counter will return you an exact count of the number of outstanding tokens:
  - It is desirable to only fire the callback on zero-edge changes; it is more consistent to do so if the value is only readable as a boolean.
  - It is desirable to provide the value as an argument to the callback, however to make this useful for integer values it is also necessary to indicate the direction of change (0-&gt;1 is often interesting where 2-&gt;1 is not).
  - There is a mismatch between the precision of returning a count, and the inherent imprecision of a token based mechanism, where it may be difficult to guarantee absolutely no unnecessary refcount churn, and thus unintentional counter values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056833</commentid>
    <comment_count>1</comment_count>
      <attachid>243505</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-12-18 11:24:14 -0800</bug_when>
    <thetext>Created attachment 243505
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056836</commentid>
    <comment_count>2</comment_count>
      <attachid>243505</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-12-18 11:30:10 -0800</bug_when>
    <thetext>Comment on attachment 243505
Fix

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

r=me

&gt; Source/WTF/ChangeLog:8
&gt; +        Currently all token vended by a RefCounter have the same type â Ref&lt;RefCounter::Count&gt;.

No squiggles, please.

&gt; Source/WebKit2/UIProcess/Plugins/mac/PluginProcessManagerMac.mm:37
&gt; -void PluginProcessManager::updateProcessSuppressionState()
&gt; +void PluginProcessManager::updateProcessSuppressionDisabled(bool disabled)
&gt;  {
&gt; -    bool processSuppressionEnabled = !m_processSuppressionDisabledForPageCounter.value();
&gt; -    if (m_processSuppressionEnabled == processSuppressionEnabled)
&gt; -        return;
&gt; -    
&gt; -    m_processSuppressionEnabled = processSuppressionEnabled;
&gt; +    bool enabled = !disabled;

This is not my least favorite way not to do things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056959</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-12-18 16:52:06 -0800</bug_when>
    <thetext>Transmitting file data ...................
Committed revision 177541.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056963</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-12-18 17:03:24 -0800</bug_when>
    <thetext>This breaks the Windows build and perhaps others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056964</commentid>
    <comment_count>5</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-12-18 17:04:37 -0800</bug_when>
    <thetext>Build errors:

5&gt;  RefCounter.cpp
5&gt;c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(105): warning C4812: obsolete declaration style: please use &apos;WTF::RefCounter::Token&lt;T&gt;::Token&apos; instead
5&gt;c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(105): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
5&gt;c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(105): error C2751: &apos;WTF::RefCounter::Token&lt;T&gt;::{ctor}&apos; : the name of a function parameter cannot be qualified
5&gt;c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(105): warning C4346: &apos;WTF::RefCounter::Token&lt;T&gt;::{ctor}&apos; : dependent name is not a type
5&gt;          prefix with &apos;typename&apos; to indicate a type
5&gt;c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(105): error C2143: syntax error : missing &apos;,&apos; before &apos;&amp;&apos;
5&gt;c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(108): error C2244: &apos;WTF::RefCounter::Token&lt;T&gt;::{ctor}&apos; : unable to match function definition to an existing declaration
5&gt;          definition
5&gt;          &apos;WTF::RefCounter::Token&lt;T&gt;::Token(const int)&apos;
5&gt;          existing declarations
5&gt;          &apos;WTF::RefCounter::Token&lt;T&gt;::Token(WTF::RefCounter::Count *)&apos;
5&gt;          &apos;WTF::RefCounter::Token&lt;T&gt;::Token(WTF::RefCounter::Token&lt;T&gt; &amp;&amp;)&apos;
5&gt;          &apos;WTF::RefCounter::Token&lt;T&gt;::Token(const WTF::RefCounter::Token&lt;T&gt; &amp;)&apos;
5&gt;          &apos;WTF::RefCounter::Token&lt;T&gt;::Token(std::nullptr_t)&apos;
5&gt;          &apos;WTF::RefCounter::Token&lt;T&gt;::Token(void)&apos;
5&gt;c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(111): warning C4812: obsolete declaration style: please use &apos;WTF::RefCounter::Token&lt;T&gt;::Token&apos; instead
5&gt;c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(111): warning C4551: function call missing argument list
5&gt;c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(111): error C2277: &apos;WTF::RefCounter::Token&lt;T&gt;::{ctor}&apos; : cannot take address of this member function
5&gt;c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(111): error C2568: &apos;&amp;&amp;&apos; : unable to resolve function overload
5&gt;          c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(74): could be &apos;WTF::RefCounter::Token&lt;T&gt;::Token(WTF::RefCounter::Count *)&apos;
5&gt;          c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(64): or       &apos;WTF::RefCounter::Token&lt;T&gt;::Token(WTF::RefCounter::Token&lt;T&gt; &amp;&amp;)&apos;
5&gt;          c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(63): or       &apos;WTF::RefCounter::Token&lt;T&gt;::Token(const WTF::RefCounter::Token&lt;T&gt; &amp;)&apos;
5&gt;          c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(62): or       &apos;WTF::RefCounter::Token&lt;T&gt;::Token(std::nullptr_t)&apos;
5&gt;          c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(61): or       &apos;WTF::RefCounter::Token&lt;T&gt;::Token(void)&apos;
5&gt;c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(114): error C2433: &apos;WTF::RefCounter::Token&lt;T&gt;::{ctor}&apos; : &apos;inline&apos; not permitted on data declarations
5&gt;c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(114): warning C4346: &apos;WTF::RefCounter::Token&lt;T&gt;::{ctor}&apos; : dependent name is not a type
5&gt;          prefix with &apos;typename&apos; to indicate a type
5&gt;c:\projects\webkit\opensource\source\wtf\wtf\RefCounter.h(114): error C2350: &apos;WTF::RefCounter::Token&lt;T&gt;::{ctor}&apos; is not a static member</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056965</commentid>
    <comment_count>6</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-12-18 17:11:02 -0800</bug_when>
    <thetext>This compiles on Windows, is this a comparable implementation?

Index: Source/WTF/wtf/RefCounter.h
===================================================================
--- Source/WTF/wtf/RefCounter.h (revision 177541)
+++ Source/WTF/wtf/RefCounter.h (working copy)
@@ -102,13 +102,13 @@
 }

 template&lt;class T&gt;
-inline RefCounter::Token&lt;T&gt;::Token(const RefCounter::Token&lt;T&gt;::Token&lt;T&gt;&amp; token)
+inline RefCounter::Token&lt;T&gt;::Token(const RefCounter::Token&lt;T&gt;&amp; token)
     : m_ptr(token.m_ptr)
 {
 }

 template&lt;class T&gt;
-inline RefCounter::Token&lt;T&gt;::Token(RefCounter::Token&lt;T&gt;::Token&lt;T&gt;&amp;&amp; token)
+inline RefCounter::Token&lt;T&gt;::Token(RefCounter::Token&lt;T&gt;&amp;&amp; token)
     : m_ptr(token.m_ptr)
 {
 }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056966</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-12-18 17:15:46 -0800</bug_when>
    <thetext>Reviewed my proposed change with Gavin.

Committed r177544.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056970</commentid>
    <comment_count>8</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-12-18 17:42:32 -0800</bug_when>
    <thetext>Committed revision 177549.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1056971</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-12-18 18:12:46 -0800</bug_when>
    <thetext>Build fix: http://trac.webkit.org/changeset/177553</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243505</attachid>
            <date>2014-12-18 11:24:14 -0800</date>
            <delta_ts>2014-12-18 11:30:10 -0800</delta_ts>
            <desc>Fix</desc>
            <filename>139776.1.patch</filename>
            <type>text/plain</type>
            <size>32229</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzc0OTgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBACisyMDE0LTEyLTE4ICBHYXZpbiBCYXJyYWNsb3VnaCAg
PGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3Ryb25nIHR5cGluZyB0byBS
ZWZDb3VudGVyIGludGVyZmFjZSwgcmV0dXJuIHZhbHVlIGFzIGEgYm9vbC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTc3NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSBhbGwgdG9rZW4g
dmVuZGVkIGJ5IGEgUmVmQ291bnRlciBoYXZlIHRoZSBzYW1lIHR5cGUg4oCTIFJlZjxSZWZDb3Vu
dGVyOjpDb3VudD4uCisgICAgICAgIFRoaXMgbWVhbnMgdGhlcmUgaXMgbm8gY29tcGlsZSB0aW1l
IHR5cGUgY2hlY2tpbmcgdG8gcHJldmVudCBtaXN0YWtlcy4gVXBkYXRlIHRoZSBjb3VudCgpCisg
ICAgICAgIG1ldGhvZCB0byB0b2tlbjw+KCksIHRlbXBsYXRlZCBvbiB0eXBlIHVzZWQgdG8gaWRl
bnRpZnkgdGhlIHRva2VuIGJlaW5nIHJldHVybmVkLgorICAgICAgICBDYWxscyB0byB0b2tlbjxU
PigpIHdpbGwgcmV0dXJuIGEgcmVzdWx0IG9mIHR5cGUgUmVmQ291bnRlcjo6VG9rZW48VD4uCisK
KyAgICAgICAgVGhlcmUgYXJlIGEgZmV3IHByb2JsZW1zIHdpdGggdGhlIGZhY3QgdGhlIGNvdW50
ZXIgd2lsbCByZXR1cm4geW91IGFuIGV4YWN0IGNvdW50IG9mIHRoZQorICAgICAgICBudW1iZXIg
b2Ygb3V0c3RhbmRpbmcgdG9rZW5zOgorICAgICAgICAgIC0gSXQgaXMgZGVzaXJhYmxlIHRvIG9u
bHkgZmlyZSB0aGUgY2FsbGJhY2sgb24gemVyby1lZGdlIGNoYW5nZXM7IGl0IGlzIG1vcmUgY29u
c2lzdGVudAorICAgICAgICAgICAgdG8gZG8gc28gaWYgdGhlIHZhbHVlIGlzIG9ubHkgcmVhZGFi
bGUgYXMgYSBib29sZWFuLgorICAgICAgICAgIC0gSXQgaXMgZGVzaXJhYmxlIHRvIHByb3ZpZGUg
dGhlIHZhbHVlIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFjaywgaG93ZXZlciB0byBtYWtl
CisgICAgICAgICAgICB0aGlzIHVzZWZ1bCBmb3IgaW50ZWdlciB2YWx1ZXMgaXQgaXMgYWxzbyBu
ZWNlc3NhcnkgdG8gaW5kaWNhdGUgdGhlIGRpcmVjdGlvbiBvZiBjaGFuZ2UKKyAgICAgICAgICAg
ICgwLT4xIGlzIG9mdGVuIGludGVyZXN0aW5nIHdoZXJlIDItPjEgaXMgbm90KS4KKyAgICAgICAg
ICAtIFRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgcHJlY2lzaW9uIG9mIHJldHVybmlu
ZyBhIGNvdW50LCBhbmQgdGhlIGluaGVyZW50CisgICAgICAgICAgICBpbXByZWNpc2lvbiBvZiBh
IHRva2VuIGJhc2VkIG1lY2hhbmlzbSwgd2hlcmUgaXQgbWF5IGJlIGRpZmZpY3VsdCB0byBndWFy
YW50ZWUKKyAgICAgICAgICAgIGFic29sdXRlbHkgbm8gdW5uZWNlc3NhcnkgcmVmY291bnQgY2h1
cm4sIGFuZCB0aHVzIHVuaW50ZW50aW9uYWwgY291bnRlciB2YWx1ZXMuCisKKyAgICAgICAgKiB3
dGYvUmVmQ291bnRlci5jcHA6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZXI6OkNvdW50OjpyZWYp
OgorICAgICAgICAoV1RGOjpSZWZDb3VudGVyOjpDb3VudDo6ZGVyZWYpOgorICAgICAgICAgICAg
LSBvbmx5IGNhbGwgdGhlIGNhbGxiYWNrIG9uIHplcm8tZWRnZSBjaGFuZ2VzOyBwcm92aWRlIHRo
ZSB2YWx1ZS4KKyAgICAgICAgKFdURjo6UmVmQ291bnRlcjo6UmVmQ291bnRlcik6CisgICAgICAg
ICAgICAtIGNhbGxiYWNrIG5vdyB0YWtlcyBhIGJvb2wgYXJndW1lbnQuCisgICAgICAgICogd3Rm
L1JlZkNvdW50ZXIuaDoKKyAgICAgICAgKFdURjo6UmVmQ291bnRlcjo6VG9rZW46OlRva2VuKToK
KyAgICAgICAgICAgIC0gTmV3IG9wYXF1ZSB0eXBlIHRvIHJlZmVyZW5jZSB0aGUgUmVmQ291bnRl
cjo6Q291bnQuCisgICAgICAgIChXVEY6OlJlZkNvdW50ZXI6OlRva2VuOjpvcGVyYXRvciEpOgor
ICAgICAgICAgICAgLSAhIG9wZXJhdG9yIGNoZWNrcyBmb3IgbnVsbCAvIGFuYXNpZ25lZCBUb2tl
bnMuCisgICAgICAgIChXVEY6OlJlZkNvdW50ZXI6OlJlZkNvdW50ZXIpOgorICAgICAgICAgICAg
LSBjYWxsYmFjayBub3cgdGFrZXMgYSBib29sIGFyZ3VtZW50LgorICAgICAgICAoV1RGOjpSZWZD
b3VudGVyOjp0b2tlbik6CisgICAgICAgICAgICAtIHJlbmFtZWQgZnJvbSBjb3VudCgpLCB0ZW1w
bGF0ZWQgb24gdHlwZSBvZiB0b2tlbiByZXR1cm5lZC4KKyAgICAgICAgKFdURjo6UmVmQ291bnRl
cjo6dmFsdWUpOgorICAgICAgICAgICAgLSBub3cgcmV0dXJucyBhIGJvb2wuCisgICAgICAgIChX
VEY6OlJlZkNvdW50ZXI6OlRva2VuPFQ+OjpUb2tlbik6CisgICAgICAgIChXVEY6Oj0pOgorICAg
ICAgICAgICAgLSBUb2tlbnMgY2FuIGJlIGNvcGllZCAmIGFzc2lnbmVkLgorICAgICAgICAoV1RG
OjpSZWZDb3VudGVyOjpjb3VudCk6IERlbGV0ZWQuCisgICAgICAgICAgICAtIHJlbmFtZWQgdG8g
dG9rZW48PigpLgorCiAyMDE0LTEyLTE3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CiAKICAgICAgICAgW2lPU10gTWFrZSBpdCBwb3NzaWJsZSB0byB0b2dnbGUgRmVhdHVyZUNvdW50
ZXIgc3VwcG9ydCBhdCBydW50aW1lCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVyLmNwcAkocmV2aXNpb24g
MTc3NDIyKQorKysgU291cmNlL1dURi93dGYvUmVmQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDEwICszMCwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKIAogdm9pZCBSZWZDb3VudGVyOjpD
b3VudDo6cmVmKCkKIHsKKyAgICBib29sIHZhbHVlV2FzWmVybyA9ICFtX3ZhbHVlOwogICAgICsr
bV92YWx1ZTsKLQotICAgIGlmIChtX3JlZkNvdW50ZXIpCi0gICAgICAgIG1fcmVmQ291bnRlci0+
bV92YWx1ZURpZENoYW5nZSgpOworICAgIAorICAgIGlmICh2YWx1ZVdhc1plcm8gJiYgbV9yZWZD
b3VudGVyKQorICAgICAgICBtX3JlZkNvdW50ZXItPm1fdmFsdWVEaWRDaGFuZ2UodHJ1ZSk7CiB9
CiAKIHZvaWQgUmVmQ291bnRlcjo6Q291bnQ6OmRlcmVmKCkKQEAgLTQxLDE3ICs0MiwyMCBAQCB2
b2lkIFJlZkNvdW50ZXI6OkNvdW50OjpkZXJlZigpCiAgICAgQVNTRVJUKG1fdmFsdWUpOwogICAg
IC0tbV92YWx1ZTsKIAorICAgIGlmIChtX3ZhbHVlKQorICAgICAgICByZXR1cm47CisKICAgICAv
LyBUaGUgQ291bnQgb2JqZWN0IGlzIGtlcHQgYWxpdmUgc28gbG9uZyBhcyBlaXRoZXIgdGhlIFJl
ZkNvdW50ZXIgdGhhdCBjcmVhdGVkIGl0IHJlbWFpbnMKICAgICAvLyBhbGxvY2F0ZWQsIG9yIHNv
IGxvbmcgYXMgaXRzIHJlZmVyZW5jZSBjb3VudCBpcyBub24temVyby4KICAgICAvLyBJZiB0aGUg
UmVmQ291bnRlciBoYXMgYWxyZWFkeSBiZWVuIGRlYWxsb2N0ZWQgdGhlbiBkZWxldGUgdGhlIENv
dW50IHdoZW4gaXRzIHJlZmVyZW5jZQogICAgIC8vIGNvdW50IHJlYWNoZXMgemVyby4KICAgICBp
ZiAobV9yZWZDb3VudGVyKQotICAgICAgICBtX3JlZkNvdW50ZXItPm1fdmFsdWVEaWRDaGFuZ2Uo
KTsKLSAgICBlbHNlIGlmICghbV92YWx1ZSkKKyAgICAgICAgbV9yZWZDb3VudGVyLT5tX3ZhbHVl
RGlkQ2hhbmdlKGZhbHNlKTsKKyAgICBlbHNlCiAgICAgICAgIGRlbGV0ZSB0aGlzOwogfQogCi1S
ZWZDb3VudGVyOjpSZWZDb3VudGVyKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiB2YWx1ZURpZENoYW5n
ZSkKK1JlZkNvdW50ZXI6OlJlZkNvdW50ZXIoc3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wpPiB2YWx1
ZURpZENoYW5nZSkKICAgICA6IG1fdmFsdWVEaWRDaGFuZ2UodmFsdWVEaWRDaGFuZ2UpCiAgICAg
LCBtX2NvdW50KG5ldyBDb3VudCgqdGhpcykpCiB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SZWZD
b3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUmVmQ291bnRlci5oCShyZXZp
c2lvbiAxNzc0MjIpCisrKyBTb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIFJlZkNvdW50ZXIg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlZkNvdW50ZXIpOwotcHVibGljOgorCiAgICAg
Y2xhc3MgQ291bnQgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb3VudCk7CiAgICAg
cHVibGljOgpAQCAtNTQsMjQgKzU0LDg2IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgbV92
YWx1ZTsKICAgICB9OwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlZkNvdW50ZXIoc3RkOjpm
dW5jdGlvbjx2b2lkKCk+ID0gW10oKSB7IH0pOworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgY2xhc3MgVG9rZW4gIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRva2VuKCkg
eyB9CisgICAgICAgIFRva2VuKHN0ZDo6bnVsbHB0cl90KSB7IH0KKyAgICAgICAgaW5saW5lIFRv
a2VuKGNvbnN0IFRva2VuPFQ+JiB0b2tlbik7CisgICAgICAgIGlubGluZSBUb2tlbihUb2tlbjxU
PiYmIHRva2VuKTsKKworICAgICAgICBpbmxpbmUgVG9rZW48VD4mIG9wZXJhdG9yPShzdGQ6Om51
bGxwdHJfdCk7CisgICAgICAgIGlubGluZSBUb2tlbjxUPiYgb3BlcmF0b3I9KGNvbnN0IFRva2Vu
PFQ+JiBvKTsKKyAgICAgICAgaW5saW5lIFRva2VuPFQ+JiBvcGVyYXRvcj0oVG9rZW48VD4mJiBv
KTsKKworICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3B0cjsgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFJlZkNvdW50ZXI7CisgICAgICAg
IGlubGluZSBUb2tlbihDb3VudCogY291bnQpOworCisgICAgICAgIFJlZlB0cjxDb3VudD4gbV9w
dHI7CisgICAgfTsKKworICAgIFdURl9FWFBPUlRfUFJJVkFURSBSZWZDb3VudGVyKHN0ZDo6ZnVu
Y3Rpb248dm9pZChib29sKT4gPSBbXShib29sKSB7IH0pOwogICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB+UmVmQ291bnRlcigpOwogCi0gICAgUmVmPENvdW50PiBjb3VudCgpIGNvbnN0CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUb2tlbjxUPiB0b2tlbigpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gKm1fY291bnQ7CisgICAgICAgIHJldHVybiBUb2tlbjxUPihtX2NvdW50KTsK
ICAgICB9CiAKLSAgICB1bnNpZ25lZCB2YWx1ZSgpIGNvbnN0CisgICAgYm9vbCB2YWx1ZSgpIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9jb3VudC0+bV92YWx1ZTsKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IG1fdmFsdWVEaWRDaGFuZ2U7CisgICAg
c3RkOjpmdW5jdGlvbjx2b2lkKGJvb2wpPiBtX3ZhbHVlRGlkQ2hhbmdlOwogICAgIENvdW50KiBt
X2NvdW50OwogfTsKIAordGVtcGxhdGU8Y2xhc3MgVD4KK2lubGluZSBSZWZDb3VudGVyOjpUb2tl
bjxUPjo6VG9rZW4oQ291bnQqIGNvdW50KQorICAgIDogbV9wdHIoY291bnQpCit7Cit9CisKK3Rl
bXBsYXRlPGNsYXNzIFQ+CitpbmxpbmUgUmVmQ291bnRlcjo6VG9rZW48VD46OlRva2VuKGNvbnN0
IFJlZkNvdW50ZXI6OlRva2VuPFQ+OjpUb2tlbjxUPiYgdG9rZW4pCisgICAgOiBtX3B0cih0b2tl
bi5tX3B0cikKK3sKK30KKwordGVtcGxhdGU8Y2xhc3MgVD4KK2lubGluZSBSZWZDb3VudGVyOjpU
b2tlbjxUPjo6VG9rZW4oUmVmQ291bnRlcjo6VG9rZW48VD46OlRva2VuPFQ+JiYgdG9rZW4pCisg
ICAgOiBtX3B0cih0b2tlbi5tX3B0cikKK3sKK30KKwordGVtcGxhdGU8Y2xhc3MgVD4KK2lubGlu
ZSBSZWZDb3VudGVyOjpUb2tlbjxUPiYgUmVmQ291bnRlcjo6VG9rZW48VD46Om9wZXJhdG9yPShz
dGQ6Om51bGxwdHJfdCkKK3sKKyAgICBtX3B0ciA9IG51bGxwdHI7CisgICAgcmV0dXJuICp0aGlz
OworfQorCit0ZW1wbGF0ZTxjbGFzcyBUPgoraW5saW5lIFJlZkNvdW50ZXI6OlRva2VuPFQ+JiBS
ZWZDb3VudGVyOjpUb2tlbjxUPjo6b3BlcmF0b3I9KGNvbnN0IFJlZkNvdW50ZXI6OlRva2VuPFQ+
JiBvKQoreworICAgIG1fcHRyID0gby5tX3B0cjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3Rl
bXBsYXRlPGNsYXNzIFQ+CitpbmxpbmUgUmVmQ291bnRlcjo6VG9rZW48VD4mIFJlZkNvdW50ZXI6
OlRva2VuPFQ+OjpvcGVyYXRvcj0oUmVmQ291bnRlcjo6VG9rZW48VD4mJiBvKQoreworICAgIG1f
cHRyID0gby5tX3B0cjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdU
RgogCiB1c2luZyBXVEY6OlJlZkNvdW50ZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzc0
OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwzNiBAQAorMjAxNC0xMi0xOCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIHN0cm9uZyB0eXBpbmcgdG8gUmVmQ291bnRlciBpbnRlcmZh
Y2UsIHJldHVybiB2YWx1ZSBhcyBhIGJvb2wuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk3NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgYWxsIHRva2VuIHZlbmRlZCBieSBhIFJlZkNv
dW50ZXIgaGF2ZSB0aGUgc2FtZSB0eXBlIOKAkyBSZWY8UmVmQ291bnRlcjo6Q291bnQ+LgorICAg
ICAgICBUaGlzIG1lYW5zIHRoZXJlIGlzIG5vIGNvbXBpbGUgdGltZSB0eXBlIGNoZWNraW5nIHRv
IHByZXZlbnQgbWlzdGFrZXMuIFVwZGF0ZSB0aGUgY291bnQoKQorICAgICAgICBtZXRob2QgdG8g
dG9rZW48PigpLCB0ZW1wbGF0ZWQgb24gdHlwZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSB0b2tlbiBi
ZWluZyByZXR1cm5lZC4KKyAgICAgICAgQ2FsbHMgdG8gdG9rZW48VD4oKSB3aWxsIHJldHVybiBh
IHJlc3VsdCBvZiB0eXBlIFJlZkNvdW50ZXI6OlRva2VuPFQ+LgorCisgICAgICAgIFRoZXJlIGFy
ZSBhIGZldyBwcm9ibGVtcyB3aXRoIHRoZSBmYWN0IHRoZSBjb3VudGVyIHdpbGwgcmV0dXJuIHlv
dSBhbiBleGFjdCBjb3VudCBvZiB0aGUKKyAgICAgICAgbnVtYmVyIG9mIG91dHN0YW5kaW5nIHRv
a2VuczoKKyAgICAgICAgICAtIEl0IGlzIGRlc2lyYWJsZSB0byBvbmx5IGZpcmUgdGhlIGNhbGxi
YWNrIG9uIHplcm8tZWRnZSBjaGFuZ2VzOyBpdCBpcyBtb3JlIGNvbnNpc3RlbnQKKyAgICAgICAg
ICAgIHRvIGRvIHNvIGlmIHRoZSB2YWx1ZSBpcyBvbmx5IHJlYWRhYmxlIGFzIGEgYm9vbGVhbi4K
KyAgICAgICAgICAtIEl0IGlzIGRlc2lyYWJsZSB0byBwcm92aWRlIHRoZSB2YWx1ZSBhcyBhbiBh
cmd1bWVudCB0byB0aGUgY2FsbGJhY2ssIGhvd2V2ZXIgdG8gbWFrZQorICAgICAgICAgICAgdGhp
cyB1c2VmdWwgZm9yIGludGVnZXIgdmFsdWVzIGl0IGlzIGFsc28gbmVjZXNzYXJ5IHRvIGluZGlj
YXRlIHRoZSBkaXJlY3Rpb24gb2YgY2hhbmdlCisgICAgICAgICAgICAoMC0+MSBpcyBvZnRlbiBp
bnRlcmVzdGluZyB3aGVyZSAyLT4xIGlzIG5vdCkuCisgICAgICAgICAgLSBUaGVyZSBpcyBhIG1p
c21hdGNoIGJldHdlZW4gdGhlIHByZWNpc2lvbiBvZiByZXR1cm5pbmcgYSBjb3VudCwgYW5kIHRo
ZSBpbmhlcmVudAorICAgICAgICAgICAgaW1wcmVjaXNpb24gb2YgYSB0b2tlbiBiYXNlZCBtZWNo
YW5pc20sIHdoZXJlIGl0IG1heSBiZSBkaWZmaWN1bHQgdG8gZ3VhcmFudGVlCisgICAgICAgICAg
ICBhYnNvbHV0ZWx5IG5vIHVubmVjZXNzYXJ5IHJlZmNvdW50IGNodXJuLCBhbmQgdGh1cyB1bmlu
dGVudGlvbmFsIGNvdW50ZXIgdmFsdWVzLgorCisgICAgICAgICogcGFnZS9QYWdlVGhyb3R0bGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fbWVkaWFBY3Rpdml0eUNvdW50ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6bV9wYWdlTG9hZEFjdGl2aXR5Q291bnRlcik6CisgICAgICAgICAgICAtIGxh
bWJkYXMgbm93IHBhc3NlZCB0aGUgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpQYWdlVGhyb3R0
bGVyOjptZWRpYUFjdGl2aXR5VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVRocm90dGxl
cjo6cGFnZUxvYWRBY3Rpdml0eVRva2VuKToKKyAgICAgICAgICAgIC0gY291bnQoKSAtPiB0b2tl
bjw+KCkuCisgICAgICAgICogcGFnZS9QYWdlVGhyb3R0bGVyLmg6CisgICAgICAgICAgICAtIHNw
ZWNpZnkgdHBva2VuIHR5cGUgZm9yIFBhZ2VBY3Rpdml0eUFzc2VydGlvblRva2VuLgorCiAyMDE0
LTEyLTE4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmUgYWx3YXlzVXNlQmFzZWxpbmVPZlByaW1hcnlGb250IHNldHRpbmcKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZVRocm90dGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlVGhyb3R0bGVyLmNwcAkocmV2aXNpb24gMTc3NDIyKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlVGhyb3R0bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTkgKzM0
LDE5IEBAIFBhZ2VUaHJvdHRsZXI6OlBhZ2VUaHJvdHRsZXIoUGFnZSYgcGFnZSkKICAgICA6IG1f
cGFnZShwYWdlKQogICAgICwgbV91c2VySW5wdXRIeXN0ZXJlc2lzKFt0aGlzXShIeXN0ZXJlc2lz
U3RhdGUgc3RhdGUpIHsgc2V0QWN0aXZpdHlGbGFnKFBhZ2VBY3Rpdml0eVN0YXRlOjpVc2VySW5w
dXRBY3Rpdml0eSwgc3RhdGUgPT0gSHlzdGVyZXNpc1N0YXRlOjpTdGFydGVkKTsgfSkKICAgICAs
IG1fYXVkaWJsZVBsdWdpbkh5c3RlcmVzaXMoW3RoaXNdKEh5c3RlcmVzaXNTdGF0ZSBzdGF0ZSkg
eyBzZXRBY3Rpdml0eUZsYWcoUGFnZUFjdGl2aXR5U3RhdGU6OkF1ZGlibGVQbHVnaW4sIHN0YXRl
ID09IEh5c3RlcmVzaXNTdGF0ZTo6U3RhcnRlZCk7IH0pCi0gICAgLCBtX21lZGlhQWN0aXZpdHlD
b3VudGVyKFt0aGlzXSgpIHsgc2V0QWN0aXZpdHlGbGFnKFBhZ2VBY3Rpdml0eVN0YXRlOjpNZWRp
YUFjdGl2aXR5LCBtX21lZGlhQWN0aXZpdHlDb3VudGVyLnZhbHVlKCkpOyB9KQotICAgICwgbV9w
YWdlTG9hZEFjdGl2aXR5Q291bnRlcihbdGhpc10oKSB7IHNldEFjdGl2aXR5RmxhZyhQYWdlQWN0
aXZpdHlTdGF0ZTo6UGFnZUxvYWRBY3Rpdml0eSwgbV9wYWdlTG9hZEFjdGl2aXR5Q291bnRlci52
YWx1ZSgpKTsgfSkKKyAgICAsIG1fbWVkaWFBY3Rpdml0eUNvdW50ZXIoW3RoaXNdKGJvb2wgdmFs
dWUpIHsgc2V0QWN0aXZpdHlGbGFnKFBhZ2VBY3Rpdml0eVN0YXRlOjpNZWRpYUFjdGl2aXR5LCB2
YWx1ZSk7IH0pCisgICAgLCBtX3BhZ2VMb2FkQWN0aXZpdHlDb3VudGVyKFt0aGlzXShib29sIHZh
bHVlKSB7IHNldEFjdGl2aXR5RmxhZyhQYWdlQWN0aXZpdHlTdGF0ZTo6UGFnZUxvYWRBY3Rpdml0
eSwgdmFsdWUpOyB9KQogewogfQogCiBQYWdlQWN0aXZpdHlBc3NlcnRpb25Ub2tlbiBQYWdlVGhy
b3R0bGVyOjptZWRpYUFjdGl2aXR5VG9rZW4oKQogewotICAgIHJldHVybiBtX21lZGlhQWN0aXZp
dHlDb3VudGVyLmNvdW50KCk7CisgICAgcmV0dXJuIG1fbWVkaWFBY3Rpdml0eUNvdW50ZXIudG9r
ZW48UGFnZUFjdGl2aXR5QXNzZXJ0aW9uVG9rZW5UeXBlPigpOwogfQogCiBQYWdlQWN0aXZpdHlB
c3NlcnRpb25Ub2tlbiBQYWdlVGhyb3R0bGVyOjpwYWdlTG9hZEFjdGl2aXR5VG9rZW4oKQogewot
ICAgIHJldHVybiBtX3BhZ2VMb2FkQWN0aXZpdHlDb3VudGVyLmNvdW50KCk7CisgICAgcmV0dXJu
IG1fcGFnZUxvYWRBY3Rpdml0eUNvdW50ZXIudG9rZW48UGFnZUFjdGl2aXR5QXNzZXJ0aW9uVG9r
ZW5UeXBlPigpOwogfQogCiB2b2lkIFBhZ2VUaHJvdHRsZXI6OnNldEFjdGl2aXR5RmxhZyhQYWdl
QWN0aXZpdHlTdGF0ZTo6RmxhZ3MgZmxhZywgYm9vbCB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZVRocm90dGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZVRocm90dGxlci5oCShyZXZpc2lvbiAxNzc0MjIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VUaHJvdHRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBhZ2U7CiAKLXR5cGVkZWYgUmVmUHRyPFJlZkNvdW50
ZXI6OkNvdW50PiBQYWdlQWN0aXZpdHlBc3NlcnRpb25Ub2tlbjsKK2VudW0gUGFnZUFjdGl2aXR5
QXNzZXJ0aW9uVG9rZW5UeXBlIHsgfTsKK3R5cGVkZWYgUmVmQ291bnRlcjo6VG9rZW48UGFnZUFj
dGl2aXR5QXNzZXJ0aW9uVG9rZW5UeXBlPiBQYWdlQWN0aXZpdHlBc3NlcnRpb25Ub2tlbjsKIAog
c3RydWN0IFBhZ2VBY3Rpdml0eVN0YXRlIHsKICAgICBlbnVtIHsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE3NzQ5OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDYyIEBACisyMDE0LTEyLTE4ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJh
Y2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3Ryb25nIHR5cGluZyB0byBSZWZDb3Vu
dGVyIGludGVyZmFjZSwgcmV0dXJuIHZhbHVlIGFzIGEgYm9vbC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTc3NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSBhbGwgdG9rZW4gdmVuZGVk
IGJ5IGEgUmVmQ291bnRlciBoYXZlIHRoZSBzYW1lIHR5cGUg4oCTIFJlZjxSZWZDb3VudGVyOjpD
b3VudD4uCisgICAgICAgIFRoaXMgbWVhbnMgdGhlcmUgaXMgbm8gY29tcGlsZSB0aW1lIHR5cGUg
Y2hlY2tpbmcgdG8gcHJldmVudCBtaXN0YWtlcy4gVXBkYXRlIHRoZSBjb3VudCgpCisgICAgICAg
IG1ldGhvZCB0byB0b2tlbjw+KCksIHRlbXBsYXRlZCBvbiB0eXBlIHVzZWQgdG8gaWRlbnRpZnkg
dGhlIHRva2VuIGJlaW5nIHJldHVybmVkLgorICAgICAgICBDYWxscyB0byB0b2tlbjxUPigpIHdp
bGwgcmV0dXJuIGEgcmVzdWx0IG9mIHR5cGUgUmVmQ291bnRlcjo6VG9rZW48VD4uCisKKyAgICAg
ICAgVGhlcmUgYXJlIGEgZmV3IHByb2JsZW1zIHdpdGggdGhlIGZhY3QgdGhlIGNvdW50ZXIgd2ls
bCByZXR1cm4geW91IGFuIGV4YWN0IGNvdW50IG9mIHRoZQorICAgICAgICBudW1iZXIgb2Ygb3V0
c3RhbmRpbmcgdG9rZW5zOgorICAgICAgICAgIC0gSXQgaXMgZGVzaXJhYmxlIHRvIG9ubHkgZmly
ZSB0aGUgY2FsbGJhY2sgb24gemVyby1lZGdlIGNoYW5nZXM7IGl0IGlzIG1vcmUgY29uc2lzdGVu
dAorICAgICAgICAgICAgdG8gZG8gc28gaWYgdGhlIHZhbHVlIGlzIG9ubHkgcmVhZGFibGUgYXMg
YSBib29sZWFuLgorICAgICAgICAgIC0gSXQgaXMgZGVzaXJhYmxlIHRvIHByb3ZpZGUgdGhlIHZh
bHVlIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFjaywgaG93ZXZlciB0byBtYWtlCisgICAg
ICAgICAgICB0aGlzIHVzZWZ1bCBmb3IgaW50ZWdlciB2YWx1ZXMgaXQgaXMgYWxzbyBuZWNlc3Nh
cnkgdG8gaW5kaWNhdGUgdGhlIGRpcmVjdGlvbiBvZiBjaGFuZ2UKKyAgICAgICAgICAgICgwLT4x
IGlzIG9mdGVuIGludGVyZXN0aW5nIHdoZXJlIDItPjEgaXMgbm90KS4KKyAgICAgICAgICAtIFRo
ZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgcHJlY2lzaW9uIG9mIHJldHVybmluZyBhIGNv
dW50LCBhbmQgdGhlIGluaGVyZW50CisgICAgICAgICAgICBpbXByZWNpc2lvbiBvZiBhIHRva2Vu
IGJhc2VkIG1lY2hhbmlzbSwgd2hlcmUgaXQgbWF5IGJlIGRpZmZpY3VsdCB0byBndWFyYW50ZWUK
KyAgICAgICAgICAgIGFic29sdXRlbHkgbm8gdW5uZWNlc3NhcnkgcmVmY291bnQgY2h1cm4sIGFu
ZCB0aHVzIHVuaW50ZW50aW9uYWwgY291bnRlciB2YWx1ZXMuCisKKyAgICAgICAgUmVtb3ZlZCBQ
bHVnaW5Qcm9jZXNzTWFuYWdlcjo6bV9wcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkLiBOb3cgdGhl
IGNhbGxiYWNrIG9ubHkgZmlyZXMgb24KKyAgICAgICAgemVyby1lZGdlIHRyYW5zaXRpb25zIHdl
IG5vIGxvbmdlciBuZWVkIHRoaXMgdG8gZmlsdGVyIGNoYW5nZXMuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlBsdWdpblByb2Nlc3NNYW5hZ2VyOjpQbHVnaW5Qcm9jZXNzTWFuYWdlcik6CisgICAgICAgICAg
ICAtIHVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlIC0+IHVwZGF0ZVByb2Nlc3NTdXBwcmVz
c2lvbkRpc2FibGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NN
YW5hZ2VyLmg6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3NNYW5hZ2VyOjpwcm9jZXNz
U3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlBsdWdpblByb2Nlc3NNYW5hZ2VyOjpwcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2Vu
KToKKyAgICAgICAgICAgIC0gcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnQg
LT4gcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbi4KKyAgICAgICAgKFdlYktpdDo6UGx1
Z2luUHJvY2Vzc01hbmFnZXI6OnByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6cHJvY2Vzc1N1cHByZXNzaW9u
RGlzYWJsZWQpOgorICAgICAgICAgICAgLSBwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkIC0+IHBy
b2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblByb2Nlc3NQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3NQcm94
eTo6ZGlkRmluaXNoTGF1bmNoaW5nKToKKyAgICAgICAgICAgIC0gcHJvY2Vzc1N1cHByZXNzaW9u
RW5hYmxlZCAtPiBwcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvUGx1Z2lucy9tYWMvUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW06CisgICAgICAgIChXZWJL
aXQ6OlBsdWdpblByb2Nlc3NNYW5hZ2VyOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBsdWdpblByb2Nlc3NNYW5hZ2VyOjp1cGRhdGVQ
cm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZCk6CisgICAgICAgICAgICAtIHVwZGF0ZVByb2Nlc3NT
dXBwcmVzc2lvblN0YXRlIC0+IHVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkCisgICAg
ICAgICogVUlQcm9jZXNzL1Byb2Nlc3NUaHJvdHRsZXIuaDoKKyAgICAgICAgICAgIC0gYWRkZWQg
VXNlck9ic2VydmFibGVQYWdlVG9rZW4sIFByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4g
dHlwZXMuCisgICAgICAgICogVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDb250ZXh0OjpXZWJDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6bV9wcm9jZXNz
U3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyKToKKyAgICAgICAgICAgIC0gbGFtYmRh
IG5vdyBoYXMgYm9vbCBhcmd1bWVudC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViQ29udGV4dC5o
OgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0Ojp1c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHQ6OnByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVk
Rm9yUGFnZUNvdW50KToKKyAgICAgICAgICAgIC0gY291bnQoKSAtPiB0b2tlbjw+KCksIGNoYW5n
ZWQgcmV0dXJuIHR5cGUuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAg
ICAgICAgICAgLSBjaGFuZ2VkIHR5cGVzIG9mIHRva2VuIG1lbWJlcnMuCisgICAgICAgICogVUlQ
cm9jZXNzL21hYy9XZWJDb250ZXh0TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0
Ojp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSk6CisgICAgICAgICAgICByZW5hbWVkIG1f
cGx1Z2luUHJvY2Vzc01hbmFnZXJQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZENvdW50IC0+IG1f
cGx1Z2luUHJvY2Vzc01hbmFnZXJQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuLgorCiAy
MDE0LTEyLTE4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgYWx3YXlzVXNlQmFzZWxpbmVPZlByaW1hcnlGb250IHNldHRpbmcKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Qcm9jZXNzVGhyb3R0bGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Byb2Nlc3NUaHJvdHRsZXIuaAkocmV2aXNpb24gMTc3NDIy
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Byb2Nlc3NUaHJvdHRsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDE3IEBACiAKICNpbmNsdWRlICJQcm9jZXNzQXNzZXJ0aW9u
LmgiCiAKKyNpbmNsdWRlIDxXVEYvUmVmQ291bnRlci5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAgICAg
CitlbnVtIFVzZXJPYnNlcnZhYmxlUGFnZVRva2VuVHlwZSB7IH07Cit0eXBlZGVmIFJlZkNvdW50
ZXI6OlRva2VuPFVzZXJPYnNlcnZhYmxlUGFnZVRva2VuVHlwZT4gVXNlck9ic2VydmFibGVQYWdl
VG9rZW47CitlbnVtIFByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW5UeXBlIHsgfTsKK3R5
cGVkZWYgUmVmQ291bnRlcjo6VG9rZW48UHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlblR5
cGU+IFByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW47CisKIGNsYXNzIFdlYlByb2Nlc3NQ
cm94eTsKICAgICAKIGNsYXNzIFByb2Nlc3NUaHJvdHRsZXIgewpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkocmV2aXNpb24gMTc3NDIyKQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsOCAr
MTk0LDggQEAgV2ViQ29udGV4dDo6V2ViQ29udGV4dChXZWJDb250ZXh0Q29uZmlndQogICAgICwg
bV9pZ25vcmVUTFNFcnJvcnModHJ1ZSkKICNlbmRpZgogICAgICwgbV9tZW1vcnlDYWNoZURpc2Fi
bGVkKGZhbHNlKQotICAgICwgbV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyKFt0aGlzXSgpIHsg
dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsgfSkKLSAgICAsIG1fcHJvY2Vzc1N1cHBy
ZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlcihbdGhpc10oKSB7IHVwZGF0ZVByb2Nlc3NTdXBw
cmVzc2lvblN0YXRlKCk7IH0pCisgICAgLCBtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIoW3Ro
aXNdKGJvb2wpIHsgdXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsgfSkKKyAgICAsIG1f
cHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlcihbdGhpc10oYm9vbCkgeyB1
cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpOyB9KQogewogICAgIHBsYXRmb3JtSW5pdGlh
bGl6ZSgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgJKHJldmlz
aW9uIDE3NzQyMikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJQbHVnSW5BdXRvU3RhcnRQ
cm92aWRlci5oIgogI2luY2x1ZGUgIlBsdWdpbkluZm9TdG9yZS5oIgogI2luY2x1ZGUgIlByb2Nl
c3NNb2RlbC5oIgorI2luY2x1ZGUgIlByb2Nlc3NUaHJvdHRsZXIuaCIKICNpbmNsdWRlICJTdGF0
aXN0aWNzUmVxdWVzdC5oIgogI2luY2x1ZGUgIlN0b3JhZ2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAi
VmlzaXRlZExpbmtQcm92aWRlci5oIgpAQCAtMzU0LDE0ICszNTUsMTQgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBzZXRNZW1vcnlDYWNoZURpc2FibGVkKGJvb2wpOwogCi0gICAgUGFzc1JlZlB0cjxS
ZWZDb3VudGVyOjpDb3VudD4gdXNlck9ic2VydmFibGVQYWdlQ291bnQoKQorICAgIFVzZXJPYnNl
cnZhYmxlUGFnZVRva2VuIHVzZXJPYnNlcnZhYmxlUGFnZUNvdW50KCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX3VzZXJPYnNlcnZhYmxlUGFnZUNvdW50ZXIuY291bnQoKTsKKyAgICAgICAgcmV0
dXJuIG1fdXNlck9ic2VydmFibGVQYWdlQ291bnRlci50b2tlbjxVc2VyT2JzZXJ2YWJsZVBhZ2VU
b2tlblR5cGU+KCk7CiAgICAgfQogCi0gICAgUGFzc1JlZlB0cjxSZWZDb3VudGVyOjpDb3VudD4g
cHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnQoKQorICAgIFByb2Nlc3NTdXBw
cmVzc2lvbkRpc2FibGVkVG9rZW4gcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291
bnQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRG
b3JQYWdlQ291bnRlci5jb3VudCgpOworICAgICAgICByZXR1cm4gbV9wcm9jZXNzU3VwcHJlc3Np
b25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnRva2VuPFByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVk
VG9rZW5UeXBlPigpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTU3Myw3ICs1NzQsNyBAQCBwcml2
YXRlOgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rp
b25hcnk+IG1fYnVuZGxlUGFyYW1ldGVyczsKLSAgICBSZWZQdHI8UmVmQ291bnRlcjo6Q291bnQ+
IG1fcGx1Z2luUHJvY2Vzc01hbmFnZXJQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZENvdW50Owor
ICAgIFByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4gbV9wbHVnaW5Qcm9jZXNzTWFuYWdl
clByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW47CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDE3NzQyMikKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIk5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0
TWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiUGFnZUxvYWRTdGF0ZS5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJQcm9jZXNzVGhyb3R0bGVyLmgi
CiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1h
cC5oIgogI2luY2x1ZGUgIlVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlclByb3h5Lmgi
CkBAIC0xNTgyLDggKzE1ODMsOCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+IG1fdGVtcG9yYXJ5UERGRmlsZXM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlJ1
bkxvb3BPYnNlcnZlcj4gbV92aWV3U3RhdGVDaGFuZ2VEaXNwYXRjaGVyOwogI2VuZGlmCi0gICAg
UmVmUHRyPFJlZkNvdW50ZXI6OkNvdW50PiBtX3BhZ2VJc1VzZXJPYnNlcnZhYmxlQ291bnQ7Ci0g
ICAgUmVmUHRyPFJlZkNvdW50ZXI6OkNvdW50PiBtX3ByZXZlbnRQcm9jZXNzU3VwcHJlc3Npb25D
b3VudDsKKyAgICBVc2VyT2JzZXJ2YWJsZVBhZ2VUb2tlbiBtX3BhZ2VJc1VzZXJPYnNlcnZhYmxl
Q291bnQ7CisgICAgUHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbiBtX3ByZXZlbnRQcm9j
ZXNzU3VwcHJlc3Npb25Db3VudDsKICAgICAgICAgCiAgICAgV2ViQ29yZTo6U2Nyb2xsUGlubmlu
Z0JlaGF2aW9yIG1fc2Nyb2xsUGlubmluZ0JlaGF2aW9yOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIu
Y3BwCShyZXZpc2lvbiAxNzc0MjIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcg
QEAgUGx1Z2luUHJvY2Vzc01hbmFnZXImIFBsdWdpblByb2Nlc3NNYW5hZwogCiBQbHVnaW5Qcm9j
ZXNzTWFuYWdlcjo6UGx1Z2luUHJvY2Vzc01hbmFnZXIoKQogI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIDogbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyKFt0aGlzXSgp
IHsgdXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsgfSkKKyAgICA6IG1fcHJvY2Vzc1N1
cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlcihbdGhpc10oYm9vbCB2YWx1ZSkgeyB1cGRh
dGVQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZCh2YWx1ZSk7IH0pCiAjZW5kaWYKIHsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
UHJvY2Vzc01hbmFnZXIuaAkocmV2aXNpb24gMTc3NDIyKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIlBsdWdpbk1vZHVsZUluZm8uaCIKICNpbmNsdWRlICJQ
bHVnaW5Qcm9jZXNzLmgiCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc0F0dHJpYnV0ZXMuaCIKKyNp
bmNsdWRlICJQcm9jZXNzVGhyb3R0bGVyLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5TWVz
c2FnZXMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CkBAIC02NSw5ICs2Niw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyU2l0ZURhdGEoY29u
c3QgUGx1Z2luTW9kdWxlSW5mbyYsIFdlYlBsdWdpblNpdGVEYXRhTWFuYWdlciosIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBzaXRlcywgdWludDY0X3QgZmxhZ3MsIHVpbnQ2NF90IG1heEFnZUluU2Vj
b25kcywgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBp
bmxpbmUgUGFzc1JlZlB0cjxSZWZDb3VudGVyOjpDb3VudD4gcHJvY2Vzc1N1cHByZXNzaW9uRGlz
YWJsZWRGb3JQYWdlQ291bnQoKTsKLSAgICBpbmxpbmUgYm9vbCBwcm9jZXNzU3VwcHJlc3Npb25F
bmFibGVkKCkgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgp
OworICAgIGlubGluZSBQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuIHByb2Nlc3NTdXBw
cmVzc2lvbkRpc2FibGVkVG9rZW4oKTsKKyAgICBpbmxpbmUgYm9vbCBwcm9jZXNzU3VwcHJlc3Np
b25EaXNhYmxlZCgpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uRGlz
YWJsZWQoYm9vbCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTgyLDE5ICs4MywxOCBAQCBwcml2
YXRlOgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmVmQ291bnRlciBtX3Byb2Nlc3NTdXBw
cmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXI7Ci0gICAgYm9vbCBtX3Byb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQgeyB0cnVlIH07CiAjZW5kaWYKIH07CiAKICNpZiBQTEFURk9STShDT0NPQSkK
LWlubGluZSBQYXNzUmVmUHRyPFJlZkNvdW50ZXI6OkNvdW50PiBQbHVnaW5Qcm9jZXNzTWFuYWdl
cjo6cHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnQoKQoraW5saW5lIFByb2Nl
c3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4gUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnByb2Nlc3NT
dXBwcmVzc2lvbkRpc2FibGVkVG9rZW4oKQogewotICAgIHJldHVybiBtX3Byb2Nlc3NTdXBwcmVz
c2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIuY291bnQoKTsKKyAgICByZXR1cm4gbV9wcm9jZXNz
U3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnRva2VuPFByb2Nlc3NTdXBwcmVzc2lv
bkRpc2FibGVkVG9rZW5UeXBlPigpOwogfQogCi1pbmxpbmUgYm9vbCBQbHVnaW5Qcm9jZXNzTWFu
YWdlcjo6cHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpIGNvbnN0CitpbmxpbmUgYm9vbCBQbHVn
aW5Qcm9jZXNzTWFuYWdlcjo6cHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWQoKSBjb25zdAogewot
ICAgIHJldHVybiBtX3Byb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQ7CisgICAgcmV0dXJuIG1fcHJv
Y2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpOwogfQogI2VuZGlm
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQ
cm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMTc3NDIyKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hM
YXVuY2gKICAgICBtX251bVBlbmRpbmdDb25uZWN0aW9uUmVxdWVzdHMgPSAwOwogCiAjaWYgUExB
VEZPUk0oQ09DT0EpCi0gICAgaWYgKFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaGFyZWQoKS5wcm9j
ZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCisgICAgaWYgKCFQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6
c2hhcmVkKCkucHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWQoKSkKICAgICAgICAgc2V0UHJvY2Vz
c1N1cHByZXNzaW9uRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL21hYy9QbHVnaW5Qcm9j
ZXNzTWFuYWdlck1hYy5tbQkocmV2aXNpb24gMTc3NDIyKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BsdWdpbnMvbWFjL1BsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiwxNSArMzIsMTIgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZvaWQgUGx1
Z2luUHJvY2Vzc01hbmFnZXI6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkKK3ZvaWQg
UGx1Z2luUHJvY2Vzc01hbmFnZXI6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkKGJv
b2wgZGlzYWJsZWQpCiB7Ci0gICAgYm9vbCBwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkID0gIW1f
cHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpOwotICAgIGlm
IChtX3Byb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQgPT0gcHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxl
ZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fcHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxl
ZCA9IHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQ7CisgICAgYm9vbCBlbmFibGVkID0gIWRpc2Fi
bGVkOworCiAgICAgZm9yIChhdXRvJiBwbHVnaW5Qcm9jZXNzIDogbV9wbHVnaW5Qcm9jZXNzZXMp
Ci0gICAgICAgIHBsdWdpblByb2Nlc3MtPnNldFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQocHJv
Y2Vzc1N1cHByZXNzaW9uRW5hYmxlZCk7CisgICAgICAgIHBsdWdpblByb2Nlc3MtPnNldFByb2Nl
c3NTdXBwcmVzc2lvbkVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1hYy5t
bQkocmV2aXNpb24gMTc3NDIyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJD
b250ZXh0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsOSArMTEyLDkgQEAgdm9pZCBXZWJD
b250ZXh0Ojp1cGRhdGVQcm9jZXNzU3VwcHJlc3NpbwogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNv
dW50ZXIudmFsdWUoKSkKLSAgICAgICAgbV9wbHVnaW5Qcm9jZXNzTWFuYWdlclByb2Nlc3NTdXBw
cmVzc2lvbkRpc2FibGVkQ291bnQgPSBudWxscHRyOwotICAgIGVsc2UgaWYgKCFtX3BsdWdpblBy
b2Nlc3NNYW5hZ2VyUHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRDb3VudCkKLSAgICAgICAgbV9w
bHVnaW5Qcm9jZXNzTWFuYWdlclByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkQ291bnQgPSBQbHVn
aW5Qcm9jZXNzTWFuYWdlcjo6c2hhcmVkKCkucHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQ
YWdlQ291bnQoKTsKKyAgICAgICAgbV9wbHVnaW5Qcm9jZXNzTWFuYWdlclByb2Nlc3NTdXBwcmVz
c2lvbkRpc2FibGVkVG9rZW4gPSBudWxscHRyOworICAgIGVsc2UgaWYgKCFtX3BsdWdpblByb2Nl
c3NNYW5hZ2VyUHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbikKKyAgICAgICAgbV9wbHVn
aW5Qcm9jZXNzTWFuYWdlclByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4gPSBQbHVnaW5Q
cm9jZXNzTWFuYWdlcjo6c2hhcmVkKCkucHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbigp
OwogI2VuZGlmCiB9CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NzQ5OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE0LTEyLTE4ICBHYXZpbiBCYXJyYWNsb3VnaCAg
PGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3Ryb25nIHR5cGluZyB0byBS
ZWZDb3VudGVyIGludGVyZmFjZSwgcmV0dXJuIHZhbHVlIGFzIGEgYm9vbC4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTc3NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEN1cnJlbnRseSBhbGwgdG9rZW4g
dmVuZGVkIGJ5IGEgUmVmQ291bnRlciBoYXZlIHRoZSBzYW1lIHR5cGUg4oCTIFJlZjxSZWZDb3Vu
dGVyOjpDb3VudD4uCisgICAgICAgIFRoaXMgbWVhbnMgdGhlcmUgaXMgbm8gY29tcGlsZSB0aW1l
IHR5cGUgY2hlY2tpbmcgdG8gcHJldmVudCBtaXN0YWtlcy4gVXBkYXRlIHRoZSBjb3VudCgpCisg
ICAgICAgIG1ldGhvZCB0byB0b2tlbjw+KCksIHRlbXBsYXRlZCBvbiB0eXBlIHVzZWQgdG8gaWRl
bnRpZnkgdGhlIHRva2VuIGJlaW5nIHJldHVybmVkLgorICAgICAgICBDYWxscyB0byB0b2tlbjxU
PigpIHdpbGwgcmV0dXJuIGEgcmVzdWx0IG9mIHR5cGUgUmVmQ291bnRlcjo6VG9rZW48VD4uCisK
KyAgICAgICAgVGhlcmUgYXJlIGEgZmV3IHByb2JsZW1zIHdpdGggdGhlIGZhY3QgdGhlIGNvdW50
ZXIgd2lsbCByZXR1cm4geW91IGFuIGV4YWN0IGNvdW50IG9mIHRoZQorICAgICAgICBudW1iZXIg
b2Ygb3V0c3RhbmRpbmcgdG9rZW5zOgorICAgICAgICAgIC0gSXQgaXMgZGVzaXJhYmxlIHRvIG9u
bHkgZmlyZSB0aGUgY2FsbGJhY2sgb24gemVyby1lZGdlIGNoYW5nZXM7IGl0IGlzIG1vcmUgY29u
c2lzdGVudAorICAgICAgICAgICAgdG8gZG8gc28gaWYgdGhlIHZhbHVlIGlzIG9ubHkgcmVhZGFi
bGUgYXMgYSBib29sZWFuLgorICAgICAgICAgIC0gSXQgaXMgZGVzaXJhYmxlIHRvIHByb3ZpZGUg
dGhlIHZhbHVlIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFjaywgaG93ZXZlciB0byBtYWtl
CisgICAgICAgICAgICB0aGlzIHVzZWZ1bCBmb3IgaW50ZWdlciB2YWx1ZXMgaXQgaXMgYWxzbyBu
ZWNlc3NhcnkgdG8gaW5kaWNhdGUgdGhlIGRpcmVjdGlvbiBvZiBjaGFuZ2UKKyAgICAgICAgICAg
ICgwLT4xIGlzIG9mdGVuIGludGVyZXN0aW5nIHdoZXJlIDItPjEgaXMgbm90KS4KKyAgICAgICAg
ICAtIFRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgcHJlY2lzaW9uIG9mIHJldHVybmlu
ZyBhIGNvdW50LCBhbmQgdGhlIGluaGVyZW50CisgICAgICAgICAgICBpbXByZWNpc2lvbiBvZiBh
IHRva2VuIGJhc2VkIG1lY2hhbmlzbSwgd2hlcmUgaXQgbWF5IGJlIGRpZmZpY3VsdCB0byBndWFy
YW50ZWUKKyAgICAgICAgICAgIGFic29sdXRlbHkgbm8gdW5uZWNlc3NhcnkgcmVmY291bnQgY2h1
cm4sIGFuZCB0aHVzIHVuaW50ZW50aW9uYWwgY291bnRlciB2YWx1ZXMuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9SZWZDb3VudGVyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1QpOgorICAgICAgICAgICAgLSB1cGRhdGUgQVBJIHRlc3QuCisKIDIwMTQtMTIt
MTggIEFkcmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBJbXBsZW1lbnQgd2Via2l0X3dlYl92aWV3X2lzX3BsYXlpbmdfYXVkaW8oKQpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUmVmQ291bnRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUmVmQ291bnRlci5jcHAJKHJldmlz
aW9uIDE3NzQyMikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JlZkNvdW50ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyArMzQsMTYgQEAgbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkgewogc3RhdGljIGNvbnN0IGludCBDYWxsYmFja0V4cGVjdGVkID0gMHhDMEZGRUU7CiBz
dGF0aWMgY29uc3QgaW50IENhbGxiYWNrTm90RXhwZWN0ZWQgPSAweERFQ0FGOwogCitlbnVtIENv
dW50ZXJUeXBlIHsgfTsKK3R5cGVkZWYgUmVmQ291bnRlcjo6VG9rZW48Q291bnRlclR5cGU+IFRv
a2VuVHlwZTsKKwogVEVTVChXVEYsIFJlZkNvdW50ZXIpCiB7CiAgICAgLy8gUmVmQ291bnRlciBB
UEkgaXMgcHJldHR5IHNpbXBsZSwgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIDQgbWV0aG9kcyB0
byB0ZXN0OgogICAgIC8vCiAgICAgLy8gMSkgUmVmQ291bnRlcihzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4pOwogICAgIC8vIDIpIH5SZWZDb3VudGVyKCk7Ci0gICAgLy8gMykgUmVmPENvdW50PiBjb3Vu
dCgpIGNvbnN0OworICAgIC8vIDMpIFJlZjxDb3VudD4gdG9rZW4oKSBjb25zdDsKICAgICAvLyA0
KSB1bnNpZ25lZCB2YWx1ZSgpIGNvbnN0OwogICAgIC8vCiAgICAgLy8gV2UnbGwgdGVzdDoKQEAg
LTcwLDkwICs3Myw4NCBAQCBURVNUKFdURiwgUmVmQ291bnRlcikKIAogICAgIC8vIFRoZXNlIHZh
bHVlcyB3aWxsIG91dGxpdmUgdGhlIGZvbGxvd2luZyBibG9jay4KICAgICBpbnQgY2FsbGJhY2tW
YWx1ZSA9IENhbGxiYWNrTm90RXhwZWN0ZWQ7Ci0gICAgUmVmUHRyPFJlZkNvdW50ZXI6OkNvdW50
PiBpbmNUbzFBZ2FpbjsKKyAgICBUb2tlblR5cGUgaW5jVG8xQWdhaW47CiAKICAgICB7CiAgICAg
ICAgIC8vIFRlc3RpbmcgKDFhKSAtIENvbnN0cnVjdGlvbiB3aXRoIGEgY2FsbGJhY2suCiAgICAg
ICAgIFJlZkNvdW50ZXIqIGNvdW50ZXJQdHIgPSBudWxscHRyOwotICAgICAgICBSZWZDb3VudGVy
IGNvdW50ZXIoWyZdKCkgeworICAgICAgICBSZWZDb3VudGVyIGNvdW50ZXIoWyZdKGJvb2wgdmFs
dWUpIHsKICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBh
dCB0aGUgZXhwZWN0ZWQgdGltZXMsIGFuZCB0aGUgY29ycmVjdCBudW1iZXIgb2YgdGltZXMuCiAg
ICAgICAgICAgICBFWFBFQ1RfRVEoY2FsbGJhY2tWYWx1ZSwgQ2FsbGJhY2tFeHBlY3RlZCk7Cisg
ICAgICAgICAgICAvLyBWYWx1ZSBwcm92aWRlZCBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIGNvdW50
ZXIgdmFsdWUuCisgICAgICAgICAgICBFWFBFQ1RfRVEodmFsdWUsIGNvdW50ZXJQdHItPnZhbHVl
KCkpOwogICAgICAgICAgICAgLy8gcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgY291bnRlciBpbiB0
aGUgY2FsbGJhY2suCi0gICAgICAgICAgICBjYWxsYmFja1ZhbHVlID0gY291bnRlclB0ci0+dmFs
dWUoKTsKKyAgICAgICAgICAgIGNhbGxiYWNrVmFsdWUgPSB2YWx1ZTsKICAgICAgICAgfSk7CiAg
ICAgICAgIGNvdW50ZXJQdHIgPSAmY291bnRlcjsKICAgICAgICAgLy8gVGVzdGluZyAoNGEpIC0g
YWZ0ZXIgY29uc3RydWN0aW9uIHZhbHVlKCkgaXMgMC4KLSAgICAgICAgRVhQRUNUX0VRKDAsIHN0
YXRpY19jYXN0PGludD4oY291bnRlci52YWx1ZSgpKSk7CisgICAgICAgIEVYUEVDVF9FUShmYWxz
ZSwgc3RhdGljX2Nhc3Q8aW50Pihjb3VudGVyLnZhbHVlKCkpKTsKIAogICAgICAgICAvLyBUZXN0
aW5nICgzYSkgLSByZWYgd2l0aCBjYWxsYmFjayBmcm9tIDAgLT4gMS4KICAgICAgICAgY2FsbGJh
Y2tWYWx1ZSA9IENhbGxiYWNrRXhwZWN0ZWQ7Ci0gICAgICAgIFJlZlB0cjxSZWZDb3VudGVyOjpD
b3VudD4gaW5jVG8xKGNvdW50ZXIuY291bnQoKSk7CisgICAgICAgIFRva2VuVHlwZSBpbmNUbzEo
Y291bnRlci50b2tlbjxDb3VudGVyVHlwZT4oKSk7CiAgICAgICAgIC8vIFRlc3RpbmcgKDRiKSAm
ICg0YykgLSB2YWx1ZXMgd2l0aGluICYgYWZ0ZXIgY2FsbGJhY2suCi0gICAgICAgIEVYUEVDVF9F
USgxLCBjYWxsYmFja1ZhbHVlKTsKLSAgICAgICAgRVhQRUNUX0VRKDEsIHN0YXRpY19jYXN0PGlu
dD4oY291bnRlci52YWx1ZSgpKSk7CisgICAgICAgIEVYUEVDVF9FUSh0cnVlLCBjYWxsYmFja1Zh
bHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKHRydWUsIHN0YXRpY19jYXN0PGludD4oY291bnRlci52
YWx1ZSgpKSk7CiAKICAgICAgICAgLy8gVGVzdGluZyAoM2IpIC0gcmVmIHdpdGggY2FsbGJhY2sg
ZnJvbSAxIC0+IDIuCi0gICAgICAgIGNhbGxiYWNrVmFsdWUgPSBDYWxsYmFja0V4cGVjdGVkOwot
ICAgICAgICBSZWZQdHI8UmVmQ291bnRlcjo6Q291bnQ+IGluY1RvMihpbmNUbzEpOworICAgICAg
ICBUb2tlblR5cGUgaW5jVG8yKGluY1RvMSk7CiAgICAgICAgIC8vIFRlc3RpbmcgKDRiKSAmICg0
YykgLSB2YWx1ZXMgd2l0aGluICYgYWZ0ZXIgY2FsbGJhY2suCi0gICAgICAgIEVYUEVDVF9FUSgy
LCBjYWxsYmFja1ZhbHVlKTsKLSAgICAgICAgRVhQRUNUX0VRKDIsIHN0YXRpY19jYXN0PGludD4o
Y291bnRlci52YWx1ZSgpKSk7CisgICAgICAgIEVYUEVDVF9FUSh0cnVlLCBzdGF0aWNfY2FzdDxp
bnQ+KGNvdW50ZXIudmFsdWUoKSkpOwogCiAgICAgICAgIC8vIFRlc3RpbmcgKDNjKSAtIGRlcmVm
IHdpdGggY2FsbGJhY2sgZnJvbSA+MSAtPiAxLgotICAgICAgICBjYWxsYmFja1ZhbHVlID0gQ2Fs
bGJhY2tFeHBlY3RlZDsKLSAgICAgICAgaW5jVG8xLmNsZWFyKCk7CisgICAgICAgIGluY1RvMSA9
IG51bGxwdHI7CiAgICAgICAgIC8vIFRlc3RpbmcgKDRiKSAmICg0YykgLSB2YWx1ZXMgd2l0aGlu
ICYgYWZ0ZXIgY2FsbGJhY2suCi0gICAgICAgIEVYUEVDVF9FUSgxLCBjYWxsYmFja1ZhbHVlKTsK
LSAgICAgICAgRVhQRUNUX0VRKDEsIHN0YXRpY19jYXN0PGludD4oY291bnRlci52YWx1ZSgpKSk7
CisgICAgICAgIEVYUEVDVF9FUSh0cnVlLCBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50ZXIudmFsdWUo
KSkpOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIFRlc3RpbmcgKDNqKSAtIHJlZiB1c2lu
ZyBhIFJlZiByYXRoZXIgdGhhbiBhIFJlZlB0ci4KLSAgICAgICAgICAgIGNhbGxiYWNrVmFsdWUg
PSBDYWxsYmFja0V4cGVjdGVkOwotICAgICAgICAgICAgUmVmPFJlZkNvdW50ZXI6OkNvdW50PiBp
bmNUbzJBZ2Fpbihjb3VudGVyLmNvdW50KCkpOworICAgICAgICAgICAgVG9rZW5UeXBlIGluY1Rv
MkFnYWluKGNvdW50ZXIudG9rZW48Q291bnRlclR5cGU+KCkpOwogICAgICAgICAgICAgLy8gVGVz
dGluZyAoNGIpICYgKDRjKSAtIHZhbHVlcyB3aXRoaW4gJiBhZnRlciBjYWxsYmFjay4KLSAgICAg
ICAgICAgIEVYUEVDVF9FUSgyLCBjYWxsYmFja1ZhbHVlKTsKLSAgICAgICAgICAgIEVYUEVDVF9F
USgyLCBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50ZXIudmFsdWUoKSkpOworICAgICAgICAgICAgRVhQ
RUNUX0VRKHRydWUsIHN0YXRpY19jYXN0PGludD4oY291bnRlci52YWx1ZSgpKSk7CiAgICAgICAg
ICAgICAvLyBUZXN0aW5nICgzaykgLSBkZXJlZiB1c2luZyBhIFJlZiByYXRoZXIgdGhhbiBhIFJl
ZlB0ci4KLSAgICAgICAgICAgIGNhbGxiYWNrVmFsdWUgPSBDYWxsYmFja0V4cGVjdGVkOwogICAg
ICAgICB9Ci0gICAgICAgIEVYUEVDVF9FUSgxLCBjYWxsYmFja1ZhbHVlKTsKLSAgICAgICAgRVhQ
RUNUX0VRKDEsIHN0YXRpY19jYXN0PGludD4oY291bnRlci52YWx1ZSgpKSk7CisgICAgICAgIEVY
UEVDVF9FUSh0cnVlLCBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50ZXIudmFsdWUoKSkpOwogICAgICAg
ICAvLyBUZXN0aW5nICg0YikgJiAoNGMpIC0gdmFsdWVzIHdpdGhpbiAmIGFmdGVyIGNhbGxiYWNr
LgogCiAgICAgICAgIC8vIFRlc3RpbmcgKDNkKSAtIGRlcmVmIHdpdGggY2FsbGJhY2sgZnJvbSAx
IC0+IDAuCiAgICAgICAgIGNhbGxiYWNrVmFsdWUgPSBDYWxsYmFja0V4cGVjdGVkOwotICAgICAg
ICBpbmNUbzIuY2xlYXIoKTsKKyAgICAgICAgaW5jVG8yID0gbnVsbHB0cjsKICAgICAgICAgLy8g
VGVzdGluZyAoNGIpICYgKDRjKSAtIHZhbHVlcyB3aXRoaW4gJiBhZnRlciBjYWxsYmFjay4KLSAg
ICAgICAgRVhQRUNUX0VRKDAsIGNhbGxiYWNrVmFsdWUpOwotICAgICAgICBFWFBFQ1RfRVEoMCwg
c3RhdGljX2Nhc3Q8aW50Pihjb3VudGVyLnZhbHVlKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKGZh
bHNlLCBjYWxsYmFja1ZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKGZhbHNlLCBzdGF0aWNfY2Fz
dDxpbnQ+KGNvdW50ZXIudmFsdWUoKSkpOwogCiAgICAgICAgIC8vIFRlc3RpbmcgKDJhKSAtIERl
c3RydWN0aW9uIHdoZXJlIHRoZSBSZWZDb3VudGVyOjpDb3VudCBoYXMgYSBub24temVybyByZWZl
cmVuY2UgY291bnQuCiAgICAgICAgIGNhbGxiYWNrVmFsdWUgPSBDYWxsYmFja0V4cGVjdGVkOwot
ICAgICAgICBpbmNUbzFBZ2FpbiA9IGNvdW50ZXIuY291bnQoKTsKLSAgICAgICAgRVhQRUNUX0VR
KDEsIGNhbGxiYWNrVmFsdWUpOwotICAgICAgICBFWFBFQ1RfRVEoMSwgc3RhdGljX2Nhc3Q8aW50
Pihjb3VudGVyLnZhbHVlKCkpKTsKKyAgICAgICAgaW5jVG8xQWdhaW4gPSBjb3VudGVyLnRva2Vu
PENvdW50ZXJUeXBlPigpOworICAgICAgICBFWFBFQ1RfRVEodHJ1ZSwgY2FsbGJhY2tWYWx1ZSk7
CisgICAgICAgIEVYUEVDVF9FUSh0cnVlLCBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50ZXIudmFsdWUo
KSkpOwogICAgICAgICBjYWxsYmFja1ZhbHVlID0gQ2FsbGJhY2tOb3RFeHBlY3RlZDsKICAgICB9
CiAKICAgICAvLyBUZXN0aW5nICgzZSkgLSByZWYgd2l0aCBjYWxsYmFjayBmcm9tIDEgLT4gPjEg
QUZURVIgUmVmQ291bnRlciBoYXMgYmVlbiBkZXN0cm95ZWQuCi0gICAgUmVmUHRyPFJlZkNvdW50
ZXI6OkNvdW50PiBpbmNUbzJBZ2FpbiA9IGluY1RvMUFnYWluOworICAgIFRva2VuVHlwZSBpbmNU
bzJBZ2FpbiA9IGluY1RvMUFnYWluOwogICAgIC8vIFRlc3RpbmcgKDNmKSAtIGRlcmVmIHdpdGgg
Y2FsbGJhY2sgZnJvbSA+MSAtPiAxIEFGVEVSIFJlZkNvdW50ZXIgaGFzIGJlZW4gZGVzdHJveWVk
LgotICAgIGluY1RvMUFnYWluLmNsZWFyKCk7CisgICAgaW5jVG8xQWdhaW4gPSBudWxscHRyOwog
ICAgIC8vIFRlc3RpbmcgKDNnKSAtIGRlcmVmIHdpdGggY2FsbGJhY2sgZnJvbSAxIC0+IDAgQUZU
RVIgUmVmQ291bnRlciBoYXMgYmVlbiBkZXN0cm95ZWQuCi0gICAgaW5jVG8yQWdhaW4uY2xlYXIo
KTsKKyAgICBpbmNUbzJBZ2FpbiA9IG51bGxwdHI7CiAKICAgICAvLyBUZXN0aW5nICgxYikgLSBD
b25zdHJ1Y3Rpb24gd2l0aG91dCBhIGNhbGxiYWNrLgogICAgIFJlZkNvdW50ZXIgY291bnRlcjsK
ICAgICAvLyBUZXN0aW5nICg0YSkgLSBhZnRlciBjb25zdHJ1Y3Rpb24gdmFsdWUoKSBpcyAwLgot
ICAgIEVYUEVDVF9FUSgwLCBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50ZXIudmFsdWUoKSkpOworICAg
IEVYUEVDVF9FUShmYWxzZSwgc3RhdGljX2Nhc3Q8aW50Pihjb3VudGVyLnZhbHVlKCkpKTsKICAg
ICAvLyBUZXN0aW5nICgzaCkgLSByZWYgd2l0aG91dCBjYWxsYmFjawotICAgIFJlZlB0cjxSZWZD
b3VudGVyOjpDb3VudD4gaW5jVG8xKGNvdW50ZXIuY291bnQoKSk7CisgICAgVG9rZW5UeXBlIGlu
Y1RvMShjb3VudGVyLnRva2VuPENvdW50ZXJUeXBlPigpKTsKICAgICAvLyBUZXN0aW5nICg0Yykg
LSB2YWx1ZSBhcyByZWFkIGFmdGVyIHRoZSByZWYuCi0gICAgRVhQRUNUX0VRKDEsIHN0YXRpY19j
YXN0PGludD4oY291bnRlci52YWx1ZSgpKSk7CisgICAgRVhQRUNUX0VRKHRydWUsIHN0YXRpY19j
YXN0PGludD4oY291bnRlci52YWx1ZSgpKSk7CiAgICAgLy8gVGVzdGluZyAoM2kpIC0gZGVyZWYg
d2l0aG91dCBjYWxsYmFjawotICAgIGluY1RvMS5jbGVhcigpOworICAgIGluY1RvMSA9IG51bGxw
dHI7CiAgICAgLy8gVGVzdGluZyAoNGMpIC0gdmFsdWUgYXMgcmVhZCBhZnRlciB0aGUgZGVyZWYu
Ci0gICAgRVhQRUNUX0VRKDAsIHN0YXRpY19jYXN0PGludD4oY291bnRlci52YWx1ZSgpKSk7Cisg
ICAgRVhQRUNUX0VRKGZhbHNlLCBzdGF0aWNfY2FzdDxpbnQ+KGNvdW50ZXIudmFsdWUoKSkpOwog
ICAgIC8vIFRlc3RpbmcgKDJiKSAtIERlc3RydWN0aW9uIHdoZXJlIHRoZSBSZWZDb3VudGVyOjpD
b3VudCBoYXMgYSB6ZXJvIHJlZmVyZW5jZSBjb3VudC4KICAgICAvLyAuLi4gbm90IGEgbG90IHRv
IHRlc3QgaGVyZSEgLcKgd2UgY2FuIGF0IGxlYXN0IGVuc3VyZSB0aGlzIGNvZGUgcGF0aCBpcyBy
dW4gJiB3ZSBkb24ndCBjcmFzaCEKIH0K
</data>
<flag name="review"
          id="268397"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>