<?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>42908</bug_id>
          
          <creation_ts>2010-07-23 13:28:53 -0700</creation_ts>
          <short_desc>WebGL must enforce restrictions even if running on OpenGL ES 2.0</short_desc>
          <delta_ts>2010-08-25 16:41:20 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gregg Tavares">gman</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gman</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>255533</commentid>
    <comment_count>0</comment_count>
    <who name="Gregg Tavares">gman</who>
    <bug_when>2010-07-23 13:28:53 -0700</bug_when>
    <thetext>The current Webkit implementation of WebGL checks if the underlying platform is OpenGL ES 2.0 and if so stops checking certain WebGL requirements.

The issue is nearly all implementations of OpenGL ES 2.0 support various extensions, for example

GL_OES_texture_npot         makes npot textures work in all situations
GL_OES_element_index_uint   makes it possible to pass GL_INT to drawElement
GL_OES_texture_float        makes it possible to pass GL_FLOAT to texImage2D

WebGL 1.0 is supposed to enforce the restriction these features do not work unless some specific WebGL extension enables the feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267494</commentid>
    <comment_count>1</comment_count>
      <attachid>65012</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-20 17:23:36 -0700</bug_when>
    <thetext>Created attachment 65012
patch

Compiled and tested in Safari and Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268734</commentid>
    <comment_count>2</comment_count>
      <attachid>65012</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-24 13:00:56 -0700</bug_when>
    <thetext>Comment on attachment 65012
patch

After looking at these changes I do not think that this is the right direction to go. Please see below and reply with your thoughts.


WebCore/html/canvas/WebGLRenderingContext.cpp:306
 +      if ((!isGLES2Compliant() || !isGLES2NPOTStrict()) &amp;&amp; texture)
This looks like a disaster waiting to happen. If we have multiple guards for certain of the tracking and verification logic how are we going to keep it straight? I think it would be better to just always do the tracking logic regardless of whether we think we are running on OpenGL ES 2.0, because in the presence of extensions (including ones that are exposed via WebGL) some of this logic will be enabled once the user enables an extension.


WebCore/html/canvas/WebGLRenderingContext.cpp:542
 +      if (!isGLES2Compliant() || !isGLES2NPOTStrict())
Same comment here.


