<?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>43221</bug_id>
          
          <creation_ts>2010-07-29 17:24:45 -0700</creation_ts>
          <short_desc>Move WebGL-specific code out of GraphicsContext3D so that G3D can be used as a generic accelerated drawing API</short_desc>
          <delta_ts>2010-08-04 11:39:24 -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>
          
          <blocked>43210</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>japhet</cc>
    
    <cc>kbr</cc>
    
    <cc>noam</cc>
    
    <cc>oliver</cc>
    
    <cc>scheib</cc>
    
    <cc>senorblanco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>257998</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-07-29 17:24:45 -0700</bug_when>
    <thetext>GraphicsContext3D is a useful abstraction for platforms support variants of OpenGL as well as containing WebGL specific logic.  It would be great if the WebGL specific logic was split into a separate class.  See discussion on https://bugs.webkit.org/show_bug.cgi?id=43210 for one use case..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259169</commentid>
    <comment_count>1</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-02 16:02:04 -0700</bug_when>
    <thetext>GraphicsContext3D lives in platform/graphics but uses types (like WebGLProgram) defined in WebCore/html/canvas/.  This is a layering violation, platform/ code is not supposed to be aware of anything in WebCore outside of platform/.  It appears from a brief inspection that there are not any true dependencies on WebGL-isms from the types that GraphicsContext3D references, but it will take a bit of work to verify this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259200</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-02 16:59:43 -0700</bug_when>
    <thetext>Looking at the code, I think there are two issues:

1) ArrayBuffer and friends. These used to be called WebGL...Array, but have since been given more generic names. I think these should just be moved into WebCore/platform.

2) CanvasObject and subclasses. A cursory glance shows that these are not really necessary and the underlying Platform3DObject can be passed instead. So we should leave all these where they are and change the API to GraphicsContext3D to use Platform3DObject.

I see one small issue in that all the create calls in GraphicsContext3D (e.g., createShader()) return an unsigned type. This should be Platform3DObject.

I understand Ken&apos;s concerns, but I don&apos;t think making these changes now would be destabilizing to WebGL. They are mostly cosmetic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259208</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-02 17:17:11 -0700</bug_when>
    <thetext>Another issue I&apos;ve seen:

3) paintRenderingResultsToCanvas() uses WebGLRenderingContext and HTMLCanvasElement. It needs to simply create the pixel array, fill it and then pass ownership to the caller. Or maybe it would be easier for the caller to create the array and pass it in. The caller also probably needs to make the paintToCanvas call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259278</commentid>
    <comment_count>4</comment_count>
      <attachid>63297</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-02 21:34:42 -0700</bug_when>
    <thetext>Created attachment 63297
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259280</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-02 21:38:38 -0700</bug_when>
    <thetext>This patch takes care of CanvasObject and friends and does the simplest thing possible for paintRenderingResultsToCanvas().  Since this patch is already over 100kb, I think it&apos;s better to land this one first and then work on the rest as separate patches lest the WebKit reviewers strangle me in my sleep.

I can move the ArrayBuffer, etc, types to platform/ and take care of the functions that should return Platform3DObjects next.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259294</commentid>
    <comment_count>6</comment_count>
      <attachid>63297</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-08-02 23:11:58 -0700</bug_when>
    <thetext>Comment on attachment 63297
Patch

WebCore/html/canvas/WebGLRenderingContext.cpp:223
 +      m_context-&gt;attachShader(program ? program-&gt;object() : 0, shader ? shader-&gt;object() : 0);
This null checking of program seems unnecessary given the null
test done by validateWebGLObject.  hmm... should validateWebGLObject
be modified to also null check program-&gt;object()?  same goes for
the rest of the null checking in this file.

WebCore/html/canvas/WebGLRenderingContext.cpp:330
 +                  static const int kTextureWrapR = 0x8072;
nit: kTextureWrapR -&gt; textureWrapR


otherwise, R=me

this is very nice cleanup of GC3D.  it was always bothersome that
code in platform/graphics depended back on code in html/canvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259615</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-03 12:17:45 -0700</bug_when>
    <thetext>I didn&apos;t want to depend on the validateXX() functions returning false for NULL pointers, mostly so readers do not have to check what the validate functions to do know how the function handles NULL.

program-&gt;object() is just an integer and doesn&apos;t need its own check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259637</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-03 12:48:13 -0700</bug_when>
    <thetext>Committed r64582: &lt;http://trac.webkit.org/changeset/64582&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259649</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-03 13:02:04 -0700</bug_when>
    <thetext>First bit (switching from WebGLProgram/type/etc) to Platform3DObjects.  Next:
- move ArrayBuffer and friends to platform/graphics
- audit uses of &apos;unsigned&apos; to see if they really mean &apos;Platform3DObject&apos;.  It looks like the createFoo() and deleteFoo() functions really mean Platform3DObject</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259693</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-03 14:33:15 -0700</bug_when>
    <thetext>There is one small issue being caused by these changes. We&apos;re adding shader validation to WebGL (using ANGLE). This was being done in GraphicsContext3D because, in addition to validation, the shader is translated as needed for output to desktop OpenGL or D3D. Putting it in GraphicsContext3D made this transparent.

But Paul was putting the results of the validation into the WebGLShader object for later return to the author on demand. Now that WebGLShader is no longer passed to GraphicsContext3D we can no longer do this.

For now I think we will put the shader validator in WebGLRenderingContext which does have access to WebGLShader. This fits better with our new &quot;don&apos;t do WebGL specific things in GraphicsContext3D&quot; model. But it does mean  that we will possibly have to parse the shader twice: once in WebGLRenderingContext to do the validation and once in GraphicsContext3D to do the translation. This may not be that bad since shader&apos;s tend not to be large. But we may want to rethink this decision later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259706</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-08-03 14:54:04 -0700</bug_when>
    <thetext>I think it&apos;d be nice to create non-WebGL specific types for shader, program, texture etc that lived in platform/graphics and use those for GraphicsContext3D.  That would provide a natural place to store additional information like this and also make the API slightly more type safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259791</commentid>
    <comment_count>12</comment_count>
      <attachid>63401</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-03 18:35:03 -0700</bug_when>
    <thetext>Created attachment 63401
Patch (re-)introducing EXTRACT macro

From the ChangeLog:

Added a helper macro to extract the contents of WebGL objects to reduce duplicated code and fix a couple of potential crashes introduced in the previous refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260001</commentid>
    <comment_count>13</comment_count>
      <attachid>63401</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-04 06:49:14 -0700</bug_when>
    <thetext>Comment on attachment 63401
Patch (re-)introducing EXTRACT macro

WebCore/html/canvas/WebGLRenderingContext.cpp:58
 +  #define EXTRACT(x) ((x) ? (x)-&gt;object() : 0)
I think this is the wrong change. Why would we generically pass a 0 to GraphicsContext3D when we don&apos;t have a proper object? It would be better to avoid the call and generate the appropriate WebGL error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260003</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-04 06:52:00 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I think it&apos;d be nice to create non-WebGL specific types for shader, program, texture etc that lived in platform/graphics and use those for GraphicsContext3D.  That would provide a natural place to store additional information like this and also make the API slightly more type safe.

I&apos;m not sure we should go down the road of &quot;type safety&quot; with GraphicsContext3D. We&apos;d have a lot more work to do it right. I agree with your desire to make GraphicsContext3D very lightweight and let the higher level logic keep it safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260029</commentid>
    <comment_count>15</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-04 08:14:16 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 63401 [details])
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:58
&gt;  +  #define EXTRACT(x) ((x) ? (x)-&gt;object() : 0)
&gt; I think this is the wrong change. Why would we generically pass a 0 to GraphicsContext3D when we don&apos;t have a proper object? It would be better to avoid the call and generate the appropriate WebGL error.

0, or null at the JavaScript level, is a perfectly valid value to pass to many of the entry points, for example when detaching a renderbuffer from a framebuffer object. The entry points which do not accept null already have validation which synthesizes the appropriate OpenGL error.

This change only simplifies uses of the ternary operator throughout this file, restoring logic that was previously inside the GraphicsContext3D implementations, and avoiding possible crashes that have been introduced in handleNPOTTextures() and restoreStatesAfterVertexAttrib0Simulation() due to dereferencing of a possibly NULL object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260062</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-04 09:53:07 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #13)
&gt; &gt; (From update of attachment 63401 [details] [details])
&gt; &gt; WebCore/html/canvas/WebGLRenderingContext.cpp:58
&gt; &gt;  +  #define EXTRACT(x) ((x) ? (x)-&gt;object() : 0)
&gt; &gt; I think this is the wrong change. Why would we generically pass a 0 to GraphicsContext3D when we don&apos;t have a proper object? It would be better to avoid the call and generate the appropriate WebGL error.
&gt; 
&gt; 0, or null at the JavaScript level, is a perfectly valid value to pass to many of the entry points, for example when detaching a renderbuffer from a framebuffer object. The entry points which do not accept null already have validation which synthesizes the appropriate OpenGL error.
&gt; 
&gt; This change only simplifies uses of the ternary operator throughout this file, restoring logic that was previously inside the GraphicsContext3D implementations, and avoiding possible crashes that have been introduced in handleNPOTTextures() and restoreStatesAfterVertexAttrib0Simulation() due to dereferencing of a possibly NULL object.

Ah, right, I forgot about that. Could we at least do this with an inline function rather than a macro?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260065</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-04 09:54:51 -0700</bug_when>
    <thetext>...
&gt; 
&gt; Ah, right, I forgot about that. Could we at least do this with an inline function rather than a macro?

And a more specific name than extract would be good, too. objectOrNull() or something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260068</commentid>
    <comment_count>18</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-04 09:57:30 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; ...
&gt; &gt; 
&gt; &gt; Ah, right, I forgot about that. Could we at least do this with an inline function rather than a macro?
&gt; 
&gt; And a more specific name than extract would be good, too. objectOrNull() or something?

Sure. I&apos;ll upload a revised patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260089</commentid>
    <comment_count>19</comment_count>
      <attachid>63297</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-04 10:24:04 -0700</bug_when>
    <thetext>Comment on attachment 63297
Patch

Cleared Darin Fisher&apos;s review+ from obsolete attachment 63297 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260097</commentid>
    <comment_count>20</comment_count>
      <attachid>63466</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-04 10:34:13 -0700</bug_when>
    <thetext>Created attachment 63466
Patch introducing objectOrZero helper function

Addressed Chris Marrin&apos;s review feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260123</commentid>
    <comment_count>21</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-04 11:39:24 -0700</bug_when>
    <thetext>Committed r64660: &lt;http://trac.webkit.org/changeset/64660&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63297</attachid>
            <date>2010-08-02 21:34:42 -0700</date>
            <delta_ts>2010-08-04 10:24:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43221-20100802213440.patch</filename>
            <type>text/plain</type>
            <size>114701</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGIyMTZjNTU2NzY1NGQyNzUxYzI2YzlhNjY5YjMyZDA1NGE2NjA5NS4uNzE4M2EzMWI0NjY4ZTc2
