<?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>207087</bug_id>
          
          <creation_ts>2020-02-01 00:19:09 -0800</creation_ts>
          <short_desc>[JSC] Introduce UnlinkedCodeBlockGenerator and reduce sizeof(UnlinkedCodeBlock)</short_desc>
          <delta_ts>2020-02-04 11:06:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1613723</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-01 00:19:09 -0800</bug_when>
    <thetext>UnlinkedCodeBlock has many Vectors while they are already frozen.
We should introduce UnlinkedCodeBlockWriter, and use Vector in it.
And when creating UnlinkedCodeBlock, we should use RefCountedArray for Vectors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614450</commentid>
    <comment_count>1</comment_count>
      <attachid>389635</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-04 01:08:20 -0800</bug_when>
    <thetext>Created attachment 389635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614451</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-04 01:11:27 -0800</bug_when>
    <thetext>I think this can offer sub-1% memory reduction in Gmail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614456</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-04 01:40:18 -0800</bug_when>
    <thetext>Ah,dead-lock! Fixing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614458</commentid>
    <comment_count>4</comment_count>
      <attachid>389639</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-04 01:48:48 -0800</bug_when>
    <thetext>Created attachment 389639
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614460</commentid>
    <comment_count>5</comment_count>
      <attachid>389640</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-04 01:50:55 -0800</bug_when>
    <thetext>Created attachment 389640
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614469</commentid>
    <comment_count>6</comment_count>
      <attachid>389645</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-04 02:29:13 -0800</bug_when>
    <thetext>Created attachment 389645
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614628</commentid>
    <comment_count>7</comment_count>
      <attachid>389645</attachid>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2020-02-04 10:43:05 -0800</bug_when>
    <thetext>Comment on attachment 389645
Patch

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

Nice!

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlockGenerator.cpp:150
&gt; +        if (!m_codeBlock-&gt;m_rareData) {

Why would the code block have rare data at this point?

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:291
&gt; +    m_codeBlock-&gt;finalize(m_writer.finalize());

Not necessarily on this patch, but ideally I think UnlinkedCodeBlockGenerator should own the UnlinkedCodeBlock and return it from finalize.

&gt; Source/WTF/wtf/RefCountedArray.h:201
&gt; +    T&amp; front() { return (*this)[0]; }
&gt; +    const T&amp; front() const { return (*this)[0]; }

I believe this called `first` in Vector, should we just call the same here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614641</commentid>
    <comment_count>8</comment_count>
      <attachid>389645</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-04 11:03:35 -0800</bug_when>
    <thetext>Comment on attachment 389645
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlockGenerator.cpp:150
&gt;&gt; +        if (!m_codeBlock-&gt;m_rareData) {
&gt; 
&gt; Why would the code block have rare data at this point?

If `NeedsClassFieldInitializer::Yes` is specified, we create a rareData in UnlinkedCodeBlock&apos;s constructor.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:291
&gt;&gt; +    m_codeBlock-&gt;finalize(m_writer.finalize());
&gt; 
&gt; Not necessarily on this patch, but ideally I think UnlinkedCodeBlockGenerator should own the UnlinkedCodeBlock and return it from finalize.

Right! Filed a issue here. https://bugs.webkit.org/show_bug.cgi?id=207212

&gt;&gt; Source/WTF/wtf/RefCountedArray.h:201
&gt;&gt; +    const T&amp; front() const { return (*this)[0]; }
&gt; 
&gt; I believe this called `first` in Vector, should we just call the same here?

Nice, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614642</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-04 11:05:25 -0800</bug_when>
    <thetext>Committed r255687: &lt;https://trac.webkit.org/changeset/255687&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614643</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-04 11:06:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/59155888&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389635</attachid>
            <date>2020-02-04 01:08:20 -0800</date>
            <delta_ts>2020-02-04 01:48:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207087-20200204010819.patch</filename>
            <type>text/plain</type>
            <size>97489</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1NjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
N2U0MjkzOWJmN2Q3MmU2N2ZiZWEzYmEyMWZiYmY4ZWEwMTEwZDA0Li5kOTc2MmUxMGU1OTg1NmFi
OTJhMTk0MTMzMjkxODAwNTczNTFjNTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODEgQEAKKzIwMjAtMDItMDQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBJbnRyb2R1Y2UgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3Ig
YW5kIHJlZHVjZSBzaXplb2YoVW5saW5rZWRDb2RlQmxvY2spCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwODcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGlsZSBVbmxpbmtlZENvZGVCbG9jayBpcyBp
bW11dGFibGUgb25jZSBpdCBpcyBjcmVhdGVkIGZyb20gQnl0ZWNvZGVHZW5lcmF0b3IsIGl0IGhh
cyBtYW55IG11dGFibGUgVmVjdG9ycy4KKyAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHdlIGFyZSB1
c2luZyBVbmxpbmtlZENvZGVCbG9jayBhcyBhIGJ1aWxkZXIgb2YgVW5saW5rZWRDb2RlQmxvY2sg
aXRzZWxmIHRvbyBpbiBCeXRlY29kZUdlbmVyYXRvci4KKyAgICAgICAgU2luY2UgVmVjdG9yIHRh
a2VzIDE2IGJ5dGVzIHRvIGFsbG93IGVmZmljaWVudCBleHBhbnNpb25zLCBpdCBpcyBuaWNlIGlm
IHdlIGNhbiB1c2UgUmVmQ291bnRlZEFycmF5IGluc3RlYWQgd2hlbgorICAgICAgICB3ZSBrbm93
IHRoaXMgVmVjdG9yIGlzIGltbXV0YWJsZS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCB3ZSBp
bnRyb2R1Y2UgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3Igd3JhcHBlci4gQnl0ZWNvZGVHZW5l
cmF0b3IsIEJ5dGVjb2RlUmV3cml0ZXIsIEJ5dGVjb2RlRHVtcGVyLAorICAgICAgICBhbmQgQnl0
ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24gaW50ZXJhY3Qgd2l0aCBVbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvciBpbnN0ZWFkIG9mIFVubGlua2VkQ29kZUJsb2NrLiBBbmQgVW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3IKKyAgICAgICAgd2lsbCBnZW5lcmF0ZSB0aGUgZmluYWxpemVkIFVubGlua2Vk
Q29kZUJsb2NrLiBUaGlzIGRlc2lnbiBhbGxvd3MgdXMgdG8gdXNlIFJlZkNvdW50ZWRBcnJheSBm
b3IgZGF0YSBpbiBVbmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAgd2hpY2ggaXMgKDEpIHNtYWxs
ZXIgYW5kICgyKSBkb2luZyBzaHJpbmtUb0ZpdCBvcGVyYXRpb24gd2hlbiBjcmVhdGluZyBpdCBm
cm9tIFZlY3Rvci4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZHVjZXMgc2l6ZW9mKFVubGlua2Vk
Q29kZUJsb2NrKSBmcm9tIDI1NiB0byAxNjgsIDg4IGJ5dGVzIHJlZHVjdGlvbi4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpjb21wdXRlKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29k
ZUR1bXBlci5jcHA6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRp
b24uY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6Qnl0ZWNv
ZGVHZW5lcmF0b3JpZmljYXRpb24pOgorICAgICAgICAoSlNDOjpHZW5lcmF0b3JMaXZlbmVzc0Fu
YWx5c2lzOjpydW4pOgorICAgICAgICAoSlNDOjpwZXJmb3JtR2VuZXJhdG9yaWZpY2F0aW9uKToK
KyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVS
ZXdyaXRlcjo6Qnl0ZWNvZGVSZXdyaXRlcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRS
ZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVyRm9ySW5kZXgpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQ
cm9maWxlcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0
ZWNvZGUvSGFuZGxlckluZm8uaDoKKyAgICAgICAgKEpTQzo6SGFuZGxlckluZm9CYXNlOjpoYW5k
bGVyRm9ySW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHA6
CisgICAgICAgIChKU0M6OmNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMpOgorICAgICAgICAoSlND
OjpyZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMpOgorICAgICAgICAoSlNDOjpmaW5kSnVtcFRh
cmdldHNGb3JJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJn
ZXRzLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpkdW1wRXhwcmVzc2lvblJhbmdlSW5mbyk6CisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRFeHByZXNzaW9uSW5mbyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRUeXBlUHJvZmlsZXJF
eHByZXNzaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpzZXRJbnN0cnVjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9jazo6YXBwbHlNb2RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6c2hyaW5rVG9GaXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6YWRkT3V0T2ZMaW5lSnVtcFRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICog
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OmV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6
OnNldE51bVBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVt
YmVyT2ZJZGVudGlmaWVycyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjppZGVudGlmaWVycyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpi
aXRWZWN0b3IpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRSZWdp
c3RlcnMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNv
bnN0YW50SWRlbnRpZmllclNldHMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
bnVtYmVyT2ZKdW1wVGFyZ2V0cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrOjpudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9jazo6bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mRnVuY3Rpb25EZWNscyk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJz
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om9wUHJvZmlsZUNvbnRy
b2xGbG93Qnl0ZWNvZGVPZmZzZXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2s6OmFkZFBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrOjphZGRJZGVudGlmaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OmFkZEJpdFZlY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjphZGRTZXRDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjphZGRDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjphZGRKdW1wVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmFkZFN3aXRjaEp1bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkRnVuY3Rpb25EZWNsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEZ1bmN0aW9uRXhwcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRFeGNlcHRpb25I
YW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZE9w
UHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9jazo6cmVwbGFjZU91dE9mTGluZUp1bXBUYXJnZXRzKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6Z2V0TGluZUFu
ZENvbHVtbiBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
OjphZGRFeHByZXNzaW9uSW5mbyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yOjphZGRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleCk6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpoYW5kbGVyRm9ySW5kZXgpOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YXBwbHlNb2RpZmljYXRpb24p
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkT3V0T2ZMaW5l
SnVtcFRhcmdldCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpv
dXRPZkxpbmVKdW1wT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3I6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvcjo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9ja0dlbmVyYXRvcjo6dm0pOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
a0dlbmVyYXRvcjo6aXNDb25zdHJ1Y3RvciBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yOjpjb25zdHJ1Y3RvcktpbmQgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c3VwZXJCaW5kaW5nIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OnNjcmlwdE1vZGUgY29uc3QpOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6bmVlZHNDbGFzc0ZpZWxk
SW5pdGlhbGl6ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvcjo6aXNTdHJpY3RNb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3I6OnVzZXNFdmFsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3I6OnBhcnNlTW9kZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yOjppc0Fycm93RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6ZGVyaXZlZENvbnRleHRUeXBlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmV2YWxDb250ZXh0VHlwZSBjb25z
dCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjppc0Fycm93RnVu
Y3Rpb25Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3I6OmlzQ2xhc3NDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3I6Om51bUNhbGxlZUxvY2FscyBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpudW1WYXJzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bVBhcmFtZXRlcnMgY29uc3QpOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6dGhpc1JlZ2lzdGVyIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OnNjb3BlUmVnaXN0ZXIg
Y29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6d2FzQ29t
cGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yOjpoYXNDaGVja3BvaW50cyBjb25zdCk6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpoYXNUYWlsQ2FsbHMgY29uc3QpOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c2V0SGFzQ2hlY2twb2ludHMpOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c2V0SGFzVGFpbENhbGxz
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OnNldE51bUNhbGxl
ZUxvY2Fscyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpzZXRO
dW1WYXJzKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OnNldFRo
aXNSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpz
ZXRTY29wZVJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3I6OnNldE51bVBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvcjo6bWV0YWRhdGEpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvcjo6YWRkT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpudW1iZXJPZkp1bXBUYXJnZXRzIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmFkZEp1bXBUYXJn
ZXQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6anVtcFRhcmdl
dCBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpsYXN0
SnVtcFRhcmdldCBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yOjpudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OnN3aXRjaEp1bXBUYWJsZSk6CisgICAgICAg
IChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpudW1iZXJPZlN0cmluZ1N3aXRjaEp1
bXBUYWJsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
cjo6YWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3I6OnN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmV4Y2VwdGlvbkhh
bmRsZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkRXhj
ZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
OjpiaXRWZWN0b3IpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6
YWRkQml0VmVjdG9yKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6
Om51bWJlck9mQ29uc3RhbnRJZGVudGlmaWVyU2V0cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpjb25zdGFudElkZW50aWZpZXJTZXRzKToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmFkZFNldENvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmNvbnN0YW50UmVnaXN0ZXIg
Y29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6Y29uc3Rh
bnRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6
Z2V0Q29uc3RhbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvcjo6Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmFkZEZ1bmN0aW9uRGVjbCk6CisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjphZGRGdW5jdGlvbkV4cHIpOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6bnVtYmVyT2ZJZGVudGlmaWVycyBj
b25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjppZGVudGlm
aWVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmFk
ZElkZW50aWZpZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6
b3V0T2ZMaW5lSnVtcE9mZnNldCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yOjpyZXBsYWNlT3V0T2ZMaW5lSnVtcFRhcmdldHMpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6bWV0YWRhdGFTaXplSW5CeXRlcyk6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6Omlu
aXRpYWxpemVOZXh0UGFyYW1ldGVyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRQdXNoRnVuY3Rpb25OYW1lU2NvcGUpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6
ZSk6CisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKToKKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3JCYXNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvckJhc2U8VHJhaXRzPjo6bmV3UmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvckJhc2U8VHJhaXRzPjo6YWRkVmFyKToKKyAgICAgICAgKiBydW50aW1l
L0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmVjdG9yOjplbmNvZGUpOgor
ICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmRlY29kZSBjb25zdCk6CisgICAgICAgICogd2Fz
bS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rpb25D
b2RlQmxvY2s6OnNldE51bVZhcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNvZGVC
bG9jazo6c2V0TnVtQ2FsbGVlTG9jYWxzKToKKwogMjAyMC0wMi0wMyAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFVzZSBQYWNrZWRQdHIgZm9yIFZh
cmlhYmxlRW52aXJvbm1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291
cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggODkzMjM1N2E0OTE1ZmVjNzdiNGYzYWQzYWMxMWY5M2Iy
Y2MxNGE3Ny4uNzJhMTE4YzhhOWU2MGRhZGFjOGMyYTBjMGIzYWNhM2NiZDM0MjA1ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMCBAQAorMjAyMC0wMi0wNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgorCisgICAgICAgIFtKU0NdIEludHJvZHVjZSBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
ciBhbmQgcmVkdWNlIHNpemVvZihVbmxpbmtlZENvZGVCbG9jaykKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzA4NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtb3JlIHVzZWZ1bCBtZXRob2RzIGZv
ciBSZWZDb3VudGVkQXJyYXkuCisKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZEFycmF5Lmg6Cisg
ICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6
UmVmQ291bnRlZEFycmF5Ojppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6UmVmQ291bnRl
ZEFycmF5Ojpmcm9udCk6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6ZnJvbnQgY29u
c3QpOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6Omxhc3QpOgorICAgICAgICAoV1RG
OjpSZWZDb3VudGVkQXJyYXk6Omxhc3QgY29uc3QpOgorCiAyMDIwLTAyLTAzICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVkdWNlIHNpemUg
b2YgSGFzaE1hcCBhbmQgSGFzaFNldApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBi
NGE1MTRjNTdkNzI5ZDM1NmFjZDU1NzYzZDViZmI3ODg4NWY0NDhiLi41Y2EwYzg2MDJiZTE0YzVl
M2I5OWIzZTIxMTJmMmQyOGRkZDkxYmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTc4OCw2ICsxNzg4LDcgQEAKIAkJRTMyOERBRTkxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVj
b2RlR3JhcGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEUzRDI2NDI4MUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRlY29kZUdyYXBoLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTMyOERBRUIxRDM4RDAwNTAw
MUEyNTI5IC8qIEJ5dGVjb2RlUmV3cml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUzRDI2NDJBMUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRlY29kZVJl
d3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRTMyQUIyNDQxRENENzVGNDAwRDc1MzNBIC8qIE1hY3JvQXNzZW1ibGVySGVscGVycy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM4MEE3NkIxRENE
NzE5NTAwMEY4OUU2IC8qIE1hY3JvQXNzZW1ibGVySGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzMkMzQzY5MjNFOTRDMUUwMEJDOTdD
MCAvKiBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMyQzNDNjgyM0U5NEMxRTAwQkM5N0MwIC8qIFVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yLmggKi87IH07CiAJCUUzMzA5NUREMjMyMTBBMUIwMEVCNzg1
NiAvKiBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzMwOTVEQzIzMjEwQTE0MDBFQjc4NTYgLyogSlNJbnRl
cm5hbEZpZWxkT2JqZWN0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUUzMzRDQkI1MjFGRDk2QTkwMDBFQjE3OCAvKiBSZWdFeHBHbG9iYWxE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzM0
Q0JCMzIxRkQ5NkE5MDAwRUIxNzggLyogUmVnRXhwR2xvYmFsRGF0YS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzMzYzN0E2MUI2MzIyMDIwMEVF
MDg0MCAvKiBSZWZsZWN0T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMzM2MzdBNDFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9iamVjdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00OTA4
LDYgKzQ5MDksNyBAQAogCQlFMzI2QzQ5NjFFQ0JFRjU3MDBBOUE5MDUgLyogQ2xhc3NJbmZvLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsYXNzSW5mby5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMjgyQkI5MUZFOTMwQTMwMEVEQUY3MSAvKiBZ
YXJyRXJyb3JDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFlh
cnJFcnJvckNvZGUuY3BwOyBwYXRoID0geWFyci9ZYXJyRXJyb3JDb2RlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyODJCQkExRkU5MzBBNDAwRURBRjcxIC8qIFlhcnJFcnJv
ckNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckVycm9yQ29kZS5o
OyBwYXRoID0geWFyci9ZYXJyRXJyb3JDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUUzMkMzQzY4MjNFOTRDMUUwMEJDOTdDMCAvKiBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzMwNUZBRjIwQjBGNzg3
MDBDRUI4MkIgLyogSW5CeUlkU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluQnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzMwNUZC
MDIwQjBGNzg3MDBDRUI4MkIgLyogSW5CeUlkVmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbkJ5SWRWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTMzMDVGQjEyMEIwRjc4ODAwQ0VCODJCIC8qIEluQnlJZFZhcmlhbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5CeUlkVmFyaWFudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDk1Niw2ICs0OTU4LDcgQEAKIAkJRTM1RTAzNjExQjdB
QjQ4NTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bk9iamVjdC5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM2MzdFRTcyMzZFNTZC
MDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGlua1RpbWVDb25zdGFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFMzYzN0VFODIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5rVGltZUNvbnN0YW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM2QjQ4MDEyM0U5NTczODAwRTRBNjZFIC8qIFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM2
Qjc2NkUyMkY4RDYxMTAwRDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzNkI3NjZGMjJGOEQ2MTEwMEQwOTgxOCAvKiBXYXNtT01HRm9yT1NS
RW50cnlQbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PTUdGb3JPU1JFbnRyeVBsYW4uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM2Q0M5NDYyMDg2MzE0RjAwNTFGRkQ2IC8qIFdh
c21DcmVhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbUNy
ZWF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODM2MCw2ICs4MzYz
LDggQEAKIAkJCQkwRjJENERFNzE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmggKi8s
CiAJCQkJQTc5RTc4MUUxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmNwcCAq
LywKIAkJCQlBNzlFNzgxRjE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suaCAq
LywKKwkJCQlFMzZCNDgwMTIzRTk1NzM4MDBFNEE2NkUgLyogVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IuY3BwICovLAorCQkJCUUzMkMzQzY4MjNFOTRDMUUwMEJDOTdDMCAvKiBVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvci5oICovLAogCQkJCTE0QUQ5MTI4MURDQUFBQjAwMDE0RjlGRSAvKiBV
bmxpbmtlZEV2YWxDb2RlQmxvY2suY3BwICovLAogCQkJCTE0QUQ5MTFFMURDQTlGQTQwMDE0RjlG
RSAvKiBVbmxpbmtlZEV2YWxDb2RlQmxvY2suaCAqLywKIAkJCQkxNEFEOTEyQjFEQ0FBQUIwMDAx
NEY5RkUgLyogVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5jcHAgKi8sCkBAIC05MTUwLDYgKzkx
NTUsNyBAQAogCQkJCUE1MzI0Mzk4MTg1NkE0ODkwMDJFRDY5MiAvKiBDb21iaW5lZERvbWFpbnMu
anNvbiBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21t
b25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUYxNUYxNEI3QTczRTAwNURF
MzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNBOTIwQkQyM0RB
MkM2RDAwMEVCQUYwIC8qIENvbW1vblNsb3dQYXRoc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3RTVBM0E4MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0RjExRTgyMDlCQ0RBQjAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5n
U2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBD
b21wbGV0ZVN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKQEAgLTkzODYsNyArOTM5Miw2IEBACiAJ
CQkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFMDUwMTgxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTYxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVj
dEFyZ3VtZW50c09mZnNldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzNBOTIwQkQyM0RBMkM2RDAw
MEVCQUYwIC8qIENvbW1vblNsb3dQYXRoc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
OUEwNzk4MEVEMUQzQUUwMEYxRjY4MSAvKiBEaXJlY3RFdmFsQ29kZUNhY2hlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDM4NkE3NTFERDY5ODk1MDA4NjUyQzQgLyogRGlyZWN0RXZhbEV4ZWN1dGFi
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzczMDhGMUMwQ0Q2ODUwMDA1MkJGQSAvKiBEaXNh
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTAyNDks
NiArMTAyNTQsNyBAQAogCQkJCUE3QThBRjNGMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0MDE3QURCNUYzMDA1QUIxNzQgLyogVWludDhD
bGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjYwMTgyMTYzOUZEMkEwMDM3MkJB
MyAvKiBVbmxpbmtlZENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTMyQzNDNjkyM0U5
NEMxRTAwQkM5N0MwIC8qIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNEFEOTEyNDFEQ0E5RkE0MDAxNEY5RkUgLyogVW5saW5rZWRFdmFsQ29kZUJsb2Nr
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEFEOTEyMzFEQ0E5RkE0MDAxNEY5RkUgLyogVW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDJFNTExQjc5NkVD
RTAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCAzY2JmNDg3MDA3NzFkMTcwMjcwM2E3YTA3
N2U1ZjQwYWVhZmY0NmZjLi43NmYxYzY5NDg1YzZmY2JlZTQ4N2U1YWM5ODZjYTQ2MzYzNTNhZWJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0yNzUsNiArMjc1LDcgQEAgYnl0ZWNv
ZGUvU3VwZXJTYW1wbGVyLmNwcAogYnl0ZWNvZGUvVG9UaGlzU3RhdHVzLmNwcAogYnl0ZWNvZGUv
VHJhY2tlZFJlZmVyZW5jZXMuY3BwCiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKK2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmNwcAogYnl0ZWNvZGUvVW5saW5rZWRF
dmFsQ29kZUJsb2NrLmNwcAogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5jcHAK
IGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcAppbmRleCA2
NmQxMTJhM2I0NTU5NWJmYmFlMTk1MWFkYjAwZGJhNmFhOTRiYThiLi44ZDE4NmFmNGU4Yjg2OTcw
ZDk1Yzc0ZWRlOTE2MWY4OWQ5ZDM4NjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMjIwLDcgKzIyMSw3IEBA
IGF1dG8gQnl0ZWNvZGVCYXNpY0Jsb2NrOjpjb21wdXRlKENvZGVCbG9jayogY29kZUJsb2NrLCBj
b25zdCBJbnN0cnVjdGlvblN0cmVhbSYKICAgICByZXR1cm4gY29tcHV0ZUltcGwoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvbnMpOwogfQogCi1hdXRvIEJ5dGVjb2RlQmFzaWNCbG9jazo6Y29tcHV0ZShV
bmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5z
dHJ1Y3Rpb25zKSAtPiBCYXNpY0Jsb2NrVmVjdG9yCithdXRvIEJ5dGVjb2RlQmFzaWNCbG9jazo6
Y29tcHV0ZShVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCBjb25zdCBJbnN0
cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKSAtPiBCYXNpY0Jsb2NrVmVjdG9yCiB7CiAgICAg
cmV0dXJuIGNvbXB1dGVJbXBsKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaAppbmRl
eCAxMjFjZTg5YTlkM2NlNGQyOGJlMTJkOTcwZGJlZTkyNDE3MDc4ODdmLi5kNGY1MzNiYzhiYTBh
YzU2OGJhODY4MTczMzg3ZDAzNTQ3YWJkMzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCkBAIC0zNiw2ICszNiw3IEBAIG5h
bWVzcGFjZSBKU0MgewogY2xhc3MgQnl0ZWNvZGVHcmFwaDsKIGNsYXNzIENvZGVCbG9jazsKIGNs
YXNzIFVubGlua2VkQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7
CiBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVO
VElGSUVSKEJ5dGVjb2RlQmFzaWNCbG9jayk7CkBAIC03Miw3ICs3Myw3IEBAIGNsYXNzIEJ5dGVj
b2RlQmFzaWNCbG9jayB7CiBwcml2YXRlOgogICAgIC8vIE9ubHkgY2FsbGVkIGZyb20gQnl0ZWNv
ZGVHcmFwaC4KICAgICBzdGF0aWMgQmFzaWNCbG9ja1ZlY3RvciBjb21wdXRlKENvZGVCbG9jayos
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMpOwotICAgIHN0YXRpYyBCYXNp
Y0Jsb2NrVmVjdG9yIGNvbXB1dGUoVW5saW5rZWRDb2RlQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlv
blN0cmVhbSYgaW5zdHJ1Y3Rpb25zKTsKKyAgICBzdGF0aWMgQmFzaWNCbG9ja1ZlY3RvciBjb21w
dXRlKFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0m
IGluc3RydWN0aW9ucyk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmxvY2s+IHN0YXRpYyBCYXNp
Y0Jsb2NrVmVjdG9yIGNvbXB1dGVJbXBsKEJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0
aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMpOwogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKaW5k
ZXggODM2NTExNWY0MjE3OTFhNWM2NjQ4M2E1YTc5MDVjYWU1YzBlZTNlMS4uZDM3MjM2ZjQwYWE4
OTkxMjdjNzQ5ZWJkYjk4Njk2Yzc3ODVkOGNiMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCkBAIC00MCw3ICs0MCw3IEBACiAjaW5j
bHVkZSAiUHV0QnlJZEZsYWdzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlRvVGhpc1N0YXR1cy5oIgotI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJVbmxpbmtl
ZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiV2FzbUdlbmVyYXRvclRyYWl0cy5oIgpAQCAtMjcwLDcgKzI3MCw3IEBA
IHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wQmxvY2soQmxvY2sqIGJs
b2NrLCBjb25zdCBJbnN0cnVjdGlvblN0CiB9CiAKIHRlbXBsYXRlIGNsYXNzIEJ5dGVjb2RlRHVt
cGVyPENvZGVCbG9jaz47Ci10ZW1wbGF0ZSBjbGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxV
bmxpbmtlZENvZGVCbG9jaz47Cit0ZW1wbGF0ZSBjbGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBl
cjxVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcj47CiB0ZW1wbGF0ZSBjbGFzcyBDb2RlQmxvY2tC
eXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+OwogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9y
aWZpY2F0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdl
bmVyYXRvcmlmaWNhdGlvbi5jcHAKaW5kZXggYjBiNTcwZTkwMjA5NmMyOTI1MWZiNmZhNDQ3YzFh
ZTJiZmQ1ZTgyNi4uODE3ODUxY2JhNGQ4ZjI0ZDUyMTFkMWE0OWZjNTQyYzU0ZTk3MTBmOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9y
aWZpY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAiSlNH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJMYWJlbC5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGluZXMu
aCIKLSNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5saW5l
cy5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCkBAIC02NCw3ICs2NCw3IEBAIGNsYXNz
IEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1f
aW5pdGlhbFZhbHVlOwogICAgIH07CiAKLSAgICBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbihC
eXRlY29kZUdlbmVyYXRvciYgYnl0ZWNvZGVHZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyJiBpbnN0cnVjdGlvbnMsIFN5bWJvbFRh
YmxlKiBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLCBpbnQgZ2VuZXJhdG9yRnJhbWVTeW1ib2xU
YWJsZUluZGV4KQorICAgIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uKEJ5dGVjb2RlR2VuZXJh
dG9yJiBieXRlY29kZUdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVC
bG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImIGluc3RydWN0aW9ucywgU3ltYm9sVGFibGUq
IGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUsIGludCBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxl
SW5kZXgpCiAgICAgICAgIDogbV9ieXRlY29kZUdlbmVyYXRvcihieXRlY29kZUdlbmVyYXRvcikK
ICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9pbnN0cnVjdGlv
bnMoaW5zdHJ1Y3Rpb25zKQpAQCAtMTc0LDcgKzE3NCw3IEBAIGNsYXNzIEJ5dGVjb2RlR2VuZXJh
dG9yaWZpY2F0aW9uIHsKICAgICBCeXRlY29kZUdlbmVyYXRvciYgbV9ieXRlY29kZUdlbmVyYXRv
cjsKICAgICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG1fZW50ZXJQb2ludDsKICAgICBPcHRp
b25hbDxHZW5lcmF0b3JGcmFtZURhdGE+IG1fZ2VuZXJhdG9yRnJhbWVEYXRhOwotICAgIFVubGlu
a2VkQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
ciogbV9jb2RlQmxvY2s7CiAgICAgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImIG1faW5zdHJ1Y3Rp
b25zOwogICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFwaDsKICAgICBWZWN0b3I8T3B0aW9uYWw8U3Rv
cmFnZT4+IG1fc3RvcmFnZXM7CkBAIC0xOTAsNyArMTkwLDcgQEAgY2xhc3MgR2VuZXJhdG9yTGl2
ZW5lc3NBbmFseXNpcyA6IHB1YmxpYyBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb24gewogICAg
IHsKICAgICB9CiAKLSAgICB2b2lkIHJ1bihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCBJ
bnN0cnVjdGlvblN0cmVhbVdyaXRlciYgaW5zdHJ1Y3Rpb25zKQorICAgIHZvaWQgcnVuKFVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtV3JpdGVy
JiBpbnN0cnVjdGlvbnMpCiAgICAgewogICAgICAgICAvLyBQZXJmb3JtIG1vZGlmaWVkIGxpdmVu
ZXNzIGFuYWx5c2lzIHRvIGRldGVybWluZSB3aGljaCBsb2NhbHMgYXJlIGxpdmUgYXQgdGhlIG1l
cmdlIHBvaW50cy4KICAgICAgICAgLy8gVGhpcyBwcm9kdWNlcyB0aGUgY29uc2VydmF0aXZlIHJl
c3VsdHMgZm9yIHRoZSBxdWVzdGlvbiwgIndoaWNoIHZhcmlhYmxlcyBzaG91bGQgYmUgc2F2ZWQg
YW5kIHJlc3VtZWQ/Ii4KQEAgLTI5NSwxMCArMjk1LDEwIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb246OnJ1bigpCiAgICAgcmV3cml0ZXIuZXhlY3V0ZSgpOwogfQogCi12b2lkIHBl
cmZvcm1HZW5lcmF0b3JpZmljYXRpb24oQnl0ZWNvZGVHZW5lcmF0b3ImIGJ5dGVjb2RlR2VuZXJh
dG9yLCBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRl
ciYgaW5zdHJ1Y3Rpb25zLCBTeW1ib2xUYWJsZSogZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZSwg
aW50IGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRleCkKK3ZvaWQgcGVyZm9ybUdlbmVyYXRv
cmlmaWNhdGlvbihCeXRlY29kZUdlbmVyYXRvciYgYnl0ZWNvZGVHZW5lcmF0b3IsIFVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyJiBp
bnN0cnVjdGlvbnMsIFN5bWJvbFRhYmxlKiBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLCBpbnQg
Z2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUluZGV4KQogewogICAgIGlmIChVTkxJS0VMWShPcHRp
b25zOjpkdW1wQnl0ZWNvZGVzQmVmb3JlR2VuZXJhdG9yaWZpY2F0aW9uKCkpKQotICAgICAgICBD
b2RlQmxvY2tCeXRlY29kZUR1bXBlcjxVbmxpbmtlZENvZGVCbG9jaz46OmR1bXBCbG9jayhjb2Rl
QmxvY2ssIGluc3RydWN0aW9ucywgV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgQ29kZUJsb2Nr
Qnl0ZWNvZGVEdW1wZXI8VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I+OjpkdW1wQmxvY2soY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbnMsIFdURjo6ZGF0YUZpbGUoKSk7CiAKICAgICBCeXRlY29kZUdl
bmVyYXRvcmlmaWNhdGlvbiBwYXNzKGJ5dGVjb2RlR2VuZXJhdG9yLCBjb2RlQmxvY2ssIGluc3Ry
dWN0aW9ucywgZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZSwgZ2VuZXJhdG9yRnJhbWVTeW1ib2xU
YWJsZUluZGV4KTsKICAgICBwYXNzLnJ1bigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uaAppbmRleCAw
MWYwOTZlMDQxYmZkYjI1ZjZmYWU1ZGRjMDYxNGVmN2E2ZjA2MzA2Li44MzAxZDQwNTdhMzNkMjFi
YTM4YzM4YzljOTIwZjU0OTM0ZGJiYjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uaApAQCAtMzEs
OSArMzEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9yOwogY2xh
c3MgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXI7CiBjbGFzcyBTeW1ib2xUYWJsZTsKLWNsYXNzIFVu
bGlua2VkQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFz
cyBTeW1ib2xUYWJsZTsKIAotdm9pZCBwZXJmb3JtR2VuZXJhdG9yaWZpY2F0aW9uKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2sqLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYs
IFN5bWJvbFRhYmxlKiBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLCBpbnQgZ2VuZXJhdG9yRnJh
bWVTeW1ib2xUYWJsZUluZGV4KTsKK3ZvaWQgcGVyZm9ybUdlbmVyYXRvcmlmaWNhdGlvbihCeXRl
Y29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiwgSW5zdHJ1Y3Rpb25T
dHJlYW1Xcml0ZXImLCBTeW1ib2xUYWJsZSogZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZSwgaW50
IGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRleCk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlUmV3cml0
ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVJld3JpdGVyLmgK
aW5kZXggZTI2MTY1NGIyNGQzOTkxMzNjOWY5MTE3M2RhYjczNDk5MWI0MDZhMy4uODkwYWIyM2Mw
MDBkYWRiYWFkOGRiNGM2M2VlZTI1YWU1NWI4ZGIwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5oCkBAIC0xNzMsNyArMTczLDcgQEAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVSZXdyaXRlcik7CiAgICAgICAgIEluY2x1ZGVC
cmFuY2gmIG1faW5jbHVkZUJyYW5jaDsKICAgICB9OwogCi0gICAgQnl0ZWNvZGVSZXdyaXRlcihC
eXRlY29kZUdlbmVyYXRvciYgYnl0ZWNvZGVHZW5lcmF0b3IsIEJ5dGVjb2RlR3JhcGgmIGdyYXBo
LCBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYg
d3JpdGVyKQorICAgIEJ5dGVjb2RlUmV3cml0ZXIoQnl0ZWNvZGVHZW5lcmF0b3ImIGJ5dGVjb2Rl
R2VuZXJhdG9yLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3IqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImIHdyaXRlcikKICAgICAgICAg
OiBtX2J5dGVjb2RlR2VuZXJhdG9yKGJ5dGVjb2RlR2VuZXJhdG9yKQogICAgICAgICAsIG1fZ3Jh
cGgoZ3JhcGgpCiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQpAQCAtMjI3LDcgKzIy
Nyw3IEBAIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ5dGVjb2RlUmV3cml0ZXIpOwogcHJpdmF0ZToK
ICAgICB2b2lkIGluc2VydEltcGwoSW5zZXJ0aW9uUG9pbnQsIEluY2x1ZGVCcmFuY2gsIEluc3Ry
dWN0aW9uU3RyZWFtV3JpdGVyJiYgZnJhZ21lbnQpOwogCi0gICAgZnJpZW5kIGNsYXNzIFVubGlu
a2VkQ29kZUJsb2NrOworICAgIGZyaWVuZCBjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
cjsKICAgICB2b2lkIGFwcGx5TW9kaWZpY2F0aW9uKCk7CiAgICAgdm9pZCBhZGp1c3RKdW1wVGFy
Z2V0c0luRnJhZ21lbnQodW5zaWduZWQgZmluYWxPZmZzZXQsIEluc2VydGlvbiYpOwogCkBAIC0y
MzYsNyArMjM2LDcgQEAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVSZXdyaXRlcik7CiAK
ICAgICBCeXRlY29kZUdlbmVyYXRvciYgbV9ieXRlY29kZUdlbmVyYXRvcjsKICAgICBCeXRlY29k
ZUdyYXBoJiBtX2dyYXBoOwotICAgIFVubGlua2VkQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAg
ICBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogbV9jb2RlQmxvY2s7CiAgICAgSW5zdHJ1Y3Rp
b25TdHJlYW1Xcml0ZXImIG1fd3JpdGVyOwogICAgIFZlY3RvcjxJbnNlcnRpb24sIDg+IG1faW5z
ZXJ0aW9uczsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCmluZGV4IDk2NzU5MWRhM2Y1MjQyNDcxM2NiOGIzNzg2NTAzYjRiZjNjODAxYzIuLjVmNTFl
N2ExNDgyODQyZGNhNDc5NjU5YzE2NTgwZGM4NjkzMDcyMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC04NjYsNyArODY2LDcgQEAgQ29kZUJs
b2NrOjp+Q29kZUJsb2NrKCkKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCi12b2lkIENvZGVC
bG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiB2bSwgY29uc3QgVmVj
dG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRzKQordm9pZCBDb2RlQmxv
Y2s6OnNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYgdm0sIGNvbnN0IFJlZkNv
dW50ZWRBcnJheTxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cykKIHsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1fZ2xvYmFsT2JqZWN0LmdldCgpOwpAQCAtODg4LDcgKzg4OCw3
IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0m
IHZtLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJCiAgICAgfQogfQogCi12b2lkIENvZGVCbG9jazo6
c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4m
IGNvbnN0YW50cywgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiwgU2NyaXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxF
eGVjdXRhYmxlKQordm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFJl
ZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFJl
ZkNvdW50ZWRBcnJheTxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSkK
IHsKICAgICBWTSYgdm0gPSAqbV92bTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CkBAIC04OTksMTAgKzg5OSwxMyBAQCB2b2lkIENvZGVCbG9jazo6c2V0Q29uc3Rh
bnRSZWdpc3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YQog
ICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwogICAgICAg
ICBtX2NvbnN0YW50UmVnaXN0ZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKKyAgICAgICAgbV9jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24ucmVzaXplVG9GaXQoY291bnQpOwogICAgIH0K
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgSlNWYWx1
ZSBjb25zdGFudCA9IGNvbnN0YW50c1tpXS5nZXQoKTsKLSAgICAgICAgc3dpdGNoIChjb25zdGFu
dHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baV0pIHsKKyAgICAgICAgU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uIHJlcHJlc2VudGF0aW9uID0gY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uW2ldOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpXSA9
IHJlcHJlc2VudGF0aW9uOworICAgICAgICBzd2l0Y2ggKHJlcHJlc2VudGF0aW9uKSB7CiAgICAg
ICAgIGNhc2UgU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50OgogICAg
ICAgICAgICAgY29uc3RhbnQgPSBnbG9iYWxPYmplY3QtPmxpbmtUaW1lQ29uc3RhbnQoc3RhdGlj
X2Nhc3Q8TGlua1RpbWVDb25zdGFudD4oY29uc3RhbnQuYXNJbnQzMkFzQW55SW50KCkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtOTM0LDggKzkzNyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRD
b25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29u
c3RhCiAgICAgICAgIH0KICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQodm0sIHRo
aXMsIGNvbnN0YW50KTsKICAgICB9Ci0KLSAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiA9IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKIH0KIAogdm9pZCBD
b2RlQmxvY2s6OnNldEFsdGVybmF0aXZlKFZNJiB2bSwgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZSkK
QEAgLTE4MDgsNyArMTgwOSw3IEBAIEhhbmRsZXJJbmZvKiBDb2RlQmxvY2s6OmhhbmRsZXJGb3JJ
bmRleCh1bnNpZ25lZCBpbmRleCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkCiB7CiAgICAgaWYg
KCFtX3JhcmVEYXRhKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gSGFuZGxlckluZm86
OmhhbmRsZXJGb3JJbmRleChtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLCBpbmRleCwg
cmVxdWlyZWRIYW5kbGVyKTsKKyAgICByZXR1cm4gSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRl
eDxIYW5kbGVySW5mbz4obV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycywgaW5kZXgsIHJl
cXVpcmVkSGFuZGxlcik7CiB9CiAKIERpc3Bvc2FibGVDYWxsU2l0ZUluZGV4IENvZGVCbG9jazo6
bmV3RXhjZXB0aW9uSGFuZGxpbmdDYWxsU2l0ZUluZGV4KENhbGxTaXRlSW5kZXggb3JpZ2luYWxD
YWxsU2l0ZSkKQEAgLTMxOTUsNyArMzE5Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjppbnNlcnRCYXNp
Y0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIoKQogewogICAgIGlmICghdW5s
aW5rZWRDb2RlQmxvY2soKS0+aGFzT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6
T2Zmc2V0PiYgYnl0ZWNvZGVPZmZzZXRzID0gdW5saW5rZWRDb2RlQmxvY2soKS0+b3BQcm9maWxl
Q29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKTsKKyAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8
SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4mIGJ5dGVjb2RlT2Zmc2V0cyA9IHVubGlua2VkQ29k
ZUJsb2NrKCktPm9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDAsIG9mZnNldHNMZW5ndGggPSBieXRlY29kZU9mZnNldHMuc2l6ZSgpOyBp
IDwgb2Zmc2V0c0xlbmd0aDsgaSsrKSB7CiAgICAgICAgIC8vIEJlY2F1c2Ugb3BfcHJvZmlsZV9j
b250cm9sX2Zsb3cgaXMgZW1pdHRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IGJhc2ljIGJs
b2NrLCBmaW5kaW5nIAogICAgICAgICAvLyB0aGUgbmV4dCBvcF9wcm9maWxlX2NvbnRyb2xfZmxv
dyB3aWxsIGdpdmUgdXMgdGhlIHRleHQgcmFuZ2Ugb2YgYSBzaW5nbGUgYmFzaWMgYmxvY2suCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKaW5kZXggYThiODc1NzZj
MDU2OTViODAwZjhjM2QxZWMyNTMyOGQwYWU4OGI4OS4uMjhhOGU3ZmM3MThhOWY0MjI0OTFjZDFj
NTRjZThmMzE3ZmE4ZGIzYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaApAQCAtOTQ5LDkgKzk0OSw5IEBAIGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0Nl
bGwgewogCiAgICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0aW9uc0FuZENvdW50
TGl2ZW5lc3ModW5zaWduZWQmIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywg
dW5zaWduZWQmIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMpOwogCi0gICAgdm9pZCBzZXRDb25z
dGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVu
dGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOworICAgIHZvaWQgc2V0Q29uc3RhbnRJZGVudGlm
aWVyU2V0UmVnaXN0ZXJzKFZNJiwgY29uc3QgUmVmQ291bnRlZEFycmF5PENvbnN0YW50SWRlbnRp
ZmllclNldEVudHJ5PiYgY29uc3RhbnRzKTsKIAotICAgIHZvaWQgc2V0Q29uc3RhbnRSZWdpc3Rl
cnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3Qg
VmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbiwgU2NyaXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlKTsKKyAgICB2
b2lkIHNldENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24sIFNjcmlw
dEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSk7CiAKICAgICB2b2lkIHJlcGxhY2VDb25z
dGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmgKaW5kZXggN2Y0NjVkMmFlOTM3
OTliOTFkZjc4NzE0MTk0ZmNhMzRiZDJhMWExMi4uMDFkZGNmOTY5OWI0ODAyOWExYmQ4YmVlNDAz
NDkwNDc5YTFmOWQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0hhbmRsZXJJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRs
ZXJJbmZvLmgKQEAgLTY1LDEwICs2NSwxMCBAQCBzdHJ1Y3QgSGFuZGxlckluZm9CYXNlIHsKIAog
ICAgIGJvb2wgaXNDYXRjaEhhbmRsZXIoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSGFuZGxl
clR5cGU6OkNhdGNoOyB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYW5kbGVyPgotICAgIHN0
YXRpYyBIYW5kbGVyKiBoYW5kbGVyRm9ySW5kZXgoVmVjdG9yPEhhbmRsZXI+JiBleGVwdGlvbkhh
bmRsZXJzLCB1bnNpZ25lZCBpbmRleCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYW5kbGVyLCB0eXBlbmFtZSBDb250YWluZXI+CisgICAg
c3RhdGljIEhhbmRsZXIqIGhhbmRsZXJGb3JJbmRleChDb250YWluZXImIGV4ZXB0aW9uSGFuZGxl
cnMsIHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5kbGVyKQogICAg
IHsKLSAgICAgICAgZm9yIChIYW5kbGVyJiBoYW5kbGVyIDogZXhlcHRpb25IYW5kbGVycykgewor
ICAgICAgICBmb3IgKGF1dG8mIGhhbmRsZXIgOiBleGVwdGlvbkhhbmRsZXJzKSB7CiAgICAgICAg
ICAgICBpZiAoKHJlcXVpcmVkSGFuZGxlciA9PSBSZXF1aXJlZEhhbmRsZXI6OkNhdGNoSGFuZGxl
cikgJiYgIWhhbmRsZXIuaXNDYXRjaEhhbmRsZXIoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWNpc2VK
dW1wVGFyZ2V0cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1
bXBUYXJnZXRzLmNwcAppbmRleCAxZTcxMjJjNzUwMDMzMzNhNzMzYjFhZjU4ODZhZWExNTgyZjEw
OTQ3Li5lNzBhZWMxMjdjNTZkYTU4YmMyZDkyMTkyODc1YjkxOTdhNWJkZGY2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNw
cApAQCAtOTksMTIgKzk5LDEyIEBAIHZvaWQgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluCiAgICAgY29tcHV0
ZVByZWNpc2VKdW1wVGFyZ2V0c0ludGVybmFsPENvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHNNb2Rl
OjpGb2xsb3dDb2RlQmxvY2tDbGFpbT4oY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG91dCk7CiB9
CiAKLXZvaWQgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyhVbmxpbmtlZENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBWZWN0b3I8SW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgMzI+JiBvdXQpCit2b2lkIGNvbXB1dGVQcmVjaXNlSnVt
cFRhcmdldHMoVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQsIDMyPiYgb3V0KQogewogICAgIGNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHNJbnRlcm5h
bDxDb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzTW9kZTo6Rm9sbG93Q29kZUJsb2NrQ2xhaW0+KGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBvdXQpOwogfQogCi12b2lkIHJlY29tcHV0ZVByZWNpc2VK
dW1wVGFyZ2V0cyhVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlv
blN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4m
IG91dCkKK3ZvaWQgcmVjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlv
bnMsIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiYgb3V0KQogewogICAgIGNvbXB1
dGVQcmVjaXNlSnVtcFRhcmdldHNJbnRlcm5hbDxDb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzTW9k
ZTo6Rm9yY2VDb21wdXRlPihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIH0KQEAgLTEx
NCw3ICsxMTQsNyBAQCB2b2lkIGZpbmRKdW1wVGFyZ2V0c0Zvckluc3RydWN0aW9uKENvZGVCbG9j
ayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbQogICAgIGdldEp1bXBUYXJnZXRz
Rm9ySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3V0KTsKIH0KIAotdm9pZCBm
aW5kSnVtcFRhcmdldHNGb3JJbnN0cnVjdGlvbihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpbnN0cnVjdGlvbiwgVmVjdG9yPEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQsIDE+JiBvdXQpCit2b2lkIGZpbmRKdW1wVGFyZ2V0c0Zvcklu
c3RydWN0aW9uKFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtOjpSZWYmIGluc3RydWN0aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldCwgMT4mIG91dCkKIHsKICAgICBnZXRKdW1wVGFyZ2V0c0Zvckluc3RydWN0aW9u
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG91dCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmgKaW5kZXggZDkzNGY5YTQ5NWI5
Y2M5NjZkNTI2MDdmYWY0ZjA5YjY5NTJhNDA3ZS4uZjE3NWUyY2NhN2RhMTI4ZWE0NWIyYjEzN2Ez
YjliODA2NjUxNjJiMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ByZWNpc2VKdW1wVGFyZ2V0cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QcmVjaXNlSnVtcFRhcmdldHMuaApAQCAtMzQsMTEgKzM0LDExIEBAIGNsYXNzIFVubGlua2Vk
Q29kZUJsb2NrOwogLy8gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgYnl0ZWNvZGUgaW5kZXggdGhh
dCBhcmUgdGhlIGRlc3RpbmF0aW9uIG9mIGEganVtcC4KIHZvaWQgY29tcHV0ZVByZWNpc2VKdW1w
VGFyZ2V0cyhDb2RlQmxvY2sqLCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgMzI+
JiBvdXQpOwogdm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKENvZGVCbG9jayosIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0LCAzMj4mIG91dCk7Ci12b2lkIGNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoVW5s
aW5rZWRDb2RlQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYsIFZlY3RvcjxJbnN0cnVj
dGlvblN0cmVhbTo6T2Zmc2V0LCAzMj4mIG91dCk7Cit2b2lkIGNvbXB1dGVQcmVjaXNlSnVtcFRh
cmdldHMoVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYsIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCAzMj4mIG91dCk7CiAKLXZvaWQg
cmVjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKFVubGlua2VkQ29kZUJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mLCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4mIG91dCk7
Cit2b2lkIHJlY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyhVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvciosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQ+JiBvdXQpOwogCiB2b2lkIGZpbmRKdW1wVGFyZ2V0c0Zvckluc3RydWN0aW9uKENv
ZGVCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmLCBWZWN0b3I8SW5zdHJ1Y3Rp
b25TdHJlYW06Ok9mZnNldCwgMT4mIG91dCk7Ci12b2lkIGZpbmRKdW1wVGFyZ2V0c0Zvckluc3Ry
dWN0aW9uKFVubGlua2VkQ29kZUJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYs
IFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCAxPiYgb3V0KTsKK3ZvaWQgZmluZEp1
bXBUYXJnZXRzRm9ySW5zdHJ1Y3Rpb24oVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCBjb25z
dCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiwgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZz
ZXQsIDE+JiBvdXQpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCmluZGV4IGRkYjQxMjEx
OTFmYWY3YjQyMTUzMWU4ZTJlMDUyMDI1YTYxMjdlMzkuLjRkNTE3ZDlmOTI4MTNkNjY3YWRmNTc0
YmU0MjEwYjhhYWFlODY3ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcApAQCAtOTQsMTAgKzk0LDEwIEBAIHZvaWQgVW5s
aW5rZWRDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRoaXNPYmplY3QtPmNlbGxMb2Nr
KCkpOwogICAgIGlmICh2aXNpdG9yLmlzRmlyc3RWaXNpdCgpKQogICAgICAgICB0aGlzT2JqZWN0
LT5tX2FnZSA9IHN0ZDo6bWluPHVuc2lnbmVkPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGhpc09i
amVjdC0+bV9hZ2UpICsgMSwgbWF4QWdlKTsKLSAgICBmb3IgKEZ1bmN0aW9uRXhwcmVzc2lvblZl
Y3Rvcjo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmJlZ2luKCks
IGVuZCA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25EZWNscy5lbmQoKTsgcHRyICE9IGVuZDsgKytw
dHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCpwdHIpOwotICAgIGZvciAoRnVuY3Rpb25FeHBy
ZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMu
YmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkV4cHJzLmVuZCgpOyBwdHIgIT0g
ZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoKnB0cik7CisgICAgZm9yIChhdXRv
JiBiYXJyaWVyIDogdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzKQorICAgICAgICB2aXNpdG9y
LmFwcGVuZChiYXJyaWVyKTsKKyAgICBmb3IgKGF1dG8mIGJhcnJpZXIgOiB0aGlzT2JqZWN0LT5t
X2Z1bmN0aW9uRXhwcnMpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKGJhcnJpZXIpOwogICAgIHZp
c2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMuZGF0YSgp
LCB0aGlzT2JqZWN0LT5tX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKSk7CiAgICAgc2l6ZV90IGV4
dHJhTWVtb3J5ID0gdGhpc09iamVjdC0+bV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMoKTsKICAgICBp
ZiAodGhpc09iamVjdC0+bV9pbnN0cnVjdGlvbnMpCkBAIC0xNjcsNyArMTY3LDcgQEAgc3RhdGlj
IHZvaWQgZHVtcExpbmVDb2x1bW5FbnRyeShzaXplX3QgaW5kZXgsIGNvbnN0IEluc3RydWN0aW9u
U3RyZWFtJiBpbnN0cnVjdGkKIAogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZHVtcEV4cHJlc3Np
b25SYW5nZUluZm8oKQogewotICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVz
c2lvbkluZm8gPSBtX2V4cHJlc3Npb25JbmZvOworICAgIFJlZkNvdW50ZWRBcnJheTxFeHByZXNz
aW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8gPSBtX2V4cHJlc3Npb25JbmZvOwogCiAgICAg
c2l6ZV90IHNpemUgPSBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsKICAgICBkYXRhTG9nRigiVW5s
aW5rZWRDb2RlQmxvY2sgJXAgZXhwcmVzc2lvblJhbmdlSW5mb1slenVdIHtcbiIsIHRoaXMsIHNp
emUpOwpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Np
b25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBjb25zdCBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbz4m
IGV4cHJlc3Npb25JbmZvID0gbV9leHByZXNzaW9uSW5mbzsKKyAgICBjb25zdCBSZWZDb3VudGVk
QXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvID0gbV9leHByZXNzaW9u
SW5mbzsKIAogICAgIGludCBsb3cgPSAwOwogICAgIGludCBoaWdoID0gZXhwcmVzc2lvbkluZm8u
c2l6ZSgpOwpAQCAtMjE4LDYwICsyMTgsNiBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpleHBy
ZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4KEJ5dGVjb2RlSW5kZXggYnl0ZWNvZGVJbgogICAg
IGdldExpbmVBbmRDb2x1bW4oaW5mbywgbGluZSwgY29sdW1uKTsKIH0KIAotdm9pZCBVbmxpbmtl
ZENvZGVCbG9jazo6YWRkRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQs
Ci0gICAgaW50IGRpdm90LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVuc2lnbmVk
IGxpbmUsIHVuc2lnbmVkIGNvbHVtbikKLXsKLSAgICBpZiAoZGl2b3QgPiBFeHByZXNzaW9uUmFu
Z2VJbmZvOjpNYXhEaXZvdCkgewotICAgICAgICAvLyBPdmVyZmxvdyBoYXMgb2NjdXJyZWQsIHdl
IGNhbiBvbmx5IGdpdmUgbGluZSBudW1iZXIgaW5mbyBmb3IgZXJyb3JzIGZvciB0aGlzIHJlZ2lv
bgotICAgICAgICBkaXZvdCA9IDA7Ci0gICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAg
ZW5kT2Zmc2V0ID0gMDsKLSAgICB9IGVsc2UgaWYgKHN0YXJ0T2Zmc2V0ID4gRXhwcmVzc2lvblJh
bmdlSW5mbzo6TWF4T2Zmc2V0KSB7Ci0gICAgICAgIC8vIElmIHRoZSBzdGFydCBvZmZzZXQgaXMg
b3V0IG9mIGJvdW5kcyB3ZSBjbGVhciBib3RoIG9mZnNldHMKLSAgICAgICAgLy8gc28gd2Ugb25s
eSBnZXQgdGhlIGRpdm90IG1hcmtlci4gRXJyb3IgbWVzc2FnZSB3aWxsIGhhdmUgdG8gYmUgcmVk
dWNlZAotICAgICAgICAvLyB0byBsaW5lIGFuZCBjaGFyUG9zaXRpb24gbnVtYmVyLgotICAgICAg
ICBzdGFydE9mZnNldCA9IDA7Ci0gICAgICAgIGVuZE9mZnNldCA9IDA7Ci0gICAgfSBlbHNlIGlm
IChlbmRPZmZzZXQgPiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhPZmZzZXQpIHsKLSAgICAgICAg
Ly8gVGhlIGVuZCBvZmZzZXQgaXMgb25seSB1c2VkIGZvciBhZGRpdGlvbmFsIGNvbnRleHQsIGFu
ZCBpcyBtdWNoIG1vcmUgbGlrZWx5Ci0gICAgICAgIC8vIHRvIG92ZXJmbG93IChlZy4gZnVuY3Rp
b24gY2FsbCBhcmd1bWVudHMpIHNvIHdlIGFyZSB3aWxsaW5nIHRvIGRyb3AgaXQgd2l0aG91dAot
ICAgICAgICAvLyBkcm9wcGluZyB0aGUgcmVzdCBvZiB0aGUgcmFuZ2UuCi0gICAgICAgIGVuZE9m
ZnNldCA9IDA7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgcG9zaXRpb25Nb2RlID0KLSAgICAgICAg
KGxpbmUgPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0TGluZU1vZGVMaW5lICYmIGNvbHVt
biA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRMaW5lTW9kZUNvbHVtbikgCi0gICAgICAg
ID8gRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGUKLSAgICAgICAgOiAobGluZSA8PSBF
eHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRDb2x1bW5Nb2RlTGluZSAmJiBjb2x1bW4gPD0gRXhw
cmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0Q29sdW1uTW9kZUNvbHVtbikKLSAgICAgICAgPyBFeHBy
ZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlCi0gICAgICAgIDogRXhwcmVzc2lvblJhbmdl
SW5mbzo6RmF0TGluZUFuZENvbHVtbk1vZGU7Ci0KLSAgICBFeHByZXNzaW9uUmFuZ2VJbmZvIGlu
Zm87Ci0gICAgaW5mby5pbnN0cnVjdGlvbk9mZnNldCA9IGluc3RydWN0aW9uT2Zmc2V0OwotICAg
IGluZm8uZGl2b3RQb2ludCA9IGRpdm90OwotICAgIGluZm8uc3RhcnRPZmZzZXQgPSBzdGFydE9m
ZnNldDsKLSAgICBpbmZvLmVuZE9mZnNldCA9IGVuZE9mZnNldDsKLQotICAgIGluZm8ubW9kZSA9
IHBvc2l0aW9uTW9kZTsKLSAgICBzd2l0Y2ggKHBvc2l0aW9uTW9kZSkgewotICAgIGNhc2UgRXhw
cmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGU6Ci0gICAgICAgIGluZm8uZW5jb2RlRmF0TGlu
ZU1vZGUobGluZSwgY29sdW1uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHByZXNzaW9u
UmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlOgotICAgICAgICBpbmZvLmVuY29kZUZhdENvbHVtbk1v
ZGUobGluZSwgY29sdW1uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHByZXNzaW9uUmFu
Z2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTogewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KCk7Ci0gICAgICAgIHVuc2lnbmVkIGZhdEluZGV4ID0gbV9yYXJlRGF0YS0+bV9l
eHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5zaXplKCk7Ci0gICAgICAgIEV4cHJlc3Npb25SYW5n
ZUluZm86OkZhdFBvc2l0aW9uIGZhdFBvcyA9IHsgbGluZSwgY29sdW1uIH07Ci0gICAgICAgIG1f
cmFyZURhdGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMuYXBwZW5kKGZhdFBvcyk7Ci0g
ICAgICAgIGluZm8ucG9zaXRpb24gPSBmYXRJbmRleDsKLSAgICB9Ci0gICAgfSAvLyBzd2l0Y2gK
LQotICAgIG1fZXhwcmVzc2lvbkluZm8uYXBwZW5kKGluZm8pOwotfQotCiBib29sIFVubGlua2Vk
Q29kZUJsb2NrOjp0eXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCB1bnNpZ25lZCYgc3RhcnREaXZvdCwgdW5zaWduZWQmIGVu
ZERpdm90KQogewogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CkBA
IC0yOTgsMzAgKzI0NCwxMCBAQCBib29sIFVubGlua2VkQ29kZUJsb2NrOjp0eXBlUHJvZmlsZXJF
eHByZXNzaW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dAogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjphZGRUeXBlUHJvZmlsZXJFeHByZXNz
aW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwgdW5zaWduZWQgc3RhcnREaXZvdCwg
dW5zaWduZWQgZW5kRGl2b3QpCi17Ci0gICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwot
ICAgIFJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2UgcmFuZ2U7Ci0gICAgcmFu
Z2UubV9zdGFydERpdm90ID0gc3RhcnREaXZvdDsKLSAgICByYW5nZS5tX2VuZERpdm90ID0gZW5k
RGl2b3Q7Ci0gICAgbV9yYXJlRGF0YS0+bV90eXBlUHJvZmlsZXJJbmZvTWFwLnNldChpbnN0cnVj
dGlvbk9mZnNldCwgcmFuZ2UpOwotfQotCiBVbmxpbmtlZENvZGVCbG9jazo6flVubGlua2VkQ29k
ZUJsb2NrKCkKIHsKIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6c2V0SW5zdHJ1Y3Rpb25z
KHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gaW5zdHJ1Y3Rpb25zKQotewotICAg
IEFTU0VSVChpbnN0cnVjdGlvbnMpOwotICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhjZWxsTG9jaygpKTsKLSAgICAgICAgbV9pbnN0cnVjdGlvbnMgPSBXVEZNb3ZlKGluc3Ry
dWN0aW9ucyk7Ci0gICAgICAgIG1fbWV0YWRhdGEtPmZpbmFsaXplKCk7Ci0gICAgfQotICAgIEhl
YXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1faW5zdHJ1Y3Rpb25z
LT5zaXplSW5CeXRlcygpICsgbV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMoKSk7Ci19Ci0KIGNvbnN0
IEluc3RydWN0aW9uU3RyZWFtJiBVbmxpbmtlZENvZGVCbG9jazo6aW5zdHJ1Y3Rpb25zKCkgY29u
c3QKIHsKICAgICBBU1NFUlQobV9pbnN0cnVjdGlvbnMuZ2V0KCkpOwpAQCAtMzM3LDY3ICsyNjMs
NyBAQCBVbmxpbmtlZEhhbmRsZXJJbmZvKiBVbmxpbmtlZENvZGVCbG9jazo6aGFuZGxlckZvcklu
ZGV4KHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZAogewogICAgIGlmICghbV9yYXJlRGF0YSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFVubGlua2VkSGFuZGxlckluZm86Omhh
bmRsZXJGb3JJbmRleChtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLCBpbmRleCwgcmVx
dWlyZWRIYW5kbGVyKTsKLX0KLQotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YXBwbHlNb2RpZmlj
YXRpb24oQnl0ZWNvZGVSZXdyaXRlciYgcmV3cml0ZXIsIEluc3RydWN0aW9uU3RyZWFtV3JpdGVy
JiBpbnN0cnVjdGlvbnMpCi17Ci0gICAgLy8gQmVmb3JlIGFwcGx5aW5nIHRoZSBjaGFuZ2VzLCB3
ZSBhZGp1c3QgdGhlIGp1bXBzIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBieXRlY29kZSBvZmZzZXQs
IHRoZSBvZmZzZXQgdG8gdGhlIGp1bXAgdGFyZ2V0LCBhbmQKLSAgICAvLyB0aGUgaW5zZXJ0aW9u
IGluZm9ybWF0aW9uLgotCi0gICAgcmV3cml0ZXIuYWRqdXN0SnVtcFRhcmdldHMoKTsKLQotICAg
IC8vIFRoZW4sIGV4Y2VwdGlvbiBoYW5kbGVycyBzaG91bGQgYmUgYWRqdXN0ZWQuCi0gICAgaWYg
KG1fcmFyZURhdGEpIHsKLSAgICAgICAgZm9yIChVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVy
IDogbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycykgewotICAgICAgICAgICAgaGFuZGxl
ci50YXJnZXQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChoYW5kbGVyLnRhcmdldCk7
Ci0gICAgICAgICAgICBoYW5kbGVyLnN0YXJ0ID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZz
ZXQoaGFuZGxlci5zdGFydCk7Ci0gICAgICAgICAgICBoYW5kbGVyLmVuZCA9IHJld3JpdGVyLmFk
anVzdEFic29sdXRlT2Zmc2V0KGhhbmRsZXIuZW5kKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5
dGVjb2RlT2Zmc2V0cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fb3BQ
cm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHNbaV0gPSByZXdyaXRlci5hZGp1c3RBYnNv
bHV0ZU9mZnNldChtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZz
ZXRzW2ldKTsKLQotICAgICAgICBpZiAoIW1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01h
cC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQsIFJhcmVEYXRhOjpU
eXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IGFkanVzdGVkVHlwZVByb2ZpbGVySW5mb01hcDsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxl
ckluZm9NYXApCi0gICAgICAgICAgICAgICAgYWRqdXN0ZWRUeXBlUHJvZmlsZXJJbmZvTWFwLnNl
dChyZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChlbnRyeS5rZXkpLCBlbnRyeS52YWx1ZSk7
Ci0gICAgICAgICAgICBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAuc3dhcChhZGp1
c3RlZFR5cGVQcm9maWxlckluZm9NYXApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgKytpKQotICAgICAgICBt
X2V4cHJlc3Npb25JbmZvW2ldLmluc3RydWN0aW9uT2Zmc2V0ID0gcmV3cml0ZXIuYWRqdXN0QWJz
b2x1dGVPZmZzZXQobV9leHByZXNzaW9uSW5mb1tpXS5pbnN0cnVjdGlvbk9mZnNldCk7Ci0KLSAg
ICAvLyBUaGVuLCBtb2RpZnkgdGhlIHVubGlua2VkIGluc3RydWN0aW9ucy4KLSAgICByZXdyaXRl
ci5hcHBseU1vZGlmaWNhdGlvbigpOwotCi0gICAgLy8gQW5kIHJlY29tcHV0ZSB0aGUganVtcCB0
YXJnZXQgYmFzZWQgb24gdGhlIG1vZGlmaWVkIHVubGlua2VkIGluc3RydWN0aW9ucy4KLSAgICBt
X2p1bXBUYXJnZXRzLmNsZWFyKCk7Ci0gICAgcmVjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKHRo
aXMsIGluc3RydWN0aW9ucywgbV9qdW1wVGFyZ2V0cyk7Ci19Ci0KLXZvaWQgVW5saW5rZWRDb2Rl
QmxvY2s6OnNocmlua1RvRml0KCkKLXsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGNlbGxM
b2NrKCkpOwotICAgIAotICAgIG1fanVtcFRhcmdldHMuc2hyaW5rVG9GaXQoKTsKLSAgICBtX2lk
ZW50aWZpZXJzLnNocmlua1RvRml0KCk7Ci0gICAgbV9jb25zdGFudFJlZ2lzdGVycy5zaHJpbmtU
b0ZpdCgpOwotICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLnNocmlua1Rv
Rml0KCk7Ci0gICAgbV9mdW5jdGlvbkRlY2xzLnNocmlua1RvRml0KCk7Ci0gICAgbV9mdW5jdGlv
bkV4cHJzLnNocmlua1RvRml0KCk7Ci0gICAgbV9leHByZXNzaW9uSW5mby5zaHJpbmtUb0ZpdCgp
OwotCi0gICAgaWYgKG1fcmFyZURhdGEpIHsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVycy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fZXhwcmVz
c2lvbkluZm9GYXRQb3NpdGlvbnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9yYXJlRGF0YS0+
bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5zaHJpbmtUb0ZpdCgpOwotICAg
ICAgICBtX3JhcmVEYXRhLT5tX2JpdFZlY3RvcnMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9y
YXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNocmlua1RvRml0KCk7Ci0gICAgfQor
ICAgIHJldHVybiBVbmxpbmtlZEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXg8VW5saW5rZWRI
YW5kbGVySW5mbz4obV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycywgaW5kZXgsIHJlcXVp
cmVkSGFuZGxlcik7CiB9CiAKIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdApAQCAtNDIwLDEyICsyODYsNiBAQCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMm
IFVubGlua2VkQ29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdyhDb2RlQmxvY2sqIGNvZAog
ICAgIHJldHVybiAqbV9saXZlbmVzczsKIH0KIAotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YWRk
T3V0T2ZMaW5lSnVtcFRhcmdldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zm
c2V0LCBpbnQgdGFyZ2V0KQotewotICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldCk7Ci0gICAgbV9v
dXRPZkxpbmVKdW1wVGFyZ2V0cy5zZXQoYnl0ZWNvZGVPZmZzZXQsIHRhcmdldCk7Ci19Ci0KIGlu
dCBVbmxpbmtlZENvZGVCbG9jazo6b3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KQogewogICAgIEFTU0VSVChtX291dE9mTGluZUp1bXBU
YXJnZXRzLmNvbnRhaW5zKGJ5dGVjb2RlT2Zmc2V0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCmluZGV4IDMxOTIxNzA5YWM4MzA2
YmY0ZGU0ZDk3Mzk5MmUxNGEwZDAzMGRhZjAuLjRlMTAxZGE2MjgyNWU1OTljNTM4YTY1YTMzYTA1
NzE2NzViZjk3YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvVHJpU3RhdGUu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVW5pcXVlZFN0
cmluZ0ltcGwuaD4KQEAgLTU5LDYgKzYwLDcgQEAgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKIGNs
YXNzIFNvdXJjZUNvZGU7CiBjbGFzcyBTb3VyY2VQcm92aWRlcjsKIGNsYXNzIFVubGlua2VkQ29k
ZUJsb2NrOworY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiBjbGFzcyBVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU7CiBz
dHJ1Y3QgRXhlY3V0YWJsZUluZm87CkBAIC0xMzMsMTMgKzEzNSw4IEBAIGNsYXNzIFVubGlua2Vk
Q29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgdm9pZCBzZXRIYXNUYWlsQ2FsbHMoKSB7
IG1faGFzVGFpbENhbGxzID0gdHJ1ZTsgfQogICAgIGJvb2wgYWxsb3dEaXJlY3RFdmFsQ2FjaGUo
KSBjb25zdCB7IHJldHVybiAhKG1fZmVhdHVyZXMgJiBOb0V2YWxDYWNoZUZlYXR1cmUpOyB9CiAK
LSAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCBp
bnQgZGl2b3QsCi0gICAgICAgIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgdW5zaWdu
ZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKTsKLQotICAgIHZvaWQgYWRkVHlwZVByb2ZpbGVyRXhw
cmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2
b3QsIHVuc2lnbmVkIGVuZERpdm90KTsKLQogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7
IHJldHVybiBtX2V4cHJlc3Npb25JbmZvLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxFeHBy
ZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25J
bmZvOyB9CisgICAgY29uc3QgUmVmQ291bnRlZEFycmF5PEV4cHJlc3Npb25SYW5nZUluZm8+JiBl
eHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm87IH0KIAogICAgIGJvb2wg
aGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CiAgICAg
dm9pZCBzZXRIYXNDaGVja3BvaW50cygpIHsgbV9oYXNDaGVja3BvaW50cyA9IHRydWU7IH0KQEAg
LTE1MCw2NyArMTQ3LDI2IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2Vs
bCB7CiAKICAgICAvLyBQYXJhbWV0ZXIgaW5mb3JtYXRpb24KICAgICB2b2lkIHNldE51bVBhcmFt
ZXRlcnMoaW50IG5ld1ZhbHVlKSB7IG1fbnVtUGFyYW1ldGVycyA9IG5ld1ZhbHVlOyB9Ci0gICAg
dm9pZCBhZGRQYXJhbWV0ZXIoKSB7IG1fbnVtUGFyYW1ldGVycysrOyB9CiAgICAgdW5zaWduZWQg
bnVtUGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQogCiAgICAg
Ly8gQ29uc3RhbnQgUG9vbHMKIAogICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZpZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9pZGVudGlmaWVycy5zaXplKCk7IH0KLSAgICB2b2lkIGFkZElkZW50aWZp
ZXIoY29uc3QgSWRlbnRpZmllciYgaSkgeyByZXR1cm4gbV9pZGVudGlmaWVycy5hcHBlbmQoaSk7
IH0KICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKGludCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9pZGVudGlmaWVyc1tpbmRleF07IH0KLSAgICBjb25zdCBWZWN0b3I8SWRlbnRpZmll
cj4mIGlkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyczsgfQorICAgIGNv
bnN0IFJlZkNvdW50ZWRBcnJheTxJZGVudGlmaWVyPiYgaWRlbnRpZmllcnMoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXJzOyB9CiAKICAgICBCaXRWZWN0b3ImIGJpdFZlY3RvcihzaXplX3Qg
aSkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2JpdFZlY3RvcnNb
aV07IH0KLSAgICB1bnNpZ25lZCBhZGRCaXRWZWN0b3IoQml0VmVjdG9yJiYgYml0VmVjdG9yKQot
ICAgIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICBtX3Jh
cmVEYXRhLT5tX2JpdFZlY3RvcnMuYXBwZW5kKFdURk1vdmUoYml0VmVjdG9yKSk7Ci0gICAgICAg
IHJldHVybiBtX3JhcmVEYXRhLT5tX2JpdFZlY3RvcnMuc2l6ZSgpIC0gMTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGFkZFNldENvbnN0YW50KElkZW50aWZpZXJTZXQmIHNldCkKLSAgICB7Ci0gICAgICAg
IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0o
KTsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyh2bS5oZWFwLCBjZWxs
TG9jaygpKTsKLSAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5z
aXplKCk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxV
bmtub3duPigpKTsKLSAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24u
YXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAgICBtX3JhcmVE
YXRhLT5tX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SWRlbnRpZmllclNl
dEVudHJ5KHNldCwgcmVzdWx0KSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgYWRkQ29uc3RhbnQo
SlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0
aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcikKLSAgICB7Ci0gICAgICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtp
bmcodm0uaGVhcCwgY2VsbExvY2soKSk7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29u
c3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVu
ZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMu
bGFzdCgpLnNldCh2bSwgdGhpcywgdik7Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uLmFwcGVuZChzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICB1bnNpZ25lZCBhZGRDb25zdGFudChMaW5rVGltZUNv
bnN0YW50IGxpbmtUaW1lQ29uc3RhbnQpCi0gICAgewotICAgICAgICBWTSYgdm0gPSB0aGlzLT52
bSgpOwotICAgICAgICBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKHZtLmhlYXAsIGNl
bGxMb2NrKCkpOwotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJz
LnNpemUoKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVy
PFVua25vd24+KCkpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQodm0s
IHRoaXMsIGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KGxpbmtUaW1lQ29uc3RhbnQpKSk7
Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+
JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KKyAg
ICBjb25zdCBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRS
ZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgp
XTsgfQogICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV0uZ2V0KCk7IH0KLSAgICBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0
aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25z
dGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KKyAgICBjb25zdCBSZWZDb3VudGVkQXJy
YXk8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0K
IAogICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRJZGVudGlmaWVyU2V0cygpIGNvbnN0IHsg
cmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX2NvbnN0YW50SWRlbnRpZmllclNldHMu
c2l6ZSgpIDogMDsgfQotICAgIGNvbnN0IFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRy
eT4mIGNvbnN0YW50SWRlbnRpZmllclNldHMoKSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJu
IG1fcmFyZURhdGEtPm1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsgfQorICAgIGNvbnN0IFJlZkNv
dW50ZWRBcnJheTxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50SWRlbnRpZmll
clNldHMoKSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29uc3Rh
bnRJZGVudGlmaWVyU2V0czsgfQogCiAgICAgLy8gSnVtcHMKICAgICBzaXplX3QgbnVtYmVyT2ZK
dW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMuc2l6ZSgpOyB9Ci0gICAg
dm9pZCBhZGRKdW1wVGFyZ2V0KHVuc2lnbmVkIGp1bXBUYXJnZXQpIHsgbV9qdW1wVGFyZ2V0cy5h
cHBlbmQoanVtcFRhcmdldCk7IH0KICAgICB1bnNpZ25lZCBqdW1wVGFyZ2V0KGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0c1tpbmRleF07IH0KICAgICB1bnNpZ25lZCBsYXN0
SnVtcFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMubGFzdCgpOyB9CiAKQEAg
LTIyMyw5ICsxNzksNiBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwg
ewogICAgIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxTdXBlckJpbmRpbmc+KG1fc3VwZXJCaW5kaW5nKTsgfQogICAgIEpTUGFyc2VyU2NyaXB0
TW9kZSBzY3JpcHRNb2RlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3Jp
cHRNb2RlPihtX3NjcmlwdE1vZGUpOyB9CiAKLSAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0KLSAg
ICB2b2lkIHNldEluc3RydWN0aW9ucyhzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+
KTsKICAgICBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CiAK
ICAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2Nh
bHM7IH0KQEAgLTIzNCwzOSArMTg3LDE4IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgLy8gSnVtcCBUYWJsZXMKIAogICAgIHNpemVfdCBudW1iZXJPZlN3
aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+
bV9zd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0KLSAgICBVbmxpbmtlZFNpbXBsZUp1bXBU
YWJsZSYgYWRkU3dpdGNoSnVtcFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7
IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoVW5saW5rZWRTaW1wbGVKdW1w
VGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9
CiAgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJ
bmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1
bXBUYWJsZXNbdGFibGVJbmRleF07IH0KIAogICAgIHNpemVfdCBudW1iZXJPZlN0cmluZ1N3aXRj
aEp1bXBUYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSA6IDA7IH0KLSAgICBVbmxpbmtlZFN0cmluZ0p1
bXBUYWJsZSYgYWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVj
ZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUoKSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMubGFzdCgpOyB9CiAgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHN0cmlu
Z1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJl
dHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0K
IAotICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRGVjbChVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSogbikKLSAgICB7Ci0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIGF1dG8g
bG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcodm0uaGVhcCwgY2VsbExvY2soKSk7Ci0gICAgICAg
IHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOwotICAgICAgICBtX2Z1bmN0
aW9uRGVjbHMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4o
KSk7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWNscy5sYXN0KCkuc2V0KHZtLCB0aGlzLCBuKTsKLSAg
ICAgICAgcmV0dXJuIHNpemU7Ci0gICAgfQogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
KiBmdW5jdGlvbkRlY2woaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhd
LmdldCgpOyB9CiAgICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1f
ZnVuY3Rpb25EZWNscy5zaXplKCk7IH0KLSAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkV4cHIoVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG4pCi0gICAgewotICAgICAgICBWTSYgdm0gPSB0aGlz
LT52bSgpOwotICAgICAgICBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKHZtLmhlYXAs
IGNlbGxMb2NrKCkpOwotICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9mdW5jdGlvbkV4cHJzLnNp
emUoKTsKLSAgICAgICAgbV9mdW5jdGlvbkV4cHJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOwotICAgICAgICBtX2Z1bmN0aW9uRXhwcnMubGFzdCgp
LnNldCh2bSwgdGhpcywgbik7Ci0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KICAgICBVbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeHByKGludCBpbmRleCkgeyByZXR1cm4g
bV9mdW5jdGlvbkV4cHJzW2luZGV4XS5nZXQoKTsgfQogICAgIHNpemVfdCBudW1iZXJPZkZ1bmN0
aW9uRXhwcnMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgpOyB9CiAKICAgICAvLyBF
eGNlcHRpb24gaGFuZGxpbmcgc3VwcG9ydAogICAgIHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhh
bmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fZXhjZXB0
aW9uSGFuZGxlcnMuc2l6ZSgpIDogMDsgfQotICAgIHZvaWQgYWRkRXhjZXB0aW9uSGFuZGxlcihj
b25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNl
c3NhcnkoKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKGhh
bmRsZXIpOyB9CiAgICAgVW5saW5rZWRIYW5kbGVySW5mbyYgZXhjZXB0aW9uSGFuZGxlcihpbnQg
aW5kZXgpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRp
b25IYW5kbGVyc1tpbmRleF07IH0KIAogICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZVR5cGU+KG1fY29kZVR5cGUpOyB9CkBAIC0zMDMsMTIgKzIz
NSw3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgQUxX
QVlTX0lOTElORSB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAg
ICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCi0g
ICAgdm9pZCBhZGRPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5l
Y2Vzc2FyeSgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0
ZWNvZGVPZmZzZXRzLmFwcGVuZChvZmZzZXQpOwotICAgIH0KLSAgICBjb25zdCBWZWN0b3I8SW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4mIG9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZz
ZXRzKCkgY29uc3QKKyAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldD4mIG9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX3JhcmVEYXRhKTsKICAgICAgICAgcmV0dXJuIG1fcmFyZURh
dGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CkBAIC0zODcsMTUgKzMx
NCwxMyBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZVJld3JpdGVyOwotICAgIGZyaWVuZCBjbGFz
cyBCeXRlY29kZUdlbmVyYXRvcjsKKyAgICBmcmllbmQgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3I7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzPgogICAgIGZyaWVuZCBjbGFz
cyBCeXRlY29kZUdlbmVyYXRvckJhc2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgogICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRDb2RlQmxvY2s7CiAKLSAgICB2b2lkIGFw
cGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRl
ciYpOwotCiAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKICAgICB7CiAgICAg
ICAgIGlmICghbV9yYXJlRGF0YSkgewpAQCAtNDQ2LDcgKzM3MSw3IEBAIGNsYXNzIFVubGlua2Vk
Q29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgU3RyaW5nIG1fc291cmNlVVJMRGlyZWN0
aXZlOwogICAgIFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7CiAKLSAgICBWZWN0
b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9qdW1wVGFyZ2V0czsKKyAgICBSZWZDb3Vu
dGVkQXJyYXk8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9qdW1wVGFyZ2V0czsKICAgICBS
ZWY8VW5saW5rZWRNZXRhZGF0YVRhYmxlPiBtX21ldGFkYXRhOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKQEAgLTQ1NywxMCArMzgyLDEw
IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAjZW5kaWYKIAog
ICAgIC8vIENvbnN0YW50IFBvb2xzCi0gICAgVmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmll
cnM7Ci0gICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVy
czsKLSAgICBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjsKLSAgICB0eXBlZGVmIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I7CisgICAg
UmVmQ291bnRlZEFycmF5PElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CisgICAgUmVmQ291bnRl
ZEFycmF5PFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsKKyAgICBS
ZWZDb3VudGVkQXJyYXk8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbjsKKyAgICB1c2luZyBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3Ig
PSBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
Pj47CiAgICAgRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25EZWNsczsKICAgICBG
dW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkV4cHJzOwogCkBAIC00NjgsMjcgKzM5
MywyNiBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIHN0
cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsK
IAotICAgICAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVy
czsKKyAgICAgICAgUmVmQ291bnRlZEFycmF5PFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0
aW9uSGFuZGxlcnM7CiAKICAgICAgICAgLy8gSnVtcCBUYWJsZXMKLSAgICAgICAgVmVjdG9yPFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0gICAgICAgIFZlY3Rv
cjxVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOworICAg
ICAgICBSZWZDb3VudGVkQXJyYXk8VW5saW5rZWRTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVt
cFRhYmxlczsKKyAgICAgICAgUmVmQ291bnRlZEFycmF5PFVubGlua2VkU3RyaW5nSnVtcFRhYmxl
PiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAKLSAgICAgICAgVmVjdG9yPEV4cHJlc3Npb25S
YW5nZUluZm86OkZhdFBvc2l0aW9uPiBtX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zOworICAg
ICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24+IG1f
ZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7CiAKICAgICAgICAgc3RydWN0IFR5cGVQcm9maWxl
ckV4cHJlc3Npb25SYW5nZSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0RGl2b3Q7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBtX2VuZERpdm90OwogICAgICAgICB9OwogICAgICAgICBIYXNo
TWFwPHVuc2lnbmVkLCBUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IG1fdHlwZVByb2ZpbGVy
SW5mb01hcDsKLSAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fb3BQ
cm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7Ci0gICAgICAgIFZlY3RvcjxCaXRWZWN0
b3I+IG1fYml0VmVjdG9yczsKLSAgICAgICAgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVu
dHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7CisgICAgICAgIFJlZkNvdW50ZWRBcnJheTxJ
bnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVP
ZmZzZXRzOworICAgICAgICBSZWZDb3VudGVkQXJyYXk8Qml0VmVjdG9yPiBtX2JpdFZlY3RvcnM7
CisgICAgICAgIFJlZkNvdW50ZWRBcnJheTxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9j
b25zdGFudElkZW50aWZpZXJTZXRzOwogCiAgICAgICAgIHVuc2lnbmVkIG1fbmVlZHNDbGFzc0Zp
ZWxkSW5pdGlhbGl6ZXIgOiAxOwogICAgIH07CiAKLSAgICB2b2lkIGFkZE91dE9mTGluZUp1bXBU
YXJnZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50IHRhcmdldCk7CiAgICAgaW50IG91
dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCk7CiAgICAgaW50IG91
dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaW5zdHJ1Y3Rp
b24pCiAgICAgewpAQCAtNDk4LDE2ICs0MjIsOSBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jayA6
IHB1YmxpYyBKU0NlbGwgewogcHJpdmF0ZToKICAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0
cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKIAotICAgIE91dE9m
TGluZUp1bXBUYXJnZXRzIHJlcGxhY2VPdXRPZkxpbmVKdW1wVGFyZ2V0cygpCi0gICAgewotICAg
ICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBuZXdKdW1wVGFyZ2V0czsKLSAgICAgICAgc3RkOjpz
d2FwKG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMsIG5ld0p1bXBUYXJnZXRzKTsKLSAgICAgICAgcmV0
dXJuIG5ld0p1bXBUYXJnZXRzOwotICAgIH0KLQogICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIG1f
b3V0T2ZMaW5lSnVtcFRhcmdldHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3Jh
cmVEYXRhOwotICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZv
OworICAgIFJlZkNvdW50ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25J
bmZvOwogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjky
MWNmMjdhNDU3N2U2ZGQwODk5MzE1OWIwYzljNTE3ZTIyODcyNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
ci5jcHAKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IuaCIKKworI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5j
bHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVSZXdy
aXRlci5oIgorI2luY2x1ZGUgIkNsYXNzSW5mby5oIgorI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgor
I2luY2x1ZGUgIkV4ZWN1dGFibGVJbmZvLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25PdmVycmlkZXMu
aCIKKyNpbmNsdWRlICJJbnN0cnVjdGlvblN0cmVhbS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIk9wY29kZS5oIgorI2luY2x1ZGUg
IlBhcnNlci5oIgorI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0c0lubGluZXMuaCIKKyNpbmNs
dWRlICJTb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUg
IlN5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiVW5saW5rZWRFdmFsQ29kZUJsb2NrLmgiCisjaW5j
bHVkZSAiVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkTWV0
YWRhdGFUYWJsZUlubGluZXMuaCIKKyNpbmNsdWRlICJVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2suaCIKKyNpbmNsdWRl
IDx3dGYvRGF0YUxvZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5lIHZvaWQgVW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmdldExpbmVBbmRDb2x1bW4oY29uc3QgRXhwcmVzc2lvblJh
bmdlSW5mbyYgaW5mbywgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0Cit7
CisgICAgc3dpdGNoIChpbmZvLm1vZGUpIHsKKyAgICBjYXNlIEV4cHJlc3Npb25SYW5nZUluZm86
OkZhdExpbmVNb2RlOgorICAgICAgICBpbmZvLmRlY29kZUZhdExpbmVNb2RlKGxpbmUsIGNvbHVt
bik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0Q29s
dW1uTW9kZToKKyAgICAgICAgaW5mby5kZWNvZGVGYXRDb2x1bW5Nb2RlKGxpbmUsIGNvbHVtbik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZUFu
ZENvbHVtbk1vZGU6IHsKKyAgICAgICAgdW5zaWduZWQgZmF0SW5kZXggPSBpbmZvLnBvc2l0aW9u
OworICAgICAgICBjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbiYgZmF0UG9z
ID0gbV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9uc1tmYXRJbmRleF07CisgICAgICAgIGxpbmUg
PSBmYXRQb3MubGluZTsKKyAgICAgICAgY29sdW1uID0gZmF0UG9zLmNvbHVtbjsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIH0gLy8gc3dpdGNoCit9CisKK3ZvaWQgVW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3I6OmFkZEV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0
LCBpbnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgdW5zaWduZWQgbGlu
ZSwgdW5zaWduZWQgY29sdW1uKQoreworICAgIGlmIChkaXZvdCA+IEV4cHJlc3Npb25SYW5nZUlu
Zm86Ok1heERpdm90KSB7CisgICAgICAgIC8vIE92ZXJmbG93IGhhcyBvY2N1cnJlZCwgd2UgY2Fu
IG9ubHkgZ2l2ZSBsaW5lIG51bWJlciBpbmZvIGZvciBlcnJvcnMgZm9yIHRoaXMgcmVnaW9uCisg
ICAgICAgIGRpdm90ID0gMDsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSAwOworICAgICAgICBlbmRP
ZmZzZXQgPSAwOworICAgIH0gZWxzZSBpZiAoc3RhcnRPZmZzZXQgPiBFeHByZXNzaW9uUmFuZ2VJ
bmZvOjpNYXhPZmZzZXQpIHsKKyAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IG9mZnNldCBpcyBvdXQg
b2YgYm91bmRzIHdlIGNsZWFyIGJvdGggb2Zmc2V0cworICAgICAgICAvLyBzbyB3ZSBvbmx5IGdl
dCB0aGUgZGl2b3QgbWFya2VyLiBFcnJvciBtZXNzYWdlIHdpbGwgaGF2ZSB0byBiZSByZWR1Y2Vk
CisgICAgICAgIC8vIHRvIGxpbmUgYW5kIGNoYXJQb3NpdGlvbiBudW1iZXIuCisgICAgICAgIHN0
YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICB9IGVsc2UgaWYgKGVu
ZE9mZnNldCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heE9mZnNldCkgeworICAgICAgICAvLyBU
aGUgZW5kIG9mZnNldCBpcyBvbmx5IHVzZWQgZm9yIGFkZGl0aW9uYWwgY29udGV4dCwgYW5kIGlz
IG11Y2ggbW9yZSBsaWtlbHkKKyAgICAgICAgLy8gdG8gb3ZlcmZsb3cgKGVnLiBmdW5jdGlvbiBj
YWxsIGFyZ3VtZW50cykgc28gd2UgYXJlIHdpbGxpbmcgdG8gZHJvcCBpdCB3aXRob3V0CisgICAg
ICAgIC8vIGRyb3BwaW5nIHRoZSByZXN0IG9mIHRoZSByYW5nZS4KKyAgICAgICAgZW5kT2Zmc2V0
ID0gMDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBwb3NpdGlvbk1vZGUgPQorICAgICAgICAobGlu
ZSA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRMaW5lTW9kZUxpbmUgJiYgY29sdW1uIDw9
IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdExpbmVNb2RlQ29sdW1uKQorICAgICAgICA/IEV4
cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVNb2RlCisgICAgICAgIDogKGxpbmUgPD0gRXhwcmVz
c2lvblJhbmdlSW5mbzo6TWF4RmF0Q29sdW1uTW9kZUxpbmUgJiYgY29sdW1uIDw9IEV4cHJlc3Np
b25SYW5nZUluZm86Ok1heEZhdENvbHVtbk1vZGVDb2x1bW4pCisgICAgICAgID8gRXhwcmVzc2lv
blJhbmdlSW5mbzo6RmF0Q29sdW1uTW9kZQorICAgICAgICA6IEV4cHJlc3Npb25SYW5nZUluZm86
OkZhdExpbmVBbmRDb2x1bW5Nb2RlOworCisgICAgRXhwcmVzc2lvblJhbmdlSW5mbyBpbmZvOwor
ICAgIGluZm8uaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpbnN0cnVjdGlvbk9mZnNldDsKKyAgICBpbmZv
LmRpdm90UG9pbnQgPSBkaXZvdDsKKyAgICBpbmZvLnN0YXJ0T2Zmc2V0ID0gc3RhcnRPZmZzZXQ7
CisgICAgaW5mby5lbmRPZmZzZXQgPSBlbmRPZmZzZXQ7CisKKyAgICBpbmZvLm1vZGUgPSBwb3Np
dGlvbk1vZGU7CisgICAgc3dpdGNoIChwb3NpdGlvbk1vZGUpIHsKKyAgICBjYXNlIEV4cHJlc3Np
b25SYW5nZUluZm86OkZhdExpbmVNb2RlOgorICAgICAgICBpbmZvLmVuY29kZUZhdExpbmVNb2Rl
KGxpbmUsIGNvbHVtbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhwcmVzc2lvblJhbmdl
SW5mbzo6RmF0Q29sdW1uTW9kZToKKyAgICAgICAgaW5mby5lbmNvZGVGYXRDb2x1bW5Nb2RlKGxp
bmUsIGNvbHVtbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5m
bzo6RmF0TGluZUFuZENvbHVtbk1vZGU6IHsKKyAgICAgICAgdW5zaWduZWQgZmF0SW5kZXggPSBt
X2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLnNpemUoKTsKKyAgICAgICAgRXhwcmVzc2lvblJh
bmdlSW5mbzo6RmF0UG9zaXRpb24gZmF0UG9zID0geyBsaW5lLCBjb2x1bW4gfTsKKyAgICAgICAg
bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5hcHBlbmQoZmF0UG9zKTsKKyAgICAgICAgaW5m
by5wb3NpdGlvbiA9IGZhdEluZGV4OworICAgIH0KKyAgICB9IC8vIHN3aXRjaAorCisgICAgbV9l
eHByZXNzaW9uSW5mby5hcHBlbmQoaW5mbyk7Cit9CisKK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3I6OmFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0
aW9uT2Zmc2V0LCB1bnNpZ25lZCBzdGFydERpdm90LCB1bnNpZ25lZCBlbmREaXZvdCkKK3sKKyAg
ICBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5n
ZSByYW5nZTsKKyAgICByYW5nZS5tX3N0YXJ0RGl2b3QgPSBzdGFydERpdm90OworICAgIHJhbmdl
Lm1fZW5kRGl2b3QgPSBlbmREaXZvdDsKKyAgICBtX3R5cGVQcm9maWxlckluZm9NYXAuc2V0KGlu
c3RydWN0aW9uT2Zmc2V0LCByYW5nZSk7Cit9CisKK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3I6OmZpbmFsaXplKHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gaW5zdHJ1
Y3Rpb25zKQoreworICAgIEFTU0VSVChpbnN0cnVjdGlvbnMpOworICAgIHsKKyAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX2NvZGVCbG9jay0+Y2VsbExvY2soKSk7CisgICAgICAgIG1f
Y29kZUJsb2NrLT5tX2luc3RydWN0aW9ucyA9IFdURk1vdmUoaW5zdHJ1Y3Rpb25zKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2stPm1fbWV0YWRhdGEtPmZpbmFsaXplKCk7CisKKyAgICAgICAgbV9jb2Rl
QmxvY2stPm1fanVtcFRhcmdldHMgPSBXVEZNb3ZlKG1fanVtcFRhcmdldHMpOworICAgICAgICBt
X2NvZGVCbG9jay0+bV9pZGVudGlmaWVycyA9IFdURk1vdmUobV9pZGVudGlmaWVycyk7CisgICAg
ICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50UmVnaXN0ZXJzID0gV1RGTW92ZShtX2NvbnN0YW50
UmVnaXN0ZXJzKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uID0gV1RGTW92ZShtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bik7CisgICAgICAgIG1fY29kZUJsb2NrLT5tX2Z1bmN0aW9uRGVjbHMgPSBXVEZNb3ZlKG1fZnVu
Y3Rpb25EZWNscyk7CisgICAgICAgIG1fY29kZUJsb2NrLT5tX2Z1bmN0aW9uRXhwcnMgPSBXVEZN
b3ZlKG1fZnVuY3Rpb25FeHBycyk7CisgICAgICAgIG1fY29kZUJsb2NrLT5tX2V4cHJlc3Npb25J
bmZvID0gV1RGTW92ZShtX2V4cHJlc3Npb25JbmZvKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1f
b3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBXVEZNb3ZlKG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMpOwor
CisgICAgICAgIGlmICghbV9jb2RlQmxvY2stPm1fcmFyZURhdGEpIHsKKyAgICAgICAgICAgIGlm
ICghbV9leGNlcHRpb25IYW5kbGVycy5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICB8fCAhbV9z
d2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgIHx8ICFtX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgfHwgIW1fZXhwcmVzc2lv
bkluZm9GYXRQb3NpdGlvbnMuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgfHwgIW1fdHlwZVBy
b2ZpbGVySW5mb01hcC5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICB8fCAhbV9vcFByb2ZpbGVD
b250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICB8fCAh
bV9iaXRWZWN0b3JzLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgIHx8ICFtX2NvbnN0YW50SWRl
bnRpZmllclNldHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5jcmVh
dGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fY29kZUJs
b2NrLT5tX3JhcmVEYXRhKSB7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9yYXJlRGF0YS0+
bV9leGNlcHRpb25IYW5kbGVycyA9IFdURk1vdmUobV9leGNlcHRpb25IYW5kbGVycyk7CisgICAg
ICAgICAgICBtX2NvZGVCbG9jay0+bV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzID0gV1RG
TW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fcmFy
ZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1vdmUobV9zdHJpbmdTd2l0Y2hK
dW1wVGFibGVzKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX3JhcmVEYXRhLT5tX2V4cHJl
c3Npb25JbmZvRmF0UG9zaXRpb25zID0gV1RGTW92ZShtX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRp
b25zKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxl
ckluZm9NYXAgPSBXVEZNb3ZlKG1fdHlwZVByb2ZpbGVySW5mb01hcCk7CisgICAgICAgICAgICBt
X2NvZGVCbG9jay0+bV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zm
c2V0cyA9IFdURk1vdmUobV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cyk7Cisg
ICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9yYXJlRGF0YS0+bV9iaXRWZWN0b3JzID0gV1RGTW92
ZShtX2JpdFZlY3RvcnMpOworICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fcmFyZURhdGEtPm1f
Y29uc3RhbnRJZGVudGlmaWVyU2V0cyA9IFdURk1vdmUobV9jb25zdGFudElkZW50aWZpZXJTZXRz
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX3ZtLmhlYXAud3JpdGVCYXJyaWVyKG1fY29kZUJs
b2NrLmdldCgpKTsKKyAgICBtX3ZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobV9j
b2RlQmxvY2stPm1faW5zdHJ1Y3Rpb25zLT5zaXplSW5CeXRlcygpICsgbV9jb2RlQmxvY2stPm1f
bWV0YWRhdGEtPnNpemVJbkJ5dGVzKCkpOworfQorCitVbmxpbmtlZEhhbmRsZXJJbmZvKiBVbmxp
bmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6aGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJ
bmRleCBieXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5kbGVyKQorewor
ICAgIHJldHVybiBoYW5kbGVyRm9ySW5kZXgoYnl0ZWNvZGVJbmRleC5vZmZzZXQoKSwgcmVxdWly
ZWRIYW5kbGVyKTsKK30KKworVW5saW5rZWRIYW5kbGVySW5mbyogVW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3I6OmhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgUmVxdWlyZWRIYW5kbGVy
IHJlcXVpcmVkSGFuZGxlcikKK3sKKyAgICByZXR1cm4gVW5saW5rZWRIYW5kbGVySW5mbzo6aGFu
ZGxlckZvckluZGV4PFVubGlua2VkSGFuZGxlckluZm8+KG1fZXhjZXB0aW9uSGFuZGxlcnMsIGlu
ZGV4LCByZXF1aXJlZEhhbmRsZXIpOworfQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yOjphcHBseU1vZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVyJiByZXdyaXRlciwgSW5zdHJ1
Y3Rpb25TdHJlYW1Xcml0ZXImIGluc3RydWN0aW9ucykKK3sKKyAgICAvLyBCZWZvcmUgYXBwbHlp
bmcgdGhlIGNoYW5nZXMsIHdlIGFkanVzdCB0aGUganVtcHMgYmFzZWQgb24gdGhlIG9yaWdpbmFs
IGJ5dGVjb2RlIG9mZnNldCwgdGhlIG9mZnNldCB0byB0aGUganVtcCB0YXJnZXQsIGFuZAorICAg
IC8vIHRoZSBpbnNlcnRpb24gaW5mb3JtYXRpb24uCisKKyAgICByZXdyaXRlci5hZGp1c3RKdW1w
VGFyZ2V0cygpOworCisgICAgLy8gVGhlbiwgZXhjZXB0aW9uIGhhbmRsZXJzIHNob3VsZCBiZSBh
ZGp1c3RlZC4KKyAgICBmb3IgKFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXIgOiBtX2V4Y2Vw
dGlvbkhhbmRsZXJzKSB7CisgICAgICAgIGhhbmRsZXIudGFyZ2V0ID0gcmV3cml0ZXIuYWRqdXN0
QWJzb2x1dGVPZmZzZXQoaGFuZGxlci50YXJnZXQpOworICAgICAgICBoYW5kbGVyLnN0YXJ0ID0g
cmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQoaGFuZGxlci5zdGFydCk7CisgICAgICAgIGhh
bmRsZXIuZW5kID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQoaGFuZGxlci5lbmQpOwor
ICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9vcFByb2ZpbGVDb250cm9sRmxv
d0J5dGVjb2RlT2Zmc2V0cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9vcFByb2ZpbGVDb250cm9s
Rmxvd0J5dGVjb2RlT2Zmc2V0c1tpXSA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KG1f
b3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHNbaV0pOworCisgICAgaWYgKCFtX3R5
cGVQcm9maWxlckluZm9NYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIEhhc2hNYXA8dW5zaWduZWQs
IFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdl
PiBhZGp1c3RlZFR5cGVQcm9maWxlckluZm9NYXA7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkg
OiBtX3R5cGVQcm9maWxlckluZm9NYXApCisgICAgICAgICAgICBhZGp1c3RlZFR5cGVQcm9maWxl
ckluZm9NYXAuc2V0KHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KGVudHJ5LmtleSksIGVu
dHJ5LnZhbHVlKTsKKyAgICAgICAgbV90eXBlUHJvZmlsZXJJbmZvTWFwLnN3YXAoYWRqdXN0ZWRU
eXBlUHJvZmlsZXJJbmZvTWFwKTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZXhwcmVzc2lvbkluZm9b
aV0uaW5zdHJ1Y3Rpb25PZmZzZXQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChtX2V4
cHJlc3Npb25JbmZvW2ldLmluc3RydWN0aW9uT2Zmc2V0KTsKKworICAgIC8vIFRoZW4sIG1vZGlm
eSB0aGUgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgorICAgIHJld3JpdGVyLmFwcGx5TW9kaWZpY2F0
aW9uKCk7CisKKyAgICAvLyBBbmQgcmVjb21wdXRlIHRoZSBqdW1wIHRhcmdldCBiYXNlZCBvbiB0
aGUgbW9kaWZpZWQgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgorICAgIG1fanVtcFRhcmdldHMuY2xl
YXIoKTsKKyAgICByZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHModGhpcywgaW5zdHJ1Y3Rpb25z
LCBtX2p1bXBUYXJnZXRzKTsKK30KKwordm9pZCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6
YWRkT3V0T2ZMaW5lSnVtcFRhcmdldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2Rl
T2Zmc2V0LCBpbnQgdGFyZ2V0KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHRhcmdldCk7CisgICAg
bV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5zZXQoYnl0ZWNvZGVPZmZzZXQsIHRhcmdldCk7Cit9CisK
K2ludCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6b3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0
cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIEFTU0VSVChtX291
dE9mTGluZUp1bXBUYXJnZXRzLmNvbnRhaW5zKGJ5dGVjb2RlT2Zmc2V0KSk7CisgICAgcmV0dXJu
IG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zmc2V0KTsKK30KKwordm9pZCBV
bmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Cit7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
ZTQyZTExMTJlMjViNGZkYTNkMDU5NTk4NmY1ZmEyYzU3ZWE1YzE4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yLmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3Ip
CitwdWJsaWM6CisgICAgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IoVk0mIHZtLCBVbmxpbmtl
ZENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICA6IG1fdm0odm0pCisgICAgICAgICwgbV9j
b2RlQmxvY2sodm0sIGNvZGVCbG9jaykKKyAgICB7CisgICAgfQorCisgICAgVk0mIHZtKCkgeyBy
ZXR1cm4gbV92bTsgfQorCisgICAgYm9vbCBpc0NvbnN0cnVjdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKTsgfQorICAgIENvbnN0cnVjdG9yS2luZCBjb25z
dHJ1Y3RvcktpbmQoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+Y29uc3RydWN0b3JLaW5k
KCk7IH0KKyAgICBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlQmxvY2stPnN1cGVyQmluZGluZygpOyB9CisgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlw
dE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+c2NyaXB0TW9kZSgpOyB9CisgICAg
TmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgbmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIoKSBj
b25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+bmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIoKTsg
fQorICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlz
U3RyaWN0TW9kZSgpOyB9CisgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZUJsb2NrLT51c2VzRXZhbCgpOyB9CisgICAgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5wYXJzZU1vZGUoKTsgfQorICAgIGJvb2wgaXNBcnJv
d0Z1bmN0aW9uKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbigpOyB9Cisg
ICAgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZUJsb2NrLT5kZXJpdmVkQ29udGV4dFR5cGUoKTsgfQorICAgIEV2YWxDb250ZXh0VHlw
ZSBldmFsQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+ZXZhbENvbnRl
eHRUeXBlKCk7IH0KKyAgICBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpOyB9CisgICAgYm9vbCBp
c0NsYXNzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0NsYXNzQ29udGV4
dCgpOyB9CisgICAgaW50IG51bUNhbGxlZUxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJs
b2NrLT5tX251bUNhbGxlZUxvY2FsczsgfQorICAgIGludCBudW1WYXJzKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlQmxvY2stPm1fbnVtVmFyczsgfQorICAgIHVuc2lnbmVkIG51bVBhcmFtZXRlcnMo
KSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyB9CisgICAgVmly
dHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT50
aGlzUmVnaXN0ZXIoKTsgfQorICAgIFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIoKTsgfQorICAgIGJvb2wgd2Fz
Q29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2Nr
LT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0KKyAgICBib29sIGhhc0NoZWNr
cG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmhhc0NoZWNrcG9pbnRzKCk7IH0K
KyAgICBib29sIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5oYXNU
YWlsQ2FsbHMoKTsgfQorCisgICAgLy8gVXBkYXRpbmcgVW5saW5rZWRDb2RlQmxvY2suCisgICAg
dm9pZCBzZXRIYXNDaGVja3BvaW50cygpIHsgbV9jb2RlQmxvY2stPnNldEhhc0NoZWNrcG9pbnRz
KCk7IH0KKyAgICB2b2lkIHNldEhhc1RhaWxDYWxscygpIHsgbV9jb2RlQmxvY2stPnNldEhhc1Rh
aWxDYWxscygpOyB9CisgICAgdm9pZCBzZXROdW1DYWxsZWVMb2NhbHMoaW50IG51bUNhbGxlZUxv
Y2FscykgeyBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVMb2NhbHMgPSBudW1DYWxsZWVMb2NhbHM7
IH0KKyAgICB2b2lkIHNldE51bVZhcnMoaW50IG51bVZhcnMpIHsgbV9jb2RlQmxvY2stPm1fbnVt
VmFycyA9IG51bVZhcnM7IH0KKyAgICB2b2lkIHNldFRoaXNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0
ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fY29kZUJsb2NrLT5zZXRUaGlzUmVnaXN0ZXIodGhpc1JlZ2lz
dGVyKTsgfQorICAgIHZvaWQgc2V0U2NvcGVSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1Jl
Z2lzdGVyKSB7IG1fY29kZUJsb2NrLT5zZXRTY29wZVJlZ2lzdGVyKHRoaXNSZWdpc3Rlcik7IH0K
KyAgICB2b2lkIHNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKSB7IG1fY29kZUJsb2NrLT5z
ZXROdW1QYXJhbWV0ZXJzKG5ld1ZhbHVlKTsgfQorCisgICAgVW5saW5rZWRNZXRhZGF0YVRhYmxl
JiBtZXRhZGF0YSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5tZXRhZGF0YSgpOyB9CisgICAgdm9p
ZCBhZGRFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwgaW50IGRpdm90
LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVuc2lnbmVkIGxpbmUsIHVuc2lnbmVk
IGNvbHVtbik7CisgICAgdm9pZCBhZGRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyh1bnNpZ25l
ZCBpbnN0cnVjdGlvbk9mZnNldCwgdW5zaWduZWQgc3RhcnREaXZvdCwgdW5zaWduZWQgZW5kRGl2
b3QpOworICAgIHZvaWQgYWRkT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldChJbnN0
cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIG1fb3BQcm9maWxl
Q29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuYXBwZW5kKG9mZnNldCk7CisgICAgfQorCisgICAg
c2l6ZV90IG51bWJlck9mSnVtcFRhcmdldHMoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRz
LnNpemUoKTsgfQorICAgIHZvaWQgYWRkSnVtcFRhcmdldCh1bnNpZ25lZCBqdW1wVGFyZ2V0KSB7
IG1fanVtcFRhcmdldHMuYXBwZW5kKGp1bXBUYXJnZXQpOyB9CisgICAgdW5zaWduZWQganVtcFRh
cmdldChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHNbaW5kZXhdOyB9Cisg
ICAgdW5zaWduZWQgbGFzdEp1bXBUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRz
Lmxhc3QoKTsgfQorCisgICAgc2l6ZV90IG51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fc3dpdGNoSnVtcFRhYmxlcy5zaXplKCk7IH0KKyAgICBVbmxpbmtlZFNpbXBs
ZUp1bXBUYWJsZSYgYWRkU3dpdGNoSnVtcFRhYmxlKCkgeyBtX3N3aXRjaEp1bXBUYWJsZXMuYXBw
ZW5kKFVubGlua2VkU2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9zd2l0Y2hKdW1wVGFibGVz
Lmxhc3QoKTsgfQorICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBzd2l0Y2hKdW1wVGFibGUo
aW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsg
fQorCisgICAgc2l6ZV90IG51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCk7IH0KKyAgICBVbmxpbmtlZFN0
cmluZ0p1bXBUYWJsZSYgYWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKCkgeyBtX3N0cmluZ1N3aXRj
aEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2VkU3RyaW5nSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9z
dHJpbmdTd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQorCisgICAgc2l6ZV90IG51bWJlck9m
RXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX2V4Y2VwdGlvbkhhbmRsZXJzLnNp
emUoKTsgfQorICAgIFVubGlua2VkSGFuZGxlckluZm8mIGV4Y2VwdGlvbkhhbmRsZXIoaW50IGlu
ZGV4KSB7IHJldHVybiBtX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQorICAgIHZvaWQgYWRk
RXhjZXB0aW9uSGFuZGxlcihjb25zdCBVbmxpbmtlZEhhbmRsZXJJbmZvJiBoYW5kbGVyKSB7IG1f
ZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpOyB9CisgICAgVW5saW5rZWRIYW5kbGVy
SW5mbyogaGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCwgUmVxdWlyZWRIYW5k
bGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKKyAgICBVbmxpbmtlZEhhbmRsZXJJ
bmZvKiBoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQsIFJlcXVpcmVkSGFuZGxlciA9IFJlcXVpcmVk
SGFuZGxlcjo6QW55SGFuZGxlcik7CisKKyAgICBCaXRWZWN0b3ImIGJpdFZlY3RvcihzaXplX3Qg
aSkgeyByZXR1cm4gbV9iaXRWZWN0b3JzW2ldOyB9CisgICAgdW5zaWduZWQgYWRkQml0VmVjdG9y
KEJpdFZlY3RvciYmIGJpdFZlY3RvcikKKyAgICB7CisgICAgICAgIG1fYml0VmVjdG9ycy5hcHBl
bmQoV1RGTW92ZShiaXRWZWN0b3IpKTsKKyAgICAgICAgcmV0dXJuIG1fYml0VmVjdG9ycy5zaXpl
KCkgLSAxOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRJZGVudGlmaWVy
U2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5zaXplKCk7IH0K
KyAgICBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudElk
ZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOyB9CisgICAg
dm9pZCBhZGRTZXRDb25zdGFudChJZGVudGlmaWVyU2V0JiBzZXQpCisgICAgeworICAgICAgICBB
U1NFUlQobV92bS5oZWFwLmlzRGVmZXJyZWQoKSk7CisgICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9
IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJz
LmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7CisgICAgICAgIG1fY29uc3RhbnRzU291
cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90
aGVyKTsKKyAgICAgICAgbV9jb25zdGFudElkZW50aWZpZXJTZXRzLmFwcGVuZChDb25zdGFudElk
ZW50aWZpZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkpOworICAgIH0KKworICAgIGNvbnN0IFdyaXRl
QmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBj
b25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07
IH0KKyAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdp
c3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9CisgICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJu
IG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQorICAg
IGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjsgfQorCisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpPdGhlcikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZtLmhlYXAuaXNE
ZWZlcnJlZCgpKTsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVy
cy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmll
cjxVbmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0V2l0
aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24uYXBwZW5kKHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIHVuc2lnbmVkIGFkZENvbnN0YW50KExpbmtUaW1lQ29uc3Rh
bnQgbGlua1RpbWVDb25zdGFudCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZtLmhlYXAuaXNE
ZWZlcnJlZCgpKTsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVy
cy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmll
cjxVbmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0V2l0
aG91dFdyaXRlQmFycmllcihqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90PihsaW5rVGltZUNv
bnN0YW50KSkpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5h
cHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGltZUNvbnN0YW50KTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkRlY2wo
VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG4pCisgICAgeworICAgICAgICBBU1NFUlQobV92
bS5oZWFwLmlzRGVmZXJyZWQoKSk7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0aW9u
RGVjbHMuc2l6ZSgpOworICAgICAgICBtX2Z1bmN0aW9uRGVjbHMuYXBwZW5kKFdyaXRlQmFycmll
cjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNs
cy5sYXN0KCkuc2V0V2l0aG91dFdyaXRlQmFycmllcihuKTsKKyAgICAgICAgcmV0dXJuIHNpemU7
CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkRnVuY3Rpb25FeHByKFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlKiBuKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25F
eHBycy5zaXplKCk7CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5hcHBlbmQoV3JpdGVCYXJyaWVy
PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJz
Lmxhc3QoKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG4pOworICAgICAgICByZXR1cm4gc2l6ZTsK
KyAgICB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZJZGVudGlmaWVycygpIGNvbnN0IHsgcmV0dXJu
IG1faWRlbnRpZmllcnMuc2l6ZSgpOyB9CisgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmll
cihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnNbaW5kZXhdOyB9CisgICAg
dm9pZCBhZGRJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImIGkpIHsgcmV0dXJuIG1faWRlbnRp
ZmllcnMuYXBwZW5kKGkpOyB9CisKKyAgICB1c2luZyBPdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IEhh
c2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsKKyAgICB2b2lkIGFkZE91dE9m
TGluZUp1bXBUYXJnZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50IHRhcmdldCk7Cisg
ICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCk7Cisg
ICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYg
aW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lSnVtcE9mZnNldChp
bnN0cnVjdGlvbi5vZmZzZXQoKSk7CisgICAgfQorICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIHJl
cGxhY2VPdXRPZkxpbmVKdW1wVGFyZ2V0cygpCisgICAgeworICAgICAgICBPdXRPZkxpbmVKdW1w
VGFyZ2V0cyBuZXdKdW1wVGFyZ2V0czsKKyAgICAgICAgc3RkOjpzd2FwKG1fb3V0T2ZMaW5lSnVt
cFRhcmdldHMsIG5ld0p1bXBUYXJnZXRzKTsKKyAgICAgICAgcmV0dXJuIG5ld0p1bXBUYXJnZXRz
OworICAgIH0KKworICAgIHNpemVfdCBtZXRhZGF0YVNpemVJbkJ5dGVzKCkgeyByZXR1cm4gbV9j
b2RlQmxvY2stPm1ldGFkYXRhU2l6ZUluQnl0ZXMoKTsgfQorCisgICAgdm9pZCBnZXRMaW5lQW5k
Q29sdW1uKGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mLCB1bnNpZ25lZCYgbGluZSwgdW5zaWdu
ZWQmIGNvbHVtbikgY29uc3Q7CisKKyAgICB2b2lkIGFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2Rl
UmV3cml0ZXImLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYpOworCisgICAgdm9pZCBmaW5hbGl6
ZShzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+KTsKKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIFZNJiBtX3ZtOworICAgIFN0cm9u
ZzxVbmxpbmtlZENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CisgICAgLy8gSW4gbm9uLVJhcmVEYXRh
LgorICAgIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX2p1bXBUYXJnZXRzOwor
ICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzOworICAgIFZlY3RvcjxXcml0ZUJh
cnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7CisgICAgVmVjdG9yPFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247Cisg
ICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IG1fZnVu
Y3Rpb25EZWNsczsKKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlPj4gbV9mdW5jdGlvbkV4cHJzOworICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZv
PiBtX2V4cHJlc3Npb25JbmZvOworICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIG1fb3V0T2ZMaW5l
SnVtcFRhcmdldHM7CisgICAgLy8gSW4gUmFyZURhdGEuCisgICAgVmVjdG9yPFVubGlua2VkSGFu
ZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CisgICAgVmVjdG9yPFVubGlua2VkU2ltcGxl
SnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgVmVjdG9yPFVubGlua2VkU3RyaW5n
SnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisgICAgVmVjdG9yPEV4cHJlc3Np
b25SYW5nZUluZm86OkZhdFBvc2l0aW9uPiBtX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zOwor
ICAgIEhhc2hNYXA8dW5zaWduZWQsIFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YTo6VHlwZVBy
b2ZpbGVyRXhwcmVzc2lvblJhbmdlPiBtX3R5cGVQcm9maWxlckluZm9NYXA7CisgICAgVmVjdG9y
PEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29k
ZU9mZnNldHM7CisgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9iaXRWZWN0b3JzOworICAgIFZlY3Rv
cjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IGUzMjIyMDVkZWU3
OTU0MWNjNTA1ZWYwMzZmZmI5YTkzMTM0MjJkZmYuLjNkYmMyYmM5NTY1MzA2ZjE2MTQzOWQ5YmQz
OTk5Mjk4MDM1ZjRjYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0yODgsMTcgKzI4OCwxNCBAQCBQ
YXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQogICAgICAgICBwZXJmb3Jt
R2VuZXJhdG9yaWZpY2F0aW9uKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgbV93cml0ZXIsIG1f
Z2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZS5nZXQoKSwgbV9nZW5lcmF0b3JGcmFtZVN5bWJvbFRh
YmxlSW5kZXgpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
Y29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXgpKTsKLSAgICBtX2NvZGVCbG9jay0+c2V0SW5zdHJ1Y3Rp
b25zKG1fd3JpdGVyLmZpbmFsaXplKCkpOwotCi0gICAgbV9jb2RlQmxvY2stPnNocmlua1RvRml0
KCk7Ci0KKyAgICBtX2NvZGVCbG9jay0+ZmluYWxpemUobV93cml0ZXIuZmluYWxpemUoKSk7CiAg
ICAgaWYgKG1fZXhwcmVzc2lvblRvb0RlZXApCiAgICAgICAgIHJldHVybiBQYXJzZXJFcnJvcihQ
YXJzZXJFcnJvcjo6T3V0T2ZNZW1vcnkpOwogICAgIHJldHVybiBQYXJzZXJFcnJvcihQYXJzZXJF
cnJvcjo6RXJyb3JOb25lKTsKIH0KIAogQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKFZNJiB2bSwgUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2sqIGNvZGVCbG9jaywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVy
YXRpb25Nb2RlLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiBwYXJlbnRTY29wZVREWlZhcmlh
YmxlcykKLSAgICA6IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZShTdHJvbmc8VW5saW5rZWRDb2RlQmxv
Y2s+KHZtLCBjb2RlQmxvY2spLCBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3Bh
Y2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkKKyAgICA6IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZShtYWtl
VW5pcXVlPFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yPih2bSwgY29kZUJsb2NrKSwgQ29kZUJs
b2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpCiAg
ICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgLCBtX3Nj
b3BlTm9kZShwcm9ncmFtTm9kZSkKICAgICAsIG1fdGhpc1JlZ2lzdGVyKENhbGxGcmFtZTo6dGhp
c0FyZ3VtZW50T2Zmc2V0KCkpCkBAIC0zMzksNyArMzM2LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6
OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBVbmxp
bmtlZFAKIH0KIAogQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwg
RnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIGNv
ZGVCbG9jaywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2Rl
LCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiBwYXJlbnRTY29wZVREWlZhcmlhYmxlcykKLSAg
ICA6IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZShTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+KHZtLCBj
b2RlQmxvY2spLCBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1
YWxSZWdpc3RlcnMoKSkKKyAgICA6IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZShtYWtlVW5pcXVlPFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yPih2bSwgY29kZUJsb2NrKSwgQ29kZUJsb2NrOjpsbGlu
dEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX2Nv
ZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJhdGlvbk1vZGUpCiAgICAgLCBtX3Njb3BlTm9kZShm
dW5jdGlvbk5vZGUpCiAgICAgLCBtX2NvZGVUeXBlKEZ1bmN0aW9uQ29kZSkKQEAgLTgzMCw3ICs4
MjcsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBGdW5j
dGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZQogfQogCiBCeXRlY29kZUdlbmVyYXRvcjo6
Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBFdmFsTm9kZSogZXZhbE5vZGUsIFVubGlua2VkRXZh
bENvZGVCbG9jayogY29kZUJsb2NrLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2Rl
R2VuZXJhdGlvbk1vZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3BlVERa
VmFyaWFibGVzKQotICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKFN0cm9uZzxVbmxpbmtlZENv
ZGVCbG9jaz4odm0sIGNvZGVCbG9jayksIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNh
dmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKQorICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNl
KG1ha2VVbmlxdWU8VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I+KHZtLCBjb2RlQmxvY2spLCBD
b2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
KSkKICAgICAsIG1fY29kZUdlbmVyYXRpb25Nb2RlKGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAs
IG1fc2NvcGVOb2RlKGV2YWxOb2RlKQogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0
aGlzQXJndW1lbnRPZmZzZXQoKSkKQEAgLTg4OCw3ICs4ODUsNyBAQCBCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBFdmFsTm9kZSogZXZhbE5vZGUsIFVubGlua2Vk
RXZhbENvZAogfQogCiBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZt
LCBNb2R1bGVQcm9ncmFtTm9kZSogbW9kdWxlUHJvZ3JhbU5vZGUsIFVubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jayogY29kZUJsb2NrLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBj
b2RlR2VuZXJhdGlvbk1vZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3Bl
VERaVmFyaWFibGVzKQotICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKFN0cm9uZzxVbmxpbmtl
ZENvZGVCbG9jaz4odm0sIGNvZGVCbG9jayksIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxl
ZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKQorICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JC
YXNlKG1ha2VVbmlxdWU8VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I+KHZtLCBjb2RlQmxvY2sp
LCBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3Rl
cnMoKSkKICAgICAsIG1fY29kZUdlbmVyYXRpb25Nb2RlKGNvZGVHZW5lcmF0aW9uTW9kZSkKICAg
ICAsIG1fc2NvcGVOb2RlKG1vZHVsZVByb2dyYW1Ob2RlKQogICAgICwgbV90aGlzUmVnaXN0ZXIo
Q2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkKQEAgLTExOTAsNyArMTE4Nyw3IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXplTmV4dFBhcmFtZXRlcigpCiAg
ICAgbV9wYXJhbWV0ZXJzLmdyb3cobV9wYXJhbWV0ZXJzLnNpemUoKSArIDEpOwogICAgIGF1dG8m
IHBhcmFtZXRlciA9IHJlZ2lzdGVyRm9yKHJlZyk7CiAgICAgcGFyYW1ldGVyLnNldEluZGV4KHJl
Zyk7Ci0gICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOworICAgIG1fY29kZUJsb2NrLT5z
ZXROdW1QYXJhbWV0ZXJzKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgKyAxKTsKICAgICBy
ZXR1cm4gJnBhcmFtZXRlcjsKIH0KIApAQCAtMzc4MSw5ICszNzc4LDkgQEAgdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZShjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eSwgUmUKICAgICBpZiAoaXNDYXB0dXJlZCkKICAgICAgICAgYWRkUmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5zZXRJc0NhcHR1cmVkKCk7CiAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5zZXRJc0NvbnN0KCk7IC8vIFRoZSBmdW5jdGlvbiBuYW1lIHNjb3BlIG5hbWUgYWN0cyBsaWtl
IGEgY29uc3QgdmFyaWFibGUuCi0gICAgdW5zaWduZWQgbnVtVmFycyA9IG1fY29kZUJsb2NrLT5t
X251bVZhcnM7CisgICAgdW5zaWduZWQgbnVtVmFycyA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7
CiAgICAgcHVzaExleGljYWxTY29wZUludGVybmFsKG5hbWVTY29wZUVudmlyb25tZW50LCBURFpD
aGVja09wdGltaXphdGlvbjo6T3B0aW1pemUsIE5lc3RlZFNjb3BlVHlwZTo6SXNOb3ROZXN0ZWQs
IG51bGxwdHIsIFREWlJlcXVpcmVtZW50OjpOb3RVbmRlclREWiwgU2NvcGVUeXBlOjpGdW5jdGlv
bk5hbWVTY29wZSwgU2NvcGVSZWdpc3RlclR5cGU6OlZhcik7Ci0gICAgQVNTRVJUX1VOVVNFRChu
dW1WYXJzLCBtX2NvZGVCbG9jay0+bV9udW1WYXJzID09IHN0YXRpY19jYXN0PGludD4obnVtVmFy
cyArIDEpKTsgLy8gU2hvdWxkIGhhdmUgb25seSBjcmVhdGVkIG9uZSBuZXcgInZhciIgZm9yIHRo
ZSBmdW5jdGlvbiBuYW1lIHNjb3BlLgorICAgIEFTU0VSVF9VTlVTRUQobnVtVmFycywgbV9jb2Rl
QmxvY2stPm51bVZhcnMoKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KG51bVZhcnMgKyAxKSk7IC8vIFNo
b3VsZCBoYXZlIG9ubHkgY3JlYXRlZCBvbmUgbmV3ICJ2YXIiIGZvciB0aGUgZnVuY3Rpb24gbmFt
ZSBzY29wZS4KICAgICBib29sIHNob3VsZFRyZWF0QXNMZXhpY2FsVmFyaWFibGUgPSBpc1N0cmlj
dE1vZGUoKTsKICAgICBWYXJpYWJsZSBmdW5jdGlvblZhciA9IHZhcmlhYmxlRm9yTG9jYWxFbnRy
eShwcm9wZXJ0eSwgbV9sZXhpY2FsU2NvcGVTdGFjay5sYXN0KCkubV9zeW1ib2xUYWJsZS0+Z2V0
KE5vTG9ja2luZ05lY2Vzc2FyeSwgcHJvcGVydHkuaW1wbCgpKSwgbV9sZXhpY2FsU2NvcGVTdGFj
ay5sYXN0KCkubV9zeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIHNob3VsZFRyZWF0QXNMZXhpY2Fs
VmFyaWFibGUpOwogICAgIGVtaXRQdXRUb1Njb3BlKG1fbGV4aWNhbFNjb3BlU3RhY2subGFzdCgp
Lm1fc2NvcGUsIGZ1bmN0aW9uVmFyLCBjYWxsZWUsIFRocm93SWZOb3RGb3VuZCwgSW5pdGlhbGl6
YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbik7CkBAIC00OTQ4LDcgKzQ5NDUsNyBAQCB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpCiAg
ICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5kZWZpbmVkT3JOdWxsKG5ld1RlbXBvcmFyeSgpLCBz
cmMpLCBtX29wdGlvbmFsQ2hhaW5UYXJnZXRTdGFjay5sYXN0KCkuZ2V0KCkpOwogfQogCi12b2lk
IEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5s
aW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0
KQordm9pZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlC
eXRlY29kZUVuZE9mZnNldCkKIHsKICAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvcklu
Q29udGV4dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKICAg
ICAvLyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6CkBAIC00OTcz
LDcgKzQ5NzAsNyBAQCB2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2sqIGNvZAogICAgIH0KIH0KIAotdm9pZCBT
dHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVu
ZE9mZnNldCkKK3ZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2Nr
LCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCiB7CiAgICAgQmFzZTo6ZmluYWxpemUo
Z2VuZXJhdG9yLCBjb2RlQmxvY2ssIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7CiAgICAgaWYgKGlz
VmFsaWQoKSkKQEAgLTUwMTIsNyArNTAwOSw3IEBAIHZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCCiAg
ICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVk
IGJvZHlCeXRlY29kZUVuZE9mZnNldCkKK3ZvaWQgSW5kZXhlZEZvckluQ29udGV4dDo6ZmluYWxp
emUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewogICAgIEJh
c2U6OmZpbmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQp
OwogICAgIGlmIChpc1ZhbGlkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggMTQ4YWViNjM2NThkMjc3MzZk
N2ZiYjFmZTE4NTYwMjc1YjZjYzQ5NS4uYThiOTQzY2YwYzAyODBmNWMxMTRkMmRlOWQ4ZmQ5MzJj
MmE0NTg4NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIlN0YXRp
Y1Byb3BlcnR5QW5hbHl6ZXIuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgogI2luY2x1ZGUg
IlVubGlua2VkQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3IuaCIKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGht
ZXRpYy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CkBAIC0yMjQsNyArMjI1LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OyB9CiAKLSAg
ICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2Nr
KiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKKyAgICAgICAgdm9pZCBmaW5hbGl6
ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiwgdW5zaWdu
ZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBtX2xvY2FsUmVnaXN0ZXI7CkBAIC0yNTUsNyArMjU2LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBtX2dldEluc3RzLmFwcGVuZChHZXRJbnN0IHsgaW5zdElu
ZGV4LCBwcm9wZXJ0eVJlZ0luZGV4IH0pOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBmaW5h
bGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2NrKiwgdW5zaWduZWQgYm9k
eUJ5dGVjb2RlRW5kT2Zmc2V0KTsKKyAgICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVy
YXRvciYsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2Rl
RW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBt
X2luZGV4UmVnaXN0ZXI7CkBAIC0yNzUsNyArMjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIu
Z2V0KCk7IH0KIAotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5s
aW5rZWRDb2RlQmxvY2sqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOworICAgICAg
ICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAgICAgICB2b2lkIGFk
ZEdldEluc3QodW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldElu
c3RzLmFwcGVuZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQogCiAgICAgcHJpdmF0
ZToKQEAgLTM2OCw3ICszNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgT3Bj
b2RlVHJhaXRzID0gSlNPcGNvZGVUcmFpdHM7CiAgICAgICAgIHVzaW5nIE9wY29kZUlEID0gOjpK
U0M6Ok9wY29kZUlEOwogICAgICAgICB1c2luZyBPcE5vcCA9IDo6SlNDOjpPcE5vcDsKLSAgICAg
ICAgdXNpbmcgQ29kZUJsb2NrID0gU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPjsKKyAgICAgICAg
dXNpbmcgQ29kZUJsb2NrID0gc3RkOjp1bmlxdWVfcHRyPFVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yPjsKICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBPcGNvZGVJRCBvcGNvZGVGb3JEaXNhYmxp
bmdPcHRpbWl6YXRpb25zID0gb3BfZW5kOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3JCYXNlSW5saW5lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvckJh
c2VJbmxpbmVzLmgKaW5kZXggZTIzMDcxN2RjMmRmODBiNmVhNTgyMzM2ZDAxNDdjNTU1M2Y0Nzg0
Mi4uMWJkOTI0ZmNiMDAxODc4NGE2Zjg1OGJlZjFiYjNlZmU2YzhmYjAwMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvckJhc2VJ
bmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvckJhc2VJbmxpbmVzLmgKQEAgLTE2MSw5ICsxNjEsOSBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUcmFpdHM+CiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvckJhc2U8VHJhaXRzPjo6
bmV3UmVnaXN0ZXIoKQogewogICAgIG1fY2FsbGVlTG9jYWxzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0
ZXJGb3JMb2NhbChtX2NhbGxlZUxvY2Fscy5zaXplKCkpKTsKLSAgICBpbnQgbnVtQ2FsbGVlTG9j
YWxzID0gc3RkOjptYXg8aW50PihtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVMb2NhbHMsIG1fY2Fs
bGVlTG9jYWxzLnNpemUoKSk7CisgICAgaW50IG51bUNhbGxlZUxvY2FscyA9IHN0ZDo6bWF4PGlu
dD4obV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpLCBtX2NhbGxlZUxvY2Fscy5zaXplKCkp
OwogICAgIG51bUNhbGxlZUxvY2FscyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0Fs
aWdubWVudFJlZ2lzdGVycygpLCBudW1DYWxsZWVMb2NhbHMpOwotICAgIG1fY29kZUJsb2NrLT5t
X251bUNhbGxlZUxvY2FscyA9IG51bUNhbGxlZUxvY2FsczsKKyAgICBtX2NvZGVCbG9jay0+c2V0
TnVtQ2FsbGVlTG9jYWxzKG51bUNhbGxlZUxvY2Fscyk7CiAgICAgcmV0dXJuICZtX2NhbGxlZUxv
Y2Fscy5sYXN0KCk7CiB9CiAKQEAgLTE4MSw5ICsxODEsMTAgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3JCYXNlPFRyYWl0cz46Om5ld1RlbXBvcmFyeSgpCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUcmFpdHM+CiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvckJhc2U8VHJhaXRzPjo6YWRk
VmFyKCkKIHsKLSAgICArK21fY29kZUJsb2NrLT5tX251bVZhcnM7CisgICAgaW50IG51bVZhcnMg
PSBtX2NvZGVCbG9jay0+bnVtVmFycygpOworICAgIG1fY29kZUJsb2NrLT5zZXROdW1WYXJzKG51
bVZhcnMgKyAxKTsKICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBuZXdSZWdpc3RlcigpOwotICAg
IEFTU0VSVChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LT5pbmRleCgpKS50b0xvY2FsKCkgPT0gbV9j
b2RlQmxvY2stPm1fbnVtVmFycyAtIDEpOworICAgIEFTU0VSVChWaXJ0dWFsUmVnaXN0ZXIocmVz
dWx0LT5pbmRleCgpKS50b0xvY2FsKCkgPT0gbnVtVmFycyk7CiAgICAgcmVzdWx0LT5yZWYoKTsg
Ly8gV2Ugc2hvdWxkIG5ldmVyIGZyZWUgdGhpcyBzbG90LgogICAgIHJldHVybiByZXN1bHQ7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKaW5kZXgg
Mjc0NTEyMjQwMjQzN2VjMzU0ODlhYTI0OWRlM2FiYjI2YTEyMWE5OS4uYmI1ZTg1MmI0MWM1NDcw
YzFlZTdjNWE4NzhhYzNhM2UzZWQxYTRmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NhY2hlZFR5cGVzLmNwcApAQCAtNjExLDYgKzYxMSwxNiBAQCBjbGFzcyBDYWNoZWRW
ZWN0b3IgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8VmVjdG9yPFNvdXJjZVR5cGU8VD4s
IElubGluZUNhcAogICAgICAgICAgICAgOjpKU0M6OmVuY29kZShlbmNvZGVyLCBidWZmZXJbaV0s
IHZlY3RvcltpXSk7CiAgICAgfQogCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgUmVmQ291bnRlZEFycmF5PFNvdXJjZVR5cGU8VD4+JiB2ZWN0b3IpCisgICAgeworICAg
ICAgICBtX3NpemUgPSB2ZWN0b3Iuc2l6ZSgpOworICAgICAgICBpZiAoIW1fc2l6ZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYWxsb2Nh
dGU8VD4oZW5jb2RlciwgbV9zaXplKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmVuY29kZShlbmNvZGVyLCBidWZmZXJb
aV0sIHZlY3RvcltpXSk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
ICAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8U291cmNlVHlwZTxUPiwg
SW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlciwgMTYsIE1hbGxvYz4mIHZlY3RvciwgQXJn
cy4uLiBhcmdzKSBjb25zdAogICAgIHsKQEAgLTYyMiw2ICs2MzIsMTggQEAgY2xhc3MgQ2FjaGVk
VmVjdG9yIDogcHVibGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFZlY3RvcjxTb3VyY2VUeXBlPFQ+
LCBJbmxpbmVDYXAKICAgICAgICAgICAgIDo6SlNDOjpkZWNvZGUoZGVjb2RlciwgYnVmZmVyW2ld
LCB2ZWN0b3JbaV0sIGFyZ3MuLi4pOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3M+CisgICAgdm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmVmQ291bnRlZEFycmF5
PFNvdXJjZVR5cGU8VD4+JiB2ZWN0b3IsIEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmICghbV9zaXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2ZWN0b3IgPSBS
ZWZDb3VudGVkQXJyYXk8U291cmNlVHlwZTxUPj4obV9zaXplKTsKKyAgICAgICAgY29uc3QgVCog
YnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3NpemU7ICsraSkKKyAgICAgICAgICAgIDo6SlNDOjpkZWNvZGUoZGVj
b2RlciwgYnVmZmVyW2ldLCB2ZWN0b3JbaV0sIGFyZ3MuLi4pOworICAgIH0KKworCiBwcml2YXRl
OgogICAgIHVuc2lnbmVkIG1fc2l6ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oCmluZGV4IDJmNGIxYzdkZTZhODdjNzQxMWU4
NmU4N2U3ZjE5MjQ3MzUyYzBmOGIuLjdmMTVlNjE3NGQwZDBkZGE1ZDYyOTM4YTBmOGQ3ZWE5ZjNk
MzgzYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
bkNvZGVCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlv
bkNvZGVCbG9jay5oCkBAIC03Miw2ICs3Miw5IEBAIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrIHsK
ICAgICBjb25zdCBWZWN0b3I8dWludDY0X3Q+JiBjb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBt
X2NvbnN0YW50czsgfQogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMo
KSBjb25zdCB7IHJldHVybiAqbV9pbnN0cnVjdGlvbnM7IH0KIAorICAgIHZvaWQgc2V0TnVtVmFy
cyhpbnQgbnVtVmFycykgeyBtX251bVZhcnMgPSBudW1WYXJzOyB9CisgICAgdm9pZCBzZXROdW1D
YWxsZWVMb2NhbHMoaW50IG51bUNhbGxlZUxvY2FscykgeyBtX251bUNhbGxlZUxvY2FscyA9IG51
bUNhbGxlZUxvY2FsczsgfQorCiAgICAgQUxXQVlTX0lOTElORSB1aW50NjRfdCBnZXRDb25zdGFu
dChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tyZWcudG9D
b25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50VHlw
ZShWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1JlZkNvdW50ZWRBcnJheS5oIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5
LmgKaW5kZXggZDA3NjVkYzA2YWEyOTU0MmVkMWMzNjViYmM4OGNhN2Q1MzBhYzU4NS4uOGVlMmI1
NTRiZTE5Yjg2YmNmNzg1MTgxYzFlNjM0YmUyZGNhOTlkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvUmVmQ291bnRlZEFycmF5LmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFy
cmF5LmgKQEAgLTExNSw2ICsxMTUsMzAgQEAgY2xhc3MgUmVmQ291bnRlZEFycmF5IHsKICAgICAg
ICAgcmV0dXJuIGFzc2lnbjxQdHJUcmFpdHM+KG90aGVyKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0
ZTxzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KKyAgICBS
ZWZDb3VudGVkQXJyYXkmIG9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHks
IE92ZXJmbG93SGFuZGxlcj4mIG90aGVyKQorICAgIHsKKyAgICAgICAgVCogb2xkRGF0YSA9IGRh
dGEoKTsKKyAgICAgICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIFB0clRyYWl0
czo6ZXhjaGFuZ2UobV9kYXRhLCBudWxscHRyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBUKiBkYXRhID0gKHN0YXRpY19jYXN0PEhlYWRlcio+KFJlZkNvdW50ZWRBcnJheU1hbGxvYzo6
bWFsbG9jKEhlYWRlcjo6c2l6ZSgpICsgc2l6ZW9mKFQpICogb3RoZXIuc2l6ZSgpKSkpLT5wYXls
b2FkKCk7CisgICAgICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICAgICAgSGVhZGVyOjpm
cm9tUGF5bG9hZChkYXRhKS0+cmVmQ291bnQgPSAxOworICAgICAgICAgICAgSGVhZGVyOjpmcm9t
UGF5bG9hZChkYXRhKS0+bGVuZ3RoID0gb3RoZXIuc2l6ZSgpOworICAgICAgICAgICAgQVNTRVJU
KEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSktPmxlbmd0aCA9PSBvdGhlci5zaXplKCkpOworICAg
ICAgICAgICAgVmVjdG9yVHlwZU9wZXJhdGlvbnM8VD46OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVy
LmJlZ2luKCksIG90aGVyLmVuZCgpLCBkYXRhKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW9s
ZERhdGEpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIGlmICgtLUhlYWRlcjo6
ZnJvbVBheWxvYWQob2xkRGF0YSktPnJlZkNvdW50KQorICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6ZGVzdHJ1Y3Qob2xkRGF0YSwgb2xk
RGF0YSArIEhlYWRlcjo6ZnJvbVBheWxvYWQob2xkRGF0YSktPmxlbmd0aCk7CisKKyAgICAgICAg
UmVmQ291bnRlZEFycmF5TWFsbG9jOjpmcmVlKEhlYWRlcjo6ZnJvbVBheWxvYWQob2xkRGF0YSkp
OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCiAgICAgflJlZkNvdW50ZWRBcnJheSgp
CiAgICAgewogICAgICAgICBpZiAoIW1fZGF0YSkKQEAgLTEzOSw2ICsxNjMsOCBAQCBjbGFzcyBS
ZWZDb3VudGVkQXJyYXkgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBI
ZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEoKSktPmxlbmd0aDsKICAgICB9CisKKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBzaXplKCkgPT0gMDsgfQogICAgIAogICAgIHNpemVfdCBi
eXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKSAqIHNpemVvZihUKTsgfQogICAgIApAQCAt
MTcxLDYgKzE5NywxMSBAQCBjbGFzcyBSZWZDb3VudGVkQXJyYXkgewogICAgIFQmIG9wZXJhdG9y
W10oc2l6ZV90IGkpIHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgY29uc3QgVCYgb3BlcmF0b3JbXShz
aXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KIAorICAgIFQmIGZyb250KCkgeyByZXR1
cm4gKCp0aGlzKVswXTsgfQorICAgIGNvbnN0IFQmIGZyb250KCkgY29uc3QgeyByZXR1cm4gKCp0
aGlzKVswXTsgfQorICAgIFQmIGxhc3QoKSB7IHJldHVybiAoKnRoaXMpW3NpemUoKSAtIDFdOyB9
CisgICAgY29uc3QgVCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuICgqdGhpcylbc2l6ZSgpIC0gMV07
IH0KKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyVHJhaXRzID0gUHRyVHJhaXRzPgogICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWZDb3VudGVkQXJyYXk8VCwgT3RoZXJUcmFpdHM+JiBv
dGhlcikgY29uc3QKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389639</attachid>
            <date>2020-02-04 01:48:48 -0800</date>
            <delta_ts>2020-02-04 01:50:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207087-20200204014847.patch</filename>
            <type>text/plain</type>
            <size>98469</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1NjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
N2U0MjkzOWJmN2Q3MmU2N2ZiZWEzYmEyMWZiYmY4ZWEwMTEwZDA0Li40NDcyMDg0YTY4NGNhOTNj
MmE4OWZiMzIyOGI5ODkzODJiMzYxNjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODMgQEAKKzIwMjAtMDItMDQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBJbnRyb2R1Y2UgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3Ig
YW5kIHJlZHVjZSBzaXplb2YoVW5saW5rZWRDb2RlQmxvY2spCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwODcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGlsZSBVbmxpbmtlZENvZGVCbG9jayBpcyBp
bW11dGFibGUgb25jZSBpdCBpcyBjcmVhdGVkIGZyb20gQnl0ZWNvZGVHZW5lcmF0b3IsIGl0IGhh
cyBtYW55IG11dGFibGUgVmVjdG9ycy4KKyAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHdlIGFyZSB1
c2luZyBVbmxpbmtlZENvZGVCbG9jayBhcyBhIGJ1aWxkZXIgb2YgVW5saW5rZWRDb2RlQmxvY2sg
aXRzZWxmIHRvbyBpbiBCeXRlY29kZUdlbmVyYXRvci4KKyAgICAgICAgU2luY2UgVmVjdG9yIHRh
a2VzIDE2IGJ5dGVzIHRvIGFsbG93IGVmZmljaWVudCBleHBhbnNpb25zLCBpdCBpcyBuaWNlIGlm
IHdlIGNhbiB1c2UgUmVmQ291bnRlZEFycmF5IGluc3RlYWQgd2hlbgorICAgICAgICB3ZSBrbm93
IHRoaXMgVmVjdG9yIGlzIGltbXV0YWJsZS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCB3ZSBp
bnRyb2R1Y2UgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3Igd3JhcHBlci4gQnl0ZWNvZGVHZW5l
cmF0b3IsIEJ5dGVjb2RlUmV3cml0ZXIsIEJ5dGVjb2RlRHVtcGVyLAorICAgICAgICBhbmQgQnl0
ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24gaW50ZXJhY3Qgd2l0aCBVbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvciBpbnN0ZWFkIG9mIFVubGlua2VkQ29kZUJsb2NrLiBBbmQgVW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3IKKyAgICAgICAgd2lsbCBnZW5lcmF0ZSB0aGUgZmluYWxpemVkIFVubGlua2Vk
Q29kZUJsb2NrLiBUaGlzIGRlc2lnbiBhbGxvd3MgdXMgdG8gdXNlIFJlZkNvdW50ZWRBcnJheSBm
b3IgZGF0YSBpbiBVbmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAgd2hpY2ggaXMgKDEpIHNtYWxs
ZXIgYW5kICgyKSBkb2luZyBzaHJpbmtUb0ZpdCBvcGVyYXRpb24gd2hlbiBjcmVhdGluZyBpdCBm
cm9tIFZlY3Rvci4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZHVjZXMgc2l6ZW9mKFVubGlua2Vk
Q29kZUJsb2NrKSBmcm9tIDI1NiB0byAxNjgsIDg4IGJ5dGVzIHJlZHVjdGlvbi4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpjb21wdXRlKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29k
ZUR1bXBlci5jcHA6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRp
b24uY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6Qnl0ZWNv
ZGVHZW5lcmF0b3JpZmljYXRpb24pOgorICAgICAgICAoSlNDOjpHZW5lcmF0b3JMaXZlbmVzc0Fu
YWx5c2lzOjpydW4pOgorICAgICAgICAoSlNDOjpwZXJmb3JtR2VuZXJhdG9yaWZpY2F0aW9uKToK
KyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVS
ZXdyaXRlcjo6Qnl0ZWNvZGVSZXdyaXRlcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRS
ZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVyRm9ySW5kZXgpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQ
cm9maWxlcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0
ZWNvZGUvSGFuZGxlckluZm8uaDoKKyAgICAgICAgKEpTQzo6SGFuZGxlckluZm9CYXNlOjpoYW5k
bGVyRm9ySW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHA6
CisgICAgICAgIChKU0M6OmNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMpOgorICAgICAgICAoSlND
OjpyZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMpOgorICAgICAgICAoSlNDOjpmaW5kSnVtcFRh
cmdldHNGb3JJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJn
ZXRzLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpkdW1wRXhwcmVzc2lvblJhbmdlSW5mbyk6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRFeHByZXNzaW9uSW5mbyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRUeXBlUHJvZmlsZXJFeHBy
ZXNzaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpz
ZXRJbnN0cnVjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
azo6YXBwbHlNb2RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6c2hyaW5rVG9GaXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6YWRkT3V0T2ZMaW5lSnVtcFRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNl
dE51bVBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVy
T2ZJZGVudGlmaWVycyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpp
ZGVudGlmaWVycyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpiaXRW
ZWN0b3IpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0
YW50SWRlbnRpZmllclNldHMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVt
YmVyT2ZKdW1wVGFyZ2V0cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mRnVuY3Rpb25EZWNscyk6CisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om9wUHJvZmlsZUNvbnRyb2xG
bG93Qnl0ZWNvZGVPZmZzZXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6YWRkUGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OmFkZElkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6YWRkQml0VmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmFkZFNldENvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmFkZENvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmFkZEp1bXBUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6YWRkU3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRGdW5jdGlvbkRlY2wpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkRnVuY3Rpb25FeHBy
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEV4Y2VwdGlv
bkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRk
T3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpyZXBsYWNlT3V0T2ZMaW5lSnVtcFRhcmdldHMpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpnZXRMaW5l
QW5kQ29sdW1uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3I6OmFkZEV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3I6OmFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmhhbmRsZXJGb3JJbmRleCk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjphcHBseU1vZGlmaWNhdGlv
bik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjphZGRPdXRPZkxp
bmVKdW1wVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6
Om91dE9mTGluZUp1bXBPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvcjo6ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yOjp2bSk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrR2VuZXJhdG9yOjppc0NvbnN0cnVjdG9yIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmNvbnN0cnVjdG9yS2luZCBjb25zdCk6CisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpzdXBlckJpbmRpbmcgY29uc3QpOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c2NyaXB0TW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpuZWVkc0NsYXNzRmll
bGRJbml0aWFsaXplciBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yOjppc1N0cmljdE1vZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvcjo6dXNlc0V2YWwgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvcjo6cGFyc2VNb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmlzQXJyb3dGdW5jdGlvbik6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpkZXJpdmVkQ29udGV4dFR5cGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6ZXZhbENvbnRleHRUeXBlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmlzQXJyb3dG
dW5jdGlvbkNvbnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvcjo6aXNDbGFzc0NvbnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvcjo6bnVtQ2FsbGVlTG9jYWxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bVZhcnMgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6bnVtUGFyYW1ldGVycyBjb25zdCk6CisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjp0aGlzUmVnaXN0ZXIgY29uc3Qp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c2NvcGVSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjp3YXND
b21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3I6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Omhhc1RhaWxDYWxscyBjb25zdCk6CisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpzZXRIYXNDaGVja3BvaW50cyk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpzZXRIYXNUYWlsQ2Fs
bHMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c2V0TnVtQ2Fs
bGVlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OnNl
dE51bVZhcnMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c2V0
VGhpc1JlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6
OnNldFNjb3BlUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvcjo6c2V0TnVtUGFyYW1ldGVycyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yOjptZXRhZGF0YSk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yOjphZGRPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bWJlck9mSnVtcFRhcmdldHMgY29u
c3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkSnVtcFRh
cmdldCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpqdW1wVGFy
Z2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Omxh
c3RKdW1wVGFyZ2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3I6Om51bWJlck9mU3dpdGNoSnVtcFRhYmxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjphZGRTd2l0Y2hKdW1wVGFibGUpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c3dpdGNoSnVtcFRhYmxlKToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bWJlck9mU3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yOjphZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvcjo6c3RyaW5nU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMgY29u
c3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6ZXhjZXB0aW9u
SGFuZGxlcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjphZGRF
eGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3I6OmJpdFZlY3Rvcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
OjphZGRCaXRWZWN0b3IpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
cjo6bnVtYmVyT2ZDb25zdGFudElkZW50aWZpZXJTZXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmNvbnN0YW50SWRlbnRpZmllclNldHMpOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkU2V0Q29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6Y29uc3RhbnRSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpjb25z
dGFudFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
OjpnZXRDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yOjpjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkRnVuY3Rpb25EZWNsKToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmFkZEZ1bmN0aW9uRXhwcik6CisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpudW1iZXJPZklkZW50aWZpZXJz
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmlkZW50
aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6
YWRkSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
OjpvdXRPZkxpbmVKdW1wT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3I6OnJlcGxhY2VPdXRPZkxpbmVKdW1wVGFyZ2V0cyk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjptZXRhZGF0YVNpemVJbkJ5dGVzKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
aW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZSk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4
dDo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmZpbmFs
aXplKToKKyAgICAgICAgKEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6ZmluYWxpemUpOgorICAg
ICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvckJhc2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yQmFzZTxUcmFpdHM+OjpuZXdSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yQmFzZTxUcmFpdHM+OjphZGRWYXIpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZFZlY3Rvcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlv
bkNvZGVCbG9jazo6c2V0TnVtVmFycyk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29k
ZUJsb2NrOjpzZXROdW1DYWxsZWVMb2NhbHMpOgorCiAyMDIwLTAyLTAzICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gVXNlIFBhY2tlZFB0ciBmb3Ig
VmFyaWFibGVFbnZpcm9ubWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA4OTMyMzU3YTQ5MTVmZWM3N2I0ZjNhZDNhYzExZjkz
YjJjYzE0YTc3Li43MmExMThjOGE5ZTYwZGFkYWM4YzJhMGMwYjNhY2EzY2JkMzQyMDVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIwIEBACisyMDIwLTAyLTA0ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0pTQ10gSW50cm9kdWNlIFVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yIGFuZCByZWR1Y2Ugc2l6ZW9mKFVubGlua2VkQ29kZUJsb2NrKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDg3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG1vcmUgdXNlZnVsIG1ldGhvZHMg
Zm9yIFJlZkNvdW50ZWRBcnJheS4KKworICAgICAgICAqIHd0Zi9SZWZDb3VudGVkQXJyYXkuaDoK
KyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RG
OjpSZWZDb3VudGVkQXJyYXk6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpSZWZDb3Vu
dGVkQXJyYXk6OmZyb250KToKKyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5Ojpmcm9udCBj
b25zdCk6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6bGFzdCk6CisgICAgICAgIChX
VEY6OlJlZkNvdW50ZWRBcnJheTo6bGFzdCBjb25zdCk6CisKIDIwMjAtMDItMDMgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZWR1Y2Ugc2l6
ZSBvZiBIYXNoTWFwIGFuZCBIYXNoU2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGI0YTUxNGM1N2Q3MjlkMzU2YWNkNTU3NjNkNWJmYjc4ODg1ZjQ0OGIuLjVjYTBjODYwMmJlMTRj
NWUzYjk5YjNlMjExMmYyZDI4ZGRkOTFiYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xNzg4LDYgKzE3ODgsNyBAQAogCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1MjkgLyogQnl0
ZWNvZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNEMjY0MjgxRDM4QzA0MjAwMEJFMTc0IC8qIEJ5dGVjb2RlR3JhcGguaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzI4REFFQjFEMzhEMDA1
MDAxQTI1MjkgLyogQnl0ZWNvZGVSZXdyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTNEMjY0MkExRDM4QzA0MjAwMEJFMTc0IC8qIEJ5dGVjb2Rl
UmV3cml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFMzJBQjI0NDFEQ0Q3NUY0MDBENzUzM0EgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzgwQTc2QjFE
Q0Q3MTk1MDAwRjg5RTYgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTMyQzNDNjkyM0U5NEMxRTAwQkM5
N0MwIC8qIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzJDM0M2ODIzRTk0QzFFMDBCQzk3QzAgLyogVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRTMzMDk1REQyMzIxMEExQjAwRUI3
ODU2IC8qIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMzA5NURDMjMyMTBBMTQwMEVCNzg1NiAvKiBKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTMzNENCQjUyMUZEOTZBOTAwMEVCMTc4IC8qIFJlZ0V4cEdsb2Jh
bERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
MzRDQkIzMjFGRDk2QTkwMDBFQjE3OCAvKiBSZWdFeHBHbG9iYWxEYXRhLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTMzNjM3QTYxQjYzMjIwMjAw
RUUwODQwIC8qIFJlZmxlY3RPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzMzYzN0E0MUI2MzIyMDIwMEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ5
MDgsNiArNDkwOSw3IEBACiAJCUUzMjZDNDk2MUVDQkVGNTcwMEE5QTkwNSAvKiBDbGFzc0luZm8u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xhc3NJbmZvLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyODJCQjkxRkU5MzBBMzAwRURBRjcxIC8q
IFlhcnJFcnJvckNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
WWFyckVycm9yQ29kZS5jcHA7IHBhdGggPSB5YXJyL1lhcnJFcnJvckNvZGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMzI4MkJCQTFGRTkzMEE0MDBFREFGNzEgLyogWWFyckVy
cm9yQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyRXJyb3JDb2Rl
Lmg7IHBhdGggPSB5YXJyL1lhcnJFcnJvckNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTMyQzNDNjgyM0U5NEMxRTAwQkM5N0MwIC8qIFVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMzA1RkFGMjBCMEY3
ODcwMENFQjgyQiAvKiBJbkJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5CeUlkU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMzA1
RkIwMjBCMEY3ODcwMENFQjgyQiAvKiBJbkJ5SWRWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluQnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMzMwNUZCMTIwQjBGNzg4MDBDRUI4MkIgLyogSW5CeUlkVmFyaWFudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbkJ5SWRWYXJpYW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTU2LDYgKzQ5NTgsNyBAQAogCQlFMzVFMDM2MTFC
N0FCNDg1MDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uT2JqZWN0LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzYzN0VFNzIzNkU1
NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMaW5rVGltZUNvbnN0YW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzNjM3RUU4MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmtUaW1lQ29uc3RhbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzZCNDgwMTIzRTk1NzM4MDBFNEE2NkUgLyog
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MzZCNzY2RTIyRjhENjExMDBEMDk4MTggLyogV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTM2Qjc2NkYyMkY4RDYxMTAwRDA5ODE4IC8qIFdhc21PTUdGb3JP
U1JFbnRyeVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzZDQzk0NjIwODYzMTRGMDA1MUZGRDYgLyog
V2FzbUNyZWF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
Q3JlYXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MzYwLDYgKzgz
NjMsOCBAQAogCQkJCTBGMkQ0REU3MTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24uaCAq
LywKIAkJCQlBNzlFNzgxRTE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suY3Bw
ICovLAogCQkJCUE3OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5o
ICovLAorCQkJCUUzNkI0ODAxMjNFOTU3MzgwMEU0QTY2RSAvKiBVbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvci5jcHAgKi8sCisJCQkJRTMyQzNDNjgyM0U5NEMxRTAwQkM5N0MwIC8qIFVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yLmggKi8sCiAJCQkJMTRBRDkxMjgxRENBQUFCMDAwMTRGOUZFIC8q
IFVubGlua2VkRXZhbENvZGVCbG9jay5jcHAgKi8sCiAJCQkJMTRBRDkxMUUxRENBOUZBNDAwMTRG
OUZFIC8qIFVubGlua2VkRXZhbENvZGVCbG9jay5oICovLAogCQkJCTE0QUQ5MTJCMURDQUFBQjAw
MDE0RjlGRSAvKiBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmNwcCAqLywKQEAgLTkxNTAsNiAr
OTE1NSw3IEBACiAJCQkJQTUzMjQzOTgxODU2QTQ4OTAwMkVENjkyIC8qIENvbWJpbmVkRG9tYWlu
cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENv
bW1vbklkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1
REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0E5MjBCRDIz
REEyQzZEMDAwRUJBRjAgLyogQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdFNUEzQTgxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjRGMTFFODIwOUJDREFCMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1p
bmdTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQ0UxMkExRkFGQTg1RjAwNkYzOTAxIC8q
IENvbXBsZXRlU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLApAQCAtOTM4Niw3ICs5MzkyLDYgQEAK
IAkJCQkwRjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkUwNTAxODFBQTkwOTExMDBEMzNCMzMgLyogRGlyZWN0QXJndW1l
bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxNjFBQTkwOTExMDBEMzNCMzMgLyogRGly
ZWN0QXJndW1lbnRzT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQkzM0E5MjBCRDIzREEyQzZE
MDAwRUJBRjAgLyogQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTY5QTA3OTgwRUQxRDNBRTAwRjFGNjgxIC8qIERpcmVjdEV2YWxDb2RlQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0Mzg2QTc1MURENjk4OTUwMDg2NTJDNCAvKiBEaXJlY3RFdmFsRXhlY3V0
YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOEYxQzBDRDY4NTAwMDUyQkZBIC8qIERp
c2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDI0
OSw2ICsxMDI1NCw3IEBACiAJCQkJQTdBOEFGM0YxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50
OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCNjAxODIxNjM5RkQyQTAwMzcy
QkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzJDM0M2OTIz
RTk0QzFFMDBCQzk3QzAgLyogVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0QUQ5MTI0MURDQTlGQTQwMDE0RjlGRSAvKiBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QUQ5MTIzMURDQTlGQTQwMDE0RjlGRSAvKiBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0MkU1MTFCNzk2
RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNjYmY0ODcwMDc3MWQxNzAyNzAzYTdh
MDc3ZTVmNDBhZWFmZjQ2ZmMuLjc2ZjFjNjk0ODVjNmZjYmVlNDg3ZTVhYzk4NmNhNDYzNjM1M2Fl
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTI3NSw2ICsyNzUsNyBAQCBieXRl
Y29kZS9TdXBlclNhbXBsZXIuY3BwCiBieXRlY29kZS9Ub1RoaXNTdGF0dXMuY3BwCiBieXRlY29k
ZS9UcmFja2VkUmVmZXJlbmNlcy5jcHAKIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAor
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuY3BwCiBieXRlY29kZS9Vbmxpbmtl
ZEV2YWxDb2RlQmxvY2suY3BwCiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmNw
cAogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwCmluZGV4
IDY2ZDExMmEzYjQ1NTk1YmZiYWUxOTUxYWRiMDBkYmE2YWE5NGJhOGIuLjhkMTg2YWY0ZThiODY5
NzBkOTVjNzRlZGU5MTYxZjg5ZDlkMzg2NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwCkBAIC0zMCw2ICszMCw3IEBA
CiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0cy5oIgorI2luY2x1ZGUgIlVubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0yMjAsNyArMjIxLDcg
QEAgYXV0byBCeXRlY29kZUJhc2ljQmxvY2s6OmNvbXB1dGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJgogICAgIHJldHVybiBjb21wdXRlSW1wbChjb2RlQmxv
Y2ssIGluc3RydWN0aW9ucyk7CiB9CiAKLWF1dG8gQnl0ZWNvZGVCYXNpY0Jsb2NrOjpjb21wdXRl
KFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMpIC0+IEJhc2ljQmxvY2tWZWN0b3IKK2F1dG8gQnl0ZWNvZGVCYXNpY0Jsb2Nr
Ojpjb21wdXRlKFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMpIC0+IEJhc2ljQmxvY2tWZWN0b3IKIHsKICAg
ICByZXR1cm4gY29tcHV0ZUltcGwoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCmlu
ZGV4IDEyMWNlODlhOWQzY2U0ZDI4YmUxMmQ5NzBkYmVlOTI0MTcwNzg4N2YuLmQ0ZjUzM2JjOGJh
MGFjNTY4YmE4NjgxNzMzODdkMDM1NDdhYmQzOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgKQEAgLTM2LDYgKzM2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBCeXRlY29kZUdyYXBoOwogY2xhc3MgQ29kZUJsb2NrOwog
Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
cjsKIHN0cnVjdCBJbnN0cnVjdGlvbjsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lE
RU5USUZJRVIoQnl0ZWNvZGVCYXNpY0Jsb2NrKTsKQEAgLTcyLDcgKzczLDcgQEAgY2xhc3MgQnl0
ZWNvZGVCYXNpY0Jsb2NrIHsKIHByaXZhdGU6CiAgICAgLy8gT25seSBjYWxsZWQgZnJvbSBCeXRl
Y29kZUdyYXBoLgogICAgIHN0YXRpYyBCYXNpY0Jsb2NrVmVjdG9yIGNvbXB1dGUoQ29kZUJsb2Nr
KiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucyk7Ci0gICAgc3RhdGljIEJh
c2ljQmxvY2tWZWN0b3IgY29tcHV0ZShVbmxpbmtlZENvZGVCbG9jayosIGNvbnN0IEluc3RydWN0
aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMpOworICAgIHN0YXRpYyBCYXNpY0Jsb2NrVmVjdG9yIGNv
bXB1dGUoVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYgaW5zdHJ1Y3Rpb25zKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaz4gc3RhdGljIEJh
c2ljQmxvY2tWZWN0b3IgY29tcHV0ZUltcGwoQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucyk7CiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcApp
bmRleCA4MzY1MTE1ZjQyMTc5MWE1YzY2NDgzYTVhNzkwNWNhZTVjMGVlM2UxLi5kMzcyMzZmNDBh
YTg5OTEyN2M3NDllYmRiOTg2OTZjNzc4NWQ4Y2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKQEAgLTQwLDcgKzQwLDcgQEAKICNp
bmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiVG9UaGlzU3RhdHVzLmgiCi0jaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIK
KyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIlVubGlu
a2VkTWV0YWRhdGFUYWJsZUlubGluZXMuaCIKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25Db2RlQmxv
Y2suaCIKICNpbmNsdWRlICJXYXNtR2VuZXJhdG9yVHJhaXRzLmgiCkBAIC0yNzAsNyArMjcwLDcg
QEAgdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBCbG9jayhCbG9jayog
YmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3QKIH0KIAogdGVtcGxhdGUgY2xhc3MgQnl0ZWNvZGVE
dW1wZXI8Q29kZUJsb2NrPjsKLXRlbXBsYXRlIGNsYXNzIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVy
PFVubGlua2VkQ29kZUJsb2NrPjsKK3RlbXBsYXRlIGNsYXNzIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yPjsKIHRlbXBsYXRlIGNsYXNzIENvZGVCbG9j
a0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz47CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
R2VuZXJhdG9yaWZpY2F0aW9uLmNwcAppbmRleCBiMGI1NzBlOTAyMDk2YzI5MjUxZmI2ZmE0NDdj
MWFlMmJmZDVlODI2Li44MTc4NTFjYmE0ZDhmMjRkNTIxMWQxYTQ5ZmM1NDJjNTRlOTcxMGY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJK
U0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkxhYmVsLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5l
cy5oIgotI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxp
bmVzLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKQEAgLTY0LDcgKzY0LDcgQEAgY2xh
c3MgQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24gewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9pbml0aWFsVmFsdWU7CiAgICAgfTsKIAotICAgIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9u
KEJ5dGVjb2RlR2VuZXJhdG9yJiBieXRlY29kZUdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImIGluc3RydWN0aW9ucywgU3ltYm9s
VGFibGUqIGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUsIGludCBnZW5lcmF0b3JGcmFtZVN5bWJv
bFRhYmxlSW5kZXgpCisgICAgQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24oQnl0ZWNvZGVHZW5l
cmF0b3ImIGJ5dGVjb2RlR2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29k
ZUJsb2NrLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYgaW5zdHJ1Y3Rpb25zLCBTeW1ib2xUYWJs
ZSogZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZSwgaW50IGdlbmVyYXRvckZyYW1lU3ltYm9sVGFi
bGVJbmRleCkKICAgICAgICAgOiBtX2J5dGVjb2RlR2VuZXJhdG9yKGJ5dGVjb2RlR2VuZXJhdG9y
KQogICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAgICAgLCBtX2luc3RydWN0
aW9ucyhpbnN0cnVjdGlvbnMpCkBAIC0xNzQsNyArMTc0LDcgQEAgY2xhc3MgQnl0ZWNvZGVHZW5l
cmF0b3JpZmljYXRpb24gewogICAgIEJ5dGVjb2RlR2VuZXJhdG9yJiBtX2J5dGVjb2RlR2VuZXJh
dG9yOwogICAgIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbV9lbnRlclBvaW50OwogICAgIE9w
dGlvbmFsPEdlbmVyYXRvckZyYW1lRGF0YT4gbV9nZW5lcmF0b3JGcmFtZURhdGE7Ci0gICAgVW5s
aW5rZWRDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIFVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yKiBtX2NvZGVCbG9jazsKICAgICBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYgbV9pbnN0cnVj
dGlvbnM7CiAgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwogICAgIFZlY3RvcjxPcHRpb25hbDxT
dG9yYWdlPj4gbV9zdG9yYWdlczsKQEAgLTE5MCw3ICsxOTAsNyBAQCBjbGFzcyBHZW5lcmF0b3JM
aXZlbmVzc0FuYWx5c2lzIDogcHVibGljIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbiB7CiAg
ICAgewogICAgIH0KIAotICAgIHZvaWQgcnVuKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEluc3RydWN0aW9uU3RyZWFtV3JpdGVyJiBpbnN0cnVjdGlvbnMpCisgICAgdm9pZCBydW4oVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0
ZXImIGluc3RydWN0aW9ucykKICAgICB7CiAgICAgICAgIC8vIFBlcmZvcm0gbW9kaWZpZWQgbGl2
ZW5lc3MgYW5hbHlzaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGxvY2FscyBhcmUgbGl2ZSBhdCB0aGUg
bWVyZ2UgcG9pbnRzLgogICAgICAgICAvLyBUaGlzIHByb2R1Y2VzIHRoZSBjb25zZXJ2YXRpdmUg
cmVzdWx0cyBmb3IgdGhlIHF1ZXN0aW9uLCAid2hpY2ggdmFyaWFibGVzIHNob3VsZCBiZSBzYXZl
ZCBhbmQgcmVzdW1lZD8iLgpAQCAtMjk1LDEwICsyOTUsMTAgQEAgdm9pZCBCeXRlY29kZUdlbmVy
YXRvcmlmaWNhdGlvbjo6cnVuKCkKICAgICByZXdyaXRlci5leGVjdXRlKCk7CiB9CiAKLXZvaWQg
cGVyZm9ybUdlbmVyYXRvcmlmaWNhdGlvbihCeXRlY29kZUdlbmVyYXRvciYgYnl0ZWNvZGVHZW5l
cmF0b3IsIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtV3Jp
dGVyJiBpbnN0cnVjdGlvbnMsIFN5bWJvbFRhYmxlKiBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxl
LCBpbnQgZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUluZGV4KQordm9pZCBwZXJmb3JtR2VuZXJh
dG9yaWZpY2F0aW9uKEJ5dGVjb2RlR2VuZXJhdG9yJiBieXRlY29kZUdlbmVyYXRvciwgVW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXIm
IGluc3RydWN0aW9ucywgU3ltYm9sVGFibGUqIGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUsIGlu
dCBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlSW5kZXgpCiB7CiAgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OmR1bXBCeXRlY29kZXNCZWZvcmVHZW5lcmF0b3JpZmljYXRpb24oKSkpCi0gICAgICAg
IENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPFVubGlua2VkQ29kZUJsb2NrPjo6ZHVtcEJsb2NrKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBDb2RlQmxv
Y2tCeXRlY29kZUR1bXBlcjxVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcj46OmR1bXBCbG9jayhj
b2RlQmxvY2ssIGluc3RydWN0aW9ucywgV1RGOjpkYXRhRmlsZSgpKTsKIAogICAgIEJ5dGVjb2Rl
R2VuZXJhdG9yaWZpY2F0aW9uIHBhc3MoYnl0ZWNvZGVHZW5lcmF0b3IsIGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25zLCBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLCBnZW5lcmF0b3JGcmFtZVN5bWJv
bFRhYmxlSW5kZXgpOwogICAgIHBhc3MucnVuKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oCmluZGV4
IDAxZjA5NmUwNDFiZmRiMjVmNmZhZTVkZGMwNjE0ZWY3YTZmMDYzMDYuLjgzMDFkNDA1N2EzM2Qy
MWJhMzhjMzhjOWM5MjBmNTQ5MzRkYmJiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oCkBAIC0z
MSw5ICszMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQnl0ZWNvZGVHZW5lcmF0b3I7CiBj
bGFzcyBJbnN0cnVjdGlvblN0cmVhbVdyaXRlcjsKIGNsYXNzIFN5bWJvbFRhYmxlOwotY2xhc3Mg
VW5saW5rZWRDb2RlQmxvY2s7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNs
YXNzIFN5bWJvbFRhYmxlOwogCi12b2lkIHBlcmZvcm1HZW5lcmF0b3JpZmljYXRpb24oQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBVbmxpbmtlZENvZGVCbG9jayosIEluc3RydWN0aW9uU3RyZWFtV3JpdGVy
JiwgU3ltYm9sVGFibGUqIGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUsIGludCBnZW5lcmF0b3JG
cmFtZVN5bWJvbFRhYmxlSW5kZXgpOwordm9pZCBwZXJmb3JtR2VuZXJhdG9yaWZpY2F0aW9uKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCBJbnN0cnVjdGlv
blN0cmVhbVdyaXRlciYsIFN5bWJvbFRhYmxlKiBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLCBp
bnQgZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUluZGV4KTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVSZXdy
aXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIu
aAppbmRleCBlMjYxNjU0YjI0ZDM5OTEzM2M5ZjkxMTczZGFiNzM0OTkxYjQwNmEzLi44OTBhYjIz
YzAwMGRhZGJhYWQ4ZGI0YzYzZWVlMjVhZTU1YjhkYjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVJld3JpdGVyLmgKQEAgLTE3Myw3ICsxNzMsNyBA
QCBXVEZfTUFLRV9OT05DT1BZQUJMRShCeXRlY29kZVJld3JpdGVyKTsKICAgICAgICAgSW5jbHVk
ZUJyYW5jaCYgbV9pbmNsdWRlQnJhbmNoOwogICAgIH07CiAKLSAgICBCeXRlY29kZVJld3JpdGVy
KEJ5dGVjb2RlR2VuZXJhdG9yJiBieXRlY29kZUdlbmVyYXRvciwgQnl0ZWNvZGVHcmFwaCYgZ3Jh
cGgsIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtV3JpdGVy
JiB3cml0ZXIpCisgICAgQnl0ZWNvZGVSZXdyaXRlcihCeXRlY29kZUdlbmVyYXRvciYgYnl0ZWNv
ZGVHZW5lcmF0b3IsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvciogY29kZUJsb2NrLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYgd3JpdGVyKQogICAgICAg
ICA6IG1fYnl0ZWNvZGVHZW5lcmF0b3IoYnl0ZWNvZGVHZW5lcmF0b3IpCiAgICAgICAgICwgbV9n
cmFwaChncmFwaCkKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCkBAIC0yMjcsNyAr
MjI3LDcgQEAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVSZXdyaXRlcik7CiBwcml2YXRl
OgogICAgIHZvaWQgaW5zZXJ0SW1wbChJbnNlcnRpb25Qb2ludCwgSW5jbHVkZUJyYW5jaCwgSW5z
dHJ1Y3Rpb25TdHJlYW1Xcml0ZXImJiBmcmFnbWVudCk7CiAKLSAgICBmcmllbmQgY2xhc3MgVW5s
aW5rZWRDb2RlQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yOwogICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oKTsKICAgICB2b2lkIGFkanVzdEp1bXBU
YXJnZXRzSW5GcmFnbWVudCh1bnNpZ25lZCBmaW5hbE9mZnNldCwgSW5zZXJ0aW9uJik7CiAKQEAg
LTIzNiw3ICsyMzYsNyBAQCBXVEZfTUFLRV9OT05DT1BZQUJMRShCeXRlY29kZVJld3JpdGVyKTsK
IAogICAgIEJ5dGVjb2RlR2VuZXJhdG9yJiBtX2J5dGVjb2RlR2VuZXJhdG9yOwogICAgIEJ5dGVj
b2RlR3JhcGgmIG1fZ3JhcGg7Ci0gICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwor
ICAgIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBtX2NvZGVCbG9jazsKICAgICBJbnN0cnVj
dGlvblN0cmVhbVdyaXRlciYgbV93cml0ZXI7CiAgICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9p
bnNlcnRpb25zOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKaW5kZXggOTY3NTkxZGEzZjUyNDI0NzEzY2I4YjM3ODY1MDNiNGJmM2M4MDFjMi4uNWY1
MWU3YTE0ODI4NDJkY2E0Nzk2NTljMTY1ODBkYzg2OTMwNzIzNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTg2Niw3ICs4NjYsNyBAQCBDb2Rl
QmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgQ29k
ZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBW
ZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpCit2b2lkIENvZGVC
bG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiB2bSwgY29uc3QgUmVm
Q291bnRlZEFycmF5PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRzKQogewog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CkBAIC04ODgsNyArODg4
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhW
TSYgdm0sIGNvbnN0IFZlY3RvcjxDb25zdGFudEkKICAgICB9CiB9CiAKLXZvaWQgQ29kZUJsb2Nr
OjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+
PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3JpcHRFeGVjdXRhYmxlKiB0b3BMZXZl
bEV4ZWN1dGFibGUpCit2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3Qg
UmVmQ291bnRlZEFycmF5PFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3Qg
UmVmQ291bnRlZEFycmF5PFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbiwgU2NyaXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxl
KQogewogICAgIFZNJiB2bSA9ICptX3ZtOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTg5OSwxMCArODk5LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRDb25z
dGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3Rh
CiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAg
ICAgIG1fY29uc3RhbnRSZWdpc3RlcnMucmVzaXplVG9GaXQoY291bnQpOworICAgICAgICBtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5yZXNpemVUb0ZpdChjb3VudCk7CiAgICAg
fQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICBKU1Zh
bHVlIGNvbnN0YW50ID0gY29uc3RhbnRzW2ldLmdldCgpOwotICAgICAgICBzd2l0Y2ggKGNvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpXSkgeworICAgICAgICBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24gPSBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb25baV07CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW2ld
ID0gcmVwcmVzZW50YXRpb247CisgICAgICAgIHN3aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAg
ICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAg
ICAgICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9iamVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0
aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25zdGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC05MzQsOCArOTM3LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnNl
dENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBj
b25zdGEKICAgICAgICAgfQogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCh2bSwg
dGhpcywgY29uc3RhbnQpOwogICAgIH0KLQotICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uID0gY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwogfQogCiB2b2lk
IENvZGVCbG9jazo6c2V0QWx0ZXJuYXRpdmUoVk0mIHZtLCBDb2RlQmxvY2sqIGFsdGVybmF0aXZl
KQpAQCAtMTgwOCw3ICsxODA5LDcgQEAgSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZv
ckluZGV4KHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWQKIHsKICAgICBp
ZiAoIW1fcmFyZURhdGEpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBIYW5kbGVySW5m
bzo6aGFuZGxlckZvckluZGV4KG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4
LCByZXF1aXJlZEhhbmRsZXIpOworICAgIHJldHVybiBIYW5kbGVySW5mbzo6aGFuZGxlckZvcklu
ZGV4PEhhbmRsZXJJbmZvPihtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLCBpbmRleCwg
cmVxdWlyZWRIYW5kbGVyKTsKIH0KIAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29kZUJsb2Nr
OjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5h
bENhbGxTaXRlKQpAQCAtMzE5NSw3ICszMTk2LDcgQEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJh
c2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcigpCiB7CiAgICAgaWYgKCF1
bmxpbmtlZENvZGVCbG9jaygpLT5oYXNPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0
cygpKQogICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQ+JiBieXRlY29kZU9mZnNldHMgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5vcFByb2Zp
bGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cygpOworICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJh
eTxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiYgYnl0ZWNvZGVPZmZzZXRzID0gdW5saW5rZWRD
b2RlQmxvY2soKS0+b3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMCwgb2Zmc2V0c0xlbmd0aCA9IGJ5dGVjb2RlT2Zmc2V0cy5zaXplKCk7
IGkgPCBvZmZzZXRzTGVuZ3RoOyBpKyspIHsKICAgICAgICAgLy8gQmVjYXVzZSBvcF9wcm9maWxl
X2NvbnRyb2xfZmxvdyBpcyBlbWl0dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgYmFzaWMg
YmxvY2ssIGZpbmRpbmcgCiAgICAgICAgIC8vIHRoZSBuZXh0IG9wX3Byb2ZpbGVfY29udHJvbF9m
bG93IHdpbGwgZ2l2ZSB1cyB0aGUgdGV4dCByYW5nZSBvZiBhIHNpbmdsZSBiYXNpYyBibG9jay4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCBhOGI4NzU3
NmMwNTY5NWI4MDBmOGMzZDFlYzI1MzI4ZDBhZTg4Yjg5Li4yOGE4ZTdmYzcxOGE5ZjQyMjQ5MWNk
MWM1NGNlOGYzMTdmYThkYjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCkBAIC05NDksOSArOTQ5LDkgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpT
Q2VsbCB7CiAKICAgICB2b2lkIHVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5kQ291
bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVz
LCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7CiAKLSAgICB2b2lkIHNldENv
bnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYsIGNvbnN0IFZlY3RvcjxDb25zdGFudElk
ZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cyk7CisgICAgdm9pZCBzZXRDb25zdGFudElkZW50
aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8Q29uc3RhbnRJZGVu
dGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOwogCi0gICAgdm9pZCBzZXRDb25zdGFudFJlZ2lz
dGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25z
dCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uLCBTY3JpcHRFeGVjdXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOworICAg
IHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgUmVmQ291bnRlZEFycmF5PFdyaXRlQmFy
cmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgUmVmQ291bnRlZEFycmF5PFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiwgU2Ny
aXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlKTsKIAogICAgIHZvaWQgcmVwbGFjZUNv
bnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcsIEpTVmFsdWUgdmFsdWUpCiAgICAgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAppbmRleCA3ZjQ2NWQyYWU5
Mzc5OWI5MWRmNzg3MTQxOTRmY2EzNGJkMmExYTEyLi4wMWRkY2Y5Njk5YjQ4MDI5YTFiZDhiZWU0
MDM0OTA0NzlhMWY5ZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSGFuZGxlckluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFu
ZGxlckluZm8uaApAQCAtNjUsMTAgKzY1LDEwIEBAIHN0cnVjdCBIYW5kbGVySW5mb0Jhc2Ugewog
CiAgICAgYm9vbCBpc0NhdGNoSGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBIYW5k
bGVyVHlwZTo6Q2F0Y2g7IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhbmRsZXI+Ci0gICAg
c3RhdGljIEhhbmRsZXIqIGhhbmRsZXJGb3JJbmRleChWZWN0b3I8SGFuZGxlcj4mIGV4ZXB0aW9u
SGFuZGxlcnMsIHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5kbGVy
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhbmRsZXIsIHR5cGVuYW1lIENvbnRhaW5lcj4KKyAg
ICBzdGF0aWMgSGFuZGxlciogaGFuZGxlckZvckluZGV4KENvbnRhaW5lciYgZXhlcHRpb25IYW5k
bGVycywgdW5zaWduZWQgaW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCiAg
ICAgewotICAgICAgICBmb3IgKEhhbmRsZXImIGhhbmRsZXIgOiBleGVwdGlvbkhhbmRsZXJzKSB7
CisgICAgICAgIGZvciAoYXV0byYgaGFuZGxlciA6IGV4ZXB0aW9uSGFuZGxlcnMpIHsKICAgICAg
ICAgICAgIGlmICgocmVxdWlyZWRIYW5kbGVyID09IFJlcXVpcmVkSGFuZGxlcjo6Q2F0Y2hIYW5k
bGVyKSAmJiAhaGFuZGxlci5pc0NhdGNoSGFuZGxlcigpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lz
ZUp1bXBUYXJnZXRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNl
SnVtcFRhcmdldHMuY3BwCmluZGV4IDFlNzEyMmM3NTAwMzMzM2E3MzNiMWFmNTg4NmFlYTE1ODJm
MTA5NDcuLmU3MGFlYzEyN2M1NmRhNThiYzJkOTIxOTI4NzViOTE5N2E1YmRkZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMu
Y3BwCkBAIC05OSwxMiArOTksMTIgQEAgdm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKENv
ZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW4KICAgICBjb21w
dXRlUHJlY2lzZUp1bXBUYXJnZXRzSW50ZXJuYWw8Q29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0c01v
ZGU6OkZvbGxvd0NvZGVCbG9ja0NsYWltPihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsK
IH0KIAotdm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKFVubGlua2VkQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIFZlY3RvcjxJ
bnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCAzMj4mIG91dCkKK3ZvaWQgY29tcHV0ZVByZWNpc2VK
dW1wVGFyZ2V0cyhVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldCwgMzI+JiBvdXQpCiB7CiAgICAgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0c0ludGVy
bmFsPENvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHNNb2RlOjpGb2xsb3dDb2RlQmxvY2tDbGFpbT4o
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG91dCk7CiB9CiAKLXZvaWQgcmVjb21wdXRlUHJlY2lz
ZUp1bXBUYXJnZXRzKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0
aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0
PiYgb3V0KQordm9pZCByZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoVW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+JiBvdXQpCiB7CiAgICAgY29t
cHV0ZVByZWNpc2VKdW1wVGFyZ2V0c0ludGVybmFsPENvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHNN
b2RlOjpGb3JjZUNvbXB1dGU+KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBvdXQpOwogfQpAQCAt
MTE0LDcgKzExNCw3IEBAIHZvaWQgZmluZEp1bXBUYXJnZXRzRm9ySW5zdHJ1Y3Rpb24oQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtCiAgICAgZ2V0SnVtcFRhcmdl
dHNGb3JJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvdXQpOwogfQogCi12b2lk
IGZpbmRKdW1wVGFyZ2V0c0Zvckluc3RydWN0aW9uKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGluc3RydWN0aW9uLCBWZWN0b3I8SW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgMT4mIG91dCkKK3ZvaWQgZmluZEp1bXBUYXJnZXRzRm9y
SW5zdHJ1Y3Rpb24oVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaW5zdHJ1Y3Rpb24sIFZlY3RvcjxJbnN0cnVjdGlvblN0
cmVhbTo6T2Zmc2V0LCAxPiYgb3V0KQogewogICAgIGdldEp1bXBUYXJnZXRzRm9ySW5zdHJ1Y3Rp
b24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3V0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuaAppbmRleCBkOTM0ZjlhNDk1
YjljYzk2NmQ1MjYwN2ZhZjRmMDliNjk1MmE0MDdlLi5mMTc1ZTJjY2E3ZGExMjhlYTQ1YjJiMTM3
YTNiOWI4MDY2NTE2MmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5oCkBAIC0zNCwxMSArMzQsMTEgQEAgY2xhc3MgVW5saW5r
ZWRDb2RlQmxvY2s7CiAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiBieXRlY29kZSBpbmRleCB0
aGF0IGFyZSB0aGUgZGVzdGluYXRpb24gb2YgYSBqdW1wLgogdm9pZCBjb21wdXRlUHJlY2lzZUp1
bXBUYXJnZXRzKENvZGVCbG9jayosIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCAz
Mj4mIG91dCk7CiB2b2lkIGNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoQ29kZUJsb2NrKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgVmVjdG9yPEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQsIDMyPiYgb3V0KTsKLXZvaWQgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyhV
bmxpbmtlZENvZGVCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgVmVjdG9yPEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQsIDMyPiYgb3V0KTsKK3ZvaWQgY29tcHV0ZVByZWNpc2VKdW1w
VGFyZ2V0cyhVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciosIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiwgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIDMyPiYgb3V0KTsKIAotdm9p
ZCByZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoVW5saW5rZWRDb2RlQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiYgb3V0
KTsKK3ZvaWQgcmVjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKFVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldD4mIG91dCk7CiAKIHZvaWQgZmluZEp1bXBUYXJnZXRzRm9ySW5zdHJ1Y3Rpb24o
Q29kZUJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYsIFZlY3RvcjxJbnN0cnVj
dGlvblN0cmVhbTo6T2Zmc2V0LCAxPiYgb3V0KTsKLXZvaWQgZmluZEp1bXBUYXJnZXRzRm9ySW5z
dHJ1Y3Rpb24oVW5saW5rZWRDb2RlQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVm
JiwgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIDE+JiBvdXQpOwordm9pZCBmaW5k
SnVtcFRhcmdldHNGb3JJbnN0cnVjdGlvbihVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciosIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmLCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCwgMT4mIG91dCk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXggZGRiNDEy
MTE5MWZhZjdiNDIxNTMxZThlMmUwNTIwMjVhNjEyN2UzOS4uNTM2Nzg3ZWEwMGE1NzNiZTkxOGVk
YTU2MWVhNzMyNzU2ZjcwNjUyNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC04MSw3ICs4MSw3IEBAIFVubGlua2Vk
Q29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBDb2RlVHlwZSBjb2RlCiAgICAgQVNTRVJUKG1fY29kZVR5cGUgPT0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNvZGVUeXBlKSk7CiAgICAgQVNTRVJUKG1fZGlkT3B0aW1pemUgPT0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKTsKICAgICBpZiAoaW5mby5uZWVkc0NsYXNzRmll
bGRJbml0aWFsaXplcigpID09IE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyOjpZZXMpIHsKLSAg
ICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICBjcmVhdGVSYXJlRGF0
YUlmTmVjZXNzYXJ5KGxvY2tEdXJpbmdNYXJraW5nKHZtLmhlYXAsIGNlbGxMb2NrKCkpKTsKICAg
ICAgICAgbV9yYXJlRGF0YS0+bV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcjo6WWVzKTsKICAgICB9CiB9
CkBAIC05NCwxMCArOTQsMTAgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sodGhpc09iamVjdC0+Y2VsbExvY2soKSk7CiAgICAgaWYgKHZpc2l0b3IuaXNGaXJz
dFZpc2l0KCkpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fYWdlID0gc3RkOjptaW48dW5zaWduZWQ+
KHN0YXRpY19jYXN0PHVuc2lnbmVkPih0aGlzT2JqZWN0LT5tX2FnZSkgKyAxLCBtYXhBZ2UpOwot
ICAgIGZvciAoRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2Jq
ZWN0LT5tX2Z1bmN0aW9uRGVjbHMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlv
bkRlY2xzLmVuZCgpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQo
KnB0cik7Ci0gICAgZm9yIChGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9
IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5t
X2Z1bmN0aW9uRXhwcnMuZW5kKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9y
LmFwcGVuZCgqcHRyKTsKKyAgICBmb3IgKGF1dG8mIGJhcnJpZXIgOiB0aGlzT2JqZWN0LT5tX2Z1
bmN0aW9uRGVjbHMpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKGJhcnJpZXIpOworICAgIGZvciAo
YXV0byYgYmFycmllciA6IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycykKKyAgICAgICAgdmlz
aXRvci5hcHBlbmQoYmFycmllcik7CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVj
dC0+bV9jb25zdGFudFJlZ2lzdGVycy5kYXRhKCksIHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdp
c3RlcnMuc2l6ZSgpKTsKICAgICBzaXplX3QgZXh0cmFNZW1vcnkgPSB0aGlzT2JqZWN0LT5tX21l
dGFkYXRhLT5zaXplSW5CeXRlcygpOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX2luc3RydWN0aW9u
cykKQEAgLTE2Nyw3ICsxNjcsNyBAQCBzdGF0aWMgdm9pZCBkdW1wTGluZUNvbHVtbkVudHJ5KHNp
emVfdCBpbmRleCwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aQogCiB2b2lkIFVu
bGlua2VkQ29kZUJsb2NrOjpkdW1wRXhwcmVzc2lvblJhbmdlSW5mbygpCiB7Ci0gICAgVmVjdG9y
PEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbyA9IG1fZXhwcmVzc2lvbkluZm87
CisgICAgUmVmQ291bnRlZEFycmF5PEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5m
byA9IG1fZXhwcmVzc2lvbkluZm87CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1fZXhwcmVzc2lvbklu
Zm8uc2l6ZSgpOwogICAgIGRhdGFMb2dGKCJVbmxpbmtlZENvZGVCbG9jayAlcCBleHByZXNzaW9u
UmFuZ2VJbmZvWyV6dV0ge1xuIiwgdGhpcywgc2l6ZSk7CkBAIC0xOTYsNyArMTk2LDcgQEAgdm9p
ZCBVbmxpbmtlZENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVJbmRleChCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0
IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8gPSBtX2V4cHJlc3Np
b25JbmZvOworICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZvPiYg
ZXhwcmVzc2lvbkluZm8gPSBtX2V4cHJlc3Npb25JbmZvOwogCiAgICAgaW50IGxvdyA9IDA7CiAg
ICAgaW50IGhpZ2ggPSBleHByZXNzaW9uSW5mby5zaXplKCk7CkBAIC0yMTgsNjAgKzIxOCw2IEBA
IHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgo
Qnl0ZWNvZGVJbmRleCBieXRlY29kZUluCiAgICAgZ2V0TGluZUFuZENvbHVtbihpbmZvLCBsaW5l
LCBjb2x1bW4pOwogfQogCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjphZGRFeHByZXNzaW9uSW5m
byh1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwKLSAgICBpbnQgZGl2b3QsIGludCBzdGFydE9m
ZnNldCwgaW50IGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQotewot
ICAgIGlmIChkaXZvdCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heERpdm90KSB7Ci0gICAgICAg
IC8vIE92ZXJmbG93IGhhcyBvY2N1cnJlZCwgd2UgY2FuIG9ubHkgZ2l2ZSBsaW5lIG51bWJlciBp
bmZvIGZvciBlcnJvcnMgZm9yIHRoaXMgcmVnaW9uCi0gICAgICAgIGRpdm90ID0gMDsKLSAgICAg
ICAgc3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBlbmRPZmZzZXQgPSAwOwotICAgIH0gZWxzZSBp
ZiAoc3RhcnRPZmZzZXQgPiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhPZmZzZXQpIHsKLSAgICAg
ICAgLy8gSWYgdGhlIHN0YXJ0IG9mZnNldCBpcyBvdXQgb2YgYm91bmRzIHdlIGNsZWFyIGJvdGgg
b2Zmc2V0cwotICAgICAgICAvLyBzbyB3ZSBvbmx5IGdldCB0aGUgZGl2b3QgbWFya2VyLiBFcnJv
ciBtZXNzYWdlIHdpbGwgaGF2ZSB0byBiZSByZWR1Y2VkCi0gICAgICAgIC8vIHRvIGxpbmUgYW5k
IGNoYXJQb3NpdGlvbiBudW1iZXIuCi0gICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAg
ZW5kT2Zmc2V0ID0gMDsKLSAgICB9IGVsc2UgaWYgKGVuZE9mZnNldCA+IEV4cHJlc3Npb25SYW5n
ZUluZm86Ok1heE9mZnNldCkgewotICAgICAgICAvLyBUaGUgZW5kIG9mZnNldCBpcyBvbmx5IHVz
ZWQgZm9yIGFkZGl0aW9uYWwgY29udGV4dCwgYW5kIGlzIG11Y2ggbW9yZSBsaWtlbHkKLSAgICAg
ICAgLy8gdG8gb3ZlcmZsb3cgKGVnLiBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cykgc28gd2UgYXJl
IHdpbGxpbmcgdG8gZHJvcCBpdCB3aXRob3V0Ci0gICAgICAgIC8vIGRyb3BwaW5nIHRoZSByZXN0
IG9mIHRoZSByYW5nZS4KLSAgICAgICAgZW5kT2Zmc2V0ID0gMDsKLSAgICB9Ci0KLSAgICB1bnNp
Z25lZCBwb3NpdGlvbk1vZGUgPQotICAgICAgICAobGluZSA8PSBFeHByZXNzaW9uUmFuZ2VJbmZv
OjpNYXhGYXRMaW5lTW9kZUxpbmUgJiYgY29sdW1uIDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1h
eEZhdExpbmVNb2RlQ29sdW1uKSAKLSAgICAgICAgPyBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRM
aW5lTW9kZQotICAgICAgICA6IChsaW5lIDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdENv
bHVtbk1vZGVMaW5lICYmIGNvbHVtbiA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRDb2x1
bW5Nb2RlQ29sdW1uKQotICAgICAgICA/IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdENvbHVtbk1v
ZGUKLSAgICAgICAgOiBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTsK
LQotICAgIEV4cHJlc3Npb25SYW5nZUluZm8gaW5mbzsKLSAgICBpbmZvLmluc3RydWN0aW9uT2Zm
c2V0ID0gaW5zdHJ1Y3Rpb25PZmZzZXQ7Ci0gICAgaW5mby5kaXZvdFBvaW50ID0gZGl2b3Q7Ci0g
ICAgaW5mby5zdGFydE9mZnNldCA9IHN0YXJ0T2Zmc2V0OwotICAgIGluZm8uZW5kT2Zmc2V0ID0g
ZW5kT2Zmc2V0OwotCi0gICAgaW5mby5tb2RlID0gcG9zaXRpb25Nb2RlOwotICAgIHN3aXRjaCAo
cG9zaXRpb25Nb2RlKSB7Ci0gICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9k
ZToKLSAgICAgICAgaW5mby5lbmNvZGVGYXRMaW5lTW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdENvbHVtbk1vZGU6Ci0g
ICAgICAgIGluZm8uZW5jb2RlRmF0Q29sdW1uTW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVBbmRDb2x1bW5Nb2Rl
OiB7Ci0gICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgdW5zaWdu
ZWQgZmF0SW5kZXggPSBtX3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLnNp
emUoKTsKLSAgICAgICAgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24gZmF0UG9zID0g
eyBsaW5lLCBjb2x1bW4gfTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0Zh
dFBvc2l0aW9ucy5hcHBlbmQoZmF0UG9zKTsKLSAgICAgICAgaW5mby5wb3NpdGlvbiA9IGZhdElu
ZGV4OwotICAgIH0KLSAgICB9IC8vIHN3aXRjaAotCi0gICAgbV9leHByZXNzaW9uSW5mby5hcHBl
bmQoaW5mbyk7Ci19Ci0KIGJvb2wgVW5saW5rZWRDb2RlQmxvY2s6OnR5cGVQcm9maWxlckV4cHJl
c3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2ln
bmVkJiBzdGFydERpdm90LCB1bnNpZ25lZCYgZW5kRGl2b3QpCiB7CiAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKQEAgLTI5OCwzMCArMjQ0LDEwIEBAIGJvb2wgVW5s
aW5rZWRDb2RlQmxvY2s6OnR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZz
ZXQodW5zaWduZWQgYnl0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVW5saW5rZWRDb2Rl
QmxvY2s6OmFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9u
T2Zmc2V0LCB1bnNpZ25lZCBzdGFydERpdm90LCB1bnNpZ25lZCBlbmREaXZvdCkKLXsKLSAgICBj
cmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgUmFyZURhdGE6OlR5cGVQcm9maWxlckV4
cHJlc3Npb25SYW5nZSByYW5nZTsKLSAgICByYW5nZS5tX3N0YXJ0RGl2b3QgPSBzdGFydERpdm90
OwotICAgIHJhbmdlLm1fZW5kRGl2b3QgPSBlbmREaXZvdDsKLSAgICBtX3JhcmVEYXRhLT5tX3R5
cGVQcm9maWxlckluZm9NYXAuc2V0KGluc3RydWN0aW9uT2Zmc2V0LCByYW5nZSk7Ci19Ci0KIFVu
bGlua2VkQ29kZUJsb2NrOjp+VW5saW5rZWRDb2RlQmxvY2soKQogewogfQogCi12b2lkIFVubGlu
a2VkQ29kZUJsb2NrOjpzZXRJbnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9u
U3RyZWFtPiBpbnN0cnVjdGlvbnMpCi17Ci0gICAgQVNTRVJUKGluc3RydWN0aW9ucyk7Ci0gICAg
ewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGNlbGxMb2NrKCkpOwotICAgICAgICBt
X2luc3RydWN0aW9ucyA9IFdURk1vdmUoaW5zdHJ1Y3Rpb25zKTsKLSAgICAgICAgbV9tZXRhZGF0
YS0+ZmluYWxpemUoKTsKLSAgICB9Ci0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFN
ZW1vcnlBbGxvY2F0ZWQobV9pbnN0cnVjdGlvbnMtPnNpemVJbkJ5dGVzKCkgKyBtX21ldGFkYXRh
LT5zaXplSW5CeXRlcygpKTsKLX0KLQogY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIFVubGlua2Vk
Q29kZUJsb2NrOjppbnN0cnVjdGlvbnMoKSBjb25zdAogewogICAgIEFTU0VSVChtX2luc3RydWN0
aW9ucy5nZXQoKSk7CkBAIC0zMzcsNjcgKzI2Myw3IEBAIFVubGlua2VkSGFuZGxlckluZm8qIFVu
bGlua2VkQ29kZUJsb2NrOjpoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIFJlcXVpcmVk
CiB7CiAgICAgaWYgKCFtX3JhcmVEYXRhKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gVW5saW5rZWRIYW5kbGVySW5mbzo6aGFuZGxlckZvckluZGV4KG1fcmFyZURhdGEtPm1f
ZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4LCByZXF1aXJlZEhhbmRsZXIpOwotfQotCi12b2lkIFVu
bGlua2VkQ29kZUJsb2NrOjphcHBseU1vZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVyJiByZXdy
aXRlciwgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImIGluc3RydWN0aW9ucykKLXsKLSAgICAvLyBC
ZWZvcmUgYXBwbHlpbmcgdGhlIGNoYW5nZXMsIHdlIGFkanVzdCB0aGUganVtcHMgYmFzZWQgb24g
dGhlIG9yaWdpbmFsIGJ5dGVjb2RlIG9mZnNldCwgdGhlIG9mZnNldCB0byB0aGUganVtcCB0YXJn
ZXQsIGFuZAotICAgIC8vIHRoZSBpbnNlcnRpb24gaW5mb3JtYXRpb24uCi0KLSAgICByZXdyaXRl
ci5hZGp1c3RKdW1wVGFyZ2V0cygpOwotCi0gICAgLy8gVGhlbiwgZXhjZXB0aW9uIGhhbmRsZXJz
IHNob3VsZCBiZSBhZGp1c3RlZC4KLSAgICBpZiAobV9yYXJlRGF0YSkgewotICAgICAgICBmb3Ig
KFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXIgOiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhh
bmRsZXJzKSB7Ci0gICAgICAgICAgICBoYW5kbGVyLnRhcmdldCA9IHJld3JpdGVyLmFkanVzdEFi
c29sdXRlT2Zmc2V0KGhhbmRsZXIudGFyZ2V0KTsKLSAgICAgICAgICAgIGhhbmRsZXIuc3RhcnQg
PSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChoYW5kbGVyLnN0YXJ0KTsKLSAgICAgICAg
ICAgIGhhbmRsZXIuZW5kID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQoaGFuZGxlci5l
bmQpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JhcmVE
YXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zm
c2V0c1tpXSA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KG1fcmFyZURhdGEtPm1fb3BQ
cm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHNbaV0pOwotCi0gICAgICAgIGlmICghbV9y
YXJlRGF0YS0+bV90eXBlUHJvZmlsZXJJbmZvTWFwLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
SGFzaE1hcDx1bnNpZ25lZCwgUmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZT4g
YWRqdXN0ZWRUeXBlUHJvZmlsZXJJbmZvTWFwOwotICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRy
eSA6IG1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcCkKLSAgICAgICAgICAgICAgICBh
ZGp1c3RlZFR5cGVQcm9maWxlckluZm9NYXAuc2V0KHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zm
c2V0KGVudHJ5LmtleSksIGVudHJ5LnZhbHVlKTsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1f
dHlwZVByb2ZpbGVySW5mb01hcC5zd2FwKGFkanVzdGVkVHlwZVByb2ZpbGVySW5mb01hcCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZXhwcmVzc2lv
bkluZm8uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZXhwcmVzc2lvbkluZm9baV0uaW5zdHJ1Y3Rp
b25PZmZzZXQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChtX2V4cHJlc3Npb25JbmZv
W2ldLmluc3RydWN0aW9uT2Zmc2V0KTsKLQotICAgIC8vIFRoZW4sIG1vZGlmeSB0aGUgdW5saW5r
ZWQgaW5zdHJ1Y3Rpb25zLgotICAgIHJld3JpdGVyLmFwcGx5TW9kaWZpY2F0aW9uKCk7Ci0KLSAg
ICAvLyBBbmQgcmVjb21wdXRlIHRoZSBqdW1wIHRhcmdldCBiYXNlZCBvbiB0aGUgbW9kaWZpZWQg
dW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgotICAgIG1fanVtcFRhcmdldHMuY2xlYXIoKTsKLSAgICBy
ZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHModGhpcywgaW5zdHJ1Y3Rpb25zLCBtX2p1bXBUYXJn
ZXRzKTsKLX0KLQotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6c2hyaW5rVG9GaXQoKQotewotICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soY2VsbExvY2soKSk7Ci0gICAgCi0gICAgbV9qdW1wVGFy
Z2V0cy5zaHJpbmtUb0ZpdCgpOwotICAgIG1faWRlbnRpZmllcnMuc2hyaW5rVG9GaXQoKTsKLSAg
ICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNocmlua1RvRml0KCk7Ci0gICAgbV9jb25zdGFudHNTb3Vy
Y2VDb2RlUmVwcmVzZW50YXRpb24uc2hyaW5rVG9GaXQoKTsKLSAgICBtX2Z1bmN0aW9uRGVjbHMu
c2hyaW5rVG9GaXQoKTsKLSAgICBtX2Z1bmN0aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKLSAgICBt
X2V4cHJlc3Npb25JbmZvLnNocmlua1RvRml0KCk7Ci0KLSAgICBpZiAobV9yYXJlRGF0YSkgewot
ICAgICAgICBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNocmlua1RvRml0KCk7Ci0g
ICAgICAgIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwotICAg
ICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsK
LSAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5zaHJpbmtU
b0ZpdCgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNv
ZGVPZmZzZXRzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fYml0VmVjdG9y
cy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50SWRlbnRpZmll
clNldHMuc2hyaW5rVG9GaXQoKTsKLSAgICB9CisgICAgcmV0dXJuIFVubGlua2VkSGFuZGxlcklu
Zm86OmhhbmRsZXJGb3JJbmRleDxVbmxpbmtlZEhhbmRsZXJJbmZvPihtX3JhcmVEYXRhLT5tX2V4
Y2VwdGlvbkhhbmRsZXJzLCBpbmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKIH0KIAogdm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0CkBAIC00MjAsMTIgKzI4Niw2
IEBAIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgVW5saW5rZWRDb2RlQmxvY2s6OmxpdmVuZXNz
QW5hbHlzaXNTbG93KENvZGVCbG9jayogY29kCiAgICAgcmV0dXJuICptX2xpdmVuZXNzOwogfQog
Ci12b2lkIFVubGlua2VkQ29kZUJsb2NrOjphZGRPdXRPZkxpbmVKdW1wVGFyZ2V0KEluc3RydWN0
aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQsIGludCB0YXJnZXQpCi17Ci0gICAgUkVM
RUFTRV9BU1NFUlQodGFyZ2V0KTsKLSAgICBtX291dE9mTGluZUp1bXBUYXJnZXRzLnNldChieXRl
Y29kZU9mZnNldCwgdGFyZ2V0KTsKLX0KLQogaW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxp
bmVKdW1wT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpCiB7
CiAgICAgQVNTRVJUKG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuY29udGFpbnMoYnl0ZWNvZGVPZmZz
ZXQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgKaW5kZXggMzE5MjE3MDlhYzgzMDZiZjRkZTRkOTczOTkyZTE0YTBkMDMwZGFmMC4u
MDE1YTEyYTA4ZDlhYWM3NDg1YjA5ZTBhYzUzMGE2NTY4YTIyZTU2OSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTQzLDYg
KzQzLDcgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJh
eS5oPgogI2luY2x1ZGUgPHd0Zi9UcmlTdGF0ZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgpAQCAtNTksNiArNjAsNyBA
QCBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOwogY2xhc3MgU291cmNlQ29kZTsKIGNsYXNzIFNvdXJj
ZVByb3ZpZGVyOwogY2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CitjbGFzcyBVbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKQEAgLTEz
MywxMyArMTM1LDggQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsK
ICAgICB2b2lkIHNldEhhc1RhaWxDYWxscygpIHsgbV9oYXNUYWlsQ2FsbHMgPSB0cnVlOyB9CiAg
ICAgYm9vbCBhbGxvd0RpcmVjdEV2YWxDYWNoZSgpIGNvbnN0IHsgcmV0dXJuICEobV9mZWF0dXJl
cyAmIE5vRXZhbENhY2hlRmVhdHVyZSk7IH0KIAotICAgIHZvaWQgYWRkRXhwcmVzc2lvbkluZm8o
dW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIGludCBkaXZvdCwKLSAgICAgICAgaW50IHN0YXJ0
T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pOwot
Ci0gICAgdm9pZCBhZGRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVj
dGlvbk9mZnNldCwgdW5zaWduZWQgc3RhcnREaXZvdCwgdW5zaWduZWQgZW5kRGl2b3QpOwotCiAg
ICAgYm9vbCBoYXNFeHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm8uc2l6
ZSgpOyB9Ci0gICAgY29uc3QgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9u
SW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm87IH0KKyAgICBjb25zdCBSZWZDb3VudGVk
QXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9l
eHByZXNzaW9uSW5mbzsgfQogCiAgICAgYm9vbCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQ2hlY2twb2ludHM7IH0KICAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBt
X2hhc0NoZWNrcG9pbnRzID0gdHJ1ZTsgfQpAQCAtMTUwLDY3ICsxNDcsMjYgQEAgY2xhc3MgVW5s
aW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKIAogICAgIC8vIFBhcmFtZXRlciBpbmZv
cm1hdGlvbgogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpIHsgbV9udW1Q
YXJhbWV0ZXJzID0gbmV3VmFsdWU7IH0KLSAgICB2b2lkIGFkZFBhcmFtZXRlcigpIHsgbV9udW1Q
YXJhbWV0ZXJzKys7IH0KICAgICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1QYXJhbWV0ZXJzOyB9CiAKICAgICAvLyBDb25zdGFudCBQb29scwogCiAgICAgc2l6
ZV90IG51bWJlck9mSWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzLnNp
emUoKTsgfQotICAgIHZvaWQgYWRkSWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVyJiBpKSB7IHJl
dHVybiBtX2lkZW50aWZpZXJzLmFwcGVuZChpKTsgfQogICAgIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50aWZpZXIoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzW2luZGV4XTsg
fQotICAgIGNvbnN0IFZlY3RvcjxJZGVudGlmaWVyPiYgaWRlbnRpZmllcnMoKSBjb25zdCB7IHJl
dHVybiBtX2lkZW50aWZpZXJzOyB9CisgICAgY29uc3QgUmVmQ291bnRlZEFycmF5PElkZW50aWZp
ZXI+JiBpZGVudGlmaWVycygpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnM7IH0KIAogICAg
IEJpdFZlY3RvciYgYml0VmVjdG9yKHNpemVfdCBpKSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0
dXJuIG1fcmFyZURhdGEtPm1fYml0VmVjdG9yc1tpXTsgfQotICAgIHVuc2lnbmVkIGFkZEJpdFZl
Y3RvcihCaXRWZWN0b3ImJiBiaXRWZWN0b3IpCi0gICAgewotICAgICAgICBjcmVhdGVSYXJlRGF0
YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fYml0VmVjdG9ycy5hcHBlbmQo
V1RGTW92ZShiaXRWZWN0b3IpKTsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fYml0VmVj
dG9ycy5zaXplKCkgLSAxOwotICAgIH0KLQotICAgIHZvaWQgYWRkU2V0Q29uc3RhbnQoSWRlbnRp
ZmllclNldCYgc2V0KQotICAgIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgp
OwotICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAgICBhdXRvIGxvY2tlciA9IGxv
Y2tEdXJpbmdNYXJraW5nKHZtLmhlYXAsIGNlbGxMb2NrKCkpOwotICAgICAgICB1bnNpZ25lZCBy
ZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKLSAgICAgICAgbV9jb25zdGFudFJl
Z2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwotICAgICAgICBtX2NvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uOjpPdGhlcik7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRJZGVudGlmaWVyU2V0
cy5hcHBlbmQoQ29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnkoc2V0LCByZXN1bHQpKTsKLSAgICB9
Ci0KLSAgICB1bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVlIHYsIFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246Ok90aGVyKQotICAgIHsKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAg
YXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyh2bS5oZWFwLCBjZWxsTG9jaygpKTsKLSAg
ICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7Ci0gICAg
ICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsK
LSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KHZtLCB0aGlzLCB2KTsKLSAg
ICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKHNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHVu
c2lnbmVkIGFkZENvbnN0YW50KExpbmtUaW1lQ29uc3RhbnQgbGlua1RpbWVDb25zdGFudCkKLSAg
ICB7Ci0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0g
bG9ja0R1cmluZ01hcmtpbmcodm0uaGVhcCwgY2VsbExvY2soKSk7Ci0gICAgICAgIHVuc2lnbmVk
IHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwotICAgICAgICBtX2NvbnN0YW50
UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldCh2bSwgdGhpcywganNOdW1iZXIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4obGlua1RpbWVDb25zdGFudCkpKTsKLSAgICAgICAgbV9jb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1Rp
bWVDb25zdGFudCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQogCi0gICAgY29uc3Qg
VmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1
cm4gbV9jb25zdGFudFJlZ2lzdGVyczsgfQorICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxXcml0
ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3Rh
bnRSZWdpc3RlcnM7IH0KICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50
UmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJl
Z2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQotICAgIGNvbnN0
IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bjsgfQorICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+
JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25z
dGFudElkZW50aWZpZXJTZXRzKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURh
dGEtPm1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5zaXplKCkgOiAwOyB9Ci0gICAgY29uc3QgVmVj
dG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygp
IHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50
aWZpZXJTZXRzOyB9CisgICAgY29uc3QgUmVmQ291bnRlZEFycmF5PENvbnN0YW50SWRlbnRpZmll
clNldEVudHJ5PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgQVNTRVJUKG1fcmFyZURhdGEp
OyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzOyB9CiAKICAgICAv
LyBKdW1wcwogICAgIHNpemVfdCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4g
bV9qdW1wVGFyZ2V0cy5zaXplKCk7IH0KLSAgICB2b2lkIGFkZEp1bXBUYXJnZXQodW5zaWduZWQg
anVtcFRhcmdldCkgeyBtX2p1bXBUYXJnZXRzLmFwcGVuZChqdW1wVGFyZ2V0KTsgfQogICAgIHVu
c2lnbmVkIGp1bXBUYXJnZXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRz
W2luZGV4XTsgfQogICAgIHVuc2lnbmVkIGxhc3RKdW1wVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV9qdW1wVGFyZ2V0cy5sYXN0KCk7IH0KIApAQCAtMjIzLDkgKzE3OSw2IEBAIGNsYXNzIFVubGlu
a2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgU3VwZXJCaW5kaW5nIHN1cGVyQmlu
ZGluZygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN1cGVyQmluZGluZz4obV9zdXBlckJp
bmRpbmcpOyB9CiAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxKU1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAot
ICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKLQotICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6
dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4pOwogICAgIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdDsKIAogICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBj
b25zdCB7IHJldHVybiBtX251bUNhbGxlZUxvY2FsczsgfQpAQCAtMjM0LDM5ICsxODcsMTggQEAg
Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBKdW1wIFRh
YmxlcwogCiAgICAgc2l6ZV90IG51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0
dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDog
MDsgfQotICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiBhZGRTd2l0Y2hKdW1wVGFibGUoKSB7
IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFi
bGVzLmFwcGVuZChVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEt
Pm1fc3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KICAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSYgc3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsg
cmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQogCiAg
ICAgc2l6ZV90IG51bWJlck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgp
IDogMDsgfQotICAgIFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1w
VGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zdHJp
bmdTd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSgpKTsgcmV0
dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KICAgICBV
bmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUlu
ZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQogCi0gICAgdW5zaWduZWQgYWRkRnVuY3Rpb25E
ZWNsKFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBuKQotICAgIHsKLSAgICAgICAgVk0mIHZt
ID0gdGhpcy0+dm0oKTsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyh2
bS5oZWFwLCBjZWxsTG9jaygpKTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25E
ZWNscy5zaXplKCk7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWNscy5hcHBlbmQoV3JpdGVCYXJyaWVy
PFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xz
Lmxhc3QoKS5zZXQodm0sIHRoaXMsIG4pOwotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9CiAg
ICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsg
cmV0dXJuIG1fZnVuY3Rpb25EZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBzaXplX3QgbnVtYmVy
T2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQotICAg
IHVuc2lnbmVkIGFkZEZ1bmN0aW9uRXhwcihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogbikK
LSAgICB7Ci0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIGF1dG8gbG9ja2Vy
ID0gbG9ja0R1cmluZ01hcmtpbmcodm0uaGVhcCwgY2VsbExvY2soKSk7Ci0gICAgICAgIHVuc2ln
bmVkIHNpemUgPSBtX2Z1bmN0aW9uRXhwcnMuc2l6ZSgpOwotICAgICAgICBtX2Z1bmN0aW9uRXhw
cnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7Ci0g
ICAgICAgIG1fZnVuY3Rpb25FeHBycy5sYXN0KCkuc2V0KHZtLCB0aGlzLCBuKTsKLSAgICAgICAg
cmV0dXJuIHNpemU7Ci0gICAgfQogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5j
dGlvbkV4cHIoaW50IGluZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNbaW5kZXhdLmdldCgp
OyB9CiAgICAgc2l6ZV90IG51bWJlck9mRnVuY3Rpb25FeHBycygpIHsgcmV0dXJuIG1fZnVuY3Rp
b25FeHBycy5zaXplKCk7IH0KIAogICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CiAg
ICAgc2l6ZV90IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX3Jh
cmVEYXRhID8gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkgOiAwOyB9Ci0g
ICAgdm9pZCBhZGRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhh
bmRsZXIpIHsgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+
bV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoaGFuZGxlcik7IH0KICAgICBVbmxpbmtlZEhhbmRs
ZXJJbmZvJiBleGNlcHRpb25IYW5kbGVyKGludCBpbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7
IHJldHVybiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQogCiAgICAg
Q29kZVR5cGUgY29kZVR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlVHlwZT4o
bV9jb2RlVHlwZSk7IH0KQEAgLTMwMywxMiArMjM1LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxv
Y2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHN0YXJ0Q29s
dW1uKCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0
IHsgcmV0dXJuIG1fZW5kQ29sdW1uOyB9CiAKLSAgICB2b2lkIGFkZE9wUHJvZmlsZUNvbnRyb2xG
bG93Qnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCi0gICAg
ewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIG1fcmFyZURh
dGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuYXBwZW5kKG9mZnNldCk7
Ci0gICAgfQotICAgIGNvbnN0IFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiYgb3BQ
cm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKSBjb25zdAorICAgIGNvbnN0IFJlZkNv
dW50ZWRBcnJheTxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiYgb3BQcm9maWxlQ29udHJvbEZs
b3dCeXRlY29kZU9mZnNldHMoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fcmFyZURh
dGEpOwogICAgICAgICByZXR1cm4gbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5
dGVjb2RlT2Zmc2V0czsKQEAgLTM4NywyMSArMzE0LDE3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJs
b2NrIDogcHVibGljIEpTQ2VsbCB7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVj
b2RlUmV3cml0ZXI7Ci0gICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9yOworICAgIGZy
aWVuZCBjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUcmFpdHM+CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9yQmFzZTsKIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CiAgICAgZnJpZW5kIGNsYXNzIENh
Y2hlZENvZGVCbG9jazsKIAotICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdy
aXRlciYsIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyJik7Ci0KLSAgICB2b2lkIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKQorICAgIHZvaWQgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeShjb25z
dCBBYnN0cmFjdExvY2tlciYpCiAgICAgewotICAgICAgICBpZiAoIW1fcmFyZURhdGEpIHsKLSAg
ICAgICAgICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcoKmhlYXAoKSwgY2VsbExv
Y2soKSk7CisgICAgICAgIGlmICghbV9yYXJlRGF0YSkKICAgICAgICAgICAgIG1fcmFyZURhdGEg
PSBtYWtlVW5pcXVlPFJhcmVEYXRhPigpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBn
ZXRMaW5lQW5kQ29sdW1uKGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mLCB1bnNpZ25lZCYgbGlu
ZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7CkBAIC00NDYsNyArMzY5LDcgQEAgY2xhc3MgVW5s
aW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICBTdHJpbmcgbV9zb3VyY2VVUkxE
aXJlY3RpdmU7CiAgICAgU3RyaW5nIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsKIAotICAg
IFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX2p1bXBUYXJnZXRzOworICAgIFJl
ZkNvdW50ZWRBcnJheTxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX2p1bXBUYXJnZXRzOwog
ICAgIFJlZjxVbmxpbmtlZE1ldGFkYXRhVGFibGU+IG1fbWV0YWRhdGE7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwpAQCAtNDU3LDEwICsz
ODAsMTAgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICNlbmRp
ZgogCiAgICAgLy8gQ29uc3RhbnQgUG9vbHMKLSAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVu
dGlmaWVyczsKLSAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVn
aXN0ZXJzOwotICAgIFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwotICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFycmll
cjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsK
KyAgICBSZWZDb3VudGVkQXJyYXk8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKKyAgICBSZWZD
b3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOwor
ICAgIFJlZkNvdW50ZWRBcnJheTxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uOworICAgIHVzaW5nIEZ1bmN0aW9uRXhwcmVzc2lvblZl
Y3RvciA9IFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU+PjsKICAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkRlY2xzOwog
ICAgIEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvciBtX2Z1bmN0aW9uRXhwcnM7CiAKQEAgLTQ2OCwy
NyArMzkxLDI2IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAg
ICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NB
VEVEOwogCi0gICAgICAgIFZlY3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhh
bmRsZXJzOworICAgICAgICBSZWZDb3VudGVkQXJyYXk8VW5saW5rZWRIYW5kbGVySW5mbz4gbV9l
eGNlcHRpb25IYW5kbGVyczsKIAogICAgICAgICAvLyBKdW1wIFRhYmxlcwotICAgICAgICBWZWN0
b3I8VW5saW5rZWRTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAg
VmVjdG9yPFVubGlua2VkU3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7
CisgICAgICAgIFJlZkNvdW50ZWRBcnJheTxVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0
Y2hKdW1wVGFibGVzOworICAgICAgICBSZWZDb3VudGVkQXJyYXk8VW5saW5rZWRTdHJpbmdKdW1w
VGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKIAotICAgICAgICBWZWN0b3I8RXhwcmVz
c2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24+IG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7
CisgICAgICAgIFJlZkNvdW50ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlv
bj4gbV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9uczsKIAogICAgICAgICBzdHJ1Y3QgVHlwZVBy
b2ZpbGVyRXhwcmVzc2lvblJhbmdlIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG1fc3RhcnREaXZv
dDsKICAgICAgICAgICAgIHVuc2lnbmVkIG1fZW5kRGl2b3Q7CiAgICAgICAgIH07CiAgICAgICAg
IEhhc2hNYXA8dW5zaWduZWQsIFR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZT4gbV90eXBlUHJv
ZmlsZXJJbmZvTWFwOwotICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4g
bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsKLSAgICAgICAgVmVjdG9yPEJp
dFZlY3Rvcj4gbV9iaXRWZWN0b3JzOwotICAgICAgICBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVy
U2V0RW50cnk+IG1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsKKyAgICAgICAgUmVmQ291bnRlZEFy
cmF5PEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRl
Y29kZU9mZnNldHM7CisgICAgICAgIFJlZkNvdW50ZWRBcnJheTxCaXRWZWN0b3I+IG1fYml0VmVj
dG9yczsKKyAgICAgICAgUmVmQ291bnRlZEFycmF5PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5
PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7CiAKICAgICAgICAgdW5zaWduZWQgbV9uZWVkc0Ns
YXNzRmllbGRJbml0aWFsaXplciA6IDE7CiAgICAgfTsKIAotICAgIHZvaWQgYWRkT3V0T2ZMaW5l
SnVtcFRhcmdldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQgdGFyZ2V0KTsKICAgICBp
bnQgb3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KTsKICAgICBp
bnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpbnN0
cnVjdGlvbikKICAgICB7CkBAIC00OTgsMTYgKzQyMCw5IEBAIGNsYXNzIFVubGlua2VkQ29kZUJs
b2NrIDogcHVibGljIEpTQ2VsbCB7CiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBU
YXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwogCi0gICAg
T3V0T2ZMaW5lSnVtcFRhcmdldHMgcmVwbGFjZU91dE9mTGluZUp1bXBUYXJnZXRzKCkKLSAgICB7
Ci0gICAgICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIG5ld0p1bXBUYXJnZXRzOwotICAgICAgICBz
dGQ6OnN3YXAobV9vdXRPZkxpbmVKdW1wVGFyZ2V0cywgbmV3SnVtcFRhcmdldHMpOwotICAgICAg
ICByZXR1cm4gbmV3SnVtcFRhcmdldHM7Ci0gICAgfQotCiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdl
dHMgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+
IG1fcmFyZURhdGE7Ci0gICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lv
bkluZm87CisgICAgUmVmQ291bnRlZEFycmF5PEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVz
c2lvbkluZm87CiAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jYjBlMjJjNTIyN2I3YzMzZWYzZmQxNDFkYWJkMGMzM2E2NGJiZDU2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yLmNwcApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVbmxpbmtl
ZENvZGVCbG9ja0dlbmVyYXRvci5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIK
KyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJCeXRlY29k
ZVJld3JpdGVyLmgiCisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiQ29kZUNhY2hl
LmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZUluZm8uaCIKKyNpbmNsdWRlICJGdW5jdGlvbk92ZXJy
aWRlcy5oIgorI2luY2x1ZGUgIkluc3RydWN0aW9uU3RyZWFtLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiT3Bjb2RlLmgiCisjaW5j
bHVkZSAiUGFyc2VyLmgiCisjaW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oIgor
I2luY2x1ZGUgIlNvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5j
bHVkZSAiU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJVbmxpbmtlZEV2YWxDb2RlQmxvY2suaCIK
KyNpbmNsdWRlICJVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5r
ZWRNZXRhZGF0YVRhYmxlSW5saW5lcy5oIgorI2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBV
bmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6Z2V0TGluZUFuZENvbHVtbihjb25zdCBFeHByZXNz
aW9uUmFuZ2VJbmZvJiBpbmZvLCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKGluZm8ubW9kZSkgeworICAgIGNhc2UgRXhwcmVzc2lvblJhbmdl
SW5mbzo6RmF0TGluZU1vZGU6CisgICAgICAgIGluZm8uZGVjb2RlRmF0TGluZU1vZGUobGluZSwg
Y29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpG
YXRDb2x1bW5Nb2RlOgorICAgICAgICBpbmZvLmRlY29kZUZhdENvbHVtbk1vZGUobGluZSwgY29s
dW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRM
aW5lQW5kQ29sdW1uTW9kZTogeworICAgICAgICB1bnNpZ25lZCBmYXRJbmRleCA9IGluZm8ucG9z
aXRpb247CisgICAgICAgIGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdFBvc2l0aW9uJiBm
YXRQb3MgPSBtX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zW2ZhdEluZGV4XTsKKyAgICAgICAg
bGluZSA9IGZhdFBvcy5saW5lOworICAgICAgICBjb2x1bW4gPSBmYXRQb3MuY29sdW1uOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgfSAvLyBzd2l0Y2gKK30KKwordm9pZCBVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvcjo6YWRkRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25P
ZmZzZXQsIGludCBkaXZvdCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25l
ZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pCit7CisgICAgaWYgKGRpdm90ID4gRXhwcmVzc2lvblJh
bmdlSW5mbzo6TWF4RGl2b3QpIHsKKyAgICAgICAgLy8gT3ZlcmZsb3cgaGFzIG9jY3VycmVkLCB3
ZSBjYW4gb25seSBnaXZlIGxpbmUgbnVtYmVyIGluZm8gZm9yIGVycm9ycyBmb3IgdGhpcyByZWdp
b24KKyAgICAgICAgZGl2b3QgPSAwOworICAgICAgICBzdGFydE9mZnNldCA9IDA7CisgICAgICAg
IGVuZE9mZnNldCA9IDA7CisgICAgfSBlbHNlIGlmIChzdGFydE9mZnNldCA+IEV4cHJlc3Npb25S
YW5nZUluZm86Ok1heE9mZnNldCkgeworICAgICAgICAvLyBJZiB0aGUgc3RhcnQgb2Zmc2V0IGlz
IG91dCBvZiBib3VuZHMgd2UgY2xlYXIgYm90aCBvZmZzZXRzCisgICAgICAgIC8vIHNvIHdlIG9u
bHkgZ2V0IHRoZSBkaXZvdCBtYXJrZXIuIEVycm9yIG1lc3NhZ2Ugd2lsbCBoYXZlIHRvIGJlIHJl
ZHVjZWQKKyAgICAgICAgLy8gdG8gbGluZSBhbmQgY2hhclBvc2l0aW9uIG51bWJlci4KKyAgICAg
ICAgc3RhcnRPZmZzZXQgPSAwOworICAgICAgICBlbmRPZmZzZXQgPSAwOworICAgIH0gZWxzZSBp
ZiAoZW5kT2Zmc2V0ID4gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4T2Zmc2V0KSB7CisgICAgICAg
IC8vIFRoZSBlbmQgb2Zmc2V0IGlzIG9ubHkgdXNlZCBmb3IgYWRkaXRpb25hbCBjb250ZXh0LCBh
bmQgaXMgbXVjaCBtb3JlIGxpa2VseQorICAgICAgICAvLyB0byBvdmVyZmxvdyAoZWcuIGZ1bmN0
aW9uIGNhbGwgYXJndW1lbnRzKSBzbyB3ZSBhcmUgd2lsbGluZyB0byBkcm9wIGl0IHdpdGhvdXQK
KyAgICAgICAgLy8gZHJvcHBpbmcgdGhlIHJlc3Qgb2YgdGhlIHJhbmdlLgorICAgICAgICBlbmRP
ZmZzZXQgPSAwOworICAgIH0KKworICAgIHVuc2lnbmVkIHBvc2l0aW9uTW9kZSA9CisgICAgICAg
IChsaW5lIDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdExpbmVNb2RlTGluZSAmJiBjb2x1
bW4gPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0TGluZU1vZGVDb2x1bW4pCisgICAgICAg
ID8gRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGUKKyAgICAgICAgOiAobGluZSA8PSBF
eHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRDb2x1bW5Nb2RlTGluZSAmJiBjb2x1bW4gPD0gRXhw
cmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0Q29sdW1uTW9kZUNvbHVtbikKKyAgICAgICAgPyBFeHBy
ZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlCisgICAgICAgIDogRXhwcmVzc2lvblJhbmdl
SW5mbzo6RmF0TGluZUFuZENvbHVtbk1vZGU7CisKKyAgICBFeHByZXNzaW9uUmFuZ2VJbmZvIGlu
Zm87CisgICAgaW5mby5pbnN0cnVjdGlvbk9mZnNldCA9IGluc3RydWN0aW9uT2Zmc2V0OworICAg
IGluZm8uZGl2b3RQb2ludCA9IGRpdm90OworICAgIGluZm8uc3RhcnRPZmZzZXQgPSBzdGFydE9m
ZnNldDsKKyAgICBpbmZvLmVuZE9mZnNldCA9IGVuZE9mZnNldDsKKworICAgIGluZm8ubW9kZSA9
IHBvc2l0aW9uTW9kZTsKKyAgICBzd2l0Y2ggKHBvc2l0aW9uTW9kZSkgeworICAgIGNhc2UgRXhw
cmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGU6CisgICAgICAgIGluZm8uZW5jb2RlRmF0TGlu
ZU1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHByZXNzaW9u
UmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlOgorICAgICAgICBpbmZvLmVuY29kZUZhdENvbHVtbk1v
ZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFu
Z2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTogeworICAgICAgICB1bnNpZ25lZCBmYXRJbmRl
eCA9IG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMuc2l6ZSgpOworICAgICAgICBFeHByZXNz
aW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbiBmYXRQb3MgPSB7IGxpbmUsIGNvbHVtbiB9OworICAg
ICAgICBtX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLmFwcGVuZChmYXRQb3MpOworICAgICAg
ICBpbmZvLnBvc2l0aW9uID0gZmF0SW5kZXg7CisgICAgfQorICAgIH0gLy8gc3dpdGNoCisKKyAg
ICBtX2V4cHJlc3Npb25JbmZvLmFwcGVuZChpbmZvKTsKK30KKwordm9pZCBVbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvcjo6YWRkVHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5z
dHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90KQor
eworICAgIFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lv
blJhbmdlIHJhbmdlOworICAgIHJhbmdlLm1fc3RhcnREaXZvdCA9IHN0YXJ0RGl2b3Q7CisgICAg
cmFuZ2UubV9lbmREaXZvdCA9IGVuZERpdm90OworICAgIG1fdHlwZVByb2ZpbGVySW5mb01hcC5z
ZXQoaW5zdHJ1Y3Rpb25PZmZzZXQsIHJhbmdlKTsKK30KKwordm9pZCBVbmxpbmtlZENvZGVCbG9j
a0dlbmVyYXRvcjo6ZmluYWxpemUoc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBp
bnN0cnVjdGlvbnMpCit7CisgICAgQVNTRVJUKGluc3RydWN0aW9ucyk7CisgICAgeworICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29kZUJsb2NrLT5jZWxsTG9jaygpKTsKKyAgICAg
ICAgbV9jb2RlQmxvY2stPm1faW5zdHJ1Y3Rpb25zID0gV1RGTW92ZShpbnN0cnVjdGlvbnMpOwor
ICAgICAgICBtX2NvZGVCbG9jay0+bV9tZXRhZGF0YS0+ZmluYWxpemUoKTsKKworICAgICAgICBt
X2NvZGVCbG9jay0+bV9qdW1wVGFyZ2V0cyA9IFdURk1vdmUobV9qdW1wVGFyZ2V0cyk7CisgICAg
ICAgIG1fY29kZUJsb2NrLT5tX2lkZW50aWZpZXJzID0gV1RGTW92ZShtX2lkZW50aWZpZXJzKTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPm1fY29uc3RhbnRSZWdpc3RlcnMgPSBXVEZNb3ZlKG1fY29u
c3RhbnRSZWdpc3RlcnMpOworICAgICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24gPSBXVEZNb3ZlKG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fZnVuY3Rpb25EZWNscyA9IFdURk1vdmUo
bV9mdW5jdGlvbkRlY2xzKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fZnVuY3Rpb25FeHBycyA9
IFdURk1vdmUobV9mdW5jdGlvbkV4cHJzKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fZXhwcmVz
c2lvbkluZm8gPSBXVEZNb3ZlKG1fZXhwcmVzc2lvbkluZm8pOworICAgICAgICBtX2NvZGVCbG9j
ay0+bV9vdXRPZkxpbmVKdW1wVGFyZ2V0cyA9IFdURk1vdmUobV9vdXRPZkxpbmVKdW1wVGFyZ2V0
cyk7CisKKyAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+bV9yYXJlRGF0YSkgeworICAgICAgICAg
ICAgaWYgKCFtX2V4Y2VwdGlvbkhhbmRsZXJzLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgIHx8
ICFtX3N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgfHwgIW1fc3Ry
aW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICB8fCAhbV9leHBy
ZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICB8fCAhbV90
eXBlUHJvZmlsZXJJbmZvTWFwLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgIHx8ICFtX29wUHJv
ZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmlzRW1wdHkoKQorICAgICAgICAgICAgICAg
IHx8ICFtX2JpdFZlY3RvcnMuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgfHwgIW1fY29uc3Rh
bnRJZGVudGlmaWVyU2V0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2st
PmNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkobG9ja2VyKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobV9jb2RlQmxvY2stPm1fcmFyZURhdGEpIHsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5t
X3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzID0gV1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRs
ZXJzKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBU
YWJsZXMgPSBXVEZNb3ZlKG1fc3dpdGNoSnVtcFRhYmxlcyk7CisgICAgICAgICAgICBtX2NvZGVC
bG9jay0+bV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXMpOworICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fcmFyZURh
dGEtPm1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMgPSBXVEZNb3ZlKG1fZXhwcmVzc2lvbklu
Zm9GYXRQb3NpdGlvbnMpOworICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fcmFyZURhdGEtPm1f
dHlwZVByb2ZpbGVySW5mb01hcCA9IFdURk1vdmUobV90eXBlUHJvZmlsZXJJbmZvTWFwKTsKKyAg
ICAgICAgICAgIG1fY29kZUJsb2NrLT5tX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93
Qnl0ZWNvZGVPZmZzZXRzID0gV1RGTW92ZShtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVP
ZmZzZXRzKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX3JhcmVEYXRhLT5tX2JpdFZlY3Rv
cnMgPSBXVEZNb3ZlKG1fYml0VmVjdG9ycyk7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9y
YXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzID0gV1RGTW92ZShtX2NvbnN0YW50SWRl
bnRpZmllclNldHMpOworICAgICAgICB9CisgICAgfQorICAgIG1fdm0uaGVhcC53cml0ZUJhcnJp
ZXIobV9jb2RlQmxvY2suZ2V0KCkpOworICAgIG1fdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFs
bG9jYXRlZChtX2NvZGVCbG9jay0+bV9pbnN0cnVjdGlvbnMtPnNpemVJbkJ5dGVzKCkgKyBtX2Nv
ZGVCbG9jay0+bV9tZXRhZGF0YS0+c2l6ZUluQnl0ZXMoKSk7Cit9CisKK1VubGlua2VkSGFuZGxl
ckluZm8qIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpoYW5kbGVyRm9yQnl0ZWNvZGVJbmRl
eChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhh
bmRsZXIpCit7CisgICAgcmV0dXJuIGhhbmRsZXJGb3JJbmRleChieXRlY29kZUluZGV4Lm9mZnNl
dCgpLCByZXF1aXJlZEhhbmRsZXIpOworfQorCitVbmxpbmtlZEhhbmRsZXJJbmZvKiBVbmxpbmtl
ZENvZGVCbG9ja0dlbmVyYXRvcjo6aGFuZGxlckZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBSZXF1
aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5kbGVyKQoreworICAgIHJldHVybiBVbmxpbmtlZEhhbmRs
ZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXg8VW5saW5rZWRIYW5kbGVySW5mbz4obV9leGNlcHRpb25I
YW5kbGVycywgaW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7Cit9CisKK3ZvaWQgVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3I6OmFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImIHJld3Jp
dGVyLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYgaW5zdHJ1Y3Rpb25zKQoreworICAgIC8vIEJl
Zm9yZSBhcHBseWluZyB0aGUgY2hhbmdlcywgd2UgYWRqdXN0IHRoZSBqdW1wcyBiYXNlZCBvbiB0
aGUgb3JpZ2luYWwgYnl0ZWNvZGUgb2Zmc2V0LCB0aGUgb2Zmc2V0IHRvIHRoZSBqdW1wIHRhcmdl
dCwgYW5kCisgICAgLy8gdGhlIGluc2VydGlvbiBpbmZvcm1hdGlvbi4KKworICAgIHJld3JpdGVy
LmFkanVzdEp1bXBUYXJnZXRzKCk7CisKKyAgICAvLyBUaGVuLCBleGNlcHRpb24gaGFuZGxlcnMg
c2hvdWxkIGJlIGFkanVzdGVkLgorICAgIGZvciAoVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxl
ciA6IG1fZXhjZXB0aW9uSGFuZGxlcnMpIHsKKyAgICAgICAgaGFuZGxlci50YXJnZXQgPSByZXdy
aXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChoYW5kbGVyLnRhcmdldCk7CisgICAgICAgIGhhbmRs
ZXIuc3RhcnQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChoYW5kbGVyLnN0YXJ0KTsK
KyAgICAgICAgaGFuZGxlci5lbmQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChoYW5k
bGVyLmVuZCk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29wUHJvZmls
ZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLnNpemUoKTsgKytpKQorICAgICAgICBtX29wUHJv
ZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzW2ldID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1
dGVPZmZzZXQobV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0c1tpXSk7CisKKyAg
ICBpZiAoIW1fdHlwZVByb2ZpbGVySW5mb01hcC5pc0VtcHR5KCkpIHsKKyAgICAgICAgSGFzaE1h
cDx1bnNpZ25lZCwgVW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHBy
ZXNzaW9uUmFuZ2U+IGFkanVzdGVkVHlwZVByb2ZpbGVySW5mb01hcDsKKyAgICAgICAgZm9yIChh
dXRvJiBlbnRyeSA6IG1fdHlwZVByb2ZpbGVySW5mb01hcCkKKyAgICAgICAgICAgIGFkanVzdGVk
VHlwZVByb2ZpbGVySW5mb01hcC5zZXQocmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQoZW50
cnkua2V5KSwgZW50cnkudmFsdWUpOworICAgICAgICBtX3R5cGVQcm9maWxlckluZm9NYXAuc3dh
cChhZGp1c3RlZFR5cGVQcm9maWxlckluZm9NYXApOworICAgIH0KKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9leHByZXNzaW9uSW5mby5zaXplKCk7ICsraSkKKyAgICAgICAgbV9leHBy
ZXNzaW9uSW5mb1tpXS5pbnN0cnVjdGlvbk9mZnNldCA9IHJld3JpdGVyLmFkanVzdEFic29sdXRl
T2Zmc2V0KG1fZXhwcmVzc2lvbkluZm9baV0uaW5zdHJ1Y3Rpb25PZmZzZXQpOworCisgICAgLy8g
VGhlbiwgbW9kaWZ5IHRoZSB1bmxpbmtlZCBpbnN0cnVjdGlvbnMuCisgICAgcmV3cml0ZXIuYXBw
bHlNb2RpZmljYXRpb24oKTsKKworICAgIC8vIEFuZCByZWNvbXB1dGUgdGhlIGp1bXAgdGFyZ2V0
IGJhc2VkIG9uIHRoZSBtb2RpZmllZCB1bmxpbmtlZCBpbnN0cnVjdGlvbnMuCisgICAgbV9qdW1w
VGFyZ2V0cy5jbGVhcigpOworICAgIHJlY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyh0aGlzLCBp
bnN0cnVjdGlvbnMsIG1fanVtcFRhcmdldHMpOworfQorCit2b2lkIFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yOjphZGRPdXRPZkxpbmVKdW1wVGFyZ2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZz
ZXQgYnl0ZWNvZGVPZmZzZXQsIGludCB0YXJnZXQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQodGFy
Z2V0KTsKKyAgICBtX291dE9mTGluZUp1bXBUYXJnZXRzLnNldChieXRlY29kZU9mZnNldCwgdGFy
Z2V0KTsKK30KKworaW50IFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpvdXRPZkxpbmVKdW1w
T2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAg
QVNTRVJUKG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuY29udGFpbnMoYnl0ZWNvZGVPZmZzZXQpKTsK
KyAgICByZXR1cm4gbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0ZWNvZGVPZmZzZXQpOwor
fQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpkdW1wKFByaW50U3RyZWFtJikg
Y29uc3QKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmRlNDJlMTExMmUyNWI0ZmRhM2QwNTk1OTg2ZjVmYTJjNTdlYTVjMTgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3IuaApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJVbmxp
bmtlZENvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yIHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVbmxpbmtlZENvZGVCbG9j
a0dlbmVyYXRvcikKK3B1YmxpYzoKKyAgICBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcihWTSYg
dm0sIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgICAgIDogbV92bSh2bSkKKyAg
ICAgICAgLCBtX2NvZGVCbG9jayh2bSwgY29kZUJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICBW
TSYgdm0oKSB7IHJldHVybiBtX3ZtOyB9CisKKyAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25z
dCB7IHJldHVybiBtX2NvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpOyB9CisgICAgQ29uc3RydWN0
b3JLaW5kIGNvbnN0cnVjdG9yS2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5jb25z
dHJ1Y3RvcktpbmQoKTsgfQorICAgIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcoKSBjb25zdCB7
IHJldHVybiBtX2NvZGVCbG9jay0+c3VwZXJCaW5kaW5nKCk7IH0KKyAgICBKU1BhcnNlclNjcmlw
dE1vZGUgc2NyaXB0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5zY3JpcHRNb2Rl
KCk7IH0KKyAgICBOZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciBuZWVkc0NsYXNzRmllbGRJbml0
aWFsaXplcigpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5uZWVkc0NsYXNzRmllbGRJbml0
aWFsaXplcigpOyB9CisgICAgYm9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVCbG9jay0+aXNTdHJpY3RNb2RlKCk7IH0KKyAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlQmxvY2stPnVzZXNFdmFsKCk7IH0KKyAgICBTb3VyY2VQYXJzZU1vZGUgcGFy
c2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpOyB9CisgICAg
Ym9vbCBpc0Fycm93RnVuY3Rpb24oKSB7IHJldHVybiBtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0
aW9uKCk7IH0KKyAgICBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmRlcml2ZWRDb250ZXh0VHlwZSgpOyB9CisgICAgRXZh
bENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2Nr
LT5ldmFsQ29udGV4dFR5cGUoKTsgfQorICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCk7IH0K
KyAgICBib29sIGlzQ2xhc3NDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlz
Q2xhc3NDb250ZXh0KCk7IH0KKyAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9jYWxzOyB9CisgICAgaW50IG51bVZhcnMoKSBj
b25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+bV9udW1WYXJzOyB9CisgICAgdW5zaWduZWQgbnVt
UGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7
IH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlQmxvY2stPnRoaXNSZWdpc3RlcigpOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVn
aXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpOyB9Cisg
ICAgYm9vbCB3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKTsgfQorICAgIGJv
b2wgaGFzQ2hlY2twb2ludHMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFzQ2hlY2tw
b2ludHMoKTsgfQorICAgIGJvb2wgaGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
QmxvY2stPmhhc1RhaWxDYWxscygpOyB9CisKKyAgICAvLyBVcGRhdGluZyBVbmxpbmtlZENvZGVC
bG9jay4KKyAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFz
Q2hlY2twb2ludHMoKTsgfQorICAgIHZvaWQgc2V0SGFzVGFpbENhbGxzKCkgeyBtX2NvZGVCbG9j
ay0+c2V0SGFzVGFpbENhbGxzKCk7IH0KKyAgICB2b2lkIHNldE51bUNhbGxlZUxvY2FscyhpbnQg
bnVtQ2FsbGVlTG9jYWxzKSB7IG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2FscyA9IG51bUNh
bGxlZUxvY2FsczsgfQorICAgIHZvaWQgc2V0TnVtVmFycyhpbnQgbnVtVmFycykgeyBtX2NvZGVC
bG9jay0+bV9udW1WYXJzID0gbnVtVmFyczsgfQorICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZp
cnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIpIHsgbV9jb2RlQmxvY2stPnNldFRoaXNSZWdpc3Rl
cih0aGlzUmVnaXN0ZXIpOyB9CisgICAgdm9pZCBzZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciB0aGlzUmVnaXN0ZXIpIHsgbV9jb2RlQmxvY2stPnNldFNjb3BlUmVnaXN0ZXIodGhpc1Jl
Z2lzdGVyKTsgfQorICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpIHsgbV9j
b2RlQmxvY2stPnNldE51bVBhcmFtZXRlcnMobmV3VmFsdWUpOyB9CisKKyAgICBVbmxpbmtlZE1l
dGFkYXRhVGFibGUmIG1ldGFkYXRhKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPm1ldGFkYXRhKCk7
IH0KKyAgICB2b2lkIGFkZEV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0
LCBpbnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgdW5zaWduZWQgbGlu
ZSwgdW5zaWduZWQgY29sdW1uKTsKKyAgICB2b2lkIGFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25J
bmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBzdGFydERpdm90LCB1bnNp
Z25lZCBlbmREaXZvdCk7CisgICAgdm9pZCBhZGRPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2Rl
T2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5hcHBlbmQob2Zmc2V0KTsKKyAg
ICB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1f
anVtcFRhcmdldHMuc2l6ZSgpOyB9CisgICAgdm9pZCBhZGRKdW1wVGFyZ2V0KHVuc2lnbmVkIGp1
bXBUYXJnZXQpIHsgbV9qdW1wVGFyZ2V0cy5hcHBlbmQoanVtcFRhcmdldCk7IH0KKyAgICB1bnNp
Z25lZCBqdW1wVGFyZ2V0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0c1tp
bmRleF07IH0KKyAgICB1bnNpZ25lZCBsYXN0SnVtcFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1f
anVtcFRhcmdldHMubGFzdCgpOyB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZTd2l0Y2hKdW1wVGFi
bGVzKCkgY29uc3QgeyByZXR1cm4gbV9zd2l0Y2hKdW1wVGFibGVzLnNpemUoKTsgfQorICAgIFVu
bGlua2VkU2ltcGxlSnVtcFRhYmxlJiBhZGRTd2l0Y2hKdW1wVGFibGUoKSB7IG1fc3dpdGNoSnVt
cFRhYmxlcy5hcHBlbmQoVW5saW5rZWRTaW1wbGVKdW1wVGFibGUoKSk7IHJldHVybiBtX3N3aXRj
aEp1bXBUYWJsZXMubGFzdCgpOyB9CisgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHN3aXRj
aEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV9zd2l0Y2hKdW1wVGFibGVzW3Rh
YmxlSW5kZXhdOyB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKTsgfQorICAg
IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IG1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoVW5saW5rZWRTdHJpbmdKdW1wVGFibGUoKSk7
IHJldHVybiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9CisgICAgVW5saW5rZWRT
dHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBy
ZXR1cm4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CisKKyAgICBzaXpl
X3QgbnVtYmVyT2ZFeGNlcHRpb25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9u
SGFuZGxlcnMuc2l6ZSgpOyB9CisgICAgVW5saW5rZWRIYW5kbGVySW5mbyYgZXhjZXB0aW9uSGFu
ZGxlcihpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9Cisg
ICAgdm9pZCBhZGRFeGNlcHRpb25IYW5kbGVyKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhh
bmRsZXIpIHsgbV9leGNlcHRpb25IYW5kbGVycy5hcHBlbmQoaGFuZGxlcik7IH0KKyAgICBVbmxp
bmtlZEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4LCBS
ZXF1aXJlZEhhbmRsZXIgPSBSZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOworICAgIFVubGlu
a2VkSGFuZGxlckluZm8qIGhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCwgUmVxdWlyZWRIYW5kbGVy
ID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKKworICAgIEJpdFZlY3RvciYgYml0VmVj
dG9yKHNpemVfdCBpKSB7IHJldHVybiBtX2JpdFZlY3RvcnNbaV07IH0KKyAgICB1bnNpZ25lZCBh
ZGRCaXRWZWN0b3IoQml0VmVjdG9yJiYgYml0VmVjdG9yKQorICAgIHsKKyAgICAgICAgbV9iaXRW
ZWN0b3JzLmFwcGVuZChXVEZNb3ZlKGJpdFZlY3RvcikpOworICAgICAgICByZXR1cm4gbV9iaXRW
ZWN0b3JzLnNpemUoKSAtIDE7CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFu
dElkZW50aWZpZXJTZXRzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRz
LnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4m
IGNvbnN0YW50SWRlbnRpZmllclNldHMoKSB7IHJldHVybiBtX2NvbnN0YW50SWRlbnRpZmllclNl
dHM7IH0KKyAgICB2b2lkIGFkZFNldENvbnN0YW50KElkZW50aWZpZXJTZXQmIHNldCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3ZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKKyAgICAgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CisgICAgICAgIG1fY29uc3Rh
bnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKKyAgICAgICAgbV9j
b25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjo6T3RoZXIpOworICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5k
KENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5KHNldCwgcmVzdWx0KSk7CisgICAgfQorCisgICAg
Y29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdp
c3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3Rh
bnRJbmRleCgpXTsgfQorICAgIGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBj
b25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KKyAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29u
c3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdl
dCgpOyB9CisgICAgY29uc3QgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uOyB9CisKKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVl
IHYsIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dm0uaGVhcC5pc0RlZmVycmVkKCkpOworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0
YW50UmVnaXN0ZXJzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQo
V3JpdGVCYXJyaWVyPFVua25vd24+KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxh
c3QoKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKHYpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoc291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoTGlu
a1RpbWVDb25zdGFudCBsaW5rVGltZUNvbnN0YW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dm0uaGVhcC5pc0RlZmVycmVkKCkpOworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0
YW50UmVnaXN0ZXJzLnNpemUoKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQo
V3JpdGVCYXJyaWVyPFVua25vd24+KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxh
c3QoKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+
KGxpbmtUaW1lQ29uc3RhbnQpKSk7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3Rh
bnQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZEZ1
bmN0aW9uRGVjbChVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogbikKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX3ZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9
IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNscy5hcHBlbmQo
V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKKyAgICAgICAgbV9m
dW5jdGlvbkRlY2xzLmxhc3QoKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG4pOworICAgICAgICBy
ZXR1cm4gc2l6ZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkV4cHIoVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG4pCisgICAgeworICAgICAgICB1bnNpZ25lZCBzaXplID0g
bV9mdW5jdGlvbkV4cHJzLnNpemUoKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzLmFwcGVuZChX
cml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOworICAgICAgICBtX2Z1
bmN0aW9uRXhwcnMubGFzdCgpLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIobik7CisgICAgICAgIHJl
dHVybiBzaXplOworICAgIH0KKworICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZpZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9pZGVudGlmaWVycy5zaXplKCk7IH0KKyAgICBjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyc1tpbmRl
eF07IH0KKyAgICB2b2lkIGFkZElkZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYgaSkgeyByZXR1
cm4gbV9pZGVudGlmaWVycy5hcHBlbmQoaSk7IH0KKworICAgIHVzaW5nIE91dE9mTGluZUp1bXBU
YXJnZXRzID0gSGFzaE1hcDxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OworICAgIHZv
aWQgYWRkT3V0T2ZMaW5lSnVtcFRhcmdldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQg
dGFyZ2V0KTsKKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6
T2Zmc2V0KTsKKyAgICBpbnQgb3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvblN0
cmVhbTo6UmVmJiBpbnN0cnVjdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVK
dW1wT2Zmc2V0KGluc3RydWN0aW9uLm9mZnNldCgpKTsKKyAgICB9CisgICAgT3V0T2ZMaW5lSnVt
cFRhcmdldHMgcmVwbGFjZU91dE9mTGluZUp1bXBUYXJnZXRzKCkKKyAgICB7CisgICAgICAgIE91
dE9mTGluZUp1bXBUYXJnZXRzIG5ld0p1bXBUYXJnZXRzOworICAgICAgICBzdGQ6OnN3YXAobV9v
dXRPZkxpbmVKdW1wVGFyZ2V0cywgbmV3SnVtcFRhcmdldHMpOworICAgICAgICByZXR1cm4gbmV3
SnVtcFRhcmdldHM7CisgICAgfQorCisgICAgc2l6ZV90IG1ldGFkYXRhU2l6ZUluQnl0ZXMoKSB7
IHJldHVybiBtX2NvZGVCbG9jay0+bWV0YWRhdGFTaXplSW5CeXRlcygpOyB9CisKKyAgICB2b2lk
IGdldExpbmVBbmRDb2x1bW4oY29uc3QgRXhwcmVzc2lvblJhbmdlSW5mbyYsIHVuc2lnbmVkJiBs
aW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKKworICAgIHZvaWQgYXBwbHlNb2RpZmljYXRp
b24oQnl0ZWNvZGVSZXdyaXRlciYsIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyJik7CisKKyAgICB2
b2lkIGZpbmFsaXplKHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4pOworCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVk0mIG1fdm07
CisgICAgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPiBtX2NvZGVCbG9jazsKKyAgICAvLyBJbiBu
b24tUmFyZURhdGEuCisgICAgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fanVt
cFRhcmdldHM7CisgICAgVmVjdG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CisgICAgVmVj
dG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsKKyAgICBWZWN0
b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjsKKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRh
YmxlPj4gbV9mdW5jdGlvbkRlY2xzOworICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGU+PiBtX2Z1bmN0aW9uRXhwcnM7CisgICAgVmVjdG9yPEV4cHJlc3Np
b25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87CisgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMg
bV9vdXRPZkxpbmVKdW1wVGFyZ2V0czsKKyAgICAvLyBJbiBSYXJlRGF0YS4KKyAgICBWZWN0b3I8
VW5saW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKKyAgICBWZWN0b3I8VW5s
aW5rZWRTaW1wbGVKdW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBWZWN0b3I8VW5s
aW5rZWRTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICBWZWN0
b3I8RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24+IG1fZXhwcmVzc2lvbkluZm9GYXRQ
b3NpdGlvbnM7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgVW5saW5rZWRDb2RlQmxvY2s6OlJhcmVE
YXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IG1fdHlwZVByb2ZpbGVySW5mb01hcDsK
KyAgICBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9vcFByb2ZpbGVDb250cm9s
Rmxvd0J5dGVjb2RlT2Zmc2V0czsKKyAgICBWZWN0b3I8Qml0VmVjdG9yPiBtX2JpdFZlY3RvcnM7
CisgICAgVmVjdG9yPENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRp
ZmllclNldHM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXgg
ZTMyMjIwNWRlZTc5NTQxY2M1MDVlZjAzNmZmYjlhOTMxMzQyMmRmZi4uM2RiYzJiYzk1NjUzMDZm
MTYxNDM5ZDliZDM5OTkyOTgwMzVmNGNiOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTI4OCwxNyAr
Mjg4LDE0IEBAIFBhcnNlckVycm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiAgICAg
ICAgIHBlcmZvcm1HZW5lcmF0b3JpZmljYXRpb24oKnRoaXMsIG1fY29kZUJsb2NrLmdldCgpLCBt
X3dyaXRlciwgbV9nZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLmdldCgpLCBtX2dlbmVyYXRvckZy
YW1lU3ltYm9sVGFibGVJbmRleCk7CiAKICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV9jb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKSA8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkpOwotICAgIG1fY29kZUJsb2NrLT5z
ZXRJbnN0cnVjdGlvbnMobV93cml0ZXIuZmluYWxpemUoKSk7Ci0KLSAgICBtX2NvZGVCbG9jay0+
c2hyaW5rVG9GaXQoKTsKLQorICAgIG1fY29kZUJsb2NrLT5maW5hbGl6ZShtX3dyaXRlci5maW5h
bGl6ZSgpKTsKICAgICBpZiAobV9leHByZXNzaW9uVG9vRGVlcCkKICAgICAgICAgcmV0dXJuIFBh
cnNlckVycm9yKFBhcnNlckVycm9yOjpPdXRPZk1lbW9yeSk7CiAgICAgcmV0dXJuIFBhcnNlckVy
cm9yKFBhcnNlckVycm9yOjpFcnJvck5vbmUpOwogfQogCiBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0
ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2Rl
PiBjb2RlR2VuZXJhdGlvbk1vZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNj
b3BlVERaVmFyaWFibGVzKQotICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKFN0cm9uZzxVbmxp
bmtlZENvZGVCbG9jaz4odm0sIGNvZGVCbG9jayksIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNh
bGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKQorICAgIDogQnl0ZWNvZGVHZW5lcmF0
b3JCYXNlKG1ha2VVbmlxdWU8VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I+KHZtLCBjb2RlQmxv
Y2spLCBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdp
c3RlcnMoKSkKICAgICAsIG1fY29kZUdlbmVyYXRpb25Nb2RlKGNvZGVHZW5lcmF0aW9uTW9kZSkK
ICAgICAsIG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2Fs
bEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkKQEAgLTMzOSw3ICszMzYsNyBAQCBCeXRlY29k
ZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBQcm9ncmFtTm9kZSogcHJvZ3Jh
bU5vZGUsIFVubGlua2VkUAogfQogCiBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mIHZtLCBGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayogY29kZUJsb2NrLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2Vu
ZXJhdGlvbk1vZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3BlVERaVmFy
aWFibGVzKQotICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKFN0cm9uZzxVbmxpbmtlZENvZGVC
bG9jaz4odm0sIGNvZGVCbG9jayksIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVT
cGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKQorICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1h
a2VVbmlxdWU8VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I+KHZtLCBjb2RlQmxvY2spLCBDb2Rl
QmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkK
ICAgICAsIG1fY29kZUdlbmVyYXRpb25Nb2RlKGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAsIG1f
c2NvcGVOb2RlKGZ1bmN0aW9uTm9kZSkKICAgICAsIG1fY29kZVR5cGUoRnVuY3Rpb25Db2RlKQpA
QCAtODMwLDcgKzgyNyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihW
TSYgdm0sIEZ1bmN0aW9uTm9kZSogZnVuY3Rpb25Ob2RlLCBVbmxpbmtlCiB9CiAKIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEV2YWxOb2RlKiBldmFsTm9kZSwg
VW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE9wdGlvblNldDxDb2RlR2VuZXJhdGlv
bk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCogcGFy
ZW50U2NvcGVURFpWYXJpYWJsZXMpCi0gICAgOiBCeXRlY29kZUdlbmVyYXRvckJhc2UoU3Ryb25n
PFVubGlua2VkQ29kZUJsb2NrPih2bSwgY29kZUJsb2NrKSwgQ29kZUJsb2NrOjpsbGludEJhc2Vs
aW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpCisgICAgOiBCeXRlY29kZUdl
bmVyYXRvckJhc2UobWFrZVVuaXF1ZTxVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcj4odm0sIGNv
ZGVCbG9jayksIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVh
bFJlZ2lzdGVycygpKQogICAgICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRpb25N
b2RlKQogICAgICwgbV9zY29wZU5vZGUoZXZhbE5vZGUpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihD
YWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQpAQCAtODg4LDcgKzg4NSw3IEBAIEJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEV2YWxOb2RlKiBldmFsTm9k
ZSwgVW5saW5rZWRFdmFsQ29kCiB9CiAKIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcihWTSYgdm0sIE1vZHVsZVByb2dyYW1Ob2RlKiBtb2R1bGVQcm9ncmFtTm9kZSwgVW5saW5r
ZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE9wdGlvblNldDxDb2RlR2VuZXJh
dGlvbk1vZGU+IGNvZGVHZW5lcmF0aW9uTW9kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCog
cGFyZW50U2NvcGVURFpWYXJpYWJsZXMpCi0gICAgOiBCeXRlY29kZUdlbmVyYXRvckJhc2UoU3Ry
b25nPFVubGlua2VkQ29kZUJsb2NrPih2bSwgY29kZUJsb2NrKSwgQ29kZUJsb2NrOjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpCisgICAgOiBCeXRlY29k
ZUdlbmVyYXRvckJhc2UobWFrZVVuaXF1ZTxVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcj4odm0s
IGNvZGVCbG9jayksIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpKQogICAgICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRp
b25Nb2RlKQogICAgICwgbV9zY29wZU5vZGUobW9kdWxlUHJvZ3JhbU5vZGUpCiAgICAgLCBtX3Ro
aXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQpAQCAtMTE5MCw3ICsx
MTg3LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVOZXh0UGFy
YW1ldGVyKCkKICAgICBtX3BhcmFtZXRlcnMuZ3JvdyhtX3BhcmFtZXRlcnMuc2l6ZSgpICsgMSk7
CiAgICAgYXV0byYgcGFyYW1ldGVyID0gcmVnaXN0ZXJGb3IocmVnKTsKICAgICBwYXJhbWV0ZXIu
c2V0SW5kZXgocmVnKTsKLSAgICBtX2NvZGVCbG9jay0+YWRkUGFyYW1ldGVyKCk7CisgICAgbV9j
b2RlQmxvY2stPnNldE51bVBhcmFtZXRlcnMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAr
IDEpOwogICAgIHJldHVybiAmcGFyYW1ldGVyOwogfQogCkBAIC0zNzgxLDkgKzM3NzgsOSBAQCB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5LCBSZQogICAgIGlmIChpc0NhcHR1cmVkKQogICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldElzQ2FwdHVyZWQoKTsKICAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLnNldElzQ29uc3QoKTsgLy8gVGhlIGZ1bmN0aW9uIG5hbWUgc2NvcGUgbmFt
ZSBhY3RzIGxpa2UgYSBjb25zdCB2YXJpYWJsZS4KLSAgICB1bnNpZ25lZCBudW1WYXJzID0gbV9j
b2RlQmxvY2stPm1fbnVtVmFyczsKKyAgICB1bnNpZ25lZCBudW1WYXJzID0gbV9jb2RlQmxvY2st
Pm51bVZhcnMoKTsKICAgICBwdXNoTGV4aWNhbFNjb3BlSW50ZXJuYWwobmFtZVNjb3BlRW52aXJv
bm1lbnQsIFREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgTmVzdGVkU2NvcGVUeXBlOjpJ
c05vdE5lc3RlZCwgbnVsbHB0ciwgVERaUmVxdWlyZW1lbnQ6Ok5vdFVuZGVyVERaLCBTY29wZVR5
cGU6OkZ1bmN0aW9uTmFtZVNjb3BlLCBTY29wZVJlZ2lzdGVyVHlwZTo6VmFyKTsKLSAgICBBU1NF
UlRfVU5VU0VEKG51bVZhcnMsIG1fY29kZUJsb2NrLT5tX251bVZhcnMgPT0gc3RhdGljX2Nhc3Q8
aW50PihudW1WYXJzICsgMSkpOyAvLyBTaG91bGQgaGF2ZSBvbmx5IGNyZWF0ZWQgb25lIG5ldyAi
dmFyIiBmb3IgdGhlIGZ1bmN0aW9uIG5hbWUgc2NvcGUuCisgICAgQVNTRVJUX1VOVVNFRChudW1W
YXJzLCBtX2NvZGVCbG9jay0+bnVtVmFycygpID09IHN0YXRpY19jYXN0PGludD4obnVtVmFycyAr
IDEpKTsgLy8gU2hvdWxkIGhhdmUgb25seSBjcmVhdGVkIG9uZSBuZXcgInZhciIgZm9yIHRoZSBm
dW5jdGlvbiBuYW1lIHNjb3BlLgogICAgIGJvb2wgc2hvdWxkVHJlYXRBc0xleGljYWxWYXJpYWJs
ZSA9IGlzU3RyaWN0TW9kZSgpOwogICAgIFZhcmlhYmxlIGZ1bmN0aW9uVmFyID0gdmFyaWFibGVG
b3JMb2NhbEVudHJ5KHByb3BlcnR5LCBtX2xleGljYWxTY29wZVN0YWNrLmxhc3QoKS5tX3N5bWJv
bFRhYmxlLT5nZXQoTm9Mb2NraW5nTmVjZXNzYXJ5LCBwcm9wZXJ0eS5pbXBsKCkpLCBtX2xleGlj
YWxTY29wZVN0YWNrLmxhc3QoKS5tX3N5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgc2hvdWxkVHJl
YXRBc0xleGljYWxWYXJpYWJsZSk7CiAgICAgZW1pdFB1dFRvU2NvcGUobV9sZXhpY2FsU2NvcGVT
dGFjay5sYXN0KCkubV9zY29wZSwgZnVuY3Rpb25WYXIsIGNhbGxlZSwgVGhyb3dJZk5vdEZvdW5k
LCBJbml0aWFsaXphdGlvbk1vZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKQEAgLTQ5NDgsNyArNDk0
NSw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRPcHRpb25hbENoZWNrKFJlZ2lzdGVy
SUQqIHNyYykKICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWRPck51bGwobmV3VGVt
cG9yYXJ5KCksIHNyYyksIG1fb3B0aW9uYWxDaGFpblRhcmdldFN0YWNrLmxhc3QoKS5nZXQoKSk7
CiB9CiAKLXZvaWQgRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBib2R5Qnl0ZWNv
ZGVFbmRPZmZzZXQpCit2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgdW5z
aWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewogICAgIC8vIExleGljYWxseSBpbnZhbGlk
YXRpbmcgRm9ySW5Db250ZXh0cyBpcyBraW5kIG9mIHdlYWsgc2F1Y2UsIGJ1dCBpdCBvbmx5IG9j
Y3VycyBpZgogICAgIC8vIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1
ZToKQEAgLTQ5NzMsNyArNDk3MCw3IEBAIHZvaWQgRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9jayogY29kCiAgICAgfQog
fQogCi12b2lkIFN0cnVjdHVyZUZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9k
eUJ5dGVjb2RlRW5kT2Zmc2V0KQordm9pZCBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmZpbmFsaXpl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
KiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKIHsKICAgICBCYXNl
OjpmaW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsK
ICAgICBpZiAoaXNWYWxpZCgpKQpAQCAtNTAxMiw3ICs1MDA5LDcgQEAgdm9pZCBTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlu
a2VkQ29kZUIKICAgICB9CiB9CiAKLXZvaWQgSW5kZXhlZEZvckluQ29udGV4dDo6ZmluYWxpemUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9j
aywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQordm9pZCBJbmRleGVkRm9ySW5Db250
ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQp
CiB7CiAgICAgQmFzZTo6ZmluYWxpemUoZ2VuZXJhdG9yLCBjb2RlQmxvY2ssIGJvZHlCeXRlY29k
ZUVuZE9mZnNldCk7CiAgICAgaWYgKGlzVmFsaWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCAxNDhhZWI2
MzY1OGQyNzczNmQ3ZmJiMWZlMTg1NjAyNzViNmNjNDk1Li5hOGI5NDNjZjBjMDI4MGY1YzExNGQy
ZGU5ZDhmZDkzMmMyYTQ1ODg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC00OCw2ICs0OCw3IEBACiAjaW5j
bHVkZSAiU3RhdGljUHJvcGVydHlBbmFseXplci5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgi
CiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvci5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0No
ZWNrZWRBcml0aG1ldGljLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KQEAgLTIy
NCw3ICsyMjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9keUJ5dGVjb2RlU3RhcnRPZmZz
ZXQ7IH0KIAotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5r
ZWRDb2RlQmxvY2sqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOworICAgICAgICB2
b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3IqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKQEAgLTI1NSw3ICsyNTYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fZ2V0SW5zdHMuYXBwZW5kKEdldElu
c3QgeyBpbnN0SW5kZXgsIHByb3BlcnR5UmVnSW5kZXggfSk7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2sqLCB1
bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOworICAgICAgICB2b2lkIGZpbmFsaXplKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBi
b2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKQEAgLTI3NSw3ICsyNzYsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICBSZWdpc3RlcklEKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5k
ZXhSZWdpc3Rlci5nZXQoKTsgfQogCi0gICAgICAgIHZvaWQgZmluYWxpemUoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBVbmxpbmtlZENvZGVCbG9jayosIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNl
dCk7CisgICAgICAgIHZvaWQgZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvciosIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7CiAgICAg
ICAgIHZvaWQgYWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eUluZGV4
KSB7IG1fZ2V0SW5zdHMuYXBwZW5kKHsgaW5zdEluZGV4LCBwcm9wZXJ0eUluZGV4IH0pOyB9CiAK
ICAgICBwcml2YXRlOgpAQCAtMzY4LDcgKzM2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB1c2luZyBPcGNvZGVUcmFpdHMgPSBKU09wY29kZVRyYWl0czsKICAgICAgICAgdXNpbmcgT3Bj
b2RlSUQgPSA6OkpTQzo6T3Bjb2RlSUQ7CiAgICAgICAgIHVzaW5nIE9wTm9wID0gOjpKU0M6Ok9w
Tm9wOwotICAgICAgICB1c2luZyBDb2RlQmxvY2sgPSBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+
OworICAgICAgICB1c2luZyBDb2RlQmxvY2sgPSBzdGQ6OnVuaXF1ZV9wdHI8VW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3I+OwogICAgICAgICBzdGF0aWMgY29uc3RleHByIE9wY29kZUlEIG9wY29k
ZUZvckRpc2FibGluZ09wdGltaXphdGlvbnMgPSBvcF9lbmQ7CiAgICAgfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvckJh
c2VJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yQmFzZUlubGluZXMuaAppbmRleCBlMjMwNzE3ZGMyZGY4MGI2ZWE1ODIzMzZkMDE0
N2M1NTUzZjQ3ODQyLi4xYmQ5MjRmY2IwMDE4Nzg0YTZmODU4YmVmMWJiM2VmZTZjOGZiMDAxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yQmFzZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yQmFzZUlubGluZXMuaApAQCAtMTYxLDkgKzE2MSw5IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFRyYWl0cz4KIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yQmFz
ZTxUcmFpdHM+OjpuZXdSZWdpc3RlcigpCiB7CiAgICAgbV9jYWxsZWVMb2NhbHMuYXBwZW5kKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVlTG9jYWxzLnNpemUoKSkpOwotICAgIGludCBu
dW1DYWxsZWVMb2NhbHMgPSBzdGQ6Om1heDxpbnQ+KG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxv
Y2FscywgbV9jYWxsZWVMb2NhbHMuc2l6ZSgpKTsKKyAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzID0g
c3RkOjptYXg8aW50PihtX2NvZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIG1fY2FsbGVlTG9j
YWxzLnNpemUoKSk7CiAgICAgbnVtQ2FsbGVlTG9jYWxzID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBs
ZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIG51bUNhbGxlZUxvY2Fscyk7Ci0gICAgbV9j
b2RlQmxvY2stPm1fbnVtQ2FsbGVlTG9jYWxzID0gbnVtQ2FsbGVlTG9jYWxzOworICAgIG1fY29k
ZUJsb2NrLT5zZXROdW1DYWxsZWVMb2NhbHMobnVtQ2FsbGVlTG9jYWxzKTsKICAgICByZXR1cm4g
Jm1fY2FsbGVlTG9jYWxzLmxhc3QoKTsKIH0KIApAQCAtMTgxLDkgKzE4MSwxMCBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvckJhc2U8VHJhaXRzPjo6bmV3VGVtcG9yYXJ5KCkKIHRlbXBs
YXRlPHR5cGVuYW1lIFRyYWl0cz4KIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yQmFzZTxU
cmFpdHM+OjphZGRWYXIoKQogewotICAgICsrbV9jb2RlQmxvY2stPm1fbnVtVmFyczsKKyAgICBp
bnQgbnVtVmFycyA9IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7CisgICAgbV9jb2RlQmxvY2stPnNl
dE51bVZhcnMobnVtVmFycyArIDEpOwogICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IG5ld1JlZ2lz
dGVyKCk7Ci0gICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihyZXN1bHQtPmluZGV4KCkpLnRvTG9j
YWwoKSA9PSBtX2NvZGVCbG9jay0+bV9udW1WYXJzIC0gMSk7CisgICAgQVNTRVJUKFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHQtPmluZGV4KCkpLnRvTG9jYWwoKSA9PSBudW1WYXJzKTsKICAgICByZXN1
bHQtPnJlZigpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZnJlZSB0aGlzIHNsb3QuCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nh
Y2hlZFR5cGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVz
LmNwcAppbmRleCAyNzQ1MTIyNDAyNDM3ZWMzNTQ4OWFhMjQ5ZGUzYWJiMjZhMTIxYTk5Li5iYjVl
ODUyYjQxYzU0NzBjMWVlN2M1YTg3OGFjM2EzZTNlZDFhNGYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ2FjaGVkVHlwZXMuY3BwCkBAIC02MTEsNiArNjExLDE2IEBAIGNs
YXNzIENhY2hlZFZlY3RvciA6IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxWZWN0b3I8U291
cmNlVHlwZTxUPiwgSW5saW5lQ2FwCiAgICAgICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIs
IGJ1ZmZlcltpXSwgdmVjdG9yW2ldKTsKICAgICB9CiAKKyAgICB2b2lkIGVuY29kZShFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlVHlwZTxUPj4mIHZlY3RvcikK
KyAgICB7CisgICAgICAgIG1fc2l6ZSA9IHZlY3Rvci5zaXplKCk7CisgICAgICAgIGlmICghbV9z
aXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBUKiBidWZmZXIgPSB0aGlzLT50ZW1w
bGF0ZSBhbGxvY2F0ZTxUPihlbmNvZGVyLCBtX3NpemUpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zaXplOyArK2kpCisgICAgICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29k
ZXIsIGJ1ZmZlcltpXSwgdmVjdG9yW2ldKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmdzPgogICAgIHZvaWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxTb3Vy
Y2VUeXBlPFQ+LCBJbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCAxNiwgTWFsbG9jPiYg
dmVjdG9yLCBBcmdzLi4uIGFyZ3MpIGNvbnN0CiAgICAgewpAQCAtNjIyLDYgKzYzMiwxOCBAQCBj
bGFzcyBDYWNoZWRWZWN0b3IgOiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8VmVjdG9yPFNv
dXJjZVR5cGU8VD4sIElubGluZUNhcAogICAgICAgICAgICAgOjpKU0M6OmRlY29kZShkZWNvZGVy
LCBidWZmZXJbaV0sIHZlY3RvcltpXSwgYXJncy4uLik7CiAgICAgfQogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJncz4KKyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZWZD
b3VudGVkQXJyYXk8U291cmNlVHlwZTxUPj4mIHZlY3RvciwgQXJncy4uLiBhcmdzKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKCFtX3NpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHZlY3RvciA9IFJlZkNvdW50ZWRBcnJheTxTb3VyY2VUeXBlPFQ+PihtX3NpemUpOworICAgICAg
ICBjb25zdCBUKiBidWZmZXIgPSB0aGlzLT50ZW1wbGF0ZSBidWZmZXI8VD4oKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6
OmRlY29kZShkZWNvZGVyLCBidWZmZXJbaV0sIHZlY3RvcltpXSwgYXJncy4uLik7CisgICAgfQor
CisKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zaXplOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKaW5kZXggMmY0YjFjN2Rl
NmE4N2M3NDExZTg2ZTg3ZTdmMTkyNDczNTJjMGY4Yi4uN2YxNWU2MTc0ZDBkMGRkYTVkNjI5Mzhh
MGY4ZDdlYTlmM2QzODNiMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKQEAgLTcyLDYgKzcyLDkgQEAgY2xhc3MgRnVuY3Rpb25D
b2RlQmxvY2sgewogICAgIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIGNvbnN0YW50cygpIGNvbnN0
IHsgcmV0dXJuIG1fY29uc3RhbnRzOyB9CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGlu
c3RydWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuICptX2luc3RydWN0aW9uczsgfQogCisgICAgdm9p
ZCBzZXROdW1WYXJzKGludCBudW1WYXJzKSB7IG1fbnVtVmFycyA9IG51bVZhcnM7IH0KKyAgICB2
b2lkIHNldE51bUNhbGxlZUxvY2FscyhpbnQgbnVtQ2FsbGVlTG9jYWxzKSB7IG1fbnVtQ2FsbGVl
TG9jYWxzID0gbnVtQ2FsbGVlTG9jYWxzOyB9CisKICAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90
IGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3Rh
bnRzW3JlZy50b0NvbnN0YW50SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0
Q29uc3RhbnRUeXBlKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWZD
b3VudGVkQXJyYXkuaAppbmRleCBkMDc2NWRjMDZhYTI5NTQyZWQxYzM2NWJiYzg4Y2E3ZDUzMGFj
NTg1Li44ZWUyYjU1NGJlMTliODZiY2Y3ODUxODFjMWU2MzRiZTJkY2E5OWQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9S
ZWZDb3VudGVkQXJyYXkuaApAQCAtMTE1LDYgKzExNSwzMCBAQCBjbGFzcyBSZWZDb3VudGVkQXJy
YXkgewogICAgICAgICByZXR1cm4gYXNzaWduPFB0clRyYWl0cz4ob3RoZXIpOwogICAgIH0KIAor
ICAgIHRlbXBsYXRlPHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgorICAgIFJlZkNvdW50ZWRBcnJheSYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBpbmxp
bmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPiYgb3RoZXIpCisgICAgeworICAgICAgICBUKiBv
bGREYXRhID0gZGF0YSgpOworICAgICAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgUHRyVHJhaXRzOjpleGNoYW5nZShtX2RhdGEsIG51bGxwdHIpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIFQqIGRhdGEgPSAoc3RhdGljX2Nhc3Q8SGVhZGVyKj4oUmVmQ291bnRlZEFy
cmF5TWFsbG9jOjptYWxsb2MoSGVhZGVyOjpzaXplKCkgKyBzaXplb2YoVCkgKiBvdGhlci5zaXpl
KCkpKSktPnBheWxvYWQoKTsKKyAgICAgICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgICAg
ICBIZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5yZWZDb3VudCA9IDE7CisgICAgICAgICAgICBI
ZWFkZXI6OmZyb21QYXlsb2FkKGRhdGEpLT5sZW5ndGggPSBvdGhlci5zaXplKCk7CisgICAgICAg
ICAgICBBU1NFUlQoSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRhKS0+bGVuZ3RoID09IG90aGVyLnNp
emUoKSk7CisgICAgICAgICAgICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6dW5pbml0aWFsaXpl
ZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIuZW5kKCksIGRhdGEpOworICAgICAgICB9CisgICAg
ICAgIGlmICghb2xkRGF0YSkKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgaWYg
KC0tSGVhZGVyOjpmcm9tUGF5bG9hZChvbGREYXRhKS0+cmVmQ291bnQpCisgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+OjpkZXN0cnVjdChv
bGREYXRhLCBvbGREYXRhICsgSGVhZGVyOjpmcm9tUGF5bG9hZChvbGREYXRhKS0+bGVuZ3RoKTsK
KworICAgICAgICBSZWZDb3VudGVkQXJyYXlNYWxsb2M6OmZyZWUoSGVhZGVyOjpmcm9tUGF5bG9h
ZChvbGREYXRhKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB+UmVmQ291
bnRlZEFycmF5KCkKICAgICB7CiAgICAgICAgIGlmICghbV9kYXRhKQpAQCAtMTM5LDYgKzE2Myw4
IEBAIGNsYXNzIFJlZkNvdW50ZWRBcnJheSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgcmV0dXJuIEhlYWRlcjo6ZnJvbVBheWxvYWQoZGF0YSgpKS0+bGVuZ3RoOwogICAgIH0KKwor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHNpemUoKSA9PSAwOyB9CiAgICAgCiAg
ICAgc2l6ZV90IGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpICogc2l6ZW9mKFQpOyB9
CiAgICAgCkBAIC0xNzEsNiArMTk3LDExIEBAIGNsYXNzIFJlZkNvdW50ZWRBcnJheSB7CiAgICAg
VCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gYXQoaSk7IH0KICAgICBjb25zdCBUJiBv
cGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogCisgICAgVCYgZnJv
bnQoKSB7IHJldHVybiAoKnRoaXMpWzBdOyB9CisgICAgY29uc3QgVCYgZnJvbnQoKSBjb25zdCB7
IHJldHVybiAoKnRoaXMpWzBdOyB9CisgICAgVCYgbGFzdCgpIHsgcmV0dXJuICgqdGhpcylbc2l6
ZSgpIC0gMV07IH0KKyAgICBjb25zdCBUJiBsYXN0KCkgY29uc3QgeyByZXR1cm4gKCp0aGlzKVtz
aXplKCkgLSAxXTsgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUcmFpdHMgPSBQdHJU
cmFpdHM+CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZkNvdW50ZWRBcnJheTxULCBPdGhl
clRyYWl0cz4mIG90aGVyKSBjb25zdAogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389640</attachid>
            <date>2020-02-04 01:50:55 -0800</date>
            <delta_ts>2020-02-04 02:29:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207087-20200204015054.patch</filename>
            <type>text/plain</type>
            <size>98451</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1NjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
N2U0MjkzOWJmN2Q3MmU2N2ZiZWEzYmEyMWZiYmY4ZWEwMTEwZDA0Li40NDcyMDg0YTY4NGNhOTNj
MmE4OWZiMzIyOGI5ODkzODJiMzYxNjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODMgQEAKKzIwMjAtMDItMDQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBJbnRyb2R1Y2UgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3Ig
YW5kIHJlZHVjZSBzaXplb2YoVW5saW5rZWRDb2RlQmxvY2spCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwODcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGlsZSBVbmxpbmtlZENvZGVCbG9jayBpcyBp
bW11dGFibGUgb25jZSBpdCBpcyBjcmVhdGVkIGZyb20gQnl0ZWNvZGVHZW5lcmF0b3IsIGl0IGhh
cyBtYW55IG11dGFibGUgVmVjdG9ycy4KKyAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHdlIGFyZSB1
c2luZyBVbmxpbmtlZENvZGVCbG9jayBhcyBhIGJ1aWxkZXIgb2YgVW5saW5rZWRDb2RlQmxvY2sg
aXRzZWxmIHRvbyBpbiBCeXRlY29kZUdlbmVyYXRvci4KKyAgICAgICAgU2luY2UgVmVjdG9yIHRh
a2VzIDE2IGJ5dGVzIHRvIGFsbG93IGVmZmljaWVudCBleHBhbnNpb25zLCBpdCBpcyBuaWNlIGlm
IHdlIGNhbiB1c2UgUmVmQ291bnRlZEFycmF5IGluc3RlYWQgd2hlbgorICAgICAgICB3ZSBrbm93
IHRoaXMgVmVjdG9yIGlzIGltbXV0YWJsZS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCB3ZSBp
bnRyb2R1Y2UgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3Igd3JhcHBlci4gQnl0ZWNvZGVHZW5l
cmF0b3IsIEJ5dGVjb2RlUmV3cml0ZXIsIEJ5dGVjb2RlRHVtcGVyLAorICAgICAgICBhbmQgQnl0
ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24gaW50ZXJhY3Qgd2l0aCBVbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvciBpbnN0ZWFkIG9mIFVubGlua2VkQ29kZUJsb2NrLiBBbmQgVW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3IKKyAgICAgICAgd2lsbCBnZW5lcmF0ZSB0aGUgZmluYWxpemVkIFVubGlua2Vk
Q29kZUJsb2NrLiBUaGlzIGRlc2lnbiBhbGxvd3MgdXMgdG8gdXNlIFJlZkNvdW50ZWRBcnJheSBm
b3IgZGF0YSBpbiBVbmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAgd2hpY2ggaXMgKDEpIHNtYWxs
ZXIgYW5kICgyKSBkb2luZyBzaHJpbmtUb0ZpdCBvcGVyYXRpb24gd2hlbiBjcmVhdGluZyBpdCBm
cm9tIFZlY3Rvci4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZHVjZXMgc2l6ZW9mKFVubGlua2Vk
Q29kZUJsb2NrKSBmcm9tIDI1NiB0byAxNjgsIDg4IGJ5dGVzIHJlZHVjdGlvbi4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpjb21wdXRlKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29k
ZUR1bXBlci5jcHA6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRp
b24uY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6Qnl0ZWNv
ZGVHZW5lcmF0b3JpZmljYXRpb24pOgorICAgICAgICAoSlNDOjpHZW5lcmF0b3JMaXZlbmVzc0Fu
YWx5c2lzOjpydW4pOgorICAgICAgICAoSlNDOjpwZXJmb3JtR2VuZXJhdG9yaWZpY2F0aW9uKToK
KyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oOgorICAgICAg
ICAqIGJ5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVS
ZXdyaXRlcjo6Qnl0ZWNvZGVSZXdyaXRlcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRS
ZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpoYW5kbGVyRm9ySW5kZXgpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6Omluc2VydEJhc2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQ
cm9maWxlcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0
ZWNvZGUvSGFuZGxlckluZm8uaDoKKyAgICAgICAgKEpTQzo6SGFuZGxlckluZm9CYXNlOjpoYW5k
bGVyRm9ySW5kZXgpOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHA6
CisgICAgICAgIChKU0M6OmNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMpOgorICAgICAgICAoSlND
OjpyZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMpOgorICAgICAgICAoSlNDOjpmaW5kSnVtcFRh
cmdldHNGb3JJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvUHJlY2lzZUp1bXBUYXJn
ZXRzLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxvY2spOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpkdW1wRXhwcmVzc2lvblJhbmdlSW5mbyk6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZUluZGV4IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmhhbmRsZXJGb3JJbmRleCk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRFeHByZXNzaW9uSW5mbyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRUeXBlUHJvZmlsZXJFeHBy
ZXNzaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpz
ZXRJbnN0cnVjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
azo6YXBwbHlNb2RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6c2hyaW5rVG9GaXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6YWRkT3V0T2ZMaW5lSnVtcFRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OnNl
dE51bVBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVy
T2ZJZGVudGlmaWVycyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpp
ZGVudGlmaWVycyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpiaXRW
ZWN0b3IpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRSZWdpc3Rl
cnMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmNvbnN0
YW50SWRlbnRpZmllclNldHMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVt
YmVyT2ZKdW1wVGFyZ2V0cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
OjpudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mRnVuY3Rpb25EZWNscyk6CisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om9wUHJvZmlsZUNvbnRyb2xG
bG93Qnl0ZWNvZGVPZmZzZXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6YWRkUGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OmFkZElkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6YWRkQml0VmVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmFkZFNldENvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmFkZENvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmFkZEp1bXBUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6YWRkU3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRGdW5jdGlvbkRlY2wpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkRnVuY3Rpb25FeHBy
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEV4Y2VwdGlv
bkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRk
T3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrOjpyZXBsYWNlT3V0T2ZMaW5lSnVtcFRhcmdldHMpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpnZXRMaW5l
QW5kQ29sdW1uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3I6OmFkZEV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3I6OmFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmhhbmRsZXJGb3JCeXRlY29kZUluZGV4KToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmhhbmRsZXJGb3JJbmRleCk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjphcHBseU1vZGlmaWNhdGlv
bik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjphZGRPdXRPZkxp
bmVKdW1wVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6
Om91dE9mTGluZUp1bXBPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvcjo6ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yOjp2bSk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJs
b2NrR2VuZXJhdG9yOjppc0NvbnN0cnVjdG9yIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmNvbnN0cnVjdG9yS2luZCBjb25zdCk6CisgICAgICAgIChK
U0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpzdXBlckJpbmRpbmcgY29uc3QpOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c2NyaXB0TW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpuZWVkc0NsYXNzRmll
bGRJbml0aWFsaXplciBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yOjppc1N0cmljdE1vZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvcjo6dXNlc0V2YWwgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvcjo6cGFyc2VNb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmlzQXJyb3dGdW5jdGlvbik6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpkZXJpdmVkQ29udGV4dFR5cGUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6ZXZhbENvbnRleHRUeXBlIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmlzQXJyb3dG
dW5jdGlvbkNvbnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvcjo6aXNDbGFzc0NvbnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvcjo6bnVtQ2FsbGVlTG9jYWxzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bVZhcnMgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6bnVtUGFyYW1ldGVycyBjb25zdCk6CisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjp0aGlzUmVnaXN0ZXIgY29uc3Qp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c2NvcGVSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjp3YXND
b21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3I6Omhhc0NoZWNrcG9pbnRzIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Omhhc1RhaWxDYWxscyBjb25zdCk6CisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpzZXRIYXNDaGVja3BvaW50cyk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpzZXRIYXNUYWlsQ2Fs
bHMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c2V0TnVtQ2Fs
bGVlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OnNl
dE51bVZhcnMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c2V0
VGhpc1JlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6
OnNldFNjb3BlUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvcjo6c2V0TnVtUGFyYW1ldGVycyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yOjptZXRhZGF0YSk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yOjphZGRPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bWJlck9mSnVtcFRhcmdldHMgY29u
c3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkSnVtcFRh
cmdldCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpqdW1wVGFy
Z2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Omxh
c3RKdW1wVGFyZ2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3I6Om51bWJlck9mU3dpdGNoSnVtcFRhYmxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjphZGRTd2l0Y2hKdW1wVGFibGUpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c3dpdGNoSnVtcFRhYmxlKToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bWJlck9mU3RyaW5nU3dpdGNo
SnVtcFRhYmxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yOjphZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvcjo6c3RyaW5nU3dpdGNoSnVtcFRhYmxlKToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMgY29u
c3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6ZXhjZXB0aW9u
SGFuZGxlcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjphZGRF
eGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3I6OmJpdFZlY3Rvcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
OjphZGRCaXRWZWN0b3IpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
cjo6bnVtYmVyT2ZDb25zdGFudElkZW50aWZpZXJTZXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmNvbnN0YW50SWRlbnRpZmllclNldHMpOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkU2V0Q29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6Y29uc3RhbnRSZWdpc3Rl
ciBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpjb25z
dGFudFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
OjpnZXRDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yOjpjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkRnVuY3Rpb25EZWNsKToKKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmFkZEZ1bmN0aW9uRXhwcik6CisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpudW1iZXJPZklkZW50aWZpZXJz
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmlkZW50
aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6
YWRkSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
OjpvdXRPZkxpbmVKdW1wT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3I6OnJlcGxhY2VPdXRPZkxpbmVKdW1wVGFyZ2V0cyk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjptZXRhZGF0YVNpemVJbkJ5dGVzKToKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
aW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZSk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4
dDo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmZpbmFs
aXplKToKKyAgICAgICAgKEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6ZmluYWxpemUpOgorICAg
ICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvckJhc2VJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yQmFzZTxUcmFpdHM+OjpuZXdSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yQmFzZTxUcmFpdHM+OjphZGRWYXIpOgorICAgICAgICAqIHJ1bnRp
bWUvQ2FjaGVkVHlwZXMuY3BwOgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmVuY29kZSk6
CisgICAgICAgIChKU0M6OkNhY2hlZFZlY3Rvcjo6ZGVjb2RlIGNvbnN0KToKKyAgICAgICAgKiB3
YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlv
bkNvZGVCbG9jazo6c2V0TnVtVmFycyk6CisgICAgICAgIChKU0M6Oldhc206OkZ1bmN0aW9uQ29k
ZUJsb2NrOjpzZXROdW1DYWxsZWVMb2NhbHMpOgorCiAyMDIwLTAyLTAzICBZdXN1a2UgU3V6dWtp
ICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gVXNlIFBhY2tlZFB0ciBmb3Ig
VmFyaWFibGVFbnZpcm9ubWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA4OTMyMzU3YTQ5MTVmZWM3N2I0ZjNhZDNhYzExZjkz
YjJjYzE0YTc3Li43MmExMThjOGE5ZTYwZGFkYWM4YzJhMGMwYjNhY2EzY2JkMzQyMDVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIwIEBACisyMDIwLTAyLTA0ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBs
ZS5jb20+CisKKyAgICAgICAgW0pTQ10gSW50cm9kdWNlIFVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yIGFuZCByZWR1Y2Ugc2l6ZW9mKFVubGlua2VkQ29kZUJsb2NrKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDg3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG1vcmUgdXNlZnVsIG1ldGhvZHMg
Zm9yIFJlZkNvdW50ZWRBcnJheS4KKworICAgICAgICAqIHd0Zi9SZWZDb3VudGVkQXJyYXkuaDoK
KyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5OjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RG
OjpSZWZDb3VudGVkQXJyYXk6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV1RGOjpSZWZDb3Vu
dGVkQXJyYXk6OmZyb250KToKKyAgICAgICAgKFdURjo6UmVmQ291bnRlZEFycmF5Ojpmcm9udCBj
b25zdCk6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6bGFzdCk6CisgICAgICAgIChX
VEY6OlJlZkNvdW50ZWRBcnJheTo6bGFzdCBjb25zdCk6CisKIDIwMjAtMDItMDMgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZWR1Y2Ugc2l6
ZSBvZiBIYXNoTWFwIGFuZCBIYXNoU2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGI0YTUxNGM1N2Q3MjlkMzU2YWNkNTU3NjNkNWJmYjc4ODg1ZjQ0OGIuLjVjYTBjODYwMmJlMTRj
NWUzYjk5YjNlMjExMmYyZDI4ZGRkOTFiYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xNzg4LDYgKzE3ODgsNyBAQAogCQlFMzI4REFFOTFEMzhEMDA1MDAxQTI1MjkgLyogQnl0
ZWNvZGVHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTNEMjY0MjgxRDM4QzA0MjAwMEJFMTc0IC8qIEJ5dGVjb2RlR3JhcGguaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzI4REFFQjFEMzhEMDA1
MDAxQTI1MjkgLyogQnl0ZWNvZGVSZXdyaXRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTNEMjY0MkExRDM4QzA0MjAwMEJFMTc0IC8qIEJ5dGVjb2Rl
UmV3cml0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFMzJBQjI0NDFEQ0Q3NUY0MDBENzUzM0EgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzgwQTc2QjFE
Q0Q3MTk1MDAwRjg5RTYgLyogTWFjcm9Bc3NlbWJsZXJIZWxwZXJzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTMyQzNDNjkyM0U5NEMxRTAwQkM5
N0MwIC8qIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzJDM0M2ODIzRTk0QzFFMDBCQzk3QzAgLyogVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaCAqLzsgfTsKIAkJRTMzMDk1REQyMzIxMEExQjAwRUI3
ODU2IC8qIEpTSW50ZXJuYWxGaWVsZE9iamVjdEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMzA5NURDMjMyMTBBMTQwMEVCNzg1NiAvKiBKU0lu
dGVybmFsRmllbGRPYmplY3RJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTMzNENCQjUyMUZEOTZBOTAwMEVCMTc4IC8qIFJlZ0V4cEdsb2Jh
bERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
MzRDQkIzMjFGRDk2QTkwMDBFQjE3OCAvKiBSZWdFeHBHbG9iYWxEYXRhLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTMzNjM3QTYxQjYzMjIwMjAw
RUUwODQwIC8qIFJlZmxlY3RPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzMzYzN0E0MUI2MzIyMDIwMEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ5
MDgsNiArNDkwOSw3IEBACiAJCUUzMjZDNDk2MUVDQkVGNTcwMEE5QTkwNSAvKiBDbGFzc0luZm8u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xhc3NJbmZvLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyODJCQjkxRkU5MzBBMzAwRURBRjcxIC8q
IFlhcnJFcnJvckNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
WWFyckVycm9yQ29kZS5jcHA7IHBhdGggPSB5YXJyL1lhcnJFcnJvckNvZGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMzI4MkJCQTFGRTkzMEE0MDBFREFGNzEgLyogWWFyckVy
cm9yQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyRXJyb3JDb2Rl
Lmg7IHBhdGggPSB5YXJyL1lhcnJFcnJvckNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTMyQzNDNjgyM0U5NEMxRTAwQkM5N0MwIC8qIFVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMzA1RkFGMjBCMEY3
ODcwMENFQjgyQiAvKiBJbkJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5CeUlkU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMzA1
RkIwMjBCMEY3ODcwMENFQjgyQiAvKiBJbkJ5SWRWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluQnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMzMwNUZCMTIwQjBGNzg4MDBDRUI4MkIgLyogSW5CeUlkVmFyaWFudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbkJ5SWRWYXJpYW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTU2LDYgKzQ5NTgsNyBAQAogCQlFMzVFMDM2MTFC
N0FCNDg1MDA3M0FEMkEgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uT2JqZWN0LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzYzN0VFNzIzNkU1
NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMaW5rVGltZUNvbnN0YW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUzNjM3RUU4MjM2RTU2QjAwMDk2QkQwQSAvKiBMaW5rVGltZUNvbnN0YW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpbmtUaW1lQ29uc3RhbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMzZCNDgwMTIzRTk1NzM4MDBFNEE2NkUgLyog
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MzZCNzY2RTIyRjhENjExMDBEMDk4MTggLyogV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTM2Qjc2NkYyMkY4RDYxMTAwRDA5ODE4IC8qIFdhc21PTUdGb3JP
U1JFbnRyeVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzZDQzk0NjIwODYzMTRGMDA1MUZGRDYgLyog
V2FzbUNyZWF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNt
Q3JlYXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MzYwLDYgKzgz
NjMsOCBAQAogCQkJCTBGMkQ0REU3MTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24uaCAq
LywKIAkJCQlBNzlFNzgxRTE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2suY3Bw
ICovLAogCQkJCUE3OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5o
ICovLAorCQkJCUUzNkI0ODAxMjNFOTU3MzgwMEU0QTY2RSAvKiBVbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvci5jcHAgKi8sCisJCQkJRTMyQzNDNjgyM0U5NEMxRTAwQkM5N0MwIC8qIFVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yLmggKi8sCiAJCQkJMTRBRDkxMjgxRENBQUFCMDAwMTRGOUZFIC8q
IFVubGlua2VkRXZhbENvZGVCbG9jay5jcHAgKi8sCiAJCQkJMTRBRDkxMUUxRENBOUZBNDAwMTRG
OUZFIC8qIFVubGlua2VkRXZhbENvZGVCbG9jay5oICovLAogCQkJCTE0QUQ5MTJCMURDQUFBQjAw
MDE0RjlGRSAvKiBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmNwcCAqLywKQEAgLTkxNTAsNiAr
OTE1NSw3IEBACiAJCQkJQTUzMjQzOTgxODU2QTQ4OTAwMkVENjkyIC8qIENvbWJpbmVkRG9tYWlu
cy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYwIC8qIENv
bW1vbklkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1
REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKKwkJCQkzM0E5MjBCRDIz
REEyQzZEMDAwRUJBRjAgLyogQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdFNUEzQTgxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjRGMTFFODIwOUJDREFCMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1p
bmdTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQ0UxMkExRkFGQTg1RjAwNkYzOTAxIC8q
IENvbXBsZXRlU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLApAQCAtOTM4Niw3ICs5MzkyLDYgQEAK
IAkJCQkwRjFGQjM5NzFFMUFGN0UzMDBBOUJFNTAgLyogREZHV29ya2xpc3RJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkUwNTAxODFBQTkwOTExMDBEMzNCMzMgLyogRGlyZWN0QXJndW1l
bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxNjFBQTkwOTExMDBEMzNCMzMgLyogRGly
ZWN0QXJndW1lbnRzT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKLQkJCQkzM0E5MjBCRDIzREEyQzZE
MDAwRUJBRjAgLyogQ29tbW9uU2xvd1BhdGhzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTY5QTA3OTgwRUQxRDNBRTAwRjFGNjgxIC8qIERpcmVjdEV2YWxDb2RlQ2FjaGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0Mzg2QTc1MURENjk4OTUwMDg2NTJDNCAvKiBEaXJlY3RFdmFsRXhlY3V0
YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOEYxQzBDRDY4NTAwMDUyQkZBIC8qIERp
c2FsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDI0
OSw2ICsxMDI1NCw3IEBACiAJCQkJQTdBOEFGM0YxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4QXJy
YXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjQwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50
OENsYW1wZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCNjAxODIxNjM5RkQyQTAwMzcy
QkEzIC8qIFVubGlua2VkQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzJDM0M2OTIz
RTk0QzFFMDBCQzk3QzAgLyogVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0QUQ5MTI0MURDQTlGQTQwMDE0RjlGRSAvKiBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QUQ5MTIzMURDQTlGQTQwMDE0RjlGRSAvKiBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE0MkU1MTFCNzk2
RUNFMDBGNEJGNEIgLyogVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNjYmY0ODcwMDc3MWQxNzAyNzAzYTdh
MDc3ZTVmNDBhZWFmZjQ2ZmMuLjc2ZjFjNjk0ODVjNmZjYmVlNDg3ZTVhYzk4NmNhNDYzNjM1M2Fl
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTI3NSw2ICsyNzUsNyBAQCBieXRl
Y29kZS9TdXBlclNhbXBsZXIuY3BwCiBieXRlY29kZS9Ub1RoaXNTdGF0dXMuY3BwCiBieXRlY29k
ZS9UcmFja2VkUmVmZXJlbmNlcy5jcHAKIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAor
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuY3BwCiBieXRlY29kZS9Vbmxpbmtl
ZEV2YWxDb2RlQmxvY2suY3BwCiBieXRlY29kZS9VbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrLmNw
cAogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwCmluZGV4
IDY2ZDExMmEzYjQ1NTk1YmZiYWUxOTUxYWRiMDBkYmE2YWE5NGJhOGIuLjhkMTg2YWY0ZThiODY5
NzBkOTVjNzRlZGU5MTYxZjg5ZDlkMzg2NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwCkBAIC0zMCw2ICszMCw3IEBA
CiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0cy5oIgorI2luY2x1ZGUgIlVubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0yMjAsNyArMjIxLDcg
QEAgYXV0byBCeXRlY29kZUJhc2ljQmxvY2s6OmNvbXB1dGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJgogICAgIHJldHVybiBjb21wdXRlSW1wbChjb2RlQmxv
Y2ssIGluc3RydWN0aW9ucyk7CiB9CiAKLWF1dG8gQnl0ZWNvZGVCYXNpY0Jsb2NrOjpjb21wdXRl
KFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBp
bnN0cnVjdGlvbnMpIC0+IEJhc2ljQmxvY2tWZWN0b3IKK2F1dG8gQnl0ZWNvZGVCYXNpY0Jsb2Nr
Ojpjb21wdXRlKFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMpIC0+IEJhc2ljQmxvY2tWZWN0b3IKIHsKICAg
ICByZXR1cm4gY29tcHV0ZUltcGwoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCmlu
ZGV4IDEyMWNlODlhOWQzY2U0ZDI4YmUxMmQ5NzBkYmVlOTI0MTcwNzg4N2YuLmQ0ZjUzM2JjOGJh
MGFjNTY4YmE4NjgxNzMzODdkMDM1NDdhYmQzOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgKQEAgLTM2LDYgKzM2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBCeXRlY29kZUdyYXBoOwogY2xhc3MgQ29kZUJsb2NrOwog
Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2s7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
cjsKIHN0cnVjdCBJbnN0cnVjdGlvbjsKIAogREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lE
RU5USUZJRVIoQnl0ZWNvZGVCYXNpY0Jsb2NrKTsKQEAgLTcyLDcgKzczLDcgQEAgY2xhc3MgQnl0
ZWNvZGVCYXNpY0Jsb2NrIHsKIHByaXZhdGU6CiAgICAgLy8gT25seSBjYWxsZWQgZnJvbSBCeXRl
Y29kZUdyYXBoLgogICAgIHN0YXRpYyBCYXNpY0Jsb2NrVmVjdG9yIGNvbXB1dGUoQ29kZUJsb2Nr
KiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucyk7Ci0gICAgc3RhdGljIEJh
c2ljQmxvY2tWZWN0b3IgY29tcHV0ZShVbmxpbmtlZENvZGVCbG9jayosIGNvbnN0IEluc3RydWN0
aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMpOworICAgIHN0YXRpYyBCYXNpY0Jsb2NrVmVjdG9yIGNv
bXB1dGUoVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVh
bSYgaW5zdHJ1Y3Rpb25zKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaz4gc3RhdGljIEJh
c2ljQmxvY2tWZWN0b3IgY29tcHV0ZUltcGwoQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucyk7CiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcApp
bmRleCA4MzY1MTE1ZjQyMTc5MWE1YzY2NDgzYTVhNzkwNWNhZTVjMGVlM2UxLi5kMzcyMzZmNDBh
YTg5OTEyN2M3NDllYmRiOTg2OTZjNzc4NWQ4Y2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAKQEAgLTQwLDcgKzQwLDcgQEAKICNp
bmNsdWRlICJQdXRCeUlkRmxhZ3MuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiVG9UaGlzU3RhdHVzLmgiCi0jaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIK
KyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIlVubGlu
a2VkTWV0YWRhdGFUYWJsZUlubGluZXMuaCIKICNpbmNsdWRlICJXYXNtRnVuY3Rpb25Db2RlQmxv
Y2suaCIKICNpbmNsdWRlICJXYXNtR2VuZXJhdG9yVHJhaXRzLmgiCkBAIC0yNzAsNyArMjcwLDcg
QEAgdm9pZCBDb2RlQmxvY2tCeXRlY29kZUR1bXBlcjxCbG9jaz46OmR1bXBCbG9jayhCbG9jayog
YmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3QKIH0KIAogdGVtcGxhdGUgY2xhc3MgQnl0ZWNvZGVE
dW1wZXI8Q29kZUJsb2NrPjsKLXRlbXBsYXRlIGNsYXNzIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVy
PFVubGlua2VkQ29kZUJsb2NrPjsKK3RlbXBsYXRlIGNsYXNzIENvZGVCbG9ja0J5dGVjb2RlRHVt
cGVyPFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yPjsKIHRlbXBsYXRlIGNsYXNzIENvZGVCbG9j
a0J5dGVjb2RlRHVtcGVyPENvZGVCbG9jaz47CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
R2VuZXJhdG9yaWZpY2F0aW9uLmNwcAppbmRleCBiMGI1NzBlOTAyMDk2YzI5MjUxZmI2ZmE0NDdj
MWFlMmJmZDVlODI2Li44MTc4NTFjYmE0ZDhmMjRkNTIxMWQxYTQ5ZmM1NDJjNTRlOTcxMGY5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0
b3JpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJK
U0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkxhYmVsLmgiCiAjaW5jbHVkZSAiU3Ryb25nSW5saW5l
cy5oIgotI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJVbmxpbmtlZE1ldGFkYXRhVGFibGVJbmxp
bmVzLmgiCiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKQEAgLTY0LDcgKzY0LDcgQEAgY2xh
c3MgQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24gewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9pbml0aWFsVmFsdWU7CiAgICAgfTsKIAotICAgIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9u
KEJ5dGVjb2RlR2VuZXJhdG9yJiBieXRlY29kZUdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImIGluc3RydWN0aW9ucywgU3ltYm9s
VGFibGUqIGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUsIGludCBnZW5lcmF0b3JGcmFtZVN5bWJv
bFRhYmxlSW5kZXgpCisgICAgQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24oQnl0ZWNvZGVHZW5l
cmF0b3ImIGJ5dGVjb2RlR2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29k
ZUJsb2NrLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYgaW5zdHJ1Y3Rpb25zLCBTeW1ib2xUYWJs
ZSogZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZSwgaW50IGdlbmVyYXRvckZyYW1lU3ltYm9sVGFi
bGVJbmRleCkKICAgICAgICAgOiBtX2J5dGVjb2RlR2VuZXJhdG9yKGJ5dGVjb2RlR2VuZXJhdG9y
KQogICAgICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAgICAgLCBtX2luc3RydWN0
aW9ucyhpbnN0cnVjdGlvbnMpCkBAIC0xNzQsNyArMTc0LDcgQEAgY2xhc3MgQnl0ZWNvZGVHZW5l
cmF0b3JpZmljYXRpb24gewogICAgIEJ5dGVjb2RlR2VuZXJhdG9yJiBtX2J5dGVjb2RlR2VuZXJh
dG9yOwogICAgIEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgbV9lbnRlclBvaW50OwogICAgIE9w
dGlvbmFsPEdlbmVyYXRvckZyYW1lRGF0YT4gbV9nZW5lcmF0b3JGcmFtZURhdGE7Ci0gICAgVW5s
aW5rZWRDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIFVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yKiBtX2NvZGVCbG9jazsKICAgICBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYgbV9pbnN0cnVj
dGlvbnM7CiAgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwogICAgIFZlY3RvcjxPcHRpb25hbDxT
dG9yYWdlPj4gbV9zdG9yYWdlczsKQEAgLTE5MCw3ICsxOTAsNyBAQCBjbGFzcyBHZW5lcmF0b3JM
aXZlbmVzc0FuYWx5c2lzIDogcHVibGljIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbiB7CiAg
ICAgewogICAgIH0KIAotICAgIHZvaWQgcnVuKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IEluc3RydWN0aW9uU3RyZWFtV3JpdGVyJiBpbnN0cnVjdGlvbnMpCisgICAgdm9pZCBydW4oVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0
ZXImIGluc3RydWN0aW9ucykKICAgICB7CiAgICAgICAgIC8vIFBlcmZvcm0gbW9kaWZpZWQgbGl2
ZW5lc3MgYW5hbHlzaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGxvY2FscyBhcmUgbGl2ZSBhdCB0aGUg
bWVyZ2UgcG9pbnRzLgogICAgICAgICAvLyBUaGlzIHByb2R1Y2VzIHRoZSBjb25zZXJ2YXRpdmUg
cmVzdWx0cyBmb3IgdGhlIHF1ZXN0aW9uLCAid2hpY2ggdmFyaWFibGVzIHNob3VsZCBiZSBzYXZl
ZCBhbmQgcmVzdW1lZD8iLgpAQCAtMjk1LDEwICsyOTUsMTAgQEAgdm9pZCBCeXRlY29kZUdlbmVy
YXRvcmlmaWNhdGlvbjo6cnVuKCkKICAgICByZXdyaXRlci5leGVjdXRlKCk7CiB9CiAKLXZvaWQg
cGVyZm9ybUdlbmVyYXRvcmlmaWNhdGlvbihCeXRlY29kZUdlbmVyYXRvciYgYnl0ZWNvZGVHZW5l
cmF0b3IsIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtV3Jp
dGVyJiBpbnN0cnVjdGlvbnMsIFN5bWJvbFRhYmxlKiBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxl
LCBpbnQgZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUluZGV4KQordm9pZCBwZXJmb3JtR2VuZXJh
dG9yaWZpY2F0aW9uKEJ5dGVjb2RlR2VuZXJhdG9yJiBieXRlY29kZUdlbmVyYXRvciwgVW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXIm
IGluc3RydWN0aW9ucywgU3ltYm9sVGFibGUqIGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUsIGlu
dCBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlSW5kZXgpCiB7CiAgICAgaWYgKFVOTElLRUxZKE9w
dGlvbnM6OmR1bXBCeXRlY29kZXNCZWZvcmVHZW5lcmF0b3JpZmljYXRpb24oKSkpCi0gICAgICAg
IENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPFVubGlua2VkQ29kZUJsb2NrPjo6ZHVtcEJsb2NrKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICBDb2RlQmxv
Y2tCeXRlY29kZUR1bXBlcjxVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcj46OmR1bXBCbG9jayhj
b2RlQmxvY2ssIGluc3RydWN0aW9ucywgV1RGOjpkYXRhRmlsZSgpKTsKIAogICAgIEJ5dGVjb2Rl
R2VuZXJhdG9yaWZpY2F0aW9uIHBhc3MoYnl0ZWNvZGVHZW5lcmF0b3IsIGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25zLCBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLCBnZW5lcmF0b3JGcmFtZVN5bWJv
bFRhYmxlSW5kZXgpOwogICAgIHBhc3MucnVuKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oCmluZGV4
IDAxZjA5NmUwNDFiZmRiMjVmNmZhZTVkZGMwNjE0ZWY3YTZmMDYzMDYuLjgzMDFkNDA1N2EzM2Qy
MWJhMzhjMzhjOWM5MjBmNTQ5MzRkYmJiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oCkBAIC0z
MSw5ICszMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQnl0ZWNvZGVHZW5lcmF0b3I7CiBj
bGFzcyBJbnN0cnVjdGlvblN0cmVhbVdyaXRlcjsKIGNsYXNzIFN5bWJvbFRhYmxlOwotY2xhc3Mg
VW5saW5rZWRDb2RlQmxvY2s7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNs
YXNzIFN5bWJvbFRhYmxlOwogCi12b2lkIHBlcmZvcm1HZW5lcmF0b3JpZmljYXRpb24oQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBVbmxpbmtlZENvZGVCbG9jayosIEluc3RydWN0aW9uU3RyZWFtV3JpdGVy
JiwgU3ltYm9sVGFibGUqIGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUsIGludCBnZW5lcmF0b3JG
cmFtZVN5bWJvbFRhYmxlSW5kZXgpOwordm9pZCBwZXJmb3JtR2VuZXJhdG9yaWZpY2F0aW9uKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCBJbnN0cnVjdGlv
blN0cmVhbVdyaXRlciYsIFN5bWJvbFRhYmxlKiBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLCBp
bnQgZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUluZGV4KTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVSZXdy
aXRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIu
aAppbmRleCBlMjYxNjU0YjI0ZDM5OTEzM2M5ZjkxMTczZGFiNzM0OTkxYjQwNmEzLi44OTBhYjIz
YzAwMGRhZGJhYWQ4ZGI0YzYzZWVlMjVhZTU1YjhkYjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVJld3JpdGVyLmgKQEAgLTE3Myw3ICsxNzMsNyBA
QCBXVEZfTUFLRV9OT05DT1BZQUJMRShCeXRlY29kZVJld3JpdGVyKTsKICAgICAgICAgSW5jbHVk
ZUJyYW5jaCYgbV9pbmNsdWRlQnJhbmNoOwogICAgIH07CiAKLSAgICBCeXRlY29kZVJld3JpdGVy
KEJ5dGVjb2RlR2VuZXJhdG9yJiBieXRlY29kZUdlbmVyYXRvciwgQnl0ZWNvZGVHcmFwaCYgZ3Jh
cGgsIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtV3JpdGVy
JiB3cml0ZXIpCisgICAgQnl0ZWNvZGVSZXdyaXRlcihCeXRlY29kZUdlbmVyYXRvciYgYnl0ZWNv
ZGVHZW5lcmF0b3IsIEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvciogY29kZUJsb2NrLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYgd3JpdGVyKQogICAgICAg
ICA6IG1fYnl0ZWNvZGVHZW5lcmF0b3IoYnl0ZWNvZGVHZW5lcmF0b3IpCiAgICAgICAgICwgbV9n
cmFwaChncmFwaCkKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCkBAIC0yMjcsNyAr
MjI3LDcgQEAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVSZXdyaXRlcik7CiBwcml2YXRl
OgogICAgIHZvaWQgaW5zZXJ0SW1wbChJbnNlcnRpb25Qb2ludCwgSW5jbHVkZUJyYW5jaCwgSW5z
dHJ1Y3Rpb25TdHJlYW1Xcml0ZXImJiBmcmFnbWVudCk7CiAKLSAgICBmcmllbmQgY2xhc3MgVW5s
aW5rZWRDb2RlQmxvY2s7CisgICAgZnJpZW5kIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yOwogICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oKTsKICAgICB2b2lkIGFkanVzdEp1bXBU
YXJnZXRzSW5GcmFnbWVudCh1bnNpZ25lZCBmaW5hbE9mZnNldCwgSW5zZXJ0aW9uJik7CiAKQEAg
LTIzNiw3ICsyMzYsNyBAQCBXVEZfTUFLRV9OT05DT1BZQUJMRShCeXRlY29kZVJld3JpdGVyKTsK
IAogICAgIEJ5dGVjb2RlR2VuZXJhdG9yJiBtX2J5dGVjb2RlR2VuZXJhdG9yOwogICAgIEJ5dGVj
b2RlR3JhcGgmIG1fZ3JhcGg7Ci0gICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwor
ICAgIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBtX2NvZGVCbG9jazsKICAgICBJbnN0cnVj
dGlvblN0cmVhbVdyaXRlciYgbV93cml0ZXI7CiAgICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9p
bnNlcnRpb25zOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKaW5kZXggOTY3NTkxZGEzZjUyNDI0NzEzY2I4YjM3ODY1MDNiNGJmM2M4MDFjMi4uNWY1
MWU3YTE0ODI4NDJkY2E0Nzk2NTljMTY1ODBkYzg2OTMwNzIzNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTg2Niw3ICs4NjYsNyBAQCBDb2Rl
QmxvY2s6On5Db2RlQmxvY2soKQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKLXZvaWQgQ29k
ZUJsb2NrOjpzZXRDb25zdGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBW
ZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpCit2b2lkIENvZGVC
bG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiB2bSwgY29uc3QgUmVm
Q291bnRlZEFycmF5PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3RhbnRzKQogewog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CkBAIC04ODgsNyArODg4
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhW
TSYgdm0sIGNvbnN0IFZlY3RvcjxDb25zdGFudEkKICAgICB9CiB9CiAKLXZvaWQgQ29kZUJsb2Nr
OjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+
PiYgY29uc3RhbnRzLCBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3JpcHRFeGVjdXRhYmxlKiB0b3BMZXZl
bEV4ZWN1dGFibGUpCit2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3Qg
UmVmQ291bnRlZEFycmF5PFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3Qg
UmVmQ291bnRlZEFycmF5PFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJj
ZUNvZGVSZXByZXNlbnRhdGlvbiwgU2NyaXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxl
KQogewogICAgIFZNJiB2bSA9ICptX3ZtOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKQEAgLTg5OSwxMCArODk5LDEzIEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRDb25z
dGFudFJlZ2lzdGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3Rh
CiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7CiAgICAg
ICAgIG1fY29uc3RhbnRSZWdpc3RlcnMucmVzaXplVG9GaXQoY291bnQpOworICAgICAgICBtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5yZXNpemVUb0ZpdChjb3VudCk7CiAgICAg
fQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICBKU1Zh
bHVlIGNvbnN0YW50ID0gY29uc3RhbnRzW2ldLmdldCgpOwotICAgICAgICBzd2l0Y2ggKGNvbnN0
YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpXSkgeworICAgICAgICBTb3VyY2VDb2RlUmVw
cmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24gPSBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb25baV07CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uW2ld
ID0gcmVwcmVzZW50YXRpb247CisgICAgICAgIHN3aXRjaCAocmVwcmVzZW50YXRpb24pIHsKICAg
ICAgICAgY2FzZSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQ6CiAg
ICAgICAgICAgICBjb25zdGFudCA9IGdsb2JhbE9iamVjdC0+bGlua1RpbWVDb25zdGFudChzdGF0
aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50Pihjb25zdGFudC5hc0ludDMyQXNBbnlJbnQoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC05MzQsOCArOTM3LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnNl
dENvbnN0YW50UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBj
b25zdGEKICAgICAgICAgfQogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCh2bSwg
dGhpcywgY29uc3RhbnQpOwogICAgIH0KLQotICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uID0gY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwogfQogCiB2b2lk
IENvZGVCbG9jazo6c2V0QWx0ZXJuYXRpdmUoVk0mIHZtLCBDb2RlQmxvY2sqIGFsdGVybmF0aXZl
KQpAQCAtMTgwOCw3ICsxODA5LDcgQEAgSGFuZGxlckluZm8qIENvZGVCbG9jazo6aGFuZGxlckZv
ckluZGV4KHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWQKIHsKICAgICBp
ZiAoIW1fcmFyZURhdGEpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBIYW5kbGVySW5m
bzo6aGFuZGxlckZvckluZGV4KG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4
LCByZXF1aXJlZEhhbmRsZXIpOworICAgIHJldHVybiBIYW5kbGVySW5mbzo6aGFuZGxlckZvcklu
ZGV4PEhhbmRsZXJJbmZvPihtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLCBpbmRleCwg
cmVxdWlyZWRIYW5kbGVyKTsKIH0KIAogRGlzcG9zYWJsZUNhbGxTaXRlSW5kZXggQ29kZUJsb2Nr
OjpuZXdFeGNlcHRpb25IYW5kbGluZ0NhbGxTaXRlSW5kZXgoQ2FsbFNpdGVJbmRleCBvcmlnaW5h
bENhbGxTaXRlKQpAQCAtMzE5NSw3ICszMTk2LDcgQEAgdm9pZCBDb2RlQmxvY2s6Omluc2VydEJh
c2ljQmxvY2tCb3VuZGFyaWVzRm9yQ29udHJvbEZsb3dQcm9maWxlcigpCiB7CiAgICAgaWYgKCF1
bmxpbmtlZENvZGVCbG9jaygpLT5oYXNPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0
cygpKQogICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFt
OjpPZmZzZXQ+JiBieXRlY29kZU9mZnNldHMgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5vcFByb2Zp
bGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cygpOworICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJh
eTxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiYgYnl0ZWNvZGVPZmZzZXRzID0gdW5saW5rZWRD
b2RlQmxvY2soKS0+b3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMCwgb2Zmc2V0c0xlbmd0aCA9IGJ5dGVjb2RlT2Zmc2V0cy5zaXplKCk7
IGkgPCBvZmZzZXRzTGVuZ3RoOyBpKyspIHsKICAgICAgICAgLy8gQmVjYXVzZSBvcF9wcm9maWxl
X2NvbnRyb2xfZmxvdyBpcyBlbWl0dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgYmFzaWMg
YmxvY2ssIGZpbmRpbmcgCiAgICAgICAgIC8vIHRoZSBuZXh0IG9wX3Byb2ZpbGVfY29udHJvbF9m
bG93IHdpbGwgZ2l2ZSB1cyB0aGUgdGV4dCByYW5nZSBvZiBhIHNpbmdsZSBiYXNpYyBibG9jay4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCBhOGI4NzU3
NmMwNTY5NWI4MDBmOGMzZDFlYzI1MzI4ZDBhZTg4Yjg5Li4yOGE4ZTdmYzcxOGE5ZjQyMjQ5MWNk
MWM1NGNlOGYzMTdmYThkYjNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCkBAIC05NDksOSArOTQ5LDkgQEAgY2xhc3MgQ29kZUJsb2NrIDogcHVibGljIEpT
Q2VsbCB7CiAKICAgICB2b2lkIHVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zQW5kQ291
bnRMaXZlbmVzcyh1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVz
LCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyk7CiAKLSAgICB2b2lkIHNldENv
bnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYsIGNvbnN0IFZlY3RvcjxDb25zdGFudElk
ZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cyk7CisgICAgdm9pZCBzZXRDb25zdGFudElkZW50
aWZpZXJTZXRSZWdpc3RlcnMoVk0mLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8Q29uc3RhbnRJZGVu
dGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpOwogCi0gICAgdm9pZCBzZXRDb25zdGFudFJlZ2lz
dGVycyhjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25z
dCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uLCBTY3JpcHRFeGVjdXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOworICAg
IHZvaWQgc2V0Q29uc3RhbnRSZWdpc3RlcnMoY29uc3QgUmVmQ291bnRlZEFycmF5PFdyaXRlQmFy
cmllcjxVbmtub3duPj4mIGNvbnN0YW50cywgY29uc3QgUmVmQ291bnRlZEFycmF5PFNvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiwgU2Ny
aXB0RXhlY3V0YWJsZSogdG9wTGV2ZWxFeGVjdXRhYmxlKTsKIAogICAgIHZvaWQgcmVwbGFjZUNv
bnN0YW50KFZpcnR1YWxSZWdpc3RlciByZWcsIEpTVmFsdWUgdmFsdWUpCiAgICAgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0hhbmRsZXJJbmZvLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaAppbmRleCA3ZjQ2NWQyYWU5
Mzc5OWI5MWRmNzg3MTQxOTRmY2EzNGJkMmExYTEyLi4wMWRkY2Y5Njk5YjQ4MDI5YTFiZDhiZWU0
MDM0OTA0NzlhMWY5ZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSGFuZGxlckluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFu
ZGxlckluZm8uaApAQCAtNjUsMTAgKzY1LDEwIEBAIHN0cnVjdCBIYW5kbGVySW5mb0Jhc2Ugewog
CiAgICAgYm9vbCBpc0NhdGNoSGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBIYW5k
bGVyVHlwZTo6Q2F0Y2g7IH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhbmRsZXI+Ci0gICAg
c3RhdGljIEhhbmRsZXIqIGhhbmRsZXJGb3JJbmRleChWZWN0b3I8SGFuZGxlcj4mIGV4ZXB0aW9u
SGFuZGxlcnMsIHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWlyZWRIYW5kbGVy
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhbmRsZXIsIHR5cGVuYW1lIENvbnRhaW5lcj4KKyAg
ICBzdGF0aWMgSGFuZGxlciogaGFuZGxlckZvckluZGV4KENvbnRhaW5lciYgZXhlcHRpb25IYW5k
bGVycywgdW5zaWduZWQgaW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCiAg
ICAgewotICAgICAgICBmb3IgKEhhbmRsZXImIGhhbmRsZXIgOiBleGVwdGlvbkhhbmRsZXJzKSB7
CisgICAgICAgIGZvciAoYXV0byYgaGFuZGxlciA6IGV4ZXB0aW9uSGFuZGxlcnMpIHsKICAgICAg
ICAgICAgIGlmICgocmVxdWlyZWRIYW5kbGVyID09IFJlcXVpcmVkSGFuZGxlcjo6Q2F0Y2hIYW5k
bGVyKSAmJiAhaGFuZGxlci5pc0NhdGNoSGFuZGxlcigpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lz
ZUp1bXBUYXJnZXRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNl
SnVtcFRhcmdldHMuY3BwCmluZGV4IDFlNzEyMmM3NTAwMzMzM2E3MzNiMWFmNTg4NmFlYTE1ODJm
MTA5NDcuLmU3MGFlYzEyN2M1NmRhNThiYzJkOTIxOTI4NzViOTE5N2E1YmRkZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMu
Y3BwCkBAIC05OSwxMiArOTksMTIgQEAgdm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKENv
ZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW4KICAgICBjb21w
dXRlUHJlY2lzZUp1bXBUYXJnZXRzSW50ZXJuYWw8Q29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0c01v
ZGU6OkZvbGxvd0NvZGVCbG9ja0NsYWltPihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsK
IH0KIAotdm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKFVubGlua2VkQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIFZlY3RvcjxJ
bnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCAzMj4mIG91dCkKK3ZvaWQgY29tcHV0ZVByZWNpc2VK
dW1wVGFyZ2V0cyhVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06
Ok9mZnNldCwgMzI+JiBvdXQpCiB7CiAgICAgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0c0ludGVy
bmFsPENvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHNNb2RlOjpGb2xsb3dDb2RlQmxvY2tDbGFpbT4o
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIG91dCk7CiB9CiAKLXZvaWQgcmVjb21wdXRlUHJlY2lz
ZUp1bXBUYXJnZXRzKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0
aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0
PiYgb3V0KQordm9pZCByZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoVW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0
aW9ucywgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+JiBvdXQpCiB7CiAgICAgY29t
cHV0ZVByZWNpc2VKdW1wVGFyZ2V0c0ludGVybmFsPENvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHNN
b2RlOjpGb3JjZUNvbXB1dGU+KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBvdXQpOwogfQpAQCAt
MTE0LDcgKzExNCw3IEBAIHZvaWQgZmluZEp1bXBUYXJnZXRzRm9ySW5zdHJ1Y3Rpb24oQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtCiAgICAgZ2V0SnVtcFRhcmdl
dHNGb3JJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvdXQpOwogfQogCi12b2lk
IGZpbmRKdW1wVGFyZ2V0c0Zvckluc3RydWN0aW9uKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGluc3RydWN0aW9uLCBWZWN0b3I8SW5z
dHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgMT4mIG91dCkKK3ZvaWQgZmluZEp1bXBUYXJnZXRzRm9y
SW5zdHJ1Y3Rpb24oVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYgaW5zdHJ1Y3Rpb24sIFZlY3RvcjxJbnN0cnVjdGlvblN0
cmVhbTo6T2Zmc2V0LCAxPiYgb3V0KQogewogICAgIGdldEp1bXBUYXJnZXRzRm9ySW5zdHJ1Y3Rp
b24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3V0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuaAppbmRleCBkOTM0ZjlhNDk1
YjljYzk2NmQ1MjYwN2ZhZjRmMDliNjk1MmE0MDdlLi5mMTc1ZTJjY2E3ZGExMjhlYTQ1YjJiMTM3
YTNiOWI4MDY2NTE2MmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5oCkBAIC0zNCwxMSArMzQsMTEgQEAgY2xhc3MgVW5saW5r
ZWRDb2RlQmxvY2s7CiAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiBieXRlY29kZSBpbmRleCB0
aGF0IGFyZSB0aGUgZGVzdGluYXRpb24gb2YgYSBqdW1wLgogdm9pZCBjb21wdXRlUHJlY2lzZUp1
bXBUYXJnZXRzKENvZGVCbG9jayosIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCAz
Mj4mIG91dCk7CiB2b2lkIGNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoQ29kZUJsb2NrKiwgY29u
c3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgVmVjdG9yPEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQsIDMyPiYgb3V0KTsKLXZvaWQgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyhV
bmxpbmtlZENvZGVCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgVmVjdG9yPEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQsIDMyPiYgb3V0KTsKK3ZvaWQgY29tcHV0ZVByZWNpc2VKdW1w
VGFyZ2V0cyhVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciosIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiwgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIDMyPiYgb3V0KTsKIAotdm9p
ZCByZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoVW5saW5rZWRDb2RlQmxvY2sqLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYsIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiYgb3V0
KTsKK3ZvaWQgcmVjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKFVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJl
YW06Ok9mZnNldD4mIG91dCk7CiAKIHZvaWQgZmluZEp1bXBUYXJnZXRzRm9ySW5zdHJ1Y3Rpb24o
Q29kZUJsb2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYsIFZlY3RvcjxJbnN0cnVj
dGlvblN0cmVhbTo6T2Zmc2V0LCAxPiYgb3V0KTsKLXZvaWQgZmluZEp1bXBUYXJnZXRzRm9ySW5z
dHJ1Y3Rpb24oVW5saW5rZWRDb2RlQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVm
JiwgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIDE+JiBvdXQpOwordm9pZCBmaW5k
SnVtcFRhcmdldHNGb3JJbnN0cnVjdGlvbihVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciosIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmLCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldCwgMT4mIG91dCk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXggZGRiNDEy
MTE5MWZhZjdiNDIxNTMxZThlMmUwNTIwMjVhNjEyN2UzOS4uYWM3ZDZhNGFjNWUzY2M4ZDQ0YWEy
ZDhmZjg1ZGQ4NmFmZmUyYzZlNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC04MSw3ICs4MSw3IEBAIFVubGlua2Vk
Q29kZUJsb2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBDb2RlVHlwZSBjb2RlCiAgICAgQVNTRVJUKG1fY29kZVR5cGUgPT0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNvZGVUeXBlKSk7CiAgICAgQVNTRVJUKG1fZGlkT3B0aW1pemUgPT0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KE1peGVkVHJpU3RhdGUpKTsKICAgICBpZiAoaW5mby5uZWVkc0NsYXNzRmll
bGRJbml0aWFsaXplcigpID09IE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyOjpZZXMpIHsKLSAg
ICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICBjcmVhdGVSYXJlRGF0
YUlmTmVjZXNzYXJ5KGhvbGRMb2NrKGNlbGxMb2NrKCkpKTsKICAgICAgICAgbV9yYXJlRGF0YS0+
bV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihOZWVk
c0NsYXNzRmllbGRJbml0aWFsaXplcjo6WWVzKTsKICAgICB9CiB9CkBAIC05NCwxMCArOTQsMTAg
QEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhpc09iamVj
dC0+Y2VsbExvY2soKSk7CiAgICAgaWYgKHZpc2l0b3IuaXNGaXJzdFZpc2l0KCkpCiAgICAgICAg
IHRoaXNPYmplY3QtPm1fYWdlID0gc3RkOjptaW48dW5zaWduZWQ+KHN0YXRpY19jYXN0PHVuc2ln
bmVkPih0aGlzT2JqZWN0LT5tX2FnZSkgKyAxLCBtYXhBZ2UpOwotICAgIGZvciAoRnVuY3Rpb25F
eHByZXNzaW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVj
bHMuYmVnaW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmVuZCgpOyBwdHIg
IT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoKnB0cik7Ci0gICAgZm9yIChG
dW5jdGlvbkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVu
Y3Rpb25FeHBycy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMuZW5k
KCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgqcHRyKTsKKyAg
ICBmb3IgKGF1dG8mIGJhcnJpZXIgOiB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMpCisgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKGJhcnJpZXIpOworICAgIGZvciAoYXV0byYgYmFycmllciA6IHRo
aXNPYmplY3QtPm1fZnVuY3Rpb25FeHBycykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoYmFycmll
cik7CiAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lz
dGVycy5kYXRhKCksIHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAg
ICBzaXplX3QgZXh0cmFNZW1vcnkgPSB0aGlzT2JqZWN0LT5tX21ldGFkYXRhLT5zaXplSW5CeXRl
cygpOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX2luc3RydWN0aW9ucykKQEAgLTE2Nyw3ICsxNjcs
NyBAQCBzdGF0aWMgdm9pZCBkdW1wTGluZUNvbHVtbkVudHJ5KHNpemVfdCBpbmRleCwgY29uc3Qg
SW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aQogCiB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpk
dW1wRXhwcmVzc2lvblJhbmdlSW5mbygpCiB7Ci0gICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUlu
Zm8+JiBleHByZXNzaW9uSW5mbyA9IG1fZXhwcmVzc2lvbkluZm87CisgICAgUmVmQ291bnRlZEFy
cmF5PEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbyA9IG1fZXhwcmVzc2lvbklu
Zm87CiAKICAgICBzaXplX3Qgc2l6ZSA9IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOwogICAgIGRh
dGFMb2dGKCJVbmxpbmtlZENvZGVCbG9jayAlcCBleHByZXNzaW9uUmFuZ2VJbmZvWyV6dV0ge1xu
IiwgdGhpcywgc2l6ZSk7CkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9j
azo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2Rl
SW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9u
UmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8gPSBtX2V4cHJlc3Npb25JbmZvOworICAgIGNvbnN0
IFJlZkNvdW50ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8gPSBt
X2V4cHJlc3Npb25JbmZvOwogCiAgICAgaW50IGxvdyA9IDA7CiAgICAgaW50IGhpZ2ggPSBleHBy
ZXNzaW9uSW5mby5zaXplKCk7CkBAIC0yMTgsNjAgKzIxOCw2IEBAIHZvaWQgVW5saW5rZWRDb2Rl
QmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRl
Y29kZUluCiAgICAgZ2V0TGluZUFuZENvbHVtbihpbmZvLCBsaW5lLCBjb2x1bW4pOwogfQogCi12
b2lkIFVubGlua2VkQ29kZUJsb2NrOjphZGRFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVj
dGlvbk9mZnNldCwKLSAgICBpbnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNl
dCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQotewotICAgIGlmIChkaXZvdCA+IEV4
cHJlc3Npb25SYW5nZUluZm86Ok1heERpdm90KSB7Ci0gICAgICAgIC8vIE92ZXJmbG93IGhhcyBv
Y2N1cnJlZCwgd2UgY2FuIG9ubHkgZ2l2ZSBsaW5lIG51bWJlciBpbmZvIGZvciBlcnJvcnMgZm9y
IHRoaXMgcmVnaW9uCi0gICAgICAgIGRpdm90ID0gMDsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSAw
OwotICAgICAgICBlbmRPZmZzZXQgPSAwOwotICAgIH0gZWxzZSBpZiAoc3RhcnRPZmZzZXQgPiBF
eHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhPZmZzZXQpIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0YXJ0
IG9mZnNldCBpcyBvdXQgb2YgYm91bmRzIHdlIGNsZWFyIGJvdGggb2Zmc2V0cwotICAgICAgICAv
LyBzbyB3ZSBvbmx5IGdldCB0aGUgZGl2b3QgbWFya2VyLiBFcnJvciBtZXNzYWdlIHdpbGwgaGF2
ZSB0byBiZSByZWR1Y2VkCi0gICAgICAgIC8vIHRvIGxpbmUgYW5kIGNoYXJQb3NpdGlvbiBudW1i
ZXIuCi0gICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgZW5kT2Zmc2V0ID0gMDsKLSAg
ICB9IGVsc2UgaWYgKGVuZE9mZnNldCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heE9mZnNldCkg
ewotICAgICAgICAvLyBUaGUgZW5kIG9mZnNldCBpcyBvbmx5IHVzZWQgZm9yIGFkZGl0aW9uYWwg
Y29udGV4dCwgYW5kIGlzIG11Y2ggbW9yZSBsaWtlbHkKLSAgICAgICAgLy8gdG8gb3ZlcmZsb3cg
KGVnLiBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cykgc28gd2UgYXJlIHdpbGxpbmcgdG8gZHJvcCBp
dCB3aXRob3V0Ci0gICAgICAgIC8vIGRyb3BwaW5nIHRoZSByZXN0IG9mIHRoZSByYW5nZS4KLSAg
ICAgICAgZW5kT2Zmc2V0ID0gMDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBwb3NpdGlvbk1vZGUg
PQotICAgICAgICAobGluZSA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRMaW5lTW9kZUxp
bmUgJiYgY29sdW1uIDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdExpbmVNb2RlQ29sdW1u
KSAKLSAgICAgICAgPyBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9kZQotICAgICAgICA6
IChsaW5lIDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdENvbHVtbk1vZGVMaW5lICYmIGNv
bHVtbiA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRDb2x1bW5Nb2RlQ29sdW1uKQotICAg
ICAgICA/IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdENvbHVtbk1vZGUKLSAgICAgICAgOiBFeHBy
ZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTsKLQotICAgIEV4cHJlc3Npb25S
YW5nZUluZm8gaW5mbzsKLSAgICBpbmZvLmluc3RydWN0aW9uT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25P
ZmZzZXQ7Ci0gICAgaW5mby5kaXZvdFBvaW50ID0gZGl2b3Q7Ci0gICAgaW5mby5zdGFydE9mZnNl
dCA9IHN0YXJ0T2Zmc2V0OwotICAgIGluZm8uZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OwotCi0gICAg
aW5mby5tb2RlID0gcG9zaXRpb25Nb2RlOwotICAgIHN3aXRjaCAocG9zaXRpb25Nb2RlKSB7Ci0g
ICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9kZToKLSAgICAgICAgaW5mby5l
bmNvZGVGYXRMaW5lTW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdENvbHVtbk1vZGU6Ci0gICAgICAgIGluZm8uZW5jb2Rl
RmF0Q29sdW1uTW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4
cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVBbmRDb2x1bW5Nb2RlOiB7Ci0gICAgICAgIGNyZWF0
ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgdW5zaWduZWQgZmF0SW5kZXggPSBtX3Jh
cmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLnNpemUoKTsKLSAgICAgICAgRXhw
cmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24gZmF0UG9zID0geyBsaW5lLCBjb2x1bW4gfTsK
LSAgICAgICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5hcHBlbmQo
ZmF0UG9zKTsKLSAgICAgICAgaW5mby5wb3NpdGlvbiA9IGZhdEluZGV4OwotICAgIH0KLSAgICB9
IC8vIHN3aXRjaAotCi0gICAgbV9leHByZXNzaW9uSW5mby5hcHBlbmQoaW5mbyk7Ci19Ci0KIGJv
b2wgVW5saW5rZWRDb2RlQmxvY2s6OnR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNv
ZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkJiBzdGFydERpdm90LCB1
bnNpZ25lZCYgZW5kRGl2b3QpCiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKQEAgLTI5OCwzMCArMjQ0LDEwIEBAIGJvb2wgVW5saW5rZWRDb2RlQmxvY2s6OnR5
cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFkZFR5cGVQcm9m
aWxlckV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBz
dGFydERpdm90LCB1bnNpZ25lZCBlbmREaXZvdCkKLXsKLSAgICBjcmVhdGVSYXJlRGF0YUlmTmVj
ZXNzYXJ5KCk7Ci0gICAgUmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZSByYW5n
ZTsKLSAgICByYW5nZS5tX3N0YXJ0RGl2b3QgPSBzdGFydERpdm90OwotICAgIHJhbmdlLm1fZW5k
RGl2b3QgPSBlbmREaXZvdDsKLSAgICBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAu
c2V0KGluc3RydWN0aW9uT2Zmc2V0LCByYW5nZSk7Ci19Ci0KIFVubGlua2VkQ29kZUJsb2NrOjp+
VW5saW5rZWRDb2RlQmxvY2soKQogewogfQogCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjpzZXRJ
bnN0cnVjdGlvbnMoc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBpbnN0cnVjdGlv
bnMpCi17Ci0gICAgQVNTRVJUKGluc3RydWN0aW9ucyk7Ci0gICAgewotICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKGNlbGxMb2NrKCkpOwotICAgICAgICBtX2luc3RydWN0aW9ucyA9IFdU
Rk1vdmUoaW5zdHJ1Y3Rpb25zKTsKLSAgICAgICAgbV9tZXRhZGF0YS0+ZmluYWxpemUoKTsKLSAg
ICB9Ci0gICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobV9p
bnN0cnVjdGlvbnMtPnNpemVJbkJ5dGVzKCkgKyBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpKTsK
LX0KLQogY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIFVubGlua2VkQ29kZUJsb2NrOjppbnN0cnVj
dGlvbnMoKSBjb25zdAogewogICAgIEFTU0VSVChtX2luc3RydWN0aW9ucy5nZXQoKSk7CkBAIC0z
MzcsNjcgKzI2Myw3IEBAIFVubGlua2VkSGFuZGxlckluZm8qIFVubGlua2VkQ29kZUJsb2NrOjpo
YW5kbGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIFJlcXVpcmVkCiB7CiAgICAgaWYgKCFtX3Jh
cmVEYXRhKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gVW5saW5rZWRIYW5k
bGVySW5mbzo6aGFuZGxlckZvckluZGV4KG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMs
IGluZGV4LCByZXF1aXJlZEhhbmRsZXIpOwotfQotCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjph
cHBseU1vZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVyJiByZXdyaXRlciwgSW5zdHJ1Y3Rpb25T
dHJlYW1Xcml0ZXImIGluc3RydWN0aW9ucykKLXsKLSAgICAvLyBCZWZvcmUgYXBwbHlpbmcgdGhl
IGNoYW5nZXMsIHdlIGFkanVzdCB0aGUganVtcHMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGJ5dGVj
b2RlIG9mZnNldCwgdGhlIG9mZnNldCB0byB0aGUganVtcCB0YXJnZXQsIGFuZAotICAgIC8vIHRo
ZSBpbnNlcnRpb24gaW5mb3JtYXRpb24uCi0KLSAgICByZXdyaXRlci5hZGp1c3RKdW1wVGFyZ2V0
cygpOwotCi0gICAgLy8gVGhlbiwgZXhjZXB0aW9uIGhhbmRsZXJzIHNob3VsZCBiZSBhZGp1c3Rl
ZC4KLSAgICBpZiAobV9yYXJlRGF0YSkgewotICAgICAgICBmb3IgKFVubGlua2VkSGFuZGxlcklu
Zm8mIGhhbmRsZXIgOiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzKSB7Ci0gICAgICAg
ICAgICBoYW5kbGVyLnRhcmdldCA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KGhhbmRs
ZXIudGFyZ2V0KTsKLSAgICAgICAgICAgIGhhbmRsZXIuc3RhcnQgPSByZXdyaXRlci5hZGp1c3RB
YnNvbHV0ZU9mZnNldChoYW5kbGVyLnN0YXJ0KTsKLSAgICAgICAgICAgIGhhbmRsZXIuZW5kID0g
cmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQoaGFuZGxlci5lbmQpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNv
bnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9yYXJl
RGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0c1tpXSA9IHJld3JpdGVy
LmFkanVzdEFic29sdXRlT2Zmc2V0KG1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dC
eXRlY29kZU9mZnNldHNbaV0pOwotCi0gICAgICAgIGlmICghbV9yYXJlRGF0YS0+bV90eXBlUHJv
ZmlsZXJJbmZvTWFwLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwg
UmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZT4gYWRqdXN0ZWRUeXBlUHJvZmls
ZXJJbmZvTWFwOwotICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcmFyZURhdGEtPm1f
dHlwZVByb2ZpbGVySW5mb01hcCkKLSAgICAgICAgICAgICAgICBhZGp1c3RlZFR5cGVQcm9maWxl
ckluZm9NYXAuc2V0KHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KGVudHJ5LmtleSksIGVu
dHJ5LnZhbHVlKTsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01h
cC5zd2FwKGFkanVzdGVkVHlwZVByb2ZpbGVySW5mb01hcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyArK2kp
Ci0gICAgICAgIG1fZXhwcmVzc2lvbkluZm9baV0uaW5zdHJ1Y3Rpb25PZmZzZXQgPSByZXdyaXRl
ci5hZGp1c3RBYnNvbHV0ZU9mZnNldChtX2V4cHJlc3Npb25JbmZvW2ldLmluc3RydWN0aW9uT2Zm
c2V0KTsKLQotICAgIC8vIFRoZW4sIG1vZGlmeSB0aGUgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgot
ICAgIHJld3JpdGVyLmFwcGx5TW9kaWZpY2F0aW9uKCk7Ci0KLSAgICAvLyBBbmQgcmVjb21wdXRl
IHRoZSBqdW1wIHRhcmdldCBiYXNlZCBvbiB0aGUgbW9kaWZpZWQgdW5saW5rZWQgaW5zdHJ1Y3Rp
b25zLgotICAgIG1fanVtcFRhcmdldHMuY2xlYXIoKTsKLSAgICByZWNvbXB1dGVQcmVjaXNlSnVt
cFRhcmdldHModGhpcywgaW5zdHJ1Y3Rpb25zLCBtX2p1bXBUYXJnZXRzKTsKLX0KLQotdm9pZCBV
bmxpbmtlZENvZGVCbG9jazo6c2hyaW5rVG9GaXQoKQotewotICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2soY2VsbExvY2soKSk7Ci0gICAgCi0gICAgbV9qdW1wVGFyZ2V0cy5zaHJpbmtUb0ZpdCgp
OwotICAgIG1faWRlbnRpZmllcnMuc2hyaW5rVG9GaXQoKTsKLSAgICBtX2NvbnN0YW50UmVnaXN0
ZXJzLnNocmlua1RvRml0KCk7Ci0gICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b24uc2hyaW5rVG9GaXQoKTsKLSAgICBtX2Z1bmN0aW9uRGVjbHMuc2hyaW5rVG9GaXQoKTsKLSAg
ICBtX2Z1bmN0aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKLSAgICBtX2V4cHJlc3Npb25JbmZvLnNo
cmlua1RvRml0KCk7Ci0KLSAgICBpZiAobV9yYXJlRGF0YSkgewotICAgICAgICBtX3JhcmVEYXRh
LT5tX2V4Y2VwdGlvbkhhbmRsZXJzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fcmFyZURhdGEt
Pm1fc3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX3JhcmVEYXRhLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9yYXJlRGF0
YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBt
X3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLnNocmlua1Rv
Rml0KCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fYml0VmVjdG9ycy5zaHJpbmtUb0ZpdCgpOwot
ICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50SWRlbnRpZmllclNldHMuc2hyaW5rVG9GaXQo
KTsKLSAgICB9CisgICAgcmV0dXJuIFVubGlua2VkSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRl
eDxVbmxpbmtlZEhhbmRsZXJJbmZvPihtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLCBp
bmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKIH0KIAogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0CkBAIC00MjAsMTIgKzI4Niw2IEBAIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcyYgVW5saW5rZWRDb2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXNTbG93KENvZGVC
bG9jayogY29kCiAgICAgcmV0dXJuICptX2xpdmVuZXNzOwogfQogCi12b2lkIFVubGlua2VkQ29k
ZUJsb2NrOjphZGRPdXRPZkxpbmVKdW1wVGFyZ2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQg
Ynl0ZWNvZGVPZmZzZXQsIGludCB0YXJnZXQpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0
KTsKLSAgICBtX291dE9mTGluZUp1bXBUYXJnZXRzLnNldChieXRlY29kZU9mZnNldCwgdGFyZ2V0
KTsKLX0KLQogaW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3Ry
dWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAgQVNTRVJUKG1fb3V0
T2ZMaW5lSnVtcFRhcmdldHMuY29udGFpbnMoYnl0ZWNvZGVPZmZzZXQpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggMzE5
MjE3MDlhYzgzMDZiZjRkZTRkOTczOTkyZTE0YTBkMDMwZGFmMC4uMDE1YTEyYTA4ZDlhYWM3NDg1
YjA5ZTBhYzUzMGE2NTY4YTIyZTU2OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRl
IDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0
Zi9UcmlTdGF0ZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgpAQCAtNTksNiArNjAsNyBAQCBjbGFzcyBTY3JpcHRFeGVj
dXRhYmxlOwogY2xhc3MgU291cmNlQ29kZTsKIGNsYXNzIFNvdXJjZVByb3ZpZGVyOwogY2xhc3Mg
VW5saW5rZWRDb2RlQmxvY2s7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNs
YXNzIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhl
Y3V0YWJsZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKQEAgLTEzMywxMyArMTM1LDggQEAgY2xh
c3MgVW5saW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICB2b2lkIHNldEhhc1Rh
aWxDYWxscygpIHsgbV9oYXNUYWlsQ2FsbHMgPSB0cnVlOyB9CiAgICAgYm9vbCBhbGxvd0RpcmVj
dEV2YWxDYWNoZSgpIGNvbnN0IHsgcmV0dXJuICEobV9mZWF0dXJlcyAmIE5vRXZhbENhY2hlRmVh
dHVyZSk7IH0KIAotICAgIHZvaWQgYWRkRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rp
b25PZmZzZXQsIGludCBkaXZvdCwKLSAgICAgICAgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zm
c2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pOwotCi0gICAgdm9pZCBhZGRUeXBl
UHJvZmlsZXJFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwgdW5zaWdu
ZWQgc3RhcnREaXZvdCwgdW5zaWduZWQgZW5kRGl2b3QpOwotCiAgICAgYm9vbCBoYXNFeHByZXNz
aW9uSW5mbygpIHsgcmV0dXJuIG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbygpIHsgcmV0dXJuIG1f
ZXhwcmVzc2lvbkluZm87IH0KKyAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJh
bmdlSW5mbz4mIGV4cHJlc3Npb25JbmZvKCkgeyByZXR1cm4gbV9leHByZXNzaW9uSW5mbzsgfQog
CiAgICAgYm9vbCBoYXNDaGVja3BvaW50cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hlY2twb2lu
dHM7IH0KICAgICB2b2lkIHNldEhhc0NoZWNrcG9pbnRzKCkgeyBtX2hhc0NoZWNrcG9pbnRzID0g
dHJ1ZTsgfQpAQCAtMTUwLDY3ICsxNDcsMjYgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2sgOiBw
dWJsaWMgSlNDZWxsIHsKIAogICAgIC8vIFBhcmFtZXRlciBpbmZvcm1hdGlvbgogICAgIHZvaWQg
c2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpIHsgbV9udW1QYXJhbWV0ZXJzID0gbmV3VmFs
dWU7IH0KLSAgICB2b2lkIGFkZFBhcmFtZXRlcigpIHsgbV9udW1QYXJhbWV0ZXJzKys7IH0KICAg
ICB1bnNpZ25lZCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJz
OyB9CiAKICAgICAvLyBDb25zdGFudCBQb29scwogCiAgICAgc2l6ZV90IG51bWJlck9mSWRlbnRp
ZmllcnMoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzLnNpemUoKTsgfQotICAgIHZvaWQg
YWRkSWRlbnRpZmllcihjb25zdCBJZGVudGlmaWVyJiBpKSB7IHJldHVybiBtX2lkZW50aWZpZXJz
LmFwcGVuZChpKTsgfQogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoaW50IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzW2luZGV4XTsgfQotICAgIGNvbnN0IFZlY3Rv
cjxJZGVudGlmaWVyPiYgaWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJz
OyB9CisgICAgY29uc3QgUmVmQ291bnRlZEFycmF5PElkZW50aWZpZXI+JiBpZGVudGlmaWVycygp
IGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnM7IH0KIAogICAgIEJpdFZlY3RvciYgYml0VmVj
dG9yKHNpemVfdCBpKSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1f
Yml0VmVjdG9yc1tpXTsgfQotICAgIHVuc2lnbmVkIGFkZEJpdFZlY3RvcihCaXRWZWN0b3ImJiBi
aXRWZWN0b3IpCi0gICAgewotICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0g
ICAgICAgIG1fcmFyZURhdGEtPm1fYml0VmVjdG9ycy5hcHBlbmQoV1RGTW92ZShiaXRWZWN0b3Ip
KTsKLSAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fYml0VmVjdG9ycy5zaXplKCkgLSAxOwot
ICAgIH0KLQotICAgIHZvaWQgYWRkU2V0Q29uc3RhbnQoSWRlbnRpZmllclNldCYgc2V0KQotICAg
IHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICBWTSYgdm0g
PSB0aGlzLT52bSgpOwotICAgICAgICBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKHZt
LmhlYXAsIGNlbGxMb2NrKCkpOwotICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50
UmVnaXN0ZXJzLnNpemUoKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3Jp
dGVCYXJyaWVyPFVua25vd24+KCkpOwotICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcik7Ci0gICAg
ICAgIG1fcmFyZURhdGEtPm1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5hcHBlbmQoQ29uc3RhbnRJ
ZGVudGlmaWVyU2V0RW50cnkoc2V0LCByZXN1bHQpKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBh
ZGRDb25zdGFudChKU1ZhbHVlIHYsIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBzb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246Ok90aGVyKQotICAgIHsK
LSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBsb2Nr
RHVyaW5nTWFya2luZyh2bS5oZWFwLCBjZWxsTG9jaygpKTsKLSAgICAgICAgdW5zaWduZWQgcmVz
dWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdp
c3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKLSAgICAgICAgbV9jb25zdGFu
dFJlZ2lzdGVycy5sYXN0KCkuc2V0KHZtLCB0aGlzLCB2KTsKLSAgICAgICAgbV9jb25zdGFudHNT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKHNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbik7
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIHVuc2lnbmVkIGFkZENvbnN0YW50
KExpbmtUaW1lQ29uc3RhbnQgbGlua1RpbWVDb25zdGFudCkKLSAgICB7Ci0gICAgICAgIFZNJiB2
bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmco
dm0uaGVhcCwgY2VsbExvY2soKSk7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3Rh
bnRSZWdpc3RlcnMuc2l6ZSgpOwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChX
cml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFz
dCgpLnNldCh2bSwgdGhpcywganNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obGlua1RpbWVD
b25zdGFudCkpKTsKLSAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24u
YXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudCk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQogCi0gICAgY29uc3QgVmVjdG9yPFdyaXRlQmFycmll
cjxVbmtub3duPj4mIGNvbnN0YW50UmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lz
dGVyczsgfQorICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxXcml0ZUJhcnJpZXI8VW5rbm93bj4+
JiBjb25zdGFudFJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KICAg
ICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGNvbnN0YW50UmVnaXN0ZXIoVmlydHVhbFJl
Z2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudFJlZ2lzdGVyc1tyZWcudG9Db25z
dGFudEluZGV4KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZp
cnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVn
LnRvQ29uc3RhbnRJbmRleCgpXS5nZXQoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJl
dHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQorICAgIGNvbnN0IFJl
ZkNvdW50ZWRBcnJheTxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNl
bnRhdGlvbjsgfQogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudElkZW50aWZpZXJTZXRz
KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fY29uc3RhbnRJZGVu
dGlmaWVyU2V0cy5zaXplKCkgOiAwOyB9Ci0gICAgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRp
ZmllclNldEVudHJ5PiYgY29uc3RhbnRJZGVudGlmaWVyU2V0cygpIHsgQVNTRVJUKG1fcmFyZURh
dGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzOyB9CisgICAg
Y29uc3QgUmVmQ291bnRlZEFycmF5PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiYgY29uc3Rh
bnRJZGVudGlmaWVyU2V0cygpIHsgQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0
YS0+bV9jb25zdGFudElkZW50aWZpZXJTZXRzOyB9CiAKICAgICAvLyBKdW1wcwogICAgIHNpemVf
dCBudW1iZXJPZkp1bXBUYXJnZXRzKCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5zaXpl
KCk7IH0KLSAgICB2b2lkIGFkZEp1bXBUYXJnZXQodW5zaWduZWQganVtcFRhcmdldCkgeyBtX2p1
bXBUYXJnZXRzLmFwcGVuZChqdW1wVGFyZ2V0KTsgfQogICAgIHVuc2lnbmVkIGp1bXBUYXJnZXQo
aW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2p1bXBUYXJnZXRzW2luZGV4XTsgfQogICAgIHVu
c2lnbmVkIGxhc3RKdW1wVGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0cy5sYXN0
KCk7IH0KIApAQCAtMjIzLDkgKzE3OSw2IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVi
bGljIEpTQ2VsbCB7CiAgICAgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZygpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFN1cGVyQmluZGluZz4obV9zdXBlckJpbmRpbmcpOyB9CiAgICAgSlNQ
YXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxK
U1BhcnNlclNjcmlwdE1vZGU+KG1fc2NyaXB0TW9kZSk7IH0KIAotICAgIHZvaWQgc2hyaW5rVG9G
aXQoKTsKLQotICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25zKHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVj
dGlvblN0cmVhbT4pOwogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMo
KSBjb25zdDsKIAogICAgIGludCBudW1DYWxsZWVMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX251
bUNhbGxlZUxvY2FsczsgfQpAQCAtMjM0LDM5ICsxODcsMTggQEAgY2xhc3MgVW5saW5rZWRDb2Rl
QmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAvLyBKdW1wIFRhYmxlcwogCiAgICAgc2l6ZV90
IG51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBt
X3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQotICAgIFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlJiBhZGRTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJhcmVEYXRhSWZO
ZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLmFwcGVuZChVbmxpbmtl
ZFNpbXBsZUp1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRhYmxl
cy5sYXN0KCk7IH0KICAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgc3dpdGNoSnVtcFRhYmxl
KGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEt
Pm1fc3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQogCiAgICAgc2l6ZV90IG51bWJlck9m
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3Jh
cmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQotICAgIFVubGlu
a2VkU3RyaW5nSnVtcFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IGNyZWF0ZVJh
cmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
LmFwcGVuZChVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSgpKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1f
c3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5sYXN0KCk7IH0KICAgICBVbmxpbmtlZFN0cmluZ0p1bXBU
YWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRhYmxlKGludCB0YWJsZUluZGV4KSB7IEFTU0VSVChtX3Jh
cmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJs
ZUluZGV4XTsgfQogCi0gICAgdW5zaWduZWQgYWRkRnVuY3Rpb25EZWNsKFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlKiBuKQotICAgIHsKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAg
ICAgICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyh2bS5oZWFwLCBjZWxsTG9jaygp
KTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25EZWNscy5zaXplKCk7Ci0gICAg
ICAgIG1fZnVuY3Rpb25EZWNscy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25F
eGVjdXRhYmxlPigpKTsKLSAgICAgICAgbV9mdW5jdGlvbkRlY2xzLmxhc3QoKS5zZXQodm0sIHRo
aXMsIG4pOwotICAgICAgICByZXR1cm4gc2l6ZTsKLSAgICB9CiAgICAgVW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmN0aW9uRGVjbChpbnQgaW5kZXgpIHsgcmV0dXJuIG1fZnVuY3Rpb25E
ZWNsc1tpbmRleF0uZ2V0KCk7IH0KICAgICBzaXplX3QgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkg
eyByZXR1cm4gbV9mdW5jdGlvbkRlY2xzLnNpemUoKTsgfQotICAgIHVuc2lnbmVkIGFkZEZ1bmN0
aW9uRXhwcihVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogbikKLSAgICB7Ci0gICAgICAgIFZN
JiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtp
bmcodm0uaGVhcCwgY2VsbExvY2soKSk7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1bmN0
aW9uRXhwcnMuc2l6ZSgpOwotICAgICAgICBtX2Z1bmN0aW9uRXhwcnMuYXBwZW5kKFdyaXRlQmFy
cmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25F
eHBycy5sYXN0KCkuc2V0KHZtLCB0aGlzLCBuKTsKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0gICAg
fQogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4cHIoaW50IGluZGV4
KSB7IHJldHVybiBtX2Z1bmN0aW9uRXhwcnNbaW5kZXhdLmdldCgpOyB9CiAgICAgc2l6ZV90IG51
bWJlck9mRnVuY3Rpb25FeHBycygpIHsgcmV0dXJuIG1fZnVuY3Rpb25FeHBycy5zaXplKCk7IH0K
IAogICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CiAgICAgc2l6ZV90IG51bWJlck9m
RXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0
YS0+bV9leGNlcHRpb25IYW5kbGVycy5zaXplKCkgOiAwOyB9Ci0gICAgdm9pZCBhZGRFeGNlcHRp
b25IYW5kbGVyKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXIpIHsgY3JlYXRlUmFy
ZURhdGFJZk5lY2Vzc2FyeSgpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVy
cy5hcHBlbmQoaGFuZGxlcik7IH0KICAgICBVbmxpbmtlZEhhbmRsZXJJbmZvJiBleGNlcHRpb25I
YW5kbGVyKGludCBpbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRh
LT5tX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4XTsgfQogCiAgICAgQ29kZVR5cGUgY29kZVR5cGUo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlVHlwZT4obV9jb2RlVHlwZSk7IH0KQEAg
LTMwMywxMiArMjM1LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxs
IHsKICAgICBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKCkgY29uc3QgeyByZXR1
cm4gMDsgfQogICAgIHVuc2lnbmVkIGVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kQ29s
dW1uOyB9CiAKLSAgICB2b2lkIGFkZE9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXQo
SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCBvZmZzZXQpCi0gICAgewotICAgICAgICBjcmVhdGVS
YXJlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29u
dHJvbEZsb3dCeXRlY29kZU9mZnNldHMuYXBwZW5kKG9mZnNldCk7Ci0gICAgfQotICAgIGNvbnN0
IFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiYgb3BQcm9maWxlQ29udHJvbEZsb3dC
eXRlY29kZU9mZnNldHMoKSBjb25zdAorICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxJbnN0cnVj
dGlvblN0cmVhbTo6T2Zmc2V0PiYgb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMo
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fcmFyZURhdGEpOwogICAgICAgICByZXR1
cm4gbV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0czsKQEAg
LTM4NywyMSArMzE0LDE3IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2Vs
bCB7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlUmV3cml0ZXI7Ci0gICAg
ZnJpZW5kIGNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBVbmxpbmtl
ZENvZGVCbG9ja0dlbmVyYXRvcjsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHM+CiAgICAg
ZnJpZW5kIGNsYXNzIEJ5dGVjb2RlR2VuZXJhdG9yQmFzZTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGU+CiAgICAgZnJpZW5kIGNsYXNzIENhY2hlZENvZGVCbG9jazsKIAot
ICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYsIEluc3RydWN0aW9u
U3RyZWFtV3JpdGVyJik7Ci0KLSAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKQor
ICAgIHZvaWQgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeShjb25zdCBBYnN0cmFjdExvY2tlciYp
CiAgICAgewotICAgICAgICBpZiAoIW1fcmFyZURhdGEpIHsKLSAgICAgICAgICAgIGF1dG8gbG9j
a2VyID0gbG9ja0R1cmluZ01hcmtpbmcoKmhlYXAoKSwgY2VsbExvY2soKSk7CisgICAgICAgIGlm
ICghbV9yYXJlRGF0YSkKICAgICAgICAgICAgIG1fcmFyZURhdGEgPSBtYWtlVW5pcXVlPFJhcmVE
YXRhPigpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBnZXRMaW5lQW5kQ29sdW1uKGNv
bnN0IEV4cHJlc3Npb25SYW5nZUluZm8mLCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVt
bikgY29uc3Q7CkBAIC00NDYsNyArMzY5LDcgQEAgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2sgOiBw
dWJsaWMgSlNDZWxsIHsKICAgICBTdHJpbmcgbV9zb3VyY2VVUkxEaXJlY3RpdmU7CiAgICAgU3Ry
aW5nIG1fc291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZTsKIAotICAgIFZlY3RvcjxJbnN0cnVjdGlv
blN0cmVhbTo6T2Zmc2V0PiBtX2p1bXBUYXJnZXRzOworICAgIFJlZkNvdW50ZWRBcnJheTxJbnN0
cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX2p1bXBUYXJnZXRzOwogICAgIFJlZjxVbmxpbmtlZE1l
dGFkYXRhVGFibGU+IG1fbWV0YWRhdGE7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9u
U3RyZWFtPiBtX2luc3RydWN0aW9uczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwpAQCAtNDU3LDEwICszODAsMTAgQEAgY2xhc3MgVW5s
aW5rZWRDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICNlbmRpZgogCiAgICAgLy8gQ29uc3Rh
bnQgUG9vbHMKLSAgICBWZWN0b3I8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKLSAgICBWZWN0
b3I8V3JpdGVCYXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOwotICAgIFZlY3Rv
cjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOwotICAgIHR5cGVkZWYgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZT4+IEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvcjsKKyAgICBSZWZDb3VudGVkQXJy
YXk8SWRlbnRpZmllcj4gbV9pZGVudGlmaWVyczsKKyAgICBSZWZDb3VudGVkQXJyYXk8V3JpdGVC
YXJyaWVyPFVua25vd24+PiBtX2NvbnN0YW50UmVnaXN0ZXJzOworICAgIFJlZkNvdW50ZWRBcnJh
eTxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+IG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uOworICAgIHVzaW5nIEZ1bmN0aW9uRXhwcmVzc2lvblZlY3RvciA9IFJlZkNvdW50ZWRB
cnJheTxXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+PjsKICAgICBGdW5j
dGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkRlY2xzOwogICAgIEZ1bmN0aW9uRXhwcmVz
c2lvblZlY3RvciBtX2Z1bmN0aW9uRXhwcnM7CiAKQEAgLTQ2OCwyNyArMzkxLDI2IEBAIGNsYXNz
IFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgc3RydWN0IFJhcmVEYXRh
IHsKICAgICAgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwogCi0gICAgICAgIFZl
Y3RvcjxVbmxpbmtlZEhhbmRsZXJJbmZvPiBtX2V4Y2VwdGlvbkhhbmRsZXJzOworICAgICAgICBS
ZWZDb3VudGVkQXJyYXk8VW5saW5rZWRIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsK
IAogICAgICAgICAvLyBKdW1wIFRhYmxlcwotICAgICAgICBWZWN0b3I8VW5saW5rZWRTaW1wbGVK
dW1wVGFibGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKLSAgICAgICAgVmVjdG9yPFVubGlua2VkU3Ry
aW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CisgICAgICAgIFJlZkNvdW50
ZWRBcnJheTxVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOworICAg
ICAgICBSZWZDb3VudGVkQXJyYXk8VW5saW5rZWRTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5nU3dp
dGNoSnVtcFRhYmxlczsKIAotICAgICAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0
UG9zaXRpb24+IG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7CisgICAgICAgIFJlZkNvdW50
ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3NpdGlvbj4gbV9leHByZXNzaW9uSW5m
b0ZhdFBvc2l0aW9uczsKIAogICAgICAgICBzdHJ1Y3QgVHlwZVByb2ZpbGVyRXhwcmVzc2lvblJh
bmdlIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG1fc3RhcnREaXZvdDsKICAgICAgICAgICAgIHVu
c2lnbmVkIG1fZW5kRGl2b3Q7CiAgICAgICAgIH07CiAgICAgICAgIEhhc2hNYXA8dW5zaWduZWQs
IFR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZT4gbV90eXBlUHJvZmlsZXJJbmZvTWFwOwotICAg
ICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9vcFByb2ZpbGVDb250cm9s
Rmxvd0J5dGVjb2RlT2Zmc2V0czsKLSAgICAgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9iaXRWZWN0
b3JzOwotICAgICAgICBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+IG1fY29uc3Rh
bnRJZGVudGlmaWVyU2V0czsKKyAgICAgICAgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9uU3Ry
ZWFtOjpPZmZzZXQ+IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CisgICAg
ICAgIFJlZkNvdW50ZWRBcnJheTxCaXRWZWN0b3I+IG1fYml0VmVjdG9yczsKKyAgICAgICAgUmVm
Q291bnRlZEFycmF5PENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRp
ZmllclNldHM7CiAKICAgICAgICAgdW5zaWduZWQgbV9uZWVkc0NsYXNzRmllbGRJbml0aWFsaXpl
ciA6IDE7CiAgICAgfTsKIAotICAgIHZvaWQgYWRkT3V0T2ZMaW5lSnVtcFRhcmdldChJbnN0cnVj
dGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQgdGFyZ2V0KTsKICAgICBpbnQgb3V0T2ZMaW5lSnVtcE9m
ZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KTsKICAgICBpbnQgb3V0T2ZMaW5lSnVtcE9m
ZnNldChjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpbnN0cnVjdGlvbikKICAgICB7CkBA
IC00OTgsMTYgKzQyMCw5IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2Vs
bCB7CiBwcml2YXRlOgogICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJ
bnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OwogCi0gICAgT3V0T2ZMaW5lSnVtcFRhcmdl
dHMgcmVwbGFjZU91dE9mTGluZUp1bXBUYXJnZXRzKCkKLSAgICB7Ci0gICAgICAgIE91dE9mTGlu
ZUp1bXBUYXJnZXRzIG5ld0p1bXBUYXJnZXRzOwotICAgICAgICBzdGQ6OnN3YXAobV9vdXRPZkxp
bmVKdW1wVGFyZ2V0cywgbmV3SnVtcFRhcmdldHMpOwotICAgICAgICByZXR1cm4gbmV3SnVtcFRh
cmdldHM7Ci0gICAgfQotCiAgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1w
VGFyZ2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURhdGE7Ci0gICAg
VmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87CisgICAgUmVmQ291
bnRlZEFycmF5PEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhwcmVzc2lvbkluZm87CiAKIHByb3Rl
Y3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYjBlMjJjNTIyN2I3YzMz
ZWYzZmQxNDFkYWJkMGMzM2E2NGJiZDU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmNwcApAQCAtMCww
ICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
ci5oIgorCisjaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuaCIKKyNpbmNsdWRlICJCeXRlY29kZVJld3JpdGVyLmgiCisjaW5j
bHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCisjaW5jbHVkZSAiRXhl
Y3V0YWJsZUluZm8uaCIKKyNpbmNsdWRlICJGdW5jdGlvbk92ZXJyaWRlcy5oIgorI2luY2x1ZGUg
Ikluc3RydWN0aW9uU3RyZWFtLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
IkpTU3RyaW5nLmgiCisjaW5jbHVkZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiUGFyc2VyLmgiCisj
aW5jbHVkZSAiUHJlY2lzZUp1bXBUYXJnZXRzSW5saW5lcy5oIgorI2luY2x1ZGUgIlNvdXJjZVBy
b3ZpZGVyLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3ltYm9sVGFibGUu
aCIKKyNpbmNsdWRlICJVbmxpbmtlZEV2YWxDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJVbmxpbmtl
ZEZ1bmN0aW9uQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIlVubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitpbmxpbmUgdm9pZCBVbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvcjo6Z2V0TGluZUFuZENvbHVtbihjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZvJiBpbmZv
LCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KGluZm8ubW9kZSkgeworICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZU1vZGU6
CisgICAgICAgIGluZm8uZGVjb2RlRmF0TGluZU1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1bW5Nb2RlOgorICAg
ICAgICBpbmZvLmRlY29kZUZhdENvbHVtbk1vZGUobGluZSwgY29sdW1uKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTog
eworICAgICAgICB1bnNpZ25lZCBmYXRJbmRleCA9IGluZm8ucG9zaXRpb247CisgICAgICAgIGNv
bnN0IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdFBvc2l0aW9uJiBmYXRQb3MgPSBtX2V4cHJlc3Np
b25JbmZvRmF0UG9zaXRpb25zW2ZhdEluZGV4XTsKKyAgICAgICAgbGluZSA9IGZhdFBvcy5saW5l
OworICAgICAgICBjb2x1bW4gPSBmYXRQb3MuY29sdW1uOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgfSAvLyBzd2l0Y2gKK30KKwordm9pZCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6
YWRkRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIGludCBkaXZvdCwg
aW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBj
b2x1bW4pCit7CisgICAgaWYgKGRpdm90ID4gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RGl2b3Qp
IHsKKyAgICAgICAgLy8gT3ZlcmZsb3cgaGFzIG9jY3VycmVkLCB3ZSBjYW4gb25seSBnaXZlIGxp
bmUgbnVtYmVyIGluZm8gZm9yIGVycm9ycyBmb3IgdGhpcyByZWdpb24KKyAgICAgICAgZGl2b3Qg
PSAwOworICAgICAgICBzdGFydE9mZnNldCA9IDA7CisgICAgICAgIGVuZE9mZnNldCA9IDA7Cisg
ICAgfSBlbHNlIGlmIChzdGFydE9mZnNldCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heE9mZnNl
dCkgeworICAgICAgICAvLyBJZiB0aGUgc3RhcnQgb2Zmc2V0IGlzIG91dCBvZiBib3VuZHMgd2Ug
Y2xlYXIgYm90aCBvZmZzZXRzCisgICAgICAgIC8vIHNvIHdlIG9ubHkgZ2V0IHRoZSBkaXZvdCBt
YXJrZXIuIEVycm9yIG1lc3NhZ2Ugd2lsbCBoYXZlIHRvIGJlIHJlZHVjZWQKKyAgICAgICAgLy8g
dG8gbGluZSBhbmQgY2hhclBvc2l0aW9uIG51bWJlci4KKyAgICAgICAgc3RhcnRPZmZzZXQgPSAw
OworICAgICAgICBlbmRPZmZzZXQgPSAwOworICAgIH0gZWxzZSBpZiAoZW5kT2Zmc2V0ID4gRXhw
cmVzc2lvblJhbmdlSW5mbzo6TWF4T2Zmc2V0KSB7CisgICAgICAgIC8vIFRoZSBlbmQgb2Zmc2V0
IGlzIG9ubHkgdXNlZCBmb3IgYWRkaXRpb25hbCBjb250ZXh0LCBhbmQgaXMgbXVjaCBtb3JlIGxp
a2VseQorICAgICAgICAvLyB0byBvdmVyZmxvdyAoZWcuIGZ1bmN0aW9uIGNhbGwgYXJndW1lbnRz
KSBzbyB3ZSBhcmUgd2lsbGluZyB0byBkcm9wIGl0IHdpdGhvdXQKKyAgICAgICAgLy8gZHJvcHBp
bmcgdGhlIHJlc3Qgb2YgdGhlIHJhbmdlLgorICAgICAgICBlbmRPZmZzZXQgPSAwOworICAgIH0K
KworICAgIHVuc2lnbmVkIHBvc2l0aW9uTW9kZSA9CisgICAgICAgIChsaW5lIDw9IEV4cHJlc3Np
b25SYW5nZUluZm86Ok1heEZhdExpbmVNb2RlTGluZSAmJiBjb2x1bW4gPD0gRXhwcmVzc2lvblJh
bmdlSW5mbzo6TWF4RmF0TGluZU1vZGVDb2x1bW4pCisgICAgICAgID8gRXhwcmVzc2lvblJhbmdl
SW5mbzo6RmF0TGluZU1vZGUKKyAgICAgICAgOiAobGluZSA8PSBFeHByZXNzaW9uUmFuZ2VJbmZv
OjpNYXhGYXRDb2x1bW5Nb2RlTGluZSAmJiBjb2x1bW4gPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6
TWF4RmF0Q29sdW1uTW9kZUNvbHVtbikKKyAgICAgICAgPyBFeHByZXNzaW9uUmFuZ2VJbmZvOjpG
YXRDb2x1bW5Nb2RlCisgICAgICAgIDogRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0TGluZUFuZENv
bHVtbk1vZGU7CisKKyAgICBFeHByZXNzaW9uUmFuZ2VJbmZvIGluZm87CisgICAgaW5mby5pbnN0
cnVjdGlvbk9mZnNldCA9IGluc3RydWN0aW9uT2Zmc2V0OworICAgIGluZm8uZGl2b3RQb2ludCA9
IGRpdm90OworICAgIGluZm8uc3RhcnRPZmZzZXQgPSBzdGFydE9mZnNldDsKKyAgICBpbmZvLmVu
ZE9mZnNldCA9IGVuZE9mZnNldDsKKworICAgIGluZm8ubW9kZSA9IHBvc2l0aW9uTW9kZTsKKyAg
ICBzd2l0Y2ggKHBvc2l0aW9uTW9kZSkgeworICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5mbzo6
RmF0TGluZU1vZGU6CisgICAgICAgIGluZm8uZW5jb2RlRmF0TGluZU1vZGUobGluZSwgY29sdW1u
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRDb2x1
bW5Nb2RlOgorICAgICAgICBpbmZvLmVuY29kZUZhdENvbHVtbk1vZGUobGluZSwgY29sdW1uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lQW5k
Q29sdW1uTW9kZTogeworICAgICAgICB1bnNpZ25lZCBmYXRJbmRleCA9IG1fZXhwcmVzc2lvbklu
Zm9GYXRQb3NpdGlvbnMuc2l6ZSgpOworICAgICAgICBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQ
b3NpdGlvbiBmYXRQb3MgPSB7IGxpbmUsIGNvbHVtbiB9OworICAgICAgICBtX2V4cHJlc3Npb25J
bmZvRmF0UG9zaXRpb25zLmFwcGVuZChmYXRQb3MpOworICAgICAgICBpbmZvLnBvc2l0aW9uID0g
ZmF0SW5kZXg7CisgICAgfQorICAgIH0gLy8gc3dpdGNoCisKKyAgICBtX2V4cHJlc3Npb25JbmZv
LmFwcGVuZChpbmZvKTsKK30KKwordm9pZCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRk
VHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQsIHVu
c2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90KQoreworICAgIFVubGlua2VkQ29k
ZUJsb2NrOjpSYXJlRGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlIHJhbmdlOworICAg
IHJhbmdlLm1fc3RhcnREaXZvdCA9IHN0YXJ0RGl2b3Q7CisgICAgcmFuZ2UubV9lbmREaXZvdCA9
IGVuZERpdm90OworICAgIG1fdHlwZVByb2ZpbGVySW5mb01hcC5zZXQoaW5zdHJ1Y3Rpb25PZmZz
ZXQsIHJhbmdlKTsKK30KKwordm9pZCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6ZmluYWxp
emUoc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBpbnN0cnVjdGlvbnMpCit7Cisg
ICAgQVNTRVJUKGluc3RydWN0aW9ucyk7CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fY29kZUJsb2NrLT5jZWxsTG9jaygpKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1f
aW5zdHJ1Y3Rpb25zID0gV1RGTW92ZShpbnN0cnVjdGlvbnMpOworICAgICAgICBtX2NvZGVCbG9j
ay0+bV9tZXRhZGF0YS0+ZmluYWxpemUoKTsKKworICAgICAgICBtX2NvZGVCbG9jay0+bV9qdW1w
VGFyZ2V0cyA9IFdURk1vdmUobV9qdW1wVGFyZ2V0cyk7CisgICAgICAgIG1fY29kZUJsb2NrLT5t
X2lkZW50aWZpZXJzID0gV1RGTW92ZShtX2lkZW50aWZpZXJzKTsKKyAgICAgICAgbV9jb2RlQmxv
Y2stPm1fY29uc3RhbnRSZWdpc3RlcnMgPSBXVEZNb3ZlKG1fY29uc3RhbnRSZWdpc3RlcnMpOwor
ICAgICAgICBtX2NvZGVCbG9jay0+bV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24g
PSBXVEZNb3ZlKG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKKyAgICAgICAg
bV9jb2RlQmxvY2stPm1fZnVuY3Rpb25EZWNscyA9IFdURk1vdmUobV9mdW5jdGlvbkRlY2xzKTsK
KyAgICAgICAgbV9jb2RlQmxvY2stPm1fZnVuY3Rpb25FeHBycyA9IFdURk1vdmUobV9mdW5jdGlv
bkV4cHJzKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fZXhwcmVzc2lvbkluZm8gPSBXVEZNb3Zl
KG1fZXhwcmVzc2lvbkluZm8pOworICAgICAgICBtX2NvZGVCbG9jay0+bV9vdXRPZkxpbmVKdW1w
VGFyZ2V0cyA9IFdURk1vdmUobV9vdXRPZkxpbmVKdW1wVGFyZ2V0cyk7CisKKyAgICAgICAgaWYg
KCFtX2NvZGVCbG9jay0+bV9yYXJlRGF0YSkgeworICAgICAgICAgICAgaWYgKCFtX2V4Y2VwdGlv
bkhhbmRsZXJzLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgIHx8ICFtX3N3aXRjaEp1bXBUYWJs
ZXMuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgfHwgIW1fc3RyaW5nU3dpdGNoSnVtcFRhYmxl
cy5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICB8fCAhbV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0
aW9ucy5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICB8fCAhbV90eXBlUHJvZmlsZXJJbmZvTWFw
LmlzRW1wdHkoKQorICAgICAgICAgICAgICAgIHx8ICFtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0
ZWNvZGVPZmZzZXRzLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgIHx8ICFtX2JpdFZlY3RvcnMu
aXNFbXB0eSgpCisgICAgICAgICAgICAgICAgfHwgIW1fY29uc3RhbnRJZGVudGlmaWVyU2V0cy5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmNyZWF0ZVJhcmVEYXRhSWZO
ZWNlc3NhcnkobG9ja2VyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9jb2RlQmxvY2stPm1f
cmFyZURhdGEpIHsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX3JhcmVEYXRhLT5tX2V4Y2Vw
dGlvbkhhbmRsZXJzID0gV1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRsZXJzKTsKKyAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5tX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMgPSBXVEZNb3ZlKG1f
c3dpdGNoSnVtcFRhYmxlcyk7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9yYXJlRGF0YS0+
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N0cmluZ1N3aXRjaEp1bXBUYWJs
ZXMpOworICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fcmFyZURhdGEtPm1fZXhwcmVzc2lvbklu
Zm9GYXRQb3NpdGlvbnMgPSBXVEZNb3ZlKG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMpOwor
ICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01h
cCA9IFdURk1vdmUobV90eXBlUHJvZmlsZXJJbmZvTWFwKTsKKyAgICAgICAgICAgIG1fY29kZUJs
b2NrLT5tX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzID0g
V1RGTW92ZShtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKTsKKyAgICAgICAg
ICAgIG1fY29kZUJsb2NrLT5tX3JhcmVEYXRhLT5tX2JpdFZlY3RvcnMgPSBXVEZNb3ZlKG1fYml0
VmVjdG9ycyk7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9yYXJlRGF0YS0+bV9jb25zdGFu
dElkZW50aWZpZXJTZXRzID0gV1RGTW92ZShtX2NvbnN0YW50SWRlbnRpZmllclNldHMpOworICAg
ICAgICB9CisgICAgfQorICAgIG1fdm0uaGVhcC53cml0ZUJhcnJpZXIobV9jb2RlQmxvY2suZ2V0
KCkpOworICAgIG1fdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX2NvZGVCbG9j
ay0+bV9pbnN0cnVjdGlvbnMtPnNpemVJbkJ5dGVzKCkgKyBtX2NvZGVCbG9jay0+bV9tZXRhZGF0
YS0+c2l6ZUluQnl0ZXMoKSk7Cit9CisKK1VubGlua2VkSGFuZGxlckluZm8qIFVubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yOjpoYW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGJ5
dGVjb2RlSW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCit7CisgICAgcmV0
dXJuIGhhbmRsZXJGb3JJbmRleChieXRlY29kZUluZGV4Lm9mZnNldCgpLCByZXF1aXJlZEhhbmRs
ZXIpOworfQorCitVbmxpbmtlZEhhbmRsZXJJbmZvKiBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
cjo6aGFuZGxlckZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVxdWly
ZWRIYW5kbGVyKQoreworICAgIHJldHVybiBVbmxpbmtlZEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9y
SW5kZXg8VW5saW5rZWRIYW5kbGVySW5mbz4obV9leGNlcHRpb25IYW5kbGVycywgaW5kZXgsIHJl
cXVpcmVkSGFuZGxlcik7Cit9CisKK3ZvaWQgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmFw
cGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImIHJld3JpdGVyLCBJbnN0cnVjdGlvblN0
cmVhbVdyaXRlciYgaW5zdHJ1Y3Rpb25zKQoreworICAgIC8vIEJlZm9yZSBhcHBseWluZyB0aGUg
Y2hhbmdlcywgd2UgYWRqdXN0IHRoZSBqdW1wcyBiYXNlZCBvbiB0aGUgb3JpZ2luYWwgYnl0ZWNv
ZGUgb2Zmc2V0LCB0aGUgb2Zmc2V0IHRvIHRoZSBqdW1wIHRhcmdldCwgYW5kCisgICAgLy8gdGhl
IGluc2VydGlvbiBpbmZvcm1hdGlvbi4KKworICAgIHJld3JpdGVyLmFkanVzdEp1bXBUYXJnZXRz
KCk7CisKKyAgICAvLyBUaGVuLCBleGNlcHRpb24gaGFuZGxlcnMgc2hvdWxkIGJlIGFkanVzdGVk
LgorICAgIGZvciAoVW5saW5rZWRIYW5kbGVySW5mbyYgaGFuZGxlciA6IG1fZXhjZXB0aW9uSGFu
ZGxlcnMpIHsKKyAgICAgICAgaGFuZGxlci50YXJnZXQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0
ZU9mZnNldChoYW5kbGVyLnRhcmdldCk7CisgICAgICAgIGhhbmRsZXIuc3RhcnQgPSByZXdyaXRl
ci5hZGp1c3RBYnNvbHV0ZU9mZnNldChoYW5kbGVyLnN0YXJ0KTsKKyAgICAgICAgaGFuZGxlci5l
bmQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0ZU9mZnNldChoYW5kbGVyLmVuZCk7CisgICAgfQor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNv
ZGVPZmZzZXRzLnNpemUoKTsgKytpKQorICAgICAgICBtX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0
ZWNvZGVPZmZzZXRzW2ldID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQobV9vcFByb2Zp
bGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0c1tpXSk7CisKKyAgICBpZiAoIW1fdHlwZVByb2Zp
bGVySW5mb01hcC5pc0VtcHR5KCkpIHsKKyAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgVW5saW5r
ZWRDb2RlQmxvY2s6OlJhcmVEYXRhOjpUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IGFkanVz
dGVkVHlwZVByb2ZpbGVySW5mb01hcDsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fdHlw
ZVByb2ZpbGVySW5mb01hcCkKKyAgICAgICAgICAgIGFkanVzdGVkVHlwZVByb2ZpbGVySW5mb01h
cC5zZXQocmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQoZW50cnkua2V5KSwgZW50cnkudmFs
dWUpOworICAgICAgICBtX3R5cGVQcm9maWxlckluZm9NYXAuc3dhcChhZGp1c3RlZFR5cGVQcm9m
aWxlckluZm9NYXApOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9leHBy
ZXNzaW9uSW5mby5zaXplKCk7ICsraSkKKyAgICAgICAgbV9leHByZXNzaW9uSW5mb1tpXS5pbnN0
cnVjdGlvbk9mZnNldCA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KG1fZXhwcmVzc2lv
bkluZm9baV0uaW5zdHJ1Y3Rpb25PZmZzZXQpOworCisgICAgLy8gVGhlbiwgbW9kaWZ5IHRoZSB1
bmxpbmtlZCBpbnN0cnVjdGlvbnMuCisgICAgcmV3cml0ZXIuYXBwbHlNb2RpZmljYXRpb24oKTsK
KworICAgIC8vIEFuZCByZWNvbXB1dGUgdGhlIGp1bXAgdGFyZ2V0IGJhc2VkIG9uIHRoZSBtb2Rp
ZmllZCB1bmxpbmtlZCBpbnN0cnVjdGlvbnMuCisgICAgbV9qdW1wVGFyZ2V0cy5jbGVhcigpOwor
ICAgIHJlY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyh0aGlzLCBpbnN0cnVjdGlvbnMsIG1fanVt
cFRhcmdldHMpOworfQorCit2b2lkIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjphZGRPdXRP
ZkxpbmVKdW1wVGFyZ2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQs
IGludCB0YXJnZXQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0KTsKKyAgICBtX291dE9m
TGluZUp1bXBUYXJnZXRzLnNldChieXRlY29kZU9mZnNldCwgdGFyZ2V0KTsKK30KKworaW50IFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpCit7CisgICAgQVNTRVJUKG1fb3V0T2ZMaW5l
SnVtcFRhcmdldHMuY29udGFpbnMoYnl0ZWNvZGVPZmZzZXQpKTsKKyAgICByZXR1cm4gbV9vdXRP
ZkxpbmVKdW1wVGFyZ2V0cy5nZXQoYnl0ZWNvZGVPZmZzZXQpOworfQorCit2b2lkIFVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yOjpkdW1wKFByaW50U3RyZWFtJikgY29uc3QKK3sKK30KKworfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlNDJlMTEx
MmUyNWI0ZmRhM2QwNTk1OTg2ZjVmYTJjNTdlYTVjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaApA
QCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcikKK3B1Ymxp
YzoKKyAgICBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcihWTSYgdm0sIFVubGlua2VkQ29kZUJs
b2NrKiBjb2RlQmxvY2spCisgICAgICAgIDogbV92bSh2bSkKKyAgICAgICAgLCBtX2NvZGVCbG9j
ayh2bSwgY29kZUJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICBWTSYgdm0oKSB7IHJldHVybiBt
X3ZtOyB9CisKKyAgICBib29sIGlzQ29uc3RydWN0b3IoKSBjb25zdCB7IHJldHVybiBtX2NvZGVC
bG9jay0+aXNDb25zdHJ1Y3RvcigpOyB9CisgICAgQ29uc3RydWN0b3JLaW5kIGNvbnN0cnVjdG9y
S2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5jb25zdHJ1Y3RvcktpbmQoKTsgfQor
ICAgIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+c3VwZXJCaW5kaW5nKCk7IH0KKyAgICBKU1BhcnNlclNjcmlwdE1vZGUgc2NyaXB0TW9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5zY3JpcHRNb2RlKCk7IH0KKyAgICBOZWVkc0Ns
YXNzRmllbGRJbml0aWFsaXplciBuZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcigpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZUJsb2NrLT5uZWVkc0NsYXNzRmllbGRJbml0aWFsaXplcigpOyB9CisgICAg
Ym9vbCBpc1N0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aXNTdHJpY3RN
b2RlKCk7IH0KKyAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2st
PnVzZXNFdmFsKCk7IH0KKyAgICBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlQmxvY2stPnBhcnNlTW9kZSgpOyB9CisgICAgYm9vbCBpc0Fycm93RnVuY3Rp
b24oKSB7IHJldHVybiBtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCk7IH0KKyAgICBEZXJp
dmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
QmxvY2stPmRlcml2ZWRDb250ZXh0VHlwZSgpOyB9CisgICAgRXZhbENvbnRleHRUeXBlIGV2YWxD
b250ZXh0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5ldmFsQ29udGV4dFR5cGUo
KTsgfQorICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb25Db250ZXh0KCk7IH0KKyAgICBib29sIGlzQ2xhc3ND
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ2xhc3NDb250ZXh0KCk7IH0K
KyAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPm1f
bnVtQ2FsbGVlTG9jYWxzOyB9CisgICAgaW50IG51bVZhcnMoKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVCbG9jay0+bV9udW1WYXJzOyB9CisgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7IH0KKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgdGhpc1JlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPnRoaXNSZWdp
c3RlcigpOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpOyB9CisgICAgYm9vbCB3YXNDb21waWxl
ZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPndhc0Nv
bXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKTsgfQorICAgIGJvb2wgaGFzQ2hlY2twb2ludHMo
KSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aGFzQ2hlY2twb2ludHMoKTsgfQorICAgIGJv
b2wgaGFzVGFpbENhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmhhc1RhaWxDYWxs
cygpOyB9CisKKyAgICAvLyBVcGRhdGluZyBVbmxpbmtlZENvZGVCbG9jay4KKyAgICB2b2lkIHNl
dEhhc0NoZWNrcG9pbnRzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzQ2hlY2twb2ludHMoKTsgfQor
ICAgIHZvaWQgc2V0SGFzVGFpbENhbGxzKCkgeyBtX2NvZGVCbG9jay0+c2V0SGFzVGFpbENhbGxz
KCk7IH0KKyAgICB2b2lkIHNldE51bUNhbGxlZUxvY2FscyhpbnQgbnVtQ2FsbGVlTG9jYWxzKSB7
IG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2FscyA9IG51bUNhbGxlZUxvY2FsczsgfQorICAg
IHZvaWQgc2V0TnVtVmFycyhpbnQgbnVtVmFycykgeyBtX2NvZGVCbG9jay0+bV9udW1WYXJzID0g
bnVtVmFyczsgfQorICAgIHZvaWQgc2V0VGhpc1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlz
UmVnaXN0ZXIpIHsgbV9jb2RlQmxvY2stPnNldFRoaXNSZWdpc3Rlcih0aGlzUmVnaXN0ZXIpOyB9
CisgICAgdm9pZCBzZXRTY29wZVJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciB0aGlzUmVnaXN0ZXIp
IHsgbV9jb2RlQmxvY2stPnNldFNjb3BlUmVnaXN0ZXIodGhpc1JlZ2lzdGVyKTsgfQorICAgIHZv
aWQgc2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpIHsgbV9jb2RlQmxvY2stPnNldE51bVBh
cmFtZXRlcnMobmV3VmFsdWUpOyB9CisKKyAgICBVbmxpbmtlZE1ldGFkYXRhVGFibGUmIG1ldGFk
YXRhKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPm1ldGFkYXRhKCk7IH0KKyAgICB2b2lkIGFkZEV4
cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCBpbnQgZGl2b3QsIGludCBz
dGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1u
KTsKKyAgICB2b2lkIGFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3Ry
dWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBzdGFydERpdm90LCB1bnNpZ25lZCBlbmREaXZvdCk7Cisg
ICAgdm9pZCBhZGRPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgbV9vcFByb2ZpbGVDb250cm9s
Rmxvd0J5dGVjb2RlT2Zmc2V0cy5hcHBlbmQob2Zmc2V0KTsKKyAgICB9CisKKyAgICBzaXplX3Qg
bnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMuc2l6ZSgp
OyB9CisgICAgdm9pZCBhZGRKdW1wVGFyZ2V0KHVuc2lnbmVkIGp1bXBUYXJnZXQpIHsgbV9qdW1w
VGFyZ2V0cy5hcHBlbmQoanVtcFRhcmdldCk7IH0KKyAgICB1bnNpZ25lZCBqdW1wVGFyZ2V0KGlu
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9qdW1wVGFyZ2V0c1tpbmRleF07IH0KKyAgICB1bnNp
Z25lZCBsYXN0SnVtcFRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRhcmdldHMubGFzdCgp
OyB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1
cm4gbV9zd2l0Y2hKdW1wVGFibGVzLnNpemUoKTsgfQorICAgIFVubGlua2VkU2ltcGxlSnVtcFRh
YmxlJiBhZGRTd2l0Y2hKdW1wVGFibGUoKSB7IG1fc3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoVW5s
aW5rZWRTaW1wbGVKdW1wVGFibGUoKSk7IHJldHVybiBtX3N3aXRjaEp1bXBUYWJsZXMubGFzdCgp
OyB9CisgICAgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFi
bGVJbmRleCkgeyByZXR1cm4gbV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CisKKyAg
ICBzaXplX3QgbnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKTsgfQorICAgIFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlJiBhZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoKSB7IG1fc3RyaW5nU3dpdGNoSnVtcFRh
Ymxlcy5hcHBlbmQoVW5saW5rZWRTdHJpbmdKdW1wVGFibGUoKSk7IHJldHVybiBtX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9CisgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHN0
cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyByZXR1cm4gbV9zdHJpbmdTd2l0
Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZFeGNlcHRp
b25IYW5kbGVycygpIGNvbnN0IHsgcmV0dXJuIG1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpOyB9
CisgICAgVW5saW5rZWRIYW5kbGVySW5mbyYgZXhjZXB0aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsg
cmV0dXJuIG1fZXhjZXB0aW9uSGFuZGxlcnNbaW5kZXhdOyB9CisgICAgdm9pZCBhZGRFeGNlcHRp
b25IYW5kbGVyKGNvbnN0IFVubGlua2VkSGFuZGxlckluZm8mIGhhbmRsZXIpIHsgbV9leGNlcHRp
b25IYW5kbGVycy5hcHBlbmQoaGFuZGxlcik7IH0KKyAgICBVbmxpbmtlZEhhbmRsZXJJbmZvKiBo
YW5kbGVyRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgPSBS
ZXF1aXJlZEhhbmRsZXI6OkFueUhhbmRsZXIpOworICAgIFVubGlua2VkSGFuZGxlckluZm8qIGhh
bmRsZXJGb3JJbmRleCh1bnNpZ25lZCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVy
OjpBbnlIYW5kbGVyKTsKKworICAgIEJpdFZlY3RvciYgYml0VmVjdG9yKHNpemVfdCBpKSB7IHJl
dHVybiBtX2JpdFZlY3RvcnNbaV07IH0KKyAgICB1bnNpZ25lZCBhZGRCaXRWZWN0b3IoQml0VmVj
dG9yJiYgYml0VmVjdG9yKQorICAgIHsKKyAgICAgICAgbV9iaXRWZWN0b3JzLmFwcGVuZChXVEZN
b3ZlKGJpdFZlY3RvcikpOworICAgICAgICByZXR1cm4gbV9iaXRWZWN0b3JzLnNpemUoKSAtIDE7
CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudElkZW50aWZpZXJTZXRzKCkg
Y29uc3QgeyByZXR1cm4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzLnNpemUoKTsgfQorICAgIGNv
bnN0IFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50SWRlbnRpZmll
clNldHMoKSB7IHJldHVybiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7IH0KKyAgICB2b2lkIGFk
ZFNldENvbnN0YW50KElkZW50aWZpZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X3ZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gbV9jb25z
dGFudFJlZ2lzdGVycy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMuYXBwZW5k
KFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6T3RoZXIpOwor
ICAgICAgICBtX2NvbnN0YW50SWRlbnRpZmllclNldHMuYXBwZW5kKENvbnN0YW50SWRlbnRpZmll
clNldEVudHJ5KHNldCwgcmVzdWx0KSk7CisgICAgfQorCisgICAgY29uc3QgV3JpdGVCYXJyaWVy
PFVua25vd24+JiBjb25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsg
cmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQorICAg
IGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygp
IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUgZ2V0Q29uc3RhbnQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QgeyByZXR1cm4gbV9jb25z
dGFudFJlZ2lzdGVyc1tyZWcudG9Db25zdGFudEluZGV4KCldLmdldCgpOyB9CisgICAgY29uc3Qg
VmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4mIGNvbnN0YW50c1NvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbigpIHsgcmV0dXJuIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9u
OyB9CisKKyAgICB1bnNpZ25lZCBhZGRDb25zdGFudChKU1ZhbHVlIHYsIFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbiBzb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb246Ok90aGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdm0uaGVhcC5pc0RlZmVycmVk
KCkpOworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUo
KTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25v
d24+KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKHYpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bi5hcHBlbmQoc291cmNlQ29kZVJlcHJlc2VudGF0aW9uKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoTGlua1RpbWVDb25zdGFudCBsaW5r
VGltZUNvbnN0YW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdm0uaGVhcC5pc0RlZmVycmVk
KCkpOworICAgICAgICB1bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUo
KTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25v
d24+KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMyX3Q+KGxpbmtUaW1lQ29uc3RhbnQp
KSk7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChT
b3VyY2VDb2RlUmVwcmVzZW50YXRpb246OkxpbmtUaW1lQ29uc3RhbnQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIHVuc2lnbmVkIGFkZEZ1bmN0aW9uRGVjbChVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogbikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZtLmhlYXAu
aXNEZWZlcnJlZCgpKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1fZnVuY3Rpb25EZWNscy5z
aXplKCk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNscy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlY2xzLmxhc3Qo
KS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG4pOworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkV4cHIoVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqIG4pCisgICAgeworICAgICAgICB1bnNpZ25lZCBzaXplID0gbV9mdW5jdGlvbkV4cHJzLnNp
emUoKTsKKyAgICAgICAgbV9mdW5jdGlvbkV4cHJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGU+KCkpOworICAgICAgICBtX2Z1bmN0aW9uRXhwcnMubGFzdCgp
LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIobik7CisgICAgICAgIHJldHVybiBzaXplOworICAgIH0K
KworICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pZGVu
dGlmaWVycy5zaXplKCk7IH0KKyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKGludCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyc1tpbmRleF07IH0KKyAgICB2b2lkIGFk
ZElkZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYgaSkgeyByZXR1cm4gbV9pZGVudGlmaWVycy5h
cHBlbmQoaSk7IH0KKworICAgIHVzaW5nIE91dE9mTGluZUp1bXBUYXJnZXRzID0gSGFzaE1hcDxJ
bnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQ+OworICAgIHZvaWQgYWRkT3V0T2ZMaW5lSnVt
cFRhcmdldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCBpbnQgdGFyZ2V0KTsKKyAgICBpbnQg
b3V0T2ZMaW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0KTsKKyAgICBpbnQg
b3V0T2ZMaW5lSnVtcE9mZnNldChjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiBpbnN0cnVj
dGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVKdW1wT2Zmc2V0KGluc3RydWN0
aW9uLm9mZnNldCgpKTsKKyAgICB9CisgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgcmVwbGFjZU91
dE9mTGluZUp1bXBUYXJnZXRzKCkKKyAgICB7CisgICAgICAgIE91dE9mTGluZUp1bXBUYXJnZXRz
IG5ld0p1bXBUYXJnZXRzOworICAgICAgICBzdGQ6OnN3YXAobV9vdXRPZkxpbmVKdW1wVGFyZ2V0
cywgbmV3SnVtcFRhcmdldHMpOworICAgICAgICByZXR1cm4gbmV3SnVtcFRhcmdldHM7CisgICAg
fQorCisgICAgc2l6ZV90IG1ldGFkYXRhU2l6ZUluQnl0ZXMoKSB7IHJldHVybiBtX2NvZGVCbG9j
ay0+bWV0YWRhdGFTaXplSW5CeXRlcygpOyB9CisKKyAgICB2b2lkIGdldExpbmVBbmRDb2x1bW4o
Y29uc3QgRXhwcmVzc2lvblJhbmdlSW5mbyYsIHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29s
dW1uKSBjb25zdDsKKworICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRl
ciYsIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyJik7CisKKyAgICB2b2lkIGZpbmFsaXplKHN0ZDo6
dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4pOworCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVk0mIG1fdm07CisgICAgU3Ryb25nPFVubGlu
a2VkQ29kZUJsb2NrPiBtX2NvZGVCbG9jazsKKyAgICAvLyBJbiBub24tUmFyZURhdGEuCisgICAg
VmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fanVtcFRhcmdldHM7CisgICAgVmVj
dG9yPElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7CisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxV
bmtub3duPj4gbV9jb25zdGFudFJlZ2lzdGVyczsKKyAgICBWZWN0b3I8U291cmNlQ29kZVJlcHJl
c2VudGF0aW9uPiBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKKyAgICBWZWN0
b3I8V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPj4gbV9mdW5jdGlvbkRl
Y2xzOworICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+
PiBtX2Z1bmN0aW9uRXhwcnM7CisgICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+IG1fZXhw
cmVzc2lvbkluZm87CisgICAgT3V0T2ZMaW5lSnVtcFRhcmdldHMgbV9vdXRPZkxpbmVKdW1wVGFy
Z2V0czsKKyAgICAvLyBJbiBSYXJlRGF0YS4KKyAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5m
bz4gbV9leGNlcHRpb25IYW5kbGVyczsKKyAgICBWZWN0b3I8VW5saW5rZWRTaW1wbGVKdW1wVGFi
bGU+IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICBWZWN0b3I8VW5saW5rZWRTdHJpbmdKdW1wVGFi
bGU+IG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlczsKKyAgICBWZWN0b3I8RXhwcmVzc2lvblJhbmdl
SW5mbzo6RmF0UG9zaXRpb24+IG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7CisgICAgSGFz
aE1hcDx1bnNpZ25lZCwgVW5saW5rZWRDb2RlQmxvY2s6OlJhcmVEYXRhOjpUeXBlUHJvZmlsZXJF
eHByZXNzaW9uUmFuZ2U+IG1fdHlwZVByb2ZpbGVySW5mb01hcDsKKyAgICBWZWN0b3I8SW5zdHJ1
Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0
czsKKyAgICBWZWN0b3I8Qml0VmVjdG9yPiBtX2JpdFZlY3RvcnM7CisgICAgVmVjdG9yPENvbnN0
YW50SWRlbnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggZTMyMjIwNWRlZTc5NTQxY2M1
MDVlZjAzNmZmYjlhOTMxMzQyMmRmZi4uM2RiYzJiYzk1NjUzMDZmMTYxNDM5ZDliZDM5OTkyOTgw
MzVmNGNiOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTI4OCwxNyArMjg4LDE0IEBAIFBhcnNlckVy
cm9yIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiAgICAgICAgIHBlcmZvcm1HZW5lcmF0
b3JpZmljYXRpb24oKnRoaXMsIG1fY29kZUJsb2NrLmdldCgpLCBtX3dyaXRlciwgbV9nZW5lcmF0
b3JGcmFtZVN5bWJvbFRhYmxlLmdldCgpLCBtX2dlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRl
eCk7CiAKICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpKSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCkpOwotICAgIG1fY29kZUJsb2NrLT5zZXRJbnN0cnVjdGlvbnMobV93
cml0ZXIuZmluYWxpemUoKSk7Ci0KLSAgICBtX2NvZGVCbG9jay0+c2hyaW5rVG9GaXQoKTsKLQor
ICAgIG1fY29kZUJsb2NrLT5maW5hbGl6ZShtX3dyaXRlci5maW5hbGl6ZSgpKTsKICAgICBpZiAo
bV9leHByZXNzaW9uVG9vRGVlcCkKICAgICAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVy
cm9yOjpPdXRPZk1lbW9yeSk7CiAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNlckVycm9yOjpF
cnJvck5vbmUpOwogfQogCiBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0m
IHZtLCBQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayog
Y29kZUJsb2NrLCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1v
ZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3BlVERaVmFyaWFibGVzKQot
ICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4odm0s
IGNvZGVCbG9jayksIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmly
dHVhbFJlZ2lzdGVycygpKQorICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1ha2VVbmlxdWU8
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I+KHZtLCBjb2RlQmxvY2spLCBDb2RlQmxvY2s6Omxs
aW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkKICAgICAsIG1f
Y29kZUdlbmVyYXRpb25Nb2RlKGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAsIG1fc2NvcGVOb2Rl
KHByb2dyYW1Ob2RlKQogICAgICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1l
bnRPZmZzZXQoKSkKQEAgLTMzOSw3ICszMzYsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoVk0mIHZtLCBQcm9ncmFtTm9kZSogcHJvZ3JhbU5vZGUsIFVubGlua2VkUAog
fQogCiBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBGdW5jdGlv
bk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2Nr
LCBPcHRpb25TZXQ8Q29kZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUsIGNvbnN0
IFZhcmlhYmxlRW52aXJvbm1lbnQqIHBhcmVudFNjb3BlVERaVmFyaWFibGVzKQotICAgIDogQnl0
ZWNvZGVHZW5lcmF0b3JCYXNlKFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4odm0sIGNvZGVCbG9j
ayksIENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lz
dGVycygpKQorICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1ha2VVbmlxdWU8VW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3I+KHZtLCBjb2RlQmxvY2spLCBDb2RlQmxvY2s6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkKICAgICAsIG1fY29kZUdlbmVy
YXRpb25Nb2RlKGNvZGVHZW5lcmF0aW9uTW9kZSkKICAgICAsIG1fc2NvcGVOb2RlKGZ1bmN0aW9u
Tm9kZSkKICAgICAsIG1fY29kZVR5cGUoRnVuY3Rpb25Db2RlKQpAQCAtODMwLDcgKzgyNyw3IEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIEZ1bmN0aW9uTm9k
ZSogZnVuY3Rpb25Ob2RlLCBVbmxpbmtlCiB9CiAKIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYgdm0sIEV2YWxOb2RlKiBldmFsTm9kZSwgVW5saW5rZWRFdmFsQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5lcmF0
aW9uTW9kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCogcGFyZW50U2NvcGVURFpWYXJpYWJs
ZXMpCi0gICAgOiBCeXRlY29kZUdlbmVyYXRvckJhc2UoU3Ryb25nPFVubGlua2VkQ29kZUJsb2Nr
Pih2bSwgY29kZUJsb2NrKSwgQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNl
QXNWaXJ0dWFsUmVnaXN0ZXJzKCkpCisgICAgOiBCeXRlY29kZUdlbmVyYXRvckJhc2UobWFrZVVu
aXF1ZTxVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcj4odm0sIGNvZGVCbG9jayksIENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKQogICAg
ICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRpb25Nb2RlKQogICAgICwgbV9zY29w
ZU5vZGUoZXZhbE5vZGUpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1
bWVudE9mZnNldCgpKQpAQCAtODg4LDcgKzg4NSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRl
Y29kZUdlbmVyYXRvcihWTSYgdm0sIEV2YWxOb2RlKiBldmFsTm9kZSwgVW5saW5rZWRFdmFsQ29k
CiB9CiAKIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYgdm0sIE1vZHVs
ZVByb2dyYW1Ob2RlKiBtb2R1bGVQcm9ncmFtTm9kZSwgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIE9wdGlvblNldDxDb2RlR2VuZXJhdGlvbk1vZGU+IGNvZGVHZW5l
cmF0aW9uTW9kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCogcGFyZW50U2NvcGVURFpWYXJp
YWJsZXMpCi0gICAgOiBCeXRlY29kZUdlbmVyYXRvckJhc2UoU3Ryb25nPFVubGlua2VkQ29kZUJs
b2NrPih2bSwgY29kZUJsb2NrKSwgQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNw
YWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpCisgICAgOiBCeXRlY29kZUdlbmVyYXRvckJhc2UobWFr
ZVVuaXF1ZTxVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcj4odm0sIGNvZGVCbG9jayksIENvZGVC
bG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKQog
ICAgICwgbV9jb2RlR2VuZXJhdGlvbk1vZGUoY29kZUdlbmVyYXRpb25Nb2RlKQogICAgICwgbV9z
Y29wZU5vZGUobW9kdWxlUHJvZ3JhbU5vZGUpCiAgICAgLCBtX3RoaXNSZWdpc3RlcihDYWxsRnJh
bWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKQpAQCAtMTE5MCw3ICsxMTg3LDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmluaXRpYWxpemVOZXh0UGFyYW1ldGVyKCkKICAgICBtX3Bh
cmFtZXRlcnMuZ3JvdyhtX3BhcmFtZXRlcnMuc2l6ZSgpICsgMSk7CiAgICAgYXV0byYgcGFyYW1l
dGVyID0gcmVnaXN0ZXJGb3IocmVnKTsKICAgICBwYXJhbWV0ZXIuc2V0SW5kZXgocmVnKTsKLSAg
ICBtX2NvZGVCbG9jay0+YWRkUGFyYW1ldGVyKCk7CisgICAgbV9jb2RlQmxvY2stPnNldE51bVBh
cmFtZXRlcnMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSArIDEpOwogICAgIHJldHVybiAm
cGFyYW1ldGVyOwogfQogCkBAIC0zNzgxLDkgKzM3NzgsOSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
LCBSZQogICAgIGlmIChpc0NhcHR1cmVkKQogICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLnNldElzQ2FwdHVyZWQoKTsKICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnNldElz
Q29uc3QoKTsgLy8gVGhlIGZ1bmN0aW9uIG5hbWUgc2NvcGUgbmFtZSBhY3RzIGxpa2UgYSBjb25z
dCB2YXJpYWJsZS4KLSAgICB1bnNpZ25lZCBudW1WYXJzID0gbV9jb2RlQmxvY2stPm1fbnVtVmFy
czsKKyAgICB1bnNpZ25lZCBudW1WYXJzID0gbV9jb2RlQmxvY2stPm51bVZhcnMoKTsKICAgICBw
dXNoTGV4aWNhbFNjb3BlSW50ZXJuYWwobmFtZVNjb3BlRW52aXJvbm1lbnQsIFREWkNoZWNrT3B0
aW1pemF0aW9uOjpPcHRpbWl6ZSwgTmVzdGVkU2NvcGVUeXBlOjpJc05vdE5lc3RlZCwgbnVsbHB0
ciwgVERaUmVxdWlyZW1lbnQ6Ok5vdFVuZGVyVERaLCBTY29wZVR5cGU6OkZ1bmN0aW9uTmFtZVNj
b3BlLCBTY29wZVJlZ2lzdGVyVHlwZTo6VmFyKTsKLSAgICBBU1NFUlRfVU5VU0VEKG51bVZhcnMs
IG1fY29kZUJsb2NrLT5tX251bVZhcnMgPT0gc3RhdGljX2Nhc3Q8aW50PihudW1WYXJzICsgMSkp
OyAvLyBTaG91bGQgaGF2ZSBvbmx5IGNyZWF0ZWQgb25lIG5ldyAidmFyIiBmb3IgdGhlIGZ1bmN0
aW9uIG5hbWUgc2NvcGUuCisgICAgQVNTRVJUX1VOVVNFRChudW1WYXJzLCBtX2NvZGVCbG9jay0+
bnVtVmFycygpID09IHN0YXRpY19jYXN0PGludD4obnVtVmFycyArIDEpKTsgLy8gU2hvdWxkIGhh
dmUgb25seSBjcmVhdGVkIG9uZSBuZXcgInZhciIgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIHNjb3Bl
LgogICAgIGJvb2wgc2hvdWxkVHJlYXRBc0xleGljYWxWYXJpYWJsZSA9IGlzU3RyaWN0TW9kZSgp
OwogICAgIFZhcmlhYmxlIGZ1bmN0aW9uVmFyID0gdmFyaWFibGVGb3JMb2NhbEVudHJ5KHByb3Bl
cnR5LCBtX2xleGljYWxTY29wZVN0YWNrLmxhc3QoKS5tX3N5bWJvbFRhYmxlLT5nZXQoTm9Mb2Nr
aW5nTmVjZXNzYXJ5LCBwcm9wZXJ0eS5pbXBsKCkpLCBtX2xleGljYWxTY29wZVN0YWNrLmxhc3Qo
KS5tX3N5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgc2hvdWxkVHJlYXRBc0xleGljYWxWYXJpYWJs
ZSk7CiAgICAgZW1pdFB1dFRvU2NvcGUobV9sZXhpY2FsU2NvcGVTdGFjay5sYXN0KCkubV9zY29w
ZSwgZnVuY3Rpb25WYXIsIGNhbGxlZSwgVGhyb3dJZk5vdEZvdW5kLCBJbml0aWFsaXphdGlvbk1v
ZGU6Ok5vdEluaXRpYWxpemF0aW9uKTsKQEAgLTQ5NDgsNyArNDk0NSw3IEBAIHZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRPcHRpb25hbENoZWNrKFJlZ2lzdGVySUQqIHNyYykKICAgICBlbWl0
SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWRPck51bGwobmV3VGVtcG9yYXJ5KCksIHNyYyksIG1f
b3B0aW9uYWxDaGFpblRhcmdldFN0YWNrLmxhc3QoKS5nZXQoKSk7CiB9CiAKLXZvaWQgRm9ySW5D
b250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENv
ZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lk
IEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2Rl
RW5kT2Zmc2V0KQogewogICAgIC8vIExleGljYWxseSBpbnZhbGlkYXRpbmcgRm9ySW5Db250ZXh0
cyBpcyBraW5kIG9mIHdlYWsgc2F1Y2UsIGJ1dCBpdCBvbmx5IG9jY3VycyBpZgogICAgIC8vIGVp
dGhlciBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKQEAgLTQ5NzMsNyArNDk3
MCw3IEBAIHZvaWQgRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9jayogY29kCiAgICAgfQogfQogCi12b2lkIFN0cnVjdHVy
ZUZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5s
aW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0
KQordm9pZCBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2ln
bmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKIHsKICAgICBCYXNlOjpmaW5hbGl6ZShnZW5lcmF0
b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKICAgICBpZiAoaXNWYWxpZCgp
KQpAQCAtNTAxMiw3ICs1MDA5LDcgQEAgdm9pZCBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmZpbmFs
aXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUIKICAgICB9CiB9
CiAKLXZvaWQgSW5kZXhlZEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5
dGVjb2RlRW5kT2Zmc2V0KQordm9pZCBJbmRleGVkRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29k
ZUJsb2NrLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCiB7CiAgICAgQmFzZTo6Zmlu
YWxpemUoZ2VuZXJhdG9yLCBjb2RlQmxvY2ssIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7CiAgICAg
aWYgKGlzVmFsaWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCAxNDhhZWI2MzY1OGQyNzczNmQ3ZmJiMWZl
MTg1NjAyNzViNmNjNDk1Li5hOGI5NDNjZjBjMDI4MGY1YzExNGQyZGU5ZDhmZDkzMmMyYTQ1ODg0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiU3RhdGljUHJvcGVy
dHlBbmFseXplci5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSAiVW5saW5r
ZWRDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oIgog
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KQEAgLTIyNCw3ICsyMjUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KIAotICAgICAgICB2
b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2sqLCB1bnNp
Z25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOworICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5
Qnl0ZWNvZGVFbmRPZmZzZXQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKQEAgLTI1NSw3ICsyNTYsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIG1fZ2V0SW5zdHMuYXBwZW5kKEdldEluc3QgeyBpbnN0SW5kZXgsIHBy
b3BlcnR5UmVnSW5kZXggfSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2sqLCB1bnNpZ25lZCBib2R5Qnl0ZWNv
ZGVFbmRPZmZzZXQpOworICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwg
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZz
ZXQpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhS
ZWdpc3RlcjsKQEAgLTI3NSw3ICsyNzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBS
ZWdpc3RlcklEKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhSZWdpc3Rlci5nZXQoKTsg
fQogCi0gICAgICAgIHZvaWQgZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBVbmxpbmtlZENv
ZGVCbG9jayosIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7CisgICAgICAgIHZvaWQg
ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcios
IHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7CiAgICAgICAgIHZvaWQgYWRkR2V0SW5z
dCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eUluZGV4KSB7IG1fZ2V0SW5zdHMuYXBw
ZW5kKHsgaW5zdEluZGV4LCBwcm9wZXJ0eUluZGV4IH0pOyB9CiAKICAgICBwcml2YXRlOgpAQCAt
MzY4LDcgKzM2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1c2luZyBPcGNvZGVUcmFp
dHMgPSBKU09wY29kZVRyYWl0czsKICAgICAgICAgdXNpbmcgT3Bjb2RlSUQgPSA6OkpTQzo6T3Bj
b2RlSUQ7CiAgICAgICAgIHVzaW5nIE9wTm9wID0gOjpKU0M6Ok9wTm9wOwotICAgICAgICB1c2lu
ZyBDb2RlQmxvY2sgPSBTdHJvbmc8VW5saW5rZWRDb2RlQmxvY2s+OworICAgICAgICB1c2luZyBD
b2RlQmxvY2sgPSBzdGQ6OnVuaXF1ZV9wdHI8VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I+Owog
ICAgICAgICBzdGF0aWMgY29uc3RleHByIE9wY29kZUlEIG9wY29kZUZvckRpc2FibGluZ09wdGlt
aXphdGlvbnMgPSBvcF9lbmQ7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvckJhc2VJbmxpbmVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yQmFzZUlubGlu
ZXMuaAppbmRleCBlMjMwNzE3ZGMyZGY4MGI2ZWE1ODIzMzZkMDE0N2M1NTUzZjQ3ODQyLi4xYmQ5
MjRmY2IwMDE4Nzg0YTZmODU4YmVmMWJiM2VmZTZjOGZiMDAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yQmFzZUlubGluZXMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yQmFzZUlubGluZXMuaApAQCAtMTYxLDkgKzE2MSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFRy
YWl0cz4KIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yQmFzZTxUcmFpdHM+OjpuZXdSZWdp
c3RlcigpCiB7CiAgICAgbV9jYWxsZWVMb2NhbHMuYXBwZW5kKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKG1fY2FsbGVlTG9jYWxzLnNpemUoKSkpOwotICAgIGludCBudW1DYWxsZWVMb2NhbHMgPSBz
dGQ6Om1heDxpbnQ+KG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2FscywgbV9jYWxsZWVMb2Nh
bHMuc2l6ZSgpKTsKKyAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzID0gc3RkOjptYXg8aW50PihtX2Nv
ZGVCbG9jay0+bnVtQ2FsbGVlTG9jYWxzKCksIG1fY2FsbGVlTG9jYWxzLnNpemUoKSk7CiAgICAg
bnVtQ2FsbGVlTG9jYWxzID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCksIG51bUNhbGxlZUxvY2Fscyk7Ci0gICAgbV9jb2RlQmxvY2stPm1fbnVtQ2Fs
bGVlTG9jYWxzID0gbnVtQ2FsbGVlTG9jYWxzOworICAgIG1fY29kZUJsb2NrLT5zZXROdW1DYWxs
ZWVMb2NhbHMobnVtQ2FsbGVlTG9jYWxzKTsKICAgICByZXR1cm4gJm1fY2FsbGVlTG9jYWxzLmxh
c3QoKTsKIH0KIApAQCAtMTgxLDkgKzE4MSwxMCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvckJhc2U8VHJhaXRzPjo6bmV3VGVtcG9yYXJ5KCkKIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0
cz4KIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yQmFzZTxUcmFpdHM+OjphZGRWYXIoKQog
ewotICAgICsrbV9jb2RlQmxvY2stPm1fbnVtVmFyczsKKyAgICBpbnQgbnVtVmFycyA9IG1fY29k
ZUJsb2NrLT5udW1WYXJzKCk7CisgICAgbV9jb2RlQmxvY2stPnNldE51bVZhcnMobnVtVmFycyAr
IDEpOwogICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IG5ld1JlZ2lzdGVyKCk7Ci0gICAgQVNTRVJU
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHQtPmluZGV4KCkpLnRvTG9jYWwoKSA9PSBtX2NvZGVCbG9j
ay0+bV9udW1WYXJzIC0gMSk7CisgICAgQVNTRVJUKFZpcnR1YWxSZWdpc3RlcihyZXN1bHQtPmlu
ZGV4KCkpLnRvTG9jYWwoKSA9PSBudW1WYXJzKTsKICAgICByZXN1bHQtPnJlZigpOyAvLyBXZSBz
aG91bGQgbmV2ZXIgZnJlZSB0aGlzIHNsb3QuCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hlZFR5cGVzLmNwcAppbmRleCAyNzQ1MTIy
NDAyNDM3ZWMzNTQ4OWFhMjQ5ZGUzYWJiMjZhMTIxYTk5Li5iYjVlODUyYjQxYzU0NzBjMWVlN2M1
YTg3OGFjM2EzZTNlZDFhNGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9DYWNoZWRUeXBlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwCkBAIC02MTEsNiArNjExLDE2IEBAIGNsYXNzIENhY2hlZFZlY3RvciA6
IHB1YmxpYyBWYXJpYWJsZUxlbmd0aE9iamVjdDxWZWN0b3I8U291cmNlVHlwZTxUPiwgSW5saW5l
Q2FwCiAgICAgICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIGJ1ZmZlcltpXSwgdmVjdG9y
W2ldKTsKICAgICB9CiAKKyAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBS
ZWZDb3VudGVkQXJyYXk8U291cmNlVHlwZTxUPj4mIHZlY3RvcikKKyAgICB7CisgICAgICAgIG1f
c2l6ZSA9IHZlY3Rvci5zaXplKCk7CisgICAgICAgIGlmICghbV9zaXplKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBUKiBidWZmZXIgPSB0aGlzLT50ZW1wbGF0ZSBhbGxvY2F0ZTxUPihl
bmNvZGVyLCBtX3NpemUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaXpl
OyArK2kpCisgICAgICAgICAgICA6OkpTQzo6ZW5jb2RlKGVuY29kZXIsIGJ1ZmZlcltpXSwgdmVj
dG9yW2ldKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgogICAgIHZv
aWQgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJbmxpbmVD
YXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyLCAxNiwgTWFsbG9jPiYgdmVjdG9yLCBBcmdzLi4uIGFy
Z3MpIGNvbnN0CiAgICAgewpAQCAtNjIyLDYgKzYzMiwxOCBAQCBjbGFzcyBDYWNoZWRWZWN0b3Ig
OiBwdWJsaWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8VmVjdG9yPFNvdXJjZVR5cGU8VD4sIElubGlu
ZUNhcAogICAgICAgICAgICAgOjpKU0M6OmRlY29kZShkZWNvZGVyLCBidWZmZXJbaV0sIHZlY3Rv
cltpXSwgYXJncy4uLik7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
KyAgICB2b2lkIGRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBSZWZDb3VudGVkQXJyYXk8U291cmNl
VHlwZTxUPj4mIHZlY3RvciwgQXJncy4uLiBhcmdzKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCFtX3NpemUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZlY3RvciA9IFJlZkNvdW50
ZWRBcnJheTxTb3VyY2VUeXBlPFQ+PihtX3NpemUpOworICAgICAgICBjb25zdCBUKiBidWZmZXIg
PSB0aGlzLT50ZW1wbGF0ZSBidWZmZXI8VD4oKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fc2l6ZTsgKytpKQorICAgICAgICAgICAgOjpKU0M6OmRlY29kZShkZWNvZGVyLCBi
dWZmZXJbaV0sIHZlY3RvcltpXSwgYXJncy4uLik7CisgICAgfQorCisKIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9zaXplOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZ1bmN0aW9uQ29kZUJsb2NrLmgKaW5kZXggMmY0YjFjN2RlNmE4N2M3NDExZTg2ZTg3ZTdm
MTkyNDczNTJjMGY4Yi4uN2YxNWU2MTc0ZDBkMGRkYTVkNjI5MzhhMGY4ZDdlYTlmM2QzODNiMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJs
b2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uQ29kZUJs
b2NrLmgKQEAgLTcyLDYgKzcyLDkgQEAgY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2sgewogICAgIGNv
bnN0IFZlY3Rvcjx1aW50NjRfdD4mIGNvbnN0YW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3Rh
bnRzOyB9CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucygpIGNvbnN0
IHsgcmV0dXJuICptX2luc3RydWN0aW9uczsgfQogCisgICAgdm9pZCBzZXROdW1WYXJzKGludCBu
dW1WYXJzKSB7IG1fbnVtVmFycyA9IG51bVZhcnM7IH0KKyAgICB2b2lkIHNldE51bUNhbGxlZUxv
Y2FscyhpbnQgbnVtQ2FsbGVlTG9jYWxzKSB7IG1fbnVtQ2FsbGVlTG9jYWxzID0gbnVtQ2FsbGVl
TG9jYWxzOyB9CisKICAgICBBTFdBWVNfSU5MSU5FIHVpbnQ2NF90IGdldENvbnN0YW50KFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRzW3JlZy50b0NvbnN0YW50
SW5kZXgoKV07IH0KICAgICBBTFdBWVNfSU5MSU5FIFR5cGUgZ2V0Q29uc3RhbnRUeXBlKFZpcnR1
YWxSZWdpc3RlciByZWcpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
UmVmQ291bnRlZEFycmF5LmggYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaAppbmRl
eCBkMDc2NWRjMDZhYTI5NTQyZWQxYzM2NWJiYzg4Y2E3ZDUzMGFjNTg1Li44ZWUyYjU1NGJlMTli
ODZiY2Y3ODUxODFjMWU2MzRiZTJkY2E5OWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9S
ZWZDb3VudGVkQXJyYXkuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZWZDb3VudGVkQXJyYXkuaApA
QCAtMTE1LDYgKzExNSwzMCBAQCBjbGFzcyBSZWZDb3VudGVkQXJyYXkgewogICAgICAgICByZXR1
cm4gYXNzaWduPFB0clRyYWl0cz4ob3RoZXIpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHNpemVf
dCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgorICAgIFJlZkNvdW50
ZWRBcnJheSYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyPiYgb3RoZXIpCisgICAgeworICAgICAgICBUKiBvbGREYXRhID0gZGF0YSgpOwor
ICAgICAgICBpZiAob3RoZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgUHRyVHJhaXRzOjpleGNo
YW5nZShtX2RhdGEsIG51bGxwdHIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFQqIGRh
dGEgPSAoc3RhdGljX2Nhc3Q8SGVhZGVyKj4oUmVmQ291bnRlZEFycmF5TWFsbG9jOjptYWxsb2Mo
SGVhZGVyOjpzaXplKCkgKyBzaXplb2YoVCkgKiBvdGhlci5zaXplKCkpKSktPnBheWxvYWQoKTsK
KyAgICAgICAgICAgIG1fZGF0YSA9IGRhdGE7CisgICAgICAgICAgICBIZWFkZXI6OmZyb21QYXls
b2FkKGRhdGEpLT5yZWZDb3VudCA9IDE7CisgICAgICAgICAgICBIZWFkZXI6OmZyb21QYXlsb2Fk
KGRhdGEpLT5sZW5ndGggPSBvdGhlci5zaXplKCk7CisgICAgICAgICAgICBBU1NFUlQoSGVhZGVy
Ojpmcm9tUGF5bG9hZChkYXRhKS0+bGVuZ3RoID09IG90aGVyLnNpemUoKSk7CisgICAgICAgICAg
ICBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4o
KSwgb3RoZXIuZW5kKCksIGRhdGEpOworICAgICAgICB9CisgICAgICAgIGlmICghb2xkRGF0YSkK
KyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgaWYgKC0tSGVhZGVyOjpmcm9tUGF5
bG9hZChvbGREYXRhKS0+cmVmQ291bnQpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgIFZlY3RvclR5cGVPcGVyYXRpb25zPFQ+OjpkZXN0cnVjdChvbGREYXRhLCBvbGREYXRhICsg
SGVhZGVyOjpmcm9tUGF5bG9hZChvbGREYXRhKS0+bGVuZ3RoKTsKKworICAgICAgICBSZWZDb3Vu
dGVkQXJyYXlNYWxsb2M6OmZyZWUoSGVhZGVyOjpmcm9tUGF5bG9hZChvbGREYXRhKSk7CisgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKICAgICB+UmVmQ291bnRlZEFycmF5KCkKICAgICB7
CiAgICAgICAgIGlmICghbV9kYXRhKQpAQCAtMTM5LDYgKzE2Myw4IEBAIGNsYXNzIFJlZkNvdW50
ZWRBcnJheSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIEhlYWRlcjo6
ZnJvbVBheWxvYWQoZGF0YSgpKS0+bGVuZ3RoOwogICAgIH0KKworICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIHNpemUoKSA9PSAwOyB9CiAgICAgCiAgICAgc2l6ZV90IGJ5dGVTaXpl
KCkgY29uc3QgeyByZXR1cm4gc2l6ZSgpICogc2l6ZW9mKFQpOyB9CiAgICAgCkBAIC0xNzEsNiAr
MTk3LDExIEBAIGNsYXNzIFJlZkNvdW50ZWRBcnJheSB7CiAgICAgVCYgb3BlcmF0b3JbXShzaXpl
X3QgaSkgeyByZXR1cm4gYXQoaSk7IH0KICAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBp
KSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogCisgICAgVCYgZnJvbnQoKSB7IHJldHVybiAoKnRo
aXMpWzBdOyB9CisgICAgY29uc3QgVCYgZnJvbnQoKSBjb25zdCB7IHJldHVybiAoKnRoaXMpWzBd
OyB9CisgICAgVCYgbGFzdCgpIHsgcmV0dXJuICgqdGhpcylbc2l6ZSgpIC0gMV07IH0KKyAgICBj
b25zdCBUJiBsYXN0KCkgY29uc3QgeyByZXR1cm4gKCp0aGlzKVtzaXplKCkgLSAxXTsgfQorCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJUcmFpdHMgPSBQdHJUcmFpdHM+CiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFJlZkNvdW50ZWRBcnJheTxULCBPdGhlclRyYWl0cz4mIG90aGVyKSBj
b25zdAogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389645</attachid>
            <date>2020-02-04 02:29:13 -0800</date>
            <delta_ts>2020-02-04 10:43:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207087-20200204022912.patch</filename>
            <type>text/plain</type>
            <size>103006</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1NjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
N2U0MjkzOWJmN2Q3MmU2N2ZiZWEzYmEyMWZiYmY4ZWEwMTEwZDA0Li4xYzAyZjMwODYwNTdkYWM1
OGQwZDljZDhjMjgzZmQyYzQ1NzhkOTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOTIgQEAKKzIwMjAtMDItMDQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KKworICAgICAgICBbSlNDXSBJbnRyb2R1Y2UgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3Ig
YW5kIHJlZHVjZSBzaXplb2YoVW5saW5rZWRDb2RlQmxvY2spCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwODcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGlsZSBVbmxpbmtlZENvZGVCbG9jayBpcyBp
bW11dGFibGUgb25jZSBpdCBpcyBjcmVhdGVkIGZyb20gQnl0ZWNvZGVHZW5lcmF0b3IsIGl0IGhh
cyBtYW55IG11dGFibGUgVmVjdG9ycy4KKyAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHdlIGFyZSB1
c2luZyBVbmxpbmtlZENvZGVCbG9jayBhcyBhIGJ1aWxkZXIgb2YgVW5saW5rZWRDb2RlQmxvY2sg
aXRzZWxmIHRvbyBpbiBCeXRlY29kZUdlbmVyYXRvci4KKyAgICAgICAgU2luY2UgVmVjdG9yIHRh
a2VzIDE2IGJ5dGVzIHRvIGFsbG93IGVmZmljaWVudCBleHBhbnNpb25zLCBpdCBpcyBuaWNlIGlm
IHdlIGNhbiB1c2UgUmVmQ291bnRlZEFycmF5IGluc3RlYWQgd2hlbgorICAgICAgICB3ZSBrbm93
IHRoaXMgVmVjdG9yIGlzIGltbXV0YWJsZS4KKworICAgICAgICBJbiB0aGlzIHBhdGNoLCB3ZSBp
bnRyb2R1Y2UgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3Igd3JhcHBlci4gQnl0ZWNvZGVHZW5l
cmF0b3IsIEJ5dGVjb2RlUmV3cml0ZXIsIEJ5dGVjb2RlRHVtcGVyLAorICAgICAgICBhbmQgQnl0
ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24gaW50ZXJhY3Qgd2l0aCBVbmxpbmtlZENvZGVCbG9ja0dl
bmVyYXRvciBpbnN0ZWFkIG9mIFVubGlua2VkQ29kZUJsb2NrLiBBbmQgVW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3IKKyAgICAgICAgd2lsbCBnZW5lcmF0ZSB0aGUgZmluYWxpemVkIFVubGlua2Vk
Q29kZUJsb2NrLiBUaGlzIGRlc2lnbiBhbGxvd3MgdXMgdG8gdXNlIFJlZkNvdW50ZWRBcnJheSBm
b3IgZGF0YSBpbiBVbmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAgd2hpY2ggaXMgKDEpIHNtYWxs
ZXIgYW5kICgyKSBkb2luZyBzaHJpbmtUb0ZpdCBvcGVyYXRpb24gd2hlbiBjcmVhdGluZyBpdCBm
cm9tIFZlY3Rvci4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZHVjZXMgc2l6ZW9mKFVubGlua2Vk
Q29kZUJsb2NrKSBmcm9tIDI1NiB0byAxNjgsIDg4IGJ5dGVzIHJlZHVjdGlvbi4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
U291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcDoK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVCYXNpY0Jsb2NrOjpjb21wdXRlKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaDoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29k
ZUR1bXBlci5jcHA6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRp
b24uY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6Qnl0ZWNv
ZGVHZW5lcmF0b3JpZmljYXRpb24pOgorICAgICAgICAoSlNDOjpHZW5lcmF0b3JMaXZlbmVzc0Fu
YWx5c2lzOjpydW4pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6
cnVuKToKKyAgICAgICAgKEpTQzo6cGVyZm9ybUdlbmVyYXRvcmlmaWNhdGlvbik6CisgICAgICAg
ICogYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uaDoKKyAgICAgICAgKiBieXRl
Y29kZS9CeXRlY29kZVJld3JpdGVyLmg6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlUmV3cml0ZXI6
OkJ5dGVjb2RlUmV3cml0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OnNldENvbnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmhhbmRsZXJGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aW5zZXJ0
QmFzaWNCbG9ja0JvdW5kYXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1iZXJPZlN3
aXRjaEp1bXBUYWJsZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bWJlck9m
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
YWRkU3dpdGNoSnVtcFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjph
ZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0hh
bmRsZXJJbmZvLmg6CisgICAgICAgIChKU0M6OkhhbmRsZXJJbmZvQmFzZTo6aGFuZGxlckZvcklu
ZGV4KToKKyAgICAgICAgKiBieXRlY29kZS9KdW1wVGFibGUuaDoKKyAgICAgICAgKEpTQzo6U2lt
cGxlSnVtcFRhYmxlOjphZGQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWNpc2VK
dW1wVGFyZ2V0cy5jcHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMp
OgorICAgICAgICAoSlNDOjpyZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMpOgorICAgICAgICAo
SlNDOjpmaW5kSnVtcFRhcmdldHNGb3JJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUv
UHJlY2lzZUp1bXBUYXJnZXRzLmg6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6VW5saW5rZWRDb2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpkdW1wRXhwcmVzc2lvblJhbmdlSW5mbyk6
CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRl
Y29kZUluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmhhbmRs
ZXJGb3JJbmRleCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRFeHByZXNz
aW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRU
eXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjpzZXRJbnN0cnVjdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpV
bmxpbmtlZENvZGVCbG9jazo6YXBwbHlNb2RpZmljYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6c2hyaW5rVG9GaXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkT3V0T2ZMaW5lSnVtcFRhcmdldCk6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9jazo6bnVtYmVyT2ZJZGVudGlmaWVycyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrOjppZGVudGlmaWVycyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrOjpiaXRWZWN0b3IpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
Y29uc3RhbnRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6Y29u
c3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OmNvbnN0YW50SWRlbnRpZmllclNldHMpOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6bnVtYmVyT2ZKdW1wVGFyZ2V0cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMgY29uc3QpOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bnVtYmVyT2ZTdHJpbmdTd2l0Y2hKdW1wVGFibGVz
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om51bWJlck9mRnVuY3Rp
b25EZWNscyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpudW1iZXJPZkV4Y2Vw
dGlvbkhhbmRsZXJzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6Om9w
UHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VW5saW5rZWRDb2RlQmxvY2s6OmNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkUGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZElkZW50aWZpZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkQml0VmVjdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFNldENvbnN0YW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZENvbnN0YW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZEp1bXBUYXJnZXQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6YWRkU3dpdGNoSnVtcFRhYmxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2s6OmFkZFN0cmluZ1N3aXRjaEp1
bXBUYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjphZGRG
dW5jdGlvbkRlY2wpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6
YWRkRnVuY3Rpb25FeHByKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2s6OmFkZEV4Y2VwdGlvbkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9jazo6YWRkT3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpyZXBsYWNlT3V0T2ZMaW5lSnVt
cFRhcmdldHMpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yOjpnZXRMaW5lQW5kQ29sdW1uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3I6OmFkZEV4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmZpbmFsaXplKToKKyAg
ICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmhhbmRsZXJGb3JCeXRlY29k
ZUluZGV4KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmhhbmRs
ZXJGb3JJbmRleCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjph
cHBseU1vZGlmaWNhdGlvbik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJh
dG9yOjphZGRPdXRPZkxpbmVKdW1wVGFyZ2V0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3I6Om91dE9mTGluZUp1bXBPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcik6CisgICAg
ICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjp2bSk6CisgICAgICAgIChKU0M6
OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjppc0NvbnN0cnVjdG9yIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmNvbnN0cnVjdG9yS2luZCBjb25z
dCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpzdXBlckJpbmRp
bmcgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c2Ny
aXB0TW9kZSBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
OjpuZWVkc0NsYXNzRmllbGRJbml0aWFsaXplciBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yOjppc1N0cmljdE1vZGUgY29uc3QpOgorICAgICAgICAoSlND
OjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6dXNlc0V2YWwgY29uc3QpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6cGFyc2VNb2RlIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmlzQXJyb3dGdW5jdGlvbik6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpkZXJpdmVkQ29udGV4dFR5
cGUgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6ZXZh
bENvbnRleHRUeXBlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3I6OmlzQXJyb3dGdW5jdGlvbkNvbnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxp
bmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6aXNDbGFzc0NvbnRleHQgY29uc3QpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6bnVtQ2FsbGVlTG9jYWxzIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bVZhcnMgY29uc3Qp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6bnVtUGFyYW1ldGVy
cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjp0aGlz
UmVnaXN0ZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
cjo6c2NvcGVSZWdpc3RlciBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yOjp3YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Omhhc0NoZWNrcG9pbnRzIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Omhhc1RhaWxDYWxs
cyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpzZXRI
YXNDaGVja3BvaW50cyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
OjpzZXRIYXNUYWlsQ2FsbHMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvcjo6c2V0TnVtQ2FsbGVlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3I6OnNldE51bVZhcnMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9j
a0dlbmVyYXRvcjo6c2V0VGhpc1JlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2Rl
QmxvY2tHZW5lcmF0b3I6OnNldFNjb3BlUmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpVbmxpbmtl
ZENvZGVCbG9ja0dlbmVyYXRvcjo6c2V0TnVtUGFyYW1ldGVycyk6CisgICAgICAgIChKU0M6OlVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjptZXRhZGF0YSk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yOjphZGRPcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bWJlck9m
SnVtcFRhcmdldHMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvcjo6YWRkSnVtcFRhcmdldCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yOjpqdW1wVGFyZ2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3I6Omxhc3RKdW1wVGFyZ2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bWJlck9mU3dpdGNoSnVtcFRhYmxlcyBjb25zdCk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjphZGRTd2l0Y2hKdW1wVGFi
bGUpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c3dpdGNoSnVt
cFRhYmxlKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bWJl
ck9mU3RyaW5nU3dpdGNoSnVtcFRhYmxlcyBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yOjphZGRTdHJpbmdTd2l0Y2hKdW1wVGFibGUpOgorICAgICAgICAo
SlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6c3RyaW5nU3dpdGNoSnVtcFRhYmxlKToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6Om51bWJlck9mRXhjZXB0
aW9uSGFuZGxlcnMgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvcjo6ZXhjZXB0aW9uSGFuZGxlcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yOjphZGRFeGNlcHRpb25IYW5kbGVyKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3I6OmJpdFZlY3Rvcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yOjphZGRCaXRWZWN0b3IpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvcjo6bnVtYmVyT2ZDb25zdGFudElkZW50aWZpZXJTZXRzIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmNvbnN0YW50SWRlbnRp
ZmllclNldHMpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRk
U2V0Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6
Y29uc3RhbnRSZWdpc3RlciBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yOjpjb25zdGFudFJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yOjpnZXRDb25zdGFudCBjb25zdCk6CisgICAgICAgIChKU0M6OlVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24p
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6YWRkRnVuY3Rpb25E
ZWNsKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmFkZEZ1bmN0
aW9uRXhwcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjpudW1i
ZXJPZklkZW50aWZpZXJzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3I6OmlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvcjo6YWRkSWRlbnRpZmllcik6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29k
ZUJsb2NrR2VuZXJhdG9yOjpvdXRPZkxpbmVKdW1wT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OnJlcGxhY2VPdXRPZkxpbmVKdW1wVGFyZ2V0cyk6Cisg
ICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOjptZXRhZGF0YVNpemVJbkJ5
dGVzKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6aW5pdGlhbGl6ZU5leHRQYXJhbWV0ZXIpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZSk6CisgICAgICAgIChK
U0M6OnByZXBhcmVKdW1wVGFibGVGb3JTd2l0Y2gpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRl
eHQ6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5h
bGl6ZSk6CisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKToKKyAg
ICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3JCYXNlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvckJhc2U8VHJhaXRzPjo6bmV3UmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvckJhc2U8VHJhaXRzPjo6YWRkVmFyKToKKyAgICAgICAgKiBydW50
aW1lL0NhY2hlZFR5cGVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FjaGVkVmVjdG9yOjplbmNvZGUp
OgorICAgICAgICAoSlNDOjpDYWNoZWRWZWN0b3I6OmRlY29kZSBjb25zdCk6CisgICAgICAgICog
d2FzbS9XYXNtRnVuY3Rpb25Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6RnVuY3Rp
b25Db2RlQmxvY2s6OnNldE51bVZhcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpGdW5jdGlvbkNv
ZGVCbG9jazo6c2V0TnVtQ2FsbGVlTG9jYWxzKToKKwogMjAyMC0wMi0wMyAgWXVzdWtlIFN1enVr
aSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIFVzZSBQYWNrZWRQdHIgZm9y
IFZhcmlhYmxlRW52aXJvbm1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIv
U291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggODkzMjM1N2E0OTE1ZmVjNzdiNGYzYWQzYWMxMWY5
M2IyY2MxNGE3Ny4uNzJhMTE4YzhhOWU2MGRhZGFjOGMyYTBjMGIzYWNhM2NiZDM0MjA1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMCBAQAorMjAyMC0wMi0wNCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBw
bGUuY29tPgorCisgICAgICAgIFtKU0NdIEludHJvZHVjZSBVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvciBhbmQgcmVkdWNlIHNpemVvZihVbmxpbmtlZENvZGVCbG9jaykKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzA4NworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBtb3JlIHVzZWZ1bCBtZXRob2Rz
IGZvciBSZWZDb3VudGVkQXJyYXkuCisKKyAgICAgICAgKiB3dGYvUmVmQ291bnRlZEFycmF5Lmg6
CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdU
Rjo6UmVmQ291bnRlZEFycmF5Ojppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdURjo6UmVmQ291
bnRlZEFycmF5Ojpmcm9udCk6CisgICAgICAgIChXVEY6OlJlZkNvdW50ZWRBcnJheTo6ZnJvbnQg
Y29uc3QpOgorICAgICAgICAoV1RGOjpSZWZDb3VudGVkQXJyYXk6Omxhc3QpOgorICAgICAgICAo
V1RGOjpSZWZDb3VudGVkQXJyYXk6Omxhc3QgY29uc3QpOgorCiAyMDIwLTAyLTAzICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVkdWNlIHNp
emUgb2YgSGFzaE1hcCBhbmQgSGFzaFNldApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBiNGE1MTRjNTdkNzI5ZDM1NmFjZDU1NzYzZDViZmI3ODg4NWY0NDhiLi41Y2EwYzg2MDJiZTE0
YzVlM2I5OWIzZTIxMTJmMmQyOGRkZDkxYmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTc4OCw2ICsxNzg4LDcgQEAKIAkJRTMyOERBRTkxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5
dGVjb2RlR3JhcGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUzRDI2NDI4MUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRlY29kZUdyYXBoLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTMyOERBRUIxRDM4RDAw
NTAwMUEyNTI5IC8qIEJ5dGVjb2RlUmV3cml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRDI2NDJBMUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRlY29k
ZVJld3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTMyQUIyNDQxRENENzVGNDAwRDc1MzNBIC8qIE1hY3JvQXNzZW1ibGVySGVscGVycy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM4MEE3NkIx
RENENzE5NTAwMEY4OUU2IC8qIE1hY3JvQXNzZW1ibGVySGVscGVycy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzMkMzQzY5MjNFOTRDMUUwMEJD
OTdDMCAvKiBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMyQzNDNjgyM0U5NEMxRTAwQkM5N0MwIC8qIFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmggKi87IH07CiAJCUUzMzA5NUREMjMyMTBBMUIwMEVC
Nzg1NiAvKiBKU0ludGVybmFsRmllbGRPYmplY3RJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzMwOTVEQzIzMjEwQTE0MDBFQjc4NTYgLyogSlNJ
bnRlcm5hbEZpZWxkT2JqZWN0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUUzMzRDQkI1MjFGRDk2QTkwMDBFQjE3OCAvKiBSZWdFeHBHbG9i
YWxEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MzM0Q0JCMzIxRkQ5NkE5MDAwRUIxNzggLyogUmVnRXhwR2xvYmFsRGF0YS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzMzYzN0E2MUI2MzIyMDIw
MEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMzM2MzdBNDFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9iamVj
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00
OTA4LDYgKzQ5MDksNyBAQAogCQlFMzI2QzQ5NjFFQ0JFRjU3MDBBOUE5MDUgLyogQ2xhc3NJbmZv
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsYXNzSW5mby5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzMjgyQkI5MUZFOTMwQTMwMEVEQUY3MSAv
KiBZYXJyRXJyb3JDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFlhcnJFcnJvckNvZGUuY3BwOyBwYXRoID0geWFyci9ZYXJyRXJyb3JDb2RlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyODJCQkExRkU5MzBBNDAwRURBRjcxIC8qIFlhcnJF
cnJvckNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckVycm9yQ29k
ZS5oOyBwYXRoID0geWFyci9ZYXJyRXJyb3JDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUUzMkMzQzY4MjNFOTRDMUUwMEJDOTdDMCAvKiBVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmxpbmtlZENvZGVCbG9j
a0dlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzMwNUZBRjIwQjBG
Nzg3MDBDRUI4MkIgLyogSW5CeUlkU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluQnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzMw
NUZCMDIwQjBGNzg3MDBDRUI4MkIgLyogSW5CeUlkVmFyaWFudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbkJ5SWRWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTMzMDVGQjEyMEIwRjc4ODAwQ0VCODJCIC8qIEluQnlJZFZhcmlhbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5CeUlkVmFyaWFudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDk1Niw2ICs0OTU4LDcgQEAKIAkJRTM1RTAzNjEx
QjdBQjQ4NTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbk9iamVjdC5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM2MzdFRTcyMzZF
NTZCMDAwOTZCRDBBIC8qIExpbmtUaW1lQ29uc3RhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTGlua1RpbWVDb25zdGFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzYzN0VFODIzNkU1NkIwMDA5NkJEMEEgLyogTGlua1RpbWVDb25zdGFudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMaW5rVGltZUNvbnN0YW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM2QjQ4MDEyM0U5NTczODAwRTRBNjZFIC8q
IFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTM2Qjc2NkUyMkY4RDYxMTAwRDA5ODE4IC8qIFdhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzNkI3NjZGMjJGOEQ2MTEwMEQwOTgxOCAvKiBXYXNtT01HRm9y
T1NSRW50cnlQbGFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21PTUdGb3JPU1JFbnRyeVBsYW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTM2Q0M5NDYyMDg2MzE0RjAwNTFGRkQ2IC8q
IFdhc21DcmVhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Fz
bUNyZWF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODM2MCw2ICs4
MzYzLDggQEAKIAkJCQkwRjJENERFNzE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmgg
Ki8sCiAJCQkJQTc5RTc4MUUxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmNw
cCAqLywKIAkJCQlBNzlFNzgxRjE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxvY2su
aCAqLywKKwkJCQlFMzZCNDgwMTIzRTk1NzM4MDBFNEE2NkUgLyogVW5saW5rZWRDb2RlQmxvY2tH
ZW5lcmF0b3IuY3BwICovLAorCQkJCUUzMkMzQzY4MjNFOTRDMUUwMEJDOTdDMCAvKiBVbmxpbmtl
ZENvZGVCbG9ja0dlbmVyYXRvci5oICovLAogCQkJCTE0QUQ5MTI4MURDQUFBQjAwMDE0RjlGRSAv
KiBVbmxpbmtlZEV2YWxDb2RlQmxvY2suY3BwICovLAogCQkJCTE0QUQ5MTFFMURDQTlGQTQwMDE0
RjlGRSAvKiBVbmxpbmtlZEV2YWxDb2RlQmxvY2suaCAqLywKIAkJCQkxNEFEOTEyQjFEQ0FBQUIw
MDAxNEY5RkUgLyogVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5jcHAgKi8sCkBAIC05MTUwLDYg
KzkxNTUsNyBAQAogCQkJCUE1MzI0Mzk4MTg1NkE0ODkwMDJFRDY5MiAvKiBDb21iaW5lZERvbWFp
bnMuanNvbiBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0YzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBD
b21tb25JZGVudGlmaWVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUYxNUYxNEI3QTczRTAw
NURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzNBOTIwQkQy
M0RBMkM2RDAwMEVCQUYwIC8qIENvbW1vblNsb3dQYXRoc0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RTVBM0E4MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0RjExRTgyMDlCQ0RBQjAwNzA5NjU0IC8qIENvbXBpbGVyVGlt
aW5nU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAv
KiBDb21wbGV0ZVN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKQEAgLTkzODYsNyArOTM5Miw2IEBA
CiAJCQkJMEYxRkIzOTcxRTFBRjdFMzAwQTlCRTUwIC8qIERGR1dvcmtsaXN0SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTgxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3Vt
ZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTYxQUE5MDkxMTAwRDMzQjMzIC8qIERp
cmVjdEFyZ3VtZW50c09mZnNldC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzNBOTIwQkQyM0RBMkM2
RDAwMEVCQUYwIC8qIENvbW1vblNsb3dQYXRoc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk2OUEwNzk4MEVEMUQzQUUwMEYxRjY4MSAvKiBEaXJlY3RFdmFsQ29kZUNhY2hlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDM4NkE3NTFERDY5ODk1MDA4NjUyQzQgLyogRGlyZWN0RXZhbEV4ZWN1
dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzczMDhGMUMwQ0Q2ODUwMDA1MkJGQSAvKiBE
aXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTAy
NDksNiArMTAyNTQsNyBAQAogCQkJCUE3QThBRjNGMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFy
cmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUY0MDE3QURCNUYzMDA1QUIxNzQgLyogVWlu
dDhDbGFtcGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjYwMTgyMTYzOUZEMkEwMDM3
MkJBMyAvKiBVbmxpbmtlZENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTMyQzNDNjky
M0U5NEMxRTAwQkM5N0MwIC8qIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNEFEOTEyNDFEQ0E5RkE0MDAxNEY5RkUgLyogVW5saW5rZWRFdmFsQ29kZUJs
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEFEOTEyMzFEQ0E5RkE0MDAxNEY5RkUgLyogVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNDJFNTExQjc5
NkVDRTAwRjRCRjRCIC8qIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmggaW4gSGVhZGVycyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAppbmRleCAzY2JmNDg3MDA3NzFkMTcwMjcwM2E3
YTA3N2U1ZjQwYWVhZmY0NmZjLi43NmYxYzY5NDg1YzZmY2JlZTQ4N2U1YWM5ODZjYTQ2MzYzNTNh
ZWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CkBAIC0yNzUsNiArMjc1LDcgQEAgYnl0
ZWNvZGUvU3VwZXJTYW1wbGVyLmNwcAogYnl0ZWNvZGUvVG9UaGlzU3RhdHVzLmNwcAogYnl0ZWNv
ZGUvVHJhY2tlZFJlZmVyZW5jZXMuY3BwCiBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAK
K2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmNwcAogYnl0ZWNvZGUvVW5saW5r
ZWRFdmFsQ29kZUJsb2NrLmNwcAogYnl0ZWNvZGUvVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5j
cHAKIGJ5dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcAppbmRl
eCA2NmQxMTJhM2I0NTU5NWJmYmFlMTk1MWFkYjAwZGJhNmFhOTRiYThiLi44ZDE4NmFmNGU4Yjg2
OTcwZDk1Yzc0ZWRlOTE2MWY4OWQ5ZDM4NjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmNwcApAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKKyNpbmNsdWRlICJVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMjIwLDcgKzIyMSw3
IEBAIGF1dG8gQnl0ZWNvZGVCYXNpY0Jsb2NrOjpjb21wdXRlKENvZGVCbG9jayogY29kZUJsb2Nr
LCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYKICAgICByZXR1cm4gY29tcHV0ZUltcGwoY29kZUJs
b2NrLCBpbnN0cnVjdGlvbnMpOwogfQogCi1hdXRvIEJ5dGVjb2RlQmFzaWNCbG9jazo6Y29tcHV0
ZShVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYg
aW5zdHJ1Y3Rpb25zKSAtPiBCYXNpY0Jsb2NrVmVjdG9yCithdXRvIEJ5dGVjb2RlQmFzaWNCbG9j
azo6Y29tcHV0ZShVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCBjb25zdCBJ
bnN0cnVjdGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKSAtPiBCYXNpY0Jsb2NrVmVjdG9yCiB7CiAg
ICAgcmV0dXJuIGNvbXB1dGVJbXBsKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2su
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suaApp
bmRleCAxMjFjZTg5YTlkM2NlNGQyOGJlMTJkOTcwZGJlZTkyNDE3MDc4ODdmLi5kNGY1MzNiYzhi
YTBhYzU2OGJhODY4MTczMzg3ZDAzNTQ3YWJkMzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlQmFzaWNCbG9jay5oCkBAIC0zNiw2ICszNiw3IEBA
IG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQnl0ZWNvZGVHcmFwaDsKIGNsYXNzIENvZGVCbG9jazsK
IGNsYXNzIFVubGlua2VkQ29kZUJsb2NrOworY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3I7CiBzdHJ1Y3QgSW5zdHJ1Y3Rpb247CiAKIERFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEJ5dGVjb2RlQmFzaWNCbG9jayk7CkBAIC03Miw3ICs3Myw3IEBAIGNsYXNzIEJ5
dGVjb2RlQmFzaWNCbG9jayB7CiBwcml2YXRlOgogICAgIC8vIE9ubHkgY2FsbGVkIGZyb20gQnl0
ZWNvZGVHcmFwaC4KICAgICBzdGF0aWMgQmFzaWNCbG9ja1ZlY3RvciBjb21wdXRlKENvZGVCbG9j
ayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMpOwotICAgIHN0YXRpYyBC
YXNpY0Jsb2NrVmVjdG9yIGNvbXB1dGUoVW5saW5rZWRDb2RlQmxvY2sqLCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKTsKKyAgICBzdGF0aWMgQmFzaWNCbG9ja1ZlY3RvciBj
b21wdXRlKFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJl
YW0mIGluc3RydWN0aW9ucyk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmxvY2s+IHN0YXRpYyBC
YXNpY0Jsb2NrVmVjdG9yIGNvbXB1dGVJbXBsKEJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3Ry
dWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMpOwogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUR1bXBlci5jcHAK
aW5kZXggODM2NTExNWY0MjE3OTFhNWM2NjQ4M2E1YTc5MDVjYWU1YzBlZTNlMS4uZDM3MjM2ZjQw
YWE4OTkxMjdjNzQ5ZWJkYjk4Njk2Yzc3ODVkOGNiMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlRHVtcGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVEdW1wZXIuY3BwCkBAIC00MCw3ICs0MCw3IEBACiAj
aW5jbHVkZSAiUHV0QnlJZEZsYWdzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgog
I2luY2x1ZGUgIlRvVGhpc1N0YXR1cy5oIgotI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJVbmxp
bmtlZE1ldGFkYXRhVGFibGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUZ1bmN0aW9uQ29kZUJs
b2NrLmgiCiAjaW5jbHVkZSAiV2FzbUdlbmVyYXRvclRyYWl0cy5oIgpAQCAtMjcwLDcgKzI3MCw3
IEBAIHZvaWQgQ29kZUJsb2NrQnl0ZWNvZGVEdW1wZXI8QmxvY2s+OjpkdW1wQmxvY2soQmxvY2sq
IGJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0CiB9CiAKIHRlbXBsYXRlIGNsYXNzIEJ5dGVjb2Rl
RHVtcGVyPENvZGVCbG9jaz47Ci10ZW1wbGF0ZSBjbGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1bXBl
cjxVbmxpbmtlZENvZGVCbG9jaz47Cit0ZW1wbGF0ZSBjbGFzcyBDb2RlQmxvY2tCeXRlY29kZUR1
bXBlcjxVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcj47CiB0ZW1wbGF0ZSBjbGFzcyBDb2RlQmxv
Y2tCeXRlY29kZUR1bXBlcjxDb2RlQmxvY2s+OwogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJh
dG9yaWZpY2F0aW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAKaW5kZXggYjBiNTcwZTkwMjA5NmMyOTI1MWZiNmZhNDQ3
YzFhZTJiZmQ1ZTgyNi4uOWYyYWJhMzlmMmNlNzA4ZDMxM2I4ZDk0MGNmOTZmYmE0MmZjYzk0ZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJh
dG9yaWZpY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSAi
SlNHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJMYWJlbC5oIgogI2luY2x1ZGUgIlN0cm9uZ0lubGlu
ZXMuaCIKLSNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRNZXRhZGF0YVRhYmxlSW5s
aW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCkBAIC02NCw3ICs2NCw3IEBAIGNs
YXNzIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IG1faW5pdGlhbFZhbHVlOwogICAgIH07CiAKLSAgICBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlv
bihCeXRlY29kZUdlbmVyYXRvciYgYnl0ZWNvZGVHZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyJiBpbnN0cnVjdGlvbnMsIFN5bWJv
bFRhYmxlKiBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlLCBpbnQgZ2VuZXJhdG9yRnJhbWVTeW1i
b2xUYWJsZUluZGV4KQorICAgIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBieXRlY29kZUdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNv
ZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImIGluc3RydWN0aW9ucywgU3ltYm9sVGFi
bGUqIGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUsIGludCBnZW5lcmF0b3JGcmFtZVN5bWJvbFRh
YmxlSW5kZXgpCiAgICAgICAgIDogbV9ieXRlY29kZUdlbmVyYXRvcihieXRlY29kZUdlbmVyYXRv
cikKICAgICAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9pbnN0cnVj
dGlvbnMoaW5zdHJ1Y3Rpb25zKQpAQCAtMTc0LDcgKzE3NCw3IEBAIGNsYXNzIEJ5dGVjb2RlR2Vu
ZXJhdG9yaWZpY2F0aW9uIHsKICAgICBCeXRlY29kZUdlbmVyYXRvciYgbV9ieXRlY29kZUdlbmVy
YXRvcjsKICAgICBJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG1fZW50ZXJQb2ludDsKICAgICBP
cHRpb25hbDxHZW5lcmF0b3JGcmFtZURhdGE+IG1fZ2VuZXJhdG9yRnJhbWVEYXRhOwotICAgIFVu
bGlua2VkQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBVbmxpbmtlZENvZGVCbG9ja0dlbmVy
YXRvciogbV9jb2RlQmxvY2s7CiAgICAgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImIG1faW5zdHJ1
Y3Rpb25zOwogICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFwaDsKICAgICBWZWN0b3I8T3B0aW9uYWw8
U3RvcmFnZT4+IG1fc3RvcmFnZXM7CkBAIC0xOTAsNyArMTkwLDcgQEAgY2xhc3MgR2VuZXJhdG9y
TGl2ZW5lc3NBbmFseXNpcyA6IHB1YmxpYyBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb24gewog
ICAgIHsKICAgICB9CiAKLSAgICB2b2lkIHJ1bihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2Nr
LCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYgaW5zdHJ1Y3Rpb25zKQorICAgIHZvaWQgcnVuKFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uU3RyZWFtV3Jp
dGVyJiBpbnN0cnVjdGlvbnMpCiAgICAgewogICAgICAgICAvLyBQZXJmb3JtIG1vZGlmaWVkIGxp
dmVuZXNzIGFuYWx5c2lzIHRvIGRldGVybWluZSB3aGljaCBsb2NhbHMgYXJlIGxpdmUgYXQgdGhl
IG1lcmdlIHBvaW50cy4KICAgICAgICAgLy8gVGhpcyBwcm9kdWNlcyB0aGUgY29uc2VydmF0aXZl
IHJlc3VsdHMgZm9yIHRoZSBxdWVzdGlvbiwgIndoaWNoIHZhcmlhYmxlcyBzaG91bGQgYmUgc2F2
ZWQgYW5kIHJlc3VtZWQ/Ii4KQEAgLTIyNCw4ICsyMjQsOCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yaWZpY2F0aW9uOjpydW4oKQogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhdGUgPSB2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudEluY2x1ZGluZ1RoaXMoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
SlNHZW5lcmF0b3I6OkdlbmVyYXRvckFyZ3VtZW50OjpTdGF0ZSkpOwogICAgICAgICBhdXRvJiBq
dW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkU3dpdGNoSnVtcFRhYmxlKCk7CiAgICAgICAgIGp1
bXBUYWJsZS5taW4gPSAwOwotICAgICAgICBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cy5yZXNpemUo
bV95aWVsZHMuc2l6ZSgpICsgMSk7Ci0gICAgICAgIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRzLmZp
bGwoMCk7CisgICAgICAgIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRzID0gUmVmQ291bnRlZEFycmF5
PGludDMyX3Q+KG1feWllbGRzLnNpemUoKSArIDEpOworICAgICAgICBzdGQ6OmZpbGwoanVtcFRh
YmxlLmJyYW5jaE9mZnNldHMuYmVnaW4oKSwganVtcFRhYmxlLmJyYW5jaE9mZnNldHMuZW5kKCks
IDApOwogICAgICAgICBqdW1wVGFibGUuYWRkKDAsIG5leHRUb0VudGVyUG9pbnQub2Zmc2V0KCkp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV95aWVsZHMuc2l6ZSgpOyArK2kp
CiAgICAgICAgICAgICBqdW1wVGFibGUuYWRkKGkgKyAxLCBtX3lpZWxkc1tpXS5wb2ludCk7CkBA
IC0yOTUsMTAgKzI5NSwxMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uOjpydW4o
KQogICAgIHJld3JpdGVyLmV4ZWN1dGUoKTsKIH0KIAotdm9pZCBwZXJmb3JtR2VuZXJhdG9yaWZp
Y2F0aW9uKEJ5dGVjb2RlR2VuZXJhdG9yJiBieXRlY29kZUdlbmVyYXRvciwgVW5saW5rZWRDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImIGluc3RydWN0aW9ucywg
U3ltYm9sVGFibGUqIGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUsIGludCBnZW5lcmF0b3JGcmFt
ZVN5bWJvbFRhYmxlSW5kZXgpCit2b2lkIHBlcmZvcm1HZW5lcmF0b3JpZmljYXRpb24oQnl0ZWNv
ZGVHZW5lcmF0b3ImIGJ5dGVjb2RlR2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
ciogY29kZUJsb2NrLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYgaW5zdHJ1Y3Rpb25zLCBTeW1i
b2xUYWJsZSogZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZSwgaW50IGdlbmVyYXRvckZyYW1lU3lt
Ym9sVGFibGVJbmRleCkKIHsKICAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6ZHVtcEJ5dGVjb2Rl
c0JlZm9yZUdlbmVyYXRvcmlmaWNhdGlvbigpKSkKLSAgICAgICAgQ29kZUJsb2NrQnl0ZWNvZGVE
dW1wZXI8VW5saW5rZWRDb2RlQmxvY2s+OjpkdW1wQmxvY2soY29kZUJsb2NrLCBpbnN0cnVjdGlv
bnMsIFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgIENvZGVCbG9ja0J5dGVjb2RlRHVtcGVyPFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yPjo6ZHVtcEJsb2NrKGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b25zLCBXVEY6OmRhdGFGaWxlKCkpOwogCiAgICAgQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24g
cGFzcyhieXRlY29kZUdlbmVyYXRvciwgY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdlbmVyYXRv
ckZyYW1lU3ltYm9sVGFibGUsIGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRleCk7CiAgICAg
cGFzcy5ydW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmgKaW5kZXggMDFmMDk2ZTA0MWJmZGIyNWY2
ZmFlNWRkYzA2MTRlZjdhNmYwNjMwNi4uODMwMWQ0MDU3YTMzZDIxYmEzOGMzOGM5YzkyMGY1NDkz
NGRiYmI4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlR2VuZXJhdG9yaWZpY2F0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmgKQEAgLTMxLDkgKzMxLDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiBjbGFzcyBCeXRlY29kZUdlbmVyYXRvcjsKIGNsYXNzIEluc3RydWN0aW9uU3Ry
ZWFtV3JpdGVyOwogY2xhc3MgU3ltYm9sVGFibGU7Ci1jbGFzcyBVbmxpbmtlZENvZGVCbG9jazsK
K2NsYXNzIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yOwogY2xhc3MgU3ltYm9sVGFibGU7CiAK
LXZvaWQgcGVyZm9ybUdlbmVyYXRvcmlmaWNhdGlvbihCeXRlY29kZUdlbmVyYXRvciYsIFVubGlu
a2VkQ29kZUJsb2NrKiwgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImLCBTeW1ib2xUYWJsZSogZ2Vu
ZXJhdG9yRnJhbWVTeW1ib2xUYWJsZSwgaW50IGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRl
eCk7Cit2b2lkIHBlcmZvcm1HZW5lcmF0b3JpZmljYXRpb24oQnl0ZWNvZGVHZW5lcmF0b3ImLCBV
bmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciosIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyJiwgU3lt
Ym9sVGFibGUqIGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUsIGludCBnZW5lcmF0b3JGcmFtZVN5
bWJvbFRhYmxlSW5kZXgpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVJld3JpdGVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5oCmluZGV4IGUyNjE2NTRiMjRk
Mzk5MTMzYzlmOTExNzNkYWI3MzQ5OTFiNDA2YTMuLjg5MGFiMjNjMDAwZGFkYmFhZDhkYjRjNjNl
ZWUyNWFlNTViOGRiMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZVJld3JpdGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlUmV3cml0ZXIuaApAQCAtMTczLDcgKzE3Myw3IEBAIFdURl9NQUtFX05PTkNPUFlB
QkxFKEJ5dGVjb2RlUmV3cml0ZXIpOwogICAgICAgICBJbmNsdWRlQnJhbmNoJiBtX2luY2x1ZGVC
cmFuY2g7CiAgICAgfTsKIAotICAgIEJ5dGVjb2RlUmV3cml0ZXIoQnl0ZWNvZGVHZW5lcmF0b3Im
IGJ5dGVjb2RlR2VuZXJhdG9yLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgVW5saW5rZWRDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImIHdyaXRlcikKKyAgICBCeXRl
Y29kZVJld3JpdGVyKEJ5dGVjb2RlR2VuZXJhdG9yJiBieXRlY29kZUdlbmVyYXRvciwgQnl0ZWNv
ZGVHcmFwaCYgZ3JhcGgsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIElu
c3RydWN0aW9uU3RyZWFtV3JpdGVyJiB3cml0ZXIpCiAgICAgICAgIDogbV9ieXRlY29kZUdlbmVy
YXRvcihieXRlY29kZUdlbmVyYXRvcikKICAgICAgICAgLCBtX2dyYXBoKGdyYXBoKQogICAgICAg
ICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKQEAgLTIyNyw3ICsyMjcsNyBAQCBXVEZfTUFLRV9O
T05DT1BZQUJMRShCeXRlY29kZVJld3JpdGVyKTsKIHByaXZhdGU6CiAgICAgdm9pZCBpbnNlcnRJ
bXBsKEluc2VydGlvblBvaW50LCBJbmNsdWRlQnJhbmNoLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRl
ciYmIGZyYWdtZW50KTsKIAotICAgIGZyaWVuZCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jazsKKyAg
ICBmcmllbmQgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiAgICAgdm9pZCBhcHBs
eU1vZGlmaWNhdGlvbigpOwogICAgIHZvaWQgYWRqdXN0SnVtcFRhcmdldHNJbkZyYWdtZW50KHVu
c2lnbmVkIGZpbmFsT2Zmc2V0LCBJbnNlcnRpb24mKTsKIApAQCAtMjM2LDcgKzIzNiw3IEBAIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEJ5dGVjb2RlUmV3cml0ZXIpOwogCiAgICAgQnl0ZWNvZGVHZW5l
cmF0b3ImIG1fYnl0ZWNvZGVHZW5lcmF0b3I7CiAgICAgQnl0ZWNvZGVHcmFwaCYgbV9ncmFwaDsK
LSAgICBVbmxpbmtlZENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgVW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3IqIG1fY29kZUJsb2NrOwogICAgIEluc3RydWN0aW9uU3RyZWFtV3JpdGVyJiBt
X3dyaXRlcjsKICAgICBWZWN0b3I8SW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCA5Njc1OTFk
YTNmNTI0MjQ3MTNjYjhiMzc4NjUwM2I0YmYzYzgwMWMyLi4xNGUwNGRhOTlmN2UyZWJjNmMzYTg0
YjlmNGJjZTliZjFjNWYyNzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcApAQCAtNDczLDcgKzQ3Myw4IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAg
ICAgICAgICAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgc291cmNlVGFibGUgPSB1bmxpbmtl
ZENvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGkpOwogICAgICAgICAgICAgICAgIFNpbXBsZUp1
bXBUYWJsZSYgZGVzdFRhYmxlID0gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW2ldOwot
ICAgICAgICAgICAgICAgIGRlc3RUYWJsZS5icmFuY2hPZmZzZXRzID0gc291cmNlVGFibGUuYnJh
bmNoT2Zmc2V0czsKKyAgICAgICAgICAgICAgICBkZXN0VGFibGUuYnJhbmNoT2Zmc2V0cy5yZXNp
emVUb0ZpdChzb3VyY2VUYWJsZS5icmFuY2hPZmZzZXRzLnNpemUoKSk7CisgICAgICAgICAgICAg
ICAgc3RkOjpjb3B5KHNvdXJjZVRhYmxlLmJyYW5jaE9mZnNldHMuYmVnaW4oKSwgc291cmNlVGFi
bGUuYnJhbmNoT2Zmc2V0cy5lbmQoKSwgZGVzdFRhYmxlLmJyYW5jaE9mZnNldHMuYmVnaW4oKSk7
CiAgICAgICAgICAgICAgICAgZGVzdFRhYmxlLm1pbiA9IHNvdXJjZVRhYmxlLm1pbjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtODY2LDcgKzg2Nyw3IEBAIENvZGVCbG9jazo6fkNvZGVC
bG9jaygpCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnNldENv
bnN0YW50SWRlbnRpZmllclNldFJlZ2lzdGVycyhWTSYgdm0sIGNvbnN0IFZlY3RvcjxDb25zdGFu
dElkZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50cykKK3ZvaWQgQ29kZUJsb2NrOjpzZXRDb25z
dGFudElkZW50aWZpZXJTZXRSZWdpc3RlcnMoVk0mIHZtLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8
Q29uc3RhbnRJZGVudGlmaWVyU2V0RW50cnk+JiBjb25zdGFudHMpCiB7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2dsb2JhbE9iamVjdC5nZXQoKTsKQEAgLTg4OCw3ICs4ODksNyBAQCB2b2lkIENv
ZGVCbG9jazo6c2V0Q29uc3RhbnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiB2bSwgY29uc3Qg
VmVjdG9yPENvbnN0YW50SQogICAgIH0KIH0KIAotdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50
UmVnaXN0ZXJzKGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMs
IGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSkK
K3ZvaWQgQ29kZUJsb2NrOjpzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBSZWZDb3VudGVkQXJy
YXk8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBSZWZDb3VudGVkQXJy
YXk8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uLCBTY3JpcHRFeGVjdXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpCiB7CiAgICAgVk0m
IHZtID0gKm1fdm07CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwpA
QCAtODk5LDEwICs5MDAsMTMgQEAgdm9pZCBDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0ZXJz
KGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGEKICAgICB7CiAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKICAgICAgICAgbV9jb25zdGFu
dFJlZ2lzdGVycy5yZXNpemVUb0ZpdChjb3VudCk7CisgICAgICAgIG1fY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uLnJlc2l6ZVRvRml0KGNvdW50KTsKICAgICB9CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgY29uc3RhbnQg
PSBjb25zdGFudHNbaV0uZ2V0KCk7Ci0gICAgICAgIHN3aXRjaCAoY29uc3RhbnRzU291cmNlQ29k
ZVJlcHJlc2VudGF0aW9uW2ldKSB7CisgICAgICAgIFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbiBy
ZXByZXNlbnRhdGlvbiA9IGNvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbltpXTsKKyAg
ICAgICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb25baV0gPSByZXByZXNlbnRh
dGlvbjsKKyAgICAgICAgc3dpdGNoIChyZXByZXNlbnRhdGlvbikgewogICAgICAgICBjYXNlIFNv
dXJjZUNvZGVSZXByZXNlbnRhdGlvbjo6TGlua1RpbWVDb25zdGFudDoKICAgICAgICAgICAgIGNv
bnN0YW50ID0gZ2xvYmFsT2JqZWN0LT5saW5rVGltZUNvbnN0YW50KHN0YXRpY19jYXN0PExpbmtU
aW1lQ29uc3RhbnQ+KGNvbnN0YW50LmFzSW50MzJBc0FueUludCgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTkzNCw4ICs5MzgsNiBAQCB2b2lkIENvZGVCbG9jazo6c2V0Q29uc3RhbnRSZWdp
c3RlcnMoY29uc3QgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4mIGNvbnN0YQogICAgICAg
ICB9CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaV0uc2V0KHZtLCB0aGlzLCBjb25zdGFu
dCk7CiAgICAgfQotCi0gICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBj
b25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpz
ZXRBbHRlcm5hdGl2ZShWTSYgdm0sIENvZGVCbG9jayogYWx0ZXJuYXRpdmUpCkBAIC0xODA4LDcg
KzE4MTAsNyBAQCBIYW5kbGVySW5mbyogQ29kZUJsb2NrOjpoYW5kbGVyRm9ySW5kZXgodW5zaWdu
ZWQgaW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZAogewogICAgIGlmICghbV9yYXJlRGF0
YSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9y
SW5kZXgobV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycywgaW5kZXgsIHJlcXVpcmVkSGFu
ZGxlcik7CisgICAgcmV0dXJuIEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXg8SGFuZGxlcklu
Zm8+KG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4LCByZXF1aXJlZEhhbmRs
ZXIpOwogfQogCiBEaXNwb3NhYmxlQ2FsbFNpdGVJbmRleCBDb2RlQmxvY2s6Om5ld0V4Y2VwdGlv
bkhhbmRsaW5nQ2FsbFNpdGVJbmRleChDYWxsU2l0ZUluZGV4IG9yaWdpbmFsQ2FsbFNpdGUpCkBA
IC0zMTk1LDcgKzMxOTcsNyBAQCB2b2lkIENvZGVCbG9jazo6aW5zZXJ0QmFzaWNCbG9ja0JvdW5k
YXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKCkKIHsKICAgICBpZiAoIXVubGlua2VkQ29kZUJs
b2NrKCktPmhhc09wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4mIGJ5
dGVjb2RlT2Zmc2V0cyA9IHVubGlua2VkQ29kZUJsb2NrKCktPm9wUHJvZmlsZUNvbnRyb2xGbG93
Qnl0ZWNvZGVPZmZzZXRzKCk7CisgICAgY29uc3QgUmVmQ291bnRlZEFycmF5PEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQ+JiBieXRlY29kZU9mZnNldHMgPSB1bmxpbmtlZENvZGVCbG9jaygpLT5v
cFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cygpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwLCBvZmZzZXRzTGVuZ3RoID0gYnl0ZWNvZGVPZmZzZXRzLnNpemUoKTsgaSA8IG9mZnNldHNM
ZW5ndGg7IGkrKykgewogICAgICAgICAvLyBCZWNhdXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93
IGlzIGVtaXR0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBldmVyeSBiYXNpYyBibG9jaywgZmluZGlu
ZyAKICAgICAgICAgLy8gdGhlIG5leHQgb3BfcHJvZmlsZV9jb250cm9sX2Zsb3cgd2lsbCBnaXZl
IHVzIHRoZSB0ZXh0IHJhbmdlIG9mIGEgc2luZ2xlIGJhc2ljIGJsb2NrLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IGE4Yjg3NTc2YzA1Njk1YjgwMGY4
YzNkMWVjMjUzMjhkMGFlODhiODkuLjQ2OTc1MmMxNTA4NzRiYWNjNGE0MjAxZjgyNDdkMDlkZjgx
M2IwZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAg
LTYxNSw3ICs2MTUsNiBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAv
LyBKdW1wIFRhYmxlcwogCiAgICAgc2l6ZV90IG51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMu
c2l6ZSgpIDogMDsgfQotICAgIFNpbXBsZUp1bXBUYWJsZSYgYWRkU3dpdGNoSnVtcFRhYmxlKCkg
eyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3dpdGNoSnVtcFRh
Ymxlcy5hcHBlbmQoU2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zd2l0
Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQogICAgIFNpbXBsZUp1bXBUYWJsZSYgc3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KSB7IFJFTEVBU0VfQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4g
bV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CiAgICAgdm9pZCBj
bGVhclN3aXRjaEp1bXBUYWJsZXMoKQogICAgIHsKQEAgLTYzMiw3ICs2MzEsNiBAQCBjbGFzcyBD
b2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxsIHsKICNlbmRpZgogCiAgICAgc2l6ZV90IG51bWJlck9m
U3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3Jh
cmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2l6ZSgpIDogMDsgfQotICAgIFN0cmlu
Z0p1bXBUYWJsZSYgYWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQo
U3RyaW5nSnVtcFRhYmxlKCkpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzLmxhc3QoKTsgfQogICAgIFN0cmluZ0p1bXBUYWJsZSYgc3RyaW5nU3dpdGNoSnVtcFRh
YmxlKGludCB0YWJsZUluZGV4KSB7IFJFTEVBU0VfQVNTRVJUKG1fcmFyZURhdGEpOyByZXR1cm4g
bV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzW3RhYmxlSW5kZXhdOyB9CiAKICAg
ICBEaXJlY3RFdmFsQ29kZUNhY2hlJiBkaXJlY3RFdmFsQ29kZUNhY2hlKCkgeyBjcmVhdGVSYXJl
RGF0YUlmTmVjZXNzYXJ5KCk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2RpcmVjdEV2YWxDb2RlQ2Fj
aGU7IH0KQEAgLTk0OSw5ICs5NDcsOSBAQCBjbGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgSlNDZWxs
IHsKIAogICAgIHZvaWQgdXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnNBbmRDb3VudExp
dmVuZXNzKHVuc2lnbmVkJiBudW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVu
c2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzKTsKIAotICAgIHZvaWQgc2V0Q29uc3Rh
bnRJZGVudGlmaWVyU2V0UmVnaXN0ZXJzKFZNJiwgY29uc3QgVmVjdG9yPENvbnN0YW50SWRlbnRp
ZmllclNldEVudHJ5PiYgY29uc3RhbnRzKTsKKyAgICB2b2lkIHNldENvbnN0YW50SWRlbnRpZmll
clNldFJlZ2lzdGVycyhWTSYsIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxDb25zdGFudElkZW50aWZp
ZXJTZXRFbnRyeT4mIGNvbnN0YW50cyk7CiAKLSAgICB2b2lkIHNldENvbnN0YW50UmVnaXN0ZXJz
KGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudHMsIGNvbnN0IFZl
Y3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb24sIFNjcmlwdEV4ZWN1dGFibGUqIHRvcExldmVsRXhlY3V0YWJsZSk7CisgICAgdm9p
ZCBzZXRDb25zdGFudFJlZ2lzdGVycyhjb25zdCBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVy
PFVua25vd24+PiYgY29uc3RhbnRzLCBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29kZVJl
cHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLCBTY3JpcHRF
eGVjdXRhYmxlKiB0b3BMZXZlbEV4ZWN1dGFibGUpOwogCiAgICAgdm9pZCByZXBsYWNlQ29uc3Rh
bnQoVmlydHVhbFJlZ2lzdGVyIHJlZywgSlNWYWx1ZSB2YWx1ZSkKICAgICB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSGFuZGxlckluZm8uaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVySW5mby5oCmluZGV4IDdmNDY1ZDJhZTkzNzk5
YjkxZGY3ODcxNDE5NGZjYTM0YmQyYTFhMTIuLjAxZGRjZjk2OTliNDgwMjlhMWJkOGJlZTQwMzQ5
MDQ3OWExZjlkN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9I
YW5kbGVySW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9IYW5kbGVy
SW5mby5oCkBAIC02NSwxMCArNjUsMTAgQEAgc3RydWN0IEhhbmRsZXJJbmZvQmFzZSB7CiAKICAg
ICBib29sIGlzQ2F0Y2hIYW5kbGVyKCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IEhhbmRsZXJU
eXBlOjpDYXRjaDsgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFuZGxlcj4KLSAgICBzdGF0
aWMgSGFuZGxlciogaGFuZGxlckZvckluZGV4KFZlY3RvcjxIYW5kbGVyPiYgZXhlcHRpb25IYW5k
bGVycywgdW5zaWduZWQgaW5kZXgsIFJlcXVpcmVkSGFuZGxlciByZXF1aXJlZEhhbmRsZXIpCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFuZGxlciwgdHlwZW5hbWUgQ29udGFpbmVyPgorICAgIHN0
YXRpYyBIYW5kbGVyKiBoYW5kbGVyRm9ySW5kZXgoQ29udGFpbmVyJiBleGVwdGlvbkhhbmRsZXJz
LCB1bnNpZ25lZCBpbmRleCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKICAgICB7
Ci0gICAgICAgIGZvciAoSGFuZGxlciYgaGFuZGxlciA6IGV4ZXB0aW9uSGFuZGxlcnMpIHsKKyAg
ICAgICAgZm9yIChhdXRvJiBoYW5kbGVyIDogZXhlcHRpb25IYW5kbGVycykgewogICAgICAgICAg
ICAgaWYgKChyZXF1aXJlZEhhbmRsZXIgPT0gUmVxdWlyZWRIYW5kbGVyOjpDYXRjaEhhbmRsZXIp
ICYmICFoYW5kbGVyLmlzQ2F0Y2hIYW5kbGVyKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaAppbmRleCBlMjdl
MDMxMGZmNGU2NDE4MGJlZDFiMmY5MThmMTkzYTViYTAxMTM0Li5jMTU5YWMzMTdhOTc4NDZhYThk
ZDY2MWQ2ODk3YzA1YTU1NTlhZTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSnVtcFRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0p1bXBUYWJsZS5oCkBAIC05NywxMiArOTcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgog
CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0Rm9yVmFsdWUoaW50MzJfdCB2YWx1ZSwgaW50MzJfdCBk
ZWZhdWx0T2Zmc2V0KTsKLSAgICAgICAgdm9pZCBhZGQoaW50MzJfdCBrZXksIGludDMyX3Qgb2Zm
c2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWJyYW5jaE9mZnNldHNba2V5XSkKLSAg
ICAgICAgICAgICAgICBicmFuY2hPZmZzZXRzW2tleV0gPSBvZmZzZXQ7Ci0gICAgICAgIH0KLQog
I2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQgZW5zdXJlQ1RJVGFibGUoKQogICAgICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlY2lzZUp1bXBU
YXJnZXRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRh
cmdldHMuY3BwCmluZGV4IDFlNzEyMmM3NTAwMzMzM2E3MzNiMWFmNTg4NmFlYTE1ODJmMTA5NDcu
LmU3MGFlYzEyN2M1NmRhNThiYzJkOTIxOTI4NzViOTE5N2E1YmRkZjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuY3BwCkBA
IC05OSwxMiArOTksMTIgQEAgdm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKENvZGVCbG9j
ayogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbSYgaW4KICAgICBjb21wdXRlUHJl
Y2lzZUp1bXBUYXJnZXRzSW50ZXJuYWw8Q29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0c01vZGU6OkZv
bGxvd0NvZGVCbG9ja0NsYWltPihjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgb3V0KTsKIH0KIAot
dm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMsIFZlY3RvcjxJbnN0cnVj
dGlvblN0cmVhbTo6T2Zmc2V0LCAzMj4mIG91dCkKK3ZvaWQgY29tcHV0ZVByZWNpc2VKdW1wVGFy
Z2V0cyhVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zLCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNl
dCwgMzI+JiBvdXQpCiB7CiAgICAgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0c0ludGVybmFsPENv
bXB1dGVQcmVjaXNlSnVtcFRhcmdldHNNb2RlOjpGb2xsb3dDb2RlQmxvY2tDbGFpbT4oY29kZUJs
b2NrLCBpbnN0cnVjdGlvbnMsIG91dCk7CiB9CiAKLXZvaWQgcmVjb21wdXRlUHJlY2lzZUp1bXBU
YXJnZXRzKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3Ry
ZWFtJiBpbnN0cnVjdGlvbnMsIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiYgb3V0
KQordm9pZCByZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywg
VmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+JiBvdXQpCiB7CiAgICAgY29tcHV0ZVBy
ZWNpc2VKdW1wVGFyZ2V0c0ludGVybmFsPENvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHNNb2RlOjpG
b3JjZUNvbXB1dGU+KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBvdXQpOwogfQpAQCAtMTE0LDcg
KzExNCw3IEBAIHZvaWQgZmluZEp1bXBUYXJnZXRzRm9ySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtCiAgICAgZ2V0SnVtcFRhcmdldHNGb3JJ
bnN0cnVjdGlvbihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvdXQpOwogfQogCi12b2lkIGZpbmRK
dW1wVGFyZ2V0c0Zvckluc3RydWN0aW9uKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNv
bnN0IEluc3RydWN0aW9uU3RyZWFtOjpSZWYmIGluc3RydWN0aW9uLCBWZWN0b3I8SW5zdHJ1Y3Rp
b25TdHJlYW06Ok9mZnNldCwgMT4mIG91dCkKK3ZvaWQgZmluZEp1bXBUYXJnZXRzRm9ySW5zdHJ1
Y3Rpb24oVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW06OlJlZiYgaW5zdHJ1Y3Rpb24sIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6
T2Zmc2V0LCAxPiYgb3V0KQogewogICAgIGdldEp1bXBUYXJnZXRzRm9ySW5zdHJ1Y3Rpb24oY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3V0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QcmVjaXNlSnVtcFRhcmdldHMuaAppbmRleCBkOTM0ZjlhNDk1YjljYzk2
NmQ1MjYwN2ZhZjRmMDliNjk1MmE0MDdlLi5mMTc1ZTJjY2E3ZGExMjhlYTQ1YjJiMTM3YTNiOWI4
MDY2NTE2MmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJl
Y2lzZUp1bXBUYXJnZXRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1By
ZWNpc2VKdW1wVGFyZ2V0cy5oCkBAIC0zNCwxMSArMzQsMTEgQEAgY2xhc3MgVW5saW5rZWRDb2Rl
QmxvY2s7CiAvLyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiBieXRlY29kZSBpbmRleCB0aGF0IGFy
ZSB0aGUgZGVzdGluYXRpb24gb2YgYSBqdW1wLgogdm9pZCBjb21wdXRlUHJlY2lzZUp1bXBUYXJn
ZXRzKENvZGVCbG9jayosIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0LCAzMj4mIG91
dCk7CiB2b2lkIGNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoQ29kZUJsb2NrKiwgY29uc3QgSW5z
dHJ1Y3Rpb25TdHJlYW0mIGluc3RydWN0aW9ucywgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQsIDMyPiYgb3V0KTsKLXZvaWQgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0cyhVbmxpbmtl
ZENvZGVCbG9jayosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwgVmVjdG9yPEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQsIDMyPiYgb3V0KTsKK3ZvaWQgY29tcHV0ZVByZWNpc2VKdW1wVGFyZ2V0
cyhVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciosIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiwg
VmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIDMyPiYgb3V0KTsKIAotdm9pZCByZWNv
bXB1dGVQcmVjaXNlSnVtcFRhcmdldHMoVW5saW5rZWRDb2RlQmxvY2sqLCBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYsIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiYgb3V0KTsKK3Zv
aWQgcmVjb21wdXRlUHJlY2lzZUp1bXBUYXJnZXRzKFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9y
KiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mLCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9m
ZnNldD4mIG91dCk7CiAKIHZvaWQgZmluZEp1bXBUYXJnZXRzRm9ySW5zdHJ1Y3Rpb24oQ29kZUJs
b2NrKiwgY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJlZiYsIFZlY3RvcjxJbnN0cnVjdGlvblN0
cmVhbTo6T2Zmc2V0LCAxPiYgb3V0KTsKLXZvaWQgZmluZEp1bXBUYXJnZXRzRm9ySW5zdHJ1Y3Rp
b24oVW5saW5rZWRDb2RlQmxvY2sqLCBjb25zdCBJbnN0cnVjdGlvblN0cmVhbTo6UmVmJiwgVmVj
dG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQsIDE+JiBvdXQpOwordm9pZCBmaW5kSnVtcFRh
cmdldHNGb3JJbnN0cnVjdGlvbihVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciosIGNvbnN0IElu
c3RydWN0aW9uU3RyZWFtOjpSZWYmLCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwg
MT4mIG91dCk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKaW5kZXggZGRiNDEyMTE5MWZh
ZjdiNDIxNTMxZThlMmUwNTIwMjVhNjEyN2UzOS4uYWM3ZDZhNGFjNWUzY2M4ZDQ0YWEyZDhmZjg1
ZGQ4NmFmZmUyYzZlNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCkBAIC04MSw3ICs4MSw3IEBAIFVubGlua2VkQ29kZUJs
b2NrOjpVbmxpbmtlZENvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2Rl
VHlwZSBjb2RlCiAgICAgQVNTRVJUKG1fY29kZVR5cGUgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGNvZGVUeXBlKSk7CiAgICAgQVNTRVJUKG1fZGlkT3B0aW1pemUgPT0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KE1peGVkVHJpU3RhdGUpKTsKICAgICBpZiAoaW5mby5uZWVkc0NsYXNzRmllbGRJbml0
aWFsaXplcigpID09IE5lZWRzQ2xhc3NGaWVsZEluaXRpYWxpemVyOjpZZXMpIHsKLSAgICAgICAg
Y3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOworICAgICAgICBjcmVhdGVSYXJlRGF0YUlmTmVj
ZXNzYXJ5KGhvbGRMb2NrKGNlbGxMb2NrKCkpKTsKICAgICAgICAgbV9yYXJlRGF0YS0+bV9uZWVk
c0NsYXNzRmllbGRJbml0aWFsaXplciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihOZWVkc0NsYXNz
RmllbGRJbml0aWFsaXplcjo6WWVzKTsKICAgICB9CiB9CkBAIC05NCwxMCArOTQsMTAgQEAgdm9p
ZCBVbmxpbmtlZENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhpc09iamVjdC0+Y2Vs
bExvY2soKSk7CiAgICAgaWYgKHZpc2l0b3IuaXNGaXJzdFZpc2l0KCkpCiAgICAgICAgIHRoaXNP
YmplY3QtPm1fYWdlID0gc3RkOjptaW48dW5zaWduZWQ+KHN0YXRpY19jYXN0PHVuc2lnbmVkPih0
aGlzT2JqZWN0LT5tX2FnZSkgKyAxLCBtYXhBZ2UpOwotICAgIGZvciAoRnVuY3Rpb25FeHByZXNz
aW9uVmVjdG9yOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMuYmVn
aW4oKSwgZW5kID0gdGhpc09iamVjdC0+bV9mdW5jdGlvbkRlY2xzLmVuZCgpOyBwdHIgIT0gZW5k
OyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoKnB0cik7Ci0gICAgZm9yIChGdW5jdGlv
bkV4cHJlc3Npb25WZWN0b3I6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fZnVuY3Rpb25F
eHBycy5iZWdpbigpLCBlbmQgPSB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRXhwcnMuZW5kKCk7IHB0
ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgqcHRyKTsKKyAgICBmb3Ig
KGF1dG8mIGJhcnJpZXIgOiB0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uRGVjbHMpCisgICAgICAgIHZp
c2l0b3IuYXBwZW5kKGJhcnJpZXIpOworICAgIGZvciAoYXV0byYgYmFycmllciA6IHRoaXNPYmpl
Y3QtPm1fZnVuY3Rpb25FeHBycykKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoYmFycmllcik7CiAg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+bV9jb25zdGFudFJlZ2lzdGVycy5k
YXRhKCksIHRoaXNPYmplY3QtPm1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpKTsKICAgICBzaXpl
X3QgZXh0cmFNZW1vcnkgPSB0aGlzT2JqZWN0LT5tX21ldGFkYXRhLT5zaXplSW5CeXRlcygpOwog
ICAgIGlmICh0aGlzT2JqZWN0LT5tX2luc3RydWN0aW9ucykKQEAgLTE2Nyw3ICsxNjcsNyBAQCBz
dGF0aWMgdm9pZCBkdW1wTGluZUNvbHVtbkVudHJ5KHNpemVfdCBpbmRleCwgY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW0mIGluc3RydWN0aQogCiB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpkdW1wRXhw
cmVzc2lvblJhbmdlSW5mbygpCiB7Ci0gICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm8+JiBl
eHByZXNzaW9uSW5mbyA9IG1fZXhwcmVzc2lvbkluZm87CisgICAgUmVmQ291bnRlZEFycmF5PEV4
cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbyA9IG1fZXhwcmVzc2lvbkluZm87CiAK
ICAgICBzaXplX3Qgc2l6ZSA9IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOwogICAgIGRhdGFMb2dG
KCJVbmxpbmtlZENvZGVCbG9jayAlcCBleHByZXNzaW9uUmFuZ2VJbmZvWyV6dV0ge1xuIiwgdGhp
cywgc2l6ZSk7CkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZXhw
cmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVJbmRleChCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW4KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJ
bmZvPiYgZXhwcmVzc2lvbkluZm8gPSBtX2V4cHJlc3Npb25JbmZvOworICAgIGNvbnN0IFJlZkNv
dW50ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhwcmVzc2lvbkluZm8gPSBtX2V4cHJl
c3Npb25JbmZvOwogCiAgICAgaW50IGxvdyA9IDA7CiAgICAgaW50IGhpZ2ggPSBleHByZXNzaW9u
SW5mby5zaXplKCk7CkBAIC0yMTgsNjAgKzIxOCw2IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6
OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUlu
CiAgICAgZ2V0TGluZUFuZENvbHVtbihpbmZvLCBsaW5lLCBjb2x1bW4pOwogfQogCi12b2lkIFVu
bGlua2VkQ29kZUJsb2NrOjphZGRFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlvbk9m
ZnNldCwKLSAgICBpbnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgdW5z
aWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQotewotICAgIGlmIChkaXZvdCA+IEV4cHJlc3Np
b25SYW5nZUluZm86Ok1heERpdm90KSB7Ci0gICAgICAgIC8vIE92ZXJmbG93IGhhcyBvY2N1cnJl
ZCwgd2UgY2FuIG9ubHkgZ2l2ZSBsaW5lIG51bWJlciBpbmZvIGZvciBlcnJvcnMgZm9yIHRoaXMg
cmVnaW9uCi0gICAgICAgIGRpdm90ID0gMDsKLSAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwotICAg
ICAgICBlbmRPZmZzZXQgPSAwOwotICAgIH0gZWxzZSBpZiAoc3RhcnRPZmZzZXQgPiBFeHByZXNz
aW9uUmFuZ2VJbmZvOjpNYXhPZmZzZXQpIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IG9mZnNl
dCBpcyBvdXQgb2YgYm91bmRzIHdlIGNsZWFyIGJvdGggb2Zmc2V0cwotICAgICAgICAvLyBzbyB3
ZSBvbmx5IGdldCB0aGUgZGl2b3QgbWFya2VyLiBFcnJvciBtZXNzYWdlIHdpbGwgaGF2ZSB0byBi
ZSByZWR1Y2VkCi0gICAgICAgIC8vIHRvIGxpbmUgYW5kIGNoYXJQb3NpdGlvbiBudW1iZXIuCi0g
ICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgZW5kT2Zmc2V0ID0gMDsKLSAgICB9IGVs
c2UgaWYgKGVuZE9mZnNldCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heE9mZnNldCkgewotICAg
ICAgICAvLyBUaGUgZW5kIG9mZnNldCBpcyBvbmx5IHVzZWQgZm9yIGFkZGl0aW9uYWwgY29udGV4
dCwgYW5kIGlzIG11Y2ggbW9yZSBsaWtlbHkKLSAgICAgICAgLy8gdG8gb3ZlcmZsb3cgKGVnLiBm
dW5jdGlvbiBjYWxsIGFyZ3VtZW50cykgc28gd2UgYXJlIHdpbGxpbmcgdG8gZHJvcCBpdCB3aXRo
b3V0Ci0gICAgICAgIC8vIGRyb3BwaW5nIHRoZSByZXN0IG9mIHRoZSByYW5nZS4KLSAgICAgICAg
ZW5kT2Zmc2V0ID0gMDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBwb3NpdGlvbk1vZGUgPQotICAg
ICAgICAobGluZSA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRMaW5lTW9kZUxpbmUgJiYg
Y29sdW1uIDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdExpbmVNb2RlQ29sdW1uKSAKLSAg
ICAgICAgPyBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9kZQotICAgICAgICA6IChsaW5l
IDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdENvbHVtbk1vZGVMaW5lICYmIGNvbHVtbiA8
PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRDb2x1bW5Nb2RlQ29sdW1uKQotICAgICAgICA/
IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdENvbHVtbk1vZGUKLSAgICAgICAgOiBFeHByZXNzaW9u
UmFuZ2VJbmZvOjpGYXRMaW5lQW5kQ29sdW1uTW9kZTsKLQotICAgIEV4cHJlc3Npb25SYW5nZUlu
Zm8gaW5mbzsKLSAgICBpbmZvLmluc3RydWN0aW9uT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25PZmZzZXQ7
Ci0gICAgaW5mby5kaXZvdFBvaW50ID0gZGl2b3Q7Ci0gICAgaW5mby5zdGFydE9mZnNldCA9IHN0
YXJ0T2Zmc2V0OwotICAgIGluZm8uZW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OwotCi0gICAgaW5mby5t
b2RlID0gcG9zaXRpb25Nb2RlOwotICAgIHN3aXRjaCAocG9zaXRpb25Nb2RlKSB7Ci0gICAgY2Fz
ZSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRMaW5lTW9kZToKLSAgICAgICAgaW5mby5lbmNvZGVG
YXRMaW5lTW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4cHJl
c3Npb25SYW5nZUluZm86OkZhdENvbHVtbk1vZGU6Ci0gICAgICAgIGluZm8uZW5jb2RlRmF0Q29s
dW1uTW9kZShsaW5lLCBjb2x1bW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4cHJlc3Np
b25SYW5nZUluZm86OkZhdExpbmVBbmRDb2x1bW5Nb2RlOiB7Ci0gICAgICAgIGNyZWF0ZVJhcmVE
YXRhSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgdW5zaWduZWQgZmF0SW5kZXggPSBtX3JhcmVEYXRh
LT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLnNpemUoKTsKLSAgICAgICAgRXhwcmVzc2lv
blJhbmdlSW5mbzo6RmF0UG9zaXRpb24gZmF0UG9zID0geyBsaW5lLCBjb2x1bW4gfTsKLSAgICAg
ICAgbV9yYXJlRGF0YS0+bV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5hcHBlbmQoZmF0UG9z
KTsKLSAgICAgICAgaW5mby5wb3NpdGlvbiA9IGZhdEluZGV4OwotICAgIH0KLSAgICB9IC8vIHN3
aXRjaAotCi0gICAgbV9leHByZXNzaW9uSW5mby5hcHBlbmQoaW5mbyk7Ci19Ci0KIGJvb2wgVW5s
aW5rZWRDb2RlQmxvY2s6OnR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZz
ZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkJiBzdGFydERpdm90LCB1bnNpZ25l
ZCYgZW5kRGl2b3QpCiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKQEAgLTI5OCwzMCArMjQ0LDEwIEBAIGJvb2wgVW5saW5rZWRDb2RlQmxvY2s6OnR5cGVQcm9m
aWxlckV4cHJlc3Npb25JbmZvRm9yQnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFkZFR5cGVQcm9maWxlckV4
cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBzdGFydERp
dm90LCB1bnNpZ25lZCBlbmREaXZvdCkKLXsKLSAgICBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5
KCk7Ci0gICAgUmFyZURhdGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZSByYW5nZTsKLSAg
ICByYW5nZS5tX3N0YXJ0RGl2b3QgPSBzdGFydERpdm90OwotICAgIHJhbmdlLm1fZW5kRGl2b3Qg
PSBlbmREaXZvdDsKLSAgICBtX3JhcmVEYXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAuc2V0KGlu
c3RydWN0aW9uT2Zmc2V0LCByYW5nZSk7Ci19Ci0KIFVubGlua2VkQ29kZUJsb2NrOjp+VW5saW5r
ZWRDb2RlQmxvY2soKQogewogfQogCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjpzZXRJbnN0cnVj
dGlvbnMoc3RkOjp1bmlxdWVfcHRyPEluc3RydWN0aW9uU3RyZWFtPiBpbnN0cnVjdGlvbnMpCi17
Ci0gICAgQVNTRVJUKGluc3RydWN0aW9ucyk7Ci0gICAgewotICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKGNlbGxMb2NrKCkpOwotICAgICAgICBtX2luc3RydWN0aW9ucyA9IFdURk1vdmUo
aW5zdHJ1Y3Rpb25zKTsKLSAgICAgICAgbV9tZXRhZGF0YS0+ZmluYWxpemUoKTsKLSAgICB9Ci0g
ICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobV9pbnN0cnVj
dGlvbnMtPnNpemVJbkJ5dGVzKCkgKyBtX21ldGFkYXRhLT5zaXplSW5CeXRlcygpKTsKLX0KLQog
Y29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW0mIFVubGlua2VkQ29kZUJsb2NrOjppbnN0cnVjdGlvbnMo
KSBjb25zdAogewogICAgIEFTU0VSVChtX2luc3RydWN0aW9ucy5nZXQoKSk7CkBAIC0zMzcsNjcg
KzI2Myw3IEBAIFVubGlua2VkSGFuZGxlckluZm8qIFVubGlua2VkQ29kZUJsb2NrOjpoYW5kbGVy
Rm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIFJlcXVpcmVkCiB7CiAgICAgaWYgKCFtX3JhcmVEYXRh
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gVW5saW5rZWRIYW5kbGVySW5m
bzo6aGFuZGxlckZvckluZGV4KG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMsIGluZGV4
LCByZXF1aXJlZEhhbmRsZXIpOwotfQotCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjphcHBseU1v
ZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVyJiByZXdyaXRlciwgSW5zdHJ1Y3Rpb25TdHJlYW1X
cml0ZXImIGluc3RydWN0aW9ucykKLXsKLSAgICAvLyBCZWZvcmUgYXBwbHlpbmcgdGhlIGNoYW5n
ZXMsIHdlIGFkanVzdCB0aGUganVtcHMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGJ5dGVjb2RlIG9m
ZnNldCwgdGhlIG9mZnNldCB0byB0aGUganVtcCB0YXJnZXQsIGFuZAotICAgIC8vIHRoZSBpbnNl
cnRpb24gaW5mb3JtYXRpb24uCi0KLSAgICByZXdyaXRlci5hZGp1c3RKdW1wVGFyZ2V0cygpOwot
Ci0gICAgLy8gVGhlbiwgZXhjZXB0aW9uIGhhbmRsZXJzIHNob3VsZCBiZSBhZGp1c3RlZC4KLSAg
ICBpZiAobV9yYXJlRGF0YSkgewotICAgICAgICBmb3IgKFVubGlua2VkSGFuZGxlckluZm8mIGhh
bmRsZXIgOiBtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzKSB7Ci0gICAgICAgICAgICBo
YW5kbGVyLnRhcmdldCA9IHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KGhhbmRsZXIudGFy
Z2V0KTsKLSAgICAgICAgICAgIGhhbmRsZXIuc3RhcnQgPSByZXdyaXRlci5hZGp1c3RBYnNvbHV0
ZU9mZnNldChoYW5kbGVyLnN0YXJ0KTsKLSAgICAgICAgICAgIGhhbmRsZXIuZW5kID0gcmV3cml0
ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQoaGFuZGxlci5lbmQpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xG
bG93Qnl0ZWNvZGVPZmZzZXRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgbV9yYXJlRGF0YS0+
bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0c1tpXSA9IHJld3JpdGVyLmFkanVz
dEFic29sdXRlT2Zmc2V0KG1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29k
ZU9mZnNldHNbaV0pOwotCi0gICAgICAgIGlmICghbV9yYXJlRGF0YS0+bV90eXBlUHJvZmlsZXJJ
bmZvTWFwLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgSGFzaE1hcDx1bnNpZ25lZCwgUmFyZURh
dGE6OlR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZT4gYWRqdXN0ZWRUeXBlUHJvZmlsZXJJbmZv
TWFwOwotICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fcmFyZURhdGEtPm1fdHlwZVBy
b2ZpbGVySW5mb01hcCkKLSAgICAgICAgICAgICAgICBhZGp1c3RlZFR5cGVQcm9maWxlckluZm9N
YXAuc2V0KHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zmc2V0KGVudHJ5LmtleSksIGVudHJ5LnZh
bHVlKTsKLSAgICAgICAgICAgIG1fcmFyZURhdGEtPm1fdHlwZVByb2ZpbGVySW5mb01hcC5zd2Fw
KGFkanVzdGVkVHlwZVByb2ZpbGVySW5mb01hcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG1fZXhwcmVzc2lvbkluZm9baV0uaW5zdHJ1Y3Rpb25PZmZzZXQgPSByZXdyaXRlci5hZGp1
c3RBYnNvbHV0ZU9mZnNldChtX2V4cHJlc3Npb25JbmZvW2ldLmluc3RydWN0aW9uT2Zmc2V0KTsK
LQotICAgIC8vIFRoZW4sIG1vZGlmeSB0aGUgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgotICAgIHJl
d3JpdGVyLmFwcGx5TW9kaWZpY2F0aW9uKCk7Ci0KLSAgICAvLyBBbmQgcmVjb21wdXRlIHRoZSBq
dW1wIHRhcmdldCBiYXNlZCBvbiB0aGUgbW9kaWZpZWQgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgot
ICAgIG1fanVtcFRhcmdldHMuY2xlYXIoKTsKLSAgICByZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdl
dHModGhpcywgaW5zdHJ1Y3Rpb25zLCBtX2p1bXBUYXJnZXRzKTsKLX0KLQotdm9pZCBVbmxpbmtl
ZENvZGVCbG9jazo6c2hyaW5rVG9GaXQoKQotewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
Y2VsbExvY2soKSk7Ci0gICAgCi0gICAgbV9qdW1wVGFyZ2V0cy5zaHJpbmtUb0ZpdCgpOwotICAg
IG1faWRlbnRpZmllcnMuc2hyaW5rVG9GaXQoKTsKLSAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLnNo
cmlua1RvRml0KCk7Ci0gICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uc2hy
aW5rVG9GaXQoKTsKLSAgICBtX2Z1bmN0aW9uRGVjbHMuc2hyaW5rVG9GaXQoKTsKLSAgICBtX2Z1
bmN0aW9uRXhwcnMuc2hyaW5rVG9GaXQoKTsKLSAgICBtX2V4cHJlc3Npb25JbmZvLnNocmlua1Rv
Rml0KCk7Ci0KLSAgICBpZiAobV9yYXJlRGF0YSkgewotICAgICAgICBtX3JhcmVEYXRhLT5tX2V4
Y2VwdGlvbkhhbmRsZXJzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fc3dp
dGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmlu
Z1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9yYXJlRGF0YS0+bV9l
eHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX3JhcmVE
YXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLnNocmlua1RvRml0KCk7
Ci0gICAgICAgIG1fcmFyZURhdGEtPm1fYml0VmVjdG9ycy5zaHJpbmtUb0ZpdCgpOwotICAgICAg
ICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50SWRlbnRpZmllclNldHMuc2hyaW5rVG9GaXQoKTsKLSAg
ICB9CisgICAgcmV0dXJuIFVubGlua2VkSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRleDxVbmxp
bmtlZEhhbmRsZXJJbmZvPihtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLCBpbmRleCwg
cmVxdWlyZWRIYW5kbGVyKTsKIH0KIAogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0CkBAIC00MjAsMTIgKzI4Niw2IEBAIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcyYgVW5saW5rZWRDb2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXNTbG93KENvZGVCbG9jayog
Y29kCiAgICAgcmV0dXJuICptX2xpdmVuZXNzOwogfQogCi12b2lkIFVubGlua2VkQ29kZUJsb2Nr
OjphZGRPdXRPZkxpbmVKdW1wVGFyZ2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgYnl0ZWNv
ZGVPZmZzZXQsIGludCB0YXJnZXQpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQodGFyZ2V0KTsKLSAg
ICBtX291dE9mTGluZUp1bXBUYXJnZXRzLnNldChieXRlY29kZU9mZnNldCwgdGFyZ2V0KTsKLX0K
LQogaW50IFVubGlua2VkQ29kZUJsb2NrOjpvdXRPZkxpbmVKdW1wT2Zmc2V0KEluc3RydWN0aW9u
U3RyZWFtOjpPZmZzZXQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAgQVNTRVJUKG1fb3V0T2ZMaW5l
SnVtcFRhcmdldHMuY29udGFpbnMoYnl0ZWNvZGVPZmZzZXQpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKaW5kZXggMzE5MjE3MDlh
YzgzMDZiZjRkZTRkOTczOTkyZTE0YTBkMDMwZGFmMC4uNjBkMzYyMGI4ZTVjNmNhMDM1YmE5NTEx
YjVjMGQ0NzllNjc0OGYwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxhbGdv
cml0aG0+CiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9UcmlT
dGF0ZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9Vbmlx
dWVkU3RyaW5nSW1wbC5oPgpAQCAtNTksNiArNjAsNyBAQCBjbGFzcyBTY3JpcHRFeGVjdXRhYmxl
OwogY2xhc3MgU291cmNlQ29kZTsKIGNsYXNzIFNvdXJjZVByb3ZpZGVyOwogY2xhc3MgVW5saW5r
ZWRDb2RlQmxvY2s7CitjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjsKIGNsYXNzIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTsKIHN0cnVjdCBFeGVjdXRhYmxlSW5mbzsKQEAgLTk0LDcgKzk2LDcgQEAgc3RydWN0IFVubGlu
a2VkU3RyaW5nSnVtcFRhYmxlIHsKIH07CiAKIHN0cnVjdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJs
ZSB7Ci0gICAgVmVjdG9yPGludDMyX3Q+IGJyYW5jaE9mZnNldHM7CisgICAgUmVmQ291bnRlZEFy
cmF5PGludDMyX3Q+IGJyYW5jaE9mZnNldHM7CiAgICAgaW50MzJfdCBtaW47CiAKICAgICBpbnQz
Ml90IG9mZnNldEZvclZhbHVlKGludDMyX3QgdmFsdWUsIGludDMyX3QgZGVmYXVsdE9mZnNldCk7
CkBAIC0xMzMsMTMgKzEzNSw4IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpT
Q2VsbCB7CiAgICAgdm9pZCBzZXRIYXNUYWlsQ2FsbHMoKSB7IG1faGFzVGFpbENhbGxzID0gdHJ1
ZTsgfQogICAgIGJvb2wgYWxsb3dEaXJlY3RFdmFsQ2FjaGUoKSBjb25zdCB7IHJldHVybiAhKG1f
ZmVhdHVyZXMgJiBOb0V2YWxDYWNoZUZlYXR1cmUpOyB9CiAKLSAgICB2b2lkIGFkZEV4cHJlc3Np
b25JbmZvKHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0LCBpbnQgZGl2b3QsCi0gICAgICAgIGlu
dCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgdW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29s
dW1uKTsKLQotICAgIHZvaWQgYWRkVHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8odW5zaWduZWQg
aW5zdHJ1Y3Rpb25PZmZzZXQsIHVuc2lnbmVkIHN0YXJ0RGl2b3QsIHVuc2lnbmVkIGVuZERpdm90
KTsKLQogICAgIGJvb2wgaGFzRXhwcmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25J
bmZvLnNpemUoKTsgfQotICAgIGNvbnN0IFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiYgZXhw
cmVzc2lvbkluZm8oKSB7IHJldHVybiBtX2V4cHJlc3Npb25JbmZvOyB9CisgICAgY29uc3QgUmVm
Q291bnRlZEFycmF5PEV4cHJlc3Npb25SYW5nZUluZm8+JiBleHByZXNzaW9uSW5mbygpIHsgcmV0
dXJuIG1fZXhwcmVzc2lvbkluZm87IH0KIAogICAgIGJvb2wgaGFzQ2hlY2twb2ludHMoKSBjb25z
dCB7IHJldHVybiBtX2hhc0NoZWNrcG9pbnRzOyB9CiAgICAgdm9pZCBzZXRIYXNDaGVja3BvaW50
cygpIHsgbV9oYXNDaGVja3BvaW50cyA9IHRydWU7IH0KQEAgLTE1MCw2NyArMTQ3LDI2IEBAIGNs
YXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICAvLyBQYXJhbWV0
ZXIgaW5mb3JtYXRpb24KICAgICB2b2lkIHNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKSB7
IG1fbnVtUGFyYW1ldGVycyA9IG5ld1ZhbHVlOyB9Ci0gICAgdm9pZCBhZGRQYXJhbWV0ZXIoKSB7
IG1fbnVtUGFyYW1ldGVycysrOyB9CiAgICAgdW5zaWduZWQgbnVtUGFyYW1ldGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQogCiAgICAgLy8gQ29uc3RhbnQgUG9vbHMKIAog
ICAgIHNpemVfdCBudW1iZXJPZklkZW50aWZpZXJzKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlm
aWVycy5zaXplKCk7IH0KLSAgICB2b2lkIGFkZElkZW50aWZpZXIoY29uc3QgSWRlbnRpZmllciYg
aSkgeyByZXR1cm4gbV9pZGVudGlmaWVycy5hcHBlbmQoaSk7IH0KICAgICBjb25zdCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyc1tp
bmRleF07IH0KLSAgICBjb25zdCBWZWN0b3I8SWRlbnRpZmllcj4mIGlkZW50aWZpZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9pZGVudGlmaWVyczsgfQorICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxJ
ZGVudGlmaWVyPiYgaWRlbnRpZmllcnMoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXJzOyB9
CiAKICAgICBCaXRWZWN0b3ImIGJpdFZlY3RvcihzaXplX3QgaSkgeyBBU1NFUlQobV9yYXJlRGF0
YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX2JpdFZlY3RvcnNbaV07IH0KLSAgICB1bnNpZ25lZCBh
ZGRCaXRWZWN0b3IoQml0VmVjdG9yJiYgYml0VmVjdG9yKQotICAgIHsKLSAgICAgICAgY3JlYXRl
UmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2JpdFZlY3RvcnMu
YXBwZW5kKFdURk1vdmUoYml0VmVjdG9yKSk7Ci0gICAgICAgIHJldHVybiBtX3JhcmVEYXRhLT5t
X2JpdFZlY3RvcnMuc2l6ZSgpIC0gMTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZFNldENvbnN0YW50
KElkZW50aWZpZXJTZXQmIHNldCkKLSAgICB7Ci0gICAgICAgIGNyZWF0ZVJhcmVEYXRhSWZOZWNl
c3NhcnkoKTsKLSAgICAgICAgVk0mIHZtID0gdGhpcy0+dm0oKTsKLSAgICAgICAgYXV0byBsb2Nr
ZXIgPSBsb2NrRHVyaW5nTWFya2luZyh2bS5oZWFwLCBjZWxsTG9jaygpKTsKLSAgICAgICAgdW5z
aWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7Ci0gICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKLSAgICAgICAg
bV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKFNvdXJjZUNvZGVSZXBy
ZXNlbnRhdGlvbjo6T3RoZXIpOwotICAgICAgICBtX3JhcmVEYXRhLT5tX2NvbnN0YW50SWRlbnRp
ZmllclNldHMuYXBwZW5kKENvbnN0YW50SWRlbnRpZmllclNldEVudHJ5KHNldCwgcmVzdWx0KSk7
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgYWRkQ29uc3RhbnQoSlNWYWx1ZSB2LCBTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gU291cmNlQ29kZVJlcHJl
c2VudGF0aW9uOjpPdGhlcikKLSAgICB7Ci0gICAgICAgIFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0g
ICAgICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcodm0uaGVhcCwgY2VsbExvY2so
KSk7Ci0gICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgp
OwotICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93
bj4oKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldCh2bSwgdGhpcywg
dik7Ci0gICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChz
b3VyY2VDb2RlUmVwcmVzZW50YXRpb24pOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LSAgICB1bnNpZ25lZCBhZGRDb25zdGFudChMaW5rVGltZUNvbnN0YW50IGxpbmtUaW1lQ29uc3Rh
bnQpCi0gICAgewotICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAgICBhdXRvIGxv
Y2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKHZtLmhlYXAsIGNlbGxMb2NrKCkpOwotICAgICAgICB1
bnNpZ25lZCByZXN1bHQgPSBtX2NvbnN0YW50UmVnaXN0ZXJzLnNpemUoKTsKLSAgICAgICAgbV9j
b25zdGFudFJlZ2lzdGVycy5hcHBlbmQoV3JpdGVCYXJyaWVyPFVua25vd24+KCkpOwotICAgICAg
ICBtX2NvbnN0YW50UmVnaXN0ZXJzLmxhc3QoKS5zZXQodm0sIHRoaXMsIGpzTnVtYmVyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KGxpbmtUaW1lQ29uc3RhbnQpKSk7Ci0gICAgICAgIG1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRpb246
OkxpbmtUaW1lQ29uc3RhbnQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KIAotICAg
IGNvbnN0IFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+JiBjb25zdGFudFJlZ2lzdGVycygp
IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnM7IH0KKyAgICBjb25zdCBSZWZDb3VudGVkQXJy
YXk8V3JpdGVCYXJyaWVyPFVua25vd24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBt
X2NvbnN0YW50UmVnaXN0ZXJzOyB9CiAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBj
b25zdGFudFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29u
c3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRleCgpXTsgfQogICAgIEFMV0FZU19JTkxJ
TkUgSlNWYWx1ZSBnZXRDb25zdGFudChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVy
biBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50b0NvbnN0YW50SW5kZXgoKV0uZ2V0KCk7IH0KLSAg
ICBjb25zdCBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiYgY29uc3RhbnRzU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVz
ZW50YXRpb247IH0KKyAgICBjb25zdCBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29kZVJlcHJlc2Vu
dGF0aW9uPiYgY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbV9j
b25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb247IH0KIAogICAgIHVuc2lnbmVkIG51bWJl
ck9mQ29uc3RhbnRJZGVudGlmaWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBt
X3JhcmVEYXRhLT5tX2NvbnN0YW50SWRlbnRpZmllclNldHMuc2l6ZSgpIDogMDsgfQotICAgIGNv
bnN0IFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50SWRlbnRpZmll
clNldHMoKSB7IEFTU0VSVChtX3JhcmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29uc3Rh
bnRJZGVudGlmaWVyU2V0czsgfQorICAgIGNvbnN0IFJlZkNvdW50ZWRBcnJheTxDb25zdGFudElk
ZW50aWZpZXJTZXRFbnRyeT4mIGNvbnN0YW50SWRlbnRpZmllclNldHMoKSB7IEFTU0VSVChtX3Jh
cmVEYXRhKTsgcmV0dXJuIG1fcmFyZURhdGEtPm1fY29uc3RhbnRJZGVudGlmaWVyU2V0czsgfQog
CiAgICAgLy8gSnVtcHMKICAgICBzaXplX3QgbnVtYmVyT2ZKdW1wVGFyZ2V0cygpIGNvbnN0IHsg
cmV0dXJuIG1fanVtcFRhcmdldHMuc2l6ZSgpOyB9Ci0gICAgdm9pZCBhZGRKdW1wVGFyZ2V0KHVu
c2lnbmVkIGp1bXBUYXJnZXQpIHsgbV9qdW1wVGFyZ2V0cy5hcHBlbmQoanVtcFRhcmdldCk7IH0K
ICAgICB1bnNpZ25lZCBqdW1wVGFyZ2V0KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9qdW1w
VGFyZ2V0c1tpbmRleF07IH0KICAgICB1bnNpZ25lZCBsYXN0SnVtcFRhcmdldCgpIGNvbnN0IHsg
cmV0dXJuIG1fanVtcFRhcmdldHMubGFzdCgpOyB9CiAKQEAgLTIyMyw5ICsxNzksNiBAQCBjbGFz
cyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIFN1cGVyQmluZGluZyBz
dXBlckJpbmRpbmcoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTdXBlckJpbmRpbmc+KG1f
c3VwZXJCaW5kaW5nKTsgfQogICAgIEpTUGFyc2VyU2NyaXB0TW9kZSBzY3JpcHRNb2RlKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SlNQYXJzZXJTY3JpcHRNb2RlPihtX3NjcmlwdE1vZGUp
OyB9CiAKLSAgICB2b2lkIHNocmlua1RvRml0KCk7Ci0KLSAgICB2b2lkIHNldEluc3RydWN0aW9u
cyhzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+KTsKICAgICBjb25zdCBJbnN0cnVj
dGlvblN0cmVhbSYgaW5zdHJ1Y3Rpb25zKCkgY29uc3Q7CiAKICAgICBpbnQgbnVtQ2FsbGVlTG9j
YWxzKCkgY29uc3QgeyByZXR1cm4gbV9udW1DYWxsZWVMb2NhbHM7IH0KQEAgLTIzNCwzOSArMTg3
LDE4IEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgLy8g
SnVtcCBUYWJsZXMKIAogICAgIHNpemVfdCBudW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKSBjb25z
dCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9zd2l0Y2hKdW1wVGFibGVzLnNp
emUoKSA6IDA7IH0KLSAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgYWRkU3dpdGNoSnVtcFRh
YmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEtPm1fc3dpdGNo
SnVtcFRhYmxlcy5hcHBlbmQoVW5saW5rZWRTaW1wbGVKdW1wVGFibGUoKSk7IHJldHVybiBtX3Jh
cmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9CiAgICAgVW5saW5rZWRTaW1wbGVK
dW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZShpbnQgdGFibGVJbmRleCkgeyBBU1NFUlQobV9yYXJl
RGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07
IH0KIAogICAgIHNpemVfdCBudW1iZXJPZlN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSBjb25zdCB7
IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
LnNpemUoKSA6IDA7IH0KLSAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgYWRkU3RyaW5nU3dp
dGNoSnVtcFRhYmxlKCkgeyBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCk7IG1fcmFyZURhdGEt
Pm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5hcHBlbmQoVW5saW5rZWRTdHJpbmdKdW1wVGFibGUo
KSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMubGFzdCgpOyB9
CiAgICAgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHN0cmluZ1N3aXRjaEp1bXBUYWJsZShpbnQg
dGFibGVJbmRleCkgeyBBU1NFUlQobV9yYXJlRGF0YSk7IHJldHVybiBtX3JhcmVEYXRhLT5tX3N0
cmluZ1N3aXRjaEp1bXBUYWJsZXNbdGFibGVJbmRleF07IH0KIAotICAgIHVuc2lnbmVkIGFkZEZ1
bmN0aW9uRGVjbChVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogbikKLSAgICB7Ci0gICAgICAg
IFZNJiB2bSA9IHRoaXMtPnZtKCk7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01h
cmtpbmcodm0uaGVhcCwgY2VsbExvY2soKSk7Ci0gICAgICAgIHVuc2lnbmVkIHNpemUgPSBtX2Z1
bmN0aW9uRGVjbHMuc2l6ZSgpOwotICAgICAgICBtX2Z1bmN0aW9uRGVjbHMuYXBwZW5kKFdyaXRl
QmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7Ci0gICAgICAgIG1fZnVuY3Rp
b25EZWNscy5sYXN0KCkuc2V0KHZtLCB0aGlzLCBuKTsKLSAgICAgICAgcmV0dXJuIHNpemU7Ci0g
ICAgfQogICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkRlY2woaW50IGlu
ZGV4KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVjbHNbaW5kZXhdLmdldCgpOyB9CiAgICAgc2l6ZV90
IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWNscy5zaXplKCk7
IH0KLSAgICB1bnNpZ25lZCBhZGRGdW5jdGlvbkV4cHIoVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUqIG4pCi0gICAgewotICAgICAgICBWTSYgdm0gPSB0aGlzLT52bSgpOwotICAgICAgICBhdXRv
IGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKHZtLmhlYXAsIGNlbGxMb2NrKCkpOwotICAgICAg
ICB1bnNpZ25lZCBzaXplID0gbV9mdW5jdGlvbkV4cHJzLnNpemUoKTsKLSAgICAgICAgbV9mdW5j
dGlvbkV4cHJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+
KCkpOwotICAgICAgICBtX2Z1bmN0aW9uRXhwcnMubGFzdCgpLnNldCh2bSwgdGhpcywgbik7Ci0g
ICAgICAgIHJldHVybiBzaXplOwotICAgIH0KICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZnVuY3Rpb25FeHByKGludCBpbmRleCkgeyByZXR1cm4gbV9mdW5jdGlvbkV4cHJzW2luZGV4
XS5nZXQoKTsgfQogICAgIHNpemVfdCBudW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSB7IHJldHVybiBt
X2Z1bmN0aW9uRXhwcnMuc2l6ZSgpOyB9CiAKICAgICAvLyBFeGNlcHRpb24gaGFuZGxpbmcgc3Vw
cG9ydAogICAgIHNpemVfdCBudW1iZXJPZkV4Y2VwdGlvbkhhbmRsZXJzKCkgY29uc3QgeyByZXR1
cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuc2l6ZSgpIDog
MDsgfQotICAgIHZvaWQgYWRkRXhjZXB0aW9uSGFuZGxlcihjb25zdCBVbmxpbmtlZEhhbmRsZXJJ
bmZvJiBoYW5kbGVyKSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgcmV0dXJuIG1fcmFy
ZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpOyB9CiAgICAgVW5saW5r
ZWRIYW5kbGVySW5mbyYgZXhjZXB0aW9uSGFuZGxlcihpbnQgaW5kZXgpIHsgQVNTRVJUKG1fcmFy
ZURhdGEpOyByZXR1cm4gbV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVyc1tpbmRleF07IH0K
IAogICAgIENvZGVUeXBlIGNvZGVUeXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29k
ZVR5cGU+KG1fY29kZVR5cGUpOyB9CkBAIC0zMDMsMTIgKzIzNSw3IEBAIGNsYXNzIFVubGlua2Vk
Q29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgQUxXQVlTX0lOTElORSB1bnNpZ25lZCBz
dGFydENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB1bnNpZ25lZCBlbmRDb2x1bW4o
KSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQogCi0gICAgdm9pZCBhZGRPcFByb2ZpbGVD
b250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQgb2Zmc2V0
KQotICAgIHsKLSAgICAgICAgY3JlYXRlUmFyZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgICAgICBt
X3JhcmVEYXRhLT5tX29wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzLmFwcGVuZChv
ZmZzZXQpOwotICAgIH0KLSAgICBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNl
dD4mIG9wUHJvZmlsZUNvbnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkgY29uc3QKKyAgICBjb25z
dCBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4mIG9wUHJvZmlsZUNv
bnRyb2xGbG93Qnl0ZWNvZGVPZmZzZXRzKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X3JhcmVEYXRhKTsKICAgICAgICAgcmV0dXJuIG1fcmFyZURhdGEtPm1fb3BQcm9maWxlQ29udHJv
bEZsb3dCeXRlY29kZU9mZnNldHM7CkBAIC0zODcsMjEgKzMxNCwxNyBAQCBjbGFzcyBVbmxpbmtl
ZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBCeXRlY29kZVJld3JpdGVyOwotICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUdlbmVyYXRvcjsK
KyAgICBmcmllbmQgY2xhc3MgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVHJhaXRzPgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUdlbmVyYXRvckJh
c2U7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgogICAgIGZyaWVuZCBj
bGFzcyBDYWNoZWRDb2RlQmxvY2s7CiAKLSAgICB2b2lkIGFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVj
b2RlUmV3cml0ZXImLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYpOwotCi0gICAgdm9pZCBjcmVh
dGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKKyAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nh
cnkoY29uc3QgQWJzdHJhY3RMb2NrZXImKQogICAgIHsKLSAgICAgICAgaWYgKCFtX3JhcmVEYXRh
KSB7Ci0gICAgICAgICAgICBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKCpoZWFwKCks
IGNlbGxMb2NrKCkpOworICAgICAgICBpZiAoIW1fcmFyZURhdGEpCiAgICAgICAgICAgICBtX3Jh
cmVEYXRhID0gbWFrZVVuaXF1ZTxSYXJlRGF0YT4oKTsKLSAgICAgICAgfQogICAgIH0KIAogICAg
IHZvaWQgZ2V0TGluZUFuZENvbHVtbihjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZvJiwgdW5zaWdu
ZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OwpAQCAtNDQ2LDcgKzM2OSw3IEBAIGNs
YXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgU3RyaW5nIG1fc291
cmNlVVJMRGlyZWN0aXZlOwogICAgIFN0cmluZyBtX3NvdXJjZU1hcHBpbmdVUkxEaXJlY3RpdmU7
CiAKLSAgICBWZWN0b3I8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9qdW1wVGFyZ2V0czsK
KyAgICBSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldD4gbV9qdW1wVGFy
Z2V0czsKICAgICBSZWY8VW5saW5rZWRNZXRhZGF0YVRhYmxlPiBtX21ldGFkYXRhOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0cmVhbT4gbV9pbnN0cnVjdGlvbnM7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKQEAgLTQ1
NywxMCArMzgwLDEwIEBAIGNsYXNzIFVubGlua2VkQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7
CiAjZW5kaWYKIAogICAgIC8vIENvbnN0YW50IFBvb2xzCi0gICAgVmVjdG9yPElkZW50aWZpZXI+
IG1faWRlbnRpZmllcnM7Ci0gICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jb25z
dGFudFJlZ2lzdGVyczsKLSAgICBWZWN0b3I8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKLSAgICB0eXBlZGVmIFZlY3RvcjxXcml0
ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+PiBGdW5jdGlvbkV4cHJlc3Npb25W
ZWN0b3I7CisgICAgUmVmQ291bnRlZEFycmF5PElkZW50aWZpZXI+IG1faWRlbnRpZmllcnM7Cisg
ICAgUmVmQ291bnRlZEFycmF5PFdyaXRlQmFycmllcjxVbmtub3duPj4gbV9jb25zdGFudFJlZ2lz
dGVyczsKKyAgICBSZWZDb3VudGVkQXJyYXk8U291cmNlQ29kZVJlcHJlc2VudGF0aW9uPiBtX2Nv
bnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsKKyAgICB1c2luZyBGdW5jdGlvbkV4cHJl
c3Npb25WZWN0b3IgPSBSZWZDb3VudGVkQXJyYXk8V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlPj47CiAgICAgRnVuY3Rpb25FeHByZXNzaW9uVmVjdG9yIG1fZnVuY3Rpb25E
ZWNsczsKICAgICBGdW5jdGlvbkV4cHJlc3Npb25WZWN0b3IgbV9mdW5jdGlvbkV4cHJzOwogCkBA
IC00NjgsMjcgKzM5MSwyNiBAQCBjbGFzcyBVbmxpbmtlZENvZGVCbG9jayA6IHB1YmxpYyBKU0Nl
bGwgewogICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgIFdURl9NQUtFX1NUUlVDVF9GQVNU
X0FMTE9DQVRFRDsKIAotICAgICAgICBWZWN0b3I8VW5saW5rZWRIYW5kbGVySW5mbz4gbV9leGNl
cHRpb25IYW5kbGVyczsKKyAgICAgICAgUmVmQ291bnRlZEFycmF5PFVubGlua2VkSGFuZGxlcklu
Zm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CiAKICAgICAgICAgLy8gSnVtcCBUYWJsZXMKLSAgICAg
ICAgVmVjdG9yPFVubGlua2VkU2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7Ci0g
ICAgICAgIFZlY3RvcjxVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1w
VGFibGVzOworICAgICAgICBSZWZDb3VudGVkQXJyYXk8VW5saW5rZWRTaW1wbGVKdW1wVGFibGU+
IG1fc3dpdGNoSnVtcFRhYmxlczsKKyAgICAgICAgUmVmQ291bnRlZEFycmF5PFVubGlua2VkU3Ry
aW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7CiAKLSAgICAgICAgVmVjdG9y
PEV4cHJlc3Npb25SYW5nZUluZm86OkZhdFBvc2l0aW9uPiBtX2V4cHJlc3Npb25JbmZvRmF0UG9z
aXRpb25zOworICAgICAgICBSZWZDb3VudGVkQXJyYXk8RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0
UG9zaXRpb24+IG1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnM7CiAKICAgICAgICAgc3RydWN0
IFR5cGVQcm9maWxlckV4cHJlc3Npb25SYW5nZSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBtX3N0
YXJ0RGl2b3Q7CiAgICAgICAgICAgICB1bnNpZ25lZCBtX2VuZERpdm90OwogICAgICAgICB9Owog
ICAgICAgICBIYXNoTWFwPHVuc2lnbmVkLCBUeXBlUHJvZmlsZXJFeHByZXNzaW9uUmFuZ2U+IG1f
dHlwZVByb2ZpbGVySW5mb01hcDsKLSAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpP
ZmZzZXQ+IG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7Ci0gICAgICAgIFZl
Y3RvcjxCaXRWZWN0b3I+IG1fYml0VmVjdG9yczsKLSAgICAgICAgVmVjdG9yPENvbnN0YW50SWRl
bnRpZmllclNldEVudHJ5PiBtX2NvbnN0YW50SWRlbnRpZmllclNldHM7CisgICAgICAgIFJlZkNv
dW50ZWRBcnJheTxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0PiBtX29wUHJvZmlsZUNvbnRyb2xG
bG93Qnl0ZWNvZGVPZmZzZXRzOworICAgICAgICBSZWZDb3VudGVkQXJyYXk8Qml0VmVjdG9yPiBt
X2JpdFZlY3RvcnM7CisgICAgICAgIFJlZkNvdW50ZWRBcnJheTxDb25zdGFudElkZW50aWZpZXJT
ZXRFbnRyeT4gbV9jb25zdGFudElkZW50aWZpZXJTZXRzOwogCiAgICAgICAgIHVuc2lnbmVkIG1f
bmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgOiAxOwogICAgIH07CiAKLSAgICB2b2lkIGFkZE91
dE9mTGluZUp1bXBUYXJnZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50IHRhcmdldCk7
CiAgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCk7
CiAgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1Y3Rpb25TdHJlYW06OlJl
ZiYgaW5zdHJ1Y3Rpb24pCiAgICAgewpAQCAtNDk4LDE2ICs0MjAsOSBAQCBjbGFzcyBVbmxpbmtl
ZENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogcHJpdmF0ZToKICAgICB1c2luZyBPdXRPZkxp
bmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsK
IAotICAgIE91dE9mTGluZUp1bXBUYXJnZXRzIHJlcGxhY2VPdXRPZkxpbmVKdW1wVGFyZ2V0cygp
Ci0gICAgewotICAgICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBuZXdKdW1wVGFyZ2V0czsKLSAg
ICAgICAgc3RkOjpzd2FwKG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMsIG5ld0p1bXBUYXJnZXRzKTsK
LSAgICAgICAgcmV0dXJuIG5ld0p1bXBUYXJnZXRzOwotICAgIH0KLQogICAgIE91dE9mTGluZUp1
bXBUYXJnZXRzIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJh
cmVEYXRhPiBtX3JhcmVEYXRhOwotICAgIFZlY3RvcjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4
cHJlc3Npb25JbmZvOworICAgIFJlZkNvdW50ZWRBcnJheTxFeHByZXNzaW9uUmFuZ2VJbmZvPiBt
X2V4cHJlc3Npb25JbmZvOwogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2IwZTIyYzUyMjdiN2MzM2VmM2ZkMTQxZGFiZDBjMzNhNjRiYmQ1NgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvci5jcHAKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaCIKKworI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCisjaW5jbHVkZSAi
Qnl0ZWNvZGVSZXdyaXRlci5oIgorI2luY2x1ZGUgIkNsYXNzSW5mby5oIgorI2luY2x1ZGUgIkNv
ZGVDYWNoZS5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGVJbmZvLmgiCisjaW5jbHVkZSAiRnVuY3Rp
b25PdmVycmlkZXMuaCIKKyNpbmNsdWRlICJJbnN0cnVjdGlvblN0cmVhbS5oIgorI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIk9wY29kZS5o
IgorI2luY2x1ZGUgIlBhcnNlci5oIgorI2luY2x1ZGUgIlByZWNpc2VKdW1wVGFyZ2V0c0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJTb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5o
IgorI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiVW5saW5rZWRFdmFsQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IlVubGlua2VkTWV0YWRhdGFUYWJsZUlubGluZXMuaCIKKyNpbmNsdWRlICJVbmxpbmtlZE1vZHVs
ZVByb2dyYW1Db2RlQmxvY2suaCIKKyNpbmNsdWRlICJVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2su
aCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworaW5saW5l
IHZvaWQgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmdldExpbmVBbmRDb2x1bW4oY29uc3Qg
RXhwcmVzc2lvblJhbmdlSW5mbyYgaW5mbywgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1
bW4pIGNvbnN0Cit7CisgICAgc3dpdGNoIChpbmZvLm1vZGUpIHsKKyAgICBjYXNlIEV4cHJlc3Np
b25SYW5nZUluZm86OkZhdExpbmVNb2RlOgorICAgICAgICBpbmZvLmRlY29kZUZhdExpbmVNb2Rl
KGxpbmUsIGNvbHVtbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhwcmVzc2lvblJhbmdl
SW5mbzo6RmF0Q29sdW1uTW9kZToKKyAgICAgICAgaW5mby5kZWNvZGVGYXRDb2x1bW5Nb2RlKGxp
bmUsIGNvbHVtbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhwcmVzc2lvblJhbmdlSW5m
bzo6RmF0TGluZUFuZENvbHVtbk1vZGU6IHsKKyAgICAgICAgdW5zaWduZWQgZmF0SW5kZXggPSBp
bmZvLnBvc2l0aW9uOworICAgICAgICBjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZvOjpGYXRQb3Np
dGlvbiYgZmF0UG9zID0gbV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9uc1tmYXRJbmRleF07Cisg
ICAgICAgIGxpbmUgPSBmYXRQb3MubGluZTsKKyAgICAgICAgY29sdW1uID0gZmF0UG9zLmNvbHVt
bjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0gLy8gc3dpdGNoCit9CisKK3ZvaWQgVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmFkZEV4cHJlc3Npb25JbmZvKHVuc2lnbmVkIGluc3Ry
dWN0aW9uT2Zmc2V0LCBpbnQgZGl2b3QsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwg
dW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQoreworICAgIGlmIChkaXZvdCA+IEV4cHJl
c3Npb25SYW5nZUluZm86Ok1heERpdm90KSB7CisgICAgICAgIC8vIE92ZXJmbG93IGhhcyBvY2N1
cnJlZCwgd2UgY2FuIG9ubHkgZ2l2ZSBsaW5lIG51bWJlciBpbmZvIGZvciBlcnJvcnMgZm9yIHRo
aXMgcmVnaW9uCisgICAgICAgIGRpdm90ID0gMDsKKyAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwor
ICAgICAgICBlbmRPZmZzZXQgPSAwOworICAgIH0gZWxzZSBpZiAoc3RhcnRPZmZzZXQgPiBFeHBy
ZXNzaW9uUmFuZ2VJbmZvOjpNYXhPZmZzZXQpIHsKKyAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IG9m
ZnNldCBpcyBvdXQgb2YgYm91bmRzIHdlIGNsZWFyIGJvdGggb2Zmc2V0cworICAgICAgICAvLyBz
byB3ZSBvbmx5IGdldCB0aGUgZGl2b3QgbWFya2VyLiBFcnJvciBtZXNzYWdlIHdpbGwgaGF2ZSB0
byBiZSByZWR1Y2VkCisgICAgICAgIC8vIHRvIGxpbmUgYW5kIGNoYXJQb3NpdGlvbiBudW1iZXIu
CisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgZW5kT2Zmc2V0ID0gMDsKKyAgICB9
IGVsc2UgaWYgKGVuZE9mZnNldCA+IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heE9mZnNldCkgewor
ICAgICAgICAvLyBUaGUgZW5kIG9mZnNldCBpcyBvbmx5IHVzZWQgZm9yIGFkZGl0aW9uYWwgY29u
dGV4dCwgYW5kIGlzIG11Y2ggbW9yZSBsaWtlbHkKKyAgICAgICAgLy8gdG8gb3ZlcmZsb3cgKGVn
LiBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50cykgc28gd2UgYXJlIHdpbGxpbmcgdG8gZHJvcCBpdCB3
aXRob3V0CisgICAgICAgIC8vIGRyb3BwaW5nIHRoZSByZXN0IG9mIHRoZSByYW5nZS4KKyAgICAg
ICAgZW5kT2Zmc2V0ID0gMDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBwb3NpdGlvbk1vZGUgPQor
ICAgICAgICAobGluZSA8PSBFeHByZXNzaW9uUmFuZ2VJbmZvOjpNYXhGYXRMaW5lTW9kZUxpbmUg
JiYgY29sdW1uIDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdExpbmVNb2RlQ29sdW1uKQor
ICAgICAgICA/IEV4cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVNb2RlCisgICAgICAgIDogKGxp
bmUgPD0gRXhwcmVzc2lvblJhbmdlSW5mbzo6TWF4RmF0Q29sdW1uTW9kZUxpbmUgJiYgY29sdW1u
IDw9IEV4cHJlc3Npb25SYW5nZUluZm86Ok1heEZhdENvbHVtbk1vZGVDb2x1bW4pCisgICAgICAg
ID8gRXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0Q29sdW1uTW9kZQorICAgICAgICA6IEV4cHJlc3Np
b25SYW5nZUluZm86OkZhdExpbmVBbmRDb2x1bW5Nb2RlOworCisgICAgRXhwcmVzc2lvblJhbmdl
SW5mbyBpbmZvOworICAgIGluZm8uaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpbnN0cnVjdGlvbk9mZnNl
dDsKKyAgICBpbmZvLmRpdm90UG9pbnQgPSBkaXZvdDsKKyAgICBpbmZvLnN0YXJ0T2Zmc2V0ID0g
c3RhcnRPZmZzZXQ7CisgICAgaW5mby5lbmRPZmZzZXQgPSBlbmRPZmZzZXQ7CisKKyAgICBpbmZv
Lm1vZGUgPSBwb3NpdGlvbk1vZGU7CisgICAgc3dpdGNoIChwb3NpdGlvbk1vZGUpIHsKKyAgICBj
YXNlIEV4cHJlc3Npb25SYW5nZUluZm86OkZhdExpbmVNb2RlOgorICAgICAgICBpbmZvLmVuY29k
ZUZhdExpbmVNb2RlKGxpbmUsIGNvbHVtbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhw
cmVzc2lvblJhbmdlSW5mbzo6RmF0Q29sdW1uTW9kZToKKyAgICAgICAgaW5mby5lbmNvZGVGYXRD
b2x1bW5Nb2RlKGxpbmUsIGNvbHVtbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhwcmVz
c2lvblJhbmdlSW5mbzo6RmF0TGluZUFuZENvbHVtbk1vZGU6IHsKKyAgICAgICAgdW5zaWduZWQg
ZmF0SW5kZXggPSBtX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zLnNpemUoKTsKKyAgICAgICAg
RXhwcmVzc2lvblJhbmdlSW5mbzo6RmF0UG9zaXRpb24gZmF0UG9zID0geyBsaW5lLCBjb2x1bW4g
fTsKKyAgICAgICAgbV9leHByZXNzaW9uSW5mb0ZhdFBvc2l0aW9ucy5hcHBlbmQoZmF0UG9zKTsK
KyAgICAgICAgaW5mby5wb3NpdGlvbiA9IGZhdEluZGV4OworICAgIH0KKyAgICB9IC8vIHN3aXRj
aAorCisgICAgbV9leHByZXNzaW9uSW5mby5hcHBlbmQoaW5mbyk7Cit9CisKK3ZvaWQgVW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmFkZFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKHVuc2ln
bmVkIGluc3RydWN0aW9uT2Zmc2V0LCB1bnNpZ25lZCBzdGFydERpdm90LCB1bnNpZ25lZCBlbmRE
aXZvdCkKK3sKKyAgICBVbmxpbmtlZENvZGVCbG9jazo6UmFyZURhdGE6OlR5cGVQcm9maWxlckV4
cHJlc3Npb25SYW5nZSByYW5nZTsKKyAgICByYW5nZS5tX3N0YXJ0RGl2b3QgPSBzdGFydERpdm90
OworICAgIHJhbmdlLm1fZW5kRGl2b3QgPSBlbmREaXZvdDsKKyAgICBtX3R5cGVQcm9maWxlcklu
Zm9NYXAuc2V0KGluc3RydWN0aW9uT2Zmc2V0LCByYW5nZSk7Cit9CisKK3ZvaWQgVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3I6OmZpbmFsaXplKHN0ZDo6dW5pcXVlX3B0cjxJbnN0cnVjdGlvblN0
cmVhbT4gaW5zdHJ1Y3Rpb25zKQoreworICAgIEFTU0VSVChpbnN0cnVjdGlvbnMpOworICAgIHsK
KyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2NvZGVCbG9jay0+Y2VsbExvY2soKSk7
CisgICAgICAgIG1fY29kZUJsb2NrLT5tX2luc3RydWN0aW9ucyA9IFdURk1vdmUoaW5zdHJ1Y3Rp
b25zKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fbWV0YWRhdGEtPmZpbmFsaXplKCk7CisKKyAg
ICAgICAgbV9jb2RlQmxvY2stPm1fanVtcFRhcmdldHMgPSBXVEZNb3ZlKG1fanVtcFRhcmdldHMp
OworICAgICAgICBtX2NvZGVCbG9jay0+bV9pZGVudGlmaWVycyA9IFdURk1vdmUobV9pZGVudGlm
aWVycyk7CisgICAgICAgIG1fY29kZUJsb2NrLT5tX2NvbnN0YW50UmVnaXN0ZXJzID0gV1RGTW92
ZShtX2NvbnN0YW50UmVnaXN0ZXJzKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fY29uc3RhbnRz
U291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gV1RGTW92ZShtX2NvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbik7CisgICAgICAgIG1fY29kZUJsb2NrLT5tX2Z1bmN0aW9uRGVjbHMgPSBX
VEZNb3ZlKG1fZnVuY3Rpb25EZWNscyk7CisgICAgICAgIG1fY29kZUJsb2NrLT5tX2Z1bmN0aW9u
RXhwcnMgPSBXVEZNb3ZlKG1fZnVuY3Rpb25FeHBycyk7CisgICAgICAgIG1fY29kZUJsb2NrLT5t
X2V4cHJlc3Npb25JbmZvID0gV1RGTW92ZShtX2V4cHJlc3Npb25JbmZvKTsKKyAgICAgICAgbV9j
b2RlQmxvY2stPm1fb3V0T2ZMaW5lSnVtcFRhcmdldHMgPSBXVEZNb3ZlKG1fb3V0T2ZMaW5lSnVt
cFRhcmdldHMpOworCisgICAgICAgIGlmICghbV9jb2RlQmxvY2stPm1fcmFyZURhdGEpIHsKKyAg
ICAgICAgICAgIGlmICghbV9leGNlcHRpb25IYW5kbGVycy5pc0VtcHR5KCkKKyAgICAgICAgICAg
ICAgICB8fCAhbV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgIHx8
ICFtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAgfHwg
IW1fZXhwcmVzc2lvbkluZm9GYXRQb3NpdGlvbnMuaXNFbXB0eSgpCisgICAgICAgICAgICAgICAg
fHwgIW1fdHlwZVByb2ZpbGVySW5mb01hcC5pc0VtcHR5KCkKKyAgICAgICAgICAgICAgICB8fCAh
bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5pc0VtcHR5KCkKKyAgICAgICAg
ICAgICAgICB8fCAhbV9iaXRWZWN0b3JzLmlzRW1wdHkoKQorICAgICAgICAgICAgICAgIHx8ICFt
X2NvbnN0YW50SWRlbnRpZmllclNldHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1fY29k
ZUJsb2NrLT5jcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KGxvY2tlcik7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG1fY29kZUJsb2NrLT5tX3JhcmVEYXRhKSB7CisgICAgICAgICAgICBtX2NvZGVC
bG9jay0+bV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVycyA9IFdURk1vdmUobV9leGNlcHRp
b25IYW5kbGVycyk7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9yYXJlRGF0YS0+bV9zd2l0
Y2hKdW1wVGFibGVzID0gV1RGTW92ZShtX3N3aXRjaEp1bXBUYWJsZXMpOworICAgICAgICAgICAg
bV9jb2RlQmxvY2stPm1fcmFyZURhdGEtPm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcyA9IFdURk1v
dmUobV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5t
X3JhcmVEYXRhLT5tX2V4cHJlc3Npb25JbmZvRmF0UG9zaXRpb25zID0gV1RGTW92ZShtX2V4cHJl
c3Npb25JbmZvRmF0UG9zaXRpb25zKTsKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX3JhcmVE
YXRhLT5tX3R5cGVQcm9maWxlckluZm9NYXAgPSBXVEZNb3ZlKG1fdHlwZVByb2ZpbGVySW5mb01h
cCk7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9yYXJlRGF0YS0+bV9vcFByb2ZpbGVDb250
cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cyA9IFdURk1vdmUobV9vcFByb2ZpbGVDb250cm9sRmxvd0J5
dGVjb2RlT2Zmc2V0cyk7CisgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9yYXJlRGF0YS0+bV9i
aXRWZWN0b3JzID0gV1RGTW92ZShtX2JpdFZlY3RvcnMpOworICAgICAgICAgICAgbV9jb2RlQmxv
Y2stPm1fcmFyZURhdGEtPm1fY29uc3RhbnRJZGVudGlmaWVyU2V0cyA9IFdURk1vdmUobV9jb25z
dGFudElkZW50aWZpZXJTZXRzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX3ZtLmhlYXAud3Jp
dGVCYXJyaWVyKG1fY29kZUJsb2NrLmdldCgpKTsKKyAgICBtX3ZtLmhlYXAucmVwb3J0RXh0cmFN
ZW1vcnlBbGxvY2F0ZWQobV9jb2RlQmxvY2stPm1faW5zdHJ1Y3Rpb25zLT5zaXplSW5CeXRlcygp
ICsgbV9jb2RlQmxvY2stPm1fbWV0YWRhdGEtPnNpemVJbkJ5dGVzKCkpOworfQorCitVbmxpbmtl
ZEhhbmRsZXJJbmZvKiBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6aGFuZGxlckZvckJ5dGVj
b2RlSW5kZXgoQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4LCBSZXF1aXJlZEhhbmRsZXIgcmVx
dWlyZWRIYW5kbGVyKQoreworICAgIHJldHVybiBoYW5kbGVyRm9ySW5kZXgoYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSwgcmVxdWlyZWRIYW5kbGVyKTsKK30KKworVW5saW5rZWRIYW5kbGVySW5mbyog
VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I6OmhhbmRsZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRl
eCwgUmVxdWlyZWRIYW5kbGVyIHJlcXVpcmVkSGFuZGxlcikKK3sKKyAgICByZXR1cm4gVW5saW5r
ZWRIYW5kbGVySW5mbzo6aGFuZGxlckZvckluZGV4PFVubGlua2VkSGFuZGxlckluZm8+KG1fZXhj
ZXB0aW9uSGFuZGxlcnMsIGluZGV4LCByZXF1aXJlZEhhbmRsZXIpOworfQorCit2b2lkIFVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yOjphcHBseU1vZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVy
JiByZXdyaXRlciwgSW5zdHJ1Y3Rpb25TdHJlYW1Xcml0ZXImIGluc3RydWN0aW9ucykKK3sKKyAg
ICAvLyBCZWZvcmUgYXBwbHlpbmcgdGhlIGNoYW5nZXMsIHdlIGFkanVzdCB0aGUganVtcHMgYmFz
ZWQgb24gdGhlIG9yaWdpbmFsIGJ5dGVjb2RlIG9mZnNldCwgdGhlIG9mZnNldCB0byB0aGUganVt
cCB0YXJnZXQsIGFuZAorICAgIC8vIHRoZSBpbnNlcnRpb24gaW5mb3JtYXRpb24uCisKKyAgICBy
ZXdyaXRlci5hZGp1c3RKdW1wVGFyZ2V0cygpOworCisgICAgLy8gVGhlbiwgZXhjZXB0aW9uIGhh
bmRsZXJzIHNob3VsZCBiZSBhZGp1c3RlZC4KKyAgICBmb3IgKFVubGlua2VkSGFuZGxlckluZm8m
IGhhbmRsZXIgOiBtX2V4Y2VwdGlvbkhhbmRsZXJzKSB7CisgICAgICAgIGhhbmRsZXIudGFyZ2V0
ID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQoaGFuZGxlci50YXJnZXQpOworICAgICAg
ICBoYW5kbGVyLnN0YXJ0ID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZzZXQoaGFuZGxlci5z
dGFydCk7CisgICAgICAgIGhhbmRsZXIuZW5kID0gcmV3cml0ZXIuYWRqdXN0QWJzb2x1dGVPZmZz
ZXQoaGFuZGxlci5lbmQpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9v
cFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0cy5zaXplKCk7ICsraSkKKyAgICAgICAg
bV9vcFByb2ZpbGVDb250cm9sRmxvd0J5dGVjb2RlT2Zmc2V0c1tpXSA9IHJld3JpdGVyLmFkanVz
dEFic29sdXRlT2Zmc2V0KG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHNbaV0p
OworCisgICAgaWYgKCFtX3R5cGVQcm9maWxlckluZm9NYXAuaXNFbXB0eSgpKSB7CisgICAgICAg
IEhhc2hNYXA8dW5zaWduZWQsIFVubGlua2VkQ29kZUJsb2NrOjpSYXJlRGF0YTo6VHlwZVByb2Zp
bGVyRXhwcmVzc2lvblJhbmdlPiBhZGp1c3RlZFR5cGVQcm9maWxlckluZm9NYXA7CisgICAgICAg
IGZvciAoYXV0byYgZW50cnkgOiBtX3R5cGVQcm9maWxlckluZm9NYXApCisgICAgICAgICAgICBh
ZGp1c3RlZFR5cGVQcm9maWxlckluZm9NYXAuc2V0KHJld3JpdGVyLmFkanVzdEFic29sdXRlT2Zm
c2V0KGVudHJ5LmtleSksIGVudHJ5LnZhbHVlKTsKKyAgICAgICAgbV90eXBlUHJvZmlsZXJJbmZv
TWFwLnN3YXAoYWRqdXN0ZWRUeXBlUHJvZmlsZXJJbmZvTWFwKTsKKyAgICB9CisKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZXhwcmVzc2lvbkluZm8uc2l6ZSgpOyArK2kpCisgICAgICAg
IG1fZXhwcmVzc2lvbkluZm9baV0uaW5zdHJ1Y3Rpb25PZmZzZXQgPSByZXdyaXRlci5hZGp1c3RB
YnNvbHV0ZU9mZnNldChtX2V4cHJlc3Npb25JbmZvW2ldLmluc3RydWN0aW9uT2Zmc2V0KTsKKwor
ICAgIC8vIFRoZW4sIG1vZGlmeSB0aGUgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgorICAgIHJld3Jp
dGVyLmFwcGx5TW9kaWZpY2F0aW9uKCk7CisKKyAgICAvLyBBbmQgcmVjb21wdXRlIHRoZSBqdW1w
IHRhcmdldCBiYXNlZCBvbiB0aGUgbW9kaWZpZWQgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgorICAg
IG1fanVtcFRhcmdldHMuY2xlYXIoKTsKKyAgICByZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHMo
dGhpcywgaW5zdHJ1Y3Rpb25zLCBtX2p1bXBUYXJnZXRzKTsKK30KKwordm9pZCBVbmxpbmtlZENv
ZGVCbG9ja0dlbmVyYXRvcjo6YWRkT3V0T2ZMaW5lSnVtcFRhcmdldChJbnN0cnVjdGlvblN0cmVh
bTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0LCBpbnQgdGFyZ2V0KQoreworICAgIFJFTEVBU0VfQVNT
RVJUKHRhcmdldCk7CisgICAgbV9vdXRPZkxpbmVKdW1wVGFyZ2V0cy5zZXQoYnl0ZWNvZGVPZmZz
ZXQsIHRhcmdldCk7Cit9CisKK2ludCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6b3V0T2ZM
aW5lSnVtcE9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IGJ5dGVjb2RlT2Zmc2V0KQor
eworICAgIEFTU0VSVChtX291dE9mTGluZUp1bXBUYXJnZXRzLmNvbnRhaW5zKGJ5dGVjb2RlT2Zm
c2V0KSk7CisgICAgcmV0dXJuIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMuZ2V0KGJ5dGVjb2RlT2Zm
c2V0KTsKK30KKwordm9pZCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvcjo6ZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0Cit7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kZTQyZTExMTJlMjViNGZkYTNkMDU5NTk4NmY1ZmEyYzU3ZWE1YzE4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yLmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3IpCitwdWJsaWM6CisgICAgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3IoVk0mIHZtLCBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrKQorICAgICAgICA6IG1fdm0o
dm0pCisgICAgICAgICwgbV9jb2RlQmxvY2sodm0sIGNvZGVCbG9jaykKKyAgICB7CisgICAgfQor
CisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV92bTsgfQorCisgICAgYm9vbCBpc0NvbnN0cnVjdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQ29uc3RydWN0b3IoKTsgfQorICAgIENv
bnN0cnVjdG9yS2luZCBjb25zdHJ1Y3RvcktpbmQoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
ay0+Y29uc3RydWN0b3JLaW5kKCk7IH0KKyAgICBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPnN1cGVyQmluZGluZygpOyB9CisgICAgSlNQYXJz
ZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+c2Ny
aXB0TW9kZSgpOyB9CisgICAgTmVlZHNDbGFzc0ZpZWxkSW5pdGlhbGl6ZXIgbmVlZHNDbGFzc0Zp
ZWxkSW5pdGlhbGl6ZXIoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+bmVlZHNDbGFzc0Zp
ZWxkSW5pdGlhbGl6ZXIoKTsgfQorICAgIGJvb2wgaXNTdHJpY3RNb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpOyB9CisgICAgYm9vbCB1c2VzRXZhbCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT51c2VzRXZhbCgpOyB9CisgICAgU291cmNlUGFyc2VN
b2RlIHBhcnNlTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5wYXJzZU1vZGUoKTsg
fQorICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmlzQXJy
b3dGdW5jdGlvbigpOyB9CisgICAgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5kZXJpdmVkQ29udGV4dFR5cGUoKTsgfQor
ICAgIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVCbG9jay0+ZXZhbENvbnRleHRUeXBlKCk7IH0KKyAgICBib29sIGlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uQ29udGV4
dCgpOyB9CisgICAgYm9vbCBpc0NsYXNzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZUJs
b2NrLT5pc0NsYXNzQ29udGV4dCgpOyB9CisgICAgaW50IG51bUNhbGxlZUxvY2FscygpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxvY2FsczsgfQorICAgIGludCBudW1W
YXJzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPm1fbnVtVmFyczsgfQorICAgIHVuc2ln
bmVkIG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpOyB9CisgICAgVmlydHVhbFJlZ2lzdGVyIHRoaXNSZWdpc3RlcigpIGNvbnN0IHsgcmV0
dXJuIG1fY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKTsgfQorICAgIFZpcnR1YWxSZWdpc3RlciBz
Y29wZVJlZ2lzdGVyKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPnNjb3BlUmVnaXN0ZXIo
KTsgfQorICAgIGJvb2wgd2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bjb2RlcygpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZUJsb2NrLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCk7IH0K
KyAgICBib29sIGhhc0NoZWNrcG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlQmxvY2stPmhh
c0NoZWNrcG9pbnRzKCk7IH0KKyAgICBib29sIGhhc1RhaWxDYWxscygpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZUJsb2NrLT5oYXNUYWlsQ2FsbHMoKTsgfQorCisgICAgLy8gVXBkYXRpbmcgVW5saW5r
ZWRDb2RlQmxvY2suCisgICAgdm9pZCBzZXRIYXNDaGVja3BvaW50cygpIHsgbV9jb2RlQmxvY2st
PnNldEhhc0NoZWNrcG9pbnRzKCk7IH0KKyAgICB2b2lkIHNldEhhc1RhaWxDYWxscygpIHsgbV9j
b2RlQmxvY2stPnNldEhhc1RhaWxDYWxscygpOyB9CisgICAgdm9pZCBzZXROdW1DYWxsZWVMb2Nh
bHMoaW50IG51bUNhbGxlZUxvY2FscykgeyBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVMb2NhbHMg
PSBudW1DYWxsZWVMb2NhbHM7IH0KKyAgICB2b2lkIHNldE51bVZhcnMoaW50IG51bVZhcnMpIHsg
bV9jb2RlQmxvY2stPm1fbnVtVmFycyA9IG51bVZhcnM7IH0KKyAgICB2b2lkIHNldFRoaXNSZWdp
c3RlcihWaXJ0dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fY29kZUJsb2NrLT5zZXRUaGlz
UmVnaXN0ZXIodGhpc1JlZ2lzdGVyKTsgfQorICAgIHZvaWQgc2V0U2NvcGVSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgdGhpc1JlZ2lzdGVyKSB7IG1fY29kZUJsb2NrLT5zZXRTY29wZVJlZ2lzdGVy
KHRoaXNSZWdpc3Rlcik7IH0KKyAgICB2b2lkIHNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVl
KSB7IG1fY29kZUJsb2NrLT5zZXROdW1QYXJhbWV0ZXJzKG5ld1ZhbHVlKTsgfQorCisgICAgVW5s
aW5rZWRNZXRhZGF0YVRhYmxlJiBtZXRhZGF0YSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5tZXRh
ZGF0YSgpOyB9CisgICAgdm9pZCBhZGRFeHByZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlv
bk9mZnNldCwgaW50IGRpdm90LCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVuc2ln
bmVkIGxpbmUsIHVuc2lnbmVkIGNvbHVtbik7CisgICAgdm9pZCBhZGRUeXBlUHJvZmlsZXJFeHBy
ZXNzaW9uSW5mbyh1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCwgdW5zaWduZWQgc3RhcnREaXZv
dCwgdW5zaWduZWQgZW5kRGl2b3QpOworICAgIHZvaWQgYWRkT3BQcm9maWxlQ29udHJvbEZsb3dC
eXRlY29kZU9mZnNldChJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0IG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIG1fb3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHMuYXBwZW5kKG9mZnNl
dCk7CisgICAgfQorCisgICAgc2l6ZV90IG51bWJlck9mSnVtcFRhcmdldHMoKSBjb25zdCB7IHJl
dHVybiBtX2p1bXBUYXJnZXRzLnNpemUoKTsgfQorICAgIHZvaWQgYWRkSnVtcFRhcmdldCh1bnNp
Z25lZCBqdW1wVGFyZ2V0KSB7IG1fanVtcFRhcmdldHMuYXBwZW5kKGp1bXBUYXJnZXQpOyB9Cisg
ICAgdW5zaWduZWQganVtcFRhcmdldChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fanVtcFRh
cmdldHNbaW5kZXhdOyB9CisgICAgdW5zaWduZWQgbGFzdEp1bXBUYXJnZXQoKSBjb25zdCB7IHJl
dHVybiBtX2p1bXBUYXJnZXRzLmxhc3QoKTsgfQorCisgICAgc2l6ZV90IG51bWJlck9mU3dpdGNo
SnVtcFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fc3dpdGNoSnVtcFRhYmxlcy5zaXplKCk7IH0K
KyAgICBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgYWRkU3dpdGNoSnVtcFRhYmxlKCkgeyBtX3N3
aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2VkU2ltcGxlSnVtcFRhYmxlKCkpOyByZXR1cm4g
bV9zd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFVubGlua2VkU2ltcGxlSnVtcFRhYmxl
JiBzd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5kZXgpIHsgcmV0dXJuIG1fc3dpdGNoSnVtcFRh
Ymxlc1t0YWJsZUluZGV4XTsgfQorCisgICAgc2l6ZV90IG51bWJlck9mU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5zaXplKCk7
IH0KKyAgICBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgYWRkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KCkgeyBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlKCkpOyByZXR1cm4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmxhc3QoKTsgfQorICAgIFVu
bGlua2VkU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1wVGFibGUoaW50IHRhYmxlSW5k
ZXgpIHsgcmV0dXJuIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1t0YWJsZUluZGV4XTsgfQorCisg
ICAgc2l6ZV90IG51bWJlck9mRXhjZXB0aW9uSGFuZGxlcnMoKSBjb25zdCB7IHJldHVybiBtX2V4
Y2VwdGlvbkhhbmRsZXJzLnNpemUoKTsgfQorICAgIFVubGlua2VkSGFuZGxlckluZm8mIGV4Y2Vw
dGlvbkhhbmRsZXIoaW50IGluZGV4KSB7IHJldHVybiBtX2V4Y2VwdGlvbkhhbmRsZXJzW2luZGV4
XTsgfQorICAgIHZvaWQgYWRkRXhjZXB0aW9uSGFuZGxlcihjb25zdCBVbmxpbmtlZEhhbmRsZXJJ
bmZvJiBoYW5kbGVyKSB7IG1fZXhjZXB0aW9uSGFuZGxlcnMuYXBwZW5kKGhhbmRsZXIpOyB9Cisg
ICAgVW5saW5rZWRIYW5kbGVySW5mbyogaGFuZGxlckZvckJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVJ
bmRleCwgUmVxdWlyZWRIYW5kbGVyID0gUmVxdWlyZWRIYW5kbGVyOjpBbnlIYW5kbGVyKTsKKyAg
ICBVbmxpbmtlZEhhbmRsZXJJbmZvKiBoYW5kbGVyRm9ySW5kZXgodW5zaWduZWQsIFJlcXVpcmVk
SGFuZGxlciA9IFJlcXVpcmVkSGFuZGxlcjo6QW55SGFuZGxlcik7CisKKyAgICBCaXRWZWN0b3Im
IGJpdFZlY3RvcihzaXplX3QgaSkgeyByZXR1cm4gbV9iaXRWZWN0b3JzW2ldOyB9CisgICAgdW5z
aWduZWQgYWRkQml0VmVjdG9yKEJpdFZlY3RvciYmIGJpdFZlY3RvcikKKyAgICB7CisgICAgICAg
IG1fYml0VmVjdG9ycy5hcHBlbmQoV1RGTW92ZShiaXRWZWN0b3IpKTsKKyAgICAgICAgcmV0dXJu
IG1fYml0VmVjdG9ycy5zaXplKCkgLSAxOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bWJlck9m
Q29uc3RhbnRJZGVudGlmaWVyU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRJZGVudGlm
aWVyU2V0cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8Q29uc3RhbnRJZGVudGlmaWVyU2V0
RW50cnk+JiBjb25zdGFudElkZW50aWZpZXJTZXRzKCkgeyByZXR1cm4gbV9jb25zdGFudElkZW50
aWZpZXJTZXRzOyB9CisgICAgdm9pZCBhZGRTZXRDb25zdGFudChJZGVudGlmaWVyU2V0JiBzZXQp
CisgICAgeworICAgICAgICBBU1NFUlQobV92bS5oZWFwLmlzRGVmZXJyZWQoKSk7CisgICAgICAg
IHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOworICAgICAgICBt
X2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7CisgICAg
ICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb246Ok90aGVyKTsKKyAgICAgICAgbV9jb25zdGFudElkZW50aWZpZXJTZXRz
LmFwcGVuZChDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeShzZXQsIHJlc3VsdCkpOworICAgIH0K
KworICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgY29uc3RhbnRSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZy50
b0NvbnN0YW50SW5kZXgoKV07IH0KKyAgICBjb25zdCBWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25v
d24+PiYgY29uc3RhbnRSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NvbnN0YW50UmVnaXN0ZXJzOyB9
CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldENvbnN0YW50KFZpcnR1YWxSZWdpc3RlciBy
ZWcpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRSZWdpc3RlcnNbcmVnLnRvQ29uc3RhbnRJbmRl
eCgpXS5nZXQoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24+
JiBjb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKSB7IHJldHVybiBtX2NvbnN0YW50
c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbjsgfQorCisgICAgdW5zaWduZWQgYWRkQ29uc3RhbnQo
SlNWYWx1ZSB2LCBTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gc291cmNlQ29kZVJlcHJlc2VudGF0
aW9uID0gU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpPdGhlcikKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX3ZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0g
bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMu
YXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lz
dGVycy5sYXN0KCkuc2V0V2l0aG91dFdyaXRlQmFycmllcih2KTsKKyAgICAgICAgbV9jb25zdGFu
dHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24uYXBwZW5kKHNvdXJjZUNvZGVSZXByZXNlbnRhdGlv
bik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHVuc2lnbmVkIGFkZENvbnN0
YW50KExpbmtUaW1lQ29uc3RhbnQgbGlua1RpbWVDb25zdGFudCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX3ZtLmhlYXAuaXNEZWZlcnJlZCgpKTsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0g
bV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMu
YXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lz
dGVycy5sYXN0KCkuc2V0V2l0aG91dFdyaXRlQmFycmllcihqc051bWJlcihzdGF0aWNfY2FzdDxp
bnQzMl90PihsaW5rVGltZUNvbnN0YW50KSkpOworICAgICAgICBtX2NvbnN0YW50c1NvdXJjZUNv
ZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOjpMaW5rVGlt
ZUNvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBhZGRGdW5jdGlvbkRlY2woVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIG4pCisgICAgewor
ICAgICAgICBBU1NFUlQobV92bS5oZWFwLmlzRGVmZXJyZWQoKSk7CisgICAgICAgIHVuc2lnbmVk
IHNpemUgPSBtX2Z1bmN0aW9uRGVjbHMuc2l6ZSgpOworICAgICAgICBtX2Z1bmN0aW9uRGVjbHMu
YXBwZW5kKFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4oKSk7CisgICAg
ICAgIG1fZnVuY3Rpb25EZWNscy5sYXN0KCkuc2V0V2l0aG91dFdyaXRlQmFycmllcihuKTsKKyAg
ICAgICAgcmV0dXJuIHNpemU7CisgICAgfQorCisgICAgdW5zaWduZWQgYWRkRnVuY3Rpb25FeHBy
KFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBuKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
c2l6ZSA9IG1fZnVuY3Rpb25FeHBycy5zaXplKCk7CisgICAgICAgIG1fZnVuY3Rpb25FeHBycy5h
cHBlbmQoV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPigpKTsKKyAgICAg
ICAgbV9mdW5jdGlvbkV4cHJzLmxhc3QoKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKG4pOworICAg
ICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisKKyAgICBzaXplX3QgbnVtYmVyT2ZJZGVudGlmaWVy
cygpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcnMuc2l6ZSgpOyB9CisgICAgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllcihpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRpZmll
cnNbaW5kZXhdOyB9CisgICAgdm9pZCBhZGRJZGVudGlmaWVyKGNvbnN0IElkZW50aWZpZXImIGkp
IHsgcmV0dXJuIG1faWRlbnRpZmllcnMuYXBwZW5kKGkpOyB9CisKKyAgICB1c2luZyBPdXRPZkxp
bmVKdW1wVGFyZ2V0cyA9IEhhc2hNYXA8SW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNldCwgaW50PjsK
KyAgICB2b2lkIGFkZE91dE9mTGluZUp1bXBUYXJnZXQoSW5zdHJ1Y3Rpb25TdHJlYW06Ok9mZnNl
dCwgaW50IHRhcmdldCk7CisgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoSW5zdHJ1Y3Rpb25T
dHJlYW06Ok9mZnNldCk7CisgICAgaW50IG91dE9mTGluZUp1bXBPZmZzZXQoY29uc3QgSW5zdHJ1
Y3Rpb25TdHJlYW06OlJlZiYgaW5zdHJ1Y3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gb3V0
T2ZMaW5lSnVtcE9mZnNldChpbnN0cnVjdGlvbi5vZmZzZXQoKSk7CisgICAgfQorICAgIE91dE9m
TGluZUp1bXBUYXJnZXRzIHJlcGxhY2VPdXRPZkxpbmVKdW1wVGFyZ2V0cygpCisgICAgeworICAg
ICAgICBPdXRPZkxpbmVKdW1wVGFyZ2V0cyBuZXdKdW1wVGFyZ2V0czsKKyAgICAgICAgc3RkOjpz
d2FwKG1fb3V0T2ZMaW5lSnVtcFRhcmdldHMsIG5ld0p1bXBUYXJnZXRzKTsKKyAgICAgICAgcmV0
dXJuIG5ld0p1bXBUYXJnZXRzOworICAgIH0KKworICAgIHNpemVfdCBtZXRhZGF0YVNpemVJbkJ5
dGVzKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPm1ldGFkYXRhU2l6ZUluQnl0ZXMoKTsgfQorCisg
ICAgdm9pZCBnZXRMaW5lQW5kQ29sdW1uKGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mLCB1bnNp
Z25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7CisKKyAgICB2b2lkIGFwcGx5TW9k
aWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImLCBJbnN0cnVjdGlvblN0cmVhbVdyaXRlciYpOwor
CisgICAgdm9pZCBmaW5hbGl6ZShzdGQ6OnVuaXF1ZV9wdHI8SW5zdHJ1Y3Rpb25TdHJlYW0+KTsK
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIFZN
JiBtX3ZtOworICAgIFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CisgICAg
Ly8gSW4gbm9uLVJhcmVEYXRhLgorICAgIFZlY3RvcjxJbnN0cnVjdGlvblN0cmVhbTo6T2Zmc2V0
PiBtX2p1bXBUYXJnZXRzOworICAgIFZlY3RvcjxJZGVudGlmaWVyPiBtX2lkZW50aWZpZXJzOwor
ICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4+IG1fY29uc3RhbnRSZWdpc3RlcnM7Cisg
ICAgVmVjdG9yPFNvdXJjZUNvZGVSZXByZXNlbnRhdGlvbj4gbV9jb25zdGFudHNTb3VyY2VDb2Rl
UmVwcmVzZW50YXRpb247CisgICAgVmVjdG9yPFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZT4+IG1fZnVuY3Rpb25EZWNsczsKKyAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPj4gbV9mdW5jdGlvbkV4cHJzOworICAgIFZlY3RvcjxF
eHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOworICAgIE91dE9mTGluZUp1bXBU
YXJnZXRzIG1fb3V0T2ZMaW5lSnVtcFRhcmdldHM7CisgICAgLy8gSW4gUmFyZURhdGEuCisgICAg
VmVjdG9yPFVubGlua2VkSGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CisgICAgVmVj
dG9yPFVubGlua2VkU2ltcGxlSnVtcFRhYmxlPiBtX3N3aXRjaEp1bXBUYWJsZXM7CisgICAgVmVj
dG9yPFVubGlua2VkU3RyaW5nSnVtcFRhYmxlPiBtX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXM7Cisg
ICAgVmVjdG9yPEV4cHJlc3Npb25SYW5nZUluZm86OkZhdFBvc2l0aW9uPiBtX2V4cHJlc3Npb25J
bmZvRmF0UG9zaXRpb25zOworICAgIEhhc2hNYXA8dW5zaWduZWQsIFVubGlua2VkQ29kZUJsb2Nr
OjpSYXJlRGF0YTo6VHlwZVByb2ZpbGVyRXhwcmVzc2lvblJhbmdlPiBtX3R5cGVQcm9maWxlcklu
Zm9NYXA7CisgICAgVmVjdG9yPEluc3RydWN0aW9uU3RyZWFtOjpPZmZzZXQ+IG1fb3BQcm9maWxl
Q29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CisgICAgVmVjdG9yPEJpdFZlY3Rvcj4gbV9iaXRW
ZWN0b3JzOworICAgIFZlY3RvcjxDb25zdGFudElkZW50aWZpZXJTZXRFbnRyeT4gbV9jb25zdGFu
dElkZW50aWZpZXJTZXRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CmluZGV4IGUzMjIyMDVkZWU3OTU0MWNjNTA1ZWYwMzZmZmI5YTkzMTM0MjJkZmYuLjVhNzk5NmZk
MGRiNmY3MDk1YTI2NGVjNTY1MGFhZWU5MTVjOGU3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0y
ODgsMTcgKzI4OCwxNCBAQCBQYXJzZXJFcnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUo
KQogICAgICAgICBwZXJmb3JtR2VuZXJhdG9yaWZpY2F0aW9uKCp0aGlzLCBtX2NvZGVCbG9jay5n
ZXQoKSwgbV93cml0ZXIsIG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZS5nZXQoKSwgbV9nZW5l
cmF0b3JGcmFtZVN5bWJvbFRhYmxlSW5kZXgpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKSkgPCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpKTsKLSAgICBtX2NvZGVC
bG9jay0+c2V0SW5zdHJ1Y3Rpb25zKG1fd3JpdGVyLmZpbmFsaXplKCkpOwotCi0gICAgbV9jb2Rl
QmxvY2stPnNocmlua1RvRml0KCk7Ci0KKyAgICBtX2NvZGVCbG9jay0+ZmluYWxpemUobV93cml0
ZXIuZmluYWxpemUoKSk7CiAgICAgaWYgKG1fZXhwcmVzc2lvblRvb0RlZXApCiAgICAgICAgIHJl
dHVybiBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6T3V0T2ZNZW1vcnkpOwogICAgIHJldHVybiBQ
YXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6RXJyb3JOb25lKTsKIH0KIAogQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaywgT3B0aW9uU2V0PENvZGVHZW5lcmF0
aW9uTW9kZT4gY29kZUdlbmVyYXRpb25Nb2RlLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiBw
YXJlbnRTY29wZVREWlZhcmlhYmxlcykKLSAgICA6IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZShTdHJv
bmc8VW5saW5rZWRDb2RlQmxvY2s+KHZtLCBjb2RlQmxvY2spLCBDb2RlQmxvY2s6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkKKyAgICA6IEJ5dGVjb2Rl
R2VuZXJhdG9yQmFzZShtYWtlVW5pcXVlPFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yPih2bSwg
Y29kZUJsb2NrKSwgQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJhdGlv
bk1vZGUpCiAgICAgLCBtX3Njb3BlTm9kZShwcm9ncmFtTm9kZSkKICAgICAsIG1fdGhpc1JlZ2lz
dGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpCkBAIC0zMzksNyArMzM2LDcgQEAg
Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJiB2bSwgUHJvZ3JhbU5vZGUq
IHByb2dyYW1Ob2RlLCBVbmxpbmtlZFAKIH0KIAogQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2Rl
R2VuZXJhdG9yKFZNJiB2bSwgRnVuY3Rpb25Ob2RlKiBmdW5jdGlvbk5vZGUsIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgT3B0aW9uU2V0PENvZGVHZW5lcmF0aW9uTW9kZT4g
Y29kZUdlbmVyYXRpb25Nb2RlLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiBwYXJlbnRTY29w
ZVREWlZhcmlhYmxlcykKLSAgICA6IEJ5dGVjb2RlR2VuZXJhdG9yQmFzZShTdHJvbmc8VW5saW5r
ZWRDb2RlQmxvY2s+KHZtLCBjb2RlQmxvY2spLCBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxs
ZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkKKyAgICA6IEJ5dGVjb2RlR2VuZXJhdG9y
QmFzZShtYWtlVW5pcXVlPFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yPih2bSwgY29kZUJsb2Nr
KSwgQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKCkpCiAgICAgLCBtX2NvZGVHZW5lcmF0aW9uTW9kZShjb2RlR2VuZXJhdGlvbk1vZGUpCiAg
ICAgLCBtX3Njb3BlTm9kZShmdW5jdGlvbk5vZGUpCiAgICAgLCBtX2NvZGVUeXBlKEZ1bmN0aW9u
Q29kZSkKQEAgLTgzMCw3ICs4MjcsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoVk0mIHZtLCBGdW5jdGlvbk5vZGUqIGZ1bmN0aW9uTm9kZSwgVW5saW5rZQogfQogCiBC
eXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBFdmFsTm9kZSogZXZh
bE5vZGUsIFVubGlua2VkRXZhbENvZGVCbG9jayogY29kZUJsb2NrLCBPcHRpb25TZXQ8Q29kZUdl
bmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1l
bnQqIHBhcmVudFNjb3BlVERaVmFyaWFibGVzKQotICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JCYXNl
KFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4odm0sIGNvZGVCbG9jayksIENvZGVCbG9jazo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKQorICAgIDogQnl0
ZWNvZGVHZW5lcmF0b3JCYXNlKG1ha2VVbmlxdWU8VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3I+
KHZtLCBjb2RlQmxvY2spLCBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VB
c1ZpcnR1YWxSZWdpc3RlcnMoKSkKICAgICAsIG1fY29kZUdlbmVyYXRpb25Nb2RlKGNvZGVHZW5l
cmF0aW9uTW9kZSkKICAgICAsIG1fc2NvcGVOb2RlKGV2YWxOb2RlKQogICAgICwgbV90aGlzUmVn
aXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkKQEAgLTg4OCw3ICs4ODUsNyBA
QCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mIHZtLCBFdmFsTm9kZSog
ZXZhbE5vZGUsIFVubGlua2VkRXZhbENvZAogfQogCiBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoVk0mIHZtLCBNb2R1bGVQcm9ncmFtTm9kZSogbW9kdWxlUHJvZ3JhbU5vZGUs
IFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrLCBPcHRpb25TZXQ8Q29k
ZUdlbmVyYXRpb25Nb2RlPiBjb2RlR2VuZXJhdGlvbk1vZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJv
bm1lbnQqIHBhcmVudFNjb3BlVERaVmFyaWFibGVzKQotICAgIDogQnl0ZWNvZGVHZW5lcmF0b3JC
YXNlKFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4odm0sIGNvZGVCbG9jayksIENvZGVCbG9jazo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKQorICAgIDog
Qnl0ZWNvZGVHZW5lcmF0b3JCYXNlKG1ha2VVbmlxdWU8VW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3I+KHZtLCBjb2RlQmxvY2spLCBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3Bh
Y2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkKICAgICAsIG1fY29kZUdlbmVyYXRpb25Nb2RlKGNvZGVH
ZW5lcmF0aW9uTW9kZSkKICAgICAsIG1fc2NvcGVOb2RlKG1vZHVsZVByb2dyYW1Ob2RlKQogICAg
ICwgbV90aGlzUmVnaXN0ZXIoQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkKQEAgLTEx
OTAsNyArMTE4Nyw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjppbml0aWFsaXpl
TmV4dFBhcmFtZXRlcigpCiAgICAgbV9wYXJhbWV0ZXJzLmdyb3cobV9wYXJhbWV0ZXJzLnNpemUo
KSArIDEpOwogICAgIGF1dG8mIHBhcmFtZXRlciA9IHJlZ2lzdGVyRm9yKHJlZyk7CiAgICAgcGFy
YW1ldGVyLnNldEluZGV4KHJlZyk7Ci0gICAgbV9jb2RlQmxvY2stPmFkZFBhcmFtZXRlcigpOwor
ICAgIG1fY29kZUJsb2NrLT5zZXROdW1QYXJhbWV0ZXJzKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkgKyAxKTsKICAgICByZXR1cm4gJnBhcmFtZXRlcjsKIH0KIApAQCAtMzc4MSw5ICszNzc4
LDkgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZShj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmUKICAgICBpZiAoaXNDYXB0dXJlZCkKICAgICAg
ICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXRJc0NhcHR1cmVkKCk7CiAgICAgYWRkUmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5zZXRJc0NvbnN0KCk7IC8vIFRoZSBmdW5jdGlvbiBuYW1lIHNj
b3BlIG5hbWUgYWN0cyBsaWtlIGEgY29uc3QgdmFyaWFibGUuCi0gICAgdW5zaWduZWQgbnVtVmFy
cyA9IG1fY29kZUJsb2NrLT5tX251bVZhcnM7CisgICAgdW5zaWduZWQgbnVtVmFycyA9IG1fY29k
ZUJsb2NrLT5udW1WYXJzKCk7CiAgICAgcHVzaExleGljYWxTY29wZUludGVybmFsKG5hbWVTY29w
ZUVudmlyb25tZW50LCBURFpDaGVja09wdGltaXphdGlvbjo6T3B0aW1pemUsIE5lc3RlZFNjb3Bl
VHlwZTo6SXNOb3ROZXN0ZWQsIG51bGxwdHIsIFREWlJlcXVpcmVtZW50OjpOb3RVbmRlclREWiwg
U2NvcGVUeXBlOjpGdW5jdGlvbk5hbWVTY29wZSwgU2NvcGVSZWdpc3RlclR5cGU6OlZhcik7Ci0g
ICAgQVNTRVJUX1VOVVNFRChudW1WYXJzLCBtX2NvZGVCbG9jay0+bV9udW1WYXJzID09IHN0YXRp
Y19jYXN0PGludD4obnVtVmFycyArIDEpKTsgLy8gU2hvdWxkIGhhdmUgb25seSBjcmVhdGVkIG9u
ZSBuZXcgInZhciIgZm9yIHRoZSBmdW5jdGlvbiBuYW1lIHNjb3BlLgorICAgIEFTU0VSVF9VTlVT
RUQobnVtVmFycywgbV9jb2RlQmxvY2stPm51bVZhcnMoKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KG51
bVZhcnMgKyAxKSk7IC8vIFNob3VsZCBoYXZlIG9ubHkgY3JlYXRlZCBvbmUgbmV3ICJ2YXIiIGZv
ciB0aGUgZnVuY3Rpb24gbmFtZSBzY29wZS4KICAgICBib29sIHNob3VsZFRyZWF0QXNMZXhpY2Fs
VmFyaWFibGUgPSBpc1N0cmljdE1vZGUoKTsKICAgICBWYXJpYWJsZSBmdW5jdGlvblZhciA9IHZh
cmlhYmxlRm9yTG9jYWxFbnRyeShwcm9wZXJ0eSwgbV9sZXhpY2FsU2NvcGVTdGFjay5sYXN0KCku
bV9zeW1ib2xUYWJsZS0+Z2V0KE5vTG9ja2luZ05lY2Vzc2FyeSwgcHJvcGVydHkuaW1wbCgpKSwg
bV9sZXhpY2FsU2NvcGVTdGFjay5sYXN0KCkubV9zeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsIHNo
b3VsZFRyZWF0QXNMZXhpY2FsVmFyaWFibGUpOwogICAgIGVtaXRQdXRUb1Njb3BlKG1fbGV4aWNh
bFNjb3BlU3RhY2subGFzdCgpLm1fc2NvcGUsIGZ1bmN0aW9uVmFyLCBjYWxsZWUsIFRocm93SWZO
b3RGb3VuZCwgSW5pdGlhbGl6YXRpb25Nb2RlOjpOb3RJbml0aWFsaXphdGlvbik7CkBAIC0zODc0
LDggKzM4NzEsOCBAQCBzdGF0aWMgdm9pZCBwcmVwYXJlSnVtcFRhYmxlRm9yU3dpdGNoKAogICAg
IGludDMyX3QgKCprZXlHZXR0ZXIpKEV4cHJlc3Npb25Ob2RlKiwgaW50MzJfdCBtaW4sIGludDMy
X3QgbWF4KSkKIHsKICAgICBqdW1wVGFibGUubWluID0gbWluOwotICAgIGp1bXBUYWJsZS5icmFu
Y2hPZmZzZXRzLnJlc2l6ZShtYXggLSBtaW4gKyAxKTsKLSAgICBqdW1wVGFibGUuYnJhbmNoT2Zm
c2V0cy5maWxsKDApOworICAgIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRzID0gUmVmQ291bnRlZEFy
cmF5PGludDMyX3Q+KG1heCAtIG1pbiArIDEpOworICAgIHN0ZDo6ZmlsbChqdW1wVGFibGUuYnJh
bmNoT2Zmc2V0cy5iZWdpbigpLCBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cy5lbmQoKSwgMCk7CiAg
ICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNsYXVzZUNvdW50OyArK2kpIHsKICAgICAgICAg
Ly8gV2UncmUgZW1pdHRpbmcgdGhpcyBhZnRlciB0aGUgY2xhdXNlIGxhYmVscyBzaG91bGQgaGF2
ZSBiZWVuIGZpeGVkLCBzbyAKICAgICAgICAgLy8gdGhlIGxhYmVscyBzaG91bGQgbm90IGJlICJm
b3J3YXJkIiByZWZlcmVuY2VzCkBAIC00OTQ4LDcgKzQ5NDUsNyBAQCB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpCiAgICAgZW1pdEp1bXBJ
ZlRydWUoZW1pdElzVW5kZWZpbmVkT3JOdWxsKG5ld1RlbXBvcmFyeSgpLCBzcmMpLCBtX29wdGlv
bmFsQ2hhaW5UYXJnZXRTdGFjay5sYXN0KCkuZ2V0KCkpOwogfQogCi12b2lkIEZvckluQ29udGV4
dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQordm9pZCBGb3JJ
bkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9m
ZnNldCkKIHsKICAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4dHMgaXMg
a2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKICAgICAvLyBlaXRoZXIg
b2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6CkBAIC00OTczLDcgKzQ5NzAsNyBA
QCB2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgVW5saW5rZWRDb2RlQmxvY2sqIGNvZAogICAgIH0KIH0KIAotdm9pZCBTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2Vk
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKK3Zv
aWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25lZCBi
b2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCiB7CiAgICAgQmFzZTo6ZmluYWxpemUoZ2VuZXJhdG9yLCBj
b2RlQmxvY2ssIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7CiAgICAgaWYgKGlzVmFsaWQoKSkKQEAg
LTUwMTIsNyArNTAwOSw3IEBAIHZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShC
eXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCCiAgICAgfQogfQogCi12
b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29k
ZUVuZE9mZnNldCkKK3ZvaWQgSW5kZXhlZEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9j
aywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewogICAgIEJhc2U6OmZpbmFsaXpl
KGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAgIGlmIChp
c1ZhbGlkKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggMTQ4YWViNjM2NThkMjc3MzZkN2ZiYjFmZTE4NTYw
Mjc1YjZjYzQ5NS4uYThiOTQzY2YwYzAyODBmNWMxMTRkMmRlOWQ4ZmQ5MzJjMmE0NTg4NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaApAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIlN0YXRpY1Byb3BlcnR5QW5h
bHl6ZXIuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IuaCIKICNpbmNs
dWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CkBAIC0yMjQsNyArMjI1LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OyB9CiAKLSAgICAgICAgdm9pZCBm
aW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2NrKiwgdW5zaWduZWQg
Ym9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKKyAgICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdl
bmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVj
b2RlRW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBtX2xvY2FsUmVnaXN0ZXI7CkBAIC0yNTUsNyArMjU2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBtX2dldEluc3RzLmFwcGVuZChHZXRJbnN0IHsgaW5zdEluZGV4LCBwcm9wZXJ0
eVJlZ0luZGV4IH0pOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29k
ZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2NrKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KTsKKyAgICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlu
a2VkQ29kZUJsb2NrR2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0
ZXI7CkBAIC0yNzUsNyArMjc2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgUmVnaXN0
ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KIAot
ICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOworICAgICAgICB2b2lkIGZpbmFs
aXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNp
Z25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAgICAgICB2b2lkIGFkZEdldEluc3QodW5z
aWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldEluc3RzLmFwcGVuZCh7
IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQogCiAgICAgcHJpdmF0ZToKQEAgLTM2OCw3
ICszNjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcgT3Bjb2RlVHJhaXRzID0g
SlNPcGNvZGVUcmFpdHM7CiAgICAgICAgIHVzaW5nIE9wY29kZUlEID0gOjpKU0M6Ok9wY29kZUlE
OwogICAgICAgICB1c2luZyBPcE5vcCA9IDo6SlNDOjpPcE5vcDsKLSAgICAgICAgdXNpbmcgQ29k
ZUJsb2NrID0gU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPjsKKyAgICAgICAgdXNpbmcgQ29kZUJs
b2NrID0gc3RkOjp1bmlxdWVfcHRyPFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yPjsKICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciBPcGNvZGVJRCBvcGNvZGVGb3JEaXNhYmxpbmdPcHRpbWl6YXRp
b25zID0gb3BfZW5kOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3JCYXNlSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvckJhc2VJbmxpbmVzLmgK
aW5kZXggZTIzMDcxN2RjMmRmODBiNmVhNTgyMzM2ZDAxNDdjNTU1M2Y0Nzg0Mi4uMWJkOTI0ZmNi
MDAxODc4NGE2Zjg1OGJlZjFiYjNlZmU2YzhmYjAwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvckJhc2VJbmxpbmVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvckJh
c2VJbmxpbmVzLmgKQEAgLTE2MSw5ICsxNjEsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHM+
CiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvckJhc2U8VHJhaXRzPjo6bmV3UmVnaXN0ZXIo
KQogewogICAgIG1fY2FsbGVlTG9jYWxzLmFwcGVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCht
X2NhbGxlZUxvY2Fscy5zaXplKCkpKTsKLSAgICBpbnQgbnVtQ2FsbGVlTG9jYWxzID0gc3RkOjpt
YXg8aW50PihtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVMb2NhbHMsIG1fY2FsbGVlTG9jYWxzLnNp
emUoKSk7CisgICAgaW50IG51bUNhbGxlZUxvY2FscyA9IHN0ZDo6bWF4PGludD4obV9jb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpLCBtX2NhbGxlZUxvY2Fscy5zaXplKCkpOwogICAgIG51bUNh
bGxlZUxvY2FscyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lz
dGVycygpLCBudW1DYWxsZWVMb2NhbHMpOwotICAgIG1fY29kZUJsb2NrLT5tX251bUNhbGxlZUxv
Y2FscyA9IG51bUNhbGxlZUxvY2FsczsKKyAgICBtX2NvZGVCbG9jay0+c2V0TnVtQ2FsbGVlTG9j
YWxzKG51bUNhbGxlZUxvY2Fscyk7CiAgICAgcmV0dXJuICZtX2NhbGxlZUxvY2Fscy5sYXN0KCk7
CiB9CiAKQEAgLTE4MSw5ICsxODEsMTAgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3JC
YXNlPFRyYWl0cz46Om5ld1RlbXBvcmFyeSgpCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHM+CiBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvckJhc2U8VHJhaXRzPjo6YWRkVmFyKCkKIHsKLSAg
ICArK21fY29kZUJsb2NrLT5tX251bVZhcnM7CisgICAgaW50IG51bVZhcnMgPSBtX2NvZGVCbG9j
ay0+bnVtVmFycygpOworICAgIG1fY29kZUJsb2NrLT5zZXROdW1WYXJzKG51bVZhcnMgKyAxKTsK
ICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBuZXdSZWdpc3RlcigpOwotICAgIEFTU0VSVChWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0LT5pbmRleCgpKS50b0xvY2FsKCkgPT0gbV9jb2RlQmxvY2stPm1f
bnVtVmFycyAtIDEpOworICAgIEFTU0VSVChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LT5pbmRleCgp
KS50b0xvY2FsKCkgPT0gbnVtVmFycyk7CiAgICAgcmVzdWx0LT5yZWYoKTsgLy8gV2Ugc2hvdWxk
IG5ldmVyIGZyZWUgdGhpcyBzbG90LgogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DYWNoZWRUeXBlcy5jcHAKaW5kZXggMjc0NTEyMjQwMjQz
N2VjMzU0ODlhYTI0OWRlM2FiYjI2YTEyMWE5OS4uYmI1ZTg1MmI0MWM1NDcwYzFlZTdjNWE4Nzhh
YzNhM2UzZWQxYTRmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q2FjaGVkVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NhY2hl
ZFR5cGVzLmNwcApAQCAtNjExLDYgKzYxMSwxNiBAQCBjbGFzcyBDYWNoZWRWZWN0b3IgOiBwdWJs
aWMgVmFyaWFibGVMZW5ndGhPYmplY3Q8VmVjdG9yPFNvdXJjZVR5cGU8VD4sIElubGluZUNhcAog
ICAgICAgICAgICAgOjpKU0M6OmVuY29kZShlbmNvZGVyLCBidWZmZXJbaV0sIHZlY3RvcltpXSk7
CiAgICAgfQogCisgICAgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgUmVmQ291
bnRlZEFycmF5PFNvdXJjZVR5cGU8VD4+JiB2ZWN0b3IpCisgICAgeworICAgICAgICBtX3NpemUg
PSB2ZWN0b3Iuc2l6ZSgpOworICAgICAgICBpZiAoIW1fc2l6ZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgVCogYnVmZmVyID0gdGhpcy0+dGVtcGxhdGUgYWxsb2NhdGU8VD4oZW5jb2Rl
ciwgbV9zaXplKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgKytp
KQorICAgICAgICAgICAgOjpKU0M6OmVuY29kZShlbmNvZGVyLCBidWZmZXJbaV0sIHZlY3Rvcltp
XSk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KICAgICB2b2lkIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBWZWN0b3I8U291cmNlVHlwZTxUPiwgSW5saW5lQ2FwYWNp
dHksIE92ZXJmbG93SGFuZGxlciwgMTYsIE1hbGxvYz4mIHZlY3RvciwgQXJncy4uLiBhcmdzKSBj
b25zdAogICAgIHsKQEAgLTYyMiw2ICs2MzIsMTggQEAgY2xhc3MgQ2FjaGVkVmVjdG9yIDogcHVi
bGljIFZhcmlhYmxlTGVuZ3RoT2JqZWN0PFZlY3RvcjxTb3VyY2VUeXBlPFQ+LCBJbmxpbmVDYXAK
ICAgICAgICAgICAgIDo6SlNDOjpkZWNvZGUoZGVjb2RlciwgYnVmZmVyW2ldLCB2ZWN0b3JbaV0s
IGFyZ3MuLi4pOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAg
dm9pZCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgUmVmQ291bnRlZEFycmF5PFNvdXJjZVR5cGU8
VD4+JiB2ZWN0b3IsIEFyZ3MuLi4gYXJncykgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9z
aXplKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2ZWN0b3IgPSBSZWZDb3VudGVkQXJy
YXk8U291cmNlVHlwZTxUPj4obV9zaXplKTsKKyAgICAgICAgY29uc3QgVCogYnVmZmVyID0gdGhp
cy0+dGVtcGxhdGUgYnVmZmVyPFQ+KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3NpemU7ICsraSkKKyAgICAgICAgICAgIDo6SlNDOjpkZWNvZGUoZGVjb2RlciwgYnVmZmVy
W2ldLCB2ZWN0b3JbaV0sIGFyZ3MuLi4pOworICAgIH0KKworCiBwcml2YXRlOgogICAgIHVuc2ln
bmVkIG1fc2l6ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRnVuY3Rpb25Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
dW5jdGlvbkNvZGVCbG9jay5oCmluZGV4IDJmNGIxYzdkZTZhODdjNzQxMWU4NmU4N2U3ZjE5MjQ3
MzUyYzBmOGIuLjdmMTVlNjE3NGQwZDBkZGE1ZDYyOTM4YTBmOGQ3ZWE5ZjNkMzgzYjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvbkNvZGVCbG9jay5o
CkBAIC03Miw2ICs3Miw5IEBAIGNsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrIHsKICAgICBjb25zdCBW
ZWN0b3I8dWludDY0X3Q+JiBjb25zdGFudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50czsg
fQogICAgIGNvbnN0IEluc3RydWN0aW9uU3RyZWFtJiBpbnN0cnVjdGlvbnMoKSBjb25zdCB7IHJl
dHVybiAqbV9pbnN0cnVjdGlvbnM7IH0KIAorICAgIHZvaWQgc2V0TnVtVmFycyhpbnQgbnVtVmFy
cykgeyBtX251bVZhcnMgPSBudW1WYXJzOyB9CisgICAgdm9pZCBzZXROdW1DYWxsZWVMb2NhbHMo
aW50IG51bUNhbGxlZUxvY2FscykgeyBtX251bUNhbGxlZUxvY2FscyA9IG51bUNhbGxlZUxvY2Fs
czsgfQorCiAgICAgQUxXQVlTX0lOTElORSB1aW50NjRfdCBnZXRDb25zdGFudChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdCB7IHJldHVybiBtX2NvbnN0YW50c1tyZWcudG9Db25zdGFudEluZGV4
KCldOyB9CiAgICAgQUxXQVlTX0lOTElORSBUeXBlIGdldENvbnN0YW50VHlwZShWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1JlZkNv
dW50ZWRBcnJheS5oIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgKaW5kZXggZDA3
NjVkYzA2YWEyOTU0MmVkMWMzNjViYmM4OGNhN2Q1MzBhYzU4NS4uOGVlMmI1NTRiZTE5Yjg2YmNm
Nzg1MTgxYzFlNjM0YmUyZGNhOTlkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUmVmQ291
bnRlZEFycmF5LmgKKysrIGIvU291cmNlL1dURi93dGYvUmVmQ291bnRlZEFycmF5LmgKQEAgLTEx
NSw2ICsxMTUsMzAgQEAgY2xhc3MgUmVmQ291bnRlZEFycmF5IHsKICAgICAgICAgcmV0dXJuIGFz
c2lnbjxQdHJUcmFpdHM+KG90aGVyKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTxzaXplX3QgaW5s
aW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KKyAgICBSZWZDb3VudGVkQXJy
YXkmIG9wZXJhdG9yPShjb25zdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFu
ZGxlcj4mIG90aGVyKQorICAgIHsKKyAgICAgICAgVCogb2xkRGF0YSA9IGRhdGEoKTsKKyAgICAg
ICAgaWYgKG90aGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIFB0clRyYWl0czo6ZXhjaGFuZ2Uo
bV9kYXRhLCBudWxscHRyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBUKiBkYXRhID0g
KHN0YXRpY19jYXN0PEhlYWRlcio+KFJlZkNvdW50ZWRBcnJheU1hbGxvYzo6bWFsbG9jKEhlYWRl
cjo6c2l6ZSgpICsgc2l6ZW9mKFQpICogb3RoZXIuc2l6ZSgpKSkpLT5wYXlsb2FkKCk7CisgICAg
ICAgICAgICBtX2RhdGEgPSBkYXRhOworICAgICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChk
YXRhKS0+cmVmQ291bnQgPSAxOworICAgICAgICAgICAgSGVhZGVyOjpmcm9tUGF5bG9hZChkYXRh
KS0+bGVuZ3RoID0gb3RoZXIuc2l6ZSgpOworICAgICAgICAgICAgQVNTRVJUKEhlYWRlcjo6ZnJv
bVBheWxvYWQoZGF0YSktPmxlbmd0aCA9PSBvdGhlci5zaXplKCkpOworICAgICAgICAgICAgVmVj
dG9yVHlwZU9wZXJhdGlvbnM8VD46OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90
aGVyLmVuZCgpLCBkYXRhKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW9sZERhdGEpCisgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIGlmICgtLUhlYWRlcjo6ZnJvbVBheWxvYWQo
b2xkRGF0YSktPnJlZkNvdW50KQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICBW
ZWN0b3JUeXBlT3BlcmF0aW9uczxUPjo6ZGVzdHJ1Y3Qob2xkRGF0YSwgb2xkRGF0YSArIEhlYWRl
cjo6ZnJvbVBheWxvYWQob2xkRGF0YSktPmxlbmd0aCk7CisKKyAgICAgICAgUmVmQ291bnRlZEFy
cmF5TWFsbG9jOjpmcmVlKEhlYWRlcjo6ZnJvbVBheWxvYWQob2xkRGF0YSkpOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCiAgICAgflJlZkNvdW50ZWRBcnJheSgpCiAgICAgewogICAg
ICAgICBpZiAoIW1fZGF0YSkKQEAgLTEzOSw2ICsxNjMsOCBAQCBjbGFzcyBSZWZDb3VudGVkQXJy
YXkgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBIZWFkZXI6OmZyb21Q
YXlsb2FkKGRhdGEoKSktPmxlbmd0aDsKICAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCB7IHJldHVybiBzaXplKCkgPT0gMDsgfQogICAgIAogICAgIHNpemVfdCBieXRlU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHNpemUoKSAqIHNpemVvZihUKTsgfQogICAgIApAQCAtMTcxLDYgKzE5Nywx
MSBAQCBjbGFzcyBSZWZDb3VudGVkQXJyYXkgewogICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGkp
IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29u
c3QgeyByZXR1cm4gYXQoaSk7IH0KIAorICAgIFQmIGZyb250KCkgeyByZXR1cm4gKCp0aGlzKVsw
XTsgfQorICAgIGNvbnN0IFQmIGZyb250KCkgY29uc3QgeyByZXR1cm4gKCp0aGlzKVswXTsgfQor
ICAgIFQmIGxhc3QoKSB7IHJldHVybiAoKnRoaXMpW3NpemUoKSAtIDFdOyB9CisgICAgY29uc3Qg
VCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuICgqdGhpcylbc2l6ZSgpIC0gMV07IH0KKwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE90aGVyVHJhaXRzID0gUHRyVHJhaXRzPgogICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBSZWZDb3VudGVkQXJyYXk8VCwgT3RoZXJUcmFpdHM+JiBvdGhlcikgY29uc3QK
ICAgICB7Cg==
</data>
<flag name="review"
          id="405293"
          type_id="1"
          status="+"
          setter="tzagallo"
    />
          </attachment>
      

    </bug>

</bugzilla>