<?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>134416</bug_id>
          
          <creation_ts>2014-06-27 15:06:27 -0700</creation_ts>
          <short_desc>reduce dynamic memory allocation in css jit compiler</short_desc>
          <delta_ts>2014-07-01 21:50:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</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>
          <dependson>134484</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1019114</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-27 15:06:27 -0700</bug_when>
    <thetext>The css jit compiler could be sped up.  Calls to malloc are slow.  Let&apos;s get rid of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019117</commentid>
    <comment_count>1</comment_count>
      <attachid>234023</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-27 15:12:06 -0700</bug_when>
    <thetext>Created attachment 234023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019119</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-27 15:14:12 -0700</bug_when>
    <thetext>Attachment 234023 did not pass style-queue:


ERROR: Source/WTF/wtf/Deque.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019147</commentid>
    <comment_count>3</comment_count>
      <attachid>234023</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-06-27 16:48:13 -0700</bug_when>
    <thetext>Comment on attachment 234023
Patch

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

&gt; Source/WTF/ChangeLog:35
&gt; +        (WTF::inlineCapacity&gt;::checkValidity):
&gt; +        (WTF::inlineCapacity&gt;::checkIndexValidity):
&gt; +        (WTF::inlineCapacity&gt;::invalidateIterators):
&gt; +        (WTF::inlineCapacity&gt;::Deque):
&gt; +        (WTF::=):
&gt; +        (WTF::inlineCapacity&gt;::destroyAll):
&gt; +        (WTF::inlineCapacity&gt;::~Deque):
&gt; +        (WTF::inlineCapacity&gt;::swap):
&gt; +        (WTF::inlineCapacity&gt;::clear):
&gt; +        (WTF::inlineCapacity&gt;::expandCapacityIfNeeded):
&gt; +        (WTF::inlineCapacity&gt;::expandCapacity):
&gt; +        (WTF::inlineCapacity&gt;::append):
&gt; +        (WTF::inlineCapacity&gt;::prepend):
&gt; +        (WTF::inlineCapacity&gt;::removeFirst):
&gt; +        (WTF::inlineCapacity&gt;::removeLast):
&gt; +        (WTF::inlineCapacity&gt;::remove):
&gt; +        (WTF::inlineCapacity&gt;::addToIteratorsList):
&gt; +        (WTF::inlineCapacity&gt;::removeFromIteratorsList):
&gt; +        (WTF::inlineCapacity&gt;::DequeIteratorBase):
&gt; +        (WTF::inlineCapacity&gt;::~DequeIteratorBase):
&gt; +        (WTF::inlineCapacity&gt;::isEqual):
&gt; +        (WTF::inlineCapacity&gt;::increment):
&gt; +        (WTF::inlineCapacity&gt;::decrement):
&gt; +        (WTF::inlineCapacity&gt;::after):
&gt; +        (WTF::inlineCapacity&gt;::before):

The script generated garbage here. Please either fix these manually or remove them. I think it’s OK to omit the list of function names entirely.

&gt; Source/WebCore/cssjit/RegisterAllocator.h:65
&gt; +    JSC::ARMRegisters::r9,

Change not mentioned in the change log.

&gt; Source/WebCore/cssjit/RegisterAllocator.h:73
&gt; +    JSC::ARMRegisters::r8,
&gt; +    JSC::ARMRegisters::r10,
&gt; +    JSC::ARMRegisters::r11,

Change not mentioned in the change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019152</commentid>
    <comment_count>4</comment_count>
      <attachid>234023</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-06-27 17:08:29 -0700</bug_when>
    <thetext>Comment on attachment 234023
Patch

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

+1 from me too. One comment:

&gt; Source/WebCore/cssjit/StackAllocator.h:75
&gt; -        unsigned registerCount = registerIDs.size();
&gt; -        Vector&lt;StackReference&gt; stackReferences;
&gt; -        stackReferences.reserveInitialCapacity(registerCount);
&gt; +        Vector&lt;StackReference, registerCount&gt; stackReferences;

The stack allocation is not useful here because the vector is returned by value. This will have to be heap allocated in the copy constructor when returning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019354</commentid>
    <comment_count>5</comment_count>
      <attachid>234081</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-30 11:14:04 -0700</bug_when>
    <thetext>Created attachment 234081
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019355</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-30 11:16:38 -0700</bug_when>
    <thetext>I&apos;ll put the additional armv7 registers in a different patch because that change was unrelated.

I expanded my usage of vector inline capacity throughout the selector compiler using 32 as a large number that will probably be more than the number of function calls, fragments, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019356</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-06-30 11:17:47 -0700</bug_when>
    <thetext>&gt; +1 from me too. One comment:
&gt; 
&gt; &gt; Source/WebCore/cssjit/StackAllocator.h:75
&gt; &gt; -        unsigned registerCount = registerIDs.size();
&gt; &gt; -        Vector&lt;StackReference&gt; stackReferences;
&gt; &gt; -        stackReferences.reserveInitialCapacity(registerCount);
&gt; &gt; +        Vector&lt;StackReference, registerCount&gt; stackReferences;
&gt; 
&gt; The stack allocation is not useful here because the vector is returned by value. This will have to be heap allocated in the copy constructor when returning.