YjRkMzJmNTVlNjZkYzY0MGI2MmU0Y2E1YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMzkgQEAKKzIwMTAtMDgtMDIgIEph
bWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIFdlYkdMLXNwZWNpZmljIGNvZGUgb3V0
IG9mIEdyYXBoaWNzQ29udGV4dDNEIHNvIHRoYXQgRzNEIGNhbiBiZSB1c2VkIGFzIGEgZ2VuZXJp
YyBhY2NlbGVyYXRlZCBkcmF3aW5nIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDMyMjEKKworICAgICAgICBDaGFuZ2VzIHRoZSBHcmFwaGljc0Nv
bnRleHQzRCBBUEkgdG8gdXNlIFBsYXRmb3JtM0RPYmplY3RzIGluc3RlYWQgb2YgV2ViR0xGb28q
IHR5cGVzIGxpa2UgV2ViR0xUZXh0dXJlLgorICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQg
c3RpbGwgdXNlcyBXZWJHTEZvbyB0eXBlcyBhbmQgY29udmVydHMgdG8gUGxhdGZvcm0zRE9iamVj
dHMgaW50ZXJuYWxseS4gIE90aGVyCisgICAgICAgIGNvbnN1bWVycyBvZiB0aGUgR3JhcGhpY3ND
b250ZXh0M0QgY2FuIHVzZSB0aGUgUGxhdGZvcm0zRE9iamVjdCBBUElzIGRpcmVjdGx5IHdpdGhv
dXQgYW55IHRpZXMgdG8gV2ViR0wuCisKKyAgICAgICAgVGhlIG1ham9yaXR5IG9mIHRoaXMgY2hh
bmdlIGlzIHB1cmVseSBtZWNoYW5pY2FsLiAgVGhlIGxlc3Mgb2J2aW91cyBjaGFuZ2VzIGFyZToK
KyAgICAgICAgLSBtb3ZlIGFsbCBudWxsIGNoZWNraW5nIG9uIFdlYkdMRm9vIHR5cGVzIHRvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCwgaW5zdGVhZCBvZiBtaXhpbmcgdGhlbQorICAgICAgICAgIGJl
dHdlZW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0IGFuZCB0aGUgdmFyaW91cyBwb3J0LXNwZWNpZmlj
IGltcGxlbWVudGF0aW9ucyBvZiBHcmFwaGljc0NvbnRleHQzRAorICAgICAgICAtIGFkZCBhIEdy
YXBoaWNzQ29udGV4dDNEIGdldHRlciB0byBDYW52YXNSZW5kZXJpbmdDb250ZXh0LiAgVGhpcyBp
cyBuZWVkZWQgZm9yIHRoZSByZWFkYmFjaworICAgICAgICAgIHBhdGggb24gQ2hyb21pdW0vbWFj
LiAgSXQgbWF5IGJlIHBvc3NpYmxlIHRvIHJlbW92ZSB0aGlzLCBidXQgSSB3b3VsZCBwcmVmZXIg
dG8gZG8gdGhhdAorICAgICAgICAgIGluIGEgZm9sbG93LXVwIHBhdGNoIHRvIG1pbmltaXplIGNo
dXJuLgorICAgICAgICAtIG1vdmUgc29tZSB0ZXh0dXJlIGN1YmUgbWFwIGxvZ2ljIHRoYXQgZXhp
c3RlZCBvbmx5IGluIHRoZSBDaHJvbWl1bSBwb3J0IG9mIEdDM0QgdG8KKyAgICAgICAgICBXZWJH
TFJlbmRlcmluZ0NvbnRleHQgYmVoaW5kICNpZiBQTEFURk9STShDSFJPTUlVTSkuIEkgdGhpbmsg
dGhpcyBsb2dpYyBzaG91bGQgZWl0aGVyCisgICAgICAgICAgZXhpc3QgZm9yIGFsbCBwb3J0cyBv
ciBleGlzdCBmb3Igbm9uZSwgYnV0IGFnYWluIEkgd291bGQgcmF0aGVyIGNoYW5nZSB0aGUgYmVo
YXZpb3IKKyAgICAgICAgICBpbiBhIGRpZmZlcmVudCBwYXRjaCBmcm9tIHRoaXMgb25lLgorCisg
ICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6Z3JhcGhpY3NDb250ZXh0M0QpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0
dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3Rp
dmVBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRB
Y3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNGcmFtZWJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleHR1cmUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVzZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYW5kbGVOUE9UVGV4dHVyZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4
dHVyZXMxeDEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0
VmVydGV4QXR0cmliMCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnNpbXVsYXRlVmVydGV4QXR0cmliMCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKToKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1Rl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFt
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6YmVnaW5QYWludCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6aXNCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5k
ZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmdldFVuaWZvcm1Mb2NhdGlvbik6CisKIDIwMTAtMDgtMDIgIEtldmluIE9sbGl2aWVyICA8a2V2
aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgW3d4XSBCdWlsZCBmaXgsIGFkZCBzdHVi
cyBmb3IgRm9udEN1c3RvbVBsYXRmb3JtRGF0YSB0byBjb21waWxlIGNvZGUgdGhhdCB1c2VzIHRo
ZW0uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuaCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4
IDJlZTE2OTM4Zjc4MjhjOTc3NzhlNGU0Y2I0MTg3MDkwMWYzYTk5ZDguLjQzNmVlYWQ0MjIzN2Nk
M2NjOGU2MTQ5OTI1ZDE3NzA1M2FkM2FhNzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0zMSw2ICszMSw3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBDYW52YXNPYmplY3Q7CisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7CiAgICAgY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CiAKICAgICBjbGFzcyBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0IDogcHVibGljIE5vbmNvcHlhYmxlIHsKQEAgLTQ3LDYgKzQ4LDEwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzMmQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXMzZCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgCisgICAgICAgIC8vIEZvciBhY2NlbGVyYXRlZCBjYW52
YXNlcywgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgR3JhcGhpY3NDb250ZXh0
M0QuCisgICAgICAgIC8vIEZvciBub24gYWNjZWxlcmF0ZWQgY2FudmFzZXMgcmV0dXJucyAwLgor
ICAgICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIEhUTUxDYW52YXNFbGVt
ZW50KiBtX2NhbnZhczsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9n
cmFtLmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAppbmRleCAwMDA0
NDY1NDFhOTc3NjhmOGFmNzY2ZjUyZTY3Y2Y2ZWMwNmM1MTdiLi5kMTNhZTNkOTYzZGVkY2E4MDM1
ZWZjNTcyYmM3ZDlhOTM4OTEzOTc1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3Bw
CkBAIC01NiwxNyArNTYsMTcgQEAgYm9vbCBXZWJHTFByb2dyYW06OmNhY2hlQWN0aXZlQXR0cmli
TG9jYXRpb25zKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0M2QgPSBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAgICAgaW50IGxp
bmtTdGF0dXM7Ci0gICAgY29udGV4dDNkLT5nZXRQcm9ncmFtaXYodGhpcywgR3JhcGhpY3NDb250
ZXh0M0Q6OkxJTktfU1RBVFVTLCAmbGlua1N0YXR1cyk7CisgICAgY29udGV4dDNkLT5nZXRQcm9n
cmFtaXYob2JqZWN0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUywgJmxpbmtTdGF0
dXMpOwogICAgIGlmICghbGlua1N0YXR1cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
aW50IG51bUF0dHJpYnMgPSAwOwotICAgIGNvbnRleHQzZC0+Z2V0UHJvZ3JhbWl2KHRoaXMsIEdy
YXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUywgJm51bUF0dHJpYnMpOworICAgIGNv
bnRleHQzZC0+Z2V0UHJvZ3JhbWl2KG9iamVjdCgpLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZF
X0FUVFJJQlVURVMsICZudW1BdHRyaWJzKTsKICAgICBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9ucy5y
ZXNpemUoc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1BdHRyaWJzKSk7CiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1BdHRyaWJzOyArK2kpIHsKICAgICAgICAgQWN0aXZlSW5mbyBpbmZvOwotICAg
ICAgICBjb250ZXh0M2QtPmdldEFjdGl2ZUF0dHJpYih0aGlzLCBpLCBpbmZvKTsKLSAgICAgICAg
bV9hY3RpdmVBdHRyaWJMb2NhdGlvbnNbaV0gPSBjb250ZXh0M2QtPmdldEF0dHJpYkxvY2F0aW9u
KHRoaXMsIGluZm8ubmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKKyAgICAg
ICAgY29udGV4dDNkLT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0KCksIGksIGluZm8pOworICAgICAg
ICBtX2FjdGl2ZUF0dHJpYkxvY2F0aW9uc1tpXSA9IGNvbnRleHQzZC0+Z2V0QXR0cmliTG9jYXRp
b24ob2JqZWN0KCksIGluZm8ubmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsK
ICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCBmYjE3ZGI5MjQ2MTExYTc2YTIxNGU0MjQ2ODRlNzU2
YjNiMDM3YWFhLi43MDRhYWUxZjdiMjI4YjQ3MDFlOGViMTVhNzhlYTVlZWZhNDk0ZDBjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysr
IGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0yMjAs
NyArMjIwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRlcihXZWJH
TFByb2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGEKICAgICBVTlVTRURfUEFSQU0oZWMp
OwogICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJH
TE9iamVjdChzaGFkZXIpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5hdHRhY2hT
aGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKKyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9n
cmFtID8gcHJvZ3JhbS0+b2JqZWN0KCkgOiAwLCBzaGFkZXIgPyBzaGFkZXItPm9iamVjdCgpIDog
MCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMjI5LDcg
KzIyOSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24o
V2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsK
ICAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZSk7
CisgICAgbV9jb250ZXh0LT5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSA/IHByb2dyYW0tPm9i
amVjdCgpIDogMCwgaW5kZXgsIG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKQEAgLTI1NCw3ICsyNTQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlcgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKHRhcmdl
dCwgYnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIgPyBi
dWZmZXItPm9iamVjdCgpIDogMCk7CiAgICAgaWYgKGJ1ZmZlcikKICAgICAgICAgYnVmZmVyLT5z
ZXRUYXJnZXQodGFyZ2V0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpA
QCAtMjczLDcgKzI3Myw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVi
dWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZmCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBidWZmZXI7Ci0gICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBidWZmZXIpOworICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKHRhcmdldCwgYnVmZmVyID8gYnVmZmVyLT5vYmplY3QoKSA6IDApOwogICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmct
Pm9uQmluZCgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0yOTEs
NyArMjkxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMUmVuZGVyYnUKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSByZW5kZXJCdWZmZXI7Ci0gICAgbV9jb250
ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyQnVmZmVyKTsKKyAgICBtX2NvbnRl
eHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJCdWZmZXIgPyByZW5kZXJCdWZmZXIt
Pm9iamVjdCgpIDogMCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IApAQCAtMzE0LDkgKzMxNCwyOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFRl
eHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dAogICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
dGFyZ2V0LCB0ZXh0dXJlKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4
dHVyZSA/IHRleHR1cmUtPm9iamVjdCgpIDogMCk7CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkgJiYgdGV4dHVyZSkKICAgICAgICAgdGV4dHVyZS0+c2V0VGFyZ2V0KHRhcmdldCwgbWF4TGV2
ZWwpOworCisgICAgLy8gRklYTUU6IGRvIHdlIHdhbnQgdG8gZG8gdGhpcyBvbiBhbGwgcGxhdGZv
cm1zPworI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorICAgIC8vIEZJWE1FOiBHTF9URVhUVVJFX1dS
QVBfUiBpc24ndCBleHBvc2VkIGluIHRoZSBPcGVuR0wgRVMgMi4wCisgICAgLy8gQVBJLiBPbiBk
ZXNrdG9wIE9wZW5HTCBpbXBsZW1lbnRhdGlvbnMgaXQgc2VlbXMgbmVjZXNzYXJ5IHRvCisgICAg
Ly8gc2V0IHRoaXMgd3JhcCBtb2RlIHRvIEdMX0NMQU1QX1RPX0VER0UgdG8gZ2V0IGNvcnJlY3Qg
YmVoYXZpb3IKKyAgICAvLyBvZiBjdWJlIG1hcHMuCisgICAgaWYgKHRleHR1cmUpIHsKKyAgICAg
ICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgewor
ICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5pc0N1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZCgp
KSB7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGludCBrVGV4dHVyZVdyYXBSID0gMHg4
MDcyOworICAgICAgICAgICAgICAgIHRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVAsIGtUZXh0dXJlV3JhcFIsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDdWJlTWFwUldyYXBNb2RlSW5p
dGlhbGl6ZWQodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgdGV4dHVyZS0+c2V0Q3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkKGZhbHNlKTsKKyAgICB9
CisjZW5kaWYKKwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAg
LTQ5Nyw3ICs1MTYsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcGlsZVNoYWRl
cihXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYwogICAgIFVOVVNFRF9QQVJB
TShlYyk7CiAgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCiAgICAgICAgIHJl
dHVybjsKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKyAgICBtX2NvbnRl
eHQtPmNvbXBpbGVTaGFkZXIoc2hhZGVyID8gc2hhZGVyLT5vYmplY3QoKSA6IDApOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTY4Nyw3ICs3MDYsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgV2ViR0xTaGFkZXIqIHNoYQogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKCF2
YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRl
cikpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFt
LCBzaGFkZXIpOworICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dyYW0gPyBwcm9ncmFt
LT5vYmplY3QoKSA6IDAsIHNoYWRlciA/IHNoYWRlci0+b2JqZWN0KCkgOiAwKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMDU2LDcgKzEwNzUsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgfQotICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRh
Y2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgYnVmZmVyID8gYnVmZmVyLT5vYmplY3QoKSA6IDApOwogICAgIG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5zZXRBdHRhY2htZW50KGF0dGFjaG1lbnQsIGJ1ZmZlcik7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTEwODEsNyArMTEwMCw3IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgdW5zaWduZWQKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0
ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKKyAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4
dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlID8gdGV4dHVyZS0+
b2JqZWN0KCkgOiAwLCBsZXZlbCk7CiAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFj
aG1lbnQoYXR0YWNobWVudCwgdGV4dHVyZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KQEAgLTExMTksNyArMTEzOCw3IEBAIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJ
bmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0q
CiAgICAgQWN0aXZlSW5mbyBpbmZvOwogICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9n
cmFtKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZUF0
dHJpYihwcm9ncmFtLCBpbmRleCwgaW5mbykpIHsKKyAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0
aXZlQXR0cmliKHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDAsIGluZGV4LCBpbmZvKSkg
ewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6
Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOwpAQCAtMTEzMSw3ICsxMTUw
LDcgQEAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0KICAgICBBY3RpdmVJbmZvIGluZm87CiAgICAg
aWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgaW5mbykp
IHsKKyAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtID8gcHJvZ3Jh
bS0+b2JqZWN0KCkgOiAwLCBpbmRleCwgaW5mbykpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CkBAIC0xMTQ4LDExICsxMTY3LDExIEBA
IGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBWZWN0b3I8V2ViCiAgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHBy
b2dyYW0pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaW50IG51bVNoYWRlcnMgPSAwOwot
ICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpB
VFRBQ0hFRF9TSEFERVJTLCAmbnVtU2hhZGVycyk7CisgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFt
aXYocHJvZ3JhbSA/IHByb2dyYW0tPm9iamVjdCgpIDogMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFU
VEFDSEVEX1NIQURFUlMsICZudW1TaGFkZXJzKTsKICAgICBpZiAobnVtU2hhZGVycykgewogICAg
ICAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBpbnQ+IHNoYWRlcnMobmV3IHVuc2lnbmVkIGludFtu
dW1TaGFkZXJzXSk7CiAgICAgICAgIGludCBjb3VudDsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRB
dHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbnVtU2hhZGVycywgJmNvdW50LCBzaGFkZXJzLmdldCgp
KTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSA/IHByb2dy
YW0tPm9iamVjdCgpIDogMCwgbnVtU2hhZGVycywgJmNvdW50LCBzaGFkZXJzLmdldCgpKTsKICAg
ICAgICAgaWYgKGNvdW50ICE9IG51bVNoYWRlcnMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIHNoYWRlck9iamVjdHMucmVzaXplKG51bVNoYWRlcnMpOwpAQCAtMTE3MCw3ICsx
MTg5LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hhZGVycyhX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIFZlY3RvcjxXZWIKIAogaW50IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJp
bmcmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJv
Z3JhbSwgbmFtZSk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJv
Z3JhbSA/IHByb2dyYW0tPm9iamVjdCgpIDogMCwgbmFtZSk7CiB9CiAKIFdlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0xNDQ4LDEy
ICsxNDY3LDEyIEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dy
YW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1CiAgICAgc3dpdGNoIChwbmFtZSkg
ewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFTEVURV9TVEFUVVM6CiAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VkFMSURBVEVfU1RBVFVTOgotICAgICAgICBtX2NvbnRleHQtPmdl
dFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgbV9jb250ZXh0LT5n
ZXRQcm9ncmFtaXYocHJvZ3JhbSA/IHByb2dyYW0tPm9iamVjdCgpIDogMCwgcG5hbWUsICZ2YWx1
ZSk7CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUp
KTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUzoKICAgICAgICAgaWYg
KHByb2dyYW0tPmlzTGlua0ZhaWx1cmVGbGFnU2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKGZhbHNlKTsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3Jh
bSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dy
YW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDAsIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7CiAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6SU5GT19MT0dfTEVOR1RIOgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkFUVEFDSEVEX1NIQURFUlM6CkBAIC0xNDYxLDcgKzE0ODAsNyBAQCBXZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgdQogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9BVFRSSUJVVEVf
TUFYX0xFTkdUSDoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVM6
CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSDoK
LSAgICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUsICZ2YWx1ZSk7
CisgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0gPyBwcm9ncmFtLT5vYmpl
Y3QoKSA6IDAsIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0
YXRpY19jYXN0PGxvbmc+KHZhbHVlKSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKQEAg
LTE0NzUsNyArMTQ5NCw3IEBAIFN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dy
YW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uCiAgICAgaWYgKCF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gIiI7CiAgICAgV2ViR0xT
dGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRQcm9n
cmFtSW5mb0xvZyhwcm9ncmFtKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRQcm9ncmFtSW5m
b0xvZyhwcm9ncmFtID8gcHJvZ3JhbS0+b2JqZWN0KCkgOiAwKTsKIH0KIAogV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKQEAg
LTE1MjEsMTQgKzE1NDAsMTQgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIHVuc2kKICAgICBzd2l0Y2gg
KHBuYW1lKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKLSAgICAgICAgbV9jb250
ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBtX2NvbnRl
eHQtPmdldFNoYWRlcml2KHNoYWRlciA/IHNoYWRlci0+b2JqZWN0KCkgOiAwLCBwbmFtZSwgJnZh
bHVlKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1
ZSkpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFOgotICAgICAgICBt
X2NvbnRleHQtPmdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIG1f
Y29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyID8gc2hhZGVyLT5vYmplY3QoKSA6IDAsIHBuYW1l
LCAmdmFsdWUpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KHZhbHVlKSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5GT19MT0df
TEVOR1RIOgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9TT1VSQ0VfTEVOR1RI
OgotICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUsICZ2YWx1ZSk7
CisgICAgICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyID8gc2hhZGVyLT5vYmplY3Qo
KSA6IDAsIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRp
Y19jYXN0PGxvbmc+KHZhbHVlKSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKQEAgLTE1
NDIsNyArMTU2MSw3IEBAIFN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlcklu
Zm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kCiAgICAgaWYgKCF2YWxpZGF0
ZVdlYkdMT2JqZWN0KHNoYWRlcikpCiAgICAgICAgIHJldHVybiAiIjsKICAgICBXZWJHTFN0YXRl
UmVzdG9yZXIodGhpcywgZmFsc2UpOwotICAgIHJldHVybiBtX2NvbnRleHQtPmdldFNoYWRlcklu
Zm9Mb2coc2hhZGVyKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKHNo
YWRlciA/IHNoYWRlci0+b2JqZWN0KCkgOiAwKTsKIH0KIAogU3RyaW5nIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtMTU1MSw3ICsxNTcwLDcgQEAgU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUKICAg
ICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKICAgICAgICAgcmV0dXJuICIiOwog
ICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7Ci0gICAgcmV0dXJuIG1fY29udGV4
dC0+Z2V0U2hhZGVyU291cmNlKHNoYWRlcik7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U2hh
ZGVyU291cmNlKHNoYWRlciA/IHNoYWRlci0+b2JqZWN0KCkgOiAwKTsKIH0KIAogU3RyaW5nIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcgbmFtZSkKQEAgLTE2
MDEsMTAgKzE2MjAsMTAgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkcKICAgICBXZWJHTFN0YXRl
UmVzdG9yZXIodGhpcywgZmFsc2UpOwogICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgbW9yZSBlZmZp
Y2llbnQgdXNpbmcgV2ViR0xVbmlmb3JtTG9jYXRpb24gYW5kIGNhY2hpbmcgdHlwZXMgaW4gaXQK
ICAgICBpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2
KHByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlm
b3Jtcyk7CisgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3JhbSA/IHByb2dyYW0tPm9i
amVjdCgpIDogMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVu
aWZvcm1zKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFjdGl2ZVVuaWZvcm1zOyBpKyspIHsK
ICAgICAgICAgQWN0aXZlSW5mbyBpbmZvOwotICAgICAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0
aXZlVW5pZm9ybShwcm9ncmFtLCBpLCBpbmZvKSkKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdl
dEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSA/IHByb2dyYW0tPm9iamVjdCgpIDogMCwgaSwgaW5mbykp
CiAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgICAgIC8vIFN0cmlwICJb
MF0iIGZyb20gdGhlIG5hbWUgaWYgaXQncyBhbiBhcnJheS4KICAgICAgICAgaWYgKGluZm8uc2l6
ZSA+IDEpCkBAIC0xNjE4LDcgKzE2MzcsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViRwogICAg
ICAgICAgICAgICAgIG5hbWUuYXBwZW5kKCddJyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAvLyBOb3cgbmVlZCB0byBsb29rIHRoaXMgdXAgYnkgbmFtZSBhZ2FpbiB0byBmaW5kIGl0cyBs
b2NhdGlvbgotICAgICAgICAgICAgbG9uZyBsb2MgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtLCBuYW1lKTsKKyAgICAgICAgICAgIGxvbmcgbG9jID0gbV9jb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSA/IHByb2dyYW0tPm9iamVjdCgpIDogMCwgbmFtZSk7
CiAgICAgICAgICAgICBpZiAobG9jID09IGxvY2F0aW9uKSB7CiAgICAgICAgICAgICAgICAgLy8g
Rm91bmQgaXQuIFVzZSB0aGUgdHlwZSBpbiB0aGUgQWN0aXZlSW5mbyB0byBkZXRlcm1pbmUgdGhl
IHJldHVybiB0eXBlLgogICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpXZWJHTEVu
dW1UeXBlIGJhc2VUeXBlOwpAQCAtMTY5MywyMSArMTcxMiwyMSBAQCBXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29u
c3QgV2ViRwogICAgICAgICAgICAgICAgIHN3aXRjaCAoYmFzZVR5cGUpIHsKICAgICAgICAgICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogewogICAgICAgICAgICAgICAgICAg
ICBmbG9hdCB2YWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC0+
Z2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWZ2KHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6
IDAsIGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0g
MSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0p
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6
Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOiB7CiAgICAgICAgICAgICAgICAgICAgIGlu
dCB2YWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5p
Zm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0VW5pZm9ybWl2KHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDAsIGxv
Y2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8bG9u
Zz4odmFsdWVbMF0pKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhJ
bnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOiB7CiAgICAgICAgICAg
ICAgICAgICAgIGludCB2YWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgICAgICAgICAgICAgIG1fY29u
dGV4dC0+Z2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2KHByb2dyYW0gPyBwcm9ncmFtLT5vYmpl
Y3QoKSA6IDAsIGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5n
dGggPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJvb2xWYWx1
ZVsxNl0gPSB7MH07CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgbGVuZ3RoOyBqKyspCkBAIC0xNzMzLDcgKzE3NTIsNyBAQCBQYXNzUmVmUHRyPFdlYkdM
VW5pZm9ybUxvY2F0aW9uPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlv
bihXZWJHTAogICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKLSAgICBsb25n
IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0s
IG5hbWUpOworICAgIGxvbmcgdW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3Jt
TG9jYXRpb24ocHJvZ3JhbSA/IHByb2dyYW0tPm9iamVjdCgpIDogMCwgbmFtZSk7CiAgICAgaWYg
KHVuaWZvcm1Mb2NhdGlvbiA9PSAtMSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIFdl
YkdMVW5pZm9ybUxvY2F0aW9uOjpjcmVhdGUocHJvZ3JhbSwgdW5pZm9ybUxvY2F0aW9uKTsKQEAg
LTE4MTEsNyArMTgzMCw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0J1ZmZlcihX
ZWJHTEJ1ZmZlciogYnVmZmVyKQogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc0J1ZmZlcihidWZmZXIpOworICAgIHJldHVy
biBtX2NvbnRleHQtPmlzQnVmZmVyKGJ1ZmZlci0+b2JqZWN0KCkpOwogfQogCiBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6aXNFbmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKQpAQCAtMTgyOCw3
ICsxODQ3LDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZmZXIoV2Vi
R0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCiAgICAgaWYgKCFmcmFtZWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1ZmZlcihm
cmFtZWJ1ZmZlcik7CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1ZmZlcihmcmFtZWJ1
ZmZlci0+b2JqZWN0KCkpOwogfQogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNQcm9n
cmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKQEAgLTE4MzYsNyArMTg1NSw3IEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogICAg
IGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fY29u
dGV4dC0+aXNQcm9ncmFtKHByb2dyYW0pOworICAgIHJldHVybiBtX2NvbnRleHQtPmlzUHJvZ3Jh
bShwcm9ncmFtLT5vYmplY3QoKSk7CiB9CiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpp
c1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQpAQCAtMTg0NCw3
ICsxODYzLDcgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVyKFdl
YkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiAgICAgaWYgKCFyZW5kZXJidWZmZXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtX2NvbnRleHQtPmlzUmVuZGVyYnVm
ZmVyKHJlbmRlcmJ1ZmZlcik7CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNSZW5kZXJidWZmZXIo
cmVuZGVyYnVmZmVyLT5vYmplY3QoKSk7CiB9CiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppc1NoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQpAQCAtMTg1Miw3ICsxODcxLDcgQEAgYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCiAg
ICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtX2Nv
bnRleHQtPmlzU2hhZGVyKHNoYWRlcik7CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNTaGFkZXIo
c2hhZGVyLT5vYmplY3QoKSk7CiB9CiAKIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Rl
eHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQpAQCAtMTg2MCw3ICsxODc5LDcgQEAgYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCiAg
ICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9j
b250ZXh0LT5pc1RleHR1cmUodGV4dHVyZSk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNUZXh0
dXJlKHRleHR1cmUtPm9iamVjdCgpKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmxpbmVXaWR0aChkb3VibGUgd2lkdGgpCkBAIC0xODk2LDcgKzE5MTUsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNl
cHRpb25Db2RlJiBlYwogICAgICAgICBwcm9ncmFtLT5zZXRMaW5rRmFpbHVyZUZsYWcoZmFsc2Up
OwogICAgIH0KIAotICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbSk7CisgICAgbV9j
b250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFtID8gcHJvZ3JhbS0+b2JqZWN0KCkgOiAwKTsKICAg
ICBwcm9ncmFtLT5jYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0yMDQxLDcgKzIwNjAsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0
IFN0cmluZyYgc3RyaQogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKCF2YWxpZGF0ZVdl
YkdMT2JqZWN0KHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnNoYWRl
clNvdXJjZShzaGFkZXIsIHN0cmluZyk7CisgICAgbV9jb250ZXh0LT5zaGFkZXJTb3VyY2Uoc2hh
ZGVyID8gc2hhZGVyLT5vYmplY3QoKSA6IDAsIHN0cmluZyk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMjkzMCw3ICsyOTQ5LDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRp
b25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBtX2N1cnJlbnRQcm9ncmFt
ID0gcHJvZ3JhbTsKLSAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbSk7CisgICAgbV9j
b250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDApOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTI5MzksNyArMjk1OCw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBp
ZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPnZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICBtX2NvbnRleHQtPnZhbGlk
YXRlUHJvZ3JhbShwcm9ncmFtID8gcHJvZ3JhbS0+b2JqZWN0KCkgOiAwKTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0zMjQyLDkgKzMyNjEsOSBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFuZGxlTlBPVFRleHR1cmVzKGJvb2wgcHJlcGFyZVRv
RHJhdykKICAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV90ZXh0dXJlVW5pdHNbaWldLm1f
dGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKG1fdGV4dHVyZVVuaXRzW2lpXS5tX3RleHR1cmUyREJpbmRpbmcgJiYgbV90ZXh0dXJlVW5p
dHNbaWldLm1fdGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKCkpCi0gICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgdGV4MkQpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleDJELT5vYmplY3QoKSk7CiAgICAgICAg
ICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1f
dGV4dHVyZVVuaXRzW2lpXS5tX3RleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tU
ZXh0dXJlKCkpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgdGV4Q3ViZU1hcCk7CisgICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUCwgdGV4Q3ViZU1hcC0+b2JqZWN0KCkpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChy
ZXNldEFjdGl2ZVVuaXQpCkBAIC0zMjU1LDEyICszMjc0LDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKQogewogICAgIHVuc2ln
bmVkIGNoYXIgYmxhY2tbXSA9IHswLCAwLCAwLCAyNTV9OwogICAgIG1fYmxhY2tUZXh0dXJlMkQg
PSBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgbV9ibGFja1RleHR1cmUyRC5nZXQoKSk7CisgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9ibGFja1Rl
eHR1cmUyRC0+b2JqZWN0KCkpOwogICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwogICAgIG1fY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwogICAgIG1fYmxhY2tU
ZXh0dXJlQ3ViZU1hcCA9IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBtX2JsYWNrVGV4dHVyZUN1
YmVNYXAuZ2V0KCkpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC0+b2JqZWN0KCkpOwog
ICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CiAgICAgbV9jb250ZXh0LT50ZXhJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1gsIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLApAQCAtMzcxNiw3ICszNzM1LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRWZXJ0ZXhBdHRyaWIwKCkKIHsKICAgICBtX3ZlcnRl
eEF0dHJpYlN0YXRlLnJlc2l6ZSgxKTsKICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBjcmVh
dGVCdWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLmdldCgpKTsKKyAgICBtX2NvbnRl
eHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyLT5vYmplY3QoKSk7CiAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlD
X0RSQVcpOwogICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKICAgICBtX3ZlcnRleEF0dHJpYlN0YXRl
WzBdLmJ1ZmZlckJpbmRpbmcgPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7CkBAIC0zNzM1LDcgKzM3
NTQsNyBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIw
KGxvbmcgbnVtVmVydGV4KQogICAgIGlmIChzdGF0ZS5lbmFibGVkIHx8ICFtX2N1cnJlbnRQcm9n
cmFtIHx8ICFtX2N1cnJlbnRQcm9ncmFtLT5vYmplY3QoKQogICAgICAgICB8fCAhbV9jdXJyZW50
UHJvZ3JhbS0+aXNVc2luZ1ZlcnRleEF0dHJpYjAoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVS
LCBtX3ZlcnRleEF0dHJpYjBCdWZmZXIuZ2V0KCkpOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZmZXIt
Pm9iamVjdCgpKTsKICAgICBsb25nIGJ1ZmZlckRhdGFTaXplID0gKG51bVZlcnRleCArIDEpICog
NCAqIHNpemVvZihmbG9hdCk7CiAgICAgaWYgKGJ1ZmZlckRhdGFTaXplID4gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyU2l6ZQogICAgICAgICB8fCBzdGF0ZS52YWx1ZVswXSAhPSBtX3ZlcnRleEF0dHJp
YjBCdWZmZXJWYWx1ZVswXQpAQCAtMzc2NCwxMCArMzc4MywxMCBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKQog
ewogICAgIGNvbnN0IFZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fdmVydGV4QXR0cmliU3Rh
dGVbMF07CiAgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0gbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSLCBzdGF0ZS5idWZmZXJCaW5kaW5nLmdldCgpKTsKKyAgICAgICAgbV9jb250
ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHN0YXRlLmJ1
ZmZlckJpbmRpbmctPm9iamVjdCgpKTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQ
b2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6ZWQsIHN0YXRl
Lm9yaWdpbmFsU3RyaWRlLCBzdGF0ZS5vZmZzZXQpOwogICAgIH0KLSAgICBtX2NvbnRleHQtPmJp
bmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9ib3VuZEFycmF5QnVm
ZmVyLmdldCgpKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgbV9ib3VuZEFycmF5QnVmZmVyLT5vYmplY3QoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmggYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oCmluZGV4IDAxNzU3MGJlZDQyMDIzZGJjNTRkNGI5N2ZmNGUyNjA5YTY4MjRiNWMuLmM5
NzNhYTgyMTU2MmRkM2M2ZmU5Y2QzNjBlMDFhNjM4YzI1MDE3ZGMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMzAzLDcgKzMwMyw3IEBAIGNsYXNz
IFdlYktpdENTU01hdHJpeDsKIAogICAgICAgICB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKLSAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0LmdldCgpOyB9CisgICAgICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBo
aWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgCiAg
ICAgICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggMjgzODhmNGExYzEz
MzJkYWUwZmIzZjJjZWFkNGNhY2M2ZjRhZTVlZC4uMWMwNmVmMThmMGY1YzZlNzNhZWMyMjU0MjAw
ZWZkMTEzOTRhNGIxNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaApAQCAtNzMsMjIgKzczLDE2IEBAIGNvbnN0IFBsYXRmb3JtM0RPYmplY3QgTnVs
bFBsYXRmb3JtM0RPYmplY3QgPSAwOwogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAg
ICBjbGFzcyBXZWJHTEFjdGl2ZUluZm87CiAgICAgY2xhc3MgQXJyYXlCdWZmZXI7CiAgICAgY2xh
c3MgQXJyYXlCdWZmZXJWaWV3OwotICAgIGNsYXNzIFdlYkdMQnVmZmVyOwotICAgIGNsYXNzIFVp
bnQ4QXJyYXk7CisgICAgY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDsKICAgICBjbGFzcyBG
bG9hdDMyQXJyYXk7Ci0gICAgY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlcjsKLSAgICBjbGFzcyBJbnQz
MkFycmF5OwotICAgIGNsYXNzIFdlYkdMUHJvZ3JhbTsKLSAgICBjbGFzcyBXZWJHTFJlbmRlcmJ1
ZmZlcjsKLSAgICBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7Ci0gICAgY2xhc3MgV2ViR0xT
aGFkZXI7Ci0gICAgY2xhc3MgV2ViR0xUZXh0dXJlOworICAgIGNsYXNzIEhvc3RXaW5kb3c7CiAg
ICAgY2xhc3MgSW1hZ2U7CiAgICAgY2xhc3MgSW1hZ2VEYXRhOwotICAgIGNsYXNzIEhvc3RXaW5k
b3c7CisgICAgY2xhc3MgSW50MzJBcnJheTsKKyAgICBjbGFzcyBVaW50OEFycmF5OworICAgIGNs
YXNzIFdlYkdMQWN0aXZlSW5mbzsKIAogICAgIHN0cnVjdCBBY3RpdmVJbmZvIHsKICAgICAgICAg
U3RyaW5nIG5hbWU7CkBAIC01NDMsMTIgKzUzNywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIC8vCiAKICAgICAgICAgdm9pZCBhY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4
dHVyZSk7Ci0gICAgICAgIHZvaWQgYXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
V2ViR0xTaGFkZXIqIHNoYWRlcik7Ci0gICAgICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFdl
YkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0g
ICAgICAgIHZvaWQgYmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xCdWZmZXIq
KTsKLSAgICAgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdl
YkdMRnJhbWVidWZmZXIqKTsKLSAgICAgICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciopOwotICAgICAgICB2b2lkIGJpbmRUZXh0
dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUpOworICAgICAg
ICB2b2lkIGF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RP
YmplY3Qgc2hhZGVyKTsKKyAgICAgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0z
RE9iamVjdCwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAg
ICAgdm9pZCBiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0
KTsKKyAgICAgICAgdm9pZCBiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFBs
YXRmb3JtM0RPYmplY3QpOworICAgICAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQg
bG9uZyB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOworICAgICAgICB2b2lkIGJpbmRUZXh0dXJl
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpOwogICAgICAg
ICB2b2lkIGJsZW5kQ29sb3IoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwg
ZG91YmxlIGFscGhhKTsKICAgICAgICAgdm9pZCBibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcg
bW9kZSk7CiAgICAgICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcg
bW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpOwpAQCAtNTY3LDcgKzU2MSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGVhckRlcHRoKGRvdWJsZSBkZXB0aCk7
CiAgICAgICAgIHZvaWQgY2xlYXJTdGVuY2lsKGxvbmcgcyk7CiAgICAgICAgIHZvaWQgY29sb3JN
YXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwotICAgICAg
ICB2b2lkIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqKTsKKyAgICAgICAgdm9pZCBjb21waWxl
U2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpOwogICAgICAgICAKICAgICAgICAgLy92b2lkIGNvbXBy
ZXNzZWRUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnNpZ25l
ZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25n
IGhlaWdodCwgbG9uZyBib3JkZXIsIHVuc2lnbmVkIGxvbmcgaW1hZ2VTaXplLCBjb25zdCB2b2lk
KiBkYXRhKTsKICAgICAgICAgLy92b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZzZXQsIGxvbmcgeW9mZnNldCwgdW5z
aWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9y
bWF0LCB1bnNpZ25lZCBsb25nIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSk7CkBAIC01Nzgs
NyArNTcyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRlcHRoRnVuYyh1
bnNpZ25lZCBsb25nIGZ1bmMpOwogICAgICAgICB2b2lkIGRlcHRoTWFzayhib29sIGZsYWcpOwog
ICAgICAgICB2b2lkIGRlcHRoUmFuZ2UoZG91YmxlIHpOZWFyLCBkb3VibGUgekZhcik7Ci0gICAg
ICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKik7CisgICAg
ICAgIHZvaWQgZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3Qp
OwogICAgICAgICB2b2lkIGRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApOwogICAgICAgICB2b2lk
IGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KTsKICAgICAgICAg
dm9pZCBkcmF3QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3Vu
dCk7CkBAIC01ODgsMTcgKzU4MiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7CiAgICAgICAg
IHZvaWQgZmluaXNoKCk7CiAgICAgICAgIHZvaWQgZmx1c2goKTsKLSAgICAgICAgdm9pZCBmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBh
dHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJi
dWZmZXIqKTsKLSAgICAgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRhcmdl
dCwgV2ViR0xUZXh0dXJlKiwgbG9uZyBsZXZlbCk7CisgICAgICAgIHZvaWQgZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVu
dCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwor
ICAgICAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBQbGF0Zm9y
bTNET2JqZWN0LCBsb25nIGxldmVsKTsKICAgICAgICAgdm9pZCBmcm9udEZhY2UodW5zaWduZWQg
bG9uZyBtb2RlKTsKICAgICAgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRh
cmdldCk7CiAKLSAgICAgICAgYm9vbCBnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJik7Ci0gICAgICAgIGJvb2wgZ2V0
QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgs
IEFjdGl2ZUluZm8mKTsKKyAgICAgICAgYm9vbCBnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgICAg
IGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIHVuc2lnbmVk
IGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mKTsKIAotICAgICAgICB2b2lkIGdldEF0dGFjaGVkU2hh
ZGVycyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIGludCBtYXhDb3VudCwgaW50KiBjb3VudCwgdW5z
aWduZWQgaW50KiBzaGFkZXJzKTsKKyAgICAgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBpbnQgbWF4Q291bnQsIGludCogY291bnQsIHVuc2lnbmVk
IGludCogc2hhZGVycyk7CiAKLSAgICAgICAgaW50ICBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFBy
b2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgICAgICBpbnQgZ2V0QXR0cmliTG9jYXRp
b24oUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgICAgICB2b2lk
IGdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5hbWUsIHVuc2lnbmVkIGNoYXIqIHZhbHVlKTsK
IApAQCAtNjE0LDI5ICs2MDgsMjkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZv
aWQgZ2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CiAKLSAgICAg
ICAgdm9pZCBnZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25n
IHBuYW1lLCBpbnQqIHZhbHVlKTsKKyAgICAgICAgdm9pZCBnZXRQcm9ncmFtaXYoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKIAotICAg
ICAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKik7CisgICAgICAgIFN0
cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgICAgICB2b2lk
IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKIAotICAgICAgICB2b2lkIGdldFNoYWRlcml2KFdl
YkdMU2hhZGVyKiwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisgICAgICAgIHZv
aWQgZ2V0U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50
KiB2YWx1ZSk7CiAKLSAgICAgICAgU3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIq
KTsKKyAgICAgICAgU3RyaW5nIGdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCk7CiAK
ICAgICAgICAgLy8gVEJECiAgICAgICAgIC8vIHZvaWQgZ2xHZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQgKEdMZW51bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSwgR0xpbnQqIHJhbmdl
LCBHTGludCogcHJlY2lzaW9uKTsKIAotICAgICAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFdl
YkdMU2hhZGVyKik7CisgICAgICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9i
amVjdCk7CiAgICAgICAgIFN0cmluZyBnZXRTdHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKTsKIAog
ICAgICAgICB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpOwogICAgICAgICB2b2lkIGdldFRleFBhcmFt
ZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZh
bHVlKTsKIAotICAgICAgICB2b2lkIGdldFVuaWZvcm1mdihXZWJHTFByb2dyYW0qIHByb2dyYW0s
IGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgZ2V0VW5pZm9ybWl2
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgaW50KiB2YWx1ZSk7CisgICAg
ICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgbG9uZyBsb2Nh
dGlvbiwgZmxvYXQqIHZhbHVlKTsKKyAgICAgICAgdm9pZCBnZXRVbmlmb3JtaXYoUGxhdGZvcm0z
RE9iamVjdCBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZhbHVlKTsKIAotICAgICAgICBs
b25nIGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUp
OworICAgICAgICBsb25nIGdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBjb25z
dCBTdHJpbmcmIG5hbWUpOwogCiAgICAgICAgIHZvaWQgZ2V0VmVydGV4QXR0cmliZnYodW5zaWdu
ZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKTsKICAgICAg
ICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBs
b25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKQEAgLTY0NCwxNSArNjM4LDE1IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgbG9uZyBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9u
ZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CiAKICAgICAgICAgdm9pZCBoaW50KHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIG1vZGUpOwotICAgICAgICBib29sIGlzQnVm
ZmVyKFdlYkdMQnVmZmVyKik7CisgICAgICAgIGJvb2wgaXNCdWZmZXIoUGxhdGZvcm0zRE9iamVj
dCk7CiAgICAgICAgIGJvb2wgaXNFbmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKTsKLSAgICAgICAg
Ym9vbCBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKLSAgICAgICAgYm9vbCBpc1By
b2dyYW0oV2ViR0xQcm9ncmFtKik7Ci0gICAgICAgIGJvb2wgaXNSZW5kZXJidWZmZXIoV2ViR0xS
ZW5kZXJidWZmZXIqKTsKLSAgICAgICAgYm9vbCBpc1NoYWRlcihXZWJHTFNoYWRlciopOwotICAg
ICAgICBib29sIGlzVGV4dHVyZShXZWJHTFRleHR1cmUqKTsKKyAgICAgICAgYm9vbCBpc0ZyYW1l
YnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOworICAgICAgICBib29sIGlzUHJvZ3JhbShQbGF0Zm9y
bTNET2JqZWN0KTsKKyAgICAgICAgYm9vbCBpc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
KTsKKyAgICAgICAgYm9vbCBpc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICAgICAgYm9v
bCBpc1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCk7CiAgICAgICAgIHZvaWQgbGluZVdpZHRoKGRv
dWJsZSk7Ci0gICAgICAgIHZvaWQgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7CisgICAgICAg
IHZvaWQgbGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7CiAgICAgICAgIHZvaWQgcGl4ZWxT
dG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSk7CiAgICAgICAgIHZvaWQgcG9s
eWdvbk9mZnNldChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5pdHMpOwogICAgICAgICAKQEAgLTY2
Miw3ICs2NTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgcmVuZGVyYnVm
ZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZv
cm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogICAgICAg
ICB2b2lkIHNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpOwogICAgICAg
ICB2b2lkIHNjaXNzb3IobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2ln
bmVkIGxvbmcgaGVpZ2h0KTsKLSAgICAgICAgdm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIq
LCBjb25zdCBTdHJpbmcmIHN0cmluZyk7CisgICAgICAgIHZvaWQgc2hhZGVyU291cmNlKFBsYXRm
b3JtM0RPYmplY3QsIGNvbnN0IFN0cmluZyYgc3RyaW5nKTsKICAgICAgICAgdm9pZCBzdGVuY2ls
RnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOwog
ICAgICAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNp
Z25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOwogICAgICAgICB2
b2lkIHN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFzayk7CkBAIC02OTcsOCArNjkxLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYobG9uZyBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpOwogICAgICAg
ICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZs
b2F0KiB2YWx1ZSwgaW50IHNpemUpOwogCi0gICAgICAgIHZvaWQgdXNlUHJvZ3JhbShXZWJHTFBy
b2dyYW0qKTsKLSAgICAgICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7Cisg
ICAgICAgIHZvaWQgdXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICAgICAgdm9pZCB2
YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7CiAKICAgICAgICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIxZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgpOwogICAgICAgICB2b2lkIHZlcnRl
eEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMpOwpAQCAtNzIwLDEw
ICs3MTQsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGNhbnZhc1dpZHRoLCBpbnQgY2FudmFzSGVpZ2h0LCBDR0NvbnRleHRSZWYgY29udGV4
dCk7CiAjZW5kaWYKIAotICAgICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7CisgICAgICAgIHZvaWQgcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7CiAK
ICAgICAgICAgLy8gSGVscGVycyBmb3Igbm90aWZpY2F0aW9uIGFib3V0IHBhaW50IGV2ZW50cwot
ICAgICAgICB2b2lkIGJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsK
KyAgICAgICAgdm9pZCBiZWdpblBhaW50KENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
OwogICAgICAgICB2b2lkIGVuZFBhaW50KCk7CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIHZv
aWQgcGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0JiByZWN0KSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNE
TWFjLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RN
YWMubW0KaW5kZXggMzBjM2I4ZTFkMGIyNjA1ODg3NGEzY2E5OGU5NDcwODEyOGI1YTM3Mi4uYTE1
NTVmYjk3NmUyZmZmODUxNWVkMjEzNDk0Njc1MjAzMzg5NDc3OSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KQEAgLTMw
LDI1ICszMCwxOSBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpbXBvcnQg
IkJsb2NrRXhjZXB0aW9ucy5oIgotI2luY2x1ZGUgIkNhbnZhc09iamVjdC5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJX
ZWJHTEFjdGl2ZUluZm8uaCIKKwogI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAi
QXJyYXlCdWZmZXJWaWV3LmgiCi0jaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKKyNpbmNsdWRlICJD
YW52YXNPYmplY3QuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5j
bHVkZSAiRmxvYXQzMkFycmF5LmgiCi0jaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnQzMkFycmF5LmgiCi0jaW5j
bHVkZSAiV2ViR0xMYXllci5oIgotI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUg
IldlYkdMUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKLSNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKKyNpbmNs
dWRlICJXZWJHTExheWVyLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQml0bWFwQ29udGV4
dC5oPgogI2luY2x1ZGUgPE9wZW5HTC9DR0xSZW5kZXJlcnMuaD4KICNpbmNsdWRlIDxPcGVuR0wv
Z2wuaD4KQEAgLTI0MCw3ICsyMzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29u
dGV4dEN1cnJlbnQoKQogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQpCiB7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZh
cygpOwogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CkBA
IC0yODgsNyArMjgyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb24KICAgICAgICAgICAgICAg
ICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
ZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJlZ2luUGFpbnQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsK
ICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CiB9CkBAIC00NjEsMzQgKzQ1NSwzNCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkK
ICAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNo
YWRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChwcm9n
cmFtKTsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9i
aik7Ci0gICAgOjpnbEF0dGFjaFNoYWRlcigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgKEdM
dWludCkgc2hhZGVyLT5vYmplY3QoKSk7CisgICAgOjpnbEF0dGFjaFNoYWRlcigoR0x1aW50KSBw
cm9ncmFtLCAoR0x1aW50KSBzaGFkZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGlu
ZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0
cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4
LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIGVuc3Vy
ZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICA6OmdsQmluZEF0dHJpYkxvY2F0aW9uKChHTHVp
bnQpIHByb2dyYW0tPm9iamVjdCgpLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICA6
OmdsQmluZEF0dHJpYkxvY2F0aW9uKChHTHVpbnQpIHByb2dyYW0sIGluZGV4LCBuYW1lLnV0Zjgo
KS5kYXRhKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBi
dWZmZXIpCiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIDo6Z2xCaW5k
QnVmZmVyKHRhcmdldCwgYnVmZmVyID8gKEdMdWludCkgYnVmZmVyLT5vYmplY3QoKSA6IDApOwor
ICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwgKEdMdWludCkgYnVmZmVyKTsKIH0KIAogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQs
IFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRG
cmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIp
CiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIEdMdWludCBmYm87Ci0g
ICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPm9iamVjdCgpKQotICAgICAgICBmYm8gPSAoR0x1aW50
KWJ1ZmZlci0+b2JqZWN0KCk7CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgZmJvID0gKEdMdWlu
dClidWZmZXI7CiAgICAgZWxzZQogICAgICAgICBmYm8gPSAobV9hdHRycy5hbnRpYWxpYXMgPyBt
X211bHRpc2FtcGxlRkJPIDogbV9mYm8pOwogICAgIGlmIChmYm8gIT0gbV9ib3VuZEZCTykgewpA
QCAtNDk3LDE3ICs0OTEsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVm
ZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKgogICAgIH0KIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRh
cmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QgcmVuZGVyYnVmZmVyKQogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsK
LSAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIHJlbmRlcmJ1ZmZlciA/IChHTHVp
bnQpIHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKKyAgICA6OmdsQmluZFJlbmRlcmJ1ZmZl
ckVYVCh0YXJnZXQsIChHTHVpbnQpIHJlbmRlcmJ1ZmZlcik7CiB9CiAKIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCiB7CiAgICAgZW5zdXJlQ29u
dGV4dChtX2NvbnRleHRPYmopOwotICAgIDo6Z2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUg
PyAoR0x1aW50KSB0ZXh0dXJlLT5vYmplY3QoKSA6IDApOworICAgIDo6Z2xCaW5kVGV4dHVyZSh0
YXJnZXQsIChHTHVpbnQpIHRleHR1cmUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
bGVuZENvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRvdWJsZSBh
bHBoYSkKQEAgLTYxOSwxMSArNjEzLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9y
TWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQogICAgIDo6
Z2xDb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogewog
ICAgIEFTU0VSVChzaGFkZXIpOwogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAg
ICA6OmdsQ29tcGlsZVNoYWRlcigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpKTsKKyAgICA6Omds
Q29tcGlsZVNoYWRlcigoR0x1aW50KSBzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5z
aWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcikKQEAgLTY3OCwxMiArNjcy
LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoZG91YmxlIHpOZWFyLCBk
b3VibGUgekZhcikKICAgICA6OmdsRGVwdGhSYW5nZSh6TmVhciwgekZhcik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdl
YkdMU2hhZGVyKiBzaGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsKICAg
ICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAgICAgZW5zdXJlQ29udGV4
dChtX2NvbnRleHRPYmopOwotICAgIDo6Z2xEZXRhY2hTaGFkZXIoKEdMdWludCkgcHJvZ3JhbS0+
b2JqZWN0KCksIChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkpOworICAgIDo6Z2xEZXRhY2hTaGFk
ZXIoKEdMdWludCkgcHJvZ3JhbSwgKEdMdWludCkgc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKQEAgLTczNCwxMCArNzI4LDEw
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKICAgICA6OmdsRmx1c2goKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBy
ZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiBidWZmZXIpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdl
dCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2Nv
bnRleHRPYmopOwotICAgIEdMdWludCByZW5kZXJidWZmZXIgPSAoYnVmZmVyID8gKEdMdWludCkg
YnVmZmVyLT5vYmplY3QoKSA6IDApOworICAgIEdMdWludCByZW5kZXJidWZmZXIgPSAoR0x1aW50
KSBidWZmZXI7CiAgICAgaWYgKGF0dGFjaG1lbnQgPT0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
KSB7CiAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIERFUFRI
X0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgcmVuZGVyYnVmZmVyKTsKICAgICAgICAg
OjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKHRhcmdldCwgU1RFTkNJTF9BVFRBQ0hNRU5U
LCByZW5kZXJidWZmZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7CkBAIC03NDUsMTAgKzczOSwxMCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbAogICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJi
dWZmZXJFWFQodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIHJlbmRlcmJ1
ZmZlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJE
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVk
IGxvbmcgdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIGxvbmcgbGV2ZWwpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwg
UGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBsb25nIGxldmVsKQogewogICAgIGVuc3VyZUNvbnRl
eHQobV9jb250ZXh0T2JqKTsKLSAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQodGFyZ2V0
LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUgPyAoR0x1aW50KSB0ZXh0dXJlLT5vYmpl
Y3QoKSA6IDAsIGxldmVsKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQodGFyZ2V0
LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIChHTHVpbnQpIHRleHR1cmUsIGxldmVsKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKQEAg
LTc2MywyMCArNzU3LDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFw
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQogICAgIDo6Z2xHZW5lcmF0ZU1pcG1hcEVYVCh0YXJnZXQp
OwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQorYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKLSAgICBpZiAo
IXByb2dyYW0tPm9iamVjdCgpKSB7CisgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICBHTGludCBtYXhBdHRyaWJ1
dGVTaXplID0gMDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KHN0YXRpY19jYXN0PEdMdWludD4ocHJv
Z3JhbS0+b2JqZWN0KCkpLCBHTF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhBdHRy
aWJ1dGVTaXplKTsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHN0YXRpY19jYXN0PEdMdWludD4ocHJv
Z3JhbSksIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgJm1heEF0dHJpYnV0ZVNpemUp
OwogICAgIEdMY2hhciBuYW1lW21heEF0dHJpYnV0ZVNpemVdOyAvLyBHTF9BQ1RJVkVfQVRUUklC
VVRFX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0ZXJtaW5hdGlvbgogICAgIEdMc2l6ZWkgbmFt
ZUxlbmd0aCA9IDA7CiAgICAgR0xpbnQgc2l6ZSA9IDA7CiAgICAgR0xlbnVtIHR5cGUgPSAwOwot
ICAgIDo6Z2xHZXRBY3RpdmVBdHRyaWIoc3RhdGljX2Nhc3Q8R0x1aW50Pihwcm9ncmFtLT5vYmpl
Y3QoKSksIGluZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBl
LCBuYW1lKTsKKyAgICA6OmdsR2V0QWN0aXZlQXR0cmliKHN0YXRpY19jYXN0PEdMdWludD4ocHJv
Z3JhbSksIGluZGV4LCBtYXhBdHRyaWJ1dGVTaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBl
LCBuYW1lKTsKICAgICBpZiAoIW5hbWVMZW5ndGgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7CkBAIC03ODUsMjAgKzc3OSwy
MCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZAogICAgIHJldHVybiB0cnVlOwogfQogICAgIAot
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
dW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKLSAgICBpZiAoIXByb2dy
YW0tPm9iamVjdCgpKSB7CisgICAgaWYgKCFwcm9ncmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKElOVkFMSURfVkFMVUUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9
IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9i
amVjdCgpKSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsK
KyAgICA6OmdsR2V0UHJvZ3JhbWl2KHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbSksIEdMX0FD
VElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7CiAgICAgR0xjaGFyIG5h
bWVbbWF4VW5pZm9ybVNpemVdOyAvLyBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIIGluY2x1
ZGVzIG51bGwgdGVybWluYXRpb24KICAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOwogICAgIEdM
aW50IHNpemUgPSAwOwogICAgIEdMZW51bSB0eXBlID0gMDsKLSAgICA6OmdsR2V0QWN0aXZlVW5p
Zm9ybShzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgaW5kZXgsIG1heFVu
aWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKKyAgICA6OmdsR2V0
QWN0aXZlVW5pZm9ybShzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0pLCBpbmRleCwgbWF4VW5p
Zm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOwogICAgIGlmICghbmFt
ZUxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGluZm8ubmFtZSA9IFN0cmluZyhu
YW1lLCBuYW1lTGVuZ3RoKTsKQEAgLTgwNywyMyArODAxLDIzIEBAIGJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBs
b25nIGluCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEF0dGFjaGVkU2hhZGVycyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIGludCBtYXhDb3VudCwgaW50
KiBjb3VudCwgdW5zaWduZWQgaW50KiBzaGFkZXJzKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgaW50IG1heENvdW50
LCBpbnQqIGNvdW50LCB1bnNpZ25lZCBpbnQqIHNoYWRlcnMpCiB7Ci0gICAgaWYgKCFwcm9ncmFt
IHx8ICFwcm9ncmFtLT5vYmplY3QoKSkgeworICAgIGlmICghcHJvZ3JhbSkgewogICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgOjpnbEdldEF0dGFjaGVkU2hh
ZGVycyhzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgbWF4Q291bnQsIGNv
dW50LCBzaGFkZXJzKTsKKyAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHN0YXRpY19jYXN0PEdM
dWludD4ocHJvZ3JhbSksIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7CiB9CiAKLWludCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBj
b25zdCBTdHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0
aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAg
IGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIAogICAgIGVuc3VyZUNvbnRl
eHQobV9jb250ZXh0T2JqKTsKLSAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKChHTHVp
bnQpIHByb2dyYW0tPm9iamVjdCgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiA6
OmdsR2V0QXR0cmliTG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgp
KTsKIH0KIAogR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKQEAgLTg1NiwxMyArODUwLDEzIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgbW9k
ZSkKICAgICA6OmdsSGludCh0YXJnZXQsIG1vZGUpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjppc0J1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4
dE9iaik7Ci0gICAgcmV0dXJuIDo6Z2xJc0J1ZmZlcigoR0x1aW50KSBidWZmZXItPm9iamVjdCgp
KTsKKyAgICByZXR1cm4gOjpnbElzQnVmZmVyKChHTHVpbnQpIGJ1ZmZlcik7CiB9CiAKIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCkKQEAgLTg3MSw0
OSArODY1LDQ5IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzRW5hYmxlZCh1bnNpZ25lZCBs
b25nIGNhcCkKICAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOwogfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVy
KQorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0
IGZyYW1lYnVmZmVyKQogewogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgcmV0dXJu
IDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKChHTHVpbnQpIGZyYW1lYnVmZmVyLT5vYmplY3QoKSk7Cisg
ICAgcmV0dXJuIDo6Z2xJc0ZyYW1lYnVmZmVyRVhUKChHTHVpbnQpIGZyYW1lYnVmZmVyKTsKIH0K
IAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0pCiB7CiAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIHJldHVybiA6OmdsSXNQcm9n
cmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKKyAgICByZXR1cm4gOjpnbElzUHJvZ3Jh
bSgoR0x1aW50KSBwcm9ncmFtKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5k
ZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK2Jvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQog
ewogICAgIGlmICghcmVuZGVyYnVmZmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAg
ICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIHJldHVybiA6OmdsSXNSZW5kZXJi
dWZmZXJFWFQoKEdMdWludCkgcmVuZGVyYnVmZmVyLT5vYmplY3QoKSk7CisgICAgcmV0dXJuIDo6
Z2xJc1JlbmRlcmJ1ZmZlckVYVCgoR0x1aW50KSByZW5kZXJidWZmZXIpOwogfQogCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQorYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6aXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiB7CiAgICAg
aWYgKCFzaGFkZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgcmV0dXJuIDo6Z2xJc1NoYWRlcigoR0x1aW50KSBzaGFk
ZXItPm9iamVjdCgpKTsKKyAgICByZXR1cm4gOjpnbElzU2hhZGVyKChHTHVpbnQpIHNoYWRlcik7
CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShXZWJHTFRleHR1cmUqIHRl
eHR1cmUpCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUoUGxhdGZvcm0zRE9iamVj
dCB0ZXh0dXJlKQogewogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICByZXR1cm4gOjpnbElz
VGV4dHVyZSgoR0x1aW50KSB0ZXh0dXJlLT5vYmplY3QoKSk7CisgICAgcmV0dXJuIDo6Z2xJc1Rl
eHR1cmUoKEdMdWludCkgdGV4dHVyZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omxp
bmVXaWR0aChkb3VibGUgd2lkdGgpCkBAIC05MjIsMTEgKzkxNiwxMSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpsaW5lV2lkdGgoZG91YmxlIHdpZHRoKQogICAgIDo6Z2xMaW5lV2lkdGgoc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omxp
bmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmxpbmtQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJv
Z3JhbSk7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIDo6Z2xMaW5rUHJv
Z3JhbSgoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSk7CisgICAgOjpnbExpbmtQcm9ncmFtKChH
THVpbnQpIHByb2dyYW0pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3Jl
aSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKQpAQCAtOTk5LDcgKzk5Myw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvCiAgICAgOjpnbFNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdo
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRl
ciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJp
bmcpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAgICAgCkBAIC0xMDA4LDcgKzEwMDIsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgY29uc3QgY2hhciogcyA9IGNzLmRhdGEoKTsKICAg
ICAKICAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIDo6Z2xTaGFkZXJTb3Vy
Y2UoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgMSwgJnMsICZsZW5ndGgpOworICAgIDo6Z2xT
aGFkZXJTb3VyY2UoKEdMdWludCkgc2hhZGVyLCAxLCAmcywgJmxlbmd0aCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyBy
ZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKQEAgLTExODIsMTggKzExNzYsMTggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5z
cG9zZSwgZmxvYXQqIGEKICAgICA6OmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwg
dHJhbnNwb3NlLCBhcnJheSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJv
Z3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2Nv
bnRleHRPYmopOwotICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW0gPyAoKEdMdWludCkgcHJvZ3Jh
bS0+b2JqZWN0KCkpIDogMCk7CisgICAgOjpnbFVzZVByb2dyYW0oKEdMdWludCkgcHJvZ3JhbSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dy
YW0qIHByb2dyYW0pCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICAKICAg
ICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgOjpnbFZhbGlkYXRlUHJvZ3JhbSgo
R0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSk7CisgICAgOjpnbFZhbGlkYXRlUHJvZ3JhbSgoR0x1
aW50KSBwcm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmli
MWYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCkKQEAgLTEzMTYsMjYgKzEzMTAsMjYgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwg
aW50KiB2YWx1ZSkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dy
YW1pdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFs
dWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQogewogICAgIGVuc3Vy
ZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KChHTHVpbnQpIHBy
b2dyYW0tPm9iamVjdCgpLCBwbmFtZSwgdmFsdWUpOworICAgIDo6Z2xHZXRQcm9ncmFtaXYoKEdM
dWludCkgcHJvZ3JhbSwgcG5hbWUsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qIHByb2dyYW0pCitTdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgCiAgICAgZW5zdXJlQ29udGV4dChtX2Nv
bnRleHRPYmopOwogICAgIEdMaW50IGxlbmd0aDsKLSAgICA6OmdsR2V0UHJvZ3JhbWl2KChHTHVp
bnQpIHByb2dyYW0tPm9iamVjdCgpLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOworICAg
IDo6Z2xHZXRQcm9ncmFtaXYoKEdMdWludCkgcHJvZ3JhbSwgR0xfSU5GT19MT0dfTEVOR1RILCAm
bGVuZ3RoKTsKICAgICAKICAgICBHTHNpemVpIHNpemU7CiAgICAgR0xjaGFyKiBpbmZvID0gKEdM
Y2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKICAgICBpZiAoIWluZm8pCiAgICAgICAgIHJldHVy
biAiIjsKIAotICAgIDo6Z2xHZXRQcm9ncmFtSW5mb0xvZygoR0x1aW50KSBwcm9ncmFtLT5vYmpl
Y3QoKSwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisgICAgOjpnbEdldFByb2dyYW1JbmZvTG9nKChH
THVpbnQpIHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8pOwogICAgIFN0cmluZyBzKGluZm8p
OwogICAgIGZhc3RGcmVlKGluZm8pOwogICAgIHJldHVybiBzOwpAQCAtMTM0Nyw0NyArMTM0MSw0
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZQogICAgIDo6Z2xHZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdkVYVCh0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFNoYWRlcml2KFdlYkdMU2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5h
bWUsIGludCogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0
Zm9ybTNET2JqZWN0IHNoYWRlciwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKIHsK
ICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9i
aik7Ci0gICAgOjpnbEdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIHBuYW1l
LCB2YWx1ZSk7CisgICAgOjpnbEdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlciwgcG5hbWUsIHZh
bHVlKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMU2hhZGVyKiBzaGFkZXIpCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcklu
Zm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAg
ICAgCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIEdMaW50IGxlbmd0aDsK
LSAgICA6OmdsR2V0U2hhZGVyaXYoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgR0xfSU5GT19M
T0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICA6OmdsR2V0U2hhZGVyaXYoKEdMdWludCkgc2hhZGVy
LCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwogICAgIAogICAgIEdMc2l6ZWkgc2l6ZTsK
ICAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOwogICAgIGlm
ICghaW5mbykKICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAKLSAgICA6OmdsR2V0U2hhZGVy
SW5mb0xvZygoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBsZW5ndGgsICZzaXplLCBpbmZvKTsK
KyAgICA6OmdsR2V0U2hhZGVySW5mb0xvZygoR0x1aW50KSBzaGFkZXIsIGxlbmd0aCwgJnNpemUs
IGluZm8pOwogICAgIFN0cmluZyBzKGluZm8pOwogICAgIGZhc3RGcmVlKGluZm8pOwogICAgIHJl
dHVybiBzOwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShX
ZWJHTFNoYWRlciogc2hhZGVyKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJT
b3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAK
ICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgR0xpbnQgbGVuZ3RoOwotICAg
IDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpLCBHTF9TSEFERVJfU09V
UkNFX0xFTkdUSCwgJmxlbmd0aCk7CisgICAgOjpnbEdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRl
ciwgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEgsICZsZW5ndGgpOwogICAgIAogICAgIEdMc2l6ZWkg
c2l6ZTsKICAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOwog
ICAgIGlmICghaW5mbykKICAgICAgICAgcmV0dXJuICIiOwogICAgICAgICAKLSAgICA6OmdsR2V0
U2hhZGVyU291cmNlKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGlu
Zm8pOworICAgIDo6Z2xHZXRTaGFkZXJTb3VyY2UoKEdMdWludCkgc2hhZGVyLCBsZW5ndGgsICZz
aXplLCBpbmZvKTsKICAgICBTdHJpbmcgcyhpbmZvKTsKICAgICBmYXN0RnJlZShpbmZvKTsKICAg
ICByZXR1cm4gczsKQEAgLTE0MDYsMjQgKzE0MDAsMjQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
cG4KICAgICA6OmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBsb25nIGxvY2F0aW9uLCBmbG9hdCogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBm
bG9hdCogdmFsdWUpCiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIDo6
Z2xHZXRVbmlmb3JtZnYoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIGxvY2F0aW9uLCB2YWx1
ZSk7CisgICAgOjpnbEdldFVuaWZvcm1mdigoR0x1aW50KSBwcm9ncmFtLCBsb2NhdGlvbiwgdmFs
dWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBpbnQqIHZhbHVlKQordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgbG9uZyBsb2Nh
dGlvbiwgaW50KiB2YWx1ZSkKIHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0g
ICAgOjpnbEdldFVuaWZvcm1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgbG9jYXRpb24s
IHZhbHVlKTsKKyAgICA6OmdsR2V0VW5pZm9ybWl2KChHTHVpbnQpIHByb2dyYW0sIGxvY2F0aW9u
LCB2YWx1ZSk7CiB9CiAKLWxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlv
bihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK2xvbmcgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgCiAgICAg
ZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxv
Y2F0aW9uKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0aW9uKChHTHVpbnQpIHByb2dyYW0sIG5hbWUu
dXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0
dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2
YWx1ZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0M0RRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCmluZGV4IDMxMWQzYTMyMmMyMjU5YTM5ZDgxNmFhNThhYjUwZjRjMTlkN2I2
MTYuLjNlNDMzMTQxODQzNzBkYTVlYWYwYjVkYjA0NzA0ZjA5MmM5ZGI4MzkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApA
QCAtMjAsMjQgKzIwLDE3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCisj
aW5jbHVkZSAiQXJyYXlCdWZmZXJWaWV3LmgiCiAjaW5jbHVkZSAiQ2FudmFzT2JqZWN0LmgiCisj
aW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkZsb2F0MzJBcnJh
eS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCisjaW5jbHVkZSAiSW50MzJBcnJheS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CiAjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8u
aCIKLSNpbmNsdWRlICJBcnJheUJ1ZmZlclZpZXcuaCIKLSNpbmNsdWRlICJXZWJHTEJ1ZmZlci5o
IgotI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgotI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIu
aCIKLSNpbmNsdWRlICJJbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgiCi0j
aW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgotI2luY2x1ZGUgIldlYkdMVGV4dHVy
ZS5oIgogI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKICNpbmNsdWRlIDxRQWJzdHJhY3RTY3JvbGxB
cmVhPgogI2luY2x1ZGUgPFFHTENvbnRleHQ+CkBAIC01MTksNyArNTEyLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICBtX2ludGVybmFsLT5tX2ds
V2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdp
blBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJlZ2luUGFpbnQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsKICAg
ICBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogfQpAQCAtNTI4LDcgKzUyMSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KCkKIHsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsKICAgICBt
X2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAgIEhUTUxDYW52YXNFbGVt
ZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKQEAgLTU5OCw0NCArNTkxLDQ0IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJl
KQogICAgIG1faW50ZXJuYWwtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdM
U2hhZGVyKiBzaGFkZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoUGxh
dGZvcm1HTE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBB
U1NFUlQocHJvZ3JhbSk7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAgICAgbV9pbnRlcm5hbC0+bV9n
bFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKLSAgICBtX2ludGVybmFsLT5hdHRhY2hTaGFkZXIoKEdM
dWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCkpOworICAg
IG1faW50ZXJuYWwtPmF0dGFjaFNoYWRlcigoR0x1aW50KSBwcm9ncmFtLCAoR0x1aW50KSBzaGFk
ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5h
bWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUp
CiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1h
a2VDdXJyZW50KCk7Ci0gICAgbV9pbnRlcm5hbC0+YmluZEF0dHJpYkxvY2F0aW9uKChHTHVpbnQp
IHByb2dyYW0tPm9iamVjdCgpLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICBtX2lu
dGVybmFsLT5iaW5kQXR0cmliTG9jYXRpb24oKEdMdWludCkgcHJvZ3JhbSwgaW5kZXgsIG5hbWUu
dXRmOCgpLmRhdGEoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGJ1ZmZlcikKIHsKICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OwotICAgIG1faW50ZXJuYWwtPmJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIgPyAoR0x1aW50KSBi
dWZmZXItPm9iamVjdCgpIDogMCk7CisgICAgbV9pbnRlcm5hbC0+YmluZEJ1ZmZlcih0YXJnZXQs
IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIq
IGJ1ZmZlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25l
ZCBsb25nIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKLSAgICBtX2ludGVybmFsLT5tX2N1cnJlbnRG
Ym8gPSAoYnVmZmVyICYmIGJ1ZmZlci0+b2JqZWN0KCkpID8gKEdMdWludCkgYnVmZmVyLT5vYmpl
Y3QoKSA6IG1faW50ZXJuYWwtPm1fbWFpbkZibzsKKyAgICBtX2ludGVybmFsLT5tX2N1cnJlbnRG
Ym8gPSBidWZmZXIgPyAoR0x1aW50KSBidWZmZXIgOiBtX2ludGVybmFsLT5tX21haW5GYm87CiAg
ICAgbV9pbnRlcm5hbC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgbV9pbnRlcm5hbC0+bV9jdXJy
ZW50RmJvKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgcmVuZGVyYnVmZmVyKQogewogICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Ci0gICAgbV9pbnRlcm5hbC0+YmluZFJlbmRlcmJ1ZmZl
cih0YXJnZXQsIHJlbmRlcmJ1ZmZlciA/IChHTHVpbnQpIHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkg
OiAwKTsKKyAgICBtX2ludGVybmFsLT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgKEdMdWludCkg
cmVuZGVyYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0IHRleHR1cmUpCiB7CiAgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJl
bnQoKTsKLSAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSA/IChHTHVpbnQpIHRleHR1
cmUtPm9iamVjdCgpIDogMCk7CisgICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIChHTHVpbnQpIHRl
eHR1cmUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZENvbG9yKGRvdWJsZSBy
ZWQsIGRvdWJsZSBncmVlbiwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSkKQEAgLTczMiwxMSAr
NzI1LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbG9yTWFzayhib29sIHJlZCwgYm9v
bCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQogICAgIGdsQ29sb3JNYXNrKHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNo
YWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGls
ZVNoYWRlcihQbGF0Zm9ybUdMT2JqZWN0IHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsK
ICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwotICAgIG1faW50ZXJu
YWwtPmNvbXBpbGVTaGFkZXIoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7CisgICAgbV9pbnRl
cm5hbC0+Y29tcGlsZVNoYWRlcigoR0x1aW50KSBzaGFkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZl
bCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcikKQEAgLTc3OSwx
MiArNzcyLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoZG91YmxlIHpO
ZWFyLCBkb3VibGUgekZhcikKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpk
ZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyKQor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtR0xPYmplY3QgcHJv
Z3JhbSwgUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwog
ICAgIEFTU0VSVChzaGFkZXIpOwogICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJy
ZW50KCk7Ci0gICAgbV9pbnRlcm5hbC0+ZGV0YWNoU2hhZGVyKChHTHVpbnQpIHByb2dyYW0tPm9i
amVjdCgpLCAoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpKTsKKyAgICBtX2ludGVybmFsLT5kZXRh
Y2hTaGFkZXIoKEdMdWludCkgcHJvZ3JhbSwgKEdMdWludCkgc2hhZGVyKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKQEAgLTgzNSwxNiAr
ODI4LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKICAgICBnbEZsdXNoKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxv
bmcgcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyKQordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZm
ZXJ0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgYnVmZmVyKQogewogICAgIG1faW50ZXJuYWwtPm1f
Z2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Ci0gICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlciA/
IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkgOiAwKTsKKyAgICBtX2ludGVybmFsLT5mcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
KEdMdWludCkgYnVmZmVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZm
ZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVu
dCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgbG9uZyBs
ZXZlbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcg
dGV4dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUsIGxvbmcgbGV2ZWwpCiB7CiAgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKLSAgICBtX2ludGVybmFsLT5m
cmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVy
ZSA/IChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgpIDogMCwgbGV2ZWwpOworICAgIG1faW50ZXJu
YWwtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCAo
R0x1aW50KSB0ZXh0dXJlLCBsZXZlbCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZy
b250RmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCkBAIC04NTksOSArODUyLDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCiAgICAg
bV9pbnRlcm5hbC0+Z2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKIH0KIAotYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQg
bG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEFjdGl2ZUF0dHJpYihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIEFjdGl2ZUluZm8mIGluZm8pCiB7Ci0gICAgaWYgKCFwcm9ncmFtLT5vYmplY3QoKSkgewor
ICAgIGlmICghcHJvZ3JhbSkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZB
TFVFKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTg2OSwxNCArODYyLDE0IEBA
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kCiAgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFr
ZUN1cnJlbnQoKTsKIAogICAgIEdMaW50IG1heExlbmd0aDsKLSAgICBtX2ludGVybmFsLT5nZXRQ
cm9ncmFtaXYoc3RhdGljX2Nhc3Q8R0x1aW50Pihwcm9ncmFtLT5vYmplY3QoKSksIEdyYXBoaWNz
Q29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhMZW5ndGgpOworICAg
IG1faW50ZXJuYWwtPmdldFByb2dyYW1pdihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0pLCBH
cmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4TGVuZ3Ro
KTsKIAogICAgIEdMY2hhciogbmFtZSA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKG1heExlbmd0aCk7
CiAgICAgR0xzaXplaSBuYW1lTGVuZ3RoOwogICAgIEdMaW50IHNpemU7CiAgICAgR0xlbnVtIHR5
cGU7CiAKLSAgICBtX2ludGVybmFsLT5nZXRBY3RpdmVBdHRyaWIoc3RhdGljX2Nhc3Q8R0x1aW50
Pihwcm9ncmFtLT5vYmplY3QoKSksIGluZGV4LCBtYXhMZW5ndGgsICZuYW1lTGVuZ3RoLCAmc2l6
ZSwgJnR5cGUsIG5hbWUpOworICAgIG1faW50ZXJuYWwtPmdldEFjdGl2ZUF0dHJpYihzdGF0aWNf
Y2FzdDxHTHVpbnQ+KHByb2dyYW0pLCBpbmRleCwgbWF4TGVuZ3RoLCAmbmFtZUxlbmd0aCwgJnNp
emUsICZ0eXBlLCBuYW1lKTsKIAogICAgIGlmICghbmFtZUxlbmd0aCkgewogICAgICAgICBmYXN0
RnJlZShuYW1lKTsKQEAgLTg5MSw5ICs4ODQsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZAog
ICAgIHJldHVybiB0cnVlOwogfQogICAgIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0
aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFj
dGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3Jt
KFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5m
byYgaW5mbykKIHsKLSAgICBpZiAoIXByb2dyYW0tPm9iamVjdCgpKSB7CisgICAgaWYgKCFwcm9n
cmFtKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFMSURfVkFMVUUpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtOTAxLDE0ICs4OTQsMTQgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2ln
bmVkIGxvbmcgaW4KICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwog
CiAgICAgR0xpbnQgbWF4TGVuZ3RoOwotICAgIG1faW50ZXJuYWwtPmdldFByb2dyYW1pdihzdGF0
aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVjdCgpKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFD
VElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhMZW5ndGgpOworICAgIG1faW50ZXJuYWwtPmdl
dFByb2dyYW1pdihzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQz
RDo6QUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwgJm1heExlbmd0aCk7CiAKICAgICBHTGNoYXIq
IG5hbWUgPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhtYXhMZW5ndGgpOwogICAgIEdMc2l6ZWkgbmFt
ZUxlbmd0aDsKICAgICBHTGludCBzaXplOwogICAgIEdMZW51bSB0eXBlOwogCi0gICAgbV9pbnRl
cm5hbC0+Z2V0QWN0aXZlVW5pZm9ybShzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW0tPm9iamVj
dCgpKSwgaW5kZXgsIG1heExlbmd0aCwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7
CisgICAgbV9pbnRlcm5hbC0+Z2V0QWN0aXZlVW5pZm9ybShzdGF0aWNfY2FzdDxHTHVpbnQ+KHBy
b2dyYW0pLCBpbmRleCwgbWF4TGVuZ3RoLCAmbmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1l
KTsKIAogICAgIGlmICghbmFtZUxlbmd0aCkgewogICAgICAgICBmYXN0RnJlZShuYW1lKTsKQEAg
LTkyMywxMyArOTE2LDEzIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZv
cm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitpbnQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0xOwogICAg
IAogICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Ci0gICAgcmV0dXJu
IG1faW50ZXJuYWwtPmdldEF0dHJpYkxvY2F0aW9uKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgp
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRBdHRyaWJM
b2NhdGlvbigoR0x1aW50KSBwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogfQogCiBHcmFw
aGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0
dHJpYnV0ZXMoKQpAQCAtOTYyLDEzICs5NTUsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
aGludCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKQogICAgIGdsSGlu
dCh0YXJnZXQsIG1vZGUpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0J1ZmZlcihX
ZWJHTEJ1ZmZlciogYnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIoUGxh
dGZvcm1HTE9iamVjdCBidWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgp
OwotICAgIHJldHVybiBtX2ludGVybmFsLT5pc0J1ZmZlcigoR0x1aW50KSBidWZmZXItPm9iamVj
dCgpKTsKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNCdWZmZXIoKEdMdWludCkgYnVmZmVyKTsK
IH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKHVuc2lnbmVkIGxvbmcgY2Fw
KQpAQCAtOTc3LDQ5ICs5NzAsNDkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVk
KHVuc2lnbmVkIGxvbmcgY2FwKQogICAgIHJldHVybiBnbElzRW5hYmxlZChjYXApOwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZy
YW1lYnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZlcihQbGF0Zm9y
bUdMT2JqZWN0IGZyYW1lYnVmZmVyKQogewogICAgIGlmICghZnJhbWVidWZmZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3Vy
cmVudCgpOwotICAgIHJldHVybiBtX2ludGVybmFsLT5pc0ZyYW1lYnVmZmVyKChHTHVpbnQpIGZy
YW1lYnVmZmVyLT5vYmplY3QoKSk7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzRnJhbWVidWZm
ZXIoKEdMdWludCkgZnJhbWVidWZmZXIpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpp
c1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
aXNQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBpZiAoIXByb2dyYW0p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0
LT5tYWtlQ3VycmVudCgpOwotICAgIHJldHVybiBtX2ludGVybmFsLT5pc1Byb2dyYW0oKEdMdWlu
dCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworICAgIHJldHVybiBtX2ludGVybmFsLT5pc1Byb2dyYW0o
KEdMdWludCkgcHJvZ3JhbSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVy
YnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybUdMT2JqZWN0IHJlbmRlcmJ1ZmZlcikKIHsK
ICAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAg
IG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7Ci0gICAgcmV0dXJuIG1faW50
ZXJuYWwtPmlzUmVuZGVyYnVmZmVyKChHTHVpbnQpIHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOwor
ICAgIHJldHVybiBtX2ludGVybmFsLT5pc1JlbmRlcmJ1ZmZlcigoR0x1aW50KSByZW5kZXJidWZm
ZXIpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihXZWJHTFNoYWRlciog
c2hhZGVyKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNTaGFkZXIoUGxhdGZvcm1HTE9iamVj
dCBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwotICAgIHJldHVy
biBtX2ludGVybmFsLT5pc1NoYWRlcigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgpKTsKKyAgICBy
ZXR1cm4gbV9pbnRlcm5hbC0+aXNTaGFkZXIoKEdMdWludCkgc2hhZGVyKTsKIH0KIAotYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybUdMT2JqZWN0IHRleHR1cmUpCiB7
CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKLSAgICByZXR1cm4gZ2xJc1RleHR1
cmUoKEdMdWludCkgdGV4dHVyZS0+b2JqZWN0KCkpOworICAgIHJldHVybiBnbElzVGV4dHVyZSgo
R0x1aW50KSB0ZXh0dXJlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGluZVdpZHRo
KGRvdWJsZSB3aWR0aCkKQEAgLTEwMjgsMTEgKzEwMjEsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6bGluZVdpZHRoKGRvdWJsZSB3aWR0aCkKICAgICBnbExpbmVXaWR0aChzdGF0aWNfY2Fz
dDxmbG9hdD4od2lkdGgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1By
b2dyYW0oUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsK
ICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwotICAgIG1faW50ZXJu
YWwtPmxpbmtQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKKyAgICBtX2ludGVy
bmFsLT5saW5rUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwYXJhbU5hbWUsIGxvbmcgcGFyYW0p
CkBAIC0xMDgxLDcgKzEwNzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKGxv
bmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsbwogICAgIGdsU2Np
c3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlKQor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3JtR0xPYmplY3Qgc2hh
ZGVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKIApAQCAt
MTA5OCw3ICsxMDkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFdl
YkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc291cmNlKQogICAgIENTdHJpbmcgc291
cmNlQ1MgPSBwcmVmaXhlZFNvdXJjZS51dGY4KCk7CiAgICAgY29uc3QgY2hhciogZGF0YSA9IHNv
dXJjZUNTLmRhdGEoKTsKICAgICBpbnQgbGVuZ3RoID0gcHJlZml4ZWRTb3VyY2UubGVuZ3RoKCk7
Ci0gICAgbV9pbnRlcm5hbC0+c2hhZGVyU291cmNlKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCks
IC8qIGNvdW50ICovIDEsICZkYXRhLCAmbGVuZ3RoKTsKKyAgICBtX2ludGVybmFsLT5zaGFkZXJT
b3VyY2UoKEdMdWludCkgc2hhZGVyLCAvKiBjb3VudCAqLyAxLCAmZGF0YSwgJmxlbmd0aCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKHVuc2lnbmVkIGxvbmcgZnVu
YywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKQEAgLTEyNjMsMjAgKzEyNTYsMjAgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBi
b29sIHRyYW5zcG9zZSwgZmxvYXQqIGEKICAgICBtX2ludGVybmFsLT51bmlmb3JtTWF0cml4NGZ2
KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjp1c2VQcm9ncmFtKFBsYXRmb3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBB
U1NFUlQocHJvZ3JhbSk7CiAgICAgCiAgICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1
cnJlbnQoKTsKLSAgICBtX2ludGVybmFsLT51c2VQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9i
amVjdCgpKTsKKyAgICBtX2ludGVybmFsLT51c2VQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0pOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRm
b3JtR0xPYmplY3QgcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgCiAgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKLSAgICBtX2ludGVybmFsLT52
YWxpZGF0ZVByb2dyYW0oKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCkpOworICAgIG1faW50ZXJu
YWwtPnZhbGlkYXRlUHJvZ3JhbSgoR0x1aW50KSBwcm9ncmFtKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCkK
QEAgLTEzNjksMTggKzEzNjIsMTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdl
cnYodW5zaWduZWQgbG9uZyBwYXJhbU5hbWUsIGludCogdmFsdWUpCiAgICAgZ2xHZXRJbnRlZ2Vy
dihwYXJhbU5hbWUsIHZhbHVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJv
Z3JhbWl2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwYXJhbU5hbWUsIGlu
dCogdmFsdWUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm1H
TE9iamVjdCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBhcmFtTmFtZSwgaW50KiB2YWx1ZSkKIHsK
ICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwotICAgIG1faW50ZXJu
YWwtPmdldFByb2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgcGFyYW1OYW1lLCB2
YWx1ZSk7CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KChHTHVpbnQpIHByb2dyYW0sIHBh
cmFtTmFtZSwgdmFsdWUpOwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dy
YW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm1HTE9iamVjdCBwcm9ncmFtKQogewogICAgIG1f
aW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAKICAgICBHTGludCBsZW5ndGg7
Ci0gICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgp
LCBHcmFwaGljc0NvbnRleHQzRDo6SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBtX2lu
dGVybmFsLT5nZXRQcm9ncmFtaXYoKEdMdWludCkgcHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6
OklORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CiAKICAgICBHTHNpemVpIHNpemU7CiAKQEAgLTEz
ODgsNyArMTM4MSw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9M
b2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogICAgIGlmICghaW5mbykKICAgICAgICAgcmV0dXJu
ICIiOwogCi0gICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbUluZm9Mb2coKEdMdWludCkgcHJvZ3Jh
bS0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGluZm8pOworICAgIG1faW50ZXJuYWwtPmdldFBy
b2dyYW1JbmZvTG9nKChHTHVpbnQpIHByb2dyYW0sIGxlbmd0aCwgJnNpemUsIGluZm8pOwogCiAg
ICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKICAgICBmYXN0RnJlZShpbmZvKTsKQEAgLTE0MDIsMjYg
KzEzOTUsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmUKICAgICBtX2ludGVybmFsLT5nZXRS
ZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihXZWJHTFNoYWRlciogc2hhZGVyLCB1
bnNpZ25lZCBsb25nIHBhcmFtTmFtZSwgaW50KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBh
cmFtTmFtZSwgaW50KiB2YWx1ZSkKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBtX2ludGVy
bmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwotICAgIG1faW50ZXJuYWwtPmdldFNoYWRl
cml2KChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIHBhcmFtTmFtZSwgdmFsdWUpOworICAgIG1f
aW50ZXJuYWwtPmdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlciwgcGFyYW1OYW1lLCB2YWx1ZSk7
CiB9CiAKLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhXZWJHTFNo
YWRlciogc2hhZGVyKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9n
KFBsYXRmb3JtR0xPYmplY3Qgc2hhZGVyKQogewogICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CiAKICAgICBHTGludCBsZW5ndGg7Ci0gICAgbV9pbnRlcm5hbC0+Z2V0
U2hhZGVyaXYoKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OklO
Rk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CisgICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVyaXYoKEdM
dWludCkgc2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6SU5GT19MT0dfTEVOR1RILCAmbGVuZ3Ro
KTsKIAogICAgIEdMc2l6ZWkgc2l6ZTsKICAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFz
dE1hbGxvYyhsZW5ndGgpOwogICAgIGlmICghaW5mbykKICAgICAgICAgcmV0dXJuICIiOwogCi0g
ICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVySW5mb0xvZygoR0x1aW50KSBzaGFkZXItPm9iamVjdCgp
LCBsZW5ndGgsICZzaXplLCBpbmZvKTsKKyAgICBtX2ludGVybmFsLT5nZXRTaGFkZXJJbmZvTG9n
KChHTHVpbnQpIHNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CiAKICAgICBTdHJpbmcgcmVz
dWx0KGluZm8pOwogICAgIGZhc3RGcmVlKGluZm8pOwpAQCAtMTQyOSwxOSArMTQyMiwxOSBAQCBT
dHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNo
YWRlcikKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyKQorU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm1HTE9iamVjdCBzaGFkZXIpCiB7CiAgICAg
bV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKIAogICAgIEdMaW50IGxlbmd0
aDsKLSAgICBtX2ludGVybmFsLT5nZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXItPm9iamVjdCgp
LCBHcmFwaGljc0NvbnRleHQzRDo6U0hBREVSX1NPVVJDRV9MRU5HVEgsICZsZW5ndGgpOworICAg
IG1faW50ZXJuYWwtPmdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlciwgR3JhcGhpY3NDb250ZXh0
M0Q6OlNIQURFUl9TT1VSQ0VfTEVOR1RILCAmbGVuZ3RoKTsKIAogICAgIEdMc2l6ZWkgc2l6ZTsK
ICAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOwogICAgIGlm
ICghaW5mbykKICAgICAgICAgcmV0dXJuICIiOwogCi0gICAgbV9pbnRlcm5hbC0+Z2V0U2hhZGVy
U291cmNlKChHTHVpbnQpIHNoYWRlci0+b2JqZWN0KCksIGxlbmd0aCwgJnNpemUsIGluZm8pOwor
ICAgIG1faW50ZXJuYWwtPmdldFNoYWRlclNvdXJjZSgoR0x1aW50KSBzaGFkZXIsIGxlbmd0aCwg
JnNpemUsIGluZm8pOwogCiAgICAgU3RyaW5nIHJlc3VsdChpbmZvKTsKICAgICBmYXN0RnJlZShp
bmZvKTsKQEAgLTE0NjEsMjQgKzE0NTQsMjQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcGEKICAg
ICBnbEdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcGFyYW1OYW1lLCB2YWx1ZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihXZWJHTFByb2dyYW0qIHByb2dyYW0s
IGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFVuaWZvcm1mdihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGZsb2F0
KiB2YWx1ZSkKIHsKICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwot
ICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1mdigoR0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwg
bG9jYXRpb24sIHZhbHVlKTsKKyAgICBtX2ludGVybmFsLT5nZXRVbmlmb3JtZnYoKEdMdWludCkg
cHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VW5pZm9ybWl2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgaW50KiB2
YWx1ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1pdihQbGF0Zm9ybUdMT2Jq
ZWN0IHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIGludCogdmFsdWUpCiB7CiAgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKLSAgICBtX2ludGVybmFsLT5nZXRVbmlmb3Jt
aXYoKEdMdWludCkgcHJvZ3JhbS0+b2JqZWN0KCksIGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgbV9p
bnRlcm5hbC0+Z2V0VW5pZm9ybWl2KChHTHVpbnQpIHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7
CiB9CiAKLWxvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK2xvbmcgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybUdMT2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgCiAgICAgbV9pbnRlcm5h
bC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0
VW5pZm9ybUxvY2F0aW9uKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpOworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRVbmlmb3JtTG9jYXRpb24oKEdMdWlu
dCkgcHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9u
ZyBwYXJhbU5hbWUsIGZsb2F0KiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDlhMzNhZGU5ZGY4N2Vm
ODRiYmViYjEwYTU5NmQ0ODgzZWVkZTY1OWEuLjhhMGE3ODMwMmFiODEwMDY0NGNiZmM0Yzk3Njc3
MmNlYmU5YTk5OWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEwLTA4LTAyICBK
YW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSBXZWJHTC1zcGVjaWZpYyBjb2RlIG91
dCBvZiBHcmFwaGljc0NvbnRleHQzRCBzbyB0aGF0IEczRCBjYW4gYmUgdXNlZCBhcyBhIGdlbmVy
aWMgYWNjZWxlcmF0ZWQgZHJhd2luZyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQzMjIxCisKKyAgICAgICAgSW1wbGVtZW50cyBmdW5jdGlvbnMg
aW4gdGVybSBvZiBQbGF0Zm9ybTNET2JqZWN0cyBpbnN0ZWFkIG9mIFdlYkdMIHR5cGVzLgorCisg
ICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZEF0dHJp
YkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmdldEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRlckluZm9Mb2cpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U2hhZGVyU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFVuaWZv
cm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpzaGFkZXJTb3VyY2UpOgorCiAyMDEwLTA3LTI3ICBMdWl6IEFnb3N0aW5pICA8bHVpei5hZ29z
dGluaUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAKaW5kZXggZmVjMGIyMDI5
Y2E5OTQzMDZhZjA5MGJkM2I1NzBkYjgwZmZhM2ZhZC4uYWQ1YzU5NmNlN2QwZDVkZjc1N2YxNzFj
MmJkZjQ3MzM1NzRhZWU1ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGlj
c0NvbnRleHQzRC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQz
RC5jcHAKQEAgLTM1LDIyICszNSwxNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CiAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBs
LmgiCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEu
aCIKLSNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgogI2luY2x1ZGUgIkludDhBcnJheS5oIgogI2lu
Y2x1ZGUgIkZsb2F0MzJBcnJheS5oIgotI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKICNp
bmNsdWRlICJJbnQzMkFycmF5LmgiCi0jaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgiCi0jaW5jbHVk
ZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQu
aCIKLSNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgotI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgog
I2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQzRC5oIgpAQCAtOTQsOCArODgsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAvLyBVbmNvbW1lbnQgdGhpcyB0byByZW5kZXIgdG8gYSBzZXBhcmF0
ZSB3aW5kb3cgZm9yIGRlYnVnZ2luZwogLy8gI2RlZmluZSBSRU5ERVJfVE9fREVCVUdHSU5HX1dJ
TkRPVwogCi0jZGVmaW5lIEVYVFJBQ1QodmFsKSAoIXZhbCA/IDAgOiB2YWwtPm9iamVjdCgpKQot
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsIHsKIHB1YmxpYzoKICAgICBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsKCk7CkBAIC0xMTIsOCArMTA0LDggQEAgcHVibGljOgogCiAgICAg
dm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKLSAgICB2b2lkIHBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7Ci0g
ICAgdm9pZCBiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7CisgICAg
dm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0KTsKKyAgICB2b2lkIGJlZ2luUGFpbnQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCk7CiAgICAgdm9pZCBlbmRQYWludCgpOwogCiAgICAgdm9pZCBwcmVwYXJlVGV4dHVy
ZSgpOwpAQCAtMTI3LDEyICsxMTksMTIgQEAgcHVibGljOgogICAgIC8vIEVudHJ5IHBvaW50cyBm
b3IgV2ViR0wuCiAgICAgLy8KICAgICB2b2lkIGFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0
ZXh0dXJlKTsKLSAgICB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdl
YkdMU2hhZGVyKiBzaGFkZXIpOwotICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJv
Z3JhbSosIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgdm9p
ZCBiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEJ1ZmZlciopOwotICAgIHZv
aWQgYmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVy
Kik7Ci0gICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJH
TFJlbmRlcmJ1ZmZlciopOwotICAgIHZvaWQgYmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSk7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcik7CisgICAgdm9pZCBi
aW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgdW5zaWduZWQgbG9uZyBpbmRleCwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0
YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIGJpbmRSZW5kZXJi
dWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQg
YmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVy
ZSk7CiAgICAgdm9pZCBibGVuZENvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVlbiwgZG91Ymxl
IGJsdWUsIGRvdWJsZSBhbHBoYSk7CiAgICAgdm9pZCBibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxv
bmcgbW9kZSk7CiAgICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBt
b2RlUkdCLCB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSk7CkBAIC0xNTEsNyArMTQzLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xlYXJEZXB0aChkb3VibGUgZGVwdGgpOwogICAgIHZvaWQgY2xlYXJT
dGVuY2lsKGxvbmcgcyk7CiAgICAgdm9pZCBjb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4s
IGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7Ci0gICAgdm9pZCBjb21waWxlU2hhZGVyKFdlYkdMU2hh
ZGVyKik7CisgICAgdm9pZCBjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QpOwogCiAgICAg
dm9pZCBjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5z
aWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcik7CiAgICAgdm9pZCBjb3B5
VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zm
c2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCk7CkBAIC0xNTksNyArMTUxLDcgQEAgcHVibGljOgogICAgIHZv
aWQgZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYyk7CiAgICAgdm9pZCBkZXB0aE1hc2soYm9v
bCBmbGFnKTsKICAgICB2b2lkIGRlcHRoUmFuZ2UoZG91YmxlIHpOZWFyLCBkb3VibGUgekZhcik7
Ci0gICAgdm9pZCBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqKTsKKyAg
ICB2b2lkIGRldGFjaFNoYWRlcihQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KTsK
ICAgICB2b2lkIGRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApOwogICAgIHZvaWQgZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogICAgIHZvaWQgZHJhd0FycmF5
cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQpOwpAQCAtMTY5LDE3
ICsxNjEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5z
aWduZWQgbG9uZyBpbmRleCk7CiAgICAgdm9pZCBmaW5pc2goKTsKICAgICB2b2lkIGZsdXNoKCk7
Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgV2ViR0xSZW5kZXJidWZmZXIqKTsKLSAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxv
bmcgdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBsb25nIGxldmVsKTsKKyAgICB2b2lkIGZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0
dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2Jq
ZWN0KTsKKyAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBQbGF0
Zm9ybTNET2JqZWN0LCBsb25nIGxldmVsKTsKICAgICB2b2lkIGZyb250RmFjZSh1bnNpZ25lZCBs
b25nIG1vZGUpOwogICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQp
OwogCi0gICAgYm9vbCBnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNp
Z25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJik7Ci0gICAgYm9vbCBnZXRBY3RpdmVVbmlmb3Jt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYp
OworICAgIGJvb2wgZ2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgdW5z
aWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9y
bShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUlu
Zm8mKTsKIAotICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgaW50IG1heENvdW50LCBpbnQqIGNvdW50LCB1bnNpZ25lZCBpbnQqIHNoYWRlcnMpOworICAg
IHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgaW50IG1h
eENvdW50LCBpbnQqIGNvdW50LCB1bnNpZ25lZCBpbnQqIHNoYWRlcnMpOwogCi0gICAgaW50ICBn
ZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAg
IGludCBnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmIG5h
bWUpOwogCiAgICAgdm9pZCBnZXRCb29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1lLCB1bnNpZ25l
ZCBjaGFyKiB2YWx1ZSk7CiAKQEAgLTE5NSwyNiArMTg3LDI2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZ2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CiAKLSAgICB2
b2lkIGdldFByb2dyYW1pdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgcG5h
bWUsIGludCogdmFsdWUpOworICAgIHZvaWQgZ2V0UHJvZ3JhbWl2KFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7CiAKLSAgICBTdHJpbmcg
Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKik7CisgICAgU3RyaW5nIGdldFByb2dyYW1J
bmZvTG9nKFBsYXRmb3JtM0RPYmplY3QpOwogCiAgICAgdm9pZCBnZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2
YWx1ZSk7CiAKLSAgICB2b2lkIGdldFNoYWRlcml2KFdlYkdMU2hhZGVyKiwgdW5zaWduZWQgbG9u
ZyBwbmFtZSwgaW50KiB2YWx1ZSk7CisgICAgdm9pZCBnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2Jq
ZWN0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKIAotICAgIFN0cmluZyBnZXRT
aGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKik7CisgICAgU3RyaW5nIGdldFNoYWRlckluZm9Mb2co
UGxhdGZvcm0zRE9iamVjdCk7CiAKLSAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hh
ZGVyKik7CisgICAgU3RyaW5nIGdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0KTsKICAg
ICBTdHJpbmcgZ2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcgbmFtZSk7CiAKICAgICB2b2lkIGdldFRl
eFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBm
bG9hdCogdmFsdWUpOwogICAgIHZvaWQgZ2V0VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOwogCi0gICAgdm9pZCBnZXRV
bmlmb3JtZnYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBmbG9hdCogdmFs
dWUpOwotICAgIHZvaWQgZ2V0VW5pZm9ybWl2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBs
b2NhdGlvbiwgaW50KiB2YWx1ZSk7CisgICAgdm9pZCBnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBmbG9hdCogdmFsdWUpOworICAgIHZvaWQgZ2V0
VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgaW50KiB2
YWx1ZSk7CiAKLSAgICBsb25nIGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25z
dCBTdHJpbmcmIG5hbWUpOworICAgIGxvbmcgZ2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RP
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICB2b2lkIGdldFZlcnRleEF0dHJpYmZ2
KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGZsb2F0KiB2YWx1ZSk7
CiAgICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25l
ZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKQEAgLTIyMiwxNSArMjE0LDE1IEBAIHB1YmxpYzoK
ICAgICBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNp
Z25lZCBsb25nIHBuYW1lKTsKIAogICAgIHZvaWQgaGludCh1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBtb2RlKTsKLSAgICBib29sIGlzQnVmZmVyKFdlYkdMQnVmZmVyKik7Cisg
ICAgYm9vbCBpc0J1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKICAgICBib29sIGlzRW5hYmxlZCh1
bnNpZ25lZCBsb25nIGNhcCk7Ci0gICAgYm9vbCBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZm
ZXIqKTsKLSAgICBib29sIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKLSAgICBib29sIGlzUmVu
ZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKik7Ci0gICAgYm9vbCBpc1NoYWRlcihXZWJHTFNo
YWRlciopOwotICAgIGJvb2wgaXNUZXh0dXJlKFdlYkdMVGV4dHVyZSopOworICAgIGJvb2wgaXNG
cmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICBib29sIGlzUHJvZ3JhbShQbGF0Zm9y
bTNET2JqZWN0KTsKKyAgICBib29sIGlzUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwor
ICAgIGJvb2wgaXNTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgYm9vbCBpc1RleHR1cmUo
UGxhdGZvcm0zRE9iamVjdCk7CiAgICAgdm9pZCBsaW5lV2lkdGgoZG91YmxlKTsKLSAgICB2b2lk
IGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOworICAgIHZvaWQgbGlua1Byb2dyYW0oUGxhdGZv
cm0zRE9iamVjdCk7CiAgICAgdm9pZCBwaXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBs
b25nIHBhcmFtKTsKICAgICB2b2lkIHBvbHlnb25PZmZzZXQoZG91YmxlIGZhY3RvciwgZG91Ymxl
IHVuaXRzKTsKIApAQCAtMjQwLDcgKzIzMiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbmRlcmJ1
ZmZlclN0b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxm
b3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKICAgICB2
b2lkIHNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpOwogICAgIHZvaWQg
c2Npc3Nvcihsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9u
ZyBoZWlnaHQpOwotICAgIHZvaWQgc2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgY29uc3QgU3Ry
aW5nJiBzdHJpbmcpOworICAgIHZvaWQgc2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3QsIGNv
bnN0IFN0cmluZyYgc3RyaW5nKTsKICAgICB2b2lkIHN0ZW5jaWxGdW5jKHVuc2lnbmVkIGxvbmcg
ZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzayk7CiAgICAgdm9pZCBzdGVuY2lsRnVu
Y1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJl
ZiwgdW5zaWduZWQgbG9uZyBtYXNrKTsKICAgICB2b2lkIHN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxv
bmcgbWFzayk7CkBAIC0yNzcsOCArMjY5LDggQEAgcHVibGljOgogICAgIHZvaWQgdW5pZm9ybU1h
dHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQg
c2l6ZSk7CiAgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJh
bnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKIAotICAgIHZvaWQgdXNlUHJvZ3JhbShX
ZWJHTFByb2dyYW0qKTsKLSAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsK
KyAgICB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdm9pZCB2YWxpZGF0
ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7CiAKICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVu
c2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCk7CiAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYodW5z
aWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzKTsKQEAgLTQwMCw3ICszOTIsNyBAQCBXZWJH
TExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtTGF5ZXIo
KSBjb25zdAogfQogI2VuZGlmCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KQordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIEhUTUxDYW52
YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwpAQCAtNDU5LDcgKzQ1MSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMo
V2ViR0xSZW5kZXJpbmdDb250CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludChDYW52YXNSZW5kZXJpbmdDb250
ZXh0KiBjb250ZXh0KQogewogICAgIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGNvbnRl
eHQpOwogfQpAQCAtNTA4LDQyICs1MDAsMTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpuYW1lKHQxIGExKSBcCiAgICAgbV9pbXBsLT5uYW1lKGExKTsgXAogfQogCi0jZGVmaW5l
IERFTEVHQVRFX1RPX0lNUExfMV9YKG5hbWUsIHQxKSBcCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6Om5hbWUodDEgYTEpIFwKLXsgXAotICAgIG1faW1wbC0+bmFtZShFWFRSQUNUKGEx
KSk7ICAgICAgICAgICAgICAgICAgXAotfQotCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfMVIo
bmFtZSwgdDEsIHJ0KSAgICBcCiBydCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQx
IGExKSBcCiB7IFwKICAgICByZXR1cm4gbV9pbXBsLT5uYW1lKGExKTsgXAogfQogCi0jZGVmaW5l
IERFTEVHQVRFX1RPX0lNUExfMVJfWChuYW1lLCB0MSwgcnQpICAgIFwKLXJ0IEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEpIFwKLXsgXAotICAgIHJldHVybiBtX2ltcGwtPm5h
bWUoRVhUUkFDVChhMSkpOyAgICAgICAgICAgXAotfQotCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lN
UExfMihuYW1lLCB0MSwgdDIpIFwKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFt
ZSh0MSBhMSwgdDIgYTIpIFwKIHsgXAogICAgIG1faW1wbC0+bmFtZShhMSwgYTIpOyBcCiB9CiAK
LSNkZWZpbmUgREVMRUdBVEVfVE9fSU1QTF8yX1gxMihuYW1lLCB0MSwgdDIpIFwKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKLXsgXAotICAgIG1f
aW1wbC0+bmFtZShFWFRSQUNUKGExKSwgRVhUUkFDVChhMikpOyAgICAgXAotfQotCi0jZGVmaW5l
IERFTEVHQVRFX1RPX0lNUExfMl9YMihuYW1lLCB0MSwgdDIpIFwKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIpIFwKLXsgXAotICAgIG1faW1wbC0+bmFt
ZShhMSwgRVhUUkFDVChhMikpOyAgICAgXAotfQotCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExf
MlIobmFtZSwgdDEsIHQyLCBydCkgIFwKIHJ0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5h
bWUodDEgYTEsIHQyIGEyKSBcCiB7IFwKQEAgLTU1NiwxMiArNTI0LDYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMpICAgIFwKICAgICBt
X2ltcGwtPm5hbWUoYTEsIGEyLCBhMyk7ICAgICAgICAgICAgICAgICAgXAogfQogCi0jZGVmaW5l
IERFTEVHQVRFX1RPX0lNUExfM19YMShuYW1lLCB0MSwgdDIsIHQzKSAgIFwKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzKSAgICBcCi17IFwK
LSAgICBtX2ltcGwtPm5hbWUoRVhUUkFDVChhMSksIGEyLCBhMyk7ICAgICAgICAgIFwKLX0KLQog
I2RlZmluZSBERUxFR0FURV9UT19JTVBMXzNSKG5hbWUsIHQxLCB0MiwgdDMsIHJ0KSAgIFwKIHJ0
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMykgICAg
XAogeyBcCkBAIC01NzQsMzAgKzUzNiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQpICBcCiAgICAgbV9pbXBsLT5uYW1l
KGExLCBhMiwgYTMsIGE0KTsgICAgICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBERUxFR0FURV9U
T19JTVBMXzRfWDEobmFtZSwgdDEsIHQyLCB0MywgdDQpICAgIFwKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCkgIFwKLXsgXAot
ICAgIG1faW1wbC0+bmFtZShFWFRSQUNUKGExKSwgYTIsIGEzLCBhNCk7ICAgICBcCi19Ci0KLSNk
ZWZpbmUgREVMRUdBVEVfVE9fSU1QTF80X1g0KG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAgICBcCi12
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Om5hbWUodDEgYTEsIHQyIGEyLCB0MyBhMywg
dDQgYTQpICBcCi17IFwKLSAgICBtX2ltcGwtPm5hbWUoYTEsIGEyLCBhMywgRVhUUkFDVChhNCkp
OyAgICAgIFwKLX0KLQogI2RlZmluZSBERUxFR0FURV9UT19JTVBMXzUobmFtZSwgdDEsIHQyLCB0
MywgdDQsIHQ1KSAgICAgIFwKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6bmFtZSh0
MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUpICAgICAgICBcCiB7IFwKICAgICBtX2lt
cGwtPm5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsgICBcCiB9CiAKLSNkZWZpbmUgREVMRUdBVEVf
VE9fSU1QTF81X1g0KG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSkgICAgICAgICAgICAgICAgXAot
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMs
IHQ0IGE0LCB0NSBhNSkgICAgICAgIFwKLXsgXAotICAgIG1faW1wbC0+bmFtZShhMSwgYTIsIGEz
LCBFWFRSQUNUKGE0KSwgYTUpOyAgXAotfQotCiAjZGVmaW5lIERFTEVHQVRFX1RPX0lNUExfNVIo
bmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCBydCkgICAgICBcCiBydCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgICAgICAg
IFwKIHsgXApAQCAtNjQ5LDQzICs1OTMsMTcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKIH0KIAogREVMRUdBVEVfVE9fSU1QTF8xKGFj
dGl2ZVRleHR1cmUsIHVuc2lnbmVkIGxvbmcpCi1ERUxFR0FURV9UT19JTVBMXzJfWDEyKGF0dGFj
aFNoYWRlciwgV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqKQorREVMRUdBVEVfVE9fSU1QTF8y
KGF0dGFjaFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVjdCkKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9y
bTNET2JqZWN0IHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKIHsKLSAgICBtX2ltcGwtPmJpbmRBdHRyaWJMb2NhdGlvbihFWFRSQUNUKHByb2dyYW0pLCBp
bmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLX0KLQotREVMRUdBVEVfVE9fSU1QTF8yX1gyKGJp
bmRCdWZmZXIsIHVuc2lnbmVkIGxvbmcsIFdlYkdMQnVmZmVyKikKLURFTEVHQVRFX1RPX0lNUExf
Ml9YMihiaW5kRnJhbWVidWZmZXIsIHVuc2lnbmVkIGxvbmcsIFdlYkdMRnJhbWVidWZmZXIqKQot
REVMRUdBVEVfVE9fSU1QTF8yX1gyKGJpbmRSZW5kZXJidWZmZXIsIHVuc2lnbmVkIGxvbmcsIFdl
YkdMUmVuZGVyYnVmZmVyKikKLQotc3RhdGljIGNvbnN0IGludCBrVGV4dHVyZVdyYXBSID0gMHg4
MDcyOwotCi0vLyBJZiB3ZSBkaWRuJ3QgaGF2ZSB0byBoYWNrIEdMX1RFWFRVUkVfV1JBUF9SIGZv
ciBjdWJlIG1hcHMsCi0vLyB3ZSBjb3VsZCBqdXN0IHVzZToKLS8vIERFTEVHQVRFX1RPX0lNUExf
Ml9YMihiaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJlKikKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSkKLXsKLSAgICB1bnNpZ25lZCBpbnQgdGV4dHVyZU9iamVjdCA9IEVYVFJBQ1Qo
dGV4dHVyZSk7Ci0KLSAgICBtX2ltcGwtPmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZU9iamVj
dCk7Ci0KLSAgICAvLyBGSVhNRTogR0xfVEVYVFVSRV9XUkFQX1IgaXNuJ3QgZXhwb3NlZCBpbiB0
aGUgT3BlbkdMIEVTIDIuMAotICAgIC8vIEFQSS4gT24gZGVza3RvcCBPcGVuR0wgaW1wbGVtZW50
YXRpb25zIGl0IHNlZW1zIG5lY2Vzc2FyeSB0bwotICAgIC8vIHNldCB0aGlzIHdyYXAgbW9kZSB0
byBHTF9DTEFNUF9UT19FREdFIHRvIGdldCBjb3JyZWN0IGJlaGF2aW9yCi0gICAgLy8gb2YgY3Vi
ZSBtYXBzLgotICAgIGlmICh0ZXh0dXJlKQotICAgICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKSB7Ci0gICAgICAgICAgICBpZiAoIXRleHR1cmUt
PmlzQ3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgICAgICAgICBtX2lt
cGwtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIGtU
ZXh0dXJlV3JhcFIsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRDdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQodHJ1ZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q3Vi
ZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkKGZhbHNlKTsKKyAgICBtX2ltcGwtPmJpbmRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAorREVMRUdB
VEVfVE9fSU1QTF8yKGJpbmRCdWZmZXIsIHVuc2lnbmVkIGxvbmcsIFBsYXRmb3JtM0RPYmplY3Qp
CitERUxFR0FURV9UT19JTVBMXzIoYmluZEZyYW1lYnVmZmVyLCB1bnNpZ25lZCBsb25nLCBQbGF0
Zm9ybTNET2JqZWN0KQorREVMRUdBVEVfVE9fSU1QTF8yKGJpbmRSZW5kZXJidWZmZXIsIHVuc2ln
bmVkIGxvbmcsIFBsYXRmb3JtM0RPYmplY3QpCitERUxFR0FURV9UT19JTVBMXzIoYmluZFRleHR1
cmUsIHVuc2lnbmVkIGxvbmcsIFBsYXRmb3JtM0RPYmplY3QpCiBERUxFR0FURV9UT19JTVBMXzQo
YmxlbmRDb2xvciwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlKQogREVMRUdBVEVfVE9f
SU1QTF8xKGJsZW5kRXF1YXRpb24sIHVuc2lnbmVkIGxvbmcpCiBERUxFR0FURV9UT19JTVBMXzIo
YmxlbmRFcXVhdGlvblNlcGFyYXRlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQpAQCAt
NzIzLDcgKzY0MSw3IEBAIERFTEVHQVRFX1RPX0lNUExfNChjbGVhckNvbG9yLCBkb3VibGUsIGRv
dWJsZSwgZG91YmxlLCBkb3VibGUpCiBERUxFR0FURV9UT19JTVBMXzEoY2xlYXJEZXB0aCwgZG91
YmxlKQogREVMRUdBVEVfVE9fSU1QTF8xKGNsZWFyU3RlbmNpbCwgbG9uZykKIERFTEVHQVRFX1RP
X0lNUExfNChjb2xvck1hc2ssIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wpCi1ERUxFR0FURV9UT19J
TVBMXzFfWChjb21waWxlU2hhZGVyLCBXZWJHTFNoYWRlciopCitERUxFR0FURV9UT19JTVBMXzEo
Y29tcGlsZVNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCkKIAogREVMRUdBVEVfVE9fSU1QTF84KGNv
cHlUZXhJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nLCBs
b25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQogREVMRUdBVEVfVE9fSU1Q
TF84KGNvcHlUZXhTdWJJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCBsb25nLCBsb25nLCBs
b25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQpAQCAtNzMxLDcgKzY0OSw3
IEBAIERFTEVHQVRFX1RPX0lNUExfMShjdWxsRmFjZSwgdW5zaWduZWQgbG9uZykKIERFTEVHQVRF
X1RPX0lNUExfMShkZXB0aEZ1bmMsIHVuc2lnbmVkIGxvbmcpCiBERUxFR0FURV9UT19JTVBMXzEo
ZGVwdGhNYXNrLCBib29sKQogREVMRUdBVEVfVE9fSU1QTF8yKGRlcHRoUmFuZ2UsIGRvdWJsZSwg
ZG91YmxlKQotREVMRUdBVEVfVE9fSU1QTF8yX1gxMihkZXRhY2hTaGFkZXIsIFdlYkdMUHJvZ3Jh
bSosIFdlYkdMU2hhZGVyKikKK0RFTEVHQVRFX1RPX0lNUExfMihkZXRhY2hTaGFkZXIsIFBsYXRm
b3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QpCiBERUxFR0FURV9UT19JTVBMXzEoZGlzYWJs
ZSwgdW5zaWduZWQgbG9uZykKIERFTEVHQVRFX1RPX0lNUExfMShkaXNhYmxlVmVydGV4QXR0cmli
QXJyYXksIHVuc2lnbmVkIGxvbmcpCiBERUxFR0FURV9UT19JTVBMXzMoZHJhd0FycmF5cywgdW5z
aWduZWQgbG9uZywgbG9uZywgbG9uZykKQEAgLTc0MSwxNSArNjU5LDE1IEBAIERFTEVHQVRFX1RP
X0lNUExfMShlbmFibGUsIHVuc2lnbmVkIGxvbmcpCiBERUxFR0FURV9UT19JTVBMXzEoZW5hYmxl
VmVydGV4QXR0cmliQXJyYXksIHVuc2lnbmVkIGxvbmcpCiBERUxFR0FURV9UT19JTVBMKGZpbmlz
aCkKIERFTEVHQVRFX1RPX0lNUEwoZmx1c2gpCi1ERUxFR0FURV9UT19JTVBMXzRfWDQoZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcsIFdlYkdMUmVuZGVyYnVmZmVyKikKLURFTEVHQVRFX1RPX0lNUExfNV9YNChmcmFtZWJ1
ZmZlclRleHR1cmUyRCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZywgV2ViR0xUZXh0dXJlKiwgbG9uZykKK0RFTEVHQVRFX1RPX0lNUExfNChmcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlciwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg
UGxhdGZvcm0zRE9iamVjdCkKK0RFTEVHQVRFX1RPX0lNUExfNShmcmFtZWJ1ZmZlclRleHR1cmUy
RCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgUGxhdGZvcm0z
RE9iamVjdCwgbG9uZykKIERFTEVHQVRFX1RPX0lNUExfMShmcm9udEZhY2UsIHVuc2lnbmVkIGxv
bmcpCiBERUxFR0FURV9UT19JTVBMXzEoZ2VuZXJhdGVNaXBtYXAsIHVuc2lnbmVkIGxvbmcpCiAK
LWJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RP
YmplY3QgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsK
ICAgICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBY3RpdmVJbmZvIHdlYkluZm87Ci0g
ICAgaWYgKCFtX2ltcGwtPmdldEFjdGl2ZUF0dHJpYihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwg
d2ViSW5mbykpCisgICAgaWYgKCFtX2ltcGwtPmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRl
eCwgd2ViSW5mbykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpbmZvLm5hbWUgPSB3ZWJJ
bmZvLm5hbWU7CiAgICAgaW5mby50eXBlID0gd2ViSW5mby50eXBlOwpAQCAtNzU3LDEwICs2NzUs
MTAgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRBY3RpdmVBdHRyaWIoV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQorYm9vbCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmpl
Y3QgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKICAg
ICBXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjpBY3RpdmVJbmZvIHdlYkluZm87Ci0gICAg
aWYgKCFtX2ltcGwtPmdldEFjdGl2ZVVuaWZvcm0oRVhUUkFDVChwcm9ncmFtKSwgaW5kZXgsIHdl
YkluZm8pKQorICAgIGlmICghbV9pbXBsLT5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4
LCB3ZWJJbmZvKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGluZm8ubmFtZSA9IHdlYklu
Zm8ubmFtZTsKICAgICBpbmZvLnR5cGUgPSB3ZWJJbmZvLnR5cGU7CkBAIC03NjgsMTEgKzY4Niwx
MSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEFjdGl2ZVVuaWZvcm0oV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZAogICAgIHJldHVybiB0cnVlOwogfQogCi1ERUxF
R0FURV9UT19JTVBMXzRfWDEoZ2V0QXR0YWNoZWRTaGFkZXJzLCBXZWJHTFByb2dyYW0qLCBpbnQs
IGludCosIHVuc2lnbmVkIGludCopCitERUxFR0FURV9UT19JTVBMXzQoZ2V0QXR0YWNoZWRTaGFk
ZXJzLCBQbGF0Zm9ybTNET2JqZWN0LCBpbnQsIGludCosIHVuc2lnbmVkIGludCopCiAKLWludCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0
cmluZyYgbmFtZSkKIHsKLSAgICByZXR1cm4gbV9pbXBsLT5nZXRBdHRyaWJMb2NhdGlvbihFWFRS
QUNUKHByb2dyYW0pLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBtX2ltcGwtPmdl
dEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKIERFTEVH
QVRFX1RPX0lNUExfMihnZXRCb29sZWFudiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgY2hhciop
CkBAIC03OTksMjUgKzcxNywyNSBAQCBERUxFR0FURV9UT19JTVBMXzQoZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkCiAKIERFTEVHQVRF
X1RPX0lNUExfMihnZXRJbnRlZ2VydiwgdW5zaWduZWQgbG9uZywgaW50KikKIAotREVMRUdBVEVf
VE9fSU1QTF8zX1gxKGdldFByb2dyYW1pdiwgV2ViR0xQcm9ncmFtKiwgdW5zaWduZWQgbG9uZywg
aW50KikKK0RFTEVHQVRFX1RPX0lNUExfMyhnZXRQcm9ncmFtaXYsIFBsYXRmb3JtM0RPYmplY3Qs
IHVuc2lnbmVkIGxvbmcsIGludCopCiAKLVN0cmluZyBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qIHByb2dyYW0pCitTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtKQogewotICAgIHJldHVybiBtX2ltcGwtPmdldFByb2dyYW1JbmZvTG9nKEVYVFJBQ1Qo
cHJvZ3JhbSkpOworICAgIHJldHVybiBtX2ltcGwtPmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0p
OwogfQogCiBERUxFR0FURV9UT19JTVBMXzMoZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCiAKLURFTEVHQVRFX1RPX0lNUExfM19Y
MShnZXRTaGFkZXJpdiwgV2ViR0xTaGFkZXIqLCB1bnNpZ25lZCBsb25nLCBpbnQqKQorREVMRUdB
VEVfVE9fSU1QTF8zKGdldFNoYWRlcml2LCBQbGF0Zm9ybTNET2JqZWN0LCB1bnNpZ25lZCBsb25n
LCBpbnQqKQogCi1TdHJpbmcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U2hhZGVySW5m
b0xvZyhXZWJHTFNoYWRlciogc2hhZGVyKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiB7Ci0gICAgcmV0
dXJuIG1faW1wbC0+Z2V0U2hhZGVySW5mb0xvZyhFWFRSQUNUKHNoYWRlcikpOworICAgIHJldHVy
biBtX2ltcGwtPmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKIH0KIAotU3RyaW5nIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyKQor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKIHsKLSAgICByZXR1cm4gbV9pbXBsLT5nZXRTaGFkZXJTb3VyY2Uo
RVhUUkFDVChzaGFkZXIpKTsKKyAgICByZXR1cm4gbV9pbXBsLT5nZXRTaGFkZXJTb3VyY2Uoc2hh
ZGVyKTsKIH0KIAogU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFN0cmluZyh1
bnNpZ25lZCBsb25nIG5hbWUpCkBAIC04MjgsMTIgKzc0NiwxMiBAQCBTdHJpbmcgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6Z2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcgbmFtZSkKIERFTEVHQVRF
X1RPX0lNUExfMyhnZXRUZXhQYXJhbWV0ZXJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZywgZmxvYXQqKQogREVMRUdBVEVfVE9fSU1QTF8zKGdldFRleFBhcmFtZXRlcml2LCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQogCi1ERUxFR0FURV9UT19JTVBMXzNfWDEoZ2V0
VW5pZm9ybWZ2LCBXZWJHTFByb2dyYW0qLCBsb25nLCBmbG9hdCopCi1ERUxFR0FURV9UT19JTVBM
XzNfWDEoZ2V0VW5pZm9ybWl2LCBXZWJHTFByb2dyYW0qLCBsb25nLCBpbnQqKQorREVMRUdBVEVf
VE9fSU1QTF8zKGdldFVuaWZvcm1mdiwgUGxhdGZvcm0zRE9iamVjdCwgbG9uZywgZmxvYXQqKQor
REVMRUdBVEVfVE9fSU1QTF8zKGdldFVuaWZvcm1pdiwgUGxhdGZvcm0zRE9iamVjdCwgbG9uZywg
aW50KikKIAotbG9uZyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRVbmlmb3JtTG9jYXRp
b24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCitsb25nIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICByZXR1cm4gbV9pbXBsLT5nZXRV
bmlmb3JtTG9jYXRpb24oRVhUUkFDVChwcm9ncmFtKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICByZXR1cm4gbV9pbXBsLT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKIH0KIAogREVMRUdBVEVfVE9fSU1QTF8zKGdldFZlcnRleEF0dHJpYmZ2LCB1bnNp
Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBmbG9hdCopCkBAIC04NDIsMTUgKzc2MCwxNSBAQCBE
RUxFR0FURV9UT19JTVBMXzMoZ2V0VmVydGV4QXR0cmliaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIGludCopCiBERUxFR0FURV9UT19JTVBMXzJSKGdldFZlcnRleEF0dHJpYk9mZnNl
dCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZykKIAogREVMRUdBVEVfVE9fSU1Q
TF8yKGhpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi1ERUxFR0FURV9UT19JTVBM
XzFSX1goaXNCdWZmZXIsIFdlYkdMQnVmZmVyKiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExfMVIo
aXNCdWZmZXIsIFBsYXRmb3JtM0RPYmplY3QsIGJvb2wpCiBERUxFR0FURV9UT19JTVBMXzFSKGlz
RW5hYmxlZCwgdW5zaWduZWQgbG9uZywgYm9vbCkKLURFTEVHQVRFX1RPX0lNUExfMVJfWChpc0Zy
YW1lYnVmZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiwgYm9vbCkKLURFTEVHQVRFX1RPX0lNUExfMVJf
WChpc1Byb2dyYW0sIFdlYkdMUHJvZ3JhbSosIGJvb2wpCi1ERUxFR0FURV9UT19JTVBMXzFSX1go
aXNSZW5kZXJidWZmZXIsIFdlYkdMUmVuZGVyYnVmZmVyKiwgYm9vbCkKLURFTEVHQVRFX1RPX0lN
UExfMVJfWChpc1NoYWRlciwgV2ViR0xTaGFkZXIqLCBib29sKQotREVMRUdBVEVfVE9fSU1QTF8x
Ul9YKGlzVGV4dHVyZSwgV2ViR0xUZXh0dXJlKiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExfMVIo
aXNGcmFtZWJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCwgYm9vbCkKK0RFTEVHQVRFX1RPX0lNUExf
MVIoaXNQcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0LCBib29sKQorREVMRUdBVEVfVE9fSU1QTF8x
Uihpc1JlbmRlcmJ1ZmZlciwgUGxhdGZvcm0zRE9iamVjdCwgYm9vbCkKK0RFTEVHQVRFX1RPX0lN
UExfMVIoaXNTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QsIGJvb2wpCitERUxFR0FURV9UT19JTVBM
XzFSKGlzVGV4dHVyZSwgUGxhdGZvcm0zRE9iamVjdCwgYm9vbCkKIERFTEVHQVRFX1RPX0lNUExf
MShsaW5lV2lkdGgsIGRvdWJsZSkKLURFTEVHQVRFX1RPX0lNUExfMV9YKGxpbmtQcm9ncmFtLCBX
ZWJHTFByb2dyYW0qKQorREVMRUdBVEVfVE9fSU1QTF8xKGxpbmtQcm9ncmFtLCBQbGF0Zm9ybTNE
T2JqZWN0KQogREVMRUdBVEVfVE9fSU1QTF8yKHBpeGVsU3RvcmVpLCB1bnNpZ25lZCBsb25nLCBs
b25nKQogREVMRUdBVEVfVE9fSU1QTF8yKHBvbHlnb25PZmZzZXQsIGRvdWJsZSwgZG91YmxlKQog
REVMRUdBVEVfVE9fSU1QTF83KHJlYWRQaXhlbHMsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQqKQpAQCAt
ODU5LDkgKzc3Nyw5IEBAIERFTEVHQVRFX1RPX0lNUExfNChyZW5kZXJidWZmZXJTdG9yYWdlLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsCiBERUxFR0FURV9UT19JTVBM
XzIoc2FtcGxlQ292ZXJhZ2UsIGRvdWJsZSwgYm9vbCkKIERFTEVHQVRFX1RPX0lNUExfNChzY2lz
c29yLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVy
LCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZykKIHsKLSAgICBtX2ltcGwtPnNoYWRlclNvdXJjZShFWFRSQUNUKHNoYWRlciksIHN0cmluZy51
dGY4KCkuZGF0YSgpKTsKKyAgICBtX2ltcGwtPnNoYWRlclNvdXJjZShzaGFkZXIsIHN0cmluZy51
dGY4KCkuZGF0YSgpKTsKIH0KIAogREVMRUdBVEVfVE9fSU1QTF8zKHN0ZW5jaWxGdW5jLCB1bnNp
Z25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQpAQCAtOTU3LDggKzg3NSw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9u
LCBib29sIHRyYW5zcG9zZSwKICAgICBtX2ltcGwtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24s
IHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwogfQogCi1ERUxFR0FURV9UT19JTVBMXzFfWCh1c2VQ
cm9ncmFtLCBXZWJHTFByb2dyYW0qKQotREVMRUdBVEVfVE9fSU1QTF8xX1godmFsaWRhdGVQcm9n
cmFtLCBXZWJHTFByb2dyYW0qKQorREVMRUdBVEVfVE9fSU1QTF8xKHVzZVByb2dyYW0sIFBsYXRm
b3JtM0RPYmplY3QpCitERUxFR0FURV9UT19JTVBMXzEodmFsaWRhdGVQcm9ncmFtLCBQbGF0Zm9y
bTNET2JqZWN0KQogCiBERUxFR0FURV9UT19JTVBMXzIodmVydGV4QXR0cmliMWYsIHVuc2lnbmVk
IGxvbmcsIGZsb2F0KQogREVMRUdBVEVfVE9fSU1QTF8yKHZlcnRleEF0dHJpYjFmdiwgdW5zaWdu
ZWQgbG9uZywgZmxvYXQqKQpAQCAtMTE0MCwxMyArMTA1OCwxMyBAQCBERUxFR0FURV9UT19JTlRF
Uk5BTF8xUihzaXplSW5CeXRlcywgaW50LCBpbnQpCiBERUxFR0FURV9UT19JTlRFUk5BTF8yKHJl
c2hhcGUsIGludCwgaW50KQogCiBERUxFR0FURV9UT19JTlRFUk5BTF8xKGFjdGl2ZVRleHR1cmUs
IHVuc2lnbmVkIGxvbmcpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8yKGF0dGFjaFNoYWRlciwgV2Vi
R0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMyhiaW5kQXR0
cmliTG9jYXRpb24sIFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFN0cmluZyYp
CitERUxFR0FURV9UT19JTlRFUk5BTF8yKGF0dGFjaFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCwg
UGxhdGZvcm0zRE9iamVjdCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoYmluZEF0dHJpYkxvY2F0
aW9uLCBQbGF0Zm9ybTNET2JqZWN0LCB1bnNpZ25lZCBsb25nLCBjb25zdCBTdHJpbmcmKQogCi1E
RUxFR0FURV9UT19JTlRFUk5BTF8yKGJpbmRCdWZmZXIsIHVuc2lnbmVkIGxvbmcsIFdlYkdMQnVm
ZmVyKikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYmluZEZyYW1lYnVmZmVyLCB1bnNpZ25lZCBs
b25nLCBXZWJHTEZyYW1lYnVmZmVyKikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYmluZFJlbmRl
cmJ1ZmZlciwgdW5zaWduZWQgbG9uZywgV2ViR0xSZW5kZXJidWZmZXIqKQotREVMRUdBVEVfVE9f
SU5URVJOQUxfMihiaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgV2ViR0xUZXh0dXJlKikKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzIoYmluZEJ1ZmZlciwgdW5zaWduZWQgbG9uZywgUGxhdGZvcm0z
RE9iamVjdCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYmluZEZyYW1lYnVmZmVyLCB1bnNpZ25l
ZCBsb25nLCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMihiaW5kUmVu
ZGVyYnVmZmVyLCB1bnNpZ25lZCBsb25nLCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdBVEVfVE9f
SU5URVJOQUxfMihiaW5kVGV4dHVyZSwgdW5zaWduZWQgbG9uZywgUGxhdGZvcm0zRE9iamVjdCkK
IERFTEVHQVRFX1RPX0lOVEVSTkFMXzQoYmxlbmRDb2xvciwgZG91YmxlLCBkb3VibGUsIGRvdWJs
ZSwgZG91YmxlKQogREVMRUdBVEVfVE9fSU5URVJOQUxfMShibGVuZEVxdWF0aW9uLCB1bnNpZ25l
ZCBsb25nKQogREVMRUdBVEVfVE9fSU5URVJOQUxfMihibGVuZEVxdWF0aW9uU2VwYXJhdGUsIHVu
c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCkBAIC0xMTY1LDcgKzEwODMsNyBAQCBERUxFR0FU
RV9UT19JTlRFUk5BTF80KGNsZWFyQ29sb3IsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJs
ZSkKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY2xlYXJEZXB0aCwgZG91YmxlKQogREVMRUdBVEVf
VE9fSU5URVJOQUxfMShjbGVhclN0ZW5jaWwsIGxvbmcpCiBERUxFR0FURV9UT19JTlRFUk5BTF80
KGNvbG9yTWFzaywgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCkKLURFTEVHQVRFX1RPX0lOVEVSTkFM
XzEoY29tcGlsZVNoYWRlciwgV2ViR0xTaGFkZXIqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMShj
b21waWxlU2hhZGVyLCBQbGF0Zm9ybTNET2JqZWN0KQogCiBERUxFR0FURV9UT19JTlRFUk5BTF84
KGNvcHlUZXhJbWFnZTJELCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25n
LCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQogREVMRUdBVEVfVE9f
SU5URVJOQUxfOChjb3B5VGV4U3ViSW1hZ2UyRCwgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZywg
bG9uZywgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKQEAgLTExNzMs
NyArMTA5MSw3IEBAIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEoY3VsbEZhY2UsIHVuc2lnbmVkIGxv
bmcpCiBERUxFR0FURV9UT19JTlRFUk5BTF8xKGRlcHRoRnVuYywgdW5zaWduZWQgbG9uZykKIERF
TEVHQVRFX1RPX0lOVEVSTkFMXzEoZGVwdGhNYXNrLCBib29sKQogREVMRUdBVEVfVE9fSU5URVJO
QUxfMihkZXB0aFJhbmdlLCBkb3VibGUsIGRvdWJsZSkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzIo
ZGV0YWNoU2hhZGVyLCBXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciopCitERUxFR0FURV9UT19J
TlRFUk5BTF8yKGRldGFjaFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9iamVj
dCkKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZGlzYWJsZSwgdW5zaWduZWQgbG9uZykKIERFTEVH
QVRFX1RPX0lOVEVSTkFMXzEoZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5LCB1bnNpZ25lZCBsb25n
KQogREVMRUdBVEVfVE9fSU5URVJOQUxfMyhkcmF3QXJyYXlzLCB1bnNpZ25lZCBsb25nLCBsb25n
LCBsb25nKQpAQCAtMTE4MywxNyArMTEwMSwxNyBAQCBERUxFR0FURV9UT19JTlRFUk5BTF8xKGVu
YWJsZSwgdW5zaWduZWQgbG9uZykKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZW5hYmxlVmVydGV4
QXR0cmliQXJyYXksIHVuc2lnbmVkIGxvbmcpCiBERUxFR0FURV9UT19JTlRFUk5BTChmaW5pc2gp
CiBERUxFR0FURV9UT19JTlRFUk5BTChmbHVzaCkKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzQoZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIFdlYkdMUmVuZGVyYnVmZmVyKikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzUoZnJh
bWVidWZmZXJUZXh0dXJlMkQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcsIFdlYkdMVGV4dHVyZSosIGxvbmcpCitERUxFR0FURV9UT19JTlRFUk5BTF80KGZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nLCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfNShmcmFtZWJ1
ZmZlclRleHR1cmUyRCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u
ZywgUGxhdGZvcm0zRE9iamVjdCwgbG9uZykKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEoZnJvbnRG
YWNlLCB1bnNpZ25lZCBsb25nKQogREVMRUdBVEVfVE9fSU5URVJOQUxfMShnZW5lcmF0ZU1pcG1h
cCwgdW5zaWduZWQgbG9uZykKIAotREVMRUdBVEVfVE9fSU5URVJOQUxfM1IoZ2V0QWN0aXZlQXR0
cmliLCBXZWJHTFByb2dyYW0qLCB1bnNpZ25lZCBsb25nLCBBY3RpdmVJbmZvJiwgYm9vbCkKLURF
TEVHQVRFX1RPX0lOVEVSTkFMXzNSKGdldEFjdGl2ZVVuaWZvcm0sIFdlYkdMUHJvZ3JhbSosIHVu
c2lnbmVkIGxvbmcsIEFjdGl2ZUluZm8mLCBib29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxfM1Io
Z2V0QWN0aXZlQXR0cmliLCBQbGF0Zm9ybTNET2JqZWN0LCB1bnNpZ25lZCBsb25nLCBBY3RpdmVJ
bmZvJiwgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzNSKGdldEFjdGl2ZVVuaWZvcm0sIFBs
YXRmb3JtM0RPYmplY3QsIHVuc2lnbmVkIGxvbmcsIEFjdGl2ZUluZm8mLCBib29sKQogCi1ERUxF
R0FURV9UT19JTlRFUk5BTF80KGdldEF0dGFjaGVkU2hhZGVycywgV2ViR0xQcm9ncmFtKiwgaW50
LCBpbnQqLCB1bnNpZ25lZCBpbnQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfNChnZXRBdHRhY2hl
ZFNoYWRlcnMsIFBsYXRmb3JtM0RPYmplY3QsIGludCwgaW50KiwgdW5zaWduZWQgaW50KikKIAot
REVMRUdBVEVfVE9fSU5URVJOQUxfMlIoZ2V0QXR0cmliTG9jYXRpb24sIFdlYkdMUHJvZ3JhbSos
IGNvbnN0IFN0cmluZyYsIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzJSKGdldEF0dHJpYkxv
Y2F0aW9uLCBQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmLCBpbnQpCiAKIERFTEVHQVRF
X1RPX0lOVEVSTkFMXzIoZ2V0Qm9vbGVhbnYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIq
KQogCkBAIC0xMjA5LDI2ICsxMTI3LDI2IEBAIERFTEVHQVRFX1RPX0lOVEVSTkFMXzQoZ2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnCiAKIERF
TEVHQVRFX1RPX0lOVEVSTkFMXzIoZ2V0SW50ZWdlcnYsIHVuc2lnbmVkIGxvbmcsIGludCopCiAK
LURFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0UHJvZ3JhbWl2LCBXZWJHTFByb2dyYW0qLCB1bnNp
Z25lZCBsb25nLCBpbnQqKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMyhnZXRQcm9ncmFtaXYsIFBs
YXRmb3JtM0RPYmplY3QsIHVuc2lnbmVkIGxvbmcsIGludCopCiAKLURFTEVHQVRFX1RPX0lOVEVS
TkFMXzFSKGdldFByb2dyYW1JbmZvTG9nLCBXZWJHTFByb2dyYW0qLCBTdHJpbmcpCitERUxFR0FU
RV9UT19JTlRFUk5BTF8xUihnZXRQcm9ncmFtSW5mb0xvZywgUGxhdGZvcm0zRE9iamVjdCwgU3Ry
aW5nKQogCiBERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2
LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQogCi1ERUxFR0FURV9UT19JTlRF
Uk5BTF8zKGdldFNoYWRlcml2LCBXZWJHTFNoYWRlciosIHVuc2lnbmVkIGxvbmcsIGludCopCitE
RUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFNoYWRlcml2LCBQbGF0Zm9ybTNET2JqZWN0LCB1bnNp
Z25lZCBsb25nLCBpbnQqKQogCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xUihnZXRTaGFkZXJJbmZv
TG9nLCBXZWJHTFNoYWRlciosIFN0cmluZykKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGdldFNo
YWRlckluZm9Mb2csIFBsYXRmb3JtM0RPYmplY3QsIFN0cmluZykKIAotREVMRUdBVEVfVE9fSU5U
RVJOQUxfMVIoZ2V0U2hhZGVyU291cmNlLCBXZWJHTFNoYWRlciosIFN0cmluZykKK0RFTEVHQVRF
X1RPX0lOVEVSTkFMXzFSKGdldFNoYWRlclNvdXJjZSwgUGxhdGZvcm0zRE9iamVjdCwgU3RyaW5n
KQogREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoZ2V0U3RyaW5nLCB1bnNpZ25lZCBsb25nLCBTdHJp
bmcpCiAKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0VGV4UGFyYW1ldGVyZnYsIHVuc2lnbmVk
IGxvbmcsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0
VGV4UGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCopCiAKLURF
TEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0VW5pZm9ybWZ2LCBXZWJHTFByb2dyYW0qLCBsb25nLCBm
bG9hdCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFVuaWZvcm1pdiwgV2ViR0xQcm9ncmFt
KiwgbG9uZywgaW50KikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzMoZ2V0VW5pZm9ybWZ2LCBQbGF0
Zm9ybTNET2JqZWN0LCBsb25nLCBmbG9hdCopCitERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFVu
aWZvcm1pdiwgUGxhdGZvcm0zRE9iamVjdCwgbG9uZywgaW50KikKIAotREVMRUdBVEVfVE9fSU5U
RVJOQUxfMlIoZ2V0VW5pZm9ybUxvY2F0aW9uLCBXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcm
LCBsb25nKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMlIoZ2V0VW5pZm9ybUxvY2F0aW9uLCBQbGF0
Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmLCBsb25nKQogCiBERUxFR0FURV9UT19JTlRFUk5B
TF8zKGdldFZlcnRleEF0dHJpYmZ2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBmbG9h
dCopCiBERUxFR0FURV9UT19JTlRFUk5BTF8zKGdldFZlcnRleEF0dHJpYml2LCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQpAQCAtMTIzNiwxNSArMTE1NCwxNSBAQCBERUxFR0FU
RV9UT19JTlRFUk5BTF8zKGdldFZlcnRleEF0dHJpYml2LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nLCBpbnQqKQogREVMRUdBVEVfVE9fSU5URVJOQUxfMlIoZ2V0VmVydGV4QXR0cmliT2Zm
c2V0LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb25nKQogCiBERUxFR0FURV9UT19J
TlRFUk5BTF8yKGhpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi1ERUxFR0FURV9U
T19JTlRFUk5BTF8xUihpc0J1ZmZlciwgV2ViR0xCdWZmZXIqLCBib29sKQorREVMRUdBVEVfVE9f
SU5URVJOQUxfMVIoaXNCdWZmZXIsIFBsYXRmb3JtM0RPYmplY3QsIGJvb2wpCiBERUxFR0FURV9U
T19JTlRFUk5BTF8xUihpc0VuYWJsZWQsIHVuc2lnbmVkIGxvbmcsIGJvb2wpCi1ERUxFR0FURV9U
T19JTlRFUk5BTF8xUihpc0ZyYW1lYnVmZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiwgYm9vbCkKLURF
TEVHQVRFX1RPX0lOVEVSTkFMXzFSKGlzUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKiwgYm9vbCkKLURF
TEVHQVRFX1RPX0lOVEVSTkFMXzFSKGlzUmVuZGVyYnVmZmVyLCBXZWJHTFJlbmRlcmJ1ZmZlcios
IGJvb2wpCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc1NoYWRlciwgV2ViR0xTaGFkZXIqLCBi
b29sKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNUZXh0dXJlLCBXZWJHTFRleHR1cmUqLCBi
b29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNGcmFtZWJ1ZmZlciwgUGxhdGZvcm0zRE9i
amVjdCwgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGlzUHJvZ3JhbSwgUGxhdGZvcm0z
RE9iamVjdCwgYm9vbCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKGlzUmVuZGVyYnVmZmVyLCBQ
bGF0Zm9ybTNET2JqZWN0LCBib29sKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMVIoaXNTaGFkZXIs
IFBsYXRmb3JtM0RPYmplY3QsIGJvb2wpCitERUxFR0FURV9UT19JTlRFUk5BTF8xUihpc1RleHR1
cmUsIFBsYXRmb3JtM0RPYmplY3QsIGJvb2wpCiBERUxFR0FURV9UT19JTlRFUk5BTF8xKGxpbmVX
aWR0aCwgZG91YmxlKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMShsaW5rUHJvZ3JhbSwgV2ViR0xQ
cm9ncmFtKikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEobGlua1Byb2dyYW0sIFBsYXRmb3JtM0RP
YmplY3QpCiBERUxFR0FURV9UT19JTlRFUk5BTF8yKHBpeGVsU3RvcmVpLCB1bnNpZ25lZCBsb25n
LCBsb25nKQogREVMRUdBVEVfVE9fSU5URVJOQUxfMihwb2x5Z29uT2Zmc2V0LCBkb3VibGUsIGRv
dWJsZSkKIApAQCAtMTI1NCw3ICsxMTcyLDcgQEAgREVMRUdBVEVfVE9fSU5URVJOQUwocmVsZWFz
ZVNoYWRlckNvbXBpbGVyKQogREVMRUdBVEVfVE9fSU5URVJOQUxfNChyZW5kZXJidWZmZXJTdG9y
YWdlLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nKQogREVMRUdBVEVfVE9fSU5URVJOQUxfMihzYW1wbGVDb3ZlcmFnZSwgZG91YmxlLCBi
b29sKQogREVMRUdBVEVfVE9fSU5URVJOQUxfNChzY2lzc29yLCBsb25nLCBsb25nLCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nKQotREVMRUdBVEVfVE9fSU5URVJOQUxfMihzaGFkZXJTb3Vy
Y2UsIFdlYkdMU2hhZGVyKiwgY29uc3QgU3RyaW5nJikKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzIo
c2hhZGVyU291cmNlLCBQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBTdHJpbmcmKQogREVMRUdBVEVf
VE9fSU5URVJOQUxfMyhzdGVuY2lsRnVuYywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQg
bG9uZykKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzQoc3RlbmNpbEZ1bmNTZXBhcmF0ZSwgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZykKIERFTEVHQVRFX1RP
X0lOVEVSTkFMXzEoc3RlbmNpbE1hc2ssIHVuc2lnbmVkIGxvbmcpCkBAIC0xMjg3LDggKzEyMDUs
OCBAQCBERUxFR0FURV9UT19JTlRFUk5BTF80KHVuaWZvcm1NYXRyaXgyZnYsIGxvbmcsIGJvb2ws
IGZsb2F0KiwgaW50KQogREVMRUdBVEVfVE9fSU5URVJOQUxfNCh1bmlmb3JtTWF0cml4M2Z2LCBs
b25nLCBib29sLCBmbG9hdCosIGludCkKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzQodW5pZm9ybU1h
dHJpeDRmdiwgbG9uZywgYm9vbCwgZmxvYXQqLCBpbnQpCiAKLURFTEVHQVRFX1RPX0lOVEVSTkFM
XzEodXNlUHJvZ3JhbSwgV2ViR0xQcm9ncmFtKikKLURFTEVHQVRFX1RPX0lOVEVSTkFMXzEodmFs
aWRhdGVQcm9ncmFtLCBXZWJHTFByb2dyYW0qKQorREVMRUdBVEVfVE9fSU5URVJOQUxfMSh1c2VQ
cm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0KQorREVMRUdBVEVfVE9fSU5URVJOQUxfMSh2YWxpZGF0
ZVByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3QpCiAKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzIodmVy
dGV4QXR0cmliMWYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KQogREVMRUdBVEVfVE9fSU5URVJOQUxf
Mih2ZXJ0ZXhBdHRyaWIxZnYsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKQEAgLTEzMDIsOCArMTIy
MCw4IEBAIERFTEVHQVRFX1RPX0lOVEVSTkFMXzYodmVydGV4QXR0cmliUG9pbnRlciwgdW5zaWdu
ZWQgbG9uZywgaW50LCBpbnQsIGJvb2wsIHVuc2lnCiAKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzQo
dmlld3BvcnQsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCiAKLURF
TEVHQVRFX1RPX0lOVEVSTkFMXzEocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMsIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCopCi1ERUxFR0FURV9UT19JTlRFUk5BTF8xKGJlZ2luUGFpbnQsIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCopCitERUxFR0FURV9UT19JTlRFUk5BTF8xKHBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KikKK0RFTEVHQVRFX1RP
X0lOVEVSTkFMXzEoYmVnaW5QYWludCwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCopCiBERUxFR0FU
RV9UT19JTlRFUk5BTChlbmRQYWludCkKIAogREVMRUdBVEVfVE9fSU5URVJOQUxfUihjcmVhdGVC
dWZmZXIsIHVuc2lnbmVkKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63401</attachid>
            <date>2010-08-03 18:35:03 -0700</date>
            <delta_ts>2010-08-04 10:34:13 -0700</delta_ts>
            <desc>Patch (re-)introducing EXTRACT macro</desc>
            <filename>extract.patch</filename>
            <type>text/plain</type>
            <size>18014</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDYxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMTAtMDgtMDMgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
