<?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>93574</bug_id>
          
          <creation_ts>2012-08-08 21:04:10 -0700</creation_ts>
          <short_desc>Convert CSSParser&apos;s m_reusableSelectorVector to OwnPtr and rename to m_selectorVector.</short_desc>
          <delta_ts>2012-10-02 17:43:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>79939</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Shane Stephens">shanestephens</reporter>
          <assigned_to name="Shane Stephens">shanestephens</assigned_to>
          <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>691163</commentid>
    <comment_count>0</comment_count>
    <who name="Shane Stephens">shanestephens</who>
    <bug_when>2012-08-08 21:04:10 -0700</bug_when>
    <thetext>Convert CSSParser::m_reusableSelectorVector to OwnPtr and rename to m_selectorVector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691173</commentid>
    <comment_count>1</comment_count>
      <attachid>157381</attachid>
    <who name="Shane Stephens">shanestephens</who>
    <bug_when>2012-08-08 21:22:46 -0700</bug_when>
    <thetext>Created attachment 157381
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691189</commentid>
    <comment_count>2</comment_count>
      <attachid>157381</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-08-08 22:03:41 -0700</bug_when>
    <thetext>Comment on attachment 157381
Patch

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

r- for the ChangeLog.

After you upload a new patch, let&apos;s wait a day so people in other times zones can look and provide feedback.

&gt; Source/WebCore/ChangeLog:22
&gt; +        * css/CSSGrammar.y:
&gt; +        * css/CSSParser.cpp:
&gt; +        (WebCore::CSSParser::CSSParser):
&gt; +        (WebCore::CSSParser::parseValue):
&gt; +        (WebCore::CSSParser::parseColor):

Please annotate some of the major changes here.  For example, renaming reusableSelectorVector to selectorVector or where the typedef is added.

&gt; Source/WebCore/css/CSSParser.cpp:1159
&gt; +        declaration-&gt;addParsedProperties(*m_parsedProperties.get());

Nit: I don&apos;t think you need the .get().

&gt; Source/WebCore/css/CSSParser.cpp:1250
&gt; -        declaration-&gt;addParsedProperties(m_parsedProperties);
&gt; +        declaration-&gt;addParsedProperties(*m_parsedProperties.get());

Nit: I don&apos;t think you need the .get().

&gt; Source/WebCore/css/CSSParserValues.h:109
&gt; +typedef Vector&lt;OwnPtr&lt;CSSParserSelector&gt; &gt; CSSSelectorVector;

If we moved this typedef into CSSParserSelector, would we have to say CSSParserSelector::CSSSelectorVector in many places?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691221</commentid>
    <comment_count>3</comment_count>
      <attachid>157381</attachid>
    <who name="Shane Stephens">shanestephens</who>
    <bug_when>2012-08-08 22:44:45 -0700</bug_when>
    <thetext>Comment on attachment 157381
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:22
&gt;&gt; +        (WebCore::CSSParser::parseColor):
&gt; 
&gt; Please annotate some of the major changes here.  For example, renaming reusableSelectorVector to selectorVector or where the typedef is added.

Done. Most changes are pretty minor though.

&gt;&gt; Source/WebCore/css/CSSParser.cpp:1159
&gt;&gt; +        declaration-&gt;addParsedProperties(*m_parsedProperties.get());
&gt; 
&gt; Nit: I don&apos;t think you need the .get().

Done.

&gt;&gt; Source/WebCore/css/CSSParser.cpp:1250
&gt;&gt; +        declaration-&gt;addParsedProperties(*m_parsedProperties.get());
&gt; 
&gt; Nit: I don&apos;t think you need the .get().

Done.

&gt;&gt; Source/WebCore/css/CSSParserValues.h:109
&gt;&gt; +typedef Vector&lt;OwnPtr&lt;CSSParserSelector&gt; &gt; CSSSelectorVector;
&gt; 
&gt; If we moved this typedef into CSSParserSelector, would we have to say CSSParserSelector::CSSSelectorVector in many places?

A rough count:
1 in CSSGrammar.y
7 in CSSParser.cpp, 9 in CSSParser.h
1 in CSSParserValues.cpp, 2 in CSSParserValues.h
1 in CSSSelectorList.cpp, 1 in CSSSelectorList.h
1 in StyleRule.cpp, 4 in StyleRule.h

For a grand total of 27 places. Probably not worth moving?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691225</commentid>
    <comment_count>4</comment_count>
      <attachid>157389</attachid>
    <who name="Shane Stephens">shanestephens</who>
    <bug_when>2012-08-08 22:49:11 -0700</bug_when>
    <thetext>Created attachment 157389
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691228</commentid>
    <comment_count>5</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-08-08 22:51:44 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; For a grand total of 27 places. Probably not worth moving?

Yeah, not worth moving.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>691262</commentid>
    <comment_count>6</comment_count>
      <attachid>157398</attachid>
    <who name="Shane Stephens">shanestephens</who>
    <bug_when>2012-08-08 23:33:39 -0700</bug_when>
    <thetext>Created attachment 157398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692026</commentid>
    <comment_count>7</comment_count>
      <attachid>157398</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-09 17:28:48 -0700</bug_when>
    <thetext>Comment on attachment 157398
Patch

Rejecting attachment 157398 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
orationProperty(WebCore::CSSPropertyID, WTF::PassRefPtr&lt;WebCore::CSSValue&gt;, bool)&apos;:
Source/WebCore/css/CSSParser.cpp:7921: error: &apos;class WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::CSSProperty, 256ul&gt; &gt;&apos; has no member named &apos;size&apos;
Source/WebCore/css/CSSParser.cpp:7922: error: no match for &apos;operator[]&apos; in &apos;((WebCore::CSSParser*)this)-&gt;WebCore::CSSParser::m_parsedProperties[i]&apos;
make: *** [out/Debug/obj.target/webcore_remaining/Source/WebCore/css/CSSParser.o] Error 1
make: *** Waiting for unfinished jobs....

Full output: http://queues.webkit.org/results/13471322</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692122</commentid>
    <comment_count>8</comment_count>
      <attachid>157615</attachid>
    <who name="Shane Stephens">shanestephens</who>
    <bug_when>2012-08-09 19:42:11 -0700</bug_when>
    <thetext>Created attachment 157615
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692202</commentid>
    <comment_count>9</comment_count>
      <attachid>157615</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-09 22:14:28 -0700</bug_when>
    <thetext>Comment on attachment 157615
Patch for landing

Clearing flags on attachment: 157615

Committed r125252: &lt;http://trac.webkit.org/changeset/125252&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692203</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-09 22:14:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733264</commentid>
    <comment_count>11</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-10-02 17:36:18 -0700</bug_when>
    <thetext>This patch added two heap allocations to the CSSParser constructor as &quot;prep work&quot; for CSS hierarchies (bug 79939) which hasn&apos;t progressed in over a month AFAICT.

I don&apos;t think this is acceptable overhead for an experimental feature. Can we put this behind ENABLE(CSS_HIERARCHIES) somehow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733268</commentid>
    <comment_count>12</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-10-02 17:43:28 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; This patch added two heap allocations to the CSSParser constructor as &quot;prep work&quot; for CSS hierarchies (bug 79939) which hasn&apos;t progressed in over a month AFAICT.
&gt; 
&gt; I don&apos;t think this is acceptable overhead for an experimental feature. Can we put this behind ENABLE(CSS_HIERARCHIES) somehow?

Shane is on paternity leave, which is why he&apos;s been AFK.

If this is showing up on a profile or page cycler, I think it would be fine to roll out.  Wouldn&apos;t putting this behind an ENABLE(CSS_HIERARCHIES) be worse? It touches a lot of lines of code.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157381</attachid>
            <date>2012-08-08 21:22:46 -0700</date>
            <delta_ts>2012-08-08 22:49:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93574-20120809142218.patch</filename>
            <type>text/plain</type>
            <size>31211</size>
            <attacher name="Shane Stephens">shanestephens</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzZjMGZhMDI2NTM4MDRj
