<?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>78559</bug_id>
          
          <creation_ts>2012-02-13 17:51:28 -0800</creation_ts>
          <short_desc>[EFL][DRT] Implement TextInputController.</short_desc>
          <delta_ts>2012-05-08 22:55:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</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>
          
          <blocked>84710</blocked>
    
    <blocked>85122</blocked>
    
    <blocked>85123</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Kangil Han">kangil.han</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>morrita</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>555813</commentid>
    <comment_count>0</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-02-13 17:51:28 -0800</bug_when>
    <thetext>Add initial implementation for TextInputController on DRT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555816</commentid>
    <comment_count>1</comment_count>
      <attachid>126877</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-02-13 17:54:25 -0800</bug_when>
    <thetext>Created attachment 126877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560632</commentid>
    <comment_count>2</comment_count>
      <attachid>126877</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-20 21:28:27 -0800</bug_when>
    <thetext>Comment on attachment 126877
Patch

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

&gt; Tools/DumpRenderTree/efl/TextInputController.cpp:14
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of

I guess you don&apos;t need to claim anything about Apple ;-)

&gt; Tools/DumpRenderTree/efl/TextInputController.cpp:40
&gt; +static JSValueRef setMarkedTextCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)

Typically we don&apos;t give argument names which are not used in the function.
Some compiler actually complain about that.

&gt; Tools/DumpRenderTree/efl/TextInputController.h:14
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of

Ditto for license.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560727</commentid>
    <comment_count>3</comment_count>
      <attachid>127931</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-02-21 00:46:17 -0800</bug_when>
    <thetext>Created attachment 127931
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560728</commentid>
    <comment_count>4</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-02-21 00:48:09 -0800</bug_when>
    <thetext>Done and thank you for reviewing my patch! :)