I don&apos;t think so. Vector with inline capacity has an optimization to copy to inline capacity without malloc-ating. It&apos;s a little far removed from the Vector class itself, but here is the code:

    VectorBuffer(size_t capacity, size_t size = 0)
        : Base(inlineBuffer(), inlineCapacity, size)
    {
        if (capacity &gt; inlineCapacity)
            Base::allocateBuffer(capacity);
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019360</commentid>
    <comment_count>8</comment_count>
      <attachid>234083</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-30 11:21:10 -0700</bug_when>
    <thetext>Created attachment 234083
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019364</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-30 11:23:40 -0700</bug_when>
    <thetext>Attachment 234083 did not pass style-queue:


ERROR: Source/WTF/wtf/Deque.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019396</commentid>
    <comment_count>10</comment_count>
      <attachid>234083</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-06-30 14:31:53 -0700</bug_when>
    <thetext>Comment on attachment 234083
Patch

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

Some comments, nothing critical.

&gt; Source/WebCore/cssjit/FunctionCall.h:183
&gt; +    Vector&lt;std::pair&lt;JSC::MacroAssembler::Call, JSC::FunctionPtr&gt;, 32&gt;&amp; m_callRegistry;

You can typedef this to avoid repeating the 32.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:166
&gt; -    Vector&lt;const AtomicStringImpl*, 1&gt; classNames;
&gt; +    Vector&lt;const AtomicStringImpl*, 32&gt; classNames;
&gt;      HashSet&lt;unsigned&gt; pseudoClasses;
&gt; -    Vector&lt;JSC::FunctionPtr&gt; unoptimizedPseudoClasses;
&gt; -    Vector&lt;AttributeMatchingInfo&gt; attributes;
&gt; -    Vector&lt;std::pair&lt;int, int&gt;&gt; nthChildFilters;
&gt; +    Vector&lt;JSC::FunctionPtr, 32&gt; unoptimizedPseudoClasses;
&gt; +    Vector&lt;AttributeMatchingInfo, 32&gt; attributes;
&gt; +    Vector&lt;std::pair&lt;int, int&gt;, 32&gt; nthChildFilters;

I am not sure that is a good idea. The filters unoptimizedPseudoClasses and nthChildFilters are uncommon. The attributes rarely goes over 1. Classe names are usually 1 or 2.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:196
&gt; +typedef Vector&lt;SelectorFragment, 32&gt; SelectorFragmentList;
&gt; +typedef Vector&lt;TagNamePattern, 32&gt; TagNameList;

Again, this seems a little big.

&gt; Source/WebCore/cssjit/StackAllocator.h:75
&gt; +    Vector&lt;StackReference, registerCount&gt; push(const Vector&lt;JSC::MacroAssembler::RegisterID&gt;&amp; registerIDs)
&gt;      {
&gt;          RELEASE_ASSERT(!m_hasFunctionCallPadding);
&gt; -        unsigned registerCount = registerIDs.size();
&gt; -        Vector&lt;StackReference&gt; stackReferences;
&gt; -        stackReferences.reserveInitialCapacity(registerCount);
&gt; +        Vector&lt;StackReference, registerCount&gt; stackReferences;

I think you need to get the output as an argument to avoid the copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019436</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-06-30 15:50:26 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/170605

Passing a Vector&amp; to push matched pop and it avoided an appendVector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019551</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-30 21:13:39 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 134484</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019553</commentid>
    <comment_count>13</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-06-30 21:16:51 -0700</bug_when>
    <thetext>I got into several crashes with this backtrace:
  * frame #0: 0x0000000100eb81c8 JavaScriptCore`WTFCrash + 72
    frame #1: 0x0000000101db1318 WebCore`WebCore::StackAllocator::pop(WTF::Vector&lt;WebCore::StackAllocator::StackReference, 0ul, WTF::CrashOnOverflow&gt; const&amp;, WTF::Vector&lt;JSC::ARM64Registers::RegisterID, 0ul, WTF::CrashOnOverflow&gt; const&amp;) + 432
    frame #2: 0x0000000101db54bc WebCore`WebCore::FunctionCall::restoreAllocatedCallerSavedRegisters() + 208
    frame #3: 0x0000000101da8c04 WebCore`WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementFunctionCallTest(JSC::AbstractMacroAssembler&lt;JSC::ARM64Assembler&gt;::JumpList&amp;, JSC::FunctionPtr) + 240
    frame #4: 0x0000000101da6170 WebCore`WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching(JSC::AbstractMacroAssembler&lt;JSC::ARM64Assembler&gt;::JumpList&amp;, JSC::AbstractMacroAssembler&lt;JSC::ARM64Assembler&gt;::JumpList&amp;, WebCore::SelectorCompiler::SelectorFragment const&amp;) + 616
    frame #5: 0x0000000101da56d4 WebCore`WebCore::SelectorCompiler::SelectorCodeGenerator::generateSelectorChecker() + 936
    frame #6: 0x0000000101db04ac WebCore`WebCore::SelectorCompiler::SelectorCodeGenerator::compile(JSC::VM*, JSC::MacroAssemblerCodeRef&amp;) + 72
    frame #7: 0x0000000101da5300 WebCore`WebCore::SelectorCompiler::compileSelector(WebCore::CSSSelector const*, JSC::VM*, WebCore::SelectorCompiler::SelectorContext, JSC::MacroAssemblerCodeRef&amp;) + 84
    frame #8: 0x0000000101dbc9c0 WebCore`void WebCore::SelectorDataList::execute&lt;WebCore::AllElementExtractorSelectorQueryTrait&gt;(WebCore::ContainerNode&amp;, WebCore::AllElementExtractorSelectorQueryTrait::OutputType&amp;) const + 2496
    frame #9: 0x0000000101dbb988 WebCore`WebCore::SelectorDataList::queryAll(WebCore::ContainerNode&amp;) const + 32
    frame #10: 0x00000001013056fc WebCore`WebCore::ContainerNode::querySelectorAll(WTF::String const&amp;, int&amp;) + 52
    frame #11: 0x0000000101888988 WebCore`WebCore::jsElementPrototypeFunctionQuerySelectorAll(JSC::ExecState*) + 340

It&apos;s odd because the patch had nothing to do with ARMv8. We&apos;ll need to look into that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019646</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-07-01 10:11:51 -0700</bug_when>
    <thetext>I see what it was.  The very last line should not have changed registerIDs.size() to registerCount.  I don&apos;t know why I did that :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019693</commentid>
    <comment_count>15</comment_count>
      <attachid>234181</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-07-01 11:55:18 -0700</bug_when>
    <thetext>Created attachment 234181
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019698</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-01 11:56:38 -0700</bug_when>
    <thetext>Attachment 234181 did not pass style-queue:


ERROR: Source/WTF/wtf/Deque.h:41:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019707</commentid>
    <comment_count>17</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-07-01 12:07:11 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I see what it was.  The very last line should not have changed registerIDs.size() to registerCount.  I don&apos;t know why I did that :(
The problem was the exact opposite.  I should have changed all registerCount to registerIDs.size().  I added new variable names to avoid confusion between registerCount and popRegisterCount or pushRegisterCount.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019907</commentid>
    <comment_count>18</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-07-01 21:50:41 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/170697</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234023</attachid>
            <date>2014-06-27 15:12:06 -0700</date>
            <delta_ts>2014-06-30 11:13:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134416-20140627151153.patch</filename>
            <type>text/plain</type>
            <size>25145</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzA1NTcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBACisyMDE0LTA2LTI3ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIGR5bmFtaWMgbWVtb3J5
IGFsbG9jYXRpb24gaW4gY3NzIGppdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNDQxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL0RlcXVlLmg6CisgICAgICAgIChXVEY6OkRlcXVlSXRlcmF0
b3I6OkRlcXVlSXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpEZXF1ZUNvbnN0SXRlcmF0b3I6OkRl
cXVlQ29uc3RJdGVyYXRvcik6CisgICAgICAgIChXVEY6OmlubGluZUNhcGFjaXR5Pjo6Y2hlY2tW
YWxpZGl0eSk6CisgICAgICAgIChXVEY6OmlubGluZUNhcGFjaXR5Pjo6Y2hlY2tJbmRleFZhbGlk
aXR5KToKKyAgICAgICAgKFdURjo6aW5saW5lQ2FwYWNpdHk+OjppbnZhbGlkYXRlSXRlcmF0b3Jz
KToKKyAgICAgICAgKFdURjo6aW5saW5lQ2FwYWNpdHk+OjpEZXF1ZSk6CisgICAgICAgIChXVEY6
Oj0pOgorICAgICAgICAoV1RGOjppbmxpbmVDYXBhY2l0eT46OmRlc3Ryb3lBbGwpOgorICAgICAg
ICAoV1RGOjppbmxpbmVDYXBhY2l0eT46On5EZXF1ZSk6CisgICAgICAgIChXVEY6OmlubGluZUNh
cGFjaXR5Pjo6c3dhcCk6CisgICAgICAgIChXVEY6OmlubGluZUNhcGFjaXR5Pjo6Y2xlYXIpOgor
ICAgICAgICAoV1RGOjppbmxpbmVDYXBhY2l0eT46OmV4cGFuZENhcGFjaXR5SWZOZWVkZWQpOgor
ICAgICAgICAoV1RGOjppbmxpbmVDYXBhY2l0eT46OmV4cGFuZENhcGFjaXR5KToKKyAgICAgICAg
KFdURjo6aW5saW5lQ2FwYWNpdHk+OjphcHBlbmQpOgorICAgICAgICAoV1RGOjppbmxpbmVDYXBh
Y2l0eT46OnByZXBlbmQpOgorICAgICAgICAoV1RGOjppbmxpbmVDYXBhY2l0eT46OnJlbW92ZUZp
cnN0KToKKyAgICAgICAgKFdURjo6aW5saW5lQ2FwYWNpdHk+OjpyZW1vdmVMYXN0KToKKyAgICAg
ICAgKFdURjo6aW5saW5lQ2FwYWNpdHk+OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjppbmxpbmVD
YXBhY2l0eT46OmFkZFRvSXRlcmF0b3JzTGlzdCk6CisgICAgICAgIChXVEY6OmlubGluZUNhcGFj
aXR5Pjo6cmVtb3ZlRnJvbUl0ZXJhdG9yc0xpc3QpOgorICAgICAgICAoV1RGOjppbmxpbmVDYXBh
Y2l0eT46OkRlcXVlSXRlcmF0b3JCYXNlKToKKyAgICAgICAgKFdURjo6aW5saW5lQ2FwYWNpdHk+
Ojp+RGVxdWVJdGVyYXRvckJhc2UpOgorICAgICAgICAoV1RGOjppbmxpbmVDYXBhY2l0eT46Omlz
RXF1YWwpOgorICAgICAgICAoV1RGOjppbmxpbmVDYXBhY2l0eT46OmluY3JlbWVudCk6CisgICAg
ICAgIChXVEY6OmlubGluZUNhcGFjaXR5Pjo6ZGVjcmVtZW50KToKKyAgICAgICAgKFdURjo6aW5s
aW5lQ2FwYWNpdHk+OjphZnRlcik6CisgICAgICAgIChXVEY6OmlubGluZUNhcGFjaXR5Pjo6YmVm
b3JlKToKKyAgICAgICAgKFdURjo6RGVxdWU8VD46OmNoZWNrVmFsaWRpdHkpOgorICAgICAgICAo
V1RGOjpEZXF1ZTxUPjo6Y2hlY2tJbmRleFZhbGlkaXR5KToKKyAgICAgICAgKFdURjo6RGVxdWU8
VD46OmludmFsaWRhdGVJdGVyYXRvcnMpOgorICAgICAgICAoV1RGOjpEZXF1ZTxUPjo6RGVxdWUp
OgorICAgICAgICAoV1RGOjpEZXF1ZTxUPjo6ZGVzdHJveUFsbCk6CisgICAgICAgIChXVEY6OkRl
cXVlPFQ+Ojp+RGVxdWUpOgorICAgICAgICAoV1RGOjpEZXF1ZTxUPjo6c3dhcCk6CisgICAgICAg
IChXVEY6OkRlcXVlPFQ+OjpjbGVhcik6CisgICAgICAgIChXVEY6OkRlcXVlPFQ+OjpleHBhbmRD
YXBhY2l0eUlmTmVlZGVkKToKKyAgICAgICAgKFdURjo6RGVxdWU8VD46OmV4cGFuZENhcGFjaXR5
KToKKyAgICAgICAgKFdURjo6RGVxdWU8VD46OmFwcGVuZCk6CisgICAgICAgIChXVEY6OkRlcXVl
PFQ+OjpwcmVwZW5kKToKKyAgICAgICAgKFdURjo6RGVxdWU8VD46OnJlbW92ZUZpcnN0KToKKyAg
ICAgICAgKFdURjo6RGVxdWU8VD46OnJlbW92ZUxhc3QpOgorICAgICAgICAoV1RGOjpEZXF1ZTxU
Pjo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6RGVxdWVJdGVyYXRvckJhc2U8VD46OmNoZWNrVmFs
aWRpdHkpOgorICAgICAgICAoV1RGOjpEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6YWRkVG9JdGVyYXRv
cnNMaXN0KToKKyAgICAgICAgKFdURjo6RGVxdWVJdGVyYXRvckJhc2U8VD46OnJlbW92ZUZyb21J
dGVyYXRvcnNMaXN0KToKKyAgICAgICAgKFdURjo6RGVxdWVJdGVyYXRvckJhc2U8VD46OkRlcXVl
SXRlcmF0b3JCYXNlKToKKyAgICAgICAgKFdURjo6RGVxdWVJdGVyYXRvckJhc2U8VD46On5EZXF1
ZUl0ZXJhdG9yQmFzZSk6CisgICAgICAgIChXVEY6OkRlcXVlSXRlcmF0b3JCYXNlPFQ+Ojppc0Vx
dWFsKToKKyAgICAgICAgKFdURjo6RGVxdWVJdGVyYXRvckJhc2U8VD46OmluY3JlbWVudCk6Cisg
ICAgICAgIChXVEY6OkRlcXVlSXRlcmF0b3JCYXNlPFQ+OjpkZWNyZW1lbnQpOgorICAgICAgICAo
V1RGOjpEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6YWZ0ZXIpOgorICAgICAgICAoV1RGOjpEZXF1ZUl0
ZXJhdG9yQmFzZTxUPjo6YmVmb3JlKToKKyAgICAgICAgQWRkIGlubGluZSBjYXBhY2l0eSBvZiB0
aGUgVmVjdG9yQnVmZmVyIGRlZmF1bHRpbmcgdG8gMC4KKwogMjAxNC0wNi0yNyAgQW5kcmVhcyBL
bGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW0FSTXY3XSBTa2lwIG9uZSBwYXJ0
aWN1bGFybHkgZXhwZW5zaXZlIGZhc3RGcmVlKCkgYWxpZ25tZW50IGNoZWNrLgpJbmRleDogU291
cmNlL1dURi93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5o
CShyZXZpc2lvbiAxNzA0OTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCwyNSArMzgsMjUgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjbGFzcyBEZXF1ZUl0ZXJhdG9yQmFzZTsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjbGFzcyBEZXF1ZUl0ZXJhdG9yOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNs
YXNzIERlcXVlQ29uc3RJdGVyYXRvcjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+IGNsYXNzIERlcXVlSXRlcmF0b3JCYXNlOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gY2xhc3MgRGVxdWVJdGVyYXRvcjsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGNsYXNzIERlcXVl
Q29uc3RJdGVyYXRvcjsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gMD4KICAgICBjbGFzcyBEZXF1ZSB7
CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAg
dHlwZWRlZiBEZXF1ZUl0ZXJhdG9yPFQ+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIERlcXVl
Q29uc3RJdGVyYXRvcjxUPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0
ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBEZXF1
ZUNvbnN0SXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAg
ICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRv
cjsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAKICAgICAgICAgRGVxdWUoKTsKLSAgICAgICAgRGVx
dWUoY29uc3QgRGVxdWU8VD4mKTsKLSAgICAgICAgRGVxdWUmIG9wZXJhdG9yPShjb25zdCBEZXF1
ZTxUPiYpOworICAgICAgICBEZXF1ZShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mKTsK
KyAgICAgICAgRGVxdWUmIG9wZXJhdG9yPShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4m
KTsKICAgICAgICAgfkRlcXVlKCk7CiAKLSAgICAgICAgdm9pZCBzd2FwKERlcXVlPFQ+Jik7Cisg
ICAgICAgIHZvaWQgc3dhcChEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mKTsKIAogICAgICAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQgPD0gbV9lbmQgPyBtX2VuZCAtIG1f
c3RhcnQgOiBtX2VuZCArIG1fYnVmZmVyLmNhcGFjaXR5KCkgLSBtX3N0YXJ0OyB9CiAgICAgICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQgPT0gbV9lbmQ7IH0KQEAgLTkx
LDExICs5MSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgZmluZElmKFBy
ZWRpY2F0ZSYmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBEZXF1ZUl0
ZXJhdG9yQmFzZTxUPjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIERlcXVlSXRlcmF0b3JCYXNlPFQs
IGlubGluZUNhcGFjaXR5PjsKIAotICAgICAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCAwPiBC
dWZmZXI7CisgICAgICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiBC
dWZmZXI7CiAgICAgICAgIHR5cGVkZWYgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD4gVHlwZU9wZXJh
dGlvbnM7Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRvckJhc2U8VD4gSXRlcmF0b3JCYXNl
OworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiBJ
dGVyYXRvckJhc2U7CiAKICAgICAgICAgdm9pZCByZW1vdmUoc2l6ZV90IHBvc2l0aW9uKTsKICAg
ICAgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CkBAIC0xMTMsMTEgKzExMywxMSBAQCBu
YW1lc3BhY2UgV1RGIHsKICNlbmRpZgogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgICBj
bGFzcyBEZXF1ZUl0ZXJhdG9yQmFzZSB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBEZXF1ZUl0
ZXJhdG9yQmFzZSgpOwotICAgICAgICBEZXF1ZUl0ZXJhdG9yQmFzZShjb25zdCBEZXF1ZTxUPios
IHNpemVfdCk7CisgICAgICAgIERlcXVlSXRlcmF0b3JCYXNlKGNvbnN0IERlcXVlPFQsIGlubGlu
ZUNhcGFjaXR5PiosIHNpemVfdCk7CiAgICAgICAgIERlcXVlSXRlcmF0b3JCYXNlKGNvbnN0IERl
cXVlSXRlcmF0b3JCYXNlJik7CiAgICAgICAgIERlcXVlSXRlcmF0b3JCYXNlJiBvcGVyYXRvcj0o
Y29uc3QgRGVxdWVJdGVyYXRvckJhc2UmKTsKICAgICAgICAgfkRlcXVlSXRlcmF0b3JCYXNlKCk7
CkBAIC0xMzgsMTAgKzEzOCwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdm9pZCBjaGVj
a1ZhbGlkaXR5KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgY2hlY2tWYWxpZGl0eShjb25zdCBEZXF1
ZUl0ZXJhdG9yQmFzZSYpIGNvbnN0OwogCi0gICAgICAgIERlcXVlPFQ+KiBtX2RlcXVlOworICAg
ICAgICBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4qIG1fZGVxdWU7CiAgICAgICAgIHNpemVfdCBt
X2luZGV4OwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBEZXF1ZTxUPjsKKyAgICAgICAgZnJpZW5k
IGNsYXNzIERlcXVlPFQsIGlubGluZUNhcGFjaXR5PjsKIAogI2lmbmRlZiBOREVCVUcKICAgICAg
ICAgbXV0YWJsZSBEZXF1ZUl0ZXJhdG9yQmFzZSogbV9uZXh0OwpAQCAtMTQ5LDExICsxNDksMTEg
QEAgbmFtZXNwYWNlIFdURiB7CiAjZW5kaWYKICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICBjbGFzcyBEZXF1ZUl0ZXJhdG9yIDogcHVibGljIERlcXVlSXRlcmF0b3JCYXNl
PFQ+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cisg
ICAgY2xhc3MgRGVxdWVJdGVyYXRvciA6IHB1YmxpYyBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxp
bmVDYXBhY2l0eT4gewogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRv
ckJhc2U8VD4gQmFzZTsKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yPFQ+IEl0ZXJhdG9y
OworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiBC
YXNlOworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IEl0
ZXJhdG9yOwogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CkBAIC0xNjIsNyArMTYyLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5
cGVkZWYgVCYgcmVmZXJlbmNlOwogICAgICAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9p
dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAKLSAgICAgICAgRGVxdWVJdGVyYXRvcihE
ZXF1ZTxUPiogZGVxdWUsIHNpemVfdCBpbmRleCkgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9Cisg
ICAgICAgIERlcXVlSXRlcmF0b3IoRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+KiBkZXF1ZSwgc2l6
ZV90IGluZGV4KQorICAgICAgICAgICAgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9CiAKICAgICAg
ICAgRGVxdWVJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgb3RoZXIpIDogQmFzZShvdGhlcikgeyB9
CiAgICAgICAgIERlcXVlSXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBJdGVyYXRvciYgb3RoZXIp
IHsgQmFzZTo6YXNzaWduKG90aGVyKTsgcmV0dXJuICp0aGlzOyB9CkBAIC0xNzksMTIgKzE4MCwx
MiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgLy8gcG9zdGZpeCAtLSBpbnRlbnRpb25hbGx5
IG9taXR0ZWQKICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBjbGFzcyBE
ZXF1ZUNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8VD4geworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBjbGFzcyBEZXF1
ZUNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNp
dHk+IHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQ+
IEJhc2U7Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVDb25zdEl0ZXJhdG9yPFQ+IEl0ZXJhdG9yOwot
ICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VD4gTm9uQ29uc3RJdGVyYXRvcjsKKyAgICAg
ICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKKyAg
ICAgICAgdHlwZWRlZiBEZXF1ZUNvbnN0SXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IEl0ZXJh
dG9yOworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IE5v
bkNvbnN0SXRlcmF0b3I7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKQEAgLTE5Myw3ICsxOTQsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgdHlwZWRlZiBjb25zdCBUJiByZWZlcmVuY2U7CiAgICAgICAgIHR5cGVkZWYgc3RkOjpi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKIAotICAgICAgICBE
ZXF1ZUNvbnN0SXRlcmF0b3IoY29uc3QgRGVxdWU8VD4qIGRlcXVlLCBzaXplX3QgaW5kZXgpIDog
QmFzZShkZXF1ZSwgaW5kZXgpIHsgfQorICAgICAgICBEZXF1ZUNvbnN0SXRlcmF0b3IoY29uc3Qg
RGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+KiBkZXF1ZSwgc2l6ZV90IGluZGV4KQorICAgICAgICAg
ICAgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9CiAKICAgICAgICAgRGVxdWVDb25zdEl0ZXJhdG9y
KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgOiBCYXNlKG90aGVyKSB7IH0KICAgICAgICAgRGVxdWVD
b25zdEl0ZXJhdG9yKGNvbnN0IE5vbkNvbnN0SXRlcmF0b3ImIG90aGVyKSA6IEJhc2Uob3RoZXIp
IHsgfQpAQCAtMjEzLDEyICsyMTUsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfTsKIAogI2lm
ZGVmIE5ERUJVRwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlPFQ+
OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QgeyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHZvaWQgRGVxdWU8VD46OmNoZWNrSW5kZXhWYWxpZGl0eShzaXplX3QpIGNvbnN0IHsgfQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlPFQ+OjppbnZhbGlkYXRl
SXRlcmF0b3JzKCkgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRp
dHkoKSBjb25zdCB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+IGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tJbmRleFZh
bGlkaXR5KHNpemVfdCkgY29uc3QgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46Omlu
dmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KICNlbHNlCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICB2b2lkIERlcXVlPFQ+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoKSBjb25zdAogICAgIHsKICAgICAgICAgLy8gSW4g
dGhpcyBpbXBsZW1lbnRhdGlvbiBhIGNhcGFjaXR5IG9mIDEgd291bGQgY29uZnVzZSBhcHBlbmQo
KSBhbmQKICAgICAgICAgLy8gb3RoZXIgcGxhY2VzIHRoYXQgYXNzdW1lIHRoZSBpbmRleCBhZnRl
ciBjYXBhY2l0eSAtIDEgaXMgMC4KQEAgLTIzMyw4ICsyMzUsOCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBE
ZXF1ZTxUPjo6Y2hlY2tJbmRleFZhbGlkaXR5KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZTxU
LCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrSW5kZXhWYWxpZGl0eShzaXplX3QgaW5kZXgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCBpbmRleCA8PSBtX2J1ZmZlci5j
YXBhY2l0eSgpKTsKICAgICAgICAgaWYgKG1fc3RhcnQgPD0gbV9lbmQpIHsKQEAgLTI0NSw4ICsy
NDcsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBEZXF1ZTxUPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycygpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHZvaWQg
RGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkKICAgICB7CiAg
ICAgICAgIEl0ZXJhdG9yQmFzZSogbmV4dDsKICAgICAgICAgZm9yIChJdGVyYXRvckJhc2UqIHAg
PSBtX2l0ZXJhdG9yczsgcDsgcCA9IG5leHQpIHsKQEAgLTI1OSw4ICsyNjEsOCBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICB9CiAjZW5kaWYKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
aW5saW5lIERlcXVlPFQ+OjpEZXF1ZSgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OkRl
cXVlKCkKICAgICAgICAgOiBtX3N0YXJ0KDApCiAgICAgICAgICwgbV9lbmQoMCkKICNpZm5kZWYg
TkRFQlVHCkBAIC0yNzAsOCArMjcyLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNr
VmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGlu
ZSBEZXF1ZTxUPjo6RGVxdWUoY29uc3QgRGVxdWU8VD4mIG90aGVyKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWU8VCwgaW5s
aW5lQ2FwYWNpdHk+OjpEZXF1ZShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mIG90aGVy
KQogICAgICAgICA6IG1fc3RhcnQob3RoZXIubV9zdGFydCkKICAgICAgICAgLCBtX2VuZChvdGhl
ci5tX2VuZCkKICAgICAgICAgLCBtX2J1ZmZlcihvdGhlci5tX2J1ZmZlci5jYXBhY2l0eSgpKQpA
QCAtMjg4LDE4ICsyOTAsMTggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZTxUPiYgRGVxdWU8VD46
Om9wZXJhdG9yPShjb25zdCBEZXF1ZTxUPiYgb3RoZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSBEZXF1ZTxULCBpbmxpbmVDYXBh
Y2l0eT4mIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6b3BlcmF0b3I9KGNvbnN0IERlcXVlPFQs
IGlubGluZUNhcGFjaXR5PiYgb3RoZXIpCiAgICAgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBp
cyBpbmVmZmljaWVudCBpZiB3ZSdyZSB1c2luZyBhbiBpbmxpbmUgYnVmZmVyIGFuZCBUIGlzCiAg
ICAgICAgIC8vIGV4cGVuc2l2ZSB0byBjb3B5IHNpbmNlIGl0IHdpbGwgY29weSB0aGUgYnVmZmVy
IHR3aWNlIGluc3RlYWQgb2Ygb25jZS4KLSAgICAgICAgRGVxdWU8VD4gY29weShvdGhlcik7Cisg
ICAgICAgIERlcXVlPFQsIGlubGluZUNhcGFjaXR5PiBjb3B5KG90aGVyKTsKICAgICAgICAgc3dh
cChjb3B5KTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OmRlc3Ryb3lBbGwoKQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9p
ZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmRlc3Ryb3lBbGwoKQogICAgIHsKICAgICAgICAg
aWYgKG1fc3RhcnQgPD0gbV9lbmQpCiAgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1
Y3QobV9idWZmZXIuYnVmZmVyKCkgKyBtX3N0YXJ0LCBtX2J1ZmZlci5idWZmZXIoKSArIG1fZW5k
KTsKQEAgLTMwOSwxNiArMzExLDE2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAgICAg
fQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgRGVxdWU8VD46On5EZXF1
ZSgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAg
IGlubGluZSBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46On5EZXF1ZSgpCiAgICAgewogICAgICAg
ICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKICAgICAg
ICAgZGVzdHJveUFsbCgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
aW5saW5lIHZvaWQgRGVxdWU8VD46OnN3YXAoRGVxdWU8VD4mIG90aGVyKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1
ZTxULCBpbmxpbmVDYXBhY2l0eT46OnN3YXAoRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+JiBvdGhl
cikKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgb3RoZXIuY2hlY2tW
YWxpZGl0eSgpOwpAQCAtMzMwLDggKzMzMiw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBv
dGhlci5jaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6Y2xlYXIoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OmNsZWFyKCkKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAg
ICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwpAQCAtMzQyLDkgKzM0NCw5IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgotICAgIGlubGluZSBhdXRvIERl
cXVlPFQ+OjpmaW5kSWYoUHJlZGljYXRlJiYgcHJlZGljYXRlKSAtPiBpdGVyYXRvcgorICAgIGlu
bGluZSBhdXRvIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6ZmluZElmKFByZWRpY2F0ZSYmIHBy
ZWRpY2F0ZSkgLT4gaXRlcmF0b3IKICAgICB7CiAgICAgICAgIGl0ZXJhdG9yIGVuZF9pdGVyYXRv
ciA9IGVuZCgpOwogICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5k
X2l0ZXJhdG9yOyArK2l0KSB7CkBAIC0zNTQsOCArMzU2LDggQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIHJldHVybiBlbmRfaXRlcmF0b3I7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6ZXhwYW5kQ2FwYWNpdHlJZk5lZWRlZCgp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlu
bGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHlJZk5lZWRl
ZCgpCiAgICAgewogICAgICAgICBpZiAobV9zdGFydCkgewogICAgICAgICAgICAgaWYgKG1fZW5k
ICsgMSAhPSBtX3N0YXJ0KQpAQCAtMzY5LDggKzM3MSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICBleHBhbmRDYXBhY2l0eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgdm9pZCBEZXF1ZTxUPjo6ZXhwYW5kQ2FwYWNpdHkoKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICB2b2lkIERlcXVlPFQsIGlubGluZUNh
cGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHkoKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgp
OwogICAgICAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBtX2J1ZmZlci5jYXBhY2l0eSgpOwpAQCAt
Mzg4LDI0ICszOTAsMjQgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHko
KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBhdXRvIERl
cXVlPFQ+Ojp0YWtlRmlyc3QoKSAtPiBUCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSBhdXRvIERlcXVlPFQsIGlubGluZUNhcGFjaXR5
Pjo6dGFrZUZpcnN0KCkgLT4gVAogICAgIHsKICAgICAgICAgVCBvbGRGaXJzdCA9IHN0ZDo6bW92
ZShmaXJzdCgpKTsKICAgICAgICAgcmVtb3ZlRmlyc3QoKTsKICAgICAgICAgcmV0dXJuIG9sZEZp
cnN0OwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGF1dG8g
RGVxdWU8VD46OnRha2VMYXN0KCkgLT4gVAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgYXV0byBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0
eT46OnRha2VMYXN0KCkgLT4gVAogICAgIHsKICAgICAgICAgVCBvbGRMYXN0ID0gc3RkOjptb3Zl
KGxhc3QoKSk7CiAgICAgICAgIHJlbW92ZUxhc3QoKTsKICAgICAgICAgcmV0dXJuIG9sZExhc3Q7
CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4K
LSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6YXBwZW5kKFUmJiB2YWx1ZSkKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+
CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcHBlbmQoVSYmIHZh
bHVlKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBleHBhbmRDYXBh
Y2l0eUlmTmVlZGVkKCk7CkBAIC00MTcsOCArNDE5LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIGlubGluZSB2b2lkIERlcXVlPFQ+OjpwcmVwZW5kKFUm
JiB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
IHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2Fw
YWNpdHk+OjpwcmVwZW5kKFUmJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHko
KTsKICAgICAgICAgZXhwYW5kQ2FwYWNpdHlJZk5lZWRlZCgpOwpAQCAtNDMwLDggKzQzMiw4IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6cmVtb3ZlRmly
c3QoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAg
ICBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUZpcnN0KCkKICAg
ICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
cygpOwpAQCAtNDQ0LDggKzQ0Niw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjaGVja1Zh
bGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUg
dm9pZCBEZXF1ZTxUPjo6cmVtb3ZlTGFzdCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFj
aXR5Pjo6cmVtb3ZlTGFzdCgpCiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAg
ICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKQEAgLTQ1OCwyMiArNDYwLDIyIEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6cmVtb3ZlKGl0ZXJhdG9yJiBp
dCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAg
aW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmUoaXRlcmF0b3ImIGl0
KQogICAgIHsKICAgICAgICAgaXQuY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZW1vdmUoaXQu
bV9pbmRleCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUg
dm9pZCBEZXF1ZTxUPjo6cmVtb3ZlKGNvbnN0X2l0ZXJhdG9yJiBpdCkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8
VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmUoY29uc3RfaXRlcmF0b3ImIGl0KQogICAgIHsKICAg
ICAgICAgaXQuY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZW1vdmUoaXQubV9pbmRleCk7CiAg
ICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxU
Pjo6cmVtb3ZlKHNpemVfdCBwb3NpdGlvbikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNp
dHk+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uKQogICAgIHsKICAgICAgICAgaWYgKHBvc2l0aW9u
ID09IG1fZW5kKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDk2LDI4ICs0OTgsMjggQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgfQogCiAjaWZkZWYgTkRFQlVHCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VD46OmNoZWNrVmFsaWRpdHkoKSBj
b25zdCB7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJh
dG9yQmFzZTxUPjo6Y2hlY2tWYWxpZGl0eShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiYpIGNv
bnN0IHsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0
b3JCYXNlPFQ+OjphZGRUb0l0ZXJhdG9yc0xpc3QoKSB7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6cmVtb3ZlRnJvbUl0ZXJhdG9y
c0xpc3QoKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hl
Y2tWYWxpZGl0eSgpIGNvbnN0IHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2Fw
YWNpdHk+OjpjaGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNh
cGFjaXR5PiYpIGNvbnN0IHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNp
dHk+OjphZGRUb0l0ZXJhdG9yc0xpc3QoKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlu
bGluZUNhcGFjaXR5Pjo6cmVtb3ZlRnJvbUl0ZXJhdG9yc0xpc3QoKSB7IH0KICNlbHNlCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpjaGVj
a1ZhbGlkaXR5KCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46
OmNoZWNrVmFsaWRpdHkoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZGVxdWUpOwog
ICAgICAgICBtX2RlcXVlLT5jaGVja0luZGV4VmFsaWRpdHkobV9pbmRleCk7CiAgICAgfQogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+Ojpj
aGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlJiBvdGhlcikgY29uc3QKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1
ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoY29uc3QgRGVx
dWVJdGVyYXRvckJhc2UmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0
eSgpOwogICAgICAgICBvdGhlci5jaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIEFTU0VSVChtX2Rl
cXVlID09IG90aGVyLm1fZGVxdWUpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6YWRkVG9JdGVyYXRvcnNMaXN0KCkKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBE
ZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmFkZFRvSXRlcmF0b3JzTGlzdCgp
CiAgICAgewogICAgICAgICBpZiAoIW1fZGVxdWUpCiAgICAgICAgICAgICBtX25leHQgPSAwOwpA
QCAtNTMwLDggKzUzMiw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBtX3ByZXZpb3VzID0g
MDsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRGVxdWVJdGVy
YXRvckJhc2U8VD46OnJlbW92ZUZyb21JdGVyYXRvcnNMaXN0KCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFz
ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUZyb21JdGVyYXRvcnNMaXN0KCkKICAgICB7CiAg
ICAgICAgIGlmICghbV9kZXF1ZSkgewogICAgICAgICAgICAgQVNTRVJUKCFtX25leHQpOwpAQCAt
NTU1LDIzICs1NTcsMjMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogI2VuZGlmCiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6RGVx
dWVJdGVyYXRvckJhc2UoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+
OjpEZXF1ZUl0ZXJhdG9yQmFzZSgpCiAgICAgICAgIDogbV9kZXF1ZSgwKQogICAgIHsKICAgICB9
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFz
ZTxUPjo6RGVxdWVJdGVyYXRvckJhc2UoY29uc3QgRGVxdWU8VD4qIGRlcXVlLCBzaXplX3QgaW5k
ZXgpCi0gICAgICAgIDogbV9kZXF1ZShjb25zdF9jYXN0PERlcXVlPFQ+Kj4oZGVxdWUpKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUg
RGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpEZXF1ZUl0ZXJhdG9yQmFzZShj
b25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4qIGRlcXVlLCBzaXplX3QgaW5kZXgpCisgICAg
ICAgIDogbV9kZXF1ZShjb25zdF9jYXN0PERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pio+KGRlcXVl
KSkKICAgICAgICAgLCBtX2luZGV4KGluZGV4KQogICAgIHsKICAgICAgICAgYWRkVG9JdGVyYXRv
cnNMaXN0KCk7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6RGVxdWVJdGVy
YXRvckJhc2UoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90aGVyKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWVJdGVyYXRv
ckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpEZXF1ZUl0ZXJhdG9yQmFzZShjb25zdCBEZXF1ZUl0
ZXJhdG9yQmFzZSYgb3RoZXIpCiAgICAgICAgIDogbV9kZXF1ZShvdGhlci5tX2RlcXVlKQogICAg
ICAgICAsIG1faW5kZXgob3RoZXIubV9pbmRleCkKICAgICB7CkBAIC01NzksOCArNTgxLDggQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiYgRGVx
dWVJdGVyYXRvckJhc2U8VD46Om9wZXJhdG9yPShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZSYgb3Ro
ZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAg
IGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4mIERlcXVlSXRlcmF0
b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6b3BlcmF0b3I9KGNvbnN0IERlcXVlSXRlcmF0b3JC
YXNlJiBvdGhlcikKICAgICB7CiAgICAgICAgIG90aGVyLmNoZWNrVmFsaWRpdHkoKTsKICAgICAg
ICAgcmVtb3ZlRnJvbUl0ZXJhdG9yc0xpc3QoKTsKQEAgLTU5Miw4ICs1OTQsOCBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgaW5saW5lIERlcXVlSXRlcmF0b3JCYXNlPFQ+Ojp+RGVxdWVJdGVyYXRv
ckJhc2UoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4K
KyAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+Ojp+RGVxdWVJ
dGVyYXRvckJhc2UoKQogICAgIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHJlbW92ZUZyb21J
dGVyYXRvcnNMaXN0KCk7CkBAIC02MDEsMTUgKzYwMywxNSBAQCBuYW1lc3BhY2UgV1RGIHsKICNl
bmRpZgogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wg
RGVxdWVJdGVyYXRvckJhc2U8VD46OmlzRXF1YWwoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90
aGVyKSBjb25zdAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4KKyAgICBpbmxpbmUgYm9vbCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46
OmlzRXF1YWwoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90aGVyKSBjb25zdAogICAgIHsKICAg
ICAgICAgY2hlY2tWYWxpZGl0eShvdGhlcik7CiAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90
aGVyLm1faW5kZXg7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxp
bmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6aW5jcmVtZW50KCkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWVJ
dGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjppbmNyZW1lbnQoKQogICAgIHsKICAgICAg
ICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBBU1NFUlQobV9pbmRleCAhPSBtX2RlcXVlLT5t
X2VuZCk7CkBAIC02MjEsOCArNjIzLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNr
VmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGlu
ZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpkZWNyZW1lbnQoKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZUl0
ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmRlY3JlbWVudCgpCiAgICAgewogICAgICAg
ICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIEFTU0VSVChtX2luZGV4ICE9IG1fZGVxdWUtPm1f
c3RhcnQpOwpAQCAtNjM0LDE2ICs2MzYsMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNo
ZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlu
bGluZSBUKiBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6YWZ0ZXIoKSBjb25zdAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgVCogRGVxdWVJ
dGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjphZnRlcigpIGNvbnN0CiAgICAgewogICAg
ICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIEFTU0VSVChtX2luZGV4ICE9IG1fZGVxdWUt
Pm1fZW5kKTsKICAgICAgICAgcmV0dXJuICZtX2RlcXVlLT5tX2J1ZmZlci5idWZmZXIoKVttX2lu
ZGV4XTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBUKiBE
ZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6YmVmb3JlKCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIFQqIERlcXVlSXRlcmF0b3JC
YXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6YmVmb3JlKCkgY29uc3QKICAgICB7CiAgICAgICAgIGNo
ZWNrVmFsaWRpdHkoKTsKICAgICAgICAgQVNTRVJUKG1faW5kZXggIT0gbV9kZXF1ZS0+bV9zdGFy
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzA1NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNC0wNi0yNyAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlZHVj
ZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIGluIGNzcyBqaXQuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ0MTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNzc2ppdC9SZWdpc3RlckFsbG9jYXRv
ci5oOgorICAgICAgICAqIGNzc2ppdC9TdGFja0FsbG9jYXRvci5oOgorICAgICAgICAoV2ViQ29y
ZTo6U3RhY2tBbGxvY2F0b3I6OnB1c2gpOgorICAgICAgICBVc2UgaW5saW5lIGNhcGFjaXR5IG9u
IHZlY3RvcnMgYW5kIGRlcXVlcy4KKwogMjAxNC0wNi0yNyAgQW50dGkgS29pdmlzdG8gIDxhbnR0
aUBhcHBsZS5jb20+CiAKICAgICAgICAgRmx1c2ggdGhyb3R0bGluZyB3aXRoIHJlbW90ZSBsYXll
cnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9SZWdpc3RlckFsbG9jYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9SZWdpc3RlckFsbG9jYXRvci5oCShyZXZp
c2lvbiAxNzA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvUmVnaXN0ZXJBbGxvY2F0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTEgKzYyLDE1IEBAIHN0YXRpYyBjb25zdCBKU0M6Ok1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3QKICAgICBKU0M6OkFSTVJlZ2lzdGVyczo6cjEsCiAgICAgSlND
OjpBUk1SZWdpc3RlcnM6OnIyLAogICAgIEpTQzo6QVJNUmVnaXN0ZXJzOjpyMywKKyAgICBKU0M6
OkFSTVJlZ2lzdGVyczo6cjksCiB9Owogc3RhdGljIGNvbnN0IEpTQzo6TWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgY2FsbGVlU2F2ZWRSZWdpc3RlcnNbXSA9IHsKICAgICBKU0M6OkFSTVJlZ2lz
dGVyczo6cjQsCiAgICAgSlNDOjpBUk1SZWdpc3RlcnM6OnI1LAogICAgIEpTQzo6QVJNUmVnaXN0
ZXJzOjpyNywKKyAgICBKU0M6OkFSTVJlZ2lzdGVyczo6cjgsCisgICAgSlNDOjpBUk1SZWdpc3Rl
cnM6OnIxMCwKKyAgICBKU0M6OkFSTVJlZ2lzdGVyczo6cjExLAogfTsKIC8vIHI2IGlzIGFsc28g
dXNlZCBhcyBhZGRyZXNzVGVtcFJlZ2lzdGVyIGluIHRoZSBtYWNybyBhc3NlbWJsZXIuIEl0IGlz
IHNhdmVkIGluIHRoZSBwcm9sb2d1ZSBhbmQgcmVzdG9yZWQgaW4gdGhlIGVwaWxvZ3VlLgogc3Rh
dGljIGNvbnN0IEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGVtcFJlZ2lzdGVyID0g
SlNDOjpBUk1SZWdpc3RlcnM6OnI2OwpAQCAtMTgzLDcgKzE4Nyw3IEBAIHB1YmxpYzoKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgRGVxdWU8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4g
bV9yZWdpc3RlcnM7CisgICAgRGVxdWU8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwg
cmVnaXN0ZXJDb3VudD4gbV9yZWdpc3RlcnM7CiAgICAgVmVjdG9yPEpTQzo6TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQsIHJlZ2lzdGVyQ291bnQ+IG1fYWxsb2NhdGVkUmVnaXN0ZXJzOwogICAg
IFZlY3RvcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklELCBjYWxsZWVTYXZlZFJlZ2lz
dGVyQ291bnQ+IG1fcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVyczsKIH07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3NqaXQvU3RhY2tBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3NqaXQvU3RhY2tBbGxvY2F0b3IuaAkocmV2aXNpb24gMTcwNDk5KQorKysgU291
cmNlL1dlYkNvcmUvY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQogCisjaW5jbHVkZSAi
UmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NYWNyb0Fzc2Vt
Ymxlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03MSwxMSArNzIsOSBAQCBwdWJsaWM6
CiAgICAgVmVjdG9yPFN0YWNrUmVmZXJlbmNlPiBwdXNoKGNvbnN0IFZlY3RvcjxKU0M6Ok1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEPiYgcmVnaXN0ZXJJRHMpCiAgICAgewogICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9oYXNGdW5jdGlvbkNhbGxQYWRkaW5nKTsKLSAgICAgICAgdW5zaWduZWQg
cmVnaXN0ZXJDb3VudCA9IHJlZ2lzdGVySURzLnNpemUoKTsKLSAgICAgICAgVmVjdG9yPFN0YWNr
UmVmZXJlbmNlPiBzdGFja1JlZmVyZW5jZXM7Ci0gICAgICAgIHN0YWNrUmVmZXJlbmNlcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHJlZ2lzdGVyQ291bnQpOworICAgICAgICBWZWN0b3I8U3RhY2tS
ZWZlcmVuY2UsIHJlZ2lzdGVyQ291bnQ+IHN0YWNrUmVmZXJlbmNlczsKICNpZiBDUFUoQVJNNjQp
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlckNvdW50IC0gMTsgaSAr
PSAyKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpc3RlcklEcy5zaXpl
KCkgLSAxOyBpICs9IDIpIHsKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hQYWlyKHJlZ2lz
dGVySURzW2kgKyAxXSwgcmVnaXN0ZXJJRHNbaV0pOwogICAgICAgICAgICAgbV9vZmZzZXRGcm9t
VG9wICs9IHN0YWNrVW5pdEluQnl0ZXMoKTsKICAgICAgICAgICAgIHN0YWNrUmVmZXJlbmNlcy5h
cHBlbmQoU3RhY2tSZWZlcmVuY2UobV9vZmZzZXRGcm9tVG9wIC0gc3RhY2tVbml0SW5CeXRlcygp
IC8gMikpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234081</attachid>
            <date>2014-06-30 11:14:04 -0700</date>
            <delta_ts>2014-06-30 11:21:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134416-20140630111344.patch</filename>
            <type>text/plain</type>
            <size>28353</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzA1ODgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE0LTA2LTMwICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIGR5bmFtaWMgbWVtb3J5
IGFsbG9jYXRpb24gaW4gY3NzIGppdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNDQxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL0RlcXVlLmg6CisgICAgICAgIEFkZGVkIGlubGluZUNhcGFj
aXR5IG9wdGlvbmFsIHRlbXBsYXRlIHBhcmFtZXRlci4KKwogMjAxNC0wNi0yNyAgQW5kcmVhcyBL
bGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW0FSTXY3XSBTa2lwIG9uZSBwYXJ0
aWN1bGFybHkgZXhwZW5zaXZlIGZhc3RGcmVlKCkgYWxpZ25tZW50IGNoZWNrLgpJbmRleDogU291
cmNlL1dURi93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5o
CShyZXZpc2lvbiAxNzA0OTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCwyNSArMzgsMjUgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjbGFzcyBEZXF1ZUl0ZXJhdG9yQmFzZTsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjbGFzcyBEZXF1ZUl0ZXJhdG9yOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNs
YXNzIERlcXVlQ29uc3RJdGVyYXRvcjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+IGNsYXNzIERlcXVlSXRlcmF0b3JCYXNlOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gY2xhc3MgRGVxdWVJdGVyYXRvcjsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGNsYXNzIERlcXVl
Q29uc3RJdGVyYXRvcjsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gMD4KICAgICBjbGFzcyBEZXF1ZSB7
CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAg
dHlwZWRlZiBEZXF1ZUl0ZXJhdG9yPFQ+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIERlcXVl
Q29uc3RJdGVyYXRvcjxUPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0
ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBEZXF1
ZUNvbnN0SXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAg
ICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRv
cjsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAKICAgICAgICAgRGVxdWUoKTsKLSAgICAgICAgRGVx
dWUoY29uc3QgRGVxdWU8VD4mKTsKLSAgICAgICAgRGVxdWUmIG9wZXJhdG9yPShjb25zdCBEZXF1
ZTxUPiYpOworICAgICAgICBEZXF1ZShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mKTsK
KyAgICAgICAgRGVxdWUmIG9wZXJhdG9yPShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4m
KTsKICAgICAgICAgfkRlcXVlKCk7CiAKLSAgICAgICAgdm9pZCBzd2FwKERlcXVlPFQ+Jik7Cisg
ICAgICAgIHZvaWQgc3dhcChEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mKTsKIAogICAgICAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQgPD0gbV9lbmQgPyBtX2VuZCAtIG1f
c3RhcnQgOiBtX2VuZCArIG1fYnVmZmVyLmNhcGFjaXR5KCkgLSBtX3N0YXJ0OyB9CiAgICAgICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQgPT0gbV9lbmQ7IH0KQEAgLTkx
LDExICs5MSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgZmluZElmKFBy
ZWRpY2F0ZSYmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBEZXF1ZUl0
ZXJhdG9yQmFzZTxUPjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIERlcXVlSXRlcmF0b3JCYXNlPFQs
IGlubGluZUNhcGFjaXR5PjsKIAotICAgICAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCAwPiBC
dWZmZXI7CisgICAgICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiBC
dWZmZXI7CiAgICAgICAgIHR5cGVkZWYgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD4gVHlwZU9wZXJh
dGlvbnM7Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRvckJhc2U8VD4gSXRlcmF0b3JCYXNl
OworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiBJ
dGVyYXRvckJhc2U7CiAKICAgICAgICAgdm9pZCByZW1vdmUoc2l6ZV90IHBvc2l0aW9uKTsKICAg
ICAgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CkBAIC0xMTMsMTEgKzExMywxMSBAQCBu
YW1lc3BhY2UgV1RGIHsKICNlbmRpZgogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgICBj
bGFzcyBEZXF1ZUl0ZXJhdG9yQmFzZSB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBEZXF1ZUl0
ZXJhdG9yQmFzZSgpOwotICAgICAgICBEZXF1ZUl0ZXJhdG9yQmFzZShjb25zdCBEZXF1ZTxUPios
IHNpemVfdCk7CisgICAgICAgIERlcXVlSXRlcmF0b3JCYXNlKGNvbnN0IERlcXVlPFQsIGlubGlu
ZUNhcGFjaXR5PiosIHNpemVfdCk7CiAgICAgICAgIERlcXVlSXRlcmF0b3JCYXNlKGNvbnN0IERl
cXVlSXRlcmF0b3JCYXNlJik7CiAgICAgICAgIERlcXVlSXRlcmF0b3JCYXNlJiBvcGVyYXRvcj0o
Y29uc3QgRGVxdWVJdGVyYXRvckJhc2UmKTsKICAgICAgICAgfkRlcXVlSXRlcmF0b3JCYXNlKCk7
CkBAIC0xMzgsMTAgKzEzOCwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdm9pZCBjaGVj
a1ZhbGlkaXR5KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgY2hlY2tWYWxpZGl0eShjb25zdCBEZXF1
ZUl0ZXJhdG9yQmFzZSYpIGNvbnN0OwogCi0gICAgICAgIERlcXVlPFQ+KiBtX2RlcXVlOworICAg
ICAgICBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4qIG1fZGVxdWU7CiAgICAgICAgIHNpemVfdCBt
X2luZGV4OwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBEZXF1ZTxUPjsKKyAgICAgICAgZnJpZW5k
IGNsYXNzIERlcXVlPFQsIGlubGluZUNhcGFjaXR5PjsKIAogI2lmbmRlZiBOREVCVUcKICAgICAg
ICAgbXV0YWJsZSBEZXF1ZUl0ZXJhdG9yQmFzZSogbV9uZXh0OwpAQCAtMTQ5LDExICsxNDksMTEg
QEAgbmFtZXNwYWNlIFdURiB7CiAjZW5kaWYKICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICBjbGFzcyBEZXF1ZUl0ZXJhdG9yIDogcHVibGljIERlcXVlSXRlcmF0b3JCYXNl
PFQ+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cisg
ICAgY2xhc3MgRGVxdWVJdGVyYXRvciA6IHB1YmxpYyBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxp
bmVDYXBhY2l0eT4gewogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRv
ckJhc2U8VD4gQmFzZTsKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yPFQ+IEl0ZXJhdG9y
OworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiBC
YXNlOworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IEl0
ZXJhdG9yOwogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CkBAIC0xNjIsNyArMTYyLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5
cGVkZWYgVCYgcmVmZXJlbmNlOwogICAgICAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9p
dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAKLSAgICAgICAgRGVxdWVJdGVyYXRvcihE
ZXF1ZTxUPiogZGVxdWUsIHNpemVfdCBpbmRleCkgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9Cisg
ICAgICAgIERlcXVlSXRlcmF0b3IoRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+KiBkZXF1ZSwgc2l6
ZV90IGluZGV4KQorICAgICAgICAgICAgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9CiAKICAgICAg
ICAgRGVxdWVJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgb3RoZXIpIDogQmFzZShvdGhlcikgeyB9
CiAgICAgICAgIERlcXVlSXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBJdGVyYXRvciYgb3RoZXIp
IHsgQmFzZTo6YXNzaWduKG90aGVyKTsgcmV0dXJuICp0aGlzOyB9CkBAIC0xNzksMTIgKzE4MCwx
MiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgLy8gcG9zdGZpeCAtLSBpbnRlbnRpb25hbGx5
IG9taXR0ZWQKICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBjbGFzcyBE
ZXF1ZUNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8VD4geworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBjbGFzcyBEZXF1
ZUNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNp
dHk+IHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQ+
IEJhc2U7Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVDb25zdEl0ZXJhdG9yPFQ+IEl0ZXJhdG9yOwot
ICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VD4gTm9uQ29uc3RJdGVyYXRvcjsKKyAgICAg
ICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKKyAg
ICAgICAgdHlwZWRlZiBEZXF1ZUNvbnN0SXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IEl0ZXJh
dG9yOworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IE5v
bkNvbnN0SXRlcmF0b3I7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKQEAgLTE5Myw3ICsxOTQsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgdHlwZWRlZiBjb25zdCBUJiByZWZlcmVuY2U7CiAgICAgICAgIHR5cGVkZWYgc3RkOjpi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKIAotICAgICAgICBE
ZXF1ZUNvbnN0SXRlcmF0b3IoY29uc3QgRGVxdWU8VD4qIGRlcXVlLCBzaXplX3QgaW5kZXgpIDog
QmFzZShkZXF1ZSwgaW5kZXgpIHsgfQorICAgICAgICBEZXF1ZUNvbnN0SXRlcmF0b3IoY29uc3Qg
RGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+KiBkZXF1ZSwgc2l6ZV90IGluZGV4KQorICAgICAgICAg
ICAgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9CiAKICAgICAgICAgRGVxdWVDb25zdEl0ZXJhdG9y
KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgOiBCYXNlKG90aGVyKSB7IH0KICAgICAgICAgRGVxdWVD
b25zdEl0ZXJhdG9yKGNvbnN0IE5vbkNvbnN0SXRlcmF0b3ImIG90aGVyKSA6IEJhc2Uob3RoZXIp
IHsgfQpAQCAtMjEzLDEyICsyMTUsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfTsKIAogI2lm
ZGVmIE5ERUJVRwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlPFQ+
OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QgeyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHZvaWQgRGVxdWU8VD46OmNoZWNrSW5kZXhWYWxpZGl0eShzaXplX3QpIGNvbnN0IHsgfQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlPFQ+OjppbnZhbGlkYXRl
SXRlcmF0b3JzKCkgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRp
dHkoKSBjb25zdCB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+IGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tJbmRleFZh
bGlkaXR5KHNpemVfdCkgY29uc3QgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46Omlu
dmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KICNlbHNlCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICB2b2lkIERlcXVlPFQ+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoKSBjb25zdAogICAgIHsKICAgICAgICAgLy8gSW4g
dGhpcyBpbXBsZW1lbnRhdGlvbiBhIGNhcGFjaXR5IG9mIDEgd291bGQgY29uZnVzZSBhcHBlbmQo
KSBhbmQKICAgICAgICAgLy8gb3RoZXIgcGxhY2VzIHRoYXQgYXNzdW1lIHRoZSBpbmRleCBhZnRl
ciBjYXBhY2l0eSAtIDEgaXMgMC4KQEAgLTIzMyw4ICsyMzUsOCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBE
ZXF1ZTxUPjo6Y2hlY2tJbmRleFZhbGlkaXR5KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZTxU
LCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrSW5kZXhWYWxpZGl0eShzaXplX3QgaW5kZXgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCBpbmRleCA8PSBtX2J1ZmZlci5j
YXBhY2l0eSgpKTsKICAgICAgICAgaWYgKG1fc3RhcnQgPD0gbV9lbmQpIHsKQEAgLTI0NSw4ICsy
NDcsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBEZXF1ZTxUPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycygpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHZvaWQg
RGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkKICAgICB7CiAg
ICAgICAgIEl0ZXJhdG9yQmFzZSogbmV4dDsKICAgICAgICAgZm9yIChJdGVyYXRvckJhc2UqIHAg
PSBtX2l0ZXJhdG9yczsgcDsgcCA9IG5leHQpIHsKQEAgLTI1OSw4ICsyNjEsOCBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICB9CiAjZW5kaWYKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
aW5saW5lIERlcXVlPFQ+OjpEZXF1ZSgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OkRl
cXVlKCkKICAgICAgICAgOiBtX3N0YXJ0KDApCiAgICAgICAgICwgbV9lbmQoMCkKICNpZm5kZWYg
TkRFQlVHCkBAIC0yNzAsOCArMjcyLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNr
VmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGlu
ZSBEZXF1ZTxUPjo6RGVxdWUoY29uc3QgRGVxdWU8VD4mIG90aGVyKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWU8VCwgaW5s
aW5lQ2FwYWNpdHk+OjpEZXF1ZShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mIG90aGVy
KQogICAgICAgICA6IG1fc3RhcnQob3RoZXIubV9zdGFydCkKICAgICAgICAgLCBtX2VuZChvdGhl
ci5tX2VuZCkKICAgICAgICAgLCBtX2J1ZmZlcihvdGhlci5tX2J1ZmZlci5jYXBhY2l0eSgpKQpA
QCAtMjg4LDE4ICsyOTAsMTggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZTxUPiYgRGVxdWU8VD46
Om9wZXJhdG9yPShjb25zdCBEZXF1ZTxUPiYgb3RoZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSBEZXF1ZTxULCBpbmxpbmVDYXBh
Y2l0eT4mIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6b3BlcmF0b3I9KGNvbnN0IERlcXVlPFQs
IGlubGluZUNhcGFjaXR5PiYgb3RoZXIpCiAgICAgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBp
cyBpbmVmZmljaWVudCBpZiB3ZSdyZSB1c2luZyBhbiBpbmxpbmUgYnVmZmVyIGFuZCBUIGlzCiAg
ICAgICAgIC8vIGV4cGVuc2l2ZSB0byBjb3B5IHNpbmNlIGl0IHdpbGwgY29weSB0aGUgYnVmZmVy
IHR3aWNlIGluc3RlYWQgb2Ygb25jZS4KLSAgICAgICAgRGVxdWU8VD4gY29weShvdGhlcik7Cisg
ICAgICAgIERlcXVlPFQsIGlubGluZUNhcGFjaXR5PiBjb3B5KG90aGVyKTsKICAgICAgICAgc3dh
cChjb3B5KTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OmRlc3Ryb3lBbGwoKQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9p
ZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmRlc3Ryb3lBbGwoKQogICAgIHsKICAgICAgICAg
aWYgKG1fc3RhcnQgPD0gbV9lbmQpCiAgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1
Y3QobV9idWZmZXIuYnVmZmVyKCkgKyBtX3N0YXJ0LCBtX2J1ZmZlci5idWZmZXIoKSArIG1fZW5k
KTsKQEAgLTMwOSwxNiArMzExLDE2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAgICAg
fQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgRGVxdWU8VD46On5EZXF1
ZSgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAg
IGlubGluZSBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46On5EZXF1ZSgpCiAgICAgewogICAgICAg
ICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKICAgICAg
ICAgZGVzdHJveUFsbCgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
aW5saW5lIHZvaWQgRGVxdWU8VD46OnN3YXAoRGVxdWU8VD4mIG90aGVyKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1
ZTxULCBpbmxpbmVDYXBhY2l0eT46OnN3YXAoRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+JiBvdGhl
cikKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgb3RoZXIuY2hlY2tW
YWxpZGl0eSgpOwpAQCAtMzMwLDggKzMzMiw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBv
dGhlci5jaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6Y2xlYXIoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OmNsZWFyKCkKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAg
ICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwpAQCAtMzQyLDkgKzM0NCw5IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgotICAgIGlubGluZSBhdXRvIERl
cXVlPFQ+OjpmaW5kSWYoUHJlZGljYXRlJiYgcHJlZGljYXRlKSAtPiBpdGVyYXRvcgorICAgIGlu
bGluZSBhdXRvIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6ZmluZElmKFByZWRpY2F0ZSYmIHBy
ZWRpY2F0ZSkgLT4gaXRlcmF0b3IKICAgICB7CiAgICAgICAgIGl0ZXJhdG9yIGVuZF9pdGVyYXRv
ciA9IGVuZCgpOwogICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5k
X2l0ZXJhdG9yOyArK2l0KSB7CkBAIC0zNTQsOCArMzU2LDggQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIHJldHVybiBlbmRfaXRlcmF0b3I7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6ZXhwYW5kQ2FwYWNpdHlJZk5lZWRlZCgp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlu
bGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHlJZk5lZWRl
ZCgpCiAgICAgewogICAgICAgICBpZiAobV9zdGFydCkgewogICAgICAgICAgICAgaWYgKG1fZW5k
ICsgMSAhPSBtX3N0YXJ0KQpAQCAtMzY5LDggKzM3MSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICBleHBhbmRDYXBhY2l0eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgdm9pZCBEZXF1ZTxUPjo6ZXhwYW5kQ2FwYWNpdHkoKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICB2b2lkIERlcXVlPFQsIGlubGluZUNh
cGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHkoKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgp
OwogICAgICAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBtX2J1ZmZlci5jYXBhY2l0eSgpOwpAQCAt
Mzg4LDI0ICszOTAsMjQgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHko
KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBhdXRvIERl
cXVlPFQ+Ojp0YWtlRmlyc3QoKSAtPiBUCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSBhdXRvIERlcXVlPFQsIGlubGluZUNhcGFjaXR5
Pjo6dGFrZUZpcnN0KCkgLT4gVAogICAgIHsKICAgICAgICAgVCBvbGRGaXJzdCA9IHN0ZDo6bW92
ZShmaXJzdCgpKTsKICAgICAgICAgcmVtb3ZlRmlyc3QoKTsKICAgICAgICAgcmV0dXJuIG9sZEZp
cnN0OwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGF1dG8g
RGVxdWU8VD46OnRha2VMYXN0KCkgLT4gVAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgYXV0byBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0
eT46OnRha2VMYXN0KCkgLT4gVAogICAgIHsKICAgICAgICAgVCBvbGRMYXN0ID0gc3RkOjptb3Zl
KGxhc3QoKSk7CiAgICAgICAgIHJlbW92ZUxhc3QoKTsKICAgICAgICAgcmV0dXJuIG9sZExhc3Q7
CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4K
LSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6YXBwZW5kKFUmJiB2YWx1ZSkKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+
CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcHBlbmQoVSYmIHZh
bHVlKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBleHBhbmRDYXBh
Y2l0eUlmTmVlZGVkKCk7CkBAIC00MTcsOCArNDE5LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIGlubGluZSB2b2lkIERlcXVlPFQ+OjpwcmVwZW5kKFUm
JiB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
IHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2Fw
YWNpdHk+OjpwcmVwZW5kKFUmJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHko
KTsKICAgICAgICAgZXhwYW5kQ2FwYWNpdHlJZk5lZWRlZCgpOwpAQCAtNDMwLDggKzQzMiw4IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6cmVtb3ZlRmly
c3QoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAg
ICBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUZpcnN0KCkKICAg
ICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
cygpOwpAQCAtNDQ0LDggKzQ0Niw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjaGVja1Zh
bGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUg
dm9pZCBEZXF1ZTxUPjo6cmVtb3ZlTGFzdCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFj
aXR5Pjo6cmVtb3ZlTGFzdCgpCiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAg
ICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKQEAgLTQ1OCwyMiArNDYwLDIyIEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6cmVtb3ZlKGl0ZXJhdG9yJiBp
dCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAg
aW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmUoaXRlcmF0b3ImIGl0
KQogICAgIHsKICAgICAgICAgaXQuY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZW1vdmUoaXQu
bV9pbmRleCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUg
dm9pZCBEZXF1ZTxUPjo6cmVtb3ZlKGNvbnN0X2l0ZXJhdG9yJiBpdCkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8
VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmUoY29uc3RfaXRlcmF0b3ImIGl0KQogICAgIHsKICAg
ICAgICAgaXQuY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZW1vdmUoaXQubV9pbmRleCk7CiAg
ICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxU
Pjo6cmVtb3ZlKHNpemVfdCBwb3NpdGlvbikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNp
dHk+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uKQogICAgIHsKICAgICAgICAgaWYgKHBvc2l0aW9u
ID09IG1fZW5kKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDk2LDI4ICs0OTgsMjggQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgfQogCiAjaWZkZWYgTkRFQlVHCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VD46OmNoZWNrVmFsaWRpdHkoKSBj
b25zdCB7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJh
dG9yQmFzZTxUPjo6Y2hlY2tWYWxpZGl0eShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiYpIGNv
bnN0IHsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0
b3JCYXNlPFQ+OjphZGRUb0l0ZXJhdG9yc0xpc3QoKSB7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6cmVtb3ZlRnJvbUl0ZXJhdG9y
c0xpc3QoKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hl
Y2tWYWxpZGl0eSgpIGNvbnN0IHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2Fw
YWNpdHk+OjpjaGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNh
cGFjaXR5PiYpIGNvbnN0IHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNp
dHk+OjphZGRUb0l0ZXJhdG9yc0xpc3QoKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlu
bGluZUNhcGFjaXR5Pjo6cmVtb3ZlRnJvbUl0ZXJhdG9yc0xpc3QoKSB7IH0KICNlbHNlCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpjaGVj
a1ZhbGlkaXR5KCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46
OmNoZWNrVmFsaWRpdHkoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZGVxdWUpOwog
ICAgICAgICBtX2RlcXVlLT5jaGVja0luZGV4VmFsaWRpdHkobV9pbmRleCk7CiAgICAgfQogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+Ojpj
aGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlJiBvdGhlcikgY29uc3QKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1
ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoY29uc3QgRGVx
dWVJdGVyYXRvckJhc2UmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0
eSgpOwogICAgICAgICBvdGhlci5jaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIEFTU0VSVChtX2Rl
cXVlID09IG90aGVyLm1fZGVxdWUpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6YWRkVG9JdGVyYXRvcnNMaXN0KCkKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBE
ZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmFkZFRvSXRlcmF0b3JzTGlzdCgp
CiAgICAgewogICAgICAgICBpZiAoIW1fZGVxdWUpCiAgICAgICAgICAgICBtX25leHQgPSAwOwpA
QCAtNTMwLDggKzUzMiw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBtX3ByZXZpb3VzID0g
MDsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRGVxdWVJdGVy
YXRvckJhc2U8VD46OnJlbW92ZUZyb21JdGVyYXRvcnNMaXN0KCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFz
ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUZyb21JdGVyYXRvcnNMaXN0KCkKICAgICB7CiAg
ICAgICAgIGlmICghbV9kZXF1ZSkgewogICAgICAgICAgICAgQVNTRVJUKCFtX25leHQpOwpAQCAt
NTU1LDIzICs1NTcsMjMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogI2VuZGlmCiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6RGVx
dWVJdGVyYXRvckJhc2UoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+
OjpEZXF1ZUl0ZXJhdG9yQmFzZSgpCiAgICAgICAgIDogbV9kZXF1ZSgwKQogICAgIHsKICAgICB9
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFz
ZTxUPjo6RGVxdWVJdGVyYXRvckJhc2UoY29uc3QgRGVxdWU8VD4qIGRlcXVlLCBzaXplX3QgaW5k
ZXgpCi0gICAgICAgIDogbV9kZXF1ZShjb25zdF9jYXN0PERlcXVlPFQ+Kj4oZGVxdWUpKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUg
RGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpEZXF1ZUl0ZXJhdG9yQmFzZShj
b25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4qIGRlcXVlLCBzaXplX3QgaW5kZXgpCisgICAg
ICAgIDogbV9kZXF1ZShjb25zdF9jYXN0PERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pio+KGRlcXVl
KSkKICAgICAgICAgLCBtX2luZGV4KGluZGV4KQogICAgIHsKICAgICAgICAgYWRkVG9JdGVyYXRv
cnNMaXN0KCk7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6RGVxdWVJdGVy
YXRvckJhc2UoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90aGVyKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWVJdGVyYXRv
ckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpEZXF1ZUl0ZXJhdG9yQmFzZShjb25zdCBEZXF1ZUl0
ZXJhdG9yQmFzZSYgb3RoZXIpCiAgICAgICAgIDogbV9kZXF1ZShvdGhlci5tX2RlcXVlKQogICAg
ICAgICAsIG1faW5kZXgob3RoZXIubV9pbmRleCkKICAgICB7CkBAIC01NzksOCArNTgxLDggQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiYgRGVx
dWVJdGVyYXRvckJhc2U8VD46Om9wZXJhdG9yPShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZSYgb3Ro
ZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAg
IGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4mIERlcXVlSXRlcmF0
b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6b3BlcmF0b3I9KGNvbnN0IERlcXVlSXRlcmF0b3JC
YXNlJiBvdGhlcikKICAgICB7CiAgICAgICAgIG90aGVyLmNoZWNrVmFsaWRpdHkoKTsKICAgICAg
ICAgcmVtb3ZlRnJvbUl0ZXJhdG9yc0xpc3QoKTsKQEAgLTU5Miw4ICs1OTQsOCBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgaW5saW5lIERlcXVlSXRlcmF0b3JCYXNlPFQ+Ojp+RGVxdWVJdGVyYXRv
ckJhc2UoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4K
KyAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+Ojp+RGVxdWVJ
dGVyYXRvckJhc2UoKQogICAgIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHJlbW92ZUZyb21J
dGVyYXRvcnNMaXN0KCk7CkBAIC02MDEsMTUgKzYwMywxNSBAQCBuYW1lc3BhY2UgV1RGIHsKICNl
bmRpZgogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wg
RGVxdWVJdGVyYXRvckJhc2U8VD46OmlzRXF1YWwoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90
aGVyKSBjb25zdAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4KKyAgICBpbmxpbmUgYm9vbCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46
OmlzRXF1YWwoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90aGVyKSBjb25zdAogICAgIHsKICAg
ICAgICAgY2hlY2tWYWxpZGl0eShvdGhlcik7CiAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90
aGVyLm1faW5kZXg7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxp
bmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6aW5jcmVtZW50KCkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWVJ
dGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjppbmNyZW1lbnQoKQogICAgIHsKICAgICAg
ICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBBU1NFUlQobV9pbmRleCAhPSBtX2RlcXVlLT5t
X2VuZCk7CkBAIC02MjEsOCArNjIzLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNr
VmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGlu
ZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpkZWNyZW1lbnQoKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZUl0
ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmRlY3JlbWVudCgpCiAgICAgewogICAgICAg
ICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIEFTU0VSVChtX2luZGV4ICE9IG1fZGVxdWUtPm1f
c3RhcnQpOwpAQCAtNjM0LDE2ICs2MzYsMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNo
ZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlu
bGluZSBUKiBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6YWZ0ZXIoKSBjb25zdAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgVCogRGVxdWVJ
dGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjphZnRlcigpIGNvbnN0CiAgICAgewogICAg
ICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIEFTU0VSVChtX2luZGV4ICE9IG1fZGVxdWUt
Pm1fZW5kKTsKICAgICAgICAgcmV0dXJuICZtX2RlcXVlLT5tX2J1ZmZlci5idWZmZXIoKVttX2lu
ZGV4XTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBUKiBE
ZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6YmVmb3JlKCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIFQqIERlcXVlSXRlcmF0b3JC
YXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6YmVmb3JlKCkgY29uc3QKICAgICB7CiAgICAgICAgIGNo
ZWNrVmFsaWRpdHkoKTsKICAgICAgICAgQVNTRVJUKG1faW5kZXggIT0gbV9kZXF1ZS0+bV9zdGFy
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzA1ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxNC0wNi0zMCAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlZHVj
ZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIGluIGNzcyBqaXQuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ0MTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNzc2ppdC9GdW5jdGlvbkNhbGwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZ1bmN0aW9uQ2FsbDo6c2F2ZUFsbG9jYXRlZFJlZ2lzdGVycyk6
CisgICAgICAgICogY3Nzaml0L1JlZ2lzdGVyQWxsb2NhdG9yLmg6CisgICAgICAgICogY3Nzaml0
L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxl
cjo6YWRkUHNldWRvQ2xhc3NUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZUVsZW1lbnRJc050aENoaWxkKToKKyAgICAgICAgKiBjc3NqaXQvU3RhY2tBbGxvY2F0
b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YWNrQWxsb2NhdG9yOjpwdXNoKToKKyAgICAgICAg
VXNlIGlubGluZUNhcGFjaXR5IHRlbXBsYXRlIHBhcmFtZXRlciB0byByZWR1Y2UgbWFsbG9jIGNh
bGxzLgorICAgICAgICBJIHVzZSAzMiBhcyB0aGUgaW5saW5lIGNhcGFjaXR5IGZvciBub24tcmVn
aXN0ZXIgcmVsYXRlZCB2ZWN0b3JzIGJlY2F1c2UgdGhhdAorICAgICAgICBpcyBwcm9iYWJseSBi
aWcgZW5vdWdoIGZvciB0aGUgc2VsZWN0b3IgY29tcGlsZXIsIGFuZCBpZiBpdCBpcyBub3QgdGhl
biBhIG1hbGxvYworICAgICAgICBjYWxsIHdpbGwgbm90IGJlIHNpZ25pZmljYW50IGJlY2F1c2Ug
dGhlIHNlbGVjdG9yIGlzIHZlcnkgY29tcGxleC4KKwogMjAxNC0wNi0zMCAgQWxleCBDaHJpc3Rl
bnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSB3ZWJraXQg
cHJlZml4IGZyb20gcG9pbnRlciBsb2NrLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1
bmN0aW9uQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9GdW5jdGlv
bkNhbGwuaAkocmV2aXNpb24gMTcwNDk5KQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L0Z1bmN0
aW9uQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRnVuY3Rpb25DYWxsIHsKIHB1YmxpYzoKLSAgICBGdW5jdGlvbkNhbGwo
SlNDOjpNYWNyb0Fzc2VtYmxlciYgYXNzZW1ibGVyLCBSZWdpc3RlckFsbG9jYXRvciYgcmVnaXN0
ZXJBbGxvY2F0b3IsIFN0YWNrQWxsb2NhdG9yJiBzdGFja0FsbG9jYXRvciwgVmVjdG9yPHN0ZDo6
cGFpcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxsLCBKU0M6OkZ1bmN0aW9uUHRyPj4mIGNhbGxS
ZWdpc3RyeSkKKyAgICBGdW5jdGlvbkNhbGwoSlNDOjpNYWNyb0Fzc2VtYmxlciYgYXNzZW1ibGVy
LCBSZWdpc3RlckFsbG9jYXRvciYgcmVnaXN0ZXJBbGxvY2F0b3IsIFN0YWNrQWxsb2NhdG9yJiBz
dGFja0FsbG9jYXRvciwgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxs
LCBKU0M6OkZ1bmN0aW9uUHRyPiwgMzI+JiBjYWxsUmVnaXN0cnkpCiAgICAgICAgIDogbV9hc3Nl
bWJsZXIoYXNzZW1ibGVyKQogICAgICAgICAsIG1fcmVnaXN0ZXJBbGxvY2F0b3IocmVnaXN0ZXJB
bGxvY2F0b3IpCiAgICAgICAgICwgbV9zdGFja0FsbG9jYXRvcihzdGFja0FsbG9jYXRvcikKQEAg
LTE2Miw3ICsxNjIsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUKG1fc2F2ZWRS
ZWdpc3RlclN0YWNrUmVmZXJlbmNlcy5pc0VtcHR5KCkpOwogICAgICAgICBjb25zdCBWZWN0b3I8
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgcmVnaXN0ZXJDb3VudD4mIGFsbG9jYXRl
ZFJlZ2lzdGVycyA9IG1fcmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVkUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgIFZlY3RvcjxTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2U+IHN0YWNrUmVmZXJl
bmNlcyA9IG1fc3RhY2tBbGxvY2F0b3IucHVzaChhbGxvY2F0ZWRSZWdpc3RlcnMpOworICAgICAg
ICBWZWN0b3I8U3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlLCByZWdpc3RlckNvdW50PiBz
dGFja1JlZmVyZW5jZXMgPSBtX3N0YWNrQWxsb2NhdG9yLnB1c2goYWxsb2NhdGVkUmVnaXN0ZXJz
KTsKICAgICAgICAgbV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzLmFwcGVuZFZlY3Rvcihz
dGFja1JlZmVyZW5jZXMpOwogICAgIH0KIApAQCAtMTc1LDkgKzE3NSw5IEBAIHByaXZhdGU6CiAg
ICAgSlNDOjpNYWNyb0Fzc2VtYmxlciYgbV9hc3NlbWJsZXI7CiAgICAgUmVnaXN0ZXJBbGxvY2F0
b3ImIG1fcmVnaXN0ZXJBbGxvY2F0b3I7CiAgICAgU3RhY2tBbGxvY2F0b3ImIG1fc3RhY2tBbGxv
Y2F0b3I7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxsLCBK
U0M6OkZ1bmN0aW9uUHRyPj4mIG1fY2FsbFJlZ2lzdHJ5OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q2FsbCwgSlNDOjpGdW5jdGlvblB0cj4sIDMyPiYgbV9jYWxs
UmVnaXN0cnk7CiAKLSAgICBWZWN0b3I8U3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlPiBt
X3NhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXM7CisgICAgVmVjdG9yPFN0YWNrQWxsb2NhdG9y
OjpTdGFja1JlZmVyZW5jZSwgcmVnaXN0ZXJDb3VudD4gbV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZl
cmVuY2VzOwogCiAgICAgSlNDOjpGdW5jdGlvblB0ciBtX2Z1bmN0aW9uQWRkcmVzczsKICAgICB1
bnNpZ25lZCBtX2FyZ3VtZW50Q291bnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvUmVn
aXN0ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvUmVn
aXN0ZXJBbGxvY2F0b3IuaAkocmV2aXNpb24gMTcwNDk5KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
aml0L1JlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw3ICsxODMsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIERlcXVlPEpTQzo6TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+IG1fcmVnaXN0ZXJzOworICAgIERlcXVlPEpTQzo6TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQsIHJlZ2lzdGVyQ291bnQ+IG1fcmVnaXN0ZXJzOwogICAgIFZlY3RvcjxK
U0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklELCByZWdpc3RlckNvdW50PiBtX2FsbG9jYXRl
ZFJlZ2lzdGVyczsKICAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwg
Y2FsbGVlU2F2ZWRSZWdpc3RlckNvdW50PiBtX3Jlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnM7
CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAko
cmV2aXNpb24gMTcwNDk5KQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksMTEgKzE1OSwxMSBAQCBzdHJ1Y3QgU2VsZWN0
b3JGcmFnbWVudCB7CiAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogdGFnTmFtZTsKICAgICBjb25z
dCBBdG9taWNTdHJpbmcqIGlkOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyogbGFuZ0ZpbHRlcjsK
LSAgICBWZWN0b3I8Y29uc3QgQXRvbWljU3RyaW5nSW1wbCosIDE+IGNsYXNzTmFtZXM7CisgICAg
VmVjdG9yPGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqLCAzMj4gY2xhc3NOYW1lczsKICAgICBIYXNo
U2V0PHVuc2lnbmVkPiBwc2V1ZG9DbGFzc2VzOwotICAgIFZlY3RvcjxKU0M6OkZ1bmN0aW9uUHRy
PiB1bm9wdGltaXplZFBzZXVkb0NsYXNzZXM7Ci0gICAgVmVjdG9yPEF0dHJpYnV0ZU1hdGNoaW5n
SW5mbz4gYXR0cmlidXRlczsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPGludCwgaW50Pj4gbnRoQ2hp
bGRGaWx0ZXJzOworICAgIFZlY3RvcjxKU0M6OkZ1bmN0aW9uUHRyLCAzMj4gdW5vcHRpbWl6ZWRQ
c2V1ZG9DbGFzc2VzOworICAgIFZlY3RvcjxBdHRyaWJ1dGVNYXRjaGluZ0luZm8sIDMyPiBhdHRy
aWJ1dGVzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8aW50LCBpbnQ+LCAzMj4gbnRoQ2hpbGRGaWx0
ZXJzOwogICAgIFZlY3RvcjxTZWxlY3RvckZyYWdtZW50PiBub3RGaWx0ZXJzOwogICAgIFZlY3Rv
cjxWZWN0b3I8U2VsZWN0b3JGcmFnbWVudD4+IGFueUZpbHRlcnM7CiAKQEAgLTE5Miw4ICsxOTIs
OCBAQCBzdHJ1Y3QgVGFnTmFtZVBhdHRlcm4gewogfTsKIAogdHlwZWRlZiBKU0M6Ok1hY3JvQXNz
ZW1ibGVyIEFzc2VtYmxlcjsKLXR5cGVkZWYgVmVjdG9yPFNlbGVjdG9yRnJhZ21lbnQsIDg+IFNl
bGVjdG9yRnJhZ21lbnRMaXN0OwotdHlwZWRlZiBWZWN0b3I8VGFnTmFtZVBhdHRlcm4sIDg+IFRh
Z05hbWVMaXN0OwordHlwZWRlZiBWZWN0b3I8U2VsZWN0b3JGcmFnbWVudCwgMzI+IFNlbGVjdG9y
RnJhZ21lbnRMaXN0OwordHlwZWRlZiBWZWN0b3I8VGFnTmFtZVBhdHRlcm4sIDMyPiBUYWdOYW1l
TGlzdDsKIAogY2xhc3MgU2VsZWN0b3JDb2RlR2VuZXJhdG9yIHsKIHB1YmxpYzoKQEAgLTI2NSwx
MiArMjY1LDEyIEBAIHByaXZhdGU6CiAKICAgICBib29sIGdlbmVyYXRlUHJvbG9ndWUoKTsKICAg
ICB2b2lkIGdlbmVyYXRlRXBpbG9ndWUoKTsKLSAgICBWZWN0b3I8U3RhY2tBbGxvY2F0b3I6OlN0
YWNrUmVmZXJlbmNlPiBtX3Byb2xvZ3VlU3RhY2tSZWZlcmVuY2VzOworICAgIFZlY3RvcjxTdGFj
a0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2UsIHJlZ2lzdGVyQ291bnQ+IG1fcHJvbG9ndWVTdGFj
a1JlZmVyZW5jZXM7CiAKICAgICBBc3NlbWJsZXIgbV9hc3NlbWJsZXI7CiAgICAgUmVnaXN0ZXJB
bGxvY2F0b3IgbV9yZWdpc3RlckFsbG9jYXRvcjsKICAgICBTdGFja0FsbG9jYXRvciBtX3N0YWNr
QWxsb2NhdG9yOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXNzZW1ibGVyOjpDYWxsLCBKU0M6OkZ1
bmN0aW9uUHRyPj4gbV9mdW5jdGlvbkNhbGxzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXNzZW1i
bGVyOjpDYWxsLCBKU0M6OkZ1bmN0aW9uUHRyPiwgMzI+IG1fZnVuY3Rpb25DYWxsczsKIAogICAg
IFNlbGVjdG9yQ29udGV4dCBtX3NlbGVjdG9yQ29udGV4dDsKICAgICBGdW5jdGlvblR5cGUgbV9m
dW5jdGlvblR5cGU7CkBAIC00NzYsNyArNDc2LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5
cGUgYWRkUHNldWRvQ2xhcwogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnk6
CiAgICAgICAgIHsKLSAgICAgICAgICAgIFZlY3RvcjxTZWxlY3RvckZyYWdtZW50PiBhbnlGcmFn
bWVudHM7CisgICAgICAgICAgICBWZWN0b3I8U2VsZWN0b3JGcmFnbWVudCwgMzI+IGFueUZyYWdt
ZW50czsKICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBGdW5jdGlvblR5
cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2Vs
ZWN0b3IqIHJvb3RTZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBy
b290U2VsZWN0b3I7IHJvb3RTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChyb290U2Vs
ZWN0b3IpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3QgZnJhZ21lbnRM
aXN0OwpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAgaW5saW5lIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcgogCiBib29sIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3Rv
ckNoZWNrZXIoKQogewotICAgIFZlY3RvcjxTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2U+
IGNhbGxlZVNhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXM7CisgICAgVmVjdG9yPFN0YWNrQWxs
b2NhdG9yOjpTdGFja1JlZmVyZW5jZSwgY2FsbGVlU2F2ZWRSZWdpc3RlckNvdW50PiBjYWxsZWVT
YXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzOwogICAgIGJvb2wgcmVzZXJ2ZWRDYWxsZWVTYXZl
ZFJlZ2lzdGVycyA9IGZhbHNlOwogICAgIHVuc2lnbmVkIGF2YWlsYWJsZVJlZ2lzdGVyQ291bnQg
PSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmF2YWlsYWJsZVJlZ2lzdGVyQ291bnQoKTsKICAgICB1bnNp
Z25lZCBtaW5pbXVtUmVnaXN0ZXJDb3VudEZvckF0dHJpYnV0ZXMgPSBtaW5pbXVtUmVnaXN0ZXJS
ZXF1aXJlbWVudHMobV9zZWxlY3RvckZyYWdtZW50cyk7CkBAIC0yNTkwLDcgKzI1OTAsNyBAQCB2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIHBhcmVudEVsZW1lbnQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVn
aXN0ZXIoKTsKICAgICBnZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1lbnQoZmFpbHVyZUNhc2VzLCBw
YXJlbnRFbGVtZW50KTsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8aW50LCBpbnQ+PiB2YWxpZFN1
YnNldEZpbHRlcnM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxpbnQsIGludD4sIDMyPiB2YWxpZFN1
YnNldEZpbHRlcnM7CiAgICAgdmFsaWRTdWJzZXRGaWx0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoZnJhZ21lbnQubnRoQ2hpbGRGaWx0ZXJzLnNpemUoKSk7CiAgICAgZm9yIChjb25zdCBhdXRv
JiBzbG90IDogZnJhZ21lbnQubnRoQ2hpbGRGaWx0ZXJzKSB7CiAgICAgICAgIGludCBhID0gc2xv
dC5maXJzdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oCShyZXZp
c2lvbiAxNzA0OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU3RhY2tBbGxvY2F0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKENTU19TRUxFQ1RP
Ul9KSVQpCiAKKyNpbmNsdWRlICJSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL01hY3JvQXNzZW1ibGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY4
LDE0ICs2OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdGFja1JlZmVyZW5jZShtX29m
ZnNldEZyb21Ub3ApOwogICAgIH0KIAotICAgIFZlY3RvcjxTdGFja1JlZmVyZW5jZT4gcHVzaChj
b25zdCBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4mIHJlZ2lzdGVySURz
KQorICAgIFZlY3RvcjxTdGFja1JlZmVyZW5jZSwgcmVnaXN0ZXJDb3VudD4gcHVzaChjb25zdCBW
ZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4mIHJlZ2lzdGVySURzKQogICAg
IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGFzRnVuY3Rpb25DYWxsUGFkZGluZyk7Ci0g
ICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSByZWdpc3RlcklEcy5zaXplKCk7Ci0gICAg
ICAgIFZlY3RvcjxTdGFja1JlZmVyZW5jZT4gc3RhY2tSZWZlcmVuY2VzOwotICAgICAgICBzdGFj
a1JlZmVyZW5jZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZWdpc3RlckNvdW50KTsKKyAgICAg
ICAgVmVjdG9yPFN0YWNrUmVmZXJlbmNlLCByZWdpc3RlckNvdW50PiBzdGFja1JlZmVyZW5jZXM7
CiAjaWYgQ1BVKEFSTTY0KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0
ZXJDb3VudCAtIDE7IGkgKz0gMikgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVnaXN0ZXJJRHMuc2l6ZSgpIC0gMTsgaSArPSAyKSB7CiAgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5wdXNoUGFpcihyZWdpc3RlcklEc1tpICsgMV0sIHJlZ2lzdGVySURzW2ldKTsKICAgICAgICAg
ICAgIG1fb2Zmc2V0RnJvbVRvcCArPSBzdGFja1VuaXRJbkJ5dGVzKCk7CiAgICAgICAgICAgICBz
dGFja1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCAtIHN0
YWNrVW5pdEluQnl0ZXMoKSAvIDIpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234083</attachid>
            <date>2014-06-30 11:21:10 -0700</date>
            <delta_ts>2014-07-01 11:55:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134416-20140630112050.patch</filename>
            <type>text/plain</type>
            <size>28236</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzA1OTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE0LTA2LTMwICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIGR5bmFtaWMgbWVtb3J5
IGFsbG9jYXRpb24gaW4gY3NzIGppdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNDQxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL0RlcXVlLmg6CisgICAgICAgIEFkZGVkIGlubGluZUNhcGFj
aXR5IG9wdGlvbmFsIHRlbXBsYXRlIHBhcmFtZXRlci4KKwogMjAxNC0wNi0yNyAgQW5kcmVhcyBL
bGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW0FSTXY3XSBTa2lwIG9uZSBwYXJ0
aWN1bGFybHkgZXhwZW5zaXZlIGZhc3RGcmVlKCkgYWxpZ25tZW50IGNoZWNrLgpJbmRleDogU291
cmNlL1dURi93dGYvRGVxdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5o
CShyZXZpc2lvbiAxNzA1OTApCisrKyBTb3VyY2UvV1RGL3d0Zi9EZXF1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCwyNSArMzgsMjUgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjbGFzcyBEZXF1ZUl0ZXJhdG9yQmFzZTsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjbGFzcyBEZXF1ZUl0ZXJhdG9yOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNs
YXNzIERlcXVlQ29uc3RJdGVyYXRvcjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+IGNsYXNzIERlcXVlSXRlcmF0b3JCYXNlOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gY2xhc3MgRGVxdWVJdGVyYXRvcjsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGNsYXNzIERlcXVl
Q29uc3RJdGVyYXRvcjsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5ID0gMD4KICAgICBjbGFzcyBEZXF1ZSB7
CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAg
dHlwZWRlZiBEZXF1ZUl0ZXJhdG9yPFQ+IGl0ZXJhdG9yOwotICAgICAgICB0eXBlZGVmIERlcXVl
Q29uc3RJdGVyYXRvcjxUPiBjb25zdF9pdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0
ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBpdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBEZXF1
ZUNvbnN0SXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IGNvbnN0X2l0ZXJhdG9yOwogICAgICAg
ICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRv
cjsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAKICAgICAgICAgRGVxdWUoKTsKLSAgICAgICAgRGVx
dWUoY29uc3QgRGVxdWU8VD4mKTsKLSAgICAgICAgRGVxdWUmIG9wZXJhdG9yPShjb25zdCBEZXF1
ZTxUPiYpOworICAgICAgICBEZXF1ZShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mKTsK
KyAgICAgICAgRGVxdWUmIG9wZXJhdG9yPShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4m
KTsKICAgICAgICAgfkRlcXVlKCk7CiAKLSAgICAgICAgdm9pZCBzd2FwKERlcXVlPFQ+Jik7Cisg
ICAgICAgIHZvaWQgc3dhcChEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mKTsKIAogICAgICAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQgPD0gbV9lbmQgPyBtX2VuZCAtIG1f
c3RhcnQgOiBtX2VuZCArIG1fYnVmZmVyLmNhcGFjaXR5KCkgLSBtX3N0YXJ0OyB9CiAgICAgICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQgPT0gbV9lbmQ7IH0KQEAgLTkx
LDExICs5MSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgaXRlcmF0b3IgZmluZElmKFBy
ZWRpY2F0ZSYmKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBEZXF1ZUl0
ZXJhdG9yQmFzZTxUPjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIERlcXVlSXRlcmF0b3JCYXNlPFQs
IGlubGluZUNhcGFjaXR5PjsKIAotICAgICAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCAwPiBC
dWZmZXI7CisgICAgICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQsIGlubGluZUNhcGFjaXR5PiBC
dWZmZXI7CiAgICAgICAgIHR5cGVkZWYgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD4gVHlwZU9wZXJh
dGlvbnM7Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRvckJhc2U8VD4gSXRlcmF0b3JCYXNl
OworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiBJ
dGVyYXRvckJhc2U7CiAKICAgICAgICAgdm9pZCByZW1vdmUoc2l6ZV90IHBvc2l0aW9uKTsKICAg
ICAgICAgdm9pZCBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CkBAIC0xMTMsMTEgKzExMywxMSBAQCBu
YW1lc3BhY2UgV1RGIHsKICNlbmRpZgogICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgICBj
bGFzcyBEZXF1ZUl0ZXJhdG9yQmFzZSB7CiAgICAgcHJvdGVjdGVkOgogICAgICAgICBEZXF1ZUl0
ZXJhdG9yQmFzZSgpOwotICAgICAgICBEZXF1ZUl0ZXJhdG9yQmFzZShjb25zdCBEZXF1ZTxUPios
IHNpemVfdCk7CisgICAgICAgIERlcXVlSXRlcmF0b3JCYXNlKGNvbnN0IERlcXVlPFQsIGlubGlu
ZUNhcGFjaXR5PiosIHNpemVfdCk7CiAgICAgICAgIERlcXVlSXRlcmF0b3JCYXNlKGNvbnN0IERl
cXVlSXRlcmF0b3JCYXNlJik7CiAgICAgICAgIERlcXVlSXRlcmF0b3JCYXNlJiBvcGVyYXRvcj0o
Y29uc3QgRGVxdWVJdGVyYXRvckJhc2UmKTsKICAgICAgICAgfkRlcXVlSXRlcmF0b3JCYXNlKCk7
CkBAIC0xMzgsMTAgKzEzOCwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdm9pZCBjaGVj
a1ZhbGlkaXR5KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgY2hlY2tWYWxpZGl0eShjb25zdCBEZXF1
ZUl0ZXJhdG9yQmFzZSYpIGNvbnN0OwogCi0gICAgICAgIERlcXVlPFQ+KiBtX2RlcXVlOworICAg
ICAgICBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4qIG1fZGVxdWU7CiAgICAgICAgIHNpemVfdCBt
X2luZGV4OwogCi0gICAgICAgIGZyaWVuZCBjbGFzcyBEZXF1ZTxUPjsKKyAgICAgICAgZnJpZW5k
IGNsYXNzIERlcXVlPFQsIGlubGluZUNhcGFjaXR5PjsKIAogI2lmbmRlZiBOREVCVUcKICAgICAg
ICAgbXV0YWJsZSBEZXF1ZUl0ZXJhdG9yQmFzZSogbV9uZXh0OwpAQCAtMTQ5LDExICsxNDksMTEg
QEAgbmFtZXNwYWNlIFdURiB7CiAjZW5kaWYKICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICBjbGFzcyBEZXF1ZUl0ZXJhdG9yIDogcHVibGljIERlcXVlSXRlcmF0b3JCYXNl
PFQ+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cisg
ICAgY2xhc3MgRGVxdWVJdGVyYXRvciA6IHB1YmxpYyBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxp
bmVDYXBhY2l0eT4gewogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRv
ckJhc2U8VD4gQmFzZTsKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yPFQ+IEl0ZXJhdG9y
OworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiBC
YXNlOworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IEl0
ZXJhdG9yOwogCiAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CkBAIC0xNjIsNyArMTYyLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5
cGVkZWYgVCYgcmVmZXJlbmNlOwogICAgICAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9p
dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAKLSAgICAgICAgRGVxdWVJdGVyYXRvcihE
ZXF1ZTxUPiogZGVxdWUsIHNpemVfdCBpbmRleCkgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9Cisg
ICAgICAgIERlcXVlSXRlcmF0b3IoRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+KiBkZXF1ZSwgc2l6
ZV90IGluZGV4KQorICAgICAgICAgICAgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9CiAKICAgICAg
ICAgRGVxdWVJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgb3RoZXIpIDogQmFzZShvdGhlcikgeyB9
CiAgICAgICAgIERlcXVlSXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBJdGVyYXRvciYgb3RoZXIp
IHsgQmFzZTo6YXNzaWduKG90aGVyKTsgcmV0dXJuICp0aGlzOyB9CkBAIC0xNzksMTIgKzE4MCwx
MiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgLy8gcG9zdGZpeCAtLSBpbnRlbnRpb25hbGx5
IG9taXR0ZWQKICAgICB9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBjbGFzcyBE
ZXF1ZUNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8VD4geworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBjbGFzcyBEZXF1
ZUNvbnN0SXRlcmF0b3IgOiBwdWJsaWMgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNp
dHk+IHsKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQ+
IEJhc2U7Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVDb25zdEl0ZXJhdG9yPFQ+IEl0ZXJhdG9yOwot
ICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VD4gTm9uQ29uc3RJdGVyYXRvcjsKKyAgICAg
ICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKKyAg
ICAgICAgdHlwZWRlZiBEZXF1ZUNvbnN0SXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IEl0ZXJh
dG9yOworICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3I8VCwgaW5saW5lQ2FwYWNpdHk+IE5v
bkNvbnN0SXRlcmF0b3I7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKQEAgLTE5Myw3ICsxOTQsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgdHlwZWRlZiBjb25zdCBUJiByZWZlcmVuY2U7CiAgICAgICAgIHR5cGVkZWYgc3RkOjpi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKIAotICAgICAgICBE
ZXF1ZUNvbnN0SXRlcmF0b3IoY29uc3QgRGVxdWU8VD4qIGRlcXVlLCBzaXplX3QgaW5kZXgpIDog
QmFzZShkZXF1ZSwgaW5kZXgpIHsgfQorICAgICAgICBEZXF1ZUNvbnN0SXRlcmF0b3IoY29uc3Qg
RGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+KiBkZXF1ZSwgc2l6ZV90IGluZGV4KQorICAgICAgICAg
ICAgOiBCYXNlKGRlcXVlLCBpbmRleCkgeyB9CiAKICAgICAgICAgRGVxdWVDb25zdEl0ZXJhdG9y
KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgOiBCYXNlKG90aGVyKSB7IH0KICAgICAgICAgRGVxdWVD
b25zdEl0ZXJhdG9yKGNvbnN0IE5vbkNvbnN0SXRlcmF0b3ImIG90aGVyKSA6IEJhc2Uob3RoZXIp
IHsgfQpAQCAtMjEzLDEyICsyMTUsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfTsKIAogI2lm
ZGVmIE5ERUJVRwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlPFQ+
OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QgeyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIHZvaWQgRGVxdWU8VD46OmNoZWNrSW5kZXhWYWxpZGl0eShzaXplX3QpIGNvbnN0IHsgfQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlPFQ+OjppbnZhbGlkYXRl
SXRlcmF0b3JzKCkgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRp
dHkoKSBjb25zdCB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+IGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tJbmRleFZh
bGlkaXR5KHNpemVfdCkgY29uc3QgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46Omlu
dmFsaWRhdGVJdGVyYXRvcnMoKSB7IH0KICNlbHNlCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICB2b2lkIERlcXVlPFQ+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoKSBjb25zdAogICAgIHsKICAgICAgICAgLy8gSW4g
dGhpcyBpbXBsZW1lbnRhdGlvbiBhIGNhcGFjaXR5IG9mIDEgd291bGQgY29uZnVzZSBhcHBlbmQo
KSBhbmQKICAgICAgICAgLy8gb3RoZXIgcGxhY2VzIHRoYXQgYXNzdW1lIHRoZSBpbmRleCBhZnRl
ciBjYXBhY2l0eSAtIDEgaXMgMC4KQEAgLTIzMyw4ICsyMzUsOCBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBE
ZXF1ZTxUPjo6Y2hlY2tJbmRleFZhbGlkaXR5KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZTxU
LCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrSW5kZXhWYWxpZGl0eShzaXplX3QgaW5kZXgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKGluZGV4LCBpbmRleCA8PSBtX2J1ZmZlci5j
YXBhY2l0eSgpKTsKICAgICAgICAgaWYgKG1fc3RhcnQgPD0gbV9lbmQpIHsKQEAgLTI0NSw4ICsy
NDcsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBEZXF1ZTxUPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycygpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHZvaWQg
RGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkKICAgICB7CiAg
ICAgICAgIEl0ZXJhdG9yQmFzZSogbmV4dDsKICAgICAgICAgZm9yIChJdGVyYXRvckJhc2UqIHAg
PSBtX2l0ZXJhdG9yczsgcDsgcCA9IG5leHQpIHsKQEAgLTI1OSw4ICsyNjEsOCBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICB9CiAjZW5kaWYKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
aW5saW5lIERlcXVlPFQ+OjpEZXF1ZSgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OkRl
cXVlKCkKICAgICAgICAgOiBtX3N0YXJ0KDApCiAgICAgICAgICwgbV9lbmQoMCkKICNpZm5kZWYg
TkRFQlVHCkBAIC0yNzAsOCArMjcyLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNr
VmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGlu
ZSBEZXF1ZTxUPjo6RGVxdWUoY29uc3QgRGVxdWU8VD4mIG90aGVyKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWU8VCwgaW5s
aW5lQ2FwYWNpdHk+OjpEZXF1ZShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mIG90aGVy
KQogICAgICAgICA6IG1fc3RhcnQob3RoZXIubV9zdGFydCkKICAgICAgICAgLCBtX2VuZChvdGhl
ci5tX2VuZCkKICAgICAgICAgLCBtX2J1ZmZlcihvdGhlci5tX2J1ZmZlci5jYXBhY2l0eSgpKQpA
QCAtMjg4LDE4ICsyOTAsMTggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZTxUPiYgRGVxdWU8VD46
Om9wZXJhdG9yPShjb25zdCBEZXF1ZTxUPiYgb3RoZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSBEZXF1ZTxULCBpbmxpbmVDYXBh
Y2l0eT4mIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6b3BlcmF0b3I9KGNvbnN0IERlcXVlPFQs
IGlubGluZUNhcGFjaXR5PiYgb3RoZXIpCiAgICAgewogICAgICAgICAvLyBGSVhNRTogVGhpcyBp
cyBpbmVmZmljaWVudCBpZiB3ZSdyZSB1c2luZyBhbiBpbmxpbmUgYnVmZmVyIGFuZCBUIGlzCiAg
ICAgICAgIC8vIGV4cGVuc2l2ZSB0byBjb3B5IHNpbmNlIGl0IHdpbGwgY29weSB0aGUgYnVmZmVy
IHR3aWNlIGluc3RlYWQgb2Ygb25jZS4KLSAgICAgICAgRGVxdWU8VD4gY29weShvdGhlcik7Cisg
ICAgICAgIERlcXVlPFQsIGlubGluZUNhcGFjaXR5PiBjb3B5KG90aGVyKTsKICAgICAgICAgc3dh
cChjb3B5KTsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OmRlc3Ryb3lBbGwoKQorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9p
ZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmRlc3Ryb3lBbGwoKQogICAgIHsKICAgICAgICAg
aWYgKG1fc3RhcnQgPD0gbV9lbmQpCiAgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6ZGVzdHJ1
Y3QobV9idWZmZXIuYnVmZmVyKCkgKyBtX3N0YXJ0LCBtX2J1ZmZlci5idWZmZXIoKSArIG1fZW5k
KTsKQEAgLTMwOSwxNiArMzExLDE2IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAgICAg
fQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgRGVxdWU8VD46On5EZXF1
ZSgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAg
IGlubGluZSBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46On5EZXF1ZSgpCiAgICAgewogICAgICAg
ICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKICAgICAg
ICAgZGVzdHJveUFsbCgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
aW5saW5lIHZvaWQgRGVxdWU8VD46OnN3YXAoRGVxdWU8VD4mIG90aGVyKQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1
ZTxULCBpbmxpbmVDYXBhY2l0eT46OnN3YXAoRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+JiBvdGhl
cikKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgb3RoZXIuY2hlY2tW
YWxpZGl0eSgpOwpAQCAtMzMwLDggKzMzMiw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBv
dGhlci5jaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6Y2xlYXIoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxp
bmVDYXBhY2l0eT46OmNsZWFyKCkKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAg
ICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9ycygpOwpAQCAtMzQyLDkgKzM0NCw5IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgotICAgIGlubGluZSBhdXRvIERl
cXVlPFQ+OjpmaW5kSWYoUHJlZGljYXRlJiYgcHJlZGljYXRlKSAtPiBpdGVyYXRvcgorICAgIGlu
bGluZSBhdXRvIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6ZmluZElmKFByZWRpY2F0ZSYmIHBy
ZWRpY2F0ZSkgLT4gaXRlcmF0b3IKICAgICB7CiAgICAgICAgIGl0ZXJhdG9yIGVuZF9pdGVyYXRv
ciA9IGVuZCgpOwogICAgICAgICBmb3IgKGl0ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5k
X2l0ZXJhdG9yOyArK2l0KSB7CkBAIC0zNTQsOCArMzU2LDggQEAgbmFtZXNwYWNlIFdURiB7CiAg
ICAgICAgIHJldHVybiBlbmRfaXRlcmF0b3I7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6ZXhwYW5kQ2FwYWNpdHlJZk5lZWRlZCgp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlu
bGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHlJZk5lZWRl
ZCgpCiAgICAgewogICAgICAgICBpZiAobV9zdGFydCkgewogICAgICAgICAgICAgaWYgKG1fZW5k
ICsgMSAhPSBtX3N0YXJ0KQpAQCAtMzY5LDggKzM3MSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICBleHBhbmRDYXBhY2l0eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgdm9pZCBEZXF1ZTxUPjo6ZXhwYW5kQ2FwYWNpdHkoKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICB2b2lkIERlcXVlPFQsIGlubGluZUNh
cGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHkoKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgp
OwogICAgICAgICBzaXplX3Qgb2xkQ2FwYWNpdHkgPSBtX2J1ZmZlci5jYXBhY2l0eSgpOwpAQCAt
Mzg4LDI0ICszOTAsMjQgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHko
KTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBhdXRvIERl
cXVlPFQ+Ojp0YWtlRmlyc3QoKSAtPiBUCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSBhdXRvIERlcXVlPFQsIGlubGluZUNhcGFjaXR5
Pjo6dGFrZUZpcnN0KCkgLT4gVAogICAgIHsKICAgICAgICAgVCBvbGRGaXJzdCA9IHN0ZDo6bW92
ZShmaXJzdCgpKTsKICAgICAgICAgcmVtb3ZlRmlyc3QoKTsKICAgICAgICAgcmV0dXJuIG9sZEZp
cnN0OwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGF1dG8g
RGVxdWU8VD46OnRha2VMYXN0KCkgLT4gVAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgYXV0byBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0
eT46OnRha2VMYXN0KCkgLT4gVAogICAgIHsKICAgICAgICAgVCBvbGRMYXN0ID0gc3RkOjptb3Zl
KGxhc3QoKSk7CiAgICAgICAgIHJlbW92ZUxhc3QoKTsKICAgICAgICAgcmV0dXJuIG9sZExhc3Q7
CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4K
LSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6YXBwZW5kKFUmJiB2YWx1ZSkKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFU+
CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjphcHBlbmQoVSYmIHZh
bHVlKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBleHBhbmRDYXBh
Y2l0eUlmTmVlZGVkKCk7CkBAIC00MTcsOCArNDE5LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPgotICAgIGlubGluZSB2b2lkIERlcXVlPFQ+OjpwcmVwZW5kKFUm
JiB2YWx1ZSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
IHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2Fw
YWNpdHk+OjpwcmVwZW5kKFUmJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHko
KTsKICAgICAgICAgZXhwYW5kQ2FwYWNpdHlJZk5lZWRlZCgpOwpAQCAtNDMwLDggKzQzMiw4IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6cmVtb3ZlRmly
c3QoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAg
ICBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUZpcnN0KCkKICAg
ICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgaW52YWxpZGF0ZUl0ZXJhdG9y
cygpOwpAQCAtNDQ0LDggKzQ0Niw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjaGVja1Zh
bGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUg
dm9pZCBEZXF1ZTxUPjo6cmVtb3ZlTGFzdCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFj
aXR5Pjo6cmVtb3ZlTGFzdCgpCiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAg
ICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKQEAgLTQ1OCwyMiArNDYwLDIyIEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6cmVtb3ZlKGl0ZXJhdG9yJiBp
dCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAg
aW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmUoaXRlcmF0b3ImIGl0
KQogICAgIHsKICAgICAgICAgaXQuY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZW1vdmUoaXQu
bV9pbmRleCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUg
dm9pZCBEZXF1ZTxUPjo6cmVtb3ZlKGNvbnN0X2l0ZXJhdG9yJiBpdCkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8
VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmUoY29uc3RfaXRlcmF0b3ImIGl0KQogICAgIHsKICAg
ICAgICAgaXQuY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICByZW1vdmUoaXQubV9pbmRleCk7CiAg
ICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZTxU
Pjo6cmVtb3ZlKHNpemVfdCBwb3NpdGlvbikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNp
dHk+OjpyZW1vdmUoc2l6ZV90IHBvc2l0aW9uKQogICAgIHsKICAgICAgICAgaWYgKHBvc2l0aW9u
ID09IG1fZW5kKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDk2LDI4ICs0OTgsMjggQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgfQogCiAjaWZkZWYgTkRFQlVHCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VD46OmNoZWNrVmFsaWRpdHkoKSBj
b25zdCB7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJh
dG9yQmFzZTxUPjo6Y2hlY2tWYWxpZGl0eShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiYpIGNv
bnN0IHsgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0
b3JCYXNlPFQ+OjphZGRUb0l0ZXJhdG9yc0xpc3QoKSB7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6cmVtb3ZlRnJvbUl0ZXJhdG9y
c0xpc3QoKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hl
Y2tWYWxpZGl0eSgpIGNvbnN0IHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2Fw
YWNpdHk+OjpjaGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNh
cGFjaXR5PiYpIGNvbnN0IHsgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNp
dHk+OjphZGRUb0l0ZXJhdG9yc0xpc3QoKSB7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlu
bGluZUNhcGFjaXR5Pjo6cmVtb3ZlRnJvbUl0ZXJhdG9yc0xpc3QoKSB7IH0KICNlbHNlCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpjaGVj
a1ZhbGlkaXR5KCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46
OmNoZWNrVmFsaWRpdHkoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZGVxdWUpOwog
ICAgICAgICBtX2RlcXVlLT5jaGVja0luZGV4VmFsaWRpdHkobV9pbmRleCk7CiAgICAgfQogCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+Ojpj
aGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlJiBvdGhlcikgY29uc3QKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1
ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoY29uc3QgRGVx
dWVJdGVyYXRvckJhc2UmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0
eSgpOwogICAgICAgICBvdGhlci5jaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIEFTU0VSVChtX2Rl
cXVlID09IG90aGVyLm1fZGVxdWUpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6YWRkVG9JdGVyYXRvcnNMaXN0KCkKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBE
ZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmFkZFRvSXRlcmF0b3JzTGlzdCgp
CiAgICAgewogICAgICAgICBpZiAoIW1fZGVxdWUpCiAgICAgICAgICAgICBtX25leHQgPSAwOwpA
QCAtNTMwLDggKzUzMiw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBtX3ByZXZpb3VzID0g
MDsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRGVxdWVJdGVy
YXRvckJhc2U8VD46OnJlbW92ZUZyb21JdGVyYXRvcnNMaXN0KCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFz
ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUZyb21JdGVyYXRvcnNMaXN0KCkKICAgICB7CiAg
ICAgICAgIGlmICghbV9kZXF1ZSkgewogICAgICAgICAgICAgQVNTRVJUKCFtX25leHQpOwpAQCAt
NTU1LDIzICs1NTcsMjMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogI2VuZGlmCiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6RGVx
dWVJdGVyYXRvckJhc2UoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+
OjpEZXF1ZUl0ZXJhdG9yQmFzZSgpCiAgICAgICAgIDogbV9kZXF1ZSgwKQogICAgIHsKICAgICB9
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFz
ZTxUPjo6RGVxdWVJdGVyYXRvckJhc2UoY29uc3QgRGVxdWU8VD4qIGRlcXVlLCBzaXplX3QgaW5k
ZXgpCi0gICAgICAgIDogbV9kZXF1ZShjb25zdF9jYXN0PERlcXVlPFQ+Kj4oZGVxdWUpKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUg
RGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpEZXF1ZUl0ZXJhdG9yQmFzZShj
b25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4qIGRlcXVlLCBzaXplX3QgaW5kZXgpCisgICAg
ICAgIDogbV9kZXF1ZShjb25zdF9jYXN0PERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pio+KGRlcXVl
KSkKICAgICAgICAgLCBtX2luZGV4KGluZGV4KQogICAgIHsKICAgICAgICAgYWRkVG9JdGVyYXRv
cnNMaXN0KCk7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6RGVxdWVJdGVy
YXRvckJhc2UoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90aGVyKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWVJdGVyYXRv
ckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpEZXF1ZUl0ZXJhdG9yQmFzZShjb25zdCBEZXF1ZUl0
ZXJhdG9yQmFzZSYgb3RoZXIpCiAgICAgICAgIDogbV9kZXF1ZShvdGhlci5tX2RlcXVlKQogICAg
ICAgICAsIG1faW5kZXgob3RoZXIubV9pbmRleCkKICAgICB7CkBAIC01NzksOCArNTgxLDggQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiYgRGVx
dWVJdGVyYXRvckJhc2U8VD46Om9wZXJhdG9yPShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZSYgb3Ro
ZXIpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAg
IGlubGluZSBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4mIERlcXVlSXRlcmF0
b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6b3BlcmF0b3I9KGNvbnN0IERlcXVlSXRlcmF0b3JC
YXNlJiBvdGhlcikKICAgICB7CiAgICAgICAgIG90aGVyLmNoZWNrVmFsaWRpdHkoKTsKICAgICAg
ICAgcmVtb3ZlRnJvbUl0ZXJhdG9yc0xpc3QoKTsKQEAgLTU5Miw4ICs1OTQsOCBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgaW5saW5lIERlcXVlSXRlcmF0b3JCYXNlPFQ+Ojp+RGVxdWVJdGVyYXRv
ckJhc2UoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4K
KyAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+Ojp+RGVxdWVJ
dGVyYXRvckJhc2UoKQogICAgIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHJlbW92ZUZyb21J
dGVyYXRvcnNMaXN0KCk7CkBAIC02MDEsMTUgKzYwMywxNSBAQCBuYW1lc3BhY2UgV1RGIHsKICNl
bmRpZgogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wg
RGVxdWVJdGVyYXRvckJhc2U8VD46OmlzRXF1YWwoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90
aGVyKSBjb25zdAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4KKyAgICBpbmxpbmUgYm9vbCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46
OmlzRXF1YWwoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90aGVyKSBjb25zdAogICAgIHsKICAg
ICAgICAgY2hlY2tWYWxpZGl0eShvdGhlcik7CiAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90
aGVyLm1faW5kZXg7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxp
bmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6aW5jcmVtZW50KCkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWVJ
dGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjppbmNyZW1lbnQoKQogICAgIHsKICAgICAg
ICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBBU1NFUlQobV9pbmRleCAhPSBtX2RlcXVlLT5t
X2VuZCk7CkBAIC02MjEsOCArNjIzLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNoZWNr
VmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGlu
ZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpkZWNyZW1lbnQoKQorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZUl0
ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmRlY3JlbWVudCgpCiAgICAgewogICAgICAg
ICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIEFTU0VSVChtX2luZGV4ICE9IG1fZGVxdWUtPm1f
c3RhcnQpOwpAQCAtNjM0LDE2ICs2MzYsMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNo
ZWNrVmFsaWRpdHkoKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlu
bGluZSBUKiBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6YWZ0ZXIoKSBjb25zdAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgVCogRGVxdWVJ
dGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjphZnRlcigpIGNvbnN0CiAgICAgewogICAg
ICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIEFTU0VSVChtX2luZGV4ICE9IG1fZGVxdWUt
Pm1fZW5kKTsKICAgICAgICAgcmV0dXJuICZtX2RlcXVlLT5tX2J1ZmZlci5idWZmZXIoKVttX2lu
ZGV4XTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBUKiBE
ZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6YmVmb3JlKCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIFQqIERlcXVlSXRlcmF0b3JC
YXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6YmVmb3JlKCkgY29uc3QKICAgICB7CiAgICAgICAgIGNo
ZWNrVmFsaWRpdHkoKTsKICAgICAgICAgQVNTRVJUKG1faW5kZXggIT0gbV9kZXF1ZS0+bV9zdGFy
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzA1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxNC0wNi0zMCAgQWxl
eCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlZHVj
ZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIGluIGNzcyBqaXQuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ0MTYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGNzc2ppdC9GdW5jdGlvbkNhbGwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkZ1bmN0aW9uQ2FsbDo6c2F2ZUFsbG9jYXRlZFJlZ2lzdGVycyk6
CisgICAgICAgICogY3Nzaml0L1JlZ2lzdGVyQWxsb2NhdG9yLmg6CisgICAgICAgICogY3Nzaml0
L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxl
cjo6YWRkUHNldWRvQ2xhc3NUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZUVsZW1lbnRJc050aENoaWxkKToKKyAgICAgICAgKiBjc3NqaXQvU3RhY2tBbGxvY2F0
b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YWNrQWxsb2NhdG9yOjpwdXNoKToKKyAgICAgICAg
VXNlIGlubGluZUNhcGFjaXR5IHRlbXBsYXRlIHBhcmFtZXRlciB0byByZWR1Y2UgbWFsbG9jIGNh
bGxzLgorICAgICAgICBJIHVzZSAzMiBhcyB0aGUgaW5saW5lIGNhcGFjaXR5IGZvciBub24tcmVn
aXN0ZXIgcmVsYXRlZCB2ZWN0b3JzIGJlY2F1c2UgdGhhdAorICAgICAgICBpcyBwcm9iYWJseSBi
aWcgZW5vdWdoIGZvciB0aGUgc2VsZWN0b3IgY29tcGlsZXIsIGFuZCBpZiBpdCBpcyBub3QgdGhl
biBhIG1hbGxvYworICAgICAgICBjYWxsIHdpbGwgbm90IGJlIHNpZ25pZmljYW50IGJlY2F1c2Ug
dGhlIHNlbGVjdG9yIGlzIHZlcnkgY29tcGxleC4KKwogMjAxNC0wNi0zMCAgWmFsYW4gQnVqdGFz
ICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSByZWR1bmRhbnQgcmVwYWludENv
bXBvc2l0ZWRMYXllcnMoKSBwYXJhbWV0ZXIgYW5kIGl0cyBkZXBlbmRlbmNpZXMuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCShyZXZpc2lvbiAxNzA1OTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGdW5jdGlvbkNhbGwgewogcHVi
bGljOgotICAgIEZ1bmN0aW9uQ2FsbChKU0M6Ok1hY3JvQXNzZW1ibGVyJiBhc3NlbWJsZXIsIFJl
Z2lzdGVyQWxsb2NhdG9yJiByZWdpc3RlckFsbG9jYXRvciwgU3RhY2tBbGxvY2F0b3ImIHN0YWNr
QWxsb2NhdG9yLCBWZWN0b3I8c3RkOjpwYWlyPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkNhbGwsIEpT
Qzo6RnVuY3Rpb25QdHI+PiYgY2FsbFJlZ2lzdHJ5KQorICAgIEZ1bmN0aW9uQ2FsbChKU0M6Ok1h
Y3JvQXNzZW1ibGVyJiBhc3NlbWJsZXIsIFJlZ2lzdGVyQWxsb2NhdG9yJiByZWdpc3RlckFsbG9j
YXRvciwgU3RhY2tBbGxvY2F0b3ImIHN0YWNrQWxsb2NhdG9yLCBWZWN0b3I8c3RkOjpwYWlyPEpT
Qzo6TWFjcm9Bc3NlbWJsZXI6OkNhbGwsIEpTQzo6RnVuY3Rpb25QdHI+LCAzMj4mIGNhbGxSZWdp
c3RyeSkKICAgICAgICAgOiBtX2Fzc2VtYmxlcihhc3NlbWJsZXIpCiAgICAgICAgICwgbV9yZWdp
c3RlckFsbG9jYXRvcihyZWdpc3RlckFsbG9jYXRvcikKICAgICAgICAgLCBtX3N0YWNrQWxsb2Nh
dG9yKHN0YWNrQWxsb2NhdG9yKQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBpZiAoUmVnaXN0ZXJBbGxvY2F0b3I6OmlzQ2FsbGVyU2F2ZWRSZWdpc3RlcihyZWdpc3Rl
cklEKSkKICAgICAgICAgICAgICAgICBtX3NhdmVkUmVnaXN0ZXJzLmFwcGVuZChyZWdpc3RlcklE
KTsKICAgICAgICAgfQotICAgICAgICBWZWN0b3I8U3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJl
bmNlPiBzdGFja1JlZmVyZW5jZXMgPSBtX3N0YWNrQWxsb2NhdG9yLnB1c2gobV9zYXZlZFJlZ2lz
dGVycyk7CisgICAgICAgIFZlY3RvcjxTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2UsIHJl
Z2lzdGVyQ291bnQ+IHN0YWNrUmVmZXJlbmNlcyA9IG1fc3RhY2tBbGxvY2F0b3IucHVzaChtX3Nh
dmVkUmVnaXN0ZXJzKTsKICAgICAgICAgbV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzLmFw
cGVuZFZlY3RvcihzdGFja1JlZmVyZW5jZXMpOwogICAgIH0KIApAQCAtMTgwLDcgKzE4MCw3IEBA
IHByaXZhdGU6CiAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlciYgbV9hc3NlbWJsZXI7CiAgICAgUmVn
aXN0ZXJBbGxvY2F0b3ImIG1fcmVnaXN0ZXJBbGxvY2F0b3I7CiAgICAgU3RhY2tBbGxvY2F0b3Im
IG1fc3RhY2tBbGxvY2F0b3I7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1i
bGVyOjpDYWxsLCBKU0M6OkZ1bmN0aW9uUHRyPj4mIG1fY2FsbFJlZ2lzdHJ5OworICAgIFZlY3Rv
cjxzdGQ6OnBhaXI8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q2FsbCwgSlNDOjpGdW5jdGlvblB0cj4s
IDMyPiYgbV9jYWxsUmVnaXN0cnk7CiAKICAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6
UmVnaXN0ZXJJRCwgcmVnaXN0ZXJDb3VudD4gbV9zYXZlZFJlZ2lzdGVyczsKICAgICBWZWN0b3I8
U3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlLCByZWdpc3RlckNvdW50PiBtX3NhdmVkUmVn
aXN0ZXJTdGFja1JlZmVyZW5jZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvUmVnaXN0
ZXJBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvUmVnaXN0
ZXJBbGxvY2F0b3IuaAkocmV2aXNpb24gMTcwNTkwKQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0
L1JlZ2lzdGVyQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMCw3ICsyMDAsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIERlcXVlPEpTQzo6TWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQ+IG1fcmVnaXN0ZXJzOworICAgIERlcXVlPEpTQzo6TWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQsIHJlZ2lzdGVyQ291bnQ+IG1fcmVnaXN0ZXJzOwogICAgIFZlY3RvcjxKU0M6
Ok1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklELCByZWdpc3RlckNvdW50PiBtX2FsbG9jYXRlZFJl
Z2lzdGVyczsKICAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgY2Fs
bGVlU2F2ZWRSZWdpc3RlckNvdW50PiBtX3Jlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnM7CiB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAkocmV2
aXNpb24gMTcwNTkwKQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksMTEgKzE1OSwxMSBAQCBzdHJ1Y3QgU2VsZWN0b3JG
cmFnbWVudCB7CiAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogdGFnTmFtZTsKICAgICBjb25zdCBB
dG9taWNTdHJpbmcqIGlkOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyogbGFuZ0ZpbHRlcjsKLSAg
ICBWZWN0b3I8Y29uc3QgQXRvbWljU3RyaW5nSW1wbCosIDE+IGNsYXNzTmFtZXM7CisgICAgVmVj
dG9yPGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqLCAzMj4gY2xhc3NOYW1lczsKICAgICBIYXNoU2V0
PHVuc2lnbmVkPiBwc2V1ZG9DbGFzc2VzOwotICAgIFZlY3RvcjxKU0M6OkZ1bmN0aW9uUHRyPiB1
bm9wdGltaXplZFBzZXVkb0NsYXNzZXM7Ci0gICAgVmVjdG9yPEF0dHJpYnV0ZU1hdGNoaW5nSW5m
bz4gYXR0cmlidXRlczsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPGludCwgaW50Pj4gbnRoQ2hpbGRG
aWx0ZXJzOworICAgIFZlY3RvcjxKU0M6OkZ1bmN0aW9uUHRyLCAzMj4gdW5vcHRpbWl6ZWRQc2V1
ZG9DbGFzc2VzOworICAgIFZlY3RvcjxBdHRyaWJ1dGVNYXRjaGluZ0luZm8sIDMyPiBhdHRyaWJ1
dGVzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8aW50LCBpbnQ+LCAzMj4gbnRoQ2hpbGRGaWx0ZXJz
OwogICAgIFZlY3RvcjxTZWxlY3RvckZyYWdtZW50PiBub3RGaWx0ZXJzOwogICAgIFZlY3RvcjxW
ZWN0b3I8U2VsZWN0b3JGcmFnbWVudD4+IGFueUZpbHRlcnM7CiAKQEAgLTE5Miw4ICsxOTIsOCBA
QCBzdHJ1Y3QgVGFnTmFtZVBhdHRlcm4gewogfTsKIAogdHlwZWRlZiBKU0M6Ok1hY3JvQXNzZW1i
bGVyIEFzc2VtYmxlcjsKLXR5cGVkZWYgVmVjdG9yPFNlbGVjdG9yRnJhZ21lbnQsIDg+IFNlbGVj
dG9yRnJhZ21lbnRMaXN0OwotdHlwZWRlZiBWZWN0b3I8VGFnTmFtZVBhdHRlcm4sIDg+IFRhZ05h
bWVMaXN0OwordHlwZWRlZiBWZWN0b3I8U2VsZWN0b3JGcmFnbWVudCwgMzI+IFNlbGVjdG9yRnJh
Z21lbnRMaXN0OwordHlwZWRlZiBWZWN0b3I8VGFnTmFtZVBhdHRlcm4sIDMyPiBUYWdOYW1lTGlz
dDsKIAogY2xhc3MgU2VsZWN0b3JDb2RlR2VuZXJhdG9yIHsKIHB1YmxpYzoKQEAgLTI2NSwxMiAr
MjY1LDEyIEBAIHByaXZhdGU6CiAKICAgICBib29sIGdlbmVyYXRlUHJvbG9ndWUoKTsKICAgICB2
b2lkIGdlbmVyYXRlRXBpbG9ndWUoKTsKLSAgICBWZWN0b3I8U3RhY2tBbGxvY2F0b3I6OlN0YWNr
UmVmZXJlbmNlPiBtX3Byb2xvZ3VlU3RhY2tSZWZlcmVuY2VzOworICAgIFZlY3RvcjxTdGFja0Fs
bG9jYXRvcjo6U3RhY2tSZWZlcmVuY2UsIHJlZ2lzdGVyQ291bnQ+IG1fcHJvbG9ndWVTdGFja1Jl
ZmVyZW5jZXM7CiAKICAgICBBc3NlbWJsZXIgbV9hc3NlbWJsZXI7CiAgICAgUmVnaXN0ZXJBbGxv
Y2F0b3IgbV9yZWdpc3RlckFsbG9jYXRvcjsKICAgICBTdGFja0FsbG9jYXRvciBtX3N0YWNrQWxs
b2NhdG9yOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXNzZW1ibGVyOjpDYWxsLCBKU0M6OkZ1bmN0
aW9uUHRyPj4gbV9mdW5jdGlvbkNhbGxzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXNzZW1ibGVy
OjpDYWxsLCBKU0M6OkZ1bmN0aW9uUHRyPiwgMzI+IG1fZnVuY3Rpb25DYWxsczsKIAogICAgIFNl
bGVjdG9yQ29udGV4dCBtX3NlbGVjdG9yQ29udGV4dDsKICAgICBGdW5jdGlvblR5cGUgbV9mdW5j
dGlvblR5cGU7CkBAIC00NzYsNyArNDc2LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUg
YWRkUHNldWRvQ2xhcwogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnk6CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIFZlY3RvcjxTZWxlY3RvckZyYWdtZW50PiBhbnlGcmFnbWVu
dHM7CisgICAgICAgICAgICBWZWN0b3I8U2VsZWN0b3JGcmFnbWVudCwgMzI+IGFueUZyYWdtZW50
czsKICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBGdW5jdGlvblR5cGU6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0
b3IqIHJvb3RTZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyByb290
U2VsZWN0b3I7IHJvb3RTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChyb290U2VsZWN0
b3IpKSB7CiAgICAgICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3QgZnJhZ21lbnRMaXN0
OwpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAgaW5saW5lIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9y
OjpnZW5lcgogCiBib29sIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNo
ZWNrZXIoKQogewotICAgIFZlY3RvcjxTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2U+IGNh
bGxlZVNhdmVkUmVnaXN0ZXJTdGFja1JlZmVyZW5jZXM7CisgICAgVmVjdG9yPFN0YWNrQWxsb2Nh
dG9yOjpTdGFja1JlZmVyZW5jZSwgY2FsbGVlU2F2ZWRSZWdpc3RlckNvdW50PiBjYWxsZWVTYXZl
ZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzOwogICAgIGJvb2wgcmVzZXJ2ZWRDYWxsZWVTYXZlZFJl
Z2lzdGVycyA9IGZhbHNlOwogICAgIHVuc2lnbmVkIGF2YWlsYWJsZVJlZ2lzdGVyQ291bnQgPSBt
X3JlZ2lzdGVyQWxsb2NhdG9yLmF2YWlsYWJsZVJlZ2lzdGVyQ291bnQoKTsKICAgICB1bnNpZ25l
ZCBtaW5pbXVtUmVnaXN0ZXJDb3VudEZvckF0dHJpYnV0ZXMgPSBtaW5pbXVtUmVnaXN0ZXJSZXF1
aXJlbWVudHMobV9zZWxlY3RvckZyYWdtZW50cyk7CkBAIC0yNTk1LDcgKzI1OTUsNyBAQCB2b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHBhcmVudEVsZW1lbnQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0
ZXIoKTsKICAgICBnZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1lbnQoZmFpbHVyZUNhc2VzLCBwYXJl
bnRFbGVtZW50KTsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8aW50LCBpbnQ+PiB2YWxpZFN1YnNl
dEZpbHRlcnM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxpbnQsIGludD4sIDMyPiB2YWxpZFN1YnNl
dEZpbHRlcnM7CiAgICAgdmFsaWRTdWJzZXRGaWx0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
ZnJhZ21lbnQubnRoQ2hpbGRGaWx0ZXJzLnNpemUoKSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBz
bG90IDogZnJhZ21lbnQubnRoQ2hpbGRGaWx0ZXJzKSB7CiAgICAgICAgIGludCBhID0gc2xvdC5m
aXJzdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oCShyZXZpc2lv
biAxNzA1OTApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU3RhY2tBbGxvY2F0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUl9K
SVQpCiAKKyNpbmNsdWRlICJSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL01hY3JvQXNzZW1ibGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY4LDE0
ICs2OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdGFja1JlZmVyZW5jZShtX29mZnNl
dEZyb21Ub3ApOwogICAgIH0KIAotICAgIFZlY3RvcjxTdGFja1JlZmVyZW5jZT4gcHVzaChjb25z
dCBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4mIHJlZ2lzdGVySURzKQor
ICAgIFZlY3RvcjxTdGFja1JlZmVyZW5jZSwgcmVnaXN0ZXJDb3VudD4gcHVzaChjb25zdCBWZWN0
b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4mIHJlZ2lzdGVySURzKQogICAgIHsK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGFzRnVuY3Rpb25DYWxsUGFkZGluZyk7Ci0gICAg
ICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnQgPSByZWdpc3RlcklEcy5zaXplKCk7Ci0gICAgICAg
IFZlY3RvcjxTdGFja1JlZmVyZW5jZT4gc3RhY2tSZWZlcmVuY2VzOwotICAgICAgICBzdGFja1Jl
ZmVyZW5jZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZWdpc3RlckNvdW50KTsKKyAgICAgICAg
VmVjdG9yPFN0YWNrUmVmZXJlbmNlLCByZWdpc3RlckNvdW50PiBzdGFja1JlZmVyZW5jZXM7CiAj
aWYgQ1BVKEFSTTY0KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJD
b3VudCAtIDE7IGkgKz0gMikgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVn
aXN0ZXJJRHMuc2l6ZSgpIC0gMTsgaSArPSAyKSB7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5w
dXNoUGFpcihyZWdpc3RlcklEc1tpICsgMV0sIHJlZ2lzdGVySURzW2ldKTsKICAgICAgICAgICAg
IG1fb2Zmc2V0RnJvbVRvcCArPSBzdGFja1VuaXRJbkJ5dGVzKCk7CiAgICAgICAgICAgICBzdGFj
a1JlZmVyZW5jZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCAtIHN0YWNr
VW5pdEluQnl0ZXMoKSAvIDIpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234181</attachid>
            <date>2014-07-01 11:55:18 -0700</date>
            <delta_ts>2014-07-01 17:53:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134416-20140701115458.patch</filename>
            <type>text/plain</type>
            <size>30433</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzA2NDUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE0LTA3LTAxICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIGR5bmFtaWMgbWVtb3J5
IGFsbG9jYXRpb24gaW4gY3NzIGppdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNDQxNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL0RlcXVlLmg6CisgICAgICAgIEFkZGVkIGlubGluZUNhcGFj
aXR5IG9wdGlvbmFsIHRlbXBsYXRlIHBhcmFtZXRlci4KKwogMjAxNC0wNi0zMCAgQ29tbWl0IFF1
ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjE3MDYwNS4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RlcXVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvRGVxdWUuaAkocmV2aXNpb24gMTcwNjQ1KQorKysgU291cmNl
L1dURi93dGYvRGVxdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMjUgKzM4LDI1IEBACiAKIG5h
bWVzcGFjZSBXVEYgewogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgRGVxdWVJdGVy
YXRvckJhc2U7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgRGVxdWVJdGVyYXRvcjsK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBEZXF1ZUNvbnN0SXRlcmF0b3I7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBjbGFzcyBEZXF1ZUl0
ZXJhdG9yQmFzZTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+IGNsYXNzIERlcXVlSXRlcmF0b3I7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PiBjbGFzcyBEZXF1ZUNvbnN0SXRlcmF0b3I7CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBh
Y2l0eSA9IDA+CiAgICAgY2xhc3MgRGVxdWUgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRvcjxUPiBpdGVy
YXRvcjsKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUNvbnN0SXRlcmF0b3I8VD4gY29uc3RfaXRlcmF0
b3I7CisgICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRvcjxULCBpbmxpbmVDYXBhY2l0eT4gaXRl
cmF0b3I7CisgICAgICAgIHR5cGVkZWYgRGVxdWVDb25zdEl0ZXJhdG9yPFQsIGlubGluZUNhcGFj
aXR5PiBjb25zdF9pdGVyYXRvcjsKICAgICAgICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0
b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CiAgICAgICAgIHR5cGVkZWYgc3RkOjpyZXZl
cnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogCiAg
ICAgICAgIERlcXVlKCk7Ci0gICAgICAgIERlcXVlKGNvbnN0IERlcXVlPFQ+Jik7Ci0gICAgICAg
IERlcXVlJiBvcGVyYXRvcj0oY29uc3QgRGVxdWU8VD4mKTsKKyAgICAgICAgRGVxdWUoY29uc3Qg
RGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Jik7CisgICAgICAgIERlcXVlJiBvcGVyYXRvcj0oY29u
c3QgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Jik7CiAgICAgICAgIH5EZXF1ZSgpOwogCi0gICAg
ICAgIHZvaWQgc3dhcChEZXF1ZTxUPiYpOworICAgICAgICB2b2lkIHN3YXAoRGVxdWU8VCwgaW5s
aW5lQ2FwYWNpdHk+Jik7CiAKICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0IDw9IG1fZW5kID8gbV9lbmQgLSBtX3N0YXJ0IDogbV9lbmQgKyBtX2J1ZmZlci5jYXBh
Y2l0eSgpIC0gbV9zdGFydDsgfQogICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX3N0YXJ0ID09IG1fZW5kOyB9CkBAIC05MSwxMSArOTEsMTEgQEAgbmFtZXNwYWNlIFdURiB7
CiAgICAgICAgIGl0ZXJhdG9yIGZpbmRJZihQcmVkaWNhdGUmJik7CiAKICAgICBwcml2YXRlOgot
ICAgICAgICBmcmllbmQgY2xhc3MgRGVxdWVJdGVyYXRvckJhc2U8VD47CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT47CiAKLSAgICAgICAg
dHlwZWRlZiBWZWN0b3JCdWZmZXI8VCwgMD4gQnVmZmVyOworICAgICAgICB0eXBlZGVmIFZlY3Rv
ckJ1ZmZlcjxULCBpbmxpbmVDYXBhY2l0eT4gQnVmZmVyOwogICAgICAgICB0eXBlZGVmIFZlY3Rv
clR5cGVPcGVyYXRpb25zPFQ+IFR5cGVPcGVyYXRpb25zOwotICAgICAgICB0eXBlZGVmIERlcXVl
SXRlcmF0b3JCYXNlPFQ+IEl0ZXJhdG9yQmFzZTsKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJh
dG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4gSXRlcmF0b3JCYXNlOwogCiAgICAgICAgIHZvaWQg
cmVtb3ZlKHNpemVfdCBwb3NpdGlvbik7CiAgICAgICAgIHZvaWQgaW52YWxpZGF0ZUl0ZXJhdG9y
cygpOwpAQCAtMTEzLDExICsxMTMsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAjZW5kaWYKICAgICB9
OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICAgY2xhc3MgRGVxdWVJdGVyYXRvckJhc2UgewogICAg
IHByb3RlY3RlZDoKICAgICAgICAgRGVxdWVJdGVyYXRvckJhc2UoKTsKLSAgICAgICAgRGVxdWVJ
dGVyYXRvckJhc2UoY29uc3QgRGVxdWU8VD4qLCBzaXplX3QpOworICAgICAgICBEZXF1ZUl0ZXJh
dG9yQmFzZShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4qLCBzaXplX3QpOwogICAgICAg
ICBEZXF1ZUl0ZXJhdG9yQmFzZShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZSYpOwogICAgICAgICBE
ZXF1ZUl0ZXJhdG9yQmFzZSYgb3BlcmF0b3I9KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlJik7CiAg
ICAgICAgIH5EZXF1ZUl0ZXJhdG9yQmFzZSgpOwpAQCAtMTM4LDEwICsxMzgsMTAgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIHZvaWQgY2hlY2tWYWxpZGl0eSgpIGNvbnN0OwogICAgICAgICB2
b2lkIGNoZWNrVmFsaWRpdHkoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmKSBjb25zdDsKIAotICAg
ICAgICBEZXF1ZTxUPiogbV9kZXF1ZTsKKyAgICAgICAgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+
KiBtX2RlcXVlOwogICAgICAgICBzaXplX3QgbV9pbmRleDsKIAotICAgICAgICBmcmllbmQgY2xh
c3MgRGVxdWU8VD47CisgICAgICAgIGZyaWVuZCBjbGFzcyBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0
eT47CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIG11dGFibGUgRGVxdWVJdGVyYXRvckJhc2Uq
IG1fbmV4dDsKQEAgLTE0OSwxMSArMTQ5LDExIEBAIG5hbWVzcGFjZSBXVEYgewogI2VuZGlmCiAg
ICAgfTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgY2xhc3MgRGVxdWVJdGVyYXRv
ciA6IHB1YmxpYyBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGNsYXNzIERlcXVlSXRlcmF0b3IgOiBwdWJs
aWMgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+IHsKICAgICBwcml2YXRlOgot
ICAgICAgICB0eXBlZGVmIERlcXVlSXRlcmF0b3JCYXNlPFQ+IEJhc2U7Ci0gICAgICAgIHR5cGVk
ZWYgRGVxdWVJdGVyYXRvcjxUPiBJdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJh
dG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4gQmFzZTsKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0
ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBJdGVyYXRvcjsKIAogICAgIHB1YmxpYzoKICAgICAg
ICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwpAQCAtMTYyLDcgKzE2Miw4IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKICAgICAgICAg
dHlwZWRlZiBzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogCi0gICAgICAgIERlcXVlSXRlcmF0b3IoRGVxdWU8VD4qIGRlcXVlLCBzaXplX3QgaW5kZXgp
IDogQmFzZShkZXF1ZSwgaW5kZXgpIHsgfQorICAgICAgICBEZXF1ZUl0ZXJhdG9yKERlcXVlPFQs
IGlubGluZUNhcGFjaXR5PiogZGVxdWUsIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogQmFz
ZShkZXF1ZSwgaW5kZXgpIHsgfQogCiAgICAgICAgIERlcXVlSXRlcmF0b3IoY29uc3QgSXRlcmF0
b3ImIG90aGVyKSA6IEJhc2Uob3RoZXIpIHsgfQogICAgICAgICBEZXF1ZUl0ZXJhdG9yJiBvcGVy
YXRvcj0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSB7IEJhc2U6OmFzc2lnbihvdGhlcik7IHJldHVy
biAqdGhpczsgfQpAQCAtMTc5LDEyICsxODAsMTIgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAg
IC8vIHBvc3RmaXggLS0gaW50ZW50aW9uYWxseSBvbWl0dGVkCiAgICAgfTsKIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgY2xhc3MgRGVxdWVDb25zdEl0ZXJhdG9yIDogcHVibGljIERl
cXVlSXRlcmF0b3JCYXNlPFQ+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+CisgICAgY2xhc3MgRGVxdWVDb25zdEl0ZXJhdG9yIDogcHVibGljIERlcXVl
SXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5PiB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAg
dHlwZWRlZiBEZXF1ZUl0ZXJhdG9yQmFzZTxUPiBCYXNlOwotICAgICAgICB0eXBlZGVmIERlcXVl
Q29uc3RJdGVyYXRvcjxUPiBJdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiBEZXF1ZUl0ZXJhdG9y
PFQ+IE5vbkNvbnN0SXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgRGVxdWVJdGVyYXRvckJhc2U8
VCwgaW5saW5lQ2FwYWNpdHk+IEJhc2U7CisgICAgICAgIHR5cGVkZWYgRGVxdWVDb25zdEl0ZXJh
dG9yPFQsIGlubGluZUNhcGFjaXR5PiBJdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBEZXF1ZUl0
ZXJhdG9yPFQsIGlubGluZUNhcGFjaXR5PiBOb25Db25zdEl0ZXJhdG9yOwogCiAgICAgcHVibGlj
OgogICAgICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CkBAIC0xOTMsNyAr
MTk0LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHR5cGVkZWYgY29uc3QgVCYgcmVmZXJl
bmNlOwogICAgICAgICB0eXBlZGVmIHN0ZDo6YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAKLSAgICAgICAgRGVxdWVDb25zdEl0ZXJhdG9yKGNvbnN0IERlcXVl
PFQ+KiBkZXF1ZSwgc2l6ZV90IGluZGV4KSA6IEJhc2UoZGVxdWUsIGluZGV4KSB7IH0KKyAgICAg
ICAgRGVxdWVDb25zdEl0ZXJhdG9yKGNvbnN0IERlcXVlPFQsIGlubGluZUNhcGFjaXR5PiogZGVx
dWUsIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogQmFzZShkZXF1ZSwgaW5kZXgpIHsgfQog
CiAgICAgICAgIERlcXVlQ29uc3RJdGVyYXRvcihjb25zdCBJdGVyYXRvciYgb3RoZXIpIDogQmFz
ZShvdGhlcikgeyB9CiAgICAgICAgIERlcXVlQ29uc3RJdGVyYXRvcihjb25zdCBOb25Db25zdEl0
ZXJhdG9yJiBvdGhlcikgOiBCYXNlKG90aGVyKSB7IH0KQEAgLTIxMywxMiArMjE1LDEyIEBAIG5h
bWVzcGFjZSBXVEYgewogICAgIH07CiAKICNpZmRlZiBOREVCVUcKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgdm9pZCBEZXF1ZTxUPjo6Y2hlY2tWYWxpZGl0eSgpIGNvbnN0IHsgfQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlPFQ+OjpjaGVja0luZGV4
VmFsaWRpdHkoc2l6ZV90KSBjb25zdCB7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgdm9pZCBEZXF1ZTxUPjo6aW52YWxpZGF0ZUl0ZXJhdG9ycygpIHsgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5lIHZvaWQgRGVxdWU8VCwg
aW5saW5lQ2FwYWNpdHk+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QgeyB9CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZTxULCBp
bmxpbmVDYXBhY2l0eT46OmNoZWNrSW5kZXhWYWxpZGl0eShzaXplX3QpIGNvbnN0IHsgfQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gaW5saW5lIHZvaWQg
RGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjppbnZhbGlkYXRlSXRlcmF0b3JzKCkgeyB9CiAjZWxz
ZQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBEZXF1ZTxUPjo6Y2hlY2tWYWxp
ZGl0eSgpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PgorICAgIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpjaGVja1ZhbGlkaXR5KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIC8vIEluIHRoaXMgaW1wbGVtZW50YXRpb24gYSBjYXBhY2l0
eSBvZiAxIHdvdWxkIGNvbmZ1c2UgYXBwZW5kKCkgYW5kCiAgICAgICAgIC8vIG90aGVyIHBsYWNl
cyB0aGF0IGFzc3VtZSB0aGUgaW5kZXggYWZ0ZXIgY2FwYWNpdHkgLSAxIGlzIDAuCkBAIC0yMzMs
OCArMjM1LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRGVxdWU8VD46OmNoZWNrSW5kZXhWYWxpZGl0eShz
aXplX3QgaW5kZXgpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5PgorICAgIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpjaGVja0luZGV4
VmFsaWRpdHkoc2l6ZV90IGluZGV4KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNF
RChpbmRleCwgaW5kZXggPD0gbV9idWZmZXIuY2FwYWNpdHkoKSk7CiAgICAgICAgIGlmIChtX3N0
YXJ0IDw9IG1fZW5kKSB7CkBAIC0yNDUsOCArMjQ3LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRGVxdWU8
VD46OmludmFsaWRhdGVJdGVyYXRvcnMoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVf
dCBpbmxpbmVDYXBhY2l0eT4KKyAgICB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6aW52
YWxpZGF0ZUl0ZXJhdG9ycygpCiAgICAgewogICAgICAgICBJdGVyYXRvckJhc2UqIG5leHQ7CiAg
ICAgICAgIGZvciAoSXRlcmF0b3JCYXNlKiBwID0gbV9pdGVyYXRvcnM7IHA7IHAgPSBuZXh0KSB7
CkBAIC0yNTksOCArMjYxLDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfQogI2VuZGlmCiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZTxUPjo6RGVxdWUoKQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUg
RGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpEZXF1ZSgpCiAgICAgICAgIDogbV9zdGFydCgwKQog
ICAgICAgICAsIG1fZW5kKDApCiAjaWZuZGVmIE5ERUJVRwpAQCAtMjcwLDggKzI3Miw4IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgRGVxdWU8VD46OkRlcXVlKGNvbnN0IERlcXVl
PFQ+JiBvdGhlcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CisgICAgaW5saW5lIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6RGVxdWUoY29uc3QgRGVx
dWU8VCwgaW5saW5lQ2FwYWNpdHk+JiBvdGhlcikKICAgICAgICAgOiBtX3N0YXJ0KG90aGVyLm1f
c3RhcnQpCiAgICAgICAgICwgbV9lbmQob3RoZXIubV9lbmQpCiAgICAgICAgICwgbV9idWZmZXIo
b3RoZXIubV9idWZmZXIuY2FwYWNpdHkoKSkKQEAgLTI4OCwxOCArMjkwLDE4IEBAIG5hbWVzcGFj
ZSBXVEYgewogICAgICAgICB9CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAg
ICBpbmxpbmUgRGVxdWU8VD4mIERlcXVlPFQ+OjpvcGVyYXRvcj0oY29uc3QgRGVxdWU8VD4mIG90
aGVyKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAg
ICBpbmxpbmUgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+JiBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0
eT46Om9wZXJhdG9yPShjb25zdCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT4mIG90aGVyKQogICAg
IHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgaW5lZmZpY2llbnQgaWYgd2UncmUgdXNpbmcg
YW4gaW5saW5lIGJ1ZmZlciBhbmQgVCBpcwogICAgICAgICAvLyBleHBlbnNpdmUgdG8gY29weSBz
aW5jZSBpdCB3aWxsIGNvcHkgdGhlIGJ1ZmZlciB0d2ljZSBpbnN0ZWFkIG9mIG9uY2UuCi0gICAg
ICAgIERlcXVlPFQ+IGNvcHkob3RoZXIpOworICAgICAgICBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0
eT4gY29weShvdGhlcik7CiAgICAgICAgIHN3YXAoY29weSk7CiAgICAgICAgIHJldHVybiAqdGhp
czsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSB2b2lkIERl
cXVlPFQ+OjpkZXN0cm95QWxsKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojpk
ZXN0cm95QWxsKCkKICAgICB7CiAgICAgICAgIGlmIChtX3N0YXJ0IDw9IG1fZW5kKQogICAgICAg
ICAgICAgVHlwZU9wZXJhdGlvbnM6OmRlc3RydWN0KG1fYnVmZmVyLmJ1ZmZlcigpICsgbV9zdGFy
dCwgbV9idWZmZXIuYnVmZmVyKCkgKyBtX2VuZCk7CkBAIC0zMDksMTYgKzMxMSwxNiBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgaW5saW5lIERlcXVlPFQ+Ojp+RGVxdWUoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWU8VCwgaW5saW5lQ2FwYWNp
dHk+Ojp+RGVxdWUoKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBp
bnZhbGlkYXRlSXRlcmF0b3JzKCk7CiAgICAgICAgIGRlc3Ryb3lBbGwoKTsKICAgICB9CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSB2b2lkIERlcXVlPFQ+Ojpzd2FwKERl
cXVlPFQ+JiBvdGhlcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojpzd2FwKERl
cXVlPFQsIGlubGluZUNhcGFjaXR5PiYgb3RoZXIpCiAgICAgewogICAgICAgICBjaGVja1ZhbGlk
aXR5KCk7CiAgICAgICAgIG90aGVyLmNoZWNrVmFsaWRpdHkoKTsKQEAgLTMzMCw4ICszMzIsOCBA
QCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgb3RoZXIuY2hlY2tWYWxpZGl0eSgpOwogICAgIH0K
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OmNs
ZWFyKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Cisg
ICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+OjpjbGVhcigpCiAgICAgewog
ICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsK
QEAgLTM0Miw5ICszNDQsOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgY2hlY2tWYWxpZGl0
eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBy
ZWRpY2F0ZT4KLSAgICBpbmxpbmUgYXV0byBEZXF1ZTxUPjo6ZmluZElmKFByZWRpY2F0ZSYmIHBy
ZWRpY2F0ZSkgLT4gaXRlcmF0b3IKKyAgICBpbmxpbmUgYXV0byBEZXF1ZTxULCBpbmxpbmVDYXBh
Y2l0eT46OmZpbmRJZihQcmVkaWNhdGUmJiBwcmVkaWNhdGUpIC0+IGl0ZXJhdG9yCiAgICAgewog
ICAgICAgICBpdGVyYXRvciBlbmRfaXRlcmF0b3IgPSBlbmQoKTsKICAgICAgICAgZm9yIChpdGVy
YXRvciBpdCA9IGJlZ2luKCk7IGl0ICE9IGVuZF9pdGVyYXRvcjsgKytpdCkgewpAQCAtMzU0LDgg
KzM1Niw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICByZXR1cm4gZW5kX2l0ZXJhdG9yOwog
ICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8
VD46OmV4cGFuZENhcGFjaXR5SWZOZWVkZWQoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBh
Y2l0eT46OmV4cGFuZENhcGFjaXR5SWZOZWVkZWQoKQogICAgIHsKICAgICAgICAgaWYgKG1fc3Rh
cnQpIHsKICAgICAgICAgICAgIGlmIChtX2VuZCArIDEgIT0gbV9zdGFydCkKQEAgLTM2OSw4ICsz
NzEsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgZXhwYW5kQ2FwYWNpdHkoKTsKICAgICB9
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRGVxdWU8VD46OmV4cGFuZENh
cGFjaXR5KCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
CisgICAgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OmV4cGFuZENhcGFjaXR5KCkKICAg
ICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgc2l6ZV90IG9sZENhcGFjaXR5
ID0gbV9idWZmZXIuY2FwYWNpdHkoKTsKQEAgLTM4OCwyNCArMzkwLDI0IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBpbmxpbmUgYXV0byBEZXF1ZTxUPjo6dGFrZUZpcnN0KCkgLT4gVAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUg
YXV0byBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnRha2VGaXJzdCgpIC0+IFQKICAgICB7CiAg
ICAgICAgIFQgb2xkRmlyc3QgPSBzdGQ6Om1vdmUoZmlyc3QoKSk7CiAgICAgICAgIHJlbW92ZUZp
cnN0KCk7CiAgICAgICAgIHJldHVybiBvbGRGaXJzdDsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIGlubGluZSBhdXRvIERlcXVlPFQ+Ojp0YWtlTGFzdCgpIC0+IFQKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5l
IGF1dG8gRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+Ojp0YWtlTGFzdCgpIC0+IFQKICAgICB7CiAg
ICAgICAgIFQgb2xkTGFzdCA9IHN0ZDo6bW92ZShsYXN0KCkpOwogICAgICAgICByZW1vdmVMYXN0
KCk7CiAgICAgICAgIHJldHVybiBvbGRMYXN0OwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OmFw
cGVuZChVJiYgdmFsdWUpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIGlubGluZSB2b2lkIERlcXVlPFQsIGlu
bGluZUNhcGFjaXR5Pjo6YXBwZW5kKFUmJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGNoZWNrVmFs
aWRpdHkoKTsKICAgICAgICAgZXhwYW5kQ2FwYWNpdHlJZk5lZWRlZCgpOwpAQCAtNDE3LDggKzQx
OSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQog
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KLSAgICBpbmxp
bmUgdm9pZCBEZXF1ZTxUPjo6cHJlcGVuZChVJiYgdmFsdWUpCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIGlu
bGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6cHJlcGVuZChVJiYgdmFsdWUpCiAg
ICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIGV4cGFuZENhcGFjaXR5SWZO
ZWVkZWQoKTsKQEAgLTQzMCw4ICs0MzIsOCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgY2hl
Y2tWYWxpZGl0eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5s
aW5lIHZvaWQgRGVxdWU8VD46OnJlbW92ZUZpcnN0KCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWU8VCwgaW5saW5l
Q2FwYWNpdHk+OjpyZW1vdmVGaXJzdCgpCiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7
CiAgICAgICAgIGludmFsaWRhdGVJdGVyYXRvcnMoKTsKQEAgLTQ0NCw4ICs0NDYsOCBAQCBuYW1l
c3BhY2UgV1RGIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgIH0KIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OnJlbW92ZUxhc3QoKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxp
bmUgdm9pZCBEZXF1ZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUxhc3QoKQogICAgIHsKICAg
ICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBpbnZhbGlkYXRlSXRlcmF0b3JzKCk7CkBA
IC00NTgsMjIgKzQ2MCwyMiBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgY2hlY2tWYWxpZGl0
eSgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIHZvaWQg
RGVxdWU8VD46OnJlbW92ZShpdGVyYXRvciYgaXQpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNh
cGFjaXR5Pjo6cmVtb3ZlKGl0ZXJhdG9yJiBpdCkKICAgICB7CiAgICAgICAgIGl0LmNoZWNrVmFs
aWRpdHkoKTsKICAgICAgICAgcmVtb3ZlKGl0Lm1faW5kZXgpOwogICAgIH0KIAotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OnJlbW92ZShjb25zdF9p
dGVyYXRvciYgaXQpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PgorICAgIGlubGluZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6cmVtb3ZlKGNv
bnN0X2l0ZXJhdG9yJiBpdCkKICAgICB7CiAgICAgICAgIGl0LmNoZWNrVmFsaWRpdHkoKTsKICAg
ICAgICAgcmVtb3ZlKGl0Lm1faW5kZXgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWU8VD46OnJlbW92ZShzaXplX3QgcG9zaXRpb24pCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIGlubGlu
ZSB2b2lkIERlcXVlPFQsIGlubGluZUNhcGFjaXR5Pjo6cmVtb3ZlKHNpemVfdCBwb3NpdGlvbikK
ICAgICB7CiAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBtX2VuZCkKICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTQ5NiwyOCArNDk4LDI4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KIAogI2lmZGVm
IE5ERUJVRwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSB2b2lkIERlcXVlSXRlcmF0
b3JCYXNlPFQ+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QgeyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VD46OmNoZWNrVmFsaWRpdHkoY29u
c3QgRGVxdWVJdGVyYXRvckJhc2U8VD4mKSBjb25zdCB7IH0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6YWRkVG9JdGVyYXRvcnNMaXN0
KCkgeyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRv
ckJhc2U8VD46OnJlbW92ZUZyb21JdGVyYXRvcnNMaXN0KCkgeyB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9y
QmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmNoZWNrVmFsaWRpdHkoKSBjb25zdCB7IH0KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERl
cXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6Y2hlY2tWYWxpZGl0eShjb25zdCBE
ZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT4mKSBjb25zdCB7IH0KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IGlubGluZSB2b2lkIERlcXVl
SXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6YWRkVG9JdGVyYXRvcnNMaXN0KCkgeyB9
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBpbmxpbmUg
dm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OnJlbW92ZUZyb21JdGVy
YXRvcnNMaXN0KCkgeyB9CiAjZWxzZQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgdm9p
ZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6Y2hlY2tWYWxpZGl0eSgpIGNvbnN0CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHZvaWQgRGVxdWVJdGVy
YXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpjaGVja1ZhbGlkaXR5KCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX2RlcXVlKTsKICAgICAgICAgbV9kZXF1ZS0+Y2hlY2tJbmRleFZh
bGlkaXR5KG1faW5kZXgpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
dm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6Y2hlY2tWYWxpZGl0eShjb25zdCBEZXF1ZUl0ZXJh
dG9yQmFzZSYgb3RoZXIpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5PgorICAgIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNp
dHk+OjpjaGVja1ZhbGlkaXR5KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlJiBvdGhlcikgY29uc3QK
ICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAgb3RoZXIuY2hlY2tWYWxp
ZGl0eSgpOwogICAgICAgICBBU1NFUlQobV9kZXF1ZSA9PSBvdGhlci5tX2RlcXVlKTsKICAgICB9
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8
VD46OmFkZFRvSXRlcmF0b3JzTGlzdCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PgorICAgIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2Fw
YWNpdHk+OjphZGRUb0l0ZXJhdG9yc0xpc3QoKQogICAgIHsKICAgICAgICAgaWYgKCFtX2RlcXVl
KQogICAgICAgICAgICAgbV9uZXh0ID0gMDsKQEAgLTUzMCw4ICs1MzIsOCBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgbV9wcmV2aW91cyA9IDA7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpyZW1vdmVGcm9tSXRlcmF0
b3JzTGlzdCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PgorICAgIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZW1vdmVG
cm9tSXRlcmF0b3JzTGlzdCgpCiAgICAgewogICAgICAgICBpZiAoIW1fZGVxdWUpIHsKICAgICAg
ICAgICAgIEFTU0VSVCghbV9uZXh0KTsKQEAgLTU1NSwyMyArNTU3LDIzIEBAIG5hbWVzcGFjZSBX
VEYgewogICAgIH0KICNlbmRpZgogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxp
bmUgRGVxdWVJdGVyYXRvckJhc2U8VD46OkRlcXVlSXRlcmF0b3JCYXNlKCkKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIERlcXVlSXRl
cmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6RGVxdWVJdGVyYXRvckJhc2UoKQogICAgICAg
ICA6IG1fZGVxdWUoMCkKICAgICB7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VD46OkRlcXVlSXRlcmF0b3JCYXNlKGNvbnN0
IERlcXVlPFQ+KiBkZXF1ZSwgc2l6ZV90IGluZGV4KQotICAgICAgICA6IG1fZGVxdWUoY29uc3Rf
Y2FzdDxEZXF1ZTxUPio+KGRlcXVlKSkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNh
cGFjaXR5Pjo6RGVxdWVJdGVyYXRvckJhc2UoY29uc3QgRGVxdWU8VCwgaW5saW5lQ2FwYWNpdHk+
KiBkZXF1ZSwgc2l6ZV90IGluZGV4KQorICAgICAgICA6IG1fZGVxdWUoY29uc3RfY2FzdDxEZXF1
ZTxULCBpbmxpbmVDYXBhY2l0eT4qPihkZXF1ZSkpCiAgICAgICAgICwgbV9pbmRleChpbmRleCkK
ICAgICB7CiAgICAgICAgIGFkZFRvSXRlcmF0b3JzTGlzdCgpOwogICAgICAgICBjaGVja1ZhbGlk
aXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgRGVx
dWVJdGVyYXRvckJhc2U8VD46OkRlcXVlSXRlcmF0b3JCYXNlKGNvbnN0IERlcXVlSXRlcmF0b3JC
YXNlJiBvdGhlcikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CisgICAgaW5saW5lIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5Pjo6RGVx
dWVJdGVyYXRvckJhc2UoY29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90aGVyKQogICAgICAgICA6
IG1fZGVxdWUob3RoZXIubV9kZXF1ZSkKICAgICAgICAgLCBtX2luZGV4KG90aGVyLm1faW5kZXgp
CiAgICAgewpAQCAtNTc5LDggKzU4MSw4IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjaGVj
a1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxp
bmUgRGVxdWVJdGVyYXRvckJhc2U8VD4mIERlcXVlSXRlcmF0b3JCYXNlPFQ+OjpvcGVyYXRvcj0o
Y29uc3QgRGVxdWVJdGVyYXRvckJhc2UmIG90aGVyKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICBpbmxpbmUgRGVxdWVJdGVyYXRvckJhc2U8VCwg
aW5saW5lQ2FwYWNpdHk+JiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46Om9w
ZXJhdG9yPShjb25zdCBEZXF1ZUl0ZXJhdG9yQmFzZSYgb3RoZXIpCiAgICAgewogICAgICAgICBv
dGhlci5jaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIHJlbW92ZUZyb21JdGVyYXRvcnNMaXN0KCk7
CkBAIC01OTIsOCArNTk0LDggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHJldHVybiAqdGhp
czsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIGlubGluZSBEZXF1ZUl0
ZXJhdG9yQmFzZTxUPjo6fkRlcXVlSXRlcmF0b3JCYXNlKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIERlcXVlSXRlcmF0b3JCYXNl
PFQsIGlubGluZUNhcGFjaXR5Pjo6fkRlcXVlSXRlcmF0b3JCYXNlKCkKICAgICB7CiAjaWZuZGVm
IE5ERUJVRwogICAgICAgICByZW1vdmVGcm9tSXRlcmF0b3JzTGlzdCgpOwpAQCAtNjAxLDE1ICs2
MDMsMTUgQEAgbmFtZXNwYWNlIFdURiB7CiAjZW5kaWYKICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIGlubGluZSBib29sIERlcXVlSXRlcmF0b3JCYXNlPFQ+Ojppc0VxdWFs
KGNvbnN0IERlcXVlSXRlcmF0b3JCYXNlJiBvdGhlcikgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIGJvb2wgRGVxdWVJdGVy
YXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+Ojppc0VxdWFsKGNvbnN0IERlcXVlSXRlcmF0b3JC
YXNlJiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkob3RoZXIpOwog
ICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OwogICAgIH0KIAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VD46
OmluY3JlbWVudCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFj
aXR5PgorICAgIGlubGluZSB2b2lkIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5
Pjo6aW5jcmVtZW50KCkKICAgICB7CiAgICAgICAgIGNoZWNrVmFsaWRpdHkoKTsKICAgICAgICAg
QVNTRVJUKG1faW5kZXggIT0gbV9kZXF1ZS0+bV9lbmQpOwpAQCAtNjIxLDggKzYyMyw4IEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgdm9pZCBEZXF1ZUl0ZXJhdG9yQmFzZTxUPjo6
ZGVjcmVtZW50KCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNp
dHk+CisgICAgaW5saW5lIHZvaWQgRGVxdWVJdGVyYXRvckJhc2U8VCwgaW5saW5lQ2FwYWNpdHk+
OjpkZWNyZW1lbnQoKQogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAgICBB
U1NFUlQobV9pbmRleCAhPSBtX2RlcXVlLT5tX3N0YXJ0KTsKQEAgLTYzNCwxNiArNjM2LDE2IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgVCogRGVxdWVJdGVyYXRvckJhc2U8VD46
OmFmdGVyKCkgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+CisgICAgaW5saW5lIFQqIERlcXVlSXRlcmF0b3JCYXNlPFQsIGlubGluZUNhcGFjaXR5
Pjo6YWZ0ZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgY2hlY2tWYWxpZGl0eSgpOwogICAgICAg
ICBBU1NFUlQobV9pbmRleCAhPSBtX2RlcXVlLT5tX2VuZCk7CiAgICAgICAgIHJldHVybiAmbV9k
ZXF1ZS0+bV9idWZmZXIuYnVmZmVyKClbbV9pbmRleF07CiAgICAgfQogCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgVCogRGVxdWVJdGVyYXRvckJhc2U8VD46OmJlZm9yZSgp
IGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgor
ICAgIGlubGluZSBUKiBEZXF1ZUl0ZXJhdG9yQmFzZTxULCBpbmxpbmVDYXBhY2l0eT46OmJlZm9y
ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBjaGVja1ZhbGlkaXR5KCk7CiAgICAgICAgIEFTU0VS
VChtX2luZGV4ICE9IG1fZGVxdWUtPm1fc3RhcnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MTcwNjUyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjUgQEAKKzIwMTQtMDctMDEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KKworICAgICAgICBSZWR1Y2UgZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiBp
biBjc3Mgaml0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM0NDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBjc3NqaXQvRnVuY3Rpb25DYWxsLmg6CisgICAgICAgIChXZWJDb3JlOjpGdW5jdGlvbkNh
bGw6OnNhdmVBbGxvY2F0ZWRSZWdpc3RlcnMpOgorICAgICAgICAqIGNzc2ppdC9SZWdpc3RlckFs
bG9jYXRvci5oOgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OmFkZFBzZXVkb0NsYXNzVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlU2VsZWN0b3JDaGVja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNOdGhDaGlsZCk6Cisg
ICAgICAgICogY3Nzaml0L1N0YWNrQWxsb2NhdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpTdGFj
a0FsbG9jYXRvcjo6cHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpTdGFja0FsbG9jYXRvcjo6cG9w
KToKKyAgICAgICAgVXNlIGlubGluZUNhcGFjaXR5IHRlbXBsYXRlIHBhcmFtZXRlciB0byByZWR1
Y2UgbWFsbG9jIGNhbGxzLgorICAgICAgICBJIHVzZSAzMiBhcyB0aGUgaW5saW5lIGNhcGFjaXR5
IGZvciBub24tcmVnaXN0ZXIgcmVsYXRlZCB2ZWN0b3JzIGJlY2F1c2UgdGhhdAorICAgICAgICBp
cyBwcm9iYWJseSBiaWcgZW5vdWdoIGZvciB0aGUgc2VsZWN0b3IgY29tcGlsZXIsIGFuZCBpZiBp
dCBpcyBub3QgdGhlbiBhIG1hbGxvYworICAgICAgICBjYWxsIHdpbGwgbm90IGJlIHNpZ25pZmlj
YW50IGJlY2F1c2UgdGhlIHNlbGVjdG9yIGlzIHZlcnkgY29tcGxleC4KKwogMjAxNC0wNy0wMSAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFtp
T1NdIFVucmV2aWV3ZWQgYnVpbGQgZml4IGFmdGVyIHIxNzA2NDAuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3Nzaml0L0Z1bmN0aW9uQ2FsbC5oCShyZXZpc2lvbiAxNzA2NDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3NqaXQvRnVuY3Rpb25DYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGdW5jdGlvbkNhbGwgewogcHVibGljOgotICAg
IEZ1bmN0aW9uQ2FsbChKU0M6Ok1hY3JvQXNzZW1ibGVyJiBhc3NlbWJsZXIsIFJlZ2lzdGVyQWxs
b2NhdG9yJiByZWdpc3RlckFsbG9jYXRvciwgU3RhY2tBbGxvY2F0b3ImIHN0YWNrQWxsb2NhdG9y
LCBWZWN0b3I8c3RkOjpwYWlyPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkNhbGwsIEpTQzo6RnVuY3Rp
b25QdHI+PiYgY2FsbFJlZ2lzdHJ5KQorICAgIEZ1bmN0aW9uQ2FsbChKU0M6Ok1hY3JvQXNzZW1i
bGVyJiBhc3NlbWJsZXIsIFJlZ2lzdGVyQWxsb2NhdG9yJiByZWdpc3RlckFsbG9jYXRvciwgU3Rh
Y2tBbGxvY2F0b3ImIHN0YWNrQWxsb2NhdG9yLCBWZWN0b3I8c3RkOjpwYWlyPEpTQzo6TWFjcm9B
c3NlbWJsZXI6OkNhbGwsIEpTQzo6RnVuY3Rpb25QdHI+LCAzMj4mIGNhbGxSZWdpc3RyeSkKICAg
ICAgICAgOiBtX2Fzc2VtYmxlcihhc3NlbWJsZXIpCiAgICAgICAgICwgbV9yZWdpc3RlckFsbG9j
YXRvcihyZWdpc3RlckFsbG9jYXRvcikKICAgICAgICAgLCBtX3N0YWNrQWxsb2NhdG9yKHN0YWNr
QWxsb2NhdG9yKQpAQCAtMTY3LDcgKzE2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
UmVnaXN0ZXJBbGxvY2F0b3I6OmlzQ2FsbGVyU2F2ZWRSZWdpc3RlcihyZWdpc3RlcklEKSkKICAg
ICAgICAgICAgICAgICBtX3NhdmVkUmVnaXN0ZXJzLmFwcGVuZChyZWdpc3RlcklEKTsKICAgICAg
ICAgfQotICAgICAgICBWZWN0b3I8U3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNlPiBzdGFj
a1JlZmVyZW5jZXMgPSBtX3N0YWNrQWxsb2NhdG9yLnB1c2gobV9zYXZlZFJlZ2lzdGVycyk7Cisg
ICAgICAgIFZlY3RvcjxTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2UsIHJlZ2lzdGVyQ291
bnQ+IHN0YWNrUmVmZXJlbmNlcyA9IG1fc3RhY2tBbGxvY2F0b3IucHVzaChtX3NhdmVkUmVnaXN0
ZXJzKTsKICAgICAgICAgbV9zYXZlZFJlZ2lzdGVyU3RhY2tSZWZlcmVuY2VzLmFwcGVuZFZlY3Rv
cihzdGFja1JlZmVyZW5jZXMpOwogICAgIH0KIApAQCAtMTgwLDcgKzE4MCw3IEBAIHByaXZhdGU6
CiAgICAgSlNDOjpNYWNyb0Fzc2VtYmxlciYgbV9hc3NlbWJsZXI7CiAgICAgUmVnaXN0ZXJBbGxv
Y2F0b3ImIG1fcmVnaXN0ZXJBbGxvY2F0b3I7CiAgICAgU3RhY2tBbGxvY2F0b3ImIG1fc3RhY2tB
bGxvY2F0b3I7Ci0gICAgVmVjdG9yPHN0ZDo6cGFpcjxKU0M6Ok1hY3JvQXNzZW1ibGVyOjpDYWxs
LCBKU0M6OkZ1bmN0aW9uUHRyPj4mIG1fY2FsbFJlZ2lzdHJ5OworICAgIFZlY3RvcjxzdGQ6OnBh
aXI8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6Q2FsbCwgSlNDOjpGdW5jdGlvblB0cj4sIDMyPiYgbV9j
YWxsUmVnaXN0cnk7CiAKICAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCwgcmVnaXN0ZXJDb3VudD4gbV9zYXZlZFJlZ2lzdGVyczsKICAgICBWZWN0b3I8U3RhY2tBbGxv
Y2F0b3I6OlN0YWNrUmVmZXJlbmNlLCByZWdpc3RlckNvdW50PiBtX3NhdmVkUmVnaXN0ZXJTdGFj
a1JlZmVyZW5jZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvUmVnaXN0ZXJBbGxvY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvUmVnaXN0ZXJBbGxvY2F0
b3IuaAkocmV2aXNpb24gMTcwNjQ1KQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L1JlZ2lzdGVy
QWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNSw3ICsyMDUsNyBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIERlcXVlPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQ+IG1fcmVnaXN0ZXJzOworICAgIERlcXVlPEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQsIHJlZ2lzdGVyQ291bnQ+IG1fcmVnaXN0ZXJzOwogICAgIFZlY3RvcjxKU0M6Ok1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklELCByZWdpc3RlckNvdW50PiBtX2FsbG9jYXRlZFJlZ2lzdGVyczsK
ICAgICBWZWN0b3I8SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCwgY2FsbGVlU2F2ZWRS
ZWdpc3RlckNvdW50PiBtX3Jlc2VydmVkQ2FsbGVlU2F2ZWRSZWdpc3RlcnM7CiB9OwpJbmRleDog
U291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAkocmV2aXNpb24gMTcw
NjQ1KQorKysgU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTksMTEgKzE1OSwxMSBAQCBzdHJ1Y3QgU2VsZWN0b3JGcmFnbWVudCB7
CiAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogdGFnTmFtZTsKICAgICBjb25zdCBBdG9taWNTdHJp
bmcqIGlkOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyogbGFuZ0ZpbHRlcjsKLSAgICBWZWN0b3I8
Y29uc3QgQXRvbWljU3RyaW5nSW1wbCosIDE+IGNsYXNzTmFtZXM7CisgICAgVmVjdG9yPGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwqLCAzMj4gY2xhc3NOYW1lczsKICAgICBIYXNoU2V0PHVuc2lnbmVk
PiBwc2V1ZG9DbGFzc2VzOwotICAgIFZlY3RvcjxKU0M6OkZ1bmN0aW9uUHRyPiB1bm9wdGltaXpl
ZFBzZXVkb0NsYXNzZXM7Ci0gICAgVmVjdG9yPEF0dHJpYnV0ZU1hdGNoaW5nSW5mbz4gYXR0cmli
dXRlczsKLSAgICBWZWN0b3I8c3RkOjpwYWlyPGludCwgaW50Pj4gbnRoQ2hpbGRGaWx0ZXJzOwor
ICAgIFZlY3RvcjxKU0M6OkZ1bmN0aW9uUHRyLCAzMj4gdW5vcHRpbWl6ZWRQc2V1ZG9DbGFzc2Vz
OworICAgIFZlY3RvcjxBdHRyaWJ1dGVNYXRjaGluZ0luZm8sIDMyPiBhdHRyaWJ1dGVzOworICAg
IFZlY3RvcjxzdGQ6OnBhaXI8aW50LCBpbnQ+LCAzMj4gbnRoQ2hpbGRGaWx0ZXJzOwogICAgIFZl
Y3RvcjxTZWxlY3RvckZyYWdtZW50PiBub3RGaWx0ZXJzOwogICAgIFZlY3RvcjxWZWN0b3I8U2Vs
ZWN0b3JGcmFnbWVudD4+IGFueUZpbHRlcnM7CiAKQEAgLTE5Miw4ICsxOTIsOCBAQCBzdHJ1Y3Qg
VGFnTmFtZVBhdHRlcm4gewogfTsKIAogdHlwZWRlZiBKU0M6Ok1hY3JvQXNzZW1ibGVyIEFzc2Vt
YmxlcjsKLXR5cGVkZWYgVmVjdG9yPFNlbGVjdG9yRnJhZ21lbnQsIDg+IFNlbGVjdG9yRnJhZ21l
bnRMaXN0OwotdHlwZWRlZiBWZWN0b3I8VGFnTmFtZVBhdHRlcm4sIDg+IFRhZ05hbWVMaXN0Owor
dHlwZWRlZiBWZWN0b3I8U2VsZWN0b3JGcmFnbWVudCwgMzI+IFNlbGVjdG9yRnJhZ21lbnRMaXN0
OwordHlwZWRlZiBWZWN0b3I8VGFnTmFtZVBhdHRlcm4sIDMyPiBUYWdOYW1lTGlzdDsKIAogY2xh
c3MgU2VsZWN0b3JDb2RlR2VuZXJhdG9yIHsKIHB1YmxpYzoKQEAgLTI2NSwxMiArMjY1LDEyIEBA
IHByaXZhdGU6CiAKICAgICBib29sIGdlbmVyYXRlUHJvbG9ndWUoKTsKICAgICB2b2lkIGdlbmVy
YXRlRXBpbG9ndWUoKTsKLSAgICBWZWN0b3I8U3RhY2tBbGxvY2F0b3I6OlN0YWNrUmVmZXJlbmNl
PiBtX3Byb2xvZ3VlU3RhY2tSZWZlcmVuY2VzOworICAgIFZlY3RvcjxTdGFja0FsbG9jYXRvcjo6
U3RhY2tSZWZlcmVuY2UsIHJlZ2lzdGVyQ291bnQ+IG1fcHJvbG9ndWVTdGFja1JlZmVyZW5jZXM7
CiAKICAgICBBc3NlbWJsZXIgbV9hc3NlbWJsZXI7CiAgICAgUmVnaXN0ZXJBbGxvY2F0b3IgbV9y
ZWdpc3RlckFsbG9jYXRvcjsKICAgICBTdGFja0FsbG9jYXRvciBtX3N0YWNrQWxsb2NhdG9yOwot
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXNzZW1ibGVyOjpDYWxsLCBKU0M6OkZ1bmN0aW9uUHRyPj4g
bV9mdW5jdGlvbkNhbGxzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8QXNzZW1ibGVyOjpDYWxsLCBK
U0M6OkZ1bmN0aW9uUHRyPiwgMzI+IG1fZnVuY3Rpb25DYWxsczsKIAogICAgIFNlbGVjdG9yQ29u
dGV4dCBtX3NlbGVjdG9yQ29udGV4dDsKICAgICBGdW5jdGlvblR5cGUgbV9mdW5jdGlvblR5cGU7
CkBAIC00NzYsNyArNDc2LDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRv
Q2xhcwogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnk6CiAgICAgICAgIHsK
LSAgICAgICAgICAgIFZlY3RvcjxTZWxlY3RvckZyYWdtZW50PiBhbnlGcmFnbWVudHM7CisgICAg
ICAgICAgICBWZWN0b3I8U2VsZWN0b3JGcmFnbWVudCwgMzI+IGFueUZyYWdtZW50czsKICAgICAg
ICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBGdW5jdGlvblR5cGU6OlNpbXBsZVNl
bGVjdG9yQ2hlY2tlcjsKICAgICAgICAgICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHJvb3RT
ZWxlY3RvciA9IHNlbGVjdG9yLnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyByb290U2VsZWN0b3I7
IHJvb3RTZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChyb290U2VsZWN0b3IpKSB7CiAg
ICAgICAgICAgICAgICAgU2VsZWN0b3JGcmFnbWVudExpc3QgZnJhZ21lbnRMaXN0OwpAQCAtMTE2
Niw3ICsxMTY2LDcgQEAgaW5saW5lIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcgog
CiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIoKQog
ewotICAgIFZlY3RvcjxTdGFja0FsbG9jYXRvcjo6U3RhY2tSZWZlcmVuY2U+IGNhbGxlZVNhdmVk
UmVnaXN0ZXJTdGFja1JlZmVyZW5jZXM7CisgICAgVmVjdG9yPFN0YWNrQWxsb2NhdG9yOjpTdGFj
a1JlZmVyZW5jZSwgY2FsbGVlU2F2ZWRSZWdpc3RlckNvdW50PiBjYWxsZWVTYXZlZFJlZ2lzdGVy
U3RhY2tSZWZlcmVuY2VzOwogICAgIGJvb2wgcmVzZXJ2ZWRDYWxsZWVTYXZlZFJlZ2lzdGVycyA9
IGZhbHNlOwogICAgIHVuc2lnbmVkIGF2YWlsYWJsZVJlZ2lzdGVyQ291bnQgPSBtX3JlZ2lzdGVy
QWxsb2NhdG9yLmF2YWlsYWJsZVJlZ2lzdGVyQ291bnQoKTsKICAgICB1bnNpZ25lZCBtaW5pbXVt
UmVnaXN0ZXJDb3VudEZvckF0dHJpYnV0ZXMgPSBtaW5pbXVtUmVnaXN0ZXJSZXF1aXJlbWVudHMo
bV9zZWxlY3RvckZyYWdtZW50cyk7CkBAIC0yNTgyLDcgKzI1ODIsNyBAQCB2b2lkIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBh
cmVudEVsZW1lbnQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXIoKTsKICAg
ICBnZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1lbnQoZmFpbHVyZUNhc2VzLCBwYXJlbnRFbGVtZW50
KTsKIAotICAgIFZlY3RvcjxzdGQ6OnBhaXI8aW50LCBpbnQ+PiB2YWxpZFN1YnNldEZpbHRlcnM7
CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxpbnQsIGludD4sIDMyPiB2YWxpZFN1YnNldEZpbHRlcnM7
CiAgICAgdmFsaWRTdWJzZXRGaWx0ZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZnJhZ21lbnQu
bnRoQ2hpbGRGaWx0ZXJzLnNpemUoKSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBzbG90IDogZnJh
Z21lbnQubnRoQ2hpbGRGaWx0ZXJzKSB7CiAgICAgICAgIGludCBhID0gc2xvdC5maXJzdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TdGFja0FsbG9jYXRvci5oCShyZXZpc2lvbiAxNzA2NDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU3RhY2tBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCiAKKyNp
bmNsdWRlICJSZWdpc3RlckFsbG9jYXRvci5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01h
Y3JvQXNzZW1ibGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY4LDIxICs2OSwyMCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdGFja1JlZmVyZW5jZShtX29mZnNldEZyb21Ub3Ap
OwogICAgIH0KIAotICAgIFZlY3RvcjxTdGFja1JlZmVyZW5jZT4gcHVzaChjb25zdCBWZWN0b3I8
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4mIHJlZ2lzdGVySURzKQorICAgIFZlY3Rv
cjxTdGFja1JlZmVyZW5jZSwgcmVnaXN0ZXJDb3VudD4gcHVzaChjb25zdCBWZWN0b3I8SlNDOjpN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4mIHJlZ2lzdGVySURzKQogICAgIHsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW1faGFzRnVuY3Rpb25DYWxsUGFkZGluZyk7Ci0gICAgICAgIHVuc2ln
bmVkIHJlZ2lzdGVyQ291bnQgPSByZWdpc3RlcklEcy5zaXplKCk7Ci0gICAgICAgIFZlY3RvcjxT
dGFja1JlZmVyZW5jZT4gc3RhY2tSZWZlcmVuY2VzOwotICAgICAgICBzdGFja1JlZmVyZW5jZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShyZWdpc3RlckNvdW50KTsKKyAgICAgICAgVmVjdG9yPFN0
YWNrUmVmZXJlbmNlLCByZWdpc3RlckNvdW50PiBzdGFja1JlZmVyZW5jZXM7CiAjaWYgQ1BVKEFS
TTY0KQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaXN0ZXJDb3VudCAtIDE7
IGkgKz0gMikgeworICAgICAgICB1bnNpZ25lZCBwdXNoUmVnaXN0ZXJDb3VudCA9IHJlZ2lzdGVy
SURzLnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHB1c2hSZWdpc3Rl
ckNvdW50IC0gMTsgaSArPSAyKSB7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5wdXNoUGFpcihy
ZWdpc3RlcklEc1tpICsgMV0sIHJlZ2lzdGVySURzW2ldKTsKICAgICAgICAgICAgIG1fb2Zmc2V0
RnJvbVRvcCArPSBzdGFja1VuaXRJbkJ5dGVzKCk7CiAgICAgICAgICAgICBzdGFja1JlZmVyZW5j
ZXMuYXBwZW5kKFN0YWNrUmVmZXJlbmNlKG1fb2Zmc2V0RnJvbVRvcCAtIHN0YWNrVW5pdEluQnl0
ZXMoKSAvIDIpKTsKICAgICAgICAgICAgIHN0YWNrUmVmZXJlbmNlcy5hcHBlbmQoU3RhY2tSZWZl
cmVuY2UobV9vZmZzZXRGcm9tVG9wKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJlZ2lzdGVy
Q291bnQgJSAyKQotICAgICAgICAgICAgc3RhY2tSZWZlcmVuY2VzLmFwcGVuZChwdXNoKHJlZ2lz
dGVySURzW3JlZ2lzdGVyQ291bnQgLSAxXSkpOworICAgICAgICBpZiAocHVzaFJlZ2lzdGVyQ291
bnQgJSAyKQorICAgICAgICAgICAgc3RhY2tSZWZlcmVuY2VzLmFwcGVuZChwdXNoKHJlZ2lzdGVy
SURzW3B1c2hSZWdpc3RlckNvdW50IC0gMV0pKTsKICNlbHNlCiAgICAgICAgIGZvciAoYXV0byBy
ZWdpc3RlcklEIDogcmVnaXN0ZXJJRHMpCiAgICAgICAgICAgICBzdGFja1JlZmVyZW5jZXMuYXBw
ZW5kKHB1c2gocmVnaXN0ZXJJRCkpOwpAQCAtMTAyLDE0ICsxMDIsMTQgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1faGFzRnVuY3Rpb25DYWxsUGFkZGluZyk7CiAK
LSAgICAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCA9IHJlZ2lzdGVySURzLnNpemUoKTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVuY2VzLnNpemUoKSA9PSByZWdpc3RlckNv
dW50KTsKKyAgICAgICAgdW5zaWduZWQgcG9wUmVnaXN0ZXJDb3VudCA9IHJlZ2lzdGVySURzLnNp
emUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVuY2VzLnNpemUoKSA9PSBw
b3BSZWdpc3RlckNvdW50KTsKICNpZiBDUFUoQVJNNjQpCi0gICAgICAgIEFTU0VSVChtX29mZnNl
dEZyb21Ub3AgPj0gc3RhY2tVbml0SW5CeXRlcygpICogKChyZWdpc3RlckNvdW50ICsgMSkgLyAy
KSk7Ci0gICAgICAgIHVuc2lnbmVkIHJlZ2lzdGVyQ291bnRPZGQgPSByZWdpc3RlckNvdW50ICUg
MjsKLSAgICAgICAgaWYgKHJlZ2lzdGVyQ291bnRPZGQpCi0gICAgICAgICAgICBwb3Aoc3RhY2tS
ZWZlcmVuY2VzW3JlZ2lzdGVyQ291bnQgLSAxXSwgcmVnaXN0ZXJJRHNbcmVnaXN0ZXJDb3VudCAt
IDFdKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmVnaXN0ZXJDb3VudCAtIHJlZ2lzdGVy
Q291bnRPZGQ7IGkgPiAwOyBpIC09IDIpIHsKKyAgICAgICAgQVNTRVJUKG1fb2Zmc2V0RnJvbVRv
cCA+PSBzdGFja1VuaXRJbkJ5dGVzKCkgKiAoKHBvcFJlZ2lzdGVyQ291bnQgKyAxKSAvIDIpKTsK
KyAgICAgICAgdW5zaWduZWQgcG9wUmVnaXN0ZXJDb3VudE9kZCA9IHBvcFJlZ2lzdGVyQ291bnQg
JSAyOworICAgICAgICBpZiAocG9wUmVnaXN0ZXJDb3VudE9kZCkKKyAgICAgICAgICAgIHBvcChz
dGFja1JlZmVyZW5jZXNbcG9wUmVnaXN0ZXJDb3VudCAtIDFdLCByZWdpc3RlcklEc1twb3BSZWdp
c3RlckNvdW50IC0gMV0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBwb3BSZWdpc3RlckNv
dW50IC0gcG9wUmVnaXN0ZXJDb3VudE9kZDsgaSA+IDA7IGkgLT0gMikgewogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVuY2VzW2kgLSAxXSA9PSBtX29mZnNldEZyb21Ub3Ap
OwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhY2tSZWZlcmVuY2VzW2kgLSAyXSA9PSBt
X29mZnNldEZyb21Ub3AgLSBzdGFja1VuaXRJbkJ5dGVzKCkgLyAyKTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fb2Zmc2V0RnJvbVRvcCA+PSBzdGFja1VuaXRJbkJ5dGVzKCkpOwpAQCAt
MTE3LDggKzExNyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLnBvcFBhaXIo
cmVnaXN0ZXJJRHNbaSAtIDFdLCByZWdpc3RlcklEc1tpIC0gMl0pOwogICAgICAgICB9CiAjZWxz
ZQotICAgICAgICBBU1NFUlQobV9vZmZzZXRGcm9tVG9wID49IHN0YWNrVW5pdEluQnl0ZXMoKSAq
IHJlZ2lzdGVyQ291bnQpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSByZWdpc3RlckNvdW50
OyBpID4gMDsgLS1pKQorICAgICAgICBBU1NFUlQobV9vZmZzZXRGcm9tVG9wID49IHN0YWNrVW5p
dEluQnl0ZXMoKSAqIHBvcFJlZ2lzdGVyQ291bnQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBwb3BSZWdpc3RlckNvdW50OyBpID4gMDsgLS1pKQogICAgICAgICAgICAgcG9wKHN0YWNrUmVm
ZXJlbmNlc1tpIC0gMV0sIHJlZ2lzdGVySURzW2kgLSAxXSk7CiAjZW5kaWYKICAgICB9Cg==
</data>
<flag name="review"
          id="258722"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>