NDMyZGRiNDBlZmEwYTkyMDk5ZWRkNzljNC4uZmZlZmNiYTk0MmU5MTBlZWY4OGZkNTg2NDgyZjdj
NmI4NDc1N2ZlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY5IEBACiAyMDEyLTA4LTA5ICBTaGFu
ZSBTdGVwaGVucyAgPHNoYW5lc3RlcGhlbnNAZ29vZ2xlLmNvbT4KIAorICAgICAgICBDb252ZXJ0
IENTU1BhcnNlcidzIG1fcmV1c2FibGVTZWxlY3RvclZlY3RvciB0byBPd25QdHIgYW5kIHJlbmFt
ZSB0byBtX3NlbGVjdG9yVmVjdG9yLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTM1NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGlzIHByZXBhcmF0b3J5IHdvcmsgZm9yIENTUyBIaWVyYXJjaGll
cyAoc2VlIHdrYi51Zy83OTkzOSkuCisgICAgICAgIENTUyBIaWVyYXJjaGllcyB3b3JrcyBieSBw
dXNoaW5nIHNlbGVjdG9yVmVjdG9ycyBvbnRvIGEgc3RhY2sgd2hpbGUgbmVzdGVkIHNlbGVjdG9y
VmVjdG9ycyBhcmUgcGFyc2VkLgorICAgICAgICBGb3IgdGhpcyByZWFzb24sIHRoZSBzZWxlY3Rv
clZlY3RvciBpbiBDU1NQYXJzZXIgY2FuJ3QgYmUgcmUtdXNlZCBiZXR3ZWVuIHNlbGVjdG9yIHBh
cnNlcy4gVGhpcyBwYXRjaAorICAgICAgICB3cmFwcyB0aGUgc2VsZWN0b3JWZWN0b3IgaW4gYW4g
T3duUHRyIGFuZCByZWNyZWF0ZXMgaXQgd2l0aCBlYWNoIG5ldyBwYXJzZWQgc2VsZWN0b3IuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGludHJvZHVjZXMgYSBDU1NTZWxlY3RvclZlY3RvciB0
eXBlZGVmIHRvIHNpbXBsaWZ5IGFuZCBpbXByb3ZlIHJlYWRhYmlsaXR5IG9mIAorICAgICAgICB0
eXBlIHNpZ25hdHVyZXMgaW4gYW5kIGFyb3VuZCBDU1NQYXJzZXIuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGFzIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWxpdHku
CisKKyAgICAgICAgKiBjc3MvQ1NTR3JhbW1hci55OgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpDU1NQYXJzZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRGVj
bGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpmaWx0ZXJQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlU3R5bGVQcm9w
ZXJ0eVNldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmFkZFByb3BlcnR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cm9sbGJhY2tMYXN0UHJvcGVydGllcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNsZWFyUHJvcGVydGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OnBhcnNlNFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OnBhcnNlRmxvd1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0
ZUZsb2F0aW5nU2VsZWN0b3JWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpz
aW5rRmxvYXRpbmdTZWxlY3RvclZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OmNyZWF0ZVN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZUZv
bnRGYWNlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVBhZ2VSdWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6c2V0UmV1c2FibGVSZWdpb25TZWxlY3Rv
clZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnN0YXJ0RGVjbGFyYXRpb25z
Rm9yTWFyZ2luQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZW5kRGVjbGFyYXRp
b25zRm9yTWFyZ2luQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6ZGVsZXRlRm9u
dEZhY2VPbmx5VmFsdWVzKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6Omhhc1Byb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpzZWxlY3RvclZlY3Rvcik6CisgICAgICAgIChDU1NQYXJzZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpyZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yKToKKyAgICAg
ICAgKiBjc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
clNlbGVjdG9yOjphZG9wdFNlbGVjdG9yVmVjdG9yKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2Vy
VmFsdWVzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENTU1BhcnNlclNlbGVjdG9y
KToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3JMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1NlbGVjdG9yTGlzdDo6YWRvcHRTZWxlY3RvclZlY3Rvcik6CisgICAgICAgICogY3NzL0NT
U1NlbGVjdG9yTGlzdC5oOgorICAgICAgICAoQ1NTU2VsZWN0b3JMaXN0KToKKyAgICAgICAgKiBj
c3MvU1ZHQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VT
VkdWYWx1ZSk6CisgICAgICAgICogY3NzL1N0eWxlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJ1bGVSZWdpb246OlN0eWxlUnVsZVJlZ2lvbik6CisgICAgICAgICogY3NzL1N0eWxl
UnVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlOjpwYXJzZXJBZG9wdFNlbGVjdG9y
VmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZVBhZ2U6OnBhcnNlckFkb3B0U2Vs
ZWN0b3JWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlUmVnaW9uOjpjcmVhdGUp
OgorICAgICAgICAoU3R5bGVSdWxlUmVnaW9uKToKKworMjAxMi0wOC0wOSAgU2hhbmUgU3RlcGhl
bnMgIDxzaGFuZXN0ZXBoZW5zQGdvb2dsZS5jb20+CisKICAgICAgICAgQ29tcGlsZSBmbGFnIGZv
ciBDU1MgSGllcmFyY2hpZXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTkyNDMzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFt
bWFyLnkgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CmluZGV4IDk5NjhlNzY2MDA3
ZWVmMTdhYTE2OTZmYjAyZTRmZjc0ZDM0MmYxMDIuLjI5ZmFiNGZmZWRkNjRhZTlkOTE2MGM3ZjQz
OGVjNmI1MDFkMzMwZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFy
LnkKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQpAQCAtNzAsNyArNzAsNyBA
QCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogICAgIFN0eWxlUnVsZUJhc2UqIHJ1bGU7CiAg
ICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+KiBydWxlTGlzdDsKICAgICBDU1NQYXJz
ZXJTZWxlY3Rvciogc2VsZWN0b3I7Ci0gICAgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rv
cj4gPiogc2VsZWN0b3JMaXN0OworICAgIENTU1NlbGVjdG9yVmVjdG9yKiBzZWxlY3Rvckxpc3Q7
CiAgICAgQ1NTU2VsZWN0b3I6Ok1hcmdpbkJveFR5cGUgbWFyZ2luQm94OwogICAgIENTU1NlbGVj
dG9yOjpSZWxhdGlvbiByZWxhdGlvbjsKICAgICBNZWRpYVF1ZXJ5U2V0KiBtZWRpYUxpc3Q7CkBA
IC0zMzMsOSArMzMzLDkgQEAgd2Via2l0X3ZhbHVlOgogICAgIFdFQktJVF9WQUxVRV9TWU0gJ3sn
IG1heWJlX3NwYWNlIGV4cHIgJ30nIHsKICAgICAgICAgaWYgKCQ0KSB7CiAgICAgICAgICAgICBw
YXJzZXItPm1fdmFsdWVMaXN0ID0gcGFyc2VyLT5zaW5rRmxvYXRpbmdWYWx1ZUxpc3QoJDQpOwot
ICAgICAgICAgICAgaW50IG9sZFBhcnNlZFByb3BlcnRpZXMgPSBwYXJzZXItPm1fcGFyc2VkUHJv
cGVydGllcy5zaXplKCk7CisgICAgICAgICAgICBpbnQgb2xkUGFyc2VkUHJvcGVydGllcyA9IHBh
cnNlci0+bV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXplKCk7CiAgICAgICAgICAgICBpZiAoIXBhcnNl
ci0+cGFyc2VWYWx1ZShwYXJzZXItPm1faWQsIHBhcnNlci0+bV9pbXBvcnRhbnQpKQotICAgICAg
ICAgICAgICAgIHBhcnNlci0+cm9sbGJhY2tMYXN0UHJvcGVydGllcyhwYXJzZXItPm1fcGFyc2Vk
UHJvcGVydGllcy5zaXplKCkgLSBvbGRQYXJzZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAg
ICBwYXJzZXItPnJvbGxiYWNrTGFzdFByb3BlcnRpZXMocGFyc2VyLT5tX3BhcnNlZFByb3BlcnRp
ZXMtPnNpemUoKSAtIG9sZFBhcnNlZFByb3BlcnRpZXMpOwogICAgICAgICAgICAgcGFyc2VyLT5t
X3ZhbHVlTGlzdCA9IG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9CkBAIC05MTIsNyArOTEyLDcg
QEAgcnVsZXNldDoKIHNlbGVjdG9yX2xpc3Q6CiAgICAgc2VsZWN0b3IgJXByZWMgVU5JTVBPUlRB
TlRfVE9LIHsKICAgICAgICAgaWYgKCQxKSB7Ci0gICAgICAgICAgICAkJCA9IHBhcnNlci0+cmV1
c2FibGVTZWxlY3RvclZlY3RvcigpOworICAgICAgICAgICAgJCQgPSBwYXJzZXItPnNlbGVjdG9y
VmVjdG9yKCk7CiAgICAgICAgICAgICAkJC0+c2hyaW5rKDApOwogICAgICAgICAgICAgJCQtPmFw
cGVuZChwYXJzZXItPnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQxKSk7CiAgICAgICAgICAgICBwYXJz
ZXItPnVwZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigpOwpAQCAtMTI0OCw3ICsxMjQ4
LDcgQEAgcHNldWRvOgogICAgICAgICAgICAgJCQgPSBwYXJzZXItPmNyZWF0ZUZsb2F0aW5nU2Vs
ZWN0b3IoKTsKICAgICAgICAgICAgICQkLT5zZXRNYXRjaChDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3MpOwogCi0gICAgICAgICAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+IHNl
bGVjdG9yVmVjdG9yOworICAgICAgICAgICAgQ1NTU2VsZWN0b3JWZWN0b3Igc2VsZWN0b3JWZWN0
b3I7CiAgICAgICAgICAgICBzZWxlY3RvclZlY3Rvci5hcHBlbmQocGFyc2VyLT5zaW5rRmxvYXRp
bmdTZWxlY3RvcigkNCkpOwogICAgICAgICAgICAgJCQtPmFkb3B0U2VsZWN0b3JWZWN0b3Ioc2Vs
ZWN0b3JWZWN0b3IpOwogCkBAIC0xMzM0LDEwICsxMzM0LDEwIEBAIGRlY2xhcmF0aW9uOgogICAg
ICAgICBib29sIGlzUHJvcGVydHlQYXJzZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKCQxICYmICQ0
KSB7CiAgICAgICAgICAgICBwYXJzZXItPm1fdmFsdWVMaXN0ID0gcGFyc2VyLT5zaW5rRmxvYXRp
bmdWYWx1ZUxpc3QoJDQpOwotICAgICAgICAgICAgaW50IG9sZFBhcnNlZFByb3BlcnRpZXMgPSBw
YXJzZXItPm1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7CisgICAgICAgICAgICBpbnQgb2xkUGFy
c2VkUHJvcGVydGllcyA9IHBhcnNlci0+bV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXplKCk7CiAgICAg
ICAgICAgICAkJCA9IHBhcnNlci0+cGFyc2VWYWx1ZShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlE
PigkMSksICQ1KTsKICAgICAgICAgICAgIGlmICghJCQpCi0gICAgICAgICAgICAgICAgcGFyc2Vy
LT5yb2xsYmFja0xhc3RQcm9wZXJ0aWVzKHBhcnNlci0+bV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUo
KSAtIG9sZFBhcnNlZFByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIHBhcnNlci0+cm9sbGJh
Y2tMYXN0UHJvcGVydGllcyhwYXJzZXItPm1fcGFyc2VkUHJvcGVydGllcy0+c2l6ZSgpIC0gb2xk
UGFyc2VkUHJvcGVydGllcyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaXNQ
cm9wZXJ0eVBhcnNlZCA9IHRydWU7CiAgICAgICAgICAgICBwYXJzZXItPm1fdmFsdWVMaXN0ID0g
bnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggM2VhNjQ0N2ZmN2U1ZDk0YjE2
ZjRhMzhiZDdhOWQwY2YzZjlmNWJlZC4uOWMxOWNkZTcwMDhmMmIzNjU0NWViN2IwM2I3ODkzZWRh
Yjk5YWQ3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTI0NCw2ICsyNDQsNyBAQCBD
U1NQYXJzZXI6OkNTU1BhcnNlcihjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogICAg
ICwgbV9pbXBvcnRhbnQoZmFsc2UpCiAgICAgLCBtX2lkKENTU1Byb3BlcnR5SW52YWxpZCkKICAg
ICAsIG1fc3R5bGVTaGVldCgwKQorICAgICwgbV9wYXJzZWRQcm9wZXJ0aWVzKGFkb3B0UHRyKG5l
dyBQYXJzZWRQcm9wZXJ0eVZlY3RvcikpCiAgICAgLCBtX3NlbGVjdG9yTGlzdEZvclBhcnNlU2Vs
ZWN0b3IoMCkKICAgICAsIG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1hcmdpbkJveChJTlZB
TElEX05VTV9QQVJTRURfUFJPUEVSVElFUykKICAgICAsIG1faW5QYXJzZVNob3J0aGFuZCgwKQpA
QCAtMjYzLDYgKzI2NCw3IEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKGNvbnN0IENTU1BhcnNlckNv
bnRleHQmIGNvbnRleHQpCiAgICAgLCBtX2xhc3RTZWxlY3RvckxpbmVOdW1iZXIoMCkKICAgICAs
IG1fYWxsb3dJbXBvcnRSdWxlcyh0cnVlKQogICAgICwgbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0
aW9ucyh0cnVlKQorICAgICwgbV9zZWxlY3RvclZlY3RvcihhZG9wdFB0cihuZXcgQ1NTU2VsZWN0
b3JWZWN0b3IpKQogewogI2lmIFlZREVCVUcgPiAwCiAgICAgY3NzeXlkZWJ1ZyA9IDE7CkBAIC0x
MTUyLDkgKzExNTQsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5
U2V0KiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eQogICAgIGJvb2wgb2sgPSBm
YWxzZTsKICAgICBpZiAobV9oYXNGb250RmFjZU9ubHlWYWx1ZXMpCiAgICAgICAgIGRlbGV0ZUZv
bnRGYWNlT25seVZhbHVlcygpOwotICAgIGlmICghbV9wYXJzZWRQcm9wZXJ0aWVzLmlzRW1wdHko
KSkgeworICAgIGlmICghbV9wYXJzZWRQcm9wZXJ0aWVzLT5pc0VtcHR5KCkpIHsKICAgICAgICAg
b2sgPSB0cnVlOwotICAgICAgICBkZWNsYXJhdGlvbi0+YWRkUGFyc2VkUHJvcGVydGllcyhtX3Bh
cnNlZFByb3BlcnRpZXMpOworICAgICAgICBkZWNsYXJhdGlvbi0+YWRkUGFyc2VkUHJvcGVydGll
cygqbV9wYXJzZWRQcm9wZXJ0aWVzLmdldCgpKTsKICAgICAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7
CiAgICAgfQogCkBAIC0xMTc1LDcgKzExNzcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xv
cihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBzdHJpY3QpCiAgICAg
aWYgKCFwYXJzZXIucGFyc2VDb2xvcihzdHJpbmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBDU1NWYWx1ZSogdmFsdWUgPSBwYXJzZXIubV9wYXJzZWRQcm9wZXJ0aWVzLmZpcnN0KCku
dmFsdWUoKTsKKyAgICBDU1NWYWx1ZSogdmFsdWUgPSBwYXJzZXIubV9wYXJzZWRQcm9wZXJ0aWVz
LT5maXJzdCgpLnZhbHVlKCk7CiAgICAgaWYgKCF2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTExOTMsNyArMTE5NSw3IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIGNzc3l5cGFyc2UodGhp
cyk7CiAgICAgbV9ydWxlID0gMDsKIAotICAgIHJldHVybiAhbV9wYXJzZWRQcm9wZXJ0aWVzLmlz
RW1wdHkoKSAmJiBtX3BhcnNlZFByb3BlcnRpZXMuZmlyc3QoKS5pZCgpID09IENTU1Byb3BlcnR5
Q29sb3I7CisgICAgcmV0dXJuICFtX3BhcnNlZFByb3BlcnRpZXMtPmlzRW1wdHkoKSAmJiBtX3Bh
cnNlZFByb3BlcnRpZXMtPmZpcnN0KCkuaWQoKSA9PSBDU1NQcm9wZXJ0eUNvbG9yOwogfQogCiBi
b29sIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAtMTI0Myw5ICsxMjQ1LDkgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRp
b24sIGNvbnN0IFN0cmluZyYgc3QKICAgICBib29sIG9rID0gZmFsc2U7CiAgICAgaWYgKG1faGFz
Rm9udEZhY2VPbmx5VmFsdWVzKQogICAgICAgICBkZWxldGVGb250RmFjZU9ubHlWYWx1ZXMoKTsK
LSAgICBpZiAoIW1fcGFyc2VkUHJvcGVydGllcy5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIW1fcGFy
c2VkUHJvcGVydGllcy0+aXNFbXB0eSgpKSB7CiAgICAgICAgIG9rID0gdHJ1ZTsKLSAgICAgICAg
ZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMobV9wYXJzZWRQcm9wZXJ0aWVzKTsKKyAg
ICAgICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMoKm1fcGFyc2VkUHJvcGVydGll
cy5nZXQoKSk7CiAgICAgICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIH0KIApAQCAtMTI4Miwx
NCArMTI4NCwxNCBAQCBQYXNzT3duUHRyPE1lZGlhUXVlcnk+IENTU1BhcnNlcjo6cGFyc2VNZWRp
YVF1ZXJ5KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogfQogCiAjaWYgRU5BQkxFKENTU19WQVJJQUJM
RVMpCi1zdGF0aWMgaW5saW5lIHZvaWQgZmlsdGVyUHJvcGVydGllcyhib29sIGltcG9ydGFudCwg
Y29uc3QgQ1NTUGFyc2VyOjpQYXJzZWRQcm9wZXJ0eVZlY3RvciYgaW5wdXQsIFZlY3RvcjxDU1NQ
cm9wZXJ0eSwgMjU2PiYgb3V0cHV0LCBzaXplX3QmIHVudXNlZEVudHJpZXMsIEJpdEFycmF5PG51
bUNTU1Byb3BlcnRpZXM+JiBzZWVuUHJvcGVydGllcywgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBz
ZWVuVmFyaWFibGVzKQorc3RhdGljIGlubGluZSB2b2lkIGZpbHRlclByb3BlcnRpZXMoYm9vbCBp
bXBvcnRhbnQsIGNvbnN0IENTU1BhcnNlcjo6UGFyc2VkUHJvcGVydHlWZWN0b3IqIGlucHV0LCBW
ZWN0b3I8Q1NTUHJvcGVydHksIDI1Nj4mIG91dHB1dCwgc2l6ZV90JiB1bnVzZWRFbnRyaWVzLCBC
aXRBcnJheTxudW1DU1NQcm9wZXJ0aWVzPiYgc2VlblByb3BlcnRpZXMsIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nPiYgc2VlblZhcmlhYmxlcykKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgZmlsdGVy
UHJvcGVydGllcyhib29sIGltcG9ydGFudCwgY29uc3QgQ1NTUGFyc2VyOjpQYXJzZWRQcm9wZXJ0
eVZlY3RvciYgaW5wdXQsIFZlY3RvcjxDU1NQcm9wZXJ0eSwgMjU2PiYgb3V0cHV0LCBzaXplX3Qm
IHVudXNlZEVudHJpZXMsIEJpdEFycmF5PG51bUNTU1Byb3BlcnRpZXM+JiBzZWVuUHJvcGVydGll
cykKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWx0ZXJQcm9wZXJ0aWVzKGJvb2wgaW1wb3J0YW50LCBj
b25zdCBDU1NQYXJzZXI6OlBhcnNlZFByb3BlcnR5VmVjdG9yKiBpbnB1dCwgVmVjdG9yPENTU1By
b3BlcnR5LCAyNTY+JiBvdXRwdXQsIHNpemVfdCYgdW51c2VkRW50cmllcywgQml0QXJyYXk8bnVt
Q1NTUHJvcGVydGllcz4mIHNlZW5Qcm9wZXJ0aWVzKQogI2VuZGlmCiB7CiAgICAgLy8gQWRkIHBy
b3BlcnRpZXMgaW4gcmV2ZXJzZSBvcmRlciBzbyB0aGF0IGhpZ2hlc3QgcHJpb3JpdHkgZGVmaW5p
dGlvbnMgYXJlIHJlYWNoZWQgZmlyc3QuIER1cGxpY2F0ZSBkZWZpbml0aW9ucyBjYW4gdGhlbiBi
ZSBpZ25vcmVkIHdoZW4gZm91bmQuCi0gICAgZm9yIChpbnQgaSA9IGlucHV0LnNpemUoKSAtIDE7
IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9IGlu
cHV0W2ldOworICAgIGZvciAoaW50IGkgPSBpbnB1dC0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkp
IHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gaW5wdXQtPmF0KGkpOwog
ICAgICAgICBpZiAocHJvcGVydHkuaXNJbXBvcnRhbnQoKSAhPSBpbXBvcnRhbnQpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKQEAgLTEzMTMsMTcgKzEz
MTUsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZpbHRlclByb3BlcnRpZXMoYm9vbCBpbXBvcnRh
bnQsIGNvbnN0IENTU1BhcnNlcjo6UGFyc2VkUHJvcGUKIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4gQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVByb3BlcnR5U2V0KCkKIHsKICAgICBCaXRBcnJh
eTxudW1DU1NQcm9wZXJ0aWVzPiBzZWVuUHJvcGVydGllczsKLSAgICBzaXplX3QgdW51c2VkRW50
cmllcyA9IG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7CisgICAgc2l6ZV90IHVudXNlZEVudHJp
ZXMgPSBtX3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKTsKICAgICBWZWN0b3I8Q1NTUHJvcGVydHks
IDI1Nj4gcmVzdWx0cyh1bnVzZWRFbnRyaWVzKTsKIAogICAgIC8vIEltcG9ydGFudCBwcm9wZXJ0
aWVzIGhhdmUgaGlnaGVyIHByaW9yaXR5LCBzbyBhZGQgdGhlbSBmaXJzdC4gRHVwbGljYXRlIGRl
ZmluaXRpb25zIGNhbiB0aGVuIGJlIGlnbm9yZWQgd2hlbiBmb3VuZC4KICNpZiBFTkFCTEUoQ1NT
X1ZBUklBQkxFUykKICAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gc2VlblZhcmlhYmxlczsKLSAg
ICBmaWx0ZXJQcm9wZXJ0aWVzKHRydWUsIG1fcGFyc2VkUHJvcGVydGllcywgcmVzdWx0cywgdW51
c2VkRW50cmllcywgc2VlblByb3BlcnRpZXMsIHNlZW5WYXJpYWJsZXMpOwotICAgIGZpbHRlclBy
b3BlcnRpZXMoZmFsc2UsIG1fcGFyc2VkUHJvcGVydGllcywgcmVzdWx0cywgdW51c2VkRW50cmll
cywgc2VlblByb3BlcnRpZXMsIHNlZW5WYXJpYWJsZXMpOworICAgIGZpbHRlclByb3BlcnRpZXMo
dHJ1ZSwgbV9wYXJzZWRQcm9wZXJ0aWVzLmdldCgpLCByZXN1bHRzLCB1bnVzZWRFbnRyaWVzLCBz
ZWVuUHJvcGVydGllcywgc2VlblZhcmlhYmxlcyk7CisgICAgZmlsdGVyUHJvcGVydGllcyhmYWxz
ZSwgbV9wYXJzZWRQcm9wZXJ0aWVzLmdldCgpLCByZXN1bHRzLCB1bnVzZWRFbnRyaWVzLCBzZWVu
UHJvcGVydGllcywgc2VlblZhcmlhYmxlcyk7CiAjZWxzZQotICAgIGZpbHRlclByb3BlcnRpZXMo
dHJ1ZSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCByZXN1bHRzLCB1bnVzZWRFbnRyaWVzLCBzZWVuUHJv
cGVydGllcyk7Ci0gICAgZmlsdGVyUHJvcGVydGllcyhmYWxzZSwgbV9wYXJzZWRQcm9wZXJ0aWVz
LCByZXN1bHRzLCB1bnVzZWRFbnRyaWVzLCBzZWVuUHJvcGVydGllcyk7CisgICAgZmlsdGVyUHJv
cGVydGllcyh0cnVlLCBtX3BhcnNlZFByb3BlcnRpZXMuZ2V0KCksIHJlc3VsdHMsIHVudXNlZEVu
dHJpZXMsIHNlZW5Qcm9wZXJ0aWVzKTsKKyAgICBmaWx0ZXJQcm9wZXJ0aWVzKGZhbHNlLCBtX3Bh
cnNlZFByb3BlcnRpZXMuZ2V0KCksIHJlc3VsdHMsIHVudXNlZEVudHJpZXMsIHNlZW5Qcm9wZXJ0
aWVzKTsKICNlbmRpZgogICAgIGlmICh1bnVzZWRFbnRyaWVzKQogICAgICAgICByZXN1bHRzLnJl
bW92ZSgwLCB1bnVzZWRFbnRyaWVzKTsKQEAgLTEzMzMsMTkgKzEzMzUsMTkgQEAgUGFzc1JlZlB0
cjxTdHlsZVByb3BlcnR5U2V0PiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUHJvcGVydHlTZXQoKQog
CiB2b2lkIENTU1BhcnNlcjo6YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBpbXBsaWNpdCkKIHsK
LSAgICBtX3BhcnNlZFByb3BlcnRpZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BJZCwgdmFsdWUs
IGltcG9ydGFudCwgbV9jdXJyZW50U2hvcnRoYW5kLCBtX2ltcGxpY2l0U2hvcnRoYW5kIHx8IGlt
cGxpY2l0KSk7CisgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLT5hcHBlbmQoQ1NTUHJvcGVydHkocHJv
cElkLCB2YWx1ZSwgaW1wb3J0YW50LCBtX2N1cnJlbnRTaG9ydGhhbmQsIG1faW1wbGljaXRTaG9y
dGhhbmQgfHwgaW1wbGljaXQpKTsKIH0KIAogdm9pZCBDU1NQYXJzZXI6OnJvbGxiYWNrTGFzdFBy
b3BlcnRpZXMoaW50IG51bSkKIHsKICAgICBBU1NFUlQobnVtID49IDApOwotICAgIEFTU0VSVCht
X3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihudW0pKTsK
LSAgICBtX3BhcnNlZFByb3BlcnRpZXMuc2hyaW5rKG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCkg
LSBudW0pOworICAgIEFTU0VSVChtX3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKSA+PSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obnVtKSk7CisgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLT5zaHJpbmsobV9w
YXJzZWRQcm9wZXJ0aWVzLT5zaXplKCkgLSBudW0pOwogfQogCiB2b2lkIENTU1BhcnNlcjo6Y2xl
YXJQcm9wZXJ0aWVzKCkKIHsKLSAgICBtX3BhcnNlZFByb3BlcnRpZXMuY2xlYXIoKTsKKyAgICBt
X3BhcnNlZFByb3BlcnRpZXMtPmNsZWFyKCk7CiAgICAgbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVm
b3JlTWFyZ2luQm94ID0gSU5WQUxJRF9OVU1fUEFSU0VEX1BST1BFUlRJRVM7CiAgICAgbV9oYXNG
b250RmFjZU9ubHlWYWx1ZXMgPSBmYWxzZTsKIH0KQEAgLTE3NjEsNyArMTc2Myw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICAgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgcHJvcElkKTsKICAgICAgICAg
aWYgKG51bSAhPSAxIHx8ICFwYXJzZVZhbHVlKENTU1Byb3BlcnR5T3ZlcmZsb3dYLCBpbXBvcnRh
bnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBDU1NWYWx1ZSogdmFsdWUg
PSBtX3BhcnNlZFByb3BlcnRpZXMubGFzdCgpLnZhbHVlKCk7CisgICAgICAgIENTU1ZhbHVlKiB2
YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy0+bGFzdCgpLnZhbHVlKCk7CiAgICAgICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5T3ZlcmZsb3dZLCB2YWx1ZSwgaW1wb3J0YW50KTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTc4NCw3ICsxNzg2LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAg
ICAgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlCb3JkZXJTcGFjaW5n
KTsKICAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhv
cml6b250YWxTcGFjaW5nLCBpbXBvcnRhbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy5sYXN0
KCkudmFsdWUoKTsKKyAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVy
dGllcy0+bGFzdCgpLnZhbHVlKCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgdmFsdWUsIGltcG9ydGFudCk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjQzMSw3ICsyNDMzLDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KQogICAgICAgICAgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVydHlXZWJr
aXRNYXJnaW5Db2xsYXBzZSk7CiAgICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWUod2Via2l0TWFy
Z2luQ29sbGFwc2VTaG9ydGhhbmQoKS5wcm9wZXJ0aWVzKClbMF0sIGltcG9ydGFudCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0g
bV9wYXJzZWRQcm9wZXJ0aWVzLmxhc3QoKS52YWx1ZSgpOworICAgICAgICAgICAgQ1NTVmFsdWUq
IHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzLT5sYXN0KCkudmFsdWUoKTsKICAgICAgICAgICAg
IGFkZFByb3BlcnR5KHdlYmtpdE1hcmdpbkNvbGxhcHNlU2hvcnRoYW5kKCkucHJvcGVydGllcygp
WzFdLCB2YWx1ZSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CkBAIC0zMjY0LDcgKzMyNjYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2U0VmFsdWVzKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBjb25zdCBDU1NQcm9wZXJ0eUlEICpwcm9wZXJ0aQogICAgICAg
ICBjYXNlIDE6IHsKICAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZShwcm9wZXJ0aWVzWzBdLCBp
bXBvcnRhbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIENT
U1ZhbHVlICp2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy5sYXN0KCkudmFsdWUoKTsKKyAgICAg
ICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy0+bGFzdCgpLnZhbHVl
KCk7CiAgICAgICAgICAgICBJbXBsaWNpdFNjb3BlIGltcGxpY2l0U2NvcGUodGhpcywgUHJvcGVy
dHlJbXBsaWNpdCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzWzFdLCB2YWx1
ZSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbMl0sIHZh
bHVlLCBpbXBvcnRhbnQpOwpAQCAtMzI3NCwxNyArMzI3NiwxNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2U0VmFsdWVzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25zdCBDU1NQcm9wZXJ0eUlEICpw
cm9wZXJ0aQogICAgICAgICBjYXNlIDI6IHsKICAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZShw
cm9wZXJ0aWVzWzBdLCBpbXBvcnRhbnQpIHx8ICFwYXJzZVZhbHVlKHByb3BlcnRpZXNbMV0sIGlt
cG9ydGFudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgQ1NT
VmFsdWUgKnZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzW21fcGFyc2VkUHJvcGVydGllcy5zaXpl
KCkgLSAyXS52YWx1ZSgpOworICAgICAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQ
cm9wZXJ0aWVzLT5hdChtX3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKSAtIDIpLnZhbHVlKCk7CiAg
ICAgICAgICAgICBJbXBsaWNpdFNjb3BlIGltcGxpY2l0U2NvcGUodGhpcywgUHJvcGVydHlJbXBs
aWNpdCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzWzJdLCB2YWx1ZSwgaW1w
b3J0YW50KTsKLSAgICAgICAgICAgIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzW21fcGFyc2Vk
UHJvcGVydGllcy5zaXplKCkgLSAyXS52YWx1ZSgpOworICAgICAgICAgICAgdmFsdWUgPSBtX3Bh
cnNlZFByb3BlcnRpZXMtPmF0KG1fcGFyc2VkUHJvcGVydGllcy0+c2l6ZSgpIC0gMikudmFsdWUo
KTsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbM10sIHZhbHVlLCBpbXBvcnRh
bnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSAzOiB7CiAg
ICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWUocHJvcGVydGllc1swXSwgaW1wb3J0YW50KSB8fCAh
cGFyc2VWYWx1ZShwcm9wZXJ0aWVzWzFdLCBpbXBvcnRhbnQpIHx8ICFwYXJzZVZhbHVlKHByb3Bl
cnRpZXNbMl0sIGltcG9ydGFudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgQ1NTVmFsdWUgKnZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzW21fcGFyc2VkUHJv
cGVydGllcy5zaXplKCkgLSAyXS52YWx1ZSgpOworICAgICAgICAgICAgQ1NTVmFsdWUqIHZhbHVl
ID0gbV9wYXJzZWRQcm9wZXJ0aWVzLT5hdChtX3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKSAtIDIp
LnZhbHVlKCk7CiAgICAgICAgICAgICBJbXBsaWNpdFNjb3BlIGltcGxpY2l0U2NvcGUodGhpcywg
UHJvcGVydHlJbXBsaWNpdCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVzWzNd
LCB2YWx1ZSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzc4OCw3ICs3Nzkw
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxvd1RocmVhZChjb25zdCBTdHJpbmcmIGZsb3dO
YW1lKQogCiAgICAgbV9ydWxlID0gMDsKIAotICAgIHJldHVybiAoKG1fcGFyc2VkUHJvcGVydGll
cy5zaXplKCkgPT0gMSkgJiYgKG1fcGFyc2VkUHJvcGVydGllcy5maXJzdCgpLmlkKCkgPT0gQ1NT
UHJvcGVydHlXZWJraXRGbG93SW50bykpOworICAgIHJldHVybiAoKG1fcGFyc2VkUHJvcGVydGll
cy0+c2l6ZSgpID09IDEpICYmIChtX3BhcnNlZFByb3BlcnRpZXMtPmZpcnN0KCkuaWQoKSA9PSBD
U1NQcm9wZXJ0eVdlYmtpdEZsb3dJbnRvKSk7CiB9CiAKIC8vIG5vbmUgfCA8aWRlbnQ+CkBAIC05
NDQ3LDE0ICs5NDQ5LDE0IEBAIFBhc3NPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1BhcnNl
cjo6c2lua0Zsb2F0aW5nU2VsZWN0b3IoQ1NTUGFyc2VyU2VsZWN0b3IqCiAgICAgcmV0dXJuIGFk
b3B0UHRyKHNlbGVjdG9yKTsKIH0KIAotVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
PiogQ1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ1NlbGVjdG9yVmVjdG9yKCkKK0NTU1NlbGVjdG9y
VmVjdG9yKiBDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3JWZWN0b3IoKQogewotICAg
IFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHNlbGVjdG9yVmVjdG9yID0gbmV3
IFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID47CisgICAgQ1NTU2VsZWN0b3JWZWN0
b3IqIHNlbGVjdG9yVmVjdG9yID0gbmV3IENTU1NlbGVjdG9yVmVjdG9yOwogICAgIG1fZmxvYXRp
bmdTZWxlY3RvclZlY3RvcnMuYWRkKHNlbGVjdG9yVmVjdG9yKTsKICAgICByZXR1cm4gc2VsZWN0
b3JWZWN0b3I7CiB9CiAKLVBhc3NPd25QdHI8VmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rv
cj4gPiA+IENTU1BhcnNlcjo6c2lua0Zsb2F0aW5nU2VsZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2VsZWN0b3JWZWN0b3IpCitQYXNzT3duUHRyPENTU1Nl
bGVjdG9yVmVjdG9yID4gQ1NTUGFyc2VyOjpzaW5rRmxvYXRpbmdTZWxlY3RvclZlY3RvcihDU1NT
ZWxlY3RvclZlY3Rvciogc2VsZWN0b3JWZWN0b3IpCiB7CiAgICAgaWYgKHNlbGVjdG9yVmVjdG9y
KSB7CiAgICAgICAgIEFTU0VSVChtX2Zsb2F0aW5nU2VsZWN0b3JWZWN0b3JzLmNvbnRhaW5zKHNl
bGVjdG9yVmVjdG9yKSk7CkBAIC05NjQ3LDcgKzk2NDksNyBAQCBTdHlsZVJ1bGVLZXlmcmFtZXMq
IENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVzUnVsZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NP
d25QdAogICAgIHJldHVybiBydWxlUHRyOwogfQogCi1TdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6
OmNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBzZWxl
Y3RvcnMpCitTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShDU1NTZWxl
Y3RvclZlY3Rvciogc2VsZWN0b3JzKQogewogICAgIFN0eWxlUnVsZSogcmVzdWx0ID0gMDsKICAg
ICBpZiAoc2VsZWN0b3JzKSB7CkBAIC05NjY5LDggKzk2NzEsOCBAQCBTdHlsZVJ1bGVCYXNlKiBD
U1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9y
PiA+KiBzZQogU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUoKQog
ewogICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMg
PSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJzZWRQcm9wZXJ0aWVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9IG1fcGFyc2Vk
UHJvcGVydGllc1tpXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJzZWRQcm9w
ZXJ0aWVzLT5zaXplKCk7ICsraSkgeworICAgICAgICBDU1NQcm9wZXJ0eSYgcHJvcGVydHkgPSBt
X3BhcnNlZFByb3BlcnRpZXMtPmF0KGkpOwogICAgICAgICBpZiAocHJvcGVydHkuaWQoKSA9PSBD
U1NQcm9wZXJ0eUZvbnRWYXJpYW50ICYmIHByb3BlcnR5LnZhbHVlKCktPmlzUHJpbWl0aXZlVmFs
dWUoKSkKICAgICAgICAgICAgIHByb3BlcnR5LndyYXBWYWx1ZUluQ29tbWFTZXBhcmF0ZWRMaXN0
KCk7CiAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlGb250RmFt
aWx5ICYmICghcHJvcGVydHkudmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSB8fCBzdGF0aWNfY2FzdDxD
U1NWYWx1ZUxpc3QqPihwcm9wZXJ0eS52YWx1ZSgpKS0+bGVuZ3RoKCkgIT0gMSkpIHsKQEAgLTk3
NjEsNyArOTc2Myw3IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlUGFnZVJ1bGUo
UGFzc093blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gcGFnZVNlbGVjCiAgICAgU3R5bGVSdWxlUGFn
ZSogcGFnZVJ1bGUgPSAwOwogICAgIGlmIChwYWdlU2VsZWN0b3IpIHsKICAgICAgICAgUmVmUHRy
PFN0eWxlUnVsZVBhZ2U+IHJ1bGUgPSBTdHlsZVJ1bGVQYWdlOjpjcmVhdGUoKTsKLSAgICAgICAg
VmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiBzZWxlY3RvclZlY3RvcjsKKyAgICAg
ICAgQ1NTU2VsZWN0b3JWZWN0b3Igc2VsZWN0b3JWZWN0b3I7CiAgICAgICAgIHNlbGVjdG9yVmVj
dG9yLmFwcGVuZChwYWdlU2VsZWN0b3IpOwogICAgICAgICBydWxlLT5wYXJzZXJBZG9wdFNlbGVj
dG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKICAgICAgICAgcnVsZS0+c2V0UHJvcGVydGllcyhj
cmVhdGVTdHlsZVByb3BlcnR5U2V0KCkpOwpAQCAtOTc3Myw3ICs5Nzc1LDcgQEAgU3R5bGVSdWxl
QmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVQYWdlUnVsZShQYXNzT3duUHRyPENTU1BhcnNlclNlbGVj
dG9yPiBwYWdlU2VsZWMKICAgICByZXR1cm4gcGFnZVJ1bGU7CiB9CiAKLXZvaWQgQ1NTUGFyc2Vy
OjpzZXRSZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2Vy
U2VsZWN0b3I+ID4qIHNlbGVjdG9ycykKK3ZvaWQgQ1NTUGFyc2VyOjpzZXRSZXVzYWJsZVJlZ2lv
blNlbGVjdG9yVmVjdG9yKENTU1NlbGVjdG9yVmVjdG9yKiBzZWxlY3RvcnMpCiB7CiAgICAgaWYg
KHNlbGVjdG9ycykKICAgICAgICAgbV9yZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yLnN3YXAo
KnNlbGVjdG9ycyk7CkBAIC05ODA5LDIyICs5ODExLDIyIEBAIFN0eWxlUnVsZUJhc2UqIENTU1Bh
cnNlcjo6Y3JlYXRlTWFyZ2luQXRSdWxlKENTU1NlbGVjdG9yOjpNYXJnaW5Cb3hUeXBlIC8qIG1h
cmdpCiAKIHZvaWQgQ1NTUGFyc2VyOjpzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpCiB7
Ci0gICAgbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94ID0gbV9wYXJzZWRQcm9w
ZXJ0aWVzLnNpemUoKTsKKyAgICBtX251bVBhcnNlZFByb3BlcnRpZXNCZWZvcmVNYXJnaW5Cb3gg
PSBtX3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKTsKIH0KIAogdm9pZCBDU1NQYXJzZXI6OmVuZERl
Y2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpCiB7Ci0gICAgcm9sbGJhY2tMYXN0UHJvcGVydGllcyht
X3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFy
Z2luQm94KTsKKyAgICByb2xsYmFja0xhc3RQcm9wZXJ0aWVzKG1fcGFyc2VkUHJvcGVydGllcy0+
c2l6ZSgpIC0gbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94KTsKICAgICBtX251
bVBhcnNlZFByb3BlcnRpZXNCZWZvcmVNYXJnaW5Cb3ggPSBJTlZBTElEX05VTV9QQVJTRURfUFJP
UEVSVElFUzsKIH0KIAogdm9pZCBDU1NQYXJzZXI6OmRlbGV0ZUZvbnRGYWNlT25seVZhbHVlcygp
CiB7CiAgICAgQVNTRVJUKG1faGFzRm9udEZhY2VPbmx5VmFsdWVzKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKTspIHsKLSAgICAgICAgQ1NT
UHJvcGVydHkmIHByb3BlcnR5ID0gbV9wYXJzZWRQcm9wZXJ0aWVzW2ldOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKTspIHsKKyAgICAgICAg
Q1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wYXJzZWRQcm9wZXJ0aWVzLT5hdChpKTsKICAgICAg
ICAgaWYgKHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlGb250VmFyaWFudCAmJiBwcm9wZXJ0
eS52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICBtX3BhcnNlZFByb3BlcnRp
ZXMucmVtb3ZlKGkpOworICAgICAgICAgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLT5yZW1vdmUoaSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICArK2k7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmgKaW5kZXggYjY0NjJhNjExMzM1ZWFkNGJiOWNiMzhlOGQzYTkwMWY1NWM2Y2M5
NS4uZGE4OTU2MWZmNjk4NmQ1ZDk4NTRkYTgxOTgxOGM3ZDFkOTRmNDc2YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuaApAQCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5SUQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+LCBib29sIGltcG9ydGFudCwg
Ym9vbCBpbXBsaWNpdCA9IGZhbHNlKTsKICAgICB2b2lkIHJvbGxiYWNrTGFzdFByb3BlcnRpZXMo
aW50IG51bSk7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gIW1fcGFy
c2VkUHJvcGVydGllcy5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc1Byb3BlcnRpZXMoKSBjb25z
dCB7IHJldHVybiAhbV9wYXJzZWRQcm9wZXJ0aWVzLT5pc0VtcHR5KCk7IH0KIAogICAgIGJvb2wg
cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7CiAgICAgYm9vbCBwYXJz
ZVNob3J0aGFuZChDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW5kJiwg
Ym9vbCBpbXBvcnRhbnQpOwpAQCAtMjQ5LDggKzI0OSw4IEBAIHB1YmxpYzoKICAgICBDU1NQYXJz
ZXJTZWxlY3RvciogY3JlYXRlRmxvYXRpbmdTZWxlY3RvcigpOwogICAgIFBhc3NPd25QdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+IHNpbmtGbG9hdGluZ1NlbGVjdG9yKENTU1BhcnNlclNlbGVjdG9yKik7
CiAKLSAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBjcmVhdGVGbG9hdGlu
Z1NlbGVjdG9yVmVjdG9yKCk7Ci0gICAgUGFzc093blB0cjxWZWN0b3I8T3duUHRyPENTU1BhcnNl
clNlbGVjdG9yPiA+ID4gc2lua0Zsb2F0aW5nU2VsZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0cjxD
U1NQYXJzZXJTZWxlY3Rvcj4gPiopOworICAgIENTU1NlbGVjdG9yVmVjdG9yKiBjcmVhdGVGbG9h
dGluZ1NlbGVjdG9yVmVjdG9yKCk7CisgICAgUGFzc093blB0cjxDU1NTZWxlY3RvclZlY3Rvcj4g
c2lua0Zsb2F0aW5nU2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3IqKTsKIAogICAgIENT
U1BhcnNlclZhbHVlTGlzdCogY3JlYXRlRmxvYXRpbmdWYWx1ZUxpc3QoKTsKICAgICBQYXNzT3du
UHRyPENTU1BhcnNlclZhbHVlTGlzdD4gc2lua0Zsb2F0aW5nVmFsdWVMaXN0KENTU1BhcnNlclZh
bHVlTGlzdCopOwpAQCAtMjY4LDEwICsyNjgsMTAgQEAgcHVibGljOgogICAgIHR5cGVkZWYgVmVj
dG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+IFJ1bGVMaXN0OwogICAgIFN0eWxlUnVsZUJhc2Uq
IGNyZWF0ZU1lZGlhUnVsZShNZWRpYVF1ZXJ5U2V0KiwgUnVsZUxpc3QqKTsKICAgICBSdWxlTGlz
dCogY3JlYXRlUnVsZUxpc3QoKTsKLSAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVTdHlsZVJ1bGUo
VmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2VsZWN0b3JzKTsKKyAgICBTdHls
ZVJ1bGVCYXNlKiBjcmVhdGVTdHlsZVJ1bGUoQ1NTU2VsZWN0b3JWZWN0b3IqIHNlbGVjdG9ycyk7
CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlRm9udEZhY2VSdWxlKCk7CiAgICAgU3R5bGVSdWxl
QmFzZSogY3JlYXRlUGFnZVJ1bGUoUGFzc093blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gcGFnZVNl
bGVjdG9yKTsKLSAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVSZWdpb25SdWxlKFZlY3RvcjxPd25Q
dHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHJlZ2lvblNlbGVjdG9yLCBSdWxlTGlzdCogcnVsZXMp
OworICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZVJlZ2lvblJ1bGUoQ1NTU2VsZWN0b3JWZWN0b3Iq
IHJlZ2lvblNlbGVjdG9yLCBSdWxlTGlzdCogcnVsZXMpOwogICAgIFN0eWxlUnVsZUJhc2UqIGNy
ZWF0ZU1hcmdpbkF0UnVsZShDU1NTZWxlY3Rvcjo6TWFyZ2luQm94VHlwZSk7CiAgICAgdm9pZCBz
dGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogICAgIHZvaWQgZW5kRGVjbGFyYXRpb25z
Rm9yTWFyZ2luQm94KCk7CkBAIC0yOTQsMTAgKzI5NCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGludmFsaWRCbG9ja0hpdCgpOwogCi0gICAgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rv
cj4gPiogcmV1c2FibGVTZWxlY3RvclZlY3RvcigpIHsgcmV0dXJuICZtX3JldXNhYmxlU2VsZWN0
b3JWZWN0b3I7IH0KKyAgICBDU1NTZWxlY3RvclZlY3Rvciogc2VsZWN0b3JWZWN0b3IoKSB7IHJl
dHVybiBtX3NlbGVjdG9yVmVjdG9yLmdldCgpOyB9CiAKLSAgICB2b2lkIHNldFJldXNhYmxlUmVn
aW9uU2VsZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2Vs
ZWN0b3JzKTsKLSAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiByZXVzYWJs
ZVJlZ2lvblNlbGVjdG9yVmVjdG9yKCkgeyByZXR1cm4gJm1fcmV1c2FibGVSZWdpb25TZWxlY3Rv
clZlY3RvcjsgfQorICAgIHZvaWQgc2V0UmV1c2FibGVSZWdpb25TZWxlY3RvclZlY3RvcihDU1NT
ZWxlY3RvclZlY3Rvciogc2VsZWN0b3JzKTsKKyAgICBDU1NTZWxlY3RvclZlY3RvciogcmV1c2Fi
bGVSZWdpb25TZWxlY3RvclZlY3RvcigpIHsgcmV0dXJuICZtX3JldXNhYmxlUmVnaW9uU2VsZWN0
b3JWZWN0b3I7IH0KIAogICAgIHZvaWQgdXBkYXRlTGFzdFNlbGVjdG9yTGluZUFuZFBvc2l0aW9u
KCk7CiAgICAgdm9pZCB1cGRhdGVMYXN0TWVkaWFMaW5lKE1lZGlhUXVlcnlTZXQqKTsKQEAgLTMx
NSw4ICszMTUsOSBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IG1fa2V5ZnJh
bWU7CiAgICAgT3duUHRyPE1lZGlhUXVlcnk+IG1fbWVkaWFRdWVyeTsKICAgICBPd25QdHI8Q1NT
UGFyc2VyVmFsdWVMaXN0PiBtX3ZhbHVlTGlzdDsKKwogICAgIHR5cGVkZWYgVmVjdG9yPENTU1By
b3BlcnR5LCAyNTY+IFBhcnNlZFByb3BlcnR5VmVjdG9yOwotICAgIFBhcnNlZFByb3BlcnR5VmVj
dG9yIG1fcGFyc2VkUHJvcGVydGllczsKKyAgICBPd25QdHI8UGFyc2VkUHJvcGVydHlWZWN0b3I+
IG1fcGFyc2VkUHJvcGVydGllczsKICAgICBDU1NTZWxlY3Rvckxpc3QqIG1fc2VsZWN0b3JMaXN0
Rm9yUGFyc2VTZWxlY3RvcjsKIAogICAgIHVuc2lnbmVkIG1fbnVtUGFyc2VkUHJvcGVydGllc0Jl
Zm9yZU1hcmdpbkJveDsKQEAgLTQzOCw3ICs0MzksNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxS
ZWZQdHI8TWVkaWFRdWVyeVNldD4gPiBtX3BhcnNlZE1lZGlhUXVlcnlTZXRzOwogICAgIFZlY3Rv
cjxPd25QdHI8UnVsZUxpc3Q+ID4gbV9wYXJzZWRSdWxlTGlzdHM7CiAgICAgSGFzaFNldDxDU1NQ
YXJzZXJTZWxlY3Rvcio+IG1fZmxvYXRpbmdTZWxlY3RvcnM7Ci0gICAgSGFzaFNldDxWZWN0b3I8
T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+Kj4gbV9mbG9hdGluZ1NlbGVjdG9yVmVjdG9yczsK
KyAgICBIYXNoU2V0PENTU1NlbGVjdG9yVmVjdG9yKj4gbV9mbG9hdGluZ1NlbGVjdG9yVmVjdG9y
czsKICAgICBIYXNoU2V0PENTU1BhcnNlclZhbHVlTGlzdCo+IG1fZmxvYXRpbmdWYWx1ZUxpc3Rz
OwogICAgIEhhc2hTZXQ8Q1NTUGFyc2VyRnVuY3Rpb24qPiBtX2Zsb2F0aW5nRnVuY3Rpb25zOwog
CkBAIC00NDgsOCArNDQ5LDggQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxWZWN0b3I8UmVmUHRy
PFN0eWxlS2V5ZnJhbWU+ID4gPiBtX2Zsb2F0aW5nS2V5ZnJhbWVWZWN0b3I7CiAKLSAgICBWZWN0
b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+IG1fcmV1c2FibGVTZWxlY3RvclZlY3RvcjsK
LSAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+IG1fcmV1c2FibGVSZWdpb25T
ZWxlY3RvclZlY3RvcjsKKyAgICBPd25QdHI8Q1NTU2VsZWN0b3JWZWN0b3I+IG1fc2VsZWN0b3JW
ZWN0b3I7CisgICAgQ1NTU2VsZWN0b3JWZWN0b3IgbV9yZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVj
dG9yOwogCiAgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gbV9wYXJzZWRDYWxjdWxhdGlvbjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAppbmRleCAzN2EwZDQ1MmM2NWM0NTVl
NWM0MTA0ZTU0ZTQ3ODkyZmIyMTU1ZTA0Li4xYWI0ZGZlZmRmNjY3MmQ3YzBhZGM4NDU0NmIzODg3
MDFiZWM3ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcApAQCAtMTE0
LDcgKzExNCw3IEBAIENTU1BhcnNlclNlbGVjdG9yOjp+Q1NTUGFyc2VyU2VsZWN0b3IoKQogICAg
IH0KIH0KIAotdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6YWRvcHRTZWxlY3RvclZlY3RvcihWZWN0
b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+JiBzZWxlY3RvclZlY3RvcikKK3ZvaWQgQ1NT
UGFyc2VyU2VsZWN0b3I6OmFkb3B0U2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3ImIHNl
bGVjdG9yVmVjdG9yKQogewogICAgIENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0ID0gZmFz
dE5ldzxDU1NTZWxlY3Rvckxpc3Q+KCk7CiAgICAgc2VsZWN0b3JMaXN0LT5hZG9wdFNlbGVjdG9y
VmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXJWYWx1ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaApp
bmRleCBjMzJhNTdkZDY4Nzk5OGRlZDZjMjQwMWY0NGRkMzMxOTRhMmMyOTU0Li5hNzM2YWJiODlm
OTJkYTM3YWU4NmIzNDg5MTc1ZjFkODA3MTVmMTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
clZhbHVlcy5oCkBAIC0xMDQsNiArMTA0LDEwIEBAIHB1YmxpYzoKICAgICBPd25QdHI8Q1NTUGFy
c2VyVmFsdWVMaXN0PiBhcmdzOwogfTsKIAorY2xhc3MgQ1NTUGFyc2VyU2VsZWN0b3I7CisKK3R5
cGVkZWYgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiBDU1NTZWxlY3RvclZlY3Rv
cjsKKwogY2xhc3MgQ1NTUGFyc2VyU2VsZWN0b3IgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgpAQCAtMTIwLDcgKzEyNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJl
bGF0aW9uKENTU1NlbGVjdG9yOjpSZWxhdGlvbiB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5tX3JlbGF0
aW9uID0gdmFsdWU7IH0KICAgICB2b2lkIHNldEZvclBhZ2UoKSB7IG1fc2VsZWN0b3ItPnNldEZv
clBhZ2UoKTsgfQogCi0gICAgdm9pZCBhZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8
Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9yVmVjdG9yKTsKKyAgICB2b2lkIGFkb3B0U2Vs
ZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3ImKTsKIAogICAgIENTU1NlbGVjdG9yOjpQc2V1
ZG9UeXBlIHBzZXVkb1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yLT5wc2V1ZG9UeXBl
KCk7IH0KICAgICBib29sIGlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBt
X3NlbGVjdG9yLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlbGVjdG9yTGlzdC5jcHAKaW5kZXggZjgzMjNlMDAxODI0NGRhZWMxM2M0MWI1YTk3YWI1YzU2
MTllZmYzMy4uM2NmMDIwYTcyMGE3NzE0ZmMzNmJkODNlNjk3YWRhOWE1MjhhYzMyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBD
U1NTZWxlY3Rvckxpc3Q6OmFkb3B0KENTU1NlbGVjdG9yTGlzdCYgbGlzdCkKICAgICBsaXN0Lm1f
c2VsZWN0b3JBcnJheSA9IDA7CiB9CiAKLXZvaWQgQ1NTU2VsZWN0b3JMaXN0OjphZG9wdFNlbGVj
dG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9yVmVj
dG9yKQordm9pZCBDU1NTZWxlY3Rvckxpc3Q6OmFkb3B0U2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0
b3JWZWN0b3ImIHNlbGVjdG9yVmVjdG9yKQogewogICAgIGRlbGV0ZVNlbGVjdG9ycygpOwogICAg
IGNvbnN0IHNpemVfdCB2ZWN0b3JTaXplID0gc2VsZWN0b3JWZWN0b3Iuc2l6ZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5oCmluZGV4IDg5ODYwZWUwOTA5MGQ2YTE5YTJjYjhjMmU3
YjQ0YjgyMDUzN2U4MGUuLmQ3MDQ1NGI3Y2E1YWMzYzU5Mjg2M2Y4ZDBhNWM0YWMyYWQyMjlhMmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3JMaXN0LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNp
Zm5kZWYgQ1NTU2VsZWN0b3JMaXN0X2gKICNkZWZpbmUgQ1NTU2VsZWN0b3JMaXN0X2gKIAorI2lu
Y2x1ZGUgIkNTU1BhcnNlclZhbHVlcy5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDcgKzQzLDcgQEAgcHVibGljOgogICAgIH5DU1NTZWxl
Y3Rvckxpc3QoKTsKIAogICAgIHZvaWQgYWRvcHQoQ1NTU2VsZWN0b3JMaXN0JiBsaXN0KTsKLSAg
ICB2b2lkIGFkb3B0U2VsZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rv
cj4gPiYgc2VsZWN0b3JWZWN0b3IpOworICAgIHZvaWQgYWRvcHRTZWxlY3RvclZlY3RvcihDU1NT
ZWxlY3RvclZlY3RvciYpOwogCiAgICAgQ1NTU2VsZWN0b3IqIGZpcnN0KCkgY29uc3QgeyByZXR1
cm4gbV9zZWxlY3RvckFycmF5ID8gbV9zZWxlY3RvckFycmF5IDogMDsgfQogICAgIHN0YXRpYyBD
U1NTZWxlY3RvciogbmV4dChDU1NTZWxlY3RvciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL1NWR0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2Vy
LmNwcAppbmRleCBkMDZiYjIwM2JhNzY1MzYzZGU1MGZlZjA3ODAzMGMxYWM2OTZhOGJiLi5jN2Vj
NmQ5Zjk0MTQzMTkxZmE2YzFhZTI0NWQ4ZmQ2NmJhZTYzODgyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZH
Q1NTUGFyc2VyLmNwcApAQCAtMjgxLDcgKzI4MSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNW
R1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAg
IHJvbGxiYWNrTGFzdFByb3BlcnRpZXMoMSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KLSAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzLmxh
c3QoKS52YWx1ZSgpOworICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNlZFByb3BlcnRp
ZXMtPmxhc3QoKS52YWx1ZSgpOwogICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmtl
ck1pZCwgdmFsdWUsIGltcG9ydGFudCk7CiAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5
TWFya2VyRW5kLCB2YWx1ZSwgaW1wb3J0YW50KTsKICAgICAgICAgbV9pbXBsaWNpdFNob3J0aGFu
ZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAppbmRleCAzNTg3MTk0MjAwYTlmNzk1
NzNiN2VhODRiMDUxNjVlZTgwOGI0OTU2Li4wM2VmYzNhMzRlNTE3ZWViOGI4NDUzZGY4ZmIyNjJm
YzA0MDhhNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcApAQCAtMzU5LDcgKzM1OSw3IEBA
IHZvaWQgU3R5bGVSdWxlTWVkaWE6OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlP
YmplY3RJbmZvKiBtZW1vcnlPYmplY3RJCiAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIo
bV9tZWRpYVF1ZXJpZXMpOwogfQogCi1TdHlsZVJ1bGVSZWdpb246OlN0eWxlUnVsZVJlZ2lvbihW
ZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBzZWxlY3RvcnMsIFZlY3RvcjxSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykKK1N0eWxlUnVsZVJlZ2lvbjo6U3R5bGVS
dWxlUmVnaW9uKENTU1NlbGVjdG9yVmVjdG9yKiBzZWxlY3RvcnMsIFZlY3RvcjxSZWZQdHI8U3R5
bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykKICAgICA6IFN0eWxlUnVsZUJsb2NrKFJlZ2lvbiwg
YWRvcHRSdWxlcykKIHsKICAgICBtX3NlbGVjdG9yTGlzdC5hZG9wdFNlbGVjdG9yVmVjdG9yKCpz
ZWxlY3RvcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCmluZGV4IDc3YmQyZGM2M2U1NzlhMTZmYTY4
NDNkN2UwNWU5Y2Q3OThiNjE5N2MuLjdiNjAyNTA0MmExOThlYzZlZDY2ZDQ4YjFhMjdhM2Q5OTJk
MDA5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBwdWJsaWM6
CiAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvcGVydGllcy5nZXQoKTsgfQogICAgIFN0eWxlUHJvcGVydHlTZXQqIG11dGFibGVQcm9w
ZXJ0aWVzKCk7CiAgICAgCi0gICAgdm9pZCBwYXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3Rv
cjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlz
dC5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KKyAgICB2b2lkIHBhcnNlckFkb3B0
U2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3ImIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9y
TGlzdC5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KICAgICB2b2lkIHdyYXBwZXJB
ZG9wdFNlbGVjdG9yTGlzdChDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9y
TGlzdC5hZG9wdChzZWxlY3RvcnMpOyB9CiAgICAgdm9pZCBzZXRQcm9wZXJ0aWVzKFBhc3NSZWZQ
dHI8U3R5bGVQcm9wZXJ0eVNldD4pOwogCkBAIC0xNDksNyArMTQ5LDcgQEAgcHVibGljOgogICAg
IGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3By
b3BlcnRpZXMuZ2V0KCk7IH0KICAgICBTdHlsZVByb3BlcnR5U2V0KiBtdXRhYmxlUHJvcGVydGll
cygpOwogCi0gICAgdm9pZCBwYXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8
Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdFNl
bGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KKyAgICB2b2lkIHBhcnNlckFkb3B0U2VsZWN0b3JW
ZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3ImIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5hZG9w
dFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KICAgICB2b2lkIHdyYXBwZXJBZG9wdFNlbGVj
dG9yTGlzdChDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5hZG9w
dChzZWxlY3RvcnMpOyB9CiAgICAgdm9pZCBzZXRQcm9wZXJ0aWVzKFBhc3NSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4pOwogCkBAIC0yMDQsNyArMjA0LDcgQEAgcHJpdmF0ZToKIAogY2xhc3MgU3R5
bGVSdWxlUmVnaW9uIDogcHVibGljIFN0eWxlUnVsZUJsb2NrIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVSZWdpb24+IGNyZWF0ZShWZWN0b3I8T3duUHRyPENTU1Bh
cnNlclNlbGVjdG9yPiA+KiBzZWxlY3RvcnMsIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4g
PiYgYWRvcHRSdWxlcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVSZWdpb24+IGNy
ZWF0ZShDU1NTZWxlY3RvclZlY3Rvciogc2VsZWN0b3JzLCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVs
ZUJhc2U+ID4mIGFkb3B0UnVsZXMpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFN0eWxlUnVsZVJlZ2lvbihzZWxlY3RvcnMsIGFkb3B0UnVsZXMpKTsKICAgICB9CkBAIC0yMTYs
NyArMjE2LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBTdHlsZVJ1bGVSZWdp
b24oVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiosIFZlY3RvcjxSZWZQdHI8U3R5
bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcyk7CisgICAgU3R5bGVSdWxlUmVnaW9uKENTU1NlbGVj
dG9yVmVjdG9yKiwgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBhZG9wdFJ1bGVzKTsK
ICAgICBTdHlsZVJ1bGVSZWdpb24oY29uc3QgU3R5bGVSdWxlUmVnaW9uJik7CiAgICAgCiAgICAg
Q1NTU2VsZWN0b3JMaXN0IG1fc2VsZWN0b3JMaXN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157389</attachid>
            <date>2012-08-08 22:49:11 -0700</date>
            <delta_ts>2012-08-08 23:33:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93574-20120809154843.patch</filename>
            <type>text/plain</type>
            <size>31568</size>
            <attacher name="Shane Stephens">shanestephens</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzZjMGZhMDI2NTM4MDRj