(In reply to comment #2)
&gt; (From update of attachment 126877 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=126877&amp;action=review
&gt; 
&gt; &gt; Tools/DumpRenderTree/efl/TextInputController.cpp:14
&gt; &gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; 
&gt; I guess you don&apos;t need to claim anything about Apple ;-)
&gt; 
&gt; &gt; Tools/DumpRenderTree/efl/TextInputController.cpp:40
&gt; &gt; +static JSValueRef setMarkedTextCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
&gt; 
&gt; Typically we don&apos;t give argument names which are not used in the function.
&gt; Some compiler actually complain about that.
&gt; 
&gt; &gt; Tools/DumpRenderTree/efl/TextInputController.h:14
&gt; &gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; 
&gt; Ditto for license.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569393</commentid>
    <comment_count>5</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-03-02 00:55:22 -0800</bug_when>
    <thetext>I think we can replace TextInputController with internal API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570322</commentid>
    <comment_count>6</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-03-04 17:50:11 -0800</bug_when>
    <thetext>Hi Kangil, thanks for caring this!

(In reply to comment #5)
&gt; I think we can replace TextInputController with internal API.
It depends. Some API is good fit for internals. But many of them needs its own API.
These APIs are for emulating user input, especially IME. You can think this more like MockClient
than Internals.

I think having this implementation inside WebCoreTestSupport could be a great idea.
But it should be different object from Internals.

Anyway, thanks again to consider better design over existing one.
TextInputController is an old resident on DRT world which needs some improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587565</commentid>
    <comment_count>7</comment_count>
      <attachid>133758</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-03-26 03:02:03 -0700</bug_when>
    <thetext>Created attachment 133758
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587568</commentid>
    <comment_count>8</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-03-26 03:05:57 -0700</bug_when>
    <thetext>This patch has excluded functions used in port specific test cases at this stage. IMHO, I shouldn&apos;t touch webview related implementations for port specific purposes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588549</commentid>
    <comment_count>9</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-03-26 21:37:51 -0700</bug_when>
    <thetext>It looks my last explanation was confused. I&apos;m sorry about that.

Now, I cannot understand the purpose of this change.
Whole purpose of TextInputController is to 

- inspect platform&apos;s text input API state. For mac, it&apos;s NSTextInput, and to
- emulate user text input against the platform&apos;s text input API. It&apos;s also NSTextInput on mac.

Following this pattern, what you need is to invoke EFL&apos;s text input interface through TextInputController
And this is required only if EFL port is going to implement EFL&apos;s (or some other underlying platform&apos;s)
text input protocol.

If EFL isn&apos;t going to support any text input protocol, it makes little sense to support TextInputController
since it is designed to test that feature. You can just skip tests which exercise text input functionality.

I know both GTK and Qt implement TextInputController in a similar way.
But in my opinion, it&apos;s kinda autotelic. 
Having yet another fake implementation just for mocking TextInputController
will be a pure waste.

I think you can discuss, say, GTK fork and move their TextInputController with this 
WebCoreTestSupport version. Then you can employ it for EFL.
By doing it,
- we can avoid code duplication at least.
- we can eliminate manual JS binding code.
This will help both GTK and EFL port.

Als, the class name would be MockTextInputController or something.
It cannot be common for the reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588553</commentid>
    <comment_count>10</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-03-26 21:53:30 -0700</bug_when>
    <thetext>Your point makes sense.
I will discard this and make a patch for EFL only.

(In reply to comment #9)
&gt; It looks my last explanation was confused. I&apos;m sorry about that.
&gt; 
&gt; Now, I cannot understand the purpose of this change.
&gt; Whole purpose of TextInputController is to 
&gt; 
&gt; - inspect platform&apos;s text input API state. For mac, it&apos;s NSTextInput, and to
&gt; - emulate user text input against the platform&apos;s text input API. It&apos;s also NSTextInput on mac.
&gt; 
&gt; Following this pattern, what you need is to invoke EFL&apos;s text input interface through TextInputController
&gt; And this is required only if EFL port is going to implement EFL&apos;s (or some other underlying platform&apos;s)
&gt; text input protocol.
&gt; 
&gt; If EFL isn&apos;t going to support any text input protocol, it makes little sense to support TextInputController
&gt; since it is designed to test that feature. You can just skip tests which exercise text input functionality.
&gt; 
&gt; I know both GTK and Qt implement TextInputController in a similar way.
&gt; But in my opinion, it&apos;s kinda autotelic. 
&gt; Having yet another fake implementation just for mocking TextInputController
&gt; will be a pure waste.
&gt; 
&gt; I think you can discuss, say, GTK fork and move their TextInputController with this 
&gt; WebCoreTestSupport version. Then you can employ it for EFL.
&gt; By doing it,
&gt; - we can avoid code duplication at least.
&gt; - we can eliminate manual JS binding code.
&gt; This will help both GTK and EFL port.
&gt; 
&gt; Als, the class name would be MockTextInputController or something.
&gt; It cannot be common for the reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612141</commentid>
    <comment_count>11</comment_count>
      <attachid>139335</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-04-27 21:33:59 -0700</bug_when>
    <thetext>Created attachment 139335
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617238</commentid>
    <comment_count>12</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-05-06 17:37:00 -0700</bug_when>
    <thetext>Dear Gyuyoung and rakuco,
Could I please get informal review on this patch?
Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617245</commentid>
    <comment_count>13</comment_count>
      <attachid>139335</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-05-06 18:05:37 -0700</bug_when>
    <thetext>Comment on attachment 139335
patch

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

Basically, this patch move GTK&apos;s implementation to EFL port. So, it seems to me there is no critical issue.

&gt; LayoutTests/ChangeLog:8
&gt; +        Implemented textInputController for EFL DRT.

I think this is unsufficient description for this patch.

&gt; Source/WebKit/efl/ChangeLog:8
&gt; +        Implemented textInputController for EFL DRT.

ditto.

&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:643
&gt; +{

Is it better to initialize start and length like gtk port ? I think we need to initialize start and length.

http://trac.webkit.org/browser/trunk/Source/WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp#L478

&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:670
&gt; +    }

Nit : Add an empty line to here.

&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:698
&gt; +{

Add a condition to check if start and length variables are 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617250</commentid>
    <comment_count>14</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-05-06 18:13:04 -0700</bug_when>
    <thetext>Thanks for the review Gyuyoung!
I will be back with a new patch. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617253</commentid>
    <comment_count>15</comment_count>
      <attachid>139335</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-05-06 18:30:46 -0700</bug_when>
    <thetext>Comment on attachment 139335
patch

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

I can&apos;t help much here because text editing is not an area I&apos;m familiar with, and most of the patch seems to be common, boilerplate code. It&apos;d be good if some reviewer who works on editing stuff could take a look at this before landing.

&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:623
&gt; +    String compositionString = String::fromUTF8(text);

Could be const.

&gt; Source/WebKit/efl/WebCoreSupport/DumpRenderTreeSupportEfl.cpp:629
&gt; +bool DumpRenderTreeSupportEfl::hasComposition(Evas_Object* ewkView)

ewkView, page and editor can be const in this method.

&gt; Tools/DumpRenderTree/efl/TextInputController.h:28
&gt; +#ifndef TextInputController_h

Nit: we generally separate the copyright header from the ifdef guards with an empty line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617304</commentid>
    <comment_count>16</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-05-06 19:39:07 -0700</bug_when>
    <thetext>Thanks for the review rakuco!
I will also figure it out soon. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617306</commentid>
    <comment_count>17</comment_count>
      <attachid>140457</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-05-06 19:39:53 -0700</bug_when>
    <thetext>Created attachment 140457
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617320</commentid>
    <comment_count>18</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-05-06 20:10:16 -0700</bug_when>
    <thetext>Need to rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617327</commentid>
    <comment_count>19</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-05-06 20:14:04 -0700</bug_when>
    <thetext>Working. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617373</commentid>
    <comment_count>20</comment_count>
      <attachid>140470</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-05-06 21:44:09 -0700</bug_when>
    <thetext>Created attachment 140470
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617398</commentid>
    <comment_count>21</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-05-06 22:41:50 -0700</bug_when>
    <thetext>Rebase and build done. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617455</commentid>
    <comment_count>22</comment_count>
      <attachid>140470</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-05-07 01:34:05 -0700</bug_when>
    <thetext>Comment on attachment 140470
patch

I&apos;m also not expert in this area. But, this patch copies GTK&apos;s implementation to EFL port. It looks this patch doesn&apos;t have critical problems and nits. So, looks fine to me for now. I think editor review or GTK reviewer can review this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618348</commentid>
    <comment_count>23</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-05-07 23:25:01 -0700</bug_when>
    <thetext>mrobinson : Could I please get your formal review on this patch? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618649</commentid>
    <comment_count>24</comment_count>
      <attachid>140470</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-08 11:20:06 -0700</bug_when>
    <thetext>Comment on attachment 140470
patch

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

&gt; LayoutTests/ChangeLog:4631
&gt; +2012-04-27  Kangil Han  &lt;kangil.han@samsung.com&gt;

The ChangeLog didn&apos;t merge properly here.

&gt; Source/WebKit/efl/ChangeLog:173
&gt; +2012-04-27  Kangil Han  &lt;kangil.han@samsung.com&gt;

Ditto.

&gt; Tools/ChangeLog:1658
&gt; +2012-04-27  Kangil Han  &lt;kangil.han@samsung.com&gt;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618952</commentid>
    <comment_count>25</comment_count>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-05-08 16:43:43 -0700</bug_when>
    <thetext>gyuyoung : Could you please help me out to land this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618972</commentid>
    <comment_count>26</comment_count>
      <attachid>140819</attachid>
    <who name="Kangil Han">kangil.han</who>
    <bug_when>2012-05-08 16:58:03 -0700</bug_when>
    <thetext>Created attachment 140819
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619062</commentid>
    <comment_count>27</comment_count>
      <attachid>140819</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-08 18:31:58 -0700</bug_when>
    <thetext>Comment on attachment 140819
Patch

Clearing flags on attachment: 140819

Committed r116475: &lt;http://trac.webkit.org/changeset/116475&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619063</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-08 18:32:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126877</attachid>
            <date>2012-02-13 17:54:25 -0800</date>
            <delta_ts>2012-02-21 00:46:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78559-20120214105424.patch</filename>
            <type>text/plain</type>
            <size>11485</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NTI5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjBlMmNlODFlNmUwYjFjM2VjYTliYzYxOTY2NWYzOWJl
ZmNkOWI4Ni4uYTNmNmVjY2UwMGJlYTM1YzgxOGI3MTBmZWUwMzgwMGZmYmJjNTNmNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI5
IEBACiAyMDEyLTAyLTEyICBLYW5naWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5nLmNvbT4KIAor
ICAgICAgICBbRUZMXVtEUlRdIEFkZCBpbml0aWFsIGltcGxlbWVudGF0aW9uIGZvciBUZXh0SW5w
dXRDb250cm9sbGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg1NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDcmVhdGUgOCBkdW1teSBmdW5jdGlvbnMgb2YgVGV4dElucHV0Q29udHJvbGxlciBvbiBE
UlQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcDoKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbldpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2VmbC9UZXh0SW5wdXRDb250cm9sbGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChzZXRNYXJrZWRUZXh0Q2FsbGJhY2spOgorICAgICAgICAoaGFzTWFya2VkVGV4dENh
bGxiYWNrKToKKyAgICAgICAgKG1hcmtlZFJhbmdlQ2FsbGJhY2spOgorICAgICAgICAoaW5zZXJ0
VGV4dENhbGxiYWNrKToKKyAgICAgICAgKHVubWFya1RleHRDYWxsYmFjayk6CisgICAgICAgIChm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKToKKyAgICAgICAgKHNlbGVjdGVkUmFu
Z2VDYWxsYmFjayk6CisgICAgICAgIChkb0NvbW1hbmRDYWxsYmFjayk6CisgICAgICAgIChtYWtl
VGV4dElucHV0Q29udHJvbGxlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJ
bnB1dENvbnRyb2xsZXIuaDogQWRkZWQuCisKKzIwMTItMDItMTIgIEthbmdpbCBIYW4gIDxrYW5n
aWwuaGFuQHNhbXN1bmcuY29tPgorCiAgICAgICAgIFtFRkxdW0RSVF0gSW1wbGVtZW50IHpvb21Q
YWdle0luLE91dH0gYW5kIHRleHRab29te0luLE91dH0gZXZlbnRzLgogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgwOTEKIApkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZWZsL0NNYWtlTGlzdHMudHh0CmluZGV4IDA5NzI2ZjYyODA0OWU5MzczMTAyNmNiNmVkMDQ4
OWMwZTgwZDZiYzcuLmRkZjc0ZmZiYWNiZmVmZjIxYzBmZjg0MmZjYzNiZDE5NmQ2NjcwNDMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKQEAgLTE2LDYgKzE2LDcgQEAg
U0VUKER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRy
ZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1w
UmVuZGVyVHJlZS9lZmwvUGl4ZWxEdW1wU3VwcG9ydEVmbC5jcHAKICAgICAke1RPT0xTX0RJUn0v
RHVtcFJlbmRlclRyZWUvZWZsL1dvcmtRdWV1ZUl0ZW1FZmwuY3BwCisgICAgJHtUT09MU19ESVJ9
L0R1bXBSZW5kZXJUcmVlL2VmbC9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAogKQogCiBTRVQoSW1h
Z2VEaWZmX1NPVVJDRVMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1w
UmVuZGVyVHJlZUNocm9tZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRl
clRyZWVDaHJvbWUuY3BwCmluZGV4IGNlN2EwMGQ5ZjhiNWQ5ODdkZDkxN2Q3MmQyNWViNTU3OGY1
YjFiYTEuLjUzODExMDU1YmM0NWI5MjNmOTY5MGU5MDBmNWE2NDc3N2U2Y2M5YjggMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcApAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkxheW91
dFRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJUZXh0SW5wdXRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlLmgiCiAjaW5jbHVkZSAi
ZXdrX3ByaXZhdGUuaCIgLy8gRklYTUU6IGNyZWF0ZSBzb21lIFdlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlLmNwcCBpbnN0ZWFkCkBAIC0yMTAsNiArMjExLDEwIEBAIHZvaWQgRHVtcFJlbmRl
clRyZWVDaHJvbWU6Om9uV2luZG93T2JqZWN0Q2xlYXJlZCh2b2lkKiB1c2VyRGF0YSwgRXZhc19P
YmplY3QqLCB2CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyTmFtZS5nZXQoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VFdmVudFNlbmRlcihvYmplY3RDbGVhcmVkSW5m
by0+Y29udGV4dCwgIUR1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZnJhbWVQYXJlbnQob2JqZWN0
Q2xlYXJlZEluZm8tPmZyYW1lKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCAwKTsK
KworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0ZXh0SW5wdXRDb250cm9sbGVyTmFtZShK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidGV4dElucHV0Q29udHJvbGxlciIpKTsKKyAg
ICBKU09iamVjdFNldFByb3BlcnR5KG9iamVjdENsZWFyZWRJbmZvLT5jb250ZXh0LCBvYmplY3RD
bGVhcmVkSW5mby0+d2luZG93T2JqZWN0LCB0ZXh0SW5wdXRDb250cm9sbGVyTmFtZS5nZXQoKSwK
KyAgICAgICAgbWFrZVRleHRJbnB1dENvbnRyb2xsZXIob2JqZWN0Q2xlYXJlZEluZm8tPmNvbnRl
eHQpLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlLCAwKTsKIH0KIAogdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25Mb2FkU3Rh
cnRlZCh2b2lkKiwgRXZhc19PYmplY3QqIHZpZXcsIHZvaWQqKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZWZsL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkOTM4NThm
Y2FhYTIwMDdmNWJkMDM5MTM2NGEzNzIzMGQ4ZmYzMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwx
MjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgi
CisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVDaHJvbWUuaCIKKyNpbmNsdWRlICJXZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU09iamVjdFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKworc3RhdGljIEpTVmFs
dWVSZWYgc2V0TWFya2VkVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50YXRpb24gaXMgbmVlZGVkLgorICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgaGFz
TWFya2VkVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50YXRpb24gaXMgbmVlZGVkLgorICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgbWFya2VkUmFuZ2VD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudGF0aW9uIGlzIG5lZWRlZC4KKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGluc2VydFRleHRDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudGF0aW9u
IGlzIG5lZWRlZC4KKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9
CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHVubWFya1RleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudGF0aW9uIGlzIG5lZWRlZC4K
KyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBK
U1ZhbHVlUmVmIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnRhdGlvbiBpcyBuZWVk
ZWQuCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0
aWMgSlNWYWx1ZVJlZiBzZWxlY3RlZFJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnRhdGlvbiBpcyBuZWVkZWQuCisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1
ZVJlZiBkb0NvbW1hbmRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7Cisg
ICAgLy8gRklYTUU6IEltcGxlbWVudGF0aW9uIGlzIG5lZWRlZC4KKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0
YXRpY0Z1bmN0aW9uc1tdID0geworICAgIHsgInNldE1hcmtlZFRleHQiLCBzZXRNYXJrZWRUZXh0
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJoYXNNYXJrZWRUZXh0IiwgaGFzTWFya2VkVGV4dENh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCisgICAgeyAibWFya2VkUmFuZ2UiLCBtYXJrZWRSYW5nZUNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgeyAiaW5zZXJ0VGV4dCIsIGluc2VydFRleHRDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAorICAgIHsgInVubWFya1RleHQiLCB1bm1hcmtUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7
ICJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSIsIGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdl
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJzZWxlY3RlZFJhbmdlIiwgc2VsZWN0ZWRSYW5nZUNh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCisgICAgeyAiZG9Db21tYW5kIiwgZG9Db21tYW5kQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICB7IDAsIDAsIDAgfQorfTsKKworc3RhdGljIEpTQ2xhc3NSZWYgZ2V0Q2xhc3Mo
SlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgc3RhdGljIEpTQ2xhc3NSZWYgdGV4dElucHV0
Q29udHJvbGxlckNsYXNzID0gMDsKKworICAgIGlmICghdGV4dElucHV0Q29udHJvbGxlckNsYXNz
KSB7CisgICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9IHsKKyAgICAg
ICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICAgICAgICBjbGFzc0RlZmluaXRpb24uc3RhdGljRnVu
Y3Rpb25zID0gc3RhdGljRnVuY3Rpb25zOworCisgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXJD
bGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7CisgICAgfQorCisgICAgcmV0
dXJuIHRleHRJbnB1dENvbnRyb2xsZXJDbGFzczsKK30KKworSlNPYmplY3RSZWYgbWFrZVRleHRJ
bnB1dENvbnRyb2xsZXIoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIEpTT2Jq
ZWN0TWFrZShjb250ZXh0LCBnZXRDbGFzcyhjb250ZXh0KSwgMCk7Cit9CisKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9UZXh0SW5wdXRDb250cm9sbGVyLmggYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjMjRm
MTE1MjcxNTZmNjBiNWI4YWFjZjc1NjI1MjM5YTQ1OTAxNWEKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5oCkBAIC0wLDAgKzEs
MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0SW5wdXRDb250cm9sbGVy
X2gKKyNkZWZpbmUgVGV4dElucHV0Q29udHJvbGxlcl9oCisKK3R5cGVkZWYgY29uc3Qgc3RydWN0
IE9wYXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNW
YWx1ZSogSlNPYmplY3RSZWY7CisKK0pTT2JqZWN0UmVmIG1ha2VUZXh0SW5wdXRDb250cm9sbGVy
KEpTQ29udGV4dFJlZik7CisKKyNlbmRpZgorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127931</attachid>
            <date>2012-02-21 00:46:17 -0800</date>
            <delta_ts>2012-03-02 00:54:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78559-20120221174615.patch</filename>
            <type>text/plain</type>
            <size>10526</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NTI5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYjBlMmNlODFlNmUwYjFjM2VjYTliYzYxOTY2NWYzOWJl
ZmNkOWI4Ni4uYTNmNmVjY2UwMGJlYTM1YzgxOGI3MTBmZWUwMzgwMGZmYmJjNTNmNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI5
IEBACiAyMDEyLTAyLTEyICBLYW5naWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5nLmNvbT4KIAor
ICAgICAgICBbRUZMXVtEUlRdIEFkZCBpbml0aWFsIGltcGxlbWVudGF0aW9uIGZvciBUZXh0SW5w
dXRDb250cm9sbGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Nzg1NTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDcmVhdGUgOCBkdW1teSBmdW5jdGlvbnMgb2YgVGV4dElucHV0Q29udHJvbGxlciBvbiBE
UlQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQ6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcDoKKyAgICAg
ICAgKER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbldpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2VmbC9UZXh0SW5wdXRDb250cm9sbGVyLmNwcDogQWRkZWQuCisg
ICAgICAgIChzZXRNYXJrZWRUZXh0Q2FsbGJhY2spOgorICAgICAgICAoaGFzTWFya2VkVGV4dENh
bGxiYWNrKToKKyAgICAgICAgKG1hcmtlZFJhbmdlQ2FsbGJhY2spOgorICAgICAgICAoaW5zZXJ0
VGV4dENhbGxiYWNrKToKKyAgICAgICAgKHVubWFya1RleHRDYWxsYmFjayk6CisgICAgICAgIChm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKToKKyAgICAgICAgKHNlbGVjdGVkUmFu
Z2VDYWxsYmFjayk6CisgICAgICAgIChkb0NvbW1hbmRDYWxsYmFjayk6CisgICAgICAgIChtYWtl
VGV4dElucHV0Q29udHJvbGxlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJ
bnB1dENvbnRyb2xsZXIuaDogQWRkZWQuCisKKzIwMTItMDItMTIgIEthbmdpbCBIYW4gIDxrYW5n
aWwuaGFuQHNhbXN1bmcuY29tPgorCiAgICAgICAgIFtFRkxdW0RSVF0gSW1wbGVtZW50IHpvb21Q
YWdle0luLE91dH0gYW5kIHRleHRab29te0luLE91dH0gZXZlbnRzLgogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgwOTEKIApkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZWZsL0NNYWtlTGlzdHMudHh0CmluZGV4IDA5NzI2ZjYyODA0OWU5MzczMTAyNmNiNmVkMDQ4
OWMwZTgwZDZiYzcuLmQxNWFjYjYwNjk1OGJiMzNlZDVhNzQ4ZTRiYmZmMWNjZDU1NDI5NGYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKQEAgLTE1LDYgKzE1LDcgQEAg
U0VUKER1bXBSZW5kZXJUcmVlX1NPVVJDRVMKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRy
ZWUvZWZsL0pTU3RyaW5nVXRpbHMuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVl
L2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJl
bmRlclRyZWUvZWZsL1BpeGVsRHVtcFN1cHBvcnRFZmwuY3BwCisgICAgJHtUT09MU19ESVJ9L0R1
bXBSZW5kZXJUcmVlL2VmbC9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAogICAgICR7VE9PTFNfRElS
fS9EdW1wUmVuZGVyVHJlZS9lZmwvV29ya1F1ZXVlSXRlbUVmbC5jcHAKICkKIApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAKaW5kZXggY2U3
YTAwZDlmOGI1ZDk4N2RkOTE3ZDcyZDI1ZWI1NTc4ZjViMWJhMS4uNTM4MTEwNTViYzQ1YjkyM2Y5
NjkwZTkwMGY1YTY0Nzc3ZTZjYzliOCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
ZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9l
ZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
R0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCIKICNp
bmNsdWRlICJXb3JrUXVldWUuaCIKICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIiAvLyBGSVhNRTog
Y3JlYXRlIHNvbWUgV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWUuY3BwIGluc3RlYWQKQEAg
LTIxMCw2ICsyMTEsMTAgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XaW5kb3dPYmpl
Y3RDbGVhcmVkKHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCosIHYKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRyb2xsZXJOYW1lLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
bWFrZUV2ZW50U2VuZGVyKG9iamVjdENsZWFyZWRJbmZvLT5jb250ZXh0LCAhRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjpmcmFtZVBhcmVudChvYmplY3RDbGVhcmVkSW5mby0+ZnJhbWUpKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIDApOworCisgICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IHRleHRJbnB1dENvbnRyb2xsZXJOYW1lKEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJ0ZXh0SW5wdXRDb250cm9sbGVyIikpOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHkob2Jq
ZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQsIG9iamVjdENsZWFyZWRJbmZvLT53aW5kb3dPYmplY3Qs
IHRleHRJbnB1dENvbnRyb2xsZXJOYW1lLmdldCgpLAorICAgICAgICBtYWtlVGV4dElucHV0Q29u
dHJvbGxlcihvYmplY3RDbGVhcmVkSW5mby0+Y29udGV4dCksIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIDApOwogfQogCiB2b2lk
IER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkxvYWRTdGFydGVkKHZvaWQqLCBFdmFzX09iamVjdCog
dmlldywgdm9pZCopCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElu
cHV0Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29u
dHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk0Mjg1NmQ2ZTU2OGU5NDhlYmNkMDc4ZmZkYjJmZDFi
ZDNkODVmNgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9UZXh0
SW5wdXRDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dElucHV0Q29udHJv
bGxlci5oIgorCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKKyNpbmNsdWRlICJEdW1wUmVu
ZGVyVHJlZUNocm9tZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisKK3N0
YXRpYyBKU1ZhbHVlUmVmIHNldE1hcmtlZFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmLCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwg
SlNWYWx1ZVJlZiopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGhhc01hcmtl
ZFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2JqZWN0
UmVmLCBzaXplX3QsIGNvbnN0IEpTVmFsdWVSZWZbXSwgSlNWYWx1ZVJlZiopCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG1hcmtlZFJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90LCBjb25zdCBKU1ZhbHVl
UmVmW10sIEpTVmFsdWVSZWYqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBp
bnNlcnRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09i
amVjdFJlZiwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVmW10sIEpTVmFsdWVSZWYqKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiB1bm1hcmtUZXh0Q2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90LCBjb25zdCBKU1Zh
bHVlUmVmW10sIEpTVmFsdWVSZWYqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJl
ZiBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBK
U1ZhbHVlUmVmKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVl
TWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgc2VsZWN0ZWRS
YW5nZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiwgSlNPYmplY3RS
ZWYsIHNpemVfdCwgY29uc3QgSlNWYWx1ZVJlZltdLCBKU1ZhbHVlUmVmKikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgZG9Db21tYW5kQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmLCBKU09iamVjdFJlZiwgc2l6ZV90LCBjb25zdCBKU1ZhbHVlUmVm
W10sIEpTVmFsdWVSZWYqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNTdGF0aWNGdW5jdGlv
biBzdGF0aWNGdW5jdGlvbnNbXSA9IHsKKyAgICB7ICJzZXRNYXJrZWRUZXh0Iiwgc2V0TWFya2Vk
VGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgeyAiaGFzTWFya2VkVGV4dCIsIGhhc01hcmtlZFRl
eHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAorICAgIHsgIm1hcmtlZFJhbmdlIiwgbWFya2VkUmFuZ2VDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAorICAgIHsgImluc2VydFRleHQiLCBpbnNlcnRUZXh0Q2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICB7ICJ1bm1hcmtUZXh0IiwgdW5tYXJrVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgeyAiZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UiLCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJS
YW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgeyAic2VsZWN0ZWRSYW5nZSIsIHNlbGVjdGVkUmFu
Z2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAorICAgIHsgImRvQ29tbWFuZCIsIGRvQ29tbWFuZENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgeyAwLCAwLCAwIH0KK307CisKK3N0YXRpYyBKU0NsYXNzUmVmIGdldENs
YXNzKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIHN0YXRpYyBKU0NsYXNzUmVmIHRleHRJ
bnB1dENvbnRyb2xsZXJDbGFzcyA9IDA7CisKKyAgICBpZiAoIXRleHRJbnB1dENvbnRyb2xsZXJD
bGFzcykgeworICAgICAgICBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7Cisg
ICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKyAgICAgICAgY2xhc3NEZWZpbml0aW9uLnN0YXRp
Y0Z1bmN0aW9ucyA9IHN0YXRpY0Z1bmN0aW9uczsKKworICAgICAgICB0ZXh0SW5wdXRDb250cm9s
bGVyQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOworICAgIH0KKworICAg
IHJldHVybiB0ZXh0SW5wdXRDb250cm9sbGVyQ2xhc3M7Cit9CisKK0pTT2JqZWN0UmVmIG1ha2VU
ZXh0SW5wdXRDb250cm9sbGVyKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIHJldHVybiBK
U09iamVjdE1ha2UoY29udGV4dCwgZ2V0Q2xhc3MoY29udGV4dCksIDApOworfQorCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5oIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJbnB1dENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
MDY5M2VjOGJiYmIwY2RhYWU2ODg0MGFkMjMyNTQzYzM4M2QzZGZiCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJbnB1dENvbnRyb2xsZXIuaApAQCAtMCww
ICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dElucHV0
Q29udHJvbGxlcl9oCisjZGVmaW5lIFRleHRJbnB1dENvbnRyb2xsZXJfaAorCit0eXBlZGVmIGNv
bnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKK3R5cGVkZWYgc3RydWN0
IE9wYXF1ZUpTVmFsdWUqIEpTT2JqZWN0UmVmOworCitKU09iamVjdFJlZiBtYWtlVGV4dElucHV0
Q29udHJvbGxlcihKU0NvbnRleHRSZWYpOworCisjZW5kaWYKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133758</attachid>
            <date>2012-03-26 03:02:03 -0700</date>
            <delta_ts>2012-03-26 21:53:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78559-20120326030202.patch</filename>
            <type>text/plain</type>
            <size>12926</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMDU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTI0N2FmNWJlOWFhMzE0
YmYxZDgwYTg1YzBlMmU2ZTEwYWRjYjQ4Zi4uZThhOWY2YzYzYzA5NjU5NmFmNDQ3ZjU4NWE0NjE4
ZTYwMzY3YmZiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTAzLTI2ICBLYW5n
aWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRFJUXSBDcmVhdGUg
Q29tbW9uVGV4dElucHV0Q29udHJvbGxlciB0byByZXBsYWNlIGNvbW1vbiBUZXh0SW5wdXRDb250
cm9sbGVyIHVzYWdlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4NTU5CisKKyAgICAgICAgQ3JlYXRlZCBDb21tb25UZXh0SW5wdXRDb250cm9sbGVy
IHRvIHJlcGxhY2UgVGV4dElucHV0Q29udHJvbGxlciBjb21tb24gdXNhZ2VzLgorICAgICAgICBU
aGVzZSBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBwb3J0IHNwZWNpZmljIHNvIHdlIGNhbiBtZXJn
ZSBpbnRvIG9uZSBjbGFzcy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHRlc3RpbmcvQ29tbW9uVGV4dElucHV0Q29udHJvbGxlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXRFZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29tbW9uVGV4dElu
cHV0Q29udHJvbGxlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1vblRleHRJbnB1
dENvbnRyb2xsZXI6On5Db21tb25UZXh0SW5wdXRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbW1vblRleHRJbnB1dENvbnRyb2xsZXI6OkNvbW1vblRleHRJbnB1dENvbnRyb2xsZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tbW9uVGV4dElucHV0Q29udHJvbGxlcjo6Zmlyc3RSZWN0
Rm9yQ2hhcmFjdGVyUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29tbW9uVGV4dElucHV0Q29u
dHJvbGxlcjo6c2V0TWFya2VkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDb21tb25UZXh0SW5w
dXRDb250cm9sbGVyOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1vblRleHRJ
bnB1dENvbnRyb2xsZXI6OnVubWFya1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tbW9uVGV4
dElucHV0Q29udHJvbGxlcjo6aGFzTWFya2VkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDb21t
b25UZXh0SW5wdXRDb250cm9sbGVyOjptYXJrZWRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b21tb25UZXh0SW5wdXRDb250cm9sbGVyOjpzZWxlY3RlZFJhbmdlKToKKyAgICAgICAgKiB0ZXN0
aW5nL0NvbW1vblRleHRJbnB1dENvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKENvbW1vblRleHRJbnB1dENvbnRyb2xsZXIpOgorICAgICAgICAqIHRlc3Rp
bmcvQ29tbW9uVGV4dElucHV0Q29udHJvbGxlci5pZGw6IEFkZGVkLgorCiAyMDEyLTAzLTI1ICBI
YXlhdG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbU2hhZG93IERPTV0g
QWRkIFJlaWZpZWQgRE9NIFRyZWUgdHJhdmVyc2FsIGludGVybmFsIEFQSXMuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0NvbW1vblRleHRJbnB1dENvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9Db21tb25UZXh0SW5wdXRDb250cm9sbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wMWUyOTFiZTAxNmI3OWE3MDJmZDk3NTcxYWVlOGQyY2I5ZjIxM2M0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Db21tb25UZXh0SW5wdXRDb250cm9s
bGVyLmNwcApAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxp
YSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb21tb25UZXh0SW5wdXRDb250cm9sbGVyLmgi
CisKKyNpbmNsdWRlICJDbGllbnRSZWN0LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgor
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlJhbmdl
LmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIEZyYW1lKiBnZXRGcmFtZShEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgaWYgKCFk
b2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZG9jdW1lbnQtPmZyYW1l
KCk7Cit9CisKK3N0YXRpYyBFZGl0b3IqIGdldEVkaXRvcihEb2N1bWVudCogZG9jdW1lbnQpCit7
CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5m
cmFtZSgpLT5lZGl0b3IoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZG9jdW1l
bnQtPmZyYW1lKCktPmVkaXRvcigpOworfQorCitjb25zdCBjaGFyKiBDb21tb25UZXh0SW5wdXRD
b250cm9sbGVyOjpjb21tb25UZXh0SW5wdXRDb250cm9sbGVySWQgPSAiY29tbW9uVGV4dElucHV0
Q29udHJvbGxlciI7CisKK1Bhc3NSZWZQdHI8Q29tbW9uVGV4dElucHV0Q29udHJvbGxlcj4gQ29t
bW9uVGV4dElucHV0Q29udHJvbGxlcjo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENvbW1vblRleHRJbnB1dENvbnRyb2xsZXIoZG9jdW1lbnQp
KTsKK30KKworQ29tbW9uVGV4dElucHV0Q29udHJvbGxlcjo6fkNvbW1vblRleHRJbnB1dENvbnRy
b2xsZXIoKQoreworfQorCitDb21tb25UZXh0SW5wdXRDb250cm9sbGVyOjpDb21tb25UZXh0SW5w
dXRDb250cm9sbGVyKERvY3VtZW50KiBkb2N1bWVudCkKK3sKK30KKworUGFzc1JlZlB0cjxDbGll
bnRSZWN0PiBDb21tb25UZXh0SW5wdXRDb250cm9sbGVyOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJS
YW5nZShEb2N1bWVudCogZG9jdW1lbnQsIHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5n
dGgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICgobG9jYXRpb24gKyBsZW5ndGggPCBs
b2NhdGlvbikgJiYgKGxvY2F0aW9uICsgbGVuZ3RoKSkKKyAgICAgICAgbGVuZ3RoID0gMDsKKwor
ICAgIEZyYW1lKiBmcmFtZSA9IGdldEZyYW1lKGRvY3VtZW50KTsKKyAgICBpZiAoIWZyYW1lKSB7
CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4gQ2xpZW50
UmVjdDo6Y3JlYXRlKCk7CisgICAgfQorCisgICAgRWRpdG9yKiBlZGl0b3IgPSBmcmFtZS0+ZWRp
dG9yKCk7CisgICAgaWYgKCFlZGl0b3IpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19F
UlI7CisgICAgICAgIHJldHVybiBDbGllbnRSZWN0OjpjcmVhdGUoKTsKKyAgICB9CisKKyAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExl
bmd0aChmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxl
bWVudCgpLCBsb2NhdGlvbiwgbGVuZ3RoKTsKKyAgICBpZiAoIXJhbmdlKSB7CisgICAgICAgIGVj
ID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4gQ2xpZW50UmVjdDo6Y3JlYXRl
KCk7CisgICAgfQorCisgICAgcmV0dXJuIENsaWVudFJlY3Q6OmNyZWF0ZShlZGl0b3ItPmZpcnN0
UmVjdEZvclJhbmdlKHJhbmdlLmdldCgpKSk7Cit9CisKK3ZvaWQgQ29tbW9uVGV4dElucHV0Q29u
dHJvbGxlcjo6c2V0TWFya2VkVGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgRWRpdG9yKiBlZGl0b3IgPSBnZXRFZGl0b3IoZG9jdW1lbnQpOworICAgIGlmICgh
ZWRpdG9yKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVz
OworICAgIHVuZGVybGluZXMuYXBwZW5kKENvbXBvc2l0aW9uVW5kZXJsaW5lKDAsIHRleHQubGVu
Z3RoKCksIENvbG9yKDAsIDAsIDApLCBmYWxzZSkpOworICAgIGVkaXRvci0+c2V0Q29tcG9zaXRp
b24odGV4dCwgdW5kZXJsaW5lcywgc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKTsKK30KKwordm9pZCBD
b21tb25UZXh0SW5wdXRDb250cm9sbGVyOjppbnNlcnRUZXh0KERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBFZGl0b3IqIGVk
aXRvciA9IGdldEVkaXRvcihkb2N1bWVudCk7CisgICAgaWYgKCFlZGl0b3IpIHsKKyAgICAgICAg
ZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKQorICAgICAgICBlZGl0b3ItPmNvbmZpcm1Db21w
b3NpdGlvbih0ZXh0KTsKKyAgICBlbHNlCisgICAgICAgIGVkaXRvci0+aW5zZXJ0VGV4dCh0ZXh0
LCAwKTsKK30KKwordm9pZCBDb21tb25UZXh0SW5wdXRDb250cm9sbGVyOjp1bm1hcmtUZXh0KERv
Y3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgRWRpdG9yKiBlZGl0
b3IgPSBnZXRFZGl0b3IoZG9jdW1lbnQpOworICAgIGlmICghZWRpdG9yKSB7CisgICAgICAgIGVj
ID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZWRp
dG9yLT5jb25maXJtQ29tcG9zaXRpb24oKTsKK30KKworYm9vbCBDb21tb25UZXh0SW5wdXRDb250
cm9sbGVyOjpoYXNNYXJrZWRUZXh0KERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgRWRpdG9yKiBlZGl0b3IgPSBnZXRFZGl0b3IoZG9jdW1lbnQpOworICAgIGlm
ICghZWRpdG9yKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGVkaXRvci0+aGFzQ29tcG9zaXRpb24o
KTsKK30KKworUGFzc1JlZlB0cjxSYW5nZT4gQ29tbW9uVGV4dElucHV0Q29udHJvbGxlcjo6bWFy
a2VkUmFuZ2UoRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBF
ZGl0b3IqIGVkaXRvciA9IGdldEVkaXRvcihkb2N1bWVudCk7CisgICAgaWYgKCFlZGl0b3IpIHsK
KyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIHJldHVybiBlZGl0b3ItPmNvbXBvc2l0aW9uUmFuZ2UoKTsKK30KKworUGFzc1Jl
ZlB0cjxSYW5nZT4gQ29tbW9uVGV4dElucHV0Q29udHJvbGxlcjo6c2VsZWN0ZWRSYW5nZShEb2N1
bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIEZyYW1lKiBmcmFtZSA9
IGdldEZyYW1lKGRvY3VtZW50KTsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+c2VsZWN0aW9u
KCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJh
bmdlKCk7Cit9CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Db21t
b25UZXh0SW5wdXRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0NvbW1vblRl
eHRJbnB1dENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGIxNzFmYTM2Zjc3YmExMmJhMjIwMDgx
YmM4OGIyMTU5MzQ4NDk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9Db21tb25UZXh0SW5wdXRDb250cm9sbGVyLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29tbW9uVGV4dElucHV0Q29udHJvbGxlcl9oCisj
ZGVmaW5lIENvbW1vblRleHRJbnB1dENvbnRyb2xsZXJfaAorCisjaW5jbHVkZSAiRnJhbWVEZXN0
cnVjdGlvbk9ic2VydmVyLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDbGllbnRSZWN0OworY2xhc3MgQ2xpZW50UmVjdExpc3Q7
CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIERvY3VtZW50TWFya2VyOworY2xhc3MgRWxlbWVudDsK
K2NsYXNzIEludGVybmFsU2V0dGluZ3M7CitjbGFzcyBOb2RlOworY2xhc3MgUmFuZ2U7CitjbGFz
cyBTaGFkb3dSb290OworY2xhc3MgV2ViS2l0UG9pbnQ7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlv
bkNvZGU7CisKK2NsYXNzIENvbW1vblRleHRJbnB1dENvbnRyb2xsZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxDb21tb25UZXh0SW5wdXRDb250cm9sbGVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q29tbW9uVGV4dElucHV0Q29udHJvbGxlcj4gY3JlYXRlKERvY3VtZW50Kik7Cisg
ICAgdmlydHVhbCB+Q29tbW9uVGV4dElucHV0Q29udHJvbGxlcigpOworCisgICAgUGFzc1JlZlB0
cjxDbGllbnRSZWN0PiBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShEb2N1bWVudCosIHVuc2ln
bmVkLCB1bnNpZ25lZCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgc2V0TWFya2VkVGV4dChE
b2N1bWVudCosIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgaW5zZXJ0VGV4dChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHVubWFya1RleHQoRG9jdW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgYm9vbCBoYXNNYXJrZWRUZXh0KERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8UmFuZ2U+IG1hcmtlZFJhbmdlKERvY3VtZW50KiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UoRG9jdW1lbnQqLCBFeGNl
cHRpb25Db2RlJik7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29tbW9uVGV4dElucHV0Q29u
dHJvbGxlcklkOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENvbW1vblRleHRJbnB1dENvbnRy
b2xsZXIoRG9jdW1lbnQqKTsKKworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Db21tb25UZXh0SW5wdXRD
b250cm9sbGVyLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvQ29tbW9uVGV4dElucHV0Q29u
dHJvbGxlci5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmE5ODViNGMyOGZkMzQ4NzcxNjI3ODE2ZmE1NmQ0ZmJl
Mzk3ZTRhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvQ29tbW9u
VGV4dElucHV0Q29udHJvbGxlci5pZGwKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVj
dHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKK21vZHVsZSB3aW5kb3cgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIE9t
aXRDb25zdHJ1Y3RvcgorICAgIF0gQ29tbW9uVGV4dElucHV0Q29udHJvbGxlciB7CisgICAgICAg
IENsaWVudFJlY3QgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoaW4gRG9jdW1lbnQgZG9jdW1l
bnQsIGluIHVuc2lnbmVkIGxvbmcgbG9jYXRpb24sIGluIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKSBy
YWlzZXMgKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgc2V0TWFya2VkVGV4dChpbiBEb2N1
bWVudCBkb2N1bWVudCwgaW4gRE9NU3RyaW5nIHRleHQsIGluIHVuc2lnbmVkIGxvbmcgc3RhcnQs
IGluIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisgICAgICAg
IHZvaWQgaW5zZXJ0VGV4dChpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gRE9NU3RyaW5nIHRleHQp
IHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCB1bm1hcmtUZXh0KGluIERvY3Vt
ZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisgICAgICAgIGJvb2xlYW4gaGFz
TWFya2VkVGV4dChpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwor
ICAgICAgICBSYW5nZSBtYXJrZWRSYW5nZShpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChE
T01FeGNlcHRpb24pOworICAgICAgICBSYW5nZSBzZWxlY3RlZFJhbmdlKGluIERvY3VtZW50IGRv
Y3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisgICAgfTsKK30KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139335</attachid>
            <date>2012-04-27 21:33:59 -0700</date>
            <delta_ts>2012-05-06 19:39:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>23314</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyZWQzM2I4Li4wYzIwMTkwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDQt
MjcgIEthbmdpbCBIYW4gIDxrYW5naWwuaGFuQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxd
W0RSVF0gSW1wbGVtZW50IFRleHRJbnB1dENvbnRyb2xsZXIuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU1OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIHRleHRJbnB1dENvbnRyb2xs
ZXIgZm9yIEVGTCBEUlQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2tpcHBlZDoKKwogMjAx
Mi0wNC0yNyAgWWkgU2hlbiAgPHlpLjQuc2hlbkBub2tpYS5jb20+CiAKICAgICAgICAgUkVHUkVT
U0lPTigxMTM3MjMpOiBQcmVzc2luZyBlbnRlciBpbiB0aGlzIGxpc3QgZXhhbXBsZSBkZWxldGVz
IHRoZSB3aG9sZSBsaXN0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwvU2tp
cHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCmluZGV4IDM0ZjRjZDIuLjli
MmFhNWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC9Ta2lwcGVkCkBAIC0yMjksMjkgKzIyOSwxOCBAQCBm
YXN0L2xvYWRlci9mb3JtLXN1Ym1pc3Npb24tYWZ0ZXItYmVmb3JldW5sb2FkLWNhbmNlbC5odG1s
CiAjIEVGTCdzIERSVCBuZWVkcyBhIFBsYWluVGV4dENvbnRyb2xsZXIgaW1wbGVtZW50YXRpb24K
IGVkaXRpbmcvdGV4dC1pdGVyYXRvci9iYXNpYy1pdGVyYXRpb24uaHRtbAogCi0jIEVGTCdzIERS
VCBuZWVkcyBhIFRleHRJbnB1dENvbnRyb2xsZXIKLWVkaXRpbmcvaW5wdXQvaW1lLWNvbXBvc2l0
aW9uLWNsZWFycHJlZWRpdC5odG1sCisjIEVGTCdzIERSVCBrZXkgZG93biBidWcKKyMgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg0NzEwCiBlZGl0aW5nL2lucHV0L3Bh
c3N3b3JkLWVjaG8tcGFzc25vZGUuaHRtbAogZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBh
c3Nub2RlMi5odG1sCi1lZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUzLmh0bWwK
LWVkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby10ZXh0bm9kZS5odG1sCisKKyMgRUZMJ3MgZWRp
dG9yIGRvZXNuJ3QgY2FuY2VsIGNvbXBvc2l0aW9uIGFzIGNoYW5nZSBvZiB2YWx1ZQorIyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUxMjIKIGVkaXRpbmcvaW5wdXQv
c2V0dGluZy1pbnB1dC12YWx1ZS1jYW5jZWwtaW1lLWNvbXBvc2l0aW9uLmh0bWwKLWVkaXRpbmcv
aW5zZXJ0aW5nL2NhcmV0LXBvc2l0aW9uLmh0bWwKLWVkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1j
b21wb3NpdGlvbi13aGl0ZXNwYWNlLmh0bWwKLWVkaXRpbmcvc2VsZWN0aW9uLzU4MjUzNTAtMS5o
dG1sCi1lZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTIuaHRtbAotZWRpdGluZy9zZWxlY3Rpb24v
bWl4ZWQtZWRpdGFiaWxpdHktMTAuaHRtbAotZWRpdGluZy9zZWxlY3Rpb24vbW92ZS1sZWZ0LXJp
Z2h0Lmh0bWwKLWZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy5odG1sCi1mYXN0L2Rv
bS9wcm90b3R5cGUtaW5oZXJpdGFuY2UuaHRtbAotZmFzdC9kb20vcHJvdG90eXBlLWluaGVyaXRh
bmNlLTIuaHRtbAotZmFzdC9kb20vdGFiLWluLXJpZ2h0LWFsaWdubWVudC5odG1sCi1mYXN0L2V2
ZW50cy9pbWUtY29tcG9zaXRpb24tZXZlbnRzLTAwMS5odG1sCisKKyMgRUZMJ3MgdGV4dGFyZWEg
YW5kIHRleHRmaWVsZCBkb2Vzbid0IGhhbmRsZSB3aGl0ZXNwYWNlIHN0eWxlCisjIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTEyMwogZmFzdC9mb3Jtcy9jdXJzb3It
YXQtZWRpdGFibGUtY29udGVudC1ib3VuZGFyeS5odG1sCi1mYXN0L2Zvcm1zL2lucHV0LW1heGxl
bmd0aC1pbWUtY29tcGxldGVkLmh0bWwKLWZhc3QvZm9ybXMvaW5wdXQtbWF4bGVuZ3RoLWltZS1w
cmVlZGl0Lmh0bWwKLWZhc3QvdGV4dC9pbnRlcm5hdGlvbmFsL3RoYWktY3Vyc29yLXBvc2l0aW9u
Lmh0bWwKLXN2Zy90ZXh0L2NhcmV0LWluLXN2Zy10ZXh0LnhodG1sCiAKICMgRUZMJ3MgTGF5b3V0
VGVzdENvbnRyb2xsZXIgZG9lcyBub3QgaW1wbGVtZW50IHNldE1lZGlhVHlwZQogZmFzdC9tZWRp
YS9wcmludC1yZXN0b3Jlcy1wcmV2aW91cy1tZWRpYXR5cGUuaHRtbApAQCAtMTk0Myw2ICsxOTMy
LDggQEAgdHJhbnNpdGlvbnMvZGVmYXVsdC10aW1pbmctZnVuY3Rpb24uaHRtbAogdHJhbnNpdGlv
bnMvbW92ZS1hZnRlci10cmFuc2l0aW9uLmh0bWwKIHRyYW5zaXRpb25zL3N2Zy10ZXh0LXNoYWRv
dy10cmFuc2l0aW9uLmh0bWwKIHRyYW5zaXRpb25zL3N2Zy10cmFuc2l0aW9ucy5odG1sCitmYXN0
L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMuaHRtbAorZmFzdC9kb20vcHJvdG90eXBlLWlu
aGVyaXRhbmNlLTIuaHRtbAogCiAjIEVGTCBEUlQgZG9lc24ndCBmdWxseSBzdXBwb3J0IGh0dHAg
dGVzdHMgeWV0LiBUaGVzZSB0ZXN0cyBtYWtlIHRpbWVvdXQgZXJyb3IuCiBlZGl0aW5nL2lucHV0
L3JldmVhbC1jb250ZW50ZWRpdGFibGUtb24taW5wdXQtdmVydGljYWxseS5odG1sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFu
Z2VMb2cKaW5kZXggNDA1ZjJjZS4uMmYwZTE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9l
ZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIxIEBACisyMDEyLTA0LTI3ICBLYW5naWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5nLmNvbT4K
KworICAgICAgICBbRUZMXVtEUlRdIEltcGxlbWVudCBUZXh0SW5wdXRDb250cm9sbGVyLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1NTkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRlZCB0
ZXh0SW5wdXRDb250cm9sbGVyIGZvciBFRkwgRFJULgorCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbDo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpoYXNDb21wb3NpdGlvbik6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6OmNvbXBvc2l0aW9uUmFuZ2UpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
Ojpjb25maXJtQ29tcG9zaXRpb24pOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbC5oOgorCiAyMDEyLTA0LTI3ICBDaHJpc3RvcGhlIER1bWV6ICA8
Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF0gUmVzb3VyY2VFcnJv
ciBkb21haW4gbmVlZHMgdG8gYmUgcHJvcGVybHkgc2V0IGluIEZyYW1lTG9hZGVyQ2xpZW50CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsLmNwcAppbmRleCBjNDdiOWNjLi4xYTE5NTkyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRF
ZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxFdmFzLmg+CiAj
aW5jbHVkZSA8RmluZE9wdGlvbnMuaD4KICNpbmNsdWRlIDxGbG9hdFNpemUuaD4KKyNpbmNsdWRl
IDxGb2N1c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxGcmFtZVZpZXcuaD4KICNpbmNsdWRlIDxI
VE1MSW5wdXRFbGVtZW50Lmg+CiAjaW5jbHVkZSA8SW5zcGVjdG9yQ29udHJvbGxlci5oPgpAQCAt
NDIsNiArNDMsNyBAQAogI2luY2x1ZGUgPFByaW50Q29udGV4dC5oPgogI2luY2x1ZGUgPFJlbmRl
clRyZWVBc1RleHQuaD4KICNpbmNsdWRlIDxTZXR0aW5ncy5oPgorI2luY2x1ZGUgPFRleHRJdGVy
YXRvci5oPgogI2luY2x1ZGUgPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaD4KICNpbmNsdWRlIDxi
aW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxoaXN0b3J5L0hpc3RvcnlJdGVt
Lmg+CkBAIC02MDcsMyArNjA5LDExMSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6
c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoRXZhc19PYmplY3QqIGV3a1ZpZQogCiAgICAg
Y29yZVBhZ2UtPnNldHRpbmdzKCktPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGVuYWJs
ZWQpOwogfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0Q29tcG9zaXRpb24o
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRleHQsIGludCBzdGFydCwgaW50IGxl
bmd0aCkKK3sKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdLUHJpdmF0ZTo6Y29yZVBhZ2Uo
ZXdrVmlldyk7CisgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKSB8fCAh
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXZWJDb3JlOjpFZGl0b3IqIGVkaXRvciA9IHBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3Ig
fHwgKCFlZGl0b3ItPmNhbkVkaXQoKSAmJiAhZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIGNvbXBvc2l0aW9uU3RyaW5nID0gU3RyaW5nOjpm
cm9tVVRGOCh0ZXh0KTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+
IHVuZGVybGluZXM7CisgICAgdW5kZXJsaW5lcy5hcHBlbmQoV2ViQ29yZTo6Q29tcG9zaXRpb25V
bmRlcmxpbmUoMCwgY29tcG9zaXRpb25TdHJpbmcubGVuZ3RoKCksIFdlYkNvcmU6OkNvbG9yKDAs
IDAsIDApLCBmYWxzZSkpOworICAgIGVkaXRvci0+c2V0Q29tcG9zaXRpb24oY29tcG9zaXRpb25T
dHJpbmcsIHVuZGVybGluZXMsIHN0YXJ0LCBzdGFydCArIGxlbmd0aCk7Cit9CisKK2Jvb2wgRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpoYXNDb21wb3NpdGlvbihFdmFzX09iamVjdCogZXdrVmll
dykKK3sKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdLUHJpdmF0ZTo6Y29yZVBhZ2UoZXdr
Vmlldyk7CisgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKSB8fCAhcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBXZWJDb3JlOjpFZGl0b3IqIGVkaXRvciA9IHBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0
b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBlZGl0b3ItPmhhc0NvbXBv
c2l0aW9uKCk7Cit9CisKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjb21wb3NpdGlv
blJhbmdlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQqIHN0YXJ0LCBpbnQqIGxlbmd0aCkKK3sK
KyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdLUHJpdmF0ZTo6Y29yZVBhZ2UoZXdrVmlldyk7
CisgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKSB8fCAhcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBXZWJDb3JlOjpFZGl0b3IqIGVkaXRvciA9IHBhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3IgfHwg
IWVkaXRvci0+aGFzQ29tcG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
KnN0YXJ0ID0gZWRpdG9yLT5jb21wb3NpdGlvblN0YXJ0KCk7CisgICAgKmxlbmd0aCA9IGVkaXRv
ci0+Y29tcG9zaXRpb25FbmQoKSAtICpzdGFydDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNvbmZpcm1Db21wb3NpdGlvbihFdmFzX09iamVj
dCogZXdrVmlldywgY29uc3QgY2hhciogdGV4dCkKK3sKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdl
ID0gRVdLUHJpdmF0ZTo6Y29yZVBhZ2UoZXdrVmlldyk7CisgICAgaWYgKCFwYWdlIHx8ICFwYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKSB8fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRP
ck1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpFZGl0b3IqIGVk
aXRvciA9IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRp
dG9yKCk7CisgICAgaWYgKCFlZGl0b3IpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZWRp
dG9yLT5oYXNDb21wb3NpdGlvbigpKSB7CisgICAgICAgIGVkaXRvci0+aW5zZXJ0VGV4dChTdHJp
bmc6OmZyb21VVEY4KHRleHQpLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
dGV4dCkgeworICAgICAgICBlZGl0b3ItPmNvbmZpcm1Db21wb3NpdGlvbihTdHJpbmc6OmZyb21V
VEY4KHRleHQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlZGl0b3ItPmNvbmZpcm1D
b21wb3NpdGlvbigpOworfQorCitXZWJDb3JlOjpJbnRSZWN0IER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGlu
dCBsb2NhdGlvbiwgaW50IGxlbmd0aCkKK3sKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdL
UHJpdmF0ZTo6Y29yZVBhZ2UoZXdrVmlldyk7CisgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKSB8fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5G
cmFtZSgpIHx8ICFwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkt
PmVkaXRvcigpKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UmVjdCgpOworCisgICAgaWYg
KChsb2NhdGlvbiArIGxlbmd0aCA8IGxvY2F0aW9uKSAmJiAobG9jYXRpb24gKyBsZW5ndGgpKQor
ICAgICAgICBsZW5ndGggPSAwOworCisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIFdlYkNvcmU6OkVk
aXRvciogZWRpdG9yID0gZnJhbWUtPmVkaXRvcigpOworCisgICAgUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPiByYW5nZSA9IFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRM
ZW5ndGgoZnJhbWUtPnNlbGVjdGlvbigpLT5yb290RWRpdGFibGVFbGVtZW50T3JEb2N1bWVudEVs
ZW1lbnQoKSwgbG9jYXRpb24sIGxlbmd0aCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0
dXJuIFdlYkNvcmU6OkludFJlY3QoKTsKKworICAgIHJldHVybiBlZGl0b3ItPmZpcnN0UmVjdEZv
clJhbmdlKHJhbmdlLmdldCgpKTsKK30KKworYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OnNlbGVjdGVkUmFuZ2UoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCogc3RhcnQsIGludCogbGVu
Z3RoKQoreworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBFV0tQcml2YXRlOjpjb3JlUGFnZShl
d2tWaWV3KTsKKyAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UtPmZvY3VzQ29udHJvbGxlcigpIHx8ICFw
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IHBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFu
Z2U+IHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
OworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkNvcmU6
OkVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3Qg
PyBzZWxlY3Rpb25Sb290IDogZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwor
CisgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiB0ZXN0UmFuZ2UgPSBXZWJDb3JlOjpSYW5nZTo6
Y3JlYXRlKHNjb3BlLT5kb2N1bWVudCgpLCBzY29wZSwgMCwgcmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICAqc3RhcnQgPSBXZWJDb3JlOjpUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSk7CisKKyAgICBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlIGVjOworICAgIHRlc3RSYW5nZS0+c2V0RW5kKHJhbmdlLT5lbmRDb250YWluZXIo
KSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBlYyk7CisgICAgKmxlbmd0aCA9IFdlYkNvcmU6OlRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKKworICAgIHJldHVybiB0cnVl
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaAppbmRleCAzZTkyZDJhLi5jMWFlNTg3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRFZmwuaApAQCAtOTYsNiArOTYsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIHNldEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVkKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBib29sIGVuYWJsZWQpOwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGNvbXB1dGVkU3R5bGVJ
bmNsdWRpbmdWaXNpdGVkSW5mbyhKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYpOwogICAgIHN0YXRp
YyB2b2lkIHNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBib29sKTsKKworICAgIC8vIFRleHRJbnB1dENvbnRyb2xsZXIKKyAgICBzdGF0aWMgdm9pZCBz
ZXRDb21wb3NpdGlvbihFdmFzX09iamVjdCosIGNvbnN0IGNoYXIqLCBpbnQsIGludCk7CisgICAg
c3RhdGljIGJvb2wgaGFzQ29tcG9zaXRpb24oRXZhc19PYmplY3QqKTsKKyAgICBzdGF0aWMgYm9v
bCBjb21wb3NpdGlvblJhbmdlKEV2YXNfT2JqZWN0KiwgaW50KiwgaW50Kik7CisgICAgc3RhdGlj
IHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKEV2YXNfT2JqZWN0KiwgY29uc3QgY2hhciopOworICAg
IHN0YXRpYyBXZWJDb3JlOjpJbnRSZWN0IGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKEV2YXNf
T2JqZWN0KiwgaW50LCBpbnQpOworICAgIHN0YXRpYyBib29sIHNlbGVjdGVkUmFuZ2UoRXZhc19P
YmplY3QqLCBpbnQqLCBpbnQqKTsKIH07CiAKICNlbmRpZiAvLyBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmxfaApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDlhMWQxZWUuLmY1Zjg3YjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMi0wNC0yNyAgS2FuZ2lsIEhhbiAg
PGthbmdpbC5oYW5Ac2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1bRFJUXSBJbXBsZW1lbnQg
VGV4dElucHV0Q29udHJvbGxlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc4NTU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50ZWQgdGV4dElucHV0Q29udHJvbGxlciBmb3IgRUZMIERSVC4K
KworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuY3BwOgorICAgICAgICAo
RHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uV2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvZWZsL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKHNldE1hcmtlZFRleHRDYWxsYmFjayk6CisgICAgICAgIChoYXNNYXJrZWRUZXh0Q2FsbGJh
Y2spOgorICAgICAgICAobWFya2VkUmFuZ2VDYWxsYmFjayk6CisgICAgICAgIChpbnNlcnRUZXh0
Q2FsbGJhY2spOgorICAgICAgICAodW5tYXJrVGV4dENhbGxiYWNrKToKKyAgICAgICAgKGZpcnN0
UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2spOgorICAgICAgICAoc2VsZWN0ZWRSYW5nZUNh
bGxiYWNrKToKKyAgICAgICAgKG1ha2VUZXh0SW5wdXRDb250cm9sbGVyKToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5oOiBBZGRlZC4KKwogMjAxMi0w
NC0yNyAgU2NvdHQgR3JhaGFtICA8c2NvdHRtZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2No
cm9taXVtXSBtYWtlIGNhc2Ugb2YgbnBUZXN0TmV0c2NhcGVQbHVnSW4uZGxsIG1hdGNoIGNhc2Ug
aW4gY29weSBydWxlCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VM
aXN0cy50eHQgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKaW5kZXgg
NzJhMTdmZC4uMDlmMmJlYyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NN
YWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4
dApAQCAtMTUsNiArMTUsNyBAQCBTRVQoRHVtcFJlbmRlclRyZWVfU09VUkNFUwogICAgICR7VE9P
TFNfRElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvSlNTdHJpbmdVdGlscy5jcHAKICAgICAke1RPT0xT
X0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAogICAg
ICR7VE9PTFNfRElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvUGl4ZWxEdW1wU3VwcG9ydEVmbC5jcHAK
KyAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJbnB1dENvbnRyb2xsZXIu
Y3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9Xb3JrUXVldWVJdGVtRWZs
LmNwcAogKQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRl
clRyZWVDaHJvbWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVl
Q2hyb21lLmNwcAppbmRleCA2MzAwNDEwLi43NTk4NGE4IDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiVGV4dElucHV0Q29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbC5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgIldvcmtR
dWV1ZS5oIgpAQCAtMzU2LDYgKzM1NywxMiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpv
bldpbmRvd09iamVjdENsZWFyZWQodm9pZCogdXNlckRhdGEsIEV2YXNfT2JqZWN0KiwgdgogICAg
ICAgICAgICAgICAgICAgICAgICAgbWFrZUV2ZW50U2VuZGVyKG9iamVjdENsZWFyZWRJbmZvLT5j
b250ZXh0LCAhRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmcmFtZVBhcmVudChvYmplY3RDbGVh
cmVkSW5mby0+ZnJhbWUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIDApOwogCisg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRleHRJbnB1dENvbnRyb2xsZXJOYW1lKEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXh0SW5wdXRDb250cm9sbGVyIikpOworICAgIEpT
T2JqZWN0U2V0UHJvcGVydHkob2JqZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQsIG9iamVjdENsZWFy
ZWRJbmZvLT53aW5kb3dPYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0SW5wdXRD
b250cm9sbGVyTmFtZS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VUZXh0SW5w
dXRDb250cm9sbGVyKG9iamVjdENsZWFyZWRJbmZvLT5jb250ZXh0KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUsIDApOworCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJbnRl
cm5hbHNPYmplY3Qob2JqZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQpOwogfQogCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJiNmQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2VmbC9UZXh0SW5wdXRDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDE3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIK
KworI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVD
aHJvbWUuaCIKKyNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRF
ZmwuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5o
PgorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRNYXJrZWRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmICghYnJvd3Nlci0+bWFpblZpZXcoKSB8fCBhcmd1
bWVudENvdW50IDwgMykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOworCisgICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250
ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9
IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJpbmcpOworICAgIGNoYXIqIHRl
eHQgPSBuZXcgY2hhcltidWZmZXJTaXplXTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHN0
cmluZywgdGV4dCwgYnVmZmVyU2l6ZSk7CisgICAgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7CisK
KyAgICBpbnQgc3RhcnQgPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOworICAgIGludCBsZW5ndGggPSBzdGF0aWNfY2Fz
dDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikp
OworCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRDb21wb3NpdGlvbihicm93c2Vy
LT5tYWluVmlldygpLCB0ZXh0LCBzdGFydCwgbGVuZ3RoKTsKKworICAgIGRlbGV0ZVtdIHRleHQ7
CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMg
SlNWYWx1ZVJlZiBoYXNNYXJrZWRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIGlmICghYnJvd3Nlci0+bWFpblZpZXcoKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9v
bGVhbihjb250ZXh0LCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Omhhc0NvbXBvc2l0aW9uKGJy
b3dzZXItPm1haW5WaWV3KCkpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgbWFya2VkUmFuZ2VD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFicm93c2Vy
LT5tYWluVmlldygpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisKKyAgICBpbnQgc3RhcnQsIGxlbmd0aDsKKyAgICBpZiAoIUR1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6Y29tcG9zaXRpb25SYW5nZShicm93c2VyLT5tYWluVmlldygpLCAmc3RhcnQsICZs
ZW5ndGgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisK
KyAgICBKU1ZhbHVlUmVmIGFycmF5VmFsdWVzWzJdOworICAgIGFycmF5VmFsdWVzWzBdID0gSlNW
YWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgc3RhcnQpOworICAgIGFycmF5VmFsdWVzWzFdID0gSlNW
YWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgbGVuZ3RoKTsKKyAgICBKU09iamVjdFJlZiBhcnJheU9i
amVjdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDIsIGFycmF5VmFsdWVzLCBleGNlcHRp
b24pOworICAgIHJldHVybiBhcnJheU9iamVjdDsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgaW5z
ZXJ0VGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAo
IWJyb3dzZXItPm1haW5WaWV3KCkgfHwgYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTU3RyaW5nUmVmIHN0cmlu
ZyA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
OworCisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmlu
Z1NpemUoc3RyaW5nKTsKKyAgICBjaGFyKiB0ZXh0ID0gbmV3IGNoYXJbYnVmZmVyU2l6ZV07Cisg
ICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJpbmcsIHRleHQsIGJ1ZmZlclNpemUpOworICAg
IEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOworCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
Ojpjb25maXJtQ29tcG9zaXRpb24oYnJvd3Nlci0+bWFpblZpZXcoKSwgdGV4dCk7CisKKyAgICBk
ZWxldGVbXSB0ZXh0OworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgdW5tYXJrVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoIWJyb3dzZXItPm1haW5WaWV3KCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6Y29uZmlybUNvbXBvc2l0aW9uKGJyb3dzZXItPm1haW5WaWV3KCksIDAp
OworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFicm93c2VyLT5tYWluVmlldygpIHx8IGFy
Z3VtZW50Q291bnQgPCAyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisKKyAgICBpbnQgbG9jYXRpb24gPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051
bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIGludCBsZW5ndGgg
PSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0s
IGV4Y2VwdGlvbikpOworCisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0ID0gRHVtcFJlbmRlclRy
ZWVTdXBwb3J0RWZsOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShicm93c2VyLT5tYWluVmll
dygpLCBsb2NhdGlvbiwgbGVuZ3RoKTsKKworICAgIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZXNbNF07
CisgICAgYXJyYXlWYWx1ZXNbMF0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCByZWN0Lngo
KSk7CisgICAgYXJyYXlWYWx1ZXNbMV0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCByZWN0
LnkoKSk7CisgICAgYXJyYXlWYWx1ZXNbMl0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCBy
ZWN0LndpZHRoKCkpOworICAgIGFycmF5VmFsdWVzWzNdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29u
dGV4dCwgcmVjdC5oZWlnaHQoKSk7CisgICAgSlNPYmplY3RSZWYgYXJyYXlPYmplY3QgPSBKU09i
amVjdE1ha2VBcnJheShjb250ZXh0LCA0LCBhcnJheVZhbHVlcywgZXhjZXB0aW9uKTsKKyAgICBy
ZXR1cm4gYXJyYXlPYmplY3Q7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNlbGVjdGVkUmFuZ2VD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFicm93c2Vy
LT5tYWluVmlldygpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisKKyAgICBpbnQgc3RhcnQsIGxlbmd0aDsKKyAgICBpZiAoIUR1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6c2VsZWN0ZWRSYW5nZShicm93c2VyLT5tYWluVmlldygpLCAmc3RhcnQsICZsZW5n
dGgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAg
ICBKU1ZhbHVlUmVmIGFycmF5VmFsdWVzWzJdOworICAgIGFycmF5VmFsdWVzWzBdID0gSlNWYWx1
ZU1ha2VOdW1iZXIoY29udGV4dCwgc3RhcnQpOworICAgIGFycmF5VmFsdWVzWzFdID0gSlNWYWx1
ZU1ha2VOdW1iZXIoY29udGV4dCwgbGVuZ3RoKTsKKyAgICBKU09iamVjdFJlZiBhcnJheU9iamVj
dCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDIsIGFycmF5VmFsdWVzLCBleGNlcHRpb24p
OworICAgIHJldHVybiBhcnJheU9iamVjdDsKK30KKworc3RhdGljIEpTU3RhdGljRnVuY3Rpb24g
c3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgeyAic2V0TWFya2VkVGV4dCIsIHNldE1hcmtlZFRl
eHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAorICAgIHsgImhhc01hcmtlZFRleHQiLCBoYXNNYXJrZWRUZXh0
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJtYXJrZWRSYW5nZSIsIG1hcmtlZFJhbmdlQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKKyAgICB7ICJpbnNlcnRUZXh0IiwgaW5zZXJ0VGV4dENhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCisgICAgeyAidW5tYXJrVGV4dCIsIHVubWFya1RleHRDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAg
IHsgImZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlIiwgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFu
Z2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAorICAgIHsgInNlbGVjdGVkUmFuZ2UiLCBzZWxlY3RlZFJhbmdl
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKKyAgICB7IDAsIDAsIDAgfQorfTsKKworc3RhdGljIEpTQ2xhc3NS
ZWYgZ2V0Q2xhc3MoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgc3RhdGljIEpTQ2xhc3NS
ZWYgdGV4dElucHV0Q29udHJvbGxlckNsYXNzID0gMDsKKworICAgIGlmICghdGV4dElucHV0Q29u
dHJvbGxlckNsYXNzKSB7CisgICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlv
biA9IHsKKyAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAg
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICAgICAgICBjbGFzc0RlZmluaXRp
b24uc3RhdGljRnVuY3Rpb25zID0gc3RhdGljRnVuY3Rpb25zOworCisgICAgICAgIHRleHRJbnB1
dENvbnRyb2xsZXJDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7CisgICAg
fQorCisgICAgcmV0dXJuIHRleHRJbnB1dENvbnRyb2xsZXJDbGFzczsKK30KKworSlNPYmplY3RS
ZWYgbWFrZVRleHRJbnB1dENvbnRyb2xsZXIoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAg
cmV0dXJuIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRDbGFzcyhjb250ZXh0KSwgMCk7Cit9CisK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9UZXh0SW5wdXRDb250cm9sbGVy
LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZGNlZTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5oCkBAIC0wLDAg
KzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisjaWZuZGVmIFRleHRJbnB1dENvbnRyb2xsZXJfaAorI2RlZmluZSBUZXh0SW5wdXRDb250
cm9sbGVyX2gKKwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRl
eHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1ZhbHVlKiBKU09iamVjdFJlZjsKKworSlNP
YmplY3RSZWYgbWFrZVRleHRJbnB1dENvbnRyb2xsZXIoSlNDb250ZXh0UmVmKTsKKworI2VuZGlm
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140457</attachid>
            <date>2012-05-06 19:39:53 -0700</date>
            <delta_ts>2012-05-06 21:43:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>23968</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyZWQzM2I4Li45ZjI0MTBkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDQt
MjcgIEthbmdpbCBIYW4gIDxrYW5naWwuaGFuQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxd
W0RSVF0gSW1wbGVtZW50IFRleHRJbnB1dENvbnRyb2xsZXIuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU1OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRleHRJbnB1dENvbnRyb2xsZXIgaGFzIGJlZW4g
Y3JlYXRlZCBmb3IgYW4gaW5wdXQgZW11bGF0aW9uIHB1cnBvc2UgaW4gRFJULgorICAgICAgICBI
b3dldmVyLCBub3QgbGlrZSBvdGhlciBwb3J0cywgRUZMIGRvZXNuJ3QgaGF2ZSBpdC4KKyAgICAg
ICAgVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHdpbGwgZW5hYmxlIEVGTCBwb3J0IHRvIGhhdmUgYW4g
aW5wdXQgZW11bGF0aW9uIGluIERSVC4KKworICAgICAgICAqIHBsYXRmb3JtL2VmbC9Ta2lwcGVk
OgorCiAyMDEyLTA0LTI3ICBZaSBTaGVuICA8eWkuNC5zaGVuQG5va2lhLmNvbT4KIAogICAgICAg
ICBSRUdSRVNTSU9OKDExMzcyMyk6IFByZXNzaW5nIGVudGVyIGluIHRoaXMgbGlzdCBleGFtcGxl
IGRlbGV0ZXMgdGhlIHdob2xlIGxpc3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2VmbC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKaW5kZXggMzRm
NGNkMi4uOWIyYWE1YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBw
ZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQKQEAgLTIyOSwyOSArMjI5
LDE4IEBAIGZhc3QvbG9hZGVyL2Zvcm0tc3VibWlzc2lvbi1hZnRlci1iZWZvcmV1bmxvYWQtY2Fu
Y2VsLmh0bWwKICMgRUZMJ3MgRFJUIG5lZWRzIGEgUGxhaW5UZXh0Q29udHJvbGxlciBpbXBsZW1l
bnRhdGlvbgogZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2Jhc2ljLWl0ZXJhdGlvbi5odG1sCiAKLSMg
RUZMJ3MgRFJUIG5lZWRzIGEgVGV4dElucHV0Q29udHJvbGxlcgotZWRpdGluZy9pbnB1dC9pbWUt
Y29tcG9zaXRpb24tY2xlYXJwcmVlZGl0Lmh0bWwKKyMgRUZMJ3MgRFJUIGtleSBkb3duIGJ1Zwor
IyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ3MTAKIGVkaXRpbmcv
aW5wdXQvcGFzc3dvcmQtZWNoby1wYXNzbm9kZS5odG1sCiBlZGl0aW5nL2lucHV0L3Bhc3N3b3Jk
LWVjaG8tcGFzc25vZGUyLmh0bWwKLWVkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1wYXNzbm9k
ZTMuaHRtbAotZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXRleHRub2RlLmh0bWwKKworIyBF
RkwncyBlZGl0b3IgZG9lc24ndCBjYW5jZWwgY29tcG9zaXRpb24gYXMgY2hhbmdlIG9mIHZhbHVl
CisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTEyMgogZWRpdGlu
Zy9pbnB1dC9zZXR0aW5nLWlucHV0LXZhbHVlLWNhbmNlbC1pbWUtY29tcG9zaXRpb24uaHRtbAot
ZWRpdGluZy9pbnNlcnRpbmcvY2FyZXQtcG9zaXRpb24uaHRtbAotZWRpdGluZy9pbnNlcnRpbmcv
aW5zZXJ0LWNvbXBvc2l0aW9uLXdoaXRlc3BhY2UuaHRtbAotZWRpdGluZy9zZWxlY3Rpb24vNTgy
NTM1MC0xLmh0bWwKLWVkaXRpbmcvc2VsZWN0aW9uLzU4MjUzNTAtMi5odG1sCi1lZGl0aW5nL3Nl
bGVjdGlvbi9taXhlZC1lZGl0YWJpbGl0eS0xMC5odG1sCi1lZGl0aW5nL3NlbGVjdGlvbi9tb3Zl
LWxlZnQtcmlnaHQuaHRtbAotZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwK
LWZhc3QvZG9tL3Byb3RvdHlwZS1pbmhlcml0YW5jZS5odG1sCi1mYXN0L2RvbS9wcm90b3R5cGUt
aW5oZXJpdGFuY2UtMi5odG1sCi1mYXN0L2RvbS90YWItaW4tcmlnaHQtYWxpZ25tZW50Lmh0bWwK
LWZhc3QvZXZlbnRzL2ltZS1jb21wb3NpdGlvbi1ldmVudHMtMDAxLmh0bWwKKworIyBFRkwncyB0
ZXh0YXJlYSBhbmQgdGV4dGZpZWxkIGRvZXNuJ3QgaGFuZGxlIHdoaXRlc3BhY2Ugc3R5bGUKKyMg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MTIzCiBmYXN0L2Zvcm1z
L2N1cnNvci1hdC1lZGl0YWJsZS1jb250ZW50LWJvdW5kYXJ5Lmh0bWwKLWZhc3QvZm9ybXMvaW5w
dXQtbWF4bGVuZ3RoLWltZS1jb21wbGV0ZWQuaHRtbAotZmFzdC9mb3Jtcy9pbnB1dC1tYXhsZW5n
dGgtaW1lLXByZWVkaXQuaHRtbAotZmFzdC90ZXh0L2ludGVybmF0aW9uYWwvdGhhaS1jdXJzb3It
cG9zaXRpb24uaHRtbAotc3ZnL3RleHQvY2FyZXQtaW4tc3ZnLXRleHQueGh0bWwKIAogIyBFRkwn
cyBMYXlvdXRUZXN0Q29udHJvbGxlciBkb2VzIG5vdCBpbXBsZW1lbnQgc2V0TWVkaWFUeXBlCiBm
YXN0L21lZGlhL3ByaW50LXJlc3RvcmVzLXByZXZpb3VzLW1lZGlhdHlwZS5odG1sCkBAIC0xOTQz
LDYgKzE5MzIsOCBAQCB0cmFuc2l0aW9ucy9kZWZhdWx0LXRpbWluZy1mdW5jdGlvbi5odG1sCiB0
cmFuc2l0aW9ucy9tb3ZlLWFmdGVyLXRyYW5zaXRpb24uaHRtbAogdHJhbnNpdGlvbnMvc3ZnLXRl
eHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbAogdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25zLmh0
bWwKK2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy5odG1sCitmYXN0L2RvbS9wcm90
b3R5cGUtaW5oZXJpdGFuY2UtMi5odG1sCiAKICMgRUZMIERSVCBkb2Vzbid0IGZ1bGx5IHN1cHBv
cnQgaHR0cCB0ZXN0cyB5ZXQuIFRoZXNlIHRlc3RzIG1ha2UgdGltZW91dCBlcnJvci4KIGVkaXRp
bmcvaW5wdXQvcmV2ZWFsLWNvbnRlbnRlZGl0YWJsZS1vbi1pbnB1dC12ZXJ0aWNhbGx5Lmh0bWwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL0NoYW5nZUxvZwppbmRleCA0MDVmMmNlLi5lODNkODc2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTItMDQtMjcgIEthbmdpbCBIYW4gIDxrYW5naWwuaGFuQHNhbXN1
bmcuY29tPgorCisgICAgICAgIFtFRkxdW0RSVF0gSW1wbGVtZW50IFRleHRJbnB1dENvbnRyb2xs
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU1
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRleHRJ
bnB1dENvbnRyb2xsZXIgaGFzIGJlZW4gY3JlYXRlZCBmb3IgYW4gaW5wdXQgZW11bGF0aW9uIHB1
cnBvc2UgaW4gRFJULgorICAgICAgICBIb3dldmVyLCBub3QgbGlrZSBvdGhlciBwb3J0cywgRUZM
IGRvZXNuJ3QgaGF2ZSBpdC4KKyAgICAgICAgVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHdpbGwgZW5h
YmxlIEVGTCBwb3J0IHRvIGhhdmUgYW4gaW5wdXQgZW11bGF0aW9uIGluIERSVC4KKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHA6CisgICAgICAg
IChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6aGFzQ29tcG9zaXRpb24pOgorICAgICAgICAoRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsOjpjb21wb3NpdGlvblJhbmdlKToKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2UpOgorICAgICAgICAo
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZWxlY3RlZFJhbmdlKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaDoKKwogMjAxMi0wNC0yNyAgQ2hy
aXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgogCiAgICAgICAgIFtF
RkxdIFJlc291cmNlRXJyb3IgZG9tYWluIG5lZWRzIHRvIGJlIHByb3Blcmx5IHNldCBpbiBGcmFt
ZUxvYWRlckNsaWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKaW5kZXggYzQ3YjljYy4uMTFm
ZjdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSA8RXZhcy5oPgogI2luY2x1ZGUgPEZpbmRPcHRpb25zLmg+CiAjaW5jbHVkZSA8RmxvYXRT
aXplLmg+CisjaW5jbHVkZSA8Rm9jdXNDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8RnJhbWVWaWV3
Lmg+CiAjaW5jbHVkZSA8SFRNTElucHV0RWxlbWVudC5oPgogI2luY2x1ZGUgPEluc3BlY3RvckNv
bnRyb2xsZXIuaD4KQEAgLTQyLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxQcmludENvbnRleHQuaD4K
ICNpbmNsdWRlIDxSZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW5jbHVkZSA8U2V0dGluZ3MuaD4KKyNp
bmNsdWRlIDxUZXh0SXRlcmF0b3IuaD4KICNpbmNsdWRlIDxXZWJLaXRNdXRhdGlvbk9ic2VydmVy
Lmg+CiAjaW5jbHVkZSA8YmluZGluZ3MvanMvR0NDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8aGlz
dG9yeS9IaXN0b3J5SXRlbS5oPgpAQCAtNjA3LDMgKzYwOSwxMTcgQEAgdm9pZCBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRFZmw6OnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKEV2YXNfT2JqZWN0
KiBld2tWaWUKIAogICAgIGNvcmVQYWdlLT5zZXR0aW5ncygpLT5zZXRBdXRob3JBbmRVc2VyU3R5
bGVzRW5hYmxlZChlbmFibGVkKTsKIH0KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OnNldENvbXBvc2l0aW9uKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0ZXh0LCBp
bnQgc3RhcnQsIGludCBsZW5ndGgpCit7CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IEVXS1By
aXZhdGU6OmNvcmVQYWdlKGV3a1ZpZXcpOworICAgIGlmICghcGFnZSB8fCAhcGFnZS0+Zm9jdXND
b250cm9sbGVyKCkgfHwgIXBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJh
bWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViQ29yZTo6RWRpdG9yKiBlZGl0b3IgPSBw
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpOwor
ICAgIGlmICghZWRpdG9yIHx8ICghZWRpdG9yLT5jYW5FZGl0KCkgJiYgIWVkaXRvci0+aGFzQ29t
cG9zaXRpb24oKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IFN0cmluZyBjb21wb3Np
dGlvblN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgodGV4dCk7CisgICAgVmVjdG9yPFdlYkNvcmU6
OkNvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzOworICAgIHVuZGVybGluZXMuYXBwZW5k
KFdlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lKDAsIGNvbXBvc2l0aW9uU3RyaW5nLmxlbmd0
aCgpLCBXZWJDb3JlOjpDb2xvcigwLCAwLCAwKSwgZmFsc2UpKTsKKyAgICBlZGl0b3ItPnNldENv
bXBvc2l0aW9uKGNvbXBvc2l0aW9uU3RyaW5nLCB1bmRlcmxpbmVzLCBzdGFydCwgc3RhcnQgKyBs
ZW5ndGgpOworfQorCitib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6aGFzQ29tcG9zaXRp
b24oY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCit7CisgICAgY29uc3QgV2ViQ29yZTo6UGFn
ZSogcGFnZSA9IEVXS1ByaXZhdGU6OmNvcmVQYWdlKGV3a1ZpZXcpOworICAgIGlmICghcGFnZSB8
fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkgfHwgIXBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5m
b2N1c2VkT3JNYWluRnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3Qg
V2ViQ29yZTo6RWRpdG9yKiBlZGl0b3IgPSBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNl
ZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpOworICAgIGlmICghZWRpdG9yKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpOworfQorCiti
b29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y29tcG9zaXRpb25SYW5nZShFdmFzX09iamVj
dCogZXdrVmlldywgaW50KiBzdGFydCwgaW50KiBsZW5ndGgpCit7CisgICAgKnN0YXJ0ID0gKmxl
bmd0aCA9IDA7CisKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdLUHJpdmF0ZTo6Y29yZVBh
Z2UoZXdrVmlldyk7CisgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKSB8
fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJDb3JlOjpFZGl0b3IqIGVkaXRvciA9IHBhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCk7CisgICAgaWYg
KCFlZGl0b3IgfHwgIWVkaXRvci0+aGFzQ29tcG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgKnN0YXJ0ID0gZWRpdG9yLT5jb21wb3NpdGlvblN0YXJ0KCk7CisgICAgKmxl
bmd0aCA9IGVkaXRvci0+Y29tcG9zaXRpb25FbmQoKSAtICpzdGFydDsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNvbmZpcm1Db21wb3NpdGlv
bihFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdGV4dCkKK3sKKyAgICBXZWJDb3Jl
OjpQYWdlKiBwYWdlID0gRVdLUHJpdmF0ZTo6Y29yZVBhZ2UoZXdrVmlldyk7CisgICAgaWYgKCFw
YWdlIHx8ICFwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKSB8fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCktPmZvY3VzZWRPck1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3Jl
OjpFZGl0b3IqIGVkaXRvciA9IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKS0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3IpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKSB7CisgICAgICAgIGVkaXRvci0+aW5z
ZXJ0VGV4dChTdHJpbmc6OmZyb21VVEY4KHRleHQpLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICh0ZXh0KSB7CisgICAgICAgIGVkaXRvci0+Y29uZmlybUNvbXBvc2l0aW9u
KFN0cmluZzo6ZnJvbVVURjgodGV4dCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVk
aXRvci0+Y29uZmlybUNvbXBvc2l0aW9uKCk7Cit9CisKK1dlYkNvcmU6OkludFJlY3QgRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShFdmFzX09iamVj
dCogZXdrVmlldywgaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoKQoreworICAgIFdlYkNvcmU6OlBh
Z2UqIHBhZ2UgPSBFV0tQcml2YXRlOjpjb3JlUGFnZShld2tWaWV3KTsKKyAgICBpZiAoIXBhZ2Ug
fHwgIXBhZ2UtPmZvY3VzQ29udHJvbGxlcigpIHx8ICFwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+
Zm9jdXNlZE9yTWFpbkZyYW1lKCkgfHwgIXBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2Vk
T3JNYWluRnJhbWUoKS0+ZWRpdG9yKCkpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpJbnRSZWN0
KCk7CisKKyAgICBpZiAoKGxvY2F0aW9uICsgbGVuZ3RoIDwgbG9jYXRpb24pICYmIChsb2NhdGlv
biArIGxlbmd0aCkpCisgICAgICAgIGxlbmd0aCA9IDA7CisKKyAgICBXZWJDb3JlOjpGcmFtZSog
ZnJhbWUgPSBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Cisg
ICAgV2ViQ29yZTo6RWRpdG9yKiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9yKCk7CisKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUZy
b21Mb2NhdGlvbkFuZExlbmd0aChmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1l
bnRPckRvY3VtZW50RWxlbWVudCgpLCBsb2NhdGlvbiwgbGVuZ3RoKTsKKyAgICBpZiAoIXJhbmdl
KQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UmVjdCgpOworCisgICAgcmV0dXJuIGVkaXRv
ci0+Zmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOworfQorCitib29sIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6c2VsZWN0ZWRSYW5nZShFdmFzX09iamVjdCogZXdrVmlldywgaW50KiBz
dGFydCwgaW50KiBsZW5ndGgpCit7CisgICAgaWYgKCEoc3RhcnQgJiYgbGVuZ3RoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IEVXS1ByaXZhdGU6
OmNvcmVQYWdlKGV3a1ZpZXcpOworICAgIGlmICghcGFnZSB8fCAhcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCkgfHwgIXBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgV2ViQ29yZTo6RWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+
cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIHNjb3BlID0gc2Vs
ZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRF
bGVtZW50KCk7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHRlc3RSYW5nZSA9IFdlYkNv
cmU6OlJhbmdlOjpjcmVhdGUoc2NvcGUtPmRvY3VtZW50KCksIHNjb3BlLCAwLCByYW5nZS0+c3Rh
cnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgICpzdGFydCA9IFdlYkNv
cmU6OlRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgodGVzdFJhbmdlLmdldCgpKTsKKworICAgIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdGVzdFJhbmdlLT5zZXRFbmQocmFuZ2UtPmVu
ZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCksIGVjKTsKKyAgICAqbGVuZ3RoID0gV2Vi
Q29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oCmluZGV4IDNlOTJkMmEuLjQ3ODE0
NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oCkBAIC05Niw2ICs5NiwxNCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHZvaWQgc2V0SW50ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVuYWJsZWQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIGJvb2wgZW5hYmxlZCk7CiAgICAgc3RhdGljIEpTVmFsdWVSZWYgY29t
cHV0ZWRTdHlsZUluY2x1ZGluZ1Zpc2l0ZWRJbmZvKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZik7
CiAgICAgc3RhdGljIHZvaWQgc2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIGJvb2wpOworCisgICAgLy8gVGV4dElucHV0Q29udHJvbGxlcgorICAgIHN0
YXRpYyB2b2lkIHNldENvbXBvc2l0aW9uKEV2YXNfT2JqZWN0KiwgY29uc3QgY2hhciosIGludCwg
aW50KTsKKyAgICBzdGF0aWMgYm9vbCBoYXNDb21wb3NpdGlvbihjb25zdCBFdmFzX09iamVjdCop
OworICAgIHN0YXRpYyBib29sIGNvbXBvc2l0aW9uUmFuZ2UoRXZhc19PYmplY3QqLCBpbnQqLCBp
bnQqKTsKKyAgICBzdGF0aWMgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oRXZhc19PYmplY3QqLCBj
b25zdCBjaGFyKik7CisgICAgc3RhdGljIFdlYkNvcmU6OkludFJlY3QgZmlyc3RSZWN0Rm9yQ2hh
cmFjdGVyUmFuZ2UoRXZhc19PYmplY3QqLCBpbnQsIGludCk7CisgICAgc3RhdGljIGJvb2wgc2Vs
ZWN0ZWRSYW5nZShFdmFzX09iamVjdCosIGludCosIGludCopOwogfTsKIAogI2VuZGlmIC8vIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbF9oCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggOWExZDFlZS4uMjhiZTg4YyAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA0
LTI3ICBLYW5naWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZM
XVtEUlRdIEltcGxlbWVudCBUZXh0SW5wdXRDb250cm9sbGVyLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1NTkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXh0SW5wdXRDb250cm9sbGVyIGhhcyBiZWVu
IGNyZWF0ZWQgZm9yIGFuIGlucHV0IGVtdWxhdGlvbiBwdXJwb3NlIGluIERSVC4KKyAgICAgICAg
SG93ZXZlciwgbm90IGxpa2Ugb3RoZXIgcG9ydHMsIEVGTCBkb2Vzbid0IGhhdmUgaXQuCisgICAg
ICAgIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCB3aWxsIGVuYWJsZSBFRkwgcG9ydCB0byBoYXZlIGFu
IGlucHV0IGVtdWxhdGlvbiBpbiBEUlQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwv
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJU
cmVlQ2hyb21lLmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbldpbmRvd09i
amVjdENsZWFyZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9UZXh0SW5wdXRDb250
cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChzZXRNYXJrZWRUZXh0Q2FsbGJhY2spOgorICAg
ICAgICAoaGFzTWFya2VkVGV4dENhbGxiYWNrKToKKyAgICAgICAgKG1hcmtlZFJhbmdlQ2FsbGJh
Y2spOgorICAgICAgICAoaW5zZXJ0VGV4dENhbGxiYWNrKToKKyAgICAgICAgKHVubWFya1RleHRD
YWxsYmFjayk6CisgICAgICAgIChmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKToK
KyAgICAgICAgKHNlbGVjdGVkUmFuZ2VDYWxsYmFjayk6CisgICAgICAgIChtYWtlVGV4dElucHV0
Q29udHJvbGxlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJbnB1dENvbnRy
b2xsZXIuaDogQWRkZWQuCisKIDIwMTItMDQtMjcgIFNjb3R0IEdyYWhhbSAgPHNjb3R0bWdAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gbWFrZSBjYXNlIG9mIG5wVGVzdE5ldHNj
YXBlUGx1Z0luLmRsbCBtYXRjaCBjYXNlIGluIGNvcHkgcnVsZQpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
ZWZsL0NNYWtlTGlzdHMudHh0CmluZGV4IDcyYTE3ZmQuLjA5ZjJiZWMgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKQEAgLTE1LDYgKzE1LDcgQEAgU0VUKER1bXBSZW5k
ZXJUcmVlX1NPVVJDRVMKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsL0pTU3Ry
aW5nVXRpbHMuY3BwCiAgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRU
ZXN0Q29udHJvbGxlckVmbC5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZs
L1BpeGVsRHVtcFN1cHBvcnRFZmwuY3BwCisgICAgJHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVl
L2VmbC9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAogICAgICR7VE9PTFNfRElSfS9EdW1wUmVuZGVy
VHJlZS9lZmwvV29ya1F1ZXVlSXRlbUVmbC5jcHAKICkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAKaW5kZXggNjMwMDQxMC4uNzU5ODRh
OCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hy
b21lLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJv
bWUuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCIKICNpbmNsdWRlICJXZWJDb3JlVGVzdFN1
cHBvcnQuaCIKICNpbmNsdWRlICJXb3JrUXVldWUuaCIKQEAgLTM1Niw2ICszNTcsMTIgQEAgdm9p
ZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25XaW5kb3dPYmplY3RDbGVhcmVkKHZvaWQqIHVzZXJE
YXRhLCBFdmFzX09iamVjdCosIHYKICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VFdmVudFNl
bmRlcihvYmplY3RDbGVhcmVkSW5mby0+Y29udGV4dCwgIUR1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6ZnJhbWVQYXJlbnQob2JqZWN0Q2xlYXJlZEluZm8tPmZyYW1lKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlLCAwKTsKIAorICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0ZXh0
SW5wdXRDb250cm9sbGVyTmFtZShKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidGV4dElu
cHV0Q29udHJvbGxlciIpKTsKKyAgICBKU09iamVjdFNldFByb3BlcnR5KG9iamVjdENsZWFyZWRJ
bmZvLT5jb250ZXh0LCBvYmplY3RDbGVhcmVkSW5mby0+d2luZG93T2JqZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dElucHV0Q29udHJvbGxlck5hbWUuZ2V0KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBtYWtlVGV4dElucHV0Q29udHJvbGxlcihvYmplY3RDbGVhcmVkSW5mby0+
Y29udGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCAwKTsKKwogICAgIFdlYkNv
cmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KG9iamVjdENsZWFyZWRJbmZvLT5j
b250ZXh0KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJ
bnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJbnB1dENv
bnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYjZkNmIK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29u
dHJvbGxlci5jcHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJ
Z2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJUZXh0SW5wdXRDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgor
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlQ2hyb21lLmgiCisjaW5jbHVkZSAiV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNPYmplY3RSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvT3BhcXVlSlNTdHJpbmcuaD4KKworc3RhdGljIEpTVmFsdWVSZWYgc2V0TWFya2Vk
VGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoIWJy
b3dzZXItPm1haW5WaWV3KCkgfHwgYXJndW1lbnRDb3VudCA8IDMpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTU3RyaW5nUmVmIHN0cmluZyA9
IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwor
CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1Np
emUoc3RyaW5nKTsKKyAgICBjaGFyKiB0ZXh0ID0gbmV3IGNoYXJbYnVmZmVyU2l6ZV07CisgICAg
SlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJpbmcsIHRleHQsIGJ1ZmZlclNpemUpOworICAgIEpT
U3RyaW5nUmVsZWFzZShzdHJpbmcpOworCisgICAgaW50IHN0YXJ0ID0gc3RhdGljX2Nhc3Q8aW50
PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKKyAg
ICBpbnQgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
YXJndW1lbnRzWzJdLCBleGNlcHRpb24pKTsKKworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6c2V0Q29tcG9zaXRpb24oYnJvd3Nlci0+bWFpblZpZXcoKSwgdGV4dCwgc3RhcnQsIGxlbmd0
aCk7CisKKyAgICBkZWxldGVbXSB0ZXh0OworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgaGFzTWFya2VkVGV4dENhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoIWJyb3dzZXItPm1haW5W
aWV3KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKwor
ICAgIHJldHVybiBKU1ZhbHVlTWFrZUJvb2xlYW4oY29udGV4dCwgRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpoYXNDb21wb3NpdGlvbihicm93c2VyLT5tYWluVmlldygpKSk7Cit9CisKK3N0YXRp
YyBKU1ZhbHVlUmVmIG1hcmtlZFJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIGlmICghYnJvd3Nlci0+bWFpblZpZXcoKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgaW50IHN0YXJ0LCBsZW5ndGg7Cisg
ICAgaWYgKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNvbXBvc2l0aW9uUmFuZ2UoYnJvd3Nl
ci0+bWFpblZpZXcoKSwgJnN0YXJ0LCAmbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNWYWx1ZVJlZiBhcnJheVZhbHVlc1syXTsK
KyAgICBhcnJheVZhbHVlc1swXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIHN0YXJ0KTsK
KyAgICBhcnJheVZhbHVlc1sxXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGxlbmd0aCk7
CisgICAgSlNPYmplY3RSZWYgYXJyYXlPYmplY3QgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0
LCAyLCBhcnJheVZhbHVlcywgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gYXJyYXlPYmplY3Q7Cit9
CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGluc2VydFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCit7CisgICAgaWYgKCFicm93c2VyLT5tYWluVmlldygpIHx8IGFyZ3VtZW50
Q291bnQgPCAxKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CisKKyAgICBKU1N0cmluZ1JlZiBzdHJpbmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKworICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNT
dHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHN0cmluZyk7CisgICAgY2hhciogdGV4dCA9
IG5ldyBjaGFyW2J1ZmZlclNpemVdOworICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoc3RyaW5n
LCB0ZXh0LCBidWZmZXJTaXplKTsKKyAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyaW5nKTsKKworICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y29uZmlybUNvbXBvc2l0aW9uKGJyb3dzZXItPm1h
aW5WaWV3KCksIHRleHQpOworCisgICAgZGVsZXRlW10gdGV4dDsKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHVubWFya1Rl
eHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFicm93
c2VyLT5tYWluVmlldygpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNvbmZpcm1Db21wb3NpdGlv
bihicm93c2VyLT5tYWluVmlldygpLCAwKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIGZpcnN0UmVjdEZvckNoYXJhY3Rl
clJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmICgh
YnJvd3Nlci0+bWFpblZpZXcoKSB8fCBhcmd1bWVudENvdW50IDwgMikKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgaW50IGxvY2F0aW9uID0gc3Rh
dGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNl
cHRpb24pKTsKKyAgICBpbnQgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1i
ZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKKworICAgIFdlYkNvcmU6Oklu
dFJlY3QgcmVjdCA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Zmlyc3RSZWN0Rm9yQ2hhcmFj
dGVyUmFuZ2UoYnJvd3Nlci0+bWFpblZpZXcoKSwgbG9jYXRpb24sIGxlbmd0aCk7CisKKyAgICBK
U1ZhbHVlUmVmIGFycmF5VmFsdWVzWzRdOworICAgIGFycmF5VmFsdWVzWzBdID0gSlNWYWx1ZU1h
a2VOdW1iZXIoY29udGV4dCwgcmVjdC54KCkpOworICAgIGFycmF5VmFsdWVzWzFdID0gSlNWYWx1
ZU1ha2VOdW1iZXIoY29udGV4dCwgcmVjdC55KCkpOworICAgIGFycmF5VmFsdWVzWzJdID0gSlNW
YWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgcmVjdC53aWR0aCgpKTsKKyAgICBhcnJheVZhbHVlc1sz
XSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIHJlY3QuaGVpZ2h0KCkpOworICAgIEpTT2Jq
ZWN0UmVmIGFycmF5T2JqZWN0ID0gSlNPYmplY3RNYWtlQXJyYXkoY29udGV4dCwgNCwgYXJyYXlW
YWx1ZXMsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIGFycmF5T2JqZWN0OworfQorCitzdGF0aWMg
SlNWYWx1ZVJlZiBzZWxlY3RlZFJhbmdlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIGlmICghYnJvd3Nlci0+bWFpblZpZXcoKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgaW50IHN0YXJ0LCBsZW5ndGg7Cisg
ICAgaWYgKCFEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNlbGVjdGVkUmFuZ2UoYnJvd3Nlci0+
bWFpblZpZXcoKSwgJnN0YXJ0LCAmbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgSlNWYWx1ZVJlZiBhcnJheVZhbHVlc1syXTsKKyAg
ICBhcnJheVZhbHVlc1swXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIHN0YXJ0KTsKKyAg
ICBhcnJheVZhbHVlc1sxXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIGxlbmd0aCk7Cisg
ICAgSlNPYmplY3RSZWYgYXJyYXlPYmplY3QgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAy
LCBhcnJheVZhbHVlcywgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gYXJyYXlPYmplY3Q7Cit9CisK
K3N0YXRpYyBKU1N0YXRpY0Z1bmN0aW9uIHN0YXRpY0Z1bmN0aW9uc1tdID0geworICAgIHsgInNl
dE1hcmtlZFRleHQiLCBzZXRNYXJrZWRUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJoYXNN
YXJrZWRUZXh0IiwgaGFzTWFya2VkVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgeyAibWFya2Vk
UmFuZ2UiLCBtYXJrZWRSYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgeyAiaW5zZXJ0VGV4dCIs
IGluc2VydFRleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgIHsgInVubWFya1RleHQiLCB1bm1hcmtU
ZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSIs
IGZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJzZWxl
Y3RlZFJhbmdlIiwgc2VsZWN0ZWRSYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgeyAwLCAwLCAw
IH0KK307CisKK3N0YXRpYyBKU0NsYXNzUmVmIGdldENsYXNzKEpTQ29udGV4dFJlZiBjb250ZXh0
KQoreworICAgIHN0YXRpYyBKU0NsYXNzUmVmIHRleHRJbnB1dENvbnRyb2xsZXJDbGFzcyA9IDA7
CisKKyAgICBpZiAoIXRleHRJbnB1dENvbnRyb2xsZXJDbGFzcykgeworICAgICAgICBKU0NsYXNz
RGVmaW5pdGlvbiBjbGFzc0RlZmluaXRpb24gPSB7CisgICAgICAgICAgICAgICAgMCwgMCwgMCwg
MCwgMCwgMCwKKyAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
fTsKKyAgICAgICAgY2xhc3NEZWZpbml0aW9uLnN0YXRpY0Z1bmN0aW9ucyA9IHN0YXRpY0Z1bmN0
aW9uczsKKworICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyQ2xhc3MgPSBKU0NsYXNzQ3JlYXRl
KCZjbGFzc0RlZmluaXRpb24pOworICAgIH0KKworICAgIHJldHVybiB0ZXh0SW5wdXRDb250cm9s
bGVyQ2xhc3M7Cit9CisKK0pTT2JqZWN0UmVmIG1ha2VUZXh0SW5wdXRDb250cm9sbGVyKEpTQ29u
dGV4dFJlZiBjb250ZXh0KQoreworICAgIHJldHVybiBKU09iamVjdE1ha2UoY29udGV4dCwgZ2V0
Q2xhc3MoY29udGV4dCksIDApOworfQorCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL1Rl
eHRJbnB1dENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
ZWUyNzE5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJ
bnB1dENvbnRyb2xsZXIuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNz
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRJbnB1dENvbnRyb2xs
ZXJfaAorI2RlZmluZSBUZXh0SW5wdXRDb250cm9sbGVyX2gKKwordHlwZWRlZiBjb25zdCBzdHJ1
Y3QgT3BhcXVlSlNDb250ZXh0KiBKU0NvbnRleHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVK
U1ZhbHVlKiBKU09iamVjdFJlZjsKKworSlNPYmplY3RSZWYgbWFrZVRleHRJbnB1dENvbnRyb2xs
ZXIoSlNDb250ZXh0UmVmKTsKKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140470</attachid>
            <date>2012-05-06 21:44:09 -0700</date>
            <delta_ts>2012-05-08 16:57:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>24216</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3ZTMyMzc5Li4zYTA3Njg2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC00NjI4LDYgKzQ2MjgsMTkgQEAKICAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS13aW4vbWVkaWEvdmlkZW8tY29sb3JzcGFjZS15dXY0
MjItZXhwZWN0ZWQudHh0OgogICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0
YXRpb25zLnR4dDoKIAorMjAxMi0wNC0yNyAgS2FuZ2lsIEhhbiAgPGthbmdpbC5oYW5Ac2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW0VGTF1bRFJUXSBJbXBsZW1lbnQgVGV4dElucHV0Q29udHJvbGxl
ci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTU5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGV4dElu
cHV0Q29udHJvbGxlciBoYXMgYmVlbiBjcmVhdGVkIGZvciBhbiBpbnB1dCBlbXVsYXRpb24gcHVy
cG9zZSBpbiBEUlQuCisgICAgICAgIEhvd2V2ZXIsIG5vdCBsaWtlIG90aGVyIHBvcnRzLCBFRkwg
ZG9lc24ndCBoYXZlIGl0LgorICAgICAgICBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggd2lsbCBlbmFi
bGUgRUZMIHBvcnQgdG8gaGF2ZSBhbiBpbnB1dCBlbXVsYXRpb24gaW4gRFJULgorCisgICAgICAg
ICogcGxhdGZvcm0vZWZsL1NraXBwZWQ6CisKIDIwMTItMDQtMjcgIFlpIFNoZW4gIDx5aS40LnNo
ZW5Abm9raWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04oMTEzNzIzKTogUHJlc3NpbmcgZW50
ZXIgaW4gdGhpcyBsaXN0IGV4YW1wbGUgZGVsZXRlcyB0aGUgd2hvbGUgbGlzdApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9lZmwvU2tpcHBlZAppbmRleCBiYjUzNzg3Li45YmZlYTIxIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9lZmwvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwv
U2tpcHBlZApAQCAtMjMzLDI2ICsyMzMsMTggQEAgZmFzdC9sb2FkZXIvZm9ybS1zdWJtaXNzaW9u
LWFmdGVyLWJlZm9yZXVubG9hZC1jYW5jZWwuaHRtbAogIyBFRkwncyBEUlQgbmVlZHMgYSBQbGFp
blRleHRDb250cm9sbGVyIGltcGxlbWVudGF0aW9uCiBlZGl0aW5nL3RleHQtaXRlcmF0b3IvYmFz
aWMtaXRlcmF0aW9uLmh0bWwKIAotIyBFRkwncyBEUlQgbmVlZHMgYSBUZXh0SW5wdXRDb250cm9s
bGVyCi1lZGl0aW5nL2lucHV0L2ltZS1jb21wb3NpdGlvbi1jbGVhcnByZWVkaXQuaHRtbAorIyBF
RkwncyBEUlQga2V5IGRvd24gYnVnCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04NDcxMAogZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlLmh0bWwK
IGVkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1wYXNzbm9kZTIuaHRtbAotZWRpdGluZy9pbnB1
dC9wYXNzd29yZC1lY2hvLXBhc3Nub2RlMy5odG1sCi1lZGl0aW5nL2lucHV0L3Bhc3N3b3JkLWVj
aG8tdGV4dG5vZGUuaHRtbAorCisjIEVGTCdzIGVkaXRvciBkb2Vzbid0IGNhbmNlbCBjb21wb3Np
dGlvbiBhcyBjaGFuZ2Ugb2YgdmFsdWUKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTg1MTIyCiBlZGl0aW5nL2lucHV0L3NldHRpbmctaW5wdXQtdmFsdWUtY2FuY2Vs
LWltZS1jb21wb3NpdGlvbi5odG1sCi1lZGl0aW5nL2luc2VydGluZy9jYXJldC1wb3NpdGlvbi5o
dG1sCi1lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtY29tcG9zaXRpb24td2hpdGVzcGFjZS5odG1s
Ci1lZGl0aW5nL3NlbGVjdGlvbi81ODI1MzUwLTEuaHRtbAotZWRpdGluZy9zZWxlY3Rpb24vNTgy
NTM1MC0yLmh0bWwKLWVkaXRpbmcvc2VsZWN0aW9uL21peGVkLWVkaXRhYmlsaXR5LTEwLmh0bWwK
LWVkaXRpbmcvc2VsZWN0aW9uL21vdmUtbGVmdC1yaWdodC5odG1sCi1mYXN0L2RvbS90YWItaW4t
cmlnaHQtYWxpZ25tZW50Lmh0bWwKLWZhc3QvZXZlbnRzL2ltZS1jb21wb3NpdGlvbi1ldmVudHMt
MDAxLmh0bWwKKworIyBFRkwncyB0ZXh0YXJlYSBhbmQgdGV4dGZpZWxkIGRvZXNuJ3QgaGFuZGxl
IHdoaXRlc3BhY2Ugc3R5bGUKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg1MTIzCiBmYXN0L2Zvcm1zL2N1cnNvci1hdC1lZGl0YWJsZS1jb250ZW50LWJvdW5kYXJ5
Lmh0bWwKLWZhc3QvZm9ybXMvaW5wdXQtbWF4bGVuZ3RoLWltZS1jb21wbGV0ZWQuaHRtbAotZmFz
dC9mb3Jtcy9pbnB1dC1tYXhsZW5ndGgtaW1lLXByZWVkaXQuaHRtbAotZmFzdC90ZXh0L2ludGVy
bmF0aW9uYWwvdGhhaS1jdXJzb3ItcG9zaXRpb24uaHRtbAotc3ZnL3RleHQvY2FyZXQtaW4tc3Zn
LXRleHQueGh0bWwKIAogIyBFRkwncyBMYXlvdXRUZXN0Q29udHJvbGxlciBkb2VzIG5vdCBpbXBs
ZW1lbnQgc2V0TWVkaWFUeXBlCiBmYXN0L21lZGlhL3ByaW50LXJlc3RvcmVzLXByZXZpb3VzLW1l
ZGlhdHlwZS5odG1sCkBAIC0xODQzLDYgKzE4MzUsOCBAQCB0cmFuc2l0aW9ucy9kZWZhdWx0LXRp
bWluZy1mdW5jdGlvbi5odG1sCiB0cmFuc2l0aW9ucy9tb3ZlLWFmdGVyLXRyYW5zaXRpb24uaHRt
bAogdHJhbnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbAogdHJhbnNpdGlv
bnMvc3ZnLXRyYW5zaXRpb25zLmh0bWwKK2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGll
cy5odG1sCitmYXN0L2RvbS9wcm90b3R5cGUtaW5oZXJpdGFuY2UtMi5odG1sCiAKICMgRUZMIERS
VCBkb2Vzbid0IGZ1bGx5IHN1cHBvcnQgaHR0cCB0ZXN0cyB5ZXQuIFRoZXNlIHRlc3RzIG1ha2Ug
dGltZW91dCBlcnJvci4KIGVkaXRpbmcvaW5wdXQvcmV2ZWFsLWNvbnRlbnRlZGl0YWJsZS1vbi1p
bnB1dC12ZXJ0aWNhbGx5Lmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA0ZGVhYmU5Li4wMjg0ZDFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xNzAsNiArMTcwLDI2IEBACiAgICAgICAgIChld2tfdmll
d19zZXR0aW5nX3dlYl9hdWRpb19zZXQpOiBRdWVyeSBpZiB0aGUgV2ViIEF1ZGlvIEFQSSBmZWF0
dXJlIGlzIGVuYWJsZWQuCiAgICAgICAgICogZXdrL2V3a192aWV3Lmg6IEFkZCB0aGUgcHJvdG90
eXBlcy4KIAorMjAxMi0wNC0yNyAgS2FuZ2lsIEhhbiAgPGthbmdpbC5oYW5Ac2Ftc3VuZy5jb20+
CisKKyAgICAgICAgW0VGTF1bRFJUXSBJbXBsZW1lbnQgVGV4dElucHV0Q29udHJvbGxlci4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTU5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGV4dElucHV0Q29u
dHJvbGxlciBoYXMgYmVlbiBjcmVhdGVkIGZvciBhbiBpbnB1dCBlbXVsYXRpb24gcHVycG9zZSBp
biBEUlQuCisgICAgICAgIEhvd2V2ZXIsIG5vdCBsaWtlIG90aGVyIHBvcnRzLCBFRkwgZG9lc24n
dCBoYXZlIGl0LgorICAgICAgICBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggd2lsbCBlbmFibGUgRUZM
IHBvcnQgdG8gaGF2ZSBhbiBpbnB1dCBlbXVsYXRpb24gaW4gRFJULgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcDoKKyAgICAgICAgKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsOjpoYXNDb21wb3NpdGlvbik6CisgICAgICAgIChEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OmNvbXBvc2l0aW9uUmFuZ2UpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpjb25maXJtQ29tcG9zaXRpb24pOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSk6CisgICAgICAgIChEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oOgorCiAyMDEyLTA0LTI3ICBDaHJpc3RvcGhl
IER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF0gUmVz
b3VyY2VFcnJvciBkb21haW4gbmVlZHMgdG8gYmUgcHJvcGVybHkgc2V0IGluIEZyYW1lTG9hZGVy
Q2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAppbmRleCA3NDk1OGZiLi45MmVlZTVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxF
dmFzLmg+CiAjaW5jbHVkZSA8RmluZE9wdGlvbnMuaD4KICNpbmNsdWRlIDxGbG9hdFNpemUuaD4K
KyNpbmNsdWRlIDxGb2N1c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxGcmFtZVZpZXcuaD4KICNp
bmNsdWRlIDxIVE1MSW5wdXRFbGVtZW50Lmg+CiAjaW5jbHVkZSA8SW5zcGVjdG9yQ29udHJvbGxl
ci5oPgpAQCAtNDIsNiArNDMsNyBAQAogI2luY2x1ZGUgPFByaW50Q29udGV4dC5oPgogI2luY2x1
ZGUgPFJlbmRlclRyZWVBc1RleHQuaD4KICNpbmNsdWRlIDxTZXR0aW5ncy5oPgorI2luY2x1ZGUg
PFRleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIuaD4KICNp
bmNsdWRlIDxiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxoaXN0b3J5L0hp
c3RvcnlJdGVtLmg+CkBAIC02MDEsMyArNjAzLDExNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoRXZhc19PYmplY3QqIGV3a1Zp
ZQogCiAgICAgY29yZVBhZ2UtPnNldHRpbmdzKCktPnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFi
bGVkKGVuYWJsZWQpOwogfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0Q29t
cG9zaXRpb24oRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRleHQsIGludCBzdGFy
dCwgaW50IGxlbmd0aCkKK3sKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdLUHJpdmF0ZTo6
Y29yZVBhZ2UoZXdrVmlldyk7CisgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKSB8fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpFZGl0b3IqIGVkaXRvciA9IHBhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCk7CisgICAgaWYg
KCFlZGl0b3IgfHwgKCFlZGl0b3ItPmNhbkVkaXQoKSAmJiAhZWRpdG9yLT5oYXNDb21wb3NpdGlv
bigpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgU3RyaW5nIGNvbXBvc2l0aW9uU3Ry
aW5nID0gU3RyaW5nOjpmcm9tVVRGOCh0ZXh0KTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6Q29tcG9z
aXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7CisgICAgdW5kZXJsaW5lcy5hcHBlbmQoV2ViQ29y
ZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUoMCwgY29tcG9zaXRpb25TdHJpbmcubGVuZ3RoKCksIFdl
YkNvcmU6OkNvbG9yKDAsIDAsIDApLCBmYWxzZSkpOworICAgIGVkaXRvci0+c2V0Q29tcG9zaXRp
b24oY29tcG9zaXRpb25TdHJpbmcsIHVuZGVybGluZXMsIHN0YXJ0LCBzdGFydCArIGxlbmd0aCk7
Cit9CisKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpoYXNDb21wb3NpdGlvbihjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBjb25zdCBXZWJDb3JlOjpQYWdlKiBwYWdl
ID0gRVdLUHJpdmF0ZTo6Y29yZVBhZ2UoZXdrVmlldyk7CisgICAgaWYgKCFwYWdlIHx8ICFwYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKSB8fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRP
ck1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBXZWJDb3Jl
OjpFZGl0b3IqIGVkaXRvciA9IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKS0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3IpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiBlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCk7Cit9CisKK2Jvb2wgRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjb21wb3NpdGlvblJhbmdlKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBpbnQqIHN0YXJ0LCBpbnQqIGxlbmd0aCkKK3sKKyAgICAqc3RhcnQgPSAqbGVuZ3RoID0g
MDsKKworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBFV0tQcml2YXRlOjpjb3JlUGFnZShld2tW
aWV3KTsKKyAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UtPmZvY3VzQ29udHJvbGxlcigpIHx8ICFwYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFdlYkNvcmU6OkVkaXRvciogZWRpdG9yID0gcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKTsKKyAgICBpZiAoIWVkaXRv
ciB8fCAhZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAqc3RhcnQgPSBlZGl0b3ItPmNvbXBvc2l0aW9uU3RhcnQoKTsKKyAgICAqbGVuZ3RoID0g
ZWRpdG9yLT5jb21wb3NpdGlvbkVuZCgpIC0gKnN0YXJ0OworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y29uZmlybUNvbXBvc2l0aW9uKEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0ZXh0KQoreworICAgIFdlYkNvcmU6OlBhZ2Uq
IHBhZ2UgPSBFV0tQcml2YXRlOjpjb3JlUGFnZShld2tWaWV3KTsKKyAgICBpZiAoIXBhZ2UgfHwg
IXBhZ2UtPmZvY3VzQ29udHJvbGxlcigpIHx8ICFwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9j
dXNlZE9yTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNvcmU6OkVkaXRv
ciogZWRpdG9yID0gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgp
LT5lZGl0b3IoKTsKKyAgICBpZiAoIWVkaXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpIHsKKyAgICAgICAgZWRpdG9yLT5pbnNlcnRUZXh0
KFN0cmluZzo6ZnJvbVVURjgodGV4dCksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKHRleHQpIHsKKyAgICAgICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oU3RyaW5n
Ojpmcm9tVVRGOCh0ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWRpdG9yLT5j
b25maXJtQ29tcG9zaXRpb24oKTsKK30KKworV2ViQ29yZTo6SW50UmVjdCBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBpbnQgbG9jYXRpb24sIGludCBsZW5ndGgpCit7CisgICAgV2ViQ29yZTo6UGFnZSogcGFn
ZSA9IEVXS1ByaXZhdGU6OmNvcmVQYWdlKGV3a1ZpZXcpOworICAgIGlmICghcGFnZSB8fCAhcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCkgfHwgIXBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2Vk
T3JNYWluRnJhbWUoKSB8fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5G
cmFtZSgpLT5lZGl0b3IoKSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFJlY3QoKTsKKwor
ICAgIGlmICgobG9jYXRpb24gKyBsZW5ndGggPCBsb2NhdGlvbikgJiYgKGxvY2F0aW9uICsgbGVu
Z3RoKSkKKyAgICAgICAgbGVuZ3RoID0gMDsKKworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9
IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBXZWJD
b3JlOjpFZGl0b3IqIGVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKKworICAgIFJlZlB0cjxXZWJD
b3JlOjpSYW5nZT4gcmFuZ2UgPSBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0
aW9uQW5kTGVuZ3RoKGZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxlbWVudE9yRG9j
dW1lbnRFbGVtZW50KCksIGxvY2F0aW9uLCBsZW5ndGgpOworICAgIGlmICghcmFuZ2UpCisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpJbnRSZWN0KCk7CisKKyAgICByZXR1cm4gZWRpdG9yLT5maXJz
dFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSk7Cit9CisKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpzZWxlY3RlZFJhbmdlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQqIHN0YXJ0LCBp
bnQqIGxlbmd0aCkKK3sKKyAgICBpZiAoIShzdGFydCAmJiBsZW5ndGgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdLUHJpdmF0ZTo6Y29yZVBh
Z2UoZXdrVmlldyk7CisgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKSB8
fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBwYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJD
b3JlOjpFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZnJhbWUtPnNlbGVjdGlvbigpLT5yb290RWRp
dGFibGVFbGVtZW50KCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogc2NvcGUgPSBzZWxlY3Rpb25S
b290ID8gc2VsZWN0aW9uUm9vdCA6IGZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQo
KTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gdGVzdFJhbmdlID0gV2ViQ29yZTo6UmFu
Z2U6OmNyZWF0ZShzY29wZS0+ZG9jdW1lbnQoKSwgc2NvcGUsIDAsIHJhbmdlLT5zdGFydENvbnRh
aW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgKnN0YXJ0ID0gV2ViQ29yZTo6VGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpOworCisgICAgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSBlYzsKKyAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5nZS0+ZW5kQ29udGFp
bmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgZWMpOworICAgICpsZW5ndGggPSBXZWJDb3JlOjpU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgKaW5kZXggYjE2NzcyMy4uZTMyYmY3ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsLmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsLmgKQEAgLTk2LDYgKzk2LDE0IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBzZXRJbnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9uRW5hYmxlZChFdmFzX09iamVjdCog
ZXdrVmlldywgYm9vbCBlbmFibGVkKTsKICAgICBzdGF0aWMgSlNWYWx1ZVJlZiBjb21wdXRlZFN0
eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKTsKICAgICBz
dGF0aWMgdm9pZCBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChFdmFzX09iamVjdCogZXdr
VmlldywgYm9vbCk7CisKKyAgICAvLyBUZXh0SW5wdXRDb250cm9sbGVyCisgICAgc3RhdGljIHZv
aWQgc2V0Q29tcG9zaXRpb24oRXZhc19PYmplY3QqLCBjb25zdCBjaGFyKiwgaW50LCBpbnQpOwor
ICAgIHN0YXRpYyBib29sIGhhc0NvbXBvc2l0aW9uKGNvbnN0IEV2YXNfT2JqZWN0Kik7CisgICAg
c3RhdGljIGJvb2wgY29tcG9zaXRpb25SYW5nZShFdmFzX09iamVjdCosIGludCosIGludCopOwor
ICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihFdmFzX09iamVjdCosIGNvbnN0IGNo
YXIqKTsKKyAgICBzdGF0aWMgV2ViQ29yZTo6SW50UmVjdCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJS
YW5nZShFdmFzX09iamVjdCosIGludCwgaW50KTsKKyAgICBzdGF0aWMgYm9vbCBzZWxlY3RlZFJh
bmdlKEV2YXNfT2JqZWN0KiwgaW50KiwgaW50Kik7CiB9OwogCiAjZW5kaWYgLy8gRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCA2NDZjNGVmLi5iYjg2YmYyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xNjU1LDYgKzE2NTUsMzEgQEAKICAgICAgICAg
KiBndGsvamhidWlsZHJjOiBEaXR0by4KICAgICAgICAgKiBqaGJ1aWxkL2poYnVpbGQtd3JhcHBl
cjogRGl0dG8uCiAKKzIwMTItMDQtMjcgIEthbmdpbCBIYW4gIDxrYW5naWwuaGFuQHNhbXN1bmcu
Y29tPgorCisgICAgICAgIFtFRkxdW0RSVF0gSW1wbGVtZW50IFRleHRJbnB1dENvbnRyb2xsZXIu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU1OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRleHRJbnB1
dENvbnRyb2xsZXIgaGFzIGJlZW4gY3JlYXRlZCBmb3IgYW4gaW5wdXQgZW11bGF0aW9uIHB1cnBv
c2UgaW4gRFJULgorICAgICAgICBIb3dldmVyLCBub3QgbGlrZSBvdGhlciBwb3J0cywgRUZMIGRv
ZXNuJ3QgaGF2ZSBpdC4KKyAgICAgICAgVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHdpbGwgZW5hYmxl
IEVGTCBwb3J0IHRvIGhhdmUgYW4gaW5wdXQgZW11bGF0aW9uIGluIERSVC4KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuY3BwOgorICAgICAgICAoRHVtcFJlbmRlclRy
ZWVDaHJvbWU6Om9uV2luZG93T2JqZWN0Q2xlYXJlZCk6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvZWZsL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHNldE1hcmtl
ZFRleHRDYWxsYmFjayk6CisgICAgICAgIChoYXNNYXJrZWRUZXh0Q2FsbGJhY2spOgorICAgICAg
ICAobWFya2VkUmFuZ2VDYWxsYmFjayk6CisgICAgICAgIChpbnNlcnRUZXh0Q2FsbGJhY2spOgor
ICAgICAgICAodW5tYXJrVGV4dENhbGxiYWNrKToKKyAgICAgICAgKGZpcnN0UmVjdEZvckNoYXJh
Y3RlclJhbmdlQ2FsbGJhY2spOgorICAgICAgICAoc2VsZWN0ZWRSYW5nZUNhbGxiYWNrKToKKyAg
ICAgICAgKG1ha2VUZXh0SW5wdXRDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5oOiBBZGRlZC4KKwogMjAxMi0wNC0yNyAgU2NvdHQg
R3JhaGFtICA8c2NvdHRtZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBtYWtl
IGNhc2Ugb2YgbnBUZXN0TmV0c2NhcGVQbHVnSW4uZGxsIG1hdGNoIGNhc2UgaW4gY29weSBydWxl
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKaW5kZXggYWQwYWUyZC4uMDQx
NmUwMSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMudHh0
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dApAQCAtMTUsNiAr
MTUsNyBAQCBTRVQoRHVtcFJlbmRlclRyZWVfU09VUkNFUwogICAgICR7VE9PTFNfRElSfS9EdW1w
UmVuZGVyVHJlZS9lZmwvSlNTdHJpbmdVdGlscy5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVtcFJl
bmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAogICAgICR7VE9PTFNfRElS
fS9EdW1wUmVuZGVyVHJlZS9lZmwvUGl4ZWxEdW1wU3VwcG9ydEVmbC5jcHAKKyAgICAke1RPT0xT
X0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCiAgICAgJHtU
T09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9Xb3JrUXVldWVJdGVtRWZsLmNwcAogKQogCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcApp
bmRleCA3ZmUxYzE5Li4zZjcxMjZlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9l
ZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Vm
bC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJH
Q0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiVGV4dElucHV0Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgogI2lu
Y2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgpAQCAt
MzYyLDYgKzM2MywxMiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbldpbmRvd09iamVj
dENsZWFyZWQodm9pZCogdXNlckRhdGEsIEV2YXNfT2JqZWN0KiwgdgogICAgICAgICAgICAgICAg
ICAgICAgICAgbWFrZUV2ZW50U2VuZGVyKG9iamVjdENsZWFyZWRJbmZvLT5jb250ZXh0LCAhRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmcmFtZVBhcmVudChvYmplY3RDbGVhcmVkSW5mby0+ZnJh
bWUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIDApOwogCisgICAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHRleHRJbnB1dENvbnRyb2xsZXJOYW1lKEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJ0ZXh0SW5wdXRDb250cm9sbGVyIikpOworICAgIEpTT2JqZWN0U2V0UHJv
cGVydHkob2JqZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQsIG9iamVjdENsZWFyZWRJbmZvLT53aW5k
b3dPYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0SW5wdXRDb250cm9sbGVyTmFt
ZS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VUZXh0SW5wdXRDb250cm9sbGVy
KG9iamVjdENsZWFyZWRJbmZvLT5jb250ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUsIDApOworCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3Qo
b2JqZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNjJiNmQ2YgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2VmbC9UZXh0SW5wdXRDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ft
c3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRJbnB1dENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUg
IkR1bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVDaHJvbWUuaCIKKyNp
bmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oPgorCitzdGF0aWMg
SlNWYWx1ZVJlZiBzZXRNYXJrZWRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIGlmICghYnJvd3Nlci0+bWFpblZpZXcoKSB8fCBhcmd1bWVudENvdW50IDwg
MykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAg
SlNTdHJpbmdSZWYgc3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMF0sIGV4Y2VwdGlvbik7CisKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IEpTU3RyaW5nR2V0
TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJpbmcpOworICAgIGNoYXIqIHRleHQgPSBuZXcgY2hh
cltidWZmZXJTaXplXTsKKyAgICBKU1N0cmluZ0dldFVURjhDU3RyaW5nKHN0cmluZywgdGV4dCwg
YnVmZmVyU2l6ZSk7CisgICAgSlNTdHJpbmdSZWxlYXNlKHN0cmluZyk7CisKKyAgICBpbnQgc3Rh
cnQgPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNb
MV0sIGV4Y2VwdGlvbikpOworICAgIGludCBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4Y2VwdGlvbikpOworCisgICAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRDb21wb3NpdGlvbihicm93c2VyLT5tYWluVmlldygp
LCB0ZXh0LCBzdGFydCwgbGVuZ3RoKTsKKworICAgIGRlbGV0ZVtdIHRleHQ7CisgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBo
YXNNYXJrZWRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAg
IGlmICghYnJvd3Nlci0+bWFpblZpZXcoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlQm9vbGVhbihjb250ZXh0
LCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Omhhc0NvbXBvc2l0aW9uKGJyb3dzZXItPm1haW5W
aWV3KCkpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgbWFya2VkUmFuZ2VDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFicm93c2VyLT5tYWluVmlldygp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBp
bnQgc3RhcnQsIGxlbmd0aDsKKyAgICBpZiAoIUR1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y29t
cG9zaXRpb25SYW5nZShicm93c2VyLT5tYWluVmlldygpLCAmc3RhcnQsICZsZW5ndGgpKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1ZhbHVl
UmVmIGFycmF5VmFsdWVzWzJdOworICAgIGFycmF5VmFsdWVzWzBdID0gSlNWYWx1ZU1ha2VOdW1i
ZXIoY29udGV4dCwgc3RhcnQpOworICAgIGFycmF5VmFsdWVzWzFdID0gSlNWYWx1ZU1ha2VOdW1i
ZXIoY29udGV4dCwgbGVuZ3RoKTsKKyAgICBKU09iamVjdFJlZiBhcnJheU9iamVjdCA9IEpTT2Jq
ZWN0TWFrZUFycmF5KGNvbnRleHQsIDIsIGFycmF5VmFsdWVzLCBleGNlcHRpb24pOworICAgIHJl
dHVybiBhcnJheU9iamVjdDsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgaW5zZXJ0VGV4dENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoIWJyb3dzZXItPm1h
aW5WaWV3KCkgfHwgYXJndW1lbnRDb3VudCA8IDEpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTU3RyaW5nUmVmIHN0cmluZyA9IEpTVmFsdWVU
b1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworCisgICAgc2l6
ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoc3RyaW5n
KTsKKyAgICBjaGFyKiB0ZXh0ID0gbmV3IGNoYXJbYnVmZmVyU2l6ZV07CisgICAgSlNTdHJpbmdH
ZXRVVEY4Q1N0cmluZyhzdHJpbmcsIHRleHQsIGJ1ZmZlclNpemUpOworICAgIEpTU3RyaW5nUmVs
ZWFzZShzdHJpbmcpOworCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjb25maXJtQ29t
cG9zaXRpb24oYnJvd3Nlci0+bWFpblZpZXcoKSwgdGV4dCk7CisKKyAgICBkZWxldGVbXSB0ZXh0
OworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGlj
IEpTVmFsdWVSZWYgdW5tYXJrVGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICBpZiAoIWJyb3dzZXItPm1haW5WaWV3KCkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6Y29uZmlybUNvbXBvc2l0aW9uKGJyb3dzZXItPm1haW5WaWV3KCksIDApOworICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYg
Zmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgaWYgKCFicm93c2VyLT5tYWluVmlldygpIHx8IGFyZ3VtZW50Q291bnQg
PCAyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAg
ICBpbnQgbG9jYXRpb24gPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIGludCBsZW5ndGggPSBzdGF0aWNfY2Fz
dDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikp
OworCisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0ID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
OjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShicm93c2VyLT5tYWluVmlldygpLCBsb2NhdGlv
biwgbGVuZ3RoKTsKKworICAgIEpTVmFsdWVSZWYgYXJyYXlWYWx1ZXNbNF07CisgICAgYXJyYXlW
YWx1ZXNbMF0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCByZWN0LngoKSk7CisgICAgYXJy
YXlWYWx1ZXNbMV0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCByZWN0LnkoKSk7CisgICAg
YXJyYXlWYWx1ZXNbMl0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCByZWN0LndpZHRoKCkp
OworICAgIGFycmF5VmFsdWVzWzNdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgcmVjdC5o
ZWlnaHQoKSk7CisgICAgSlNPYmplY3RSZWYgYXJyYXlPYmplY3QgPSBKU09iamVjdE1ha2VBcnJh
eShjb250ZXh0LCA0LCBhcnJheVZhbHVlcywgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gYXJyYXlP
YmplY3Q7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNlbGVjdGVkUmFuZ2VDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFicm93c2VyLT5tYWluVmlldygp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBp
bnQgc3RhcnQsIGxlbmd0aDsKKyAgICBpZiAoIUR1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2Vs
ZWN0ZWRSYW5nZShicm93c2VyLT5tYWluVmlldygpLCAmc3RhcnQsICZsZW5ndGgpKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBKU1ZhbHVlUmVm
IGFycmF5VmFsdWVzWzJdOworICAgIGFycmF5VmFsdWVzWzBdID0gSlNWYWx1ZU1ha2VOdW1iZXIo
Y29udGV4dCwgc3RhcnQpOworICAgIGFycmF5VmFsdWVzWzFdID0gSlNWYWx1ZU1ha2VOdW1iZXIo
Y29udGV4dCwgbGVuZ3RoKTsKKyAgICBKU09iamVjdFJlZiBhcnJheU9iamVjdCA9IEpTT2JqZWN0
TWFrZUFycmF5KGNvbnRleHQsIDIsIGFycmF5VmFsdWVzLCBleGNlcHRpb24pOworICAgIHJldHVy
biBhcnJheU9iamVjdDsKK30KKworc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rp
b25zW10gPSB7CisgICAgeyAic2V0TWFya2VkVGV4dCIsIHNldE1hcmtlZFRleHRDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgIHsgImhhc01hcmtlZFRleHQiLCBoYXNNYXJrZWRUZXh0Q2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICB7ICJtYXJrZWRSYW5nZSIsIG1hcmtlZFJhbmdlQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
KyAgICB7ICJpbnNlcnRUZXh0IiwgaW5zZXJ0VGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgeyAi
dW5tYXJrVGV4dCIsIHVubWFya1RleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgIHsgImZpcnN0UmVj
dEZvckNoYXJhY3RlclJhbmdlIiwgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgIHsgInNlbGVjdGVkUmFuZ2UiLCBzZWxlY3RlZFJhbmdlQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICB7IDAsIDAsIDAgfQorfTsKKworc3RhdGljIEpTQ2xhc3NSZWYgZ2V0Q2xhc3Mo
SlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgc3RhdGljIEpTQ2xhc3NSZWYgdGV4dElucHV0
Q29udHJvbGxlckNsYXNzID0gMDsKKworICAgIGlmICghdGV4dElucHV0Q29udHJvbGxlckNsYXNz
KSB7CisgICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5pdGlvbiA9IHsKKyAgICAg
ICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICAgICAgICBjbGFzc0RlZmluaXRpb24uc3RhdGljRnVu
Y3Rpb25zID0gc3RhdGljRnVuY3Rpb25zOworCisgICAgICAgIHRleHRJbnB1dENvbnRyb2xsZXJD
bGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlvbik7CisgICAgfQorCisgICAgcmV0
dXJuIHRleHRJbnB1dENvbnRyb2xsZXJDbGFzczsKK30KKworSlNPYmplY3RSZWYgbWFrZVRleHRJ
bnB1dENvbnRyb2xsZXIoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIEpTT2Jq
ZWN0TWFrZShjb250ZXh0LCBnZXRDbGFzcyhjb250ZXh0KSwgMCk7Cit9CisKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9UZXh0SW5wdXRDb250cm9sbGVyLmggYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjVlZTI3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5oCkBAIC0wLDAgKzEsMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgVGV4dElucHV0Q29udHJvbGxlcl9oCisjZGVmaW5lIFRleHRJbnB1dENvbnRyb2xsZXJfaAor
Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKK3R5
cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTT2JqZWN0UmVmOworCitKU09iamVjdFJlZiBt
YWtlVGV4dElucHV0Q29udHJvbGxlcihKU0NvbnRleHRSZWYpOworCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140819</attachid>
            <date>2012-05-08 16:58:03 -0700</date>
            <delta_ts>2012-05-08 22:55:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78559-20120509085804.patch</filename>
            <type>text/plain</type>
            <size>24298</size>
            <attacher name="Kangil Han">kangil.han</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2Mzc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggNDlmYTk2YjEx
NzJkZmZjZjczNTE4NDhhMTBlMmJlNGQzMjNiMzU0OS4uMTBhYjg5YWQ1YThhZjYzNzUyZmNjZjI3
Y2UyZmU2MjMwZWE2NDgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEy
LTA1LTA4ICBLYW5naWwgSGFuICA8a2FuZ2lsLmhhbkBzYW1zdW5nLmNvbT4KKworICAgICAgICBb
RUZMXVtEUlRdIEltcGxlbWVudCBUZXh0SW5wdXRDb250cm9sbGVyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg1NTkKKworICAgICAgICBSZXZpZXdl
ZCBieSBNYXJ0aW4gUm9iaW5zb24uCisKKyAgICAgICAgVGV4dElucHV0Q29udHJvbGxlciBoYXMg
YmVlbiBjcmVhdGVkIGZvciBhbiBpbnB1dCBlbXVsYXRpb24gcHVycG9zZSBpbiBEUlQuCisgICAg
ICAgIEhvd2V2ZXIsIG5vdCBsaWtlIG90aGVyIHBvcnRzLCBFRkwgZG9lc24ndCBoYXZlIGl0Lgor
ICAgICAgICBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggd2lsbCBlbmFibGUgRUZMIHBvcnQgdG8gaGF2
ZSBhbiBpbnB1dCBlbXVsYXRpb24gaW4gRFJULgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsOjpoYXNDb21wb3NpdGlvbik6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OmNvbXBvc2l0aW9uUmFuZ2UpOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpj
b25maXJtQ29tcG9zaXRpb24pOgorICAgICAgICAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpm
aXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZSk6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6OnNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbC5oOgorCiAyMDEyLTA1LTA3ICBNaWtoYWlsIFBvemRueWFrb3YgIDxt
aWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdIFBhZ2UgY2FjaGlu
ZyBwZXJtaXNzaW9uIGZyb20gRUZMJ3MgRnJhbWVMb2FkZXJDbGllbnQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmwuY3BwCmluZGV4IDliMjgwNDZmOGNiZGEwYzIzN2YyNTNkYjU0NTc2NjE0MzJjZTk4ODAu
LmQ4YjM3MjE3Y2U5Y2Y1MWQ1NDU4OGY0MWE2YjMzYTNlZGRjMDQwNjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsLmNwcApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPFByaW50Q29udGV4dC5o
PgogI2luY2x1ZGUgPFJlbmRlclRyZWVBc1RleHQuaD4KICNpbmNsdWRlIDxTZXR0aW5ncy5oPgor
I2luY2x1ZGUgPFRleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYktpdE11dGF0aW9uT2JzZXJ2
ZXIuaD4KICNpbmNsdWRlIDxiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxo
aXN0b3J5L0hpc3RvcnlJdGVtLmg+CkBAIC02MjAsMyArNjIxLDExNyBAQCB2b2lkIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoRXZhc19PYmpl
Y3QqIGV3a1ZpZQogCiAgICAgY29yZVBhZ2UtPnNldHRpbmdzKCktPnNldEF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkKGVuYWJsZWQpOwogfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6c2V0Q29tcG9zaXRpb24oRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRleHQs
IGludCBzdGFydCwgaW50IGxlbmd0aCkKK3sKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdL
UHJpdmF0ZTo6Y29yZVBhZ2UoZXdrVmlldyk7CisgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKSB8fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5G
cmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJDb3JlOjpFZGl0b3IqIGVkaXRvciA9
IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCk7
CisgICAgaWYgKCFlZGl0b3IgfHwgKCFlZGl0b3ItPmNhbkVkaXQoKSAmJiAhZWRpdG9yLT5oYXND
b21wb3NpdGlvbigpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgU3RyaW5nIGNvbXBv
c2l0aW9uU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOCh0ZXh0KTsKKyAgICBWZWN0b3I8V2ViQ29y
ZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+IHVuZGVybGluZXM7CisgICAgdW5kZXJsaW5lcy5hcHBl
bmQoV2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUoMCwgY29tcG9zaXRpb25TdHJpbmcubGVu
Z3RoKCksIFdlYkNvcmU6OkNvbG9yKDAsIDAsIDApLCBmYWxzZSkpOworICAgIGVkaXRvci0+c2V0
Q29tcG9zaXRpb24oY29tcG9zaXRpb25TdHJpbmcsIHVuZGVybGluZXMsIHN0YXJ0LCBzdGFydCAr
IGxlbmd0aCk7Cit9CisKK2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpoYXNDb21wb3Np
dGlvbihjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBjb25zdCBXZWJDb3JlOjpQ
YWdlKiBwYWdlID0gRVdLUHJpdmF0ZTo6Y29yZVBhZ2UoZXdrVmlldyk7CisgICAgaWYgKCFwYWdl
IHx8ICFwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKSB8fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkt
PmZvY3VzZWRPck1haW5GcmFtZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25z
dCBXZWJDb3JlOjpFZGl0b3IqIGVkaXRvciA9IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1
c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCk7CisgICAgaWYgKCFlZGl0b3IpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCk7Cit9CisK
K2Jvb2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjb21wb3NpdGlvblJhbmdlKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBpbnQqIHN0YXJ0LCBpbnQqIGxlbmd0aCkKK3sKKyAgICAqc3RhcnQgPSAq
bGVuZ3RoID0gMDsKKworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBFV0tQcml2YXRlOjpjb3Jl
UGFnZShld2tWaWV3KTsKKyAgICBpZiAoIXBhZ2UgfHwgIXBhZ2UtPmZvY3VzQ29udHJvbGxlcigp
IHx8ICFwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkNvcmU6OkVkaXRvciogZWRpdG9yID0gcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKTsKKyAgICBp
ZiAoIWVkaXRvciB8fCAhZWRpdG9yLT5oYXNDb21wb3NpdGlvbigpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAqc3RhcnQgPSBlZGl0b3ItPmNvbXBvc2l0aW9uU3RhcnQoKTsKKyAgICAq
bGVuZ3RoID0gZWRpdG9yLT5jb21wb3NpdGlvbkVuZCgpIC0gKnN0YXJ0OworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y29uZmlybUNvbXBvc2l0
aW9uKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0ZXh0KQoreworICAgIFdlYkNv
cmU6OlBhZ2UqIHBhZ2UgPSBFV0tQcml2YXRlOjpjb3JlUGFnZShld2tWaWV3KTsKKyAgICBpZiAo
IXBhZ2UgfHwgIXBhZ2UtPmZvY3VzQ29udHJvbGxlcigpIHx8ICFwYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkNv
cmU6OkVkaXRvciogZWRpdG9yID0gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1h
aW5GcmFtZSgpLT5lZGl0b3IoKTsKKyAgICBpZiAoIWVkaXRvcikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFlZGl0b3ItPmhhc0NvbXBvc2l0aW9uKCkpIHsKKyAgICAgICAgZWRpdG9yLT5p
bnNlcnRUZXh0KFN0cmluZzo6ZnJvbVVURjgodGV4dCksIDApOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKHRleHQpIHsKKyAgICAgICAgZWRpdG9yLT5jb25maXJtQ29tcG9zaXRp
b24oU3RyaW5nOjpmcm9tVVRGOCh0ZXh0KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
ZWRpdG9yLT5jb25maXJtQ29tcG9zaXRpb24oKTsKK30KKworV2ViQ29yZTo6SW50UmVjdCBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRFZmw6OmZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBpbnQgbG9jYXRpb24sIGludCBsZW5ndGgpCit7CisgICAgV2ViQ29yZTo6
UGFnZSogcGFnZSA9IEVXS1ByaXZhdGU6OmNvcmVQYWdlKGV3a1ZpZXcpOworICAgIGlmICghcGFn
ZSB8fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkgfHwgIXBhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LT5mb2N1c2VkT3JNYWluRnJhbWUoKSB8fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3Vz
ZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKSkKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFJl
Y3QoKTsKKworICAgIGlmICgobG9jYXRpb24gKyBsZW5ndGggPCBsb2NhdGlvbikgJiYgKGxvY2F0
aW9uICsgbGVuZ3RoKSkKKyAgICAgICAgbGVuZ3RoID0gMDsKKworICAgIFdlYkNvcmU6OkZyYW1l
KiBmcmFtZSA9IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsK
KyAgICBXZWJDb3JlOjpFZGl0b3IqIGVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKKworICAgIFJl
ZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdl
RnJvbUxvY2F0aW9uQW5kTGVuZ3RoKGZyYW1lLT5zZWxlY3Rpb24oKS0+cm9vdEVkaXRhYmxlRWxl
bWVudE9yRG9jdW1lbnRFbGVtZW50KCksIGxvY2F0aW9uLCBsZW5ndGgpOworICAgIGlmICghcmFu
Z2UpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpJbnRSZWN0KCk7CisKKyAgICByZXR1cm4gZWRp
dG9yLT5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSk7Cit9CisKK2Jvb2wgRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsOjpzZWxlY3RlZFJhbmdlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQq
IHN0YXJ0LCBpbnQqIGxlbmd0aCkKK3sKKyAgICBpZiAoIShzdGFydCAmJiBsZW5ndGgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gRVdLUHJpdmF0
ZTo6Y29yZVBhZ2UoZXdrVmlldyk7CisgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKSB8fCAhcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBw
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgUmVmUHRy
PFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBXZWJDb3JlOjpFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZnJhbWUtPnNlbGVjdGlvbigp
LT5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogc2NvcGUgPSBz
ZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IGZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gdGVzdFJhbmdlID0gV2Vi
Q29yZTo6UmFuZ2U6OmNyZWF0ZShzY29wZS0+ZG9jdW1lbnQoKSwgc2NvcGUsIDAsIHJhbmdlLT5z
dGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgKnN0YXJ0ID0gV2Vi
Q29yZTo6VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aCh0ZXN0UmFuZ2UuZ2V0KCkpOworCisgICAg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSBlYzsKKyAgICB0ZXN0UmFuZ2UtPnNldEVuZChyYW5nZS0+
ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSwgZWMpOworICAgICpsZW5ndGggPSBX
ZWJDb3JlOjpUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHRlc3RSYW5nZS5nZXQoKSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVT
dXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIGIvU291cmNlL1dlYktpdC9lZmwvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgKaW5kZXggZDY1ZmE3NGM0MjU1
MzlkZDY4MzBiYzEyMDIzZGRiY2FhYTQ5YzYyYi4uM2I1M2NhODNhOGRkODQxYzAwNjgzMTRiMTRl
YmVmM2E3YmY2YjBkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgKQEAgLTk4LDYgKzk4LDE0IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRJbnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9uRW5h
YmxlZChFdmFzX09iamVjdCogZXdrVmlldywgYm9vbCBlbmFibGVkKTsKICAgICBzdGF0aWMgSlNW
YWx1ZVJlZiBjb21wdXRlZFN0eWxlSW5jbHVkaW5nVmlzaXRlZEluZm8oSlNDb250ZXh0UmVmLCBK
U1ZhbHVlUmVmKTsKICAgICBzdGF0aWMgdm9pZCBzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxl
ZChFdmFzX09iamVjdCogZXdrVmlldywgYm9vbCk7CisKKyAgICAvLyBUZXh0SW5wdXRDb250cm9s
bGVyCisgICAgc3RhdGljIHZvaWQgc2V0Q29tcG9zaXRpb24oRXZhc19PYmplY3QqLCBjb25zdCBj
aGFyKiwgaW50LCBpbnQpOworICAgIHN0YXRpYyBib29sIGhhc0NvbXBvc2l0aW9uKGNvbnN0IEV2
YXNfT2JqZWN0Kik7CisgICAgc3RhdGljIGJvb2wgY29tcG9zaXRpb25SYW5nZShFdmFzX09iamVj
dCosIGludCosIGludCopOworICAgIHN0YXRpYyB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihFdmFz
X09iamVjdCosIGNvbnN0IGNoYXIqKTsKKyAgICBzdGF0aWMgV2ViQ29yZTo6SW50UmVjdCBmaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShFdmFzX09iamVjdCosIGludCwgaW50KTsKKyAgICBzdGF0
aWMgYm9vbCBzZWxlY3RlZFJhbmdlKEV2YXNfT2JqZWN0KiwgaW50KiwgaW50Kik7CiB9OwogCiAj
ZW5kaWYgLy8gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsX2gKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3YjYyM2E5Y2RkODFiYWZmNWZmZTFkN2Zl
OGMxN2ZkZjE3YjIzNDlkLi43MGQ5NzBiYzE1MjE1YjEwY2Y2YjhmOWZmZDg2NDBjNjA0MGQ2ZDUx
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjggQEAKKzIwMTItMDUtMDggIEthbmdpbCBIYW4gIDxrYW5naWwuaGFuQHNhbXN1bmcu
Y29tPgorCisgICAgICAgIFtFRkxdW0RSVF0gSW1wbGVtZW50IFRleHRJbnB1dENvbnRyb2xsZXIu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODU1OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KKworICAgICAgICBUZXh0SW5w
dXRDb250cm9sbGVyIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIGFuIGlucHV0IGVtdWxhdGlvbiBwdXJw
b3NlIGluIERSVC4KKyAgICAgICAgSG93ZXZlciwgbm90IGxpa2Ugb3RoZXIgcG9ydHMsIEVGTCBk
b2Vzbid0IGhhdmUgaXQuCisgICAgICAgIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCB3aWxsIGVuYWJs
ZSBFRkwgcG9ydCB0byBoYXZlIGFuIGlucHV0IGVtdWxhdGlvbiBpbiBEUlQuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJU
cmVlQ2hyb21lOjpvbldpbmRvd09iamVjdENsZWFyZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2VmbC9UZXh0SW5wdXRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChzZXRNYXJr
ZWRUZXh0Q2FsbGJhY2spOgorICAgICAgICAoaGFzTWFya2VkVGV4dENhbGxiYWNrKToKKyAgICAg
ICAgKG1hcmtlZFJhbmdlQ2FsbGJhY2spOgorICAgICAgICAoaW5zZXJ0VGV4dENhbGxiYWNrKToK
KyAgICAgICAgKHVubWFya1RleHRDYWxsYmFjayk6CisgICAgICAgIChmaXJzdFJlY3RGb3JDaGFy
YWN0ZXJSYW5nZUNhbGxiYWNrKToKKyAgICAgICAgKHNlbGVjdGVkUmFuZ2VDYWxsYmFjayk6Cisg
ICAgICAgIChtYWtlVGV4dElucHV0Q29udHJvbGxlcik6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvZWZsL1RleHRJbnB1dENvbnRyb2xsZXIuaDogQWRkZWQuCisKIDIwMTItMDUtMDcgIFJhcGhh
ZWwgS3VibyBkYSBDb3N0YSAgPHJha3Vjb0BGcmVlQlNELm9yZz4KIAogICAgICAgICB3ZWJraXRk
aXJzLnBtOiBNYWtlIGRldGVybWluZU51bWJlck9mQ1BVcyB3b3JrIG9uIEZyZWVCU0QuCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9lZmwvQ01ha2VMaXN0cy50eHQKaW5kZXggYWQwYWUyZGNiNTEzMTRhNmZh
NTIyMTA3OWI2Mjc1ZDAxY2Y5OGIyNi4uMDQxNmUwMTIxMTUyMDVhYjg2ODAwMTBhZTY4Yzg3Njhh
NjllMTY4ZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9DTWFrZUxpc3RzLnR4dApAQCAtMTUs
NiArMTUsNyBAQCBTRVQoRHVtcFJlbmRlclRyZWVfU09VUkNFUwogICAgICR7VE9PTFNfRElSfS9E
dW1wUmVuZGVyVHJlZS9lZmwvSlNTdHJpbmdVdGlscy5jcHAKICAgICAke1RPT0xTX0RJUn0vRHVt
cFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAogICAgICR7VE9PTFNf
RElSfS9EdW1wUmVuZGVyVHJlZS9lZmwvUGl4ZWxEdW1wU3VwcG9ydEVmbC5jcHAKKyAgICAke1RP
T0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCiAgICAg
JHtUT09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2VmbC9Xb3JrUXVldWVJdGVtRWZsLmNwcAogKQog
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJv
bWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNw
cAppbmRleCAxMGY1ZjhkZWJlNDJiYmZmOWJlOGIwNGU2ZDUyMGM3NmQ3YTZjNTkxLi42OTc0MzEx
OWM1MTJkYjk3YzNjYjlmMGJkYmVlYmFjZjMwOTg5MGMwIDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiVGV4dElucHV0Q29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbC5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgogI2luY2x1ZGUgIldvcmtR
dWV1ZS5oIgpAQCAtMzY0LDYgKzM2NSwxMiBAQCB2b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpv
bldpbmRvd09iamVjdENsZWFyZWQodm9pZCogdXNlckRhdGEsIEV2YXNfT2JqZWN0KiwgdgogICAg
ICAgICAgICAgICAgICAgICAgICAgbWFrZUV2ZW50U2VuZGVyKG9iamVjdENsZWFyZWRJbmZvLT5j
b250ZXh0LCAhRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmcmFtZVBhcmVudChvYmplY3RDbGVh
cmVkSW5mby0+ZnJhbWUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUsIDApOwogCisg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRleHRJbnB1dENvbnRyb2xsZXJOYW1lKEpTU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0ZXh0SW5wdXRDb250cm9sbGVyIikpOworICAgIEpT
T2JqZWN0U2V0UHJvcGVydHkob2JqZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQsIG9iamVjdENsZWFy
ZWRJbmZvLT53aW5kb3dPYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0SW5wdXRD
b250cm9sbGVyTmFtZS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VUZXh0SW5w
dXRDb250cm9sbGVyKG9iamVjdENsZWFyZWRJbmZvLT5jb250ZXh0KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUsIDApOworCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJbnRl
cm5hbHNPYmplY3Qob2JqZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQpOwogfQogCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjJiNmQ2YmU4M2EwY2JlYzZhOTExOWFhZDNjM2I3YzlmMTU1ZTk4ZAotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9UZXh0SW5wdXRDb250cm9sbGVyLmNwcApAQCAt
MCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRJbnB1dENvbnRy
b2xsZXIuaCIKKworI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCisjaW5jbHVkZSAiRHVtcFJl
bmRlclRyZWVDaHJvbWUuaCIKKyNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmwuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVK
U1N0cmluZy5oPgorCitzdGF0aWMgSlNWYWx1ZVJlZiBzZXRNYXJrZWRUZXh0Q2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmICghYnJvd3Nlci0+bWFpblZpZXco
KSB8fCBhcmd1bWVudENvdW50IDwgMykKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworCisgICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisKKyAgICBzaXplX3QgYnVm
ZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJpbmcpOworICAg
IGNoYXIqIHRleHQgPSBuZXcgY2hhcltidWZmZXJTaXplXTsKKyAgICBKU1N0cmluZ0dldFVURjhD
U3RyaW5nKHN0cmluZywgdGV4dCwgYnVmZmVyU2l6ZSk7CisgICAgSlNTdHJpbmdSZWxlYXNlKHN0
cmluZyk7CisKKyAgICBpbnQgc3RhcnQgPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJl
cihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOworICAgIGludCBsZW5ndGggPSBz
dGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMl0sIGV4
Y2VwdGlvbikpOworCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRDb21wb3NpdGlv
bihicm93c2VyLT5tYWluVmlldygpLCB0ZXh0LCBzdGFydCwgbGVuZ3RoKTsKKworICAgIGRlbGV0
ZVtdIHRleHQ7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQor
CitzdGF0aWMgSlNWYWx1ZVJlZiBoYXNNYXJrZWRUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIGlmICghYnJvd3Nlci0+bWFpblZpZXcoKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgcmV0dXJuIEpTVmFs
dWVNYWtlQm9vbGVhbihjb250ZXh0LCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Omhhc0NvbXBv
c2l0aW9uKGJyb3dzZXItPm1haW5WaWV3KCkpKTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgbWFy
a2VkUmFuZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYg
KCFicm93c2VyLT5tYWluVmlldygpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CisKKyAgICBpbnQgc3RhcnQsIGxlbmd0aDsKKyAgICBpZiAoIUR1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6Y29tcG9zaXRpb25SYW5nZShicm93c2VyLT5tYWluVmlldygpLCAm
c3RhcnQsICZsZW5ndGgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisKKyAgICBKU1ZhbHVlUmVmIGFycmF5VmFsdWVzWzJdOworICAgIGFycmF5VmFsdWVz
WzBdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgc3RhcnQpOworICAgIGFycmF5VmFsdWVz
WzFdID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgbGVuZ3RoKTsKKyAgICBKU09iamVjdFJl
ZiBhcnJheU9iamVjdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDIsIGFycmF5VmFsdWVz
LCBleGNlcHRpb24pOworICAgIHJldHVybiBhcnJheU9iamVjdDsKK30KKworc3RhdGljIEpTVmFs
dWVSZWYgaW5zZXJ0VGV4dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sK
KyAgICBpZiAoIWJyb3dzZXItPm1haW5WaWV3KCkgfHwgYXJndW1lbnRDb3VudCA8IDEpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIEpTU3RyaW5n
UmVmIHN0cmluZyA9IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzBdLCBl
eGNlcHRpb24pOworCisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBKU1N0cmluZ0dldE1heGltdW1V
VEY4Q1N0cmluZ1NpemUoc3RyaW5nKTsKKyAgICBjaGFyKiB0ZXh0ID0gbmV3IGNoYXJbYnVmZmVy
U2l6ZV07CisgICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJpbmcsIHRleHQsIGJ1ZmZlclNp
emUpOworICAgIEpTU3RyaW5nUmVsZWFzZShzdHJpbmcpOworCisgICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpjb25maXJtQ29tcG9zaXRpb24oYnJvd3Nlci0+bWFpblZpZXcoKSwgdGV4dCk7
CisKKyAgICBkZWxldGVbXSB0ZXh0OworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKK30KKworc3RhdGljIEpTVmFsdWVSZWYgdW5tYXJrVGV4dENhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoIWJyb3dzZXItPm1haW5WaWV3KCkp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y29uZmlybUNvbXBvc2l0aW9uKGJyb3dzZXItPm1haW5W
aWV3KCksIDApOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30K
Kworc3RhdGljIEpTVmFsdWVSZWYgZmlyc3RSZWN0Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRo
aXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50
c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKCFicm93c2VyLT5tYWluVmll
dygpIHx8IGFyZ3VtZW50Q291bnQgPCAyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CisKKyAgICBpbnQgbG9jYXRpb24gPSBzdGF0aWNfY2FzdDxpbnQ+KEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIGlu
dCBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1
bWVudHNbMV0sIGV4Y2VwdGlvbikpOworCisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0ID0gRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZShicm93c2Vy
LT5tYWluVmlldygpLCBsb2NhdGlvbiwgbGVuZ3RoKTsKKworICAgIEpTVmFsdWVSZWYgYXJyYXlW
YWx1ZXNbNF07CisgICAgYXJyYXlWYWx1ZXNbMF0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0
LCByZWN0LngoKSk7CisgICAgYXJyYXlWYWx1ZXNbMV0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250
ZXh0LCByZWN0LnkoKSk7CisgICAgYXJyYXlWYWx1ZXNbMl0gPSBKU1ZhbHVlTWFrZU51bWJlcihj
b250ZXh0LCByZWN0LndpZHRoKCkpOworICAgIGFycmF5VmFsdWVzWzNdID0gSlNWYWx1ZU1ha2VO
dW1iZXIoY29udGV4dCwgcmVjdC5oZWlnaHQoKSk7CisgICAgSlNPYmplY3RSZWYgYXJyYXlPYmpl
Y3QgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCA0LCBhcnJheVZhbHVlcywgZXhjZXB0aW9u
KTsKKyAgICByZXR1cm4gYXJyYXlPYmplY3Q7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNlbGVj
dGVkUmFuZ2VDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYg
KCFicm93c2VyLT5tYWluVmlldygpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CisKKyAgICBpbnQgc3RhcnQsIGxlbmd0aDsKKyAgICBpZiAoIUR1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6c2VsZWN0ZWRSYW5nZShicm93c2VyLT5tYWluVmlldygpLCAmc3Rh
cnQsICZsZW5ndGgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CisKKyAgICBKU1ZhbHVlUmVmIGFycmF5VmFsdWVzWzJdOworICAgIGFycmF5VmFsdWVzWzBd
ID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgc3RhcnQpOworICAgIGFycmF5VmFsdWVzWzFd
ID0gSlNWYWx1ZU1ha2VOdW1iZXIoY29udGV4dCwgbGVuZ3RoKTsKKyAgICBKU09iamVjdFJlZiBh
cnJheU9iamVjdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRleHQsIDIsIGFycmF5VmFsdWVzLCBl
eGNlcHRpb24pOworICAgIHJldHVybiBhcnJheU9iamVjdDsKK30KKworc3RhdGljIEpTU3RhdGlj
RnVuY3Rpb24gc3RhdGljRnVuY3Rpb25zW10gPSB7CisgICAgeyAic2V0TWFya2VkVGV4dCIsIHNl
dE1hcmtlZFRleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgIHsgImhhc01hcmtlZFRleHQiLCBoYXNN
YXJrZWRUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJtYXJrZWRSYW5nZSIsIG1hcmtlZFJh
bmdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7ICJpbnNlcnRUZXh0IiwgaW5zZXJ0VGV4dENhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCisgICAgeyAidW5tYXJrVGV4dCIsIHVubWFya1RleHRDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAorICAgIHsgImZpcnN0UmVjdEZvckNoYXJhY3RlclJhbmdlIiwgZmlyc3RSZWN0Rm9yQ2hh
cmFjdGVyUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgIHsgInNlbGVjdGVkUmFuZ2UiLCBzZWxl
Y3RlZFJhbmdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICB7IDAsIDAsIDAgfQorfTsKKworc3RhdGlj
IEpTQ2xhc3NSZWYgZ2V0Q2xhc3MoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgc3RhdGlj
IEpTQ2xhc3NSZWYgdGV4dElucHV0Q29udHJvbGxlckNsYXNzID0gMDsKKworICAgIGlmICghdGV4
dElucHV0Q29udHJvbGxlckNsYXNzKSB7CisgICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNz
RGVmaW5pdGlvbiA9IHsKKyAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLAorICAgICAg
ICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OworICAgICAgICBjbGFz
c0RlZmluaXRpb24uc3RhdGljRnVuY3Rpb25zID0gc3RhdGljRnVuY3Rpb25zOworCisgICAgICAg
IHRleHRJbnB1dENvbnRyb2xsZXJDbGFzcyA9IEpTQ2xhc3NDcmVhdGUoJmNsYXNzRGVmaW5pdGlv
bik7CisgICAgfQorCisgICAgcmV0dXJuIHRleHRJbnB1dENvbnRyb2xsZXJDbGFzczsKK30KKwor
SlNPYmplY3RSZWYgbWFrZVRleHRJbnB1dENvbnRyb2xsZXIoSlNDb250ZXh0UmVmIGNvbnRleHQp
Cit7CisgICAgcmV0dXJuIEpTT2JqZWN0TWFrZShjb250ZXh0LCBnZXRDbGFzcyhjb250ZXh0KSwg
MCk7Cit9CisKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9UZXh0SW5wdXRD
b250cm9sbGVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29udHJvbGxl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjVlZTI3MTk4MzQwYzU3MmI1ZmU3MWY5MzA0M2ExMGM3ZTdjYzg1MjYK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvVGV4dElucHV0Q29u
dHJvbGxlci5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2Fs
aWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dElucHV0Q29udHJvbGxlcl9oCisj
ZGVmaW5lIFRleHRJbnB1dENvbnRyb2xsZXJfaAorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFx
dWVKU0NvbnRleHQqIEpTQ29udGV4dFJlZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUq
IEpTT2JqZWN0UmVmOworCitKU09iamVjdFJlZiBtYWtlVGV4dElucHV0Q29udHJvbGxlcihKU0Nv
bnRleHRSZWYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkMGVmNjFjNTMzYWFiMDQ2MWUwMjhjN2VkNmMz
YjRmYzZkMzJlZGQzLi5jNGQxZmQ0NGYwNTM0MjU0NDBjYzMyN2YzYjY5YzIyYjc4Njg2MDI5IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDUtMDggIEthbmdpbCBIYW4gIDxrYW5naWwuaGFu
QHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdW0RSVF0gSW1wbGVtZW50IFRleHRJbnB1dENv
bnRyb2xsZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03ODU1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KKworICAgICAg
ICBUZXh0SW5wdXRDb250cm9sbGVyIGhhcyBiZWVuIGNyZWF0ZWQgZm9yIGFuIGlucHV0IGVtdWxh
dGlvbiBwdXJwb3NlIGluIERSVC4KKyAgICAgICAgSG93ZXZlciwgbm90IGxpa2Ugb3RoZXIgcG9y
dHMsIEVGTCBkb2Vzbid0IGhhdmUgaXQuCisgICAgICAgIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCB3
aWxsIGVuYWJsZSBFRkwgcG9ydCB0byBoYXZlIGFuIGlucHV0IGVtdWxhdGlvbiBpbiBEUlQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9lZmwvU2tpcHBlZDoKKwogMjAxMi0wNS0wNCAgWmhlbnlhbyBN
byAgPHptb0Bnb29nbGUuY29tPgogCiAgICAgICAgIHZlcnRleEF0dHJpYlBvaW50ZXIgbmVlZHMg
dG8gcmVqZWN0IGxhcmdlIG5lZ2F0aXZlIG9mZnNldHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2VmbC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBwZWQK
aW5kZXggNmZmYmJlYTQ2NzE3NjI1MjJmZWI0ZDgyNTkzNTFkYzdmMjI2NWNkZi4uYTQzMTEyODMy
ZGQ1M2JhOTI0MmI5NmMyMWVmYWQ5MzdlMGU4N2FmNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZWZsL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsL1NraXBw
ZWQKQEAgLTIzMywyNiArMjMzLDE4IEBAIGZhc3QvbG9hZGVyL2Zvcm0tc3VibWlzc2lvbi1hZnRl
ci1iZWZvcmV1bmxvYWQtY2FuY2VsLmh0bWwKICMgRUZMJ3MgRFJUIG5lZWRzIGEgUGxhaW5UZXh0
Q29udHJvbGxlciBpbXBsZW1lbnRhdGlvbgogZWRpdGluZy90ZXh0LWl0ZXJhdG9yL2Jhc2ljLWl0
ZXJhdGlvbi5odG1sCiAKLSMgRUZMJ3MgRFJUIG5lZWRzIGEgVGV4dElucHV0Q29udHJvbGxlcgot
ZWRpdGluZy9pbnB1dC9pbWUtY29tcG9zaXRpb24tY2xlYXJwcmVlZGl0Lmh0bWwKKyMgRUZMJ3Mg
RFJUIGtleSBkb3duIGJ1ZworIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODQ3MTAKIGVkaXRpbmcvaW5wdXQvcGFzc3dvcmQtZWNoby1wYXNzbm9kZS5odG1sCiBlZGl0
aW5nL2lucHV0L3Bhc3N3b3JkLWVjaG8tcGFzc25vZGUyLmh0bWwKLWVkaXRpbmcvaW5wdXQvcGFz
c3dvcmQtZWNoby1wYXNzbm9kZTMuaHRtbAotZWRpdGluZy9pbnB1dC9wYXNzd29yZC1lY2hvLXRl
eHRub2RlLmh0bWwKKworIyBFRkwncyBlZGl0b3IgZG9lc24ndCBjYW5jZWwgY29tcG9zaXRpb24g
YXMgY2hhbmdlIG9mIHZhbHVlCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04NTEyMgogZWRpdGluZy9pbnB1dC9zZXR0aW5nLWlucHV0LXZhbHVlLWNhbmNlbC1pbWUt
Y29tcG9zaXRpb24uaHRtbAotZWRpdGluZy9pbnNlcnRpbmcvY2FyZXQtcG9zaXRpb24uaHRtbAot
ZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWNvbXBvc2l0aW9uLXdoaXRlc3BhY2UuaHRtbAotZWRp
dGluZy9zZWxlY3Rpb24vNTgyNTM1MC0xLmh0bWwKLWVkaXRpbmcvc2VsZWN0aW9uLzU4MjUzNTAt
Mi5odG1sCi1lZGl0aW5nL3NlbGVjdGlvbi9taXhlZC1lZGl0YWJpbGl0eS0xMC5odG1sCi1lZGl0
aW5nL3NlbGVjdGlvbi9tb3ZlLWxlZnQtcmlnaHQuaHRtbAotZmFzdC9kb20vdGFiLWluLXJpZ2h0
LWFsaWdubWVudC5odG1sCi1mYXN0L2V2ZW50cy9pbWUtY29tcG9zaXRpb24tZXZlbnRzLTAwMS5o
dG1sCisKKyMgRUZMJ3MgdGV4dGFyZWEgYW5kIHRleHRmaWVsZCBkb2Vzbid0IGhhbmRsZSB3aGl0
ZXNwYWNlIHN0eWxlCisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
NTEyMwogZmFzdC9mb3Jtcy9jdXJzb3ItYXQtZWRpdGFibGUtY29udGVudC1ib3VuZGFyeS5odG1s
Ci1mYXN0L2Zvcm1zL2lucHV0LW1heGxlbmd0aC1pbWUtY29tcGxldGVkLmh0bWwKLWZhc3QvZm9y
bXMvaW5wdXQtbWF4bGVuZ3RoLWltZS1wcmVlZGl0Lmh0bWwKLWZhc3QvdGV4dC9pbnRlcm5hdGlv
bmFsL3RoYWktY3Vyc29yLXBvc2l0aW9uLmh0bWwKLXN2Zy90ZXh0L2NhcmV0LWluLXN2Zy10ZXh0
LnhodG1sCiAKICMgRUZMJ3MgTGF5b3V0VGVzdENvbnRyb2xsZXIgZG9lcyBub3QgaW1wbGVtZW50
IHNldE1lZGlhVHlwZQogZmFzdC9tZWRpYS9wcmludC1yZXN0b3Jlcy1wcmV2aW91cy1tZWRpYXR5
cGUuaHRtbApAQCAtMTgyOSw2ICsxODIxLDggQEAgdHJhbnNpdGlvbnMvZGVmYXVsdC10aW1pbmct
ZnVuY3Rpb24uaHRtbAogdHJhbnNpdGlvbnMvbW92ZS1hZnRlci10cmFuc2l0aW9uLmh0bWwKIHRy
YW5zaXRpb25zL3N2Zy10ZXh0LXNoYWRvdy10cmFuc2l0aW9uLmh0bWwKIHRyYW5zaXRpb25zL3N2
Zy10cmFuc2l0aW9ucy5odG1sCitmYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMuaHRt
bAorZmFzdC9kb20vcHJvdG90eXBlLWluaGVyaXRhbmNlLTIuaHRtbAogCiAjIEVGTCBEUlQgZG9l
c24ndCBmdWxseSBzdXBwb3J0IGh0dHAgdGVzdHMgeWV0LiBUaGVzZSB0ZXN0cyBtYWtlIHRpbWVv
dXQgZXJyb3IuCiBlZGl0aW5nL2lucHV0L3JldmVhbC1jb250ZW50ZWRpdGFibGUtb24taW5wdXQt
dmVydGljYWxseS5odG1sCg==
</data>
<flag name="review"
          id="146865"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>