<?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>106508</bug_id>
          
          <creation_ts>2013-01-09 17:12:17 -0800</creation_ts>
          <short_desc>[EFL] [WebGL] Add support for bliting texture contents to FBO.</short_desc>
          <delta_ts>2013-02-25 00:59:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>109988</dependson>
    
    <dependson>110616</dependson>
          <blocked>105659</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kalyan">kalyan.kondapally</reporter>
          <assigned_to name="Kalyan">kalyan.kondapally</assigned_to>
          <cc>dino</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>noam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>803853</commentid>
    <comment_count>0</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-01-09 17:12:17 -0800</bug_when>
    <thetext>We currently rely on EXT_framebuffer_blit to copy contents from one FBO to another. This extension is not exposed on GLES1.1 or 2.0. ANGLE_framebuffer_blit seems to provide similar interactions. I am not sure how well it is supported.

Does Angle included as part of WebKit include support for the extension ??
 
One possibility is to use this extension when available and provide a fall back mechanism.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803858</commentid>
    <comment_count>1</comment_count>
      <attachid>182022</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-01-09 17:14:32 -0800</bug_when>
    <thetext>Created attachment 182022
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>803867</commentid>
    <comment_count>2</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-01-09 17:22:01 -0800</bug_when>
    <thetext>Initial Approach:

what the patch does is basically check for the availability of the blit extension. If the extension is unavailable it falls back to use shaders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806225</commentid>
    <comment_count>3</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2013-01-14 03:50:31 -0800</bug_when>
    <thetext>It seems the WIP patch is mostly based on what GraphicsSurfaceWin does. Do you think it would be possible to adopt this code instead of duplicating it?
If it is just about naming, we could probably rename it to GraphicsSurfaceEGL or similar. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806238</commentid>
    <comment_count>4</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-01-14 04:18:19 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; It seems the WIP patch is mostly based on what GraphicsSurfaceWin does. Do you think it would be possible to adopt this code instead of duplicating it?
&gt; If it is just about naming, we could probably rename it to GraphicsSurfaceEGL or similar. ;)

It does do something similar to what is done in GraphicsSurfaceWin. I would be more than happy to get the common elements (copytexture parts out) and create something common to be used by all surface implementations. 

I can get rid of the Angle part from this patch. 

some differences:
1)This patch tries to make use of OES_vertex_array_object if supported.
2)Take Sampler objects into use(if supported).
3)Save and restore previous VBO state, program etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806479</commentid>
    <comment_count>5</comment_count>
      <attachid>182603</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-01-14 11:12:37 -0800</bug_when>
    <thetext>Created attachment 182603
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819312</commentid>
    <comment_count>6</comment_count>
      <attachid>185304</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-01-29 14:08:06 -0800</bug_when>
    <thetext>Created attachment 185304
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828546</commentid>
    <comment_count>7</comment_count>
      <attachid>187316</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-08 07:15:46 -0800</bug_when>
    <thetext>Created attachment 187316
WIP

Trying to use TextureMapperGL to achieve the same. Doesn&apos;t work yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829028</commentid>
    <comment_count>8</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-09 08:03:26 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=187316) [details]
&gt; WIP
&gt; 
&gt; Trying to use TextureMapperGL to achieve the same. Doesn&apos;t work yet

k, having it working now. Issue with TextureMapperGL is that it doesn&apos;t keep track of  vertex array object. This was k as on it was mostly used in UI process. With WebGL apps this is needed, we could do this in our side so it doesn&apos;t add any overhead for other use cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829058</commentid>
    <comment_count>9</comment_count>
      <attachid>187435</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-09 10:13:54 -0800</bug_when>
    <thetext>Created attachment 187435
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829063</commentid>
    <comment_count>10</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-09 10:22:27 -0800</bug_when>
    <thetext>Made changes to use TextureMapperGL to draw texture content to surface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829267</commentid>
    <comment_count>11</comment_count>
      <attachid>187475</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-10 04:12:17 -0800</bug_when>
    <thetext>Created attachment 187475
patchv2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829290</commentid>
    <comment_count>12</comment_count>
      <attachid>187480</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-10 07:09:01 -0800</bug_when>
    <thetext>Created attachment 187480
patchv3

minor cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829291</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-10 07:12:07 -0800</bug_when>
    <thetext>Attachment 187480 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/graphics/efl/GraphicsContext3DPrivate.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GLPlatformSurface.cpp&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GLPlatformSurface.h&apos;]&quot; exit_code: 1
Source/WebCore/platform/graphics/opengl/GLPlatformSurface.cpp:72:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829301</commentid>
    <comment_count>14</comment_count>
      <attachid>187483</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-10 09:19:46 -0800</bug_when>
    <thetext>Created attachment 187483
patchv4

style fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829316</commentid>
    <comment_count>15</comment_count>
      <attachid>187483</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-02-10 10:34:49 -0800</bug_when>
    <thetext>Comment on attachment 187483
patchv4

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

&gt; Source/WebCore/platform/graphics/opengl/GLPlatformSurface.cpp:167
&gt; +    // Save any current bound vertex array to restore after updating surface with texture content.
&gt; +    // This is needed as TextureMapperGL doesn&apos;t track and restore current bound vertex array.
&gt; +    ScopedStateSaver stateSaver;
&gt; +    ::glBindFramebuffer(GL_FRAMEBUFFER, 0);
&gt; +    ::glColorMask(true, true, true, true);
&gt; +    m_textureBlitter-&gt;beginPainting();
&gt; +    m_textureBlitter-&gt;drawTexture(texture, m_flags, textureSize, m_rect, m_identityMatrix, 1.0, 0);
&gt; +    m_textureBlitter-&gt;endPainting();

This looks flaky.
TextureMapperGL may change other attributes in the future and this would break.
Why not use TextureMapperShaderProgram directly? That class has a more deterministic API than TMGL.

&gt; Source/WebCore/platform/graphics/opengl/GLPlatformSurface.cpp:169
&gt; +    ::glFlush();

You probably don&apos;t want to flush with every frame...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829332</commentid>
    <comment_count>16</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-10 12:26:32 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 187483 [details])
&gt; TextureMapperGL may change other attributes in the future and this would break.
&gt; Why not use TextureMapperShaderProgram directly? That class has a more deterministic API than TMGL.

Good point. Will try to do that.

&gt; &gt; Source/WebCore/platform/graphics/opengl/GLPlatformSurface.cpp:169
&gt; &gt; +    ::glFlush();
&gt; 
&gt; You probably don&apos;t want to flush with every frame...

It is needed for certain backends. (I.e using EGL and EGLImage). I do agree, this might not be the right place for it as on GLX you don&apos;t need to do this. I will get rid of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830344</commentid>
    <comment_count>17</comment_count>
      <attachid>187728</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-11 17:00:04 -0800</bug_when>
    <thetext>Created attachment 187728
patchv5

Removes dependency on TextureMapperGL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831780</commentid>
    <comment_count>18</comment_count>
      <attachid>187728</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2013-02-13 03:35:54 -0800</bug_when>
    <thetext>Comment on attachment 187728
patchv5

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