NDMyZGRiNDBlZmEwYTkyMDk5ZWRkNzljNC4uZDZlNGUwYWFlMDgzMzZjMGYwOWEzYjM5NjQ0ZTVj
M2M3OWE2MDU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc1IEBACiAyMDEyLTA4LTA5ICBTaGFu
ZSBTdGVwaGVucyAgPHNoYW5lc3RlcGhlbnNAZ29vZ2xlLmNvbT4KIAorICAgICAgICBDb252ZXJ0
IENTU1BhcnNlcidzIG1fcmV1c2FibGVTZWxlY3RvclZlY3RvciB0byBPd25QdHIgYW5kIHJlbmFt
ZSB0byBtX3NlbGVjdG9yVmVjdG9yLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTM1NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGlzIHByZXBhcmF0b3J5IHdvcmsgZm9yIENTUyBIaWVyYXJjaGll
cyAoc2VlIHdrYi51Zy83OTkzOSkuCisgICAgICAgIENTUyBIaWVyYXJjaGllcyB3b3JrcyBieSBw
dXNoaW5nIHNlbGVjdG9yVmVjdG9ycyBvbnRvIGEgc3RhY2sgd2hpbGUgbmVzdGVkIHNlbGVjdG9y
VmVjdG9ycyBhcmUgcGFyc2VkLgorICAgICAgICBGb3IgdGhpcyByZWFzb24sIHRoZSBzZWxlY3Rv
clZlY3RvciBpbiBDU1NQYXJzZXIgY2FuJ3QgYmUgcmUtdXNlZCBiZXR3ZWVuIHNlbGVjdG9yIHBh
cnNlcy4gVGhpcyBwYXRjaAorICAgICAgICB3cmFwcyB0aGUgc2VsZWN0b3JWZWN0b3IgaW4gYW4g
T3duUHRyIGFuZCByZWNyZWF0ZXMgaXQgd2l0aCBlYWNoIG5ldyBwYXJzZWQgc2VsZWN0b3IuCisK
KyAgICAgICAgU2ltaWxhcmx5LCBDU1NQYXJzZXI6Om1fcGFyc2VkUHJvcGVydGllcyBpcyBjb252
ZXJ0ZWQgZnJvbSBhIGRpcmVjdCBQYXJzZWRQcm9wZXJ0eVZlY3RvciBpbmNsdWRlZAorICAgICAg
ICBhcyBhIG1lbWJlciBvZiBDU1NQYXJzZXIgdG8gYW4gT3duUHRyLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGEgQ1NTU2VsZWN0b3JWZWN0b3IgdHlwZWRlZiB0byBzaW1w
bGlmeSBhbmQgaW1wcm92ZSByZWFkYWJpbGl0eSBvZiAKKyAgICAgICAgdHlwZSBzaWduYXR1cmVz
IGluIGFuZCBhcm91bmQgQ1NTUGFyc2VyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlz
IHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICog
Y3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6Q1NTUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUHJvcGVydHlTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnJvbGxiYWNrTGFzdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpjbGVhclByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZTRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZsb3dU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ1NlbGVj
dG9yVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6c2lua0Zsb2F0aW5nU2Vs
ZWN0b3JWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVQYWdlUnVsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OnNldFJldXNhYmxlUmVnaW9uU2VsZWN0b3JWZWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmRlbGV0ZUZvbnRGYWNlT25seVZhbHVl
cyk6CisKKyAgICAgICAgbV9yZXVzYWJsZVNlbGVjdG9yVmVjdG9yIHJlbmFtZWQgdG8gbV9zZWxl
Y3RvclZlY3RvciBhbmQgd3JhcHBlZCBpbiBPd25QdHIuCisgICAgICAgIG1fcGFyc2VkUHJvcGVy
dGllcyB3cmFwcGVkIGluIE93blB0ci4KKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Omhhc1Byb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpzZWxlY3RvclZlY3Rvcik6IGZ1bmN0aW9uIHJlbmFtZWQgZnJvbSByZXVz
YWJsZVNlbGVjdG9yVmVjdG9yCisgICAgICAgIChDU1NQYXJzZXIpOiAKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cmV1c2FibGVSZWdpb25TZWxlY3RvclZlY3Rvcik6CisgICAgICAgICog
Y3NzL0NTU1BhcnNlclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJTZWxl
Y3Rvcjo6YWRvcHRTZWxlY3RvclZlY3Rvcik6CisgICAgICAgICogY3NzL0NTU1BhcnNlclZhbHVl
cy5oOiBDU1NTZWxlY3RvclZlY3RvciB0eXBlZGVmIGFkZGVkCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKENTU1BhcnNlclNlbGVjdG9yKToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3JM
aXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yTGlzdDo6YWRvcHRTZWxlY3Rv
clZlY3Rvcik6CisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yTGlzdC5oOgorICAgICAgICAoQ1NT
U2VsZWN0b3JMaXN0KToKKyAgICAgICAgKiBjc3MvU1ZHQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZSk6CisgICAgICAgICogY3NzL1N0eWxl
UnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVSZWdpb246OlN0eWxlUnVsZVJl
Z2lvbik6CisgICAgICAgICogY3NzL1N0eWxlUnVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSdWxlOjpwYXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUnVsZVBhZ2U6OnBhcnNlckFkb3B0U2VsZWN0b3JWZWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSdWxlUmVnaW9uOjpjcmVhdGUpOgorICAgICAgICAoU3R5bGVSdWxlUmVnaW9uKToK
KworMjAxMi0wOC0wOSAgU2hhbmUgU3RlcGhlbnMgIDxzaGFuZXN0ZXBoZW5zQGdvb2dsZS5jb20+
CisKICAgICAgICAgQ29tcGlsZSBmbGFnIGZvciBDU1MgSGllcmFyY2hpZXMKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyNDMzCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
R3JhbW1hci55CmluZGV4IDk5NjhlNzY2MDA3ZWVmMTdhYTE2OTZmYjAyZTRmZjc0ZDM0MmYxMDIu
LjI5ZmFiNGZmZWRkNjRhZTlkOTE2MGM3ZjQzOGVjNmI1MDFkMzMwZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYW1tYXIueQpAQCAtNzAsNyArNzAsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
ICAgIFN0eWxlUnVsZUJhc2UqIHJ1bGU7CiAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNl
PiA+KiBydWxlTGlzdDsKICAgICBDU1NQYXJzZXJTZWxlY3Rvciogc2VsZWN0b3I7Ci0gICAgVmVj
dG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2VsZWN0b3JMaXN0OworICAgIENTU1Nl
bGVjdG9yVmVjdG9yKiBzZWxlY3Rvckxpc3Q7CiAgICAgQ1NTU2VsZWN0b3I6Ok1hcmdpbkJveFR5
cGUgbWFyZ2luQm94OwogICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbjsKICAgICBN
ZWRpYVF1ZXJ5U2V0KiBtZWRpYUxpc3Q7CkBAIC0zMzMsOSArMzMzLDkgQEAgd2Via2l0X3ZhbHVl
OgogICAgIFdFQktJVF9WQUxVRV9TWU0gJ3snIG1heWJlX3NwYWNlIGV4cHIgJ30nIHsKICAgICAg
ICAgaWYgKCQ0KSB7CiAgICAgICAgICAgICBwYXJzZXItPm1fdmFsdWVMaXN0ID0gcGFyc2VyLT5z
aW5rRmxvYXRpbmdWYWx1ZUxpc3QoJDQpOwotICAgICAgICAgICAgaW50IG9sZFBhcnNlZFByb3Bl
cnRpZXMgPSBwYXJzZXItPm1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7CisgICAgICAgICAgICBp
bnQgb2xkUGFyc2VkUHJvcGVydGllcyA9IHBhcnNlci0+bV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXpl
KCk7CiAgICAgICAgICAgICBpZiAoIXBhcnNlci0+cGFyc2VWYWx1ZShwYXJzZXItPm1faWQsIHBh
cnNlci0+bV9pbXBvcnRhbnQpKQotICAgICAgICAgICAgICAgIHBhcnNlci0+cm9sbGJhY2tMYXN0
UHJvcGVydGllcyhwYXJzZXItPm1fcGFyc2VkUHJvcGVydGllcy5zaXplKCkgLSBvbGRQYXJzZWRQ
cm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBwYXJzZXItPnJvbGxiYWNrTGFzdFByb3BlcnRp
ZXMocGFyc2VyLT5tX3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKSAtIG9sZFBhcnNlZFByb3BlcnRp
ZXMpOwogICAgICAgICAgICAgcGFyc2VyLT5tX3ZhbHVlTGlzdCA9IG51bGxwdHI7CiAgICAgICAg
IH0KICAgICB9CkBAIC05MTIsNyArOTEyLDcgQEAgcnVsZXNldDoKIHNlbGVjdG9yX2xpc3Q6CiAg
ICAgc2VsZWN0b3IgJXByZWMgVU5JTVBPUlRBTlRfVE9LIHsKICAgICAgICAgaWYgKCQxKSB7Ci0g
ICAgICAgICAgICAkJCA9IHBhcnNlci0+cmV1c2FibGVTZWxlY3RvclZlY3RvcigpOworICAgICAg
ICAgICAgJCQgPSBwYXJzZXItPnNlbGVjdG9yVmVjdG9yKCk7CiAgICAgICAgICAgICAkJC0+c2hy
aW5rKDApOwogICAgICAgICAgICAgJCQtPmFwcGVuZChwYXJzZXItPnNpbmtGbG9hdGluZ1NlbGVj
dG9yKCQxKSk7CiAgICAgICAgICAgICBwYXJzZXItPnVwZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQ
b3NpdGlvbigpOwpAQCAtMTI0OCw3ICsxMjQ4LDcgQEAgcHNldWRvOgogICAgICAgICAgICAgJCQg
PSBwYXJzZXItPmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKTsKICAgICAgICAgICAgICQkLT5zZXRN
YXRjaChDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpOwogCi0gICAgICAgICAgICBWZWN0b3I8T3du
UHRyPENTU1BhcnNlclNlbGVjdG9yPiA+IHNlbGVjdG9yVmVjdG9yOworICAgICAgICAgICAgQ1NT
U2VsZWN0b3JWZWN0b3Igc2VsZWN0b3JWZWN0b3I7CiAgICAgICAgICAgICBzZWxlY3RvclZlY3Rv
ci5hcHBlbmQocGFyc2VyLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkNCkpOwogICAgICAgICAgICAg
JCQtPmFkb3B0U2VsZWN0b3JWZWN0b3Ioc2VsZWN0b3JWZWN0b3IpOwogCkBAIC0xMzM0LDEwICsx
MzM0LDEwIEBAIGRlY2xhcmF0aW9uOgogICAgICAgICBib29sIGlzUHJvcGVydHlQYXJzZWQgPSBm
YWxzZTsKICAgICAgICAgaWYgKCQxICYmICQ0KSB7CiAgICAgICAgICAgICBwYXJzZXItPm1fdmFs
dWVMaXN0ID0gcGFyc2VyLT5zaW5rRmxvYXRpbmdWYWx1ZUxpc3QoJDQpOwotICAgICAgICAgICAg
aW50IG9sZFBhcnNlZFByb3BlcnRpZXMgPSBwYXJzZXItPm1fcGFyc2VkUHJvcGVydGllcy5zaXpl
KCk7CisgICAgICAgICAgICBpbnQgb2xkUGFyc2VkUHJvcGVydGllcyA9IHBhcnNlci0+bV9wYXJz
ZWRQcm9wZXJ0aWVzLT5zaXplKCk7CiAgICAgICAgICAgICAkJCA9IHBhcnNlci0+cGFyc2VWYWx1
ZShzdGF0aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPigkMSksICQ1KTsKICAgICAgICAgICAgIGlmICgh
JCQpCi0gICAgICAgICAgICAgICAgcGFyc2VyLT5yb2xsYmFja0xhc3RQcm9wZXJ0aWVzKHBhcnNl
ci0+bV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSAtIG9sZFBhcnNlZFByb3BlcnRpZXMpOworICAg
ICAgICAgICAgICAgIHBhcnNlci0+cm9sbGJhY2tMYXN0UHJvcGVydGllcyhwYXJzZXItPm1fcGFy
c2VkUHJvcGVydGllcy0+c2l6ZSgpIC0gb2xkUGFyc2VkUHJvcGVydGllcyk7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgaXNQcm9wZXJ0eVBhcnNlZCA9IHRydWU7CiAgICAgICAg
ICAgICBwYXJzZXItPm1fdmFsdWVMaXN0ID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5j
cHAKaW5kZXggM2VhNjQ0N2ZmN2U1ZDk0YjE2ZjRhMzhiZDdhOWQwY2YzZjlmNWJlZC4uYzRmYWFk
MTc2MTY0MjBkZmJhNjRhYjA4ODAzNDViMGUwMDU4MDQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAKQEAgLTI0NCw2ICsyNDQsNyBAQCBDU1NQYXJzZXI6OkNTU1BhcnNlcihjb25zdCBDU1NQ
YXJzZXJDb250ZXh0JiBjb250ZXh0KQogICAgICwgbV9pbXBvcnRhbnQoZmFsc2UpCiAgICAgLCBt
X2lkKENTU1Byb3BlcnR5SW52YWxpZCkKICAgICAsIG1fc3R5bGVTaGVldCgwKQorICAgICwgbV9w
YXJzZWRQcm9wZXJ0aWVzKGFkb3B0UHRyKG5ldyBQYXJzZWRQcm9wZXJ0eVZlY3RvcikpCiAgICAg
LCBtX3NlbGVjdG9yTGlzdEZvclBhcnNlU2VsZWN0b3IoMCkKICAgICAsIG1fbnVtUGFyc2VkUHJv
cGVydGllc0JlZm9yZU1hcmdpbkJveChJTlZBTElEX05VTV9QQVJTRURfUFJPUEVSVElFUykKICAg
ICAsIG1faW5QYXJzZVNob3J0aGFuZCgwKQpAQCAtMjYzLDYgKzI2NCw3IEBAIENTU1BhcnNlcjo6
Q1NTUGFyc2VyKGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCiAgICAgLCBtX2xhc3RT
ZWxlY3RvckxpbmVOdW1iZXIoMCkKICAgICAsIG1fYWxsb3dJbXBvcnRSdWxlcyh0cnVlKQogICAg
ICwgbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyh0cnVlKQorICAgICwgbV9zZWxlY3RvclZl
Y3RvcihhZG9wdFB0cihuZXcgQ1NTU2VsZWN0b3JWZWN0b3IpKQogewogI2lmIFlZREVCVUcgPiAw
CiAgICAgY3NzeXlkZWJ1ZyA9IDE7CkBAIC0xMTUyLDkgKzExNTQsOSBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eQogICAgIGJvb2wgb2sgPSBmYWxzZTsKICAgICBpZiAobV9oYXNGb250RmFjZU9u
bHlWYWx1ZXMpCiAgICAgICAgIGRlbGV0ZUZvbnRGYWNlT25seVZhbHVlcygpOwotICAgIGlmICgh
bV9wYXJzZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkgeworICAgIGlmICghbV9wYXJzZWRQcm9wZXJ0
aWVzLT5pc0VtcHR5KCkpIHsKICAgICAgICAgb2sgPSB0cnVlOwotICAgICAgICBkZWNsYXJhdGlv
bi0+YWRkUGFyc2VkUHJvcGVydGllcyhtX3BhcnNlZFByb3BlcnRpZXMpOworICAgICAgICBkZWNs
YXJhdGlvbi0+YWRkUGFyc2VkUHJvcGVydGllcygqbV9wYXJzZWRQcm9wZXJ0aWVzKTsKICAgICAg
ICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgfQogCkBAIC0xMTc1LDcgKzExNzcsNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VDb2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZywgYm9vbCBzdHJpY3QpCiAgICAgaWYgKCFwYXJzZXIucGFyc2VDb2xvcihzdHJpbmcpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDU1NWYWx1ZSogdmFsdWUgPSBwYXJzZXIubV9wYXJz
ZWRQcm9wZXJ0aWVzLmZpcnN0KCkudmFsdWUoKTsKKyAgICBDU1NWYWx1ZSogdmFsdWUgPSBwYXJz
ZXIubV9wYXJzZWRQcm9wZXJ0aWVzLT5maXJzdCgpLnZhbHVlKCk7CiAgICAgaWYgKCF2YWx1ZS0+
aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTExOTMsNyAr
MTE5NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYgc3RyaW5n
KQogICAgIGNzc3l5cGFyc2UodGhpcyk7CiAgICAgbV9ydWxlID0gMDsKIAotICAgIHJldHVybiAh
bV9wYXJzZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSAmJiBtX3BhcnNlZFByb3BlcnRpZXMuZmlyc3Qo
KS5pZCgpID09IENTU1Byb3BlcnR5Q29sb3I7CisgICAgcmV0dXJuICFtX3BhcnNlZFByb3BlcnRp
ZXMtPmlzRW1wdHkoKSAmJiBtX3BhcnNlZFByb3BlcnRpZXMtPmZpcnN0KCkuaWQoKSA9PSBDU1NQ
cm9wZXJ0eUNvbG9yOwogfQogCiBib29sIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihSR0JB
MzImIGNvbG9yLCBjb25zdCBTdHJpbmcmIHN0cmluZywgRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAt
MTI0Myw5ICsxMjQ1LDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oU3R5bGVQ
cm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIGNvbnN0IFN0cmluZyYgc3QKICAgICBib29sIG9rID0g
ZmFsc2U7CiAgICAgaWYgKG1faGFzRm9udEZhY2VPbmx5VmFsdWVzKQogICAgICAgICBkZWxldGVG
b250RmFjZU9ubHlWYWx1ZXMoKTsKLSAgICBpZiAoIW1fcGFyc2VkUHJvcGVydGllcy5pc0VtcHR5
KCkpIHsKKyAgICBpZiAoIW1fcGFyc2VkUHJvcGVydGllcy0+aXNFbXB0eSgpKSB7CiAgICAgICAg
IG9rID0gdHJ1ZTsKLSAgICAgICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMobV9w
YXJzZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRp
ZXMoKm1fcGFyc2VkUHJvcGVydGllcyk7CiAgICAgICAgIGNsZWFyUHJvcGVydGllcygpOwogICAg
IH0KIApAQCAtMTI4MiwxNCArMTI4NCwxNCBAQCBQYXNzT3duUHRyPE1lZGlhUXVlcnk+IENTU1Bh
cnNlcjo6cGFyc2VNZWRpYVF1ZXJ5KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogfQogCiAjaWYgRU5B
QkxFKENTU19WQVJJQUJMRVMpCi1zdGF0aWMgaW5saW5lIHZvaWQgZmlsdGVyUHJvcGVydGllcyhi
b29sIGltcG9ydGFudCwgY29uc3QgQ1NTUGFyc2VyOjpQYXJzZWRQcm9wZXJ0eVZlY3RvciYgaW5w
dXQsIFZlY3RvcjxDU1NQcm9wZXJ0eSwgMjU2PiYgb3V0cHV0LCBzaXplX3QmIHVudXNlZEVudHJp
ZXMsIEJpdEFycmF5PG51bUNTU1Byb3BlcnRpZXM+JiBzZWVuUHJvcGVydGllcywgSGFzaFNldDxB
dG9taWNTdHJpbmc+JiBzZWVuVmFyaWFibGVzKQorc3RhdGljIGlubGluZSB2b2lkIGZpbHRlclBy
b3BlcnRpZXMoYm9vbCBpbXBvcnRhbnQsIGNvbnN0IENTU1BhcnNlcjo6UGFyc2VkUHJvcGVydHlW
ZWN0b3IqIGlucHV0LCBWZWN0b3I8Q1NTUHJvcGVydHksIDI1Nj4mIG91dHB1dCwgc2l6ZV90JiB1
bnVzZWRFbnRyaWVzLCBCaXRBcnJheTxudW1DU1NQcm9wZXJ0aWVzPiYgc2VlblByb3BlcnRpZXMs
IEhhc2hTZXQ8QXRvbWljU3RyaW5nPiYgc2VlblZhcmlhYmxlcykKICNlbHNlCi1zdGF0aWMgaW5s
aW5lIHZvaWQgZmlsdGVyUHJvcGVydGllcyhib29sIGltcG9ydGFudCwgY29uc3QgQ1NTUGFyc2Vy
OjpQYXJzZWRQcm9wZXJ0eVZlY3RvciYgaW5wdXQsIFZlY3RvcjxDU1NQcm9wZXJ0eSwgMjU2PiYg
b3V0cHV0LCBzaXplX3QmIHVudXNlZEVudHJpZXMsIEJpdEFycmF5PG51bUNTU1Byb3BlcnRpZXM+
JiBzZWVuUHJvcGVydGllcykKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWx0ZXJQcm9wZXJ0aWVzKGJv
b2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXI6OlBhcnNlZFByb3BlcnR5VmVjdG9yKiBpbnB1
dCwgVmVjdG9yPENTU1Byb3BlcnR5LCAyNTY+JiBvdXRwdXQsIHNpemVfdCYgdW51c2VkRW50cmll
cywgQml0QXJyYXk8bnVtQ1NTUHJvcGVydGllcz4mIHNlZW5Qcm9wZXJ0aWVzKQogI2VuZGlmCiB7
CiAgICAgLy8gQWRkIHByb3BlcnRpZXMgaW4gcmV2ZXJzZSBvcmRlciBzbyB0aGF0IGhpZ2hlc3Qg
cHJpb3JpdHkgZGVmaW5pdGlvbnMgYXJlIHJlYWNoZWQgZmlyc3QuIER1cGxpY2F0ZSBkZWZpbml0
aW9ucyBjYW4gdGhlbiBiZSBpZ25vcmVkIHdoZW4gZm91bmQuCi0gICAgZm9yIChpbnQgaSA9IGlu
cHV0LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IENTU1Byb3BlcnR5
JiBwcm9wZXJ0eSA9IGlucHV0W2ldOworICAgIGZvciAoaW50IGkgPSBpbnB1dC0+c2l6ZSgpIC0g
MTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0g
aW5wdXQtPmF0KGkpOwogICAgICAgICBpZiAocHJvcGVydHkuaXNJbXBvcnRhbnQoKSAhPSBpbXBv
cnRhbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykK
QEAgLTEzMTMsMTcgKzEzMTUsMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIGZpbHRlclByb3BlcnRp
ZXMoYm9vbCBpbXBvcnRhbnQsIGNvbnN0IENTU1BhcnNlcjo6UGFyc2VkUHJvcGUKIFBhc3NSZWZQ
dHI8U3R5bGVQcm9wZXJ0eVNldD4gQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVByb3BlcnR5U2V0KCkK
IHsKICAgICBCaXRBcnJheTxudW1DU1NQcm9wZXJ0aWVzPiBzZWVuUHJvcGVydGllczsKLSAgICBz
aXplX3QgdW51c2VkRW50cmllcyA9IG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7CisgICAgc2l6
ZV90IHVudXNlZEVudHJpZXMgPSBtX3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKTsKICAgICBWZWN0
b3I8Q1NTUHJvcGVydHksIDI1Nj4gcmVzdWx0cyh1bnVzZWRFbnRyaWVzKTsKIAogICAgIC8vIElt
cG9ydGFudCBwcm9wZXJ0aWVzIGhhdmUgaGlnaGVyIHByaW9yaXR5LCBzbyBhZGQgdGhlbSBmaXJz
dC4gRHVwbGljYXRlIGRlZmluaXRpb25zIGNhbiB0aGVuIGJlIGlnbm9yZWQgd2hlbiBmb3VuZC4K
ICNpZiBFTkFCTEUoQ1NTX1ZBUklBQkxFUykKICAgICBIYXNoU2V0PEF0b21pY1N0cmluZz4gc2Vl
blZhcmlhYmxlczsKLSAgICBmaWx0ZXJQcm9wZXJ0aWVzKHRydWUsIG1fcGFyc2VkUHJvcGVydGll
cywgcmVzdWx0cywgdW51c2VkRW50cmllcywgc2VlblByb3BlcnRpZXMsIHNlZW5WYXJpYWJsZXMp
OwotICAgIGZpbHRlclByb3BlcnRpZXMoZmFsc2UsIG1fcGFyc2VkUHJvcGVydGllcywgcmVzdWx0
cywgdW51c2VkRW50cmllcywgc2VlblByb3BlcnRpZXMsIHNlZW5WYXJpYWJsZXMpOworICAgIGZp
bHRlclByb3BlcnRpZXModHJ1ZSwgbV9wYXJzZWRQcm9wZXJ0aWVzLmdldCgpLCByZXN1bHRzLCB1
bnVzZWRFbnRyaWVzLCBzZWVuUHJvcGVydGllcywgc2VlblZhcmlhYmxlcyk7CisgICAgZmlsdGVy
UHJvcGVydGllcyhmYWxzZSwgbV9wYXJzZWRQcm9wZXJ0aWVzLmdldCgpLCByZXN1bHRzLCB1bnVz
ZWRFbnRyaWVzLCBzZWVuUHJvcGVydGllcywgc2VlblZhcmlhYmxlcyk7CiAjZWxzZQotICAgIGZp
bHRlclByb3BlcnRpZXModHJ1ZSwgbV9wYXJzZWRQcm9wZXJ0aWVzLCByZXN1bHRzLCB1bnVzZWRF
bnRyaWVzLCBzZWVuUHJvcGVydGllcyk7Ci0gICAgZmlsdGVyUHJvcGVydGllcyhmYWxzZSwgbV9w
YXJzZWRQcm9wZXJ0aWVzLCByZXN1bHRzLCB1bnVzZWRFbnRyaWVzLCBzZWVuUHJvcGVydGllcyk7
CisgICAgZmlsdGVyUHJvcGVydGllcyh0cnVlLCBtX3BhcnNlZFByb3BlcnRpZXMuZ2V0KCksIHJl
c3VsdHMsIHVudXNlZEVudHJpZXMsIHNlZW5Qcm9wZXJ0aWVzKTsKKyAgICBmaWx0ZXJQcm9wZXJ0
aWVzKGZhbHNlLCBtX3BhcnNlZFByb3BlcnRpZXMuZ2V0KCksIHJlc3VsdHMsIHVudXNlZEVudHJp
ZXMsIHNlZW5Qcm9wZXJ0aWVzKTsKICNlbmRpZgogICAgIGlmICh1bnVzZWRFbnRyaWVzKQogICAg
ICAgICByZXN1bHRzLnJlbW92ZSgwLCB1bnVzZWRFbnRyaWVzKTsKQEAgLTEzMzMsMTkgKzEzMzUs
MTkgQEAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxl
UHJvcGVydHlTZXQoKQogCiB2b2lkIENTU1BhcnNlcjo6YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9v
bCBpbXBsaWNpdCkKIHsKLSAgICBtX3BhcnNlZFByb3BlcnRpZXMuYXBwZW5kKENTU1Byb3BlcnR5
KHByb3BJZCwgdmFsdWUsIGltcG9ydGFudCwgbV9jdXJyZW50U2hvcnRoYW5kLCBtX2ltcGxpY2l0
U2hvcnRoYW5kIHx8IGltcGxpY2l0KSk7CisgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLT5hcHBlbmQo
Q1NTUHJvcGVydHkocHJvcElkLCB2YWx1ZSwgaW1wb3J0YW50LCBtX2N1cnJlbnRTaG9ydGhhbmQs
IG1faW1wbGljaXRTaG9ydGhhbmQgfHwgaW1wbGljaXQpKTsKIH0KIAogdm9pZCBDU1NQYXJzZXI6
OnJvbGxiYWNrTGFzdFByb3BlcnRpZXMoaW50IG51bSkKIHsKICAgICBBU1NFUlQobnVtID49IDAp
OwotICAgIEFTU0VSVChtX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpID49IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihudW0pKTsKLSAgICBtX3BhcnNlZFByb3BlcnRpZXMuc2hyaW5rKG1fcGFyc2VkUHJv
cGVydGllcy5zaXplKCkgLSBudW0pOworICAgIEFTU0VSVChtX3BhcnNlZFByb3BlcnRpZXMtPnNp
emUoKSA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obnVtKSk7CisgICAgbV9wYXJzZWRQcm9wZXJ0
aWVzLT5zaHJpbmsobV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXplKCkgLSBudW0pOwogfQogCiB2b2lk
IENTU1BhcnNlcjo6Y2xlYXJQcm9wZXJ0aWVzKCkKIHsKLSAgICBtX3BhcnNlZFByb3BlcnRpZXMu
Y2xlYXIoKTsKKyAgICBtX3BhcnNlZFByb3BlcnRpZXMtPmNsZWFyKCk7CiAgICAgbV9udW1QYXJz
ZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94ID0gSU5WQUxJRF9OVU1fUEFSU0VEX1BST1BFUlRJ
RVM7CiAgICAgbV9oYXNGb250RmFjZU9ubHlWYWx1ZXMgPSBmYWxzZTsKIH0KQEAgLTE3NjEsNyAr
MTc2Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElk
LCBib29sIGltcG9ydGFudCkKICAgICAgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgcHJv
cElkKTsKICAgICAgICAgaWYgKG51bSAhPSAxIHx8ICFwYXJzZVZhbHVlKENTU1Byb3BlcnR5T3Zl
cmZsb3dYLCBpbXBvcnRhbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBD
U1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXMubGFzdCgpLnZhbHVlKCk7CisgICAg
ICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy0+bGFzdCgpLnZhbHVlKCk7
CiAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5T3ZlcmZsb3dZLCB2YWx1ZSwgaW1wb3J0
YW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTc4NCw3ICsxNzg2LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgICAgICAgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywgQ1NTUHJvcGVy
dHlCb3JkZXJTcGFjaW5nKTsKICAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZShDU1NQcm9wZXJ0
eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLCBpbXBvcnRhbnQpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2Vk
UHJvcGVydGllcy5sYXN0KCkudmFsdWUoKTsKKyAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9
IG1fcGFyc2VkUHJvcGVydGllcy0+bGFzdCgpLnZhbHVlKCk7CiAgICAgICAgICAgICBhZGRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgdmFsdWUsIGltcG9y
dGFudCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMjQzMSw3ICsy
NDMzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgU2hvcnRoYW5kU2NvcGUgc2NvcGUodGhpcywg
Q1NTUHJvcGVydHlXZWJraXRNYXJnaW5Db2xsYXBzZSk7CiAgICAgICAgICAgICBpZiAoIXBhcnNl
VmFsdWUod2Via2l0TWFyZ2luQ29sbGFwc2VTaG9ydGhhbmQoKS5wcm9wZXJ0aWVzKClbMF0sIGlt
cG9ydGFudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgQ1NT
VmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzLmxhc3QoKS52YWx1ZSgpOworICAgICAg
ICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzLT5sYXN0KCkudmFsdWUo
KTsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KHdlYmtpdE1hcmdpbkNvbGxhcHNlU2hvcnRoYW5k
KCkucHJvcGVydGllcygpWzFdLCB2YWx1ZSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CkBAIC0zMjY0LDcgKzMyNjYsNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2U0VmFsdWVzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25zdCBDU1NQcm9wZXJ0eUlEICpw
cm9wZXJ0aQogICAgICAgICBjYXNlIDE6IHsKICAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZShw
cm9wZXJ0aWVzWzBdLCBpbXBvcnRhbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIENTU1ZhbHVlICp2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy5sYXN0KCku
dmFsdWUoKTsKKyAgICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGll
cy0+bGFzdCgpLnZhbHVlKCk7CiAgICAgICAgICAgICBJbXBsaWNpdFNjb3BlIGltcGxpY2l0U2Nv
cGUodGhpcywgUHJvcGVydHlJbXBsaWNpdCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9w
ZXJ0aWVzWzFdLCB2YWx1ZSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KHBy
b3BlcnRpZXNbMl0sIHZhbHVlLCBpbXBvcnRhbnQpOwpAQCAtMzI3NCwxNyArMzI3NiwxNyBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2U0VmFsdWVzKENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25zdCBD
U1NQcm9wZXJ0eUlEICpwcm9wZXJ0aQogICAgICAgICBjYXNlIDI6IHsKICAgICAgICAgICAgIGlm
ICghcGFyc2VWYWx1ZShwcm9wZXJ0aWVzWzBdLCBpbXBvcnRhbnQpIHx8ICFwYXJzZVZhbHVlKHBy
b3BlcnRpZXNbMV0sIGltcG9ydGFudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgQ1NTVmFsdWUgKnZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzW21fcGFyc2Vk
UHJvcGVydGllcy5zaXplKCkgLSAyXS52YWx1ZSgpOworICAgICAgICAgICAgQ1NTVmFsdWUqIHZh
bHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzLT5hdChtX3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKSAt
IDIpLnZhbHVlKCk7CiAgICAgICAgICAgICBJbXBsaWNpdFNjb3BlIGltcGxpY2l0U2NvcGUodGhp
cywgUHJvcGVydHlJbXBsaWNpdCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVz
WzJdLCB2YWx1ZSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIHZhbHVlID0gbV9wYXJzZWRQcm9w
ZXJ0aWVzW21fcGFyc2VkUHJvcGVydGllcy5zaXplKCkgLSAyXS52YWx1ZSgpOworICAgICAgICAg
ICAgdmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXMtPmF0KG1fcGFyc2VkUHJvcGVydGllcy0+c2l6
ZSgpIC0gMikudmFsdWUoKTsKICAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbM10s
IHZhbHVlLCBpbXBvcnRhbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSAzOiB7CiAgICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWUocHJvcGVydGllc1swXSwg
aW1wb3J0YW50KSB8fCAhcGFyc2VWYWx1ZShwcm9wZXJ0aWVzWzFdLCBpbXBvcnRhbnQpIHx8ICFw
YXJzZVZhbHVlKHByb3BlcnRpZXNbMl0sIGltcG9ydGFudCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgQ1NTVmFsdWUgKnZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0
aWVzW21fcGFyc2VkUHJvcGVydGllcy5zaXplKCkgLSAyXS52YWx1ZSgpOworICAgICAgICAgICAg
Q1NTVmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzLT5hdChtX3BhcnNlZFByb3BlcnRp
ZXMtPnNpemUoKSAtIDIpLnZhbHVlKCk7CiAgICAgICAgICAgICBJbXBsaWNpdFNjb3BlIGltcGxp
Y2l0U2NvcGUodGhpcywgUHJvcGVydHlJbXBsaWNpdCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0
eShwcm9wZXJ0aWVzWzNdLCB2YWx1ZSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNzc4OCw3ICs3NzkwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxvd1RocmVhZChjb25z
dCBTdHJpbmcmIGZsb3dOYW1lKQogCiAgICAgbV9ydWxlID0gMDsKIAotICAgIHJldHVybiAoKG1f
cGFyc2VkUHJvcGVydGllcy5zaXplKCkgPT0gMSkgJiYgKG1fcGFyc2VkUHJvcGVydGllcy5maXJz
dCgpLmlkKCkgPT0gQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bykpOworICAgIHJldHVybiAoKG1f
cGFyc2VkUHJvcGVydGllcy0+c2l6ZSgpID09IDEpICYmIChtX3BhcnNlZFByb3BlcnRpZXMtPmZp
cnN0KCkuaWQoKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dJbnRvKSk7CiB9CiAKIC8vIG5vbmUg
fCA8aWRlbnQ+CkBAIC05NDQ3LDE0ICs5NDQ5LDE0IEBAIFBhc3NPd25QdHI8Q1NTUGFyc2VyU2Vs
ZWN0b3I+IENTU1BhcnNlcjo6c2lua0Zsb2F0aW5nU2VsZWN0b3IoQ1NTUGFyc2VyU2VsZWN0b3Iq
CiAgICAgcmV0dXJuIGFkb3B0UHRyKHNlbGVjdG9yKTsKIH0KIAotVmVjdG9yPE93blB0cjxDU1NQ
YXJzZXJTZWxlY3Rvcj4gPiogQ1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ1NlbGVjdG9yVmVjdG9y
KCkKK0NTU1NlbGVjdG9yVmVjdG9yKiBDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5nU2VsZWN0b3JW
ZWN0b3IoKQogewotICAgIFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHNlbGVj
dG9yVmVjdG9yID0gbmV3IFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID47CisgICAg
Q1NTU2VsZWN0b3JWZWN0b3IqIHNlbGVjdG9yVmVjdG9yID0gbmV3IENTU1NlbGVjdG9yVmVjdG9y
OwogICAgIG1fZmxvYXRpbmdTZWxlY3RvclZlY3RvcnMuYWRkKHNlbGVjdG9yVmVjdG9yKTsKICAg
ICByZXR1cm4gc2VsZWN0b3JWZWN0b3I7CiB9CiAKLVBhc3NPd25QdHI8VmVjdG9yPE93blB0cjxD
U1NQYXJzZXJTZWxlY3Rvcj4gPiA+IENTU1BhcnNlcjo6c2lua0Zsb2F0aW5nU2VsZWN0b3JWZWN0
b3IoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2VsZWN0b3JWZWN0b3IpCitQ
YXNzT3duUHRyPENTU1NlbGVjdG9yVmVjdG9yID4gQ1NTUGFyc2VyOjpzaW5rRmxvYXRpbmdTZWxl
Y3RvclZlY3RvcihDU1NTZWxlY3RvclZlY3Rvciogc2VsZWN0b3JWZWN0b3IpCiB7CiAgICAgaWYg
KHNlbGVjdG9yVmVjdG9yKSB7CiAgICAgICAgIEFTU0VSVChtX2Zsb2F0aW5nU2VsZWN0b3JWZWN0
b3JzLmNvbnRhaW5zKHNlbGVjdG9yVmVjdG9yKSk7CkBAIC05NjQ3LDcgKzk2NDksNyBAQCBTdHls
ZVJ1bGVLZXlmcmFtZXMqIENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVzUnVsZShjb25zdCBTdHJp
bmcmIG5hbWUsIFBhc3NPd25QdAogICAgIHJldHVybiBydWxlUHRyOwogfQogCi1TdHlsZVJ1bGVC
YXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8T3duUHRyPENTU1BhcnNlclNl
bGVjdG9yPiA+KiBzZWxlY3RvcnMpCitTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0
eWxlUnVsZShDU1NTZWxlY3RvclZlY3Rvciogc2VsZWN0b3JzKQogewogICAgIFN0eWxlUnVsZSog
cmVzdWx0ID0gMDsKICAgICBpZiAoc2VsZWN0b3JzKSB7CkBAIC05NjY5LDggKzk2NzEsOCBAQCBT
dHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8T3duUHRyPENT
U1BhcnNlclNlbGVjdG9yPiA+KiBzZQogU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVG
b250RmFjZVJ1bGUoKQogewogICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxsb3dOYW1lc3Bh
Y2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9w
YXJzZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENTU1Byb3BlcnR5JiBwcm9w
ZXJ0eSA9IG1fcGFyc2VkUHJvcGVydGllc1tpXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXplKCk7ICsraSkgeworICAgICAgICBDU1NQcm9wZXJ0
eSYgcHJvcGVydHkgPSBtX3BhcnNlZFByb3BlcnRpZXMtPmF0KGkpOwogICAgICAgICBpZiAocHJv
cGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50ICYmIHByb3BlcnR5LnZhbHVlKCkt
PmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHByb3BlcnR5LndyYXBWYWx1ZUluQ29t
bWFTZXBhcmF0ZWRMaXN0KCk7CiAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5LmlkKCkgPT0gQ1NT
UHJvcGVydHlGb250RmFtaWx5ICYmICghcHJvcGVydHkudmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSB8
fCBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihwcm9wZXJ0eS52YWx1ZSgpKS0+bGVuZ3RoKCkg
IT0gMSkpIHsKQEAgLTk3NjEsNyArOTc2Myw3IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6
Y3JlYXRlUGFnZVJ1bGUoUGFzc093blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gcGFnZVNlbGVjCiAg
ICAgU3R5bGVSdWxlUGFnZSogcGFnZVJ1bGUgPSAwOwogICAgIGlmIChwYWdlU2VsZWN0b3IpIHsK
ICAgICAgICAgUmVmUHRyPFN0eWxlUnVsZVBhZ2U+IHJ1bGUgPSBTdHlsZVJ1bGVQYWdlOjpjcmVh
dGUoKTsKLSAgICAgICAgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiBzZWxlY3Rv
clZlY3RvcjsKKyAgICAgICAgQ1NTU2VsZWN0b3JWZWN0b3Igc2VsZWN0b3JWZWN0b3I7CiAgICAg
ICAgIHNlbGVjdG9yVmVjdG9yLmFwcGVuZChwYWdlU2VsZWN0b3IpOwogICAgICAgICBydWxlLT5w
YXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKICAgICAgICAgcnVsZS0+
c2V0UHJvcGVydGllcyhjcmVhdGVTdHlsZVByb3BlcnR5U2V0KCkpOwpAQCAtOTc3Myw3ICs5Nzc1
LDcgQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVQYWdlUnVsZShQYXNzT3duUHRy
PENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2VsZWMKICAgICByZXR1cm4gcGFnZVJ1bGU7CiB9CiAK
LXZvaWQgQ1NTUGFyc2VyOjpzZXRSZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yKFZlY3RvcjxP
d25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHNlbGVjdG9ycykKK3ZvaWQgQ1NTUGFyc2VyOjpz
ZXRSZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yKENTU1NlbGVjdG9yVmVjdG9yKiBzZWxlY3Rv
cnMpCiB7CiAgICAgaWYgKHNlbGVjdG9ycykKICAgICAgICAgbV9yZXVzYWJsZVJlZ2lvblNlbGVj
dG9yVmVjdG9yLnN3YXAoKnNlbGVjdG9ycyk7CkBAIC05ODA5LDIyICs5ODExLDIyIEBAIFN0eWxl
UnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlTWFyZ2luQXRSdWxlKENTU1NlbGVjdG9yOjpNYXJn
aW5Cb3hUeXBlIC8qIG1hcmdpCiAKIHZvaWQgQ1NTUGFyc2VyOjpzdGFydERlY2xhcmF0aW9uc0Zv
ck1hcmdpbkJveCgpCiB7Ci0gICAgbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94
ID0gbV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKTsKKyAgICBtX251bVBhcnNlZFByb3BlcnRpZXNC
ZWZvcmVNYXJnaW5Cb3ggPSBtX3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKTsKIH0KIAogdm9pZCBD
U1NQYXJzZXI6OmVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpCiB7Ci0gICAgcm9sbGJhY2tM
YXN0UHJvcGVydGllcyhtX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gbV9udW1QYXJzZWRQcm9w
ZXJ0aWVzQmVmb3JlTWFyZ2luQm94KTsKKyAgICByb2xsYmFja0xhc3RQcm9wZXJ0aWVzKG1fcGFy
c2VkUHJvcGVydGllcy0+c2l6ZSgpIC0gbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2lu
Qm94KTsKICAgICBtX251bVBhcnNlZFByb3BlcnRpZXNCZWZvcmVNYXJnaW5Cb3ggPSBJTlZBTElE
X05VTV9QQVJTRURfUFJPUEVSVElFUzsKIH0KIAogdm9pZCBDU1NQYXJzZXI6OmRlbGV0ZUZvbnRG
YWNlT25seVZhbHVlcygpCiB7CiAgICAgQVNTRVJUKG1faGFzRm9udEZhY2VPbmx5VmFsdWVzKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKTsp
IHsKLSAgICAgICAgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wYXJzZWRQcm9wZXJ0aWVzW2ld
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BhcnNlZFByb3BlcnRpZXMtPnNpemUo
KTspIHsKKyAgICAgICAgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wYXJzZWRQcm9wZXJ0aWVz
LT5hdChpKTsKICAgICAgICAgaWYgKHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlGb250VmFy
aWFudCAmJiBwcm9wZXJ0eS52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgICAgICBt
X3BhcnNlZFByb3BlcnRpZXMucmVtb3ZlKGkpOworICAgICAgICAgICAgbV9wYXJzZWRQcm9wZXJ0
aWVzLT5yZW1vdmUoaSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAg
ICArK2k7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggYjY0NjJhNjExMzM1ZWFkNGJiOWNiMzhl
OGQzYTkwMWY1NWM2Y2M5NS4uZGE4OTU2MWZmNjk4NmQ1ZDk4NTRkYTgxOTgxOGM3ZDFkOTRmNDc2
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+LCBi
b29sIGltcG9ydGFudCwgYm9vbCBpbXBsaWNpdCA9IGZhbHNlKTsKICAgICB2b2lkIHJvbGxiYWNr
TGFzdFByb3BlcnRpZXMoaW50IG51bSk7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0aWVzKCkgY29uc3Qg
eyByZXR1cm4gIW1fcGFyc2VkUHJvcGVydGllcy5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc1By
b3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiAhbV9wYXJzZWRQcm9wZXJ0aWVzLT5pc0VtcHR5KCk7
IH0KIAogICAgIGJvb2wgcGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlELCBib29sIGltcG9ydGFudCk7
CiAgICAgYm9vbCBwYXJzZVNob3J0aGFuZChDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHlsZVByb3Bl
cnR5U2hvcnRoYW5kJiwgYm9vbCBpbXBvcnRhbnQpOwpAQCAtMjQ5LDggKzI0OSw4IEBAIHB1Ymxp
YzoKICAgICBDU1NQYXJzZXJTZWxlY3RvciogY3JlYXRlRmxvYXRpbmdTZWxlY3RvcigpOwogICAg
IFBhc3NPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNpbmtGbG9hdGluZ1NlbGVjdG9yKENTU1Bh
cnNlclNlbGVjdG9yKik7CiAKLSAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+
KiBjcmVhdGVGbG9hdGluZ1NlbGVjdG9yVmVjdG9yKCk7Ci0gICAgUGFzc093blB0cjxWZWN0b3I8
T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+ID4gc2lua0Zsb2F0aW5nU2VsZWN0b3JWZWN0b3Io
VmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiopOworICAgIENTU1NlbGVjdG9yVmVj
dG9yKiBjcmVhdGVGbG9hdGluZ1NlbGVjdG9yVmVjdG9yKCk7CisgICAgUGFzc093blB0cjxDU1NT
ZWxlY3RvclZlY3Rvcj4gc2lua0Zsb2F0aW5nU2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0
b3IqKTsKIAogICAgIENTU1BhcnNlclZhbHVlTGlzdCogY3JlYXRlRmxvYXRpbmdWYWx1ZUxpc3Qo
KTsKICAgICBQYXNzT3duUHRyPENTU1BhcnNlclZhbHVlTGlzdD4gc2lua0Zsb2F0aW5nVmFsdWVM
aXN0KENTU1BhcnNlclZhbHVlTGlzdCopOwpAQCAtMjY4LDEwICsyNjgsMTAgQEAgcHVibGljOgog
ICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+IFJ1bGVMaXN0OwogICAg
IFN0eWxlUnVsZUJhc2UqIGNyZWF0ZU1lZGlhUnVsZShNZWRpYVF1ZXJ5U2V0KiwgUnVsZUxpc3Qq
KTsKICAgICBSdWxlTGlzdCogY3JlYXRlUnVsZUxpc3QoKTsKLSAgICBTdHlsZVJ1bGVCYXNlKiBj
cmVhdGVTdHlsZVJ1bGUoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2VsZWN0
b3JzKTsKKyAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVTdHlsZVJ1bGUoQ1NTU2VsZWN0b3JWZWN0
b3IqIHNlbGVjdG9ycyk7CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlRm9udEZhY2VSdWxlKCk7
CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlUGFnZVJ1bGUoUGFzc093blB0cjxDU1NQYXJzZXJT
ZWxlY3Rvcj4gcGFnZVNlbGVjdG9yKTsKLSAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVSZWdpb25S
dWxlKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHJlZ2lvblNlbGVjdG9yLCBS
dWxlTGlzdCogcnVsZXMpOworICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZVJlZ2lvblJ1bGUoQ1NT
U2VsZWN0b3JWZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBSdWxlTGlzdCogcnVsZXMpOwogICAgIFN0
eWxlUnVsZUJhc2UqIGNyZWF0ZU1hcmdpbkF0UnVsZShDU1NTZWxlY3Rvcjo6TWFyZ2luQm94VHlw
ZSk7CiAgICAgdm9pZCBzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwogICAgIHZvaWQg
ZW5kRGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCk7CkBAIC0yOTQsMTAgKzI5NCwxMCBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGludmFsaWRCbG9ja0hpdCgpOwogCi0gICAgVmVjdG9yPE93blB0cjxD
U1NQYXJzZXJTZWxlY3Rvcj4gPiogcmV1c2FibGVTZWxlY3RvclZlY3RvcigpIHsgcmV0dXJuICZt
X3JldXNhYmxlU2VsZWN0b3JWZWN0b3I7IH0KKyAgICBDU1NTZWxlY3RvclZlY3Rvciogc2VsZWN0
b3JWZWN0b3IoKSB7IHJldHVybiBtX3NlbGVjdG9yVmVjdG9yLmdldCgpOyB9CiAKLSAgICB2b2lk
IHNldFJldXNhYmxlUmVnaW9uU2VsZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJT
ZWxlY3Rvcj4gPiogc2VsZWN0b3JzKTsKLSAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVj
dG9yPiA+KiByZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yKCkgeyByZXR1cm4gJm1fcmV1c2Fi
bGVSZWdpb25TZWxlY3RvclZlY3RvcjsgfQorICAgIHZvaWQgc2V0UmV1c2FibGVSZWdpb25TZWxl
Y3RvclZlY3RvcihDU1NTZWxlY3RvclZlY3Rvciogc2VsZWN0b3JzKTsKKyAgICBDU1NTZWxlY3Rv
clZlY3RvciogcmV1c2FibGVSZWdpb25TZWxlY3RvclZlY3RvcigpIHsgcmV0dXJuICZtX3JldXNh
YmxlUmVnaW9uU2VsZWN0b3JWZWN0b3I7IH0KIAogICAgIHZvaWQgdXBkYXRlTGFzdFNlbGVjdG9y
TGluZUFuZFBvc2l0aW9uKCk7CiAgICAgdm9pZCB1cGRhdGVMYXN0TWVkaWFMaW5lKE1lZGlhUXVl
cnlTZXQqKTsKQEAgLTMxNSw4ICszMTUsOSBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFN0eWxlS2V5
ZnJhbWU+IG1fa2V5ZnJhbWU7CiAgICAgT3duUHRyPE1lZGlhUXVlcnk+IG1fbWVkaWFRdWVyeTsK
ICAgICBPd25QdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBtX3ZhbHVlTGlzdDsKKwogICAgIHR5cGVk
ZWYgVmVjdG9yPENTU1Byb3BlcnR5LCAyNTY+IFBhcnNlZFByb3BlcnR5VmVjdG9yOwotICAgIFBh
cnNlZFByb3BlcnR5VmVjdG9yIG1fcGFyc2VkUHJvcGVydGllczsKKyAgICBPd25QdHI8UGFyc2Vk
UHJvcGVydHlWZWN0b3I+IG1fcGFyc2VkUHJvcGVydGllczsKICAgICBDU1NTZWxlY3Rvckxpc3Qq
IG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvcjsKIAogICAgIHVuc2lnbmVkIG1fbnVtUGFy
c2VkUHJvcGVydGllc0JlZm9yZU1hcmdpbkJveDsKQEAgLTQzOCw3ICs0MzksNyBAQCBwcml2YXRl
OgogICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFRdWVyeVNldD4gPiBtX3BhcnNlZE1lZGlhUXVlcnlT
ZXRzOwogICAgIFZlY3RvcjxPd25QdHI8UnVsZUxpc3Q+ID4gbV9wYXJzZWRSdWxlTGlzdHM7CiAg
ICAgSGFzaFNldDxDU1NQYXJzZXJTZWxlY3Rvcio+IG1fZmxvYXRpbmdTZWxlY3RvcnM7Ci0gICAg
SGFzaFNldDxWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+Kj4gbV9mbG9hdGluZ1Nl
bGVjdG9yVmVjdG9yczsKKyAgICBIYXNoU2V0PENTU1NlbGVjdG9yVmVjdG9yKj4gbV9mbG9hdGlu
Z1NlbGVjdG9yVmVjdG9yczsKICAgICBIYXNoU2V0PENTU1BhcnNlclZhbHVlTGlzdCo+IG1fZmxv
YXRpbmdWYWx1ZUxpc3RzOwogICAgIEhhc2hTZXQ8Q1NTUGFyc2VyRnVuY3Rpb24qPiBtX2Zsb2F0
aW5nRnVuY3Rpb25zOwogCkBAIC00NDgsOCArNDQ5LDggQEAgcHJpdmF0ZToKIAogICAgIE93blB0
cjxWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+ID4gPiBtX2Zsb2F0aW5nS2V5ZnJhbWVWZWN0
b3I7CiAKLSAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+IG1fcmV1c2FibGVT
ZWxlY3RvclZlY3RvcjsKLSAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+IG1f
cmV1c2FibGVSZWdpb25TZWxlY3RvclZlY3RvcjsKKyAgICBPd25QdHI8Q1NTU2VsZWN0b3JWZWN0
b3I+IG1fc2VsZWN0b3JWZWN0b3I7CisgICAgQ1NTU2VsZWN0b3JWZWN0b3IgbV9yZXVzYWJsZVJl
Z2lvblNlbGVjdG9yVmVjdG9yOwogCiAgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4gbV9wYXJzZWRD
YWxjdWxhdGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZh
bHVlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAppbmRleCAz
N2EwZDQ1MmM2NWM0NTVlNWM0MTA0ZTU0ZTQ3ODkyZmIyMTU1ZTA0Li4xYWI0ZGZlZmRmNjY3MmQ3
YzBhZGM4NDU0NmIzODg3MDFiZWM3ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFs
dWVzLmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIENTU1BhcnNlclNlbGVjdG9yOjp+Q1NTUGFyc2Vy
U2VsZWN0b3IoKQogICAgIH0KIH0KIAotdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6YWRvcHRTZWxl
Y3RvclZlY3RvcihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+JiBzZWxlY3RvclZl
Y3RvcikKK3ZvaWQgQ1NTUGFyc2VyU2VsZWN0b3I6OmFkb3B0U2VsZWN0b3JWZWN0b3IoQ1NTU2Vs
ZWN0b3JWZWN0b3ImIHNlbGVjdG9yVmVjdG9yKQogewogICAgIENTU1NlbGVjdG9yTGlzdCogc2Vs
ZWN0b3JMaXN0ID0gZmFzdE5ldzxDU1NTZWxlY3Rvckxpc3Q+KCk7CiAgICAgc2VsZWN0b3JMaXN0
LT5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXJWYWx1ZXMuaAppbmRleCBjMzJhNTdkZDY4Nzk5OGRlZDZjMjQwMWY0NGRkMzMxOTRhMmMy
OTU0Li5hNzM2YWJiODlmOTJkYTM3YWU4NmIzNDg5MTc1ZjFkODA3MTVmMTdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlclZhbHVlcy5oCkBAIC0xMDQsNiArMTA0LDEwIEBAIHB1YmxpYzoKICAg
ICBPd25QdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBhcmdzOwogfTsKIAorY2xhc3MgQ1NTUGFyc2Vy
U2VsZWN0b3I7CisKK3R5cGVkZWYgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiBD
U1NTZWxlY3RvclZlY3RvcjsKKwogY2xhc3MgQ1NTUGFyc2VyU2VsZWN0b3IgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtMTIwLDcgKzEyNCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFJlbGF0aW9uKENTU1NlbGVjdG9yOjpSZWxhdGlvbiB2YWx1ZSkgeyBtX3Nl
bGVjdG9yLT5tX3JlbGF0aW9uID0gdmFsdWU7IH0KICAgICB2b2lkIHNldEZvclBhZ2UoKSB7IG1f
c2VsZWN0b3ItPnNldEZvclBhZ2UoKTsgfQogCi0gICAgdm9pZCBhZG9wdFNlbGVjdG9yVmVjdG9y
KFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9yVmVjdG9yKTsKKyAg
ICB2b2lkIGFkb3B0U2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3ImKTsKIAogICAgIENT
U1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHBzZXVkb1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVj
dG9yLT5wc2V1ZG9UeXBlKCk7IH0KICAgICBib29sIGlzVW5rbm93blBzZXVkb0VsZW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdG9yLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50KCk7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5jcHAKaW5kZXggZjgzMjNlMDAxODI0NGRhZWMx
M2M0MWI1YTk3YWI1YzU2MTllZmYzMy4uM2NmMDIwYTcyMGE3NzE0ZmMzNmJkODNlNjk3YWRhOWE1
MjhhYzMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5jcHAKQEAgLTU4LDcg
KzU4LDcgQEAgdm9pZCBDU1NTZWxlY3Rvckxpc3Q6OmFkb3B0KENTU1NlbGVjdG9yTGlzdCYgbGlz
dCkKICAgICBsaXN0Lm1fc2VsZWN0b3JBcnJheSA9IDA7CiB9CiAKLXZvaWQgQ1NTU2VsZWN0b3JM
aXN0OjphZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+
ID4mIHNlbGVjdG9yVmVjdG9yKQordm9pZCBDU1NTZWxlY3Rvckxpc3Q6OmFkb3B0U2VsZWN0b3JW
ZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3ImIHNlbGVjdG9yVmVjdG9yKQogewogICAgIGRlbGV0ZVNl
bGVjdG9ycygpOwogICAgIGNvbnN0IHNpemVfdCB2ZWN0b3JTaXplID0gc2VsZWN0b3JWZWN0b3Iu
c2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5oCmluZGV4IDg5ODYwZWUwOTA5
MGQ2YTE5YTJjYjhjMmU3YjQ0YjgyMDUzN2U4MGUuLmQ3MDQ1NGI3Y2E1YWMzYzU5Mjg2M2Y4ZDBh
NWM0YWMyYWQyMjlhMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rv
ckxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3JMaXN0LmgKQEAgLTI2
LDYgKzI2LDcgQEAKICNpZm5kZWYgQ1NTU2VsZWN0b3JMaXN0X2gKICNkZWZpbmUgQ1NTU2VsZWN0
b3JMaXN0X2gKIAorI2luY2x1ZGUgIkNTU1BhcnNlclZhbHVlcy5oIgogI2luY2x1ZGUgIkNTU1Nl
bGVjdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDcgKzQzLDcgQEAgcHVibGlj
OgogICAgIH5DU1NTZWxlY3Rvckxpc3QoKTsKIAogICAgIHZvaWQgYWRvcHQoQ1NTU2VsZWN0b3JM
aXN0JiBsaXN0KTsKLSAgICB2b2lkIGFkb3B0U2VsZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0cjxD
U1NQYXJzZXJTZWxlY3Rvcj4gPiYgc2VsZWN0b3JWZWN0b3IpOworICAgIHZvaWQgYWRvcHRTZWxl
Y3RvclZlY3RvcihDU1NTZWxlY3RvclZlY3RvciYpOwogCiAgICAgQ1NTU2VsZWN0b3IqIGZpcnN0
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RvckFycmF5ID8gbV9zZWxlY3RvckFycmF5IDogMDsg
fQogICAgIHN0YXRpYyBDU1NTZWxlY3RvciogbmV4dChDU1NTZWxlY3RvciopOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU1ZHQ1NTUGFyc2VyLmNwcAppbmRleCBkMDZiYjIwM2JhNzY1MzYzZGU1MGZlZjA3ODAzMGMx
YWM2OTZhOGJiLi5jN2VjNmQ5Zjk0MTQzMTkxZmE2YzFhZTI0NWQ4ZmQ2NmJhZTYzODgyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcApAQCAtMjgxLDcgKzI4MSw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICAgICAgICAgIHJvbGxiYWNrTGFzdFByb3BlcnRpZXMoMSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJz
ZWRQcm9wZXJ0aWVzLmxhc3QoKS52YWx1ZSgpOworICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBt
X3BhcnNlZFByb3BlcnRpZXMtPmxhc3QoKS52YWx1ZSgpOwogICAgICAgICBhZGRQcm9wZXJ0eShD
U1NQcm9wZXJ0eU1hcmtlck1pZCwgdmFsdWUsIGltcG9ydGFudCk7CiAgICAgICAgIGFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5TWFya2VyRW5kLCB2YWx1ZSwgaW1wb3J0YW50KTsKICAgICAgICAgbV9p
bXBsaWNpdFNob3J0aGFuZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcAppbmRleCAz
NTg3MTk0MjAwYTlmNzk1NzNiN2VhODRiMDUxNjVlZTgwOGI0OTU2Li4wM2VmYzNhMzRlNTE3ZWVi
OGI4NDUzZGY4ZmIyNjJmYzA0MDhhNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNwcApAQCAt
MzU5LDcgKzM1OSw3IEBAIHZvaWQgU3R5bGVSdWxlTWVkaWE6OnJlcG9ydERlc2NlbmRhbnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJCiAgICAgaW5mby5hZGRJbnN0
cnVtZW50ZWRNZW1iZXIobV9tZWRpYVF1ZXJpZXMpOwogfQogCi1TdHlsZVJ1bGVSZWdpb246OlN0
eWxlUnVsZVJlZ2lvbihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBzZWxlY3Rv
cnMsIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykKK1N0eWxlUnVs
ZVJlZ2lvbjo6U3R5bGVSdWxlUmVnaW9uKENTU1NlbGVjdG9yVmVjdG9yKiBzZWxlY3RvcnMsIFZl
Y3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykKICAgICA6IFN0eWxlUnVs
ZUJsb2NrKFJlZ2lvbiwgYWRvcHRSdWxlcykKIHsKICAgICBtX3NlbGVjdG9yTGlzdC5hZG9wdFNl
bGVjdG9yVmVjdG9yKCpzZWxlY3RvcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCmluZGV4IDc3YmQy
ZGM2M2U1NzlhMTZmYTY4NDNkN2UwNWU5Y2Q3OThiNjE5N2MuLjdiNjAyNTA0MmExOThlYzZlZDY2
ZDQ4YjFhMjdhM2Q5OTJkMDA5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKQEAgLTEwMCw3ICsx
MDAsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydGllcygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5nZXQoKTsgfQogICAgIFN0eWxlUHJvcGVydHlT
ZXQqIG11dGFibGVQcm9wZXJ0aWVzKCk7CiAgICAgCi0gICAgdm9pZCBwYXJzZXJBZG9wdFNlbGVj
dG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9ycykg
eyBtX3NlbGVjdG9yTGlzdC5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KKyAgICB2
b2lkIHBhcnNlckFkb3B0U2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3ImIHNlbGVjdG9y
cykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KICAg
ICB2b2lkIHdyYXBwZXJBZG9wdFNlbGVjdG9yTGlzdChDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9y
cykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdChzZWxlY3RvcnMpOyB9CiAgICAgdm9pZCBzZXRQcm9w
ZXJ0aWVzKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4pOwogCkBAIC0xNDksNyArMTQ5LDcg
QEAgcHVibGljOgogICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRpZXMoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnRpZXMuZ2V0KCk7IH0KICAgICBTdHlsZVByb3BlcnR5U2V0KiBt
dXRhYmxlUHJvcGVydGllcygpOwogCi0gICAgdm9pZCBwYXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9y
KFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9ycykgeyBtX3NlbGVj
dG9yTGlzdC5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KKyAgICB2b2lkIHBhcnNl
ckFkb3B0U2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3ImIHNlbGVjdG9ycykgeyBtX3Nl
bGVjdG9yTGlzdC5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KICAgICB2b2lkIHdy
YXBwZXJBZG9wdFNlbGVjdG9yTGlzdChDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9ycykgeyBtX3Nl
bGVjdG9yTGlzdC5hZG9wdChzZWxlY3RvcnMpOyB9CiAgICAgdm9pZCBzZXRQcm9wZXJ0aWVzKFBh
c3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4pOwogCkBAIC0yMDQsNyArMjA0LDcgQEAgcHJpdmF0
ZToKIAogY2xhc3MgU3R5bGVSdWxlUmVnaW9uIDogcHVibGljIFN0eWxlUnVsZUJsb2NrIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVSZWdpb24+IGNyZWF0ZShWZWN0
b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBzZWxlY3RvcnMsIFZlY3RvcjxSZWZQdHI8
U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHls
ZVJ1bGVSZWdpb24+IGNyZWF0ZShDU1NTZWxlY3RvclZlY3Rvciogc2VsZWN0b3JzLCBWZWN0b3I8
UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpCiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZVJlZ2lvbihzZWxlY3RvcnMsIGFkb3B0UnVsZXMpKTsK
ICAgICB9CkBAIC0yMTYsNyArMjE2LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVwb3J0RGVzY2Vu
ZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJpdmF0ZToKLSAg
ICBTdHlsZVJ1bGVSZWdpb24oVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiosIFZl
Y3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcyk7CisgICAgU3R5bGVSdWxl
UmVnaW9uKENTU1NlbGVjdG9yVmVjdG9yKiwgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+
JiBhZG9wdFJ1bGVzKTsKICAgICBTdHlsZVJ1bGVSZWdpb24oY29uc3QgU3R5bGVSdWxlUmVnaW9u
Jik7CiAgICAgCiAgICAgQ1NTU2VsZWN0b3JMaXN0IG1fc2VsZWN0b3JMaXN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157398</attachid>
            <date>2012-08-08 23:33:39 -0700</date>
            <delta_ts>2012-08-09 19:42:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93574-20120809163311.patch</filename>
            <type>text/plain</type>
            <size>31914</size>
            <attacher name="Shane Stephens">shanestephens</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MTE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzZjMGZhMDI2NTM4MDRj