dmUgV2ViR0wtc3BlY2lmaWMgY29kZSBvdXQgb2YgR3JhcGhpY3NDb250ZXh0M0Qgc28gdGhhdCBH
M0QgY2FuIGJlIHVzZWQgYXMgYSBnZW5lcmljIGFjY2VsZXJhdGVkIGRyYXdpbmcgQVBJCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzIyMQorCisgICAg
ICAgIEFkZGVkIGEgaGVscGVyIG1hY3JvIHRvIGV4dHJhY3QgdGhlIGNvbnRlbnRzIG9mIFdlYkdM
IG9iamVjdHMgdG8KKyAgICAgICAgcmVkdWNlIGR1cGxpY2F0ZWQgY29kZSBhbmQgZml4IGEgY291
cGxlIG9mIHBvdGVudGlhbCBjcmFzaGVzCisgICAgICAgIGludHJvZHVjZWQgaW4gdGhlIHByZXZp
b3VzIHJlZmFjdG9yaW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0czsgcmFuIGV4aXN0aW5nIFdl
YkdMIHRlc3RzLgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hh
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJp
YkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymlu
ZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRG
cmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJp
bmRSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1J
bmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hh
ZGVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVzZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpoYW5kbGVOUE9UVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlv
bik6CisKIDIwMTAtMDgtMDMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA2NDYxMSkKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNiArNTUsOCBAQAogI2luY2x1ZGUgPHd0Zi9CeXRlQXJyYXkuaD4KICNpbmNsdWRlIDx3
dGYvT3duQXJyYXlQdHIuaD4KIAorI2RlZmluZSBFWFRSQUNUKHgpICgoeCkgPyAoeCktPm9iamVj
dCgpIDogMCkKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBXZWJHTFN0YXRlUmVzdG9y
ZXIgewpAQCAtMjIwLDcgKzIyMiw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRh
Y2hTaGFkZXIKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmICghdmFsaWRhdGVXZWJHTE9i
amVjdChwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIocHJvZ3JhbSA/IHByb2dyYW0tPm9i
amVjdCgpIDogMCwgc2hhZGVyID8gc2hhZGVyLT5vYmplY3QoKSA6IDApOworICAgIG1fY29udGV4
dC0+YXR0YWNoU2hhZGVyKEVYVFJBQ1QocHJvZ3JhbSksIEVYVFJBQ1Qoc2hhZGVyKSk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMjI5LDcgKzIzMSw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG8KICAgICBVTlVTRURfUEFS
QU0oZWMpOwogICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAg
cmV0dXJuOwotICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0gPyBwcm9n
cmFtLT5vYmplY3QoKSA6IDAsIGluZGV4LCBuYW1lKTsKKyAgICBtX2NvbnRleHQtPmJpbmRBdHRy
aWJMb2NhdGlvbihFWFRSQUNUKHByb2dyYW0pLCBpbmRleCwgbmFtZSk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMjU0LDcgKzI1Niw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQnVmZmVyKHUKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlciA/IGJ1ZmZlci0+b2Jq
ZWN0KCkgOiAwKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0LCBFWFRSQUNUKGJ1
ZmZlcikpOwogICAgIGlmIChidWZmZXIpCiAgICAgICAgIGJ1ZmZlci0+c2V0VGFyZ2V0KHRhcmdl
dCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKQEAgLTI3Myw3ICsyNzUs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBidWZmZXI7Ci0gICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBidWZmZXIgPyBidWZmZXItPm9iamVjdCgp
IDogMCk7CisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBFWFRSQUNUKGJ1
ZmZlcikpOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKICAgICAgICAgbV9mcmFtZWJ1
ZmZlckJpbmRpbmctPm9uQmluZCgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CkBAIC0yOTEsNyArMjkzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRS
ZW5kZXJidQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fcmVuZGVyYnVmZmVyQmluZGlu
ZyA9IHJlbmRlckJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0
LCByZW5kZXJCdWZmZXIgPyByZW5kZXJCdWZmZXItPm9iamVjdCgpIDogMCk7CisgICAgbV9jb250
ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgRVhUUkFDVChyZW5kZXJCdWZmZXIpKTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0zMTQsNyArMzE2LDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRUZXh0dXJlKAogICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0p
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodGFy
Z2V0LCB0ZXh0dXJlID8gdGV4dHVyZS0+b2JqZWN0KCkgOiAwKTsKKyAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKHRhcmdldCwgRVhUUkFDVCh0ZXh0dXJlKSk7CiAgICAgaWYgKCFpc0dMRVMyQ29t
cGxpYW50KCkgJiYgdGV4dHVyZSkKICAgICAgICAgdGV4dHVyZS0+c2V0VGFyZ2V0KHRhcmdldCwg
bWF4TGV2ZWwpOwogCkBAIC01MTYsNyArNTE4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvbXBpbGVTaGFkZQogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKCF2YWxpZGF0
ZVdlYkdMT2JqZWN0KHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmNv
bXBpbGVTaGFkZXIoc2hhZGVyID8gc2hhZGVyLT5vYmplY3QoKSA6IDApOworICAgIG1fY29udGV4
dC0+Y29tcGlsZVNoYWRlcihFWFRSQUNUKHNoYWRlcikpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTcwNiw3ICs3MDgsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAo
IXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hh
ZGVyKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKHByb2dy
YW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDAsIHNoYWRlciA/IHNoYWRlci0+b2JqZWN0KCkgOiAw
KTsKKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihFWFRSQUNUKHByb2dyYW0pLCBFWFRSQUNU
KHNoYWRlcikpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAg
LTEwNzUsNyArMTA3Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZl
clIKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICBtX2NvbnRleHQt
PmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVy
dGFyZ2V0LCBidWZmZXIgPyBidWZmZXItPm9iamVjdCgpIDogMCk7CisgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgRVhUUkFDVChidWZmZXIpKTsKICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0
YWNobWVudChhdHRhY2htZW50LCBidWZmZXIpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CkBAIC0xMTAwLDcgKzExMDIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZnJhbWVidWZmZXJUCiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlID8gdGV4dHVyZS0+b2JqZWN0KCkgOiAwLCBsZXZlbCk7
CisgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQs
IHRleHRhcmdldCwgRVhUUkFDVCh0ZXh0dXJlKSwgbGV2ZWwpOwogICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5zZXRBdHRhY2htZW50KGF0dGFjaG1lbnQsIHRleHR1cmUpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0xMTM4LDcgKzExNDAsNyBAQCBQYXNzUmVm
UHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpCiAgICAgQWN0aXZlSW5mbyBpbmZvOwog
ICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtID8gcHJvZ3JhbS0+
b2JqZWN0KCkgOiAwLCBpbmRleCwgaW5mbykpIHsKKyAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0
aXZlQXR0cmliKEVYVFJBQ1QocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkgewogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAgICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFt
ZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOwpAQCAtMTE1MCw3ICsxMTUyLDcgQEAgUGFzc1JlZlB0
cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaQogICAgIEFjdGl2ZUluZm8gaW5mbzsKICAg
ICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0gPyBwcm9ncmFtLT5v
YmplY3QoKSA6IDAsIGluZGV4LCBpbmZvKSkgeworICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3Rp
dmVVbmlmb3JtKEVYVFJBQ1QocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkgewogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKQEAgLTExNjcsMTEg
KzExNjksMTEgQEAgYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkUwogICAg
IGlmICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGludCBudW1TaGFkZXJzID0gMDsKLSAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihw
cm9ncmFtID8gcHJvZ3JhbS0+b2JqZWN0KCkgOiAwLCBHcmFwaGljc0NvbnRleHQzRDo6QVRUQUNI
RURfU0hBREVSUywgJm51bVNoYWRlcnMpOworICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KEVY
VFJBQ1QocHJvZ3JhbSksIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTLCAmbnVt
U2hhZGVycyk7CiAgICAgaWYgKG51bVNoYWRlcnMpIHsKICAgICAgICAgT3duQXJyYXlQdHI8dW5z
aWduZWQgaW50PiBzaGFkZXJzKG5ldyB1bnNpZ25lZCBpbnRbbnVtU2hhZGVyc10pOwogICAgICAg
ICBpbnQgY291bnQ7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0QXR0YWNoZWRTaGFkZXJzKHByb2dy
YW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDAsIG51bVNoYWRlcnMsICZjb3VudCwgc2hhZGVycy5n
ZXQoKSk7CisgICAgICAgIG1fY29udGV4dC0+Z2V0QXR0YWNoZWRTaGFkZXJzKEVYVFJBQ1QocHJv
Z3JhbSksIG51bVNoYWRlcnMsICZjb3VudCwgc2hhZGVycy5nZXQoKSk7CiAgICAgICAgIGlmIChj
b3VudCAhPSBudW1TaGFkZXJzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBz
aGFkZXJPYmplY3RzLnJlc2l6ZShudW1TaGFkZXJzKTsKQEAgLTExODksNyArMTE5MSw3IEBAIGJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFMKIAogaW50IFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25z
dCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmliTG9jYXRp
b24ocHJvZ3JhbSA/IHByb2dyYW0tPm9iamVjdCgpIDogMCwgbmFtZSk7CisgICAgcmV0dXJuIG1f
Y29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24oRVhUUkFDVChwcm9ncmFtKSwgbmFtZSk7CiB9CiAK
IFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCkBAIC0xNDY3LDEyICsxNDY5LDEyIEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFAKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6REVMRVRFX1NUQVRVUzoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWQUxJREFU
RV9TVEFUVVM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0gPyBwcm9n
cmFtLT5vYmplY3QoKSA6IDAsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBtX2NvbnRleHQtPmdl
dFByb2dyYW1pdihFWFRSQUNUKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOwogICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxJTktfU1RBVFVTOgogICAgICAgICBpZiAocHJvZ3JhbS0+aXNMaW5r
RmFpbHVyZUZsYWdTZXQoKSkKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oZmFsc2Up
OwotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihwcm9ncmFtID8gcHJvZ3JhbS0+b2Jq
ZWN0KCkgOiAwLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFt
aXYoRVhUUkFDVChwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTkZPX0xPR19MRU5HVEg6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVRU
QUNIRURfU0hBREVSUzoKQEAgLTE0ODAsNyArMTQ4Miw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFAKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVf
QVRUUklCVVRFX01BWF9MRU5HVEg6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZF
X1VOSUZPUk1TOgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNX01B
WF9MRU5HVEg6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0gPyBwcm9n
cmFtLT5vYmplY3QoKSA6IDAsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBtX2NvbnRleHQtPmdl
dFByb2dyYW1pdihFWFRSQUNUKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxsb25nPih2YWx1ZSkpOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSk7CkBAIC0xNDk0LDcgKzE0OTYsNyBAQCBTdHJpbmcgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRQcm9ncmFtCiAgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dy
YW0pKQogICAgICAgICByZXR1cm4gIiI7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMsIGZh
bHNlKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtID8g
cHJvZ3JhbS0+b2JqZWN0KCkgOiAwKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRQcm9ncmFt
SW5mb0xvZyhFWFRSQUNUKHByb2dyYW0pKTsKIH0KIAogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTE1NDAsMTQgKzE1
NDIsMTQgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UwogICAgIHN3
aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVT
OgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTOgotICAgICAgICBt
X2NvbnRleHQtPmdldFNoYWRlcml2KHNoYWRlciA/IHNoYWRlci0+b2JqZWN0KCkgOiAwLCBwbmFt
ZSwgJnZhbHVlKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihFWFRSQUNUKHNoYWRl
ciksIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19j
YXN0PGJvb2w+KHZhbHVlKSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBREVSX1RZ
UEU6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyID8gc2hhZGVyLT5vYmpl
Y3QoKSA6IDAsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2
KEVYVFJBQ1Qoc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7CiAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4odmFsdWUpKTsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpJTkZPX0xPR19MRU5HVEg6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U0hBREVSX1NPVVJDRV9MRU5HVEg6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYo
c2hhZGVyID8gc2hhZGVyLT5vYmplY3QoKSA6IDAsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBt
X2NvbnRleHQtPmdldFNoYWRlcml2KEVYVFJBQ1Qoc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7CiAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8bG9uZz4odmFsdWUpKTsKICAg
ICBkZWZhdWx0OgogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0pOwpAQCAtMTU2MSw3ICsxNTYzLDcgQEAgU3RyaW5nIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVySQogICAgIGlmICghdmFsaWRhdGVXZWJHTE9i
amVjdChzaGFkZXIpKQogICAgICAgICByZXR1cm4gIiI7CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVy
KHRoaXMsIGZhbHNlKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKHNo
YWRlciA/IHNoYWRlci0+b2JqZWN0KCkgOiAwKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRT
aGFkZXJJbmZvTG9nKEVYVFJBQ1Qoc2hhZGVyKSk7CiB9CiAKIFN0cmluZyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25D
b2RlJiBlYykKQEAgLTE1NzAsNyArMTU3Miw3IEBAIFN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFNoYWRlclMKICAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3Qoc2hhZGVyKSkKICAg
ICAgICAgcmV0dXJuICIiOwogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7Ci0g
ICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U2hhZGVyU291cmNlKHNoYWRlciA/IHNoYWRlci0+b2Jq
ZWN0KCkgOiAwKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRTaGFkZXJTb3VyY2UoRVhUUkFD
VChzaGFkZXIpKTsKIH0KIAogU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3RyaW5n
KHVuc2lnbmVkIGxvbmcgbmFtZSkKQEAgLTE2MjAsMTAgKzE2MjIsMTAgQEAgV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VQogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlz
LCBmYWxzZSk7CiAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudCB1c2luZyBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBhbmQgY2FjaGluZyB0eXBlcyBpbiBpdAogICAgIGludCBhY3Rp
dmVVbmlmb3JtcyA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3JhbSA/IHBy
b2dyYW0tPm9iamVjdCgpIDogMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywg
JmFjdGl2ZVVuaWZvcm1zKTsKKyAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihFWFRSQUNUKHBy
b2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1VOSUZPUk1TLCAmYWN0aXZlVW5pZm9y
bXMpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWN0aXZlVW5pZm9ybXM7IGkrKykgewogICAg
ICAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVV
bmlmb3JtKHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDAsIGksIGluZm8pKQorICAgICAg
ICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShFWFRSQUNUKHByb2dyYW0pLCBpLCBp
bmZvKSkKICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKICAgICAgICAgLy8gU3Ry
aXAgIlswXSIgZnJvbSB0aGUgbmFtZSBpZiBpdCdzIGFuIGFycmF5LgogICAgICAgICBpZiAoaW5m
by5zaXplID4gMSkKQEAgLTE2MzcsNyArMTYzOSw3IEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFUKICAgICAgICAgICAgICAgICBuYW1lLmFwcGVuZCgnXScpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgLy8gTm93IG5lZWQgdG8gbG9vayB0aGlzIHVwIGJ5IG5h
bWUgYWdhaW4gdG8gZmluZCBpdHMgbG9jYXRpb24KLSAgICAgICAgICAgIGxvbmcgbG9jID0gbV9j
b250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSA/IHByb2dyYW0tPm9iamVjdCgpIDog
MCwgbmFtZSk7CisgICAgICAgICAgICBsb25nIGxvYyA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxv
Y2F0aW9uKEVYVFJBQ1QocHJvZ3JhbSksIG5hbWUpOwogICAgICAgICAgICAgaWYgKGxvYyA9PSBs
b2NhdGlvbikgewogICAgICAgICAgICAgICAgIC8vIEZvdW5kIGl0LiBVc2UgdGhlIHR5cGUgaW4g
dGhlIEFjdGl2ZUluZm8gdG8gZGV0ZXJtaW5lIHRoZSByZXR1cm4gdHlwZS4KICAgICAgICAgICAg
ICAgICBHcmFwaGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSBiYXNlVHlwZTsKQEAgLTE3MTIs
MjEgKzE3MTQsMjEgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VQog
ICAgICAgICAgICAgICAgIHN3aXRjaCAoYmFzZVR5cGUpIHsKICAgICAgICAgICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogewogICAgICAgICAgICAgICAgICAgICBmbG9hdCB2
YWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9y
bWZ2KHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDAsIGxvY2F0aW9uLCB2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWZ2KEVYVFJBQ1QocHJvZ3Jh
bSksIGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT0g
MSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0p
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6
Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOiB7CiAgICAgICAgICAgICAgICAgICAgIGlu
dCB2YWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5p
Zm9ybWl2KHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDAsIGxvY2F0aW9uLCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2KEVYVFJBQ1QocHJv
Z3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGgg
PT0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGlj
X2Nhc3Q8bG9uZz4odmFsdWVbMF0pKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOiB7CiAg
ICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgICAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2KHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6
IDAsIGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
VW5pZm9ybWl2KEVYVFJBQ1QocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChsZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIGJvb2xWYWx1ZVsxNl0gPSB7MH07CiAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspCkBAIC0xNzUyLDcgKzE3NTQsNyBA
QCBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBXZWJHTFJlCiAgICAgaWYgKCF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gMDsKICAgICBXZWJHTFN0
YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwotICAgIGxvbmcgdW5pZm9ybUxvY2F0aW9uID0gbV9j
b250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSA/IHByb2dyYW0tPm9iamVjdCgpIDog
MCwgbmFtZSk7CisgICAgbG9uZyB1bmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZv
cm1Mb2NhdGlvbihFWFRSQUNUKHByb2dyYW0pLCBuYW1lKTsKICAgICBpZiAodW5pZm9ybUxvY2F0
aW9uID09IC0xKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gV2ViR0xVbmlmb3JtTG9j
YXRpb246OmNyZWF0ZShwcm9ncmFtLCB1bmlmb3JtTG9jYXRpb24pOwpAQCAtMTkxNSw3ICsxOTE3
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKAogICAgICAgICBw
cm9ncmFtLT5zZXRMaW5rRmFpbHVyZUZsYWcoZmFsc2UpOwogICAgIH0KIAotICAgIG1fY29udGV4
dC0+bGlua1Byb2dyYW0ocHJvZ3JhbSA/IHByb2dyYW0tPm9iamVjdCgpIDogMCk7CisgICAgbV9j
b250ZXh0LT5saW5rUHJvZ3JhbShFWFRSQUNUKHByb2dyYW0pKTsKICAgICBwcm9ncmFtLT5jYWNo
ZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CkBAIC0yMDYwLDcgKzIwNjIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6c2hhZGVyU291cmNlCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAoIXZhbGlkYXRl
V2ViR0xPYmplY3Qoc2hhZGVyKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c2hh
ZGVyU291cmNlKHNoYWRlciA/IHNoYWRlci0+b2JqZWN0KCkgOiAwLCBzdHJpbmcpOworICAgIG1f
Y29udGV4dC0+c2hhZGVyU291cmNlKEVYVFJBQ1Qoc2hhZGVyKSwgc3RyaW5nKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0yOTQ5LDcgKzI5NTEsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgbV9jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07Ci0gICAgbV9jb250ZXh0LT51
c2VQcm9ncmFtKHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDApOworICAgIG1fY29udGV4
dC0+dXNlUHJvZ3JhbShFWFRSQUNUKHByb2dyYW0pKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCkBAIC0yOTU4LDcgKzI5NjAsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVQcm9nCiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAo
IXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bnRleHQtPnZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtID8gcHJvZ3JhbS0+b2JqZWN0KCkgOiAwKTsK
KyAgICBtX2NvbnRleHQtPnZhbGlkYXRlUHJvZ3JhbShFWFRSQUNUKHByb2dyYW0pKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0zMjYxLDkgKzMyNjMsOSBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFuZGxlTlBPVFRlCiAgICAgICAgICAgICAg
ICAgdGV4Q3ViZU1hcCA9IG1fdGV4dHVyZVVuaXRzW2lpXS5tX3RleHR1cmVDdWJlTWFwQmluZGlu
Zy5nZXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tp
aV0ubV90ZXh0dXJlMkRCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS5tX3RleHR1cmUyREJp
bmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZSgpKQotICAgICAgICAgICAgICAgIG1fY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleDJELT5vYmpl
Y3QoKSk7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgRVhUUkFDVCh0ZXgyRCkpOwogICAgICAgICAgICAgaWYgKG1f
dGV4dHVyZVVuaXRzW2lpXS5tX3RleHR1cmVDdWJlTWFwQmluZGluZyAmJiBtX3RleHR1cmVVbml0
c1tpaV0ubV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZSgpKQot
ICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVAsIHRleEN1YmVNYXAtPm9iamVjdCgpKTsKKyAgICAgICAgICAgICAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQLCBFWFRSQUNUKHRleEN1YmVNYXApKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAocmVz
ZXRBY3RpdmVVbml0KQpAQCAtMzc4MywxMCArMzc4NSwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cmVzdG9yZVN0YXRlCiB7CiAgICAgY29uc3QgVmVydGV4QXR0cmliU3RhdGUmIHN0
YXRlID0gbV92ZXJ0ZXhBdHRyaWJTdGF0ZVswXTsKICAgICBpZiAoc3RhdGUuYnVmZmVyQmluZGlu
ZyAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHN0YXRlLmJ1ZmZlckJpbmRpbmct
Pm9iamVjdCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpBUlJBWV9CVUZGRVIsIEVYVFJBQ1Qoc3RhdGUuYnVmZmVyQmluZGluZy5nZXQoKSkpOwog
ICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgc3RhdGUuc2l6ZSwgc3Rh
dGUudHlwZSwgc3RhdGUubm9ybWFsaXplZCwgc3RhdGUub3JpZ2luYWxTdHJpZGUsIHN0YXRlLm9m
ZnNldCk7CiAgICAgfQotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6QVJSQVlfQlVGRkVSLCBtX2JvdW5kQXJyYXlCdWZmZXItPm9iamVjdCgpKTsKKyAgICBtX2Nv
bnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgRVhUUkFD
VChtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQo=
</data>
<flag name="commit-queue"
          id="51746"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63466</attachid>
            <date>2010-08-04 10:34:13 -0700</date>
            <delta_ts>2010-08-04 11:26:10 -0700</delta_ts>
            <desc>Patch introducing objectOrZero helper function</desc>
            <filename>extract.patch</filename>
            <type>text/plain</type>
            <size>18308</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDY1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDUgQEAKKzIwMTAtMDgtMDMgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