&gt; Source/WebCore/platform/graphics/opengl/GLPlatformSurface.cpp:73
&gt; +class GLStateTracker {

I am somewhat skeptical to the concept of tracking gl states. How do you make sure that you track all the necessary states?
Or in other words, how do you know that there is nothing else you have to save and restore?
I know we have different concepts here between EFL and Qt. So just to make it clear, I am not objecting... just raising a concern, that might need to be adressed in future.

&gt; Source/WebCore/platform/graphics/opengl/GLPlatformSurface.cpp:234
&gt; +    else

I would remove the &quot;else&quot; here.
It seems not logical to have a conditional push() but a non-conditional pop(). But i see that it would not matter in case m_shaderProgram has not been initialized before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831804</commentid>
    <comment_count>19</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-13 04:24:15 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 187728 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=187728&amp;action=review
&gt; I know we have different concepts here between EFL and Qt. So just to make it clear, I am not objecting... just raising a concern, that might need to be adressed in future.

We only track things which we manipulate on our side(i.e disable blend, depth, vbo etc) and not everything. I do agree that it might not be needed with a shared context in place. Support for that is not yet there, we can get rid of state tracking once we have it in place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834688</commentid>
    <comment_count>20</comment_count>
      <attachid>187728</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-02-16 03:01:50 -0800</bug_when>
    <thetext>Comment on attachment 187728
patchv5

Removing request for review till 109988 is done.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182022</attachid>
            <date>2013-01-09 17:14:32 -0800</date>
            <delta_ts>2013-01-14 11:12:37 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>textureblitter.patch</filename>
            <type>text/plain</type>
            <size>30938</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0
Zm9ybVN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
TFBsYXRmb3JtU3VyZmFjZS5jcHAKaW5kZXggN2Y3YTU2NC4uMGQ5MjZlMCAxMDA2NDQKLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5j
cHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3Jt
U3VyZmFjZS5jcHAKQEAgLTcwLDExICs3MCwxMSBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJm
YWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpCiAKIEdMUGxh
dGZvcm1TdXJmYWNlOjpHTFBsYXRmb3JtU3VyZmFjZSgpCiAgICAgOiBtX3Jlc3RvcmVOZWVkZWQo
dHJ1ZSkKLSAgICAsIG1fZmJvSWQoMCkKICAgICAsIG1fc2hhcmVkRGlzcGxheSgwKQogICAgICwg
bV9kcmF3YWJsZSgwKQogICAgICwgbV9idWZmZXJIYW5kbGUoMCkKIHsKKyAgICBtX2JsaXR0ZXIg
PSBUZXh0dXJlQmxpdHRlcjo6Y3JlYXRlKCk7CiB9CiAKIEdMUGxhdGZvcm1TdXJmYWNlOjp+R0xQ
bGF0Zm9ybVN1cmZhY2UoKQpAQCAtMTEzLDI0ICsxMTMsMTIgQEAgdm9pZCBHTFBsYXRmb3JtU3Vy
ZmFjZTo6c3dhcEJ1ZmZlcnMoKQogCiB2b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjp1cGRhdGVDb250
ZW50cyhjb25zdCB1aW50MzJfdCB0ZXh0dXJlLCBjb25zdCBHTHVpbnQgYmluZEZib0lkLCBjb25z
dCB1aW50MzJfdCBiaW5kVGV4dHVyZSkKIHsKLSAgICBpZiAoIW1fZmJvSWQpCi0gICAgICAgIGds
R2VuRnJhbWVidWZmZXJzKDEsICZtX2Zib0lkKTsKKyAgICBpZiAoIW1fYmxpdHRlcikKKyAgICAg
ICAgcmV0dXJuOwogCiAgICAgbV9yZXN0b3JlTmVlZGVkID0gZmFsc2U7Ci0KLSAgICBpbnQgeCA9
IDA7Ci0gICAgaW50IHkgPSAwOwotICAgIGludCB3aWR0aCA9IG1fcmVjdC53aWR0aCgpOwotICAg
IGludCBoZWlnaHQgPSBtX3JlY3QuaGVpZ2h0KCk7Ci0KLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9SRUFEX0ZSQU1FQlVGRkVSLCBtX2Zib0lkKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIHRleHR1cmUpOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFN
RUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHRleHR1cmUsIDAp
OwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVIsIDApOwotICAgIC8v
IFVzZSBORUFSRVNUIGFzIG5vIHNjYWxlIGlzIHBlcmZvcm1lZCBkdXJpbmcgdGhlIGJsaXQuCi0g
ICAgZ2xCbGl0RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTkVBUkVTVCk7CisgICAgbV9ibGl0dGVyLT5k
cmF3VGV4dHVyZSh0ZXh0dXJlLCAwLCBtX3JlY3QsIG1fcmVjdCk7CiAgICAgc3dhcEJ1ZmZlcnMo
KTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NP
TE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCAwLCAwKTsKICAgICBnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIGJpbmRUZXh0dXJlKTsKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgYmluZEZib0lkKTsKIH0KQEAgLTE0MywxMSArMTMxLDcgQEAgdm9pZCBHTFBs
YXRmb3JtU3VyZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKIHZvaWQg
R0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKQogewogICAgIG1fcmVjdCA9IEludFJlY3QoKTsK
LQotICAgIGlmIChtX2Zib0lkKQotICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9m
Ym9JZCk7Ci0KLSAgICBtX2Zib0lkID0gMDsKKyAgICBtX2JsaXR0ZXIgPSBudWxscHRyOwogfQog
CiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dM
UGxhdGZvcm1TdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dMUGxhdGZvcm1TdXJmYWNlLmgKaW5kZXggZThkYjQyNS4uMTk3Yjc5MSAxMDA2NDQKLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5o
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1
cmZhY2UuaApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiR0xEZWZzLmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHRleG1hcC9UZXh0dXJlQmxpdHRlci5oPgogI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKQEAg
LTc4LDEwICs3OSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2UoKTsKICAg
ICBib29sIG1fcmVzdG9yZU5lZWRlZDsKICAgICBJbnRSZWN0IG1fcmVjdDsKLSAgICBHTHVpbnQg
bV9mYm9JZDsKICAgICBQbGF0Zm9ybURpc3BsYXkgbV9zaGFyZWREaXNwbGF5OwogICAgIFBsYXRm
b3JtRHJhd2FibGUgbV9kcmF3YWJsZTsKICAgICBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSBtX2J1ZmZl
ckhhbmRsZTsKKyAgICBSZWZQdHI8VGV4dHVyZUJsaXR0ZXI+IG1fYmxpdHRlcjsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wv
RUdMU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTFN1cmZhY2UuY3BwCmluZGV4IDk5MmIzYTYuLmUzOTBlMTYgMTAwNjQ0Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJm
YWNlLmNwcApAQCAtMTA4LDYgKzEwOCw3IEBAIHZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFj
ZTo6c3dhcEJ1ZmZlcnMoKQogCiB2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRlc3Ry
b3koKQogeworICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCk7CiAgICAgbV9uYXRpdmVS
ZXNvdXJjZS0+ZGVzdHJveVdpbmRvdyhtX2J1ZmZlckhhbmRsZSk7CiAgICAgZnJlZUVHTFJlc291
cmNlcygpOwogICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBudWxscHRyOwpkaWZmIC0tZ2l0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5j
cHAKaW5kZXggZjUwMjM1Ny4uMDdlZmNmMCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCkBAIC03NSw2
ICs3NSw3IEBAIHZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50
UmVjdCYgbmV3UmVjdCkKIHsKICAgICBHTFBsYXRmb3JtU3VyZmFjZTo6c2V0R2VvbWV0cnkobmV3
UmVjdCk7CiAgICAgbV9uYXRpdmVSZXNvdXJjZS0+cmVTaXplV2luZG93KG5ld1JlY3QsIG1fZHJh
d2FibGUpOworCiAgICAgLy8gRm9yY2UgcmVzaXplIG9mIEdMIHN1cmZhY2UgYWZ0ZXIgd2luZG93
IHJlc2l6ZS4KICAgICBnbFhTd2FwQnVmZmVycyhzaGFyZWREaXNwbGF5KCksIG1fZHJhd2FibGUp
OwogfQpAQCAtOTYsNiArOTcsOCBAQCB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZm
ZXJzKCkKIAogdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCkKIHsKKyAgICBHTFBs
YXRmb3JtU3VyZmFjZTo6ZGVzdHJveSgpOworCiAgICAgaWYgKG1fYnVmZmVySGFuZGxlKSB7CiAg
ICAgICAgIG1fbmF0aXZlUmVzb3VyY2UtPmRlc3Ryb3lXaW5kb3cobV9idWZmZXJIYW5kbGUpOwog
ICAgICAgICBtX2J1ZmZlckhhbmRsZSA9IDA7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVCbGl0dGVyLmNwcCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZUJsaXR0ZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZWYyYzAKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVCbGl0dGVyLmNwcApAQCAtMCww
ICsxLDY1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRleHR1cmVCbGl0dGVyLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKworI2luY2x1ZGUgPG9wZW5nbC9H
TFBsYXRmb3JtQ29udGV4dC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vI2RlZmluZSBTSEFERVJfREVCVUcKK1RleHR1cmVCbGl0
dGVyKiBUZXh0dXJlQmxpdHRlcjo6bV9zdGF0aWNUZXh0dXJlQmxpdHRlciA9IDA7CitzdGF0aWMg
Y29uc3QgR0xmbG9hdCB2ZXJ0aWNlc1tdID0geyAxLjBmLCAxLjBmLCAwLjBmLCAxLjBmLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEuMGYsIDEuMGYsIDAuMGYsIDEuMGYs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmLCAtMS4wZiwgMC4wZiwg
MS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLjBmLCAtMS4wZiwg
MC4wZiwgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLjBmLCAt
MS4wZiwgMC4wZiwgMS4wZiwgIC8vIEZsaXAgY29vcmRpbmF0ZXMuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxLjBmLCAtMS4wZiwgMC4wZiwgMS4wZiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0xLjBmLCAxLjBmLCAwLjBmLCAxLjBmLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMS4wZiwgMC4wZiwgMS4wZiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMGYsIDEuMGYsMS4wZiwgMS4wZiwg
ICAvLyBUZXggY29vcmRpbmF0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLjBmLCAwLjBmLDEuMGYsIDAuMGZ9OworCitzdGF0aWMgY29uc3QgR0x1c2hvcnQgaW5kZXhW
ZXJ0aWNlc1tdID0geyAwLCAxLCAyLCAzfTsKK3N0YXRpYyBjb25zdCBpbnQgdmVydGV4SW5kZXhT
aXplID0gc2l6ZW9mKGluZGV4VmVydGljZXMpL3NpemVvZihpbmRleFZlcnRpY2VzWzBdKTsKK3N0
YXRpYyBjb25zdCBpbnQgRkxJUE9GRlNFVCA9IHNpemVvZihmbG9hdCkgKiA0ICogNDsKK3N0YXRp
YyBjb25zdCBpbnQgVEVYQ09PUkRPRkZTRVQgPSBGTElQT0ZGU0VUICogMjsKK3N0YXRpYyBjb25z
dCBpbnQgVkVSVEVYQVRUUklCID0gMDsKK3N0YXRpYyBjb25zdCBpbnQgVEVYQ09PUkRBVFRSSUIg
PSAxOworCisjaWYgVVNFKE9QRU5HTF9FU18yKQorc3RhdGljIFBGTkdMQklORFZFUlRFWEFSUkFZ
T0VTUFJPQyBtX2dsQmluZFZlcnRleEFycmF5ID0gMDsKK3N0YXRpYyBQRk5HTERFTEVURVZFUlRF
WEFSUkFZU09FU1BST0MgbV9nbERlbGV0ZVZlcnRleEFycmF5cyA9IDA7CitzdGF0aWMgUEZOR0xH
RU5WRVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xHZW5WZXJ0ZXhBcnJheXMgPSAwOworc3RhdGljIFBG
TkdMSVNWRVJURVhBUlJBWU9FU1BST0MgbV9nbElzVmVydGV4QXJyYXkgPSAwOworc3RhdGljIFBG
TkdMQkxJVEZSQU1FQlVGRkVSQU5HTEVQUk9DIG1fZnJhbWVCdWZmZXJCbGl0ID0gMDsKKyNlbHNl
CitzdGF0aWMgUEZOR0xCSU5EVkVSVEVYQVJSQVlQUk9DIG1fZ2xCaW5kVmVydGV4QXJyYXkgPSAw
Oworc3RhdGljIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTUFJPQyBtX2dsRGVsZXRlVmVydGV4QXJy
YXlzID0gMDsKK3N0YXRpYyBQRk5HTEdFTlZFUlRFWEFSUkFZU1BST0MgbV9nbEdlblZlcnRleEFy
cmF5cyA9IDA7CitzdGF0aWMgUEZOR0xJU1ZFUlRFWEFSUkFZUFJPQyBtX2dsSXNWZXJ0ZXhBcnJh
eSA9IDA7CitzdGF0aWMgUEZOR0xCTElURlJBTUVCVUZGRVJFWFRQUk9DIG1fZnJhbWVCdWZmZXJC
bGl0ID0gMDsKKyNlbmRpZgorCitzdGF0aWMgUEZOR0xTQU1QTEVSUEFSQU1FVEVSSVBST0MgbV9n
bFNhbXBsZXJQYXJhbWV0ZXJpID0gMDsKK3N0YXRpYyBQRk5HTEdFTlNBTVBMRVJTUFJPQyBtX2ds
R2VuU2FtcGxlcnMgPSAwOworc3RhdGljIFBGTkdMQklORFNBTVBMRVJQUk9DIG1fZ2xCaW5kU2Ft
cGxlciA9IDA7CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVHTEJpbmRpbmdzKCkKK3sKKyAgICBz
dGF0aWMgYm9vbCBiaW5kaW5nc0luaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKGJpbmRpbmdz
SW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGJpbmRpbmdzSW5pdGlhbGl6ZWQg
PSB0cnVlOworCisjaWYgVVNFKE9QRU5HTF9FU18yKSAmJiBVU0UoRUdMKQorICAgIGlmIChHTFBs
YXRmb3JtQ29udGV4dDo6c3VwcG9ydHNHTEV4dGVuc2lvbigiR0xfQU5HTEVfZnJhbWVidWZmZXJf
YmxpdCIpKQorICAgICAgICBtX2ZyYW1lQnVmZmVyQmxpdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZO
R0xCTElURlJBTUVCVUZGRVJBTkdMRVBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEJsaXRGcmFt
ZWJ1ZmZlckFOR0xFIikpOworCisgICAgaWYgKG1fZnJhbWVCdWZmZXJCbGl0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoR0xQbGF0Zm9ybUNvbnRleHQ6OnN1cHBvcnRzR0xFeHRlbnNpb24o
IkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKKyAgICAgICAgbV9nbEJpbmRWZXJ0ZXhB
cnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9DPihlZ2xH
ZXRQcm9jQWRkcmVzcygiZ2xCaW5kVmVydGV4QXJyYXlPRVMiKSk7CisgICAgICAgIG1fZ2xHZW5W
ZXJ0ZXhBcnJheXMgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJP
Qz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsR2VuVmVydGV4QXJyYXlzT0VTIikpOworICAgICAgICBt
X2dsRGVsZXRlVmVydGV4QXJyYXlzID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTERFTEVURVZFUlRF
WEFSUkFZU09FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbERlbGV0ZVZlcnRleEFycmF5c09F
UyIpKTsKKyAgICAgICAgbV9nbElzVmVydGV4QXJyYXkgPSByZWludGVycHJldF9jYXN0PFBGTkdM
SVNWRVJURVhBUlJBWU9FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbElzVmVydGV4QXJyYXlP
RVMiKSk7CisgICAgfQorCisjZWxzZQorICAgIGJvb2wgc3VwcG9ydHNCbGl0RXh0ZW5zaW9uID0g
R0xQbGF0Zm9ybUNvbnRleHQ6OnN1cHBvcnRzR0xFeHRlbnNpb24oIkdMX0VYVF9mcmFtZWJ1ZmZl
cl9ibGl0Iik7CisgICAgYm9vbCBzdXBwb3J0c1ZBTyA9IEdMUGxhdGZvcm1Db250ZXh0OjpzdXBw
b3J0c0dMRXh0ZW5zaW9uKCJHTF9BUkJfdmVydGV4X2FycmF5X29iamVjdCIpOworICAgIC8vIFRo
aXMgZXh0IGlzIG9ubHkgYXZhaWxhYmxlIHdpdGggZGVza3RvcCBHTCBhbmQgaXMgbm90IHN1cHBv
cnRlZCBieSBHTEVTMi4wLCBzdXBwb3J0IGZvciB0aGUgc2FtZSBoYXMgYmVlbiBhZGRlZCBpbiBH
TEVTMy4wLgorICAgIGJvb2wgc3VwcG9ydHNTYW1wbGVyT2JqZWN0cyA9IEdMUGxhdGZvcm1Db250
ZXh0OjpzdXBwb3J0c0dMRXh0ZW5zaW9uKCJHTF9BUkJfc2FtcGxlcl9vYmplY3RzIik7CisjaWYg
VVNFKEdMWCkKKyAgICBpZiAoc3VwcG9ydHNCbGl0RXh0ZW5zaW9uKQorICAgICAgICBtX2ZyYW1l
QnVmZmVyQmxpdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCTElURlJBTUVCVUZGRVJFWFRQUk9D
PihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xC
bGl0RnJhbWVidWZmZXJFWFQiKSkpOworCisgICAgaWYgKG1fZnJhbWVCdWZmZXJCbGl0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoc3VwcG9ydHNWQU8pIHsKKyAgICAgICAgbV9nbEJpbmRW
ZXJ0ZXhBcnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EVkVSVEVYQVJSQVlQUk9DPihn
bFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xCaW5k
VmVydGV4QXJyYXkiKSkpOworICAgICAgICBtX2dsR2VuVmVydGV4QXJyYXlzID0gcmVpbnRlcnBy
ZXRfY2FzdDxQRk5HTEdFTlZFUlRFWEFSUkFZU1BST0M+KGdsWEdldFByb2NBZGRyZXNzKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbEdlblZlcnRleEFycmF5cyIpKSk7CisgICAg
ICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXMgPSByZWludGVycHJldF9jYXN0PFBGTkdMREVMRVRF
VkVSVEVYQVJSQVlTUFJPQz4oZ2xYR2V0UHJvY0FkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBHTHVieXRlKj4oImdsRGVsZXRlVmVydGV4QXJyYXlzIikpKTsKKyAgICAgICAgbV9nbElzVmVy
dGV4QXJyYXkgPSByZWludGVycHJldF9jYXN0PFBGTkdMSVNWRVJURVhBUlJBWVBST0M+KGdsWEdl
dFByb2NBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbElzVmVydGV4
QXJyYXkiKSkpOworICAgIH0KKworICAgIGlmIChzdXBwb3J0c1NhbXBsZXJPYmplY3RzKSB7Cisg
ICAgICAgIG1fZ2xTYW1wbGVyUGFyYW1ldGVyaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xTQU1Q
TEVSUEFSQU1FVEVSSVBST0M+KGdsWEdldFByb2NBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgR0x1Ynl0ZSo+KCJnbFNhbXBsZXJQYXJhbWV0ZXJpIikpKTsKKyAgICAgICAgbV9nbEdlblNh
bXBsZXJzID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFTlNBTVBMRVJTUFJPQz4oZ2xYR2V0UHJv
Y0FkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVieXRlKj4oImdsR2VuU2FtcGxlcnMi
KSkpOworICAgICAgICBtX2dsQmluZFNhbXBsZXIgPSByZWludGVycHJldF9jYXN0PFBGTkdMQklO
RFNBTVBMRVJQUk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdM
dWJ5dGUqPigiZ2xCaW5kU2FtcGxlciIpKSk7CisgICAgfQorCisjZWxpZiBVU0UoRUdMKQorICAg
IGlmIChzdXBwb3J0c0JsaXRFeHRlbnNpb24pCisgICAgICAgIG1fZnJhbWVCdWZmZXJCbGl0ID0g
cmVpbnRlcnByZXRfY2FzdDxQRk5HTEJMSVRGUkFNRUJVRkZFUkVYVFBST0M+KGVnbEdldFByb2NB
ZGRyZXNzKCJnbEJsaXRGcmFtZWJ1ZmZlckVYVCIpKTsKKworICAgIGlmIChtX2ZyYW1lQnVmZmVy
QmxpdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHN1cHBvcnRzVkFPKSB7CisgICAgICAg
IG1fZ2xCaW5kVmVydGV4QXJyYXkgPSByZWludGVycHJldF9jYXN0PFBGTkdMQklORFZFUlRFWEFS
UkFZUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsQmluZFZlcnRleEFycmF5IikpOworICAgICAg
ICBtX2dsR2VuVmVydGV4QXJyYXlzID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFTlZFUlRFWEFS
UkFZU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdlblZlcnRleEFycmF5cyIpKTsKKyAgICAg
ICAgbV9nbERlbGV0ZVZlcnRleEFycmF5cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xERUxFVEVW
RVJURVhBUlJBWVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xEZWxldGVWZXJ0ZXhBcnJheXMi
KSk7CisgICAgICAgIG1fZ2xJc1ZlcnRleEFycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTElT
VkVSVEVYQVJSQVlQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xJc1ZlcnRleEFycmF5IikpOwor
ICAgIH0KKworICAgIGlmIChzdXBwb3J0c1NhbXBsZXJPYmplY3RzKSB7CisgICAgICAgIG1fZ2xT
YW1wbGVyUGFyYW1ldGVyaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xTQU1QTEVSUEFSQU1FVEVS
SVBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbFNhbXBsZXJQYXJhbWV0ZXJpIikpOworICAgICAg
ICBtX2dsR2VuU2FtcGxlcnMgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VOU0FNUExFUlNQUk9D
PihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xHZW5TYW1wbGVycyIpKTsKKyAgICAgICAgbV9nbEJpbmRT
YW1wbGVyID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEJJTkRTQU1QTEVSUFJPQz4oZWdsR2V0UHJv
Y0FkZHJlc3MoImdsQmluZFNhbXBsZXIiKSk7CisgICAgfQorCisjZW5kaWYKKyNlbmRpZgorfQor
CitjbGFzcyBTY29wZWRUb2dnbGVHTFN0YXRlCit7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U2NvcGVkVG9nZ2xlR0xTdGF0ZSk7CisKK3B1YmxpYzoKKyAgICBTY29wZWRUb2dnbGVHTFN0YXRl
KCkKKyAgICB7CisgICAgICAgIG1fZW5hYmxlQmxlbmQgPSB0b2dnbGVTdGF0ZShHTF9CTEVORCk7
CisgICAgICAgIG1fZW5hYmxlQ3VsbEZhY2UgPSB0b2dnbGVTdGF0ZShHTF9DVUxMX0ZBQ0UpOwor
ICAgICAgICBtX2VuYWJsZURlcHRoVGVzdCA9IHRvZ2dsZVN0YXRlKEdMX0RFUFRIX1RFU1QpOwor
ICAgICAgICBtX2VuYWJsZURpdGhlclRlc3QgPSB0b2dnbGVTdGF0ZShHTF9ESVRIRVIpOworICAg
ICAgICBtX2VuYWJsZVBvbHlnb25PZmZzZXRGaWxsID0gdG9nZ2xlU3RhdGUoR0xfUE9MWUdPTl9P
RkZTRVRfRklMTCk7CisgICAgICAgIG1fZW5hYmxlU2FtcGxlQWxwaGEgPSB0b2dnbGVTdGF0ZShH
TF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpOworICAgICAgICBtX2VuYWJsZVNhbXBsZUNvdmVy
YWdlID0gdG9nZ2xlU3RhdGUoR0xfU0FNUExFX0NPVkVSQUdFKTsKKyAgICAgICAgbV9lbmFibGVT
dGVuY2lsVGVzdCA9IHRvZ2dsZVN0YXRlKEdMX1NURU5DSUxfVEVTVCk7CisgICAgICAgIG1fZW5h
YmxlU2Npc3NvclRlc3QgPSB0b2dnbGVTdGF0ZShHTF9TQ0lTU09SX1RFU1QpOworICAgIH0KKwor
ICAgIH5TY29wZWRUb2dnbGVHTFN0YXRlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2VuYWJsZUJs
ZW5kKQorICAgICAgICAgICAgOjpnbEVuYWJsZShHTF9CTEVORCk7CisKKyAgICAgICAgaWYgKG1f
ZW5hYmxlQ3VsbEZhY2UpCisgICAgICAgICAgICA6OmdsRW5hYmxlKEdMX0NVTExfRkFDRSk7CisK
KyAgICAgICAgaWYgKG1fZW5hYmxlRGVwdGhUZXN0KQorICAgICAgICAgICAgOjpnbEVuYWJsZShH
TF9ERVBUSF9URVNUKTsKKworICAgICAgICBpZiAobV9lbmFibGVEaXRoZXJUZXN0KQorICAgICAg
ICAgICAgOjpnbEVuYWJsZShHTF9ESVRIRVIpOworCisgICAgICAgIGlmIChtX2VuYWJsZVBvbHln
b25PZmZzZXRGaWxsKQorICAgICAgICAgICAgOjpnbEVuYWJsZShHTF9QT0xZR09OX09GRlNFVF9G
SUxMKTsKKworICAgICAgICBpZiAobV9lbmFibGVTYW1wbGVBbHBoYSkKKyAgICAgICAgICAgIDo6
Z2xFbmFibGUoR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFKTsKKworICAgICAgICBpZiAobV9l
bmFibGVTYW1wbGVDb3ZlcmFnZSkKKyAgICAgICAgICAgIDo6Z2xFbmFibGUoR0xfU0FNUExFX0NP
VkVSQUdFKTsKKworICAgICAgICBpZiAobV9lbmFibGVTdGVuY2lsVGVzdCkKKyAgICAgICAgICAg
IDo6Z2xFbmFibGUoR0xfU1RFTkNJTF9URVNUKTsKKworICAgICAgICBpZiAobV9lbmFibGVTY2lz
c29yVGVzdCkKKyAgICAgICAgICAgIDo6Z2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgYm9vbCB0b2dnbGVTdGF0ZShjb25zdCBHTGVudW0gY2FwYWJpbGl0
eSkKKyAgICB7CisgICAgICAgIGJvb2wgZW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoY2FwYWJpbGl0
eSk7CisKKyAgICAgICAgaWYgKCFlbmFibGVkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIDo6Z2xEaXNhYmxlKGNhcGFiaWxpdHkpOworCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGJvb2wgbV9lbmFibGVCbGVuZCA6MTsKKyAgICBib29sIG1fZW5hYmxl
Q3VsbEZhY2UgOjE7CisgICAgYm9vbCBtX2VuYWJsZURlcHRoVGVzdCA6MTsKKyAgICBib29sIG1f
ZW5hYmxlRGl0aGVyVGVzdCA6MTsKKyAgICBib29sIG1fZW5hYmxlUG9seWdvbk9mZnNldEZpbGwg
OjE7CisgICAgYm9vbCBtX2VuYWJsZVNhbXBsZUFscGhhIDoxOworICAgIGJvb2wgbV9lbmFibGVT
YW1wbGVDb3ZlcmFnZSA6MTsKKyAgICBib29sIG1fZW5hYmxlU3RlbmNpbFRlc3QgOjE7CisgICAg
Ym9vbCBtX2VuYWJsZVNjaXNzb3JUZXN0IDoxOworfTsKKworY2xhc3MgU2NvcGVkUHJvZ3JhbUJp
bmRpbmcKK3sKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY29wZWRQcm9ncmFtQmluZGluZyk7
CisKK3B1YmxpYzoKKyAgICBTY29wZWRQcm9ncmFtQmluZGluZyhHTHVpbnQgcHJvZ3JhbUlkKQor
ICAgIHsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX0FDVElWRV9URVhUVVJFLCAmbV9ib3Vu
ZFRleFVuaXQpOworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfQ1VSUkVOVF9QUk9HUkFNLCAm
bV9ib3VuZFByb2dyYW0pOworICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVN
QVNLLCBtX2NvbG9yTWFzayk7CisgICAgICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJV
RSwgR0xfVFJVRSwgR0xfVFJVRSk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9WSUVXUE9S
VCwgJm1fY3VycmVudFZpZXdwb3J0WzBdKTsKKworICAgICAgICBpZiAobV9nbEdlblZlcnRleEFy
cmF5cykKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgICAgICAgICA6OmdsR2V0SW50ZWdlcnYo
R0xfVkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTLCAmbV9jdXJyZW50VmVydGV4QXJyYXlCaW5kaW5n
KTsKKyNlbHNlCisgICAgICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfVkVSVEVYX0FSUkFZX0JJ
TkRJTkcsICZtX2N1cnJlbnRWZXJ0ZXhBcnJheUJpbmRpbmcpOworI2VuZGlmCisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAsIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfRU5BQkxFRCwgJm1fYXR0cmliRW5hYmxlZCk7CisgICAgICAgICAgICA6OmdsR2V0
VmVydGV4QXR0cmliaXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFLCAmbV9hdHRyaWJT
aXplKTsKKyAgICAgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdigwLCBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX1NUUklERSwgJm1fYXR0cmliU3RyaWRlKTsKKyAgICAgICAgICAgIDo6Z2xHZXRW
ZXJ0ZXhBdHRyaWJpdigwLCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZUEUsICZtX2F0dHJpYlR5
cGUpOworICAgICAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAsIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfTk9STUFMSVpFRCwgJm1fYXR0cmliTm9ybWFsaXplZCk7CisgICAgICAgICAgICA6
OmdsR2V0VmVydGV4QXR0cmliaXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklO
RElORywgJm1fYXR0cmliQnVmZmVyQmluZGluZyk7CisgICAgICAgICAgICA6OmdsR2V0VmVydGV4
QXR0cmliUG9pbnRlcnYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSLCAmbV9hdHRy
aWJQb2ludGVyKTsKKyAgICAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9BUlJBWV9CVUZGRVJf
QklORElORywgJm1fY3VycmVudEFycmF5QnVmZmVyQmluZGluZyk7CisgICAgICAgICAgICA6Omds
R2V0SW50ZWdlcnYoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORywgJm1fY3VycmVudEVs
ZW1lbnRyeUFycmF5QnVmZmVyQmluZGluZyk7CisgICAgICAgIH0KKworICAgICAgICA6OmdsVXNl
UHJvZ3JhbShwcm9ncmFtSWQpOworICAgICAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJF
MCk7CisKKyAgICAgICAgaWYgKCEobV9nbEdlblNhbXBsZXJzICYmIG1fZ2xTYW1wbGVyUGFyYW1l
dGVyaSkpIHsKKyAgICAgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgICAgICAgICA6OmdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX05FQVJFU1Qp
OworICAgICAgICAgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICAgICAgOjpnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgflNjb3BlZFByb2dyYW1CaW5kaW5nKCkKKyAgICB7Cisg
ICAgICAgIDo6Z2xWaWV3cG9ydChtX2N1cnJlbnRWaWV3cG9ydFswXSwgbV9jdXJyZW50Vmlld3Bv
cnRbMV0sIG1fY3VycmVudFZpZXdwb3J0WzJdLCBtX2N1cnJlbnRWaWV3cG9ydFszXSk7CisgICAg
ICAgIDo6Z2xDb2xvck1hc2sobV9jb2xvck1hc2tbMF0sIG1fY29sb3JNYXNrWzFdLCBtX2NvbG9y
TWFza1syXSwgbV9jb2xvck1hc2tbM10pOworCisgICAgICAgIGlmIChtX2dsR2VuVmVydGV4QXJy
YXlzKQorICAgICAgICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheShtX2N1cnJlbnRWZXJ0ZXhBcnJh
eUJpbmRpbmcpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2F0dHJpYkVuYWJs
ZWQpCisgICAgICAgICAgICAgICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworCisg
ICAgICAgICAgICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fYXR0cmliQnVmZmVy
QmluZGluZyk7CisgICAgICAgICAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcigwLCBtX2F0dHJp
YlNpemUsIG1fYXR0cmliVHlwZSwgbV9hdHRyaWJOb3JtYWxpemVkLCBtX2F0dHJpYlN0cmlkZSwg
bV9hdHRyaWJQb2ludGVyKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JV
RkZFUiwgbV9jdXJyZW50QXJyYXlCdWZmZXJCaW5kaW5nKTsKKyAgICAgICAgICAgIDo6Z2xCaW5k
QnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBtX2N1cnJlbnRFbGVtZW50cnlBcnJheUJ1
ZmZlckJpbmRpbmcpOworICAgICAgICB9CisKKyAgICAgICAgOjpnbFVzZVByb2dyYW0obV9ib3Vu
ZFByb2dyYW0pOworICAgICAgICA6OmdsQWN0aXZlVGV4dHVyZShtX2JvdW5kVGV4VW5pdCk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEdMaW50IG1fYm91bmRUZXhVbml0OworICAgIEdMaW50IG1f
Ym91bmRQcm9ncmFtOworICAgIEdMaW50IG1fY3VycmVudEFycmF5QnVmZmVyQmluZGluZzsKKyAg
ICBHTGludCBtX2F0dHJpYkVuYWJsZWQ7CisgICAgR0xpbnQgbV9hdHRyaWJTaXplOworICAgIEdM
aW50IG1fYXR0cmliU3RyaWRlOworICAgIEdMaW50IG1fYXR0cmliVHlwZTsKKyAgICBHTGludCBt
X2F0dHJpYk5vcm1hbGl6ZWQ7CisgICAgR0xpbnQgbV9hdHRyaWJCdWZmZXJCaW5kaW5nOworICAg
IEdMaW50IG1fY3VycmVudFZpZXdwb3J0WzRdOworICAgIEdMaW50IG1fY3VycmVudFZlcnRleEFy
cmF5QmluZGluZzsKKyAgICBHTGludCBtX2N1cnJlbnRFbGVtZW50cnlBcnJheUJ1ZmZlckJpbmRp
bmc7CisgICAgR0xib29sZWFuIG1fY29sb3JNYXNrWzRdOworICAgIFNjb3BlZFRvZ2dsZUdMU3Rh
dGUgbV9zY29wZWRUb2dnbGVTdGF0ZTsKKyAgICB2b2lkKiBtX2F0dHJpYlBvaW50ZXI7Cit9Owor
CisjZGVmaW5lIFNUUklOR0lGWSguLi4pICNfX1ZBX0FSR1NfXworCitjb25zdCBjaGFyKiBHZXRT
aGFkZXJTb3VyY2UoR0xlbnVtIHR5cGUpIHsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IEdMX1ZFUlRFWF9TSEFERVI6CisgICAgICAgIHJldHVybiBTVFJJTkdJRlkoCisgICAgICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IG1fdlBvc2l0aW9uOworICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZSB2ZWMyIG1fdGV4Q29vcmQ7CisgICAgICAgIHZhcnlpbmcgdmVjMiBtX3ZUZXhDb29y
ZDsKKyAgICAgICAgdm9pZCBtYWluKHZvaWQpIHsKKyAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0g
bV92UG9zaXRpb247CisgICAgICAgICAgICBtX3ZUZXhDb29yZCA9IG1fdGV4Q29vcmQ7CisgICAg
ICAgIH0pOworICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSOgorICAgICAgICByZXR1cm4gU1RS
SU5HSUZZKAorICAgICAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X3RleFNhbXBs
ZXI7CisgICAgICAgICAgICAgICAgdmFyeWluZyB2ZWMyIG1fdlRleENvb3JkOworICAgICAgICB2
b2lkIG1haW4odm9pZCkgeworICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHVf
dGV4U2FtcGxlciwgbV92VGV4Q29vcmQuc3QpOworICAgICAgICB9KTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK1RleHR1cmVCbGl0dGVyOjpUZXh0dXJlQmxp
dHRlcigpCisgICAgOiBtX3ZlcnRleEhhbmRsZSgwKQorICAgICwgbV9mbGlwVmVydGV4SGFuZGxl
KDApCisgICAgLCBtX2N1cnJlbnRWZXJ0ZXhIYW5kbGUoMCkKKyAgICAsIG1fc2hhZGVyUHJvZ3Jh
bSgwKQorICAgICwgbV92ZXJ0ZXhCdWZmZXIoMCkKKyAgICAsIG1faW5kZXhCdWZmZXIoMCkKKyAg
ICAsIG1fZmJvSWQoMCkKKyAgICAsIG1fZmxpcChmYWxzZSkKK3sKK30KKworVGV4dHVyZUJsaXR0
ZXI6On5UZXh0dXJlQmxpdHRlcigpCit7CisgICAgY2xlYXIoKTsKK30KKwordm9pZCBUZXh0dXJl
QmxpdHRlcjo6Y2xlYXIoKQoreworICAgIGlmIChtX3NoYWRlclByb2dyYW0pIHsKKyAgICAgICAg
OjpnbERlbGV0ZVByb2dyYW0obV9zaGFkZXJQcm9ncmFtKTsKKyAgICAgICAgbV9zaGFkZXJQcm9n
cmFtID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9mYm9JZCkgeworICAgICAgICA6OmdsRGVsZXRl
RnJhbWVidWZmZXJzKDEsICZtX2Zib0lkKTsKKyAgICAgICAgbV9mYm9JZCA9IDA7CisgICAgfQor
CisgICAgaWYgKG1fdmVydGV4SGFuZGxlICYmIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXMpIHsKKyAg
ICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5cygxLCAmbV92ZXJ0ZXhIYW5kbGUpOworICAgICAg
ICBtX3ZlcnRleEhhbmRsZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1fZmxpcFZlcnRleEhhbmRs
ZSAmJiBtX2dsRGVsZXRlVmVydGV4QXJyYXlzKSB7CisgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhB
cnJheXMoMSwgJm1fZmxpcFZlcnRleEhhbmRsZSk7CisgICAgICAgIG1fZmxpcFZlcnRleEhhbmRs
ZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1fdmVydGV4QnVmZmVyKSB7CisgICAgICAgIDo6Z2xE
ZWxldGVCdWZmZXJzKDEsICZtX3ZlcnRleEJ1ZmZlcik7CisgICAgICAgIG1fdmVydGV4QnVmZmVy
ID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9pbmRleEJ1ZmZlcikgeworICAgICAgICA6OmdsRGVs
ZXRlQnVmZmVycygxLCAmbV9pbmRleEJ1ZmZlcik7CisgICAgICAgIG1faW5kZXhCdWZmZXIgPSAw
OworICAgIH0KK30KKworR0x1aW50IFRleHR1cmVCbGl0dGVyOjpsb2FkU2hhZGVyKEdMZW51bSB0
eXBlLCBjb25zdCBHTGNoYXIgKnNoYWRlclNyYykKK3sKKyAgICBHTHVpbnQgc2hhZGVyOworICAg
IEdMaW50IGNvbXBpbGVkOworCisgICAgc2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIodHlwZSk7CisK
KyAgICBpZiAoIXNoYWRlcikgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUg
c2hhZGVyLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBnbFNoYWRlclNvdXJj
ZShzaGFkZXIsIDEsICZzaGFkZXJTcmMsIDApOworICAgIGdsQ29tcGlsZVNoYWRlcihzaGFkZXIp
OworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgJmNvbXBpbGVk
KTsKKworICAgIGlmICghY29tcGlsZWQpIHsKKyAgICAgICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVy
KTsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY29tcGlsZSBzaGFkZXIuIik7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBzaGFkZXI7Cit9CisKK3ZvaWQgVGV4
dHVyZUJsaXR0ZXI6OmJpbmRBcnJheUJ1ZmZlcigpCit7CisgICAgZ2xFbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShWRVJURVhBVFRSSUIpOworICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoVEVY
Q09PUkRBVFRSSUIpOworICAgIGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fdmVydGV4
QnVmZmVyKTsKKworICAgIGlmIChtX2ZsaXApCisgICAgICAgIGdsVmVydGV4QXR0cmliUG9pbnRl
cihWRVJURVhBVFRSSUIsIDQsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgKHZvaWQqKUZMSVBPRkZT
RVQpOworICAgIGVsc2UKKyAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKFZFUlRFWEFUVFJJ
QiwgNCwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAodm9pZCopTlVMTCk7CisKKyAgICBnbFZlcnRl
eEF0dHJpYlBvaW50ZXIoVEVYQ09PUkRBVFRSSUIsIDIsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwg
KHZvaWQqKVRFWENPT1JET0ZGU0VUKTsKK30KKwordm9pZCBUZXh0dXJlQmxpdHRlcjo6ZW5hYmxl
VmVydGV4QXJyYXkoKQoreworICAgIGlmIChtX2N1cnJlbnRWZXJ0ZXhIYW5kbGUpCisgICAgICAg
IG1fZ2xCaW5kVmVydGV4QXJyYXkobV9jdXJyZW50VmVydGV4SGFuZGxlKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgYmluZEFycmF5QnVmZmVyKCk7CisgICAgICAgIGdsQmluZEJ1ZmZlcihHTF9FTEVN
RU5UX0FSUkFZX0JVRkZFUiwgbV9pbmRleEJ1ZmZlcik7CisgICAgfQorfQorCit2b2lkIFRleHR1
cmVCbGl0dGVyOjpkaXNhYmxlVmVydGV4QXJyYXkoKQoreworICAgIGlmIChtX2N1cnJlbnRWZXJ0
ZXhIYW5kbGUpCisgICAgICAgIHJldHVybjsKKworICAgIGdsRGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KFZFUlRFWEFUVFJJQik7CisgICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoVEVYQ09P
UkRBVFRSSUIpOworfQorCitib29sIFRleHR1cmVCbGl0dGVyOjpsaW5rUHJvZ3JhbShjb25zdCBH
THVpbnQgcHJvZ3JhbUlkKQoreworICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlkKTsKKyNpZmRl
ZiBTSEFERVJfREVCVUcKKyAgICBHTGludCBsaW5rU3RhdHVzID0gMDsKKyAgICBnbEdldFByb2dy
YW1pdihwcm9ncmFtSWQsIEdMX0xJTktfU1RBVFVTLCAmbGlua1N0YXR1cyk7CisKKyAgICBpZiAo
IWxpbmtTdGF0dXMpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gbGluayBwcm9ncmFt
LiIpOworICAgICAgICBHTGludCBpbmZvTG9nTGVuZ3RoKDApOworICAgICAgICBnbEdldFByb2dy
YW1pdihtX3NoYWRlclByb2dyYW0sIEdMX0lORk9fTE9HX0xFTkdUSCwgJmluZm9Mb2dMZW5ndGgg
KTsKKworICAgICAgICBpZiAoaW5mb0xvZ0xlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIGNoYXIq
IGxvZyA9IChjaGFyKikgbWFsbG9jKGluZm9Mb2dMZW5ndGgpOworCisgICAgICAgICAgICBpZiAo
bG9nID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBhbGxv
Y2F0ZSBtZW1vcnkgdG8gd3JpdGUgUHJvZ2FtTG9nLiIpOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IHdyaXR0ZW4gPSAwOwor
ICAgICAgICAgICAgZ2xHZXRQcm9ncmFtSW5mb0xvZyhtX3NoYWRlclByb2dyYW0sIGluZm9Mb2dM
ZW5ndGgsICZ3cml0dGVuLCBsb2cpOworICAgICAgICAgICAgTE9HX0VSUk9SKCJQcm9ncmFtTG9n
OiglcykuXG4iLCBsb2cpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyNlbmRpZgorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRleHR1cmVCbGl0dGVyOjpp
bml0aWFsaXplVkJPKCkKK3sKKyAgICBpZiAobV9nbEdlblZlcnRleEFycmF5cykgeworICAgICAg
ICBtX2N1cnJlbnRWZXJ0ZXhIYW5kbGUgPSBtX2ZsaXAgPyBtX2ZsaXBWZXJ0ZXhIYW5kbGUgOiBt
X3ZlcnRleEhhbmRsZTsKKworICAgICAgICBpZiAobV9jdXJyZW50VmVydGV4SGFuZGxlKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAobV92ZXJ0ZXhCdWZmZXIpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIGJpbmQgYnVmZmVycy4KKyAgICBHTHVpbnQgdGVtcFsyXTsKKyAg
ICBnbEdlbkJ1ZmZlcnMoMiwgdGVtcCk7CisgICAgbV92ZXJ0ZXhCdWZmZXIgPSB0ZW1wWzBdOwor
ICAgIG1faW5kZXhCdWZmZXIgPSB0ZW1wWzFdOworICAgIGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9C
VUZGRVIsIG1fdmVydGV4QnVmZmVyKTsKKyAgICBnbEJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVS
LCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywKKyAgICAgICAgICAgICAgICAgR0xfU1RBVElD
X0RSQVcpOworCisgICAgLy8gQ3JlYXRlIGFuZCBzZXQtdXAgdGhlIHZlcnRleCBhcnJheSBvYmpl
Y3QKKyAgICBpZiAobV9nbEdlblZlcnRleEFycmF5cyAmJiBtX2dsQmluZFZlcnRleEFycmF5KSB7
CisgICAgICAgIEdMdWludCB2ZXJ0ZXhIYW5kbGU7CisgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJh
eXMoMSwgJnZlcnRleEhhbmRsZSk7CisgICAgICAgIG1fZ2xCaW5kVmVydGV4QXJyYXkodmVydGV4
SGFuZGxlKTsKKyAgICAgICAgYmluZEFycmF5QnVmZmVyKCk7CisKKyAgICAgICAgaWYgKG1fZmxp
cCkKKyAgICAgICAgICAgIG1fZmxpcFZlcnRleEhhbmRsZSA9IHZlcnRleEhhbmRsZTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV92ZXJ0ZXhIYW5kbGUgPSB2ZXJ0ZXhIYW5kbGU7CisKKyAg
ICAgICAgbV9jdXJyZW50VmVydGV4SGFuZGxlID0gdmVydGV4SGFuZGxlOworICAgIH0KKworICAg
IGdsQmluZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbV9pbmRleEJ1ZmZlcik7Cisg
ICAgZ2xCdWZmZXJEYXRhKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBzaXplb2YoaW5kZXhWZXJ0
aWNlcyksIGluZGV4VmVydGljZXMsCisgICAgICAgICAgICAgICAgIEdMX1NUQVRJQ19EUkFXKTsK
K30KKworYm9vbCBUZXh0dXJlQmxpdHRlcjo6aW5pdGlhbGl6ZVByb2dyYW0oKQoreworICAgIGlm
IChtX3NoYWRlclByb2dyYW0pCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gY3JlYXRl
IHNoYWRlci4KKyAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gbG9hZFNoYWRlcihHTF9WRVJURVhf
U0hBREVSLCBHZXRTaGFkZXJTb3VyY2UoR0xfVkVSVEVYX1NIQURFUikpOworICAgIGlmICghdmVy
dGV4U2hhZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHTHVpbnQgZnJhZ21lbnRT
aGFkZXIgPSBsb2FkU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUiwgR2V0U2hhZGVyU291cmNlKEdM
X0ZSQUdNRU5UX1NIQURFUikpOworCisgICAgaWYgKCFmcmFnbWVudFNoYWRlcikgeworICAgICAg
ICBnbERlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgbV9zaGFkZXJQcm9ncmFtID0gZ2xDcmVhdGVQcm9ncmFtKCk7CisKKyAgICBp
ZiAoIW1fc2hhZGVyUHJvZ3JhbSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVh
dGUgcHJvZ3JhbS4iKTsKKyAgICAgICAgZ2xEZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAg
ICAgICAgZ2xEZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgZ2xBdHRhY2hTaGFkZXIobV9zaGFkZXJQcm9ncmFtLCB2ZXJ0ZXhT
aGFkZXIpOworICAgIGdsQXR0YWNoU2hhZGVyKG1fc2hhZGVyUHJvZ3JhbSwgZnJhZ21lbnRTaGFk
ZXIpOworICAgIGdsQmluZEF0dHJpYkxvY2F0aW9uKG1fc2hhZGVyUHJvZ3JhbSwgVkVSVEVYQVRU
UklCLCAibV92UG9zaXRpb24iKTsKKyAgICBnbEJpbmRBdHRyaWJMb2NhdGlvbihtX3NoYWRlclBy
b2dyYW0sIFRFWENPT1JEQVRUUklCLCAibV90ZXhDb29yZCIpOworICAgIGJvb2wgbGlua2VkID0g
bGlua1Byb2dyYW0obV9zaGFkZXJQcm9ncmFtKTsKKyAgICBnbERlbGV0ZVNoYWRlcih2ZXJ0ZXhT
aGFkZXIpOworICAgIGdsRGVsZXRlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKKworICAgIGlmICgh
bGlua2VkKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBHTHVpbnQgc2FtcGxlckxvY2F0aW9uID0gZ2xHZXRVbmlmb3JtTG9jYXRpb24obV9z
aGFkZXJQcm9ncmFtLCAidV90ZXhTYW1wbGVyIik7CisgICAgR0x1aW50IHNhbXBsZXIgPSAwOwor
ICAgIC8vIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBzYW1wbGVyIG9iamVjdC4gVGhpcyB3b3VsZCBo
ZWxwIHVzIHNlcGVyYXRlIHRoZSB0ZXh0dXJlIGFuZCBzYW1wbGVyIHN0YXRlLgorICAgIGlmICht
X2dsR2VuU2FtcGxlcnMgJiYgbV9nbFNhbXBsZXJQYXJhbWV0ZXJpKSB7CisgICAgICAgIG1fZ2xH
ZW5TYW1wbGVycygxICwgJnNhbXBsZXIpOworICAgICAgICBtX2dsU2FtcGxlclBhcmFtZXRlcmko
c2FtcGxlciwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgICAgICBt
X2dsU2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1Q
X1RPX0VER0UpOworICAgICAgICBtX2dsU2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgR0xfVEVY
VFVSRV9NSU5fRklMVEVSLCBHTF9ORUFSRVNUKTsKKyAgICAgICAgbV9nbFNhbXBsZXJQYXJhbWV0
ZXJpKHNhbXBsZXIsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgfQor
CisgICAgR0xpbnQgYm91bmRQcm9ncmFtOworICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9DVVJSRU5U
X1BST0dSQU0sICZib3VuZFByb2dyYW0pOworCisgICAgZ2xVc2VQcm9ncmFtKG1fc2hhZGVyUHJv
Z3JhbSk7CisgICAgZ2xVbmlmb3JtMWkoc2FtcGxlckxvY2F0aW9uLCAwKTsKKworICAgIGlmICht
X2dsQmluZFNhbXBsZXIpCisgICAgICAgIG1fZ2xCaW5kU2FtcGxlcigwICwgc2FtcGxlcik7Cisj
aWZkZWYgU0hBREVSX0RFQlVHCisgICAgZ2xWYWxpZGF0ZVByb2dyYW0obV9zaGFkZXJQcm9ncmFt
KTsKKyAgICBHTGludCBzdGF0dXM7CisgICAgZ2xHZXRQcm9ncmFtaXYobV9zaGFkZXJQcm9ncmFt
LCBHTF9WQUxJREFURV9TVEFUVVMsICZzdGF0dXMpOworCisgICAgaWYgKEdMX1RSVUUgIT0gc3Rh
dHVzKSB7CisgICAgICAgIExPR19FUlJPUigiUHJvZ3JhbSB2YWxpZGF0aW9uIGZhaWxlZC5cbiIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI2VuZGlmCisgICAgZ2xVbmlmb3JtMWko
c2FtcGxlckxvY2F0aW9uLCAwKTsKKyAgICBnbFVzZVByb2dyYW0oYm91bmRQcm9ncmFtKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRleHR1cmVCbGl0dGVyOjpkcmF3VGV4dHVyZShj
b25zdCBHTHVpbnQgc291cmNlVGV4dHVyZSwgY29uc3QgR0x1aW50IHRhcmdldEZib0lkLCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgYm9vbCBmbGlwLCBH
TGVudW0gZmlsdGVyKQoreworICAgIGluaXRpYWxpemVHTEJpbmRpbmdzKCk7CisKKyAgICBpZiAo
bV9mcmFtZUJ1ZmZlckJsaXQpIHsKKyAgICAgICAgYm9vbCBlbmFibGVTY2lzc29yVGVzdCA9IDo6
Z2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKKworICAgICAgICBpZiAoZW5hYmxlU2Npc3Nv
clRlc3QpCisgICAgICAgICAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworCisgICAg
ICAgIGlmICghbV9mYm9JZCkKKyAgICAgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zi
b0lkKTsKKworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEV4dGVuc2lvbnMzRDo6UkVBRF9G
UkFNRUJVRkZFUiwgbV9mYm9JZCk7CisgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCBzb3VyY2VUZXh0dXJlKTsKKyAgICAgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEV4
dGVuc2lvbnMzRDo6UkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RF
WFRVUkVfMkQsIHNvdXJjZVRleHR1cmUsIDApOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
KEV4dGVuc2lvbnMzRDo6RFJBV19GUkFNRUJVRkZFUiwgdGFyZ2V0RmJvSWQpOworCisgICAgICAg
IGlmIChmbGlwKQorICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckJsaXQoc3JjUmVjdC54KCksIHNy
Y1JlY3QueSgpLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIGRlc3RSZWN0Lngo
KSwgZGVzdFJlY3QueCgpICsgZGVzdFJlY3QuaGVpZ2h0KCksIGRlc3RSZWN0LnkoKSArIGRlc3RS
ZWN0LndpZHRoKCksIGRlc3RSZWN0LnkoKSwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgZmlsdGVyKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9mcmFtZUJ1ZmZlckJsaXQoc3JjUmVjdC54KCks
IHNyY1JlY3QueSgpLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIGRlc3RSZWN0
LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwg
R0xfQ09MT1JfQlVGRkVSX0JJVCwgZmlsdGVyKTsKKworICAgICAgICA6OmdsRnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RF
WFRVUkVfMkQsIDAsIDApOworCisgICAgICAgIGlmIChlbmFibGVTY2lzc29yVGVzdCkKKyAgICAg
ICAgICAgIDo6Z2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBpZiAoIWluaXRpYWxpemVQcm9ncmFtKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFNjb3BlZFByb2dyYW1CaW5kaW5nIHByb2dyYW0obV9zaGFkZXJQcm9n
cmFtKTsKKyAgICBtX2ZsaXAgPSBmbGlwOworICAgIGluaXRpYWxpemVWQk8oKTsKKyAgICA6Omds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCB0YXJnZXRGYm9JZCk7CisgICAgOjpnbENs
ZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVR8IEdMX0RFUFRIX0JVRkZFUl9CSVQpOworICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBzb3VyY2VUZXh0dXJlKTsKKyAgICA6OmdsVmlld3Bv
cnQgKGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVj
dC5oZWlnaHQoKSk7CisgICAgZW5hYmxlVmVydGV4QXJyYXkoKTsKKyAgICA6OmdsRHJhd0VsZW1l
bnRzKEdMX1RSSUFOR0xFX1NUUklQLCB2ZXJ0ZXhJbmRleFNpemUsIEdMX1VOU0lHTkVEX1NIT1JU
LCAwKTsKKyAgICBkaXNhYmxlVmVydGV4QXJyYXkoKTsKKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFRleHR1cmVCbGl0dGVyOjpjb3B5VGV4dHVyZShjb25zdCBHTHVpbnQgc291cmNlLCBj
b25zdCBHTHVpbnQgZGVzdGluYXRpb24sIGJvb2wgZmxpcCkKK3sKKyAgICBpbml0aWFsaXplR0xC
aW5kaW5ncygpOworCisgICAgaWYgKCFpbml0aWFsaXplUHJvZ3JhbSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fZmJvSWQpCisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJz
KDEsICZtX2Zib0lkKTsKKworICAgIFNjb3BlZFByb2dyYW1CaW5kaW5nIHByb2dyYW0obV9zaGFk
ZXJQcm9ncmFtKTsKKyAgICBtX2ZsaXAgPSBmbGlwOworICAgIGluaXRpYWxpemVWQk8oKTsKKyAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zib0lkKTsKKyAgICA6Omds
Q2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVHwgR0xfREVQVEhfQlVGRkVSX0JJVCk7CisgICAgOjpn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHNvdXJjZSk7CisgICAgOjpnbEZyYW1lYnVmZmVy
VGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVS
RV8yRCwgZGVzdGluYXRpb24sIDApOworICAgIGVuYWJsZVZlcnRleEFycmF5KCk7CisgICAgOjpn
bERyYXdFbGVtZW50cyhHTF9UUklBTkdMRV9TVFJJUCwgdmVydGV4SW5kZXhTaXplLCBHTF9VTlNJ
R05FRF9TSE9SVCwgMCk7CisgICAgZGlzYWJsZVZlcnRleEFycmF5KCk7CisgICAgOjpnbEZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xf
VEVYVFVSRV8yRCwgMCwgMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVC
bGl0dGVyLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVC
bGl0dGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4Y2I2NgotLS0g
L2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZUJsaXR0ZXIuaApAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFRleHR1cmVCbGl0dGVyX2gKKyNkZWZpbmUgVGV4dHVyZUJsaXR0ZXJfaAorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBUZXh0dXJlQmxpdHRlciA6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWRCYXNlIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShUZXh0dXJlQmxpdHRlcik7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUZXh0dXJlQmxpdHRlcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIGlm
ICghbV9zdGF0aWNUZXh0dXJlQmxpdHRlcikKKyAgICAgICAgICAgIG1fc3RhdGljVGV4dHVyZUJs
aXR0ZXIgPSBuZXcgVGV4dHVyZUJsaXR0ZXIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9zdGF0aWNUZXh0dXJlQmxpdHRlci0+cmVmKCk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG1fc3RhdGljVGV4dHVyZUJsaXR0ZXIpOworICAgIH0KKworICAgIHZvaWQgZGVyZWYoKQorICAg
IHsKKyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKSB7CisgICAgICAgICAgICBtX3N0YXRpY1RleHR1
cmVCbGl0dGVyID0gMDsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgICB9CisgICAg
fQorCisgICAgVGV4dHVyZUJsaXR0ZXIoKTsKKyAgICB+VGV4dHVyZUJsaXR0ZXIoKTsKKyAgICBi
b29sIGNvcHlUZXh0dXJlKGNvbnN0IEdMdWludCwgY29uc3QgR0x1aW50LCBib29sID0gZmFsc2Up
OworICAgIGJvb2wgZHJhd1RleHR1cmUoY29uc3QgR0x1aW50LCBjb25zdCBHTHVpbnQsIGNvbnN0
IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgYm9vbCA9IGZhbHNlLCBHTGVudW0gPSBHcmFwaGlj
c0NvbnRleHQzRDo6TkVBUkVTVCk7CisgICAgdm9pZCBjbGVhcigpOworCitwcml2YXRlOgorICAg
IHN0YXRpYyBUZXh0dXJlQmxpdHRlciogbV9zdGF0aWNUZXh0dXJlQmxpdHRlcjsKKyAgICBib29s
IGluaXRpYWxpemVQcm9ncmFtKCk7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBcnJheSgpOworICAg
IHZvaWQgZGlzYWJsZVZlcnRleEFycmF5KCk7CisgICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIoKTsK
KyAgICB2b2lkIGluaXRpYWxpemVWQk8oKTsKKyAgICBib29sIGxpbmtQcm9ncmFtKGNvbnN0IEdM
dWludCBwcm9ncmFtSWQpOworICAgIEdMdWludCBsb2FkU2hhZGVyKEdMZW51bSB0eXBlLCBjb25z
dCBHTGNoYXIgKnNoYWRlclNyYyk7CisgICAgR0x1aW50IG1fdmVydGV4SGFuZGxlOworICAgIEdM
dWludCBtX2ZsaXBWZXJ0ZXhIYW5kbGU7CisgICAgR0x1aW50IG1fY3VycmVudFZlcnRleEhhbmRs
ZTsKKyAgICBHTHVpbnQgbV9zaGFkZXJQcm9ncmFtOworICAgIEdMdWludCBtX3ZlcnRleEJ1ZmZl
cjsKKyAgICBHTHVpbnQgbV9pbmRleEJ1ZmZlcjsKKyAgICBHTHVpbnQgbV9mYm9JZDsKKyAgICBi
b29sIG1fZmxpcCA6MTsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182603</attachid>
            <date>2013-01-14 11:12:37 -0800</date>
            <delta_ts>2013-01-29 14:08:06 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>textureblitter.patch</filename>
            <type>text/plain</type>
            <size>25159</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZUJsaXR0ZXIuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlQmxpdHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc2ZWNm
MgotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZUJsaXR0ZXIuY3BwCkBAIC0wLDAgKzEsNjAzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dHVyZUJsaXR0ZXIuaCIKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJHTC5oIgorCisjaW5jbHVkZSA8b3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0Lmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8jZGVm
aW5lIFNIQURFUl9ERUJVRworVGV4dHVyZUJsaXR0ZXIqIFRleHR1cmVCbGl0dGVyOjptX3N0YXRp
Y1RleHR1cmVCbGl0dGVyID0gMDsKK3N0YXRpYyBjb25zdCBHTGZsb2F0IHZlcnRpY2VzW10gPSB7
IDEuMGYsIDEuMGYsIDAuMGYsIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtMS4wZiwgMS4wZiwgMC4wZiwgMS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEuMGYsIC0xLjBmLCAwLjBmLCAxLjBmLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLTEuMGYsIC0xLjBmLCAwLjBmLCAxLjBmLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLTEuMGYsIC0xLjBmLCAwLjBmLCAxLjBmLCAgLy8gRmxpcCBj
b29yZGluYXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYsIC0x
LjBmLCAwLjBmLCAxLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEu
MGYsIDEuMGYsIDAuMGYsIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxLjBmLCAxLjBmLCAwLjBmLCAxLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMC4wZiwgMS4wZiwxLjBmLCAxLjBmLCAgIC8vIFRleCBjb29yZGluYXRlcy4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMGYsIDAuMGYsMS4wZiwgMC4wZn07CisK
K3N0YXRpYyBjb25zdCBHTHVzaG9ydCBpbmRleFZlcnRpY2VzW10gPSB7IDAsIDEsIDIsIDN9Owor
c3RhdGljIGNvbnN0IGludCB2ZXJ0ZXhJbmRleFNpemUgPSBzaXplb2YoaW5kZXhWZXJ0aWNlcykv
c2l6ZW9mKGluZGV4VmVydGljZXNbMF0pOworc3RhdGljIGNvbnN0IGludCBGTElQT0ZGU0VUID0g
c2l6ZW9mKGZsb2F0KSAqIDQgKiA0Oworc3RhdGljIGNvbnN0IGludCBURVhDT09SRE9GRlNFVCA9
IEZMSVBPRkZTRVQgKiAyOworc3RhdGljIGNvbnN0IGludCBWRVJURVhBVFRSSUIgPSAwOworc3Rh
dGljIGNvbnN0IGludCBURVhDT09SREFUVFJJQiA9IDE7CisKKyNpZiBVU0UoT1BFTkdMX0VTXzIp
CitzdGF0aWMgUEZOR0xCSU5EVkVSVEVYQVJSQVlPRVNQUk9DIG1fZ2xCaW5kVmVydGV4QXJyYXkg
PSAwOworc3RhdGljIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsRGVsZXRlVmVy
dGV4QXJyYXlzID0gMDsKK3N0YXRpYyBQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0MgbV9nbEdl
blZlcnRleEFycmF5cyA9IDA7CitzdGF0aWMgUEZOR0xJU1ZFUlRFWEFSUkFZT0VTUFJPQyBtX2ds
SXNWZXJ0ZXhBcnJheSA9IDA7CisjZWxzZQorc3RhdGljIFBGTkdMQklORFZFUlRFWEFSUkFZUFJP
QyBtX2dsQmluZFZlcnRleEFycmF5ID0gMDsKK3N0YXRpYyBQRk5HTERFTEVURVZFUlRFWEFSUkFZ
U1BST0MgbV9nbERlbGV0ZVZlcnRleEFycmF5cyA9IDA7CitzdGF0aWMgUEZOR0xHRU5WRVJURVhB
UlJBWVNQUk9DIG1fZ2xHZW5WZXJ0ZXhBcnJheXMgPSAwOworc3RhdGljIFBGTkdMSVNWRVJURVhB
UlJBWVBST0MgbV9nbElzVmVydGV4QXJyYXkgPSAwOworI2VuZGlmCisKK3N0YXRpYyBQRk5HTFNB
TVBMRVJQQVJBTUVURVJJUFJPQyBtX2dsU2FtcGxlclBhcmFtZXRlcmkgPSAwOworc3RhdGljIFBG
TkdMR0VOU0FNUExFUlNQUk9DIG1fZ2xHZW5TYW1wbGVycyA9IDA7CitzdGF0aWMgUEZOR0xCSU5E
U0FNUExFUlBST0MgbV9nbEJpbmRTYW1wbGVyID0gMDsKKworc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZUdMQmluZGluZ3MoKQoreworICAgIHN0YXRpYyBib29sIGJpbmRpbmdzSW5pdGlhbGl6ZWQgPSBm
YWxzZTsKKyAgICBpZiAoYmluZGluZ3NJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYmluZGluZ3NJbml0aWFsaXplZCA9IHRydWU7CisKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisg
ICAgaWYgKEdMUGxhdGZvcm1Db250ZXh0OjpzdXBwb3J0c0dMRXh0ZW5zaW9uKCJHTF9PRVNfdmVy
dGV4X2FycmF5X29iamVjdCIpKSB7CisgICAgICAgIG1fZ2xCaW5kVmVydGV4QXJyYXkgPSByZWlu
dGVycHJldF9jYXN0PFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJl
c3MoImdsQmluZFZlcnRleEFycmF5T0VTIikpOworICAgICAgICBtX2dsR2VuVmVydGV4QXJyYXlz
ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0M+KGVnbEdldFBy
b2NBZGRyZXNzKCJnbEdlblZlcnRleEFycmF5c09FUyIpKTsKKyAgICAgICAgbV9nbERlbGV0ZVZl
cnRleEFycmF5cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xERUxFVEVWRVJURVhBUlJBWVNPRVNQ
Uk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMiKSk7CisgICAg
ICAgIG1fZ2xJc1ZlcnRleEFycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTElTVkVSVEVYQVJS
QVlPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xJc1ZlcnRleEFycmF5T0VTIikpOworICAg
IH0KKworI2Vsc2UKKyAgICBib29sIHN1cHBvcnRzVkFPID0gR0xQbGF0Zm9ybUNvbnRleHQ6OnN1
cHBvcnRzR0xFeHRlbnNpb24oIkdMX0FSQl92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisgICAgLy8g
VGhpcyBleHQgaXMgb25seSBhdmFpbGFibGUgd2l0aCBkZXNrdG9wIEdMIGFuZCBpcyBub3Qgc3Vw
cG9ydGVkIGJ5IEdMRVMyLjAsIHN1cHBvcnQgZm9yIHRoZSBzYW1lIGhhcyBiZWVuIGFkZGVkIGlu
IEdMRVMzLjAuCisgICAgYm9vbCBzdXBwb3J0c1NhbXBsZXJPYmplY3RzID0gR0xQbGF0Zm9ybUNv
bnRleHQ6OnN1cHBvcnRzR0xFeHRlbnNpb24oIkdMX0FSQl9zYW1wbGVyX29iamVjdHMiKTsKKyNp
ZiBVU0UoR0xYKQorICAgIGlmIChzdXBwb3J0c1ZBTykgeworICAgICAgICBtX2dsQmluZFZlcnRl
eEFycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEJJTkRWRVJURVhBUlJBWVBST0M+KGdsWEdl
dFByb2NBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbEJpbmRWZXJ0
ZXhBcnJheSIpKSk7CisgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXMgPSByZWludGVycHJldF9j
YXN0PFBGTkdMR0VOVkVSVEVYQVJSQVlTUFJPQz4oZ2xYR2V0UHJvY0FkZHJlc3MocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBHTHVieXRlKj4oImdsR2VuVmVydGV4QXJyYXlzIikpKTsKKyAgICAgICAg
bV9nbERlbGV0ZVZlcnRleEFycmF5cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xERUxFVEVWRVJU
RVhBUlJBWVNQUk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdM
dWJ5dGUqPigiZ2xEZWxldGVWZXJ0ZXhBcnJheXMiKSkpOworICAgICAgICBtX2dsSXNWZXJ0ZXhB
cnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xJU1ZFUlRFWEFSUkFZUFJPQz4oZ2xYR2V0UHJv
Y0FkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVieXRlKj4oImdsSXNWZXJ0ZXhBcnJh
eSIpKSk7CisgICAgfQorCisgICAgaWYgKHN1cHBvcnRzU2FtcGxlck9iamVjdHMpIHsKKyAgICAg
ICAgbV9nbFNhbXBsZXJQYXJhbWV0ZXJpID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFNBTVBMRVJQ
QVJBTUVURVJJUFJPQz4oZ2xYR2V0UHJvY0FkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCBH
THVieXRlKj4oImdsU2FtcGxlclBhcmFtZXRlcmkiKSkpOworICAgICAgICBtX2dsR2VuU2FtcGxl
cnMgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VOU0FNUExFUlNQUk9DPihnbFhHZXRQcm9jQWRk
cmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xHZW5TYW1wbGVycyIpKSk7
CisgICAgICAgIG1fZ2xCaW5kU2FtcGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EU0FN
UExFUlBST0M+KGdsWEdldFByb2NBZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0
ZSo+KCJnbEJpbmRTYW1wbGVyIikpKTsKKyAgICB9CisjZWxpZiBVU0UoRUdMKQorICAgIGlmIChz
dXBwb3J0c1ZBTykgeworICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5ID0gcmVpbnRlcnByZXRf
Y2FzdDxQRk5HTEJJTkRWRVJURVhBUlJBWVBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEJpbmRW
ZXJ0ZXhBcnJheSIpKTsKKyAgICAgICAgbV9nbEdlblZlcnRleEFycmF5cyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UEZOR0xHRU5WRVJURVhBUlJBWVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xHZW5W
ZXJ0ZXhBcnJheXMiKSk7CisgICAgICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXMgPSByZWludGVy
cHJldF9jYXN0PFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3Mo
ImdsRGVsZXRlVmVydGV4QXJyYXlzIikpOworICAgICAgICBtX2dsSXNWZXJ0ZXhBcnJheSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8UEZOR0xJU1ZFUlRFWEFSUkFZUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3Mo
ImdsSXNWZXJ0ZXhBcnJheSIpKTsKKyAgICB9CisKKyAgICBpZiAoc3VwcG9ydHNTYW1wbGVyT2Jq
ZWN0cykgeworICAgICAgICBtX2dsU2FtcGxlclBhcmFtZXRlcmkgPSByZWludGVycHJldF9jYXN0
PFBGTkdMU0FNUExFUlBBUkFNRVRFUklQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xTYW1wbGVy
UGFyYW1ldGVyaSIpKTsKKyAgICAgICAgbV9nbEdlblNhbXBsZXJzID0gcmVpbnRlcnByZXRfY2Fz
dDxQRk5HTEdFTlNBTVBMRVJTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsR2VuU2FtcGxlcnMi
KSk7CisgICAgICAgIG1fZ2xCaW5kU2FtcGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5E
U0FNUExFUlBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEJpbmRTYW1wbGVyIikpOworICAgIH0K
KyNlbmRpZgorI2VuZGlmCit9CisKK2NsYXNzIFNjb3BlZFRvZ2dsZUdMU3RhdGUKK3sKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShTY29wZWRUb2dnbGVHTFN0YXRlKTsKKworcHVibGljOgorICAg
IFNjb3BlZFRvZ2dsZUdMU3RhdGUoKQorICAgIHsKKyAgICAgICAgbV9lbmFibGVCbGVuZCA9IHRv
Z2dsZVN0YXRlKEdMX0JMRU5EKTsKKyAgICAgICAgbV9lbmFibGVDdWxsRmFjZSA9IHRvZ2dsZVN0
YXRlKEdMX0NVTExfRkFDRSk7CisgICAgICAgIG1fZW5hYmxlRGVwdGhUZXN0ID0gdG9nZ2xlU3Rh
dGUoR0xfREVQVEhfVEVTVCk7CisgICAgICAgIG1fZW5hYmxlRGl0aGVyVGVzdCA9IHRvZ2dsZVN0
YXRlKEdMX0RJVEhFUik7CisgICAgICAgIG1fZW5hYmxlUG9seWdvbk9mZnNldEZpbGwgPSB0b2dn
bGVTdGF0ZShHTF9QT0xZR09OX09GRlNFVF9GSUxMKTsKKyAgICAgICAgbV9lbmFibGVTYW1wbGVB
bHBoYSA9IHRvZ2dsZVN0YXRlKEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSk7CisgICAgICAg
IG1fZW5hYmxlU2FtcGxlQ292ZXJhZ2UgPSB0b2dnbGVTdGF0ZShHTF9TQU1QTEVfQ09WRVJBR0Up
OworICAgICAgICBtX2VuYWJsZVN0ZW5jaWxUZXN0ID0gdG9nZ2xlU3RhdGUoR0xfU1RFTkNJTF9U
RVNUKTsKKyAgICAgICAgbV9lbmFibGVTY2lzc29yVGVzdCA9IHRvZ2dsZVN0YXRlKEdMX1NDSVNT
T1JfVEVTVCk7CisgICAgfQorCisgICAgflNjb3BlZFRvZ2dsZUdMU3RhdGUoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fZW5hYmxlQmxlbmQpCisgICAgICAgICAgICA6OmdsRW5hYmxlKEdMX0JMRU5E
KTsKKworICAgICAgICBpZiAobV9lbmFibGVDdWxsRmFjZSkKKyAgICAgICAgICAgIDo6Z2xFbmFi
bGUoR0xfQ1VMTF9GQUNFKTsKKworICAgICAgICBpZiAobV9lbmFibGVEZXB0aFRlc3QpCisgICAg
ICAgICAgICA6OmdsRW5hYmxlKEdMX0RFUFRIX1RFU1QpOworCisgICAgICAgIGlmIChtX2VuYWJs
ZURpdGhlclRlc3QpCisgICAgICAgICAgICA6OmdsRW5hYmxlKEdMX0RJVEhFUik7CisKKyAgICAg
ICAgaWYgKG1fZW5hYmxlUG9seWdvbk9mZnNldEZpbGwpCisgICAgICAgICAgICA6OmdsRW5hYmxl
KEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwpOworCisgICAgICAgIGlmIChtX2VuYWJsZVNhbXBsZUFs
cGhhKQorICAgICAgICAgICAgOjpnbEVuYWJsZShHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0Up
OworCisgICAgICAgIGlmIChtX2VuYWJsZVNhbXBsZUNvdmVyYWdlKQorICAgICAgICAgICAgOjpn
bEVuYWJsZShHTF9TQU1QTEVfQ09WRVJBR0UpOworCisgICAgICAgIGlmIChtX2VuYWJsZVN0ZW5j
aWxUZXN0KQorICAgICAgICAgICAgOjpnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpOworCisgICAg
ICAgIGlmIChtX2VuYWJsZVNjaXNzb3JUZXN0KQorICAgICAgICAgICAgOjpnbEVuYWJsZShHTF9T
Q0lTU09SX1RFU1QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIHRvZ2dsZVN0YXRlKGNv
bnN0IEdMZW51bSBjYXBhYmlsaXR5KQorICAgIHsKKyAgICAgICAgYm9vbCBlbmFibGVkID0gOjpn
bElzRW5hYmxlZChjYXBhYmlsaXR5KTsKKworICAgICAgICBpZiAoIWVuYWJsZWQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgOjpnbERpc2FibGUoY2FwYWJpbGl0eSk7CisK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBtX2VuYWJsZUJsZW5kIDox
OworICAgIGJvb2wgbV9lbmFibGVDdWxsRmFjZSA6MTsKKyAgICBib29sIG1fZW5hYmxlRGVwdGhU
ZXN0IDoxOworICAgIGJvb2wgbV9lbmFibGVEaXRoZXJUZXN0IDoxOworICAgIGJvb2wgbV9lbmFi
bGVQb2x5Z29uT2Zmc2V0RmlsbCA6MTsKKyAgICBib29sIG1fZW5hYmxlU2FtcGxlQWxwaGEgOjE7
CisgICAgYm9vbCBtX2VuYWJsZVNhbXBsZUNvdmVyYWdlIDoxOworICAgIGJvb2wgbV9lbmFibGVT
dGVuY2lsVGVzdCA6MTsKKyAgICBib29sIG1fZW5hYmxlU2Npc3NvclRlc3QgOjE7Cit9OworCitj
bGFzcyBTY29wZWRQcm9ncmFtQmluZGluZworeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNj
b3BlZFByb2dyYW1CaW5kaW5nKTsKKworcHVibGljOgorICAgIFNjb3BlZFByb2dyYW1CaW5kaW5n
KEdMdWludCBwcm9ncmFtSWQpCisgICAgeworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfQUNU
SVZFX1RFWFRVUkUsICZtX2JvdW5kVGV4VW5pdCk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihH
TF9DVVJSRU5UX1BST0dSQU0sICZtX2JvdW5kUHJvZ3JhbSk7CisgICAgICAgIDo6Z2xHZXRCb29s
ZWFudihHTF9DT0xPUl9XUklURU1BU0ssIG1fY29sb3JNYXNrKTsKKyAgICAgICAgOjpnbENvbG9y
TWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKKyAgICAgICAgOjpnbEdl
dEludGVnZXJ2KEdMX1ZJRVdQT1JULCAmbV9jdXJyZW50Vmlld3BvcnRbMF0pOworCisgICAgICAg
IGlmIChtX2dsR2VuVmVydGV4QXJyYXlzKQorI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICAgICAg
ICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9WRVJURVhfQVJSQVlfQklORElOR19PRVMsICZtX2N1cnJl
bnRWZXJ0ZXhBcnJheUJpbmRpbmcpOworI2Vsc2UKKyAgICAgICAgICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9WRVJURVhfQVJSQVlfQklORElORywgJm1fY3VycmVudFZlcnRleEFycmF5QmluZGluZyk7
CisjZW5kaWYKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICA6OmdsR2V0VmVydGV4QXR0cmli
aXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVELCAmbV9hdHRyaWJFbmFibGVkKTsK
KyAgICAgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdigwLCBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX1NJWkUsICZtX2F0dHJpYlNpemUpOworICAgICAgICAgICAgOjpnbEdldFZlcnRleEF0dHJp
Yml2KDAsIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFLCAmbV9hdHRyaWJTdHJpZGUpOwor
ICAgICAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAsIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfVFlQRSwgJm1fYXR0cmliVHlwZSk7CisgICAgICAgICAgICA6OmdsR2V0VmVydGV4QXR0cmli
aXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVELCAmbV9hdHRyaWJOb3JtYWxp
emVkKTsKKyAgICAgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdigwLCBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HLCAmbV9hdHRyaWJCdWZmZXJCaW5kaW5nKTsKKyAgICAg
ICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydigwLCBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX1BPSU5URVIsICZtX2F0dHJpYlBvaW50ZXIpOworICAgICAgICAgICAgOjpnbEdldEludGVn
ZXJ2KEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HLCAmbV9jdXJyZW50QXJyYXlCdWZmZXJCaW5kaW5n
KTsKKyAgICAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9C
SU5ESU5HLCAmbV9jdXJyZW50RWxlbWVudHJ5QXJyYXlCdWZmZXJCaW5kaW5nKTsKKyAgICAgICAg
fQorCisgICAgICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW1JZCk7CisgICAgICAgIDo6Z2xBY3Rp
dmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKworICAgICAgICBpZiAoIShtX2dsR2VuU2FtcGxlcnMg
JiYgbV9nbFNhbXBsZXJQYXJhbWV0ZXJpKSkgeworICAgICAgICAgICAgOjpnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9ORUFSRVNUKTsKKyAg
ICAgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAg
ICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwg
R0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+U2NvcGVkUHJvZ3Jh
bUJpbmRpbmcoKQorICAgIHsKKyAgICAgICAgOjpnbFZpZXdwb3J0KG1fY3VycmVudFZpZXdwb3J0
WzBdLCBtX2N1cnJlbnRWaWV3cG9ydFsxXSwgbV9jdXJyZW50Vmlld3BvcnRbMl0sIG1fY3VycmVu
dFZpZXdwb3J0WzNdKTsKKyAgICAgICAgOjpnbENvbG9yTWFzayhtX2NvbG9yTWFza1swXSwgbV9j
b2xvck1hc2tbMV0sIG1fY29sb3JNYXNrWzJdLCBtX2NvbG9yTWFza1szXSk7CisKKyAgICAgICAg
aWYgKG1fZ2xHZW5WZXJ0ZXhBcnJheXMpCisgICAgICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5
KG1fY3VycmVudFZlcnRleEFycmF5QmluZGluZyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgaWYgKG1fYXR0cmliRW5hYmxlZCkKKyAgICAgICAgICAgICAgICA6OmdsRW5hYmxlVmVydGV4
QXR0cmliQXJyYXkoMCk7CisKKyAgICAgICAgICAgIDo6Z2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JV
RkZFUiwgbV9hdHRyaWJCdWZmZXJCaW5kaW5nKTsKKyAgICAgICAgICAgIDo6Z2xWZXJ0ZXhBdHRy
aWJQb2ludGVyKDAsIG1fYXR0cmliU2l6ZSwgbV9hdHRyaWJUeXBlLCBtX2F0dHJpYk5vcm1hbGl6
ZWQsIG1fYXR0cmliU3RyaWRlLCBtX2F0dHJpYlBvaW50ZXIpOworICAgICAgICAgICAgOjpnbEJp
bmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX2N1cnJlbnRBcnJheUJ1ZmZlckJpbmRpbmcpOwor
ICAgICAgICAgICAgOjpnbEJpbmRCdWZmZXIoR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1fY3Vy
cmVudEVsZW1lbnRyeUFycmF5QnVmZmVyQmluZGluZyk7CisgICAgICAgIH0KKworICAgICAgICA6
OmdsVXNlUHJvZ3JhbShtX2JvdW5kUHJvZ3JhbSk7CisgICAgICAgIDo6Z2xBY3RpdmVUZXh0dXJl
KG1fYm91bmRUZXhVbml0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR0xpbnQgbV9ib3VuZFRl
eFVuaXQ7CisgICAgR0xpbnQgbV9ib3VuZFByb2dyYW07CisgICAgR0xpbnQgbV9jdXJyZW50QXJy
YXlCdWZmZXJCaW5kaW5nOworICAgIEdMaW50IG1fYXR0cmliRW5hYmxlZDsKKyAgICBHTGludCBt
X2F0dHJpYlNpemU7CisgICAgR0xpbnQgbV9hdHRyaWJTdHJpZGU7CisgICAgR0xpbnQgbV9hdHRy
aWJUeXBlOworICAgIEdMaW50IG1fYXR0cmliTm9ybWFsaXplZDsKKyAgICBHTGludCBtX2F0dHJp
YkJ1ZmZlckJpbmRpbmc7CisgICAgR0xpbnQgbV9jdXJyZW50Vmlld3BvcnRbNF07CisgICAgR0xp
bnQgbV9jdXJyZW50VmVydGV4QXJyYXlCaW5kaW5nOworICAgIEdMaW50IG1fY3VycmVudEVsZW1l
bnRyeUFycmF5QnVmZmVyQmluZGluZzsKKyAgICBHTGJvb2xlYW4gbV9jb2xvck1hc2tbNF07Cisg
ICAgU2NvcGVkVG9nZ2xlR0xTdGF0ZSBtX3Njb3BlZFRvZ2dsZVN0YXRlOworICAgIHZvaWQqIG1f
YXR0cmliUG9pbnRlcjsKK307CisKKyNkZWZpbmUgU1RSSU5HSUZZKC4uLikgI19fVkFfQVJHU19f
CisKK2NvbnN0IGNoYXIqIEdldFNoYWRlclNvdXJjZShHTGVudW0gdHlwZSkgeworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgR0xfVkVSVEVYX1NIQURFUjoKKyAgICAgICAgcmV0dXJuIFNU
UklOR0lGWSgKKyAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgbV92UG9zaXRpb247
CisgICAgICAgICAgICAgICAgYXR0cmlidXRlIHZlYzIgbV90ZXhDb29yZDsKKyAgICAgICAgdmFy
eWluZyB2ZWMyIG1fdlRleENvb3JkOworICAgICAgICB2b2lkIG1haW4odm9pZCkgeworICAgICAg
ICAgICAgZ2xfUG9zaXRpb24gPSBtX3ZQb3NpdGlvbjsKKyAgICAgICAgICAgIG1fdlRleENvb3Jk
ID0gbV90ZXhDb29yZDsKKyAgICAgICAgfSk7CisgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVI6
CisgICAgICAgIHJldHVybiBTVFJJTkdJRlkoCisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm0g
c2FtcGxlcjJEIHVfdGV4U2FtcGxlcjsKKyAgICAgICAgICAgICAgICB2YXJ5aW5nIHZlYzIgbV92
VGV4Q29vcmQ7CisgICAgICAgIHZvaWQgbWFpbih2b2lkKSB7CisgICAgICAgICAgICBnbF9GcmFn
Q29sb3IgPSB0ZXh0dXJlMkQodV90ZXhTYW1wbGVyLCBtX3ZUZXhDb29yZC5zdCk7CisgICAgICAg
IH0pOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworVGV4dHVy
ZUJsaXR0ZXI6OlRleHR1cmVCbGl0dGVyKCkKKyAgICA6IG1fdmVydGV4SGFuZGxlKDApCisgICAg
LCBtX2ZsaXBWZXJ0ZXhIYW5kbGUoMCkKKyAgICAsIG1fY3VycmVudFZlcnRleEhhbmRsZSgwKQor
ICAgICwgbV9zaGFkZXJQcm9ncmFtKDApCisgICAgLCBtX3ZlcnRleEJ1ZmZlcigwKQorICAgICwg
bV9pbmRleEJ1ZmZlcigwKQorICAgICwgbV9mYm9JZCgwKQorICAgICwgbV9mbGlwKGZhbHNlKQor
eworfQorCitUZXh0dXJlQmxpdHRlcjo6flRleHR1cmVCbGl0dGVyKCkKK3sKKyAgICBjbGVhcigp
OworfQorCit2b2lkIFRleHR1cmVCbGl0dGVyOjpjbGVhcigpCit7CisgICAgaWYgKG1fc2hhZGVy
UHJvZ3JhbSkgeworICAgICAgICA6OmdsRGVsZXRlUHJvZ3JhbShtX3NoYWRlclByb2dyYW0pOwor
ICAgICAgICBtX3NoYWRlclByb2dyYW0gPSAwOworICAgIH0KKworICAgIGlmIChtX2Zib0lkKSB7
CisgICAgICAgIDo6Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvSWQpOworICAgICAgICBt
X2Zib0lkID0gMDsKKyAgICB9CisKKyAgICBpZiAobV92ZXJ0ZXhIYW5kbGUgJiYgbV9nbERlbGV0
ZVZlcnRleEFycmF5cykgeworICAgICAgICBtX2dsRGVsZXRlVmVydGV4QXJyYXlzKDEsICZtX3Zl
cnRleEhhbmRsZSk7CisgICAgICAgIG1fdmVydGV4SGFuZGxlID0gMDsKKyAgICB9CisKKyAgICBp
ZiAobV9mbGlwVmVydGV4SGFuZGxlICYmIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXMpIHsKKyAgICAg
ICAgbV9nbERlbGV0ZVZlcnRleEFycmF5cygxLCAmbV9mbGlwVmVydGV4SGFuZGxlKTsKKyAgICAg
ICAgbV9mbGlwVmVydGV4SGFuZGxlID0gMDsKKyAgICB9CisKKyAgICBpZiAobV92ZXJ0ZXhCdWZm
ZXIpIHsKKyAgICAgICAgOjpnbERlbGV0ZUJ1ZmZlcnMoMSwgJm1fdmVydGV4QnVmZmVyKTsKKyAg
ICAgICAgbV92ZXJ0ZXhCdWZmZXIgPSAwOworICAgIH0KKworICAgIGlmIChtX2luZGV4QnVmZmVy
KSB7CisgICAgICAgIDo6Z2xEZWxldGVCdWZmZXJzKDEsICZtX2luZGV4QnVmZmVyKTsKKyAgICAg
ICAgbV9pbmRleEJ1ZmZlciA9IDA7CisgICAgfQorfQorCitHTHVpbnQgVGV4dHVyZUJsaXR0ZXI6
OmxvYWRTaGFkZXIoR0xlbnVtIHR5cGUsIGNvbnN0IEdMY2hhciAqc2hhZGVyU3JjKQoreworICAg
IEdMdWludCBzaGFkZXI7CisgICAgR0xpbnQgY29tcGlsZWQ7CisKKyAgICBzaGFkZXIgPSBnbENy
ZWF0ZVNoYWRlcih0eXBlKTsKKworICAgIGlmICghc2hhZGVyKSB7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIGdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNyYywgMCk7CisgICAgZ2xD
b21waWxlU2hhZGVyKHNoYWRlcik7CisgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0NPTVBJ
TEVfU1RBVFVTLCAmY29tcGlsZWQpOworCisgICAgaWYgKCFjb21waWxlZCkgeworICAgICAgICBn
bERlbGV0ZVNoYWRlcihzaGFkZXIpOworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjb21w
aWxlIHNoYWRlci4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHNo
YWRlcjsKK30KKwordm9pZCBUZXh0dXJlQmxpdHRlcjo6YmluZEFycmF5QnVmZmVyKCkKK3sKKyAg
ICBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KFZFUlRFWEFUVFJJQik7CisgICAgZ2xFbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShURVhDT09SREFUVFJJQik7CisgICAgZ2xCaW5kQnVmZmVyKEdMX0FS
UkFZX0JVRkZFUiwgbV92ZXJ0ZXhCdWZmZXIpOworCisgICAgaWYgKG1fZmxpcCkKKyAgICAgICAg
Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKFZFUlRFWEFUVFJJQiwgNCwgR0xfRkxPQVQsIEdMX0ZBTFNF
LCAwLCAodm9pZCopRkxJUE9GRlNFVCk7CisgICAgZWxzZQorICAgICAgICBnbFZlcnRleEF0dHJp
YlBvaW50ZXIoVkVSVEVYQVRUUklCLCA0LCBHTF9GTE9BVCwgR0xfRkFMU0UsIDAsICh2b2lkKilO
VUxMKTsKKworICAgIGdsVmVydGV4QXR0cmliUG9pbnRlcihURVhDT09SREFUVFJJQiwgMiwgR0xf
RkxPQVQsIEdMX0ZBTFNFLCAwLCAodm9pZCopVEVYQ09PUkRPRkZTRVQpOworfQorCit2b2lkIFRl
eHR1cmVCbGl0dGVyOjplbmFibGVWZXJ0ZXhBcnJheSgpCit7CisgICAgaWYgKG1fY3VycmVudFZl
cnRleEhhbmRsZSkKKyAgICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheShtX2N1cnJlbnRWZXJ0ZXhI
YW5kbGUpOworICAgIGVsc2UgeworICAgICAgICBiaW5kQXJyYXlCdWZmZXIoKTsKKyAgICAgICAg
Z2xCaW5kQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBtX2luZGV4QnVmZmVyKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dHVyZUJsaXR0ZXI6OmRpc2FibGVWZXJ0ZXhBcnJheSgpCit7Cisg
ICAgaWYgKG1fY3VycmVudFZlcnRleEhhbmRsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2xE
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkoVkVSVEVYQVRUUklCKTsKKyAgICBnbERpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheShURVhDT09SREFUVFJJQik7Cit9CisKK2Jvb2wgVGV4dHVyZUJsaXR0ZXI6
OmxpbmtQcm9ncmFtKGNvbnN0IEdMdWludCBwcm9ncmFtSWQpCit7CisgICAgZ2xMaW5rUHJvZ3Jh
bShwcm9ncmFtSWQpOworICAgIEdMaW50IGxpbmtTdGF0dXMgPSAwOworICAgIGdsR2V0UHJvZ3Jh
bWl2KHByb2dyYW1JZCwgR0xfTElOS19TVEFUVVMsICZsaW5rU3RhdHVzKTsKKworICAgIGlmICgh
bGlua1N0YXR1cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgVGV4dHVyZUJsaXR0ZXI6OmluaXRpYWxpemVWQk8oKQoreworICAgIGlmIChtX2ds
R2VuVmVydGV4QXJyYXlzKSB7CisgICAgICAgIG1fY3VycmVudFZlcnRleEhhbmRsZSA9IG1fZmxp
cCA/IG1fZmxpcFZlcnRleEhhbmRsZSA6IG1fdmVydGV4SGFuZGxlOworCisgICAgICAgIGlmICht
X2N1cnJlbnRWZXJ0ZXhIYW5kbGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlm
IChtX3ZlcnRleEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gYmluZCBidWZmZXJz
LgorICAgIEdMdWludCB0ZW1wWzJdOworICAgIGdsR2VuQnVmZmVycygyLCB0ZW1wKTsKKyAgICBt
X3ZlcnRleEJ1ZmZlciA9IHRlbXBbMF07CisgICAgbV9pbmRleEJ1ZmZlciA9IHRlbXBbMV07Cisg
ICAgZ2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhCdWZmZXIpOworICAgIGds
QnVmZmVyRGF0YShHTF9BUlJBWV9CVUZGRVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLAor
ICAgICAgICAgICAgICAgICBHTF9TVEFUSUNfRFJBVyk7CisKKyAgICAvLyBDcmVhdGUgYW5kIHNl
dC11cCB0aGUgdmVydGV4IGFycmF5IG9iamVjdAorICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlz
ICYmIG1fZ2xCaW5kVmVydGV4QXJyYXkpIHsKKyAgICAgICAgR0x1aW50IHZlcnRleEhhbmRsZTsK
KyAgICAgICAgbV9nbEdlblZlcnRleEFycmF5cygxLCAmdmVydGV4SGFuZGxlKTsKKyAgICAgICAg
bV9nbEJpbmRWZXJ0ZXhBcnJheSh2ZXJ0ZXhIYW5kbGUpOworICAgICAgICBiaW5kQXJyYXlCdWZm
ZXIoKTsKKworICAgICAgICBpZiAobV9mbGlwKQorICAgICAgICAgICAgbV9mbGlwVmVydGV4SGFu
ZGxlID0gdmVydGV4SGFuZGxlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3ZlcnRleEhh
bmRsZSA9IHZlcnRleEhhbmRsZTsKKworICAgICAgICBtX2N1cnJlbnRWZXJ0ZXhIYW5kbGUgPSB2
ZXJ0ZXhIYW5kbGU7CisgICAgfQorCisgICAgZ2xCaW5kQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlf
QlVGRkVSLCBtX2luZGV4QnVmZmVyKTsKKyAgICBnbEJ1ZmZlckRhdGEoR0xfRUxFTUVOVF9BUlJB
WV9CVUZGRVIsIHNpemVvZihpbmRleFZlcnRpY2VzKSwgaW5kZXhWZXJ0aWNlcywKKyAgICAgICAg
ICAgICAgICAgR0xfU1RBVElDX0RSQVcpOworfQorCitib29sIFRleHR1cmVCbGl0dGVyOjppbml0
aWFsaXplUHJvZ3JhbSgpCit7CisgICAgaWYgKG1fc2hhZGVyUHJvZ3JhbSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAvLyBjcmVhdGUgc2hhZGVyLgorICAgIEdMdWludCB2ZXJ0ZXhTaGFk
ZXIgPSBsb2FkU2hhZGVyKEdMX1ZFUlRFWF9TSEFERVIsIEdldFNoYWRlclNvdXJjZShHTF9WRVJU
RVhfU0hBREVSKSk7CisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEdMdWludCBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXIoR0xfRlJBR01FTlRf
U0hBREVSLCBHZXRTaGFkZXJTb3VyY2UoR0xfRlJBR01FTlRfU0hBREVSKSk7CisKKyAgICBpZiAo
IWZyYWdtZW50U2hhZGVyKSB7CisgICAgICAgIGdsRGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX3NoYWRlclByb2dyYW0gPSBn
bENyZWF0ZVByb2dyYW0oKTsKKworICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKSB7CisgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBwcm9ncmFtLiIpOworICAgICAgICBnbERlbGV0
ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICBnbERlbGV0ZVNoYWRlcihmcmFnbWVudFNo
YWRlcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBnbEF0dGFjaFNoYWRl
cihtX3NoYWRlclByb2dyYW0sIHZlcnRleFNoYWRlcik7CisgICAgZ2xBdHRhY2hTaGFkZXIobV9z
aGFkZXJQcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisgICAgZ2xCaW5kQXR0cmliTG9jYXRpb24o
bV9zaGFkZXJQcm9ncmFtLCBWRVJURVhBVFRSSUIsICJtX3ZQb3NpdGlvbiIpOworICAgIGdsQmlu
ZEF0dHJpYkxvY2F0aW9uKG1fc2hhZGVyUHJvZ3JhbSwgVEVYQ09PUkRBVFRSSUIsICJtX3RleENv
b3JkIik7CisgICAgYm9vbCBsaW5rZWQgPSBsaW5rUHJvZ3JhbShtX3NoYWRlclByb2dyYW0pOwor
ICAgIGdsRGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7CisgICAgZ2xEZWxldGVTaGFkZXIoZnJh
Z21lbnRTaGFkZXIpOworCisgICAgaWYgKCFsaW5rZWQpIHsKKyAgICAgICAgY2xlYXIoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEdMdWludCBzYW1wbGVyTG9jYXRpb24g
PSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3NoYWRlclByb2dyYW0sICJ1X3RleFNhbXBsZXIiKTsK
KyAgICBHTHVpbnQgc2FtcGxlciA9IDA7CisgICAgLy8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIHNh
bXBsZXIgb2JqZWN0LiBUaGlzIHdvdWxkIGhlbHAgdXMgc2VwZXJhdGUgdGhlIHRleHR1cmUgYW5k
IHNhbXBsZXIgc3RhdGUuCisgICAgaWYgKG1fZ2xHZW5TYW1wbGVycyAmJiBtX2dsU2FtcGxlclBh
cmFtZXRlcmkpIHsKKyAgICAgICAgbV9nbEdlblNhbXBsZXJzKDEgLCAmc2FtcGxlcik7CisgICAg
ICAgIG1fZ2xTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBHTF9URVhUVVJFX1dSQVBfUywgR0xf
Q0xBTVBfVE9fRURHRSk7CisgICAgICAgIG1fZ2xTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIG1fZ2xTYW1wbGVy
UGFyYW1ldGVyaShzYW1wbGVyLCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX05FQVJFU1QpOwor
ICAgICAgICBtX2dsU2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9ORUFSRVNUKTsKKyAgICB9CisKKyAgICBHTGludCBib3VuZFByb2dyYW07CisgICAg
OjpnbEdldEludGVnZXJ2KEdMX0NVUlJFTlRfUFJPR1JBTSwgJmJvdW5kUHJvZ3JhbSk7CisKKyAg
ICBnbFVzZVByb2dyYW0obV9zaGFkZXJQcm9ncmFtKTsKKyAgICBnbFVuaWZvcm0xaShzYW1wbGVy
TG9jYXRpb24sIDApOworCisgICAgaWYgKG1fZ2xCaW5kU2FtcGxlcikKKyAgICAgICAgbV9nbEJp
bmRTYW1wbGVyKDAgLCBzYW1wbGVyKTsKKworICAgIGdsVW5pZm9ybTFpKHNhbXBsZXJMb2NhdGlv
biwgMCk7CisgICAgZ2xVc2VQcm9ncmFtKGJvdW5kUHJvZ3JhbSk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworI2lmIFVTRShHTFgpCitib29sIFRleHR1cmVCbGl0dGVyOjpkcmF3VGV4dHVyZShj
b25zdCBHTHVpbnQgc291cmNlVGV4dHVyZSwgY29uc3QgR0x1aW50IHRhcmdldEZib0lkLCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgYm9vbCBmbGlwLCBH
TGVudW0gZmlsdGVyKQoreworICAgICAgICBib29sIGVuYWJsZVNjaXNzb3JUZXN0ID0gOjpnbElz
RW5hYmxlZChHTF9TQ0lTU09SX1RFU1QpOworCisgICAgICAgIGlmIChlbmFibGVTY2lzc29yVGVz
dCkKKyAgICAgICAgICAgIDo6Z2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisKKyAgICAgICAg
aWYgKCFtX2Zib0lkKQorICAgICAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvSWQp
OworCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpSRUFEX0ZSQU1F
QlVGRkVSLCBtX2Zib0lkKTsKKyAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IHNvdXJjZVRleHR1cmUpOworICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoRXh0ZW5z
aW9uczNEOjpSRUFEX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVS
RV8yRCwgc291cmNlVGV4dHVyZSwgMCk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoRXh0
ZW5zaW9uczNEOjpEUkFXX0ZSQU1FQlVGRkVSLCB0YXJnZXRGYm9JZCk7CisKKyAgICAgICAgaWYg
KGZsaXApCisgICAgICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyKHNyY1JlY3QueCgpLCBzcmNS
ZWN0LnkoKSwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLCBkZXN0UmVjdC54KCks
IGRlc3RSZWN0LngoKSArIGRlc3RSZWN0LmhlaWdodCgpLCBkZXN0UmVjdC55KCkgKyBkZXN0UmVj
dC53aWR0aCgpLCBkZXN0UmVjdC55KCksIEdMX0NPTE9SX0JVRkZFUl9CSVQsIGZpbHRlcik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXIoc3JjUmVjdC54KCks
IHNyY1JlY3QueSgpLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksIGRlc3RSZWN0
LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwg
R0xfQ09MT1JfQlVGRkVSX0JJVCwgZmlsdGVyKTsKKworICAgICAgICA6OmdsRnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RF
WFRVUkVfMkQsIDAsIDApOworCisgICAgICAgIGlmIChlbmFibGVTY2lzc29yVGVzdCkKKyAgICAg
ICAgICAgIDo6Z2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKK30KKyNlbHNlCitib29sIFRleHR1cmVCbGl0dGVyOjpkcmF3VGV4dHVyZShjb25zdCBHTHVp
bnQgc291cmNlVGV4dHVyZSwgY29uc3QgR0x1aW50IHRhcmdldEZib0lkLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCwgYm9vbCBmbGlwLCBHTGVudW0gZmls
dGVyKQoreworICAgIGluaXRpYWxpemVHTEJpbmRpbmdzKCk7CisKKyAgICBpZiAoIWluaXRpYWxp
emVQcm9ncmFtKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNjb3BlZFByb2dyYW1C
aW5kaW5nIHByb2dyYW0obV9zaGFkZXJQcm9ncmFtKTsKKyAgICBtX2ZsaXAgPSBmbGlwOworICAg
IGluaXRpYWxpemVWQk8oKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCB0YXJnZXRGYm9JZCk7CisgICAgOjpnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVR8IEdMX0RF
UFRIX0JVRkZFUl9CSVQpOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBzb3Vy
Y2VUZXh0dXJlKTsKKyAgICA6OmdsVmlld3BvcnQgKGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgp
LCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSk7CisgICAgZW5hYmxlVmVydGV4
QXJyYXkoKTsKKyAgICA6OmdsRHJhd0VsZW1lbnRzKEdMX1RSSUFOR0xFX1NUUklQLCB2ZXJ0ZXhJ
bmRleFNpemUsIEdMX1VOU0lHTkVEX1NIT1JULCAwKTsKKyAgICBkaXNhYmxlVmVydGV4QXJyYXko
KTsKKworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK2Jvb2wgVGV4dHVyZUJsaXR0ZXI6
OmNvcHlUZXh0dXJlKGNvbnN0IEdMdWludCBzb3VyY2UsIGNvbnN0IEdMdWludCBkZXN0aW5hdGlv
biwgYm9vbCBmbGlwKQoreworICAgIGluaXRpYWxpemVHTEJpbmRpbmdzKCk7CisKKyAgICBpZiAo
IWluaXRpYWxpemVQcm9ncmFtKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
bV9mYm9JZCkKKyAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvSWQpOworCisgICAg
U2NvcGVkUHJvZ3JhbUJpbmRpbmcgcHJvZ3JhbShtX3NoYWRlclByb2dyYW0pOworICAgIG1fZmxp
cCA9IGZsaXA7CisgICAgaW5pdGlhbGl6ZVZCTygpOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIG1fZmJvSWQpOworICAgIDo6Z2xDbGVhcihHTF9DT0xPUl9CVUZGRVJf
QklUfCBHTF9ERVBUSF9CVUZGRVJfQklUKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgc291cmNlKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZG
RVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBkZXN0aW5hdGlvbiwgMCk7
CisgICAgZW5hYmxlVmVydGV4QXJyYXkoKTsKKyAgICA6OmdsRHJhd0VsZW1lbnRzKEdMX1RSSUFO
R0xFX1NUUklQLCB2ZXJ0ZXhJbmRleFNpemUsIEdMX1VOU0lHTkVEX1NIT1JULCAwKTsKKyAgICBk
aXNhYmxlVmVydGV4QXJyYXkoKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJB
TUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCAwLCAwKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZUJsaXR0ZXIuaCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZUJsaXR0ZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjhjYjY2Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlQmxpdHRlci5oCkBAIC0wLDAg
KzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dHVyZUJsaXR0ZXJfaAor
I2RlZmluZSBUZXh0dXJlQmxpdHRlcl9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlIDxvcGVuZ2wvR0xEZWZzLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHR1cmVCbGl0dGVyIDog
cHVibGljIFdURjo6UmVmQ291bnRlZEJhc2UgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRl
eHR1cmVCbGl0dGVyKTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVC
bGl0dGVyPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpY1RleHR1cmVCbGl0
dGVyKQorICAgICAgICAgICAgbV9zdGF0aWNUZXh0dXJlQmxpdHRlciA9IG5ldyBUZXh0dXJlQmxp
dHRlcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3N0YXRpY1RleHR1cmVCbGl0dGVy
LT5yZWYoKTsKKworICAgICAgICByZXR1cm4gYWRvcHRSZWYobV9zdGF0aWNUZXh0dXJlQmxpdHRl
cik7CisgICAgfQorCisgICAgdm9pZCBkZXJlZigpCisgICAgeworICAgICAgICBpZiAoZGVyZWZC
YXNlKCkpIHsKKyAgICAgICAgICAgIG1fc3RhdGljVGV4dHVyZUJsaXR0ZXIgPSAwOworICAgICAg
ICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUZXh0dXJlQmxpdHRl
cigpOworICAgIH5UZXh0dXJlQmxpdHRlcigpOworICAgIGJvb2wgY29weVRleHR1cmUoY29uc3Qg
R0x1aW50LCBjb25zdCBHTHVpbnQsIGJvb2wgPSBmYWxzZSk7CisgICAgYm9vbCBkcmF3VGV4dHVy
ZShjb25zdCBHTHVpbnQsIGNvbnN0IEdMdWludCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJl
Y3QmLCBib29sID0gZmFsc2UsIEdMZW51bSA9IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsK
KyAgICB2b2lkIGNsZWFyKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFRleHR1cmVCbGl0dGVy
KiBtX3N0YXRpY1RleHR1cmVCbGl0dGVyOworICAgIGJvb2wgaW5pdGlhbGl6ZVByb2dyYW0oKTsK
KyAgICB2b2lkIGVuYWJsZVZlcnRleEFycmF5KCk7CisgICAgdm9pZCBkaXNhYmxlVmVydGV4QXJy
YXkoKTsKKyAgICB2b2lkIGJpbmRBcnJheUJ1ZmZlcigpOworICAgIHZvaWQgaW5pdGlhbGl6ZVZC
TygpOworICAgIGJvb2wgbGlua1Byb2dyYW0oY29uc3QgR0x1aW50IHByb2dyYW1JZCk7CisgICAg
R0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5cGUsIGNvbnN0IEdMY2hhciAqc2hhZGVyU3JjKTsK
KyAgICBHTHVpbnQgbV92ZXJ0ZXhIYW5kbGU7CisgICAgR0x1aW50IG1fZmxpcFZlcnRleEhhbmRs
ZTsKKyAgICBHTHVpbnQgbV9jdXJyZW50VmVydGV4SGFuZGxlOworICAgIEdMdWludCBtX3NoYWRl
clByb2dyYW07CisgICAgR0x1aW50IG1fdmVydGV4QnVmZmVyOworICAgIEdMdWludCBtX2luZGV4
QnVmZmVyOworICAgIEdMdWludCBtX2Zib0lkOworICAgIGJvb2wgbV9mbGlwIDoxOworfTsKKwor
fQorCisjZW5kaWYKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185304</attachid>
            <date>2013-01-29 14:08:06 -0800</date>
            <delta_ts>2013-02-08 07:15:46 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>blitter.patch</filename>
            <type>text/plain</type>
            <size>31114</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDA1YjY2ZjcuLjljMTE1MjYgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEz
LTAxLTI5ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXSBbV2ViR0xdIEFkZCBzdXBwb3J0IGZvciBibGl0aW5nIHRleHR1cmUg
Y29udGVudHMgdG8gRkJPLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA2NTA4CisKKyAgICAgICAgV2UgY3VycmVudGx5IHJlbHkgb24gRVhUX2ZyYW1l
YnVmZmVyX2JsaXQgdG8gYmxpdCBjb250ZW50cyBvZiBhIHRleHR1cmUgdG8gYSBGQk8uCisgICAg
ICAgIFRoaXMgZXh0ZW5zaW9uIGlzIG5vdCBleHBvc2VkIG9uIEdMRVMxLjEgb3IgMi4wLiBUaGlz
IHBhdGNoIHByb3ZpZGVzIGEgZmFsbCBiYWNrCisgICAgICAgIG1lY2hhbmlzbSBieSB1c2luZyBz
aGFkZXJzIHRvIGJsaXQgdGV4dHVyZSBjb250ZW50cyB0byBhbiBGQk8uCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBX
ZWJHTCB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtTml4LmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBs
YXRmb3JtU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3JtU3VyZmFjZTo6
R0xQbGF0Zm9ybVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6
OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1TdXJmYWNlOjpk
ZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1
cmZhY2UuaDoKKyAgICAgICAgKEdMUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9UZXh0dXJlQmxpdHRlci5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXplR0xCaW5kaW5ncyk6CisgICAg
ICAgIChTY29wZWRUb2dnbGVHTFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFRvZ2ds
ZUdMU3RhdGU6OlNjb3BlZFRvZ2dsZUdMU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVk
VG9nZ2xlR0xTdGF0ZTo6flNjb3BlZFRvZ2dsZUdMU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U2NvcGVkVG9nZ2xlR0xTdGF0ZTo6dG9nZ2xlU3RhdGUpOgorICAgICAgICAoU2NvcGVkUHJvZ3Jh
bUJpbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUHJvZ3JhbUJpbmRpbmc6OlNjb3Bl
ZFByb2dyYW1CaW5kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFByb2dyYW1CaW5kaW5n
Ojp+U2NvcGVkUHJvZ3JhbUJpbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R2V0U2hhZGVyU291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVCbGl0dGVyOjpUZXh0dXJlQmxpdHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlQmxpdHRlcjo6flRleHR1cmVCbGl0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVCbGl0dGVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlQmxpdHRlcjo6bG9hZFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJl
QmxpdHRlcjo6YmluZEFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVCbGl0
dGVyOjplbmFibGVWZXJ0ZXhBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlQmxpdHRl
cjo6ZGlzYWJsZVZlcnRleEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVCbGl0dGVy
OjpsaW5rUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlQmxpdHRlcjo6aW5pdGlh
bGl6ZVZCTyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlQmxpdHRlcjo6aW5pdGlhbGl6ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZUJsaXR0ZXI6OmRyYXdUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVCbGl0dGVyOjpjb3B5VGV4dHVyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvVGV4dHVyZUJsaXR0ZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRleHR1cmVCbGl0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVCbGl0dGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZUJsaXR0ZXI6OmRlcmVmKToKKyAgICAgICAgSGVscGVyIGNsYXNzIHRvIGJsaXQgdGV4dHVyZSBj
b250ZW50cyB0byBhbiBGQk8uCisKIDIwMTMtMDEtMjQgIFZpY3RvciBKYXF1ZXogIDx2amFxdWV6
QGlnYWxpYS5jb20+CgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGY1MTc5YzYuLjUyZDMzN2Mg
MTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTMxNCw2ICszMTQsNyBAQCBpZiAoV1RGX1VTRV8z
RF9HUkFQSElDUykKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1T
dXJmYWNlLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0xDb21tb24uY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L0dyYXBoaWNzU3VyZmFjZS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
VGV4dHVyZUJsaXR0ZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCmluZGV4IDdm
N2E1NjQuLjQ2NzE5NGQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCkBAIC03MCwxMSArNzAsMTEg
QEAgUGFzc093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0
ZVRyYW5zcG9ydFN1cmZhY2UoKQogCiBHTFBsYXRmb3JtU3VyZmFjZTo6R0xQbGF0Zm9ybVN1cmZh
Y2UoKQogICAgIDogbV9yZXN0b3JlTmVlZGVkKHRydWUpCi0gICAgLCBtX2Zib0lkKDApCiAgICAg
LCBtX3NoYXJlZERpc3BsYXkoMCkKICAgICAsIG1fZHJhd2FibGUoMCkKICAgICAsIG1fYnVmZmVy
SGFuZGxlKDApCiB7CisgICAgbV9ibGl0dGVyID0gVGV4dHVyZUJsaXR0ZXI6OmNyZWF0ZSgpOwog
fQogCiBHTFBsYXRmb3JtU3VyZmFjZTo6fkdMUGxhdGZvcm1TdXJmYWNlKCkKQEAgLTExMywyNCAr
MTEzLDExIEBAIHZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKIAogdm9pZCBH
TFBsYXRmb3JtU3VyZmFjZTo6dXBkYXRlQ29udGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVyZSwg
Y29uc3QgR0x1aW50IGJpbmRGYm9JZCwgY29uc3QgdWludDMyX3QgYmluZFRleHR1cmUpCiB7Ci0g
ICAgaWYgKCFtX2Zib0lkKQotICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm9JZCk7
Ci0KLSAgICBtX3Jlc3RvcmVOZWVkZWQgPSBmYWxzZTsKLQotICAgIGludCB4ID0gMDsKLSAgICBp
bnQgeSA9IDA7Ci0gICAgaW50IHdpZHRoID0gbV9yZWN0LndpZHRoKCk7Ci0gICAgaW50IGhlaWdo
dCA9IG1fcmVjdC5oZWlnaHQoKTsKLQotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJB
TUVCVUZGRVIsIG1fZmJvSWQpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4
dHVyZSk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBH
TF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSwgMCk7Ci0gICAgZ2xC
aW5kRnJhbWVidWZmZXIoR0xfRFJBV19GUkFNRUJVRkZFUiwgMCk7Ci0gICAgLy8gVXNlIE5FQVJF
U1QgYXMgbm8gc2NhbGUgaXMgcGVyZm9ybWVkIGR1cmluZyB0aGUgYmxpdC4KLSAgICBnbEJsaXRG
cmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9D
T0xPUl9CVUZGRVJfQklULCBHTF9ORUFSRVNUKTsKKyAgICBpZiAoIW1fYmxpdHRlcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9ibGl0dGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCAwLCBtX3Jl
Y3QsIG1fcmVjdCk7CiAgICAgc3dhcEJ1ZmZlcnMoKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJF
XzJELCAwLCAwKTsKICAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIGJpbmRUZXh0dXJl
KTsKICAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgYmluZEZib0lkKTsKIH0K
QEAgLTE0MywxMSArMTMwLDcgQEAgdm9pZCBHTFBsYXRmb3JtU3VyZmFjZTo6c2V0R2VvbWV0cnko
Y29uc3QgSW50UmVjdCYgbmV3UmVjdCkKIHZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3ko
KQogewogICAgIG1fcmVjdCA9IEludFJlY3QoKTsKLQotICAgIGlmIChtX2Zib0lkKQotICAgICAg
ICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9mYm9JZCk7Ci0KLSAgICBtX2Zib0lkID0gMDsK
KyAgICBtX2JsaXR0ZXIgPSBudWxscHRyOwogfQogCiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmggU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmgKaW5kZXgg
ZThkYjQyNS4uNjczYTJiZiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaApAQCAtMzAsNiArMzAsNyBAQAog
CiAjaW5jbHVkZSAiR0xEZWZzLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHN1
cmZhY2VzL1RleHR1cmVCbGl0dGVyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApAQCAtNzgsMTAgKzc5LDEwIEBAIHByb3RlY3Rl
ZDoKICAgICBHTFBsYXRmb3JtU3VyZmFjZSgpOwogICAgIGJvb2wgbV9yZXN0b3JlTmVlZGVkOwog
ICAgIEludFJlY3QgbV9yZWN0OwotICAgIEdMdWludCBtX2Zib0lkOwogICAgIFBsYXRmb3JtRGlz
cGxheSBtX3NoYXJlZERpc3BsYXk7CiAgICAgUGxhdGZvcm1EcmF3YWJsZSBtX2RyYXdhYmxlOwog
ICAgIFBsYXRmb3JtQnVmZmVySGFuZGxlIG1fYnVmZmVySGFuZGxlOworICAgIFJlZlB0cjxUZXh0
dXJlQmxpdHRlcj4gbV9ibGl0dGVyOwogfTsKIAogfQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL1RleHR1cmVCbGl0dGVyLmNwcCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9UZXh0dXJlQmxpdHRlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFmNmQzYwotLS0gL2Rldi9udWxsCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9UZXh0dXJlQmxpdHRlci5j
cHAKQEAgLTAsMCArMSw2MDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUZXh0dXJlQmxpdHRlci5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCisKKyNpbmNsdWRl
IDxvcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyNkZWZpbmUgU0hBREVSX0RFQlVHCitU
ZXh0dXJlQmxpdHRlciogVGV4dHVyZUJsaXR0ZXI6Om1fc3RhdGljVGV4dHVyZUJsaXR0ZXIgPSAw
Oworc3RhdGljIGNvbnN0IEdMZmxvYXQgdmVydGljZXNbXSA9IHsgMS4wZiwgMS4wZiwgMC4wZiwg
MS4wZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLjBmLCAxLjBmLCAw
LjBmLCAxLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgLTEu
MGYsIDAuMGYsIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMS4w
ZiwgLTEuMGYsIDAuMGYsIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtMS4wZiwgLTEuMGYsIDAuMGYsIDEuMGYsICAvLyBGbGlwIGNvb3JkaW5hdGVzLgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgLTEuMGYsIDAuMGYsIDEuMGYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMS4wZiwgMS4wZiwgMC4wZiwgMS4w
ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYsIDEuMGYsIDAuMGYs
IDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjBmLCAxLjBmLDEu
MGYsIDEuMGYsICAgLy8gVGV4IGNvb3JkaW5hdGVzLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMC4wZiwgMC4wZiwxLjBmLCAwLjBmfTsKKworc3RhdGljIGNvbnN0IEdMdXNo
b3J0IGluZGV4VmVydGljZXNbXSA9IHsgMCwgMSwgMiwgM307CitzdGF0aWMgY29uc3QgaW50IHZl
cnRleEluZGV4U2l6ZSA9IHNpemVvZihpbmRleFZlcnRpY2VzKS9zaXplb2YoaW5kZXhWZXJ0aWNl
c1swXSk7CitzdGF0aWMgY29uc3QgaW50IEZMSVBPRkZTRVQgPSBzaXplb2YoZmxvYXQpICogNCAq
IDQ7CitzdGF0aWMgY29uc3QgaW50IFRFWENPT1JET0ZGU0VUID0gRkxJUE9GRlNFVCAqIDI7Citz
dGF0aWMgY29uc3QgaW50IFZFUlRFWEFUVFJJQiA9IDA7CitzdGF0aWMgY29uc3QgaW50IFRFWENP
T1JEQVRUUklCID0gMTsKKworI2lmIFVTRShPUEVOR0xfRVNfMikKK3N0YXRpYyBQRk5HTEJJTkRW
RVJURVhBUlJBWU9FU1BST0MgbV9nbEJpbmRWZXJ0ZXhBcnJheSA9IDA7CitzdGF0aWMgUEZOR0xE
RUxFVEVWRVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXMgPSAwOworc3Rh
dGljIFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsR2VuVmVydGV4QXJyYXlzID0gMDsK
K3N0YXRpYyBQRk5HTElTVkVSVEVYQVJSQVlPRVNQUk9DIG1fZ2xJc1ZlcnRleEFycmF5ID0gMDsK
KyNlbHNlCitzdGF0aWMgUEZOR0xCSU5EVkVSVEVYQVJSQVlQUk9DIG1fZ2xCaW5kVmVydGV4QXJy
YXkgPSAwOworc3RhdGljIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTUFJPQyBtX2dsRGVsZXRlVmVy
dGV4QXJyYXlzID0gMDsKK3N0YXRpYyBQRk5HTEdFTlZFUlRFWEFSUkFZU1BST0MgbV9nbEdlblZl
cnRleEFycmF5cyA9IDA7CitzdGF0aWMgUEZOR0xJU1ZFUlRFWEFSUkFZUFJPQyBtX2dsSXNWZXJ0
ZXhBcnJheSA9IDA7CitzdGF0aWMgUEZOR0xTQU1QTEVSUEFSQU1FVEVSSVBST0MgbV9nbFNhbXBs
ZXJQYXJhbWV0ZXJpID0gMDsKK3N0YXRpYyBQRk5HTEdFTlNBTVBMRVJTUFJPQyBtX2dsR2VuU2Ft
cGxlcnMgPSAwOworc3RhdGljIFBGTkdMQklORFNBTVBMRVJQUk9DIG1fZ2xCaW5kU2FtcGxlciA9
IDA7CisjZW5kaWYKKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUdMQmluZGluZ3MoKQoreworICAg
IHN0YXRpYyBib29sIGJpbmRpbmdzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoYmluZGlu
Z3NJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYmluZGluZ3NJbml0aWFsaXpl
ZCA9IHRydWU7CisKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgaWYgKEdMUGxhdGZvcm1Db250
ZXh0OjpzdXBwb3J0c0dMRXh0ZW5zaW9uKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpKSB7
CisgICAgICAgIG1fZ2xCaW5kVmVydGV4QXJyYXkgPSByZWludGVycHJldF9jYXN0PFBGTkdMQklO
RFZFUlRFWEFSUkFZT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsQmluZFZlcnRleEFycmF5
T0VTIikpOworICAgICAgICBtX2dsR2VuVmVydGV4QXJyYXlzID0gcmVpbnRlcnByZXRfY2FzdDxQ
Rk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdlblZlcnRl
eEFycmF5c09FUyIpKTsKKyAgICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UEZOR0xERUxFVEVWRVJURVhBUlJBWVNPRVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVz
cygiZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMiKSk7CisgICAgICAgIG1fZ2xJc1ZlcnRleEFycmF5
ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTElTVkVSVEVYQVJSQVlPRVNQUk9DPihlZ2xHZXRQcm9j
QWRkcmVzcygiZ2xJc1ZlcnRleEFycmF5T0VTIikpOworICAgIH0KKworI2Vsc2UKKyAgICBib29s
IHN1cHBvcnRzVkFPID0gR0xQbGF0Zm9ybUNvbnRleHQ6OnN1cHBvcnRzR0xFeHRlbnNpb24oIkdM
X0FSQl92ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisgICAgLy8gVGhpcyBleHQgaXMgb25seSBhdmFp
bGFibGUgd2l0aCBkZXNrdG9wIEdMIGFuZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IEdMRVMyLjAsIHN1
cHBvcnQgZm9yIHRoZSBzYW1lIGhhcyBiZWVuIGFkZGVkIGluIEdMRVMzLjAuCisgICAgYm9vbCBz
dXBwb3J0c1NhbXBsZXJPYmplY3RzID0gR0xQbGF0Zm9ybUNvbnRleHQ6OnN1cHBvcnRzR0xFeHRl
bnNpb24oIkdMX0FSQl9zYW1wbGVyX29iamVjdHMiKTsKKyNpZiBVU0UoR0xYKQorICAgIGlmIChz
dXBwb3J0c1ZBTykgeworICAgICAgICBtX2dsQmluZFZlcnRleEFycmF5ID0gcmVpbnRlcnByZXRf
Y2FzdDxQRk5HTEJJTkRWRVJURVhBUlJBWVBST0M+KGdsWEdldFByb2NBZGRyZXNzKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbEJpbmRWZXJ0ZXhBcnJheSIpKSk7CisgICAgICAg
IG1fZ2xHZW5WZXJ0ZXhBcnJheXMgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VOVkVSVEVYQVJS
QVlTUFJPQz4oZ2xYR2V0UHJvY0FkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVieXRl
Kj4oImdsR2VuVmVydGV4QXJyYXlzIikpKTsKKyAgICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xERUxFVEVWRVJURVhBUlJBWVNQUk9DPihnbFhHZXRQ
cm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPigiZ2xEZWxldGVWZXJ0
ZXhBcnJheXMiKSkpOworICAgICAgICBtX2dsSXNWZXJ0ZXhBcnJheSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8UEZOR0xJU1ZFUlRFWEFSUkFZUFJPQz4oZ2xYR2V0UHJvY0FkZHJlc3MocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBHTHVieXRlKj4oImdsSXNWZXJ0ZXhBcnJheSIpKSk7CisgICAgfQorCisgICAg
aWYgKHN1cHBvcnRzU2FtcGxlck9iamVjdHMpIHsKKyAgICAgICAgbV9nbFNhbXBsZXJQYXJhbWV0
ZXJpID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFNBTVBMRVJQQVJBTUVURVJJUFJPQz4oZ2xYR2V0
UHJvY0FkZHJlc3MocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVieXRlKj4oImdsU2FtcGxlclBh
cmFtZXRlcmkiKSkpOworICAgICAgICBtX2dsR2VuU2FtcGxlcnMgPSByZWludGVycHJldF9jYXN0
PFBGTkdMR0VOU0FNUExFUlNQUk9DPihnbFhHZXRQcm9jQWRkcmVzcyhyZWludGVycHJldF9jYXN0
PGNvbnN0IEdMdWJ5dGUqPigiZ2xHZW5TYW1wbGVycyIpKSk7CisgICAgICAgIG1fZ2xCaW5kU2Ft
cGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EU0FNUExFUlBST0M+KGdsWEdldFByb2NB
ZGRyZXNzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbEJpbmRTYW1wbGVyIikp
KTsKKyAgICB9CisjZWxpZiBVU0UoRUdMKQorICAgIGlmIChzdXBwb3J0c1ZBTykgeworICAgICAg
ICBtX2dsQmluZFZlcnRleEFycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEJJTkRWRVJURVhB
UlJBWVBST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEJpbmRWZXJ0ZXhBcnJheSIpKTsKKyAgICAg
ICAgbV9nbEdlblZlcnRleEFycmF5cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xHRU5WRVJURVhB
UlJBWVNQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xHZW5WZXJ0ZXhBcnJheXMiKSk7CisgICAg
ICAgIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXMgPSByZWludGVycHJldF9jYXN0PFBGTkdMREVMRVRF
VkVSVEVYQVJSQVlTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsRGVsZXRlVmVydGV4QXJyYXlz
IikpOworICAgICAgICBtX2dsSXNWZXJ0ZXhBcnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xJ
U1ZFUlRFWEFSUkFZUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsSXNWZXJ0ZXhBcnJheSIpKTsK
KyAgICB9CisKKyAgICBpZiAoc3VwcG9ydHNTYW1wbGVyT2JqZWN0cykgeworICAgICAgICBtX2ds
U2FtcGxlclBhcmFtZXRlcmkgPSByZWludGVycHJldF9jYXN0PFBGTkdMU0FNUExFUlBBUkFNRVRF
UklQUk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xTYW1wbGVyUGFyYW1ldGVyaSIpKTsKKyAgICAg
ICAgbV9nbEdlblNhbXBsZXJzID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFTlNBTVBMRVJTUFJP
Qz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsR2VuU2FtcGxlcnMiKSk7CisgICAgICAgIG1fZ2xCaW5k
U2FtcGxlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xCSU5EU0FNUExFUlBST0M+KGVnbEdldFBy
b2NBZGRyZXNzKCJnbEJpbmRTYW1wbGVyIikpOworICAgIH0KKyNlbmRpZgorI2VuZGlmCit9CisK
K2NsYXNzIFNjb3BlZFRvZ2dsZUdMU3RhdGUKK3sKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
Y29wZWRUb2dnbGVHTFN0YXRlKTsKKworcHVibGljOgorICAgIFNjb3BlZFRvZ2dsZUdMU3RhdGUo
KQorICAgIHsKKyAgICAgICAgbV9lbmFibGVCbGVuZCA9IHRvZ2dsZVN0YXRlKEdMX0JMRU5EKTsK
KyAgICAgICAgbV9lbmFibGVDdWxsRmFjZSA9IHRvZ2dsZVN0YXRlKEdMX0NVTExfRkFDRSk7Cisg
ICAgICAgIG1fZW5hYmxlRGVwdGhUZXN0ID0gdG9nZ2xlU3RhdGUoR0xfREVQVEhfVEVTVCk7Cisg
ICAgICAgIG1fZW5hYmxlRGl0aGVyVGVzdCA9IHRvZ2dsZVN0YXRlKEdMX0RJVEhFUik7CisgICAg
ICAgIG1fZW5hYmxlUG9seWdvbk9mZnNldEZpbGwgPSB0b2dnbGVTdGF0ZShHTF9QT0xZR09OX09G
RlNFVF9GSUxMKTsKKyAgICAgICAgbV9lbmFibGVTYW1wbGVBbHBoYSA9IHRvZ2dsZVN0YXRlKEdM
X1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSk7CisgICAgICAgIG1fZW5hYmxlU2FtcGxlQ292ZXJh
Z2UgPSB0b2dnbGVTdGF0ZShHTF9TQU1QTEVfQ09WRVJBR0UpOworICAgICAgICBtX2VuYWJsZVN0
ZW5jaWxUZXN0ID0gdG9nZ2xlU3RhdGUoR0xfU1RFTkNJTF9URVNUKTsKKyAgICAgICAgbV9lbmFi
bGVTY2lzc29yVGVzdCA9IHRvZ2dsZVN0YXRlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgfQorCisg
ICAgflNjb3BlZFRvZ2dsZUdMU3RhdGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZW5hYmxlQmxl
bmQpCisgICAgICAgICAgICA6OmdsRW5hYmxlKEdMX0JMRU5EKTsKKworICAgICAgICBpZiAobV9l
bmFibGVDdWxsRmFjZSkKKyAgICAgICAgICAgIDo6Z2xFbmFibGUoR0xfQ1VMTF9GQUNFKTsKKwor
ICAgICAgICBpZiAobV9lbmFibGVEZXB0aFRlc3QpCisgICAgICAgICAgICA6OmdsRW5hYmxlKEdM
X0RFUFRIX1RFU1QpOworCisgICAgICAgIGlmIChtX2VuYWJsZURpdGhlclRlc3QpCisgICAgICAg
ICAgICA6OmdsRW5hYmxlKEdMX0RJVEhFUik7CisKKyAgICAgICAgaWYgKG1fZW5hYmxlUG9seWdv
bk9mZnNldEZpbGwpCisgICAgICAgICAgICA6OmdsRW5hYmxlKEdMX1BPTFlHT05fT0ZGU0VUX0ZJ
TEwpOworCisgICAgICAgIGlmIChtX2VuYWJsZVNhbXBsZUFscGhhKQorICAgICAgICAgICAgOjpn
bEVuYWJsZShHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpOworCisgICAgICAgIGlmIChtX2Vu
YWJsZVNhbXBsZUNvdmVyYWdlKQorICAgICAgICAgICAgOjpnbEVuYWJsZShHTF9TQU1QTEVfQ09W
RVJBR0UpOworCisgICAgICAgIGlmIChtX2VuYWJsZVN0ZW5jaWxUZXN0KQorICAgICAgICAgICAg
OjpnbEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpOworCisgICAgICAgIGlmIChtX2VuYWJsZVNjaXNz
b3JUZXN0KQorICAgICAgICAgICAgOjpnbEVuYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBib29sIHRvZ2dsZVN0YXRlKGNvbnN0IEdMZW51bSBjYXBhYmlsaXR5
KQorICAgIHsKKyAgICAgICAgYm9vbCBlbmFibGVkID0gOjpnbElzRW5hYmxlZChjYXBhYmlsaXR5
KTsKKworICAgICAgICBpZiAoIWVuYWJsZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgOjpnbERpc2FibGUoY2FwYWJpbGl0eSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgYm9vbCBtX2VuYWJsZUJsZW5kIDoxOworICAgIGJvb2wgbV9lbmFibGVD
dWxsRmFjZSA6MTsKKyAgICBib29sIG1fZW5hYmxlRGVwdGhUZXN0IDoxOworICAgIGJvb2wgbV9l
bmFibGVEaXRoZXJUZXN0IDoxOworICAgIGJvb2wgbV9lbmFibGVQb2x5Z29uT2Zmc2V0RmlsbCA6
MTsKKyAgICBib29sIG1fZW5hYmxlU2FtcGxlQWxwaGEgOjE7CisgICAgYm9vbCBtX2VuYWJsZVNh
bXBsZUNvdmVyYWdlIDoxOworICAgIGJvb2wgbV9lbmFibGVTdGVuY2lsVGVzdCA6MTsKKyAgICBi
b29sIG1fZW5hYmxlU2Npc3NvclRlc3QgOjE7Cit9OworCitjbGFzcyBTY29wZWRQcm9ncmFtQmlu
ZGluZworeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjb3BlZFByb2dyYW1CaW5kaW5nKTsK
KworcHVibGljOgorICAgIFNjb3BlZFByb2dyYW1CaW5kaW5nKEdMdWludCBwcm9ncmFtSWQsIEdM
ZW51bSBmaWx0ZXIpCisgICAgeworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfQUNUSVZFX1RF
WFRVUkUsICZtX2JvdW5kVGV4VW5pdCk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9DVVJS
RU5UX1BST0dSQU0sICZtX2JvdW5kUHJvZ3JhbSk7CisgICAgICAgIDo6Z2xHZXRCb29sZWFudihH
TF9DT0xPUl9XUklURU1BU0ssIG1fY29sb3JNYXNrKTsKKyAgICAgICAgOjpnbENvbG9yTWFzayhH
TF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKKyAgICAgICAgOjpnbEdldEludGVn
ZXJ2KEdMX1ZJRVdQT1JULCAmbV9jdXJyZW50Vmlld3BvcnRbMF0pOworCisgICAgICAgIGlmICht
X2dsR2VuVmVydGV4QXJyYXlzKQorI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICAgICAgICAgIDo6
Z2xHZXRJbnRlZ2VydihHTF9WRVJURVhfQVJSQVlfQklORElOR19PRVMsICZtX2N1cnJlbnRWZXJ0
ZXhBcnJheUJpbmRpbmcpOworI2Vsc2UKKyAgICAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9W
RVJURVhfQVJSQVlfQklORElORywgJm1fY3VycmVudFZlcnRleEFycmF5QmluZGluZyk7CisjZW5k
aWYKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoMCwg
R0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVELCAmbV9hdHRyaWJFbmFibGVkKTsKKyAgICAg
ICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdigwLCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJ
WkUsICZtX2F0dHJpYlNpemUpOworICAgICAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAs
IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFLCAmbV9hdHRyaWJTdHJpZGUpOworICAgICAg
ICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAsIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQ
RSwgJm1fYXR0cmliVHlwZSk7CisgICAgICAgICAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoMCwg
R0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVELCAmbV9hdHRyaWJOb3JtYWxpemVkKTsK
KyAgICAgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdigwLCBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX0JVRkZFUl9CSU5ESU5HLCAmbV9hdHRyaWJCdWZmZXJCaW5kaW5nKTsKKyAgICAgICAgICAg
IDo6Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydigwLCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1BP
SU5URVIsICZtX2F0dHJpYlBvaW50ZXIpOworICAgICAgICAgICAgOjpnbEdldEludGVnZXJ2KEdM
X0FSUkFZX0JVRkZFUl9CSU5ESU5HLCAmbV9jdXJyZW50QXJyYXlCdWZmZXJCaW5kaW5nKTsKKyAg
ICAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5H
LCAmbV9jdXJyZW50RWxlbWVudHJ5QXJyYXlCdWZmZXJCaW5kaW5nKTsKKyAgICAgICAgfQorCisg
ICAgICAgIDo6Z2xVc2VQcm9ncmFtKHByb2dyYW1JZCk7CisgICAgICAgIDo6Z2xBY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUwKTsKKworI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICAgICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIp
OworICAgICAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01B
R19GSUxURVIsIGZpbHRlcik7CisgICAgICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICAgICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RP
X0VER0UpOworI2VuZGlmCisgICAgfQorCisgICAgflNjb3BlZFByb2dyYW1CaW5kaW5nKCkKKyAg
ICB7CisgICAgICAgIDo6Z2xWaWV3cG9ydChtX2N1cnJlbnRWaWV3cG9ydFswXSwgbV9jdXJyZW50
Vmlld3BvcnRbMV0sIG1fY3VycmVudFZpZXdwb3J0WzJdLCBtX2N1cnJlbnRWaWV3cG9ydFszXSk7
CisgICAgICAgIDo6Z2xDb2xvck1hc2sobV9jb2xvck1hc2tbMF0sIG1fY29sb3JNYXNrWzFdLCBt
X2NvbG9yTWFza1syXSwgbV9jb2xvck1hc2tbM10pOworCisgICAgICAgIGlmIChtX2dsR2VuVmVy
dGV4QXJyYXlzKQorICAgICAgICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheShtX2N1cnJlbnRWZXJ0
ZXhBcnJheUJpbmRpbmcpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2F0dHJp
YkVuYWJsZWQpCisgICAgICAgICAgICAgICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDAp
OworCisgICAgICAgICAgICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fYXR0cmli
QnVmZmVyQmluZGluZyk7CisgICAgICAgICAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcigwLCBt
X2F0dHJpYlNpemUsIG1fYXR0cmliVHlwZSwgbV9hdHRyaWJOb3JtYWxpemVkLCBtX2F0dHJpYlN0
cmlkZSwgbV9hdHRyaWJQb2ludGVyKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kQnVmZmVyKEdMX0FS
UkFZX0JVRkZFUiwgbV9jdXJyZW50QXJyYXlCdWZmZXJCaW5kaW5nKTsKKyAgICAgICAgICAgIDo6
Z2xCaW5kQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBtX2N1cnJlbnRFbGVtZW50cnlB
cnJheUJ1ZmZlckJpbmRpbmcpOworICAgICAgICB9CisKKyAgICAgICAgOjpnbFVzZVByb2dyYW0o
bV9ib3VuZFByb2dyYW0pOworICAgICAgICA6OmdsQWN0aXZlVGV4dHVyZShtX2JvdW5kVGV4VW5p
dCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdMaW50IG1fYm91bmRUZXhVbml0OworICAgIEdM
aW50IG1fYm91bmRQcm9ncmFtOworICAgIEdMaW50IG1fY3VycmVudEFycmF5QnVmZmVyQmluZGlu
ZzsKKyAgICBHTGludCBtX2F0dHJpYkVuYWJsZWQ7CisgICAgR0xpbnQgbV9hdHRyaWJTaXplOwor
ICAgIEdMaW50IG1fYXR0cmliU3RyaWRlOworICAgIEdMaW50IG1fYXR0cmliVHlwZTsKKyAgICBH
TGludCBtX2F0dHJpYk5vcm1hbGl6ZWQ7CisgICAgR0xpbnQgbV9hdHRyaWJCdWZmZXJCaW5kaW5n
OworICAgIEdMaW50IG1fY3VycmVudFZpZXdwb3J0WzRdOworICAgIEdMaW50IG1fY3VycmVudFZl
cnRleEFycmF5QmluZGluZzsKKyAgICBHTGludCBtX2N1cnJlbnRFbGVtZW50cnlBcnJheUJ1ZmZl
ckJpbmRpbmc7CisgICAgR0xib29sZWFuIG1fY29sb3JNYXNrWzRdOworICAgIFNjb3BlZFRvZ2ds
ZUdMU3RhdGUgbV9zY29wZWRUb2dnbGVTdGF0ZTsKKyAgICB2b2lkKiBtX2F0dHJpYlBvaW50ZXI7
Cit9OworCisjZGVmaW5lIFNUUklOR0lGWSguLi4pICNfX1ZBX0FSR1NfXworCitjb25zdCBjaGFy
KiBHZXRTaGFkZXJTb3VyY2UoR0xlbnVtIHR5cGUpIHsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIEdMX1ZFUlRFWF9TSEFERVI6CisgICAgICAgIHJldHVybiBTVFJJTkdJRlkoCisgICAg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IG1fdlBvc2l0aW9uOworICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZSB2ZWMyIG1fdGV4Q29vcmQ7CisgICAgICAgIHZhcnlpbmcgdmVjMiBtX3ZU
ZXhDb29yZDsKKyAgICAgICAgdm9pZCBtYWluKHZvaWQpIHsKKyAgICAgICAgICAgIGdsX1Bvc2l0
aW9uID0gbV92UG9zaXRpb247CisgICAgICAgICAgICBtX3ZUZXhDb29yZCA9IG1fdGV4Q29vcmQ7
CisgICAgICAgIH0pOworICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSOgorICAgICAgICByZXR1
cm4gU1RSSU5HSUZZKAorICAgICAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X3Rl
eFNhbXBsZXI7CisgICAgICAgICAgICAgICAgdmFyeWluZyB2ZWMyIG1fdlRleENvb3JkOworICAg
ICAgICB2b2lkIG1haW4odm9pZCkgeworICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVy
ZTJEKHVfdGV4U2FtcGxlciwgbV92VGV4Q29vcmQuc3QpOworICAgICAgICB9KTsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK1RleHR1cmVCbGl0dGVyOjpUZXh0
dXJlQmxpdHRlcigpCisgICAgOiBtX3ZlcnRleEhhbmRsZSgwKQorICAgICwgbV9mbGlwVmVydGV4
SGFuZGxlKDApCisgICAgLCBtX2N1cnJlbnRWZXJ0ZXhIYW5kbGUoMCkKKyAgICAsIG1fc2hhZGVy
UHJvZ3JhbSgwKQorICAgICwgbV92ZXJ0ZXhCdWZmZXIoMCkKKyAgICAsIG1faW5kZXhCdWZmZXIo
MCkKKyAgICAsIG1fZmJvSWQoMCkKKyAgICAsIG1fZmxpcChmYWxzZSkKK3sKK30KKworVGV4dHVy
ZUJsaXR0ZXI6On5UZXh0dXJlQmxpdHRlcigpCit7CisgICAgY2xlYXIoKTsKK30KKwordm9pZCBU
ZXh0dXJlQmxpdHRlcjo6Y2xlYXIoKQoreworICAgIGlmIChtX3NoYWRlclByb2dyYW0pIHsKKyAg
ICAgICAgOjpnbERlbGV0ZVByb2dyYW0obV9zaGFkZXJQcm9ncmFtKTsKKyAgICAgICAgbV9zaGFk
ZXJQcm9ncmFtID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9mYm9JZCkgeworICAgICAgICA6Omds
RGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zib0lkKTsKKyAgICAgICAgbV9mYm9JZCA9IDA7Cisg
ICAgfQorCisgICAgaWYgKG1fdmVydGV4SGFuZGxlICYmIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXMp
IHsKKyAgICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5cygxLCAmbV92ZXJ0ZXhIYW5kbGUpOwor
ICAgICAgICBtX3ZlcnRleEhhbmRsZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1fZmxpcFZlcnRl
eEhhbmRsZSAmJiBtX2dsRGVsZXRlVmVydGV4QXJyYXlzKSB7CisgICAgICAgIG1fZ2xEZWxldGVW
ZXJ0ZXhBcnJheXMoMSwgJm1fZmxpcFZlcnRleEhhbmRsZSk7CisgICAgICAgIG1fZmxpcFZlcnRl
eEhhbmRsZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1fdmVydGV4QnVmZmVyKSB7CisgICAgICAg
IDo6Z2xEZWxldGVCdWZmZXJzKDEsICZtX3ZlcnRleEJ1ZmZlcik7CisgICAgICAgIG1fdmVydGV4
QnVmZmVyID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9pbmRleEJ1ZmZlcikgeworICAgICAgICA6
OmdsRGVsZXRlQnVmZmVycygxLCAmbV9pbmRleEJ1ZmZlcik7CisgICAgICAgIG1faW5kZXhCdWZm
ZXIgPSAwOworICAgIH0KK30KKworR0x1aW50IFRleHR1cmVCbGl0dGVyOjpsb2FkU2hhZGVyKEdM
ZW51bSB0eXBlLCBjb25zdCBHTGNoYXIgKnNoYWRlclNyYykKK3sKKyAgICBHTHVpbnQgc2hhZGVy
OworICAgIEdMaW50IGNvbXBpbGVkOworCisgICAgc2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIodHlw
ZSk7CisKKyAgICBpZiAoIXNoYWRlcikgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBj
cmVhdGUgc2hhZGVyLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBnbFNoYWRl
clNvdXJjZShzaGFkZXIsIDEsICZzaGFkZXJTcmMsIDApOworICAgIGdsQ29tcGlsZVNoYWRlcihz
aGFkZXIpOworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgJmNv
bXBpbGVkKTsKKworICAgIGlmICghY29tcGlsZWQpIHsKKyAgICAgICAgZ2xEZWxldGVTaGFkZXIo
c2hhZGVyKTsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY29tcGlsZSBzaGFkZXIuIik7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBzaGFkZXI7Cit9CisKK3Zv
aWQgVGV4dHVyZUJsaXR0ZXI6OmJpbmRBcnJheUJ1ZmZlcigpCit7CisgICAgZ2xFbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShWRVJURVhBVFRSSUIpOworICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoVEVYQ09PUkRBVFRSSUIpOworICAgIGdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1f
dmVydGV4QnVmZmVyKTsKKworICAgIGlmIChtX2ZsaXApCisgICAgICAgIGdsVmVydGV4QXR0cmli
UG9pbnRlcihWRVJURVhBVFRSSUIsIDQsIEdMX0ZMT0FULCBHTF9GQUxTRSwgMCwgKHZvaWQqKUZM
SVBPRkZTRVQpOworICAgIGVsc2UKKyAgICAgICAgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKFZFUlRF
WEFUVFJJQiwgNCwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAodm9pZCopTlVMTCk7CisKKyAgICBn
bFZlcnRleEF0dHJpYlBvaW50ZXIoVEVYQ09PUkRBVFRSSUIsIDIsIEdMX0ZMT0FULCBHTF9GQUxT
RSwgMCwgKHZvaWQqKVRFWENPT1JET0ZGU0VUKTsKK30KKwordm9pZCBUZXh0dXJlQmxpdHRlcjo6
ZW5hYmxlVmVydGV4QXJyYXkoKQoreworICAgIGlmIChtX2N1cnJlbnRWZXJ0ZXhIYW5kbGUpCisg
ICAgICAgIG1fZ2xCaW5kVmVydGV4QXJyYXkobV9jdXJyZW50VmVydGV4SGFuZGxlKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgYmluZEFycmF5QnVmZmVyKCk7CisgICAgICAgIGdsQmluZEJ1ZmZlcihH
TF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbV9pbmRleEJ1ZmZlcik7CisgICAgfQorfQorCit2b2lk
IFRleHR1cmVCbGl0dGVyOjpkaXNhYmxlVmVydGV4QXJyYXkoKQoreworICAgIGlmIChtX2N1cnJl
bnRWZXJ0ZXhIYW5kbGUpCisgICAgICAgIHJldHVybjsKKworICAgIGdsRGlzYWJsZVZlcnRleEF0
dHJpYkFycmF5KFZFUlRFWEFUVFJJQik7CisgICAgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
VEVYQ09PUkRBVFRSSUIpOworfQorCitib29sIFRleHR1cmVCbGl0dGVyOjpsaW5rUHJvZ3JhbShj
b25zdCBHTHVpbnQgcHJvZ3JhbUlkKQoreworICAgIGdsTGlua1Byb2dyYW0ocHJvZ3JhbUlkKTsK
KyAgICBHTGludCBsaW5rU3RhdHVzID0gMDsKKyAgICBnbEdldFByb2dyYW1pdihwcm9ncmFtSWQs
IEdMX0xJTktfU1RBVFVTLCAmbGlua1N0YXR1cyk7CisKKyAgICBpZiAoIWxpbmtTdGF0dXMpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFRleHR1
cmVCbGl0dGVyOjppbml0aWFsaXplVkJPKCkKK3sKKyAgICBpZiAobV9nbEdlblZlcnRleEFycmF5
cykgeworICAgICAgICBtX2N1cnJlbnRWZXJ0ZXhIYW5kbGUgPSBtX2ZsaXAgPyBtX2ZsaXBWZXJ0
ZXhIYW5kbGUgOiBtX3ZlcnRleEhhbmRsZTsKKworICAgICAgICBpZiAobV9jdXJyZW50VmVydGV4
SGFuZGxlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAobV92ZXJ0ZXhCdWZm
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIGJpbmQgYnVmZmVycy4KKyAgICBHTHVpbnQg
dGVtcFsyXTsKKyAgICBnbEdlbkJ1ZmZlcnMoMiwgdGVtcCk7CisgICAgbV92ZXJ0ZXhCdWZmZXIg
PSB0ZW1wWzBdOworICAgIG1faW5kZXhCdWZmZXIgPSB0ZW1wWzFdOworICAgIGdsQmluZEJ1ZmZl
cihHTF9BUlJBWV9CVUZGRVIsIG1fdmVydGV4QnVmZmVyKTsKKyAgICBnbEJ1ZmZlckRhdGEoR0xf
QVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywKKyAgICAgICAgICAgICAg
ICAgR0xfU1RBVElDX0RSQVcpOworCisgICAgLy8gQ3JlYXRlIGFuZCBzZXQtdXAgdGhlIHZlcnRl
eCBhcnJheSBvYmplY3QKKyAgICBpZiAobV9nbEdlblZlcnRleEFycmF5cyAmJiBtX2dsQmluZFZl
cnRleEFycmF5KSB7CisgICAgICAgIEdMdWludCB2ZXJ0ZXhIYW5kbGU7CisgICAgICAgIG1fZ2xH
ZW5WZXJ0ZXhBcnJheXMoMSwgJnZlcnRleEhhbmRsZSk7CisgICAgICAgIG1fZ2xCaW5kVmVydGV4
QXJyYXkodmVydGV4SGFuZGxlKTsKKyAgICAgICAgYmluZEFycmF5QnVmZmVyKCk7CisKKyAgICAg
ICAgaWYgKG1fZmxpcCkKKyAgICAgICAgICAgIG1fZmxpcFZlcnRleEhhbmRsZSA9IHZlcnRleEhh
bmRsZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV92ZXJ0ZXhIYW5kbGUgPSB2ZXJ0ZXhI
YW5kbGU7CisKKyAgICAgICAgbV9jdXJyZW50VmVydGV4SGFuZGxlID0gdmVydGV4SGFuZGxlOwor
ICAgIH0KKworICAgIGdsQmluZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbV9pbmRl
eEJ1ZmZlcik7CisgICAgZ2xCdWZmZXJEYXRhKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSLCBzaXpl
b2YoaW5kZXhWZXJ0aWNlcyksIGluZGV4VmVydGljZXMsCisgICAgICAgICAgICAgICAgIEdMX1NU
QVRJQ19EUkFXKTsKK30KKworYm9vbCBUZXh0dXJlQmxpdHRlcjo6aW5pdGlhbGl6ZVByb2dyYW0o
KQoreworICAgIGlmIChtX3NoYWRlclByb2dyYW0pCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgLy8gY3JlYXRlIHNoYWRlci4KKyAgICBHTHVpbnQgdmVydGV4U2hhZGVyID0gbG9hZFNoYWRl
cihHTF9WRVJURVhfU0hBREVSLCBHZXRTaGFkZXJTb3VyY2UoR0xfVkVSVEVYX1NIQURFUikpOwor
ICAgIGlmICghdmVydGV4U2hhZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHTHVp
bnQgZnJhZ21lbnRTaGFkZXIgPSBsb2FkU2hhZGVyKEdMX0ZSQUdNRU5UX1NIQURFUiwgR2V0U2hh
ZGVyU291cmNlKEdMX0ZSQUdNRU5UX1NIQURFUikpOworCisgICAgaWYgKCFmcmFnbWVudFNoYWRl
cikgeworICAgICAgICBnbERlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9zaGFkZXJQcm9ncmFtID0gZ2xDcmVhdGVQcm9ncmFt
KCk7CisKKyAgICBpZiAoIW1fc2hhZGVyUHJvZ3JhbSkgeworICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBjcmVhdGUgcHJvZ3JhbS4iKTsKKyAgICAgICAgZ2xEZWxldGVTaGFkZXIodmVydGV4
U2hhZGVyKTsKKyAgICAgICAgZ2xEZWxldGVTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZ2xBdHRhY2hTaGFkZXIobV9zaGFkZXJQcm9n
cmFtLCB2ZXJ0ZXhTaGFkZXIpOworICAgIGdsQXR0YWNoU2hhZGVyKG1fc2hhZGVyUHJvZ3JhbSwg
ZnJhZ21lbnRTaGFkZXIpOworICAgIGdsQmluZEF0dHJpYkxvY2F0aW9uKG1fc2hhZGVyUHJvZ3Jh
bSwgVkVSVEVYQVRUUklCLCAibV92UG9zaXRpb24iKTsKKyAgICBnbEJpbmRBdHRyaWJMb2NhdGlv
bihtX3NoYWRlclByb2dyYW0sIFRFWENPT1JEQVRUUklCLCAibV90ZXhDb29yZCIpOworICAgIGJv
b2wgbGlua2VkID0gbGlua1Byb2dyYW0obV9zaGFkZXJQcm9ncmFtKTsKKyAgICBnbERlbGV0ZVNo
YWRlcih2ZXJ0ZXhTaGFkZXIpOworICAgIGdsRGVsZXRlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsK
KworICAgIGlmICghbGlua2VkKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyNpZiAhVVNFKE9QRU5HTF9FU18yKQorICAgIEdMdWludCBzYW1wbGVy
TG9jYXRpb24gPSBnbEdldFVuaWZvcm1Mb2NhdGlvbihtX3NoYWRlclByb2dyYW0sICJ1X3RleFNh
bXBsZXIiKTsKKyAgICBHTHVpbnQgc2FtcGxlciA9IDA7CisgICAgLy8gQ3JlYXRlIGFuZCBpbml0
aWFsaXplIHNhbXBsZXIgb2JqZWN0LiBUaGlzIHdvdWxkIGhlbHAgdXMgc2VwZXJhdGUgdGhlIHRl
eHR1cmUgYW5kIHNhbXBsZXIgc3RhdGUuCisgICAgaWYgKG1fZ2xHZW5TYW1wbGVycyAmJiBtX2ds
U2FtcGxlclBhcmFtZXRlcmkpIHsKKyAgICAgICAgbV9nbEdlblNhbXBsZXJzKDEgLCAmc2FtcGxl
cik7CisgICAgICAgIG1fZ2xTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIG1fZ2xTYW1wbGVyUGFyYW1ldGVyaShz
YW1wbGVyLCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgICAgIG1f
Z2xTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX05F
QVJFU1QpOworICAgICAgICBtX2dsU2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgR0xfVEVYVFVS
RV9NQUdfRklMVEVSLCBHTF9ORUFSRVNUKTsKKyAgICB9CisjZW5kaWYKKworICAgIEdMaW50IGJv
dW5kUHJvZ3JhbTsKKyAgICA6OmdsR2V0SW50ZWdlcnYoR0xfQ1VSUkVOVF9QUk9HUkFNLCAmYm91
bmRQcm9ncmFtKTsKKworICAgIGdsVXNlUHJvZ3JhbShtX3NoYWRlclByb2dyYW0pOworCisjaWYg
IVVTRShPUEVOR0xfRVNfMikKKyAgICBnbFVuaWZvcm0xaShzYW1wbGVyTG9jYXRpb24sIDApOwor
CisgICAgaWYgKG1fZ2xCaW5kU2FtcGxlcikKKyAgICAgICAgbV9nbEJpbmRTYW1wbGVyKDAgLCBz
YW1wbGVyKTsKKworICAgIGdsVW5pZm9ybTFpKHNhbXBsZXJMb2NhdGlvbiwgMCk7CisjZW5kaWYK
KyAgICBnbFVzZVByb2dyYW0oYm91bmRQcm9ncmFtKTsKKworICAgIHJldHVybiB0cnVlOworfQor
CisjaWYgVVNFKE9QRU5HTF9FU18yKQorYm9vbCBUZXh0dXJlQmxpdHRlcjo6ZHJhd1RleHR1cmUo
Y29uc3QgR0x1aW50IHNvdXJjZVRleHR1cmUsIGNvbnN0IEdMdWludCB0YXJnZXRGYm9JZCwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0LCBib29sIGZsaXAsIEdMZW51bSBm
aWx0ZXIpCit7CisgICAgaW5pdGlhbGl6ZUdMQmluZGluZ3MoKTsKKworICAgIGlmICghaW5pdGlh
bGl6ZVByb2dyYW0oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2NvcGVkUHJvZ3Jh
bUJpbmRpbmcgcHJvZ3JhbShtX3NoYWRlclByb2dyYW0sIGZpbHRlcik7CisgICAgbV9mbGlwID0g
ZmxpcDsKKyAgICBpbml0aWFsaXplVkJPKCk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgdGFyZ2V0RmJvSWQpOworICAgIDo6Z2xDbGVhcihHTF9DT0xPUl9CVUZGRVJf
QklUfCBHTF9ERVBUSF9CVUZGRVJfQklUKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgc291cmNlVGV4dHVyZSk7CisgICAgOjpnbFZpZXdwb3J0IChkZXN0UmVjdC54KCksIGRl
c3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCkpOworICAgIGVu
YWJsZVZlcnRleEFycmF5KCk7CisgICAgOjpnbERyYXdFbGVtZW50cyhHTF9UUklBTkdMRV9TVFJJ
UCwgdmVydGV4SW5kZXhTaXplLCBHTF9VTlNJR05FRF9TSE9SVCwgMCk7CisgICAgZGlzYWJsZVZl
cnRleEFycmF5KCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbHNlCitib29sIFRleHR1cmVC
bGl0dGVyOjpkcmF3VGV4dHVyZShjb25zdCBHTHVpbnQgc291cmNlVGV4dHVyZSwgY29uc3QgR0x1
aW50IHRhcmdldEZib0lkLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCwgYm9vbCBmbGlwLCBHTGVudW0gZmlsdGVyKQoreworICAgIGJvb2wgZW5hYmxlU2Np
c3NvclRlc3QgPSA6OmdsSXNFbmFibGVkKEdMX1NDSVNTT1JfVEVTVCk7CisKKyAgICBpZiAoZW5h
YmxlU2Npc3NvclRlc3QpCisgICAgICAgIDo6Z2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisK
KyAgICBpZiAoIW1fZmJvSWQpCisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zib0lk
KTsKKworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpSRUFEX0ZSQU1FQlVG
RkVSLCBtX2Zib0lkKTsKKyAgICA6OmdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVHwgR0xfREVQ
VEhfQlVGRkVSX0JJVCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHNvdXJj
ZVRleHR1cmUpOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChFeHRlbnNpb25zM0Q6OlJF
QURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBzb3Vy
Y2VUZXh0dXJlLCAwKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEV4dGVuc2lvbnMzRDo6RFJB
V19GUkFNRUJVRkZFUiwgdGFyZ2V0RmJvSWQpOworCisgICAgaWYgKGZsaXApCisgICAgICAgIDo6
Z2xCbGl0RnJhbWVidWZmZXIoc3JjUmVjdC54KCksIHNyY1JlY3QueSgpLCBzcmNSZWN0LndpZHRo
KCksIHNyY1JlY3QuaGVpZ2h0KCksIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueCgpICsgZGVzdFJl
Y3QuaGVpZ2h0KCksIGRlc3RSZWN0LnkoKSArIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0Lnko
KSwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgZmlsdGVyKTsKKyAgICBlbHNlCisgICAgICAgIDo6Z2xC
bGl0RnJhbWVidWZmZXIoc3JjUmVjdC54KCksIHNyY1JlY3QueSgpLCBzcmNSZWN0LndpZHRoKCks
IHNyY1JlY3QuaGVpZ2h0KCksIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53
aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgZmlsdGVyKTsK
KworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBHTF9D
T0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgMCwgMCk7CisKKyAgICBpZiAoZW5hYmxl
U2Npc3NvclRlc3QpCisgICAgICAgIDo6Z2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKworICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK2Jvb2wgVGV4dHVyZUJsaXR0ZXI6OmNvcHlUZXh0
dXJlKGNvbnN0IEdMdWludCBzb3VyY2UsIGNvbnN0IEdMdWludCBkZXN0aW5hdGlvbiwgYm9vbCBm
bGlwKQoreworICAgIGluaXRpYWxpemVHTEJpbmRpbmdzKCk7CisKKyAgICBpZiAoIWluaXRpYWxp
emVQcm9ncmFtKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9mYm9JZCkK
KyAgICAgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvSWQpOworCisgICAgU2NvcGVkUHJv
Z3JhbUJpbmRpbmcgcHJvZ3JhbShtX3NoYWRlclByb2dyYW0sIEdyYXBoaWNzQ29udGV4dDNEOjpO
RUFSRVNUKTsKKyAgICBtX2ZsaXAgPSBmbGlwOworICAgIGluaXRpYWxpemVWQk8oKTsKKyAgICA6
OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBtX2Zib0lkKTsKKyAgICA6OmdsQ2xl
YXIoR0xfQ09MT1JfQlVGRkVSX0JJVHwgR0xfREVQVEhfQlVGRkVSX0JJVCk7CisgICAgOjpnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHNvdXJjZSk7CisgICAgOjpnbEZyYW1lYnVmZmVyVGV4
dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8y
RCwgZGVzdGluYXRpb24sIDApOworICAgIGVuYWJsZVZlcnRleEFycmF5KCk7CisgICAgOjpnbERy
YXdFbGVtZW50cyhHTF9UUklBTkdMRV9TVFJJUCwgdmVydGV4SW5kZXhTaXplLCBHTF9VTlNJR05F
RF9TSE9SVCwgMCk7CisgICAgZGlzYWJsZVZlcnRleEFycmF5KCk7CisgICAgOjpnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVY
VFVSRV8yRCwgMCwgMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworI2VuZGlmCisKZGlm
ZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9UZXh0dXJl
QmxpdHRlci5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL1RleHR1
cmVCbGl0dGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4Y2I2Ngot
LS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9UZXh0dXJlQmxpdHRlci5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgVGV4dHVyZUJsaXR0ZXJfaAorI2RlZmluZSBUZXh0dXJlQmxpdHRlcl9oCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlIDxvcGVuZ2wvR0xEZWZz
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFRleHR1cmVCbGl0dGVyIDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2Ugewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHR1cmVCbGl0dGVyKTsKKworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRleHR1cmVCbGl0dGVyPiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX3N0YXRpY1RleHR1cmVCbGl0dGVyKQorICAgICAgICAgICAgbV9zdGF0aWNUZXh0
dXJlQmxpdHRlciA9IG5ldyBUZXh0dXJlQmxpdHRlcigpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBtX3N0YXRpY1RleHR1cmVCbGl0dGVyLT5yZWYoKTsKKworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobV9zdGF0aWNUZXh0dXJlQmxpdHRlcik7CisgICAgfQorCisgICAgdm9pZCBkZXJlZigp
CisgICAgeworICAgICAgICBpZiAoZGVyZWZCYXNlKCkpIHsKKyAgICAgICAgICAgIG1fc3RhdGlj
VGV4dHVyZUJsaXR0ZXIgPSAwOworICAgICAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBUZXh0dXJlQmxpdHRlcigpOworICAgIH5UZXh0dXJlQmxpdHRlcigpOwor
ICAgIGJvb2wgY29weVRleHR1cmUoY29uc3QgR0x1aW50LCBjb25zdCBHTHVpbnQsIGJvb2wgPSBm
YWxzZSk7CisgICAgYm9vbCBkcmF3VGV4dHVyZShjb25zdCBHTHVpbnQsIGNvbnN0IEdMdWludCwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBib29sID0gZmFsc2UsIEdMZW51bSA9IEdy
YXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIFRleHR1cmVCbGl0dGVyKiBtX3N0YXRpY1RleHR1cmVCbGl0dGVyOworICAg
IGJvb2wgaW5pdGlhbGl6ZVByb2dyYW0oKTsKKyAgICB2b2lkIGVuYWJsZVZlcnRleEFycmF5KCk7
CisgICAgdm9pZCBkaXNhYmxlVmVydGV4QXJyYXkoKTsKKyAgICB2b2lkIGJpbmRBcnJheUJ1ZmZl
cigpOworICAgIHZvaWQgaW5pdGlhbGl6ZVZCTygpOworICAgIGJvb2wgbGlua1Byb2dyYW0oY29u
c3QgR0x1aW50IHByb2dyYW1JZCk7CisgICAgR0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5cGUs
IGNvbnN0IEdMY2hhciAqc2hhZGVyU3JjKTsKKyAgICBHTHVpbnQgbV92ZXJ0ZXhIYW5kbGU7Cisg
ICAgR0x1aW50IG1fZmxpcFZlcnRleEhhbmRsZTsKKyAgICBHTHVpbnQgbV9jdXJyZW50VmVydGV4
SGFuZGxlOworICAgIEdMdWludCBtX3NoYWRlclByb2dyYW07CisgICAgR0x1aW50IG1fdmVydGV4
QnVmZmVyOworICAgIEdMdWludCBtX2luZGV4QnVmZmVyOworICAgIEdMdWludCBtX2Zib0lkOwor
ICAgIGJvb2wgbV9mbGlwIDoxOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187316</attachid>
            <date>2013-02-08 07:15:46 -0800</date>
            <delta_ts>2013-02-09 10:13:54 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>textureblitter.patch</filename>
            <type>text/plain</type>
            <size>22520</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0
Zm9ybVN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
TFBsYXRmb3JtU3VyZmFjZS5jcHAKaW5kZXggN2Y3YTU2NC4uNTUyNDBhNiAxMDA2NDQKLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5j
cHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3Jt
U3VyZmFjZS5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAKKyNkZWZpbmUgVVNFX1RFWFRVUkVNQVBQRVJHTCAxCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEdMUGxhdGZvcm1TdXJmYWNlOjpjcmVh
dGVPZmZzY3JlZW5TdXJmYWNlKCkKQEAgLTY5LDEyICs3MCwxMyBAQCBQYXNzT3duUHRyPEdMUGxh
dGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgp
CiB9CiAKIEdMUGxhdGZvcm1TdXJmYWNlOjpHTFBsYXRmb3JtU3VyZmFjZSgpCi0gICAgOiBtX3Jl
c3RvcmVOZWVkZWQodHJ1ZSkKLSAgICAsIG1fZmJvSWQoMCkKLSAgICAsIG1fc2hhcmVkRGlzcGxh
eSgwKQorICAgIDogbV9zaGFyZWREaXNwbGF5KDApCiAgICAgLCBtX2RyYXdhYmxlKDApCiAgICAg
LCBtX2J1ZmZlckhhbmRsZSgwKQorICAgICwgbV9yZXN0b3JlTmVlZGVkKHRydWUpCisgICAgLCBt
X2Zib0lkKDApCiB7CisgICAgbV9ibGl0dGVyID0gVGV4dHVyZUJsaXR0ZXI6OmNyZWF0ZSgpOwog
fQogCiBHTFBsYXRmb3JtU3VyZmFjZTo6fkdMUGxhdGZvcm1TdXJmYWNlKCkKQEAgLTExMywyNiAr
MTE1LDI1IEBAIHZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKIAogdm9pZCBH
TFBsYXRmb3JtU3VyZmFjZTo6dXBkYXRlQ29udGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVyZSwg
Y29uc3QgR0x1aW50IGJpbmRGYm9JZCwgY29uc3QgdWludDMyX3QgYmluZFRleHR1cmUpCiB7Ci0g
ICAgaWYgKCFtX2Zib0lkKQotICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm9JZCk7
CisgI2lmIFVTRV9URVhUVVJFTUFQUEVSR0wKKyAgICBpZiAoIW1fdGV4QmxpdHRlcikgeworICAg
ICAgICBtX3RleEJsaXR0ZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOworICAgICAgICBt
X2ZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRGbGlwVGV4dHVyZTsKKyAgICB9CiAKICAg
ICBtX3Jlc3RvcmVOZWVkZWQgPSBmYWxzZTsKLQotICAgIGludCB4ID0gMDsKLSAgICBpbnQgeSA9
IDA7Ci0gICAgaW50IHdpZHRoID0gbV9yZWN0LndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IG1f
cmVjdC5oZWlnaHQoKTsKLQotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZG
RVIsIG1fZmJvSWQpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSk7
Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSwgMCk7Ci0gICAgZ2xCaW5kRnJh
bWVidWZmZXIoR0xfRFJBV19GUkFNRUJVRkZFUiwgMCk7Ci0gICAgLy8gVXNlIE5FQVJFU1QgYXMg
bm8gc2NhbGUgaXMgcGVyZm9ybWVkIGR1cmluZyB0aGUgYmxpdC4KLSAgICBnbEJsaXRGcmFtZWJ1
ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9DT0xPUl9C
VUZGRVJfQklULCBHTF9ORUFSRVNUKTsKKyAgICBtX3RleEJsaXR0ZXItPmJlZ2luUGFpbnRpbmco
KTsKKyAgICBJbnRTaXplIHRleHR1cmVTaXplKG1fcmVjdC53aWR0aCgpLCBtX3JlY3QuaGVpZ2h0
KCkpOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgIG1f
dGV4QmxpdHRlci0+ZHJhd1RleHR1cmUodGV4dHVyZSwgbV9mbGFncywgdGV4dHVyZVNpemUsIG1f
cmVjdCwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgMS4wLCAwKTsKKyAgICBtX3RleEJsaXR0ZXIt
PmVuZFBhaW50aW5nKCk7CisjZWxzZQorICAgIG1fYmxpdHRlci0+ZHJhd1RleHR1cmUodGV4dHVy
ZSwgMCwgbV9yZWN0LCBtX3JlY3QpOworI2VuZGlmCisgICAgOjpnbEZsdXNoKCk7CiAgICAgc3dh
cEJ1ZmZlcnMoKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZG
RVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCAwLCAwKTsKLSAgICBnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIGJpbmRUZXh0dXJlKTsKLSAgICBnbEJpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgYmluZEZib0lkKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xf
VEVYVFVSRV8yRCwgYmluZFRleHR1cmUpOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIGJpbmRGYm9JZCk7CiB9CiAKIHZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdl
b21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCkBAIC0xNDMsMTEgKzE0NCw3IEBAIHZvaWQg
R0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiB2
b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCkKIHsKICAgICBtX3JlY3QgPSBJbnRSZWN0
KCk7Ci0KLSAgICBpZiAobV9mYm9JZCkKLSAgICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwg
Jm1fZmJvSWQpOwotCi0gICAgbV9mYm9JZCA9IDA7CisgICAgbV9ibGl0dGVyID0gbnVsbHB0cjsK
IH0KIAogfQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HTFBsYXRmb3JtU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5oCmluZGV4IGU4ZGI0MjUuLmMwOWNmMGQgMTAwNjQ0Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZh
Y2UuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZv
cm1TdXJmYWNlLmgKQEAgLTMwLDggKzMwLDExIEBACiAKICNpbmNsdWRlICJHTERlZnMuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8c3VyZmFjZXMvVGV4dHVyZUJsaXR0ZXIuaD4K
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wu
aCIKIAogLy8gRW5jYXBzdWxhdGVzIGEgc3VyZmFjZSB0aGF0IGNhbiBiZSByZW5kZXJlZCB0byB3
aXRoIEdMLCBoaWRpbmcgcGxhdGZvcm0KIC8vIHNwZWNpZmljIG1hbmFnZW1lbnQuCkBAIC03Niwx
MiArNzksMTUgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2Uo
KTsKLSAgICBib29sIG1fcmVzdG9yZU5lZWRlZDsKLSAgICBJbnRSZWN0IG1fcmVjdDsKLSAgICBH
THVpbnQgbV9mYm9JZDsKICAgICBQbGF0Zm9ybURpc3BsYXkgbV9zaGFyZWREaXNwbGF5OwogICAg
IFBsYXRmb3JtRHJhd2FibGUgbV9kcmF3YWJsZTsKICAgICBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSBt
X2J1ZmZlckhhbmRsZTsKKyAgICBSZWZQdHI8VGV4dHVyZUJsaXR0ZXI+IG1fYmxpdHRlcjsKKyAg
ICBPd25QdHI8VGV4dHVyZU1hcHBlckdMPiBtX3RleEJsaXR0ZXI7CisgICAgYm9vbCBtX3Jlc3Rv
cmVOZWVkZWQgOjE7CisgICAgSW50UmVjdCBtX3JlY3Q7CisgICAgR0x1aW50IG1fZmJvSWQ7Cisg
ICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBtX2ZsYWdzOwogfTsKIAogfQpkaWZmIC0tZ2l0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL1RleHR1cmVCbGl0dGVyLmNw
cCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9UZXh0dXJlQmxpdHRl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxMzJiNgotLS0gL2Rl
di9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9UZXh0
dXJlQmxpdHRlci5jcHAKQEAgLTAsMCArMSw0NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXh0dXJlQmxpdHRlci5oIgorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgi
CisKKyNpbmNsdWRlIDxvcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyNkZWZpbmUgU0hB
REVSX0RFQlVHCitUZXh0dXJlQmxpdHRlciogVGV4dHVyZUJsaXR0ZXI6Om1fc3RhdGljVGV4dHVy
ZUJsaXR0ZXIgPSAwOworc3RhdGljIGNvbnN0IEdMZmxvYXQgdmVydGljZXNbXSA9IHsgLTEuMGYs
IC0xLjBmLCAwLjBmLCAxLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LTEuMGYsIDEuMGYsIDAuMGYsIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxLjBmLCAxLjBmLCAwLjBmLCAxLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMS4wZiwgLTEuMGYsIDAuMGYsIDEuMGYsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLjBmLCAwLjBmLDAuMGYsIDEuMGYsICAgLy8gVGV4IGNvb3JkaW5hdGVz
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMS4wZiwxLjBmLCAw
LjBmfTsKKworc3RhdGljIGNvbnN0IGludCBURVhDT09SRE9GRlNFVCA9IHNpemVvZihmbG9hdCkg
KiA0ICogNDsKKworI2lmIFVTRShPUEVOR0xfRVNfMikKK3N0YXRpYyBQRk5HTEJJTkRWRVJURVhB
UlJBWU9FU1BST0MgbV9nbEJpbmRWZXJ0ZXhBcnJheSA9IDA7CitzdGF0aWMgUEZOR0xERUxFVEVW
RVJURVhBUlJBWVNPRVNQUk9DIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXMgPSAwOworc3RhdGljIFBG
TkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsR2VuVmVydGV4QXJyYXlzID0gMDsKK3N0YXRp
YyBQRk5HTElTVkVSVEVYQVJSQVlPRVNQUk9DIG1fZ2xJc1ZlcnRleEFycmF5ID0gMDsKKyNlbHNl
CitzdGF0aWMgUEZOR0xCSU5EVkVSVEVYQVJSQVlQUk9DIG1fZ2xCaW5kVmVydGV4QXJyYXkgPSAw
Oworc3RhdGljIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTUFJPQyBtX2dsRGVsZXRlVmVydGV4QXJy
YXlzID0gMDsKK3N0YXRpYyBQRk5HTEdFTlZFUlRFWEFSUkFZU1BST0MgbV9nbEdlblZlcnRleEFy
cmF5cyA9IDA7CisjZW5kaWYKKworI2lmIFVTRShPUEVOR0xfRVNfMikKK3N0YXRpYyB2b2lkIGlu
aXRpYWxpemVHTEJpbmRpbmdzKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBiaW5kaW5nc0luaXRpYWxp
emVkID0gZmFsc2U7CisgICAgaWYgKGJpbmRpbmdzSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGJpbmRpbmdzSW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgaWYgKEdMUGxhdGZv
cm1Db250ZXh0OjpzdXBwb3J0c0dMRXh0ZW5zaW9uKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVj
dCIpKSB7CisgICAgICAgIG1fZ2xCaW5kVmVydGV4QXJyYXkgPSByZWludGVycHJldF9jYXN0PFBG
TkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsQmluZFZlcnRl
eEFycmF5T0VTIikpOworICAgICAgICBtX2dsR2VuVmVydGV4QXJyYXlzID0gcmVpbnRlcnByZXRf
Y2FzdDxQRk5HTEdFTlZFUlRFWEFSUkFZU09FU1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEdl
blZlcnRleEFycmF5c09FUyIpKTsKKyAgICAgICAgbV9nbERlbGV0ZVZlcnRleEFycmF5cyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8UEZOR0xERUxFVEVWRVJURVhBUlJBWVNPRVNQUk9DPihlZ2xHZXRQcm9j
QWRkcmVzcygiZ2xEZWxldGVWZXJ0ZXhBcnJheXNPRVMiKSk7CisgICAgICAgIG1fZ2xJc1ZlcnRl
eEFycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTElTVkVSVEVYQVJSQVlPRVNQUk9DPihlZ2xH
ZXRQcm9jQWRkcmVzcygiZ2xJc1ZlcnRleEFycmF5T0VTIikpOworICAgIH0KK30KKyNlbmRpZgor
CitjbGFzcyBTY29wZWRUb2dnbGVHTFN0YXRlCit7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U2NvcGVkVG9nZ2xlR0xTdGF0ZSk7CisKK3B1YmxpYzoKKyAgICBTY29wZWRUb2dnbGVHTFN0YXRl
KCkKKyAgICB7CisgICAgICAgIG1fZW5hYmxlQmxlbmQgPSB0b2dnbGVTdGF0ZShHTF9CTEVORCk7
CisgICAgICAgIG1fZW5hYmxlQ3VsbEZhY2UgPSB0b2dnbGVTdGF0ZShHTF9DVUxMX0ZBQ0UpOwor
ICAgICAgICBtX2VuYWJsZURlcHRoVGVzdCA9IHRvZ2dsZVN0YXRlKEdMX0RFUFRIX1RFU1QpOwor
ICAgICAgICBtX2VuYWJsZURpdGhlclRlc3QgPSB0b2dnbGVTdGF0ZShHTF9ESVRIRVIpOworICAg
ICAgICBtX2VuYWJsZVBvbHlnb25PZmZzZXRGaWxsID0gdG9nZ2xlU3RhdGUoR0xfUE9MWUdPTl9P
RkZTRVRfRklMTCk7CisgICAgICAgIG1fZW5hYmxlU2FtcGxlQWxwaGEgPSB0b2dnbGVTdGF0ZShH
TF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpOworICAgICAgICBtX2VuYWJsZVNhbXBsZUNvdmVy
YWdlID0gdG9nZ2xlU3RhdGUoR0xfU0FNUExFX0NPVkVSQUdFKTsKKyAgICAgICAgbV9lbmFibGVT
dGVuY2lsVGVzdCA9IHRvZ2dsZVN0YXRlKEdMX1NURU5DSUxfVEVTVCk7CisgICAgfQorCisgICAg
flNjb3BlZFRvZ2dsZUdMU3RhdGUoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZW5hYmxlQmxlbmQp
CisgICAgICAgICAgICA6OmdsRW5hYmxlKEdMX0JMRU5EKTsKKworICAgICAgICBpZiAobV9lbmFi
bGVDdWxsRmFjZSkKKyAgICAgICAgICAgIDo6Z2xFbmFibGUoR0xfQ1VMTF9GQUNFKTsKKworICAg
ICAgICBpZiAobV9lbmFibGVEZXB0aFRlc3QpCisgICAgICAgICAgICA6OmdsRW5hYmxlKEdMX0RF
UFRIX1RFU1QpOworCisgICAgICAgIGlmIChtX2VuYWJsZURpdGhlclRlc3QpCisgICAgICAgICAg
ICA6OmdsRW5hYmxlKEdMX0RJVEhFUik7CisKKyAgICAgICAgaWYgKG1fZW5hYmxlUG9seWdvbk9m
ZnNldEZpbGwpCisgICAgICAgICAgICA6OmdsRW5hYmxlKEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwp
OworCisgICAgICAgIGlmIChtX2VuYWJsZVNhbXBsZUFscGhhKQorICAgICAgICAgICAgOjpnbEVu
YWJsZShHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UpOworCisgICAgICAgIGlmIChtX2VuYWJs
ZVNhbXBsZUNvdmVyYWdlKQorICAgICAgICAgICAgOjpnbEVuYWJsZShHTF9TQU1QTEVfQ09WRVJB
R0UpOworCisgICAgICAgIGlmIChtX2VuYWJsZVN0ZW5jaWxUZXN0KQorICAgICAgICAgICAgOjpn
bEVuYWJsZShHTF9TVEVOQ0lMX1RFU1QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIHRv
Z2dsZVN0YXRlKGNvbnN0IEdMZW51bSBjYXBhYmlsaXR5KQorICAgIHsKKyAgICAgICAgYm9vbCBl
bmFibGVkID0gOjpnbElzRW5hYmxlZChjYXBhYmlsaXR5KTsKKworICAgICAgICBpZiAoIWVuYWJs
ZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgOjpnbERpc2FibGUoY2Fw
YWJpbGl0eSk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBtX2Vu
YWJsZUJsZW5kIDoxOworICAgIGJvb2wgbV9lbmFibGVDdWxsRmFjZSA6MTsKKyAgICBib29sIG1f
ZW5hYmxlRGVwdGhUZXN0IDoxOworICAgIGJvb2wgbV9lbmFibGVEaXRoZXJUZXN0IDoxOworICAg
IGJvb2wgbV9lbmFibGVQb2x5Z29uT2Zmc2V0RmlsbCA6MTsKKyAgICBib29sIG1fZW5hYmxlU2Ft
cGxlQWxwaGEgOjE7CisgICAgYm9vbCBtX2VuYWJsZVNhbXBsZUNvdmVyYWdlIDoxOworICAgIGJv
b2wgbV9lbmFibGVTdGVuY2lsVGVzdCA6MTsKK307CisKK2NsYXNzIFNjb3BlZFN0YXRlU2F2ZXIK
K3sKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY29wZWRTdGF0ZVNhdmVyKTsKKworcHVibGlj
OgorICAgIFNjb3BlZFN0YXRlU2F2ZXIoKQorICAgIHsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2
KEdMX0FDVElWRV9URVhUVVJFLCAmbV9ib3VuZFRleFVuaXQpOworICAgICAgICA6OmdsR2V0SW50
ZWdlcnYoR0xfQ1VSUkVOVF9QUk9HUkFNLCAmbV9ib3VuZFByb2dyYW0pOworICAgICAgICA6Omds
R2V0SW50ZWdlcnYoR0xfVklFV1BPUlQsICZtX2N1cnJlbnRWaWV3cG9ydFswXSk7CisKKyAgICAg
ICAgaWYgKG1fZ2xHZW5WZXJ0ZXhBcnJheXMpCisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgICAg
ICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUywgJm1fY3Vy
cmVudFZlcnRleEFycmF5QmluZGluZyk7CisjZWxzZQorICAgICAgICAgICAgOjpnbEdldEludGVn
ZXJ2KEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HLCAmbV9jdXJyZW50VmVydGV4QXJyYXlCaW5kaW5n
KTsKKyNlbmRpZgorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRy
aWJpdigwLCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQsICZtX2F0dHJpYkVuYWJsZWQp
OworICAgICAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAsIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfU0laRSwgJm1fYXR0cmliU2l6ZSk7CisgICAgICAgICAgICA6OmdsR2V0VmVydGV4QXR0
cmliaXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUsICZtX2F0dHJpYlN0cmlkZSk7
CisgICAgICAgICAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9B
UlJBWV9UWVBFLCAmbV9hdHRyaWJUeXBlKTsKKyAgICAgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRy
aWJpdigwLCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQsICZtX2F0dHJpYk5vcm1h
bGl6ZWQpOworICAgICAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAsIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcsICZtX2F0dHJpYkJ1ZmZlckJpbmRpbmcpOworICAg
ICAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2KDAsIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfUE9JTlRFUiwgJm1fYXR0cmliUG9pbnRlcik7CisgICAgICAgICAgICA6OmdsR2V0SW50
ZWdlcnYoR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkcsICZtX2N1cnJlbnRBcnJheUJ1ZmZlckJpbmRp
bmcpOworICAgICAgICB9CisKKyAgICAgICAgOjpnbEFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTAp
OworICAgIH0KKworICAgIH5TY29wZWRTdGF0ZVNhdmVyKCkKKyAgICB7CisgICAgICAgIGlmICht
X2JvdW5kUHJvZ3JhbSAmJiAhZ2xJc1Byb2dyYW0obV9ib3VuZFByb2dyYW0pKQorICAgICAgICAg
ICAgbV9ib3VuZFByb2dyYW0gPSAwOworCisgICAgICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlz
KQorICAgICAgICAgICAgbV9nbEJpbmRWZXJ0ZXhBcnJheShtX2N1cnJlbnRWZXJ0ZXhBcnJheUJp
bmRpbmcpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2F0dHJpYkVuYWJsZWQp
CisgICAgICAgICAgICAgICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworCisgICAg
ICAgICAgICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fYXR0cmliQnVmZmVyQmlu
ZGluZyk7CisgICAgICAgICAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcigwLCBtX2F0dHJpYlNp
emUsIG1fYXR0cmliVHlwZSwgbV9hdHRyaWJOb3JtYWxpemVkLCBtX2F0dHJpYlN0cmlkZSwgbV9h
dHRyaWJQb2ludGVyKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZF
UiwgbV9jdXJyZW50QXJyYXlCdWZmZXJCaW5kaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIDo6
Z2xVc2VQcm9ncmFtKG1fYm91bmRQcm9ncmFtKTsKKyAgICAgICAgOjpnbFZpZXdwb3J0KG1fY3Vy
cmVudFZpZXdwb3J0WzBdLCBtX2N1cnJlbnRWaWV3cG9ydFsxXSwgbV9jdXJyZW50Vmlld3BvcnRb
Ml0sIG1fY3VycmVudFZpZXdwb3J0WzNdKTsKKyAgICAgICAgOjpnbEFjdGl2ZVRleHR1cmUobV9i
b3VuZFRleFVuaXQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHTGludCBtX2JvdW5kVGV4VW5p
dDsKKyAgICBHTGludCBtX2JvdW5kUHJvZ3JhbTsKKyAgICBHTGludCBtX2N1cnJlbnRBcnJheUJ1
ZmZlckJpbmRpbmc7CisgICAgR0xpbnQgbV9hdHRyaWJFbmFibGVkOworICAgIEdMaW50IG1fYXR0
cmliU2l6ZTsKKyAgICBHTGludCBtX2F0dHJpYlN0cmlkZTsKKyAgICBHTGludCBtX2F0dHJpYlR5
cGU7CisgICAgR0xpbnQgbV9hdHRyaWJOb3JtYWxpemVkOworICAgIEdMaW50IG1fYXR0cmliQnVm
ZmVyQmluZGluZzsKKyAgICBHTGludCBtX2N1cnJlbnRWaWV3cG9ydFs0XTsKKyAgICBHTGludCBt
X2N1cnJlbnRWZXJ0ZXhBcnJheUJpbmRpbmc7CisgICAgU2NvcGVkVG9nZ2xlR0xTdGF0ZSBtX3Nj
b3BlZFRvZ2dsZVN0YXRlOworICAgIHZvaWQqIG1fYXR0cmliUG9pbnRlcjsKK307CisKKyNkZWZp
bmUgU1RSSU5HSUZZKC4uLikgI19fVkFfQVJHU19fCisKK2NvbnN0IGNoYXIqIEdldFNoYWRlclNv
dXJjZShHTGVudW0gdHlwZSkgeworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR0xfVkVS
VEVYX1NIQURFUjoKKyAgICAgICAgcmV0dXJuIFNUUklOR0lGWSgKKyAgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZSB2ZWM0IG1fdlBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgYXR0cmlidXRl
IHZlYzIgbV90ZXhDb29yZDsKKyAgICAgICAgICAgICAgICAgIHZhcnlpbmcgdmVjMiBtX3ZUZXhD
b29yZDsKKyAgICAgICAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgZ2xfUG9zaXRpb24gPSBtX3ZQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAg
ICBtX3ZUZXhDb29yZCA9IG1fdGV4Q29vcmQ7CisgICAgICAgICAgICAgICB9KTsKKyAgICBjYXNl
IEdMX0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgcmV0dXJuIFNUUklOR0lGWSgKKyAgICAgICAg
ICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4U2FtcGxlcjsKKyAgICAgICAgICAgICAg
ICAgIHZhcnlpbmcgdmVjMiBtX3ZUZXhDb29yZDsKKyAgICAgICAgICAgICAgICAgIHZvaWQgbWFp
bih2b2lkKSB7CisgICAgICAgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJE
KHVfdGV4U2FtcGxlciwgbV92VGV4Q29vcmQuc3QpOworICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworVGV4dHVyZUJsaXR0
ZXI6OlRleHR1cmVCbGl0dGVyKCkKKyAgICA6IG1fdmVydGV4SGFuZGxlKDApCisgICAgLCBtX2N1
cnJlbnRWZXJ0ZXhIYW5kbGUoMCkKKyAgICAsIG1fc2hhZGVyUHJvZ3JhbSgwKQorICAgICwgbV92
ZXJ0ZXhCdWZmZXIoMCkKKyAgICAsIG1fZmJvSWQoMCkKK3sKK30KKworVGV4dHVyZUJsaXR0ZXI6
On5UZXh0dXJlQmxpdHRlcigpCit7CisgICAgY2xlYXIoKTsKK30KKwordm9pZCBUZXh0dXJlQmxp
dHRlcjo6Y2xlYXIoKQoreworICAgIGlmIChtX3NoYWRlclByb2dyYW0pIHsKKyAgICAgICAgOjpn
bERlbGV0ZVByb2dyYW0obV9zaGFkZXJQcm9ncmFtKTsKKyAgICAgICAgbV9zaGFkZXJQcm9ncmFt
ID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9mYm9JZCkgeworICAgICAgICA6OmdsRGVsZXRlRnJh
bWVidWZmZXJzKDEsICZtX2Zib0lkKTsKKyAgICAgICAgbV9mYm9JZCA9IDA7CisgICAgfQorCisg
ICAgaWYgKG1fdmVydGV4SGFuZGxlICYmIG1fZ2xEZWxldGVWZXJ0ZXhBcnJheXMpIHsKKyAgICAg
ICAgbV9nbERlbGV0ZVZlcnRleEFycmF5cygxLCAmbV92ZXJ0ZXhIYW5kbGUpOworICAgICAgICBt
X3ZlcnRleEhhbmRsZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1fdmVydGV4QnVmZmVyKSB7Cisg
ICAgICAgIDo6Z2xEZWxldGVCdWZmZXJzKDEsICZtX3ZlcnRleEJ1ZmZlcik7CisgICAgICAgIG1f
dmVydGV4QnVmZmVyID0gMDsKKyAgICB9Cit9CisKK0dMdWludCBUZXh0dXJlQmxpdHRlcjo6bG9h
ZFNoYWRlcihHTGVudW0gdHlwZSwgY29uc3QgR0xjaGFyICpzaGFkZXJTcmMpCit7CisgICAgR0x1
aW50IHNoYWRlcjsKKyAgICBHTGludCBjb21waWxlZDsKKworICAgIHNoYWRlciA9IDo6Z2xDcmVh
dGVTaGFkZXIodHlwZSk7CisKKyAgICBpZiAoIXNoYWRlcikgeworICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBjcmVhdGUgc2hhZGVyLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICA6OmdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnNoYWRlclNyYywgMCk7CisgICAgOjpn
bENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKyAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9D
T01QSUxFX1NUQVRVUywgJmNvbXBpbGVkKTsKKworICAgIGlmICghY29tcGlsZWQpIHsKKyAgICAg
ICAgOjpnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBjb21waWxlIHNoYWRlci4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0
dXJuIHNoYWRlcjsKK30KKwordm9pZCBUZXh0dXJlQmxpdHRlcjo6YmluZEFycmF5QnVmZmVyKCkK
K3sKKyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV92ZXJ0ZXhBdHRyKTsKKyAgICA6
OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV90ZXh0dXJlQ29vcmRpbmF0ZXNBdHRyKTsKKyAg
ICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fdmVydGV4QnVmZmVyKTsKKyAgICA6
OmdsVmVydGV4QXR0cmliUG9pbnRlcihtX3ZlcnRleEF0dHIsIDQsIEdMX0ZMT0FULCBHTF9GQUxT
RSwgMCwgKHZvaWQqKU5VTEwpOworICAgIDo6Z2xWZXJ0ZXhBdHRyaWJQb2ludGVyKG1fdGV4dHVy
ZUNvb3JkaW5hdGVzQXR0ciwgMiwgR0xfRkxPQVQsIEdMX0ZBTFNFLCAwLCAodm9pZCopVEVYQ09P
UkRPRkZTRVQpOworfQorCit2b2lkIFRleHR1cmVCbGl0dGVyOjplbmFibGVWZXJ0ZXhBcnJheSgp
Cit7CisgICAgaWYgKG1fY3VycmVudFZlcnRleEhhbmRsZSkKKyAgICAgICAgbV9nbEJpbmRWZXJ0
ZXhBcnJheShtX2N1cnJlbnRWZXJ0ZXhIYW5kbGUpOworICAgIGVsc2UKKyAgICAgICAgYmluZEFy
cmF5QnVmZmVyKCk7Cit9CisKK3ZvaWQgVGV4dHVyZUJsaXR0ZXI6OmRpc2FibGVWZXJ0ZXhBcnJh
eSgpCit7CisgICAgaWYgKG1fY3VycmVudFZlcnRleEhhbmRsZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgOjpnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3ZlcnRleEF0dHIpOworICAgIDo6
Z2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobV90ZXh0dXJlQ29vcmRpbmF0ZXNBdHRyKTsKK30K
KworYm9vbCBUZXh0dXJlQmxpdHRlcjo6bGlua1Byb2dyYW0oY29uc3QgR0x1aW50IHByb2dyYW1J
ZCkKK3sKKyAgICA6OmdsTGlua1Byb2dyYW0ocHJvZ3JhbUlkKTsKKyAgICBHTGludCBsaW5rU3Rh
dHVzID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW1JZCwgR0xfTElOS19TVEFUVVMs
ICZsaW5rU3RhdHVzKTsKKworICAgIGlmICghbGlua1N0YXR1cykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVGV4dHVyZUJsaXR0ZXI6OmluaXRp
YWxpemVWQk8oKQoreworICAgIGlmIChtX2dsR2VuVmVydGV4QXJyYXlzKSB7CisgICAgICAgIG1f
Y3VycmVudFZlcnRleEhhbmRsZSA9IG1fdmVydGV4SGFuZGxlOworCisgICAgICAgIGlmIChtX2N1
cnJlbnRWZXJ0ZXhIYW5kbGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmICht
X3ZlcnRleEJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gYmluZCBidWZmZXJzLgor
ICAgIDo6Z2xHZW5CdWZmZXJzKDEsICZtX3ZlcnRleEJ1ZmZlcik7CisgICAgOjpnbEJpbmRCdWZm
ZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3ZlcnRleEJ1ZmZlcik7CisgICAgOjpnbEJ1ZmZlckRhdGEo
R0xfQVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywgR0xfU1RBVElDX0RS
QVcpOworCisgICAgLy8gQ3JlYXRlIGFuZCBzZXQtdXAgdGhlIHZlcnRleCBhcnJheSBvYmplY3QK
KyAgICBpZiAobV9nbEdlblZlcnRleEFycmF5cyAmJiBtX2dsQmluZFZlcnRleEFycmF5KSB7Cisg
ICAgICAgIEdMdWludCB2ZXJ0ZXhIYW5kbGU7CisgICAgICAgIG1fZ2xHZW5WZXJ0ZXhBcnJheXMo
MSwgJnZlcnRleEhhbmRsZSk7CisgICAgICAgIG1fZ2xCaW5kVmVydGV4QXJyYXkodmVydGV4SGFu
ZGxlKTsKKyAgICAgICAgYmluZEFycmF5QnVmZmVyKCk7CisgICAgICAgIG1fdmVydGV4SGFuZGxl
ID0gdmVydGV4SGFuZGxlOworICAgICAgICBtX2N1cnJlbnRWZXJ0ZXhIYW5kbGUgPSB2ZXJ0ZXhI
YW5kbGU7CisgICAgfQorfQorCitib29sIFRleHR1cmVCbGl0dGVyOjppbml0aWFsaXplUHJvZ3Jh
bSgpCit7CisgICAgaWYgKG1fc2hhZGVyUHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAvLyBjcmVhdGUgc2hhZGVyLgorICAgIEdMdWludCB2ZXJ0ZXhTaGFkZXIgPSBsb2FkU2hh
ZGVyKEdMX1ZFUlRFWF9TSEFERVIsIEdldFNoYWRlclNvdXJjZShHTF9WRVJURVhfU0hBREVSKSk7
CisgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdM
dWludCBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXIoR0xfRlJBR01FTlRfU0hBREVSLCBHZXRT
aGFkZXJTb3VyY2UoR0xfRlJBR01FTlRfU0hBREVSKSk7CisKKyAgICBpZiAoIWZyYWdtZW50U2hh
ZGVyKSB7CisgICAgICAgIDo6Z2xEZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1fc2hhZGVyUHJvZ3JhbSA9IGdsQ3JlYXRlUHJv
Z3JhbSgpOworCisgICAgaWYgKCFtX3NoYWRlclByb2dyYW0gfHwgKG1fc2hhZGVyUHJvZ3JhbSAm
JiAhZ2xJc1Byb2dyYW0obV9zaGFkZXJQcm9ncmFtKSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gY3JlYXRlIHByb2dyYW0uIik7CisgICAgICAgIDo6Z2xEZWxldGVTaGFkZXIodmVy
dGV4U2hhZGVyKTsKKyAgICAgICAgOjpnbERlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICA6OmdsQXR0YWNoU2hhZGVyKG1fc2hh
ZGVyUHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgICA6OmdsQXR0YWNoU2hhZGVyKG1fc2hhZGVy
UHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOworICAgIGJvb2wgbGlua2VkID0gbGlua1Byb2dyYW0o
bV9zaGFkZXJQcm9ncmFtKTsKKyAgICA6OmdsRGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7Cisg
ICAgOjpnbERlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7CisKKyAgICBpZiAoIWxpbmtlZCkg
eworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
R0xpbnQgY3VycmVudFByb2dyYW07CisgICAgOjpnbEdldEludGVnZXJ2KEdMX0NVUlJFTlRfUFJP
R1JBTSwgJmN1cnJlbnRQcm9ncmFtKTsKKyAgICB1bnNpZ25lZCBzYW1wbGVyTG9jYXRpb24gPSBn
bEdldFVuaWZvcm1Mb2NhdGlvbihtX3NoYWRlclByb2dyYW0sICJ1X3RleFNhbXBsZXIiKTsKKyAg
ICBtX3ZlcnRleEF0dHIgPSA6OmdsR2V0QXR0cmliTG9jYXRpb24obV9zaGFkZXJQcm9ncmFtLCAi
bV92UG9zaXRpb24iKTsKKyAgICBtX3RleHR1cmVDb29yZGluYXRlc0F0dHIgPSA6OmdsR2V0QXR0
cmliTG9jYXRpb24obV9zaGFkZXJQcm9ncmFtLCAibV90ZXhDb29yZCIpOworICAgIDo6Z2xVc2VQ
cm9ncmFtKG1fc2hhZGVyUHJvZ3JhbSk7CisgICAgOjpnbFVuaWZvcm0xaShzYW1wbGVyTG9jYXRp
b24sIDApOworCisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURH
RSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisgICAgOjpnbFVzZVByb2dyYW0oY3VycmVudFByb2dy
YW0pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCitib29s
IFRleHR1cmVCbGl0dGVyOjpkcmF3VGV4dHVyZShjb25zdCBHTHVpbnQgc291cmNlVGV4dHVyZSwg
Y29uc3QgR0x1aW50IHRhcmdldEZib0lkLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYg
ZGVzdFJlY3QsIEdMZW51bSkKK3sKKyAgICBpbml0aWFsaXplR0xCaW5kaW5ncygpOworCisgICAg
ICBpZiAoIWluaXRpYWxpemVQcm9ncmFtKCkpCisgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICBTY29wZWRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXI7CisKKyAgICAgIDo6Z2xWaWV3cG9ydCAo
ZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0Lmhl
aWdodCgpKTsKKyAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIHRhcmdl
dEZib0lkKTsKKyAgICAgIDo6Z2xDbGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsKKyAgICAgIDo6
Z2xVc2VQcm9ncmFtKG1fc2hhZGVyUHJvZ3JhbSk7CisgICAgICA6OmdsQmluZEJ1ZmZlcihHTF9B
UlJBWV9CVUZGRVIsIDApOworICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHNv
dXJjZVRleHR1cmUpOworICAgICAgOjpnbENvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVl
KTsKKyAgICAgIGluaXRpYWxpemVWQk8oKTsKKyAgICAgIGVuYWJsZVZlcnRleEFycmF5KCk7Cisg
ICAgICA6OmdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9GQU4sIDAsIDQpOworICAgICAgOjpnbEZs
dXNoKCk7CisgICAgICBkaXNhYmxlVmVydGV4QXJyYXkoKTsKKworICAgICAgcmV0dXJuIHRydWU7
Cit9CisjZWxzZQorYm9vbCBUZXh0dXJlQmxpdHRlcjo6ZHJhd1RleHR1cmUoY29uc3QgR0x1aW50
IHNvdXJjZVRleHR1cmUsIGNvbnN0IEdMdWludCB0YXJnZXRGYm9JZCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QsIEdMZW51bSBmaWx0ZXIpCit7CisgICBp
ZiAoIW1fZmJvSWQpCisgICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zib0lkKTsKKwor
ICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIG1fZmJvSWQpOworICAg
IGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgc291cmNlVGV4dHVyZSk7CisgICAgZ2xGcmFt
ZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5U
MCwgR0xfVEVYVFVSRV8yRCwgc291cmNlVGV4dHVyZSwgMCk7CisgICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRFJBV19GUkFNRUJVRkZFUiwgdGFyZ2V0RmJvSWQpOworICAgIGdsQmxpdEZyYW1lYnVm
ZmVyKHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0Lmhl
aWdodCgpLCBkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVz
dFJlY3QuaGVpZ2h0KCksIEdMX0NPTE9SX0JVRkZFUl9CSVQsIGZpbHRlcik7CisgICAgZ2xGcmFt
ZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5U
MCwgR0xfVEVYVFVSRV8yRCwgMCwgMCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgor
Cit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvVGV4dHVyZUJsaXR0ZXIuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9UZXh0dXJlQmxpdHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjZjNjllNmUKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvVGV4dHVyZUJsaXR0ZXIuaApAQCAtMCwwICsxLDg5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHR1cmVCbGl0dGVyX2gKKyNkZWZpbmUgVGV4
dHVyZUJsaXR0ZXJfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5j
bHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJlQmxpdHRlciA6IHB1YmxpYyBXVEY6
OlJlZkNvdW50ZWRCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUZXh0dXJlQmxpdHRl
cik7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0dXJlQmxpdHRlcj4gY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zdGF0aWNUZXh0dXJlQmxpdHRlcikKKyAgICAg
ICAgICAgIG1fc3RhdGljVGV4dHVyZUJsaXR0ZXIgPSBuZXcgVGV4dHVyZUJsaXR0ZXIoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdGF0aWNUZXh0dXJlQmxpdHRlci0+cmVmKCk7CisK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG1fc3RhdGljVGV4dHVyZUJsaXR0ZXIpOworICAgIH0K
KworICAgIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgaWYgKGRlcmVmQmFzZSgpKSB7Cisg
ICAgICAgICAgICBtX3N0YXRpY1RleHR1cmVCbGl0dGVyID0gMDsKKyAgICAgICAgICAgIGRlbGV0
ZSB0aGlzOworICAgICAgICB9CisgICAgfQorCisgICAgVGV4dHVyZUJsaXR0ZXIoKTsKKyAgICB+
VGV4dHVyZUJsaXR0ZXIoKTsKKyAgICBib29sIGRyYXdUZXh0dXJlKGNvbnN0IEdMdWludCwgY29u
c3QgR0x1aW50LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIEdMZW51bSA9IEdyYXBo
aWNzQ29udGV4dDNEOjpORUFSRVNUKTsKKyAgICB2b2lkIGNsZWFyKCk7CisKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIFRleHR1cmVCbGl0dGVyKiBtX3N0YXRpY1RleHR1cmVCbGl0dGVyOworICAgIGJv
b2wgaW5pdGlhbGl6ZVByb2dyYW0oKTsKKyAgICB2b2lkIGVuYWJsZVZlcnRleEFycmF5KCk7Cisg
ICAgdm9pZCBkaXNhYmxlVmVydGV4QXJyYXkoKTsKKyAgICB2b2lkIGJpbmRBcnJheUJ1ZmZlcigp
OworICAgIHZvaWQgaW5pdGlhbGl6ZVZCTygpOworICAgIGJvb2wgbGlua1Byb2dyYW0oY29uc3Qg
R0x1aW50IHByb2dyYW1JZCk7CisgICAgR0x1aW50IGxvYWRTaGFkZXIoR0xlbnVtIHR5cGUsIGNv
bnN0IEdMY2hhciAqc2hhZGVyU3JjKTsKKyAgICBHTHVpbnQgbV92ZXJ0ZXhIYW5kbGU7CisgICAg
R0x1aW50IG1fY3VycmVudFZlcnRleEhhbmRsZTsKKyAgICBHTHVpbnQgbV9zaGFkZXJQcm9ncmFt
OworICAgIEdMdWludCBtX3ZlcnRleEJ1ZmZlcjsKKyAgICBHTHVpbnQgbV9mYm9JZDsKKworICAg
IEdMdWludCBtX3ZlcnRleEF0dHI7CisgICAgR0x1aW50IG1fdGV4dHVyZUNvb3JkaW5hdGVzQXR0
cjsKKyAgICBHTHVpbnQgbV90ZXh0dXJlVW5pZm9ybTsKK307CisKK30KKworI2VuZGlmCisKKyNl
bmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187435</attachid>
            <date>2013-02-09 10:13:54 -0800</date>
            <delta_ts>2013-02-10 04:12:17 -0800</delta_ts>
            <desc>patch</desc>
            <filename>platformsurface.patch</filename>
            <type>text/plain</type>
            <size>8670</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGEyOTMwODguLjEzZGViYjAgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEz
LTAyLTA5ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXSBbV2ViR0xdIEFkZCBzdXBwb3J0IGZvciBibGl0aW5nIHRleHR1cmUg
Y29udGVudHMgdG8gRkJPLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA2NTA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBXZWJHTCB0ZXN0cy4KKworICAgICAgICBXZSBj
dXJyZW50bHkgcmVseSBvbiBFWFRfZnJhbWVidWZmZXJfYmxpdCB0byBibGl0IHRleHR1cmUgY29u
dGVudHMgdG8gdGhlIHN1cmZhY2UuCisgICAgICAgIFRoaXMgZXh0ZW5zaW9uIGlzIG5vdCBleHBv
c2VkIG9uIEdMRVMyLjAuIFRoaXMgcGF0Y2ggYWRkcmVzcyB0aGlzIGJ5IG1ha2luZyB1c2UKKyAg
ICAgICAgb2YgVGV4dHVyZU1hcHBlckdMIHRvIGRyYXcgdGV4dHVyZSBjb250ZW50cyB0byB0aGUg
c3VyZmFjZSBvbiBib3RoIEdMIGFuZCBHTEVTLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFNjb3BlZFN0YXRlU2F2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkU3RhdGVTYXZlcjo6U2NvcGVkU3RhdGVTYXZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRTdGF0ZVNhdmVyOjp+U2NvcGVkU3RhdGVTYXZl
cik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgVXNlZCB0byBzYXZlIGFuZCByZXN0b3Jl
IGN1cnJlbnQgYm91bmQgQXJyYXkgQnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9y
bVN1cmZhY2U6OkdMUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZv
cm1TdXJmYWNlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3Jt
U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dM
UGxhdGZvcm1TdXJmYWNlLmg6CisgICAgICAgIChHTFBsYXRmb3JtU3VyZmFjZSk6CisKIDIwMTMt
MDItMDkgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgoKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcAppbmRleCBkMTA5NTY3Li42NmQwMTE3IDEwMDY0NAotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuY3BwCkBAIC0xNDAsMTAgKzE0MCwxMSBAQCB1aW50MzJfdCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCiAgICAgICAgIG1fcGxhdGZvcm1T
dXJmYWNlLT5zZXRHZW9tZXRyeShJbnRSZWN0KDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lk
dGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSk7CiAgICAgfQogCisgICAgaW50IHdpZHRo
ID0gbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aDsKKyAgICBpbnQgaGVpZ2h0ID0gbV9jb250ZXh0
LT5tX2N1cnJlbnRIZWlnaHQ7CisKICAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLmFudGlhbGlh
cykgewogICAgICAgICBib29sIGVuYWJsZVNjaXNzb3JUZXN0ID0gZmFsc2U7Ci0gICAgICAgIGlu
dCB3aWR0aCA9IG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQg
PSBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodDsKICAgICAgICAgLy8gV2Ugc2hvdWxkIGNvcHkg
dGhlIGZ1bGwgYnVmZmVyLCBhbmQgbm90IHJlc3BlY3QgdGhlIGN1cnJlbnQgc2Npc3NvciBib3Vu
ZHMuCiAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBtb3JlIGVmZmljaWVudCB0byB0cmFj
ayB0aGUgc3RhdGUgb2YgdGhlIHNjaXNzb3IgdGVzdC4KICAgICAgICAgaWYgKG1fY29udGV4dC0+
aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKSB7CkBAIC0xNjEsNyAr
MTYyLDcgQEAgdWludDMyX3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb3B5VG9HcmFwaGlj
c1N1cmZhY2UoKQogICAgICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgfQogCi0gICAgbV9wbGF0Zm9ybVN1cmZhY2UtPnVwZGF0
ZUNvbnRlbnRzKG1fY29udGV4dC0+bV90ZXh0dXJlLCBtX2NvbnRleHQtPm1fYm91bmRGQk8sIG1f
Y29udGV4dC0+bV9ib3VuZFRleHR1cmUwKTsKKyAgICBtX3BsYXRmb3JtU3VyZmFjZS0+dXBkYXRl
Q29udGVudHMobV9jb250ZXh0LT5tX3RleHR1cmUsIEludFNpemUod2lkdGgsIGhlaWdodCksIG1f
Y29udGV4dC0+bV9ib3VuZEZCTywgbV9jb250ZXh0LT5tX2JvdW5kVGV4dHVyZTApOwogCiAgICAg
cmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCmluZGV4IDdmN2E1NjQuLjJjMjRhZjYg
MTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0
Zm9ybVN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpZiBIQVZFKEdMWCkKKyNpZiBVU0UoR0xYKQogI2lu
Y2x1ZGUgIkdMWFN1cmZhY2UuaCIKICNlbmRpZgogCkBAIC02OCwxMiArNjgsNTMgQEAgUGFzc093
blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9y
dFN1cmZhY2UoKQogICAgIHJldHVybiBudWxscHRyOwogfQogCitjbGFzcyBTY29wZWRTdGF0ZVNh
dmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY29wZWRTdGF0ZVNhdmVyKTsKKworcHVi
bGljOgorICAgIFNjb3BlZFN0YXRlU2F2ZXIoKQorICAgIHsKKyAgICAgICAgOjpnbEdldEludGVn
ZXJ2KEdMX0FDVElWRV9URVhUVVJFLCAmbV9ib3VuZFRleFVuaXQpOworICAgICAgICA6OmdsR2V0
VmVydGV4QXR0cmliaXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVELCAmbV9hdHRy
aWJFbmFibGVkKTsKKyAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAsIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfU0laRSwgJm1fYXR0cmliU2l6ZSk7CisgICAgICAgIDo6Z2xHZXRWZXJ0ZXhB
dHRyaWJpdigwLCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSwgJm1fYXR0cmliU3RyaWRl
KTsKKyAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAsIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfVFlQRSwgJm1fYXR0cmliVHlwZSk7CisgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdigw
LCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQsICZtX2F0dHJpYk5vcm1hbGl6ZWQp
OworICAgICAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9CVUZGRVJfQklORElORywgJm1fYXR0cmliQnVmZmVyQmluZGluZyk7CisgICAgICAgIDo6Z2xH
ZXRWZXJ0ZXhBdHRyaWJQb2ludGVydigwLCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIs
ICZtX2F0dHJpYlBvaW50ZXIpOworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfQVJSQVlfQlVG
RkVSX0JJTkRJTkcsICZtX2N1cnJlbnRBcnJheUJ1ZmZlckJpbmRpbmcpOworICAgICAgICA6Omds
QWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7CisgICAgfQorCisgICAgflNjb3BlZFN0YXRlU2F2
ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYXR0cmliRW5hYmxlZCkKKyAgICAgICAgICAgIDo6
Z2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKworICAgICAgICA6OmdsQmluZEJ1ZmZlcihH
TF9BUlJBWV9CVUZGRVIsIG1fYXR0cmliQnVmZmVyQmluZGluZyk7CisgICAgICAgIDo6Z2xWZXJ0
ZXhBdHRyaWJQb2ludGVyKDAsIG1fYXR0cmliU2l6ZSwgbV9hdHRyaWJUeXBlLCBtX2F0dHJpYk5v
cm1hbGl6ZWQsIG1fYXR0cmliU3RyaWRlLCBtX2F0dHJpYlBvaW50ZXIpOworICAgICAgICA6Omds
QmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fY3VycmVudEFycmF5QnVmZmVyQmluZGluZyk7
CisgICAgICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fYm91bmRUZXhVbml0KTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgR0xpbnQgbV9ib3VuZFRleFVuaXQ7CisgICAgR0xpbnQgbV9ib3VuZFByb2dy
YW07CisgICAgR0xpbnQgbV9jdXJyZW50QXJyYXlCdWZmZXJCaW5kaW5nOworICAgIEdMaW50IG1f
YXR0cmliRW5hYmxlZDsKKyAgICBHTGludCBtX2F0dHJpYlNpemU7CisgICAgR0xpbnQgbV9hdHRy
aWJTdHJpZGU7CisgICAgR0xpbnQgbV9hdHRyaWJUeXBlOworICAgIEdMaW50IG1fYXR0cmliTm9y
bWFsaXplZDsKKyAgICBHTGludCBtX2F0dHJpYkJ1ZmZlckJpbmRpbmc7CisgICAgdm9pZCogbV9h
dHRyaWJQb2ludGVyOworfTsKKwogR0xQbGF0Zm9ybVN1cmZhY2U6OkdMUGxhdGZvcm1TdXJmYWNl
KCkKLSAgICA6IG1fcmVzdG9yZU5lZWRlZCh0cnVlKQotICAgICwgbV9mYm9JZCgwKQotICAgICwg
bV9zaGFyZWREaXNwbGF5KDApCisgICAgOiBtX3NoYXJlZERpc3BsYXkoMCkKICAgICAsIG1fZHJh
d2FibGUoMCkKICAgICAsIG1fYnVmZmVySGFuZGxlKDApCisgICAgLCBtX3Jlc3RvcmVOZWVkZWQo
dHJ1ZSkKIHsKIH0KIApAQCAtMTExLDI4ICsxNTIsMjggQEAgdm9pZCBHTFBsYXRmb3JtU3VyZmFj
ZTo6c3dhcEJ1ZmZlcnMoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR0xQbGF0
Zm9ybVN1cmZhY2U6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHVpbnQzMl90IHRleHR1cmUsIGNvbnN0
IEdMdWludCBiaW5kRmJvSWQsIGNvbnN0IHVpbnQzMl90IGJpbmRUZXh0dXJlKQordm9pZCBHTFBs
YXRmb3JtU3VyZmFjZTo6dXBkYXRlQ29udGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVyZSwgY29u
c3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEdMdWludCBiaW5kRmJvSWQsIGNvbnN0IHVp
bnQzMl90IGJpbmRUZXh0dXJlKQogewotICAgIGlmICghbV9mYm9JZCkKLSAgICAgICAgZ2xHZW5G
cmFtZWJ1ZmZlcnMoMSwgJm1fZmJvSWQpOworICAgIGlmICghbV90ZXh0dXJlQmxpdHRlcikgewor
ICAgICAgICBtX3RleHR1cmVCbGl0dGVyID0gVGV4dHVyZU1hcHBlckdMOjpjcmVhdGUoKTsKKyAg
ICAgICAgbV9mbGFncyA9IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkRmxpcFRleHR1cmU7CisgICAg
fQogCiAgICAgbV9yZXN0b3JlTmVlZGVkID0gZmFsc2U7CiAKLSAgICBpbnQgeCA9IDA7Ci0gICAg
aW50IHkgPSAwOwotICAgIGludCB3aWR0aCA9IG1fcmVjdC53aWR0aCgpOwotICAgIGludCBoZWln
aHQgPSBtX3JlY3QuaGVpZ2h0KCk7Ci0KLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9SRUFEX0ZS
QU1FQlVGRkVSLCBtX2Zib0lkKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRl
eHR1cmUpOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwg
R0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIHRleHR1cmUsIDApOwotICAgIGds
QmluZEZyYW1lYnVmZmVyKEdMX0RSQVdfRlJBTUVCVUZGRVIsIDApOwotICAgIC8vIFVzZSBORUFS
RVNUIGFzIG5vIHNjYWxlIGlzIHBlcmZvcm1lZCBkdXJpbmcgdGhlIGJsaXQuCi0gICAgZ2xCbGl0
RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR0xf
Q09MT1JfQlVGRkVSX0JJVCwgR0xfTkVBUkVTVCk7CisgICAgLy8gU2F2ZSBhbnkgY3VycmVudCBi
b3VuZCB2ZXJ0ZXggYXJyYXkgdG8gcmVzdG9yZSBhZnRlciB1cGRhdGluZyBzdXJmYWNlIHdpdGgg
dGV4dHVyZSBjb250ZW50LgorICAgIC8vIFRoaXMgaXMgbmVlZGVkIGFzIFRleHR1cmVNYXBwZXJH
TCBkb2Vzbid0IHRyYWNrIGFuZCByZXN0b3JlIGN1cnJlbnQgYm91bmQgdmVydGV4IGFycmF5Lgor
ICAgIFNjb3BlZFN0YXRlU2F2ZXIgc3RhdGVTYXZlcjsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVy
KEdMX0ZSQU1FQlVGRkVSLCAwKTsKKworICAgIG1fdGV4dHVyZUJsaXR0ZXItPmJlZ2luUGFpbnRp
bmcoKTsKKyAgICBtX3RleHR1cmVCbGl0dGVyLT5kcmF3VGV4dHVyZSh0ZXh0dXJlLCBtX2ZsYWdz
LCB0ZXh0dXJlU2l6ZSwgbV9yZWN0LCBtX2lkZW50aXR5TWF0cml4LCAxLjAsIDApOworICAgIG1f
dGV4dHVyZUJsaXR0ZXItPmVuZFBhaW50aW5nKCk7CisKKyAgICA6OmdsRmx1c2goKTsKICAgICBz
d2FwQnVmZmVycygpOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJV
RkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIDAsIDApOwotICAgIGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgYmluZFRleHR1cmUpOwotICAgIGdsQmluZEZyYW1l
YnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBiaW5kRmJvSWQpOworICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBiaW5kVGV4dHVyZSk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgYmluZEZib0lkKTsKIH0KIAogdm9pZCBHTFBsYXRmb3JtU3VyZmFjZTo6c2V0
R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKQEAgLTE0MywxMSArMTg0LDYgQEAgdm9p
ZCBHTFBsYXRmb3JtU3VyZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkK
IHZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKQogewogICAgIG1fcmVjdCA9IEludFJl
Y3QoKTsKLQotICAgIGlmIChtX2Zib0lkKQotICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygx
LCAmbV9mYm9JZCk7Ci0KLSAgICBtX2Zib0lkID0gMDsKIH0KIAogfQpkaWZmIC0tZ2l0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5oIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5o
CmluZGV4IGU4ZGI0MjUuLmFjYzg4NDcgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaAorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmgKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkdMRGVmcy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlIDx0ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApAQCAtNjYsNyArNjcsNyBAQCBwdWJs
aWM6CiAgICAgLy8gYSkgQmxpdHMgdGV4dHVyZSBjb250ZW50cyB0byBiYWNrIGJ1ZmZlci4KICAg
ICAvLyBiKSBDYWxscyBTd2FwIEJ1ZmZlcnMuCiAgICAgLy8gYykgU2V0cyBjdXJyZW50IEZCTyBh
cyBiaW5kRmJvSWQuCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHVpbnQz
Ml90IHRleHR1cmUsIGNvbnN0IEdMdWludCBiaW5kRmJvSWQsIGNvbnN0IHVpbnQzMl90IGJpbmRU
ZXh0dXJlKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3QgdWludDMyX3Qg
dGV4dHVyZSwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEdMdWludCBiaW5kRmJvSWQsIGNvbnN0IHVp
bnQzMl90IGJpbmRUZXh0dXJlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRyeShjb25z
dCBJbnRSZWN0JiBuZXdSZWN0KTsKIApAQCAtNzYsMTIgKzc3LDE0IEBAIHB1YmxpYzoKIAogcHJv
dGVjdGVkOgogICAgIEdMUGxhdGZvcm1TdXJmYWNlKCk7Ci0gICAgYm9vbCBtX3Jlc3RvcmVOZWVk
ZWQ7Ci0gICAgSW50UmVjdCBtX3JlY3Q7Ci0gICAgR0x1aW50IG1fZmJvSWQ7CiAgICAgUGxhdGZv
cm1EaXNwbGF5IG1fc2hhcmVkRGlzcGxheTsKICAgICBQbGF0Zm9ybURyYXdhYmxlIG1fZHJhd2Fi
bGU7CiAgICAgUGxhdGZvcm1CdWZmZXJIYW5kbGUgbV9idWZmZXJIYW5kbGU7CisgICAgT3duUHRy
PFRleHR1cmVNYXBwZXJHTD4gbV90ZXh0dXJlQmxpdHRlcjsKKyAgICBib29sIG1fcmVzdG9yZU5l
ZWRlZCA6MTsKKyAgICBJbnRSZWN0IG1fcmVjdDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X2lkZW50aXR5TWF0cml4OworICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgbV9mbGFnczsKIH07
CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187475</attachid>
            <date>2013-02-10 04:12:17 -0800</date>
            <delta_ts>2013-02-10 07:09:01 -0800</delta_ts>
            <desc>patchv2</desc>
            <filename>platformchanges.patch</filename>
            <type>text/plain</type>
            <size>8629</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGEyOTMwODguLjEzZGViYjAgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEz
LTAyLTA5ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXSBbV2ViR0xdIEFkZCBzdXBwb3J0IGZvciBibGl0aW5nIHRleHR1cmUg
Y29udGVudHMgdG8gRkJPLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA2NTA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBXZWJHTCB0ZXN0cy4KKworICAgICAgICBXZSBj
dXJyZW50bHkgcmVseSBvbiBFWFRfZnJhbWVidWZmZXJfYmxpdCB0byBibGl0IHRleHR1cmUgY29u
dGVudHMgdG8gdGhlIHN1cmZhY2UuCisgICAgICAgIFRoaXMgZXh0ZW5zaW9uIGlzIG5vdCBleHBv
c2VkIG9uIEdMRVMyLjAuIFRoaXMgcGF0Y2ggYWRkcmVzcyB0aGlzIGJ5IG1ha2luZyB1c2UKKyAg
ICAgICAgb2YgVGV4dHVyZU1hcHBlckdMIHRvIGRyYXcgdGV4dHVyZSBjb250ZW50cyB0byB0aGUg
c3VyZmFjZSBvbiBib3RoIEdMIGFuZCBHTEVTLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFNjb3BlZFN0YXRlU2F2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkU3RhdGVTYXZlcjo6U2NvcGVkU3RhdGVTYXZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRTdGF0ZVNhdmVyOjp+U2NvcGVkU3RhdGVTYXZl
cik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgVXNlZCB0byBzYXZlIGFuZCByZXN0b3Jl
IGN1cnJlbnQgYm91bmQgQXJyYXkgQnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9y
bVN1cmZhY2U6OkdMUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZv
cm1TdXJmYWNlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3Jt
U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dM
UGxhdGZvcm1TdXJmYWNlLmg6CisgICAgICAgIChHTFBsYXRmb3JtU3VyZmFjZSk6CisKIDIwMTMt
MDItMDkgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgoKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcAppbmRleCBkMTA5NTY3Li42NmQwMTE3IDEwMDY0NAotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuY3BwCkBAIC0xNDAsMTAgKzE0MCwxMSBAQCB1aW50MzJfdCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCiAgICAgICAgIG1fcGxhdGZvcm1T
dXJmYWNlLT5zZXRHZW9tZXRyeShJbnRSZWN0KDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lk
dGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSk7CiAgICAgfQogCisgICAgaW50IHdpZHRo
ID0gbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aDsKKyAgICBpbnQgaGVpZ2h0ID0gbV9jb250ZXh0
LT5tX2N1cnJlbnRIZWlnaHQ7CisKICAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLmFudGlhbGlh
cykgewogICAgICAgICBib29sIGVuYWJsZVNjaXNzb3JUZXN0ID0gZmFsc2U7Ci0gICAgICAgIGlu
dCB3aWR0aCA9IG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQg
PSBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodDsKICAgICAgICAgLy8gV2Ugc2hvdWxkIGNvcHkg
dGhlIGZ1bGwgYnVmZmVyLCBhbmQgbm90IHJlc3BlY3QgdGhlIGN1cnJlbnQgc2Npc3NvciBib3Vu
ZHMuCiAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBtb3JlIGVmZmljaWVudCB0byB0cmFj
ayB0aGUgc3RhdGUgb2YgdGhlIHNjaXNzb3IgdGVzdC4KICAgICAgICAgaWYgKG1fY29udGV4dC0+
aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKSB7CkBAIC0xNjEsNyAr
MTYyLDcgQEAgdWludDMyX3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb3B5VG9HcmFwaGlj
c1N1cmZhY2UoKQogICAgICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgfQogCi0gICAgbV9wbGF0Zm9ybVN1cmZhY2UtPnVwZGF0
ZUNvbnRlbnRzKG1fY29udGV4dC0+bV90ZXh0dXJlLCBtX2NvbnRleHQtPm1fYm91bmRGQk8sIG1f
Y29udGV4dC0+bV9ib3VuZFRleHR1cmUwKTsKKyAgICBtX3BsYXRmb3JtU3VyZmFjZS0+dXBkYXRl
Q29udGVudHMobV9jb250ZXh0LT5tX3RleHR1cmUsIEludFNpemUod2lkdGgsIGhlaWdodCksIG1f
Y29udGV4dC0+bV9ib3VuZEZCTywgbV9jb250ZXh0LT5tX2JvdW5kVGV4dHVyZTApOwogCiAgICAg
cmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCmluZGV4IDdmN2E1NjQuLmY0MDdmNDkg
MTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0
Zm9ybVN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpZiBIQVZFKEdMWCkKKyNpZiBVU0UoR0xYKQogI2lu
Y2x1ZGUgIkdMWFN1cmZhY2UuaCIKICNlbmRpZgogCkBAIC02OCwxMiArNjgsNTIgQEAgUGFzc093
blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9y
dFN1cmZhY2UoKQogICAgIHJldHVybiBudWxscHRyOwogfQogCitjbGFzcyBTY29wZWRTdGF0ZVNh
dmVyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY29wZWRTdGF0ZVNhdmVyKTsKKworcHVi
bGljOgorICAgIFNjb3BlZFN0YXRlU2F2ZXIoKQorICAgIHsKKyAgICAgICAgOjpnbEdldEludGVn
ZXJ2KEdMX0FDVElWRV9URVhUVVJFLCAmbV9ib3VuZFRleFVuaXQpOworICAgICAgICA6OmdsR2V0
VmVydGV4QXR0cmliaXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVELCAmbV9hdHRy
aWJFbmFibGVkKTsKKyAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAsIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfU0laRSwgJm1fYXR0cmliU2l6ZSk7CisgICAgICAgIDo6Z2xHZXRWZXJ0ZXhB
dHRyaWJpdigwLCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSwgJm1fYXR0cmliU3RyaWRl
KTsKKyAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAsIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfVFlQRSwgJm1fYXR0cmliVHlwZSk7CisgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdigw
LCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQsICZtX2F0dHJpYk5vcm1hbGl6ZWQp
OworICAgICAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9CVUZGRVJfQklORElORywgJm1fYXR0cmliQnVmZmVyQmluZGluZyk7CisgICAgICAgIDo6Z2xH
ZXRWZXJ0ZXhBdHRyaWJQb2ludGVydigwLCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIs
ICZtX2F0dHJpYlBvaW50ZXIpOworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfQVJSQVlfQlVG
RkVSX0JJTkRJTkcsICZtX2N1cnJlbnRBcnJheUJ1ZmZlckJpbmRpbmcpOworICAgIH0KKworICAg
IH5TY29wZWRTdGF0ZVNhdmVyKCkKKyAgICB7CisgICAgICAgIGlmIChtX2F0dHJpYkVuYWJsZWQp
CisgICAgICAgICAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisKKyAgICAgICAg
OjpnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX2F0dHJpYkJ1ZmZlckJpbmRpbmcpOwor
ICAgICAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcigwLCBtX2F0dHJpYlNpemUsIG1fYXR0cmli
VHlwZSwgbV9hdHRyaWJOb3JtYWxpemVkLCBtX2F0dHJpYlN0cmlkZSwgbV9hdHRyaWJQb2ludGVy
KTsKKyAgICAgICAgOjpnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX2N1cnJlbnRBcnJh
eUJ1ZmZlckJpbmRpbmcpOworICAgICAgICA6OmdsQWN0aXZlVGV4dHVyZShtX2JvdW5kVGV4VW5p
dCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdMaW50IG1fYm91bmRUZXhVbml0OworICAgIEdM
aW50IG1fYm91bmRQcm9ncmFtOworICAgIEdMaW50IG1fY3VycmVudEFycmF5QnVmZmVyQmluZGlu
ZzsKKyAgICBHTGludCBtX2F0dHJpYkVuYWJsZWQ7CisgICAgR0xpbnQgbV9hdHRyaWJTaXplOwor
ICAgIEdMaW50IG1fYXR0cmliU3RyaWRlOworICAgIEdMaW50IG1fYXR0cmliVHlwZTsKKyAgICBH
TGludCBtX2F0dHJpYk5vcm1hbGl6ZWQ7CisgICAgR0xpbnQgbV9hdHRyaWJCdWZmZXJCaW5kaW5n
OworICAgIHZvaWQqIG1fYXR0cmliUG9pbnRlcjsKK307CisKIEdMUGxhdGZvcm1TdXJmYWNlOjpH
TFBsYXRmb3JtU3VyZmFjZSgpCi0gICAgOiBtX3Jlc3RvcmVOZWVkZWQodHJ1ZSkKLSAgICAsIG1f
ZmJvSWQoMCkKLSAgICAsIG1fc2hhcmVkRGlzcGxheSgwKQorICAgIDogbV9zaGFyZWREaXNwbGF5
KDApCiAgICAgLCBtX2RyYXdhYmxlKDApCiAgICAgLCBtX2J1ZmZlckhhbmRsZSgwKQorICAgICwg
bV9yZXN0b3JlTmVlZGVkKHRydWUpCiB7CiB9CiAKQEAgLTExMSwyOCArMTUxLDI4IEBAIHZvaWQg
R0xQbGF0Zm9ybVN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi12b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjp1cGRhdGVDb250ZW50cyhjb25zdCB1aW50MzJf
dCB0ZXh0dXJlLCBjb25zdCBHTHVpbnQgYmluZEZib0lkLCBjb25zdCB1aW50MzJfdCBiaW5kVGV4
dHVyZSkKK3ZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OnVwZGF0ZUNvbnRlbnRzKGNvbnN0IHVpbnQz
Ml90IHRleHR1cmUsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBHTHVpbnQgYmlu
ZEZib0lkLCBjb25zdCB1aW50MzJfdCBiaW5kVGV4dHVyZSkKIHsKLSAgICBpZiAoIW1fZmJvSWQp
Ci0gICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zib0lkKTsKKyAgICBpZiAoIW1fdGV4
dHVyZUJsaXR0ZXIpIHsKKyAgICAgICAgbV90ZXh0dXJlQmxpdHRlciA9IFRleHR1cmVNYXBwZXJH
TDo6Y3JlYXRlKCk7CisgICAgICAgIG1fZmxhZ3MgPSBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEZs
aXBUZXh0dXJlOworICAgIH0KIAogICAgIG1fcmVzdG9yZU5lZWRlZCA9IGZhbHNlOwogCi0gICAg
aW50IHggPSAwOwotICAgIGludCB5ID0gMDsKLSAgICBpbnQgd2lkdGggPSBtX3JlY3Qud2lkdGgo
KTsKLSAgICBpbnQgaGVpZ2h0ID0gbV9yZWN0LmhlaWdodCgpOwotCi0gICAgZ2xCaW5kRnJhbWVi
dWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUiwgbV9mYm9JZCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JF
QURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCB0ZXh0
dXJlLCAwKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9EUkFXX0ZSQU1FQlVGRkVSLCAwKTsK
LSAgICAvLyBVc2UgTkVBUkVTVCBhcyBubyBzY2FsZSBpcyBwZXJmb3JtZWQgZHVyaW5nIHRoZSBi
bGl0LgotICAgIGdsQmxpdEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX05FQVJFU1QpOworICAgIC8vIFNh
dmUgYW55IGN1cnJlbnQgYm91bmQgdmVydGV4IGFycmF5IHRvIHJlc3RvcmUgYWZ0ZXIgdXBkYXRp
bmcgc3VyZmFjZSB3aXRoIHRleHR1cmUgY29udGVudC4KKyAgICAvLyBUaGlzIGlzIG5lZWRlZCBh
cyBUZXh0dXJlTWFwcGVyR0wgZG9lc24ndCB0cmFjayBhbmQgcmVzdG9yZSBjdXJyZW50IGJvdW5k
IHZlcnRleCBhcnJheS4KKyAgICBTY29wZWRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXI7CisgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7CisKKyAgICBtX3RleHR1cmVCbGl0
dGVyLT5iZWdpblBhaW50aW5nKCk7CisgICAgbV90ZXh0dXJlQmxpdHRlci0+ZHJhd1RleHR1cmUo
dGV4dHVyZSwgbV9mbGFncywgdGV4dHVyZVNpemUsIG1fcmVjdCwgbV9pZGVudGl0eU1hdHJpeCwg
MS4wLCAwKTsKKyAgICBtX3RleHR1cmVCbGl0dGVyLT5lbmRQYWludGluZygpOworCisgICAgOjpn
bEZsdXNoKCk7CiAgICAgc3dhcEJ1ZmZlcnMoKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJE
LCAwLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIGJpbmRUZXh0dXJlKTsK
LSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgYmluZEZib0lkKTsKKyAgICA6
OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgYmluZFRleHR1cmUpOworICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGJpbmRGYm9JZCk7CiB9CiAKIHZvaWQgR0xQbGF0
Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCkBAIC0xNDMs
MTEgKzE4Myw2IEBAIHZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IElu
dFJlY3QmIG5ld1JlY3QpCiB2b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCkKIHsKICAg
ICBtX3JlY3QgPSBJbnRSZWN0KCk7Ci0KLSAgICBpZiAobV9mYm9JZCkKLSAgICAgICAgZ2xEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgJm1fZmJvSWQpOwotCi0gICAgbV9mYm9JZCA9IDA7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0
Zm9ybVN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQ
bGF0Zm9ybVN1cmZhY2UuaAppbmRleCBlOGRiNDI1Li5hY2M4ODQ3IDEwMDY0NAotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmgKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFj
ZS5oCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJHTERlZnMuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSA8dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAKQEAgLTY2
LDcgKzY3LDcgQEAgcHVibGljOgogICAgIC8vIGEpIEJsaXRzIHRleHR1cmUgY29udGVudHMgdG8g
YmFjayBidWZmZXIuCiAgICAgLy8gYikgQ2FsbHMgU3dhcCBCdWZmZXJzLgogICAgIC8vIGMpIFNl
dHMgY3VycmVudCBGQk8gYXMgYmluZEZib0lkLgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250
ZW50cyhjb25zdCB1aW50MzJfdCB0ZXh0dXJlLCBjb25zdCBHTHVpbnQgYmluZEZib0lkLCBjb25z
dCB1aW50MzJfdCBiaW5kVGV4dHVyZSk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRz
KGNvbnN0IHVpbnQzMl90IHRleHR1cmUsIGNvbnN0IEludFNpemUmLCBjb25zdCBHTHVpbnQgYmlu
ZEZib0lkLCBjb25zdCB1aW50MzJfdCBiaW5kVGV4dHVyZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCk7CiAKQEAgLTc2LDEyICs3NywxNCBA
QCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBHTFBsYXRmb3JtU3VyZmFjZSgpOwotICAgIGJv
b2wgbV9yZXN0b3JlTmVlZGVkOwotICAgIEludFJlY3QgbV9yZWN0OwotICAgIEdMdWludCBtX2Zi
b0lkOwogICAgIFBsYXRmb3JtRGlzcGxheSBtX3NoYXJlZERpc3BsYXk7CiAgICAgUGxhdGZvcm1E
cmF3YWJsZSBtX2RyYXdhYmxlOwogICAgIFBsYXRmb3JtQnVmZmVySGFuZGxlIG1fYnVmZmVySGFu
ZGxlOworICAgIE93blB0cjxUZXh0dXJlTWFwcGVyR0w+IG1fdGV4dHVyZUJsaXR0ZXI7CisgICAg
Ym9vbCBtX3Jlc3RvcmVOZWVkZWQgOjE7CisgICAgSW50UmVjdCBtX3JlY3Q7CisgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9pZGVudGl0eU1hdHJpeDsKKyAgICBUZXh0dXJlTWFwcGVyR0w6OkZs
YWdzIG1fZmxhZ3M7CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187480</attachid>
            <date>2013-02-10 07:09:01 -0800</date>
            <delta_ts>2013-02-10 09:19:46 -0800</delta_ts>
            <desc>patchv3</desc>
            <filename>missingchanges.patch</filename>
            <type>text/plain</type>
            <size>8480</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGEyOTMwODguLjEzZGViYjAgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEz
LTAyLTA5ICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXSBbV2ViR0xdIEFkZCBzdXBwb3J0IGZvciBibGl0aW5nIHRleHR1cmUg
Y29udGVudHMgdG8gRkJPLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA2NTA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBXZWJHTCB0ZXN0cy4KKworICAgICAgICBXZSBj
dXJyZW50bHkgcmVseSBvbiBFWFRfZnJhbWVidWZmZXJfYmxpdCB0byBibGl0IHRleHR1cmUgY29u
dGVudHMgdG8gdGhlIHN1cmZhY2UuCisgICAgICAgIFRoaXMgZXh0ZW5zaW9uIGlzIG5vdCBleHBv
c2VkIG9uIEdMRVMyLjAuIFRoaXMgcGF0Y2ggYWRkcmVzcyB0aGlzIGJ5IG1ha2luZyB1c2UKKyAg
ICAgICAgb2YgVGV4dHVyZU1hcHBlckdMIHRvIGRyYXcgdGV4dHVyZSBjb250ZW50cyB0byB0aGUg
c3VyZmFjZSBvbiBib3RoIEdMIGFuZCBHTEVTLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFNjb3BlZFN0YXRlU2F2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkU3RhdGVTYXZlcjo6U2NvcGVkU3RhdGVTYXZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRTdGF0ZVNhdmVyOjp+U2NvcGVkU3RhdGVTYXZl
cik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgVXNlZCB0byBzYXZlIGFuZCByZXN0b3Jl
IGN1cnJlbnQgYm91bmQgQXJyYXkgQnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9y
bVN1cmZhY2U6OkdMUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZv
cm1TdXJmYWNlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3Jt
U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dM
UGxhdGZvcm1TdXJmYWNlLmg6CisgICAgICAgIChHTFBsYXRmb3JtU3VyZmFjZSk6CisKIDIwMTMt
MDItMDkgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgoKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlLmNwcAppbmRleCBkMTA5NTY3Li42NmQwMTE3IDEwMDY0NAotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuY3BwCkBAIC0xNDAsMTAgKzE0MCwxMSBAQCB1aW50MzJfdCBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmNvcHlUb0dyYXBoaWNzU3VyZmFjZSgpCiAgICAgICAgIG1fcGxhdGZvcm1T
dXJmYWNlLT5zZXRHZW9tZXRyeShJbnRSZWN0KDAsIDAsIG1fY29udGV4dC0+bV9jdXJyZW50V2lk
dGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSk7CiAgICAgfQogCisgICAgaW50IHdpZHRo
ID0gbV9jb250ZXh0LT5tX2N1cnJlbnRXaWR0aDsKKyAgICBpbnQgaGVpZ2h0ID0gbV9jb250ZXh0
LT5tX2N1cnJlbnRIZWlnaHQ7CisKICAgICBpZiAobV9jb250ZXh0LT5tX2F0dHJzLmFudGlhbGlh
cykgewogICAgICAgICBib29sIGVuYWJsZVNjaXNzb3JUZXN0ID0gZmFsc2U7Ci0gICAgICAgIGlu
dCB3aWR0aCA9IG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGg7Ci0gICAgICAgIGludCBoZWlnaHQg
PSBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodDsKICAgICAgICAgLy8gV2Ugc2hvdWxkIGNvcHkg
dGhlIGZ1bGwgYnVmZmVyLCBhbmQgbm90IHJlc3BlY3QgdGhlIGN1cnJlbnQgc2Npc3NvciBib3Vu
ZHMuCiAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBtb3JlIGVmZmljaWVudCB0byB0cmFj
ayB0aGUgc3RhdGUgb2YgdGhlIHNjaXNzb3IgdGVzdC4KICAgICAgICAgaWYgKG1fY29udGV4dC0+
aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKSB7CkBAIC0xNjEsNyAr
MTYyLDcgQEAgdWludDMyX3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb3B5VG9HcmFwaGlj
c1N1cmZhY2UoKQogICAgICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgfQogCi0gICAgbV9wbGF0Zm9ybVN1cmZhY2UtPnVwZGF0
ZUNvbnRlbnRzKG1fY29udGV4dC0+bV90ZXh0dXJlLCBtX2NvbnRleHQtPm1fYm91bmRGQk8sIG1f
Y29udGV4dC0+bV9ib3VuZFRleHR1cmUwKTsKKyAgICBtX3BsYXRmb3JtU3VyZmFjZS0+dXBkYXRl
Q29udGVudHMobV9jb250ZXh0LT5tX3RleHR1cmUsIEludFNpemUod2lkdGgsIGhlaWdodCksIG1f
Y29udGV4dC0+bV9ib3VuZEZCTywgbV9jb250ZXh0LT5tX2JvdW5kVGV4dHVyZTApOwogCiAgICAg
cmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCmluZGV4IDdmN2E1NjQuLmZkNDEwM2Mg
MTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0
Zm9ybVN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiAKLSNpZiBIQVZFKEdMWCkKKyNpZiBVU0UoR0xYKQogI2lu
Y2x1ZGUgIkdMWFN1cmZhY2UuaCIKICNlbmRpZgogCkBAIC02OCwxMiArNjgsNTAgQEAgUGFzc093
blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9y
dFN1cmZhY2UoKQogICAgIHJldHVybiBudWxscHRyOwogfQogCitjbGFzcyBTY29wZWRTdGF0ZVNh
dmVyCit7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NvcGVkU3RhdGVTYXZlcik7CisKK3B1
YmxpYzoKKyAgICBTY29wZWRTdGF0ZVNhdmVyKCkKKyAgICB7CisgICAgICAgIDo6Z2xHZXRJbnRl
Z2VydihHTF9BQ1RJVkVfVEVYVFVSRSwgJm1fYm91bmRUZXhVbml0KTsKKyAgICAgICAgOjpnbEdl
dFZlcnRleEF0dHJpYml2KDAsIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCwgJm1fYXR0
cmliRW5hYmxlZCk7CisgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdigwLCBHTF9WRVJURVhf
QVRUUklCX0FSUkFZX1NJWkUsICZtX2F0dHJpYlNpemUpOworICAgICAgICA6OmdsR2V0VmVydGV4
QXR0cmliaXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUsICZtX2F0dHJpYlN0cmlk
ZSk7CisgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdigwLCBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX1RZUEUsICZtX2F0dHJpYlR5cGUpOworICAgICAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYo
MCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVELCAmbV9hdHRyaWJOb3JtYWxpemVk
KTsKKyAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAsIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfQlVGRkVSX0JJTkRJTkcsICZtX2F0dHJpYkJ1ZmZlckJpbmRpbmcpOworICAgICAgICA6Omds
R2V0VmVydGV4QXR0cmliUG9pbnRlcnYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVS
LCAmbV9hdHRyaWJQb2ludGVyKTsKKyAgICB9CisKKyAgICB+U2NvcGVkU3RhdGVTYXZlcigpCisg
ICAgeworICAgICAgICBpZiAobV9hdHRyaWJFbmFibGVkKQorICAgICAgICAgICAgOjpnbEVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KDApOworCisgICAgICAgIDo6Z2xCaW5kQnVmZmVyKEdMX0FSUkFZ
X0JVRkZFUiwgbV9hdHRyaWJCdWZmZXJCaW5kaW5nKTsKKyAgICAgICAgOjpnbFZlcnRleEF0dHJp
YlBvaW50ZXIoMCwgbV9hdHRyaWJTaXplLCBtX2F0dHJpYlR5cGUsIG1fYXR0cmliTm9ybWFsaXpl
ZCwgbV9hdHRyaWJTdHJpZGUsIG1fYXR0cmliUG9pbnRlcik7CisgICAgICAgIDo6Z2xBY3RpdmVU
ZXh0dXJlKG1fYm91bmRUZXhVbml0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR0xpbnQgbV9i
b3VuZFRleFVuaXQ7CisgICAgR0xpbnQgbV9ib3VuZFByb2dyYW07CisgICAgR0xpbnQgbV9hdHRy
aWJFbmFibGVkOworICAgIEdMaW50IG1fYXR0cmliU2l6ZTsKKyAgICBHTGludCBtX2F0dHJpYlN0
cmlkZTsKKyAgICBHTGludCBtX2F0dHJpYlR5cGU7CisgICAgR0xpbnQgbV9hdHRyaWJOb3JtYWxp
emVkOworICAgIEdMaW50IG1fYXR0cmliQnVmZmVyQmluZGluZzsKKyAgICB2b2lkKiBtX2F0dHJp
YlBvaW50ZXI7Cit9OworCiBHTFBsYXRmb3JtU3VyZmFjZTo6R0xQbGF0Zm9ybVN1cmZhY2UoKQot
ICAgIDogbV9yZXN0b3JlTmVlZGVkKHRydWUpCi0gICAgLCBtX2Zib0lkKDApCi0gICAgLCBtX3No
YXJlZERpc3BsYXkoMCkKKyAgICA6IG1fc2hhcmVkRGlzcGxheSgwKQogICAgICwgbV9kcmF3YWJs
ZSgwKQogICAgICwgbV9idWZmZXJIYW5kbGUoMCkKKyAgICAsIG1fcmVzdG9yZU5lZWRlZCh0cnVl
KQogewogfQogCkBAIC0xMTEsMjggKzE0OSwyOCBAQCB2b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjpz
d2FwQnVmZmVycygpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHTFBsYXRmb3Jt
U3VyZmFjZTo6dXBkYXRlQ29udGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVyZSwgY29uc3QgR0x1
aW50IGJpbmRGYm9JZCwgY29uc3QgdWludDMyX3QgYmluZFRleHR1cmUpCit2b2lkIEdMUGxhdGZv
cm1TdXJmYWNlOjp1cGRhdGVDb250ZW50cyhjb25zdCB1aW50MzJfdCB0ZXh0dXJlLCBjb25zdCBJ
bnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgR0x1aW50IGJpbmRGYm9JZCwgY29uc3QgdWludDMy
X3QgYmluZFRleHR1cmUpCiB7Ci0gICAgaWYgKCFtX2Zib0lkKQotICAgICAgICBnbEdlbkZyYW1l
YnVmZmVycygxLCAmbV9mYm9JZCk7CisgICAgaWYgKCFtX3RleHR1cmVCbGl0dGVyKSB7CisgICAg
ICAgIG1fdGV4dHVyZUJsaXR0ZXIgPSBUZXh0dXJlTWFwcGVyR0w6OmNyZWF0ZSgpOworICAgICAg
ICBtX2ZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRGbGlwVGV4dHVyZTsKKyAgICB9CiAK
ICAgICBtX3Jlc3RvcmVOZWVkZWQgPSBmYWxzZTsKIAotICAgIGludCB4ID0gMDsKLSAgICBpbnQg
eSA9IDA7Ci0gICAgaW50IHdpZHRoID0gbV9yZWN0LndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9
IG1fcmVjdC5oZWlnaHQoKTsKLQotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX1JFQURfRlJBTUVC
VUZGRVIsIG1fZmJvSWQpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVy
ZSk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBHTF9D
T0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSwgMCk7Ci0gICAgZ2xCaW5k
RnJhbWVidWZmZXIoR0xfRFJBV19GUkFNRUJVRkZFUiwgMCk7Ci0gICAgLy8gVXNlIE5FQVJFU1Qg
YXMgbm8gc2NhbGUgaXMgcGVyZm9ybWVkIGR1cmluZyB0aGUgYmxpdC4KLSAgICBnbEJsaXRGcmFt
ZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHTF9DT0xP
Ul9CVUZGRVJfQklULCBHTF9ORUFSRVNUKTsKKyAgICAvLyBTYXZlIGFueSBjdXJyZW50IGJvdW5k
IHZlcnRleCBhcnJheSB0byByZXN0b3JlIGFmdGVyIHVwZGF0aW5nIHN1cmZhY2Ugd2l0aCB0ZXh0
dXJlIGNvbnRlbnQuCisgICAgLy8gVGhpcyBpcyBuZWVkZWQgYXMgVGV4dHVyZU1hcHBlckdMIGRv
ZXNuJ3QgdHJhY2sgYW5kIHJlc3RvcmUgY3VycmVudCBib3VuZCB2ZXJ0ZXggYXJyYXkuCisgICAg
U2NvcGVkU3RhdGVTYXZlciBzdGF0ZVNhdmVyOworICAgIDo6Z2xCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIDApOworICAgIDo6Z2xDb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1
ZSk7CisgICAgbV90ZXh0dXJlQmxpdHRlci0+YmVnaW5QYWludGluZygpOworICAgIG1fdGV4dHVy
ZUJsaXR0ZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIG1fZmxhZ3MsIHRleHR1cmVTaXplLCBtX3Jl
Y3QsIG1faWRlbnRpdHlNYXRyaXgsIDEuMCwgMCk7CisgICAgbV90ZXh0dXJlQmxpdHRlci0+ZW5k
UGFpbnRpbmcoKTsKKworICAgIDo6Z2xGbHVzaCgpOwogICAgIHN3YXBCdWZmZXJzKCk7Ci0gICAg
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRB
Q0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgMCwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBiaW5kVGV4dHVyZSk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIGJpbmRGYm9JZCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIGJpbmRU
ZXh0dXJlKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBiaW5kRmJv
SWQpOwogfQogCiB2b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjpzZXRHZW9tZXRyeShjb25zdCBJbnRS
ZWN0JiBuZXdSZWN0KQpAQCAtMTQzLDExICsxODEsNiBAQCB2b2lkIEdMUGxhdGZvcm1TdXJmYWNl
OjpzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQogdm9pZCBHTFBsYXRmb3JtU3Vy
ZmFjZTo6ZGVzdHJveSgpCiB7CiAgICAgbV9yZWN0ID0gSW50UmVjdCgpOwotCi0gICAgaWYgKG1f
ZmJvSWQpCi0gICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zib0lkKTsKLQotICAg
IG1fZmJvSWQgPSAwOwogfQogCiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmgKaW5kZXggZThkYjQyNS4uYWNj
ODg0NyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
TFBsYXRmb3JtU3VyZmFjZS5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAi
R0xEZWZzLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHRleG1hcC9UZXh0dXJl
TWFwcGVyR0wuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogCkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBhKSBCbGl0
cyB0ZXh0dXJlIGNvbnRlbnRzIHRvIGJhY2sgYnVmZmVyLgogICAgIC8vIGIpIENhbGxzIFN3YXAg
QnVmZmVycy4KICAgICAvLyBjKSBTZXRzIGN1cnJlbnQgRkJPIGFzIGJpbmRGYm9JZC4KLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVyZSwgY29uc3Qg
R0x1aW50IGJpbmRGYm9JZCwgY29uc3QgdWludDMyX3QgYmluZFRleHR1cmUpOworICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB1aW50MzJfdCB0ZXh0dXJlLCBjb25zdCBJbnRT
aXplJiwgY29uc3QgR0x1aW50IGJpbmRGYm9JZCwgY29uc3QgdWludDMyX3QgYmluZFRleHR1cmUp
OwogCiAgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3Qp
OwogCkBAIC03NiwxMiArNzcsMTQgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgR0xQbGF0
Zm9ybVN1cmZhY2UoKTsKLSAgICBib29sIG1fcmVzdG9yZU5lZWRlZDsKLSAgICBJbnRSZWN0IG1f
cmVjdDsKLSAgICBHTHVpbnQgbV9mYm9JZDsKICAgICBQbGF0Zm9ybURpc3BsYXkgbV9zaGFyZWRE
aXNwbGF5OwogICAgIFBsYXRmb3JtRHJhd2FibGUgbV9kcmF3YWJsZTsKICAgICBQbGF0Zm9ybUJ1
ZmZlckhhbmRsZSBtX2J1ZmZlckhhbmRsZTsKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBlckdMPiBt
X3RleHR1cmVCbGl0dGVyOworICAgIGJvb2wgbV9yZXN0b3JlTmVlZGVkIDoxOworICAgIEludFJl
Y3QgbV9yZWN0OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1faWRlbnRpdHlNYXRyaXg7Cisg
ICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBtX2ZsYWdzOwogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187483</attachid>
            <date>2013-02-10 09:19:46 -0800</date>
            <delta_ts>2013-02-11 17:00:04 -0800</delta_ts>
            <desc>patchv4</desc>
            <filename>stylefix.patch</filename>
            <type>text/plain</type>
            <size>8558</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGViMGJhM2EuLjJjODEzZjAgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEz
LTAyLTEwICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXSBbV2ViR0xdIEFkZCBzdXBwb3J0IGZvciBibGl0aW5nIHRleHR1cmUg
Y29udGVudHMgdG8gRkJPLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA2NTA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBXZWJHTCB0ZXN0cy4KKworICAgICAgICBXZSBj
dXJyZW50bHkgcmVseSBvbiBFWFRfZnJhbWVidWZmZXJfYmxpdCB0byBibGl0IHRleHR1cmUgY29u
dGVudHMgdG8gdGhlIHN1cmZhY2UuCisgICAgICAgIFRoaXMgZXh0ZW5zaW9uIGlzIG5vdCBleHBv
c2VkIG9uIEdMRVMyLjAuIFRoaXMgcGF0Y2ggYWRkcmVzcyB0aGlzIGJ5IG1ha2luZyB1c2UKKyAg
ICAgICAgb2YgVGV4dHVyZU1hcHBlckdMIHRvIGRyYXcgdGV4dHVyZSBjb250ZW50cyB0byB0aGUg
c3VyZmFjZSBvbiBib3RoIEdMIGFuZCBHTEVTLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFNjb3BlZFN0YXRlU2F2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkU3RhdGVTYXZlcjo6U2NvcGVkU3RhdGVTYXZl
cik6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRTdGF0ZVNhdmVyOjp+U2NvcGVkU3RhdGVTYXZl
cik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgVXNlZCB0byBzYXZlIGFuZCByZXN0b3Jl
IGN1cnJlbnQgYm91bmQgQXJyYXkgQnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9y
bVN1cmZhY2U6OkdMUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZv
cm1TdXJmYWNlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3Jt
U3VyZmFjZTo6ZGVzdHJveSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dM
UGxhdGZvcm1TdXJmYWNlLmg6CisgICAgICAgIChHTFBsYXRmb3JtU3VyZmFjZSk6CisKIDIwMTMt
MDItMTAgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmRl
clN0eWxlIHNob3VsZCB1c2UgY29weS1vbi13cml0ZSBpbmhlcml0YW5jZSBmb3IgTmluZVBpZWNl
SW1hZ2UuCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKaW5kZXggZDEwOTU2Ny4uNjZkMDEx
NyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcApAQCAtMTQwLDEwICsxNDAsMTEgQEAg
dWludDMyX3QgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjb3B5VG9HcmFwaGljc1N1cmZhY2Uo
KQogICAgICAgICBtX3BsYXRmb3JtU3VyZmFjZS0+c2V0R2VvbWV0cnkoSW50UmVjdCgwLCAwLCBt
X2NvbnRleHQtPm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQtPm1fY3VycmVudEhlaWdodCkpOwog
ICAgIH0KIAorICAgIGludCB3aWR0aCA9IG1fY29udGV4dC0+bV9jdXJyZW50V2lkdGg7CisgICAg
aW50IGhlaWdodCA9IG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0OworCiAgICAgaWYgKG1fY29u
dGV4dC0+bV9hdHRycy5hbnRpYWxpYXMpIHsKICAgICAgICAgYm9vbCBlbmFibGVTY2lzc29yVGVz
dCA9IGZhbHNlOwotICAgICAgICBpbnQgd2lkdGggPSBtX2NvbnRleHQtPm1fY3VycmVudFdpZHRo
OwotICAgICAgICBpbnQgaGVpZ2h0ID0gbV9jb250ZXh0LT5tX2N1cnJlbnRIZWlnaHQ7CiAgICAg
ICAgIC8vIFdlIHNob3VsZCBjb3B5IHRoZSBmdWxsIGJ1ZmZlciwgYW5kIG5vdCByZXNwZWN0IHRo
ZSBjdXJyZW50IHNjaXNzb3IgYm91bmRzLgogICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUg
bW9yZSBlZmZpY2llbnQgdG8gdHJhY2sgdGhlIHN0YXRlIG9mIHRoZSBzY2lzc29yIHRlc3QuCiAg
ICAgICAgIGlmIChtX2NvbnRleHQtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKSkgewpAQCAtMTYxLDcgKzE2Miw3IEBAIHVpbnQzMl90IEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Y29weVRvR3JhcGhpY3NTdXJmYWNlKCkKICAgICAgICAgICAgIG1fY29udGV4dC0+
ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwogICAgIH0KIAotICAgIG1f
cGxhdGZvcm1TdXJmYWNlLT51cGRhdGVDb250ZW50cyhtX2NvbnRleHQtPm1fdGV4dHVyZSwgbV9j
b250ZXh0LT5tX2JvdW5kRkJPLCBtX2NvbnRleHQtPm1fYm91bmRUZXh0dXJlMCk7CisgICAgbV9w
bGF0Zm9ybVN1cmZhY2UtPnVwZGF0ZUNvbnRlbnRzKG1fY29udGV4dC0+bV90ZXh0dXJlLCBJbnRT
aXplKHdpZHRoLCBoZWlnaHQpLCBtX2NvbnRleHQtPm1fYm91bmRGQk8sIG1fY29udGV4dC0+bV9i
b3VuZFRleHR1cmUwKTsKIAogICAgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcApp
bmRleCA3ZjdhNTY0Li4wNDJjODAxIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcApAQCAtMjgsNyAr
MjgsNyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaWYgSEFWRShH
TFgpCisjaWYgVVNFKEdMWCkKICNpbmNsdWRlICJHTFhTdXJmYWNlLmgiCiAjZW5kaWYKIApAQCAt
NjgsMTIgKzY4LDQ5IEBAIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEdMUGxhdGZvcm1T
dXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAorY2xhc3MgU2NvcGVkU3RhdGVTYXZlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Nv
cGVkU3RhdGVTYXZlcik7CisKK3B1YmxpYzoKKyAgICBTY29wZWRTdGF0ZVNhdmVyKCkKKyAgICB7
CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9BQ1RJVkVfVEVYVFVSRSwgJm1fYm91bmRUZXhV
bml0KTsKKyAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAsIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfRU5BQkxFRCwgJm1fYXR0cmliRW5hYmxlZCk7CisgICAgICAgIDo6Z2xHZXRWZXJ0ZXhB
dHRyaWJpdigwLCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkUsICZtX2F0dHJpYlNpemUpOwor
ICAgICAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9T
VFJJREUsICZtX2F0dHJpYlN0cmlkZSk7CisgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdigw
LCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZUEUsICZtX2F0dHJpYlR5cGUpOworICAgICAgICA6
OmdsR2V0VmVydGV4QXR0cmliaXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVE
LCAmbV9hdHRyaWJOb3JtYWxpemVkKTsKKyAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2KDAs
IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcsICZtX2F0dHJpYkJ1ZmZlckJp
bmRpbmcpOworICAgICAgICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoMCwgR0xfVkVSVEVY
X0FUVFJJQl9BUlJBWV9QT0lOVEVSLCAmbV9hdHRyaWJQb2ludGVyKTsKKyAgICB9CisKKyAgICB+
U2NvcGVkU3RhdGVTYXZlcigpCisgICAgeworICAgICAgICBpZiAobV9hdHRyaWJFbmFibGVkKQor
ICAgICAgICAgICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworCisgICAgICAgIDo6
Z2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgbV9hdHRyaWJCdWZmZXJCaW5kaW5nKTsKKyAg
ICAgICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIoMCwgbV9hdHRyaWJTaXplLCBtX2F0dHJpYlR5
cGUsIG1fYXR0cmliTm9ybWFsaXplZCwgbV9hdHRyaWJTdHJpZGUsIG1fYXR0cmliUG9pbnRlcik7
CisgICAgICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fYm91bmRUZXhVbml0KTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgR0xpbnQgbV9ib3VuZFRleFVuaXQ7CisgICAgR0xpbnQgbV9ib3VuZFByb2dy
YW07CisgICAgR0xpbnQgbV9hdHRyaWJFbmFibGVkOworICAgIEdMaW50IG1fYXR0cmliU2l6ZTsK
KyAgICBHTGludCBtX2F0dHJpYlN0cmlkZTsKKyAgICBHTGludCBtX2F0dHJpYlR5cGU7CisgICAg
R0xpbnQgbV9hdHRyaWJOb3JtYWxpemVkOworICAgIEdMaW50IG1fYXR0cmliQnVmZmVyQmluZGlu
ZzsKKyAgICB2b2lkKiBtX2F0dHJpYlBvaW50ZXI7Cit9OworCiBHTFBsYXRmb3JtU3VyZmFjZTo6
R0xQbGF0Zm9ybVN1cmZhY2UoKQotICAgIDogbV9yZXN0b3JlTmVlZGVkKHRydWUpCi0gICAgLCBt
X2Zib0lkKDApCi0gICAgLCBtX3NoYXJlZERpc3BsYXkoMCkKKyAgICA6IG1fc2hhcmVkRGlzcGxh
eSgwKQogICAgICwgbV9kcmF3YWJsZSgwKQogICAgICwgbV9idWZmZXJIYW5kbGUoMCkKKyAgICAs
IG1fcmVzdG9yZU5lZWRlZCh0cnVlKQogewogfQogCkBAIC0xMTEsMjggKzE0OCwyOCBAQCB2b2lk
IEdMUGxhdGZvcm1TdXJmYWNlOjpzd2FwQnVmZmVycygpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAotdm9pZCBHTFBsYXRmb3JtU3VyZmFjZTo6dXBkYXRlQ29udGVudHMoY29uc3QgdWludDMy
X3QgdGV4dHVyZSwgY29uc3QgR0x1aW50IGJpbmRGYm9JZCwgY29uc3QgdWludDMyX3QgYmluZFRl
eHR1cmUpCit2b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjp1cGRhdGVDb250ZW50cyhjb25zdCB1aW50
MzJfdCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgR0x1aW50IGJp
bmRGYm9JZCwgY29uc3QgdWludDMyX3QgYmluZFRleHR1cmUpCiB7Ci0gICAgaWYgKCFtX2Zib0lk
KQotICAgICAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmbV9mYm9JZCk7CisgICAgaWYgKCFtX3Rl
eHR1cmVCbGl0dGVyKSB7CisgICAgICAgIG1fdGV4dHVyZUJsaXR0ZXIgPSBUZXh0dXJlTWFwcGVy
R0w6OmNyZWF0ZSgpOworICAgICAgICBtX2ZsYWdzID0gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRG
bGlwVGV4dHVyZTsKKyAgICB9CiAKICAgICBtX3Jlc3RvcmVOZWVkZWQgPSBmYWxzZTsKIAotICAg
IGludCB4ID0gMDsKLSAgICBpbnQgeSA9IDA7Ci0gICAgaW50IHdpZHRoID0gbV9yZWN0LndpZHRo
KCk7Ci0gICAgaW50IGhlaWdodCA9IG1fcmVjdC5oZWlnaHQoKTsKLQotICAgIGdsQmluZEZyYW1l
YnVmZmVyKEdMX1JFQURfRlJBTUVCVUZGRVIsIG1fZmJvSWQpOwotICAgIGdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgdGV4dHVyZSk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9S
RUFEX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgdGV4
dHVyZSwgMCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRFJBV19GUkFNRUJVRkZFUiwgMCk7
Ci0gICAgLy8gVXNlIE5FQVJFU1QgYXMgbm8gc2NhbGUgaXMgcGVyZm9ybWVkIGR1cmluZyB0aGUg
YmxpdC4KLSAgICBnbEJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9ORUFSRVNUKTsKKyAgICAvLyBT
YXZlIGFueSBjdXJyZW50IGJvdW5kIHZlcnRleCBhcnJheSB0byByZXN0b3JlIGFmdGVyIHVwZGF0
aW5nIHN1cmZhY2Ugd2l0aCB0ZXh0dXJlIGNvbnRlbnQuCisgICAgLy8gVGhpcyBpcyBuZWVkZWQg
YXMgVGV4dHVyZU1hcHBlckdMIGRvZXNuJ3QgdHJhY2sgYW5kIHJlc3RvcmUgY3VycmVudCBib3Vu
ZCB2ZXJ0ZXggYXJyYXkuCisgICAgU2NvcGVkU3RhdGVTYXZlciBzdGF0ZVNhdmVyOworICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgIDo6Z2xDb2xvck1hc2so
dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgbV90ZXh0dXJlQmxpdHRlci0+YmVnaW5QYWlu
dGluZygpOworICAgIG1fdGV4dHVyZUJsaXR0ZXItPmRyYXdUZXh0dXJlKHRleHR1cmUsIG1fZmxh
Z3MsIHRleHR1cmVTaXplLCBtX3JlY3QsIG1faWRlbnRpdHlNYXRyaXgsIDEuMCwgMCk7CisgICAg
bV90ZXh0dXJlQmxpdHRlci0+ZW5kUGFpbnRpbmcoKTsKKworICAgIDo6Z2xGbHVzaCgpOwogICAg
IHN3YXBCdWZmZXJzKCk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9SRUFEX0ZSQU1F
QlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgMCwgMCk7Ci0gICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBiaW5kVGV4dHVyZSk7Ci0gICAgZ2xCaW5kRnJh
bWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGJpbmRGYm9JZCk7CisgICAgOjpnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIGJpbmRUZXh0dXJlKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdM
X0ZSQU1FQlVGRkVSLCBiaW5kRmJvSWQpOwogfQogCiB2b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjpz
ZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQpAQCAtMTQzLDExICsxODAsNiBAQCB2
b2lkIEdMUGxhdGZvcm1TdXJmYWNlOjpzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0
KQogdm9pZCBHTFBsYXRmb3JtU3VyZmFjZTo6ZGVzdHJveSgpCiB7CiAgICAgbV9yZWN0ID0gSW50
UmVjdCgpOwotCi0gICAgaWYgKG1fZmJvSWQpCi0gICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJz
KDEsICZtX2Zib0lkKTsKLQotICAgIG1fZmJvSWQgPSAwOwogfQogCiB9CmRpZmYgLS1naXQgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmgg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNl
LmgKaW5kZXggZThkYjQyNS4uYWNjODg0NyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5oCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuaApAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiR0xEZWZzLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgPHRleG1hcC9UZXh0dXJlTWFwcGVyR0wuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCkBAIC02Niw3ICs2Nyw3IEBAIHB1
YmxpYzoKICAgICAvLyBhKSBCbGl0cyB0ZXh0dXJlIGNvbnRlbnRzIHRvIGJhY2sgYnVmZmVyLgog
ICAgIC8vIGIpIENhbGxzIFN3YXAgQnVmZmVycy4KICAgICAvLyBjKSBTZXRzIGN1cnJlbnQgRkJP
IGFzIGJpbmRGYm9JZC4KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoY29uc3QgdWlu
dDMyX3QgdGV4dHVyZSwgY29uc3QgR0x1aW50IGJpbmRGYm9JZCwgY29uc3QgdWludDMyX3QgYmlu
ZFRleHR1cmUpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB1aW50MzJf
dCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiwgY29uc3QgR0x1aW50IGJpbmRGYm9JZCwgY29uc3Qg
dWludDMyX3QgYmluZFRleHR1cmUpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KGNv
bnN0IEludFJlY3QmIG5ld1JlY3QpOwogCkBAIC03NiwxMiArNzcsMTQgQEAgcHVibGljOgogCiBw
cm90ZWN0ZWQ6CiAgICAgR0xQbGF0Zm9ybVN1cmZhY2UoKTsKLSAgICBib29sIG1fcmVzdG9yZU5l
ZWRlZDsKLSAgICBJbnRSZWN0IG1fcmVjdDsKLSAgICBHTHVpbnQgbV9mYm9JZDsKICAgICBQbGF0
Zm9ybURpc3BsYXkgbV9zaGFyZWREaXNwbGF5OwogICAgIFBsYXRmb3JtRHJhd2FibGUgbV9kcmF3
YWJsZTsKICAgICBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSBtX2J1ZmZlckhhbmRsZTsKKyAgICBPd25Q
dHI8VGV4dHVyZU1hcHBlckdMPiBtX3RleHR1cmVCbGl0dGVyOworICAgIGJvb2wgbV9yZXN0b3Jl
TmVlZGVkIDoxOworICAgIEludFJlY3QgbV9yZWN0OworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1faWRlbnRpdHlNYXRyaXg7CisgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBtX2ZsYWdzOwog
fTsKIAogfQo=
</data>
<flag name="review"
          id="207310"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187728</attachid>
            <date>2013-02-11 17:00:04 -0800</date>
            <delta_ts>2013-02-22 11:07:12 -0800</delta_ts>
            <desc>patchv5</desc>
            <filename>reviewfixes.patch</filename>
            <type>text/plain</type>
            <size>13096</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDNhNzdhYTQuLjE5ZTA1YjIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEz
LTAyLTEwICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4K
KworICAgICAgICBbRUZMXSBbV2ViR0xdIEFkZCBzdXBwb3J0IGZvciBibGl0aW5nIHRleHR1cmUg
Y29udGVudHMgdG8gRkJPLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA2NTA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyBXZWJHTCB0ZXN0cy4KKworICAgICAgICBXZSBj
dXJyZW50bHkgcmVseSBvbiBFWFRfZnJhbWVidWZmZXJfYmxpdCB0byBibGl0IHRleHR1cmUgY29u
dGVudHMgdG8gdGhlIHN1cmZhY2UuCisgICAgICAgIFRoaXMgZXh0ZW5zaW9uIGlzIG5vdCBleHBv
c2VkIG9uIEdMRVMyLjAuIFRoaXMgcGF0Y2ggYWRkcmVzcyB0aGlzIGJ5IG1ha2luZyB1c2UKKyAg
ICAgICAgb2Ygc2hhZGVycyB0byBkcmF3IHRleHR1cmUgY29udGVudHMgdG8gdGhlIHN1cmZhY2Ug
b24gYm90aCBHTCBhbmQgR0xFUy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HTFBsYXRmb3JtU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEdM
U3RhdGVUcmFja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdMU3RhdGVUcmFja2VyOjpHTFN0YXRl
VHJhY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpHTFN0YXRlVHJhY2tlcjo6cHVzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpHTFN0YXRlVHJhY2tlcjo6cG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdM
U3RhdGVUcmFja2VyOjp+R0xTdGF0ZVRyYWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R0xTdGF0
ZVRyYWNrZXI6OnRvZ2dsZVN0YXRlKToKKyAgICAgICAgVXNlZCB0byBzYXZlIGFuZCByZXN0b3Jl
IEdMIHN0YXRlcy4KKworICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OkdMUGxh
dGZvcm1TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1TdXJmYWNlOjp1cGRh
dGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHTFBsYXRmb3JtU3VyZmFjZTo6c2V0R2Vv
bWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3kpOgor
ICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OmRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OmJpbmRBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHTFBsYXRmb3JtU3VyZmFjZTo6dXBkYXRlVHJhbnNmb3JtYXRpb25NYXRyaXgpOgorICAg
ICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybVN1cmZhY2U6OmluaXRpYWxpemVTaGFkZXJQcm9ncmFt
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoR0xQbGF0Zm9ybVN1cmZhY2UpOgorCiAy
MDEzLTAyLTExICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KCmRpZmYg
LS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1T
dXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0
Zm9ybVN1cmZhY2UuY3BwCmluZGV4IDdmN2E1NjQuLmRiMTIyOTcgMTAwNjQ0Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZh
Y2UuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAKLSNpZiBIQVZFKEdMWCkKKyNpZiBVU0UoR0xYKQogI2luY2x1ZGUgIkdMWFN1cmZhY2Uu
aCIKICNlbmRpZgogCkBAIC0zOSw2ICszOSw4IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworc3RhdGljIGNvbnN0IEdMZmxvYXQgdmVydGljZXNb
XSA9IHsgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSB9Oworc3RhdGljIGJvb2wgdmVydGV4QXJyYXlP
YmplY3RTdXBwb3J0ZWQgPSBmYWxzZTsKIAogUGFzc093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4g
R0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZU9mZnNjcmVlblN1cmZhY2UoKQogewpAQCAtNjgsMTMg
KzcwLDEyNSBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFj
ZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK2Ns
YXNzIEdMU3RhdGVUcmFja2VyIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFN0YXRlVHJh
Y2tlcik7CisKK3B1YmxpYzoKKyAgICBHTFN0YXRlVHJhY2tlcigpCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgcHVzaCgpCisgICAgeworICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfQUNUSVZF
X1RFWFRVUkUsICZtX2JvdW5kVGV4VW5pdCk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9D
VVJSRU5UX1BST0dSQU0sICZtX2JvdW5kUHJvZ3JhbSk7CisKKyAgICAgICAgaWYgKHZlcnRleEFy
cmF5T2JqZWN0U3VwcG9ydGVkKSB7CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgICAgICAgICAg
OjpnbEdldEludGVnZXJ2KEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUywgJm1fY3VycmVudFZl
cnRleEFycmF5QmluZGluZyk7CisjZWxzZQorICAgICAgICAgICAgOjpnbEdldEludGVnZXJ2KEdM
X1ZFUlRFWF9BUlJBWV9CSU5ESU5HLCAmbV9jdXJyZW50VmVydGV4QXJyYXlCaW5kaW5nKTsKKyNl
bmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2
KDAsIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCwgJm1fYXR0cmliRW5hYmxlZCk7Cisg
ICAgICAgICAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9TSVpFLCAmbV9hdHRyaWJTaXplKTsKKyAgICAgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJp
digwLCBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSwgJm1fYXR0cmliU3RyaWRlKTsKKyAg
ICAgICAgICAgIDo6Z2xHZXRWZXJ0ZXhBdHRyaWJpdigwLCBHTF9WRVJURVhfQVRUUklCX0FSUkFZ
X1RZUEUsICZtX2F0dHJpYlR5cGUpOworICAgICAgICAgICAgOjpnbEdldFZlcnRleEF0dHJpYml2
KDAsIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCwgJm1fYXR0cmliTm9ybWFsaXpl
ZCk7CisgICAgICAgICAgICA6OmdsR2V0VmVydGV4QXR0cmliaXYoMCwgR0xfVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9CVUZGRVJfQklORElORywgJm1fYXR0cmliQnVmZmVyQmluZGluZyk7CisgICAgICAg
ICAgICA6OmdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYoMCwgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9QT0lOVEVSLCAmbV9hdHRyaWJQb2ludGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIDo6Z2xH
ZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZtX2RlcHRoTWFzayk7CisgICAgICAgIDo6
Z2xHZXRCb29sZWFudihHTF9DT0xPUl9XUklURU1BU0ssIG1fY29sb3JNYXNrKTsKKyAgICAgICAg
bV9yZXN0b3JlQ29sb3JNYXNrID0gIW1fY29sb3JNYXNrWzBdIHx8ICFtX2NvbG9yTWFza1sxXSB8
fCAhbV9jb2xvck1hc2tbMl0gfHwgIW1fY29sb3JNYXNrWzNdOworCisgICAgICAgIGlmIChtX3Jl
c3RvcmVDb2xvck1hc2spCisgICAgICAgICAgICA6OmdsQ29sb3JNYXNrKHRydWUsIHRydWUsIHRy
dWUsIHRydWUpOworCisgICAgICAgIGlmIChtX2RlcHRoTWFzaykKKyAgICAgICAgICAgIDo6Z2xE
ZXB0aE1hc2soMCk7CisKKyAgICAgICAgbV9lbmFibGVCbGVuZCA9IHRvZ2dsZVN0YXRlKEdMX0JM
RU5EKTsKKyAgICAgICAgbV9lbmFibGVEZXB0aFRlc3QgPSB0b2dnbGVTdGF0ZShHTF9ERVBUSF9U
RVNUKTsKKyAgICAgICAgbV9lbmFibGVTdGVuY2lsVGVzdCA9IHRvZ2dsZVN0YXRlKEdMX1NURU5D
SUxfVEVTVCk7CisgICAgfQorCisgICAgdm9pZCBwb3AoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCisgICAgeworICAgICAgICBpZiAodmVydGV4QXJyYXlPYmplY3RTdXBwb3J0ZWQpCisgICAg
ICAgICAgICBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmJpbmRWZXJ0ZXhBcnJheU9FUyhtX2N1
cnJlbnRWZXJ0ZXhBcnJheUJpbmRpbmcpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlm
IChtX2F0dHJpYkVuYWJsZWQpCisgICAgICAgICAgICAgICAgOjpnbEVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KDApOworCisgICAgICAgICAgICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIs
IG1fYXR0cmliQnVmZmVyQmluZGluZyk7CisgICAgICAgICAgICA6OmdsVmVydGV4QXR0cmliUG9p
bnRlcigwLCBtX2F0dHJpYlNpemUsIG1fYXR0cmliVHlwZSwgbV9hdHRyaWJOb3JtYWxpemVkLCBt
X2F0dHJpYlN0cmlkZSwgbV9hdHRyaWJQb2ludGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIDo6
Z2xVc2VQcm9ncmFtKG1fYm91bmRQcm9ncmFtKTsKKyAgICAgICAgOjpnbEFjdGl2ZVRleHR1cmUo
bV9ib3VuZFRleFVuaXQpOworCisgICAgICAgIGlmIChtX2RlcHRoTWFzaykKKyAgICAgICAgICAg
IDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CisKKyAgICAgICAgaWYgKG1fZW5hYmxlQmxlbmQpCisg
ICAgICAgICAgICA6OmdsRW5hYmxlKEdMX0JMRU5EKTsKKworICAgICAgICBpZiAobV9lbmFibGVE
ZXB0aFRlc3QpCisgICAgICAgICAgICA6OmdsRW5hYmxlKEdMX0RFUFRIX1RFU1QpOworCisgICAg
ICAgIGlmIChtX2VuYWJsZVN0ZW5jaWxUZXN0KQorICAgICAgICAgICAgOjpnbEVuYWJsZShHTF9T
VEVOQ0lMX1RFU1QpOworCisgICAgICAgIGlmIChtX3Jlc3RvcmVDb2xvck1hc2spCisgICAgICAg
ICAgICA6OmdsQ29sb3JNYXNrKG1fY29sb3JNYXNrWzBdLCBtX2NvbG9yTWFza1sxXSwgbV9jb2xv
ck1hc2tbMl0sIG1fY29sb3JNYXNrWzNdKTsKKyAgICB9CisKKyAgICB+R0xTdGF0ZVRyYWNrZXIo
KQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCB0b2dnbGVTdGF0ZShjb25zdCBH
TGVudW0gY2FwYWJpbGl0eSkKKyAgICB7CisgICAgICAgIGJvb2wgZW5hYmxlZCA9IDo6Z2xJc0Vu
YWJsZWQoY2FwYWJpbGl0eSk7CisKKyAgICAgICAgaWYgKCFlbmFibGVkKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIDo6Z2xEaXNhYmxlKGNhcGFiaWxpdHkpOworCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEdDM0RpbnQgbV9ib3VuZFRleFVuaXQ7Cisg
ICAgR0MzRGludCBtX2JvdW5kUHJvZ3JhbTsKKyAgICBHQzNEaW50IG1fYXR0cmliRW5hYmxlZDsK
KyAgICBHQzNEaW50IG1fYXR0cmliU2l6ZTsKKyAgICBHQzNEaW50IG1fYXR0cmliU3RyaWRlOwor
ICAgIEdDM0RpbnQgbV9hdHRyaWJUeXBlOworICAgIEdDM0RpbnQgbV9hdHRyaWJOb3JtYWxpemVk
OworICAgIEdDM0RpbnQgbV9hdHRyaWJCdWZmZXJCaW5kaW5nOworICAgIEdDM0RpbnQgbV9jdXJy
ZW50VmVydGV4QXJyYXlCaW5kaW5nOworICAgIEdMYm9vbGVhbiBtX2NvbG9yTWFza1s0XTsKKyAg
ICBHTGJvb2xlYW4gbV9kZXB0aE1hc2s7CisgICAgYm9vbCBtX2VuYWJsZUJsZW5kIDoxOworICAg
IGJvb2wgbV9lbmFibGVEZXB0aFRlc3QgOjE7CisgICAgYm9vbCBtX2VuYWJsZVN0ZW5jaWxUZXN0
IDoxOworICAgIGJvb2wgbV9yZXN0b3JlQ29sb3JNYXNrIDoxOworICAgIHZvaWQqIG1fYXR0cmli
UG9pbnRlcjsKK307CisKIEdMUGxhdGZvcm1TdXJmYWNlOjpHTFBsYXRmb3JtU3VyZmFjZSgpCi0g
ICAgOiBtX3Jlc3RvcmVOZWVkZWQodHJ1ZSkKLSAgICAsIG1fZmJvSWQoMCkKLSAgICAsIG1fc2hh
cmVkRGlzcGxheSgwKQorICAgIDogbV9zaGFyZWREaXNwbGF5KDApCiAgICAgLCBtX2RyYXdhYmxl
KDApCiAgICAgLCBtX2J1ZmZlckhhbmRsZSgwKQorICAgICwgbV92Ym8oMCkKKyAgICAsIG1fdmVy
dGV4SGFuZGxlKDApCisgICAgLCBtX3Jlc3RvcmVOZWVkZWQodHJ1ZSkKIHsKKyAgICBtX2dsU3Rh
dGVUcmFja2VyID0gYWRvcHRQdHIobmV3IEdMU3RhdGVUcmFja2VyKTsKIH0KIAogR0xQbGF0Zm9y
bVN1cmZhY2U6On5HTFBsYXRmb3JtU3VyZmFjZSgpCkBAIC0xMTMsNDEgKzIyNywxMzUgQEAgdm9p
ZCBHTFBsYXRmb3JtU3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQogCiB2b2lkIEdMUGxhdGZvcm1TdXJm
YWNlOjp1cGRhdGVDb250ZW50cyhjb25zdCB1aW50MzJfdCB0ZXh0dXJlLCBjb25zdCBHTHVpbnQg
YmluZEZib0lkLCBjb25zdCB1aW50MzJfdCBiaW5kVGV4dHVyZSkKIHsKLSAgICBpZiAoIW1fZmJv
SWQpCi0gICAgICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZtX2Zib0lkKTsKLQogICAgIG1fcmVz
dG9yZU5lZWRlZCA9IGZhbHNlOwogCi0gICAgaW50IHggPSAwOwotICAgIGludCB5ID0gMDsKLSAg
ICBpbnQgd2lkdGggPSBtX3JlY3Qud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gbV9yZWN0Lmhl
aWdodCgpOwotCi0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfUkVBRF9GUkFNRUJVRkZFUiwgbV9m
Ym9JZCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKLSAgICBn
bEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX1JFQURfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFD
SE1FTlQwLCBHTF9URVhUVVJFXzJELCB0ZXh0dXJlLCAwKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZl
cihHTF9EUkFXX0ZSQU1FQlVGRkVSLCAwKTsKLSAgICAvLyBVc2UgTkVBUkVTVCBhcyBubyBzY2Fs
ZSBpcyBwZXJmb3JtZWQgZHVyaW5nIHRoZSBibGl0LgotICAgIGdsQmxpdEZyYW1lYnVmZmVyKHgs
IHksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9C
SVQsIEdMX05FQVJFU1QpOworICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKQorICAgICAgICBpbml0
aWFsaXplU2hhZGVyUHJvZ3JhbSgpOworICAgIGVsc2UKKyAgICAgICAgbV9nbFN0YXRlVHJhY2tl
ci0+cHVzaCgpOworCisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7
CisgICAgZHJhdyh0ZXh0dXJlKTsKICAgICBzd2FwQnVmZmVycygpOwotICAgIGdsRnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0xfUkVBRF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdM
X1RFWFRVUkVfMkQsIDAsIDApOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgYmlu
ZFRleHR1cmUpOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBiaW5kRmJv
SWQpOworCisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIGJpbmRUZXh0dXJlKTsK
KyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBiaW5kRmJvSWQpOworICAg
IG1fZ2xTdGF0ZVRyYWNrZXItPnBvcChtX2NvbnRleHQzRC5nZXQoKSk7CiB9CiAKIHZvaWQgR0xQ
bGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCiB7CiAg
ICAgbV9yZWN0ID0gbmV3UmVjdDsKKworICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHQzNEaW50IGJvdW5kUHJvZ3JhbTsKKyAgICA6OmdsR2V0SW50ZWdl
cnYoR0xfQ1VSUkVOVF9QUk9HUkFNLCAmYm91bmRQcm9ncmFtKTsKKyAgICA6OmdsVXNlUHJvZ3Jh
bShtX3NoYWRlclByb2dyYW0tPnByb2dyYW1JRCgpKTsKKyAgICB1cGRhdGVUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpOworICAgIDo6Z2xVc2VQcm9ncmFtKGJvdW5kUHJvZ3JhbSk7CiB9CiAKIHZvaWQg
R0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKQogewogICAgIG1fcmVjdCA9IEludFJlY3QoKTsK
IAotICAgIGlmIChtX2Zib0lkKQotICAgICAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmbV9m
Ym9JZCk7CisgICAgaWYgKG1fdmJvKQorICAgICAgICA6OmdsRGVsZXRlQnVmZmVycygxLCAmbV92
Ym8pOworCisgICAgaWYgKG1fdmVydGV4SGFuZGxlKQorICAgICAgICBtX2NvbnRleHQzRC0+Z2V0
RXh0ZW5zaW9ucygpLT5kZWxldGVWZXJ0ZXhBcnJheU9FUyhtX3ZlcnRleEhhbmRsZSk7CisKKyAg
ICBtX3NoYWRlclByb2dyYW0gPSBudWxscHRyOworICAgIG1fY29udGV4dDNEID0gbnVsbHB0cjsK
K30KKwordm9pZCBHTFBsYXRmb3JtU3VyZmFjZTo6ZHJhdyhjb25zdCB1aW50MzJfdCB0ZXh0dXJl
KQoreworICAgIDo6Z2xVc2VQcm9ncmFtKG1fc2hhZGVyUHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwor
ICAgIDo6Z2xBY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICA6OmdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisKKyAgICBpZiAobV92ZXJ0ZXhIYW5kbGUpCisgICAg
ICAgIG1fY29udGV4dDNELT5nZXRFeHRlbnNpb25zKCktPmJpbmRWZXJ0ZXhBcnJheU9FUyhtX3Zl
cnRleEhhbmRsZSk7CisgICAgZWxzZQorICAgICAgICBiaW5kQXJyYXlCdWZmZXIoKTsKKworICAg
IDo6Z2xEcmF3QXJyYXlzKEdMX1RSSUFOR0xFX0ZBTiwgMCwgNCk7CisKKyAgICBpZiAoIW1fdmVy
dGV4SGFuZGxlKQorICAgICAgICA6OmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fc2hhZGVy
UHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7Cit9CisKK3ZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6
OmJpbmRBcnJheUJ1ZmZlcigpIGNvbnN0Cit7CisgICAgOjpnbEVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KG1fc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7CisgICAgOjpnbEJpbmRCdWZm
ZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3Zibyk7CisgICAgOjpnbFZlcnRleEF0dHJpYlBvaW50ZXIo
bV9zaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQsIGZhbHNlLCAwLCAwKTsKK30KKwordm9pZCBHTFBsYXRmb3JtU3VyZmFjZTo6dXBkYXRl
VHJhbnNmb3JtYXRpb25NYXRyaXgoKQoreworICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKQorICAg
ICAgICByZXR1cm47CisKKyAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdCA9IEZsb2F0UmVjdChtX3Jl
Y3QpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4KGlkZW50aXR5TWF0
cml4KS5tdWx0aXBseShUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChGbG9hdFJlY3Qo
MCwgMCwgMSwgMSksIHRhcmdldFJlY3QpKTsKKyAgICBtX3NoYWRlclByb2dyYW0tPnNldE1hdHJp
eChtX3NoYWRlclByb2dyYW0tPm1vZGVsVmlld01hdHJpeExvY2F0aW9uKCksIG1hdHJpeCk7CisK
KyAgICAvLyBUYWtlbiBmcm9tIFRleHR1cmVNYXBwZXJHTC4KKyAgICBjb25zdCBmbG9hdCBuZWFy
VmFsdWUgPSA5OTk5OTk5OworICAgIGNvbnN0IGZsb2F0IGZhclZhbHVlID0gLTk5OTk5OworCisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeCA9IFRyYW5zZm9ybWF0aW9u
TWF0cml4KDIuMCAvIGZsb2F0KG1fcmVjdC53aWR0aCgpKSwgMCwgMCwgMCwKKyAgICAgICAgMCwg
KC0yLjApIC8gZmxvYXQobV9yZWN0LmhlaWdodCgpKSwgMCwgMCwKKyAgICAgICAgMCwgMCwgLTIu
ZiAvIChmYXJWYWx1ZSAtIG5lYXJWYWx1ZSksIDAsCisgICAgICAgIC0xLCAxLCAtKGZhclZhbHVl
ICsgbmVhclZhbHVlKSAvIChmYXJWYWx1ZSAtIG5lYXJWYWx1ZSksIDEpOworCisgICAgbV9zaGFk
ZXJQcm9ncmFtLT5zZXRNYXRyaXgobV9zaGFkZXJQcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9j
YXRpb24oKSwgcHJvamVjdGlvbk1hdHJpeCk7Cit9CisKK3ZvaWQgR0xQbGF0Zm9ybVN1cmZhY2U6
OmluaXRpYWxpemVTaGFkZXJQcm9ncmFtKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dDNEKQorICAg
ICAgICBtX2NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGb3JDdXJyZW50R0xD
b250ZXh0KCk7CisKKyAgICB2ZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCA9IG1fY29udGV4dDNE
LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIp
OworICAgIG1fZ2xTdGF0ZVRyYWNrZXItPnB1c2goKTsKKworICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
VGV4dHVyZTsKKyAgICBtX3NoYWRlclByb2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bTo6Y3JlYXRlKG1fY29udGV4dDNELCBvcHRpb25zKTsKKyAgICA6OmdsVXNlUHJvZ3JhbShtX3No
YWRlclByb2dyYW0tPnByb2dyYW1JRCgpKTsKKyAgICA6OmdsVW5pZm9ybTFpKG1fc2hhZGVyUHJv
Z3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDApOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgOjpnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9ORUFS
RVNUKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGZsaXBUcmFuc2Zvcm07CisgICAgZmxpcFRyYW5zZm9ybS5mbGlwWSgpOwor
ICAgIGZsaXBUcmFuc2Zvcm0udHJhbnNsYXRlKDAsIC0xKTsKKyAgICBtX3NoYWRlclByb2dyYW0t
PnNldE1hdHJpeChtX3NoYWRlclByb2dyYW0tPnRleHR1cmVTcGFjZU1hdHJpeExvY2F0aW9uKCks
IGZsaXBUcmFuc2Zvcm0pOworICAgIDo6Z2xVbmlmb3JtMWYobV9zaGFkZXJQcm9ncmFtLT5vcGFj
aXR5TG9jYXRpb24oKSwgMS4wKTsKKworICAgIGlmICghbV92Ym8pIHsKKyAgICAgICAgOjpnbEdl
bkJ1ZmZlcnMoMSwgJm1fdmJvKTsKKyAgICAgICAgOjpnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVG
RkVSLCBtX3Zibyk7CisgICAgICAgIDo6Z2xCdWZmZXJEYXRhKEdMX0FSUkFZX0JVRkZFUiwgc2l6
ZW9mKEdDM0RmbG9hdCkgKiA4LCB2ZXJ0aWNlcywgR0xfU1RBVElDX0RSQVcpOworICAgIH0KKwor
ICAgIC8vIENyZWF0ZSBhbmQgc2V0LXVwIHZlcnRleCBhcnJheSBvYmplY3QuCisgICAgaWYgKHZl
cnRleEFycmF5T2JqZWN0U3VwcG9ydGVkKSB7CisgICAgICAgIG1fdmVydGV4SGFuZGxlID0gbV9j
b250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS0+Y3JlYXRlVmVydGV4QXJyYXlPRVMoKTsKKworICAg
ICAgICBpZiAobV92ZXJ0ZXhIYW5kbGUpIHsKKyAgICAgICAgICAgIG1fY29udGV4dDNELT5nZXRF
eHRlbnNpb25zKCktPmJpbmRWZXJ0ZXhBcnJheU9FUyhtX3ZlcnRleEhhbmRsZSk7CisgICAgICAg
ICAgICBiaW5kQXJyYXlCdWZmZXIoKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIG1fZmJvSWQg
PSAwOworICAgIHVwZGF0ZVRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZh
Y2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1
cmZhY2UuaAppbmRleCBlOGRiNDI1Li4zNjcyOThmIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmgKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5oCkBAIC0z
MCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJHTERlZnMuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSA8dGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApAQCAt
MzcsNiArMzgsOCBAQAogLy8gc3BlY2lmaWMgbWFuYWdlbWVudC4KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgR0xTdGF0ZVRyYWNrZXI7CisKIGNsYXNzIEdMUGxhdGZvcm1TdXJmYWNlIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHTFBsYXRmb3JtU3VyZmFjZSk7CiAKQEAgLTc2LDEy
ICs3OSwyMSBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBHTFBsYXRmb3JtU3VyZmFjZSgp
OwotICAgIGJvb2wgbV9yZXN0b3JlTmVlZGVkOwotICAgIEludFJlY3QgbV9yZWN0OwotICAgIEdM
dWludCBtX2Zib0lkOworICAgIHZvaWQgdXBkYXRlVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsKKyAg
ICB2b2lkIGJpbmRBcnJheUJ1ZmZlcigpIGNvbnN0OworICAgIHZvaWQgaW5pdGlhbGl6ZVNoYWRl
clByb2dyYW0oKTsKKyAgICB2b2lkIGRyYXcoY29uc3QgdWludDMyX3QgdGV4dHVyZSk7CisKICAg
ICBQbGF0Zm9ybURpc3BsYXkgbV9zaGFyZWREaXNwbGF5OwogICAgIFBsYXRmb3JtRHJhd2FibGUg
bV9kcmF3YWJsZTsKICAgICBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSBtX2J1ZmZlckhhbmRsZTsKKyAg
ICBPd25QdHI8R0xTdGF0ZVRyYWNrZXI+IG1fZ2xTdGF0ZVRyYWNrZXI7CisgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQzRDsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0+IG1fc2hhZGVyUHJvZ3JhbTsKKyAgICBJbnRSZWN0IG1fcmVjdDsKKyAgICBQ
bGF0Zm9ybTNET2JqZWN0IG1fdmJvOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV92ZXJ0ZXhIYW5k
bGU7CisgICAgYm9vbCBtX3Jlc3RvcmVOZWVkZWQgOjE7CiB9OwogCiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>