NDMyZGRiNDBlZmEwYTkyMDk5ZWRkNzljNC4uZWNiODQ3MTIyMTc5NTNhMjE1ZjcwZmE2ZDVlOWFh
MmE5MzdlZjEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc5IEBACiAyMDEyLTA4LTA5ICBTaGFu
ZSBTdGVwaGVucyAgPHNoYW5lc3RlcGhlbnNAZ29vZ2xlLmNvbT4KIAorICAgICAgICBDb252ZXJ0
IENTU1BhcnNlcidzIG1fcmV1c2FibGVTZWxlY3RvclZlY3RvciB0byBPd25QdHIgYW5kIHJlbmFt
ZSB0byBtX3NlbGVjdG9yVmVjdG9yLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTM1NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIGlzIHByZXBhcmF0b3J5IHdvcmsgZm9yIENTUyBIaWVyYXJjaGll
cyAoc2VlIHdrYi51Zy83OTkzOSkuCisgICAgICAgIENTUyBIaWVyYXJjaGllcyB3b3JrcyBieSBw
dXNoaW5nIHNlbGVjdG9yVmVjdG9ycyBvbnRvIGEgc3RhY2sgd2hpbGUgbmVzdGVkIHNlbGVjdG9y
VmVjdG9ycyBhcmUgcGFyc2VkLgorICAgICAgICBGb3IgdGhpcyByZWFzb24sIHRoZSBzZWxlY3Rv
clZlY3RvciBpbiBDU1NQYXJzZXIgY2FuJ3QgYmUgcmUtdXNlZCBiZXR3ZWVuIHNlbGVjdG9yIHBh
cnNlcyB3aXRoaW4gYSBzZXQgb2YKKyAgICAgICAgbmVzdGVkIHNlbGVjdG9ycy4gVGhpcyBwYXRj
aCB3cmFwcyB0aGUgc2VsZWN0b3JWZWN0b3IgaW4gYW4gT3duUHRyIGJ1dCBkb2VzIG5vdCBvdGhl
cndpc2UgbW9kaWZ5IGl0cyB1c2UuCisKKyAgICAgICAgU2ltaWxhcmx5LCBDU1NQYXJzZXI6Om1f
cGFyc2VkUHJvcGVydGllcyBpcyBjb252ZXJ0ZWQgZnJvbSBhIGRpcmVjdCBQYXJzZWRQcm9wZXJ0
eVZlY3RvciBpbmNsdWRlZAorICAgICAgICBhcyBhIG1lbWJlciBvZiBDU1NQYXJzZXIgdG8gYW4g
T3duUHRyLgorCisgICAgICAgIE9uY2UgSGllcmFyY2hpZXMgYXJlIGludHJvZHVjZWQsIHdoZW4g
YSBzZWxlY3RvclZlY3RvciBpcyBzdGFja2VkIGEgbmV3IG9uZSB3aWxsIGJlIGNyZWF0ZWQgCisg
ICAgICAgIGFuZCBzdG9yZWQgaW4gbV9zZWxlY3RvclZlY3RvciAoc2VlIHdrYi51Zy83OTkzOSBm
b3IgY29udGV4dCkuIEhvd2V2ZXIsIGFuIGFjY29tcGFueWluZyB1bnN0YWNraW5nCisgICAgICAg
IG1lY2hhbmlzbSBlbnN1cmVzIHRoYXQgc2VsZWN0b3JWZWN0b3JzIHdpbGwgYmUgcmV1c2VkIGlu
IGFsbCBjaXJjdW1zdGFuY2VzIHdoZXJlIHRoZXkgY3VycmVudGx5IGFyZS4KKworICAgICAgICBU
aGlzIHBhdGNoIGFsc28gaW50cm9kdWNlcyBhIENTU1NlbGVjdG9yVmVjdG9yIHR5cGVkZWYgdG8g
c2ltcGxpZnkgYW5kIGltcHJvdmUgcmVhZGFiaWxpdHkgb2YgCisgICAgICAgIHR5cGUgc2lnbmF0
dXJlcyBpbiBhbmQgYXJvdW5kIENTU1BhcnNlci4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMg
dGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbGl0eS4KKworICAgICAg
ICAqIGNzcy9DU1NHcmFtbWFyLnk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OkNTU1BhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbHRlclByb3BlcnRpZXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVTdHlsZVByb3BlcnR5U2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkUHJvcGVydHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpyb2xsYmFja0xhc3RQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6Y2xlYXJQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2U0VmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VG
bG93VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlRmxvYXRpbmdT
ZWxlY3RvclZlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnNpbmtGbG9hdGlu
Z1NlbGVjdG9yVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlU3R5
bGVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlRm9udEZhY2VSdWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlUGFnZVJ1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpzZXRSZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6c3RhcnREZWNsYXJhdGlvbnNGb3JNYXJnaW5C
b3gpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjplbmREZWNsYXJhdGlvbnNGb3JNYXJn
aW5Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpkZWxldGVGb250RmFjZU9ubHlW
YWx1ZXMpOgorCisgICAgICAgIG1fcmV1c2FibGVTZWxlY3RvclZlY3RvciByZW5hbWVkIHRvIG1f
c2VsZWN0b3JWZWN0b3IgYW5kIHdyYXBwZWQgaW4gT3duUHRyLgorICAgICAgICBtX3BhcnNlZFBy
b3BlcnRpZXMgd3JhcHBlZCBpbiBPd25QdHIuCisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpoYXNQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6c2VsZWN0b3JWZWN0b3IpOiBmdW5jdGlvbiByZW5hbWVkIGZyb20g
cmV1c2FibGVTZWxlY3RvclZlY3RvcgorICAgICAgICAoQ1NTUGFyc2VyKTogCisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OnJldXNhYmxlUmVnaW9uU2VsZWN0b3JWZWN0b3IpOgorICAgICAg
ICAqIGNzcy9DU1NQYXJzZXJWYWx1ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
U2VsZWN0b3I6OmFkb3B0U2VsZWN0b3JWZWN0b3IpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXJW
YWx1ZXMuaDogQ1NTU2VsZWN0b3JWZWN0b3IgdHlwZWRlZiBhZGRlZAorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChDU1NQYXJzZXJTZWxlY3Rvcik6CisgICAgICAgICogY3NzL0NTU1NlbGVj
dG9yTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvckxpc3Q6OmFkb3B0U2Vs
ZWN0b3JWZWN0b3IpOgorICAgICAgICAqIGNzcy9DU1NTZWxlY3Rvckxpc3QuaDoKKyAgICAgICAg
KENTU1NlbGVjdG9yTGlzdCk6CisgICAgICAgICogY3NzL1NWR0NTU1BhcnNlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU1ZHVmFsdWUpOgorICAgICAgICAqIGNzcy9T
dHlsZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlUmVnaW9uOjpTdHlsZVJ1
bGVSZWdpb24pOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUnVsZTo6cGFyc2VyQWRvcHRTZWxlY3RvclZlY3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJ1bGVQYWdlOjpwYXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUnVsZVJlZ2lvbjo6Y3JlYXRlKToKKyAgICAgICAgKFN0eWxlUnVsZVJlZ2lv
bik6CisKKzIwMTItMDgtMDkgIFNoYW5lIFN0ZXBoZW5zICA8c2hhbmVzdGVwaGVuc0Bnb29nbGUu
Y29tPgorCiAgICAgICAgIENvbXBpbGUgZmxhZyBmb3IgQ1NTIEhpZXJhcmNoaWVzCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjQzMwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55IGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYW1tYXIueQppbmRleCA5OTY4ZTc2NjAwN2VlZjE3YWExNjk2ZmIwMmU0ZmY3NGQzNDJm
MTAyLi4yOWZhYjRmZmVkZDY0YWU5ZDkxNjBjN2Y0MzhlYzZiNTAxZDMzMGQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NHcmFtbWFyLnkKQEAgLTcwLDcgKzcwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlOwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
QmFzZT4gPiogcnVsZUxpc3Q7CiAgICAgQ1NTUGFyc2VyU2VsZWN0b3IqIHNlbGVjdG9yOwotICAg
IFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHNlbGVjdG9yTGlzdDsKKyAgICBD
U1NTZWxlY3RvclZlY3Rvciogc2VsZWN0b3JMaXN0OwogICAgIENTU1NlbGVjdG9yOjpNYXJnaW5C
b3hUeXBlIG1hcmdpbkJveDsKICAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb247CiAg
ICAgTWVkaWFRdWVyeVNldCogbWVkaWFMaXN0OwpAQCAtMzMzLDkgKzMzMyw5IEBAIHdlYmtpdF92
YWx1ZToKICAgICBXRUJLSVRfVkFMVUVfU1lNICd7JyBtYXliZV9zcGFjZSBleHByICd9JyB7CiAg
ICAgICAgIGlmICgkNCkgewogICAgICAgICAgICAgcGFyc2VyLT5tX3ZhbHVlTGlzdCA9IHBhcnNl
ci0+c2lua0Zsb2F0aW5nVmFsdWVMaXN0KCQ0KTsKLSAgICAgICAgICAgIGludCBvbGRQYXJzZWRQ
cm9wZXJ0aWVzID0gcGFyc2VyLT5tX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpOworICAgICAgICAg
ICAgaW50IG9sZFBhcnNlZFByb3BlcnRpZXMgPSBwYXJzZXItPm1fcGFyc2VkUHJvcGVydGllcy0+
c2l6ZSgpOwogICAgICAgICAgICAgaWYgKCFwYXJzZXItPnBhcnNlVmFsdWUocGFyc2VyLT5tX2lk
LCBwYXJzZXItPm1faW1wb3J0YW50KSkKLSAgICAgICAgICAgICAgICBwYXJzZXItPnJvbGxiYWNr
TGFzdFByb3BlcnRpZXMocGFyc2VyLT5tX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gb2xkUGFy
c2VkUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgcGFyc2VyLT5yb2xsYmFja0xhc3RQcm9w
ZXJ0aWVzKHBhcnNlci0+bV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXplKCkgLSBvbGRQYXJzZWRQcm9w
ZXJ0aWVzKTsKICAgICAgICAgICAgIHBhcnNlci0+bV92YWx1ZUxpc3QgPSBudWxscHRyOwogICAg
ICAgICB9CiAgICAgfQpAQCAtOTEyLDcgKzkxMiw3IEBAIHJ1bGVzZXQ6CiBzZWxlY3Rvcl9saXN0
OgogICAgIHNlbGVjdG9yICVwcmVjIFVOSU1QT1JUQU5UX1RPSyB7CiAgICAgICAgIGlmICgkMSkg
ewotICAgICAgICAgICAgJCQgPSBwYXJzZXItPnJldXNhYmxlU2VsZWN0b3JWZWN0b3IoKTsKKyAg
ICAgICAgICAgICQkID0gcGFyc2VyLT5zZWxlY3RvclZlY3RvcigpOwogICAgICAgICAgICAgJCQt
PnNocmluaygwKTsKICAgICAgICAgICAgICQkLT5hcHBlbmQocGFyc2VyLT5zaW5rRmxvYXRpbmdT
ZWxlY3RvcigkMSkpOwogICAgICAgICAgICAgcGFyc2VyLT51cGRhdGVMYXN0U2VsZWN0b3JMaW5l
QW5kUG9zaXRpb24oKTsKQEAgLTEyNDgsNyArMTI0OCw3IEBAIHBzZXVkbzoKICAgICAgICAgICAg
ICQkID0gcGFyc2VyLT5jcmVhdGVGbG9hdGluZ1NlbGVjdG9yKCk7CiAgICAgICAgICAgICAkJC0+
c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsKIAotICAgICAgICAgICAgVmVjdG9y
PE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiBzZWxlY3RvclZlY3RvcjsKKyAgICAgICAgICAg
IENTU1NlbGVjdG9yVmVjdG9yIHNlbGVjdG9yVmVjdG9yOwogICAgICAgICAgICAgc2VsZWN0b3JW
ZWN0b3IuYXBwZW5kKHBhcnNlci0+c2lua0Zsb2F0aW5nU2VsZWN0b3IoJDQpKTsKICAgICAgICAg
ICAgICQkLT5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKIApAQCAtMTMzNCwx
MCArMTMzNCwxMCBAQCBkZWNsYXJhdGlvbjoKICAgICAgICAgYm9vbCBpc1Byb3BlcnR5UGFyc2Vk
ID0gZmFsc2U7CiAgICAgICAgIGlmICgkMSAmJiAkNCkgewogICAgICAgICAgICAgcGFyc2VyLT5t
X3ZhbHVlTGlzdCA9IHBhcnNlci0+c2lua0Zsb2F0aW5nVmFsdWVMaXN0KCQ0KTsKLSAgICAgICAg
ICAgIGludCBvbGRQYXJzZWRQcm9wZXJ0aWVzID0gcGFyc2VyLT5tX3BhcnNlZFByb3BlcnRpZXMu
c2l6ZSgpOworICAgICAgICAgICAgaW50IG9sZFBhcnNlZFByb3BlcnRpZXMgPSBwYXJzZXItPm1f
cGFyc2VkUHJvcGVydGllcy0+c2l6ZSgpOwogICAgICAgICAgICAgJCQgPSBwYXJzZXItPnBhcnNl
VmFsdWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oJDEpLCAkNSk7CiAgICAgICAgICAgICBp
ZiAoISQkKQotICAgICAgICAgICAgICAgIHBhcnNlci0+cm9sbGJhY2tMYXN0UHJvcGVydGllcyhw
YXJzZXItPm1fcGFyc2VkUHJvcGVydGllcy5zaXplKCkgLSBvbGRQYXJzZWRQcm9wZXJ0aWVzKTsK
KyAgICAgICAgICAgICAgICBwYXJzZXItPnJvbGxiYWNrTGFzdFByb3BlcnRpZXMocGFyc2VyLT5t
X3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKSAtIG9sZFBhcnNlZFByb3BlcnRpZXMpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGlzUHJvcGVydHlQYXJzZWQgPSB0cnVlOwogICAg
ICAgICAgICAgcGFyc2VyLT5tX3ZhbHVlTGlzdCA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuY3BwCmluZGV4IDNlYTY0NDdmZjdlNWQ5NGIxNmY0YTM4YmQ3YTlkMGNmM2Y5ZjViZWQuLmM0
ZmFhZDE3NjE2NDIwZGZiYTY0YWIwODgwMzQ1YjBlMDA1ODA0ODEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCkBAIC0yNDQsNiArMjQ0LDcgQEAgQ1NTUGFyc2VyOjpDU1NQYXJzZXIoY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKICAgICAsIG1faW1wb3J0YW50KGZhbHNlKQogICAg
ICwgbV9pZChDU1NQcm9wZXJ0eUludmFsaWQpCiAgICAgLCBtX3N0eWxlU2hlZXQoMCkKKyAgICAs
IG1fcGFyc2VkUHJvcGVydGllcyhhZG9wdFB0cihuZXcgUGFyc2VkUHJvcGVydHlWZWN0b3IpKQog
ICAgICwgbV9zZWxlY3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9yKDApCiAgICAgLCBtX251bVBhcnNl
ZFByb3BlcnRpZXNCZWZvcmVNYXJnaW5Cb3goSU5WQUxJRF9OVU1fUEFSU0VEX1BST1BFUlRJRVMp
CiAgICAgLCBtX2luUGFyc2VTaG9ydGhhbmQoMCkKQEAgLTI2Myw2ICsyNjQsNyBAQCBDU1NQYXJz
ZXI6OkNTU1BhcnNlcihjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogICAgICwgbV9s
YXN0U2VsZWN0b3JMaW5lTnVtYmVyKDApCiAgICAgLCBtX2FsbG93SW1wb3J0UnVsZXModHJ1ZSkK
ICAgICAsIG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnModHJ1ZSkKKyAgICAsIG1fc2VsZWN0
b3JWZWN0b3IoYWRvcHRQdHIobmV3IENTU1NlbGVjdG9yVmVjdG9yKSkKIHsKICNpZiBZWURFQlVH
ID4gMAogICAgIGNzc3l5ZGVidWcgPSAxOwpAQCAtMTE1Miw5ICsxMTU0LDkgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHkKICAgICBib29sIG9rID0gZmFsc2U7CiAgICAgaWYgKG1faGFzRm9udEZh
Y2VPbmx5VmFsdWVzKQogICAgICAgICBkZWxldGVGb250RmFjZU9ubHlWYWx1ZXMoKTsKLSAgICBp
ZiAoIW1fcGFyc2VkUHJvcGVydGllcy5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIW1fcGFyc2VkUHJv
cGVydGllcy0+aXNFbXB0eSgpKSB7CiAgICAgICAgIG9rID0gdHJ1ZTsKLSAgICAgICAgZGVjbGFy
YXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMobV9wYXJzZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAg
ZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMoKm1fcGFyc2VkUHJvcGVydGllcyk7CiAg
ICAgICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIH0KIApAQCAtMTE3NSw3ICsxMTc3LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGJvb2wgc3RyaWN0KQogICAgIGlmICghcGFyc2VyLnBhcnNlQ29sb3Ioc3RyaW5nKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTVmFsdWUqIHZhbHVlID0gcGFyc2VyLm1f
cGFyc2VkUHJvcGVydGllcy5maXJzdCgpLnZhbHVlKCk7CisgICAgQ1NTVmFsdWUqIHZhbHVlID0g
cGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcy0+Zmlyc3QoKS52YWx1ZSgpOwogICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMTkz
LDcgKzExOTUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcmIHN0
cmluZykKICAgICBjc3N5eXBhcnNlKHRoaXMpOwogICAgIG1fcnVsZSA9IDA7CiAKLSAgICByZXR1
cm4gIW1fcGFyc2VkUHJvcGVydGllcy5pc0VtcHR5KCkgJiYgbV9wYXJzZWRQcm9wZXJ0aWVzLmZp
cnN0KCkuaWQoKSA9PSBDU1NQcm9wZXJ0eUNvbG9yOworICAgIHJldHVybiAhbV9wYXJzZWRQcm9w
ZXJ0aWVzLT5pc0VtcHR5KCkgJiYgbV9wYXJzZWRQcm9wZXJ0aWVzLT5maXJzdCgpLmlkKCkgPT0g
Q1NTUHJvcGVydHlDb2xvcjsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3Io
UkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIERvY3VtZW50KiBkb2N1bWVudCkK
QEAgLTEyNDMsOSArMTI0NSw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0
eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0CiAgICAgYm9vbCBv
ayA9IGZhbHNlOwogICAgIGlmIChtX2hhc0ZvbnRGYWNlT25seVZhbHVlcykKICAgICAgICAgZGVs
ZXRlRm9udEZhY2VPbmx5VmFsdWVzKCk7Ci0gICAgaWYgKCFtX3BhcnNlZFByb3BlcnRpZXMuaXNF
bXB0eSgpKSB7CisgICAgaWYgKCFtX3BhcnNlZFByb3BlcnRpZXMtPmlzRW1wdHkoKSkgewogICAg
ICAgICBvayA9IHRydWU7Ci0gICAgICAgIGRlY2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0aWVz
KG1fcGFyc2VkUHJvcGVydGllcyk7CisgICAgICAgIGRlY2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9w
ZXJ0aWVzKCptX3BhcnNlZFByb3BlcnRpZXMpOwogICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsK
ICAgICB9CiAKQEAgLTEyODIsMTQgKzEyODQsMTQgQEAgUGFzc093blB0cjxNZWRpYVF1ZXJ5PiBD
U1NQYXJzZXI6OnBhcnNlTWVkaWFRdWVyeShjb25zdCBTdHJpbmcmIHN0cmluZykKIH0KIAogI2lm
IEVOQUJMRShDU1NfVkFSSUFCTEVTKQotc3RhdGljIGlubGluZSB2b2lkIGZpbHRlclByb3BlcnRp
ZXMoYm9vbCBpbXBvcnRhbnQsIGNvbnN0IENTU1BhcnNlcjo6UGFyc2VkUHJvcGVydHlWZWN0b3Im
IGlucHV0LCBWZWN0b3I8Q1NTUHJvcGVydHksIDI1Nj4mIG91dHB1dCwgc2l6ZV90JiB1bnVzZWRF
bnRyaWVzLCBCaXRBcnJheTxudW1DU1NQcm9wZXJ0aWVzPiYgc2VlblByb3BlcnRpZXMsIEhhc2hT
ZXQ8QXRvbWljU3RyaW5nPiYgc2VlblZhcmlhYmxlcykKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWx0
ZXJQcm9wZXJ0aWVzKGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXI6OlBhcnNlZFByb3Bl
cnR5VmVjdG9yKiBpbnB1dCwgVmVjdG9yPENTU1Byb3BlcnR5LCAyNTY+JiBvdXRwdXQsIHNpemVf
dCYgdW51c2VkRW50cmllcywgQml0QXJyYXk8bnVtQ1NTUHJvcGVydGllcz4mIHNlZW5Qcm9wZXJ0
aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5WYXJpYWJsZXMpCiAjZWxzZQotc3RhdGlj
IGlubGluZSB2b2lkIGZpbHRlclByb3BlcnRpZXMoYm9vbCBpbXBvcnRhbnQsIGNvbnN0IENTU1Bh
cnNlcjo6UGFyc2VkUHJvcGVydHlWZWN0b3ImIGlucHV0LCBWZWN0b3I8Q1NTUHJvcGVydHksIDI1
Nj4mIG91dHB1dCwgc2l6ZV90JiB1bnVzZWRFbnRyaWVzLCBCaXRBcnJheTxudW1DU1NQcm9wZXJ0
aWVzPiYgc2VlblByb3BlcnRpZXMpCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsdGVyUHJvcGVydGll
cyhib29sIGltcG9ydGFudCwgY29uc3QgQ1NTUGFyc2VyOjpQYXJzZWRQcm9wZXJ0eVZlY3Rvciog
aW5wdXQsIFZlY3RvcjxDU1NQcm9wZXJ0eSwgMjU2PiYgb3V0cHV0LCBzaXplX3QmIHVudXNlZEVu
dHJpZXMsIEJpdEFycmF5PG51bUNTU1Byb3BlcnRpZXM+JiBzZWVuUHJvcGVydGllcykKICNlbmRp
ZgogewogICAgIC8vIEFkZCBwcm9wZXJ0aWVzIGluIHJldmVyc2Ugb3JkZXIgc28gdGhhdCBoaWdo
ZXN0IHByaW9yaXR5IGRlZmluaXRpb25zIGFyZSByZWFjaGVkIGZpcnN0LiBEdXBsaWNhdGUgZGVm
aW5pdGlvbnMgY2FuIHRoZW4gYmUgaWdub3JlZCB3aGVuIGZvdW5kLgotICAgIGZvciAoaW50IGkg
PSBpbnB1dC5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBDU1NQcm9w
ZXJ0eSYgcHJvcGVydHkgPSBpbnB1dFtpXTsKKyAgICBmb3IgKGludCBpID0gaW5wdXQtPnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0
eSA9IGlucHV0LT5hdChpKTsKICAgICAgICAgaWYgKHByb3BlcnR5LmlzSW1wb3J0YW50KCkgIT0g
aW1wb3J0YW50KQogICAgICAgICAgICAgY29udGludWU7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJM
RVMpCkBAIC0xMzEzLDE3ICsxMzE1LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWx0ZXJQcm9w
ZXJ0aWVzKGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXI6OlBhcnNlZFByb3BlCiBQYXNz
UmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVQcm9wZXJ0eVNl
dCgpCiB7CiAgICAgQml0QXJyYXk8bnVtQ1NTUHJvcGVydGllcz4gc2VlblByb3BlcnRpZXM7Ci0g
ICAgc2l6ZV90IHVudXNlZEVudHJpZXMgPSBtX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpOworICAg
IHNpemVfdCB1bnVzZWRFbnRyaWVzID0gbV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXplKCk7CiAgICAg
VmVjdG9yPENTU1Byb3BlcnR5LCAyNTY+IHJlc3VsdHModW51c2VkRW50cmllcyk7CiAKICAgICAv
LyBJbXBvcnRhbnQgcHJvcGVydGllcyBoYXZlIGhpZ2hlciBwcmlvcml0eSwgc28gYWRkIHRoZW0g
Zmlyc3QuIER1cGxpY2F0ZSBkZWZpbml0aW9ucyBjYW4gdGhlbiBiZSBpZ25vcmVkIHdoZW4gZm91
bmQuCiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+
IHNlZW5WYXJpYWJsZXM7Ci0gICAgZmlsdGVyUHJvcGVydGllcyh0cnVlLCBtX3BhcnNlZFByb3Bl
cnRpZXMsIHJlc3VsdHMsIHVudXNlZEVudHJpZXMsIHNlZW5Qcm9wZXJ0aWVzLCBzZWVuVmFyaWFi
bGVzKTsKLSAgICBmaWx0ZXJQcm9wZXJ0aWVzKGZhbHNlLCBtX3BhcnNlZFByb3BlcnRpZXMsIHJl
c3VsdHMsIHVudXNlZEVudHJpZXMsIHNlZW5Qcm9wZXJ0aWVzLCBzZWVuVmFyaWFibGVzKTsKKyAg
ICBmaWx0ZXJQcm9wZXJ0aWVzKHRydWUsIG1fcGFyc2VkUHJvcGVydGllcy5nZXQoKSwgcmVzdWx0
cywgdW51c2VkRW50cmllcywgc2VlblByb3BlcnRpZXMsIHNlZW5WYXJpYWJsZXMpOworICAgIGZp
bHRlclByb3BlcnRpZXMoZmFsc2UsIG1fcGFyc2VkUHJvcGVydGllcy5nZXQoKSwgcmVzdWx0cywg
dW51c2VkRW50cmllcywgc2VlblByb3BlcnRpZXMsIHNlZW5WYXJpYWJsZXMpOwogI2Vsc2UKLSAg
ICBmaWx0ZXJQcm9wZXJ0aWVzKHRydWUsIG1fcGFyc2VkUHJvcGVydGllcywgcmVzdWx0cywgdW51
c2VkRW50cmllcywgc2VlblByb3BlcnRpZXMpOwotICAgIGZpbHRlclByb3BlcnRpZXMoZmFsc2Us
IG1fcGFyc2VkUHJvcGVydGllcywgcmVzdWx0cywgdW51c2VkRW50cmllcywgc2VlblByb3BlcnRp
ZXMpOworICAgIGZpbHRlclByb3BlcnRpZXModHJ1ZSwgbV9wYXJzZWRQcm9wZXJ0aWVzLmdldCgp
LCByZXN1bHRzLCB1bnVzZWRFbnRyaWVzLCBzZWVuUHJvcGVydGllcyk7CisgICAgZmlsdGVyUHJv
cGVydGllcyhmYWxzZSwgbV9wYXJzZWRQcm9wZXJ0aWVzLmdldCgpLCByZXN1bHRzLCB1bnVzZWRF
bnRyaWVzLCBzZWVuUHJvcGVydGllcyk7CiAjZW5kaWYKICAgICBpZiAodW51c2VkRW50cmllcykK
ICAgICAgICAgcmVzdWx0cy5yZW1vdmUoMCwgdW51c2VkRW50cmllcyk7CkBAIC0xMzMzLDE5ICsx
MzM1LDE5IEBAIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gQ1NTUGFyc2VyOjpjcmVhdGVT
dHlsZVByb3BlcnR5U2V0KCkKIAogdm9pZCBDU1NQYXJzZXI6OmFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQs
IGJvb2wgaW1wbGljaXQpCiB7Ci0gICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVuZChDU1NQcm9w
ZXJ0eShwcm9wSWQsIHZhbHVlLCBpbXBvcnRhbnQsIG1fY3VycmVudFNob3J0aGFuZCwgbV9pbXBs
aWNpdFNob3J0aGFuZCB8fCBpbXBsaWNpdCkpOworICAgIG1fcGFyc2VkUHJvcGVydGllcy0+YXBw
ZW5kKENTU1Byb3BlcnR5KHByb3BJZCwgdmFsdWUsIGltcG9ydGFudCwgbV9jdXJyZW50U2hvcnRo
YW5kLCBtX2ltcGxpY2l0U2hvcnRoYW5kIHx8IGltcGxpY2l0KSk7CiB9CiAKIHZvaWQgQ1NTUGFy
c2VyOjpyb2xsYmFja0xhc3RQcm9wZXJ0aWVzKGludCBudW0pCiB7CiAgICAgQVNTRVJUKG51bSA+
PSAwKTsKLSAgICBBU1NFUlQobV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSA+PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obnVtKSk7Ci0gICAgbV9wYXJzZWRQcm9wZXJ0aWVzLnNocmluayhtX3BhcnNl
ZFByb3BlcnRpZXMuc2l6ZSgpIC0gbnVtKTsKKyAgICBBU1NFUlQobV9wYXJzZWRQcm9wZXJ0aWVz
LT5zaXplKCkgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG51bSkpOworICAgIG1fcGFyc2VkUHJv
cGVydGllcy0+c2hyaW5rKG1fcGFyc2VkUHJvcGVydGllcy0+c2l6ZSgpIC0gbnVtKTsKIH0KIAog
dm9pZCBDU1NQYXJzZXI6OmNsZWFyUHJvcGVydGllcygpCiB7Ci0gICAgbV9wYXJzZWRQcm9wZXJ0
aWVzLmNsZWFyKCk7CisgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLT5jbGVhcigpOwogICAgIG1fbnVt
UGFyc2VkUHJvcGVydGllc0JlZm9yZU1hcmdpbkJveCA9IElOVkFMSURfTlVNX1BBUlNFRF9QUk9Q
RVJUSUVTOwogICAgIG1faGFzRm9udEZhY2VPbmx5VmFsdWVzID0gZmFsc2U7CiB9CkBAIC0xNzYx
LDcgKzE3NjMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMs
IHByb3BJZCk7CiAgICAgICAgIGlmIChudW0gIT0gMSB8fCAhcGFyc2VWYWx1ZShDU1NQcm9wZXJ0
eU92ZXJmbG93WCwgaW1wb3J0YW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzLmxhc3QoKS52YWx1ZSgpOwor
ICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXMtPmxhc3QoKS52YWx1
ZSgpOwogICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eU92ZXJmbG93WSwgdmFsdWUsIGlt
cG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE3ODQsNyArMTc4Niw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICAgICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1By
b3BlcnR5Qm9yZGVyU3BhY2luZyk7CiAgICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWUoQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywgaW1wb3J0YW50KSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3Bh
cnNlZFByb3BlcnRpZXMubGFzdCgpLnZhbHVlKCk7CisgICAgICAgICAgICBDU1NWYWx1ZSogdmFs
dWUgPSBtX3BhcnNlZFByb3BlcnRpZXMtPmxhc3QoKS52YWx1ZSgpOwogICAgICAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsIHZhbHVlLCBp
bXBvcnRhbnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTI0MzEs
NyArMjQzMyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRo
aXMsIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQ29sbGFwc2UpOwogICAgICAgICAgICAgaWYgKCFw
YXJzZVZhbHVlKHdlYmtpdE1hcmdpbkNvbGxhcHNlU2hvcnRoYW5kKCkucHJvcGVydGllcygpWzBd
LCBpbXBvcnRhbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy5sYXN0KCkudmFsdWUoKTsKKyAg
ICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy0+bGFzdCgpLnZh
bHVlKCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eSh3ZWJraXRNYXJnaW5Db2xsYXBzZVNob3J0
aGFuZCgpLnByb3BlcnRpZXMoKVsxXSwgdmFsdWUsIGltcG9ydGFudCk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzI2NCw3ICszMjY2LDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlNFZhbHVlcyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgY29uc3QgQ1NTUHJvcGVydHlJ
RCAqcHJvcGVydGkKICAgICAgICAgY2FzZSAxOiB7CiAgICAgICAgICAgICBpZiAoIXBhcnNlVmFs
dWUocHJvcGVydGllc1swXSwgaW1wb3J0YW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBDU1NWYWx1ZSAqdmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXMubGFz
dCgpLnZhbHVlKCk7CisgICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNlZFByb3Bl
cnRpZXMtPmxhc3QoKS52YWx1ZSgpOwogICAgICAgICAgICAgSW1wbGljaXRTY29wZSBpbXBsaWNp
dFNjb3BlKHRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwogICAgICAgICAgICAgYWRkUHJvcGVydHko
cHJvcGVydGllc1sxXSwgdmFsdWUsIGltcG9ydGFudCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0
eShwcm9wZXJ0aWVzWzJdLCB2YWx1ZSwgaW1wb3J0YW50KTsKQEAgLTMyNzQsMTcgKzMyNzYsMTcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlNFZhbHVlcyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgY29u
c3QgQ1NTUHJvcGVydHlJRCAqcHJvcGVydGkKICAgICAgICAgY2FzZSAyOiB7CiAgICAgICAgICAg
ICBpZiAoIXBhcnNlVmFsdWUocHJvcGVydGllc1swXSwgaW1wb3J0YW50KSB8fCAhcGFyc2VWYWx1
ZShwcm9wZXJ0aWVzWzFdLCBpbXBvcnRhbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIENTU1ZhbHVlICp2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllc1ttX3Bh
cnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMl0udmFsdWUoKTsKKyAgICAgICAgICAgIENTU1ZhbHVl
KiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy0+YXQobV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXpl
KCkgLSAyKS52YWx1ZSgpOwogICAgICAgICAgICAgSW1wbGljaXRTY29wZSBpbXBsaWNpdFNjb3Bl
KHRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwogICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcGVy
dGllc1syXSwgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fcGFyc2Vk
UHJvcGVydGllc1ttX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMl0udmFsdWUoKTsKKyAgICAg
ICAgICAgIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzLT5hdChtX3BhcnNlZFByb3BlcnRpZXMt
PnNpemUoKSAtIDIpLnZhbHVlKCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVz
WzNdLCB2YWx1ZSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgMzogewogICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlKHByb3BlcnRpZXNb
MF0sIGltcG9ydGFudCkgfHwgIXBhcnNlVmFsdWUocHJvcGVydGllc1sxXSwgaW1wb3J0YW50KSB8
fCAhcGFyc2VWYWx1ZShwcm9wZXJ0aWVzWzJdLCBpbXBvcnRhbnQpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIENTU1ZhbHVlICp2YWx1ZSA9IG1fcGFyc2VkUHJv
cGVydGllc1ttX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMl0udmFsdWUoKTsKKyAgICAgICAg
ICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy0+YXQobV9wYXJzZWRQcm9w
ZXJ0aWVzLT5zaXplKCkgLSAyKS52YWx1ZSgpOwogICAgICAgICAgICAgSW1wbGljaXRTY29wZSBp
bXBsaWNpdFNjb3BlKHRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwogICAgICAgICAgICAgYWRkUHJv
cGVydHkocHJvcGVydGllc1szXSwgdmFsdWUsIGltcG9ydGFudCk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTc3ODgsNyArNzc5MCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZsb3dUaHJlYWQo
Y29uc3QgU3RyaW5nJiBmbG93TmFtZSkKIAogICAgIG1fcnVsZSA9IDA7CiAKLSAgICByZXR1cm4g
KChtX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpID09IDEpICYmIChtX3BhcnNlZFByb3BlcnRpZXMu
Zmlyc3QoKS5pZCgpID09IENTU1Byb3BlcnR5V2Via2l0Rmxvd0ludG8pKTsKKyAgICByZXR1cm4g
KChtX3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKSA9PSAxKSAmJiAobV9wYXJzZWRQcm9wZXJ0aWVz
LT5maXJzdCgpLmlkKCkgPT0gQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bykpOwogfQogCiAvLyBu
b25lIHwgPGlkZW50PgpAQCAtOTQ0NywxNCArOTQ0OSwxNCBAQCBQYXNzT3duUHRyPENTU1BhcnNl
clNlbGVjdG9yPiBDU1NQYXJzZXI6OnNpbmtGbG9hdGluZ1NlbGVjdG9yKENTU1BhcnNlclNlbGVj
dG9yKgogICAgIHJldHVybiBhZG9wdFB0cihzZWxlY3Rvcik7CiB9CiAKLVZlY3RvcjxPd25QdHI8
Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIENTU1BhcnNlcjo6Y3JlYXRlRmxvYXRpbmdTZWxlY3RvclZl
Y3RvcigpCitDU1NTZWxlY3RvclZlY3RvciogQ1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ1NlbGVj
dG9yVmVjdG9yKCkKIHsKLSAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBz
ZWxlY3RvclZlY3RvciA9IG5ldyBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+Owor
ICAgIENTU1NlbGVjdG9yVmVjdG9yKiBzZWxlY3RvclZlY3RvciA9IG5ldyBDU1NTZWxlY3RvclZl
Y3RvcjsKICAgICBtX2Zsb2F0aW5nU2VsZWN0b3JWZWN0b3JzLmFkZChzZWxlY3RvclZlY3Rvcik7
CiAgICAgcmV0dXJuIHNlbGVjdG9yVmVjdG9yOwogfQogCi1QYXNzT3duUHRyPFZlY3RvcjxPd25Q
dHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4gPiBDU1NQYXJzZXI6OnNpbmtGbG9hdGluZ1NlbGVjdG9y
VmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHNlbGVjdG9yVmVjdG9y
KQorUGFzc093blB0cjxDU1NTZWxlY3RvclZlY3RvciA+IENTU1BhcnNlcjo6c2lua0Zsb2F0aW5n
U2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3IqIHNlbGVjdG9yVmVjdG9yKQogewogICAg
IGlmIChzZWxlY3RvclZlY3RvcikgewogICAgICAgICBBU1NFUlQobV9mbG9hdGluZ1NlbGVjdG9y
VmVjdG9ycy5jb250YWlucyhzZWxlY3RvclZlY3RvcikpOwpAQCAtOTY0Nyw3ICs5NjQ5LDcgQEAg
U3R5bGVSdWxlS2V5ZnJhbWVzKiBDU1NQYXJzZXI6OmNyZWF0ZUtleWZyYW1lc1J1bGUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBQYXNzT3duUHQKICAgICByZXR1cm4gcnVsZVB0cjsKIH0KIAotU3R5bGVS
dWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUoVmVjdG9yPE93blB0cjxDU1NQYXJz
ZXJTZWxlY3Rvcj4gPiogc2VsZWN0b3JzKQorU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVh
dGVTdHlsZVJ1bGUoQ1NTU2VsZWN0b3JWZWN0b3IqIHNlbGVjdG9ycykKIHsKICAgICBTdHlsZVJ1
bGUqIHJlc3VsdCA9IDA7CiAgICAgaWYgKHNlbGVjdG9ycykgewpAQCAtOTY2OSw4ICs5NjcxLDgg
QEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUoVmVjdG9yPE93blB0
cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2UKIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3Jl
YXRlRm9udEZhY2VSdWxlKCkKIHsKICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFt
ZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7ICsraSkgewotICAgICAgICBDU1NQcm9wZXJ0eSYg
cHJvcGVydHkgPSBtX3BhcnNlZFByb3BlcnRpZXNbaV07CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fcGFyc2VkUHJvcGVydGllcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ1NTUHJv
cGVydHkmIHByb3BlcnR5ID0gbV9wYXJzZWRQcm9wZXJ0aWVzLT5hdChpKTsKICAgICAgICAgaWYg
KHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVydHlGb250VmFyaWFudCAmJiBwcm9wZXJ0eS52YWx1
ZSgpLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgICAgICBwcm9wZXJ0eS53cmFwVmFsdWVJ
bkNvbW1hU2VwYXJhdGVkTGlzdCgpOwogICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eS5pZCgpID09
IENTU1Byb3BlcnR5Rm9udEZhbWlseSAmJiAoIXByb3BlcnR5LnZhbHVlKCktPmlzVmFsdWVMaXN0
KCkgfHwgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4ocHJvcGVydHkudmFsdWUoKSktPmxlbmd0
aCgpICE9IDEpKSB7CkBAIC05NzYxLDcgKzk3NjMsNyBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJz
ZXI6OmNyZWF0ZVBhZ2VSdWxlKFBhc3NPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHBhZ2VTZWxl
YwogICAgIFN0eWxlUnVsZVBhZ2UqIHBhZ2VSdWxlID0gMDsKICAgICBpZiAocGFnZVNlbGVjdG9y
KSB7CiAgICAgICAgIFJlZlB0cjxTdHlsZVJ1bGVQYWdlPiBydWxlID0gU3R5bGVSdWxlUGFnZTo6
Y3JlYXRlKCk7Ci0gICAgICAgIFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4gc2Vs
ZWN0b3JWZWN0b3I7CisgICAgICAgIENTU1NlbGVjdG9yVmVjdG9yIHNlbGVjdG9yVmVjdG9yOwog
ICAgICAgICBzZWxlY3RvclZlY3Rvci5hcHBlbmQocGFnZVNlbGVjdG9yKTsKICAgICAgICAgcnVs
ZS0+cGFyc2VyQWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvclZlY3Rvcik7CiAgICAgICAgIHJ1
bGUtPnNldFByb3BlcnRpZXMoY3JlYXRlU3R5bGVQcm9wZXJ0eVNldCgpKTsKQEAgLTk3NzMsNyAr
OTc3NSw3IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlUGFnZVJ1bGUoUGFzc093
blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gcGFnZVNlbGVjCiAgICAgcmV0dXJuIHBhZ2VSdWxlOwog
fQogCi12b2lkIENTU1BhcnNlcjo6c2V0UmV1c2FibGVSZWdpb25TZWxlY3RvclZlY3RvcihWZWN0
b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBzZWxlY3RvcnMpCit2b2lkIENTU1BhcnNl
cjo6c2V0UmV1c2FibGVSZWdpb25TZWxlY3RvclZlY3RvcihDU1NTZWxlY3RvclZlY3Rvciogc2Vs
ZWN0b3JzKQogewogICAgIGlmIChzZWxlY3RvcnMpCiAgICAgICAgIG1fcmV1c2FibGVSZWdpb25T
ZWxlY3RvclZlY3Rvci5zd2FwKCpzZWxlY3RvcnMpOwpAQCAtOTgwOSwyMiArOTgxMSwyMiBAQCBT
dHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZU1hcmdpbkF0UnVsZShDU1NTZWxlY3Rvcjo6
TWFyZ2luQm94VHlwZSAvKiBtYXJnaQogCiB2b2lkIENTU1BhcnNlcjo6c3RhcnREZWNsYXJhdGlv
bnNGb3JNYXJnaW5Cb3goKQogewotICAgIG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1hcmdp
bkJveCA9IG1fcGFyc2VkUHJvcGVydGllcy5zaXplKCk7CisgICAgbV9udW1QYXJzZWRQcm9wZXJ0
aWVzQmVmb3JlTWFyZ2luQm94ID0gbV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXplKCk7CiB9CiAKIHZv
aWQgQ1NTUGFyc2VyOjplbmREZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3goKQogewotICAgIHJvbGxi
YWNrTGFzdFByb3BlcnRpZXMobV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSAtIG1fbnVtUGFyc2Vk
UHJvcGVydGllc0JlZm9yZU1hcmdpbkJveCk7CisgICAgcm9sbGJhY2tMYXN0UHJvcGVydGllcyht
X3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKSAtIG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1h
cmdpbkJveCk7CiAgICAgbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94ID0gSU5W
QUxJRF9OVU1fUEFSU0VEX1BST1BFUlRJRVM7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpkZWxldGVG
b250RmFjZU9ubHlWYWx1ZXMoKQogewogICAgIEFTU0VSVChtX2hhc0ZvbnRGYWNlT25seVZhbHVl
cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGFyc2VkUHJvcGVydGllcy5zaXpl
KCk7KSB7Ci0gICAgICAgIENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9IG1fcGFyc2VkUHJvcGVydGll
c1tpXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJzZWRQcm9wZXJ0aWVzLT5z
aXplKCk7KSB7CisgICAgICAgIENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9IG1fcGFyc2VkUHJvcGVy
dGllcy0+YXQoaSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eS5pZCgpID09IENTU1Byb3BlcnR5Rm9u
dFZhcmlhbnQgJiYgcHJvcGVydHkudmFsdWUoKS0+aXNWYWx1ZUxpc3QoKSkgewotICAgICAgICAg
ICAgbV9wYXJzZWRQcm9wZXJ0aWVzLnJlbW92ZShpKTsKKyAgICAgICAgICAgIG1fcGFyc2VkUHJv
cGVydGllcy0+cmVtb3ZlKGkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgKytpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IGI2NDYyYTYxMTMzNWVhZDRiYjlj
YjM4ZThkM2E5MDFmNTVjNmNjOTUuLmRhODk1NjFmZjY5ODZkNWQ5ODU0ZGE4MTk4MThjN2QxZDk0
ZjQ3NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTg3LDcgKzg3LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQgPSBmYWxzZSk7CiAgICAgdm9pZCByb2xs
YmFja0xhc3RQcm9wZXJ0aWVzKGludCBudW0pOwotICAgIGJvb2wgaGFzUHJvcGVydGllcygpIGNv
bnN0IHsgcmV0dXJuICFtX3BhcnNlZFByb3BlcnRpZXMuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBo
YXNQcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gIW1fcGFyc2VkUHJvcGVydGllcy0+aXNFbXB0
eSgpOyB9CiAKICAgICBib29sIHBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRh
bnQpOwogICAgIGJvb2wgcGFyc2VTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3R5bGVQ
cm9wZXJ0eVNob3J0aGFuZCYsIGJvb2wgaW1wb3J0YW50KTsKQEAgLTI0OSw4ICsyNDksOCBAQCBw
dWJsaWM6CiAgICAgQ1NTUGFyc2VyU2VsZWN0b3IqIGNyZWF0ZUZsb2F0aW5nU2VsZWN0b3IoKTsK
ICAgICBQYXNzT3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBzaW5rRmxvYXRpbmdTZWxlY3RvcihD
U1NQYXJzZXJTZWxlY3RvciopOwogCi0gICAgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rv
cj4gPiogY3JlYXRlRmxvYXRpbmdTZWxlY3RvclZlY3RvcigpOwotICAgIFBhc3NPd25QdHI8VmVj
dG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiA+IHNpbmtGbG9hdGluZ1NlbGVjdG9yVmVj
dG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qKTsKKyAgICBDU1NTZWxlY3Rv
clZlY3RvciogY3JlYXRlRmxvYXRpbmdTZWxlY3RvclZlY3RvcigpOworICAgIFBhc3NPd25QdHI8
Q1NTU2VsZWN0b3JWZWN0b3I+IHNpbmtGbG9hdGluZ1NlbGVjdG9yVmVjdG9yKENTU1NlbGVjdG9y
VmVjdG9yKik7CiAKICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGNyZWF0ZUZsb2F0aW5nVmFsdWVM
aXN0KCk7CiAgICAgUGFzc093blB0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IHNpbmtGbG9hdGluZ1Zh
bHVlTGlzdChDU1NQYXJzZXJWYWx1ZUxpc3QqKTsKQEAgLTI2OCwxMCArMjY4LDEwIEBAIHB1Ymxp
YzoKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiBSdWxlTGlzdDsK
ICAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVNZWRpYVJ1bGUoTWVkaWFRdWVyeVNldCosIFJ1bGVM
aXN0Kik7CiAgICAgUnVsZUxpc3QqIGNyZWF0ZVJ1bGVMaXN0KCk7Ci0gICAgU3R5bGVSdWxlQmFz
ZSogY3JlYXRlU3R5bGVSdWxlKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHNl
bGVjdG9ycyk7CisgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlU3R5bGVSdWxlKENTU1NlbGVjdG9y
VmVjdG9yKiBzZWxlY3RvcnMpOwogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZUZvbnRGYWNlUnVs
ZSgpOwogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZVBhZ2VSdWxlKFBhc3NPd25QdHI8Q1NTUGFy
c2VyU2VsZWN0b3I+IHBhZ2VTZWxlY3Rvcik7Ci0gICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlUmVn
aW9uUnVsZShWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiByZWdpb25TZWxlY3Rv
ciwgUnVsZUxpc3QqIHJ1bGVzKTsKKyAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVSZWdpb25SdWxl
KENTU1NlbGVjdG9yVmVjdG9yKiByZWdpb25TZWxlY3RvciwgUnVsZUxpc3QqIHJ1bGVzKTsKICAg
ICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVNYXJnaW5BdFJ1bGUoQ1NTU2VsZWN0b3I6Ok1hcmdpbkJv
eFR5cGUpOwogICAgIHZvaWQgc3RhcnREZWNsYXJhdGlvbnNGb3JNYXJnaW5Cb3goKTsKICAgICB2
b2lkIGVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwpAQCAtMjk0LDEwICsyOTQsMTAgQEAg
cHVibGljOgogCiAgICAgdm9pZCBpbnZhbGlkQmxvY2tIaXQoKTsKIAotICAgIFZlY3RvcjxPd25Q
dHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHJldXNhYmxlU2VsZWN0b3JWZWN0b3IoKSB7IHJldHVy
biAmbV9yZXVzYWJsZVNlbGVjdG9yVmVjdG9yOyB9CisgICAgQ1NTU2VsZWN0b3JWZWN0b3IqIHNl
bGVjdG9yVmVjdG9yKCkgeyByZXR1cm4gbV9zZWxlY3RvclZlY3Rvci5nZXQoKTsgfQogCi0gICAg
dm9pZCBzZXRSZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFy
c2VyU2VsZWN0b3I+ID4qIHNlbGVjdG9ycyk7Ci0gICAgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJT
ZWxlY3Rvcj4gPiogcmV1c2FibGVSZWdpb25TZWxlY3RvclZlY3RvcigpIHsgcmV0dXJuICZtX3Jl
dXNhYmxlUmVnaW9uU2VsZWN0b3JWZWN0b3I7IH0KKyAgICB2b2lkIHNldFJldXNhYmxlUmVnaW9u
U2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3IqIHNlbGVjdG9ycyk7CisgICAgQ1NTU2Vs
ZWN0b3JWZWN0b3IqIHJldXNhYmxlUmVnaW9uU2VsZWN0b3JWZWN0b3IoKSB7IHJldHVybiAmbV9y
ZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yOyB9CiAKICAgICB2b2lkIHVwZGF0ZUxhc3RTZWxl
Y3RvckxpbmVBbmRQb3NpdGlvbigpOwogICAgIHZvaWQgdXBkYXRlTGFzdE1lZGlhTGluZShNZWRp
YVF1ZXJ5U2V0Kik7CkBAIC0zMTUsOCArMzE1LDkgQEAgcHVibGljOgogICAgIFJlZlB0cjxTdHls
ZUtleWZyYW1lPiBtX2tleWZyYW1lOwogICAgIE93blB0cjxNZWRpYVF1ZXJ5PiBtX21lZGlhUXVl
cnk7CiAgICAgT3duUHRyPENTU1BhcnNlclZhbHVlTGlzdD4gbV92YWx1ZUxpc3Q7CisKICAgICB0
eXBlZGVmIFZlY3RvcjxDU1NQcm9wZXJ0eSwgMjU2PiBQYXJzZWRQcm9wZXJ0eVZlY3RvcjsKLSAg
ICBQYXJzZWRQcm9wZXJ0eVZlY3RvciBtX3BhcnNlZFByb3BlcnRpZXM7CisgICAgT3duUHRyPFBh
cnNlZFByb3BlcnR5VmVjdG9yPiBtX3BhcnNlZFByb3BlcnRpZXM7CiAgICAgQ1NTU2VsZWN0b3JM
aXN0KiBtX3NlbGVjdG9yTGlzdEZvclBhcnNlU2VsZWN0b3I7CiAKICAgICB1bnNpZ25lZCBtX251
bVBhcnNlZFByb3BlcnRpZXNCZWZvcmVNYXJnaW5Cb3g7CkBAIC00MzgsNyArNDM5LDcgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPE1lZGlhUXVlcnlTZXQ+ID4gbV9wYXJzZWRNZWRpYVF1
ZXJ5U2V0czsKICAgICBWZWN0b3I8T3duUHRyPFJ1bGVMaXN0PiA+IG1fcGFyc2VkUnVsZUxpc3Rz
OwogICAgIEhhc2hTZXQ8Q1NTUGFyc2VyU2VsZWN0b3IqPiBtX2Zsb2F0aW5nU2VsZWN0b3JzOwot
ICAgIEhhc2hTZXQ8VmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPio+IG1fZmxvYXRp
bmdTZWxlY3RvclZlY3RvcnM7CisgICAgSGFzaFNldDxDU1NTZWxlY3RvclZlY3Rvcio+IG1fZmxv
YXRpbmdTZWxlY3RvclZlY3RvcnM7CiAgICAgSGFzaFNldDxDU1NQYXJzZXJWYWx1ZUxpc3QqPiBt
X2Zsb2F0aW5nVmFsdWVMaXN0czsKICAgICBIYXNoU2V0PENTU1BhcnNlckZ1bmN0aW9uKj4gbV9m
bG9hdGluZ0Z1bmN0aW9uczsKIApAQCAtNDQ4LDggKzQ0OSw4IEBAIHByaXZhdGU6CiAKICAgICBP
d25QdHI8VmVjdG9yPFJlZlB0cjxTdHlsZUtleWZyYW1lPiA+ID4gbV9mbG9hdGluZ0tleWZyYW1l
VmVjdG9yOwogCi0gICAgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiBtX3JldXNh
YmxlU2VsZWN0b3JWZWN0b3I7Ci0gICAgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
PiBtX3JldXNhYmxlUmVnaW9uU2VsZWN0b3JWZWN0b3I7CisgICAgT3duUHRyPENTU1NlbGVjdG9y
VmVjdG9yPiBtX3NlbGVjdG9yVmVjdG9yOworICAgIENTU1NlbGVjdG9yVmVjdG9yIG1fcmV1c2Fi
bGVSZWdpb25TZWxlY3RvclZlY3RvcjsKIAogICAgIFJlZlB0cjxDU1NDYWxjVmFsdWU+IG1fcGFy
c2VkQ2FsY3VsYXRpb247CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXJWYWx1ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5jcHAKaW5k
ZXggMzdhMGQ0NTJjNjVjNDU1ZTVjNDEwNGU1NGU0Nzg5MmZiMjE1NWUwNC4uMWFiNGRmZWZkZjY2
NzJkN2MwYWRjODQ1NDZiMzg4NzAxYmVjNzgyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlclZhbHVlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNl
clZhbHVlcy5jcHAKQEAgLTExNCw3ICsxMTQsNyBAQCBDU1NQYXJzZXJTZWxlY3Rvcjo6fkNTU1Bh
cnNlclNlbGVjdG9yKCkKICAgICB9CiB9CiAKLXZvaWQgQ1NTUGFyc2VyU2VsZWN0b3I6OmFkb3B0
U2VsZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiYgc2VsZWN0
b3JWZWN0b3IpCit2b2lkIENTU1BhcnNlclNlbGVjdG9yOjphZG9wdFNlbGVjdG9yVmVjdG9yKENT
U1NlbGVjdG9yVmVjdG9yJiBzZWxlY3RvclZlY3RvcikKIHsKICAgICBDU1NTZWxlY3Rvckxpc3Qq
IHNlbGVjdG9yTGlzdCA9IGZhc3ROZXc8Q1NTU2VsZWN0b3JMaXN0PigpOwogICAgIHNlbGVjdG9y
TGlzdC0+YWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvclZlY3Rvcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyVmFsdWVzLmgKaW5kZXggYzMyYTU3ZGQ2ODc5OThkZWQ2YzI0MDFmNDRkZDMzMTk0
YTJjMjk1NC4uYTczNmFiYjg5ZjkyZGEzN2FlODZiMzQ4OTE3NWYxZDgwNzE1ZjE3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaApAQCAtMTA0LDYgKzEwNCwxMCBAQCBwdWJsaWM6
CiAgICAgT3duUHRyPENTU1BhcnNlclZhbHVlTGlzdD4gYXJnczsKIH07CiAKK2NsYXNzIENTU1Bh
cnNlclNlbGVjdG9yOworCit0eXBlZGVmIFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+
ID4gQ1NTU2VsZWN0b3JWZWN0b3I7CisKIGNsYXNzIENTU1BhcnNlclNlbGVjdG9yIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTEyMCw3ICsxMjQsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRSZWxhdGlvbihDU1NTZWxlY3Rvcjo6UmVsYXRpb24gdmFsdWUpIHsg
bV9zZWxlY3Rvci0+bV9yZWxhdGlvbiA9IHZhbHVlOyB9CiAgICAgdm9pZCBzZXRGb3JQYWdlKCkg
eyBtX3NlbGVjdG9yLT5zZXRGb3JQYWdlKCk7IH0KIAotICAgIHZvaWQgYWRvcHRTZWxlY3RvclZl
Y3RvcihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+JiBzZWxlY3RvclZlY3Rvcik7
CisgICAgdm9pZCBhZG9wdFNlbGVjdG9yVmVjdG9yKENTU1NlbGVjdG9yVmVjdG9yJik7CiAKICAg
ICBDU1NTZWxlY3Rvcjo6UHNldWRvVHlwZSBwc2V1ZG9UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9z
ZWxlY3Rvci0+cHNldWRvVHlwZSgpOyB9CiAgICAgYm9vbCBpc1Vua25vd25Qc2V1ZG9FbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rvci0+aXNVbmtub3duUHNldWRvRWxlbWVudCgpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3JMaXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwCmluZGV4IGY4MzIzZTAwMTgyNDRk
YWVjMTNjNDFiNWE5N2FiNWM1NjE5ZWZmMzMuLjNjZjAyMGE3MjBhNzcxNGZjMzZiZDgzZTY5N2Fk
YTlhNTI4YWMzMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxp
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwCkBAIC01
OCw3ICs1OCw3IEBAIHZvaWQgQ1NTU2VsZWN0b3JMaXN0OjphZG9wdChDU1NTZWxlY3Rvckxpc3Qm
IGxpc3QpCiAgICAgbGlzdC5tX3NlbGVjdG9yQXJyYXkgPSAwOwogfQogCi12b2lkIENTU1NlbGVj
dG9yTGlzdDo6YWRvcHRTZWxlY3RvclZlY3RvcihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVj
dG9yPiA+JiBzZWxlY3RvclZlY3RvcikKK3ZvaWQgQ1NTU2VsZWN0b3JMaXN0OjphZG9wdFNlbGVj
dG9yVmVjdG9yKENTU1NlbGVjdG9yVmVjdG9yJiBzZWxlY3RvclZlY3RvcikKIHsKICAgICBkZWxl
dGVTZWxlY3RvcnMoKTsKICAgICBjb25zdCBzaXplX3QgdmVjdG9yU2l6ZSA9IHNlbGVjdG9yVmVj
dG9yLnNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxp
c3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuaAppbmRleCA4OTg2MGVl
MDkwOTBkNmExOWEyY2I4YzJlN2I0NGI4MjA1MzdlODBlLi5kNzA0NTRiN2NhNWFjM2M1OTI4NjNm
OGQwYTVjNGFjMmFkMjI5YTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2Vs
ZWN0b3JMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5oCkBA
IC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIENTU1NlbGVjdG9yTGlzdF9oCiAjZGVmaW5lIENTU1Nl
bGVjdG9yTGlzdF9oCiAKKyNpbmNsdWRlICJDU1NQYXJzZXJWYWx1ZXMuaCIKICNpbmNsdWRlICJD
U1NTZWxlY3Rvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Miw3ICs0Myw3IEBAIHB1
YmxpYzoKICAgICB+Q1NTU2VsZWN0b3JMaXN0KCk7CiAKICAgICB2b2lkIGFkb3B0KENTU1NlbGVj
dG9yTGlzdCYgbGlzdCk7Ci0gICAgdm9pZCBhZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25Q
dHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9yVmVjdG9yKTsKKyAgICB2b2lkIGFkb3B0
U2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3ImKTsKIAogICAgIENTU1NlbGVjdG9yKiBm
aXJzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3JBcnJheSA/IG1fc2VsZWN0b3JBcnJheSA6
IDA7IH0KICAgICBzdGF0aWMgQ1NTU2VsZWN0b3IqIG5leHQoQ1NTU2VsZWN0b3IqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TVkdDU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKaW5kZXggZDA2YmIyMDNiYTc2NTM2M2RlNTBmZWYwNzgw
MzBjMWFjNjk2YThiYi4uYzdlYzZkOWY5NDE0MzE5MWZhNmMxYWUyNDVkOGZkNjZiYWU2Mzg4MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAKQEAgLTI4MSw3ICsyODEsNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgICAgICAgICByb2xsYmFja0xhc3RQcm9wZXJ0aWVzKDEpOwogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1f
cGFyc2VkUHJvcGVydGllcy5sYXN0KCkudmFsdWUoKTsKKyAgICAgICAgQ1NTVmFsdWUqIHZhbHVl
ID0gbV9wYXJzZWRQcm9wZXJ0aWVzLT5sYXN0KCkudmFsdWUoKTsKICAgICAgICAgYWRkUHJvcGVy
dHkoQ1NTUHJvcGVydHlNYXJrZXJNaWQsIHZhbHVlLCBpbXBvcnRhbnQpOwogICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmtlckVuZCwgdmFsdWUsIGltcG9ydGFudCk7CiAgICAgICAg
IG1faW1wbGljaXRTaG9ydGhhbmQgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAKaW5k
ZXggMzU4NzE5NDIwMGE5Zjc5NTczYjdlYTg0YjA1MTY1ZWU4MDhiNDk1Ni4uMDNlZmMzYTM0ZTUx
N2VlYjhiODQ1M2RmOGZiMjYyZmMwNDA4YTQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAK
QEAgLTM1OSw3ICszNTksNyBAQCB2b2lkIFN0eWxlUnVsZU1lZGlhOjpyZXBvcnREZXNjZW5kYW50
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SQogICAgIGluZm8uYWRk
SW5zdHJ1bWVudGVkTWVtYmVyKG1fbWVkaWFRdWVyaWVzKTsKIH0KIAotU3R5bGVSdWxlUmVnaW9u
OjpTdHlsZVJ1bGVSZWdpb24oVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2Vs
ZWN0b3JzLCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpCitTdHls
ZVJ1bGVSZWdpb246OlN0eWxlUnVsZVJlZ2lvbihDU1NTZWxlY3RvclZlY3Rvciogc2VsZWN0b3Jz
LCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpCiAgICAgOiBTdHls
ZVJ1bGVCbG9jayhSZWdpb24sIGFkb3B0UnVsZXMpCiB7CiAgICAgbV9zZWxlY3Rvckxpc3QuYWRv
cHRTZWxlY3RvclZlY3Rvcigqc2VsZWN0b3JzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJ1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGUuaAppbmRleCA3
N2JkMmRjNjNlNTc5YTE2ZmE2ODQzZDdlMDVlOWNkNzk4YjYxOTdjLi43YjYwMjUwNDJhMTk4ZWM2
ZWQ2NmQ0OGIxYTI3YTNkOTkyZDAwOTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCkBAIC0xMDAs
NyArMTAwLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRp
ZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuZ2V0KCk7IH0KICAgICBTdHlsZVByb3Bl
cnR5U2V0KiBtdXRhYmxlUHJvcGVydGllcygpOwogICAgIAotICAgIHZvaWQgcGFyc2VyQWRvcHRT
ZWxlY3RvclZlY3RvcihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+JiBzZWxlY3Rv
cnMpIHsgbV9zZWxlY3Rvckxpc3QuYWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvcnMpOyB9Cisg
ICAgdm9pZCBwYXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKENTU1NlbGVjdG9yVmVjdG9yJiBzZWxl
Y3RvcnMpIHsgbV9zZWxlY3Rvckxpc3QuYWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvcnMpOyB9
CiAgICAgdm9pZCB3cmFwcGVyQWRvcHRTZWxlY3Rvckxpc3QoQ1NTU2VsZWN0b3JMaXN0JiBzZWxl
Y3RvcnMpIHsgbV9zZWxlY3Rvckxpc3QuYWRvcHQoc2VsZWN0b3JzKTsgfQogICAgIHZvaWQgc2V0
UHJvcGVydGllcyhQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+KTsKIApAQCAtMTQ5LDcgKzE0
OSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0aWVzKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmdldCgpOyB9CiAgICAgU3R5bGVQcm9wZXJ0eVNl
dCogbXV0YWJsZVByb3BlcnRpZXMoKTsKIAotICAgIHZvaWQgcGFyc2VyQWRvcHRTZWxlY3RvclZl
Y3RvcihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+JiBzZWxlY3RvcnMpIHsgbV9z
ZWxlY3Rvckxpc3QuYWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvcnMpOyB9CisgICAgdm9pZCBw
YXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKENTU1NlbGVjdG9yVmVjdG9yJiBzZWxlY3RvcnMpIHsg
bV9zZWxlY3Rvckxpc3QuYWRvcHRTZWxlY3RvclZlY3RvcihzZWxlY3RvcnMpOyB9CiAgICAgdm9p
ZCB3cmFwcGVyQWRvcHRTZWxlY3Rvckxpc3QoQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3RvcnMpIHsg
bV9zZWxlY3Rvckxpc3QuYWRvcHQoc2VsZWN0b3JzKTsgfQogICAgIHZvaWQgc2V0UHJvcGVydGll
cyhQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+KTsKIApAQCAtMjA0LDcgKzIwNCw3IEBAIHBy
aXZhdGU6CiAKIGNsYXNzIFN0eWxlUnVsZVJlZ2lvbiA6IHB1YmxpYyBTdHlsZVJ1bGVCbG9jayB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3R5bGVSdWxlUmVnaW9uPiBjcmVhdGUo
VmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2VsZWN0b3JzLCBWZWN0b3I8UmVm
UHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3R5bGVSdWxlUmVnaW9uPiBjcmVhdGUoQ1NTU2VsZWN0b3JWZWN0b3IqIHNlbGVjdG9ycywgVmVj
dG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBhZG9wdFJ1bGVzKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJ1bGVSZWdpb24oc2VsZWN0b3JzLCBhZG9wdFJ1bGVz
KSk7CiAgICAgfQpAQCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlcG9ydERl
c2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKIHByaXZhdGU6
Ci0gICAgU3R5bGVSdWxlUmVnaW9uKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4q
LCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpOworICAgIFN0eWxl
UnVsZVJlZ2lvbihDU1NTZWxlY3RvclZlY3RvciosIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFz
ZT4gPiYgYWRvcHRSdWxlcyk7CiAgICAgU3R5bGVSdWxlUmVnaW9uKGNvbnN0IFN0eWxlUnVsZVJl
Z2lvbiYpOwogICAgIAogICAgIENTU1NlbGVjdG9yTGlzdCBtX3NlbGVjdG9yTGlzdDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157615</attachid>
            <date>2012-08-09 19:42:11 -0700</date>
            <delta_ts>2012-08-09 22:14:28 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-93574-20120810124142.patch</filename>
            <type>text/plain</type>
            <size>32546</size>
            <attacher name="Shane Stephens">shanestephens</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1MjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjFlMWViY2Q0ZWE2NzYz