dmUgV2ViR0wtc3BlY2lmaWMgY29kZSBvdXQgb2YgR3JhcGhpY3NDb250ZXh0M0Qgc28gdGhhdCBH
M0QgY2FuIGJlIHVzZWQgYXMgYSBnZW5lcmljIGFjY2VsZXJhdGVkIGRyYXdpbmcgQVBJCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzIyMQorCisgICAg
ICAgIEFkZGVkIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIGNvbnRlbnRzIG9mIFdl
YkdMIG9iamVjdHMKKyAgICAgICAgdG8gcmVkdWNlIGR1cGxpY2F0ZWQgY29kZSBhbmQgZml4IGEg
Y291cGxlIG9mIHBvdGVudGlhbCBjcmFzaGVzCisgICAgICAgIGludHJvZHVjZWQgaW4gdGhlIHBy
ZXZpb3VzIHJlZmFjdG9yaW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0czsgcmFuIGV4aXN0aW5n
IFdlYkdMIHRlc3RzLgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNo
U2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0
dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJp
bmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmJpbmRSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hhZGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFt
ZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dy
YW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
U2hhZGVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVzZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpoYW5kbGVOUE9UVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxh
dGlvbik6CisKIDIwMTAtMDgtMDQgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDY0NjU0
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw2ICs1NywxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0
YXRpYyBpbmxpbmUgUGxhdGZvcm0zRE9iamVjdCBvYmplY3RPclplcm8oQ2FudmFzT2JqZWN0KiBv
YmplY3QpCit7CisgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOworfQor
CiBjbGFzcyBXZWJHTFN0YXRlUmVzdG9yZXIgewogcHVibGljOgogICAgIFdlYkdMU3RhdGVSZXN0
b3JlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQsCkBAIC0yMjAsNyArMjI1LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRlcgogICAgIFVOVVNFRF9QQVJB
TShlYyk7CiAgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pIHx8ICF2YWxpZGF0
ZVdlYkdMT2JqZWN0KHNoYWRlcikpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmF0
dGFjaFNoYWRlcihwcm9ncmFtID8gcHJvZ3JhbS0+b2JqZWN0KCkgOiAwLCBzaGFkZXIgPyBzaGFk
ZXItPm9iamVjdCgpIDogMCk7CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBvYmplY3RPclplcm8oc2hhZGVyKSk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMjI5LDcgKzIzNCw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG8KICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlm
ICghdmFsaWRhdGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1f
Y29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6
IDAsIGluZGV4LCBuYW1lKTsKKyAgICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihvYmpl
Y3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCkBAIC0yNTQsNyArMjU5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJpbmRCdWZmZXIodQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9j
b250ZXh0LT5iaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyID8gYnVmZmVyLT5vYmplY3QoKSA6IDAp
OworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIp
KTsKICAgICBpZiAoYnVmZmVyKQogICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CkBAIC0yNzMsNyArMjc4LDcgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZgogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAgIG1fY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgYnVmZmVyID8gYnVmZmVyLT5vYmplY3QoKSA6IDAp
OworICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1
ZmZlcikpOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKICAgICAgICAgbV9mcmFtZWJ1
ZmZlckJpbmRpbmctPm9uQmluZCgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CkBAIC0yOTEsNyArMjk2LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRS
ZW5kZXJidQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fcmVuZGVyYnVmZmVyQmluZGlu
ZyA9IHJlbmRlckJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0
LCByZW5kZXJCdWZmZXIgPyByZW5kZXJCdWZmZXItPm9iamVjdCgpIDogMCk7CisgICAgbV9jb250
ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKHJlbmRlckJ1ZmZlcikp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTMxNCw3ICsz
MTksNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUoCiAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVy
ZSh0YXJnZXQsIHRleHR1cmUgPyB0ZXh0dXJlLT5vYmplY3QoKSA6IDApOworICAgIG1fY29udGV4
dC0+YmluZFRleHR1cmUodGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSkpOwogICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpICYmIHRleHR1cmUpCiAgICAgICAgIHRleHR1cmUtPnNldFRhcmdl
dCh0YXJnZXQsIG1heExldmVsKTsKIApAQCAtNTE2LDcgKzUyMSw3IEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb21waWxlU2hhZGUKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlm
ICghdmFsaWRhdGVXZWJHTE9iamVjdChzaGFkZXIpKQogICAgICAgICByZXR1cm47Ci0gICAgbV9j
b250ZXh0LT5jb21waWxlU2hhZGVyKHNoYWRlciA/IHNoYWRlci0+b2JqZWN0KCkgOiAwKTsKKyAg
ICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIob2JqZWN0T3JaZXJvKHNoYWRlcikpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTcwNiw3ICs3MTEsNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyCiAgICAgVU5VU0VEX1BBUkFN
KGVjKTsKICAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QocHJvZ3JhbSkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3Qoc2hhZGVyKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZGV0
YWNoU2hhZGVyKHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDAsIHNoYWRlciA/IHNoYWRl
ci0+b2JqZWN0KCkgOiAwKTsKKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihvYmplY3RPclpl
cm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xMDc1LDcgKzEwODAsNyBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICB9Ci0gICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyID8gYnVmZmVyLT5vYmplY3Qo
KSA6IDApOworICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBh
dHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKICAg
ICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudChhdHRhY2htZW50LCBidWZmZXIp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0xMTAwLDcgKzEx
MDUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUCiAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2NvbnRleHQtPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlID8g
dGV4dHVyZS0+b2JqZWN0KCkgOiAwLCBsZXZlbCk7CisgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZl
clRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgb2JqZWN0T3JaZXJvKHRl
eHR1cmUpLCBsZXZlbCk7CiAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnQo
YXR0YWNobWVudCwgdGV4dHVyZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KQEAgLTExMzgsNyArMTE0Myw3IEBAIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBX
ZWJHTFJlbmRlcmkKICAgICBBY3RpdmVJbmZvIGluZm87CiAgICAgaWYgKCF2YWxpZGF0ZVdlYkdM
T2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIW1fY29udGV4dC0+
Z2V0QWN0aXZlQXR0cmliKHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDAsIGluZGV4LCBp
bmZvKSkgeworICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0T3JaZXJv
KHByb2dyYW0pLCBpbmRleCwgaW5mbykpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAg
IHJldHVybiBXZWJHTEFjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5m
by5zaXplKTsKQEAgLTExNTAsNyArMTE1NSw3IEBAIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZv
PiBXZWJHTFJlbmRlcmkKICAgICBBY3RpdmVJbmZvIGluZm87CiAgICAgaWYgKCF2YWxpZGF0ZVdl
YkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIW1fY29udGV4
dC0+Z2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtID8gcHJvZ3JhbS0+b2JqZWN0KCkgOiAwLCBpbmRl
eCwgaW5mbykpIHsKKyAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RP
clplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKQEAgLTExNjcsMTEgKzExNzIsMTEgQEAg
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkUwogICAgIGlmICghdmFsaWRh
dGVXZWJHTE9iamVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGludCBu
dW1TaGFkZXJzID0gMDsKLSAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihwcm9ncmFtID8gcHJv
Z3JhbS0+b2JqZWN0KCkgOiAwLCBHcmFwaGljc0NvbnRleHQzRDo6QVRUQUNIRURfU0hBREVSUywg
Jm51bVNoYWRlcnMpOworICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFUVEFDSEVEX1NIQURFUlMsICZudW1TaGFkZXJz
KTsKICAgICBpZiAobnVtU2hhZGVycykgewogICAgICAgICBPd25BcnJheVB0cjx1bnNpZ25lZCBp
bnQ+IHNoYWRlcnMobmV3IHVuc2lnbmVkIGludFtudW1TaGFkZXJzXSk7CiAgICAgICAgIGludCBj
b3VudDsKLSAgICAgICAgbV9jb250ZXh0LT5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSA/IHBy
b2dyYW0tPm9iamVjdCgpIDogMCwgbnVtU2hhZGVycywgJmNvdW50LCBzaGFkZXJzLmdldCgpKTsK
KyAgICAgICAgbV9jb250ZXh0LT5nZXRBdHRhY2hlZFNoYWRlcnMob2JqZWN0T3JaZXJvKHByb2dy
YW0pLCBudW1TaGFkZXJzLCAmY291bnQsIHNoYWRlcnMuZ2V0KCkpOwogICAgICAgICBpZiAoY291
bnQgIT0gbnVtU2hhZGVycykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgc2hh
ZGVyT2JqZWN0cy5yZXNpemUobnVtU2hhZGVycyk7CkBAIC0xMTg5LDcgKzExOTQsNyBAQCBib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTCiAKIGludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQogewotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDAsIG5hbWUpOworICAgIHJldHVybiBtX2Nv
bnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7CiB9
CiAKIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRl
cih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCkBAIC0xNDY3LDEyICsxNDcyLDEyIEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFAKICAgICBzd2l0Y2ggKHBuYW1lKSB7CiAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVMRVRFX1NUQVRVUzoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWQUxJ
REFURV9TVEFUVVM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0gPyBw
cm9ncmFtLT5vYmplY3QoKSA6IDAsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBtX2NvbnRleHQt
PmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwogICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7CiAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVM6CiAgICAgICAgIGlmIChwcm9ncmFt
LT5pc0xpbmtGYWlsdXJlRmxhZ1NldCgpKQogICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhmYWxzZSk7Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0gPyBwcm9n
cmFtLT5vYmplY3QoKSA6IDAsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBtX2NvbnRleHQtPmdl
dFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwogICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7CiAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6SU5GT19MT0dfTEVOR1RIOgogICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkFUVEFDSEVEX1NIQURFUlM6CkBAIC0xNDgwLDcgKzE0ODUsNyBAQCBXZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQCiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIOgogICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFDVElWRV9VTklGT1JNUzoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJ
VkVfVU5JRk9STV9NQVhfTEVOR1RIOgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihw
cm9ncmFtID8gcHJvZ3JhbS0+b2JqZWN0KCkgOiAwLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAg
bV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZh
bHVlKTsKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxsb25nPih2YWx1
ZSkpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CkBAIC0xNDk0LDcgKzE0OTksNyBAQCBT
dHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtCiAgICAgaWYgKCF2YWxpZGF0
ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICByZXR1cm4gIiI7CiAgICAgV2ViR0xTdGF0
ZVJlc3RvcmVyKHRoaXMsIGZhbHNlKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRQcm9ncmFt
SW5mb0xvZyhwcm9ncmFtID8gcHJvZ3JhbS0+b2JqZWN0KCkgOiAwKTsKKyAgICByZXR1cm4gbV9j
b250ZXh0LT5nZXRQcm9ncmFtSW5mb0xvZyhvYmplY3RPclplcm8ocHJvZ3JhbSkpOwogfQogCiBX
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtMTU0MCwxNCArMTU0NSwxNCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRTCiAgICAgc3dpdGNoIChwbmFtZSkgewogICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFTEVURV9TVEFUVVM6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09N
UElMRV9TVEFUVVM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyID8gc2hh
ZGVyLT5vYmplY3QoKSA6IDAsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBtX2NvbnRleHQtPmdl
dFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOwogICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFOgotICAgICAgICBtX2NvbnRleHQtPmdldFNo
YWRlcml2KHNoYWRlciA/IHNoYWRlci0+b2JqZWN0KCkgOiAwLCBwbmFtZSwgJnZhbHVlKTsKKyAg
ICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUs
ICZ2YWx1ZSk7CiAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZz4odmFsdWUpKTsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTkZPX0xPR19M
RU5HVEg6CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBREVSX1NPVVJDRV9MRU5HVEg6
Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYoc2hhZGVyID8gc2hhZGVyLT5vYmplY3Qo
KSA6IDAsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9i
amVjdE9yWmVybyhzaGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhzdGF0aWNfY2FzdDxsb25nPih2YWx1ZSkpOwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSk7CkBAIC0xNTYxLDcgKzE1NjYsNyBAQCBTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRTaGFkZXJJCiAgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCiAgICAg
ICAgIHJldHVybiAiIjsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwotICAg
IHJldHVybiBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2coc2hhZGVyID8gc2hhZGVyLT5vYmpl
Y3QoKSA6IDApOworICAgIHJldHVybiBtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0
T3JaZXJvKHNoYWRlcikpOwogfQogCiBTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRT
aGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0x
NTcwLDcgKzE1NzUsNyBAQCBTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJT
CiAgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCiAgICAgICAgIHJldHVybiAi
IjsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwotICAgIHJldHVybiBtX2Nv
bnRleHQtPmdldFNoYWRlclNvdXJjZShzaGFkZXIgPyBzaGFkZXItPm9iamVjdCgpIDogMCk7Cisg
ICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U2hhZGVyU291cmNlKG9iamVjdE9yWmVybyhzaGFkZXIp
KTsKIH0KIAogU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3RyaW5nKHVuc2lnbmVk
IGxvbmcgbmFtZSkKQEAgLTE2MjAsMTAgKzE2MjUsMTAgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0VQogICAgIFdlYkdMU3RhdGVSZXN0b3Jlcih0aGlzLCBmYWxzZSk7
CiAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudCB1c2luZyBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBhbmQgY2FjaGluZyB0eXBlcyBpbiBpdAogICAgIGludCBhY3RpdmVVbmlmb3Jt
cyA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3JhbSA/IHByb2dyYW0tPm9i
amVjdCgpIDogMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVu
aWZvcm1zKTsKKyAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3Jh
bSksIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3JtczsgaSsrKSB7CiAgICAgICAg
IEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZv
cm0ocHJvZ3JhbSA/IHByb2dyYW0tPm9iamVjdCgpIDogMCwgaSwgaW5mbykpCisgICAgICAgIGlm
ICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaSwg
aW5mbykpCiAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CiAgICAgICAgIC8vIFN0
cmlwICJbMF0iIGZyb20gdGhlIG5hbWUgaWYgaXQncyBhbiBhcnJheS4KICAgICAgICAgaWYgKGlu
Zm8uc2l6ZSA+IDEpCkBAIC0xNjM3LDcgKzE2NDIsNyBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRVCiAgICAgICAgICAgICAgICAgbmFtZS5hcHBlbmQoJ10nKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIE5vdyBuZWVkIHRvIGxvb2sgdGhpcyB1cCBieSBu
YW1lIGFnYWluIHRvIGZpbmQgaXRzIGxvY2F0aW9uCi0gICAgICAgICAgICBsb25nIGxvYyA9IG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6
IDAsIG5hbWUpOworICAgICAgICAgICAgbG9uZyBsb2MgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1M
b2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwogICAgICAgICAgICAgaWYgKGxv
YyA9PSBsb2NhdGlvbikgewogICAgICAgICAgICAgICAgIC8vIEZvdW5kIGl0LiBVc2UgdGhlIHR5
cGUgaW4gdGhlIEFjdGl2ZUluZm8gdG8gZGV0ZXJtaW5lIHRoZSByZXR1cm4gdHlwZS4KICAgICAg
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSBiYXNlVHlwZTsKQEAg
LTE3MTIsMjEgKzE3MTcsMjEgQEAgV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0VQogICAgICAgICAgICAgICAgIHN3aXRjaCAoYmFzZVR5cGUpIHsKICAgICAgICAgICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogewogICAgICAgICAgICAgICAgICAgICBm
bG9hdCB2YWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
VW5pZm9ybWZ2KHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDAsIGxvY2F0aW9uLCB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWZ2KG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KGxlbmd0aCA9PSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byh2YWx1ZVswXSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxv
YXQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6IHsKICAgICAgICAgICAg
ICAgICAgICAgaW50IHZhbHVlWzE2XSA9IHswfTsKLSAgICAgICAgICAgICAgICAgICAgbV9jb250
ZXh0LT5nZXRVbmlmb3JtaXYocHJvZ3JhbSA/IHByb2dyYW0tPm9iamVjdCgpIDogMCwgbG9jYXRp
b24sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYo
b2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAobGVuZ3RoID09IDEpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRpY19jYXN0PGxvbmc+KHZhbHVlWzBdKSk7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Qk9PTDogewogICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWVbMTZdID0gezB9Owot
ICAgICAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihwcm9ncmFtID8gcHJv
Z3JhbS0+b2JqZWN0KCkgOiAwLCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9u
LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPiAxKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJvb2xWYWx1ZVsxNl0gPSB7MH07CiAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKysp
CkBAIC0xNzUyLDcgKzE3NTcsNyBAQCBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBX
ZWJHTFJlCiAgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHByb2dyYW0pKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICBXZWJHTFN0YXRlUmVzdG9yZXIodGhpcywgZmFsc2UpOwotICAgIGxvbmcg
dW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSA/
IHByb2dyYW0tPm9iamVjdCgpIDogMCwgbmFtZSk7CisgICAgbG9uZyB1bmlmb3JtTG9jYXRpb24g
PSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5h
bWUpOwogICAgIGlmICh1bmlmb3JtTG9jYXRpb24gPT0gLTEpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6Y3JlYXRlKHByb2dyYW0sIHVuaWZvcm1M
b2NhdGlvbik7CkBAIC0xOTE1LDcgKzE5MjAsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6bGlua1Byb2dyYW0oCiAgICAgICAgIHByb2dyYW0tPnNldExpbmtGYWlsdXJlRmxhZyhmYWxz
ZSk7CiAgICAgfQogCi0gICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFtID8gcHJvZ3Jh
bS0+b2JqZWN0KCkgOiAwKTsKKyAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKG9iamVjdE9yWmVy
byhwcm9ncmFtKSk7CiAgICAgcHJvZ3JhbS0+Y2FjaGVBY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQpAQCAtMjA2MCw3ICsyMDY1
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZQogICAgIFVOVVNF
RF9QQVJBTShlYyk7CiAgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KHNoYWRlcikpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShzaGFkZXIgPyBzaGFkZXIt
Pm9iamVjdCgpIDogMCwgc3RyaW5nKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShvYmpl
Y3RPclplcm8oc2hhZGVyKSwgc3RyaW5nKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCkBAIC0yOTQ5LDcgKzI5NTQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dXNlUHJvZ3JhbShXCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9jdXJyZW50
UHJvZ3JhbSA9IHByb2dyYW07Ci0gICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0gPyBw
cm9ncmFtLT5vYmplY3QoKSA6IDApOworICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShvYmplY3RP
clplcm8ocHJvZ3JhbSkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKQEAgLTI5NTgsNyArMjk2Myw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVByb2cKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlmICghdmFsaWRhdGVXZWJHTE9i
amVjdChwcm9ncmFtKSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dmFsaWRhdGVQ
cm9ncmFtKHByb2dyYW0gPyBwcm9ncmFtLT5vYmplY3QoKSA6IDApOworICAgIG1fY29udGV4dC0+
dmFsaWRhdGVQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMzI2MSw5ICszMjY2LDkgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmhhbmRsZU5QT1RUZQogICAgICAgICAgICAgICAgIHRleEN1YmVN
YXAgPSBtX3RleHR1cmVVbml0c1tpaV0ubV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVy
ZTJEQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0ubV90ZXh0dXJlMkRCaW5kaW5nLT5uZWVk
VG9Vc2VCbGFja1RleHR1cmUoKSkKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXgyRC0+b2JqZWN0KCkpOworICAg
ICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXgyRCkpOwogICAgICAgICAgICAgaWYgKG1fdGV4dHVy
ZVVuaXRzW2lpXS5tX3RleHR1cmVDdWJlTWFwQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0u
bV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZSgpKQotICAgICAg
ICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVAsIHRleEN1YmVNYXAtPm9iamVjdCgpKTsKKyAgICAgICAgICAgICAgICBtX2Nv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBv
YmplY3RPclplcm8odGV4Q3ViZU1hcCkpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChyZXNl
dEFjdGl2ZVVuaXQpCkBAIC0zNzgzLDEwICszNzg4LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZXN0b3JlU3RhdGUKIHsKICAgICBjb25zdCBWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3Rh
dGUgPSBtX3ZlcnRleEF0dHJpYlN0YXRlWzBdOwogICAgIGlmIChzdGF0ZS5idWZmZXJCaW5kaW5n
ICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc3RhdGUuYnVmZmVyQmluZGluZy0+
b2JqZWN0KCkpOworICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0KCkp
KTsKICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUs
IHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6ZWQsIHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBzdGF0
ZS5vZmZzZXQpOwogICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9ib3VuZEFycmF5QnVmZmVyLT5vYmplY3QoKSk7CisgICAg
bV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG9i
amVjdE9yWmVybyhtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCkpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="51824"
          type_id="1"
          status="+"
          setter="japhet"
    />
    <flag name="commit-queue"
          id="51825"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>