WebCore/html/canvas/WebGLRenderingContext.cpp:975
 +      if (!isGLES2Compliant() || !isErrorGeneratedOnOutOfBoundsAccesses()) {
Same comment here.


WebCore/html/canvas/WebGLRenderingContext.cpp:1130
 +      if (!isGLES2NPOTStrict() || !isGLES2Compliant()) {
Same here.


WebCore/html/canvas/WebGLRenderingContext.cpp:1137
 +      if (!isGLES2Compliant() || !isGLES2Compliant())
This is a flat out bug.


WebCore/html/canvas/WebGLRenderingContext.cpp:2108
 +      if (!isGLES2Compliant() || !isGLES2NPOTStrict())
Here too.


WebCore/html/canvas/WebGLRenderingContext.cpp:2222
 +      if (!isGLES2ParameterStrict() || !isGLES2NPOTStrict()) {
Here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268954</commentid>
    <comment_count>3</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-24 18:17:46 -0700</bug_when>
    <thetext>Seems like if we always track NPOT and texture complete-ness in WebGLRenderingContext and remove the isGLES2NPOTStrict() flag, it will clean up most things.  If we do that, command buffer should not turn this on to avoid double efforts.

For isGLES2ParameterStrict(), we might just remove the flag and always do the checking.  The overhead is trivia, and the code is much cleaner.

For OutOfBoundsAccesses, I think we should keep the flag.  If command buffer implements the stricter restriction, we can turn it off on the WebGLRenderingContext side because Gregg is uncomfortable about totally turning it off on the command buffer side.

Let me know what you think then I can finish this.

Mo

(In reply to comment #2)
&gt; (From update of attachment 65012 [details])
&gt; After looking at these changes I do not think that this is the right direction to go. Please see below and reply with your thoughts.
&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:306
&gt;  +      if ((!isGLES2Compliant() || !isGLES2NPOTStrict()) &amp;&amp; texture)
&gt; This looks like a disaster waiting to happen. If we have multiple guards for certain of the tracking and verification logic how are we going to keep it straight? I think it would be better to just always do the tracking logic regardless of whether we think we are running on OpenGL ES 2.0, because in the presence of extensions (including ones that are exposed via WebGL) some of this logic will be enabled once the user enables an extension.
&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:542
&gt;  +      if (!isGLES2Compliant() || !isGLES2NPOTStrict())
&gt; Same comment here.
&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:975
&gt;  +      if (!isGLES2Compliant() || !isErrorGeneratedOnOutOfBoundsAccesses()) {
&gt; Same comment here.
&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:1130
&gt;  +      if (!isGLES2NPOTStrict() || !isGLES2Compliant()) {
&gt; Same here.
&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:1137
&gt;  +      if (!isGLES2Compliant() || !isGLES2Compliant())
&gt; This is a flat out bug.
&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:2108
&gt;  +      if (!isGLES2Compliant() || !isGLES2NPOTStrict())
&gt; Here too.
&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:2222
&gt;  +      if (!isGLES2ParameterStrict() || !isGLES2NPOTStrict()) {
&gt; Here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269341</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-25 10:53:04 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Seems like if we always track NPOT and texture complete-ness in WebGLRenderingContext and remove the isGLES2NPOTStrict() flag, it will clean up most things.  If we do that, command buffer should not turn this on to avoid double efforts.

It is likely that WebGL will expose the OES_texture_npot extension at some point, which means that the NPOT checks in WebGLRenderingContext will need to be disabled if that extension is supported and was enabled at the WebGL level. The command buffer code will advertise the availability of OES_texture_npot if the underlying hardware supports it, and enforce the limited NPOT restrictions if not. Either way, I do not see an opportunity to disable the checks in the command buffer code. I agree that we should basically always track the NPOT and texture completeness state in WebGLRenderingContext. With suitable optimization these checks should not be that expensive. (The common case going forward is that WebGLRenderingContext will have to do the checks, since desktop GL and most OpenGL ES 2.0 implementations will support unrestricted NPOT textures.)

&gt; For isGLES2ParameterStrict(), we might just remove the flag and always do the checking.  The overhead is trivia, and the code is much cleaner.

Agree.

&gt; For OutOfBoundsAccesses, I think we should keep the flag.  If command buffer implements the stricter restriction, we can turn it off on the WebGLRenderingContext side because Gregg is uncomfortable about totally turning it off on the command buffer side.

Agree that we must not turn off the validation on the command buffer side. It would be ideal if the command buffer code had an option to implement the full WebGL index checking semantics. It&apos;s fine with me to leave that flag in place at this point because the checks are relatively expensive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269494</commentid>
    <comment_count>5</comment_count>
      <attachid>65473</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-25 14:14:44 -0700</bug_when>
    <thetext>Created attachment 65473
revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269503</commentid>
    <comment_count>6</comment_count>
      <attachid>65476</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-25 14:21:02 -0700</bug_when>
    <thetext>Created attachment 65476
revised patch: fixing an issue in WebCore/ChangeLog

It was introduced during rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269586</commentid>
    <comment_count>7</comment_count>
      <attachid>65476</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-25 16:25:04 -0700</bug_when>
    <thetext>Comment on attachment 65476
revised patch: fixing an issue in WebCore/ChangeLog

Thanks for making these changes. This looks much better to me. r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269601</commentid>
    <comment_count>8</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-25 16:41:20 -0700</bug_when>
    <thetext>Committed r66055: &lt;http://trac.webkit.org/changeset/66055&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65012</attachid>
            <date>2010-08-20 17:23:36 -0700</date>
            <delta_ts>2010-08-25 14:14:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>flags.patch</filename>
            <type>text/plain</type>
            <size>27934</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTc2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDkgQEAKKzIwMTAtMDgtMjAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBt
dXN0IGVuZm9yY2UgcmVzdHJpY3Rpb25zIGV2ZW4gaWYgcnVubmluZyBvbiBPcGVuR0wgRVMgMi4w
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjkwOAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpnZXRDb2xvckJ1ZmZlckZvcm1hdCk6IEdldCBmb3Jt
YXQgYXQgZ2l2ZW4gbGV2ZWwgaW5zdGVhZCBvZiAwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6IEFkZCB0aHJlZSBuZXcgZmxhZ3MgYW5kIHVzZSB0aGVt
IHRvIHJlcGxhY2UgdGhlIG9yaWdpbmFsIGlzR0xFUzJDb21wbGlhbnQoKS4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFy
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlU
ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdB
cnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxl
bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZW5lcmF0ZU1pcG1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmhpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0VuYWJsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzR0xFUzJQYXJhbWV0ZXJTdHJp
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0dMRVMyTlBP
VFN0cmljdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRXJy
b3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBEZWNsYXJlIHRocmVlIG5ldyBmbGFncy4KKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwOiBHZXQgZm9ybWF0IGF0IGdpdmVuIGxl
dmVsIGluc3RlYWQgb2YgMC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6Z2V0SW50
ZXJuYWxGb3JtYXQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oOiBEaXR0
by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOiBBZGQg
dGhyZWUgbmV3IGZsYWdzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGlj
c0NvbnRleHQzRE1hYy5tbTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6aXNHTEVTMlBhcmFtZXRlclN0cmljdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6aXNHTEVTMk5QT1RTdHJpY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyUGFyYW1ldGVy
U3RyaWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyTlBP
VFN0cmljdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nlcyk6CisKIDIwMTAtMDgtMjAgIEtpbnVrbyBZYXN1
ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQ7IGJ1aWxkIGZp
eC4gIEhhZCBpbmNsdWRlZCB3cm9uZyB2ZXJzaW9uIG9mIGJ1aWxkIGZpbGUuCkluZGV4OiBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDY1NzQwKQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAxLDcgKzEwMSw3IEBAIHVuc2lnbmVkIGxvbmcgV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0Q29s
b3IKICAgICAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChtX2NvbG9yQXR0YWNobWVudC0+aXNUZXh0dXJl
KCkpCi0gICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xUZXh0dXJlKj4o
bV9jb2xvckF0dGFjaG1lbnQpKS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgICAgIHJl
dHVybiAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihtX2NvbG9yQXR0YWNobWVudCkp
LT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lv
biA2NTc0MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDEwICsxMjcsMTAgQEAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBUZXh0
dXJlU2l6ZSk7CiAgICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpj
b21wdXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFwVGV4
dHVyZVNpemUpOwogCi0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICBpZiAoIWlz
R0xFUzJOUE9UU3RyaWN0KCkpCiAgICAgICAgIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4
MSgpOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICBpbml0VmVydGV4QXR0
cmliMCgpOwotICAgIH0KICAgICBtX2NvbnRleHQtPnJlc2hhcGUoY2FudmFzKCktPndpZHRoKCks
IGNhbnZhcygpLT5oZWlnaHQoKSk7CiAgICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52
YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKIH0KQEAgLTMwMyw3ICszMDMsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUoCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZSh0YXJnZXQsIG9iamVjdE9yWmVy
byh0ZXh0dXJlKSk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdGV4dHVyZSkKKyAg
ICBpZiAoKCFpc0dMRVMyQ29tcGxpYW50KCkgfHwgIWlzR0xFUzJOUE9UU3RyaWN0KCkpICYmIHRl
eHR1cmUpCiAgICAgICAgIHRleHR1cmUtPnNldFRhcmdldCh0YXJnZXQsIG1heExldmVsKTsKIAog
ICAgIC8vIEZJWE1FOiBkbyB3ZSB3YW50IHRvIGRvIHRoaXMgb24gYWxsIHBsYXRmb3Jtcz8KQEAg
LTMzNSw3ICszMzUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRDb2xvcihk
CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxv
bmcgbW9kZSkKIHsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgIGlmICghaXNH
TEVTMlBhcmFtZXRlclN0cmljdCgpKSB7CiAgICAgICAgIGlmICghdmFsaWRhdGVCbGVuZEVxdWF0
aW9uKG1vZGUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM0NSw3ICszNDUsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvCiAKIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2Rl
UkdCLCB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSkKIHsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlh
bnQoKSkgeworICAgIGlmICghaXNHTEVTMlBhcmFtZXRlclN0cmljdCgpKSB7CiAgICAgICAgIGlm
ICghdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGVSR0IpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRp
b24obW9kZUFscGhhKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsOSArMzcy
LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHUKICAgICBXZWJH
TEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyh0YXJnZXQsIHVz
YWdlKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghYnVmZmVy
LT5hc3NvY2lhdGVCdWZmZXJEYXRhKHNpemUpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkp
IHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoc2l6ZSkpIHsKKyAg
ICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQog
CiAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgdXNhZ2UpOwpAQCAtMzg3
LDkgKzM4OSwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSh1CiAg
ICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnModGFy
Z2V0LCB1c2FnZSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAo
IWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgewotICAgICAgICBtX2NvbnRleHQt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgcmV0dXJuOworICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nl
c3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEp
KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEsIHVzYWdlKTsK
QEAgLTQwMiw5ICs0MDYsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRh
dGEodQogICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0
ZXJzKHRhcmdldCwgdXNhZ2UpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsKLSAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91
bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0
YShkYXRhKSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLCB1
c2FnZSk7CkBAIC00MTcsOSArNDIzLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
dWZmZXJTdWJEYXQKICAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRh
UGFyYW1ldGVycyh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRl
QnVmZmVyU3ViRGF0YShvZmZzZXQsIGRhdGEpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkp
IHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEob2Zmc2V0LCBk
YXRhKSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KICAgICB9CiAKICAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQs
IGRhdGEpOwpAQCAtNDMyLDkgKzQ0MCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YnVmZmVyU3ViRGF0CiAgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0
YVBhcmFtZXRlcnModGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFidWZmZXItPmFzc29jaWF0
ZUJ1ZmZlclN1YkRhdGEob2Zmc2V0LCBkYXRhKSkgewotICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
cmV0dXJuOworICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nlcygp
KSB7CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKG9mZnNldCwg
ZGF0YSkpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0
LCBkYXRhKTsKQEAgLTQ0Myw3ICs0NTMsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YnVmZmVyU3ViRGF0CiAKIHVuc2lnbmVkIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQogewotICAgIGlmICghaXNH
TEVTMkNvbXBsaWFudCgpKSB7CisgICAgaWYgKCFpc0dMRVMyUGFyYW1ldGVyU3RyaWN0KCkpIHsK
ICAgICAgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsK
ICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTQ1Nyw3ICs0Njcs
NyBAQCB1bnNpZ25lZCBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlCiAKIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcih1bnNpZ25lZCBsb25nIG1hc2spCiB7Ci0gICAgaWYg
KCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICBpZiAoIWlzR0xFUzJQYXJhbWV0ZXJTdHJpY3Qo
KSkgewogICAgICAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZF
Ul9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTUyMiwxNCArNTMyLDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjpp
c05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSAm
JiBsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPmNvcHlUZXhJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIpOwogICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBs
ZXRlLCBub25lIG9mIHRoZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCi0gICAgaWYgKCFpc0dM
RVMyQ29tcGxpYW50KCkpCisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgfHwgIWlzR0xFUzJO
UE9UU3RyaWN0KCkpCiAgICAgICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSk7CiAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQogICAgICAgICBtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+b25BdHRhY2hlZE9iamVjdENoYW5nZSh0ZXgpOwpAQCAtNTQzLDcgKzU1Myw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW0KICAgICAgICAgcmV0
dXJuOwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CiAgICAgICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkKLSAgICAgICAg
ICAgICYmICFpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKHRl
eC0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwKKyAgICAgICAgICAgICYmICFpc1RleEludGVybmFsRm9y
bWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCkp
KSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC03MTMs
NyArNzIzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcgogCiB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKIHsK
LSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgIGlmICghaXNHTEVTMlBhcmFtZXRl
clN0cmljdCgpKSB7CiAgICAgICAgIGlmICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTE2LDI2ICs5MjYsMjcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXModQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKLSAgICBDaGVja2Vk
SW50PGludDMyX3Q+IGNoZWNrZWRGaXJzdChmaXJzdCk7Ci0gICAgQ2hlY2tlZEludDxpbnQzMl90
PiBjaGVja2VkQ291bnQoY291bnQpOwotICAgIENoZWNrZWRJbnQ8aW50MzJfdD4gY2hlY2tlZFN1
bSA9IGNoZWNrZWRGaXJzdCArIGNoZWNrZWRDb3VudDsKLSAgICBpZiAoIWNoZWNrZWRTdW0udmFs
aWQoKSB8fCAhdmFsaWRhdGVSZW5kZXJpbmdTdGF0ZShjaGVja2VkU3VtLnZhbHVlKCkpKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZl
IGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCisgICAgICAgIENoZWNrZWRJbnQ8aW50MzJfdD4gY2hl
Y2tlZEZpcnN0KGZpcnN0KTsKKyAgICAgICAgQ2hlY2tlZEludDxpbnQzMl90PiBjaGVja2VkQ291
bnQoY291bnQpOworICAgICAgICBDaGVja2VkSW50PGludDMyX3Q+IGNoZWNrZWRTdW0gPSBjaGVj
a2VkRmlyc3QgKyBjaGVja2VkQ291bnQ7CisgICAgICAgIGlmICghY2hlY2tlZFN1bS52YWxpZCgp
IHx8ICF2YWxpZGF0ZVJlbmRlcmluZ1N0YXRlKGNoZWNrZWRTdW0udmFsdWUoKSkpIHsKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNH
TEVTMkNvbXBsaWFudCgpKSB7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAgICAg
IHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBj
b3VudCAtIDEpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKICAgICAgICAgaGFuZGxl
TlBPVFRleHR1cmVzKHRydWUpOwotICAgIH0KICAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9k
ZSwgZmlyc3QsIGNvdW50KTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAgICAg
IHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgaWYgKCFp
c0dMRVMyTlBPVFN0cmljdCgpKQogICAgICAgICBoYW5kbGVOUE9UVGV4dHVyZXMoZmFsc2UpOwot
ICAgICAgICBpZiAodmVydGV4QXR0cmliMFNpbXVsYXRlZCkKLSAgICAgICAgICAgIHJlc3RvcmVT
dGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0gICAgfQogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIApAQCAtOTYwLDM3ICs5NzEsMzcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKLSAgICBs
b25nIG51bUVsZW1lbnRzOwotICAgIAotICAgIGlmICghdmFsaWRhdGVFbGVtZW50QXJyYXlTaXpl
KGNvdW50LCB0eXBlLCBvZmZzZXQpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKHR5
cGUsIG51bUVsZW1lbnRzKSB8fCAhdmFsaWRhdGVSZW5kZXJpbmdTdGF0ZShudW1FbGVtZW50cykp
Ci0gICAgICAgIGlmICghdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgb2Zm
c2V0LCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlUmVuZGVyaW5nU3RhdGUobnVtRWxlbWVudHMp
KSB7CisgICAgbG9uZyBudW1FbGVtZW50cyA9IDA7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkgfHwgIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAg
ICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQorICAgICAgICBpZiAo
IXZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShjb3VudCwgdHlwZSwgb2Zmc2V0KSkgewogICAgICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAg
IGlmICghdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKHR5cGUsIG51bUVsZW1lbnRzKSB8
fCAhdmFsaWRhdGVSZW5kZXJpbmdTdGF0ZShudW1FbGVtZW50cykpIHsKKyAgICAgICAgICAgIGlm
ICghdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVt
ZW50cykgfHwgIXZhbGlkYXRlUmVuZGVyaW5nU3RhdGUobnVtRWxlbWVudHMpKSB7CisgICAgICAg
ICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KIAogICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9
IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgaWYgKCFpc0dMRVMy
Q29tcGxpYW50KCkpCiAgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZl
cnRleEF0dHJpYjAobnVtRWxlbWVudHMpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
ICAgICAgICAgaGFuZGxlTlBPVFRleHR1cmVzKHRydWUpOwotICAgIH0KICAgICBtX2NvbnRleHQt
PmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0KTsKLSAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkgeworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0
dHJpYjBTaW11bGF0ZWQpCisgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBT
aW11bGF0aW9uKCk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQogICAgICAgICBoYW5k
bGVOUE9UVGV4dHVyZXMoZmFsc2UpOwotICAgICAgICBpZiAodmVydGV4QXR0cmliMFNpbXVsYXRl
ZCkKLSAgICAgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9u
KCk7Ci0gICAgfQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIAogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKIHsKLSAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgIGlmICghaXNHTEVTMlBhcmFtZXRlclN0
cmljdCgpKSB7CiAgICAgICAgIGlmICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMTExNiwxNCArMTEyNywxNCBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtCiAgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKHRhcmdldCwgZmFsc2UpOwogICAgIGlmICghdGV4KQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkgfHwgIWlzR0xFUzJDb21wbGlhbnQoKSkgewogICAgICAgICBpZiAoIXRl
eC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KICAgICBtX2NvbnRleHQtPmdlbmVyYXRl
TWlwbWFwKHRhcmdldCk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCisgICAgaWYgKCFp
c0dMRVMyQ29tcGxpYW50KCkgfHwgIWlzR0xFUzJDb21wbGlhbnQoKSkKICAgICAgICAgdGV4LT5n
ZW5lcmF0ZU1pcG1hcExldmVsSW5mbygpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CkBAIC0xODA0LDcgKzE4MTUsNyBAQCBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0VmVydGV4QXR0CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoaW50KHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpCiB7Ci0gICAgaWYgKCFpc0dMRVMy
Q29tcGxpYW50KCkpIHsKKyAgICBpZiAoIWlzR0xFUzJQYXJhbWV0ZXJTdHJpY3QoKSkgewogICAg
ICAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpHRU5FUkFURV9NSVBNQVBfSElO
VCkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4MjQsNyAr
MTgzNSw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0J1ZmZlcihXZWIKIAogYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCkKIHsK
LSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgIGlmICghaXNHTEVTMlBhcmFtZXRl
clN0cmljdCgpKSB7CiAgICAgICAgIGlmICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMjA4Niw3ICsyMDk3LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYQogICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIHRydWUpOwogICAgIGlmICghdGV4KQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICBpZiAo
IWlzR0xFUzJOUE9UU3RyaWN0KCkpIHsKICAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVy
ZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTIwOTQsNyArMjEwNSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJEQmEKICAgICB9CiAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSB8fCAhaXNHTEVTMk5Q
T1RTdHJpY3QoKSkKICAgICAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwogICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQXR0YWNoZWRPYmplY3RD
aGFuZ2UodGV4KTsKQEAgLTIyMDgsNyArMjIxOSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhQYXJhbWV0ZXIKICAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVy
ZUJpbmRpbmcodGFyZ2V0LCBmYWxzZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsK
LSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgIGlmICghaXNHTEVTMlBhcmFtZXRl
clN0cmljdCgpIHx8ICFpc0dMRVMyTlBPVFN0cmljdCgpKSB7CiAgICAgICAgIHN3aXRjaCAocG5h
bWUpIHsKICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVS
OgogICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6CkBA
IC0yMjI1LDEwICsyMjM2LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJh
bWV0ZXIKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGlzRmxvYXQpCi0gICAgICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmYocG5h
bWUsIHBhcmFtZik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRleC0+c2V0UGFyYW1ldGVy
aShwbmFtZSwgcGFyYW1pKTsKKyAgICAgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKSB7Cisg
ICAgICAgICAgICBpZiAoaXNGbG9hdCkKKyAgICAgICAgICAgICAgICB0ZXgtPnNldFBhcmFtZXRl
cmYocG5hbWUsIHBhcmFtZik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGV4
LT5zZXRQYXJhbWV0ZXJpKHBuYW1lLCBwYXJhbWkpOworICAgICAgICB9CiAgICAgfQogICAgIGlm
IChpc0Zsb2F0KQogICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFt
ZSwgcGFyYW1mKTsKQEAgLTI5OTksNiArMzAxMiwyMSBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6aXNHTEVTMkNvbXBsCiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNHTEVTMkNvbXBsaWFu
dCgpOwogfQogCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNHTEVTMlBhcmFtZXRlclN0
cmljdCgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNHTEVTMlBhcmFtZXRlclN0cmljdCgp
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNHTEVTMk5QT1RTdHJpY3QoKQor
eworICAgIHJldHVybiBtX2NvbnRleHQtPmlzR0xFUzJOUE9UU3RyaWN0KCk7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vz
c2VzKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJv
dW5kc0FjY2Vzc2VzKCk7Cit9CisKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYW5kbGVO
UE9UVGV4dHVyZXMoYm9vbCBwcmVwYXJlVG9EcmF3KQogewogICAgIGJvb2wgcmVzZXRBY3RpdmVV
bml0ID0gZmFsc2U7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgJKHJldmlzaW9uIDY1NzQwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDYgKzMwMyw5IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKTsKKyAgICBib29sIGlzR0xF
UzJQYXJhbWV0ZXJTdHJpY3QoKTsKKyAgICBib29sIGlzR0xFUzJOUE9UU3RyaWN0KCk7CisgICAg
Ym9vbCBpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCk7CiAKICAgICAvLyBI
ZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9wZW5HTCBkYXRhIHR5cGVzCiAg
ICAgLy8gbGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVGV4dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFRleHR1cmUuY3BwCShyZXZpc2lvbiA2NTc0MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDExICsxNjksMTIgQEAgdm9p
ZCBXZWJHTFRleHR1cmU6OmdlbmVyYXRlTWlwbWFwTGV2ZWxJbgogICAgIG1fbmVlZFRvVXNlQmxh
Y2tUZXh0dXJlID0gZmFsc2U7CiB9CiAKLXVuc2lnbmVkIGxvbmcgV2ViR0xUZXh0dXJlOjpnZXRJ
bnRlcm5hbEZvcm1hdCgpIGNvbnN0Cit1bnNpZ25lZCBsb25nIFdlYkdMVGV4dHVyZTo6Z2V0SW50
ZXJuYWxGb3JtYXQoaW50IGxldmVsKSBjb25zdAogewogICAgIGlmICghb2JqZWN0KCkgfHwgIW1f
dGFyZ2V0KQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9pbmZvWzBdWzBdLmludGVy
bmFsRm9ybWF0OworICAgIC8vIFdlIGFzc3VtZSBsZXZlbCBoYXMgYmVlbiB2YWxpZGF0ZWQgYWxy
ZWFkeS4KKyAgICByZXR1cm4gbV9pbmZvWzBdW2xldmVsXS5pbnRlcm5hbEZvcm1hdDsKIH0KIAog
Ym9vbCBXZWJHTFRleHR1cmU6OmlzTlBPVCh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
KQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCShyZXZpc2lvbiA2NTc0MCkKKysr
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDcgKzYwLDcgQEAgcHVibGljOgogICAgIC8vIEdlbmVyYXRlIGFsbCBsZXZlbCBpbmZvcm1hdGlv
bi4KICAgICB2b2lkIGdlbmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7CiAKLSAgICB1bnNpZ25lZCBs
b25nIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7CisgICAgdW5zaWduZWQgbG9uZyBnZXRJbnRl
cm5hbEZvcm1hdChpbnQgbGV2ZWwpIGNvbnN0OwogCiAgICAgLy8gV2hldGhlciB3aWR0aC9oZWln
aHQgaXMgTm90UG93ZXJPZlR3by4KICAgICBzdGF0aWMgYm9vbCBpc05QT1QodW5zaWduZWQsIHVu
c2lnbmVkKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgJKHJldmlzaW9uIDY1NzQwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjgsNiArNDY4LDkgQEAgcHVi
bGljOgogICAgIGludCBzaXplSW5CeXRlcyhpbnQgdHlwZSk7CiAKICAgICBib29sIGlzR0xFUzJD
b21wbGlhbnQoKSBjb25zdDsKKyAgICBib29sIGlzR0xFUzJQYXJhbWV0ZXJTdHJpY3QoKSBjb25z
dDsKKyAgICBib29sIGlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3Q7CisgICAgYm9vbCBpc0Vycm9y
R2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkgY29uc3Q7CiAKICAgICAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KICAgICAvLyBIZWxwZXJzIGZvciB0ZXh0dXJlIHVwbG9hZGluZyBhbmQgcGl4ZWwgcmVh
ZGJhY2suCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRl
eHQzRE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9H
cmFwaGljc0NvbnRleHQzRE1hYy5tbQkocmV2aXNpb24gNjU3NDApCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzEyLDYgKzMxMiwyMSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxp
YW50CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dM
RVMyUGFyYW1ldGVyU3RyaWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzRXJyb3JHZW5lcmF0
ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
Kwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
CiB7CiAgICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJl
bnRIZWlnaHQgfHwgIW1fY29udGV4dE9iaikKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkocmV2aXNpb24gNjU3NDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzYsNiArMjc2LDIzIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzR0xFUzJDb21wbGlhbnQKICNlbmRpZgogfQogCisvLyBFdmVuIHdpdGggdW5kZXJseWlu
ZyBHTEVTMiBkcml2ZXIsIHRoZSBiZWxvdyBmbGFncyBzaG91bGQgc3RpbGwgYmUgc2V0IHRvCisv
LyBmYWxzZSBpZiBleHRlbnRpb25zIGV4aXN0IChhbmQgdGhleSBhbG1vc3QgYWx3YXlzIGRvKS4K
K2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJQYXJhbWV0ZXJTdHJpY3QoKSBjb25zdAor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVT
Mk5QT1RTdHJpY3QoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiAgCiBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93KQogICAgIDogbV9hdHRycyhhdHRycykK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjU3NjgpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDgtMjAgIFpoZW55
YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXZWJHTCBtdXN0IGVuZm9yY2UgcmVzdHJpY3Rpb25zIGV2ZW4gaWYg
cnVubmluZyBvbiBPcGVuR0wgRVMgMi4wCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MjkwOAorCisgICAgICAgICogcHVibGljL1dlYkdyYXBoaWNzQ29u
dGV4dDNELmg6IEFkZCB0aHJlZSBuZXcgZmxhZ3MuCisgICAgICAgICogc3JjL0dyYXBoaWNzQ29u
dGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmlzR0xFUzJQYXJhbWV0ZXJTdHJpY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6aXNHTEVTMk5QT1RTdHJpY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nl
c3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMlBhcmFt
ZXRlclN0cmljdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVT
Mk5QT1RTdHJpY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzRXJy
b3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMpOgorICAgICAgICAqIHNyYy9XZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmlzR0xFUzJQYXJhbWV0ZXJTdHJpY3QpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjppc0dMRVMy
TlBPVFN0cmljdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMpOgorICAgICAgICAq
IHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmg6IERpdHRvLgorCiAyMDEwLTA4
LTIwICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3lu
Y2hyb25pemUgZGVmYXVsdCBvZiB1c2VfYWNjZWxlcmF0ZWRfY29tcG9zaXRpbmcgZ3lwIHZhcmlh
YmxlIHdpdGggZG93bnN0cmVhbS4gIFVucmV2aWV3ZWQuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA2NTc0MCkKKysrIFdl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5
KQpAQCAtMTAzLDYgKzEwMywxMyBAQCBwdWJsaWM6CiAKICAgICAvLyBRdWVyeSB3aGV0aGVyIGl0
IGlzIGJ1aWx0IG9uIHRvcCBvZiBjb21wbGlhbnQgR0xFUzIgaW1wbGVtZW50YXRpb24uCiAgICAg
dmlydHVhbCBib29sIGlzR0xFUzJDb21wbGlhbnQoKSA9IDA7CisgICAgLy8gUXVlcnkgd2hldGhl
ciBpdCBpcyBidWlsdCBvbiB0b3Agb2YgR0xFUzIgcGFyYW1ldGVyIHN0cmljdCBpbXBsZW1lbnRh
dGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgaXNHTEVTMlBhcmFtZXRlclN0cmljdCgpID0gMDsKKyAg
ICAvLyBRdWVyeSB3aGV0aGVyIGl0IGlzIGJ1aWx0IG9uIHRvcCBvZiBHTEVTMiBOUE9UIHN0cmlj
dCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFsIGJvb2wgaXNHTEVTMk5QT1RTdHJpY3QoKSA9
IDA7CisgICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBidWlsdCBvbiB0b3Agb2YgaW1wbGVtZW50
YXRpb24gdGhhdCBnZW5lcmF0ZXMgZXJyb3JzCisgICAgLy8gb24gb3V0LW9mLWJvdW5kcyBidWZm
ZXIgYWNjZXNzZXMuCisgICAgdmlydHVhbCBib29sIGlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91
bmRzQWNjZXNzZXMoKSA9IDA7CiAKICAgICAvLyBIZWxwZXIgZm9yIHNvZnR3YXJlIGNvbXBvc2l0
aW5nIHBhdGguIFJlYWRzIGJhY2sgdGhlIGZyYW1lIGJ1ZmZlciBpbnRvCiAgICAgLy8gdGhlIG1l
bW9yeSByZWdpb24gcG9pbnRlZCB0byBieSAicGl4ZWxzIiB3aXRoIHNpemUgImJ1ZmZlclNpemUi
LiBJdCBpcwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJ
KHJldmlzaW9uIDY1NzQwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQz
RC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsOSBAQCBwdWJsaWM6CiAgICAgQ2Fu
dmFzTGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCiAgICAgYm9v
bCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7CisgICAgYm9vbCBpc0dMRVMyUGFyYW1ldGVyU3Ry
aWN0KCkgY29uc3Q7CisgICAgYm9vbCBpc0dMRVMyTlBPVFN0cmljdCgpIGNvbnN0OworICAgIGJv
b2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNvbnN0OwogCiAgICAg
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAgICAgLy8gRW50cnkgcG9pbnRzIGZvciBXZWJHTC4KQEAgLTU4Nyw2
ICs1OTAsMjEgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc0dMRVMyQwogICAg
IHJldHVybiBtX2ltcGwtPmlzR0xFUzJDb21wbGlhbnQoKTsKIH0KIAorYm9vbCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjppc0dMRVMyUGFyYW1ldGVyU3RyaWN0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9pbXBsLT5pc0dMRVMyUGFyYW1ldGVyU3RyaWN0KCk7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6aXNHTEVTMk5QT1RTdHJpY3QoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2ltcGwtPmlzR0xFUzJOUE9UU3RyaWN0KCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faW1wbC0+aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNB
Y2Nlc3NlcygpOworfQorCiBERUxFR0FURV9UT19JTVBMXzEoYWN0aXZlVGV4dHVyZSwgdW5zaWdu
ZWQgbG9uZykKIERFTEVHQVRFX1RPX0lNUExfMihhdHRhY2hTaGFkZXIsIFBsYXRmb3JtM0RPYmpl
Y3QsIFBsYXRmb3JtM0RPYmplY3QpCiAKQEAgLTEyNDUsNiArMTI2MywyMSBAQCBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50CiAgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlz
R0xFUzJDb21wbGlhbnQoKTsKIH0KIAorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMlBh
cmFtZXRlclN0cmljdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzR0xFUzJQ
YXJhbWV0ZXJTdHJpY3QoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMk5Q
T1RTdHJpY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2ludGVybmFsLT5pc0dMRVMyTlBPVFN0
cmljdCgpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0Vycm9yR2VuZXJhdGVkT25P
dXRPZkJvdW5kc0FjY2Vzc2VzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwu
Y3BwCShyZXZpc2lvbiA2NTc0MCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsMjEg
QEAgYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjppcwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAorYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjppc0dMRVMy
UGFyYW1ldGVyU3RyaWN0KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6aXNHTEVTMk5QT1RTdHJpY3QoKQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpp
c0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKIHVuc2lnbmVkIGludCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpn
ZXRQbGF0Zm9ybVRleHR1cmVJZCgpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGwuaAkocmV2aXNpb24gNjU3NDApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgs
OSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgc2l6ZUluQnl0ZXMoaW50IHR5cGUpOwogCiAg
ICAgdmlydHVhbCBib29sIGlzR0xFUzJDb21wbGlhbnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNH
TEVTMlBhcmFtZXRlclN0cmljdCgpOworICAgIHZpcnR1YWwgYm9vbCBpc0dMRVMyTlBPVFN0cmlj
dCgpOworICAgIHZpcnR1YWwgYm9vbCBpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vz
c2VzKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
OwogCg==
</data>
<flag name="review"
          id="53695"
          type_id="1"
          status="-"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="53696"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65473</attachid>
            <date>2010-08-25 14:14:44 -0700</date>
            <delta_ts>2010-08-25 14:21:02 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>flags.patch</filename>
            <type>text/plain</type>
            <size>29770</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjAzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMDgtMjAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBt
dXN0IGVuZm9yY2UgcmVzdHJpY3Rpb25zIGV2ZW4gaWYgcnVubmluZyBvbiBPcGVuR0wgRVMgMi4w
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjkwOAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpnZXRDb2xvckJ1ZmZlckZvcm1hdCk6IEdldCBmb3Jt
YXQgYXQgZ2l2ZW4gbGV2ZWwgaW5zdGVhZCBvZiAwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6IEFkZCB0d28gbmV3IGZsYWdzIGFuZCB1c2UgdGhlbSB0
byByZXBsYWNlIHRoZSBvcmlnaW5hbCBpc0dMRVMyQ29tcGxpYW50KCkuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRp
c2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJy
YXlzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFbmFibGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0dMRVMyTlBPVFN0cmljdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oOiBEZWNsYXJlIHR3byBuZXcgZmxhZ3MuCisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xUZXh0dXJlLmNwcDogR2V0IGZvcm1hdCBhdCBnaXZlbiBsZXZlbCBpbnN0ZWFkIG9m
IDAuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmdldEludGVybmFsRm9ybWF0KToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaDogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDogQWRkIHRocmVlIG5ldyBmbGFn
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMu
bW06IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJO
UE9UU3RyaWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0Vycm9y
R2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMk5QT1RTdHJpY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNz
ZXMpOgorCiAyMDEwLTA4LTI0ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpAQCAtMTI2LDE3ICsxNjksNiBAQAogICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoKICAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKIAotMjAxMC0w
OC0yNSAgUmFmYWVsIEFudG9nbm9sbGkgIDxhbnRvZ25vbGxpQHByb2Z1c2lvbi5tb2JpPgotCi0g
ICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4LgotCi0gICAgICAgIFtFRkxdIEJ1aWxkIGZpeCBm
b3IgcmV2aXNpb24gNjYwMjQKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ0NjMxCi0KLSAgICAgICAgTm8gbmV3IGZlYXR1cmVzIGFkZGVkLCBzbyBubyBu
ZXcgdGVzdHMuCi0KLSAgICAgICAgKiBDTWFrZUxpc3RzRWZsLnR4dDogY2hhbmdlIEdSZWZQdHJD
YWlyby5jcHAgYnkgUGxhdGZvcm1SZWZQdHJDYWlyby5jcHAuCi0KIDIwMTAtMDgtMjUgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHJl
dmlzaW9uIDY2MDM5KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHVuc2lnbmVkIGxvbmcgV2ViR0xG
cmFtZWJ1ZmZlcjo6Z2V0Q29sb3IKICAgICAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChtX2NvbG9yQXR0
YWNobWVudC0+aXNUZXh0dXJlKCkpCi0gICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViR0xUZXh0dXJlKj4obV9jb2xvckF0dGFjaG1lbnQpKS0+Z2V0SW50ZXJuYWxGb3JtYXQo
KTsKKyAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPiht
X2NvbG9yQXR0YWNobWVudCkpLT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKICAgICB9CiAgICAgcmV0
dXJuIDA7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCShyZXZpc2lvbiA2NjAzOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDEwICsxMzAsMTAgQEAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUs
ICZtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSk7CiAgICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVs
ID0gV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6
ZSwgbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUpOwogCi0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkpIHsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCiAgICAgICAgIGNyZWF0ZUZhbGxi
YWNrQmxhY2tUZXh0dXJlczF4MSgpOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAg
ICAgICBpbml0VmVydGV4QXR0cmliMCgpOwotICAgIH0KICAgICBtX2NvbnRleHQtPnJlc2hhcGUo
Y2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CiAgICAgbV9jb250ZXh0LT52
aWV3cG9ydCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKIH0K
QEAgLTMwNiw3ICszMDYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1
cmUoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZSh0
YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkgJiYgdGV4dHVyZSkKKyAgICBpZiAodGV4dHVyZSkKICAgICAgICAgdGV4dHVyZS0+c2V0VGFy
Z2V0KHRhcmdldCwgbWF4TGV2ZWwpOwogCiAgICAgLy8gRklYTUU6IGRvIHdlIHdhbnQgdG8gZG8g
dGhpcyBvbiBhbGwgcGxhdGZvcm1zPwpAQCAtMzM4LDIwICszMzgsMTYgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJsZW5kQ29sb3IoZAogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6YmxlbmRFcXVhdGlvbih1bnNpZ25lZCBsb25nIG1vZGUpCiB7Ci0gICAgaWYgKCFpc0dMRVMy
Q29tcGxpYW50KCkpIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZUJsZW5kRXF1YXRpb24obW9kZSkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdmFsaWRhdGVCbGVuZEVxdWF0
aW9uKG1vZGUpKQorICAgICAgICByZXR1cm47CiAgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9u
KG1vZGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9u
ZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSkKIHsKLSAgICBpZiAoIWlzR0xFUzJD
b21wbGlhbnQoKSkgewotICAgICAgICBpZiAoIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlUkdC
KSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGVBbHBoYSkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmICghdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGVSR0IpIHx8ICF2
YWxpZGF0ZUJsZW5kRXF1YXRpb24obW9kZUFscGhhKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1f
Y29udGV4dC0+YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTM3NSw5ICszNzEsMTEgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEodQogICAgIFdlYkdMQnVmZmVy
KiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdldCwgdXNhZ2UpOwog
ICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFidWZmZXItPmFzc29j
aWF0ZUJ1ZmZlckRhdGEoc2l6ZSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAg
ICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShzaXplKSkgeworICAgICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKICAgICBt
X2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCB1c2FnZSk7CkBAIC0zOTAsOSArMzg4
LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHUKICAgICBXZWJH
TEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyh0YXJnZXQsIHVz
YWdlKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghYnVmZmVy
LT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkp
IHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsKKyAg
ICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQog
CiAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBk
YXRhLT5kYXRhKCksIHVzYWdlKTsKQEAgLTQwNSw5ICs0MDUsMTEgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEodQogICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxp
ZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKHRhcmdldCwgdXNhZ2UpOwogICAgIGlmICghYnVmZmVy
KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEo
ZGF0YSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJy
b3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZl
ci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKICAgICBtX2NvbnRleHQtPmJ1ZmZl
ckRhdGEodGFyZ2V0LCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCksIHVz
YWdlKTsKQEAgLTQyMCw5ICs0MjIsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1
ZmZlclN1YkRhdAogICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQ
YXJhbWV0ZXJzKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKICAgICBp
ZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVC
dWZmZXJTdWJEYXRhKG9mZnNldCwgZGF0YSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkg
eworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShvZmZzZXQsIGRh
dGEpKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQogICAgIH0KIAogICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwg
ZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCkpOwpAQCAtNDM1LDkgKzQzOSwxMSBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0CiAgICAgV2ViR0xCdWZmZXIq
IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnModGFyZ2V0LCBHcmFwaGljc0Nv
bnRleHQzRDo6U1RBVElDX0RSQVcpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEob2Zmc2V0LCBkYXRhKSkg
ewotICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5hc3Nv
Y2lhdGVCdWZmZXJTdWJEYXRhKG9mZnNldCwgZGF0YSkpIHsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQogCiAgICAgbV9jb250ZXh0LT5i
dWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJh
c2VBZGRyZXNzKCkpOwpAQCAtNDQ2LDExICs0NTIsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YnVmZmVyU3ViRGF0CiAKIHVuc2lnbmVkIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQogewotICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIH0KKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUikgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmct
Pm9iamVjdCgpKQogICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFOwpAQCAtNDYwLDExICs0NjQsOSBAQCB1bnNpZ25lZCBsb25nIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y2hlCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcih1bnNp
Z25lZCBsb25nIG1hc2spCiB7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAg
ICAgaWYgKG1hc2sgJiB+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUIHwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9CVUZGRVJfQklUKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KKyAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CisgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4dC0+Y2xlYXIobWFzayk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwpAQCAtNTI1LDE1ICs1MjcsMTQgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZQogICAgICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChsZXZlbCAmJiBX
ZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFpc0dMRVMy
TlBPVFN0cmljdCgpICYmIGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWln
aHQpKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29u
dGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CiAgICAgLy8gRklYTUU6IGlmIHRoZSBmcmFtZWJ1ZmZl
ciBpcyBub3QgY29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93IHNob3VsZCBiZSBleGVjdXRlZC4K
LSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgdGV4LT5zZXRMZXZlbEluZm8o
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUpOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKICAgICAgICAgbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9uQXR0YWNoZWRPYmplY3RDaGFuZ2UodGV4KTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtNTQ2LDcgKzU0Nyw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW0KICAgICAgICAgcmV0dXJuOwogICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CiAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkKLSAgICAgICAgICAgICYmICFpc1Rl
eEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKHRleC0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSwKKyAgICAgICAgICAgICYmICFpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZm
ZXJDb21iaW5hdGlvblZhbGlkKHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCkpKSB7CiAgICAgICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC03MTYsMTAgKzcxNyw4IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIKIAogdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApCiB7Ci0gICAgaWYgKCFp
c0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZUNhcGFiaWxpdHkoY2Fw
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF2YWxpZGF0ZUNhcGFiaWxp
dHkoY2FwKSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC05MTksMjYgKzkxOCwy
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyh1CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBz
dGF0ZQotICAgIENoZWNrZWRJbnQ8aW50MzJfdD4gY2hlY2tlZEZpcnN0KGZpcnN0KTsKLSAgICBD
aGVja2VkSW50PGludDMyX3Q+IGNoZWNrZWRDb3VudChjb3VudCk7Ci0gICAgQ2hlY2tlZEludDxp
bnQzMl90PiBjaGVja2VkU3VtID0gY2hlY2tlZEZpcnN0ICsgY2hlY2tlZENvdW50OwotICAgIGlm
ICghY2hlY2tlZFN1bS52YWxpZCgpIHx8ICF2YWxpZGF0ZVJlbmRlcmluZ1N0YXRlKGNoZWNrZWRT
dW0udmFsdWUoKSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICByZXR1cm47CisgICAg
aWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAgICAg
Ly8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKKyAgICAgICAgQ2hlY2tl
ZEludDxpbnQzMl90PiBjaGVja2VkRmlyc3QoZmlyc3QpOworICAgICAgICBDaGVja2VkSW50PGlu
dDMyX3Q+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgICAgIENoZWNrZWRJbnQ8aW50MzJfdD4g
Y2hlY2tlZFN1bSA9IGNoZWNrZWRGaXJzdCArIGNoZWNrZWRDb3VudDsKKyAgICAgICAgaWYgKCFj
aGVja2VkU3VtLnZhbGlkKCkgfHwgIXZhbGlkYXRlUmVuZGVyaW5nU3RhdGUoY2hlY2tlZFN1bS52
YWx1ZSgpKSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFs
c2U7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICBpZiAoIWlzR0xFUzJDb21w
bGlhbnQoKSkKICAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4
QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgp
KQogICAgICAgICBoYW5kbGVOUE9UVGV4dHVyZXModHJ1ZSk7Ci0gICAgfQogICAgIG1fY29udGV4
dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwotICAgIGlmICghaXNHTEVTMkNvbXBs
aWFudCgpKSB7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNp
bXVsYXRlZCkKKyAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRp
b24oKTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCiAgICAgICAgIGhhbmRsZU5QT1RU
ZXh0dXJlcyhmYWxzZSk7Ci0gICAgICAgIGlmICh2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAg
ICAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKLSAg
ICB9CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQogCkBAIC05NjMsNDAg
Kzk2Myw0MSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRl
cmluZyBzdGF0ZQotICAgIGxvbmcgbnVtRWxlbWVudHM7Ci0gICAgCi0gICAgaWYgKCF2YWxpZGF0
ZUVsZW1lbnRBcnJheVNpemUoY291bnQsIHR5cGUsIG9mZnNldCkpIHsKLSAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJy
YXlDb25zZXJ2YXRpdmUodHlwZSwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVJlbmRlcmluZ1N0
YXRlKG51bUVsZW1lbnRzKSkKLSAgICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNl
KGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzKSB8fCAhdmFsaWRhdGVSZW5kZXJpbmdT
dGF0ZShudW1FbGVtZW50cykpIHsKKyAgICBsb25nIG51bUVsZW1lbnRzID0gMDsKKyAgICBpZiAo
IWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICAvLyBF
bnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQorICAgICAgICBpZiAoIXZhbGlk
YXRlRWxlbWVudEFycmF5U2l6ZShjb3VudCwgdHlwZSwgb2Zmc2V0KSkgewogICAgICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIGlmICgh
dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKHR5cGUsIG51bUVsZW1lbnRzKSB8fCAhdmFs
aWRhdGVSZW5kZXJpbmdTdGF0ZShudW1FbGVtZW50cykpIHsKKyAgICAgICAgICAgIGlmICghdmFs
aWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cykg
fHwgIXZhbGlkYXRlUmVuZGVyaW5nU3RhdGUobnVtRWxlbWVudHMpKSB7CisgICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KIAogICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNl
OwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGlmICghbnVtRWxlbWVu
dHMpCisgICAgICAgICAgICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBv
ZmZzZXQsIG51bUVsZW1lbnRzKTsKICAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNp
bXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7Ci0gICAgICAgIGhhbmRsZU5QT1RUZXh0
dXJlcyh0cnVlKTsKICAgICB9CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAg
ICBoYW5kbGVOUE9UVGV4dHVyZXModHJ1ZSk7CiAgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMo
bW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkp
IHsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVk
KQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwor
ICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKICAgICAgICAgaGFuZGxlTlBPVFRleHR1cmVz
KGZhbHNlKTsKLSAgICAgICAgaWYgKHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCi0gICAgICAgICAg
ICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIH0KICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjplbmFibGUodW5zaWduZWQgbG9uZyBjYXApCiB7Ci0gICAgaWYgKCFpc0dMRVMy
Q29tcGxpYW50KCkpIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF2YWxpZGF0ZUNhcGFiaWxpdHkoY2Fw
KSkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTExMTksMTUgKzExMjAsMTIgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdlbmVyYXRlTWlwbQogICAgIFdlYkdMVGV4dHVy
ZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIGZhbHNlKTsKICAgICBpZiAo
IXRleCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0g
ICAgICAgIGlmICghdGV4LT5jYW5HZW5lcmF0ZU1pcG1hcHMoKSkgewotICAgICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKCF0ZXgtPmNh
bkdlbmVyYXRlTWlwbWFwcygpKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBtX2NvbnRleHQtPmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7Ci0gICAgaWYg
KCFpc0dMRVMyQ29tcGxpYW50KCkpCi0gICAgICAgIHRleC0+Z2VuZXJhdGVNaXBtYXBMZXZlbElu
Zm8oKTsKKyAgICB0ZXgtPmdlbmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTgwNywxMSArMTgwNSw5IEBAIGxvbmcg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHQKIAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgbW9kZSkK
IHsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBpZiAodGFyZ2V0ICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpHRU5FUkFURV9NSVBNQVBfSElOVCkgewotICAgICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGlmICh0YXJnZXQgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UKSB7CisgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7
CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5oaW50KHRhcmdldCwgbW9k
ZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTE4MjcsMTAgKzE4
MjMsOCBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNCdWZmZXIoV2ViCiAKIGJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXApCiB7Ci0g
ICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZUNhcGFi
aWxpdHkoY2FwKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgaWYgKCF2
YWxpZGF0ZUNhcGFiaWxpdHkoY2FwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVy
biBtX2NvbnRleHQtPmlzRW5hYmxlZChjYXApOwogfQogCkBAIC0yMDg5LDcgKzIwODMsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhCiAgICAgV2ViR0xUZXh0dXJl
KiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKHRhcmdldCwgdHJ1ZSk7CiAgICAgaWYgKCF0
ZXgpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAg
IGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkgewogICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xU
ZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMjA5Nyw4ICsyMDkxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleEltYWdlMkRCYQogICAgIH0KICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7CisgICAgdGV4LT5zZXRM
ZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5
cGUpOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKICAgICAgICAgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPm9uQXR0YWNoZWRPYmplY3RDaGFuZ2UodGV4KTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtMjIyNCwzMiArMjIxNywyOSBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyCiAgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKHRhcmdldCwgZmFsc2UpOwogICAgIGlmICghdGV4KQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgc3dpdGNo
IChwbmFtZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9G
SUxURVI6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRF
UjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1dSQVBfUzoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1Q6Ci0gICAgICAgICAgICBpZiAoaXNGbG9hdCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpNSVJS
T1JFRF9SRVBFQVQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQKLSAgICAg
ICAgICAgICAgICB8fCAhaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNM
QU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBF
QVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQpIHsKLSAgICAgICAgICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgorICAgIHN3aXRjaCAocG5hbWUpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKKyAgICAgICAgaWYgKGlzRmxvYXQgJiYgcGFy
YW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtZiAhPSBHcmFw
aGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVQRUFUCisgICAgICAgICAgICB8fCAhaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQp
IHsKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKGlzRmxvYXQpCi0gICAgICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmYocG5hbWUs
IHBhcmFtZik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRleC0+c2V0UGFyYW1ldGVyaShw
bmFtZSwgcGFyYW1pKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoaXNGbG9hdCkKKyAgICBpZiAoaXNG
bG9hdCkgeworICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmYocG5hbWUsIHBhcmFtZik7CiAgICAg
ICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCBwYXJhbWYpOwotICAg
IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBh
cmFtaSk7CiAgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBw
YXJhbWkpOworICAgIH0KICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
CkBAIC0zMDEwLDYgKzMwMDAsMTYgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzR0xF
UzJDb21wbAogICAgIHJldHVybiBtX2NvbnRleHQtPmlzR0xFUzJDb21wbGlhbnQoKTsKIH0KIAor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzR0xFUzJOUE9UU3RyaWN0KCkKK3sKKyAgICBy
ZXR1cm4gbV9jb250ZXh0LT5pc0dMRVMyTlBPVFN0cmljdCgpOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpCit7
CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nl
c3NlcygpOworfQorCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFuZGxlTlBPVFRleHR1
cmVzKGJvb2wgcHJlcGFyZVRvRHJhdykKIHsKICAgICBib29sIHJlc2V0QWN0aXZlVW5pdCA9IGZh
bHNlOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5o
CShyZXZpc2lvbiA2NjAzOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNSw2ICszMDUsOCBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCk7CisgICAgYm9vbCBpc0dMRVMyTlBPVFN0
cmljdCgpOworICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nlcygp
OwogCiAgICAgLy8gSGVscGVyIHRvIHJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBPcGVuR0wg
ZGF0YSB0eXBlcwogICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgpJbmRleDogV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAkocmV2aXNpb24gNjYwMzkpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwxMSAr
MTY5LDEyIEBAIHZvaWQgV2ViR0xUZXh0dXJlOjpnZW5lcmF0ZU1pcG1hcExldmVsSW4KICAgICBt
X25lZWRUb1VzZUJsYWNrVGV4dHVyZSA9IGZhbHNlOwogfQogCi11bnNpZ25lZCBsb25nIFdlYkdM
VGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAordW5zaWduZWQgbG9uZyBXZWJHTFRl
eHR1cmU6OmdldEludGVybmFsRm9ybWF0KGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAoIW9i
amVjdCgpIHx8ICFtX3RhcmdldCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1faW5m
b1swXVswXS5pbnRlcm5hbEZvcm1hdDsKKyAgICAvLyBXZSBhc3N1bWUgbGV2ZWwgaGFzIGJlZW4g
dmFsaWRhdGVkIGFscmVhZHkuCisgICAgcmV0dXJuIG1faW5mb1swXVtsZXZlbF0uaW50ZXJuYWxG
b3JtYXQ7CiB9CiAKIGJvb2wgV2ViR0xUZXh0dXJlOjppc05QT1QodW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAkocmV2aXNp
b24gNjYwMzkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAvLyBHZW5lcmF0ZSBhbGwgbGV2
ZWwgaW5mb3JtYXRpb24uCiAgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcExldmVsSW5mbygpOwogCi0g
ICAgdW5zaWduZWQgbG9uZyBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OworICAgIHVuc2lnbmVk
IGxvbmcgZ2V0SW50ZXJuYWxGb3JtYXQoaW50IGxldmVsKSBjb25zdDsKIAogICAgIC8vIFdoZXRo
ZXIgd2lkdGgvaGVpZ2h0IGlzIE5vdFBvd2VyT2ZUd28uCiAgICAgc3RhdGljIGJvb2wgaXNOUE9U
KHVuc2lnbmVkLCB1bnNpZ25lZCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA2NjAzOSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNDYzLDYg
KzQ2Myw4IEBAIHB1YmxpYzoKICAgICBpbnQgc2l6ZUluQnl0ZXMoaW50IHR5cGUpOwogCiAgICAg
Ym9vbCBpc0dMRVMyQ29tcGxpYW50KCkgY29uc3Q7CisgICAgYm9vbCBpc0dMRVMyTlBPVFN0cmlj
dCgpIGNvbnN0OworICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
cygpIGNvbnN0OwogCiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgLy8gSGVscGVycyBmb3IgdGV4
dHVyZSB1cGxvYWRpbmcgYW5kIHBpeGVsIHJlYWRiYWNrLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHJldmlz
aW9uIDY2MDM5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250
ZXh0M0RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxMiw2ICszMTIsMTYgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudAogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMk5QT1RTdHJpY3QoKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdo
dCkKIHsKICAgICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3Vy
cmVudEhlaWdodCB8fCAhbV9jb250ZXh0T2JqKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCShyZXZpc2lvbiA2NjAz
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw2ICsyNzQsMTggQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6aXNHTEVTMkNvbXBsaWFudAogI2VuZGlmCiB9CiAKKy8vIEV2ZW4gd2l0aCB1bmRlcmx5
aW5nIEdMRVMyIGRyaXZlciwgdGhlIGJlbG93IGZsYWdzIHNob3VsZCBzdGlsbCBiZSBzZXQgdG8K
Ky8vIGZhbHNlIGlmIGV4dGVudGlvbnMgZXhpc3QgKGFuZCB0aGV5IGFsbW9zdCBhbHdheXMgZG8p
LgorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMk5QT1RTdHJpY3QoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiAgCiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBo
b3N0V2luZG93KQogICAgIDogbV9hdHRycyhhdHRycykKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNp
b24gNjYwMzkpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMDgtMjAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBt
dXN0IGVuZm9yY2UgcmVzdHJpY3Rpb25zIGV2ZW4gaWYgcnVubmluZyBvbiBPcGVuR0wgRVMgMi4w
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjkwOAor
CisgICAgICAgICogcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmg6IEFkZCB0d28gbmV3IGZs
YWdzLgorICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aXNHTEVTMk5QT1RTdHJpY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6aXNHTEVTMk5QT1RTdHJpY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMpOgorICAg
ICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcDogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmlzR0xFUzJO
UE9UU3RyaWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nlcyk6CisgICAgICAgICog
c3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaDogRGl0dG8uCisKIDIwMTAtMDgt
MjQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW5uZXRoIFJ1c3NlbGwuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNz
Q29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHcmFw
aGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA2NjAzOSkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMywx
MSBAQCBwdWJsaWM6CiAKICAgICAvLyBRdWVyeSB3aGV0aGVyIGl0IGlzIGJ1aWx0IG9uIHRvcCBv
ZiBjb21wbGlhbnQgR0xFUzIgaW1wbGVtZW50YXRpb24uCiAgICAgdmlydHVhbCBib29sIGlzR0xF
UzJDb21wbGlhbnQoKSA9IDA7CisgICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBidWlsdCBvbiB0
b3Agb2YgR0xFUzIgTlBPVCBzdHJpY3QgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCBib29s
IGlzR0xFUzJOUE9UU3RyaWN0KCkgPSAwOworICAgIC8vIFF1ZXJ5IHdoZXRoZXIgaXQgaXMgYnVp
bHQgb24gdG9wIG9mIGltcGxlbWVudGF0aW9uIHRoYXQgZ2VuZXJhdGVzIGVycm9ycworICAgIC8v
IG9uIG91dC1vZi1ib3VuZHMgYnVmZmVyIGFjY2Vzc2VzLgorICAgIHZpcnR1YWwgYm9vbCBpc0Vy
cm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkgPSAwOwogCiAgICAgLy8gSGVscGVy
IGZvciBzb2Z0d2FyZSBjb21wb3NpdGluZyBwYXRoLiBSZWFkcyBiYWNrIHRoZSBmcmFtZSBidWZm
ZXIgaW50bwogICAgIC8vIHRoZSBtZW1vcnkgcmVnaW9uIHBvaW50ZWQgdG8gYnkgInBpeGVscyIg
d2l0aCBzaXplICJidWZmZXJTaXplIi4gSXQgaXMKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA2NjAzOSkKKysrIFdlYktpdC9jaHJvbWl1
bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2
LDggQEAgcHVibGljOgogICAgIENhbnZhc0xheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdDsKICNlbmRpZgogICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0OworICAgIGJv
b2wgaXNHTEVTMk5QT1RTdHJpY3QoKSBjb25zdDsKKyAgICBib29sIGlzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMoKSBjb25zdDsKIAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAg
IC8vIEVudHJ5IHBvaW50cyBmb3IgV2ViR0wuCkBAIC01ODEsNiArNTgzLDE2IEBAIGJvb2wgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aXNHTEVTMkMKICAgICByZXR1cm4gbV9pbXBsLT5pc0dM
RVMyQ29tcGxpYW50KCk7CiB9CiAKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aXNH
TEVTMk5QT1RTdHJpY3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwtPmlzR0xFUzJOUE9U
U3RyaWN0KCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1w
bC0+aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpOworfQorCiBERUxFR0FU
RV9UT19JTVBMXzEoYWN0aXZlVGV4dHVyZSwgdW5zaWduZWQgbG9uZykKIERFTEVHQVRFX1RPX0lN
UExfMihhdHRhY2hTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QpCiAK
QEAgLTEyMjcsNiArMTIzOSwxNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29t
cGxpYW50CiAgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzR0xFUzJDb21wbGlhbnQoKTsKIH0KIAor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMk5QT1RTdHJpY3QoKSBjb25zdAoreworICAg
IHJldHVybiBtX2ludGVybmFsLT5pc0dMRVMyTlBPVFN0cmljdCgpOworfQorCitib29sIEdyYXBo
aWNzQ29udGV4dDNEOjppc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlcygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBF
TkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCShyZXZpc2lvbiA2NjAzOSkKKysr
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsMTYgQEAgYm9vbCBXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjppcwogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjppc0dMRVMyTlBPVFN0cmljdCgpCit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Omlz
RXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKwogdW5zaWduZWQgaW50IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Omdl
dFBsYXRmb3JtVGV4dHVyZUlkKCkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbC5oCShyZXZpc2lvbiA2NjAzOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBzaXplSW5CeXRlcyhpbnQgdHlwZSk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpOworICAgIHZpcnR1YWwgYm9vbCBpc0dM
RVMyTlBPVFN0cmljdCgpOworICAgIHZpcnR1YWwgYm9vbCBpc0Vycm9yR2VuZXJhdGVkT25PdXRP
ZkJvdW5kc0FjY2Vzc2VzKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgs
IGludCBoZWlnaHQpOwogCg==
</data>
<flag name="commit-queue"
          id="54261"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65476</attachid>
            <date>2010-08-25 14:21:02 -0700</date>
            <delta_ts>2010-08-25 16:25:03 -0700</delta_ts>
            <desc>revised patch: fixing an issue in WebCore/ChangeLog</desc>
            <filename>flags.patch</filename>
            <type>text/plain</type>
            <size>29225</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjAzOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMTAtMDgtMjAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBt
dXN0IGVuZm9yY2UgcmVzdHJpY3Rpb25zIGV2ZW4gaWYgcnVubmluZyBvbiBPcGVuR0wgRVMgMi4w
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjkwOAor
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpnZXRDb2xvckJ1ZmZlckZvcm1hdCk6IEdldCBmb3Jt
YXQgYXQgZ2l2ZW4gbGV2ZWwgaW5zdGVhZCBvZiAwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6IEFkZCB0d28gbmV3IGZsYWdzIGFuZCB1c2UgdGhlbSB0
byByZXBsYWNlIHRoZSBvcmlnaW5hbCBpc0dMRVMyQ29tcGxpYW50KCkuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRUZXh0dXJlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBhcmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleElt
YWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRp
c2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJy
YXlzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1l
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFbmFibGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0dMRVMyTlBPVFN0cmljdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oOiBEZWNsYXJlIHR3byBuZXcgZmxhZ3MuCisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xUZXh0dXJlLmNwcDogR2V0IGZvcm1hdCBhdCBnaXZlbiBsZXZlbCBpbnN0ZWFkIG9m
IDAuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmdldEludGVybmFsRm9ybWF0KToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaDogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDogQWRkIHRocmVlIG5ldyBmbGFn
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMu
bW06IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJO
UE9UU3RyaWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0Vycm9y
R2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMk5QT1RTdHJpY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNz
ZXMpOgorCiAyMDEwLTA4LTI0ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiA2NjAzOSkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEs
NyBAQCB1bnNpZ25lZCBsb25nIFdlYkdMRnJhbWVidWZmZXI6OmdldENvbG9yCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSBpZiAobV9jb2xvckF0dGFjaG1lbnQtPmlzVGV4dHVyZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFdlYkdMVGV4dHVyZSo+KG1fY29sb3JBdHRhY2ht
ZW50KSktPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJw
cmV0X2Nhc3Q8V2ViR0xUZXh0dXJlKj4obV9jb2xvckF0dGFjaG1lbnQpKS0+Z2V0SW50ZXJuYWxG
b3JtYXQoMCk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNjYwMzkpCisrKyBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMCwxMCArMTMwLDEwIEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5k
ZXJpbmdDb24KICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFLCAmbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUpOwogICAg
IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxldmVsQ291
bnQobV9tYXhDdWJlTWFwVGV4dHVyZVNpemUsIG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKTsKIAot
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmlj
dCgpKQogICAgICAgICBjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKKyAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSkKICAgICAgICAgaW5pdFZlcnRleEF0dHJpYjAoKTsKLSAgICB9
CiAgICAgbV9jb250ZXh0LT5yZXNoYXBlKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVp
Z2h0KCkpOwogICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzKCktPndpZHRoKCks
IGNhbnZhcygpLT5oZWlnaHQoKSk7CiB9CkBAIC0zMDYsNyArMzA2LDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJpbmRUZXh0dXJlKAogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IG1fY29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSkpOwot
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHRleHR1cmUpCisgICAgaWYgKHRleHR1cmUp
CiAgICAgICAgIHRleHR1cmUtPnNldFRhcmdldCh0YXJnZXQsIG1heExldmVsKTsKIAogICAgIC8v
IEZJWE1FOiBkbyB3ZSB3YW50IHRvIGRvIHRoaXMgb24gYWxsIHBsYXRmb3Jtcz8KQEAgLTMzOCwy
MCArMzM4LDE2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZENvbG9yKGQKIAog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb24odW5zaWduZWQgbG9uZyBt
b2RlKQogewotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIGlmICghdmFs
aWRhdGVCbGVuZEVxdWF0aW9uKG1vZGUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2RlKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IG1fY29udGV4dC0+YmxlbmRFcXVhdGlvbihtb2RlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVh
dGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxw
aGEpCiB7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24obW9kZVJHQikgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbihtb2Rl
QWxwaGEpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlQmxl
bmRFcXVhdGlvbihtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKG1vZGVBbHBoYSkp
CisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZSht
b2RlUkdCLCBtb2RlQWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiB9CkBAIC0zNzUsOSArMzcxLDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZm
ZXJEYXRhKHUKICAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFy
YW1ldGVycyh0YXJnZXQsIHVzYWdlKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJu
OwotICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKHNpemUpKSB7Ci0gICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRP
ZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZl
ckRhdGEoc2l6ZSkpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc2l6
ZSwgdXNhZ2UpOwpAQCAtMzkwLDkgKzM4OCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6YnVmZmVyRGF0YSh1CiAgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVy
RGF0YVBhcmFtZXRlcnModGFyZ2V0LCB1c2FnZSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
IHJldHVybjsKLSAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgewot
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNFcnJvckdlbmVyYXRl
ZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lh
dGVCdWZmZXJEYXRhKGRhdGEpKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJn
ZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+ZGF0YSgpLCB1c2FnZSk7CkBAIC00MDUsOSAr
NDA1LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHUKICAgICBX
ZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyh0YXJnZXQs
IHVzYWdlKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghYnVm
ZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2Vz
KCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAg
fQogCiAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgp
LCBkYXRhLT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7CkBAIC00MjAsOSArNDIyLDExIEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXQKICAgICBXZWJHTEJ1ZmZlciogYnVm
ZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyh0YXJnZXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEFUSUNfRFJBVyk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShvZmZzZXQsIGRhdGEpKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVk
T25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0
ZUJ1ZmZlclN1YkRhdGEob2Zmc2V0LCBkYXRhKSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CiAKICAgICBtX2NvbnRleHQtPmJ1ZmZl
clN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+ZGF0YSgp
KTsKQEAgLTQzNSw5ICs0MzksMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZl
clN1YkRhdAogICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJh
bWV0ZXJzKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKICAgICBpZiAo
IWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZm
ZXJTdWJEYXRhKG9mZnNldCwgZGF0YSkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewor
ICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShvZmZzZXQsIGRhdGEp
KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0
YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKQEAgLTQ0NiwxMSArNDUyLDkg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdAogCiB1bnNpZ25lZCBs
b25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25l
ZCBsb25nIHRhcmdldCkKIHsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAg
ICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgewotICAgICAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisgICAgaWYgKHRh
cmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
fHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKICAgICAgICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURTsKQEAgLTQ2MCwxMSArNDY0LDkgQEAg
dW5zaWduZWQgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZQogCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y2xlYXIodW5zaWduZWQgbG9uZyBtYXNrKQogewotICAgIGlmICghaXNH
TEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIGlmIChtYXNrICYgfihHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklU
IHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkpIHsKLSAgICAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKG1hc2sgJiB+
KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklU
KSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRl
eHQtPmNsZWFyKG1hc2spOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKQEAg
LTUyNSwxNSArNTI3LDE0IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1h
Z2UKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdo
dCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBXZWJHTFRl
eHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwogICAgIC8v
IEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBi
ZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCi0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCi0g
ICAgICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CisgICAgdGV4
LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKICAgICBpZiAobV9mcmFtZWJ1
ZmZlckJpbmRpbmcpCiAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2Jq
ZWN0Q2hhbmdlKHRleCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAg
LTU0Niw3ICs1NDcsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1Yklt
CiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewogICAgICAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVj
dCgpCi0gICAgICAgICAgICAmJiAhaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmlu
YXRpb25WYWxpZCh0ZXgtPmdldEludGVybmFsRm9ybWF0KCksCisgICAgICAgICAgICAmJiAhaXNU
ZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZCh0ZXgtPmdldEludGVy
bmFsRm9ybWF0KGxldmVsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1
ZmZlckZvcm1hdCgpKSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtNzE2LDEwICs3MTcsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0
YWNoU2hhZGVyCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKHVuc2lnbmVk
IGxvbmcgY2FwKQogewotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIGlm
ICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCisgICAgICAgIHJldHVybjsKICAgICBt
X2NvbnRleHQtPmRpc2FibGUoY2FwKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogfQpAQCAtOTE5LDI2ICs5MTgsMjcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRyYXdBcnJheXModQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRW5zdXJlIHdl
IGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKLSAgICBDaGVja2VkSW50PGludDMyX3Q+IGNo
ZWNrZWRGaXJzdChmaXJzdCk7Ci0gICAgQ2hlY2tlZEludDxpbnQzMl90PiBjaGVja2VkQ291bnQo
Y291bnQpOwotICAgIENoZWNrZWRJbnQ8aW50MzJfdD4gY2hlY2tlZFN1bSA9IGNoZWNrZWRGaXJz
dCArIGNoZWNrZWRDb3VudDsKLSAgICBpZiAoIWNoZWNrZWRTdW0udmFsaWQoKSB8fCAhdmFsaWRh
dGVSZW5kZXJpbmdTdGF0ZShjaGVja2VkU3VtLnZhbHVlKCkpKSB7Ci0gICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVy
aW5nIHN0YXRlCisgICAgICAgIENoZWNrZWRJbnQ8aW50MzJfdD4gY2hlY2tlZEZpcnN0KGZpcnN0
KTsKKyAgICAgICAgQ2hlY2tlZEludDxpbnQzMl90PiBjaGVja2VkQ291bnQoY291bnQpOworICAg
ICAgICBDaGVja2VkSW50PGludDMyX3Q+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVj
a2VkQ291bnQ7CisgICAgICAgIGlmICghY2hlY2tlZFN1bS52YWxpZCgpIHx8ICF2YWxpZGF0ZVJl
bmRlcmluZ1N0YXRlKGNoZWNrZWRTdW0udmFsdWUoKSkpIHsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2wgdmVy
dGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
KSB7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAgICAgIHZlcnRleEF0dHJpYjBT
aW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOworICAg
IGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKICAgICAgICAgaGFuZGxlTlBPVFRleHR1cmVzKHRy
dWUpOwotICAgIH0KICAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50
KTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgIGlmICghaXNHTEVTMkNvbXBs
aWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAgICAgIHJlc3RvcmVTdGF0ZXNB
ZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmlj
dCgpKQogICAgICAgICBoYW5kbGVOUE9UVGV4dHVyZXMoZmFsc2UpOwotICAgICAgICBpZiAodmVy
dGV4QXR0cmliMFNpbXVsYXRlZCkKLSAgICAgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRl
eEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0gICAgfQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bCh0cnVlKTsKIH0KIApAQCAtOTYzLDQwICs5NjMsNDEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRyYXdFbGVtZW50cwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRW5z
dXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKLSAgICBsb25nIG51bUVsZW1lbnRz
OwotICAgIAotICAgIGlmICghdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKGNvdW50LCB0eXBlLCBv
ZmZzZXQpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKHR5cGUsIG51bUVsZW1lbnRz
KSB8fCAhdmFsaWRhdGVSZW5kZXJpbmdTdGF0ZShudW1FbGVtZW50cykpCi0gICAgICAgIGlmICgh
dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50
cykgfHwgIXZhbGlkYXRlUmVuZGVyaW5nU3RhdGUobnVtRWxlbWVudHMpKSB7CisgICAgbG9uZyBu
dW1FbGVtZW50cyA9IDA7CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0Fj
Y2Vzc2VzKCkpIHsKKyAgICAgICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcg
c3RhdGUKKyAgICAgICAgaWYgKCF2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoY291bnQsIHR5cGUs
IG9mZnNldCkpIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQorICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0
eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlUmVuZGVyaW5nU3RhdGUobnVtRWxlbWVudHMp
KSB7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoY291bnQsIHR5
cGUsIG9mZnNldCwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVJlbmRlcmluZ1N0YXRlKG51bUVs
ZW1lbnRzKSkgeworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAKICAgICBib29sIHZlcnRl
eEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkg
eworICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQorICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFy
cmF5UHJlY2lzZShjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cyk7CiAgICAgICAgIHZl
cnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMp
OwotICAgICAgICBoYW5kbGVOUE9UVGV4dHVyZXModHJ1ZSk7CiAgICAgfQorICAgIGlmICghaXNH
TEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgaGFuZGxlTlBPVFRleHR1cmVzKHRydWUpOwogICAg
IG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQpOwotICAg
IGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkg
JiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVy
dGV4QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCiAg
ICAgICAgIGhhbmRsZU5QT1RUZXh0dXJlcyhmYWxzZSk7Ci0gICAgICAgIGlmICh2ZXJ0ZXhBdHRy
aWIwU2ltdWxhdGVkKQotICAgICAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmli
MFNpbXVsYXRpb24oKTsKLSAgICB9CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUp
OwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlKHVuc2lnbmVkIGxvbmcg
Y2FwKQogewotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIGlmICghdmFs
aWRhdGVDYXBhYmlsaXR5KGNhcCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
ICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCisgICAgICAgIHJldHVybjsKICAgICBtX2NvbnRl
eHQtPmVuYWJsZShjYXApOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CkBAIC0xMTE5LDE1ICsxMTIwLDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZW5l
cmF0ZU1pcG0KICAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmco
dGFyZ2V0LCBmYWxzZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBt
YXBzKCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQorICAgIGlmICghdGV4LT5jYW5HZW5lcmF0ZU1pcG1hcHMoKSkgeworICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5nZW5lcmF0
ZU1pcG1hcCh0YXJnZXQpOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICB0
ZXgtPmdlbmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7CisgICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExl
dmVsSW5mbygpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAg
LTE4MDcsMTEgKzE4MDUsOSBAQCBsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4
QXR0CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoaW50KHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpCiB7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkp
IHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6R0VORVJBVEVfTUlQ
TUFQX0hJTlQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpHRU5FUkFURV9NSVBN
QVBfSElOVCkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1f
Y29udGV4dC0+aGludCh0YXJnZXQsIG1vZGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CkBAIC0xODI3LDEwICsxODIzLDggQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmlzQnVmZmVyKFdlYgogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFbmFibGVk
KHVuc2lnbmVkIGxvbmcgY2FwKQogewotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0g
ICAgICAgIGlmICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIGlmICghdmFsaWRhdGVDYXBhYmlsaXR5KGNhcCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gbV9jb250ZXh0LT5pc0VuYWJsZWQoY2FwKTsKIH0K
IApAQCAtMjA4OSw3ICsyMDgzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleElt
YWdlMkRCYQogICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0
YXJnZXQsIHRydWUpOwogICAgIGlmICghdGV4KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFp
c0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpIHsKICAg
ICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7
CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTIwOTcsOCArMjA5
MSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmEKICAgICB9CiAg
ICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgcGl4ZWxzKTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgdGV4
LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIHR5cGUpOworICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBlKTsKICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcpCiAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2JqZWN0Q2hhbmdl
KHRleCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTIyMjQsMzIg
KzIyMTcsMjkgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcgogICAg
IFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyh0YXJnZXQsIGZhbHNl
KTsKICAgICBpZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNHTEVTMkNvbXBs
aWFudCgpKSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgotICAgICAgICAgICAgaWYgKGlzRmxvYXQg
JiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtZiAh
PSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtZiAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVQRUFUCi0gICAgICAgICAgICAgICAgfHwgIWlzRmxvYXQgJiYgcGFyYW1p
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtaSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6UkVQRUFUKSB7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
KyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NSU5fRklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJ
TFRFUjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Q6Cisg
ICAgICAgIGlmIChpc0Zsb2F0ICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAm
JiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVAorICAgICAgICAgICAgfHwgIWlz
RmxvYXQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBh
cmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtaSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc0Zsb2F0KQotICAgICAgICAgICAg
dGV4LT5zZXRQYXJhbWV0ZXJmKHBuYW1lLCBwYXJhbWYpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBhcmFtaSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKGlzRmxvYXQpCisgICAgaWYgKGlzRmxvYXQpIHsKKyAgICAgICAgdGV4LT5zZXRQYXJhbWV0
ZXJmKHBuYW1lLCBwYXJhbWYpOwogICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFy
Z2V0LCBwbmFtZSwgcGFyYW1mKTsKLSAgICBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4
LT5zZXRQYXJhbWV0ZXJpKHBuYW1lLCBwYXJhbWkpOwogICAgICAgICBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFyYW1pKTsKKyAgICB9CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMzAxMCw2ICszMDAwLDE2IEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc0dMRVMyQ29tcGwKICAgICByZXR1cm4gbV9jb250ZXh0LT5p
c0dMRVMyQ29tcGxpYW50KCk7CiB9CiAKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0dM
RVMyTlBPVFN0cmljdCgpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNHTEVTMk5QT1RTdHJp
Y3QoKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMoKQoreworICAgIHJldHVybiBtX2NvbnRleHQtPmlzRXJyb3JH
ZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKTsKK30KKwogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmhhbmRsZU5QT1RUZXh0dXJlcyhib29sIHByZXBhcmVUb0RyYXcpCiB7CiAgICAg
Ym9vbCByZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gNjYwMzkpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUs
NiArMzA1LDggQEAgcHVibGljOgogICAgIH0KIAogICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgp
OworICAgIGJvb2wgaXNHTEVTMk5QT1RTdHJpY3QoKTsKKyAgICBib29sIGlzRXJyb3JHZW5lcmF0
ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKTsKIAogICAgIC8vIEhlbHBlciB0byByZXR1cm4gdGhl
IHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKICAgICAvLyBsaWtlIEdMX0ZMT0FU
LCBHTF9JTlQsIGV0Yy4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAJKHJl
dmlzaW9uIDY2MDM5KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjksMTEgKzE2OSwxMiBAQCB2b2lkIFdlYkdMVGV4dHVyZTo6Z2Vu
ZXJhdGVNaXBtYXBMZXZlbEluCiAgICAgbV9uZWVkVG9Vc2VCbGFja1RleHR1cmUgPSBmYWxzZTsK
IH0KIAotdW5zaWduZWQgbG9uZyBXZWJHTFRleHR1cmU6OmdldEludGVybmFsRm9ybWF0KCkgY29u
c3QKK3Vuc2lnbmVkIGxvbmcgV2ViR0xUZXh0dXJlOjpnZXRJbnRlcm5hbEZvcm1hdChpbnQgbGV2
ZWwpIGNvbnN0CiB7CiAgICAgaWYgKCFvYmplY3QoKSB8fCAhbV90YXJnZXQpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBtX2luZm9bMF1bMF0uaW50ZXJuYWxGb3JtYXQ7CisgICAgLy8g
V2UgYXNzdW1lIGxldmVsIGhhcyBiZWVuIHZhbGlkYXRlZCBhbHJlYWR5LgorICAgIHJldHVybiBt
X2luZm9bMF1bbGV2ZWxdLmludGVybmFsRm9ybWF0OwogfQogCiBib29sIFdlYkdMVGV4dHVyZTo6
aXNOUE9UKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCkluZGV4OiBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xUZXh0dXJlLmgJKHJldmlzaW9uIDY2MDM5KQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFRleHR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6
CiAgICAgLy8gR2VuZXJhdGUgYWxsIGxldmVsIGluZm9ybWF0aW9uLgogICAgIHZvaWQgZ2VuZXJh
dGVNaXBtYXBMZXZlbEluZm8oKTsKIAotICAgIHVuc2lnbmVkIGxvbmcgZ2V0SW50ZXJuYWxGb3Jt
YXQoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBsb25nIGdldEludGVybmFsRm9ybWF0KGludCBsZXZl
bCkgY29uc3Q7CiAKICAgICAvLyBXaGV0aGVyIHdpZHRoL2hlaWdodCBpcyBOb3RQb3dlck9mVHdv
LgogICAgIHN0YXRpYyBib29sIGlzTlBPVCh1bnNpZ25lZCwgdW5zaWduZWQpOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24g
NjYwMzkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2Myw2ICs0NjMsOCBAQCBwdWJsaWM6CiAgICAgaW50IHNpemVJ
bkJ5dGVzKGludCB0eXBlKTsKIAogICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0Owor
ICAgIGJvb2wgaXNHTEVTMk5QT1RTdHJpY3QoKSBjb25zdDsKKyAgICBib29sIGlzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSBjb25zdDsKIAogICAgIC8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogICAgIC8vIEhlbHBlcnMgZm9yIHRleHR1cmUgdXBsb2FkaW5nIGFuZCBwaXhlbCByZWFkYmFj
ay4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNE
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2NjAzOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTIsNiArMzEyLDE2IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJO
UE9UU3RyaWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSBjb25z
dAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVz
aGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgaWYgKHdpZHRoID09IG1fY3VycmVu
dFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQgfHwgIW1fY29udGV4dE9iaikKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHQzRFF0LmNwcAkocmV2aXNpb24gNjYwMzkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNiArMjc0
LDE4IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlhbnQKICNlbmRpZgog
fQogCisvLyBFdmVuIHdpdGggdW5kZXJseWluZyBHTEVTMiBkcml2ZXIsIHRoZSBiZWxvdyBmbGFn
cyBzaG91bGQgc3RpbGwgYmUgc2V0IHRvCisvLyBmYWxzZSBpZiBleHRlbnRpb25zIGV4aXN0IChh
bmQgdGhleSBhbG1vc3QgYWx3YXlzIGRvKS4KK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xF
UzJOUE9UU3RyaWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSBj
b25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwogIAogR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbChHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKICAgICA6IG1fYXR0cnMoYXR0cnMp
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2MDM5KQorKysgV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDEwLTA4LTIwICBaaGVu
eWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2ViR0wgbXVzdCBlbmZvcmNlIHJlc3RyaWN0aW9ucyBldmVuIGlm
IHJ1bm5pbmcgb24gT3BlbkdMIEVTIDIuMAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDI5MDgKKworICAgICAgICAqIHB1YmxpYy9XZWJHcmFwaGljc0Nv
bnRleHQzRC5oOiBBZGQgdHdvIG5ldyBmbGFncy4KKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250
ZXh0M0QuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmlzR0xFUzJOUE9UU3RyaWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJOUE9UU3RyaWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0Vycm9yR2VuZXJhdGVkT25P
dXRPZkJvdW5kc0FjY2Vzc2VzKToKKyAgICAgICAgKiBzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjppc0dMRVMyTlBPVFN0cmljdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91
bmRzQWNjZXNzZXMpOgorICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsLmg6IERpdHRvLgorCiAyMDEwLTA4LTI0ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpJbmRleDogV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNjYwMzkp
CisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwMyw2ICsxMDMsMTEgQEAgcHVibGljOgogCiAgICAgLy8gUXVlcnkgd2hl
dGhlciBpdCBpcyBidWlsdCBvbiB0b3Agb2YgY29tcGxpYW50IEdMRVMyIGltcGxlbWVudGF0aW9u
LgogICAgIHZpcnR1YWwgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgPSAwOworICAgIC8vIFF1ZXJ5
IHdoZXRoZXIgaXQgaXMgYnVpbHQgb24gdG9wIG9mIEdMRVMyIE5QT1Qgc3RyaWN0IGltcGxlbWVu
dGF0aW9uLgorICAgIHZpcnR1YWwgYm9vbCBpc0dMRVMyTlBPVFN0cmljdCgpID0gMDsKKyAgICAv
LyBRdWVyeSB3aGV0aGVyIGl0IGlzIGJ1aWx0IG9uIHRvcCBvZiBpbXBsZW1lbnRhdGlvbiB0aGF0
IGdlbmVyYXRlcyBlcnJvcnMKKyAgICAvLyBvbiBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3Nl
cy4KKyAgICB2aXJ0dWFsIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
cygpID0gMDsKIAogICAgIC8vIEhlbHBlciBmb3Igc29mdHdhcmUgY29tcG9zaXRpbmcgcGF0aC4g
UmVhZHMgYmFjayB0aGUgZnJhbWUgYnVmZmVyIGludG8KICAgICAvLyB0aGUgbWVtb3J5IHJlZ2lv
biBwb2ludGVkIHRvIGJ5ICJwaXhlbHMiIHdpdGggc2l6ZSAiYnVmZmVyU2l6ZSIuIEl0IGlzCklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24g
NjYwMzkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw4IEBAIHB1YmxpYzoKICAgICBDYW52YXNMYXllckNo
cm9taXVtKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKICAgICBib29sIGlzR0xFUzJD
b21wbGlhbnQoKSBjb25zdDsKKyAgICBib29sIGlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3Q7Cisg
ICAgYm9vbCBpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkgY29uc3Q7CiAK
ICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBFbnRyeSBwb2ludHMgZm9yIFdlYkdMLgpAQCAt
NTgxLDYgKzU4MywxNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmlzR0xFUzJD
CiAgICAgcmV0dXJuIG1faW1wbC0+aXNHTEVTMkNvbXBsaWFudCgpOwogfQogCitib29sIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OmlzR0xFUzJOUE9UU3RyaWN0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9pbXBsLT5pc0dMRVMyTlBPVFN0cmljdCgpOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtX2ltcGwtPmlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXMoKTsKK30KKwogREVMRUdBVEVfVE9fSU1QTF8xKGFjdGl2ZVRleHR1cmUsIHVuc2ln
bmVkIGxvbmcpCiBERUxFR0FURV9UT19JTVBMXzIoYXR0YWNoU2hhZGVyLCBQbGF0Zm9ybTNET2Jq
ZWN0LCBQbGF0Zm9ybTNET2JqZWN0KQogCkBAIC0xMjI3LDYgKzEyMzksMTYgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudAogICAgIHJldHVybiBtX2ludGVybmFsLT5p
c0dMRVMyQ29tcGxpYW50KCk7CiB9CiAKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJO
UE9UU3RyaWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNHTEVTMk5QT1RT
dHJpY3QoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFcnJvckdlbmVyYXRlZE9u
T3V0T2ZCb3VuZHNBY2Nlc3NlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlz
RXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
LmNwcAkocmV2aXNpb24gNjYwMzkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNiArMTgyLDE2
IEBAIGJvb2wgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6aXMKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK2Jvb2wgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6aXNHTEVT
Mk5QT1RTdHJpY3QoKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjppc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vz
c2VzKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHVuc2lnbmVkIGludCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRQbGF0Zm9ybVRleHR1cmVJZCgpCiB7CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAkocmV2aXNpb24gNjYwMzkpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtNjgsNiArNjgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgc2l6
ZUluQnl0ZXMoaW50IHR5cGUpOwogCiAgICAgdmlydHVhbCBib29sIGlzR0xFUzJDb21wbGlhbnQo
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNHTEVTMk5QT1RTdHJpY3QoKTsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpOwogCiAgICAgdmlydHVh
bCB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAo=
</data>
<flag name="review"
          id="54263"
          type_id="1"
          status="+"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="54264"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
      

    </bug>

</bugzilla>