M2QyYjEwNzk3ODQwOThiOWM2M2I3ZjVmOC4uM2U5YjZmNGIzZTYwYjU1N2RkOGFhOTgyMzZhMDli
ZGI1MDQ4MmU3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDEyLTA4LTA5ICBTaGFu
ZSBTdGVwaGVucyAgPHNoYW5lc3RlcGhlbnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBDb252ZXJ0
IENTU1BhcnNlcidzIG1fcmV1c2FibGVTZWxlY3RvclZlY3RvciB0byBPd25QdHIgYW5kIHJlbmFt
ZSB0byBtX3NlbGVjdG9yVmVjdG9yLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTM1NzQKKworICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgor
CisgICAgICAgIFRoaXMgaXMgcHJlcGFyYXRvcnkgd29yayBmb3IgQ1NTIEhpZXJhcmNoaWVzIChz
ZWUgd2tiLnVnLzc5OTM5KS4KKyAgICAgICAgQ1NTIEhpZXJhcmNoaWVzIHdvcmtzIGJ5IHB1c2hp
bmcgc2VsZWN0b3JWZWN0b3JzIG9udG8gYSBzdGFjayB3aGlsZSBuZXN0ZWQgc2VsZWN0b3JWZWN0
b3JzIGFyZSBwYXJzZWQuCisgICAgICAgIEZvciB0aGlzIHJlYXNvbiwgdGhlIHNlbGVjdG9yVmVj
dG9yIGluIENTU1BhcnNlciBjYW4ndCBiZSByZS11c2VkIGJldHdlZW4gc2VsZWN0b3IgcGFyc2Vz
IHdpdGhpbiBhIHNldCBvZgorICAgICAgICBuZXN0ZWQgc2VsZWN0b3JzLiBUaGlzIHBhdGNoIHdy
YXBzIHRoZSBzZWxlY3RvclZlY3RvciBpbiBhbiBPd25QdHIgYnV0IGRvZXMgbm90IG90aGVyd2lz
ZSBtb2RpZnkgaXRzIHVzZS4KKworICAgICAgICBTaW1pbGFybHksIENTU1BhcnNlcjo6bV9wYXJz
ZWRQcm9wZXJ0aWVzIGlzIGNvbnZlcnRlZCBmcm9tIGEgZGlyZWN0IFBhcnNlZFByb3BlcnR5VmVj
dG9yIGluY2x1ZGVkCisgICAgICAgIGFzIGEgbWVtYmVyIG9mIENTU1BhcnNlciB0byBhbiBPd25Q
dHIuCisKKyAgICAgICAgT25jZSBIaWVyYXJjaGllcyBhcmUgaW50cm9kdWNlZCwgd2hlbiBhIHNl
bGVjdG9yVmVjdG9yIGlzIHN0YWNrZWQgYSBuZXcgb25lIHdpbGwgYmUgY3JlYXRlZCAKKyAgICAg
ICAgYW5kIHN0b3JlZCBpbiBtX3NlbGVjdG9yVmVjdG9yIChzZWUgd2tiLnVnLzc5OTM5IGZvciBj
b250ZXh0KS4gSG93ZXZlciwgYW4gYWNjb21wYW55aW5nIHVuc3RhY2tpbmcKKyAgICAgICAgbWVj
aGFuaXNtIGVuc3VyZXMgdGhhdCBzZWxlY3RvclZlY3RvcnMgd2lsbCBiZSByZXVzZWQgaW4gYWxs
IGNpcmN1bXN0YW5jZXMgd2hlcmUgdGhleSBjdXJyZW50bHkgYXJlLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbyBpbnRyb2R1Y2VzIGEgQ1NTU2VsZWN0b3JWZWN0b3IgdHlwZWRlZiB0byBzaW1w
bGlmeSBhbmQgaW1wcm92ZSByZWFkYWJpbGl0eSBvZiAKKyAgICAgICAgdHlwZSBzaWduYXR1cmVz
IGluIGFuZCBhcm91bmQgQ1NTUGFyc2VyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlz
IHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICog
Y3NzL0NTU0dyYW1tYXIueToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6Q1NTUGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsdGVyUHJvcGVydGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUHJvcGVydHlTZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnJvbGxiYWNrTGFzdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpjbGVhclByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZTRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZsb3dU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ1NlbGVj
dG9yVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6c2lua0Zsb2F0aW5nU2Vs
ZWN0b3JWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVGb250RmFjZVJ1bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVQYWdlUnVsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OnNldFJldXNhYmxlUmVnaW9uU2VsZWN0b3JWZWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJv
eCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmRlbGV0ZUZvbnRGYWNlT25seVZhbHVl
cyk6CisKKyAgICAgICAgbV9yZXVzYWJsZVNlbGVjdG9yVmVjdG9yIHJlbmFtZWQgdG8gbV9zZWxl
Y3RvclZlY3RvciBhbmQgd3JhcHBlZCBpbiBPd25QdHIuCisgICAgICAgIG1fcGFyc2VkUHJvcGVy
dGllcyB3cmFwcGVkIGluIE93blB0ci4KKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Omhhc1Byb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpzZWxlY3RvclZlY3Rvcik6IGZ1bmN0aW9uIHJlbmFtZWQgZnJvbSByZXVz
YWJsZVNlbGVjdG9yVmVjdG9yCisgICAgICAgIChDU1NQYXJzZXIpOiAKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cmV1c2FibGVSZWdpb25TZWxlY3RvclZlY3Rvcik6CisgICAgICAgICog
Y3NzL0NTU1BhcnNlclZhbHVlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXJTZWxl
Y3Rvcjo6YWRvcHRTZWxlY3RvclZlY3Rvcik6CisgICAgICAgICogY3NzL0NTU1BhcnNlclZhbHVl
cy5oOiBDU1NTZWxlY3RvclZlY3RvciB0eXBlZGVmIGFkZGVkCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKENTU1BhcnNlclNlbGVjdG9yKToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3JM
aXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yTGlzdDo6YWRvcHRTZWxlY3Rv
clZlY3Rvcik6CisgICAgICAgICogY3NzL0NTU1NlbGVjdG9yTGlzdC5oOgorICAgICAgICAoQ1NT
U2VsZWN0b3JMaXN0KToKKyAgICAgICAgKiBjc3MvU1ZHQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTVkdWYWx1ZSk6CisgICAgICAgICogY3NzL1N0eWxl
UnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVSZWdpb246OlN0eWxlUnVsZVJl
Z2lvbik6CisgICAgICAgICogY3NzL1N0eWxlUnVsZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSdWxlOjpwYXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUnVsZVBhZ2U6OnBhcnNlckFkb3B0U2VsZWN0b3JWZWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVSdWxlUmVnaW9uOjpjcmVhdGUpOgorICAgICAgICAoU3R5bGVSdWxlUmVnaW9uKToK
KwogMjAxMi0wOC0wOSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAg
IFNhbmRib3hpbmcgdmlldyBzb3VyY2UgZG9jdW1lbnRzIGlzIGluZWZmZWN0aXZlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55IGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0dyYW1tYXIueQppbmRleCA5OTY4ZTc2NjAwN2VlZjE3YWExNjk2ZmIwMmU0ZmY3NGQzNDJm
MTAyLi4yOWZhYjRmZmVkZDY0YWU5ZDkxNjBjN2Y0MzhlYzZiNTAxZDMzMGQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NHcmFtbWFyLnkKQEAgLTcwLDcgKzcwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlOwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
QmFzZT4gPiogcnVsZUxpc3Q7CiAgICAgQ1NTUGFyc2VyU2VsZWN0b3IqIHNlbGVjdG9yOwotICAg
IFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHNlbGVjdG9yTGlzdDsKKyAgICBD
U1NTZWxlY3RvclZlY3Rvciogc2VsZWN0b3JMaXN0OwogICAgIENTU1NlbGVjdG9yOjpNYXJnaW5C
b3hUeXBlIG1hcmdpbkJveDsKICAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb247CiAg
ICAgTWVkaWFRdWVyeVNldCogbWVkaWFMaXN0OwpAQCAtMzMzLDkgKzMzMyw5IEBAIHdlYmtpdF92
YWx1ZToKICAgICBXRUJLSVRfVkFMVUVfU1lNICd7JyBtYXliZV9zcGFjZSBleHByICd9JyB7CiAg
ICAgICAgIGlmICgkNCkgewogICAgICAgICAgICAgcGFyc2VyLT5tX3ZhbHVlTGlzdCA9IHBhcnNl
ci0+c2lua0Zsb2F0aW5nVmFsdWVMaXN0KCQ0KTsKLSAgICAgICAgICAgIGludCBvbGRQYXJzZWRQ
cm9wZXJ0aWVzID0gcGFyc2VyLT5tX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpOworICAgICAgICAg
ICAgaW50IG9sZFBhcnNlZFByb3BlcnRpZXMgPSBwYXJzZXItPm1fcGFyc2VkUHJvcGVydGllcy0+
c2l6ZSgpOwogICAgICAgICAgICAgaWYgKCFwYXJzZXItPnBhcnNlVmFsdWUocGFyc2VyLT5tX2lk
LCBwYXJzZXItPm1faW1wb3J0YW50KSkKLSAgICAgICAgICAgICAgICBwYXJzZXItPnJvbGxiYWNr
TGFzdFByb3BlcnRpZXMocGFyc2VyLT5tX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gb2xkUGFy
c2VkUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgcGFyc2VyLT5yb2xsYmFja0xhc3RQcm9w
ZXJ0aWVzKHBhcnNlci0+bV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXplKCkgLSBvbGRQYXJzZWRQcm9w
ZXJ0aWVzKTsKICAgICAgICAgICAgIHBhcnNlci0+bV92YWx1ZUxpc3QgPSBudWxscHRyOwogICAg
ICAgICB9CiAgICAgfQpAQCAtOTEyLDcgKzkxMiw3IEBAIHJ1bGVzZXQ6CiBzZWxlY3Rvcl9saXN0
OgogICAgIHNlbGVjdG9yICVwcmVjIFVOSU1QT1JUQU5UX1RPSyB7CiAgICAgICAgIGlmICgkMSkg
ewotICAgICAgICAgICAgJCQgPSBwYXJzZXItPnJldXNhYmxlU2VsZWN0b3JWZWN0b3IoKTsKKyAg
ICAgICAgICAgICQkID0gcGFyc2VyLT5zZWxlY3RvclZlY3RvcigpOwogICAgICAgICAgICAgJCQt
PnNocmluaygwKTsKICAgICAgICAgICAgICQkLT5hcHBlbmQocGFyc2VyLT5zaW5rRmxvYXRpbmdT
ZWxlY3RvcigkMSkpOwogICAgICAgICAgICAgcGFyc2VyLT51cGRhdGVMYXN0U2VsZWN0b3JMaW5l
QW5kUG9zaXRpb24oKTsKQEAgLTEyNDgsNyArMTI0OCw3IEBAIHBzZXVkbzoKICAgICAgICAgICAg
ICQkID0gcGFyc2VyLT5jcmVhdGVGbG9hdGluZ1NlbGVjdG9yKCk7CiAgICAgICAgICAgICAkJC0+
c2V0TWF0Y2goQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsKIAotICAgICAgICAgICAgVmVjdG9y
PE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiBzZWxlY3RvclZlY3RvcjsKKyAgICAgICAgICAg
IENTU1NlbGVjdG9yVmVjdG9yIHNlbGVjdG9yVmVjdG9yOwogICAgICAgICAgICAgc2VsZWN0b3JW
ZWN0b3IuYXBwZW5kKHBhcnNlci0+c2lua0Zsb2F0aW5nU2VsZWN0b3IoJDQpKTsKICAgICAgICAg
ICAgICQkLT5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKIApAQCAtMTMzNCwx
MCArMTMzNCwxMCBAQCBkZWNsYXJhdGlvbjoKICAgICAgICAgYm9vbCBpc1Byb3BlcnR5UGFyc2Vk
ID0gZmFsc2U7CiAgICAgICAgIGlmICgkMSAmJiAkNCkgewogICAgICAgICAgICAgcGFyc2VyLT5t
X3ZhbHVlTGlzdCA9IHBhcnNlci0+c2lua0Zsb2F0aW5nVmFsdWVMaXN0KCQ0KTsKLSAgICAgICAg
ICAgIGludCBvbGRQYXJzZWRQcm9wZXJ0aWVzID0gcGFyc2VyLT5tX3BhcnNlZFByb3BlcnRpZXMu
c2l6ZSgpOworICAgICAgICAgICAgaW50IG9sZFBhcnNlZFByb3BlcnRpZXMgPSBwYXJzZXItPm1f
cGFyc2VkUHJvcGVydGllcy0+c2l6ZSgpOwogICAgICAgICAgICAgJCQgPSBwYXJzZXItPnBhcnNl
VmFsdWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oJDEpLCAkNSk7CiAgICAgICAgICAgICBp
ZiAoISQkKQotICAgICAgICAgICAgICAgIHBhcnNlci0+cm9sbGJhY2tMYXN0UHJvcGVydGllcyhw
YXJzZXItPm1fcGFyc2VkUHJvcGVydGllcy5zaXplKCkgLSBvbGRQYXJzZWRQcm9wZXJ0aWVzKTsK
KyAgICAgICAgICAgICAgICBwYXJzZXItPnJvbGxiYWNrTGFzdFByb3BlcnRpZXMocGFyc2VyLT5t
X3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKSAtIG9sZFBhcnNlZFByb3BlcnRpZXMpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGlzUHJvcGVydHlQYXJzZWQgPSB0cnVlOwogICAg
ICAgICAgICAgcGFyc2VyLT5tX3ZhbHVlTGlzdCA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuY3BwCmluZGV4IDAzZTI3MjYzYmI3OWY4MjU2MjAxNmI2OWUyN2RiMTE5MDBhOGI3ODcuLjA4
N2Y1NzBkOTY1MTc1ZmJhMzRhOTAwNjMxYmY2MjJiNzM0YWFiMjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwCkBAIC0yNDQsNiArMjQ0LDcgQEAgQ1NTUGFyc2VyOjpDU1NQYXJzZXIoY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKICAgICAsIG1faW1wb3J0YW50KGZhbHNlKQogICAg
ICwgbV9pZChDU1NQcm9wZXJ0eUludmFsaWQpCiAgICAgLCBtX3N0eWxlU2hlZXQoMCkKKyAgICAs
IG1fcGFyc2VkUHJvcGVydGllcyhhZG9wdFB0cihuZXcgUGFyc2VkUHJvcGVydHlWZWN0b3IpKQog
ICAgICwgbV9zZWxlY3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9yKDApCiAgICAgLCBtX251bVBhcnNl
ZFByb3BlcnRpZXNCZWZvcmVNYXJnaW5Cb3goSU5WQUxJRF9OVU1fUEFSU0VEX1BST1BFUlRJRVMp
CiAgICAgLCBtX2luUGFyc2VTaG9ydGhhbmQoMCkKQEAgLTI2Myw2ICsyNjQsNyBAQCBDU1NQYXJz
ZXI6OkNTU1BhcnNlcihjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogICAgICwgbV9s
YXN0U2VsZWN0b3JMaW5lTnVtYmVyKDApCiAgICAgLCBtX2FsbG93SW1wb3J0UnVsZXModHJ1ZSkK
ICAgICAsIG1fYWxsb3dOYW1lc3BhY2VEZWNsYXJhdGlvbnModHJ1ZSkKKyAgICAsIG1fc2VsZWN0
b3JWZWN0b3IoYWRvcHRQdHIobmV3IENTU1NlbGVjdG9yVmVjdG9yKSkKIHsKICNpZiBZWURFQlVH
ID4gMAogICAgIGNzc3l5ZGVidWcgPSAxOwpAQCAtMTE1Miw5ICsxMTU0LDkgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHkKICAgICBib29sIG9rID0gZmFsc2U7CiAgICAgaWYgKG1faGFzRm9udEZh
Y2VPbmx5VmFsdWVzKQogICAgICAgICBkZWxldGVGb250RmFjZU9ubHlWYWx1ZXMoKTsKLSAgICBp
ZiAoIW1fcGFyc2VkUHJvcGVydGllcy5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIW1fcGFyc2VkUHJv
cGVydGllcy0+aXNFbXB0eSgpKSB7CiAgICAgICAgIG9rID0gdHJ1ZTsKLSAgICAgICAgZGVjbGFy
YXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMobV9wYXJzZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAg
ZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMoKm1fcGFyc2VkUHJvcGVydGllcyk7CiAg
ICAgICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIH0KIApAQCAtMTE3NSw3ICsxMTc3LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIGJvb2wgc3RyaWN0KQogICAgIGlmICghcGFyc2VyLnBhcnNlQ29sb3Ioc3RyaW5nKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTVmFsdWUqIHZhbHVlID0gcGFyc2VyLm1f
cGFyc2VkUHJvcGVydGllcy5maXJzdCgpLnZhbHVlKCk7CisgICAgQ1NTVmFsdWUqIHZhbHVlID0g
cGFyc2VyLm1fcGFyc2VkUHJvcGVydGllcy0+Zmlyc3QoKS52YWx1ZSgpOwogICAgIGlmICghdmFs
dWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xMTkz
LDcgKzExOTUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcmIHN0
cmluZykKICAgICBjc3N5eXBhcnNlKHRoaXMpOwogICAgIG1fcnVsZSA9IDA7CiAKLSAgICByZXR1
cm4gIW1fcGFyc2VkUHJvcGVydGllcy5pc0VtcHR5KCkgJiYgbV9wYXJzZWRQcm9wZXJ0aWVzLmZp
cnN0KCkuaWQoKSA9PSBDU1NQcm9wZXJ0eUNvbG9yOworICAgIHJldHVybiAhbV9wYXJzZWRQcm9w
ZXJ0aWVzLT5pc0VtcHR5KCkgJiYgbV9wYXJzZWRQcm9wZXJ0aWVzLT5maXJzdCgpLmlkKCkgPT0g
Q1NTUHJvcGVydHlDb2xvcjsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3Io
UkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIERvY3VtZW50KiBkb2N1bWVudCkK
QEAgLTEyNDMsOSArMTI0NSw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0
eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0CiAgICAgYm9vbCBv
ayA9IGZhbHNlOwogICAgIGlmIChtX2hhc0ZvbnRGYWNlT25seVZhbHVlcykKICAgICAgICAgZGVs
ZXRlRm9udEZhY2VPbmx5VmFsdWVzKCk7Ci0gICAgaWYgKCFtX3BhcnNlZFByb3BlcnRpZXMuaXNF
bXB0eSgpKSB7CisgICAgaWYgKCFtX3BhcnNlZFByb3BlcnRpZXMtPmlzRW1wdHkoKSkgewogICAg
ICAgICBvayA9IHRydWU7Ci0gICAgICAgIGRlY2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0aWVz
KG1fcGFyc2VkUHJvcGVydGllcyk7CisgICAgICAgIGRlY2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9w
ZXJ0aWVzKCptX3BhcnNlZFByb3BlcnRpZXMpOwogICAgICAgICBjbGVhclByb3BlcnRpZXMoKTsK
ICAgICB9CiAKQEAgLTEyODIsMTQgKzEyODQsMTQgQEAgUGFzc093blB0cjxNZWRpYVF1ZXJ5PiBD
U1NQYXJzZXI6OnBhcnNlTWVkaWFRdWVyeShjb25zdCBTdHJpbmcmIHN0cmluZykKIH0KIAogI2lm
IEVOQUJMRShDU1NfVkFSSUFCTEVTKQotc3RhdGljIGlubGluZSB2b2lkIGZpbHRlclByb3BlcnRp
ZXMoYm9vbCBpbXBvcnRhbnQsIGNvbnN0IENTU1BhcnNlcjo6UGFyc2VkUHJvcGVydHlWZWN0b3Im
IGlucHV0LCBWZWN0b3I8Q1NTUHJvcGVydHksIDI1Nj4mIG91dHB1dCwgc2l6ZV90JiB1bnVzZWRF
bnRyaWVzLCBCaXRBcnJheTxudW1DU1NQcm9wZXJ0aWVzPiYgc2VlblByb3BlcnRpZXMsIEhhc2hT
ZXQ8QXRvbWljU3RyaW5nPiYgc2VlblZhcmlhYmxlcykKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWx0
ZXJQcm9wZXJ0aWVzKGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXI6OlBhcnNlZFByb3Bl
cnR5VmVjdG9yKiBpbnB1dCwgVmVjdG9yPENTU1Byb3BlcnR5LCAyNTY+JiBvdXRwdXQsIHNpemVf
dCYgdW51c2VkRW50cmllcywgQml0QXJyYXk8bnVtQ1NTUHJvcGVydGllcz4mIHNlZW5Qcm9wZXJ0
aWVzLCBIYXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5WYXJpYWJsZXMpCiAjZWxzZQotc3RhdGlj
IGlubGluZSB2b2lkIGZpbHRlclByb3BlcnRpZXMoYm9vbCBpbXBvcnRhbnQsIGNvbnN0IENTU1Bh
cnNlcjo6UGFyc2VkUHJvcGVydHlWZWN0b3ImIGlucHV0LCBWZWN0b3I8Q1NTUHJvcGVydHksIDI1
Nj4mIG91dHB1dCwgc2l6ZV90JiB1bnVzZWRFbnRyaWVzLCBCaXRBcnJheTxudW1DU1NQcm9wZXJ0
aWVzPiYgc2VlblByb3BlcnRpZXMpCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsdGVyUHJvcGVydGll
cyhib29sIGltcG9ydGFudCwgY29uc3QgQ1NTUGFyc2VyOjpQYXJzZWRQcm9wZXJ0eVZlY3Rvciog
aW5wdXQsIFZlY3RvcjxDU1NQcm9wZXJ0eSwgMjU2PiYgb3V0cHV0LCBzaXplX3QmIHVudXNlZEVu
dHJpZXMsIEJpdEFycmF5PG51bUNTU1Byb3BlcnRpZXM+JiBzZWVuUHJvcGVydGllcykKICNlbmRp
ZgogewogICAgIC8vIEFkZCBwcm9wZXJ0aWVzIGluIHJldmVyc2Ugb3JkZXIgc28gdGhhdCBoaWdo
ZXN0IHByaW9yaXR5IGRlZmluaXRpb25zIGFyZSByZWFjaGVkIGZpcnN0LiBEdXBsaWNhdGUgZGVm
aW5pdGlvbnMgY2FuIHRoZW4gYmUgaWdub3JlZCB3aGVuIGZvdW5kLgotICAgIGZvciAoaW50IGkg
PSBpbnB1dC5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICBjb25zdCBDU1NQcm9w
ZXJ0eSYgcHJvcGVydHkgPSBpbnB1dFtpXTsKKyAgICBmb3IgKGludCBpID0gaW5wdXQtPnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0
eSA9IGlucHV0LT5hdChpKTsKICAgICAgICAgaWYgKHByb3BlcnR5LmlzSW1wb3J0YW50KCkgIT0g
aW1wb3J0YW50KQogICAgICAgICAgICAgY29udGludWU7CiAjaWYgRU5BQkxFKENTU19WQVJJQUJM
RVMpCkBAIC0xMzEzLDE3ICsxMzE1LDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWx0ZXJQcm9w
ZXJ0aWVzKGJvb2wgaW1wb3J0YW50LCBjb25zdCBDU1NQYXJzZXI6OlBhcnNlZFByb3BlCiBQYXNz
UmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVQcm9wZXJ0eVNl
dCgpCiB7CiAgICAgQml0QXJyYXk8bnVtQ1NTUHJvcGVydGllcz4gc2VlblByb3BlcnRpZXM7Ci0g
ICAgc2l6ZV90IHVudXNlZEVudHJpZXMgPSBtX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpOworICAg
IHNpemVfdCB1bnVzZWRFbnRyaWVzID0gbV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXplKCk7CiAgICAg
VmVjdG9yPENTU1Byb3BlcnR5LCAyNTY+IHJlc3VsdHModW51c2VkRW50cmllcyk7CiAKICAgICAv
LyBJbXBvcnRhbnQgcHJvcGVydGllcyBoYXZlIGhpZ2hlciBwcmlvcml0eSwgc28gYWRkIHRoZW0g
Zmlyc3QuIER1cGxpY2F0ZSBkZWZpbml0aW9ucyBjYW4gdGhlbiBiZSBpZ25vcmVkIHdoZW4gZm91
bmQuCiAjaWYgRU5BQkxFKENTU19WQVJJQUJMRVMpCiAgICAgSGFzaFNldDxBdG9taWNTdHJpbmc+
IHNlZW5WYXJpYWJsZXM7Ci0gICAgZmlsdGVyUHJvcGVydGllcyh0cnVlLCBtX3BhcnNlZFByb3Bl
cnRpZXMsIHJlc3VsdHMsIHVudXNlZEVudHJpZXMsIHNlZW5Qcm9wZXJ0aWVzLCBzZWVuVmFyaWFi
bGVzKTsKLSAgICBmaWx0ZXJQcm9wZXJ0aWVzKGZhbHNlLCBtX3BhcnNlZFByb3BlcnRpZXMsIHJl
c3VsdHMsIHVudXNlZEVudHJpZXMsIHNlZW5Qcm9wZXJ0aWVzLCBzZWVuVmFyaWFibGVzKTsKKyAg
ICBmaWx0ZXJQcm9wZXJ0aWVzKHRydWUsIG1fcGFyc2VkUHJvcGVydGllcy5nZXQoKSwgcmVzdWx0
cywgdW51c2VkRW50cmllcywgc2VlblByb3BlcnRpZXMsIHNlZW5WYXJpYWJsZXMpOworICAgIGZp
bHRlclByb3BlcnRpZXMoZmFsc2UsIG1fcGFyc2VkUHJvcGVydGllcy5nZXQoKSwgcmVzdWx0cywg
dW51c2VkRW50cmllcywgc2VlblByb3BlcnRpZXMsIHNlZW5WYXJpYWJsZXMpOwogI2Vsc2UKLSAg
ICBmaWx0ZXJQcm9wZXJ0aWVzKHRydWUsIG1fcGFyc2VkUHJvcGVydGllcywgcmVzdWx0cywgdW51
c2VkRW50cmllcywgc2VlblByb3BlcnRpZXMpOwotICAgIGZpbHRlclByb3BlcnRpZXMoZmFsc2Us
IG1fcGFyc2VkUHJvcGVydGllcywgcmVzdWx0cywgdW51c2VkRW50cmllcywgc2VlblByb3BlcnRp
ZXMpOworICAgIGZpbHRlclByb3BlcnRpZXModHJ1ZSwgbV9wYXJzZWRQcm9wZXJ0aWVzLmdldCgp
LCByZXN1bHRzLCB1bnVzZWRFbnRyaWVzLCBzZWVuUHJvcGVydGllcyk7CisgICAgZmlsdGVyUHJv
cGVydGllcyhmYWxzZSwgbV9wYXJzZWRQcm9wZXJ0aWVzLmdldCgpLCByZXN1bHRzLCB1bnVzZWRF
bnRyaWVzLCBzZWVuUHJvcGVydGllcyk7CiAjZW5kaWYKICAgICBpZiAodW51c2VkRW50cmllcykK
ICAgICAgICAgcmVzdWx0cy5yZW1vdmUoMCwgdW51c2VkRW50cmllcyk7CkBAIC0xMzMzLDE5ICsx
MzM1LDE5IEBAIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gQ1NTUGFyc2VyOjpjcmVhdGVT
dHlsZVByb3BlcnR5U2V0KCkKIAogdm9pZCBDU1NQYXJzZXI6OmFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQs
IGJvb2wgaW1wbGljaXQpCiB7Ci0gICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVuZChDU1NQcm9w
ZXJ0eShwcm9wSWQsIHZhbHVlLCBpbXBvcnRhbnQsIG1fY3VycmVudFNob3J0aGFuZCwgbV9pbXBs
aWNpdFNob3J0aGFuZCB8fCBpbXBsaWNpdCkpOworICAgIG1fcGFyc2VkUHJvcGVydGllcy0+YXBw
ZW5kKENTU1Byb3BlcnR5KHByb3BJZCwgdmFsdWUsIGltcG9ydGFudCwgbV9jdXJyZW50U2hvcnRo
YW5kLCBtX2ltcGxpY2l0U2hvcnRoYW5kIHx8IGltcGxpY2l0KSk7CiB9CiAKIHZvaWQgQ1NTUGFy
c2VyOjpyb2xsYmFja0xhc3RQcm9wZXJ0aWVzKGludCBudW0pCiB7CiAgICAgQVNTRVJUKG51bSA+
PSAwKTsKLSAgICBBU1NFUlQobV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKSA+PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obnVtKSk7Ci0gICAgbV9wYXJzZWRQcm9wZXJ0aWVzLnNocmluayhtX3BhcnNl
ZFByb3BlcnRpZXMuc2l6ZSgpIC0gbnVtKTsKKyAgICBBU1NFUlQobV9wYXJzZWRQcm9wZXJ0aWVz
LT5zaXplKCkgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG51bSkpOworICAgIG1fcGFyc2VkUHJv
cGVydGllcy0+c2hyaW5rKG1fcGFyc2VkUHJvcGVydGllcy0+c2l6ZSgpIC0gbnVtKTsKIH0KIAog
dm9pZCBDU1NQYXJzZXI6OmNsZWFyUHJvcGVydGllcygpCiB7Ci0gICAgbV9wYXJzZWRQcm9wZXJ0
aWVzLmNsZWFyKCk7CisgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLT5jbGVhcigpOwogICAgIG1fbnVt
UGFyc2VkUHJvcGVydGllc0JlZm9yZU1hcmdpbkJveCA9IElOVkFMSURfTlVNX1BBUlNFRF9QUk9Q
RVJUSUVTOwogICAgIG1faGFzRm9udEZhY2VPbmx5VmFsdWVzID0gZmFsc2U7CiB9CkBAIC0xNzYx
LDcgKzE3NjMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMs
IHByb3BJZCk7CiAgICAgICAgIGlmIChudW0gIT0gMSB8fCAhcGFyc2VWYWx1ZShDU1NQcm9wZXJ0
eU92ZXJmbG93WCwgaW1wb3J0YW50KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgQ1NTVmFsdWUqIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzLmxhc3QoKS52YWx1ZSgpOwor
ICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXMtPmxhc3QoKS52YWx1
ZSgpOwogICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eU92ZXJmbG93WSwgdmFsdWUsIGlt
cG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE3ODQsNyArMTc4Niw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICAgICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1By
b3BlcnR5Qm9yZGVyU3BhY2luZyk7CiAgICAgICAgICAgICBpZiAoIXBhcnNlVmFsdWUoQ1NTUHJv
cGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywgaW1wb3J0YW50KSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3Bh
cnNlZFByb3BlcnRpZXMubGFzdCgpLnZhbHVlKCk7CisgICAgICAgICAgICBDU1NWYWx1ZSogdmFs
dWUgPSBtX3BhcnNlZFByb3BlcnRpZXMtPmxhc3QoKS52YWx1ZSgpOwogICAgICAgICAgICAgYWRk
UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsIHZhbHVlLCBp
bXBvcnRhbnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTI0MTEs
NyArMjQxMyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRo
aXMsIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQ29sbGFwc2UpOwogICAgICAgICAgICAgaWYgKCFw
YXJzZVZhbHVlKHdlYmtpdE1hcmdpbkNvbGxhcHNlU2hvcnRoYW5kKCkucHJvcGVydGllcygpWzBd
LCBpbXBvcnRhbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy5sYXN0KCkudmFsdWUoKTsKKyAg
ICAgICAgICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy0+bGFzdCgpLnZh
bHVlKCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eSh3ZWJraXRNYXJnaW5Db2xsYXBzZVNob3J0
aGFuZCgpLnByb3BlcnRpZXMoKVsxXSwgdmFsdWUsIGltcG9ydGFudCk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzI0NCw3ICszMjQ2LDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlNFZhbHVlcyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgY29uc3QgQ1NTUHJvcGVydHlJ
RCAqcHJvcGVydGkKICAgICAgICAgY2FzZSAxOiB7CiAgICAgICAgICAgICBpZiAoIXBhcnNlVmFs
dWUocHJvcGVydGllc1swXSwgaW1wb3J0YW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBDU1NWYWx1ZSAqdmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXMubGFz
dCgpLnZhbHVlKCk7CisgICAgICAgICAgICBDU1NWYWx1ZSogdmFsdWUgPSBtX3BhcnNlZFByb3Bl
cnRpZXMtPmxhc3QoKS52YWx1ZSgpOwogICAgICAgICAgICAgSW1wbGljaXRTY29wZSBpbXBsaWNp
dFNjb3BlKHRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwogICAgICAgICAgICAgYWRkUHJvcGVydHko
cHJvcGVydGllc1sxXSwgdmFsdWUsIGltcG9ydGFudCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0
eShwcm9wZXJ0aWVzWzJdLCB2YWx1ZSwgaW1wb3J0YW50KTsKQEAgLTMyNTQsMTcgKzMyNTYsMTcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlNFZhbHVlcyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgY29u
c3QgQ1NTUHJvcGVydHlJRCAqcHJvcGVydGkKICAgICAgICAgY2FzZSAyOiB7CiAgICAgICAgICAg
ICBpZiAoIXBhcnNlVmFsdWUocHJvcGVydGllc1swXSwgaW1wb3J0YW50KSB8fCAhcGFyc2VWYWx1
ZShwcm9wZXJ0aWVzWzFdLCBpbXBvcnRhbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIENTU1ZhbHVlICp2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllc1ttX3Bh
cnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMl0udmFsdWUoKTsKKyAgICAgICAgICAgIENTU1ZhbHVl
KiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy0+YXQobV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXpl
KCkgLSAyKS52YWx1ZSgpOwogICAgICAgICAgICAgSW1wbGljaXRTY29wZSBpbXBsaWNpdFNjb3Bl
KHRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwogICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcGVy
dGllc1syXSwgdmFsdWUsIGltcG9ydGFudCk7Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fcGFyc2Vk
UHJvcGVydGllc1ttX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMl0udmFsdWUoKTsKKyAgICAg
ICAgICAgIHZhbHVlID0gbV9wYXJzZWRQcm9wZXJ0aWVzLT5hdChtX3BhcnNlZFByb3BlcnRpZXMt
PnNpemUoKSAtIDIpLnZhbHVlKCk7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wZXJ0aWVz
WzNdLCB2YWx1ZSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgMzogewogICAgICAgICAgICAgaWYgKCFwYXJzZVZhbHVlKHByb3BlcnRpZXNb
MF0sIGltcG9ydGFudCkgfHwgIXBhcnNlVmFsdWUocHJvcGVydGllc1sxXSwgaW1wb3J0YW50KSB8
fCAhcGFyc2VWYWx1ZShwcm9wZXJ0aWVzWzJdLCBpbXBvcnRhbnQpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIENTU1ZhbHVlICp2YWx1ZSA9IG1fcGFyc2VkUHJv
cGVydGllc1ttX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gMl0udmFsdWUoKTsKKyAgICAgICAg
ICAgIENTU1ZhbHVlKiB2YWx1ZSA9IG1fcGFyc2VkUHJvcGVydGllcy0+YXQobV9wYXJzZWRQcm9w
ZXJ0aWVzLT5zaXplKCkgLSAyKS52YWx1ZSgpOwogICAgICAgICAgICAgSW1wbGljaXRTY29wZSBp
bXBsaWNpdFNjb3BlKHRoaXMsIFByb3BlcnR5SW1wbGljaXQpOwogICAgICAgICAgICAgYWRkUHJv
cGVydHkocHJvcGVydGllc1szXSwgdmFsdWUsIGltcG9ydGFudCk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTc3NjgsNyArNzc3MCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZsb3dUaHJlYWQo
Y29uc3QgU3RyaW5nJiBmbG93TmFtZSkKIAogICAgIG1fcnVsZSA9IDA7CiAKLSAgICByZXR1cm4g
KChtX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpID09IDEpICYmIChtX3BhcnNlZFByb3BlcnRpZXMu
Zmlyc3QoKS5pZCgpID09IENTU1Byb3BlcnR5V2Via2l0Rmxvd0ludG8pKTsKKyAgICByZXR1cm4g
KChtX3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKSA9PSAxKSAmJiAobV9wYXJzZWRQcm9wZXJ0aWVz
LT5maXJzdCgpLmlkKCkgPT0gQ1NTUHJvcGVydHlXZWJraXRGbG93SW50bykpOwogfQogCiAvLyBu
b25lIHwgPGlkZW50PgpAQCAtNzkxNiw4ICs3OTE4LDggQEAgdm9pZCBDU1NQYXJzZXI6OmFkZFRl
eHREZWNvcmF0aW9uUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFBhc3NSZWZQdHI8Q1NT
VmEKIHsKICAgICAvLyBUaGUgdGV4dC1kZWNvcmF0aW9uLWxpbmUgcHJvcGVydHkgdGFrZXMgcHJp
b3JpdHkgb3ZlciB0ZXh0LWRlY29yYXRpb24sIHVubGVzcyB0aGUgbGF0dGVyIGhhcyBpbXBvcnRh
bnQgcHJpb3JpdHkgc2V0LgogICAgIGlmIChwcm9wSWQgPT0gQ1NTUHJvcGVydHlUZXh0RGVjb3Jh
dGlvbiAmJiAhaW1wb3J0YW50ICYmIG1fY3VycmVudFNob3J0aGFuZCA9PSBDU1NQcm9wZXJ0eUlu
dmFsaWQpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcGFyc2VkUHJvcGVy
dGllcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fcGFyc2VkUHJvcGVydGllc1tp
XS5pZCgpID09IENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25MaW5lKQorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgaWYgKG1fcGFyc2VkUHJvcGVydGllcy0+YXQoaSkuaWQoKSA9PSBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uTGluZSkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICB9CkBAIC05NDc3LDE0ICs5NDc5LDE0IEBAIFBhc3NPd25QdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+IENTU1BhcnNlcjo6c2lua0Zsb2F0aW5nU2VsZWN0b3IoQ1NTUGFyc2Vy
U2VsZWN0b3IqCiAgICAgcmV0dXJuIGFkb3B0UHRyKHNlbGVjdG9yKTsKIH0KIAotVmVjdG9yPE93
blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogQ1NTUGFyc2VyOjpjcmVhdGVGbG9hdGluZ1NlbGVj
dG9yVmVjdG9yKCkKK0NTU1NlbGVjdG9yVmVjdG9yKiBDU1NQYXJzZXI6OmNyZWF0ZUZsb2F0aW5n
U2VsZWN0b3JWZWN0b3IoKQogewotICAgIFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+
ID4qIHNlbGVjdG9yVmVjdG9yID0gbmV3IFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+
ID47CisgICAgQ1NTU2VsZWN0b3JWZWN0b3IqIHNlbGVjdG9yVmVjdG9yID0gbmV3IENTU1NlbGVj
dG9yVmVjdG9yOwogICAgIG1fZmxvYXRpbmdTZWxlY3RvclZlY3RvcnMuYWRkKHNlbGVjdG9yVmVj
dG9yKTsKICAgICByZXR1cm4gc2VsZWN0b3JWZWN0b3I7CiB9CiAKLVBhc3NPd25QdHI8VmVjdG9y
PE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiA+IENTU1BhcnNlcjo6c2lua0Zsb2F0aW5nU2Vs
ZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogc2VsZWN0b3JW
ZWN0b3IpCitQYXNzT3duUHRyPENTU1NlbGVjdG9yVmVjdG9yID4gQ1NTUGFyc2VyOjpzaW5rRmxv
YXRpbmdTZWxlY3RvclZlY3RvcihDU1NTZWxlY3RvclZlY3Rvciogc2VsZWN0b3JWZWN0b3IpCiB7
CiAgICAgaWYgKHNlbGVjdG9yVmVjdG9yKSB7CiAgICAgICAgIEFTU0VSVChtX2Zsb2F0aW5nU2Vs
ZWN0b3JWZWN0b3JzLmNvbnRhaW5zKHNlbGVjdG9yVmVjdG9yKSk7CkBAIC05Njc3LDcgKzk2Nzks
NyBAQCBTdHlsZVJ1bGVLZXlmcmFtZXMqIENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVzUnVsZShj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NPd25QdAogICAgIHJldHVybiBydWxlUHRyOwogfQogCi1T
dHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8T3duUHRyPENT
U1BhcnNlclNlbGVjdG9yPiA+KiBzZWxlY3RvcnMpCitTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6
OmNyZWF0ZVN0eWxlUnVsZShDU1NTZWxlY3RvclZlY3Rvciogc2VsZWN0b3JzKQogewogICAgIFN0
eWxlUnVsZSogcmVzdWx0ID0gMDsKICAgICBpZiAoc2VsZWN0b3JzKSB7CkBAIC05Njk5LDggKzk3
MDEsOCBAQCBTdHlsZVJ1bGVCYXNlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8
T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBzZQogU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2Vy
OjpjcmVhdGVGb250RmFjZVJ1bGUoKQogewogICAgIG1fYWxsb3dJbXBvcnRSdWxlcyA9IG1fYWxs
b3dOYW1lc3BhY2VEZWNsYXJhdGlvbnMgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENTU1Byb3Bl
cnR5JiBwcm9wZXJ0eSA9IG1fcGFyc2VkUHJvcGVydGllc1tpXTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9wYXJzZWRQcm9wZXJ0aWVzLT5zaXplKCk7ICsraSkgeworICAgICAgICBD
U1NQcm9wZXJ0eSYgcHJvcGVydHkgPSBtX3BhcnNlZFByb3BlcnRpZXMtPmF0KGkpOwogICAgICAg
ICBpZiAocHJvcGVydHkuaWQoKSA9PSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50ICYmIHByb3BlcnR5
LnZhbHVlKCktPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgICAgIHByb3BlcnR5LndyYXBW
YWx1ZUluQ29tbWFTZXBhcmF0ZWRMaXN0KCk7CiAgICAgICAgIGVsc2UgaWYgKHByb3BlcnR5Lmlk
KCkgPT0gQ1NTUHJvcGVydHlGb250RmFtaWx5ICYmICghcHJvcGVydHkudmFsdWUoKS0+aXNWYWx1
ZUxpc3QoKSB8fCBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihwcm9wZXJ0eS52YWx1ZSgpKS0+
bGVuZ3RoKCkgIT0gMSkpIHsKQEAgLTk3OTEsNyArOTc5Myw3IEBAIFN0eWxlUnVsZUJhc2UqIENT
U1BhcnNlcjo6Y3JlYXRlUGFnZVJ1bGUoUGFzc093blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gcGFn
ZVNlbGVjCiAgICAgU3R5bGVSdWxlUGFnZSogcGFnZVJ1bGUgPSAwOwogICAgIGlmIChwYWdlU2Vs
ZWN0b3IpIHsKICAgICAgICAgUmVmUHRyPFN0eWxlUnVsZVBhZ2U+IHJ1bGUgPSBTdHlsZVJ1bGVQ
YWdlOjpjcmVhdGUoKTsKLSAgICAgICAgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
PiBzZWxlY3RvclZlY3RvcjsKKyAgICAgICAgQ1NTU2VsZWN0b3JWZWN0b3Igc2VsZWN0b3JWZWN0
b3I7CiAgICAgICAgIHNlbGVjdG9yVmVjdG9yLmFwcGVuZChwYWdlU2VsZWN0b3IpOwogICAgICAg
ICBydWxlLT5wYXJzZXJBZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKICAgICAg
ICAgcnVsZS0+c2V0UHJvcGVydGllcyhjcmVhdGVTdHlsZVByb3BlcnR5U2V0KCkpOwpAQCAtOTgw
Myw3ICs5ODA1LDcgQEAgU3R5bGVSdWxlQmFzZSogQ1NTUGFyc2VyOjpjcmVhdGVQYWdlUnVsZShQ
YXNzT3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiBwYWdlU2VsZWMKICAgICByZXR1cm4gcGFnZVJ1
bGU7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpzZXRSZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9y
KFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHNlbGVjdG9ycykKK3ZvaWQgQ1NT
UGFyc2VyOjpzZXRSZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yKENTU1NlbGVjdG9yVmVjdG9y
KiBzZWxlY3RvcnMpCiB7CiAgICAgaWYgKHNlbGVjdG9ycykKICAgICAgICAgbV9yZXVzYWJsZVJl
Z2lvblNlbGVjdG9yVmVjdG9yLnN3YXAoKnNlbGVjdG9ycyk7CkBAIC05ODM5LDIyICs5ODQxLDIy
IEBAIFN0eWxlUnVsZUJhc2UqIENTU1BhcnNlcjo6Y3JlYXRlTWFyZ2luQXRSdWxlKENTU1NlbGVj
dG9yOjpNYXJnaW5Cb3hUeXBlIC8qIG1hcmdpCiAKIHZvaWQgQ1NTUGFyc2VyOjpzdGFydERlY2xh
cmF0aW9uc0Zvck1hcmdpbkJveCgpCiB7Ci0gICAgbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVmb3Jl
TWFyZ2luQm94ID0gbV9wYXJzZWRQcm9wZXJ0aWVzLnNpemUoKTsKKyAgICBtX251bVBhcnNlZFBy
b3BlcnRpZXNCZWZvcmVNYXJnaW5Cb3ggPSBtX3BhcnNlZFByb3BlcnRpZXMtPnNpemUoKTsKIH0K
IAogdm9pZCBDU1NQYXJzZXI6OmVuZERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpCiB7Ci0gICAg
cm9sbGJhY2tMYXN0UHJvcGVydGllcyhtX3BhcnNlZFByb3BlcnRpZXMuc2l6ZSgpIC0gbV9udW1Q
YXJzZWRQcm9wZXJ0aWVzQmVmb3JlTWFyZ2luQm94KTsKKyAgICByb2xsYmFja0xhc3RQcm9wZXJ0
aWVzKG1fcGFyc2VkUHJvcGVydGllcy0+c2l6ZSgpIC0gbV9udW1QYXJzZWRQcm9wZXJ0aWVzQmVm
b3JlTWFyZ2luQm94KTsKICAgICBtX251bVBhcnNlZFByb3BlcnRpZXNCZWZvcmVNYXJnaW5Cb3gg
PSBJTlZBTElEX05VTV9QQVJTRURfUFJPUEVSVElFUzsKIH0KIAogdm9pZCBDU1NQYXJzZXI6OmRl
bGV0ZUZvbnRGYWNlT25seVZhbHVlcygpCiB7CiAgICAgQVNTRVJUKG1faGFzRm9udEZhY2VPbmx5
VmFsdWVzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wYXJzZWRQcm9wZXJ0aWVz
LnNpemUoKTspIHsKLSAgICAgICAgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wYXJzZWRQcm9w
ZXJ0aWVzW2ldOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3BhcnNlZFByb3BlcnRp
ZXMtPnNpemUoKTspIHsKKyAgICAgICAgQ1NTUHJvcGVydHkmIHByb3BlcnR5ID0gbV9wYXJzZWRQ
cm9wZXJ0aWVzLT5hdChpKTsKICAgICAgICAgaWYgKHByb3BlcnR5LmlkKCkgPT0gQ1NTUHJvcGVy
dHlGb250VmFyaWFudCAmJiBwcm9wZXJ0eS52YWx1ZSgpLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAg
ICAgICAgICBtX3BhcnNlZFByb3BlcnRpZXMucmVtb3ZlKGkpOworICAgICAgICAgICAgbV9wYXJz
ZWRQcm9wZXJ0aWVzLT5yZW1vdmUoaSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICArK2k7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggOGFkYjZhZjVlNzg2Yjg4
YTNkYzhkOTI5ZjQwNGYzNDUzMzkzYjBjMy4uNWExZWQ5N2I4OTc3OGQwNGJhOTMzNmVlYmYwNzUx
NjA1NzVlZmJkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtODcsNyArODcsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+LCBib29sIGltcG9ydGFudCwgYm9vbCBpbXBsaWNpdCA9IGZhbHNlKTsKICAgICB2b2lk
IHJvbGxiYWNrTGFzdFByb3BlcnRpZXMoaW50IG51bSk7Ci0gICAgYm9vbCBoYXNQcm9wZXJ0aWVz
KCkgY29uc3QgeyByZXR1cm4gIW1fcGFyc2VkUHJvcGVydGllcy5pc0VtcHR5KCk7IH0KKyAgICBi
b29sIGhhc1Byb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiAhbV9wYXJzZWRQcm9wZXJ0aWVzLT5p
c0VtcHR5KCk7IH0KIAogICAgIGJvb2wgcGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlELCBib29sIGlt
cG9ydGFudCk7CiAgICAgYm9vbCBwYXJzZVNob3J0aGFuZChDU1NQcm9wZXJ0eUlELCBjb25zdCBT
dHlsZVByb3BlcnR5U2hvcnRoYW5kJiwgYm9vbCBpbXBvcnRhbnQpOwpAQCAtMjUyLDggKzI1Miw4
IEBAIHB1YmxpYzoKICAgICBDU1NQYXJzZXJTZWxlY3RvciogY3JlYXRlRmxvYXRpbmdTZWxlY3Rv
cigpOwogICAgIFBhc3NPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNpbmtGbG9hdGluZ1NlbGVj
dG9yKENTU1BhcnNlclNlbGVjdG9yKik7CiAKLSAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNl
bGVjdG9yPiA+KiBjcmVhdGVGbG9hdGluZ1NlbGVjdG9yVmVjdG9yKCk7Ci0gICAgUGFzc093blB0
cjxWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+ID4gc2lua0Zsb2F0aW5nU2VsZWN0
b3JWZWN0b3IoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiopOworICAgIENTU1Nl
bGVjdG9yVmVjdG9yKiBjcmVhdGVGbG9hdGluZ1NlbGVjdG9yVmVjdG9yKCk7CisgICAgUGFzc093
blB0cjxDU1NTZWxlY3RvclZlY3Rvcj4gc2lua0Zsb2F0aW5nU2VsZWN0b3JWZWN0b3IoQ1NTU2Vs
ZWN0b3JWZWN0b3IqKTsKIAogICAgIENTU1BhcnNlclZhbHVlTGlzdCogY3JlYXRlRmxvYXRpbmdW
YWx1ZUxpc3QoKTsKICAgICBQYXNzT3duUHRyPENTU1BhcnNlclZhbHVlTGlzdD4gc2lua0Zsb2F0
aW5nVmFsdWVMaXN0KENTU1BhcnNlclZhbHVlTGlzdCopOwpAQCAtMjcxLDEwICsyNzEsMTAgQEAg
cHVibGljOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+IFJ1bGVM
aXN0OwogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZU1lZGlhUnVsZShNZWRpYVF1ZXJ5U2V0Kiwg
UnVsZUxpc3QqKTsKICAgICBSdWxlTGlzdCogY3JlYXRlUnVsZUxpc3QoKTsKLSAgICBTdHlsZVJ1
bGVCYXNlKiBjcmVhdGVTdHlsZVJ1bGUoVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4g
Piogc2VsZWN0b3JzKTsKKyAgICBTdHlsZVJ1bGVCYXNlKiBjcmVhdGVTdHlsZVJ1bGUoQ1NTU2Vs
ZWN0b3JWZWN0b3IqIHNlbGVjdG9ycyk7CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlRm9udEZh
Y2VSdWxlKCk7CiAgICAgU3R5bGVSdWxlQmFzZSogY3JlYXRlUGFnZVJ1bGUoUGFzc093blB0cjxD
U1NQYXJzZXJTZWxlY3Rvcj4gcGFnZVNlbGVjdG9yKTsKLSAgICBTdHlsZVJ1bGVCYXNlKiBjcmVh
dGVSZWdpb25SdWxlKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4qIHJlZ2lvblNl
bGVjdG9yLCBSdWxlTGlzdCogcnVsZXMpOworICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZVJlZ2lv
blJ1bGUoQ1NTU2VsZWN0b3JWZWN0b3IqIHJlZ2lvblNlbGVjdG9yLCBSdWxlTGlzdCogcnVsZXMp
OwogICAgIFN0eWxlUnVsZUJhc2UqIGNyZWF0ZU1hcmdpbkF0UnVsZShDU1NTZWxlY3Rvcjo6TWFy
Z2luQm94VHlwZSk7CiAgICAgdm9pZCBzdGFydERlY2xhcmF0aW9uc0Zvck1hcmdpbkJveCgpOwog
ICAgIHZvaWQgZW5kRGVjbGFyYXRpb25zRm9yTWFyZ2luQm94KCk7CkBAIC0yOTcsMTAgKzI5Nywx
MCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGludmFsaWRCbG9ja0hpdCgpOwogCi0gICAgVmVjdG9y
PE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiogcmV1c2FibGVTZWxlY3RvclZlY3RvcigpIHsg
cmV0dXJuICZtX3JldXNhYmxlU2VsZWN0b3JWZWN0b3I7IH0KKyAgICBDU1NTZWxlY3RvclZlY3Rv
ciogc2VsZWN0b3JWZWN0b3IoKSB7IHJldHVybiBtX3NlbGVjdG9yVmVjdG9yLmdldCgpOyB9CiAK
LSAgICB2b2lkIHNldFJldXNhYmxlUmVnaW9uU2VsZWN0b3JWZWN0b3IoVmVjdG9yPE93blB0cjxD
U1NQYXJzZXJTZWxlY3Rvcj4gPiogc2VsZWN0b3JzKTsKLSAgICBWZWN0b3I8T3duUHRyPENTU1Bh
cnNlclNlbGVjdG9yPiA+KiByZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yKCkgeyByZXR1cm4g
Jm1fcmV1c2FibGVSZWdpb25TZWxlY3RvclZlY3RvcjsgfQorICAgIHZvaWQgc2V0UmV1c2FibGVS
ZWdpb25TZWxlY3RvclZlY3RvcihDU1NTZWxlY3RvclZlY3Rvciogc2VsZWN0b3JzKTsKKyAgICBD
U1NTZWxlY3RvclZlY3RvciogcmV1c2FibGVSZWdpb25TZWxlY3RvclZlY3RvcigpIHsgcmV0dXJu
ICZtX3JldXNhYmxlUmVnaW9uU2VsZWN0b3JWZWN0b3I7IH0KIAogICAgIHZvaWQgdXBkYXRlTGFz
dFNlbGVjdG9yTGluZUFuZFBvc2l0aW9uKCk7CiAgICAgdm9pZCB1cGRhdGVMYXN0TWVkaWFMaW5l
KE1lZGlhUXVlcnlTZXQqKTsKQEAgLTMxOCw4ICszMTgsOSBAQCBwdWJsaWM6CiAgICAgUmVmUHRy
PFN0eWxlS2V5ZnJhbWU+IG1fa2V5ZnJhbWU7CiAgICAgT3duUHRyPE1lZGlhUXVlcnk+IG1fbWVk
aWFRdWVyeTsKICAgICBPd25QdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBtX3ZhbHVlTGlzdDsKKwog
ICAgIHR5cGVkZWYgVmVjdG9yPENTU1Byb3BlcnR5LCAyNTY+IFBhcnNlZFByb3BlcnR5VmVjdG9y
OwotICAgIFBhcnNlZFByb3BlcnR5VmVjdG9yIG1fcGFyc2VkUHJvcGVydGllczsKKyAgICBPd25Q
dHI8UGFyc2VkUHJvcGVydHlWZWN0b3I+IG1fcGFyc2VkUHJvcGVydGllczsKICAgICBDU1NTZWxl
Y3Rvckxpc3QqIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvcjsKIAogICAgIHVuc2lnbmVk
IG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1hcmdpbkJveDsKQEAgLTQ0MSw3ICs0NDIsNyBA
QCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFRdWVyeVNldD4gPiBtX3BhcnNlZE1l
ZGlhUXVlcnlTZXRzOwogICAgIFZlY3RvcjxPd25QdHI8UnVsZUxpc3Q+ID4gbV9wYXJzZWRSdWxl
TGlzdHM7CiAgICAgSGFzaFNldDxDU1NQYXJzZXJTZWxlY3Rvcio+IG1fZmxvYXRpbmdTZWxlY3Rv
cnM7Ci0gICAgSGFzaFNldDxWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+Kj4gbV9m
bG9hdGluZ1NlbGVjdG9yVmVjdG9yczsKKyAgICBIYXNoU2V0PENTU1NlbGVjdG9yVmVjdG9yKj4g
bV9mbG9hdGluZ1NlbGVjdG9yVmVjdG9yczsKICAgICBIYXNoU2V0PENTU1BhcnNlclZhbHVlTGlz
dCo+IG1fZmxvYXRpbmdWYWx1ZUxpc3RzOwogICAgIEhhc2hTZXQ8Q1NTUGFyc2VyRnVuY3Rpb24q
PiBtX2Zsb2F0aW5nRnVuY3Rpb25zOwogCkBAIC00NTEsOCArNDUyLDggQEAgcHJpdmF0ZToKIAog
ICAgIE93blB0cjxWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+ID4gPiBtX2Zsb2F0aW5nS2V5
ZnJhbWVWZWN0b3I7CiAKLSAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+IG1f
cmV1c2FibGVTZWxlY3RvclZlY3RvcjsKLSAgICBWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVj
dG9yPiA+IG1fcmV1c2FibGVSZWdpb25TZWxlY3RvclZlY3RvcjsKKyAgICBPd25QdHI8Q1NTU2Vs
ZWN0b3JWZWN0b3I+IG1fc2VsZWN0b3JWZWN0b3I7CisgICAgQ1NTU2VsZWN0b3JWZWN0b3IgbV9y
ZXVzYWJsZVJlZ2lvblNlbGVjdG9yVmVjdG9yOwogCiAgICAgUmVmUHRyPENTU0NhbGNWYWx1ZT4g
bV9wYXJzZWRDYWxjdWxhdGlvbjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1BhcnNlclZhbHVlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNw
cAppbmRleCAzN2EwZDQ1MmM2NWM0NTVlNWM0MTA0ZTU0ZTQ3ODkyZmIyMTU1ZTA0Li4xYWI0ZGZl
ZmRmNjY3MmQ3YzBhZGM4NDU0NmIzODg3MDFiZWM3ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyVmFsdWVzLmNwcApAQCAtMTE0LDcgKzExNCw3IEBAIENTU1BhcnNlclNlbGVjdG9yOjp+
Q1NTUGFyc2VyU2VsZWN0b3IoKQogICAgIH0KIH0KIAotdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6
YWRvcHRTZWxlY3RvclZlY3RvcihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+JiBz
ZWxlY3RvclZlY3RvcikKK3ZvaWQgQ1NTUGFyc2VyU2VsZWN0b3I6OmFkb3B0U2VsZWN0b3JWZWN0
b3IoQ1NTU2VsZWN0b3JWZWN0b3ImIHNlbGVjdG9yVmVjdG9yKQogewogICAgIENTU1NlbGVjdG9y
TGlzdCogc2VsZWN0b3JMaXN0ID0gZmFzdE5ldzxDU1NTZWxlY3Rvckxpc3Q+KCk7CiAgICAgc2Vs
ZWN0b3JMaXN0LT5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXJWYWx1ZXMuaAppbmRleCBjMzJhNTdkZDY4Nzk5OGRlZDZjMjQwMWY0NGRk
MzMxOTRhMmMyOTU0Li5hNzM2YWJiODlmOTJkYTM3YWU4NmIzNDg5MTc1ZjFkODA3MTVmMTdlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlclZhbHVlcy5oCkBAIC0xMDQsNiArMTA0LDEwIEBAIHB1
YmxpYzoKICAgICBPd25QdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBhcmdzOwogfTsKIAorY2xhc3Mg
Q1NTUGFyc2VyU2VsZWN0b3I7CisKK3R5cGVkZWYgVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxl
Y3Rvcj4gPiBDU1NTZWxlY3RvclZlY3RvcjsKKwogY2xhc3MgQ1NTUGFyc2VyU2VsZWN0b3Igewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtMTIwLDcgKzEyNCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFJlbGF0aW9uKENTU1NlbGVjdG9yOjpSZWxhdGlvbiB2YWx1
ZSkgeyBtX3NlbGVjdG9yLT5tX3JlbGF0aW9uID0gdmFsdWU7IH0KICAgICB2b2lkIHNldEZvclBh
Z2UoKSB7IG1fc2VsZWN0b3ItPnNldEZvclBhZ2UoKTsgfQogCi0gICAgdm9pZCBhZG9wdFNlbGVj
dG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9yVmVj
dG9yKTsKKyAgICB2b2lkIGFkb3B0U2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3ImKTsK
IAogICAgIENTU1NlbGVjdG9yOjpQc2V1ZG9UeXBlIHBzZXVkb1R5cGUoKSBjb25zdCB7IHJldHVy
biBtX3NlbGVjdG9yLT5wc2V1ZG9UeXBlKCk7IH0KICAgICBib29sIGlzVW5rbm93blBzZXVkb0Vs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50
KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5jcHAKaW5kZXggZjgzMjNlMDAx
ODI0NGRhZWMxM2M0MWI1YTk3YWI1YzU2MTllZmYzMy4uM2NmMDIwYTcyMGE3NzE0ZmMzNmJkODNl
Njk3YWRhOWE1MjhhYzMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVj
dG9yTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5jcHAK
QEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBDU1NTZWxlY3Rvckxpc3Q6OmFkb3B0KENTU1NlbGVjdG9y
TGlzdCYgbGlzdCkKICAgICBsaXN0Lm1fc2VsZWN0b3JBcnJheSA9IDA7CiB9CiAKLXZvaWQgQ1NT
U2VsZWN0b3JMaXN0OjphZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2Vy
U2VsZWN0b3I+ID4mIHNlbGVjdG9yVmVjdG9yKQordm9pZCBDU1NTZWxlY3Rvckxpc3Q6OmFkb3B0
U2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3ImIHNlbGVjdG9yVmVjdG9yKQogewogICAg
IGRlbGV0ZVNlbGVjdG9ycygpOwogICAgIGNvbnN0IHNpemVfdCB2ZWN0b3JTaXplID0gc2VsZWN0
b3JWZWN0b3Iuc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVj
dG9yTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yTGlzdC5oCmluZGV4IDg5
ODYwZWUwOTA5MGQ2YTE5YTJjYjhjMmU3YjQ0YjgyMDUzN2U4MGUuLmQ3MDQ1NGI3Y2E1YWMzYzU5
Mjg2M2Y4ZDBhNWM0YWMyYWQyMjlhMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTZWxlY3Rvckxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3JMaXN0
LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgQ1NTU2VsZWN0b3JMaXN0X2gKICNkZWZpbmUg
Q1NTU2VsZWN0b3JMaXN0X2gKIAorI2luY2x1ZGUgIkNTU1BhcnNlclZhbHVlcy5oIgogI2luY2x1
ZGUgIkNTU1NlbGVjdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDcgKzQzLDcg
QEAgcHVibGljOgogICAgIH5DU1NTZWxlY3Rvckxpc3QoKTsKIAogICAgIHZvaWQgYWRvcHQoQ1NT
U2VsZWN0b3JMaXN0JiBsaXN0KTsKLSAgICB2b2lkIGFkb3B0U2VsZWN0b3JWZWN0b3IoVmVjdG9y
PE93blB0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gPiYgc2VsZWN0b3JWZWN0b3IpOworICAgIHZvaWQg
YWRvcHRTZWxlY3RvclZlY3RvcihDU1NTZWxlY3RvclZlY3RvciYpOwogCiAgICAgQ1NTU2VsZWN0
b3IqIGZpcnN0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RvckFycmF5ID8gbV9zZWxlY3RvckFy
cmF5IDogMDsgfQogICAgIHN0YXRpYyBDU1NTZWxlY3RvciogbmV4dChDU1NTZWxlY3RvciopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NWR0NTU1BhcnNlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAppbmRleCBkMDZiYjIwM2JhNzY1MzYzZGU1MGZl
ZjA3ODAzMGMxYWM2OTZhOGJiLi5jN2VjNmQ5Zjk0MTQzMTkxZmE2YzFhZTI0NWQ4ZmQ2NmJhZTYz
ODgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU1ZHQ1NTUGFyc2VyLmNwcApAQCAtMjgxLDcgKzI4MSw3IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNWR1ZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICAgICAgICAgIHJvbGxiYWNrTGFzdFByb3BlcnRpZXMoMSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgQ1NTVmFsdWUqIHZhbHVl
ID0gbV9wYXJzZWRQcm9wZXJ0aWVzLmxhc3QoKS52YWx1ZSgpOworICAgICAgICBDU1NWYWx1ZSog
dmFsdWUgPSBtX3BhcnNlZFByb3BlcnRpZXMtPmxhc3QoKS52YWx1ZSgpOwogICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmtlck1pZCwgdmFsdWUsIGltcG9ydGFudCk7CiAgICAgICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5TWFya2VyRW5kLCB2YWx1ZSwgaW1wb3J0YW50KTsKICAg
ICAgICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNw
cAppbmRleCAzNTg3MTk0MjAwYTlmNzk1NzNiN2VhODRiMDUxNjVlZTgwOGI0OTU2Li4wM2VmYzNh
MzRlNTE3ZWViOGI4NDUzZGY4ZmIyNjJmYzA0MDhhNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxl
LmNwcApAQCAtMzU5LDcgKzM1OSw3IEBAIHZvaWQgU3R5bGVSdWxlTWVkaWE6OnJlcG9ydERlc2Nl
bmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJCiAgICAgaW5m
by5hZGRJbnN0cnVtZW50ZWRNZW1iZXIobV9tZWRpYVF1ZXJpZXMpOwogfQogCi1TdHlsZVJ1bGVS
ZWdpb246OlN0eWxlUnVsZVJlZ2lvbihWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+
KiBzZWxlY3RvcnMsIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykK
K1N0eWxlUnVsZVJlZ2lvbjo6U3R5bGVSdWxlUmVnaW9uKENTU1NlbGVjdG9yVmVjdG9yKiBzZWxl
Y3RvcnMsIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykKICAgICA6
IFN0eWxlUnVsZUJsb2NrKFJlZ2lvbiwgYWRvcHRSdWxlcykKIHsKICAgICBtX3NlbGVjdG9yTGlz
dC5hZG9wdFNlbGVjdG9yVmVjdG9yKCpzZWxlY3RvcnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCmlu
ZGV4IDc3YmQyZGM2M2U1NzlhMTZmYTY4NDNkN2UwNWU5Y2Q3OThiNjE5N2MuLjdiNjAyNTA0MmEx
OThlYzZlZDY2ZDQ4YjFhMjdhM2Q5OTJkMDA5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZVJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgKQEAg
LTEwMCw3ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogcHJv
cGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5nZXQoKTsgfQogICAgIFN0eWxl
UHJvcGVydHlTZXQqIG11dGFibGVQcm9wZXJ0aWVzKCk7CiAgICAgCi0gICAgdm9pZCBwYXJzZXJB
ZG9wdFNlbGVjdG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNl
bGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7
IH0KKyAgICB2b2lkIHBhcnNlckFkb3B0U2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3Im
IHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9y
cyk7IH0KICAgICB2b2lkIHdyYXBwZXJBZG9wdFNlbGVjdG9yTGlzdChDU1NTZWxlY3Rvckxpc3Qm
IHNlbGVjdG9ycykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdChzZWxlY3RvcnMpOyB9CiAgICAgdm9p
ZCBzZXRQcm9wZXJ0aWVzKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4pOwogCkBAIC0xNDks
NyArMTQ5LDcgQEAgcHVibGljOgogICAgIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnRp
ZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuZ2V0KCk7IH0KICAgICBTdHlsZVByb3Bl
cnR5U2V0KiBtdXRhYmxlUHJvcGVydGllcygpOwogCi0gICAgdm9pZCBwYXJzZXJBZG9wdFNlbGVj
dG9yVmVjdG9yKFZlY3RvcjxPd25QdHI8Q1NTUGFyc2VyU2VsZWN0b3I+ID4mIHNlbGVjdG9ycykg
eyBtX3NlbGVjdG9yTGlzdC5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KKyAgICB2
b2lkIHBhcnNlckFkb3B0U2VsZWN0b3JWZWN0b3IoQ1NTU2VsZWN0b3JWZWN0b3ImIHNlbGVjdG9y
cykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9ycyk7IH0KICAg
ICB2b2lkIHdyYXBwZXJBZG9wdFNlbGVjdG9yTGlzdChDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9y
cykgeyBtX3NlbGVjdG9yTGlzdC5hZG9wdChzZWxlY3RvcnMpOyB9CiAgICAgdm9pZCBzZXRQcm9w
ZXJ0aWVzKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4pOwogCkBAIC0yMDQsNyArMjA0LDcg
QEAgcHJpdmF0ZToKIAogY2xhc3MgU3R5bGVSdWxlUmVnaW9uIDogcHVibGljIFN0eWxlUnVsZUJs
b2NrIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVJ1bGVSZWdpb24+IGNy
ZWF0ZShWZWN0b3I8T3duUHRyPENTU1BhcnNlclNlbGVjdG9yPiA+KiBzZWxlY3RvcnMsIFZlY3Rv
cjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcykKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTdHlsZVJ1bGVSZWdpb24+IGNyZWF0ZShDU1NTZWxlY3RvclZlY3Rvciogc2VsZWN0b3Jz
LCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIGFkb3B0UnVsZXMpCiAgICAgewogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFN0eWxlUnVsZVJlZ2lvbihzZWxlY3RvcnMsIGFkb3B0
UnVsZXMpKTsKICAgICB9CkBAIC0yMTYsNyArMjE2LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVw
b3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBTdHlsZVJ1bGVSZWdpb24oVmVjdG9yPE93blB0cjxDU1NQYXJzZXJTZWxlY3Rv
cj4gPiosIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4gPiYgYWRvcHRSdWxlcyk7CisgICAg
U3R5bGVSdWxlUmVnaW9uKENTU1NlbGVjdG9yVmVjdG9yKiwgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1
bGVCYXNlPiA+JiBhZG9wdFJ1bGVzKTsKICAgICBTdHlsZVJ1bGVSZWdpb24oY29uc3QgU3R5bGVS
dWxlUmVnaW9uJik7CiAgICAgCiAgICAgQ1NTU2VsZWN0b3JMaXN0IG1fc2VsZWN0b3JMaXN0Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>