<?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>70528</bug_id>
          
          <creation_ts>2011-10-20 11:27:48 -0700</creation_ts>
          <short_desc>[Qt][WK2] Add a QML based solution for Context Menus</short_desc>
          <delta_ts>2014-01-13 22:02:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zeno Albisser">zeno</reporter>
          <assigned_to name="Nandor Huszka">hnandor</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>hausmann</cc>
    
    <cc>hnandor</cc>
    
    <cc>kbalazs</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>487730</commentid>
    <comment_count>0</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2011-10-20 11:27:48 -0700</bug_when>
    <thetext>ssia</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630357</commentid>
    <comment_count>1</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-05-22 07:41:49 -0700</bug_when>
    <thetext>I have started implementing the API, then I&apos;d like to do the other things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631481</commentid>
    <comment_count>2</comment_count>
      <attachid>143525</attachid>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-05-23 04:09:22 -0700</bug_when>
    <thetext>Created attachment 143525
WIP patch

I would need some tip about this task. Originally I&apos;d like to use ContextMenu in Snowshoe, this is why I have started dealing with this. Context menu API should be similar to existing itemSelector, I know this from INdT guys.
But I don&apos;t know exactly which files should I modify, however I have made a WIP patch.

WebContextMenuProxyQt, ContextMenuQt, and ContextMenuItemQt have a lot of unimplemented methods, should I complete these? E.g. createNativeMenuFromItems is missing from Qt api, but I don&apos;t know whether we have to use these methods.

There is an other question: do I need for example a ContextMenuItemModel and a ContextMenuContextObject class in WebContextMenuProxyQt, and do the things similar to WebPopupMenuProxyQt (in it can be found the itemSelector&apos;s stuffs)? Or should I follow the other platforms&apos; WebContextMenuProxy implementation without these new classes (as I have started in the patch)?

What will be the correct way broadly, which things should I implement?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631509</commentid>
    <comment_count>3</comment_count>
      <attachid>143525</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-05-23 04:50:03 -0700</bug_when>
    <thetext>Comment on attachment 143525
WIP patch

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

&gt; Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_contextMenu.qml:9
&gt; +// FIXME: Moved to Desktop tests because we want to have mouseClick() to open the &lt;select&gt; tag. We can move it back
&gt; +// when TestCase starts supporting touch events, see https://bugreports.qt.nokia.com/browse/QTBUG-23083.
&gt; +TestWebView {

Can&apos;t you use the new testing frame work that I did. experimental.test.touchTapEvent() etc?

&gt; Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_contextMenu.qml:18
&gt; +    experimental.contextMenu: Item {
&gt; +        Component.onCompleted: {
&gt; +        }
&gt; +    }

So how do I use it?

x: requestedPos.x ?

how to show the items etc?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633653</commentid>
    <comment_count>4</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-05-25 00:39:52 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 143525 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143525&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_contextMenu.qml:9
&gt; &gt; +// FIXME: Moved to Desktop tests because we want to have mouseClick() to open the &lt;select&gt; tag. We can move it back
&gt; &gt; +// when TestCase starts supporting touch events, see https://bugreports.qt.nokia.com/browse/QTBUG-23083.
&gt; &gt; +TestWebView {
&gt; 
&gt; Can&apos;t you use the new testing frame work that I did. experimental.test.touchTapEvent() etc?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_contextMenu.qml:18
&gt; &gt; +    experimental.contextMenu: Item {
&gt; &gt; +        Component.onCompleted: {
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; So how do I use it?
&gt; 
&gt; x: requestedPos.x ?
&gt; 
&gt; how to show the items etc?

Should this touchTapEvent be a new function? Because I have not found this in WK. To tell the truth first I would like to come aware of the correct API implementing, there is a lot of thing that I don&apos;t understand. After that I will try this of course. Thank you for the suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633729</commentid>
    <comment_count>5</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-05-25 02:19:29 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 143525 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143525&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_contextMenu.qml:9
&gt; &gt; &gt; +// FIXME: Moved to Desktop tests because we want to have mouseClick() to open the &lt;select&gt; tag. We can move it back
&gt; &gt; &gt; +// when TestCase starts supporting touch events, see https://bugreports.qt.nokia.com/browse/QTBUG-23083.
&gt; &gt; &gt; +TestWebView {
&gt; &gt; 
&gt; &gt; Can&apos;t you use the new testing frame work that I did. experimental.test.touchTapEvent() etc?
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/qt/tests/qmltests/DesktopBehavior/tst_contextMenu.qml:18
&gt; &gt; &gt; +    experimental.contextMenu: Item {
&gt; &gt; &gt; +        Component.onCompleted: {
&gt; &gt; &gt; +        }
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; So how do I use it?
&gt; &gt; 
&gt; &gt; x: requestedPos.x ?
&gt; &gt; 
&gt; &gt; how to show the items etc?
&gt; 
&gt; Should this touchTapEvent be a new function? Because I have not found this in WK. To tell the truth first I would like to come aware of the correct API implementing, there is a lot of thing that I don&apos;t understand. After that I will try this of course. Thank you for the suggestion.

I had a discussion with Zeno, now I understand what would be the correct way, and why starting by the api tests is recommended.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>667710</commentid>
    <comment_count>6</comment_count>
      <attachid>151938</attachid>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-07-12 06:26:18 -0700</bug_when>
    <thetext>Created attachment 151938
WIP patch

Now the menu appears on right clicking at the actual position of the mouse, and it is filled with elements that depends on the clicked element.
We know the WebCore::ContextMenuItemType and WebCore::ContextMenuAction values also.
The question is: how can be called the appropriate action in ContextMenuContextObject::accept possession of these values? For example when I click on the &quot;Copy&quot; menuitem, its ContextMenuItemType=ActionType and ContextMenuAction=ContextMenuItemTagCopy, but what to do with these things?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>670286</commentid>
    <comment_count>7</comment_count>
      <attachid>152520</attachid>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-07-16 06:26:06 -0700</bug_when>
    <thetext>Created attachment 152520
Patch

Now the contextmenu appears on right clicking, and by selecting an element the appropriate action is performed. 
All the menuitems are put in the main contextmenu. I think the QML file could handle the clicking on an item which has submenuitems (and draw a new rectangle with these items) in an other patch. Is it OK? 
I would appreciate your opinion about the API too, e.g. what is missing, or what should be implemented in an other way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672150</commentid>
    <comment_count>8</comment_count>
      <attachid>152520</attachid>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-07-18 02:17:45 -0700</bug_when>
    <thetext>Comment on attachment 152520
Patch

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

&gt; Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp:197
&gt; +    ContextMenuContextObject* contextObject = new ContextMenuContextObject(QPoint(position.x(), position.y()), items);

How about moving the ContextMenuContextObject creation into the &quot;createItem&quot; function as well?
This way you don&apos;t even need to create it, in case you don&apos;t receive a component.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672156</commentid>
    <comment_count>9</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-07-18 02:31:03 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 152520 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=152520&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp:197
&gt; &gt; +    ContextMenuContextObject* contextObject = new ContextMenuContextObject(QPoint(position.x(), position.y()), items);
&gt; 
&gt; How about moving the ContextMenuContextObject creation into the &quot;createItem&quot; function as well?
&gt; This way you don&apos;t even need to create it, in case you don&apos;t receive a component.

It is unnecessary to create it in that case, I agree with you. 
What&apos;s up with the submenus? Do we need a second model object for storing the selected item&apos;s submenuitems (then passing it to a second ListView&apos;s model property e.g.)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672174</commentid>
    <comment_count>10</comment_count>
    <who name="Zeno Albisser">zeno</who>
    <bug_when>2012-07-18 02:50:15 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; It is unnecessary to create it in that case, I agree with you. 
&gt; What&apos;s up with the submenus? Do we need a second model object for storing the selected item&apos;s submenuitems (then passing it to a second ListView&apos;s model property e.g.)?

You mean such as nested menus?
Looking at other browsers i can&apos;t find such menus anywhere.
I think it is fine for the moment to leave it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672189</commentid>
    <comment_count>11</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-07-18 03:18:22 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; It is unnecessary to create it in that case, I agree with you. 
&gt; &gt; What&apos;s up with the submenus? Do we need a second model object for storing the selected item&apos;s submenuitems (then passing it to a second ListView&apos;s model property e.g.)?
&gt; 
&gt; You mean such as nested menus?
&gt; Looking at other browsers i can&apos;t find such menus anywhere.
&gt; I think it is fine for the moment to leave it out.

Yes, I thought about nested menus, that are shown when the mouse is over their parent menuitem. Okay, in this case I will fix the createItem thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672256</commentid>
    <comment_count>12</comment_count>
      <attachid>152988</attachid>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-07-18 05:04:40 -0700</bug_when>
    <thetext>Created attachment 152988
Patch

Fixed the createItem thing. Context menu can be tried by running the MiniBrowser on desktop for the time being.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672260</commentid>
    <comment_count>13</comment_count>
      <attachid>152988</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-18 05:11:02 -0700</bug_when>
    <thetext>Comment on attachment 152988
Patch

Attachment 152988 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13279517</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672270</commentid>
    <comment_count>14</comment_count>
      <attachid>152993</attachid>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-07-18 05:17:47 -0700</bug_when>
    <thetext>Created attachment 152993
Patch

I skipped the ContextMenu.qml from the diff, reupload it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672296</commentid>
    <comment_count>15</comment_count>
      <attachid>152988</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-18 05:52:24 -0700</bug_when>
    <thetext>Comment on attachment 152988
Patch

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

Informal review. Although I don&apos;t know these QML things enough to review the patch, basically it seems sane to me.
I think you should add a test for this functionality.

&gt; Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp:43
&gt; +static QHash&lt;int, QByteArray&gt; createRoleNamesHash();
&gt; +static int menuSize(const Vector&lt;WebContextMenuItemData&gt;&amp;);

Do you need to forward declare these at all? If so, move these below the classes, please.

&gt; Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp:76
&gt; +        WebCore::ContextMenuItemType type;
&gt; +        WebCore::ContextMenuAction action;

No need to qualify with WebCore:: here I guess, and we normally use using and not qualify.

&gt; Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp:114
&gt; +ContextMenuContextObject::ContextMenuContextObject(const QPoint&amp; position, const Vector&lt;WebContextMenuItemData&gt;&amp; items)
&gt; +    : m_position(position),
&gt; +      m_itemModel(items)

Style error: you should put the , at the next line.

&gt; Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp:147
&gt; +    static QHash&lt;int, QByteArray&gt; roles = createRoleNamesHash();

It would look slightly better to my eyes if you move the static var to the function and use DEFINE_STATIC_LOCAL.

&gt; Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp:179
&gt; +            if (!submenuItemsData.isEmpty())
&gt; +                buildItems(submenuItemsData, menuItems);

I&apos;m not sure we should insert these items at all if we don&apos;t implement submenus. What are these items contains? What is the use case of submenus?

&gt; Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp:241
&gt; +    qRegisterMetaType&lt;WebContextMenuItemData&gt;(&quot;WebContextMenuItemData&quot;);
&gt; +    connect(contextObject, SIGNAL(contextMenuItemSelected(WebContextMenuItemData)), SLOT(selectContextMenuItem(WebContextMenuItemData)), Qt::QueuedConnection);
&gt; +    connect(contextObject, SIGNAL(rejected()), SLOT(hideContextMenu()), Qt::QueuedConnection);

Why it is necessary to use queued connection? If it really is, than please add a comment why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673339</commentid>
    <comment_count>16</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-07-19 02:41:04 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 152988 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=152988&amp;action=review
&gt; Do you need to forward declare these at all? If so, move these below the classes, please.

&gt; No need to qualify with WebCore:: here I guess, and we normally use using and not qualify.

&gt; Style error: you should put the , at the next line.

&gt; It would look slightly better to my eyes if you move the static var to the function and use DEFINE_STATIC_LOCAL.

These comments are justified, I&apos;ve fixed them.

&gt; &gt; Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp:179
&gt; &gt; +            if (!submenuItemsData.isEmpty())
&gt; &gt; +                buildItems(submenuItemsData, menuItems);
&gt; 
&gt; I&apos;m not sure we should insert these items at all if we don&apos;t implement submenus. What are these items contains? What is the use case of submenus?

Submenus contains menuitems that allow us to set e.g. the direction of text, font style and spelling. They are inserted next to their parent menuitem now. So the user can also select them from the main context menu, that is why they are stored too. It isn&apos;t very elegant, I know, but I hope now it is passable, and maybe it can be improved in a future patch.

&gt; &gt; Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp:241
&gt; &gt; +    qRegisterMetaType&lt;WebContextMenuItemData&gt;(&quot;WebContextMenuItemData&quot;);
&gt; &gt; +    connect(contextObject, SIGNAL(contextMenuItemSelected(WebContextMenuItemData)), SLOT(selectContextMenuItem(WebContextMenuItemData)), Qt::QueuedConnection);
&gt; &gt; +    connect(contextObject, SIGNAL(rejected()), SLOT(hideContextMenu()), Qt::QueuedConnection);
&gt; 
&gt; Why it is necessary to use queued connection? If it really is, than please add a comment why.

If we do not use the third parameter in connect, the MiniBrowser terminates with segfault. What&apos;s more, the same happens when we use any other type of connection (except BlockingQueuedConnection, in this case deadlock is caused). In WebPopupMenuProxyQt::createItem the same connection type is used, and there can be found a comment that says:
&quot;We enqueue these because they are triggered by m_itemSelector and will lead to its destruction.&quot;
In our case this explanation is also valid, I think, so I will insert it, if it is acceptable in your opinion too.

&gt; I think you should add a test for this functionality.

You are right, api test is missing yet, because simulation of right clicking there isn&apos;t implemented yet. I&apos;m afraid of its solution is waiting for me. :) So should I create a bug with that functionality (that will block this bug), or solve it here too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674507</commentid>
    <comment_count>17</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-20 06:37:01 -0700</bug_when>
    <thetext>&gt; These comments are justified, I&apos;ve fixed them.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp:179
&gt; &gt; &gt; +            if (!submenuItemsData.isEmpty())
&gt; &gt; &gt; +                buildItems(submenuItemsData, menuItems);
&gt; &gt; 
&gt; &gt; I&apos;m not sure we should insert these items at all if we don&apos;t implement submenus. What are these items contains? What is the use case of submenus?
&gt; 
&gt; Submenus contains menuitems that allow us to set e.g. the direction of text, font style and spelling. They are inserted next to their parent menuitem now. So the user can also select them from the main context menu, that is why they are stored too. It isn&apos;t very elegant, I know, but I hope now it is passable, and maybe it can be improved in a future patch.

I don&apos;t really like the idea to implement context menu with fake submenus.
Maybe we would have to rework the whole solution in the future to handle them, so instead I propose to try to implement it properly at first. If you still prefer going incrementally, and skip submenus at first, than it seems better to not show submenu items at all for now.

&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/qt/WebContextMenuProxyQt.cpp:241
&gt; &gt; &gt; +    qRegisterMetaType&lt;WebContextMenuItemData&gt;(&quot;WebContextMenuItemData&quot;);
&gt; &gt; &gt; +    connect(contextObject, SIGNAL(contextMenuItemSelected(WebContextMenuItemData)), SLOT(selectContextMenuItem(WebContextMenuItemData)), Qt::QueuedConnection);
&gt; &gt; &gt; +    connect(contextObject, SIGNAL(rejected()), SLOT(hideContextMenu()), Qt::QueuedConnection);
&gt; &gt; 
&gt; &gt; Why it is necessary to use queued connection? If it really is, than please add a comment why.
&gt; 
&gt; If we do not use the third parameter in connect, the MiniBrowser terminates with segfault. What&apos;s more, the same happens when we use any other type of connection (except BlockingQueuedConnection, in this case deadlock is caused). In WebPopupMenuProxyQt::createItem the same connection type is used, and there can be found a comment that says:
&gt; &quot;We enqueue these because they are triggered by m_itemSelector and will lead to its destruction.&quot;
&gt; In our case this explanation is also valid, I think, so I will insert it, if it is acceptable in your opinion too.

Sure, please copy the comment here as well.

&gt; 
&gt; &gt; I think you should add a test for this functionality.
&gt; 
&gt; You are right, api test is missing yet, because simulation of right clicking there isn&apos;t implemented yet. I&apos;m afraid of its solution is waiting for me. :) So should I create a bug with that functionality (that will block this bug), or solve it here too?

I think first you can concentrate on implementing it properly, than we can decide how to test. Another bug for the testing stuff is good idea, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679240</commentid>
    <comment_count>18</comment_count>
      <attachid>154630</attachid>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-07-26 06:12:08 -0700</bug_when>
    <thetext>Created attachment 154630
Patch

(In reply to comment #17)
Submenus are done and everything you&apos;ve mentioned. I will create a new bug for the API test, that blocks this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679314</commentid>
    <comment_count>19</comment_count>
      <attachid>154630</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-26 07:38:35 -0700</bug_when>
    <thetext>Comment on attachment 154630
Patch

For a different approach that I was thinking of last year see also https://lists.webkit.org/pipermail/webkit-qt/2011-October/001943.html

The basic idea is to let the developer not only specify the component for the context menu itself but also the component for individual items.

The goal in the end should be an API that is really easy to use and that easily combines with APIs such as the Qt Quick Components for MeeGo (regardless of their lifetime the API principles used there still apply and are also used in the Qt Desktop Components).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679321</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-26 07:41:13 -0700</bug_when>
    <thetext>A further thought of my previous comment: In the latest Qt Desktop Components (Context)Menu and MenuItem appear to be nestable:

    ContextMenu {
        MenuItem {
            ...
        }
        Menu {
            MenuItem {
                ...
            }
        ...
     }

that in turn maps directly to the approach of specifying menu item and menu component separately and WebKit can construct the entire menu hierarchy.

One critical question with this approach is: How easy is it to customize the context menu?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681738</commentid>
    <comment_count>21</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-07-30 00:22:19 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; The basic idea is to let the developer not only specify the component for the context menu itself but also the component for individual items.

I have just realized the importance of this, because for example a checkable menuitem should have a tick, but now we cannot fit up it with one.
However in WebKit we cannot know which items should be put into the contextmenu in compile time, but a javascript function could fill it that uses the API for this. So e.g. in MiniBrowser I&apos;d like to create a contextmenu without any menuitems, and the contextmenu will create these after we ask it.

(In reply to comment #20)
&gt; that in turn maps directly to the approach of specifying menu item and menu component separately and WebKit can construct the entire menu hierarchy.

I see, the implementation needs some redesign.

    ContextMenu {
        MenuItem {
            ...
        }
        Menu {

Will we able to create e.g. this submenu (as single menuitems) when we get an item from the api that have  submenuelements in runtime? The API&apos;s or the ContextMenu&apos;s role should be this mainly?

            MenuItem {
                ...
            }
        ...
     }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681932</commentid>
    <comment_count>22</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-07-30 05:56:47 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #19)
&gt; &gt; The basic idea is to let the developer not only specify the component for the context menu itself but also the component for individual items.
&gt; 
&gt; I have just realized the importance of this, because for example a checkable menuitem should have a tick, but now we cannot fit up it with one.
&gt; However in WebKit we cannot know which items should be put into the contextmenu in compile time, but a javascript function could fill it that uses the API for this. So e.g. in MiniBrowser I&apos;d like to create a contextmenu without any menuitems, and the contextmenu will create these after we ask it.
&gt; 
&gt; (In reply to comment #20)
&gt; &gt; that in turn maps directly to the approach of specifying menu item and menu component separately and WebKit can construct the entire menu hierarchy.
&gt; 
&gt; I see, the implementation needs some redesign.
&gt; 
&gt;     ContextMenu {
&gt;         MenuItem {
&gt;             ...
&gt;         }
&gt;         Menu {
&gt; 
&gt; Will we able to create e.g. this submenu (as single menuitems) when we get an item from the api that have  submenuelements in runtime? The API&apos;s or the ContextMenu&apos;s role should be this mainly?

I&apos;m not 100% sure that I understand the question correctly. Note that what is specified in the API is just a _component_, not a concrete item. Think of components as factories to create items of a specific &quot;type&quot; on demand.

So the user of the API specifies the components to use of menu items and menus themselves. If WebKit at run-time decides  that it needs to create a menu item, then it can instantiate one. If it then realizes that it needs to create a menu that can be inserted into an existing menu as a sub-menu, it can simply instantiate a new menu.

Does that make any sense? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>682770</commentid>
    <comment_count>23</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-07-31 00:09:19 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; I&apos;m not 100% sure that I understand the question correctly. Note that what is specified in the API is just a _component_, not a concrete item. Think of components as factories to create items of a specific &quot;type&quot; on demand.

The question wasn&apos;t exact enough, it&apos;s true. I was not aware of the behaviour of the UI part, whether we can create QML types in runtime, but I&apos;ve found the way of it. I see that e.g. in  our case the ContextMenuItemModel is the component you&apos;ve mentioned, and with the help of ContextMenuContextObject it can be instantiated, so it can be used for a concrete menuitem in the QML file. But we should have a component for menus also, not only for menuitems, and QML types for them.

&gt; So the user of the API specifies the components to use of menu items and menus themselves. If WebKit at run-time decides  that it needs to create a menu item, then it can instantiate one. If it then realizes that it needs to create a menu that can be inserted into an existing menu as a sub-menu, it can simply instantiate a new menu.
&gt; 
&gt; Does that make any sense? :)

Yes, now it&apos;s more clear, thank you for the explanation. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692228</commentid>
    <comment_count>24</comment_count>
      <attachid>154630</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-08-09 22:39:18 -0700</bug_when>
    <thetext>Comment on attachment 154630
Patch

Taking this out of the review queue, as the approach needs re-thinking, which is already happening :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>692334</commentid>
    <comment_count>25</comment_count>
      <attachid>157668</attachid>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-08-10 01:21:04 -0700</bug_when>
    <thetext>Created attachment 157668
Version 2 of the patch

I&apos;ve done several modifications, e.g. solving it without ListView, as a result we do not have to use QAbstractListModel. I&apos;ve separated the QML files, so the menuitems are customizable now. In the API there is an extra class named ContextMenuModel that contains the models of the menuitems. There is a problem with showing a submenu: however it is shown and its size is correct, but the items of the mainmenu are put in it, despite of we pass it them.
I&apos;d like to ask your opinion about this patch. It is far from the final version, I know. :) Do you think something like this in the previous comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>710842</commentid>
    <comment_count>26</comment_count>
    <who name="Nandor Huszka">hnandor</who>
    <bug_when>2012-09-04 00:01:24 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; I&apos;ve done several modifications, e.g. solving it without ListView, as a result we do not have to use QAbstractListModel. I&apos;ve separated the QML files, so the menuitems are customizable now. In the API there is an extra class named ContextMenuModel that contains the models of the menuitems. There is a problem with showing a submenu: however it is shown and its size is correct, but the items of the mainmenu are put in it, despite of we pass it them.
&gt; I&apos;d like to ask your opinion about this patch. It is far from the final version, I know. :) Do you think something like this in the previous comments?

So, what do you think? Is it the right track aside from the submenu problem?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143525</attachid>
            <date>2012-05-23 04:09:22 -0700</date>
            <delta_ts>2012-07-12 06:26:18 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>modifAPI.diff</filename>
            <type>text/plain</type>
            <size>9880</size>
            <attacher name="Nandor Huszka">hnandor</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NvbnRleHRNZW51SXRlbVF0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NvbnRleHRNZW51SXRlbVF0LmNwcApp
bmRleCAyYTM2Yjg3Li5jZWIwOThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9Db250ZXh0TWVudUl0ZW1RdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvQ29udGV4dE1lbnVJdGVtUXQuY3BwCkBAIC0xMTIsNiArMTEyLDcgQEAgdm9pZCBDb250ZXh0
TWVudUl0ZW06OnNldFN1Yk1lbnUoQ29udGV4dE1lbnUqIG1lbnUpCiB2b2lkIENvbnRleHRNZW51
SXRlbTo6c2V0U3ViTWVudShWZWN0b3I8Q29udGV4dE1lbnVJdGVtPiYpCiB7CiAgICAgLy8gRklY
TUU6IEltcGxlbWVudAorICAgIC8vIHdpbGwgd2UgbmVlZCBmb3IgdGhpcyBhbmQgdGhlIG90aGVy
IGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGU/CiB9CiAKIHZvaWQgQ29udGV4dE1lbnVJdGVtOjpzZXRD
aGVja2VkKGJvb2wgb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3LmNwcAppbmRleCA5MzU4NDIxLi5lOGY0YzUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKQEAgLTI1Nyw2ICsy
NTcsNyBAQCBRUXVpY2tXZWJWaWV3UHJpdmF0ZTo6UVF1aWNrV2ViVmlld1ByaXZhdGUoUVF1aWNr
V2ViVmlldyogdmlld3BvcnQpCiAgICAgLCBhdXRoZW50aWNhdGlvbkRpYWxvZygwKQogICAgICwg
Y2VydGlmaWNhdGVWZXJpZmljYXRpb25EaWFsb2coMCkKICAgICAsIGl0ZW1TZWxlY3RvcigwKQor
ICAgICwgY29udGV4dE1lbnUoMCkKICAgICAsIHByb3h5QXV0aGVudGljYXRpb25EaWFsb2coMCkK
ICAgICAsIGZpbGVQaWNrZXIoMCkKICAgICAsIGRhdGFiYXNlUXVvdGFEaWFsb2coMCkKQEAgLTEx
OTAsNiArMTE5MSwyMSBAQCB2b2lkIFFRdWlja1dlYlZpZXdFeHBlcmltZW50YWw6OnNldEl0ZW1T
ZWxlY3RvcihRUW1sQ29tcG9uZW50KiBpdGVtU2VsZWN0b3IpCiAgICAgZW1pdCBpdGVtU2VsZWN0
b3JDaGFuZ2VkKCk7CiB9CiAKK1FRbWxDb21wb25lbnQqIFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWw6OmNvbnRleHRNZW51KCkgY29uc3QKK3sKKyAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7
CisgICAgcmV0dXJuIGQtPmNvbnRleHRNZW51OworfQorCit2b2lkIFFRdWlja1dlYlZpZXdFeHBl
cmltZW50YWw6OnNldENvbnRleHRNZW51KFFRbWxDb21wb25lbnQqIGNvbnRleHRNZW51KQorewor
ICAgIFFfRChRUXVpY2tXZWJWaWV3KTsKKyAgICBpZiAoZC0+Y29udGV4dE1lbnUgPT0gY29udGV4
dE1lbnUpCisgICAgICAgIHJldHVybjsKKyAgICBkLT5jb250ZXh0TWVudSA9IGNvbnRleHRNZW51
OworICAgIGVtaXQgY29udGV4dE1lbnVDaGFuZ2VkKCk7Cit9CisKIFFRbWxDb21wb25lbnQqIFFR
dWlja1dlYlZpZXdFeHBlcmltZW50YWw6OmZpbGVQaWNrZXIoKSBjb25zdAogewogICAgIFFfRChj
b25zdCBRUXVpY2tXZWJWaWV3KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXdfcC5oCmluZGV4IDc3M2Y3MzUuLjRmZGNiMjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaApAQCAtMjYz
LDYgKzI2Myw3IEBAIGNsYXNzIFFXRUJLSVRfRVhQT1JUIFFRdWlja1dlYlZpZXdFeHBlcmltZW50
YWwgOiBwdWJsaWMgUU9iamVjdCB7CiAgICAgUV9QUk9QRVJUWShRUW1sQ29tcG9uZW50KiBwcm94
eUF1dGhlbnRpY2F0aW9uRGlhbG9nIFJFQUQgcHJveHlBdXRoZW50aWNhdGlvbkRpYWxvZyBXUklU
RSBzZXRQcm94eUF1dGhlbnRpY2F0aW9uRGlhbG9nIE5PVElGWSBwcm94eUF1dGhlbnRpY2F0aW9u
RGlhbG9nQ2hhbmdlZCkKICAgICBRX1BST1BFUlRZKFFRbWxDb21wb25lbnQqIGNlcnRpZmljYXRl
VmVyaWZpY2F0aW9uRGlhbG9nIFJFQUQgY2VydGlmaWNhdGVWZXJpZmljYXRpb25EaWFsb2cgV1JJ
VEUgc2V0Q2VydGlmaWNhdGVWZXJpZmljYXRpb25EaWFsb2cgTk9USUZZIGNlcnRpZmljYXRlVmVy
aWZpY2F0aW9uRGlhbG9nQ2hhbmdlZCkKICAgICBRX1BST1BFUlRZKFFRbWxDb21wb25lbnQqIGl0
ZW1TZWxlY3RvciBSRUFEIGl0ZW1TZWxlY3RvciBXUklURSBzZXRJdGVtU2VsZWN0b3IgTk9USUZZ
IGl0ZW1TZWxlY3RvckNoYW5nZWQpCisgICAgUV9QUk9QRVJUWShRUW1sQ29tcG9uZW50KiBjb250
ZXh0TWVudSBSRUFEIGNvbnRleHRNZW51IFdSSVRFIHNldENvbnRleHRNZW51IE5PVElGWSBjb250
ZXh0TWVudUNoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRUW1sQ29tcG9uZW50KiBmaWxlUGlja2Vy
IFJFQUQgZmlsZVBpY2tlciBXUklURSBzZXRGaWxlUGlja2VyIE5PVElGWSBmaWxlUGlja2VyQ2hh
bmdlZCkKICAgICBRX1BST1BFUlRZKFFRbWxDb21wb25lbnQqIGRhdGFiYXNlUXVvdGFEaWFsb2cg
UkVBRCBkYXRhYmFzZVF1b3RhRGlhbG9nIFdSSVRFIHNldERhdGFiYXNlUXVvdGFEaWFsb2cgTk9U
SUZZIGRhdGFiYXNlUXVvdGFEaWFsb2dDaGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoUVdlYlByZWZl
cmVuY2VzKiBwcmVmZXJlbmNlcyBSRUFEIHByZWZlcmVuY2VzIENPTlNUQU5UIEZJTkFMKQpAQCAt
MjkyLDYgKzI5Myw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENlcnRpZmljYXRlVmVyaWZpY2F0
aW9uRGlhbG9nKFFRbWxDb21wb25lbnQqKTsKICAgICBRUW1sQ29tcG9uZW50KiBpdGVtU2VsZWN0
b3IoKSBjb25zdDsKICAgICB2b2lkIHNldEl0ZW1TZWxlY3RvcihRUW1sQ29tcG9uZW50Kik7Cisg
ICAgUVFtbENvbXBvbmVudCogY29udGV4dE1lbnUoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRl
eHRNZW51KFFRbWxDb21wb25lbnQqIGNvbnRleHRNZW51KTsKKwogICAgIFFRbWxDb21wb25lbnQq
IHByb3h5QXV0aGVudGljYXRpb25EaWFsb2coKSBjb25zdDsKICAgICB2b2lkIHNldFByb3h5QXV0
aGVudGljYXRpb25EaWFsb2coUVFtbENvbXBvbmVudCopOwogICAgIFFRbWxDb21wb25lbnQqIGZp
bGVQaWNrZXIoKSBjb25zdDsKQEAgLTM0NSw2ICszNDksNyBAQCBRX1NJR05BTFM6CiAgICAgdm9p
ZCBhdXRoZW50aWNhdGlvbkRpYWxvZ0NoYW5nZWQoKTsKICAgICB2b2lkIGNlcnRpZmljYXRlVmVy
aWZpY2F0aW9uRGlhbG9nQ2hhbmdlZCgpOwogICAgIHZvaWQgaXRlbVNlbGVjdG9yQ2hhbmdlZCgp
OworICAgIHZvaWQgY29udGV4dE1lbnVDaGFuZ2VkKCk7CiAgICAgdm9pZCBmaWxlUGlja2VyQ2hh
bmdlZCgpOwogICAgIHZvaWQgZGF0YWJhc2VRdW90YURpYWxvZ0NoYW5nZWQoKTsKICAgICB2b2lk
IGRvd25sb2FkUmVxdWVzdGVkKFFXZWJEb3dubG9hZEl0ZW0qIGRvd25sb2FkSXRlbSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9w
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgK
aW5kZXggZWJkMDZlMy4uNjk2N2E5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaApAQCAtMTg4LDYgKzE4OCw3IEBAIHByb3Rl
Y3RlZDoKICAgICBRUW1sQ29tcG9uZW50KiBhdXRoZW50aWNhdGlvbkRpYWxvZzsKICAgICBRUW1s
Q29tcG9uZW50KiBjZXJ0aWZpY2F0ZVZlcmlmaWNhdGlvbkRpYWxvZzsKICAgICBRUW1sQ29tcG9u
ZW50KiBpdGVtU2VsZWN0b3I7CisgICAgUVFtbENvbXBvbmVudCogY29udGV4dE1lbnU7CiAgICAg
UVFtbENvbXBvbmVudCogcHJveHlBdXRoZW50aWNhdGlvbkRpYWxvZzsKICAgICBRUW1sQ29tcG9u
ZW50KiBmaWxlUGlja2VyOwogICAgIFFRbWxDb21wb25lbnQqIGRhdGFiYXNlUXVvdGFEaWFsb2c7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRl
c3RzL0Rlc2t0b3BCZWhhdmlvci5wcm8gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3Rlc3RzL3FtbHRlc3RzL0Rlc2t0b3BCZWhhdmlvci5wcm8KaW5kZXggMTE3MzNjZS4uN2UwZTA2
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0
ZXN0cy9EZXNrdG9wQmVoYXZpb3IucHJvCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcEJlaGF2aW9yLnBybwpAQCAtMTYsNCArMTYsNSBA
QCBERUZJTkVTICs9IElNUE9SVF9ESVI9XCJcXFwiJCR7Uk9PVF9CVUlMRF9ESVJ9JCR7UU1BS0Vf
RElSX1NFUH1pbXBvcnRzXFxcIlwiCiAKIE9USEVSX0ZJTEVTICs9IFwKICAgICBEZXNrdG9wQmVo
YXZpb3IvKiBcCi0gICAgY29tbW9uLyoKKyAgICBjb21tb24vKiBcCisgICAgRGVza3RvcEJlaGF2
aW9yL3RzdF9jb250ZXh0TWVudS5xbWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvRGVza3RvcEJlaGF2aW9yL3RzdF9jb250ZXh0TWVu
dS5xbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL0Rl
c2t0b3BCZWhhdmlvci90c3RfY29udGV4dE1lbnUucW1sCmluZGV4IGU2OWRlMjkuLjU1NjM2NzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVz
dHMvRGVza3RvcEJlaGF2aW9yL3RzdF9jb250ZXh0TWVudS5xbWwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy9EZXNrdG9wQmVoYXZpb3IvdHN0X2Nv
bnRleHRNZW51LnFtbApAQCAtMCwwICsxLDM1IEBACitpbXBvcnQgUXRRdWljayAyLjAKK2ltcG9y
dCBRdFRlc3QgMS4wCitpbXBvcnQgUXRXZWJLaXQgMy4wCitpbXBvcnQgUXRXZWJLaXQuZXhwZXJp
bWVudGFsIDEuMAoraW1wb3J0ICIuLi9jb21tb24iCisKKy8vIEZJWE1FOiBNb3ZlZCB0byBEZXNr
dG9wIHRlc3RzIGJlY2F1c2Ugd2Ugd2FudCB0byBoYXZlIG1vdXNlQ2xpY2soKSB0byBvcGVuIHRo
ZSA8c2VsZWN0PiB0YWcuIFdlIGNhbiBtb3ZlIGl0IGJhY2sKKy8vIHdoZW4gVGVzdENhc2Ugc3Rh
cnRzIHN1cHBvcnRpbmcgdG91Y2ggZXZlbnRzLCBzZWUgaHR0cHM6Ly9idWdyZXBvcnRzLnF0Lm5v
a2lhLmNvbS9icm93c2UvUVRCVUctMjMwODMuCitUZXN0V2ViVmlldyB7CisgICAgaWQ6IHdlYlZp
ZXcKKworICAgIHdpZHRoOiA0MDAKKyAgICBoZWlnaHQ6IDQwMAorCisgICAgZXhwZXJpbWVudGFs
LmNvbnRleHRNZW51OiBJdGVtIHsKKyAgICAgICAgQ29tcG9uZW50Lm9uQ29tcGxldGVkOiB7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBTaWduYWxTcHkgeworICAgICAgICBpZDogdGl0bGVTcHkK
KyAgICAgICAgdGFyZ2V0OiB3ZWJWaWV3CisgICAgICAgIHNpZ25hbE5hbWU6ICJ0aXRsZUNoYW5n
ZWQiCisgICAgfQorCisgICAgVGVzdENhc2UgeworICAgICAgICBpZDogdGVzdAorICAgICAgICBu
YW1lOiAiV2ViVmlld0NvbnRleHRNZW51IgorICAgICAgICB3aGVuOiB3aW5kb3dTaG93bgorCisg
ICAgICAgIGZ1bmN0aW9uIGluaXQoKSB7CisKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHAKaW5kZXggOGU5YWIyZS4uMDVh
ZmM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHAK
QEAgLTIwMiw3ICsyMDIsNyBAQCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBRdFBhZ2VD
bGllbnQ6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSogdwogCiBQYXNzUmVmUHRy
PFdlYkNvbnRleHRNZW51UHJveHk+IFF0UGFnZUNsaWVudDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94
eShXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKIHsKLSAgICByZXR1cm4gV2ViQ29udGV4dE1l
bnVQcm94eVF0OjpjcmVhdGUod2ViUGFnZVByb3h5KTsKKyAgICByZXR1cm4gV2ViQ29udGV4dE1l
bnVQcm94eVF0OjpjcmVhdGUod2ViUGFnZVByb3h5LCBtX3dlYlZpZXcpOwogfQogCiB2b2lkIFF0
UGFnZUNsaWVudDo6Zmxhc2hCYWNraW5nU3RvcmVVcGRhdGVzKGNvbnN0IFZlY3RvcjxJbnRSZWN0
PiYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1l
bnVQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVu
dVByb3h5UXQuY3BwCmluZGV4IGQ1MTBjNTMuLmU1NjIzNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuY3BwCkBAIC0yNiwy
OSArMjYsNTYgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRN
ZW51UHJveHlRdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29udGV4dE1lbnUuaD4KKyNpbmNsdWRl
ICJJbnRQb2ludC5oIgorI2luY2x1ZGUgPFFQb2ludD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJDb250ZXh0TWVudVByb3h5UXQ6OldlYkNv
bnRleHRNZW51UHJveHlRdChXZWJQYWdlUHJveHkqKQorV2ViQ29udGV4dE1lbnVQcm94eVF0OjpX
ZWJDb250ZXh0TWVudVByb3h5UXQoV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHksIFFRdWlja1dl
YlZpZXcqIHdlYlZpZXcpIDoKKyAgICBtX3dlYlZpZXcod2ViVmlldyksCisgICAgbV9wYWdlKHdl
YlBhZ2VQcm94eSkKIHsKIH0KIAotUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5UXQ+IFdl
YkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlKFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5KQor
UGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5UXQ+IFdlYkNvbnRleHRNZW51UHJveHlRdDo6
Y3JlYXRlKFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5LCBRUXVpY2tXZWJWaWV3KiB3ZWJWaWV3
KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ29udGV4dE1lbnVQcm94eVF0KHdlYlBh
Z2VQcm94eSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ29udGV4dE1lbnVQcm94eVF0
KHdlYlBhZ2VQcm94eSwgd2ViVmlldykpOwogfQogCiB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlR
dDo6c2hvd0NvbnRleHRNZW51KGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgVmVjdG9y
PFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBpdGVtcykKIHsKKyAgICBpZiAoaXRlbXMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwb3B1bGF0ZShpdGVtcyk7CisKKy8vICBjcmVh
dGVOYXRpdmVNZW51RnJvbUl0ZW1zIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gQ29udGV4dE1lbnVR
dC5jcHA/CisvLyAgbV9jb250ZXh0TWVudSA9IG5ldyBDb250ZXh0TWVudShDb250ZXh0TWVudTo6
Y3JlYXRlTmF0aXZlTWVudUZyb21JdGVtcyhpdGVtcykpOworCisvLyAgUVBvaW50IG1lbnVQb3Np
dGlvbiA9IFFQb2ludChwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSk7CisKIH0KIAogdm9pZCBX
ZWJDb250ZXh0TWVudVByb3h5UXQ6OmhpZGVDb250ZXh0TWVudSgpCiB7CisgICAgaWYgKG1fY29u
dGV4dE1lbnUpCisgICAgeworICAgICAgICBkZWxldGUgbV9jb250ZXh0TWVudS5nZXQoKTsKKyAg
ICB9Cit9CisKK1dlYkNvbnRleHRNZW51UHJveHlRdDo6fldlYkNvbnRleHRNZW51UHJveHlRdCgp
Cit7Cit9CisKK3ZvaWQgV2ViQ29udGV4dE1lbnVQcm94eVF0Ojpwb3B1bGF0ZShjb25zdCBWZWN0
b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4gJiBpdGVtcykKK3sKKyAgICAvLy4uLgogfQogCiAj
aW5jbHVkZSAibW9jX1dlYkNvbnRleHRNZW51UHJveHlRdC5jcHAiCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29u
dGV4dE1lbnVQcm94eVF0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4
dE1lbnVQcm94eVF0LmgKaW5kZXggYmQ3YWViZC4uZGMxMDhjYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuaApAQCAtMjksNiAr
MjksMTYgQEAKIAogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHkuaCIKICNpbmNsdWRlIDxR
dENvcmUvUU9iamVjdD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK2NsYXNzIFFRbWxDb21w
b25lbnQ7CitjbGFzcyBRUW1sQ29udGV4dDsKK2NsYXNzIFFRdWlja1dlYlZpZXc7CitjbGFzcyBR
UXVpY2tJdGVtOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgQ29udGV4dE1lbnU7
Cit9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC0zNywxMyArNDcsMjEgQEAgY2xhc3MgV2Vi
UGFnZVByb3h5OwogY2xhc3MgV2ViQ29udGV4dE1lbnVQcm94eVF0IDogcHVibGljIFFPYmplY3Qs
IHB1YmxpYyBXZWJDb250ZXh0TWVudVByb3h5IHsKICAgICBRX09CSkVDVAogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHlRdD4gY3JlYXRlKFdlYlBhZ2VQ
cm94eSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHlRdD4gY3Jl
YXRlKFdlYlBhZ2VQcm94eSosIFFRdWlja1dlYlZpZXcqKTsKKyAgICB+V2ViQ29udGV4dE1lbnVQ
cm94eVF0KCk7CisgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVudShjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYpOworCitw
dWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZUNvbnRleHRNZW51KCk7CiAKIHBy
aXZhdGU6Ci0gICAgV2ViQ29udGV4dE1lbnVQcm94eVF0KFdlYlBhZ2VQcm94eSopOworICAgIFdl
YkNvbnRleHRNZW51UHJveHlRdChXZWJQYWdlUHJveHkqLCBRUXVpY2tXZWJWaWV3Kik7CisgICAg
dm9pZCBjcmVhdGVJdGVtKFFPYmplY3QqKTsKKyAgICB2b2lkIHBvcHVsYXRlKGNvbnN0IFZlY3Rv
cjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYpOwogCi0gICAgdmlydHVhbCB2b2lkIHNob3dDb250
ZXh0TWVudShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0
TWVudUl0ZW1EYXRhPiYpOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlQ29udGV4dE1lbnUoKTsKKyAg
ICBPd25QdHI8V2ViQ29yZTo6Q29udGV4dE1lbnU+IG1fY29udGV4dE1lbnU7CisgICAgUVF1aWNr
V2ViVmlldyAqbV93ZWJWaWV3OworICAgIFdlYlBhZ2VQcm94eSogbV9wYWdlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>151938</attachid>
            <date>2012-07-12 06:26:18 -0700</date>
            <delta_ts>2012-07-16 06:26:06 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>cm0712_1504_pure.diff</filename>
            <type>text/plain</type>
            <size>16055</size>
            <attacher name="Nandor Huszka">hnandor</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3Bw
CmluZGV4IDA0NmQ4MDMuLjllNGVkMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApAQCAtMjYzLDYgKzI2Myw3IEBAIFFRdWlja1dl
YlZpZXdQcml2YXRlOjpRUXVpY2tXZWJWaWV3UHJpdmF0ZShRUXVpY2tXZWJWaWV3KiB2aWV3cG9y
dCkKICAgICAsIGF1dGhlbnRpY2F0aW9uRGlhbG9nKDApCiAgICAgLCBjZXJ0aWZpY2F0ZVZlcmlm
aWNhdGlvbkRpYWxvZygwKQogICAgICwgaXRlbVNlbGVjdG9yKDApCisgICAgLCBjb250ZXh0TWVu
dSgwKQogICAgICwgcHJveHlBdXRoZW50aWNhdGlvbkRpYWxvZygwKQogICAgICwgZmlsZVBpY2tl
cigwKQogICAgICwgZGF0YWJhc2VRdW90YURpYWxvZygwKQpAQCAtMTExNyw2ICsxMTE4LDIxIEBA
IHZvaWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0SXRlbVNlbGVjdG9yKFFRbWxDb21w
b25lbnQqIGl0ZW1TZWxlY3RvcikKICAgICBlbWl0IGl0ZW1TZWxlY3RvckNoYW5nZWQoKTsKIH0K
IAorUVFtbENvbXBvbmVudCogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGV4dE1lbnUo
KSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZC0+
Y29udGV4dE1lbnU7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29u
dGV4dE1lbnUoUVFtbENvbXBvbmVudCogY29udGV4dE1lbnUpCit7CisgICAgUV9EKFFRdWlja1dl
YlZpZXcpOworICAgIGlmIChkLT5jb250ZXh0TWVudSA9PSBjb250ZXh0TWVudSkKKyAgICAgICAg
cmV0dXJuOworICAgIGQtPmNvbnRleHRNZW51ID0gY29udGV4dE1lbnU7CisgICAgZW1pdCBjb250
ZXh0TWVudUNoYW5nZWQoKTsKK30KKwogUVFtbENvbXBvbmVudCogUVF1aWNrV2ViVmlld0V4cGVy
aW1lbnRhbDo6ZmlsZVBpY2tlcigpIGNvbnN0CiB7CiAgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZp
ZXcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
d19wLmgKaW5kZXggZTJjOGMwZC4uZDRlYzE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCkBAIC0yNjMsNiArMjYzLDcgQEAgY2xh
c3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCA6IHB1YmxpYyBRT2Jq
ZWN0IHsKICAgICBRX1BST1BFUlRZKFFRbWxDb21wb25lbnQqIHByb3h5QXV0aGVudGljYXRpb25E
aWFsb2cgUkVBRCBwcm94eUF1dGhlbnRpY2F0aW9uRGlhbG9nIFdSSVRFIHNldFByb3h5QXV0aGVu
dGljYXRpb25EaWFsb2cgTk9USUZZIHByb3h5QXV0aGVudGljYXRpb25EaWFsb2dDaGFuZ2VkKQog
ICAgIFFfUFJPUEVSVFkoUVFtbENvbXBvbmVudCogY2VydGlmaWNhdGVWZXJpZmljYXRpb25EaWFs
b2cgUkVBRCBjZXJ0aWZpY2F0ZVZlcmlmaWNhdGlvbkRpYWxvZyBXUklURSBzZXRDZXJ0aWZpY2F0
ZVZlcmlmaWNhdGlvbkRpYWxvZyBOT1RJRlkgY2VydGlmaWNhdGVWZXJpZmljYXRpb25EaWFsb2dD
aGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoUVFtbENvbXBvbmVudCogaXRlbVNlbGVjdG9yIFJFQUQg
aXRlbVNlbGVjdG9yIFdSSVRFIHNldEl0ZW1TZWxlY3RvciBOT1RJRlkgaXRlbVNlbGVjdG9yQ2hh
bmdlZCkKKyAgICBRX1BST1BFUlRZKFFRbWxDb21wb25lbnQqIGNvbnRleHRNZW51IFJFQUQgY29u
dGV4dE1lbnUgV1JJVEUgc2V0Q29udGV4dE1lbnUgTk9USUZZIGNvbnRleHRNZW51Q2hhbmdlZCkK
ICAgICBRX1BST1BFUlRZKFFRbWxDb21wb25lbnQqIGZpbGVQaWNrZXIgUkVBRCBmaWxlUGlja2Vy
IFdSSVRFIHNldEZpbGVQaWNrZXIgTk9USUZZIGZpbGVQaWNrZXJDaGFuZ2VkKQogICAgIFFfUFJP
UEVSVFkoUVFtbENvbXBvbmVudCogZGF0YWJhc2VRdW90YURpYWxvZyBSRUFEIGRhdGFiYXNlUXVv
dGFEaWFsb2cgV1JJVEUgc2V0RGF0YWJhc2VRdW90YURpYWxvZyBOT1RJRlkgZGF0YWJhc2VRdW90
YURpYWxvZ0NoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRUW1sQ29tcG9uZW50KiBjb2xvckNob29z
ZXIgUkVBRCBjb2xvckNob29zZXIgV1JJVEUgc2V0Q29sb3JDaG9vc2VyIE5PVElGWSBjb2xvckNo
b29zZXJDaGFuZ2VkKQpAQCAtMjk1LDYgKzI5Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENl
cnRpZmljYXRlVmVyaWZpY2F0aW9uRGlhbG9nKFFRbWxDb21wb25lbnQqKTsKICAgICBRUW1sQ29t
cG9uZW50KiBpdGVtU2VsZWN0b3IoKSBjb25zdDsKICAgICB2b2lkIHNldEl0ZW1TZWxlY3RvcihR
UW1sQ29tcG9uZW50Kik7CisgICAgUVFtbENvbXBvbmVudCogY29udGV4dE1lbnUoKSBjb25zdDsK
KyAgICB2b2lkIHNldENvbnRleHRNZW51KFFRbWxDb21wb25lbnQqKTsKICAgICBRUW1sQ29tcG9u
ZW50KiBwcm94eUF1dGhlbnRpY2F0aW9uRGlhbG9nKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRQcm94
eUF1dGhlbnRpY2F0aW9uRGlhbG9nKFFRbWxDb21wb25lbnQqKTsKICAgICBRUW1sQ29tcG9uZW50
KiBmaWxlUGlja2VyKCkgY29uc3Q7CkBAIC0zNTcsNiArMzYwLDcgQEAgUV9TSUdOQUxTOgogICAg
IHZvaWQgYXV0aGVudGljYXRpb25EaWFsb2dDaGFuZ2VkKCk7CiAgICAgdm9pZCBjZXJ0aWZpY2F0
ZVZlcmlmaWNhdGlvbkRpYWxvZ0NoYW5nZWQoKTsKICAgICB2b2lkIGl0ZW1TZWxlY3RvckNoYW5n
ZWQoKTsKKyAgICB2b2lkIGNvbnRleHRNZW51Q2hhbmdlZCgpOwogICAgIHZvaWQgZmlsZVBpY2tl
ckNoYW5nZWQoKTsKICAgICB2b2lkIGRhdGFiYXNlUXVvdGFEaWFsb2dDaGFuZ2VkKCk7CiAgICAg
dm9pZCBjb2xvckNob29zZXJDaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKaW5kZXggZjEwMmY2MC4uN2QxMjQ3MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
X3BfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
d19wX3AuaApAQCAtMTgyLDYgKzE4Miw3IEBAIHByb3RlY3RlZDoKICAgICBRUW1sQ29tcG9uZW50
KiBhdXRoZW50aWNhdGlvbkRpYWxvZzsKICAgICBRUW1sQ29tcG9uZW50KiBjZXJ0aWZpY2F0ZVZl
cmlmaWNhdGlvbkRpYWxvZzsKICAgICBRUW1sQ29tcG9uZW50KiBpdGVtU2VsZWN0b3I7CisgICAg
UVFtbENvbXBvbmVudCogY29udGV4dE1lbnU7CiAgICAgUVFtbENvbXBvbmVudCogcHJveHlBdXRo
ZW50aWNhdGlvbkRpYWxvZzsKICAgICBRUW1sQ29tcG9uZW50KiBmaWxlUGlja2VyOwogICAgIFFR
bWxDb21wb25lbnQqIGRhdGFiYXNlUXVvdGFEaWFsb2c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL1dlYlZpZXcvdHN0X2NvbnRleHRN
ZW51LnFtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMv
V2ViVmlldy90c3RfY29udGV4dE1lbnUucW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBlNjlkZTI5Li4wMDAwMDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvUXRQYWdlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VD
bGllbnQuY3BwCmluZGV4IDgyZDYzODQuLjBiYmZiYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCkBAIC0yMDUsNyArMjA1LDcgQEAgUGFzc1JlZlB0
cjxXZWJQb3B1cE1lbnVQcm94eT4gUXRQYWdlQ2xpZW50OjpjcmVhdGVQb3B1cE1lbnVQcm94eShX
ZWJQYWdlUHJveHkqIHcKIAogUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBRdFBhZ2VD
bGllbnQ6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkp
CiB7Ci0gICAgcmV0dXJuIFdlYkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlKHdlYlBhZ2VQcm94
eSk7CisgICAgcmV0dXJuIFdlYkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlKHdlYlBhZ2VQcm94
eSwgbV93ZWJWaWV3KTsKIH0KIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmNw
cAppbmRleCBkNTEwYzUzLi5hM2E0ZjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmNwcApAQCAtMjcsMjggKzI3LDIyMSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlRdC5o
IgogCisjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmll
d19wX3AuaCIKKyNpbmNsdWRlIDxRdENvcmUvUUFic3RyYWN0TGlzdE1vZGVsPgorI2luY2x1ZGUg
PFF0UW1sL1FRbWxDb250ZXh0PgorI2luY2x1ZGUgPFF0UW1sL1FRbWxFbmdpbmU+CisKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViQ29udGV4dE1l
bnVQcm94eVF0OjpXZWJDb250ZXh0TWVudVByb3h5UXQoV2ViUGFnZVByb3h5KikKK3N0YXRpYyBR
SGFzaDxpbnQsIFFCeXRlQXJyYXk+IGNyZWF0ZVJvbGVOYW1lc0hhc2goKTsKKworY2xhc3MgQ29u
dGV4dE1lbnVJdGVtTW9kZWwgOiBwdWJsaWMgUUFic3RyYWN0TGlzdE1vZGVsIHsKKyAgICBRX09C
SkVDVAorCitwdWJsaWM6CisgICAgZW51bSBSb2xlcyB7CisgICAgICAgIEVuYWJsZWRSb2xlID0g
UXQ6OlVzZXJSb2xlLAorICAgICAgICBDaGVja2VkUm9sZSA9IFF0OjpVc2VyUm9sZSArIDEKKyAg
ICB9OworCisgICAgQ29udGV4dE1lbnVJdGVtTW9kZWwoY29uc3QgVmVjdG9yPFdlYkNvbnRleHRN
ZW51SXRlbURhdGE+Jik7CisgICAgdmlydHVhbCBpbnQgcm93Q291bnQoY29uc3QgUU1vZGVsSW5k
ZXgmIHBhcmVudCA9IFFNb2RlbEluZGV4KCkpIGNvbnN0IHsgcmV0dXJuIG1fbWVudUl0ZW1zLnNp
emUoKTsgfQorICAgIHZpcnR1YWwgUVZhcmlhbnQgZGF0YShjb25zdCBRTW9kZWxJbmRleCYsIGlu
dCByb2xlID0gUXQ6OkRpc3BsYXlSb2xlKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3Qg
TWVudUl0ZW0geworICAgICAgICBNZW51SXRlbShjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRh
JiB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhKSA6CisgICAgICAgICAgICB0eXBlKHdlYkNvbnRleHRN
ZW51SXRlbURhdGEudHlwZSgpKSwKKyAgICAgICAgICAgIGFjdGlvbih3ZWJDb250ZXh0TWVudUl0
ZW1EYXRhLmFjdGlvbigpKSwKKyAgICAgICAgICAgIGVuYWJsZWQod2ViQ29udGV4dE1lbnVJdGVt
RGF0YS5lbmFibGVkKCkpLAorICAgICAgICAgICAgY2hlY2tlZCh3ZWJDb250ZXh0TWVudUl0ZW1E
YXRhLmNoZWNrZWQoKSksCisgICAgICAgICAgICB0ZXh0KHdlYkNvbnRleHRNZW51SXRlbURhdGEu
dGl0bGUoKSksCisgICAgICAgICAgICBzdWJNZW51RGF0YXMod2ViQ29udGV4dE1lbnVJdGVtRGF0
YS5zdWJtZW51KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghIHN1Yk1lbnVEYXRhcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8c3ViTWVudURhdGFz
LnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvbnRleHRNZW51
SXRlbURhdGEmIHN1Yk1lbnVEYXRhID0gc3ViTWVudURhdGFzW2ldOworICAgICAgICAgICAgICAg
ICAgICAvLyBpZ25vcmUgaXRlbXMgdGhhdCBkbyBub3QgaGF2ZSB0aXRsZSAoZW1wdHkgaXRlbXMg
b3Igc2VwYXJhdG9ycz8pLCBkbyB3ZSBuZWVkIHRoZXNlPworICAgICAgICAgICAgICAgICAgICBp
ZiAoISBzdWJNZW51RGF0YS50aXRsZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN1Yk1lbnVJdGVtcy5hcHBlbmQoTWVudUl0ZW0oc3ViTWVudURhdGEpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBXZWJDb3JlOjpD
b250ZXh0TWVudUl0ZW1UeXBlIHR5cGU7CisgICAgICAgIFdlYkNvcmU6OkNvbnRleHRNZW51QWN0
aW9uIGFjdGlvbjsKKyAgICAgICAgYm9vbCBlbmFibGVkOworICAgICAgICBib29sIGNoZWNrZWQ7
CisgICAgICAgIFFTdHJpbmcgdGV4dDsKKyAgICAgICAgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRl
bURhdGE+IHN1Yk1lbnVEYXRhczsKKyAgICAgICAgVmVjdG9yPE1lbnVJdGVtPiBzdWJNZW51SXRl
bXM7CisgICAgfTsKKworICAgIHZvaWQgYnVpbGRJdGVtcyhjb25zdCBWZWN0b3I8V2ViQ29udGV4
dE1lbnVJdGVtRGF0YT4mIHdlYkNvbnRleHRNZW51SXRlbURhdGFzKTsKKyAgICBWZWN0b3I8TWVu
dUl0ZW0+IG1fbWVudUl0ZW1zOworfTsKKworY2xhc3MgQ29udGV4dE1lbnVDb250ZXh0T2JqZWN0
IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRUG9pbnQg
cG9zaXRpb24gUkVBRCBwb3NpdGlvbiBDT05TVEFOVCBGSU5BTCkKKyAgICBRX1BST1BFUlRZKFFP
YmplY3QqIGl0ZW1zIFJFQUQgaXRlbXMgQ09OU1RBTlQgRklOQUwpCisKK3B1YmxpYzoKKyAgICBD
b250ZXh0TWVudUNvbnRleHRPYmplY3QoY29uc3QgUVBvaW50JiBwb3NpdGlvbiwgY29uc3QgVmVj
dG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBpdGVtcyk7CisKKyAgICBRUG9pbnQgcG9zaXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgQ29udGV4dE1lbnVJdGVtTW9k
ZWwqIGl0ZW1zKCkgeyByZXR1cm4gJm1faXRlbU1vZGVsOyB9CisKKyAgICBRX0lOVk9LQUJMRSB2
b2lkIGFjY2VwdChpbnQgaW5kZXgpOworICAgIFFfSU5WT0tBQkxFIHZvaWQgcmVqZWN0KCkgeyBl
bWl0IHJlamVjdGVkKCk7IH0KKyAgICBRX0lOVk9LQUJMRSBpbnQgcm93Q291bnQoKSB7IHJldHVy
biBtX2l0ZW1Nb2RlbC5yb3dDb3VudCgpOyB9CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIHJlamVj
dGVkKCk7CisKK3ByaXZhdGU6CisgICAgUVBvaW50IG1fcG9zaXRpb247CisgICAgQ29udGV4dE1l
bnVJdGVtTW9kZWwgbV9pdGVtTW9kZWw7Cit9OworCitDb250ZXh0TWVudUNvbnRleHRPYmplY3Q6
OkNvbnRleHRNZW51Q29udGV4dE9iamVjdChjb25zdCBRUG9pbnQmIHBvc2l0aW9uLCBjb25zdCBW
ZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQorICAgIDogbV9wb3NpdGlvbihw
b3NpdGlvbiksCisgICAgICBtX2l0ZW1Nb2RlbChpdGVtcykKK3sKK30KKwordm9pZCBDb250ZXh0
TWVudUNvbnRleHRPYmplY3Q6OmFjY2VwdChpbnQgaW5kZXgpCit7CisgICAgLy8gaG93IGNvdWxk
IHdlIGNhbGwgaGVyZSB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uPworICAgIHByaW50ZigiYWN0aW9u
XG4iKTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKK30KKworc3RhdGljIFFIYXNoPGludCwgUUJ5dGVB
cnJheT4gY3JlYXRlUm9sZU5hbWVzSGFzaCgpCit7CisgICAgUUhhc2g8aW50LCBRQnl0ZUFycmF5
PiByb2xlczsKKyAgICByb2xlc1tRdDo6RGlzcGxheVJvbGVdID0gInRleHQiOworICAgIHJvbGVz
W0NvbnRleHRNZW51SXRlbU1vZGVsOjpFbmFibGVkUm9sZV0gPSAiZW5hYmxlZCI7CisgICAgcm9s
ZXNbQ29udGV4dE1lbnVJdGVtTW9kZWw6OkNoZWNrZWRSb2xlXSA9ICJjaGVja2VkIjsKKyAgICBy
ZXR1cm4gcm9sZXM7Cit9CisKK0NvbnRleHRNZW51SXRlbU1vZGVsOjpDb250ZXh0TWVudUl0ZW1N
b2RlbChjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHdlYkNvbnRleHRNZW51
SXRlbURhdGFzKQogeworICAgIHN0YXRpYyBRSGFzaDxpbnQsIFFCeXRlQXJyYXk+IHJvbGVzID0g
Y3JlYXRlUm9sZU5hbWVzSGFzaCgpOworICAgIHNldFJvbGVOYW1lcyhyb2xlcyk7CisgICAgYnVp
bGRJdGVtcyh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhcyk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViQ29u
dGV4dE1lbnVQcm94eVF0PiBXZWJDb250ZXh0TWVudVByb3h5UXQ6OmNyZWF0ZShXZWJQYWdlUHJv
eHkqIHdlYlBhZ2VQcm94eSkKK1FWYXJpYW50IENvbnRleHRNZW51SXRlbU1vZGVsOjpkYXRhKGNv
bnN0IFFNb2RlbEluZGV4JiBpbmRleCwgaW50IHJvbGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBXZWJDb250ZXh0TWVudVByb3h5UXQod2ViUGFnZVByb3h5KSk7CisgICAgaWYg
KCFpbmRleC5pc1ZhbGlkKCkgfHwgaW5kZXgucm93KCkgPCAwIHx8IGluZGV4LnJvdygpID49IG1f
bWVudUl0ZW1zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7CisKKyAgICBjb25z
dCBNZW51SXRlbSYgaXRlbSA9IG1fbWVudUl0ZW1zW2luZGV4LnJvdygpXTsKKyAgICBzd2l0Y2gg
KHJvbGUpIHsKKyAgICBjYXNlIFF0OjpEaXNwbGF5Um9sZToKKyAgICAgICAgcmV0dXJuIGl0ZW0u
dGV4dDsKKyAgICBjYXNlIEVuYWJsZWRSb2xlOgorICAgICAgICByZXR1cm4gaXRlbS5lbmFibGVk
OworICAgIGNhc2UgQ2hlY2tlZFJvbGU6CisgICAgICAgIHJldHVybiBpdGVtLmNoZWNrZWQ7Cisg
ICAgfQorCisgICAgcmV0dXJuIFFWYXJpYW50KCk7Cit9CisKK3ZvaWQgQ29udGV4dE1lbnVJdGVt
TW9kZWw6OmJ1aWxkSXRlbXMoY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiB3
ZWJDb250ZXh0TWVudUl0ZW1EYXRhcykKK3sKKyAgICBtX21lbnVJdGVtcy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHdlYkNvbnRleHRNZW51SXRlbURhdGFzLnNpemUoKSk7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhcy5zaXplKCk7IGkrKykgeworICAgICAg
ICBjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhID0g
d2ViQ29udGV4dE1lbnVJdGVtRGF0YXNbaV07CisgICAgICAgIC8vIGlnbm9yZSBpdGVtcyB0aGF0
IGRvIG5vdCBoYXZlIHRpdGxlIChlbXB0eSBpdGVtcyBvciBzZXBhcmF0b3JzPyksIGRvIHdlIG5l
ZWQgdGhlc2U/CisgICAgICAgIGlmICghIHdlYkNvbnRleHRNZW51SXRlbURhdGFzW2ldLnRpdGxl
KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9tZW51SXRlbXMuYXBwZW5kKE1lbnVJdGVtKHdl
YkNvbnRleHRNZW51SXRlbURhdGEpKTsKKyAgICB9Cit9CisKK1dlYkNvbnRleHRNZW51UHJveHlR
dDo6V2ViQ29udGV4dE1lbnVQcm94eVF0KFdlYlBhZ2VQcm94eSogd2ViUGFnZVByb3h5LCBRUXVp
Y2tXZWJWaWV3KiB3ZWJWaWV3KSA6CisgICAgbV93ZWJWaWV3KHdlYlZpZXcpLAorICAgIG1fd2Vi
UGFnZVByb3h5KHdlYlBhZ2VQcm94eSkKK3sKK30KKworUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVu
dVByb3h5UXQ+IFdlYkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlKFdlYlBhZ2VQcm94eSogd2Vi
UGFnZVByb3h5LCBRUXVpY2tXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV2ViQ29udGV4dE1lbnVQcm94eVF0KHdlYlBhZ2VQcm94eSwgd2ViVmlldykpOwogfQog
CiB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlRdDo6c2hvd0NvbnRleHRNZW51KGNvbnN0IEludFBv
aW50JiBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBpdGVt
cykKIHsKKyAgICBDb250ZXh0TWVudUNvbnRleHRPYmplY3QqIGNvbnRleHRPYmplY3QgPSBuZXcg
Q29udGV4dE1lbnVDb250ZXh0T2JqZWN0KFFQb2ludChwb3NpdGlvbi54KCksIHBvc2l0aW9uLnko
KSksIGl0ZW1zKTsKKyAgICBjcmVhdGVJdGVtKGNvbnRleHRPYmplY3QpOworICAgIGlmICghbV9j
b250ZXh0TWVudSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFFRdWlja1dlYlZpZXdQ
cml2YXRlOjpnZXQobV93ZWJWaWV3KS0+c2V0RGlhbG9nQWN0aXZlKHRydWUpOwogfQogCiB2b2lk
IFdlYkNvbnRleHRNZW51UHJveHlRdDo6aGlkZUNvbnRleHRNZW51KCkKIHsKKyAgICBtX2NvbnRl
eHRNZW51LmNsZWFyKCk7CisgICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmdldChtX3dlYlZpZXcp
LT5zZXREaWFsb2dBY3RpdmUoZmFsc2UpOworICAgIG1fY29udGV4dC5jbGVhcigpOwogfQogCi0j
aW5jbHVkZSAibW9jX1dlYkNvbnRleHRNZW51UHJveHlRdC5jcHAiCit2b2lkIFdlYkNvbnRleHRN
ZW51UHJveHlRdDo6Y3JlYXRlSXRlbShRT2JqZWN0KiBjb250ZXh0T2JqZWN0KQoreworICAgIFFR
bWxDb21wb25lbnQqIGNvbXBvbmVudCA9IG1fd2ViVmlldy0+ZXhwZXJpbWVudGFsKCktPmNvbnRl
eHRNZW51KCk7CisKKyAgICBpZiAoIWNvbXBvbmVudCkgeworICAgICAgICBkZWxldGUgY29udGV4
dE9iamVjdDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNyZWF0ZUNvbnRleHQoY29t
cG9uZW50LCBjb250ZXh0T2JqZWN0KTsKKyAgICBRT2JqZWN0KiBvYmplY3QgPSBjb21wb25lbnQt
PmJlZ2luQ3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAg
ICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2Nv
bnRleHRNZW51ID0gYWRvcHRQdHIocW9iamVjdF9jYXN0PFFRdWlja0l0ZW0qPihvYmplY3QpKTsK
KyAgICBpZiAoIW1fY29udGV4dE1lbnUpIHsKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7Cisg
ICAgICAgIG1fY29udGV4dE1lbnUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGNvbm5lY3QoY29udGV4dE9iamVjdCwgU0lHTkFMKHJlamVjdGVkKCkpLCBTTE9UKGhpZGVD
b250ZXh0TWVudSgpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOworCisgICAgUVF1aWNrV2ViVmll
d1ByaXZhdGU6OmdldChtX3dlYlZpZXcpLT5hZGRBdHRhY2hlZFByb3BlcnR5VG8obV9jb250ZXh0
TWVudS5nZXQoKSk7CisgICAgbV9jb250ZXh0TWVudS0+c2V0UGFyZW50SXRlbShtX3dlYlZpZXcp
OworCisgICAgLy8gT25seSBmdWxseSBjcmVhdGUgdGhlIGNvbXBvbmVudCBvbmNlIHdlJ3ZlIHNl
dCBib3RoIGEgcGFyZW50CisgICAgLy8gYW5kIHRoZSBuZWVkZWQgY29udGV4dCBhbmQgYXR0YWNo
ZWQgcHJvcGVydGllcywgc28gdGhhdCB0aGUKKyAgICAvLyBkaWFsb2cgY2FuIGRvIHVzZWZ1bCBz
dHVmZiBpbiBDb21wb25lbnQub25Db21wbGV0ZWQoKS4KKyAgICBjb21wb25lbnQtPmNvbXBsZXRl
Q3JlYXRlKCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGVDb250ZXh0
KFFRbWxDb21wb25lbnQqIGNvbXBvbmVudCwgUU9iamVjdCogY29udGV4dE9iamVjdCkKK3sKKyAg
ICBRUW1sQ29udGV4dCogYmFzZUNvbnRleHQgPSBjb21wb25lbnQtPmNyZWF0aW9uQ29udGV4dCgp
OworICAgIGlmICghYmFzZUNvbnRleHQpCisgICAgICAgIGJhc2VDb250ZXh0ID0gUVFtbEVuZ2lu
ZTo6Y29udGV4dEZvck9iamVjdChtX3dlYlZpZXcpOworICAgIG1fY29udGV4dCA9IGFkb3B0UHRy
KG5ldyBRUW1sQ29udGV4dChiYXNlQ29udGV4dCkpOworCisgICAgY29udGV4dE9iamVjdC0+c2V0
UGFyZW50KG1fY29udGV4dC5nZXQoKSk7CisgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0UHJvcGVy
dHkoUUxhdGluMVN0cmluZygibW9kZWwiKSwgY29udGV4dE9iamVjdCk7CisgICAgbV9jb250ZXh0
LT5zZXRDb250ZXh0T2JqZWN0KGNvbnRleHRPYmplY3QpOworfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKIAorI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlRdC5tb2MiCisKKyNpbmNsdWRl
ICJtb2NfV2ViQ29udGV4dE1lbnVQcm94eVF0LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuaAppbmRleCBiZDdhZWJkLi42Nzlh
YzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1l
bnVQcm94eVF0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRN
ZW51UHJveHlRdC5oCkBAIC0yOSw2ICsyOSwxMiBAQAogCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1l
bnVQcm94eS5oIgogI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKworY2xhc3MgUVFtbENvbXBvbmVudDsKK2NsYXNzIFFRbWxDb250ZXh0OworY2xhc3Mg
UVF1aWNrV2ViVmlldzsKK2NsYXNzIFFRdWlja0l0ZW07CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
CkBAIC0zNywxMyArNDMsMjQgQEAgY2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3MgV2ViQ29udGV4
dE1lbnVQcm94eVF0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBXZWJDb250ZXh0TWVudVByb3h5
IHsKICAgICBRX09CSkVDVAogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRl
eHRNZW51UHJveHlRdD4gY3JlYXRlKFdlYlBhZ2VQcm94eSopOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYkNvbnRleHRNZW51UHJveHlRdD4gY3JlYXRlKFdlYlBhZ2VQcm94eSosIFFRdWlja1dl
YlZpZXcqKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgdmlydHVhbCB2b2lkIGhpZGVDb250ZXh0
TWVudSgpOwogCiBwcml2YXRlOgotICAgIFdlYkNvbnRleHRNZW51UHJveHlRdChXZWJQYWdlUHJv
eHkqKTsKKyAgICBXZWJDb250ZXh0TWVudVByb3h5UXQoV2ViUGFnZVByb3h5KiwgUVF1aWNrV2Vi
VmlldyopOwogCiAgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVudShjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYpOwotICAg
IHZpcnR1YWwgdm9pZCBoaWRlQ29udGV4dE1lbnUoKTsKKyAgICB2b2lkIGNyZWF0ZUl0ZW0oUU9i
amVjdCopOworICAgIHZvaWQgY3JlYXRlQ29udGV4dChRUW1sQ29tcG9uZW50KiwgUU9iamVjdCop
OworCisgICAgT3duUHRyPFFRbWxDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgT3duUHRyPFFRdWlj
a0l0ZW0+IG1fY29udGV4dE1lbnU7CisKKyAgICBRUXVpY2tXZWJWaWV3KiBtX3dlYlZpZXc7Cisg
ICAgLy8gd2UgZG8gbm90IHVzZSB0aGlzIHlldAorICAgIFdlYlBhZ2VQcm94eSogbV93ZWJQYWdl
UHJveHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL01p
bmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnFyYyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlC
cm93c2VyLnFyYwppbmRleCBlMjFlZWYzLi5kYzg3MjJhIDEwMDY0NAotLS0gYS9Ub29scy9NaW5p
QnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5xcmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWlu
aUJyb3dzZXIucXJjCkBAIC0zMiw1ICszMiw2IEBACiAgICAgICAgIDxmaWxlPnFtbC9Qcm94eUF1
dGhlbnRpY2F0aW9uRGlhbG9nLnFtbDwvZmlsZT4KICAgICAgICAgPGZpbGU+cW1sL1Njcm9sbElu
ZGljYXRvci5xbWw8L2ZpbGU+CiAgICAgICAgIDxmaWxlPnFtbC9WaWV3cG9ydEluZm9JdGVtLnFt
bDwvZmlsZT4KKyAgICAgICAgPGZpbGU+cW1sL0NvbnRleHRNZW51LnFtbDwvZmlsZT4KICAgICA8
L3FyZXNvdXJjZT4KIDwvUkNDPgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1s
L0Jyb3dzZXJXaW5kb3cucW1sIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5k
b3cucW1sCmluZGV4IDhjZDU4ZWIuLjZiNWU0NmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93
c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9x
bWwvQnJvd3NlcldpbmRvdy5xbWwKQEAgLTM1OSw2ICszNTksNyBAQCBSZWN0YW5nbGUgewogICAg
ICAgICBleHBlcmltZW50YWwucHJlZmVyZW5jZXMud2ViR0xFbmFibGVkOiB0cnVlCiAgICAgICAg
IGV4cGVyaW1lbnRhbC5wcmVmZXJyZWRNaW5pbXVtQ29udGVudHNXaWR0aDogOTgwCiAgICAgICAg
IGV4cGVyaW1lbnRhbC5pdGVtU2VsZWN0b3I6IEl0ZW1TZWxlY3RvciB7IH0KKyAgICAgICAgZXhw
ZXJpbWVudGFsLmNvbnRleHRNZW51OiBDb250ZXh0TWVudSB7IH0KICAgICAgICAgZXhwZXJpbWVu
dGFsLmFsZXJ0RGlhbG9nOiBBbGVydERpYWxvZyB7IH0KICAgICAgICAgZXhwZXJpbWVudGFsLmNv
bmZpcm1EaWFsb2c6IENvbmZpcm1EaWFsb2cgeyB9CiAgICAgICAgIGV4cGVyaW1lbnRhbC5wcm9t
cHREaWFsb2c6IFByb21wdERpYWxvZyB7IH0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2Vy
L3F0L3FtbC9Db250ZXh0TWVudS5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQ29udGV4
dE1lbnUucW1sCmluZGV4IGU2OWRlMjkuLjU0ZDViNTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlC
cm93c2VyL3F0L3FtbC9Db250ZXh0TWVudS5xbWwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQv
cW1sL0NvbnRleHRNZW51LnFtbApAQCAtMCwwICsxLDQyIEBACitpbXBvcnQgUXRRdWljayAyLjAK
KworTW91c2VBcmVhIHsKKyAgICBwcm9wZXJ0eSBRdE9iamVjdCBtZW51TW9kZWw6IG1vZGVsCisg
ICAgcHJvcGVydHkgaW50IGl0ZW1IZWlnaHQ6IDIwCisgICAgcHJvcGVydHkgaW50IGl0ZW1XaWR0
aDogMTUwCisgICAgYW5jaG9ycy5maWxsOiBwYXJlbnQKKyAgICBvbkNsaWNrZWQ6IG1lbnVNb2Rl
bC5yZWplY3QoKQorCisgICAgUmVjdGFuZ2xlIHsKKyAgICAgICAgY2xpcDogdHJ1ZQorICAgICAg
ICB4OiBtZW51TW9kZWwucG9zaXRpb24ueAorICAgICAgICB5OiBtZW51TW9kZWwucG9zaXRpb24u
eQorICAgICAgICBoZWlnaHQ6IG1lbnVNb2RlbC5yb3dDb3VudCgpICogaXRlbUhlaWdodAorICAg
ICAgICB3aWR0aDogaXRlbVdpZHRoCisgICAgICAgIHJhZGl1czogNQorICAgICAgICBjb2xvcjog
InJlZCIKKworICAgICAgICBMaXN0VmlldyB7CisgICAgICAgICAgICBhbmNob3JzLmZpbGw6IHBh
cmVudAorICAgICAgICAgICAgbW9kZWw6IG1lbnVNb2RlbC5pdGVtcworCisgICAgICAgICAgICBk
ZWxlZ2F0ZTogUmVjdGFuZ2xlIHsKKyAgICAgICAgICAgICAgICBjb2xvcjogImdyZWVuIgorICAg
ICAgICAgICAgICAgIGhlaWdodDogaXRlbUhlaWdodAorICAgICAgICAgICAgICAgIHdpZHRoOiBw
YXJlbnQud2lkdGgKKworICAgICAgICAgICAgICAgIFRleHQgeworICAgICAgICAgICAgICAgICAg
ICBhbmNob3JzLmNlbnRlckluOiBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogbW9k
ZWwudGV4dAorICAgICAgICAgICAgICAgICAgICBjb2xvcjogbW9kZWwuZW5hYmxlZCA/ICJ3aGl0
ZSIgOiAiYmxhY2siCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgTW91c2VB
cmVhIHsKKyAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnQKKyAgICAgICAg
ICAgICAgICAgICAgZW5hYmxlZDogbW9kZWwuZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICBv
bkNsaWNrZWQ6IG1lbnVNb2RlbC5hY2NlcHQobW9kZWwuaW5kZXgpCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152520</attachid>
            <date>2012-07-16 06:26:06 -0700</date>
            <delta_ts>2012-07-18 05:04:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>api0716-up.diff</filename>
            <type>text/plain</type>
            <size>21717</size>
            <attacher name="Nandor Huszka">hnandor</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3NDFmN2U4Li4zZWQ3NmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTItMDctMTYgIE5hbmRvciBIdXN6a2EgIDxobmFuZG9yQGluZi51LXN6ZWdlZC5odT4K
KworICAgICAgICBbUXRdW1dLMl0gQWRkIGEgUU1MIGJhc2VkIHNvbHV0aW9uIGZvciBDb250ZXh0
IE1lbnVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MDUyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENv
bnRleHRNZW51IEFQSSBpbiBXZWJLaXQyLiBBIG5ldyBwcm9wZXJ0eSBpcyBjcmVhdGVkIGluIHRo
ZSBleHBlcmltZW50YWwgV2ViVmlldy4gCisgICAgICAgIE5vdyB3ZSBjYW4gc2hvdywgaGlkZSB0
aGUgbWVudSBhbmQgc2VsZWN0IGFuIGl0ZW0uIFRocm91Z2ggdGhlIENvbnRleHRNZW51Q29udGV4
dE9iamVjdCAKKyAgICAgICAgd2UgY2FuIHVzZSB0aGVzZSBmdW5jdGlvbiwgaXQgaGlkZXMgdGhl
IENvbnRleHRNZW51SXRlbU1vZGVsLCB3aGljaCBjb250YWlucyB0aGUgbWVudWl0ZW1zJyBkYXRh
LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcDoKKyAgICAg
ICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpRUXVpY2tXZWJWaWV3UHJpdmF0ZSk6CisgICAgICAg
IChRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250ZXh0TWVudSk6CisgICAgICAgIChRUXVp
Y2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZXh0TWVudSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnZpZXdfcF9wLmg6CisgICAgICAgIChRUXVpY2tXZWJWaWV3UHJpdmF0ZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlF0UGFnZUNsaWVudDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eSk6CisgICAgICAgICogVUlQcm9j
ZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5jcHA6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoQ29udGV4dE1lbnVJdGVtTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVu
dUl0ZW1Nb2RlbDo6cm93Q291bnQpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUl0ZW1N
b2RlbDo6Z2V0TWVudUl0ZW1EYXRhKToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVJdGVt
TW9kZWw6Ok1lbnVJdGVtOjpNZW51SXRlbSk6CisgICAgICAgIChNZW51SXRlbSk6CisgICAgICAg
IChDb250ZXh0TWVudUNvbnRleHRPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVu
dUNvbnRleHRPYmplY3Q6OnBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVD
b250ZXh0T2JqZWN0OjppdGVtcyk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q29udGV4
dE9iamVjdDo6cmVqZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDb250ZXh0T2Jq
ZWN0Ojpyb3dDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q29udGV4dE9iamVj
dDo6Q29udGV4dE1lbnVDb250ZXh0T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1l
bnVDb250ZXh0T2JqZWN0OjphY2NlcHQpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVSb2xlTmFt
ZXNIYXNoKToKKyAgICAgICAgKFdlYktpdDo6bWVudVNpemUpOgorICAgICAgICAoV2ViS2l0OjpD
b250ZXh0TWVudUl0ZW1Nb2RlbDo6Q29udGV4dE1lbnVJdGVtTW9kZWwpOgorICAgICAgICAoV2Vi
S2l0OjpDb250ZXh0TWVudUl0ZW1Nb2RlbDo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRl
eHRNZW51SXRlbU1vZGVsOjpidWlsZEl0ZW1zKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4
dE1lbnVQcm94eVF0OjpXZWJDb250ZXh0TWVudVByb3h5UXQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb250ZXh0TWVudVByb3h5UXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRl
eHRNZW51UHJveHlRdDo6c2hvd0NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29u
dGV4dE1lbnVQcm94eVF0OjpoaWRlQ29udGV4dE1lbnUpOgorICAgICAgICAoV2ViS2l0OjpXZWJD
b250ZXh0TWVudVByb3h5UXQ6OnNlbGVjdENvbnRleHRNZW51SXRlbSk6CisgICAgICAgIChXZWJL
aXQ6OldlYkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlSXRlbSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlQ29udGV4dCk6CisgICAgICAgICogVUlQcm9j
ZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5oOgorICAgICAgICAoV2ViQ29udGV4dE1lbnVQ
cm94eVF0KToKKwogMjAxMi0wNy0xNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IG1ha2UgZGlzdGNoZWNrLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5k
ZXggMjViZjJlNy4uMDUwNGQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC0yNjMsNiArMjYzLDcgQEAgUVF1aWNrV2ViVmll
d1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2YXRlKFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0KQog
ICAgICwgYXV0aGVudGljYXRpb25EaWFsb2coMCkKICAgICAsIGNlcnRpZmljYXRlVmVyaWZpY2F0
aW9uRGlhbG9nKDApCiAgICAgLCBpdGVtU2VsZWN0b3IoMCkKKyAgICAsIGNvbnRleHRNZW51KDAp
CiAgICAgLCBwcm94eUF1dGhlbnRpY2F0aW9uRGlhbG9nKDApCiAgICAgLCBmaWxlUGlja2VyKDAp
CiAgICAgLCBkYXRhYmFzZVF1b3RhRGlhbG9nKDApCkBAIC0xMTE3LDYgKzExMTgsMjEgQEAgdm9p
ZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRJdGVtU2VsZWN0b3IoUVFtbENvbXBvbmVu
dCogaXRlbVNlbGVjdG9yKQogICAgIGVtaXQgaXRlbVNlbGVjdG9yQ2hhbmdlZCgpOwogfQogCitR
UW1sQ29tcG9uZW50KiBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpjb250ZXh0TWVudSgpIGNv
bnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOworICAgIHJldHVybiBkLT5jb250
ZXh0TWVudTsKK30KKwordm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZXh0
TWVudShRUW1sQ29tcG9uZW50KiBjb250ZXh0TWVudSkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmll
dyk7CisgICAgaWYgKGQtPmNvbnRleHRNZW51ID09IGNvbnRleHRNZW51KQorICAgICAgICByZXR1
cm47CisgICAgZC0+Y29udGV4dE1lbnUgPSBjb250ZXh0TWVudTsKKyAgICBlbWl0IGNvbnRleHRN
ZW51Q2hhbmdlZCgpOworfQorCiBRUW1sQ29tcG9uZW50KiBRUXVpY2tXZWJWaWV3RXhwZXJpbWVu
dGFsOjpmaWxlUGlja2VyKCkgY29uc3QKIHsKICAgICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZp
ZXdfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3Au
aAppbmRleCBjZWFhYjY4Li44ZDMxYjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKQEAgLTI2NCw2ICsyNjQsNyBAQCBjbGFzcyBR
V0VCS0lUX0VYUE9SVCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsIDogcHVibGljIFFPYmplY3Qg
ewogICAgIFFfUFJPUEVSVFkoUVFtbENvbXBvbmVudCogcHJveHlBdXRoZW50aWNhdGlvbkRpYWxv
ZyBSRUFEIHByb3h5QXV0aGVudGljYXRpb25EaWFsb2cgV1JJVEUgc2V0UHJveHlBdXRoZW50aWNh
dGlvbkRpYWxvZyBOT1RJRlkgcHJveHlBdXRoZW50aWNhdGlvbkRpYWxvZ0NoYW5nZWQpCiAgICAg
UV9QUk9QRVJUWShRUW1sQ29tcG9uZW50KiBjZXJ0aWZpY2F0ZVZlcmlmaWNhdGlvbkRpYWxvZyBS
RUFEIGNlcnRpZmljYXRlVmVyaWZpY2F0aW9uRGlhbG9nIFdSSVRFIHNldENlcnRpZmljYXRlVmVy
aWZpY2F0aW9uRGlhbG9nIE5PVElGWSBjZXJ0aWZpY2F0ZVZlcmlmaWNhdGlvbkRpYWxvZ0NoYW5n
ZWQpCiAgICAgUV9QUk9QRVJUWShRUW1sQ29tcG9uZW50KiBpdGVtU2VsZWN0b3IgUkVBRCBpdGVt
U2VsZWN0b3IgV1JJVEUgc2V0SXRlbVNlbGVjdG9yIE5PVElGWSBpdGVtU2VsZWN0b3JDaGFuZ2Vk
KQorICAgIFFfUFJPUEVSVFkoUVFtbENvbXBvbmVudCogY29udGV4dE1lbnUgUkVBRCBjb250ZXh0
TWVudSBXUklURSBzZXRDb250ZXh0TWVudSBOT1RJRlkgY29udGV4dE1lbnVDaGFuZ2VkKQogICAg
IFFfUFJPUEVSVFkoUVFtbENvbXBvbmVudCogZmlsZVBpY2tlciBSRUFEIGZpbGVQaWNrZXIgV1JJ
VEUgc2V0RmlsZVBpY2tlciBOT1RJRlkgZmlsZVBpY2tlckNoYW5nZWQpCiAgICAgUV9QUk9QRVJU
WShRUW1sQ29tcG9uZW50KiBkYXRhYmFzZVF1b3RhRGlhbG9nIFJFQUQgZGF0YWJhc2VRdW90YURp
YWxvZyBXUklURSBzZXREYXRhYmFzZVF1b3RhRGlhbG9nIE5PVElGWSBkYXRhYmFzZVF1b3RhRGlh
bG9nQ2hhbmdlZCkKICAgICBRX1BST1BFUlRZKFFRbWxDb21wb25lbnQqIGNvbG9yQ2hvb3NlciBS
RUFEIGNvbG9yQ2hvb3NlciBXUklURSBzZXRDb2xvckNob29zZXIgTk9USUZZIGNvbG9yQ2hvb3Nl
ckNoYW5nZWQpCkBAIC0yOTYsNiArMjk3LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2VydGlm
aWNhdGVWZXJpZmljYXRpb25EaWFsb2coUVFtbENvbXBvbmVudCopOwogICAgIFFRbWxDb21wb25l
bnQqIGl0ZW1TZWxlY3RvcigpIGNvbnN0OwogICAgIHZvaWQgc2V0SXRlbVNlbGVjdG9yKFFRbWxD
b21wb25lbnQqKTsKKyAgICBRUW1sQ29tcG9uZW50KiBjb250ZXh0TWVudSgpIGNvbnN0OworICAg
IHZvaWQgc2V0Q29udGV4dE1lbnUoUVFtbENvbXBvbmVudCopOwogICAgIFFRbWxDb21wb25lbnQq
IHByb3h5QXV0aGVudGljYXRpb25EaWFsb2coKSBjb25zdDsKICAgICB2b2lkIHNldFByb3h5QXV0
aGVudGljYXRpb25EaWFsb2coUVFtbENvbXBvbmVudCopOwogICAgIFFRbWxDb21wb25lbnQqIGZp
bGVQaWNrZXIoKSBjb25zdDsKQEAgLTM1OCw2ICszNjEsNyBAQCBRX1NJR05BTFM6CiAgICAgdm9p
ZCBhdXRoZW50aWNhdGlvbkRpYWxvZ0NoYW5nZWQoKTsKICAgICB2b2lkIGNlcnRpZmljYXRlVmVy
aWZpY2F0aW9uRGlhbG9nQ2hhbmdlZCgpOwogICAgIHZvaWQgaXRlbVNlbGVjdG9yQ2hhbmdlZCgp
OworICAgIHZvaWQgY29udGV4dE1lbnVDaGFuZ2VkKCk7CiAgICAgdm9pZCBmaWxlUGlja2VyQ2hh
bmdlZCgpOwogICAgIHZvaWQgZGF0YWJhc2VRdW90YURpYWxvZ0NoYW5nZWQoKTsKICAgICB2b2lk
IGNvbG9yQ2hvb3NlckNoYW5nZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaAppbmRleCBmMTAyZjYwLi43ZDEyNDcyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9w
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3Bf
cC5oCkBAIC0xODIsNiArMTgyLDcgQEAgcHJvdGVjdGVkOgogICAgIFFRbWxDb21wb25lbnQqIGF1
dGhlbnRpY2F0aW9uRGlhbG9nOwogICAgIFFRbWxDb21wb25lbnQqIGNlcnRpZmljYXRlVmVyaWZp
Y2F0aW9uRGlhbG9nOwogICAgIFFRbWxDb21wb25lbnQqIGl0ZW1TZWxlY3RvcjsKKyAgICBRUW1s
Q29tcG9uZW50KiBjb250ZXh0TWVudTsKICAgICBRUW1sQ29tcG9uZW50KiBwcm94eUF1dGhlbnRp
Y2F0aW9uRGlhbG9nOwogICAgIFFRbWxDb21wb25lbnQqIGZpbGVQaWNrZXI7CiAgICAgUVFtbENv
bXBvbmVudCogZGF0YWJhc2VRdW90YURpYWxvZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0UGFnZUNsaWVudC5jcHAKaW5kZXggODJkNjM4NC4uMGJiZmJjOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHAKQEAgLTIwNSw3ICsyMDUsNyBA
QCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5PiBRdFBhZ2VDbGllbnQ6OmNyZWF0ZVBvcHVw
TWVudVByb3h5KFdlYlBhZ2VQcm94eSogdwogCiBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJv
eHk+IFF0UGFnZUNsaWVudDo6Y3JlYXRlQ29udGV4dE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHdl
YlBhZ2VQcm94eSkKIHsKLSAgICByZXR1cm4gV2ViQ29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGUo
d2ViUGFnZVByb3h5KTsKKyAgICByZXR1cm4gV2ViQ29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGUo
d2ViUGFnZVByb3h5LCBtX3dlYlZpZXcpOwogfQogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09M
T1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1l
bnVQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVu
dVByb3h5UXQuY3BwCmluZGV4IGQ1MTBjNTMuLmQ0MGJhNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuY3BwCkBAIC0xLDYg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMjggKzI4LDI0
MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlR
dC5oIgogCisjaW5jbHVkZSAiUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmgiCisjaW5jbHVkZSAicXF1
aWNrd2Vidmlld19wLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wX3AuaCIKKyNpbmNsdWRl
IDxRdENvcmUvUUFic3RyYWN0TGlzdE1vZGVsPgorI2luY2x1ZGUgPFF0UW1sL1FRbWxDb250ZXh0
PgorI2luY2x1ZGUgPFF0UW1sL1FRbWxFbmdpbmU+CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViQ29udGV4dE1lbnVQcm94eVF0OjpXZWJDb250
ZXh0TWVudVByb3h5UXQoV2ViUGFnZVByb3h5KikKK3N0YXRpYyBRSGFzaDxpbnQsIFFCeXRlQXJy
YXk+IGNyZWF0ZVJvbGVOYW1lc0hhc2goKTsKK3N0YXRpYyBpbnQgbWVudVNpemUoY29uc3QgVmVj
dG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+Jik7CisKK2NsYXNzIENvbnRleHRNZW51SXRlbU1v
ZGVsIDogcHVibGljIFFBYnN0cmFjdExpc3RNb2RlbCB7CisgICAgUV9PQkpFQ1QKKworcHVibGlj
OgorICAgIGVudW0gUm9sZXMgeworICAgICAgICBFbmFibGVkUm9sZSA9IFF0OjpVc2VyUm9sZSwK
KyAgICAgICAgQ2hlY2tlZFJvbGUgPSBRdDo6VXNlclJvbGUgKyAxCisgICAgfTsKKworICAgIENv
bnRleHRNZW51SXRlbU1vZGVsKGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYp
OworICAgIHZpcnR1YWwgaW50IHJvd0NvdW50KGNvbnN0IFFNb2RlbEluZGV4JiBwYXJlbnQgPSBR
TW9kZWxJbmRleCgpKSBjb25zdCB7IHJldHVybiBtX21lbnVJdGVtcy5zaXplKCk7IH0KKyAgICB2
aXJ0dWFsIFFWYXJpYW50IGRhdGEoY29uc3QgUU1vZGVsSW5kZXgmLCBpbnQgcm9sZSA9IFF0OjpE
aXNwbGF5Um9sZSkgY29uc3Q7CisKKyAgICBXZWJDb250ZXh0TWVudUl0ZW1EYXRhIGdldE1lbnVJ
dGVtRGF0YShpbnQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9tZW51SXRlbXNbaW5k
ZXhdLm1lbnVEYXRhOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgTWVudUl0ZW0gewor
ICAgICAgICBNZW51SXRlbShjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiB3ZWJDb250ZXh0
TWVudUl0ZW1EYXRhKSA6CisgICAgICAgICAgICB0eXBlKHdlYkNvbnRleHRNZW51SXRlbURhdGEu
dHlwZSgpKSwKKyAgICAgICAgICAgIGFjdGlvbih3ZWJDb250ZXh0TWVudUl0ZW1EYXRhLmFjdGlv
bigpKSwKKyAgICAgICAgICAgIGVuYWJsZWQod2ViQ29udGV4dE1lbnVJdGVtRGF0YS5lbmFibGVk
KCkpLAorICAgICAgICAgICAgY2hlY2tlZCh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhLmNoZWNrZWQo
KSksCisgICAgICAgICAgICB0ZXh0KHdlYkNvbnRleHRNZW51SXRlbURhdGEudGl0bGUoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbWVudURhdGEgPSB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhOwor
ICAgICAgICB9CisKKyAgICAgICAgV2ViQ29yZTo6Q29udGV4dE1lbnVJdGVtVHlwZSB0eXBlOwor
ICAgICAgICBXZWJDb3JlOjpDb250ZXh0TWVudUFjdGlvbiBhY3Rpb247CisgICAgICAgIGJvb2wg
ZW5hYmxlZDsKKyAgICAgICAgYm9vbCBjaGVja2VkOworICAgICAgICBRU3RyaW5nIHRleHQ7Cisg
ICAgICAgIFdlYkNvbnRleHRNZW51SXRlbURhdGEgbWVudURhdGE7CisgICAgfTsKKworICAgIHZv
aWQgYnVpbGRJdGVtcyhjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mLCBWZWN0
b3I8TWVudUl0ZW0+Jik7CisKKyAgICBWZWN0b3I8TWVudUl0ZW0+IG1fbWVudUl0ZW1zOworfTsK
KworY2xhc3MgQ29udGV4dE1lbnVDb250ZXh0T2JqZWN0IDogcHVibGljIFFPYmplY3QgeworICAg
IFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRUG9pbnQgcG9zaXRpb24gUkVBRCBwb3NpdGlvbiBD
T05TVEFOVCBGSU5BTCkKKyAgICBRX1BST1BFUlRZKFFPYmplY3QqIGl0ZW1zIFJFQUQgaXRlbXMg
Q09OU1RBTlQgRklOQUwpCisKK3B1YmxpYzoKKyAgICBDb250ZXh0TWVudUNvbnRleHRPYmplY3Qo
Y29uc3QgUVBvaW50JiBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURh
dGE+JiBpdGVtcyk7CisKKyAgICBRUG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bv
c2l0aW9uOyB9CisgICAgQ29udGV4dE1lbnVJdGVtTW9kZWwqIGl0ZW1zKCkgeyByZXR1cm4gJm1f
aXRlbU1vZGVsOyB9CisKKyAgICBRX0lOVk9LQUJMRSB2b2lkIGFjY2VwdChpbnQgaW5kZXgpOwor
ICAgIFFfSU5WT0tBQkxFIHZvaWQgcmVqZWN0KCkgeyBlbWl0IHJlamVjdGVkKCk7IH0KKyAgICBR
X0lOVk9LQUJMRSBpbnQgcm93Q291bnQoKSB7IHJldHVybiBtX2l0ZW1Nb2RlbC5yb3dDb3VudCgp
OyB9CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIHJlamVjdGVkKCk7CisgICAgdm9pZCBjb250ZXh0
TWVudUl0ZW1TZWxlY3RlZChXZWJDb250ZXh0TWVudUl0ZW1EYXRhKTsKKworcHJpdmF0ZToKKyAg
ICBRUG9pbnQgbV9wb3NpdGlvbjsKKyAgICBDb250ZXh0TWVudUl0ZW1Nb2RlbCBtX2l0ZW1Nb2Rl
bDsKK307CisKK0NvbnRleHRNZW51Q29udGV4dE9iamVjdDo6Q29udGV4dE1lbnVDb250ZXh0T2Jq
ZWN0KGNvbnN0IFFQb2ludCYgcG9zaXRpb24sIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0
ZW1EYXRhPiYgaXRlbXMpCisgICAgOiBtX3Bvc2l0aW9uKHBvc2l0aW9uKSwKKyAgICAgIG1faXRl
bU1vZGVsKGl0ZW1zKQoreworfQorCit2b2lkIENvbnRleHRNZW51Q29udGV4dE9iamVjdDo6YWNj
ZXB0KGludCBpbmRleCkKK3sKKyAgICBlbWl0IGNvbnRleHRNZW51SXRlbVNlbGVjdGVkKG1faXRl
bU1vZGVsLmdldE1lbnVJdGVtRGF0YShpbmRleCkpOworfQorCitzdGF0aWMgUUhhc2g8aW50LCBR
Qnl0ZUFycmF5PiBjcmVhdGVSb2xlTmFtZXNIYXNoKCkKK3sKKyAgICBRSGFzaDxpbnQsIFFCeXRl
QXJyYXk+IHJvbGVzOworICAgIHJvbGVzW1F0OjpEaXNwbGF5Um9sZV0gPSAidGV4dCI7CisgICAg
cm9sZXNbQ29udGV4dE1lbnVJdGVtTW9kZWw6OkVuYWJsZWRSb2xlXSA9ICJlbmFibGVkIjsKKyAg
ICByb2xlc1tDb250ZXh0TWVudUl0ZW1Nb2RlbDo6Q2hlY2tlZFJvbGVdID0gImNoZWNrZWQiOwor
ICAgIHJldHVybiByb2xlczsKK30KKworc3RhdGljIGludCBtZW51U2l6ZShjb25zdCBWZWN0b3I8
V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHdlYkNvbnRleHRNZW51SXRlbURhdGFzKQoreworICAg
IGludCBzaXplID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHdlYkNvbnRleHRNZW51SXRl
bURhdGFzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmICghd2ViQ29udGV4dE1lbnVJdGVtRGF0
YXNbaV0udGl0bGUoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBzaXplKys7CisgICAgICAgIFZl
Y3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBzdWJtZW51SXRlbXNEYXRhID0gd2ViQ29udGV4
dE1lbnVJdGVtRGF0YXNbaV0uc3VibWVudSgpOworICAgICAgICBpZiAoIXN1Ym1lbnVJdGVtc0Rh
dGEuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2l6ZSArPSBtZW51U2l6ZShzdWJtZW51SXRlbXNE
YXRhKTsKKyAgICB9CisgICAgcmV0dXJuIHNpemU7Cit9CisKK0NvbnRleHRNZW51SXRlbU1vZGVs
OjpDb250ZXh0TWVudUl0ZW1Nb2RlbChjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0
YT4mIHdlYkNvbnRleHRNZW51SXRlbURhdGFzKQoreworICAgIHN0YXRpYyBRSGFzaDxpbnQsIFFC
eXRlQXJyYXk+IHJvbGVzID0gY3JlYXRlUm9sZU5hbWVzSGFzaCgpOworICAgIHNldFJvbGVOYW1l
cyhyb2xlcyk7CisgICAgbV9tZW51SXRlbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtZW51U2l6
ZSh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhcykpOworICAgIGJ1aWxkSXRlbXMod2ViQ29udGV4dE1l
bnVJdGVtRGF0YXMsIG1fbWVudUl0ZW1zKTsKK30KKworUVZhcmlhbnQgQ29udGV4dE1lbnVJdGVt
TW9kZWw6OmRhdGEoY29uc3QgUU1vZGVsSW5kZXgmIGluZGV4LCBpbnQgcm9sZSkgY29uc3QKK3sK
KyAgICBpZiAoIWluZGV4LmlzVmFsaWQoKSB8fCBpbmRleC5yb3coKSA8IDAgfHwgaW5kZXgucm93
KCkgPj0gbV9tZW51SXRlbXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKKwor
ICAgIGNvbnN0IE1lbnVJdGVtJiBpdGVtID0gbV9tZW51SXRlbXNbaW5kZXgucm93KCldOworICAg
IHN3aXRjaCAocm9sZSkgeworICAgIGNhc2UgUXQ6OkRpc3BsYXlSb2xlOgorICAgICAgICByZXR1
cm4gaXRlbS50ZXh0OworICAgIGNhc2UgRW5hYmxlZFJvbGU6CisgICAgICAgIHJldHVybiBpdGVt
LmVuYWJsZWQ7CisgICAgY2FzZSBDaGVja2VkUm9sZToKKyAgICAgICAgcmV0dXJuIGl0ZW0uY2hl
Y2tlZDsKKyAgICB9CisKKyAgICByZXR1cm4gUVZhcmlhbnQoKTsKK30KKwordm9pZCBDb250ZXh0
TWVudUl0ZW1Nb2RlbDo6YnVpbGRJdGVtcyhjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVt
RGF0YT4mIHdlYkNvbnRleHRNZW51SXRlbURhdGFzLCBWZWN0b3I8TWVudUl0ZW0+JiBtZW51SXRl
bXMpCiB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhcy5z
aXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiB3ZWJD
b250ZXh0TWVudUl0ZW1EYXRhID0gd2ViQ29udGV4dE1lbnVJdGVtRGF0YXNbaV07CisgICAgICAg
IGlmICghd2ViQ29udGV4dE1lbnVJdGVtRGF0YS50aXRsZSgpLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgbWVudUl0ZW1zLmFwcGVuZChNZW51SXRlbSh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhKSk7
CisgICAgICAgICAgICBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4gc3VibWVudUl0ZW1z
RGF0YSA9IHdlYkNvbnRleHRNZW51SXRlbURhdGFzW2ldLnN1Ym1lbnUoKTsKKyAgICAgICAgICAg
IGlmICghc3VibWVudUl0ZW1zRGF0YS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnVpbGRJ
dGVtcyhzdWJtZW51SXRlbXNEYXRhLCBtZW51SXRlbXMpOworICAgICAgICB9CisgICAgfQogfQog
Ci1QYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHlRdD4gV2ViQ29udGV4dE1lbnVQcm94eVF0
OjpjcmVhdGUoV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHkpCitXZWJDb250ZXh0TWVudVByb3h5
UXQ6OldlYkNvbnRleHRNZW51UHJveHlRdChXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSwgUVF1
aWNrV2ViVmlldyogd2ViVmlldykgOgorICAgIG1fd2ViVmlldyh3ZWJWaWV3KSwKKyAgICBtX3dl
YlBhZ2VQcm94eSh3ZWJQYWdlUHJveHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJD
b250ZXh0TWVudVByb3h5UXQod2ViUGFnZVByb3h5KSk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29u
dGV4dE1lbnVQcm94eVF0PiBXZWJDb250ZXh0TWVudVByb3h5UXQ6OmNyZWF0ZShXZWJQYWdlUHJv
eHkqIHdlYlBhZ2VQcm94eSwgUVF1aWNrV2ViVmlldyogd2ViVmlldykKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYkNvbnRleHRNZW51UHJveHlRdCh3ZWJQYWdlUHJveHksIHdlYlZpZXcp
KTsKIH0KIAogdm9pZCBXZWJDb250ZXh0TWVudVByb3h5UXQ6OnNob3dDb250ZXh0TWVudShjb25z
dCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRh
PiYgaXRlbXMpCiB7CisgICAgQ29udGV4dE1lbnVDb250ZXh0T2JqZWN0KiBjb250ZXh0T2JqZWN0
ID0gbmV3IENvbnRleHRNZW51Q29udGV4dE9iamVjdChRUG9pbnQocG9zaXRpb24ueCgpLCBwb3Np
dGlvbi55KCkpLCBpdGVtcyk7CisgICAgY3JlYXRlSXRlbShjb250ZXh0T2JqZWN0KTsKKyAgICBp
ZiAoIW1fY29udGV4dE1lbnUpCisgICAgICAgIHJldHVybjsKKworICAgIFFRdWlja1dlYlZpZXdQ
cml2YXRlOjpnZXQobV93ZWJWaWV3KS0+c2V0RGlhbG9nQWN0aXZlKHRydWUpOwogfQogCiB2b2lk
IFdlYkNvbnRleHRNZW51UHJveHlRdDo6aGlkZUNvbnRleHRNZW51KCkKIHsKKyAgICBtX2NvbnRl
eHRNZW51LmNsZWFyKCk7CisgICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmdldChtX3dlYlZpZXcp
LT5zZXREaWFsb2dBY3RpdmUoZmFsc2UpOworICAgIG1fY29udGV4dC5jbGVhcigpOwogfQogCi0j
aW5jbHVkZSAibW9jX1dlYkNvbnRleHRNZW51UHJveHlRdC5jcHAiCit2b2lkIFdlYkNvbnRleHRN
ZW51UHJveHlRdDo6c2VsZWN0Q29udGV4dE1lbnVJdGVtKFdlYkNvbnRleHRNZW51SXRlbURhdGEg
d2ViQ29udGV4dE1lbnVJdGVtRGF0YSkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+Y29udGV4dE1l
bnVJdGVtU2VsZWN0ZWQod2ViQ29udGV4dE1lbnVJdGVtRGF0YSk7CisgICAgaGlkZUNvbnRleHRN
ZW51KCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGVJdGVtKFFPYmpl
Y3QqIGNvbnRleHRPYmplY3QpCit7CisgICAgUVFtbENvbXBvbmVudCogY29tcG9uZW50ID0gbV93
ZWJWaWV3LT5leHBlcmltZW50YWwoKS0+Y29udGV4dE1lbnUoKTsKKworICAgIGlmICghY29tcG9u
ZW50KSB7CisgICAgICAgIGRlbGV0ZSBjb250ZXh0T2JqZWN0OworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY3JlYXRlQ29udGV4dChjb21wb25lbnQsIGNvbnRleHRPYmplY3QpOworICAg
IFFPYmplY3QqIG9iamVjdCA9IGNvbXBvbmVudC0+YmVnaW5DcmVhdGUobV9jb250ZXh0LmdldCgp
KTsKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dE1lbnUgPSBhZG9wdFB0cihxb2JqZWN0
X2Nhc3Q8UVF1aWNrSXRlbSo+KG9iamVjdCkpOworICAgIGlmICghbV9jb250ZXh0TWVudSkgewor
ICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAgICAgbV9jb250ZXh0TWVudS5jbGVhcigp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcVJlZ2lzdGVyTWV0YVR5cGU8V2ViQ29u
dGV4dE1lbnVJdGVtRGF0YT4oIldlYkNvbnRleHRNZW51SXRlbURhdGEiKTsKKyAgICBjb25uZWN0
KGNvbnRleHRPYmplY3QsIFNJR05BTChjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChXZWJDb250ZXh0
TWVudUl0ZW1EYXRhKSksIFNMT1Qoc2VsZWN0Q29udGV4dE1lbnVJdGVtKFdlYkNvbnRleHRNZW51
SXRlbURhdGEpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOworICAgIGNvbm5lY3QoY29udGV4dE9i
amVjdCwgU0lHTkFMKHJlamVjdGVkKCkpLCBTTE9UKGhpZGVDb250ZXh0TWVudSgpKSwgUXQ6OlF1
ZXVlZENvbm5lY3Rpb24pOworCisgICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmdldChtX3dlYlZp
ZXcpLT5hZGRBdHRhY2hlZFByb3BlcnR5VG8obV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgbV9j
b250ZXh0TWVudS0+c2V0UGFyZW50SXRlbShtX3dlYlZpZXcpOworCisgICAgLy8gT25seSBmdWxs
eSBjcmVhdGUgdGhlIGNvbXBvbmVudCBvbmNlIHdlJ3ZlIHNldCBib3RoIGEgcGFyZW50CisgICAg
Ly8gYW5kIHRoZSBuZWVkZWQgY29udGV4dCBhbmQgYXR0YWNoZWQgcHJvcGVydGllcywgc28gdGhh
dCB0aGUKKyAgICAvLyBkaWFsb2cgY2FuIGRvIHVzZWZ1bCBzdHVmZiBpbiBDb21wb25lbnQub25D
b21wbGV0ZWQoKS4KKyAgICBjb21wb25lbnQtPmNvbXBsZXRlQ3JlYXRlKCk7Cit9CisKK3ZvaWQg
V2ViQ29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGVDb250ZXh0KFFRbWxDb21wb25lbnQqIGNvbXBv
bmVudCwgUU9iamVjdCogY29udGV4dE9iamVjdCkKK3sKKyAgICBRUW1sQ29udGV4dCogYmFzZUNv
bnRleHQgPSBjb21wb25lbnQtPmNyZWF0aW9uQ29udGV4dCgpOworICAgIGlmICghYmFzZUNvbnRl
eHQpCisgICAgICAgIGJhc2VDb250ZXh0ID0gUVFtbEVuZ2luZTo6Y29udGV4dEZvck9iamVjdCht
X3dlYlZpZXcpOworICAgIG1fY29udGV4dCA9IGFkb3B0UHRyKG5ldyBRUW1sQ29udGV4dChiYXNl
Q29udGV4dCkpOworCisgICAgY29udGV4dE9iamVjdC0+c2V0UGFyZW50KG1fY29udGV4dC5nZXQo
KSk7CisgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0UHJvcGVydHkoUUxhdGluMVN0cmluZygibW9k
ZWwiKSwgY29udGV4dE9iamVjdCk7CisgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0T2JqZWN0KGNv
bnRleHRPYmplY3QpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorI2luY2x1ZGUgIldl
YkNvbnRleHRNZW51UHJveHlRdC5tb2MiCisKKyNpbmNsdWRlICJtb2NfV2ViQ29udGV4dE1lbnVQ
cm94eVF0LmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJD
b250ZXh0TWVudVByb3h5UXQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250
ZXh0TWVudVByb3h5UXQuaAppbmRleCBiZDdhZWJkLi4wODNhN2Q2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5oCkBAIC0yOSw2
ICsyOSwxMiBAQAogCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eS5oIgogI2luY2x1ZGUg
PFF0Q29yZS9RT2JqZWN0PgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworY2xhc3MgUVFtbENv
bXBvbmVudDsKK2NsYXNzIFFRbWxDb250ZXh0OworY2xhc3MgUVF1aWNrV2ViVmlldzsKK2NsYXNz
IFFRdWlja0l0ZW07CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC0zNywxMyArNDMsMjQgQEAg
Y2xhc3MgV2ViUGFnZVByb3h5OwogY2xhc3MgV2ViQ29udGV4dE1lbnVQcm94eVF0IDogcHVibGlj
IFFPYmplY3QsIHB1YmxpYyBXZWJDb250ZXh0TWVudVByb3h5IHsKICAgICBRX09CSkVDVAogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHlRdD4gY3JlYXRl
KFdlYlBhZ2VQcm94eSopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJv
eHlRdD4gY3JlYXRlKFdlYlBhZ2VQcm94eSosIFFRdWlja1dlYlZpZXcqKTsKKworcHVibGljIFFf
U0xPVFM6CisgICAgdmlydHVhbCB2b2lkIGhpZGVDb250ZXh0TWVudSgpOworICAgIHZvaWQgc2Vs
ZWN0Q29udGV4dE1lbnVJdGVtKFdlYkNvbnRleHRNZW51SXRlbURhdGEpOwogCiBwcml2YXRlOgot
ICAgIFdlYkNvbnRleHRNZW51UHJveHlRdChXZWJQYWdlUHJveHkqKTsKKyAgICBXZWJDb250ZXh0
TWVudVByb3h5UXQoV2ViUGFnZVByb3h5KiwgUVF1aWNrV2ViVmlldyopOwogCiAgICAgdmlydHVh
bCB2b2lkIHNob3dDb250ZXh0TWVudShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFZl
Y3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYpOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlQ29u
dGV4dE1lbnUoKTsKKyAgICB2b2lkIGNyZWF0ZUl0ZW0oUU9iamVjdCopOworICAgIHZvaWQgY3Jl
YXRlQ29udGV4dChRUW1sQ29tcG9uZW50KiwgUU9iamVjdCopOworCisgICAgT3duUHRyPFFRbWxD
b250ZXh0PiBtX2NvbnRleHQ7CisgICAgT3duUHRyPFFRdWlja0l0ZW0+IG1fY29udGV4dE1lbnU7
CisKKyAgICBRUXVpY2tXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgV2ViUGFnZVByb3h5KiBtX3dl
YlBhZ2VQcm94eTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDEzN2FhOTAuLmM3Njk0NWIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNiBAQAorMjAxMi0wNy0xNiAgTmFuZG9yIEh1c3prYSAgPGhuYW5kb3JAaW5mLnUtc3plZ2Vk
Lmh1PgorCisgICAgICAgIFtRdF1bV0syXSBBZGQgYSBRTUwgYmFzZWQgc29sdXRpb24gZm9yIENv
bnRleHQgTWVudXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTcwNTI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ29udGV4dG1lbnUncyBRTUwgaW1wbGVtZW50YXRpb24gZm9yIE1pbmlCcm93c2VyLgorCisg
ICAgICAgICogTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjOgorICAgICAgICAqIE1pbmlC
cm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbDoKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9x
dC9xbWwvQ29udGV4dE1lbnUucW1sOiBBZGRlZC4KKwogMjAxMi0wNy0xNSAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4
IG1ha2UgZGlzdGNoZWNrLgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJy
b3dzZXIucXJjIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjCmluZGV4IGUy
MWVlZjMuLmRjODcyMmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93
c2VyLnFyYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5xcmMKQEAgLTMy
LDUgKzMyLDYgQEAKICAgICAgICAgPGZpbGU+cW1sL1Byb3h5QXV0aGVudGljYXRpb25EaWFsb2cu
cW1sPC9maWxlPgogICAgICAgICA8ZmlsZT5xbWwvU2Nyb2xsSW5kaWNhdG9yLnFtbDwvZmlsZT4K
ICAgICAgICAgPGZpbGU+cW1sL1ZpZXdwb3J0SW5mb0l0ZW0ucW1sPC9maWxlPgorICAgICAgICA8
ZmlsZT5xbWwvQ29udGV4dE1lbnUucW1sPC9maWxlPgogICAgIDwvcXJlc291cmNlPgogPC9SQ0M+
CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwg
Yi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwKaW5kZXggOGNkNThl
Yi4uNmI1ZTQ2ZSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJX
aW5kb3cucW1sCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFt
bApAQCAtMzU5LDYgKzM1OSw3IEBAIFJlY3RhbmdsZSB7CiAgICAgICAgIGV4cGVyaW1lbnRhbC5w
cmVmZXJlbmNlcy53ZWJHTEVuYWJsZWQ6IHRydWUKICAgICAgICAgZXhwZXJpbWVudGFsLnByZWZl
cnJlZE1pbmltdW1Db250ZW50c1dpZHRoOiA5ODAKICAgICAgICAgZXhwZXJpbWVudGFsLml0ZW1T
ZWxlY3RvcjogSXRlbVNlbGVjdG9yIHsgfQorICAgICAgICBleHBlcmltZW50YWwuY29udGV4dE1l
bnU6IENvbnRleHRNZW51IHsgfQogICAgICAgICBleHBlcmltZW50YWwuYWxlcnREaWFsb2c6IEFs
ZXJ0RGlhbG9nIHsgfQogICAgICAgICBleHBlcmltZW50YWwuY29uZmlybURpYWxvZzogQ29uZmly
bURpYWxvZyB7IH0KICAgICAgICAgZXhwZXJpbWVudGFsLnByb21wdERpYWxvZzogUHJvbXB0RGlh
bG9nIHsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0NvbnRleHRNZW51
LnFtbCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Db250ZXh0TWVudS5xbWwKaW5kZXggZTY5
ZGUyOS4uMzFjYzk1MCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0NvbnRl
eHRNZW51LnFtbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQ29udGV4dE1lbnUucW1s
CkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
VW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K2ltcG9ydCBRdFF1aWNrIDIuMAorCitNb3VzZUFyZWEgeworICAgIHByb3BlcnR5IFF0T2JqZWN0
IG1lbnVNb2RlbDogbW9kZWwKKyAgICBwcm9wZXJ0eSBpbnQgaXRlbUhlaWdodDogMjAKKyAgICBw
cm9wZXJ0eSBpbnQgaXRlbVdpZHRoOiAxNTAKKyAgICBhbmNob3JzLmZpbGw6IHBhcmVudAorICAg
IG9uQ2xpY2tlZDogbWVudU1vZGVsLnJlamVjdCgpCisKKyAgICBSZWN0YW5nbGUgeworICAgICAg
ICBjbGlwOiB0cnVlCisgICAgICAgIHg6IG1lbnVNb2RlbC5wb3NpdGlvbi54CisgICAgICAgIHk6
IG1lbnVNb2RlbC5wb3NpdGlvbi55CisgICAgICAgIGhlaWdodDogbWVudU1vZGVsLnJvd0NvdW50
KCkgKiBpdGVtSGVpZ2h0CisgICAgICAgIHdpZHRoOiBpdGVtV2lkdGgKKyAgICAgICAgcmFkaXVz
OiA1CisgICAgICAgIGNvbG9yOiAicmVkIgorCisgICAgICAgIExpc3RWaWV3IHsKKyAgICAgICAg
ICAgIGFuY2hvcnMuZmlsbDogcGFyZW50CisgICAgICAgICAgICBtb2RlbDogbWVudU1vZGVsLml0
ZW1zCisKKyAgICAgICAgICAgIGRlbGVnYXRlOiBSZWN0YW5nbGUgeworICAgICAgICAgICAgICAg
IGNvbG9yOiAiYmx1ZSIKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IGl0ZW1IZWlnaHQKKyAgICAg
ICAgICAgICAgICB3aWR0aDogcGFyZW50LndpZHRoCisKKyAgICAgICAgICAgICAgICBUZXh0IHsK
KyAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5jZW50ZXJJbjogcGFyZW50CisgICAgICAgICAg
ICAgICAgICAgIHRleHQ6IG1vZGVsLnRleHQKKyAgICAgICAgICAgICAgICAgICAgY29sb3I6IG1v
ZGVsLmVuYWJsZWQgPyAid2hpdGUiIDogImJsYWNrIgorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIE1vdXNlQXJlYSB7CisgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMuZmls
bDogcGFyZW50CisgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IG1vZGVsLmVuYWJsZWQKKyAg
ICAgICAgICAgICAgICAgICAgb25DbGlja2VkOiBtZW51TW9kZWwuYWNjZXB0KG1vZGVsLmluZGV4
KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152988</attachid>
            <date>2012-07-18 05:04:40 -0700</date>
            <delta_ts>2012-07-26 06:12:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>cmapi0718.diff</filename>
            <type>text/plain</type>
            <size>19730</size>
            <attacher name="Nandor Huszka">hnandor</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlMDY0ZWM5Li4zZjAwOWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEg
QEAKKzIwMTItMDctMTggIE5hbmRvciBIdXN6a2EgIDxobmFuZG9yQGluZi51LXN6ZWdlZC5odT4K
KworICAgICAgICBbUXRdW1dLMl0gQWRkIGEgUU1MIGJhc2VkIHNvbHV0aW9uIGZvciBDb250ZXh0
IE1lbnVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MDUyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENv
bnRleHRNZW51IEFQSSBpbiBXZWJLaXQyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpRUXVpY2tX
ZWJWaWV3UHJpdmF0ZSk6IENvbnRleHQgbWVudSBwcm9wZXJ0eSdzCisgICAgICAgIGdldHRlciBh
bmQgc2V0dGVyLgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGV4dE1l
bnUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGV4dE1lbnUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oOgorICAgICAgICAoUVF1aWNr
V2ViVmlld1ByaXZhdGUpOiBBZGQgYSBuZXcgY29udGV4dCBtZW51CisgICAgICAgIHByb3BlcnR5
IHRvIHRoZSBleHBlcmltZW50YWwgd2Vidmlldy4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQ
YWdlQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRQYWdlQ2xpZW50OjpjcmVhdGVDb250
ZXh0TWVudVByb3h5KTogUGFzcyB0aGUgV2ViVmlldyB0bworICAgICAgICB0aGUgV2ViQ29udGV4
dE1lbnVQcm94eVF0IHRvby4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQ
cm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChDb250ZXh0TWVudUl0ZW1N
b2RlbCk6IENvbnRhaW5zIGRhdGFzIG9mIGEgbWVudWl0ZW0uCisgICAgICAgIChXZWJLaXQ6OkNv
bnRleHRNZW51SXRlbU1vZGVsOjpyb3dDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRN
ZW51SXRlbU1vZGVsOjpnZXRNZW51SXRlbURhdGEpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0
TWVudUl0ZW1Nb2RlbDo6TWVudUl0ZW06Ok1lbnVJdGVtKToKKyAgICAgICAgKE1lbnVJdGVtKToK
KyAgICAgICAgKENvbnRleHRNZW51Q29udGV4dE9iamVjdCk6IFByb3ZpZGUgaW50ZXJmYWNlIHRv
IHRoZSBncmFwaGljYWwgbGF5ZXIsCisgICAgICAgIGEgbW9kZWwgb2JqZWN0LiBTaWduYWxzIGNh
biBiZSBhY2Nlc3NlZCB0aHJvdWdoIGl0LgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNv
bnRleHRPYmplY3Q6OnBvc2l0aW9uKTogVGhlIHBvc2l0aW9uIG9mIHJpZ2h0IGNsaWNraW5nLgor
ICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNvbnRleHRPYmplY3Q6Oml0ZW1zKTogUmV0dXJu
cyBhbGwgdGhlIG1lbnVpdGVtcy4KKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDb250ZXh0
T2JqZWN0OjpyZWplY3QpOiBTaWduYWwsIHVzZWQgd2hlbiBpdAorICAgICAgICBpcyBuZWVkZWQg
dG8gaGlkZSB0aGUgbWVudS4KKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDb250ZXh0T2Jq
ZWN0Ojpyb3dDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q29udGV4dE9iamVj
dDo6Q29udGV4dE1lbnVDb250ZXh0T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1l
bnVDb250ZXh0T2JqZWN0OjphY2NlcHQpOiBTaWduYWwsIHVzZWQgd2hlbiBhIG1lbnVpdGVtCisg
ICAgICAgIGlzIHNlbGVjdGVkLgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVSb2xlTmFtZXNIYXNo
KToKKyAgICAgICAgKFdlYktpdDo6bWVudVNpemUpOiBOdW1iZXIgb2YgYWxsIHRoZSBub24tZW1w
dHkgdGl0bGUgbWVudWl0ZW1zLgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUl0ZW1Nb2Rl
bDo6Q29udGV4dE1lbnVJdGVtTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUl0
ZW1Nb2RlbDo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51SXRlbU1vZGVsOjpi
dWlsZEl0ZW1zKTogU3RvcmVzIHRoZSBnaXZlbiBtZW51aXRlbXMuCisgICAgICAgIEZvciBub3cg
aXQgb25seSBkZWFscyB3aXRoIG5vbi1lbXB0eSB0aXRsZSBvbmVzLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb250ZXh0TWVudVByb3h5UXQ6OldlYkNvbnRleHRNZW51UHJveHlRdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlKTogUmV0dXJuIGEgbmV3IFdl
YkNvbnRleHRNZW51UHJveHlRdCBvYmplY3QuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRN
ZW51UHJveHlRdDo6c2hvd0NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4
dE1lbnVQcm94eVF0OjpoaWRlQ29udGV4dE1lbnUpOiBTbG90IG9mCisgICAgICAgIENvbnRleHRN
ZW51Q29udGV4dE9iamVjdDo6cmVqZWN0LgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVu
dVByb3h5UXQ6OnNlbGVjdENvbnRleHRNZW51SXRlbSk6IFNsb3Qgb2YKKyAgICAgICAgQ29udGV4
dE1lbnVDb250ZXh0T2JqZWN0OjphY2NlcHQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRN
ZW51UHJveHlRdDo6Y3JlYXRlSXRlbSk6IENyZWF0ZSB0aGUgQ29udGV4dE1lbnVDb250ZXh0T2Jq
ZWN0LAorICAgICAgICBiaW5kIHRvIHRoZSBleHBlcmltZW50YWwgV2ViVmlldydzIGNvbnRleHQg
bWVudSBwcm9wZXJ0eSwgYW5kIHNldCBzaWduYWxzL3Nsb3RzLgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb250ZXh0TWVudVByb3h5UXQ6OmNyZWF0ZUNvbnRleHQpOiBTZXQgdGhlIG1vZGVsIG9iamVj
dCBmb3IgdGhlCisgICAgICAgIGdyYXBoaWNhbCBsYXllci4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
cXQvV2ViQ29udGV4dE1lbnVQcm94eVF0Lmg6CisgICAgICAgIChXZWJDb250ZXh0TWVudVByb3h5
UXQpOgorCiAyMDEyLTA3LTE4ICBZb3VuZ1RhZWNrIFNvbmcgIDx5b3VuZ3RhZWNrLnNvbmdAc2Ft
c3VuZy5jb20+CiAKICAgICAgICAgW1dLMl1bRUZMXSBBZGQgYSBjb21tb24gY29kZSB1c2luZyBD
b2xvciBpbnN0ZWFkIG9mIFFDb2xvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5kZXggMjViZjJlNy4uMDUwNGQ5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC0y
NjMsNiArMjYzLDcgQEAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2YXRl
KFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0KQogICAgICwgYXV0aGVudGljYXRpb25EaWFsb2coMCkK
ICAgICAsIGNlcnRpZmljYXRlVmVyaWZpY2F0aW9uRGlhbG9nKDApCiAgICAgLCBpdGVtU2VsZWN0
b3IoMCkKKyAgICAsIGNvbnRleHRNZW51KDApCiAgICAgLCBwcm94eUF1dGhlbnRpY2F0aW9uRGlh
bG9nKDApCiAgICAgLCBmaWxlUGlja2VyKDApCiAgICAgLCBkYXRhYmFzZVF1b3RhRGlhbG9nKDAp
CkBAIC0xMTE3LDYgKzExMTgsMjEgQEAgdm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpz
ZXRJdGVtU2VsZWN0b3IoUVFtbENvbXBvbmVudCogaXRlbVNlbGVjdG9yKQogICAgIGVtaXQgaXRl
bVNlbGVjdG9yQ2hhbmdlZCgpOwogfQogCitRUW1sQ29tcG9uZW50KiBRUXVpY2tXZWJWaWV3RXhw
ZXJpbWVudGFsOjpjb250ZXh0TWVudSgpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dl
YlZpZXcpOworICAgIHJldHVybiBkLT5jb250ZXh0TWVudTsKK30KKwordm9pZCBRUXVpY2tXZWJW
aWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZXh0TWVudShRUW1sQ29tcG9uZW50KiBjb250ZXh0TWVu
dSkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgaWYgKGQtPmNvbnRleHRNZW51ID09
IGNvbnRleHRNZW51KQorICAgICAgICByZXR1cm47CisgICAgZC0+Y29udGV4dE1lbnUgPSBjb250
ZXh0TWVudTsKKyAgICBlbWl0IGNvbnRleHRNZW51Q2hhbmdlZCgpOworfQorCiBRUW1sQ29tcG9u
ZW50KiBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpmaWxlUGlja2VyKCkgY29uc3QKIHsKICAg
ICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAppbmRleCBjZWFhYjY4Li44ZDMxYjcyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgK
QEAgLTI2NCw2ICsyNjQsNyBAQCBjbGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tXZWJWaWV3RXhw
ZXJpbWVudGFsIDogcHVibGljIFFPYmplY3QgewogICAgIFFfUFJPUEVSVFkoUVFtbENvbXBvbmVu
dCogcHJveHlBdXRoZW50aWNhdGlvbkRpYWxvZyBSRUFEIHByb3h5QXV0aGVudGljYXRpb25EaWFs
b2cgV1JJVEUgc2V0UHJveHlBdXRoZW50aWNhdGlvbkRpYWxvZyBOT1RJRlkgcHJveHlBdXRoZW50
aWNhdGlvbkRpYWxvZ0NoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRUW1sQ29tcG9uZW50KiBjZXJ0
aWZpY2F0ZVZlcmlmaWNhdGlvbkRpYWxvZyBSRUFEIGNlcnRpZmljYXRlVmVyaWZpY2F0aW9uRGlh
bG9nIFdSSVRFIHNldENlcnRpZmljYXRlVmVyaWZpY2F0aW9uRGlhbG9nIE5PVElGWSBjZXJ0aWZp
Y2F0ZVZlcmlmaWNhdGlvbkRpYWxvZ0NoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRUW1sQ29tcG9u
ZW50KiBpdGVtU2VsZWN0b3IgUkVBRCBpdGVtU2VsZWN0b3IgV1JJVEUgc2V0SXRlbVNlbGVjdG9y
IE5PVElGWSBpdGVtU2VsZWN0b3JDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoUVFtbENvbXBvbmVu
dCogY29udGV4dE1lbnUgUkVBRCBjb250ZXh0TWVudSBXUklURSBzZXRDb250ZXh0TWVudSBOT1RJ
RlkgY29udGV4dE1lbnVDaGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoUVFtbENvbXBvbmVudCogZmls
ZVBpY2tlciBSRUFEIGZpbGVQaWNrZXIgV1JJVEUgc2V0RmlsZVBpY2tlciBOT1RJRlkgZmlsZVBp
Y2tlckNoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRUW1sQ29tcG9uZW50KiBkYXRhYmFzZVF1b3Rh
RGlhbG9nIFJFQUQgZGF0YWJhc2VRdW90YURpYWxvZyBXUklURSBzZXREYXRhYmFzZVF1b3RhRGlh
bG9nIE5PVElGWSBkYXRhYmFzZVF1b3RhRGlhbG9nQ2hhbmdlZCkKICAgICBRX1BST1BFUlRZKFFR
bWxDb21wb25lbnQqIGNvbG9yQ2hvb3NlciBSRUFEIGNvbG9yQ2hvb3NlciBXUklURSBzZXRDb2xv
ckNob29zZXIgTk9USUZZIGNvbG9yQ2hvb3NlckNoYW5nZWQpCkBAIC0yOTYsNiArMjk3LDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0Q2VydGlmaWNhdGVWZXJpZmljYXRpb25EaWFsb2coUVFtbENv
bXBvbmVudCopOwogICAgIFFRbWxDb21wb25lbnQqIGl0ZW1TZWxlY3RvcigpIGNvbnN0OwogICAg
IHZvaWQgc2V0SXRlbVNlbGVjdG9yKFFRbWxDb21wb25lbnQqKTsKKyAgICBRUW1sQ29tcG9uZW50
KiBjb250ZXh0TWVudSgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGV4dE1lbnUoUVFtbENvbXBv
bmVudCopOwogICAgIFFRbWxDb21wb25lbnQqIHByb3h5QXV0aGVudGljYXRpb25EaWFsb2coKSBj
b25zdDsKICAgICB2b2lkIHNldFByb3h5QXV0aGVudGljYXRpb25EaWFsb2coUVFtbENvbXBvbmVu
dCopOwogICAgIFFRbWxDb21wb25lbnQqIGZpbGVQaWNrZXIoKSBjb25zdDsKQEAgLTM1OCw2ICsz
NjEsNyBAQCBRX1NJR05BTFM6CiAgICAgdm9pZCBhdXRoZW50aWNhdGlvbkRpYWxvZ0NoYW5nZWQo
KTsKICAgICB2b2lkIGNlcnRpZmljYXRlVmVyaWZpY2F0aW9uRGlhbG9nQ2hhbmdlZCgpOwogICAg
IHZvaWQgaXRlbVNlbGVjdG9yQ2hhbmdlZCgpOworICAgIHZvaWQgY29udGV4dE1lbnVDaGFuZ2Vk
KCk7CiAgICAgdm9pZCBmaWxlUGlja2VyQ2hhbmdlZCgpOwogICAgIHZvaWQgZGF0YWJhc2VRdW90
YURpYWxvZ0NoYW5nZWQoKTsKICAgICB2b2lkIGNvbG9yQ2hvb3NlckNoYW5nZWQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3Au
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaApp
bmRleCBmMTAyZjYwLi43ZDEyNDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCkBAIC0xODIsNiArMTgyLDcgQEAgcHJvdGVj
dGVkOgogICAgIFFRbWxDb21wb25lbnQqIGF1dGhlbnRpY2F0aW9uRGlhbG9nOwogICAgIFFRbWxD
b21wb25lbnQqIGNlcnRpZmljYXRlVmVyaWZpY2F0aW9uRGlhbG9nOwogICAgIFFRbWxDb21wb25l
bnQqIGl0ZW1TZWxlY3RvcjsKKyAgICBRUW1sQ29tcG9uZW50KiBjb250ZXh0TWVudTsKICAgICBR
UW1sQ29tcG9uZW50KiBwcm94eUF1dGhlbnRpY2F0aW9uRGlhbG9nOwogICAgIFFRbWxDb21wb25l
bnQqIGZpbGVQaWNrZXI7CiAgICAgUVFtbENvbXBvbmVudCogZGF0YWJhc2VRdW90YURpYWxvZzsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHAKaW5kZXggODJk
NjM4NC4uMGJiZmJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
UGFnZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNs
aWVudC5jcHAKQEAgLTIwNSw3ICsyMDUsNyBAQCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5
PiBRdFBhZ2VDbGllbnQ6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSogdwogCiBQ
YXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFF0UGFnZUNsaWVudDo6Y3JlYXRlQ29udGV4
dE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKIHsKLSAgICByZXR1cm4gV2Vi
Q29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGUod2ViUGFnZVByb3h5KTsKKyAgICByZXR1cm4gV2Vi
Q29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGUod2ViUGFnZVByb3h5LCBtX3dlYlZpZXcpOwogfQog
CiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuY3BwCmluZGV4IGQ1MTBjNTMuLjNl
MmQzY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0
TWVudVByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250
ZXh0TWVudVByb3h5UXQuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsMjggKzI4LDI0MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlRdC5oIgogCisjaW5jbHVkZSAiUGxhdGZvcm1Qb3B1
cE1lbnVEYXRhLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCisjaW5jbHVkZSAicXF1
aWNrd2Vidmlld19wX3AuaCIKKyNpbmNsdWRlIDxRdENvcmUvUUFic3RyYWN0TGlzdE1vZGVsPgor
I2luY2x1ZGUgPFF0UW1sL1FRbWxDb250ZXh0PgorI2luY2x1ZGUgPFF0UW1sL1FRbWxFbmdpbmU+
CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2Vi
Q29udGV4dE1lbnVQcm94eVF0OjpXZWJDb250ZXh0TWVudVByb3h5UXQoV2ViUGFnZVByb3h5KikK
K3N0YXRpYyBRSGFzaDxpbnQsIFFCeXRlQXJyYXk+IGNyZWF0ZVJvbGVOYW1lc0hhc2goKTsKK3N0
YXRpYyBpbnQgbWVudVNpemUoY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+Jik7
CisKK2NsYXNzIENvbnRleHRNZW51SXRlbU1vZGVsIDogcHVibGljIFFBYnN0cmFjdExpc3RNb2Rl
bCB7CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIGVudW0gUm9sZXMgeworICAgICAgICBF
bmFibGVkUm9sZSA9IFF0OjpVc2VyUm9sZSwKKyAgICAgICAgQ2hlY2tlZFJvbGUgPSBRdDo6VXNl
clJvbGUgKyAxCisgICAgfTsKKworICAgIENvbnRleHRNZW51SXRlbU1vZGVsKGNvbnN0IFZlY3Rv
cjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYpOworICAgIHZpcnR1YWwgaW50IHJvd0NvdW50KGNv
bnN0IFFNb2RlbEluZGV4JiBwYXJlbnQgPSBRTW9kZWxJbmRleCgpKSBjb25zdCB7IHJldHVybiBt
X21lbnVJdGVtcy5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIFFWYXJpYW50IGRhdGEoY29uc3QgUU1v
ZGVsSW5kZXgmLCBpbnQgcm9sZSA9IFF0OjpEaXNwbGF5Um9sZSkgY29uc3Q7CisKKyAgICBXZWJD
b250ZXh0TWVudUl0ZW1EYXRhIGdldE1lbnVJdGVtRGF0YShpbnQgaW5kZXgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9tZW51SXRlbXNbaW5kZXhdLm1lbnVEYXRhOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBzdHJ1Y3QgTWVudUl0ZW0geworICAgICAgICBNZW51SXRlbShjb25zdCBXZWJDb250
ZXh0TWVudUl0ZW1EYXRhJiB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhKSA6CisgICAgICAgICAgICB0
eXBlKHdlYkNvbnRleHRNZW51SXRlbURhdGEudHlwZSgpKSwKKyAgICAgICAgICAgIGFjdGlvbih3
ZWJDb250ZXh0TWVudUl0ZW1EYXRhLmFjdGlvbigpKSwKKyAgICAgICAgICAgIGVuYWJsZWQod2Vi
Q29udGV4dE1lbnVJdGVtRGF0YS5lbmFibGVkKCkpLAorICAgICAgICAgICAgY2hlY2tlZCh3ZWJD
b250ZXh0TWVudUl0ZW1EYXRhLmNoZWNrZWQoKSksCisgICAgICAgICAgICB0ZXh0KHdlYkNvbnRl
eHRNZW51SXRlbURhdGEudGl0bGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVudURhdGEg
PSB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhOworICAgICAgICB9CisKKyAgICAgICAgV2ViQ29yZTo6
Q29udGV4dE1lbnVJdGVtVHlwZSB0eXBlOworICAgICAgICBXZWJDb3JlOjpDb250ZXh0TWVudUFj
dGlvbiBhY3Rpb247CisgICAgICAgIGJvb2wgZW5hYmxlZDsKKyAgICAgICAgYm9vbCBjaGVja2Vk
OworICAgICAgICBRU3RyaW5nIHRleHQ7CisgICAgICAgIFdlYkNvbnRleHRNZW51SXRlbURhdGEg
bWVudURhdGE7CisgICAgfTsKKworICAgIHZvaWQgYnVpbGRJdGVtcyhjb25zdCBWZWN0b3I8V2Vi
Q29udGV4dE1lbnVJdGVtRGF0YT4mLCBWZWN0b3I8TWVudUl0ZW0+Jik7CisKKyAgICBWZWN0b3I8
TWVudUl0ZW0+IG1fbWVudUl0ZW1zOworfTsKKworY2xhc3MgQ29udGV4dE1lbnVDb250ZXh0T2Jq
ZWN0IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRUG9p
bnQgcG9zaXRpb24gUkVBRCBwb3NpdGlvbiBDT05TVEFOVCBGSU5BTCkKKyAgICBRX1BST1BFUlRZ
KFFPYmplY3QqIGl0ZW1zIFJFQUQgaXRlbXMgQ09OU1RBTlQgRklOQUwpCisKK3B1YmxpYzoKKyAg
ICBDb250ZXh0TWVudUNvbnRleHRPYmplY3QoY29uc3QgUVBvaW50JiBwb3NpdGlvbiwgY29uc3Qg
VmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBpdGVtcyk7CisKKyAgICBRUG9pbnQgcG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgQ29udGV4dE1lbnVJdGVt
TW9kZWwqIGl0ZW1zKCkgeyByZXR1cm4gJm1faXRlbU1vZGVsOyB9CisKKyAgICBRX0lOVk9LQUJM
RSB2b2lkIGFjY2VwdChpbnQgaW5kZXgpOworICAgIFFfSU5WT0tBQkxFIHZvaWQgcmVqZWN0KCkg
eyBlbWl0IHJlamVjdGVkKCk7IH0KKyAgICBRX0lOVk9LQUJMRSBpbnQgcm93Q291bnQoKSB7IHJl
dHVybiBtX2l0ZW1Nb2RlbC5yb3dDb3VudCgpOyB9CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIHJl
amVjdGVkKCk7CisgICAgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChXZWJDb250ZXh0TWVu
dUl0ZW1EYXRhKTsKKworcHJpdmF0ZToKKyAgICBRUG9pbnQgbV9wb3NpdGlvbjsKKyAgICBDb250
ZXh0TWVudUl0ZW1Nb2RlbCBtX2l0ZW1Nb2RlbDsKK307CisKK0NvbnRleHRNZW51Q29udGV4dE9i
amVjdDo6Q29udGV4dE1lbnVDb250ZXh0T2JqZWN0KGNvbnN0IFFQb2ludCYgcG9zaXRpb24sIGNv
bnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYgaXRlbXMpCisgICAgOiBtX3Bvc2l0
aW9uKHBvc2l0aW9uKSwKKyAgICAgIG1faXRlbU1vZGVsKGl0ZW1zKQoreworfQorCit2b2lkIENv
bnRleHRNZW51Q29udGV4dE9iamVjdDo6YWNjZXB0KGludCBpbmRleCkKK3sKKyAgICBlbWl0IGNv
bnRleHRNZW51SXRlbVNlbGVjdGVkKG1faXRlbU1vZGVsLmdldE1lbnVJdGVtRGF0YShpbmRleCkp
OworfQorCitzdGF0aWMgUUhhc2g8aW50LCBRQnl0ZUFycmF5PiBjcmVhdGVSb2xlTmFtZXNIYXNo
KCkKK3sKKyAgICBRSGFzaDxpbnQsIFFCeXRlQXJyYXk+IHJvbGVzOworICAgIHJvbGVzW1F0OjpE
aXNwbGF5Um9sZV0gPSAidGV4dCI7CisgICAgcm9sZXNbQ29udGV4dE1lbnVJdGVtTW9kZWw6OkVu
YWJsZWRSb2xlXSA9ICJlbmFibGVkIjsKKyAgICByb2xlc1tDb250ZXh0TWVudUl0ZW1Nb2RlbDo6
Q2hlY2tlZFJvbGVdID0gImNoZWNrZWQiOworICAgIHJldHVybiByb2xlczsKK30KKworc3RhdGlj
IGludCBtZW51U2l6ZShjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHdlYkNv
bnRleHRNZW51SXRlbURhdGFzKQoreworICAgIGludCBzaXplID0gMDsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHdlYkNvbnRleHRNZW51SXRlbURhdGFzLnNpemUoKTsgaSsrKSB7CisgICAgICAg
IGlmICghd2ViQ29udGV4dE1lbnVJdGVtRGF0YXNbaV0udGl0bGUoKS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBzaXplKys7CisgICAgICAgIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBz
dWJtZW51SXRlbXNEYXRhID0gd2ViQ29udGV4dE1lbnVJdGVtRGF0YXNbaV0uc3VibWVudSgpOwor
ICAgICAgICBpZiAoIXN1Ym1lbnVJdGVtc0RhdGEuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2l6
ZSArPSBtZW51U2l6ZShzdWJtZW51SXRlbXNEYXRhKTsKKyAgICB9CisgICAgcmV0dXJuIHNpemU7
Cit9CisKK0NvbnRleHRNZW51SXRlbU1vZGVsOjpDb250ZXh0TWVudUl0ZW1Nb2RlbChjb25zdCBW
ZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHdlYkNvbnRleHRNZW51SXRlbURhdGFzKQor
eworICAgIHN0YXRpYyBRSGFzaDxpbnQsIFFCeXRlQXJyYXk+IHJvbGVzID0gY3JlYXRlUm9sZU5h
bWVzSGFzaCgpOworICAgIHNldFJvbGVOYW1lcyhyb2xlcyk7CisgICAgbV9tZW51SXRlbXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtZW51U2l6ZSh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhcykpOwor
ICAgIGJ1aWxkSXRlbXMod2ViQ29udGV4dE1lbnVJdGVtRGF0YXMsIG1fbWVudUl0ZW1zKTsKK30K
KworUVZhcmlhbnQgQ29udGV4dE1lbnVJdGVtTW9kZWw6OmRhdGEoY29uc3QgUU1vZGVsSW5kZXgm
IGluZGV4LCBpbnQgcm9sZSkgY29uc3QKK3sKKyAgICBpZiAoIWluZGV4LmlzVmFsaWQoKSB8fCBp
bmRleC5yb3coKSA8IDAgfHwgaW5kZXgucm93KCkgPj0gbV9tZW51SXRlbXMuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gUVZhcmlhbnQoKTsKKworICAgIGNvbnN0IE1lbnVJdGVtJiBpdGVtID0gbV9t
ZW51SXRlbXNbaW5kZXgucm93KCldOworICAgIHN3aXRjaCAocm9sZSkgeworICAgIGNhc2UgUXQ6
OkRpc3BsYXlSb2xlOgorICAgICAgICByZXR1cm4gaXRlbS50ZXh0OworICAgIGNhc2UgRW5hYmxl
ZFJvbGU6CisgICAgICAgIHJldHVybiBpdGVtLmVuYWJsZWQ7CisgICAgY2FzZSBDaGVja2VkUm9s
ZToKKyAgICAgICAgcmV0dXJuIGl0ZW0uY2hlY2tlZDsKKyAgICB9CisKKyAgICByZXR1cm4gUVZh
cmlhbnQoKTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW1Nb2RlbDo6YnVpbGRJdGVtcyhjb25z
dCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHdlYkNvbnRleHRNZW51SXRlbURhdGFz
LCBWZWN0b3I8TWVudUl0ZW0+JiBtZW51SXRlbXMpCiB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhcy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBX
ZWJDb250ZXh0TWVudUl0ZW1EYXRhJiB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhID0gd2ViQ29udGV4
dE1lbnVJdGVtRGF0YXNbaV07CisgICAgICAgIGlmICghd2ViQ29udGV4dE1lbnVJdGVtRGF0YS50
aXRsZSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbWVudUl0ZW1zLmFwcGVuZChNZW51SXRl
bSh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhKSk7CisgICAgICAgICAgICBWZWN0b3I8V2ViQ29udGV4
dE1lbnVJdGVtRGF0YT4gc3VibWVudUl0ZW1zRGF0YSA9IHdlYkNvbnRleHRNZW51SXRlbURhdGFz
W2ldLnN1Ym1lbnUoKTsKKyAgICAgICAgICAgIGlmICghc3VibWVudUl0ZW1zRGF0YS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgYnVpbGRJdGVtcyhzdWJtZW51SXRlbXNEYXRhLCBtZW51SXRl
bXMpOworICAgICAgICB9CisgICAgfQogfQogCi1QYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJv
eHlRdD4gV2ViQ29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGUoV2ViUGFnZVByb3h5KiB3ZWJQYWdl
UHJveHkpCitXZWJDb250ZXh0TWVudVByb3h5UXQ6OldlYkNvbnRleHRNZW51UHJveHlRdChXZWJQ
YWdlUHJveHkqIHdlYlBhZ2VQcm94eSwgUVF1aWNrV2ViVmlldyogd2ViVmlldykgOgorICAgIG1f
d2ViVmlldyh3ZWJWaWV3KSwKKyAgICBtX3dlYlBhZ2VQcm94eSh3ZWJQYWdlUHJveHkpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJDb250ZXh0TWVudVByb3h5UXQod2ViUGFnZVByb3h5
KSk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eVF0PiBXZWJDb250ZXh0TWVu
dVByb3h5UXQ6OmNyZWF0ZShXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSwgUVF1aWNrV2ViVmll
dyogd2ViVmlldykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkNvbnRleHRNZW51UHJv
eHlRdCh3ZWJQYWdlUHJveHksIHdlYlZpZXcpKTsKIH0KIAogdm9pZCBXZWJDb250ZXh0TWVudVBy
b3h5UXQ6OnNob3dDb250ZXh0TWVudShjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFZl
Y3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYgaXRlbXMpCiB7CisgICAgY3JlYXRlSXRlbShw
b3NpdGlvbiwgaXRlbXMpOworICAgIGlmICghbV9jb250ZXh0TWVudSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmdldChtX3dlYlZpZXcpLT5zZXREaWFsb2dB
Y3RpdmUodHJ1ZSk7CiB9CiAKIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eVF0OjpoaWRlQ29udGV4
dE1lbnUoKQogeworICAgIG1fY29udGV4dE1lbnUuY2xlYXIoKTsKKyAgICBRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6Z2V0KG1fd2ViVmlldyktPnNldERpYWxvZ0FjdGl2ZShmYWxzZSk7CisgICAgbV9j
b250ZXh0LmNsZWFyKCk7CiB9CiAKLSNpbmNsdWRlICJtb2NfV2ViQ29udGV4dE1lbnVQcm94eVF0
LmNwcCIKK3ZvaWQgV2ViQ29udGV4dE1lbnVQcm94eVF0OjpzZWxlY3RDb250ZXh0TWVudUl0ZW0o
V2ViQ29udGV4dE1lbnVJdGVtRGF0YSB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhKQoreworICAgIG1f
d2ViUGFnZVByb3h5LT5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZCh3ZWJDb250ZXh0TWVudUl0ZW1E
YXRhKTsKKyAgICBoaWRlQ29udGV4dE1lbnUoKTsKK30KKwordm9pZCBXZWJDb250ZXh0TWVudVBy
b3h5UXQ6OmNyZWF0ZUl0ZW0oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8
V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQoreworICAgIFFRbWxDb21wb25lbnQqIGNv
bXBvbmVudCA9IG1fd2ViVmlldy0+ZXhwZXJpbWVudGFsKCktPmNvbnRleHRNZW51KCk7CisKKyAg
ICBpZiAoIWNvbXBvbmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ29udGV4dE1lbnVDb250
ZXh0T2JqZWN0KiBjb250ZXh0T2JqZWN0ID0gbmV3IENvbnRleHRNZW51Q29udGV4dE9iamVjdChR
UG9pbnQocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkpLCBpdGVtcyk7CisgICAgY3JlYXRlQ29u
dGV4dChjb21wb25lbnQsIGNvbnRleHRPYmplY3QpOworICAgIFFPYmplY3QqIG9iamVjdCA9IGNv
bXBvbmVudC0+YmVnaW5DcmVhdGUobV9jb250ZXh0LmdldCgpKTsKKyAgICBpZiAoIW9iamVjdCkg
eworICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fY29udGV4dE1lbnUgPSBhZG9wdFB0cihxb2JqZWN0X2Nhc3Q8UVF1aWNrSXRlbSo+KG9i
amVjdCkpOworICAgIGlmICghbV9jb250ZXh0TWVudSkgeworICAgICAgICBtX2NvbnRleHQuY2xl
YXIoKTsKKyAgICAgICAgbV9jb250ZXh0TWVudS5jbGVhcigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgcVJlZ2lzdGVyTWV0YVR5cGU8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4oIldl
YkNvbnRleHRNZW51SXRlbURhdGEiKTsKKyAgICBjb25uZWN0KGNvbnRleHRPYmplY3QsIFNJR05B
TChjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChXZWJDb250ZXh0TWVudUl0ZW1EYXRhKSksIFNMT1Qo
c2VsZWN0Q29udGV4dE1lbnVJdGVtKFdlYkNvbnRleHRNZW51SXRlbURhdGEpKSwgUXQ6OlF1ZXVl
ZENvbm5lY3Rpb24pOworICAgIGNvbm5lY3QoY29udGV4dE9iamVjdCwgU0lHTkFMKHJlamVjdGVk
KCkpLCBTTE9UKGhpZGVDb250ZXh0TWVudSgpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOworCisg
ICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmdldChtX3dlYlZpZXcpLT5hZGRBdHRhY2hlZFByb3Bl
cnR5VG8obV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgbV9jb250ZXh0TWVudS0+c2V0UGFyZW50
SXRlbShtX3dlYlZpZXcpOworCisgICAgLy8gT25seSBmdWxseSBjcmVhdGUgdGhlIGNvbXBvbmVu
dCBvbmNlIHdlJ3ZlIHNldCBib3RoIGEgcGFyZW50CisgICAgLy8gYW5kIHRoZSBuZWVkZWQgY29u
dGV4dCBhbmQgYXR0YWNoZWQgcHJvcGVydGllcywgc28gdGhhdCB0aGUKKyAgICAvLyBkaWFsb2cg
Y2FuIGRvIHVzZWZ1bCBzdHVmZiBpbiBDb21wb25lbnQub25Db21wbGV0ZWQoKS4KKyAgICBjb21w
b25lbnQtPmNvbXBsZXRlQ3JlYXRlKCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dE1lbnVQcm94eVF0
OjpjcmVhdGVDb250ZXh0KFFRbWxDb21wb25lbnQqIGNvbXBvbmVudCwgUU9iamVjdCogY29udGV4
dE9iamVjdCkKK3sKKyAgICBRUW1sQ29udGV4dCogYmFzZUNvbnRleHQgPSBjb21wb25lbnQtPmNy
ZWF0aW9uQ29udGV4dCgpOworICAgIGlmICghYmFzZUNvbnRleHQpCisgICAgICAgIGJhc2VDb250
ZXh0ID0gUVFtbEVuZ2luZTo6Y29udGV4dEZvck9iamVjdChtX3dlYlZpZXcpOworICAgIG1fY29u
dGV4dCA9IGFkb3B0UHRyKG5ldyBRUW1sQ29udGV4dChiYXNlQ29udGV4dCkpOworCisgICAgY29u
dGV4dE9iamVjdC0+c2V0UGFyZW50KG1fY29udGV4dC5nZXQoKSk7CisgICAgbV9jb250ZXh0LT5z
ZXRDb250ZXh0UHJvcGVydHkoUUxhdGluMVN0cmluZygibW9kZWwiKSwgY29udGV4dE9iamVjdCk7
CisgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0T2JqZWN0KGNvbnRleHRPYmplY3QpOworfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlRdC5t
b2MiCisKKyNpbmNsdWRlICJtb2NfV2ViQ29udGV4dE1lbnVQcm94eVF0LmNwcCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuaAppbmRl
eCBiZDdhZWJkLi45YmJjYTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5oCkBAIC0yOSw2ICsyOSwxMiBAQAogCiAjaW5jbHVk
ZSAiV2ViQ29udGV4dE1lbnVQcm94eS5oIgogI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworY2xhc3MgUVFtbENvbXBvbmVudDsKK2NsYXNzIFFRbWxD
b250ZXh0OworY2xhc3MgUVF1aWNrV2ViVmlldzsKK2NsYXNzIFFRdWlja0l0ZW07CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCkBAIC0zNywxMyArNDMsMjQgQEAgY2xhc3MgV2ViUGFnZVByb3h5Owog
Y2xhc3MgV2ViQ29udGV4dE1lbnVQcm94eVF0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBXZWJD
b250ZXh0TWVudVByb3h5IHsKICAgICBRX09CSkVDVAogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHlRdD4gY3JlYXRlKFdlYlBhZ2VQcm94eSopOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHlRdD4gY3JlYXRlKFdlYlBhZ2VQ
cm94eSosIFFRdWlja1dlYlZpZXcqKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgdmlydHVhbCB2
b2lkIGhpZGVDb250ZXh0TWVudSgpOworICAgIHZvaWQgc2VsZWN0Q29udGV4dE1lbnVJdGVtKFdl
YkNvbnRleHRNZW51SXRlbURhdGEpOwogCiBwcml2YXRlOgotICAgIFdlYkNvbnRleHRNZW51UHJv
eHlRdChXZWJQYWdlUHJveHkqKTsKKyAgICBXZWJDb250ZXh0TWVudVByb3h5UXQoV2ViUGFnZVBy
b3h5KiwgUVF1aWNrV2ViVmlldyopOwogCiAgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVu
dShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0
ZW1EYXRhPiYpOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlQ29udGV4dE1lbnUoKTsKKyAgICB2b2lk
IGNyZWF0ZUl0ZW0oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBWZWN0b3I8V2ViQ29u
dGV4dE1lbnVJdGVtRGF0YT4mKTsKKyAgICB2b2lkIGNyZWF0ZUNvbnRleHQoUVFtbENvbXBvbmVu
dCosIFFPYmplY3QqKTsKKworICAgIE93blB0cjxRUW1sQ29udGV4dD4gbV9jb250ZXh0OworICAg
IE93blB0cjxRUXVpY2tJdGVtPiBtX2NvbnRleHRNZW51OworCisgICAgUVF1aWNrV2ViVmlldyog
bV93ZWJWaWV3OworICAgIFdlYlBhZ2VQcm94eSogbV93ZWJQYWdlUHJveHk7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCBkZTcwYjdjLi5iMGJjYzliIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDctMTggIE5h
bmRvciBIdXN6a2EgIDxobmFuZG9yQGluZi51LXN6ZWdlZC5odT4KKworICAgICAgICBbUXRdW1dL
Ml0gQWRkIGEgUU1MIGJhc2VkIHNvbHV0aW9uIGZvciBDb250ZXh0IE1lbnVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUyOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbnRleHQgbWVudSdzIGVzc2Vu
dGlhbCBpbXBsZW1lbnRhdGlvbiBmb3IgTWluaUJyb3dzZXIuIEZvciBub3cgaXQKKyAgICAgICAg
aGFzIG5vdCBhbnkgc3VibWVudXMuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9NaW5pQnJv
d3Nlci5xcmM6CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1s
OgorCiAyMDEyLTA3LTE4ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbV0syXVtHVEtdIEltcGxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IGluIFdLVFIgZm9yIEdUSwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJy
b3dzZXIucXJjIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjCmluZGV4IGUy
MWVlZjMuLmRjODcyMmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93
c2VyLnFyYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5xcmMKQEAgLTMy
LDUgKzMyLDYgQEAKICAgICAgICAgPGZpbGU+cW1sL1Byb3h5QXV0aGVudGljYXRpb25EaWFsb2cu
cW1sPC9maWxlPgogICAgICAgICA8ZmlsZT5xbWwvU2Nyb2xsSW5kaWNhdG9yLnFtbDwvZmlsZT4K
ICAgICAgICAgPGZpbGU+cW1sL1ZpZXdwb3J0SW5mb0l0ZW0ucW1sPC9maWxlPgorICAgICAgICA8
ZmlsZT5xbWwvQ29udGV4dE1lbnUucW1sPC9maWxlPgogICAgIDwvcXJlc291cmNlPgogPC9SQ0M+
CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwg
Yi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwKaW5kZXggOGNkNThl
Yi4uNmI1ZTQ2ZSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJX
aW5kb3cucW1sCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFt
bApAQCAtMzU5LDYgKzM1OSw3IEBAIFJlY3RhbmdsZSB7CiAgICAgICAgIGV4cGVyaW1lbnRhbC5w
cmVmZXJlbmNlcy53ZWJHTEVuYWJsZWQ6IHRydWUKICAgICAgICAgZXhwZXJpbWVudGFsLnByZWZl
cnJlZE1pbmltdW1Db250ZW50c1dpZHRoOiA5ODAKICAgICAgICAgZXhwZXJpbWVudGFsLml0ZW1T
ZWxlY3RvcjogSXRlbVNlbGVjdG9yIHsgfQorICAgICAgICBleHBlcmltZW50YWwuY29udGV4dE1l
bnU6IENvbnRleHRNZW51IHsgfQogICAgICAgICBleHBlcmltZW50YWwuYWxlcnREaWFsb2c6IEFs
ZXJ0RGlhbG9nIHsgfQogICAgICAgICBleHBlcmltZW50YWwuY29uZmlybURpYWxvZzogQ29uZmly
bURpYWxvZyB7IH0KICAgICAgICAgZXhwZXJpbWVudGFsLnByb21wdERpYWxvZzogUHJvbXB0RGlh
bG9nIHsgfQo=
</data>
<flag name="commit-queue"
          id="161813"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152993</attachid>
            <date>2012-07-18 05:17:47 -0700</date>
            <delta_ts>2012-07-26 06:12:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>cmapi0718.diff</filename>
            <type>text/plain</type>
            <size>22496</size>
            <attacher name="Nandor Huszka">hnandor</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlMDY0ZWM5Li4zZjAwOWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEg
QEAKKzIwMTItMDctMTggIE5hbmRvciBIdXN6a2EgIDxobmFuZG9yQGluZi51LXN6ZWdlZC5odT4K
KworICAgICAgICBbUXRdW1dLMl0gQWRkIGEgUU1MIGJhc2VkIHNvbHV0aW9uIGZvciBDb250ZXh0
IE1lbnVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MDUyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENv
bnRleHRNZW51IEFQSSBpbiBXZWJLaXQyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpRUXVpY2tX
ZWJWaWV3UHJpdmF0ZSk6IENvbnRleHQgbWVudSBwcm9wZXJ0eSdzCisgICAgICAgIGdldHRlciBh
bmQgc2V0dGVyLgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGV4dE1l
bnUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGV4dE1lbnUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oOgorICAgICAgICAoUVF1aWNr
V2ViVmlld1ByaXZhdGUpOiBBZGQgYSBuZXcgY29udGV4dCBtZW51CisgICAgICAgIHByb3BlcnR5
IHRvIHRoZSBleHBlcmltZW50YWwgd2Vidmlldy4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQ
YWdlQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRQYWdlQ2xpZW50OjpjcmVhdGVDb250
ZXh0TWVudVByb3h5KTogUGFzcyB0aGUgV2ViVmlldyB0bworICAgICAgICB0aGUgV2ViQ29udGV4
dE1lbnVQcm94eVF0IHRvby4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQ
cm94eVF0LmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChDb250ZXh0TWVudUl0ZW1N
b2RlbCk6IENvbnRhaW5zIGRhdGFzIG9mIGEgbWVudWl0ZW0uCisgICAgICAgIChXZWJLaXQ6OkNv
bnRleHRNZW51SXRlbU1vZGVsOjpyb3dDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRN
ZW51SXRlbU1vZGVsOjpnZXRNZW51SXRlbURhdGEpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0
TWVudUl0ZW1Nb2RlbDo6TWVudUl0ZW06Ok1lbnVJdGVtKToKKyAgICAgICAgKE1lbnVJdGVtKToK
KyAgICAgICAgKENvbnRleHRNZW51Q29udGV4dE9iamVjdCk6IFByb3ZpZGUgaW50ZXJmYWNlIHRv
IHRoZSBncmFwaGljYWwgbGF5ZXIsCisgICAgICAgIGEgbW9kZWwgb2JqZWN0LiBTaWduYWxzIGNh
biBiZSBhY2Nlc3NlZCB0aHJvdWdoIGl0LgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNv
bnRleHRPYmplY3Q6OnBvc2l0aW9uKTogVGhlIHBvc2l0aW9uIG9mIHJpZ2h0IGNsaWNraW5nLgor
ICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNvbnRleHRPYmplY3Q6Oml0ZW1zKTogUmV0dXJu
cyBhbGwgdGhlIG1lbnVpdGVtcy4KKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDb250ZXh0
T2JqZWN0OjpyZWplY3QpOiBTaWduYWwsIHVzZWQgd2hlbiBpdAorICAgICAgICBpcyBuZWVkZWQg
dG8gaGlkZSB0aGUgbWVudS4KKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDb250ZXh0T2Jq
ZWN0Ojpyb3dDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q29udGV4dE9iamVj
dDo6Q29udGV4dE1lbnVDb250ZXh0T2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1l
bnVDb250ZXh0T2JqZWN0OjphY2NlcHQpOiBTaWduYWwsIHVzZWQgd2hlbiBhIG1lbnVpdGVtCisg
ICAgICAgIGlzIHNlbGVjdGVkLgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVSb2xlTmFtZXNIYXNo
KToKKyAgICAgICAgKFdlYktpdDo6bWVudVNpemUpOiBOdW1iZXIgb2YgYWxsIHRoZSBub24tZW1w
dHkgdGl0bGUgbWVudWl0ZW1zLgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUl0ZW1Nb2Rl
bDo6Q29udGV4dE1lbnVJdGVtTW9kZWwpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUl0
ZW1Nb2RlbDo6ZGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51SXRlbU1vZGVsOjpi
dWlsZEl0ZW1zKTogU3RvcmVzIHRoZSBnaXZlbiBtZW51aXRlbXMuCisgICAgICAgIEZvciBub3cg
aXQgb25seSBkZWFscyB3aXRoIG5vbi1lbXB0eSB0aXRsZSBvbmVzLgorICAgICAgICAoV2ViS2l0
OjpXZWJDb250ZXh0TWVudVByb3h5UXQ6OldlYkNvbnRleHRNZW51UHJveHlRdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlKTogUmV0dXJuIGEgbmV3IFdl
YkNvbnRleHRNZW51UHJveHlRdCBvYmplY3QuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRN
ZW51UHJveHlRdDo6c2hvd0NvbnRleHRNZW51KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4
dE1lbnVQcm94eVF0OjpoaWRlQ29udGV4dE1lbnUpOiBTbG90IG9mCisgICAgICAgIENvbnRleHRN
ZW51Q29udGV4dE9iamVjdDo6cmVqZWN0LgorICAgICAgICAoV2ViS2l0OjpXZWJDb250ZXh0TWVu
dVByb3h5UXQ6OnNlbGVjdENvbnRleHRNZW51SXRlbSk6IFNsb3Qgb2YKKyAgICAgICAgQ29udGV4
dE1lbnVDb250ZXh0T2JqZWN0OjphY2NlcHQuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRN
ZW51UHJveHlRdDo6Y3JlYXRlSXRlbSk6IENyZWF0ZSB0aGUgQ29udGV4dE1lbnVDb250ZXh0T2Jq
ZWN0LAorICAgICAgICBiaW5kIHRvIHRoZSBleHBlcmltZW50YWwgV2ViVmlldydzIGNvbnRleHQg
bWVudSBwcm9wZXJ0eSwgYW5kIHNldCBzaWduYWxzL3Nsb3RzLgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb250ZXh0TWVudVByb3h5UXQ6OmNyZWF0ZUNvbnRleHQpOiBTZXQgdGhlIG1vZGVsIG9iamVj
dCBmb3IgdGhlCisgICAgICAgIGdyYXBoaWNhbCBsYXllci4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
cXQvV2ViQ29udGV4dE1lbnVQcm94eVF0Lmg6CisgICAgICAgIChXZWJDb250ZXh0TWVudVByb3h5
UXQpOgorCiAyMDEyLTA3LTE4ICBZb3VuZ1RhZWNrIFNvbmcgIDx5b3VuZ3RhZWNrLnNvbmdAc2Ft
c3VuZy5jb20+CiAKICAgICAgICAgW1dLMl1bRUZMXSBBZGQgYSBjb21tb24gY29kZSB1c2luZyBD
b2xvciBpbnN0ZWFkIG9mIFFDb2xvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKaW5kZXggMjViZjJlNy4uMDUwNGQ5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCkBAIC0y
NjMsNiArMjYzLDcgQEAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OlFRdWlja1dlYlZpZXdQcml2YXRl
KFFRdWlja1dlYlZpZXcqIHZpZXdwb3J0KQogICAgICwgYXV0aGVudGljYXRpb25EaWFsb2coMCkK
ICAgICAsIGNlcnRpZmljYXRlVmVyaWZpY2F0aW9uRGlhbG9nKDApCiAgICAgLCBpdGVtU2VsZWN0
b3IoMCkKKyAgICAsIGNvbnRleHRNZW51KDApCiAgICAgLCBwcm94eUF1dGhlbnRpY2F0aW9uRGlh
bG9nKDApCiAgICAgLCBmaWxlUGlja2VyKDApCiAgICAgLCBkYXRhYmFzZVF1b3RhRGlhbG9nKDAp
CkBAIC0xMTE3LDYgKzExMTgsMjEgQEAgdm9pZCBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpz
ZXRJdGVtU2VsZWN0b3IoUVFtbENvbXBvbmVudCogaXRlbVNlbGVjdG9yKQogICAgIGVtaXQgaXRl
bVNlbGVjdG9yQ2hhbmdlZCgpOwogfQogCitRUW1sQ29tcG9uZW50KiBRUXVpY2tXZWJWaWV3RXhw
ZXJpbWVudGFsOjpjb250ZXh0TWVudSgpIGNvbnN0Cit7CisgICAgUV9EKGNvbnN0IFFRdWlja1dl
YlZpZXcpOworICAgIHJldHVybiBkLT5jb250ZXh0TWVudTsKK30KKwordm9pZCBRUXVpY2tXZWJW
aWV3RXhwZXJpbWVudGFsOjpzZXRDb250ZXh0TWVudShRUW1sQ29tcG9uZW50KiBjb250ZXh0TWVu
dSkKK3sKKyAgICBRX0QoUVF1aWNrV2ViVmlldyk7CisgICAgaWYgKGQtPmNvbnRleHRNZW51ID09
IGNvbnRleHRNZW51KQorICAgICAgICByZXR1cm47CisgICAgZC0+Y29udGV4dE1lbnUgPSBjb250
ZXh0TWVudTsKKyAgICBlbWl0IGNvbnRleHRNZW51Q2hhbmdlZCgpOworfQorCiBRUW1sQ29tcG9u
ZW50KiBRUXVpY2tXZWJWaWV3RXhwZXJpbWVudGFsOjpmaWxlUGlja2VyKCkgY29uc3QKIHsKICAg
ICBRX0QoY29uc3QgUVF1aWNrV2ViVmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAppbmRleCBjZWFhYjY4Li44ZDMxYjcyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgK
QEAgLTI2NCw2ICsyNjQsNyBAQCBjbGFzcyBRV0VCS0lUX0VYUE9SVCBRUXVpY2tXZWJWaWV3RXhw
ZXJpbWVudGFsIDogcHVibGljIFFPYmplY3QgewogICAgIFFfUFJPUEVSVFkoUVFtbENvbXBvbmVu
dCogcHJveHlBdXRoZW50aWNhdGlvbkRpYWxvZyBSRUFEIHByb3h5QXV0aGVudGljYXRpb25EaWFs
b2cgV1JJVEUgc2V0UHJveHlBdXRoZW50aWNhdGlvbkRpYWxvZyBOT1RJRlkgcHJveHlBdXRoZW50
aWNhdGlvbkRpYWxvZ0NoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRUW1sQ29tcG9uZW50KiBjZXJ0
aWZpY2F0ZVZlcmlmaWNhdGlvbkRpYWxvZyBSRUFEIGNlcnRpZmljYXRlVmVyaWZpY2F0aW9uRGlh
bG9nIFdSSVRFIHNldENlcnRpZmljYXRlVmVyaWZpY2F0aW9uRGlhbG9nIE5PVElGWSBjZXJ0aWZp
Y2F0ZVZlcmlmaWNhdGlvbkRpYWxvZ0NoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRUW1sQ29tcG9u
ZW50KiBpdGVtU2VsZWN0b3IgUkVBRCBpdGVtU2VsZWN0b3IgV1JJVEUgc2V0SXRlbVNlbGVjdG9y
IE5PVElGWSBpdGVtU2VsZWN0b3JDaGFuZ2VkKQorICAgIFFfUFJPUEVSVFkoUVFtbENvbXBvbmVu
dCogY29udGV4dE1lbnUgUkVBRCBjb250ZXh0TWVudSBXUklURSBzZXRDb250ZXh0TWVudSBOT1RJ
RlkgY29udGV4dE1lbnVDaGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoUVFtbENvbXBvbmVudCogZmls
ZVBpY2tlciBSRUFEIGZpbGVQaWNrZXIgV1JJVEUgc2V0RmlsZVBpY2tlciBOT1RJRlkgZmlsZVBp
Y2tlckNoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRUW1sQ29tcG9uZW50KiBkYXRhYmFzZVF1b3Rh
RGlhbG9nIFJFQUQgZGF0YWJhc2VRdW90YURpYWxvZyBXUklURSBzZXREYXRhYmFzZVF1b3RhRGlh
bG9nIE5PVElGWSBkYXRhYmFzZVF1b3RhRGlhbG9nQ2hhbmdlZCkKICAgICBRX1BST1BFUlRZKFFR
bWxDb21wb25lbnQqIGNvbG9yQ2hvb3NlciBSRUFEIGNvbG9yQ2hvb3NlciBXUklURSBzZXRDb2xv
ckNob29zZXIgTk9USUZZIGNvbG9yQ2hvb3NlckNoYW5nZWQpCkBAIC0yOTYsNiArMjk3LDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0Q2VydGlmaWNhdGVWZXJpZmljYXRpb25EaWFsb2coUVFtbENv
bXBvbmVudCopOwogICAgIFFRbWxDb21wb25lbnQqIGl0ZW1TZWxlY3RvcigpIGNvbnN0OwogICAg
IHZvaWQgc2V0SXRlbVNlbGVjdG9yKFFRbWxDb21wb25lbnQqKTsKKyAgICBRUW1sQ29tcG9uZW50
KiBjb250ZXh0TWVudSgpIGNvbnN0OworICAgIHZvaWQgc2V0Q29udGV4dE1lbnUoUVFtbENvbXBv
bmVudCopOwogICAgIFFRbWxDb21wb25lbnQqIHByb3h5QXV0aGVudGljYXRpb25EaWFsb2coKSBj
b25zdDsKICAgICB2b2lkIHNldFByb3h5QXV0aGVudGljYXRpb25EaWFsb2coUVFtbENvbXBvbmVu
dCopOwogICAgIFFRbWxDb21wb25lbnQqIGZpbGVQaWNrZXIoKSBjb25zdDsKQEAgLTM1OCw2ICsz
NjEsNyBAQCBRX1NJR05BTFM6CiAgICAgdm9pZCBhdXRoZW50aWNhdGlvbkRpYWxvZ0NoYW5nZWQo
KTsKICAgICB2b2lkIGNlcnRpZmljYXRlVmVyaWZpY2F0aW9uRGlhbG9nQ2hhbmdlZCgpOwogICAg
IHZvaWQgaXRlbVNlbGVjdG9yQ2hhbmdlZCgpOworICAgIHZvaWQgY29udGV4dE1lbnVDaGFuZ2Vk
KCk7CiAgICAgdm9pZCBmaWxlUGlja2VyQ2hhbmdlZCgpOwogICAgIHZvaWQgZGF0YWJhc2VRdW90
YURpYWxvZ0NoYW5nZWQoKTsKICAgICB2b2lkIGNvbG9yQ2hvb3NlckNoYW5nZWQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3Au
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaApp
bmRleCBmMTAyZjYwLi43ZDEyNDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCkBAIC0xODIsNiArMTgyLDcgQEAgcHJvdGVj
dGVkOgogICAgIFFRbWxDb21wb25lbnQqIGF1dGhlbnRpY2F0aW9uRGlhbG9nOwogICAgIFFRbWxD
b21wb25lbnQqIGNlcnRpZmljYXRlVmVyaWZpY2F0aW9uRGlhbG9nOwogICAgIFFRbWxDb21wb25l
bnQqIGl0ZW1TZWxlY3RvcjsKKyAgICBRUW1sQ29tcG9uZW50KiBjb250ZXh0TWVudTsKICAgICBR
UW1sQ29tcG9uZW50KiBwcm94eUF1dGhlbnRpY2F0aW9uRGlhbG9nOwogICAgIFFRbWxDb21wb25l
bnQqIGZpbGVQaWNrZXI7CiAgICAgUVFtbENvbXBvbmVudCogZGF0YWJhc2VRdW90YURpYWxvZzsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNsaWVudC5jcHAKaW5kZXggODJk
NjM4NC4uMGJiZmJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
UGFnZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFnZUNs
aWVudC5jcHAKQEAgLTIwNSw3ICsyMDUsNyBAQCBQYXNzUmVmUHRyPFdlYlBvcHVwTWVudVByb3h5
PiBRdFBhZ2VDbGllbnQ6OmNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBhZ2VQcm94eSogdwogCiBQ
YXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHk+IFF0UGFnZUNsaWVudDo6Y3JlYXRlQ29udGV4
dE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkKIHsKLSAgICByZXR1cm4gV2Vi
Q29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGUod2ViUGFnZVByb3h5KTsKKyAgICByZXR1cm4gV2Vi
Q29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGUod2ViUGFnZVByb3h5LCBtX3dlYlZpZXcpOwogfQog
CiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuY3BwCmluZGV4IGQ1MTBjNTMuLjNl
MmQzY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0
TWVudVByb3h5UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250
ZXh0TWVudVByb3h5UXQuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsMjggKzI4LDI0MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlRdC5oIgogCisjaW5jbHVkZSAiUGxhdGZvcm1Qb3B1
cE1lbnVEYXRhLmgiCisjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCisjaW5jbHVkZSAicXF1
aWNrd2Vidmlld19wX3AuaCIKKyNpbmNsdWRlIDxRdENvcmUvUUFic3RyYWN0TGlzdE1vZGVsPgor
I2luY2x1ZGUgPFF0UW1sL1FRbWxDb250ZXh0PgorI2luY2x1ZGUgPFF0UW1sL1FRbWxFbmdpbmU+
CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2Vi
Q29udGV4dE1lbnVQcm94eVF0OjpXZWJDb250ZXh0TWVudVByb3h5UXQoV2ViUGFnZVByb3h5KikK
K3N0YXRpYyBRSGFzaDxpbnQsIFFCeXRlQXJyYXk+IGNyZWF0ZVJvbGVOYW1lc0hhc2goKTsKK3N0
YXRpYyBpbnQgbWVudVNpemUoY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+Jik7
CisKK2NsYXNzIENvbnRleHRNZW51SXRlbU1vZGVsIDogcHVibGljIFFBYnN0cmFjdExpc3RNb2Rl
bCB7CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIGVudW0gUm9sZXMgeworICAgICAgICBF
bmFibGVkUm9sZSA9IFF0OjpVc2VyUm9sZSwKKyAgICAgICAgQ2hlY2tlZFJvbGUgPSBRdDo6VXNl
clJvbGUgKyAxCisgICAgfTsKKworICAgIENvbnRleHRNZW51SXRlbU1vZGVsKGNvbnN0IFZlY3Rv
cjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYpOworICAgIHZpcnR1YWwgaW50IHJvd0NvdW50KGNv
bnN0IFFNb2RlbEluZGV4JiBwYXJlbnQgPSBRTW9kZWxJbmRleCgpKSBjb25zdCB7IHJldHVybiBt
X21lbnVJdGVtcy5zaXplKCk7IH0KKyAgICB2aXJ0dWFsIFFWYXJpYW50IGRhdGEoY29uc3QgUU1v
ZGVsSW5kZXgmLCBpbnQgcm9sZSA9IFF0OjpEaXNwbGF5Um9sZSkgY29uc3Q7CisKKyAgICBXZWJD
b250ZXh0TWVudUl0ZW1EYXRhIGdldE1lbnVJdGVtRGF0YShpbnQgaW5kZXgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9tZW51SXRlbXNbaW5kZXhdLm1lbnVEYXRhOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBzdHJ1Y3QgTWVudUl0ZW0geworICAgICAgICBNZW51SXRlbShjb25zdCBXZWJDb250
ZXh0TWVudUl0ZW1EYXRhJiB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhKSA6CisgICAgICAgICAgICB0
eXBlKHdlYkNvbnRleHRNZW51SXRlbURhdGEudHlwZSgpKSwKKyAgICAgICAgICAgIGFjdGlvbih3
ZWJDb250ZXh0TWVudUl0ZW1EYXRhLmFjdGlvbigpKSwKKyAgICAgICAgICAgIGVuYWJsZWQod2Vi
Q29udGV4dE1lbnVJdGVtRGF0YS5lbmFibGVkKCkpLAorICAgICAgICAgICAgY2hlY2tlZCh3ZWJD
b250ZXh0TWVudUl0ZW1EYXRhLmNoZWNrZWQoKSksCisgICAgICAgICAgICB0ZXh0KHdlYkNvbnRl
eHRNZW51SXRlbURhdGEudGl0bGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbWVudURhdGEg
PSB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhOworICAgICAgICB9CisKKyAgICAgICAgV2ViQ29yZTo6
Q29udGV4dE1lbnVJdGVtVHlwZSB0eXBlOworICAgICAgICBXZWJDb3JlOjpDb250ZXh0TWVudUFj
dGlvbiBhY3Rpb247CisgICAgICAgIGJvb2wgZW5hYmxlZDsKKyAgICAgICAgYm9vbCBjaGVja2Vk
OworICAgICAgICBRU3RyaW5nIHRleHQ7CisgICAgICAgIFdlYkNvbnRleHRNZW51SXRlbURhdGEg
bWVudURhdGE7CisgICAgfTsKKworICAgIHZvaWQgYnVpbGRJdGVtcyhjb25zdCBWZWN0b3I8V2Vi
Q29udGV4dE1lbnVJdGVtRGF0YT4mLCBWZWN0b3I8TWVudUl0ZW0+Jik7CisKKyAgICBWZWN0b3I8
TWVudUl0ZW0+IG1fbWVudUl0ZW1zOworfTsKKworY2xhc3MgQ29udGV4dE1lbnVDb250ZXh0T2Jq
ZWN0IDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRUG9p
bnQgcG9zaXRpb24gUkVBRCBwb3NpdGlvbiBDT05TVEFOVCBGSU5BTCkKKyAgICBRX1BST1BFUlRZ
KFFPYmplY3QqIGl0ZW1zIFJFQUQgaXRlbXMgQ09OU1RBTlQgRklOQUwpCisKK3B1YmxpYzoKKyAg
ICBDb250ZXh0TWVudUNvbnRleHRPYmplY3QoY29uc3QgUVBvaW50JiBwb3NpdGlvbiwgY29uc3Qg
VmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBpdGVtcyk7CisKKyAgICBRUG9pbnQgcG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgQ29udGV4dE1lbnVJdGVt
TW9kZWwqIGl0ZW1zKCkgeyByZXR1cm4gJm1faXRlbU1vZGVsOyB9CisKKyAgICBRX0lOVk9LQUJM
RSB2b2lkIGFjY2VwdChpbnQgaW5kZXgpOworICAgIFFfSU5WT0tBQkxFIHZvaWQgcmVqZWN0KCkg
eyBlbWl0IHJlamVjdGVkKCk7IH0KKyAgICBRX0lOVk9LQUJMRSBpbnQgcm93Q291bnQoKSB7IHJl
dHVybiBtX2l0ZW1Nb2RlbC5yb3dDb3VudCgpOyB9CisKK1FfU0lHTkFMUzoKKyAgICB2b2lkIHJl
amVjdGVkKCk7CisgICAgdm9pZCBjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChXZWJDb250ZXh0TWVu
dUl0ZW1EYXRhKTsKKworcHJpdmF0ZToKKyAgICBRUG9pbnQgbV9wb3NpdGlvbjsKKyAgICBDb250
ZXh0TWVudUl0ZW1Nb2RlbCBtX2l0ZW1Nb2RlbDsKK307CisKK0NvbnRleHRNZW51Q29udGV4dE9i
amVjdDo6Q29udGV4dE1lbnVDb250ZXh0T2JqZWN0KGNvbnN0IFFQb2ludCYgcG9zaXRpb24sIGNv
bnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYgaXRlbXMpCisgICAgOiBtX3Bvc2l0
aW9uKHBvc2l0aW9uKSwKKyAgICAgIG1faXRlbU1vZGVsKGl0ZW1zKQoreworfQorCit2b2lkIENv
bnRleHRNZW51Q29udGV4dE9iamVjdDo6YWNjZXB0KGludCBpbmRleCkKK3sKKyAgICBlbWl0IGNv
bnRleHRNZW51SXRlbVNlbGVjdGVkKG1faXRlbU1vZGVsLmdldE1lbnVJdGVtRGF0YShpbmRleCkp
OworfQorCitzdGF0aWMgUUhhc2g8aW50LCBRQnl0ZUFycmF5PiBjcmVhdGVSb2xlTmFtZXNIYXNo
KCkKK3sKKyAgICBRSGFzaDxpbnQsIFFCeXRlQXJyYXk+IHJvbGVzOworICAgIHJvbGVzW1F0OjpE
aXNwbGF5Um9sZV0gPSAidGV4dCI7CisgICAgcm9sZXNbQ29udGV4dE1lbnVJdGVtTW9kZWw6OkVu
YWJsZWRSb2xlXSA9ICJlbmFibGVkIjsKKyAgICByb2xlc1tDb250ZXh0TWVudUl0ZW1Nb2RlbDo6
Q2hlY2tlZFJvbGVdID0gImNoZWNrZWQiOworICAgIHJldHVybiByb2xlczsKK30KKworc3RhdGlj
IGludCBtZW51U2l6ZShjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHdlYkNv
bnRleHRNZW51SXRlbURhdGFzKQoreworICAgIGludCBzaXplID0gMDsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHdlYkNvbnRleHRNZW51SXRlbURhdGFzLnNpemUoKTsgaSsrKSB7CisgICAgICAg
IGlmICghd2ViQ29udGV4dE1lbnVJdGVtRGF0YXNbaV0udGl0bGUoKS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBzaXplKys7CisgICAgICAgIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBz
dWJtZW51SXRlbXNEYXRhID0gd2ViQ29udGV4dE1lbnVJdGVtRGF0YXNbaV0uc3VibWVudSgpOwor
ICAgICAgICBpZiAoIXN1Ym1lbnVJdGVtc0RhdGEuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2l6
ZSArPSBtZW51U2l6ZShzdWJtZW51SXRlbXNEYXRhKTsKKyAgICB9CisgICAgcmV0dXJuIHNpemU7
Cit9CisKK0NvbnRleHRNZW51SXRlbU1vZGVsOjpDb250ZXh0TWVudUl0ZW1Nb2RlbChjb25zdCBW
ZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHdlYkNvbnRleHRNZW51SXRlbURhdGFzKQor
eworICAgIHN0YXRpYyBRSGFzaDxpbnQsIFFCeXRlQXJyYXk+IHJvbGVzID0gY3JlYXRlUm9sZU5h
bWVzSGFzaCgpOworICAgIHNldFJvbGVOYW1lcyhyb2xlcyk7CisgICAgbV9tZW51SXRlbXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtZW51U2l6ZSh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhcykpOwor
ICAgIGJ1aWxkSXRlbXMod2ViQ29udGV4dE1lbnVJdGVtRGF0YXMsIG1fbWVudUl0ZW1zKTsKK30K
KworUVZhcmlhbnQgQ29udGV4dE1lbnVJdGVtTW9kZWw6OmRhdGEoY29uc3QgUU1vZGVsSW5kZXgm
IGluZGV4LCBpbnQgcm9sZSkgY29uc3QKK3sKKyAgICBpZiAoIWluZGV4LmlzVmFsaWQoKSB8fCBp
bmRleC5yb3coKSA8IDAgfHwgaW5kZXgucm93KCkgPj0gbV9tZW51SXRlbXMuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gUVZhcmlhbnQoKTsKKworICAgIGNvbnN0IE1lbnVJdGVtJiBpdGVtID0gbV9t
ZW51SXRlbXNbaW5kZXgucm93KCldOworICAgIHN3aXRjaCAocm9sZSkgeworICAgIGNhc2UgUXQ6
OkRpc3BsYXlSb2xlOgorICAgICAgICByZXR1cm4gaXRlbS50ZXh0OworICAgIGNhc2UgRW5hYmxl
ZFJvbGU6CisgICAgICAgIHJldHVybiBpdGVtLmVuYWJsZWQ7CisgICAgY2FzZSBDaGVja2VkUm9s
ZToKKyAgICAgICAgcmV0dXJuIGl0ZW0uY2hlY2tlZDsKKyAgICB9CisKKyAgICByZXR1cm4gUVZh
cmlhbnQoKTsKK30KKwordm9pZCBDb250ZXh0TWVudUl0ZW1Nb2RlbDo6YnVpbGRJdGVtcyhjb25z
dCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHdlYkNvbnRleHRNZW51SXRlbURhdGFz
LCBWZWN0b3I8TWVudUl0ZW0+JiBtZW51SXRlbXMpCiB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhcy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBX
ZWJDb250ZXh0TWVudUl0ZW1EYXRhJiB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhID0gd2ViQ29udGV4
dE1lbnVJdGVtRGF0YXNbaV07CisgICAgICAgIGlmICghd2ViQ29udGV4dE1lbnVJdGVtRGF0YS50
aXRsZSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbWVudUl0ZW1zLmFwcGVuZChNZW51SXRl
bSh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhKSk7CisgICAgICAgICAgICBWZWN0b3I8V2ViQ29udGV4
dE1lbnVJdGVtRGF0YT4gc3VibWVudUl0ZW1zRGF0YSA9IHdlYkNvbnRleHRNZW51SXRlbURhdGFz
W2ldLnN1Ym1lbnUoKTsKKyAgICAgICAgICAgIGlmICghc3VibWVudUl0ZW1zRGF0YS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgYnVpbGRJdGVtcyhzdWJtZW51SXRlbXNEYXRhLCBtZW51SXRl
bXMpOworICAgICAgICB9CisgICAgfQogfQogCi1QYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJv
eHlRdD4gV2ViQ29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGUoV2ViUGFnZVByb3h5KiB3ZWJQYWdl
UHJveHkpCitXZWJDb250ZXh0TWVudVByb3h5UXQ6OldlYkNvbnRleHRNZW51UHJveHlRdChXZWJQ
YWdlUHJveHkqIHdlYlBhZ2VQcm94eSwgUVF1aWNrV2ViVmlldyogd2ViVmlldykgOgorICAgIG1f
d2ViVmlldyh3ZWJWaWV3KSwKKyAgICBtX3dlYlBhZ2VQcm94eSh3ZWJQYWdlUHJveHkpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJDb250ZXh0TWVudVByb3h5UXQod2ViUGFnZVByb3h5
KSk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eVF0PiBXZWJDb250ZXh0TWVu
dVByb3h5UXQ6OmNyZWF0ZShXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSwgUVF1aWNrV2ViVmll
dyogd2ViVmlldykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkNvbnRleHRNZW51UHJv
eHlRdCh3ZWJQYWdlUHJveHksIHdlYlZpZXcpKTsKIH0KIAogdm9pZCBXZWJDb250ZXh0TWVudVBy
b3h5UXQ6OnNob3dDb250ZXh0TWVudShjb25zdCBJbnRQb2ludCYgcG9zaXRpb24sIGNvbnN0IFZl
Y3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYgaXRlbXMpCiB7CisgICAgY3JlYXRlSXRlbShw
b3NpdGlvbiwgaXRlbXMpOworICAgIGlmICghbV9jb250ZXh0TWVudSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmdldChtX3dlYlZpZXcpLT5zZXREaWFsb2dB
Y3RpdmUodHJ1ZSk7CiB9CiAKIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eVF0OjpoaWRlQ29udGV4
dE1lbnUoKQogeworICAgIG1fY29udGV4dE1lbnUuY2xlYXIoKTsKKyAgICBRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6Z2V0KG1fd2ViVmlldyktPnNldERpYWxvZ0FjdGl2ZShmYWxzZSk7CisgICAgbV9j
b250ZXh0LmNsZWFyKCk7CiB9CiAKLSNpbmNsdWRlICJtb2NfV2ViQ29udGV4dE1lbnVQcm94eVF0
LmNwcCIKK3ZvaWQgV2ViQ29udGV4dE1lbnVQcm94eVF0OjpzZWxlY3RDb250ZXh0TWVudUl0ZW0o
V2ViQ29udGV4dE1lbnVJdGVtRGF0YSB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhKQoreworICAgIG1f
d2ViUGFnZVByb3h5LT5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZCh3ZWJDb250ZXh0TWVudUl0ZW1E
YXRhKTsKKyAgICBoaWRlQ29udGV4dE1lbnUoKTsKK30KKwordm9pZCBXZWJDb250ZXh0TWVudVBy
b3h5UXQ6OmNyZWF0ZUl0ZW0oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8
V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIGl0ZW1zKQoreworICAgIFFRbWxDb21wb25lbnQqIGNv
bXBvbmVudCA9IG1fd2ViVmlldy0+ZXhwZXJpbWVudGFsKCktPmNvbnRleHRNZW51KCk7CisKKyAg
ICBpZiAoIWNvbXBvbmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ29udGV4dE1lbnVDb250
ZXh0T2JqZWN0KiBjb250ZXh0T2JqZWN0ID0gbmV3IENvbnRleHRNZW51Q29udGV4dE9iamVjdChR
UG9pbnQocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCkpLCBpdGVtcyk7CisgICAgY3JlYXRlQ29u
dGV4dChjb21wb25lbnQsIGNvbnRleHRPYmplY3QpOworICAgIFFPYmplY3QqIG9iamVjdCA9IGNv
bXBvbmVudC0+YmVnaW5DcmVhdGUobV9jb250ZXh0LmdldCgpKTsKKyAgICBpZiAoIW9iamVjdCkg
eworICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fY29udGV4dE1lbnUgPSBhZG9wdFB0cihxb2JqZWN0X2Nhc3Q8UVF1aWNrSXRlbSo+KG9i
amVjdCkpOworICAgIGlmICghbV9jb250ZXh0TWVudSkgeworICAgICAgICBtX2NvbnRleHQuY2xl
YXIoKTsKKyAgICAgICAgbV9jb250ZXh0TWVudS5jbGVhcigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgcVJlZ2lzdGVyTWV0YVR5cGU8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4oIldl
YkNvbnRleHRNZW51SXRlbURhdGEiKTsKKyAgICBjb25uZWN0KGNvbnRleHRPYmplY3QsIFNJR05B
TChjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChXZWJDb250ZXh0TWVudUl0ZW1EYXRhKSksIFNMT1Qo
c2VsZWN0Q29udGV4dE1lbnVJdGVtKFdlYkNvbnRleHRNZW51SXRlbURhdGEpKSwgUXQ6OlF1ZXVl
ZENvbm5lY3Rpb24pOworICAgIGNvbm5lY3QoY29udGV4dE9iamVjdCwgU0lHTkFMKHJlamVjdGVk
KCkpLCBTTE9UKGhpZGVDb250ZXh0TWVudSgpKSwgUXQ6OlF1ZXVlZENvbm5lY3Rpb24pOworCisg
ICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmdldChtX3dlYlZpZXcpLT5hZGRBdHRhY2hlZFByb3Bl
cnR5VG8obV9jb250ZXh0TWVudS5nZXQoKSk7CisgICAgbV9jb250ZXh0TWVudS0+c2V0UGFyZW50
SXRlbShtX3dlYlZpZXcpOworCisgICAgLy8gT25seSBmdWxseSBjcmVhdGUgdGhlIGNvbXBvbmVu
dCBvbmNlIHdlJ3ZlIHNldCBib3RoIGEgcGFyZW50CisgICAgLy8gYW5kIHRoZSBuZWVkZWQgY29u
dGV4dCBhbmQgYXR0YWNoZWQgcHJvcGVydGllcywgc28gdGhhdCB0aGUKKyAgICAvLyBkaWFsb2cg
Y2FuIGRvIHVzZWZ1bCBzdHVmZiBpbiBDb21wb25lbnQub25Db21wbGV0ZWQoKS4KKyAgICBjb21w
b25lbnQtPmNvbXBsZXRlQ3JlYXRlKCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dE1lbnVQcm94eVF0
OjpjcmVhdGVDb250ZXh0KFFRbWxDb21wb25lbnQqIGNvbXBvbmVudCwgUU9iamVjdCogY29udGV4
dE9iamVjdCkKK3sKKyAgICBRUW1sQ29udGV4dCogYmFzZUNvbnRleHQgPSBjb21wb25lbnQtPmNy
ZWF0aW9uQ29udGV4dCgpOworICAgIGlmICghYmFzZUNvbnRleHQpCisgICAgICAgIGJhc2VDb250
ZXh0ID0gUVFtbEVuZ2luZTo6Y29udGV4dEZvck9iamVjdChtX3dlYlZpZXcpOworICAgIG1fY29u
dGV4dCA9IGFkb3B0UHRyKG5ldyBRUW1sQ29udGV4dChiYXNlQ29udGV4dCkpOworCisgICAgY29u
dGV4dE9iamVjdC0+c2V0UGFyZW50KG1fY29udGV4dC5nZXQoKSk7CisgICAgbV9jb250ZXh0LT5z
ZXRDb250ZXh0UHJvcGVydHkoUUxhdGluMVN0cmluZygibW9kZWwiKSwgY29udGV4dE9iamVjdCk7
CisgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0T2JqZWN0KGNvbnRleHRPYmplY3QpOworfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHlRdC5t
b2MiCisKKyNpbmNsdWRlICJtb2NfV2ViQ29udGV4dE1lbnVQcm94eVF0LmNwcCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuaAppbmRl
eCBiZDdhZWJkLi45YmJjYTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
cXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5oCkBAIC0yOSw2ICsyOSwxMiBAQAogCiAjaW5jbHVk
ZSAiV2ViQ29udGV4dE1lbnVQcm94eS5oIgogI2luY2x1ZGUgPFF0Q29yZS9RT2JqZWN0PgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworY2xhc3MgUVFtbENvbXBvbmVudDsKK2NsYXNzIFFRbWxD
b250ZXh0OworY2xhc3MgUVF1aWNrV2ViVmlldzsKK2NsYXNzIFFRdWlja0l0ZW07CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCkBAIC0zNywxMyArNDMsMjQgQEAgY2xhc3MgV2ViUGFnZVByb3h5Owog
Y2xhc3MgV2ViQ29udGV4dE1lbnVQcm94eVF0IDogcHVibGljIFFPYmplY3QsIHB1YmxpYyBXZWJD
b250ZXh0TWVudVByb3h5IHsKICAgICBRX09CSkVDVAogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHlRdD4gY3JlYXRlKFdlYlBhZ2VQcm94eSopOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51UHJveHlRdD4gY3JlYXRlKFdlYlBhZ2VQ
cm94eSosIFFRdWlja1dlYlZpZXcqKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgdmlydHVhbCB2
b2lkIGhpZGVDb250ZXh0TWVudSgpOworICAgIHZvaWQgc2VsZWN0Q29udGV4dE1lbnVJdGVtKFdl
YkNvbnRleHRNZW51SXRlbURhdGEpOwogCiBwcml2YXRlOgotICAgIFdlYkNvbnRleHRNZW51UHJv
eHlRdChXZWJQYWdlUHJveHkqKTsKKyAgICBXZWJDb250ZXh0TWVudVByb3h5UXQoV2ViUGFnZVBy
b3h5KiwgUVF1aWNrV2ViVmlldyopOwogCiAgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVu
dShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0
ZW1EYXRhPiYpOwotICAgIHZpcnR1YWwgdm9pZCBoaWRlQ29udGV4dE1lbnUoKTsKKyAgICB2b2lk
IGNyZWF0ZUl0ZW0oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBWZWN0b3I8V2ViQ29u
dGV4dE1lbnVJdGVtRGF0YT4mKTsKKyAgICB2b2lkIGNyZWF0ZUNvbnRleHQoUVFtbENvbXBvbmVu
dCosIFFPYmplY3QqKTsKKworICAgIE93blB0cjxRUW1sQ29udGV4dD4gbV9jb250ZXh0OworICAg
IE93blB0cjxRUXVpY2tJdGVtPiBtX2NvbnRleHRNZW51OworCisgICAgUVF1aWNrV2ViVmlldyog
bV93ZWJWaWV3OworICAgIFdlYlBhZ2VQcm94eSogbV93ZWJQYWdlUHJveHk7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0No
YW5nZUxvZwppbmRleCBkZTcwYjdjLi5iMGJjYzliIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDctMTggIE5h
bmRvciBIdXN6a2EgIDxobmFuZG9yQGluZi51LXN6ZWdlZC5odT4KKworICAgICAgICBbUXRdW1dL
Ml0gQWRkIGEgUU1MIGJhc2VkIHNvbHV0aW9uIGZvciBDb250ZXh0IE1lbnVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDUyOAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvbnRleHQgbWVudSdzIGVzc2Vu
dGlhbCBpbXBsZW1lbnRhdGlvbiBmb3IgTWluaUJyb3dzZXIuIEZvciBub3cgaXQKKyAgICAgICAg
aGFzIG5vdCBhbnkgc3VibWVudXMuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9NaW5pQnJv
d3Nlci5xcmM6CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1s
OgorCiAyMDEyLTA3LTE4ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbV0syXVtHVEtdIEltcGxlbWVudCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
IGluIFdLVFIgZm9yIEdUSwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJy
b3dzZXIucXJjIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjCmluZGV4IGUy
MWVlZjMuLmRjODcyMmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93
c2VyLnFyYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5xcmMKQEAgLTMy
LDUgKzMyLDYgQEAKICAgICAgICAgPGZpbGU+cW1sL1Byb3h5QXV0aGVudGljYXRpb25EaWFsb2cu
cW1sPC9maWxlPgogICAgICAgICA8ZmlsZT5xbWwvU2Nyb2xsSW5kaWNhdG9yLnFtbDwvZmlsZT4K
ICAgICAgICAgPGZpbGU+cW1sL1ZpZXdwb3J0SW5mb0l0ZW0ucW1sPC9maWxlPgorICAgICAgICA8
ZmlsZT5xbWwvQ29udGV4dE1lbnUucW1sPC9maWxlPgogICAgIDwvcXJlc291cmNlPgogPC9SQ0M+
CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwg
Yi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRvdy5xbWwKaW5kZXggOGNkNThl
Yi4uNmI1ZTQ2ZSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJX
aW5kb3cucW1sCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFt
bApAQCAtMzU5LDYgKzM1OSw3IEBAIFJlY3RhbmdsZSB7CiAgICAgICAgIGV4cGVyaW1lbnRhbC5w
cmVmZXJlbmNlcy53ZWJHTEVuYWJsZWQ6IHRydWUKICAgICAgICAgZXhwZXJpbWVudGFsLnByZWZl
cnJlZE1pbmltdW1Db250ZW50c1dpZHRoOiA5ODAKICAgICAgICAgZXhwZXJpbWVudGFsLml0ZW1T
ZWxlY3RvcjogSXRlbVNlbGVjdG9yIHsgfQorICAgICAgICBleHBlcmltZW50YWwuY29udGV4dE1l
bnU6IENvbnRleHRNZW51IHsgfQogICAgICAgICBleHBlcmltZW50YWwuYWxlcnREaWFsb2c6IEFs
ZXJ0RGlhbG9nIHsgfQogICAgICAgICBleHBlcmltZW50YWwuY29uZmlybURpYWxvZzogQ29uZmly
bURpYWxvZyB7IH0KICAgICAgICAgZXhwZXJpbWVudGFsLnByb21wdERpYWxvZzogUHJvbXB0RGlh
bG9nIHsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0NvbnRleHRNZW51
LnFtbCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Db250ZXh0TWVudS5xbWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjYzk1MAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL01pbmlCcm93c2VyL3F0L3FtbC9Db250ZXh0TWVudS5xbWwKQEAgLTAsMCArMSw3MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworaW1wb3J0IFF0UXVpY2sgMi4w
CisKK01vdXNlQXJlYSB7CisgICAgcHJvcGVydHkgUXRPYmplY3QgbWVudU1vZGVsOiBtb2RlbAor
ICAgIHByb3BlcnR5IGludCBpdGVtSGVpZ2h0OiAyMAorICAgIHByb3BlcnR5IGludCBpdGVtV2lk
dGg6IDE1MAorICAgIGFuY2hvcnMuZmlsbDogcGFyZW50CisgICAgb25DbGlja2VkOiBtZW51TW9k
ZWwucmVqZWN0KCkKKworICAgIFJlY3RhbmdsZSB7CisgICAgICAgIGNsaXA6IHRydWUKKyAgICAg
ICAgeDogbWVudU1vZGVsLnBvc2l0aW9uLngKKyAgICAgICAgeTogbWVudU1vZGVsLnBvc2l0aW9u
LnkKKyAgICAgICAgaGVpZ2h0OiBtZW51TW9kZWwucm93Q291bnQoKSAqIGl0ZW1IZWlnaHQKKyAg
ICAgICAgd2lkdGg6IGl0ZW1XaWR0aAorICAgICAgICByYWRpdXM6IDUKKyAgICAgICAgY29sb3I6
ICJyZWQiCisKKyAgICAgICAgTGlzdFZpZXcgeworICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBw
YXJlbnQKKyAgICAgICAgICAgIG1vZGVsOiBtZW51TW9kZWwuaXRlbXMKKworICAgICAgICAgICAg
ZGVsZWdhdGU6IFJlY3RhbmdsZSB7CisgICAgICAgICAgICAgICAgY29sb3I6ICJibHVlIgorICAg
ICAgICAgICAgICAgIGhlaWdodDogaXRlbUhlaWdodAorICAgICAgICAgICAgICAgIHdpZHRoOiBw
YXJlbnQud2lkdGgKKworICAgICAgICAgICAgICAgIFRleHQgeworICAgICAgICAgICAgICAgICAg
ICBhbmNob3JzLmNlbnRlckluOiBwYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgdGV4dDogbW9k
ZWwudGV4dAorICAgICAgICAgICAgICAgICAgICBjb2xvcjogbW9kZWwuZW5hYmxlZCA/ICJ3aGl0
ZSIgOiAiYmxhY2siCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgTW91c2VB
cmVhIHsKKyAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnQKKyAgICAgICAg
ICAgICAgICAgICAgZW5hYmxlZDogbW9kZWwuZW5hYmxlZAorICAgICAgICAgICAgICAgICAgICBv
bkNsaWNrZWQ6IG1lbnVNb2RlbC5hY2NlcHQobW9kZWwuaW5kZXgpCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154630</attachid>
            <date>2012-07-26 06:12:08 -0700</date>
            <delta_ts>2012-08-09 22:39:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>api0726.diff</filename>
            <type>text/plain</type>
            <size>25061</size>
            <attacher name="Nandor Huszka">hnandor</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlOTNmOGY0Li40NGJkMzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYg
QEAKKzIwMTItMDctMjYgIE5hbmRvciBIdXN6a2EgIDxobmFuZG9yQGluZi51LXN6ZWdlZC5odT4K
KworICAgICAgICBbUXRdW1dLMl0gQWRkIGEgUU1MIGJhc2VkIHNvbHV0aW9uIGZvciBDb250ZXh0
IE1lbnVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
MDUyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENv
bnRleHRNZW51IEFQSSBpbiBXZWJLaXQyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFRdWlja1dlYlZpZXdQcml2YXRlOjpRUXVpY2tX
ZWJWaWV3UHJpdmF0ZSk6IENvbnRleHQgbWVudSBwcm9wZXJ0eSdzCisgICAgICAgIGdldHRlciBh
bmQgc2V0dGVyLgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGV4dE1l
bnUpOgorICAgICAgICAoUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGV4dE1lbnUp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oOgorICAgICAgICAoUVF1aWNr
V2ViVmlld1ByaXZhdGUpOiBBZGQgYSBuZXcgY29udGV4dCBtZW51CisgICAgICAgIHByb3BlcnR5
IHRvIHRoZSBleHBlcmltZW50YWwgd2Vidmlldy4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQ
YWdlQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UXRQYWdlQ2xpZW50OjpjcmVhdGVDb250
ZXh0TWVudVByb3h5KTogUGFzcyB0aGUgV2ViVmlldyB0bworICAgICAgICB0aGUgV2ViQ29udGV4
dE1lbnVQcm94eVF0IHRvby4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQ
cm94eVF0LmNwcDoKKyAgICAgICAgKENvbnRleHRNZW51SXRlbU1vZGVsKTogQ29udGFpbnMgZGF0
YXMgb2YgYSBtZW51aXRlbS4KKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVJdGVtTW9kZWw6
OnJvd0NvdW50KToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVJdGVtTW9kZWw6OmdldE1l
bnVJdGVtRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51SXRlbU1vZGVsOjpNZW51
SXRlbTo6TWVudUl0ZW0pOgorICAgICAgICAoTWVudUl0ZW0pOgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKENvbnRleHRNZW51Q29udGV4dE9iamVjdCk6IFByb3ZpZGVzIGludGVyZmFjZSB0
byB0aGUgZ3JhcGhpY2FsIGxheWVyLAorICAgICAgICBhIG1vZGVsIG9iamVjdC4gU2lnbmFscyBj
YW4gYmUgYWNjZXNzZWQgdGhyb3VnaCBpdC4KKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVD
b250ZXh0T2JqZWN0Ojpwb3NpdGlvbik6IFRoZSBwb3NpdGlvbiBvZiByaWdodCBjbGlja2luZy4K
KyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDb250ZXh0T2JqZWN0OjppdGVtcyk6IFJldHVy
bnMgYWxsIHRoZSBtZW51aXRlbXMuCisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q29udGV4
dE9iamVjdDo6cmVqZWN0KTogU2lnbmFsLCB1c2VkIHdoZW4gaXQKKyAgICAgICAgaXMgbmVlZGVk
IHRvIGhpZGUgdGhlIG1lbnUuCisgICAgICAgIChXZWJLaXQ6OkNvbnRleHRNZW51Q29udGV4dE9i
amVjdDo6bWVudVJvd0NvdW50KToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1lbnVDb250ZXh0
T2JqZWN0OjpzdWJNZW51Um93Q291bnQpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNv
bnRleHRPYmplY3Q6Omhhc1N1Ym1lbnUpOgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNv
bnRleHRPYmplY3Q6OkNvbnRleHRNZW51Q29udGV4dE9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6
OkNvbnRleHRNZW51Q29udGV4dE9iamVjdDo6YWNjZXB0TWVudUl0ZW0pOiBVc2VkIHdoZW4gYSBt
ZW51aXRlbQorICAgICAgICBpcyBzZWxlY3RlZC4KKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1l
bnVDb250ZXh0T2JqZWN0OjphY2NlcHRTdWJNZW51SXRlbSk6IFVzZWQgd2hlbiBhIHN1Ym1lbnVp
dGVtCisgICAgICAgIGlzIHNlbGVjdGVkLgorICAgICAgICAoV2ViS2l0OjpDb250ZXh0TWVudUNv
bnRleHRPYmplY3Q6OmNyZWF0ZVN1Yk1lbnVNb2RlbCk6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0
ZVJvbGVOYW1lc0hhc2gpOgorICAgICAgICAoV2ViS2l0OjptZW51U2l6ZSk6IE51bWJlciBvZiBh
bGwgdGhlIG5vbi1lbXB0eSB0aXRsZSBtZW51aXRlbXMuCisgICAgICAgIChXZWJLaXQ6OkNvbnRl
eHRNZW51SXRlbU1vZGVsOjpDb250ZXh0TWVudUl0ZW1Nb2RlbCk6CisgICAgICAgIChXZWJLaXQ6
OkNvbnRleHRNZW51SXRlbU1vZGVsOjpkYXRhKToKKyAgICAgICAgKFdlYktpdDo6Q29udGV4dE1l
bnVJdGVtTW9kZWw6OmJ1aWxkSXRlbXMpOiBTdG9yZXMgdGhlIGdpdmVuIG1lbnVpdGVtcy4KKyAg
ICAgICAgRm9yIG5vdyBpdCBvbmx5IGRlYWxzIHdpdGggbm9uLWVtcHR5IHRpdGxlIG9uZXMuCisg
ICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51UHJveHlRdDo6V2ViQ29udGV4dE1lbnVQcm94
eVF0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGUpOiBS
ZXR1cm5zIGEgbmV3IFdlYkNvbnRleHRNZW51UHJveHlRdCBvYmplY3QuCisgICAgICAgIChXZWJL
aXQ6OldlYkNvbnRleHRNZW51UHJveHlRdDo6c2hvd0NvbnRleHRNZW51KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQ29udGV4dE1lbnVQcm94eVF0OjpoaWRlQ29udGV4dE1lbnUpOiBTbG90IG9mCisg
ICAgICAgIENvbnRleHRNZW51Q29udGV4dE9iamVjdDo6cmVqZWN0LgorICAgICAgICAoV2ViS2l0
OjpXZWJDb250ZXh0TWVudVByb3h5UXQ6OnNlbGVjdENvbnRleHRNZW51SXRlbSk6U2xvdCBvZgor
ICAgICAgICBDb250ZXh0TWVudUNvbnRleHRPYmplY3Q6OmFjY2VwdE1lbnVJdGVtIGFuZCBhY2Nl
cHRTdWJNZW51SXRlbS4KKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dE1lbnVQcm94eVF0Ojpj
cmVhdGVJdGVtKTogQ3JlYXRlIHRoZSBDb250ZXh0TWVudUNvbnRleHRPYmplY3QsCisgICAgICAg
IGJpbmQgdG8gdGhlIGV4cGVyaW1lbnRhbCBXZWJWaWV3J3MgY29udGV4dCBtZW51IHByb3BlcnR5
LCBhbmQgc2V0IHNpZ25hbHMvc2xvdHMuCisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRNZW51
UHJveHlRdDo6Y3JlYXRlQ29udGV4dCk6IFNldCB0aGUgbW9kZWwgb2JqZWN0IGZvciB0aGUKKyAg
ICAgICAgZ3JhcGhpY2FsIGxheWVyLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9XZWJDb250ZXh0
TWVudVByb3h5UXQuaDoKKyAgICAgICAgKFdlYkNvbnRleHRNZW51UHJveHlRdCk6CisKIDIwMTIt
MDctMjYgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+
CiAKICAgICAgICAgW1dLMl0gV2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQgZG9l
cyBub3QgY2hlY2sgd2hldGhlciB0aGUgbm9kZSBhbGxvd3MgZWRpdGluZy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3BwCmluZGV4IGZhMDQ0
NmYuLjdjYjI0ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
cXVpY2t3ZWJ2aWV3LmNwcApAQCAtMjYzLDYgKzI2Myw3IEBAIFFRdWlja1dlYlZpZXdQcml2YXRl
OjpRUXVpY2tXZWJWaWV3UHJpdmF0ZShRUXVpY2tXZWJWaWV3KiB2aWV3cG9ydCkKICAgICAsIGF1
dGhlbnRpY2F0aW9uRGlhbG9nKDApCiAgICAgLCBjZXJ0aWZpY2F0ZVZlcmlmaWNhdGlvbkRpYWxv
ZygwKQogICAgICwgaXRlbVNlbGVjdG9yKDApCisgICAgLCBjb250ZXh0TWVudSgwKQogICAgICwg
cHJveHlBdXRoZW50aWNhdGlvbkRpYWxvZygwKQogICAgICwgZmlsZVBpY2tlcigwKQogICAgICwg
ZGF0YWJhc2VRdW90YURpYWxvZygwKQpAQCAtMTExNyw2ICsxMTE4LDIxIEBAIHZvaWQgUVF1aWNr
V2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0SXRlbVNlbGVjdG9yKFFRbWxDb21wb25lbnQqIGl0ZW1T
ZWxlY3RvcikKICAgICBlbWl0IGl0ZW1TZWxlY3RvckNoYW5nZWQoKTsKIH0KIAorUVFtbENvbXBv
bmVudCogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGV4dE1lbnUoKSBjb25zdAorewor
ICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZC0+Y29udGV4dE1lbnU7
Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29udGV4dE1lbnUoUVFt
bENvbXBvbmVudCogY29udGV4dE1lbnUpCit7CisgICAgUV9EKFFRdWlja1dlYlZpZXcpOworICAg
IGlmIChkLT5jb250ZXh0TWVudSA9PSBjb250ZXh0TWVudSkKKyAgICAgICAgcmV0dXJuOworICAg
IGQtPmNvbnRleHRNZW51ID0gY29udGV4dE1lbnU7CisgICAgZW1pdCBjb250ZXh0TWVudUNoYW5n
ZWQoKTsKK30KKwogUVFtbENvbXBvbmVudCogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Zmls
ZVBpY2tlcigpIGNvbnN0CiB7CiAgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZpZXcpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wLmgKaW5kZXgg
OGQwZjRmZi4uZjk5YzMyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXdfcC5oCkBAIC0yNjYsNiArMjY2LDcgQEAgY2xhc3MgUVdFQktJVF9F
WFBPUlQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCA6IHB1YmxpYyBRT2JqZWN0IHsKICAgICBR
X1BST1BFUlRZKFFRbWxDb21wb25lbnQqIHByb3h5QXV0aGVudGljYXRpb25EaWFsb2cgUkVBRCBw
cm94eUF1dGhlbnRpY2F0aW9uRGlhbG9nIFdSSVRFIHNldFByb3h5QXV0aGVudGljYXRpb25EaWFs
b2cgTk9USUZZIHByb3h5QXV0aGVudGljYXRpb25EaWFsb2dDaGFuZ2VkKQogICAgIFFfUFJPUEVS
VFkoUVFtbENvbXBvbmVudCogY2VydGlmaWNhdGVWZXJpZmljYXRpb25EaWFsb2cgUkVBRCBjZXJ0
aWZpY2F0ZVZlcmlmaWNhdGlvbkRpYWxvZyBXUklURSBzZXRDZXJ0aWZpY2F0ZVZlcmlmaWNhdGlv
bkRpYWxvZyBOT1RJRlkgY2VydGlmaWNhdGVWZXJpZmljYXRpb25EaWFsb2dDaGFuZ2VkKQogICAg
IFFfUFJPUEVSVFkoUVFtbENvbXBvbmVudCogaXRlbVNlbGVjdG9yIFJFQUQgaXRlbVNlbGVjdG9y
IFdSSVRFIHNldEl0ZW1TZWxlY3RvciBOT1RJRlkgaXRlbVNlbGVjdG9yQ2hhbmdlZCkKKyAgICBR
X1BST1BFUlRZKFFRbWxDb21wb25lbnQqIGNvbnRleHRNZW51IFJFQUQgY29udGV4dE1lbnUgV1JJ
VEUgc2V0Q29udGV4dE1lbnUgTk9USUZZIGNvbnRleHRNZW51Q2hhbmdlZCkKICAgICBRX1BST1BF
UlRZKFFRbWxDb21wb25lbnQqIGZpbGVQaWNrZXIgUkVBRCBmaWxlUGlja2VyIFdSSVRFIHNldEZp
bGVQaWNrZXIgTk9USUZZIGZpbGVQaWNrZXJDaGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoUVFtbENv
bXBvbmVudCogZGF0YWJhc2VRdW90YURpYWxvZyBSRUFEIGRhdGFiYXNlUXVvdGFEaWFsb2cgV1JJ
VEUgc2V0RGF0YWJhc2VRdW90YURpYWxvZyBOT1RJRlkgZGF0YWJhc2VRdW90YURpYWxvZ0NoYW5n
ZWQpCiAgICAgUV9QUk9QRVJUWShRUW1sQ29tcG9uZW50KiBjb2xvckNob29zZXIgUkVBRCBjb2xv
ckNob29zZXIgV1JJVEUgc2V0Q29sb3JDaG9vc2VyIE5PVElGWSBjb2xvckNob29zZXJDaGFuZ2Vk
KQpAQCAtMjk4LDYgKzI5OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENlcnRpZmljYXRlVmVy
aWZpY2F0aW9uRGlhbG9nKFFRbWxDb21wb25lbnQqKTsKICAgICBRUW1sQ29tcG9uZW50KiBpdGVt
U2VsZWN0b3IoKSBjb25zdDsKICAgICB2b2lkIHNldEl0ZW1TZWxlY3RvcihRUW1sQ29tcG9uZW50
Kik7CisgICAgUVFtbENvbXBvbmVudCogY29udGV4dE1lbnUoKSBjb25zdDsKKyAgICB2b2lkIHNl
dENvbnRleHRNZW51KFFRbWxDb21wb25lbnQqKTsKICAgICBRUW1sQ29tcG9uZW50KiBwcm94eUF1
dGhlbnRpY2F0aW9uRGlhbG9nKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRQcm94eUF1dGhlbnRpY2F0
aW9uRGlhbG9nKFFRbWxDb21wb25lbnQqKTsKICAgICBRUW1sQ29tcG9uZW50KiBmaWxlUGlja2Vy
KCkgY29uc3Q7CkBAIC0zNjAsNiArMzYzLDcgQEAgUV9TSUdOQUxTOgogICAgIHZvaWQgYXV0aGVu
dGljYXRpb25EaWFsb2dDaGFuZ2VkKCk7CiAgICAgdm9pZCBjZXJ0aWZpY2F0ZVZlcmlmaWNhdGlv
bkRpYWxvZ0NoYW5nZWQoKTsKICAgICB2b2lkIGl0ZW1TZWxlY3RvckNoYW5nZWQoKTsKKyAgICB2
b2lkIGNvbnRleHRNZW51Q2hhbmdlZCgpOwogICAgIHZvaWQgZmlsZVBpY2tlckNoYW5nZWQoKTsK
ICAgICB2b2lkIGRhdGFiYXNlUXVvdGFEaWFsb2dDaGFuZ2VkKCk7CiAgICAgdm9pZCBjb2xvckNo
b29zZXJDaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnZpZXdfcF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnZpZXdfcF9wLmgKaW5kZXggZjEwMmY2MC4uN2QxMjQ3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3BfcC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlld19wX3AuaApAQCAt
MTgyLDYgKzE4Miw3IEBAIHByb3RlY3RlZDoKICAgICBRUW1sQ29tcG9uZW50KiBhdXRoZW50aWNh
dGlvbkRpYWxvZzsKICAgICBRUW1sQ29tcG9uZW50KiBjZXJ0aWZpY2F0ZVZlcmlmaWNhdGlvbkRp
YWxvZzsKICAgICBRUW1sQ29tcG9uZW50KiBpdGVtU2VsZWN0b3I7CisgICAgUVFtbENvbXBvbmVu
dCogY29udGV4dE1lbnU7CiAgICAgUVFtbENvbXBvbmVudCogcHJveHlBdXRoZW50aWNhdGlvbkRp
YWxvZzsKICAgICBRUW1sQ29tcG9uZW50KiBmaWxlUGlja2VyOwogICAgIFFRbWxDb21wb25lbnQq
IGRhdGFiYXNlUXVvdGFEaWFsb2c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRQYWdlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBh
Z2VDbGllbnQuY3BwCmluZGV4IGUyYjM5MGEuLmNkNzFmMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCkBAIC0yMDUsNyArMjA1LDcgQEAgUGFzc1Jl
ZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gUXRQYWdlQ2xpZW50OjpjcmVhdGVQb3B1cE1lbnVQcm94
eShXZWJQYWdlUHJveHkqIHcKIAogUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5PiBRdFBh
Z2VDbGllbnQ6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJv
eHkpCiB7Ci0gICAgcmV0dXJuIFdlYkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlKHdlYlBhZ2VQ
cm94eSk7CisgICAgcmV0dXJuIFdlYkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlKHdlYlBhZ2VQ
cm94eSwgbV93ZWJWaWV3KTsKIH0KIAogI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0
LmNwcAppbmRleCBkNTEwYzUzLi42NzE2YWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmNwcApAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDI4ICsyOCwyNTEgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5UXQuaCIKIAor
I2luY2x1ZGUgIlBsYXRmb3JtUG9wdXBNZW51RGF0YS5oIgorI2luY2x1ZGUgInFxdWlja3dlYnZp
ZXdfcC5oIgorI2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcF9wLmgiCisjaW5jbHVkZSA8UXRDb3Jl
L1FBYnN0cmFjdExpc3RNb2RlbD4KKyNpbmNsdWRlIDxRdFFtbC9RUW1sQ29udGV4dD4KKyNpbmNs
dWRlIDxRdFFtbC9RUW1sRW5naW5lPgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLVdlYkNvbnRleHRNZW51UHJveHlRdDo6V2ViQ29udGV4dE1lbnVQ
cm94eVF0KFdlYlBhZ2VQcm94eSopCitjbGFzcyBDb250ZXh0TWVudUl0ZW1Nb2RlbCA6IHB1Ymxp
YyBRQWJzdHJhY3RMaXN0TW9kZWwgeworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICBlbnVt
IFJvbGVzIHsKKyAgICAgICAgRW5hYmxlZFJvbGUgPSBRdDo6VXNlclJvbGUsCisgICAgICAgIENo
ZWNrZWRSb2xlID0gUXQ6OlVzZXJSb2xlICsgMQorICAgIH07CisKKyAgICBDb250ZXh0TWVudUl0
ZW1Nb2RlbChjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mKTsKKyAgICB2aXJ0
dWFsIGludCByb3dDb3VudChjb25zdCBRTW9kZWxJbmRleCYgcGFyZW50ID0gUU1vZGVsSW5kZXgo
KSkgY29uc3QgeyByZXR1cm4gbV9tZW51SXRlbXMuc2l6ZSgpOyB9CisgICAgdmlydHVhbCBRVmFy
aWFudCBkYXRhKGNvbnN0IFFNb2RlbEluZGV4JiwgaW50IHJvbGUgPSBRdDo6RGlzcGxheVJvbGUp
IGNvbnN0OworCisgICAgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSBnZXRNZW51SXRlbURhdGEoaW50
IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWVudUl0ZW1zW2luZGV4XS5tZW51RGF0
YTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RydWN0IE1lbnVJdGVtIHsKKyAgICAgICAgTWVu
dUl0ZW0oY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYgd2ViQ29udGV4dE1lbnVJdGVtRGF0
YSkKKyAgICAgICAgICAgIDogdHlwZSh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhLnR5cGUoKSkKKyAg
ICAgICAgICAgICwgYWN0aW9uKHdlYkNvbnRleHRNZW51SXRlbURhdGEuYWN0aW9uKCkpCisgICAg
ICAgICAgICAsIGVuYWJsZWQod2ViQ29udGV4dE1lbnVJdGVtRGF0YS5lbmFibGVkKCkpCisgICAg
ICAgICAgICAsIGNoZWNrZWQod2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jaGVja2VkKCkpCisgICAg
ICAgICAgICAsIHRleHQod2ViQ29udGV4dE1lbnVJdGVtRGF0YS50aXRsZSgpKQorICAgICAgICAg
ICAgLCBtZW51RGF0YSh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGU7CisgICAgICAgIENvbnRleHRN
ZW51QWN0aW9uIGFjdGlvbjsKKyAgICAgICAgYm9vbCBlbmFibGVkOworICAgICAgICBib29sIGNo
ZWNrZWQ7CisgICAgICAgIFFTdHJpbmcgdGV4dDsKKyAgICAgICAgV2ViQ29udGV4dE1lbnVJdGVt
RGF0YSBtZW51RGF0YTsKKyAgICB9OworCisgICAgdm9pZCBidWlsZEl0ZW1zKGNvbnN0IFZlY3Rv
cjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYsIFZlY3RvcjxNZW51SXRlbT4mKTsKKworICAgIFZl
Y3RvcjxNZW51SXRlbT4gbV9tZW51SXRlbXM7Cit9OworCitjbGFzcyBDb250ZXh0TWVudUNvbnRl
eHRPYmplY3QgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKyAgICBRX1BST1BFUlRZ
KFFQb2ludCBwb3NpdGlvbiBSRUFEIHBvc2l0aW9uIENPTlNUQU5UIEZJTkFMKQorICAgIFFfUFJP
UEVSVFkoUU9iamVjdCogaXRlbXMgUkVBRCBpdGVtcyBDT05TVEFOVCBGSU5BTCkKKworcHVibGlj
OgorICAgIENvbnRleHRNZW51Q29udGV4dE9iamVjdChjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1l
bnVJdGVtRGF0YT4mIGl0ZW1zLCBjb25zdCBRUG9pbnQmIHBvc2l0aW9uKTsKKyAgICBRUG9pbnQg
cG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisgICAgQ29udGV4dE1lbnVJ
dGVtTW9kZWwqIGl0ZW1zKCkgeyByZXR1cm4gJm1faXRlbU1vZGVsOyB9CisKKyAgICBRX0lOVk9L
QUJMRSB2b2lkIGFjY2VwdE1lbnVJdGVtKGludCk7CisgICAgUV9JTlZPS0FCTEUgdm9pZCBhY2Nl
cHRTdWJNZW51SXRlbShpbnQpOworICAgIFFfSU5WT0tBQkxFIHZvaWQgcmVqZWN0KCkgeyBlbWl0
IHJlamVjdGVkKCk7IH0KKyAgICBRX0lOVk9LQUJMRSBpbnQgbWVudVJvd0NvdW50KCkgeyByZXR1
cm4gbV9pdGVtTW9kZWwucm93Q291bnQoKTsgfQorICAgIFFfSU5WT0tBQkxFIGludCBzdWJNZW51
Um93Q291bnQoKSB7IHJldHVybiBtX3N1Ym1lbnVDb250ZXh0LT5tX2l0ZW1Nb2RlbC5yb3dDb3Vu
dCgpOyB9CisgICAgUV9JTlZPS0FCTEUgaW50IGhhc1N1Ym1lbnUoaW50IGluZGV4KSB7IHJldHVy
biAhbV9pdGVtTW9kZWwuZ2V0TWVudUl0ZW1EYXRhKGluZGV4KS5zdWJtZW51KCkuaXNFbXB0eSgp
OyB9CisgICAgUV9JTlZPS0FCTEUgQ29udGV4dE1lbnVJdGVtTW9kZWwqIGNyZWF0ZVN1Yk1lbnVN
b2RlbChpbnQpOworCitRX1NJR05BTFM6CisgICAgdm9pZCByZWplY3RlZCgpOworICAgIHZvaWQg
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoV2ViQ29udGV4dE1lbnVJdGVtRGF0YSk7CisKK3ByaXZh
dGU6CisgICAgUVBvaW50IG1fcG9zaXRpb247CisgICAgQ29udGV4dE1lbnVJdGVtTW9kZWwgbV9p
dGVtTW9kZWw7CisgICAgQ29udGV4dE1lbnVDb250ZXh0T2JqZWN0KiBtX3N1Ym1lbnVDb250ZXh0
OworfTsKKworQ29udGV4dE1lbnVDb250ZXh0T2JqZWN0OjpDb250ZXh0TWVudUNvbnRleHRPYmpl
Y3QoY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiBpdGVtcywgY29uc3QgUVBv
aW50JiBwb3NpdGlvbiA9IFFQb2ludCgwLCAwKSkKKyAgICA6IG1fcG9zaXRpb24ocG9zaXRpb24p
CisgICAgLCBtX2l0ZW1Nb2RlbChpdGVtcykKK3sKK30KKwordm9pZCBDb250ZXh0TWVudUNvbnRl
eHRPYmplY3Q6OmFjY2VwdE1lbnVJdGVtKGludCBpbmRleCkKK3sKKyAgICBlbWl0IGNvbnRleHRN
ZW51SXRlbVNlbGVjdGVkKG1faXRlbU1vZGVsLmdldE1lbnVJdGVtRGF0YShpbmRleCkpOworfQor
Cit2b2lkIENvbnRleHRNZW51Q29udGV4dE9iamVjdDo6YWNjZXB0U3ViTWVudUl0ZW0oaW50IGlu
ZGV4KQoreworICAgIGVtaXQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQobV9zdWJtZW51Q29udGV4
dC0+bV9pdGVtTW9kZWwuZ2V0TWVudUl0ZW1EYXRhKGluZGV4KSk7Cit9CisKK0NvbnRleHRNZW51
SXRlbU1vZGVsKiBDb250ZXh0TWVudUNvbnRleHRPYmplY3Q6OmNyZWF0ZVN1Yk1lbnVNb2RlbChp
bnQgaW5kZXgpCit7CisgICAgbV9zdWJtZW51Q29udGV4dCA9IG5ldyBDb250ZXh0TWVudUNvbnRl
eHRPYmplY3QobV9pdGVtTW9kZWwuZ2V0TWVudUl0ZW1EYXRhKGluZGV4KS5zdWJtZW51KCkpOwor
ICAgIHJldHVybiBtX3N1Ym1lbnVDb250ZXh0LT5pdGVtcygpOworfQorCit0eXBlZGVmIFFIYXNo
PGludCwgUUJ5dGVBcnJheT4gUm9sZU5hbWVUYWJsZTsKKworc3RhdGljIFFIYXNoPGludCwgUUJ5
dGVBcnJheT4gY3JlYXRlUm9sZU5hbWVzSGFzaCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChSb2xlTmFtZVRhYmxlLCByb2xlcywgKCkpOworICAgIHJvbGVzW1F0OjpEaXNwbGF5Um9sZV0g
PSAidGV4dCI7CisgICAgcm9sZXNbQ29udGV4dE1lbnVJdGVtTW9kZWw6OkVuYWJsZWRSb2xlXSA9
ICJlbmFibGVkIjsKKyAgICByb2xlc1tDb250ZXh0TWVudUl0ZW1Nb2RlbDo6Q2hlY2tlZFJvbGVd
ID0gImNoZWNrZWQiOworICAgIHJldHVybiByb2xlczsKK30KKworc3RhdGljIGludCBtZW51U2l6
ZShjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4mIHdlYkNvbnRleHRNZW51SXRl
bURhdGFzKQogeworICAgIGludCBzaXplID0gMDsKKyAgICBjb25zdCBpbnQgbWVudUl0ZW1EYXRh
c1NpemUgPSB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhcy5zaXplKCk7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtZW51SXRlbURhdGFzU2l6ZTsgaSsrKSB7CisgICAgICAgIGlmICghd2ViQ29udGV4
dE1lbnVJdGVtRGF0YXNbaV0udGl0bGUoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBzaXplKys7
CisgICAgfQorICAgIHJldHVybiBzaXplOwogfQogCi1QYXNzUmVmUHRyPFdlYkNvbnRleHRNZW51
UHJveHlRdD4gV2ViQ29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGUoV2ViUGFnZVByb3h5KiB3ZWJQ
YWdlUHJveHkpCitDb250ZXh0TWVudUl0ZW1Nb2RlbDo6Q29udGV4dE1lbnVJdGVtTW9kZWwoY29u
c3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+JiB3ZWJDb250ZXh0TWVudUl0ZW1EYXRh
cykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkNvbnRleHRNZW51UHJveHlRdCh3ZWJQ
YWdlUHJveHkpKTsKKyAgICBzZXRSb2xlTmFtZXMoY3JlYXRlUm9sZU5hbWVzSGFzaCgpKTsKKyAg
ICBtX21lbnVJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1lbnVTaXplKHdlYkNvbnRleHRN
ZW51SXRlbURhdGFzKSk7CisgICAgYnVpbGRJdGVtcyh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhcywg
bV9tZW51SXRlbXMpOworfQorCitRVmFyaWFudCBDb250ZXh0TWVudUl0ZW1Nb2RlbDo6ZGF0YShj
b25zdCBRTW9kZWxJbmRleCYgaW5kZXgsIGludCByb2xlKSBjb25zdAoreworICAgIGlmICghaW5k
ZXguaXNWYWxpZCgpIHx8IGluZGV4LnJvdygpIDwgMCB8fCBpbmRleC5yb3coKSA+PSBtX21lbnVJ
dGVtcy5zaXplKCkpCisgICAgICAgIHJldHVybiBRVmFyaWFudCgpOworCisgICAgY29uc3QgTWVu
dUl0ZW0mIGl0ZW0gPSBtX21lbnVJdGVtc1tpbmRleC5yb3coKV07CisgICAgc3dpdGNoIChyb2xl
KSB7CisgICAgY2FzZSBRdDo6RGlzcGxheVJvbGU6CisgICAgICAgIHJldHVybiBpdGVtLnRleHQ7
CisgICAgY2FzZSBFbmFibGVkUm9sZToKKyAgICAgICAgcmV0dXJuIGl0ZW0uZW5hYmxlZDsKKyAg
ICBjYXNlIENoZWNrZWRSb2xlOgorICAgICAgICByZXR1cm4gaXRlbS5jaGVja2VkOworICAgIH0K
KworICAgIHJldHVybiBRVmFyaWFudCgpOworfQorCit2b2lkIENvbnRleHRNZW51SXRlbU1vZGVs
OjpidWlsZEl0ZW1zKGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYgd2ViQ29u
dGV4dE1lbnVJdGVtRGF0YXMsIFZlY3RvcjxNZW51SXRlbT4mIG1lbnVJdGVtcykKK3sKKyAgICBj
b25zdCBpbnQgbWVudUl0ZW1EYXRhc1NpemUgPSB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhcy5zaXpl
KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZW51SXRlbURhdGFzU2l6ZTsgaSsrKSB7Cisg
ICAgICAgIGNvbnN0IFdlYkNvbnRleHRNZW51SXRlbURhdGEmIHdlYkNvbnRleHRNZW51SXRlbURh
dGEgPSB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhc1tpXTsKKyAgICAgICAgaWYgKCF3ZWJDb250ZXh0
TWVudUl0ZW1EYXRhLnRpdGxlKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgbWVudUl0ZW1zLmFw
cGVuZChNZW51SXRlbSh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhKSk7CisgICAgfQorfQorCitXZWJD
b250ZXh0TWVudVByb3h5UXQ6OldlYkNvbnRleHRNZW51UHJveHlRdChXZWJQYWdlUHJveHkqIHdl
YlBhZ2VQcm94eSwgUVF1aWNrV2ViVmlldyogd2ViVmlldykKKyAgICA6IG1fd2ViVmlldyh3ZWJW
aWV3KQorICAgICwgbV93ZWJQYWdlUHJveHkod2ViUGFnZVByb3h5KQoreworfQorCitQYXNzUmVm
UHRyPFdlYkNvbnRleHRNZW51UHJveHlRdD4gV2ViQ29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGUo
V2ViUGFnZVByb3h5KiB3ZWJQYWdlUHJveHksIFFRdWlja1dlYlZpZXcqIHdlYlZpZXcpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJDb250ZXh0TWVudVByb3h5UXQod2ViUGFnZVByb3h5
LCB3ZWJWaWV3KSk7CiB9CiAKIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eVF0OjpzaG93Q29udGV4
dE1lbnUoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1l
bnVJdGVtRGF0YT4mIGl0ZW1zKQogeworICAgIGNyZWF0ZUl0ZW0ocG9zaXRpb24sIGl0ZW1zKTsK
KyAgICBpZiAoIW1fY29udGV4dE1lbnUpCisgICAgICAgIHJldHVybjsKKworICAgIFFRdWlja1dl
YlZpZXdQcml2YXRlOjpnZXQobV93ZWJWaWV3KS0+c2V0RGlhbG9nQWN0aXZlKHRydWUpOwogfQog
CiB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlRdDo6aGlkZUNvbnRleHRNZW51KCkKIHsKKyAgICBt
X2NvbnRleHRNZW51LmNsZWFyKCk7CisgICAgUVF1aWNrV2ViVmlld1ByaXZhdGU6OmdldChtX3dl
YlZpZXcpLT5zZXREaWFsb2dBY3RpdmUoZmFsc2UpOworICAgIG1fY29udGV4dC5jbGVhcigpOwog
fQogCi0jaW5jbHVkZSAibW9jX1dlYkNvbnRleHRNZW51UHJveHlRdC5jcHAiCit2b2lkIFdlYkNv
bnRleHRNZW51UHJveHlRdDo6c2VsZWN0Q29udGV4dE1lbnVJdGVtKFdlYkNvbnRleHRNZW51SXRl
bURhdGEgd2ViQ29udGV4dE1lbnVJdGVtRGF0YSkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+Y29u
dGV4dE1lbnVJdGVtU2VsZWN0ZWQod2ViQ29udGV4dE1lbnVJdGVtRGF0YSk7CisgICAgaGlkZUNv
bnRleHRNZW51KCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGVJdGVt
KGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRl
bURhdGE+JiBpdGVtcykKK3sKKyAgICBRUW1sQ29tcG9uZW50KiBjb21wb25lbnQgPSBtX3dlYlZp
ZXctPmV4cGVyaW1lbnRhbCgpLT5jb250ZXh0TWVudSgpOworCisgICAgaWYgKCFjb21wb25lbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIENvbnRleHRNZW51Q29udGV4dE9iamVjdCogY29udGV4
dE9iamVjdCA9IG5ldyBDb250ZXh0TWVudUNvbnRleHRPYmplY3QoaXRlbXMsIFFQb2ludChwb3Np
dGlvbi54KCksIHBvc2l0aW9uLnkoKSkpOworICAgIGNyZWF0ZUNvbnRleHQoY29tcG9uZW50LCBj
b250ZXh0T2JqZWN0KTsKKyAgICBRT2JqZWN0KiBvYmplY3QgPSBjb21wb25lbnQtPmJlZ2luQ3Jl
YXRlKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgbV9jb250
ZXh0LmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHRNZW51
ID0gYWRvcHRQdHIocW9iamVjdF9jYXN0PFFRdWlja0l0ZW0qPihvYmplY3QpKTsKKyAgICBpZiAo
IW1fY29udGV4dE1lbnUpIHsKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgICAgIG1f
Y29udGV4dE1lbnUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHFSZWdp
c3Rlck1ldGFUeXBlPENvbnRleHRNZW51SXRlbU1vZGVsKj4oIkNvbnRleHRNZW51SXRlbU1vZGVs
KiIpOworICAgIHFSZWdpc3Rlck1ldGFUeXBlPFdlYkNvbnRleHRNZW51SXRlbURhdGE+KCJXZWJD
b250ZXh0TWVudUl0ZW1EYXRhIik7CisgICAgLy8gV2UgZW5xdWV1ZSB0aGVzZSBiZWNhdXNlIHRo
ZXkgYXJlIHRyaWdnZXJlZCBieSBtX2NvbnRleHRNZW51IGFuZCB3aWxsIGxlYWQgdG8gaXRzIGRl
c3RydWN0aW9uLgorICAgIGNvbm5lY3QoY29udGV4dE9iamVjdCwgU0lHTkFMKGNvbnRleHRNZW51
SXRlbVNlbGVjdGVkKFdlYkNvbnRleHRNZW51SXRlbURhdGEpKSwgU0xPVChzZWxlY3RDb250ZXh0
TWVudUl0ZW0oV2ViQ29udGV4dE1lbnVJdGVtRGF0YSkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7
CisgICAgY29ubmVjdChjb250ZXh0T2JqZWN0LCBTSUdOQUwocmVqZWN0ZWQoKSksIFNMT1QoaGlk
ZUNvbnRleHRNZW51KCkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7CisKKyAgICBRUXVpY2tXZWJW
aWV3UHJpdmF0ZTo6Z2V0KG1fd2ViVmlldyktPmFkZEF0dGFjaGVkUHJvcGVydHlUbyhtX2NvbnRl
eHRNZW51LmdldCgpKTsKKyAgICBtX2NvbnRleHRNZW51LT5zZXRQYXJlbnRJdGVtKG1fd2ViVmll
dyk7CisKKyAgICAvLyBPbmx5IGZ1bGx5IGNyZWF0ZSB0aGUgY29tcG9uZW50IG9uY2Ugd2UndmUg
c2V0IGJvdGggYSBwYXJlbnQKKyAgICAvLyBhbmQgdGhlIG5lZWRlZCBjb250ZXh0IGFuZCBhdHRh
Y2hlZCBwcm9wZXJ0aWVzLCBzbyB0aGF0IHRoZQorICAgIC8vIGRpYWxvZyBjYW4gZG8gdXNlZnVs
IHN0dWZmIGluIENvbXBvbmVudC5vbkNvbXBsZXRlZCgpLgorICAgIGNvbXBvbmVudC0+Y29tcGxl
dGVDcmVhdGUoKTsKK30KKwordm9pZCBXZWJDb250ZXh0TWVudVByb3h5UXQ6OmNyZWF0ZUNvbnRl
eHQoUVFtbENvbXBvbmVudCogY29tcG9uZW50LCBRT2JqZWN0KiBjb250ZXh0T2JqZWN0KQorewor
ICAgIFFRbWxDb250ZXh0KiBiYXNlQ29udGV4dCA9IGNvbXBvbmVudC0+Y3JlYXRpb25Db250ZXh0
KCk7CisgICAgaWYgKCFiYXNlQ29udGV4dCkKKyAgICAgICAgYmFzZUNvbnRleHQgPSBRUW1sRW5n
aW5lOjpjb250ZXh0Rm9yT2JqZWN0KG1fd2ViVmlldyk7CisgICAgbV9jb250ZXh0ID0gYWRvcHRQ
dHIobmV3IFFRbWxDb250ZXh0KGJhc2VDb250ZXh0KSk7CisKKyAgICBjb250ZXh0T2JqZWN0LT5z
ZXRQYXJlbnQobV9jb250ZXh0LmdldCgpKTsKKyAgICBtX2NvbnRleHQtPnNldENvbnRleHRQcm9w
ZXJ0eShRTGF0aW4xU3RyaW5nKCJtb2RlbCIpLCBjb250ZXh0T2JqZWN0KTsKKyAgICBtX2NvbnRl
eHQtPnNldENvbnRleHRPYmplY3QoY29udGV4dE9iamVjdCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogCisjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eVF0Lm1vYyIKKworI2luY2x1
ZGUgIm1vY19XZWJDb250ZXh0TWVudVByb3h5UXQuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5oCmluZGV4IGJkN2FlYmQuLjli
YmNhODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0
TWVudVByb3h5UXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4
dE1lbnVQcm94eVF0LmgKQEAgLTI5LDYgKzI5LDEyIEBACiAKICNpbmNsdWRlICJXZWJDb250ZXh0
TWVudVByb3h5LmgiCiAjaW5jbHVkZSA8UXRDb3JlL1FPYmplY3Q+CisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorCitjbGFzcyBRUW1sQ29tcG9uZW50OworY2xhc3MgUVFtbENvbnRleHQ7CitjbGFz
cyBRUXVpY2tXZWJWaWV3OworY2xhc3MgUVF1aWNrSXRlbTsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKQEAgLTM3LDEzICs0MywyNCBAQCBjbGFzcyBXZWJQYWdlUHJveHk7CiBjbGFzcyBXZWJDb250
ZXh0TWVudVByb3h5UXQgOiBwdWJsaWMgUU9iamVjdCwgcHVibGljIFdlYkNvbnRleHRNZW51UHJv
eHkgewogICAgIFFfT0JKRUNUCiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29u
dGV4dE1lbnVQcm94eVF0PiBjcmVhdGUoV2ViUGFnZVByb3h5Kik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eVF0PiBjcmVhdGUoV2ViUGFnZVByb3h5KiwgUVF1aWNr
V2ViVmlldyopOworCitwdWJsaWMgUV9TTE9UUzoKKyAgICB2aXJ0dWFsIHZvaWQgaGlkZUNvbnRl
eHRNZW51KCk7CisgICAgdm9pZCBzZWxlY3RDb250ZXh0TWVudUl0ZW0oV2ViQ29udGV4dE1lbnVJ
dGVtRGF0YSk7CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29udGV4dE1lbnVQcm94eVF0KFdlYlBhZ2VQ
cm94eSopOworICAgIFdlYkNvbnRleHRNZW51UHJveHlRdChXZWJQYWdlUHJveHkqLCBRUXVpY2tX
ZWJWaWV3Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbnRleHRNZW51KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiwgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIGhpZGVDb250ZXh0TWVudSgpOworICAgIHZvaWQgY3JlYXRlSXRlbShj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1E
YXRhPiYpOworICAgIHZvaWQgY3JlYXRlQ29udGV4dChRUW1sQ29tcG9uZW50KiwgUU9iamVjdCop
OworCisgICAgT3duUHRyPFFRbWxDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgT3duUHRyPFFRdWlj
a0l0ZW0+IG1fY29udGV4dE1lbnU7CisKKyAgICBRUXVpY2tXZWJWaWV3KiBtX3dlYlZpZXc7Cisg
ICAgV2ViUGFnZVByb3h5KiBtX3dlYlBhZ2VQcm94eTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IDVmNWQwODkuLmU1MDZiZWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wNy0yNiAgTmFuZG9yIEh1c3prYSAg
PGhuYW5kb3JAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFtRdF1bV0syXSBBZGQgYSBRTUwg
YmFzZWQgc29sdXRpb24gZm9yIENvbnRleHQgTWVudXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNTI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ29udGV4dCBtZW51J3MgaW1wbGVtZW50YXRpb24gZm9y
IE1pbmlCcm93c2VyLgorCisgICAgICAgICogTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJj
OgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbDoKKyAgICAg
ICAgKiBNaW5pQnJvd3Nlci9xdC9xbWwvQ29udGV4dE1lbnUucW1sOiBBZGRlZC4KKwogMjAxMi0w
Ny0yNiAgWm9sdGFuIE55dWwgIDx6b2x0YW4ubnl1bEBpbnRlbC5jb20+CiAKICAgICAgICAgW0VG
TF0gRUZMIHBvcnQgc2hvdWxkIHVzZSBYREcgcGF0aHMKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlC
cm93c2VyL3F0L01pbmlCcm93c2VyLnFyYyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93
c2VyLnFyYwppbmRleCBlMjFlZWYzLi5kYzg3MjJhIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJv
d3Nlci9xdC9NaW5pQnJvd3Nlci5xcmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJy
b3dzZXIucXJjCkBAIC0zMiw1ICszMiw2IEBACiAgICAgICAgIDxmaWxlPnFtbC9Qcm94eUF1dGhl
bnRpY2F0aW9uRGlhbG9nLnFtbDwvZmlsZT4KICAgICAgICAgPGZpbGU+cW1sL1Njcm9sbEluZGlj
YXRvci5xbWw8L2ZpbGU+CiAgICAgICAgIDxmaWxlPnFtbC9WaWV3cG9ydEluZm9JdGVtLnFtbDwv
ZmlsZT4KKyAgICAgICAgPGZpbGU+cW1sL0NvbnRleHRNZW51LnFtbDwvZmlsZT4KICAgICA8L3Fy
ZXNvdXJjZT4KIDwvUkNDPgpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jy
b3dzZXJXaW5kb3cucW1sIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cu
cW1sCmluZGV4IDhjZDU4ZWIuLjZiNWU0NmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2Vy
L3F0L3FtbC9Ccm93c2VyV2luZG93LnFtbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwv
QnJvd3NlcldpbmRvdy5xbWwKQEAgLTM1OSw2ICszNTksNyBAQCBSZWN0YW5nbGUgewogICAgICAg
ICBleHBlcmltZW50YWwucHJlZmVyZW5jZXMud2ViR0xFbmFibGVkOiB0cnVlCiAgICAgICAgIGV4
cGVyaW1lbnRhbC5wcmVmZXJyZWRNaW5pbXVtQ29udGVudHNXaWR0aDogOTgwCiAgICAgICAgIGV4
cGVyaW1lbnRhbC5pdGVtU2VsZWN0b3I6IEl0ZW1TZWxlY3RvciB7IH0KKyAgICAgICAgZXhwZXJp
bWVudGFsLmNvbnRleHRNZW51OiBDb250ZXh0TWVudSB7IH0KICAgICAgICAgZXhwZXJpbWVudGFs
LmFsZXJ0RGlhbG9nOiBBbGVydERpYWxvZyB7IH0KICAgICAgICAgZXhwZXJpbWVudGFsLmNvbmZp
cm1EaWFsb2c6IENvbmZpcm1EaWFsb2cgeyB9CiAgICAgICAgIGV4cGVyaW1lbnRhbC5wcm9tcHRE
aWFsb2c6IFByb21wdERpYWxvZyB7IH0KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3F0
L3FtbC9Db250ZXh0TWVudS5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQ29udGV4dE1l
bnUucW1sCmluZGV4IGU2OWRlMjkuLmMyNGUyOGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93
c2VyL3F0L3FtbC9Db250ZXh0TWVudS5xbWwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvcW1s
L0NvbnRleHRNZW51LnFtbApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworaW1wb3J0IFF0UXVpY2sgMi4wCisKK01vdXNlQXJlYSB7CisgICAg
cHJvcGVydHkgUXRPYmplY3QgbWVudU1vZGVsOiBtb2RlbAorICAgIHByb3BlcnR5IGludCBpdGVt
V2lkdGg6IDIyMAorICAgIHByb3BlcnR5IGludCBpdGVtSGVpZ2h0OiAyMAorICAgIGFuY2hvcnMu
ZmlsbDogcGFyZW50CisgICAgb25DbGlja2VkOiBtZW51TW9kZWwucmVqZWN0KCkKKworICAgIFJl
Y3RhbmdsZSB7CisgICAgICAgIGlkOiByb290TWVudVJlY3QKKyAgICAgICAgeDogbWVudU1vZGVs
LnBvc2l0aW9uLngKKyAgICAgICAgeTogbWVudU1vZGVsLnBvc2l0aW9uLnkKKyAgICAgICAgd2lk
dGg6IGl0ZW1XaWR0aAorICAgICAgICBoZWlnaHQ6IG1lbnVNb2RlbC5tZW51Um93Q291bnQoKSAq
IGl0ZW1IZWlnaHQKKyAgICAgICAgY29sb3I6ICJncmV5IgorICAgICAgICBvcGFjaXR5OiAwLjgK
KworICAgICAgICBMaXN0VmlldyB7CisgICAgICAgICAgICBhbmNob3JzLmZpbGw6IHBhcmVudAor
ICAgICAgICAgICAgY2xpcDogZmFsc2UKKyAgICAgICAgICAgIG1vZGVsOiBtZW51TW9kZWwuaXRl
bXMKKyAgICAgICAgICAgIGRlbGVnYXRlOiBSZWN0YW5nbGUgeworICAgICAgICAgICAgICAgIGNv
bG9yOiAiZ3JleSIKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IGl0ZW1IZWlnaHQKKyAgICAgICAg
ICAgICAgICB3aWR0aDogcGFyZW50LndpZHRoCisKKyAgICAgICAgICAgICAgICBUZXh0IHsKKyAg
ICAgICAgICAgICAgICAgICAgYW5jaG9ycy5jZW50ZXJJbjogcGFyZW50CisgICAgICAgICAgICAg
ICAgICAgIGNvbG9yOiBtb2RlbC5lbmFibGVkID8gIndoaXRlIiA6ICJibGFjayIKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dDogbW9kZWwudGV4dAorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIE1vdXNlQXJlYSB7CisgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMuZmlsbDog
cGFyZW50CisgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IG1vZGVsLmVuYWJsZWQKKyAgICAg
ICAgICAgICAgICAgICAgb25DbGlja2VkOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bWVudU1vZGVsLmhhc1N1Ym1lbnUobW9kZWwuaW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3ViTWVudS5tb2RlbCA9IGNyZWF0ZVN1Yk1lbnVNb2RlbChtb2RlbC5pbmRleCkK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk1lbnVSZWN0LnggPSByb290TWVudVJl
Y3QueCArIGl0ZW1XaWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk1lbnVSZWN0
LnkgPSByb290TWVudVJlY3QueSArIG1vZGVsLmluZGV4ICogaXRlbUhlaWdodAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN1Yk1lbnVSZWN0LmhlaWdodCA9IG1lbnVNb2RlbC5zdWJNZW51
Um93Q291bnQoKSAqIGl0ZW1IZWlnaHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJN
ZW51UmVjdC52aXNpYmxlID0gdHJ1ZQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vi
TWVudU1vdXNlQXJlYS5lbmFibGVkID0gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudU1vZGVsLmFjY2VwdE1lbnVJdGVt
KG1vZGVsLmluZGV4KQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgTW91c2VBcmVhIHsKKyAgICAg
ICAgaWQ6IHN1Yk1lbnVNb3VzZUFyZWEKKyAgICAgICAgYW5jaG9ycy5maWxsOiBzdWJNZW51UmVj
dAorICAgICAgICBlbmFibGVkOiBmYWxzZQorICAgICAgICBvbkNsaWNrZWQ6IHsKKyAgICAgICAg
ICAgIHN1Yk1lbnVSZWN0LnZpc2libGUgPSBmYWxzZQorICAgICAgICAgICAgc3ViTWVudU1vdXNl
QXJlYS5lbmFibGVkID0gZmFsc2UKKyAgICAgICAgfQorICAgIH0KKworICAgIFJlY3RhbmdsZSB7
CisgICAgICAgIGlkOiBzdWJNZW51UmVjdAorICAgICAgICB3aWR0aDogaXRlbVdpZHRoCisgICAg
ICAgIGNvbG9yOiAiZ3JleSIKKyAgICAgICAgdmlzaWJsZTogZmFsc2UKKyAgICAgICAgb3BhY2l0
eTogMC44CisKKyAgICAgICAgTGlzdFZpZXcgeworICAgICAgICAgICAgaWQ6IHN1Yk1lbnUKKyAg
ICAgICAgICAgIGFuY2hvcnMuZmlsbDogcGFyZW50CisgICAgICAgICAgICBkZWxlZ2F0ZTogUmVj
dGFuZ2xlIHsKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IGl0ZW1IZWlnaHQKKyAgICAgICAgICAg
ICAgICB3aWR0aDogcGFyZW50LndpZHRoCisgICAgICAgICAgICAgICAgY29sb3I6ICJncmV5Igor
CisgICAgICAgICAgICAgICAgVGV4dCB7CisgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMuY2Vu
dGVySW46IHBhcmVudAorICAgICAgICAgICAgICAgICAgICBjb2xvcjogbW9kZWwuZW5hYmxlZCA/
ICJ3aGl0ZSIgOiAiYmxhY2siCisgICAgICAgICAgICAgICAgICAgIHRleHQ6IG1vZGVsLnRleHQK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBNb3VzZUFyZWEgeworICAgICAg
ICAgICAgICAgICAgICBhbmNob3JzLmZpbGw6IHBhcmVudAorICAgICAgICAgICAgICAgICAgICBl
bmFibGVkOiBtb2RlbC5lbmFibGVkCisgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tlZDogbWVu
dU1vZGVsLmFjY2VwdFN1Yk1lbnVJdGVtKG1vZGVsLmluZGV4KQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworfQo=
</data>
<flag name="review"
          id="163899"
          type_id="1"
          status="-"
          setter="hausmann"
    />
    <flag name="commit-queue"
          id="163900"
          type_id="3"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>157668</attachid>
            <date>2012-08-10 01:21:04 -0700</date>
            <delta_ts>2012-08-10 01:21:04 -0700</delta_ts>
            <desc>Version 2 of the patch</desc>
            <filename>api0810full.diff</filename>
            <type>text/plain</type>
            <size>20879</size>
            <attacher name="Nandor Huszka">hnandor</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXcuY3Bw
CmluZGV4IGZhMDQ0NmYuLjdjYjI0ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3LmNwcApAQCAtMjYzLDYgKzI2Myw3IEBAIFFRdWlja1dl
YlZpZXdQcml2YXRlOjpRUXVpY2tXZWJWaWV3UHJpdmF0ZShRUXVpY2tXZWJWaWV3KiB2aWV3cG9y
dCkKICAgICAsIGF1dGhlbnRpY2F0aW9uRGlhbG9nKDApCiAgICAgLCBjZXJ0aWZpY2F0ZVZlcmlm
aWNhdGlvbkRpYWxvZygwKQogICAgICwgaXRlbVNlbGVjdG9yKDApCisgICAgLCBjb250ZXh0TWVu
dSgwKQogICAgICwgcHJveHlBdXRoZW50aWNhdGlvbkRpYWxvZygwKQogICAgICwgZmlsZVBpY2tl
cigwKQogICAgICwgZGF0YWJhc2VRdW90YURpYWxvZygwKQpAQCAtMTExNyw2ICsxMTE4LDIxIEBA
IHZvaWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0SXRlbVNlbGVjdG9yKFFRbWxDb21w
b25lbnQqIGl0ZW1TZWxlY3RvcikKICAgICBlbWl0IGl0ZW1TZWxlY3RvckNoYW5nZWQoKTsKIH0K
IAorUVFtbENvbXBvbmVudCogUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6Y29udGV4dE1lbnUo
KSBjb25zdAoreworICAgIFFfRChjb25zdCBRUXVpY2tXZWJWaWV3KTsKKyAgICByZXR1cm4gZC0+
Y29udGV4dE1lbnU7Cit9CisKK3ZvaWQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0Q29u
dGV4dE1lbnUoUVFtbENvbXBvbmVudCogY29udGV4dE1lbnUpCit7CisgICAgUV9EKFFRdWlja1dl
YlZpZXcpOworICAgIGlmIChkLT5jb250ZXh0TWVudSA9PSBjb250ZXh0TWVudSkKKyAgICAgICAg
cmV0dXJuOworICAgIGQtPmNvbnRleHRNZW51ID0gY29udGV4dE1lbnU7CisgICAgZW1pdCBjb250
ZXh0TWVudUNoYW5nZWQoKTsKK30KKwogUVFtbENvbXBvbmVudCogUVF1aWNrV2ViVmlld0V4cGVy
aW1lbnRhbDo6ZmlsZVBpY2tlcigpIGNvbnN0CiB7CiAgICAgUV9EKGNvbnN0IFFRdWlja1dlYlZp
ZXcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3
ZWJ2aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
d19wLmgKaW5kZXggOGQwZjRmZi4uZjk5YzMyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3X3AuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcC5oCkBAIC0yNjYsNiArMjY2LDcgQEAgY2xh
c3MgUVdFQktJVF9FWFBPUlQgUVF1aWNrV2ViVmlld0V4cGVyaW1lbnRhbCA6IHB1YmxpYyBRT2Jq
ZWN0IHsKICAgICBRX1BST1BFUlRZKFFRbWxDb21wb25lbnQqIHByb3h5QXV0aGVudGljYXRpb25E
aWFsb2cgUkVBRCBwcm94eUF1dGhlbnRpY2F0aW9uRGlhbG9nIFdSSVRFIHNldFByb3h5QXV0aGVu
dGljYXRpb25EaWFsb2cgTk9USUZZIHByb3h5QXV0aGVudGljYXRpb25EaWFsb2dDaGFuZ2VkKQog
ICAgIFFfUFJPUEVSVFkoUVFtbENvbXBvbmVudCogY2VydGlmaWNhdGVWZXJpZmljYXRpb25EaWFs
b2cgUkVBRCBjZXJ0aWZpY2F0ZVZlcmlmaWNhdGlvbkRpYWxvZyBXUklURSBzZXRDZXJ0aWZpY2F0
ZVZlcmlmaWNhdGlvbkRpYWxvZyBOT1RJRlkgY2VydGlmaWNhdGVWZXJpZmljYXRpb25EaWFsb2dD
aGFuZ2VkKQogICAgIFFfUFJPUEVSVFkoUVFtbENvbXBvbmVudCogaXRlbVNlbGVjdG9yIFJFQUQg
aXRlbVNlbGVjdG9yIFdSSVRFIHNldEl0ZW1TZWxlY3RvciBOT1RJRlkgaXRlbVNlbGVjdG9yQ2hh
bmdlZCkKKyAgICBRX1BST1BFUlRZKFFRbWxDb21wb25lbnQqIGNvbnRleHRNZW51IFJFQUQgY29u
dGV4dE1lbnUgV1JJVEUgc2V0Q29udGV4dE1lbnUgTk9USUZZIGNvbnRleHRNZW51Q2hhbmdlZCkK
ICAgICBRX1BST1BFUlRZKFFRbWxDb21wb25lbnQqIGZpbGVQaWNrZXIgUkVBRCBmaWxlUGlja2Vy
IFdSSVRFIHNldEZpbGVQaWNrZXIgTk9USUZZIGZpbGVQaWNrZXJDaGFuZ2VkKQogICAgIFFfUFJP
UEVSVFkoUVFtbENvbXBvbmVudCogZGF0YWJhc2VRdW90YURpYWxvZyBSRUFEIGRhdGFiYXNlUXVv
dGFEaWFsb2cgV1JJVEUgc2V0RGF0YWJhc2VRdW90YURpYWxvZyBOT1RJRlkgZGF0YWJhc2VRdW90
YURpYWxvZ0NoYW5nZWQpCiAgICAgUV9QUk9QRVJUWShRUW1sQ29tcG9uZW50KiBjb2xvckNob29z
ZXIgUkVBRCBjb2xvckNob29zZXIgV1JJVEUgc2V0Q29sb3JDaG9vc2VyIE5PVElGWSBjb2xvckNo
b29zZXJDaGFuZ2VkKQpAQCAtMjk4LDYgKzI5OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENl
cnRpZmljYXRlVmVyaWZpY2F0aW9uRGlhbG9nKFFRbWxDb21wb25lbnQqKTsKICAgICBRUW1sQ29t
cG9uZW50KiBpdGVtU2VsZWN0b3IoKSBjb25zdDsKICAgICB2b2lkIHNldEl0ZW1TZWxlY3RvcihR
UW1sQ29tcG9uZW50Kik7CisgICAgUVFtbENvbXBvbmVudCogY29udGV4dE1lbnUoKSBjb25zdDsK
KyAgICB2b2lkIHNldENvbnRleHRNZW51KFFRbWxDb21wb25lbnQqKTsKICAgICBRUW1sQ29tcG9u
ZW50KiBwcm94eUF1dGhlbnRpY2F0aW9uRGlhbG9nKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRQcm94
eUF1dGhlbnRpY2F0aW9uRGlhbG9nKFFRbWxDb21wb25lbnQqKTsKICAgICBRUW1sQ29tcG9uZW50
KiBmaWxlUGlja2VyKCkgY29uc3Q7CkBAIC0zNjAsNiArMzYzLDcgQEAgUV9TSUdOQUxTOgogICAg
IHZvaWQgYXV0aGVudGljYXRpb25EaWFsb2dDaGFuZ2VkKCk7CiAgICAgdm9pZCBjZXJ0aWZpY2F0
ZVZlcmlmaWNhdGlvbkRpYWxvZ0NoYW5nZWQoKTsKICAgICB2b2lkIGl0ZW1TZWxlY3RvckNoYW5n
ZWQoKTsKKyAgICB2b2lkIGNvbnRleHRNZW51Q2hhbmdlZCgpOwogICAgIHZvaWQgZmlsZVBpY2tl
ckNoYW5nZWQoKTsKICAgICB2b2lkIGRhdGFiYXNlUXVvdGFEaWFsb2dDaGFuZ2VkKCk7CiAgICAg
dm9pZCBjb2xvckNob29zZXJDaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnZpZXdfcF9wLmgKaW5kZXggZjEwMmY2MC4uN2QxMjQ3MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJ2aWV3
X3BfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2Vidmll
d19wX3AuaApAQCAtMTgyLDYgKzE4Miw3IEBAIHByb3RlY3RlZDoKICAgICBRUW1sQ29tcG9uZW50
KiBhdXRoZW50aWNhdGlvbkRpYWxvZzsKICAgICBRUW1sQ29tcG9uZW50KiBjZXJ0aWZpY2F0ZVZl
cmlmaWNhdGlvbkRpYWxvZzsKICAgICBRUW1sQ29tcG9uZW50KiBpdGVtU2VsZWN0b3I7CisgICAg
UVFtbENvbXBvbmVudCogY29udGV4dE1lbnU7CiAgICAgUVFtbENvbXBvbmVudCogcHJveHlBdXRo
ZW50aWNhdGlvbkRpYWxvZzsKICAgICBRUW1sQ29tcG9uZW50KiBmaWxlUGlja2VyOwogICAgIFFR
bWxDb21wb25lbnQqIGRhdGFiYXNlUXVvdGFEaWFsb2c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRQYWdlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCmluZGV4IGUyYjM5MGEuLmNkNzFmMTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhZ2VDbGllbnQuY3BwCkBAIC0yMDUsNyArMjA1
LDcgQEAgUGFzc1JlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gUXRQYWdlQ2xpZW50OjpjcmVhdGVQ
b3B1cE1lbnVQcm94eShXZWJQYWdlUHJveHkqIHcKIAogUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVu
dVByb3h5PiBRdFBhZ2VDbGllbnQ6OmNyZWF0ZUNvbnRleHRNZW51UHJveHkoV2ViUGFnZVByb3h5
KiB3ZWJQYWdlUHJveHkpCiB7Ci0gICAgcmV0dXJuIFdlYkNvbnRleHRNZW51UHJveHlRdDo6Y3Jl
YXRlKHdlYlBhZ2VQcm94eSk7CisgICAgcmV0dXJuIFdlYkNvbnRleHRNZW51UHJveHlRdDo6Y3Jl
YXRlKHdlYlBhZ2VQcm94eSwgbV93ZWJWaWV3KTsKIH0KIAogI2lmIEVOQUJMRShJTlBVVF9UWVBF
X0NPTE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRl
eHRNZW51UHJveHlRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4
dE1lbnVQcm94eVF0LmNwcAppbmRleCBkNTEwYzUzLi4zMDgyM2Y0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2ViQ29udGV4dE1lbnVQcm94eVF0LmNwcApAQCAt
MSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNp
dHkgb2YgU3plZ2VkCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDI4ICsy
OCwyMjcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVudVBy
b3h5UXQuaCIKIAorI2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgorI2luY2x1ZGUgInFxdWlj
a3dlYnZpZXdfcF9wLmgiCisjaW5jbHVkZSA8UXRDb3JlL1FBYnN0cmFjdExpc3RNb2RlbD4KKyNp
bmNsdWRlIDxRdENvcmUvUUFic3RyYWN0SXRlbU1vZGVsPgorI2luY2x1ZGUgPFF0UW1sL1FRbWxD
b250ZXh0PgorI2luY2x1ZGUgPFF0UW1sL1FRbWxFbmdpbmU+CisKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViQ29udGV4dE1lbnVQcm94eVF0OjpX
ZWJDb250ZXh0TWVudVByb3h5UXQoV2ViUGFnZVByb3h5KikKKy8vIHNpemUgd2l0aG91dCBlbXB0
eSB0aXRsZSBtZW51aXRlbXMgLSB3aHkgYXJlIHRoZXJlIGVtdHkgb25lcyB3aXRoIG5vIGFjdGlv
bj8KK3N0YXRpYyBpbnQgbWVudVNpemUoY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURh
dGE+JiB3ZWJDb250ZXh0TWVudUl0ZW1EYXRhcykKK3sKKyAgICBpbnQgc2l6ZSA9IDA7CisgICAg
Y29uc3QgaW50IG1lbnVJdGVtRGF0YXNTaXplID0gd2ViQ29udGV4dE1lbnVJdGVtRGF0YXMuc2l6
ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVudUl0ZW1EYXRhc1NpemU7IGkrKykgewor
ICAgICAgICBpZiAoIXdlYkNvbnRleHRNZW51SXRlbURhdGFzW2ldLnRpdGxlKCkuaXNFbXB0eSgp
KQorICAgICAgICAgICAgc2l6ZSsrOworICAgIH0KKyAgICByZXR1cm4gc2l6ZTsKK30KKworY2xh
c3MgQ29udGV4dE1lbnVJdGVtTW9kZWwgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QK
KyAgICBRX1BST1BFUlRZKGludCBlbmFibGVkIFJFQUQgZW5hYmxlZCBDT05TVEFOVCBGSU5BTCkK
KyAgICBRX1BST1BFUlRZKFFTdHJpbmcgdGV4dCBSRUFEIHRleHQgQ09OU1RBTlQgRklOQUwpCisK
K3B1YmxpYzoKKyAgICBpbnQgZW5hYmxlZCgpIHsgcmV0dXJuIG1faXRlbS5lbmFibGVkOyB9Cisg
ICAgUVN0cmluZyB0ZXh0KCkgeyByZXR1cm4gbV9pdGVtLnRleHQ7IH0KKyAgICBRX0lOVk9LQUJM
RSB2b2lkIGFjY2VwdCgpIHsgZW1pdCBzZWxlY3RDb250ZXh0TWVudUl0ZW0obV9pdGVtLm1lbnVE
YXRhKTsgfQorICAgIFFfSU5WT0tBQkxFIGJvb2wgaGFzU3ViTWVudSgpIHsgcmV0dXJuICFtX2l0
ZW0ubWVudURhdGEuc3VibWVudSgpLmlzRW1wdHkoKTsgfQorCisgICAgQ29udGV4dE1lbnVJdGVt
TW9kZWwoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYsIFdlYkNvbnRleHRNZW51UHJveHlR
dCopOworICAgIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBnZXRTdWJNZW51SXRlbURh
dGFzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLm1lbnVEYXRhLnN1Ym1lbnUoKTsgfQorCitRX1NJ
R05BTFM6CisgICAgdm9pZCBzZWxlY3RDb250ZXh0TWVudUl0ZW0oV2ViQ29udGV4dE1lbnVJdGVt
RGF0YSk7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IE1lbnVJdGVtIHsKKyAgICAgICAgTWVudUl0
ZW0oY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYgd2ViQ29udGV4dE1lbnVJdGVtRGF0YSkK
KyAgICAgICAgICAgIDogdHlwZSh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhLnR5cGUoKSkKKyAgICAg
ICAgICAgICwgYWN0aW9uKHdlYkNvbnRleHRNZW51SXRlbURhdGEuYWN0aW9uKCkpCisgICAgICAg
ICAgICAsIGVuYWJsZWQod2ViQ29udGV4dE1lbnVJdGVtRGF0YS5lbmFibGVkKCkpCisgICAgICAg
ICAgICAsIGNoZWNrZWQod2ViQ29udGV4dE1lbnVJdGVtRGF0YS5jaGVja2VkKCkpCisgICAgICAg
ICAgICAsIHRleHQod2ViQ29udGV4dE1lbnVJdGVtRGF0YS50aXRsZSgpKQorICAgICAgICAgICAg
LCBtZW51RGF0YSh3ZWJDb250ZXh0TWVudUl0ZW1EYXRhKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBDb250ZXh0TWVudUl0ZW1UeXBlIHR5cGU7CisgICAgICAgIENvbnRleHRNZW51
QWN0aW9uIGFjdGlvbjsKKyAgICAgICAgYm9vbCBlbmFibGVkOworICAgICAgICBib29sIGNoZWNr
ZWQ7CisgICAgICAgIFFTdHJpbmcgdGV4dDsKKyAgICAgICAgV2ViQ29udGV4dE1lbnVJdGVtRGF0
YSBtZW51RGF0YTsKKyAgICB9OworCisgICAgTWVudUl0ZW0gbV9pdGVtOworfTsKKworQ29udGV4
dE1lbnVJdGVtTW9kZWw6OkNvbnRleHRNZW51SXRlbU1vZGVsKGNvbnN0IFdlYkNvbnRleHRNZW51
SXRlbURhdGEgJml0ZW0sIFdlYkNvbnRleHRNZW51UHJveHlRdCogbWVudVByb3h5KQorICAgIDog
bV9pdGVtKGl0ZW0pCiB7CiB9CiAKLVBhc3NSZWZQdHI8V2ViQ29udGV4dE1lbnVQcm94eVF0PiBX
ZWJDb250ZXh0TWVudVByb3h5UXQ6OmNyZWF0ZShXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94eSkK
K2NsYXNzIENvbnRleHRNZW51TW9kZWwgOiBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorCitwdWJs
aWM6CisgICAgQ29udGV4dE1lbnVNb2RlbChjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVt
RGF0YT4mLCBXZWJDb250ZXh0TWVudVByb3h5UXQqKTsKKyAgICBDb250ZXh0TWVudUl0ZW1Nb2Rl
bCogZ2V0TWVudUl0ZW0oaW50IGluZGV4KSB7IHJldHVybiBtX21lbnVJdGVtc1tpbmRleF07IH0K
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8Q29udGV4dE1lbnVJdGVtTW9kZWwqPiBtX21lbnVJdGVt
czsKKyAgICBDb250ZXh0TWVudU1vZGVsKiBtX3N1Yk1lbnVNb2RlbDsKKyAgICBXZWJDb250ZXh0
TWVudVByb3h5UXQqIG1fbWVudVByb3h5OworfTsKKworQ29udGV4dE1lbnVNb2RlbDo6Q29udGV4
dE1lbnVNb2RlbChjb25zdCBWZWN0b3I8V2ViQ29udGV4dE1lbnVJdGVtRGF0YT4gJml0ZW1zLCBX
ZWJDb250ZXh0TWVudVByb3h5UXQqIG1lbnVQcm94eSkKKyAgICA6IG1fbWVudVByb3h5KG1lbnVQ
cm94eSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkNvbnRleHRNZW51UHJveHlRdCh3
ZWJQYWdlUHJveHkpKTsKKyAgICBtX21lbnVJdGVtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1l
bnVTaXplKGl0ZW1zKSk7CisgICAgY29uc3QgaW50IHNpemUgPSBpdGVtcy5zaXplKCk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgaWYgKCFpdGVtc1tpXS50
aXRsZSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY29uc3QgV2ViQ29udGV4dE1lbnVJdGVt
RGF0YSYgaXRlbSA9IGl0ZW1zW2ldOworICAgICAgICAgICAgQ29udGV4dE1lbnVJdGVtTW9kZWwq
IG1lbnVJdGVtTW9kZWwgPSBuZXcgQ29udGV4dE1lbnVJdGVtTW9kZWwoaXRlbSwgbWVudVByb3h5
KTsKKyAgICAgICAgICAgIHFSZWdpc3Rlck1ldGFUeXBlPFdlYkNvbnRleHRNZW51SXRlbURhdGE+
KCJXZWJDb250ZXh0TWVudUl0ZW1EYXRhIik7CisgICAgICAgICAgICBjb25uZWN0KG1lbnVJdGVt
TW9kZWwsIFNJR05BTChzZWxlY3RDb250ZXh0TWVudUl0ZW0oV2ViQ29udGV4dE1lbnVJdGVtRGF0
YSkpLCBtZW51UHJveHksIFNMT1QoY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoV2ViQ29udGV4dE1l
bnVJdGVtRGF0YSkpLCBRdDo6UXVldWVkQ29ubmVjdGlvbik7CisgICAgICAgICAgICBtX21lbnVJ
dGVtcy5hcHBlbmQobWVudUl0ZW1Nb2RlbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2NsYXNz
IENvbnRleHRNZW51Q29udGV4dE9iamVjdCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVD
VAorICAgIFFfUFJPUEVSVFkoUVBvaW50IHBvc2l0aW9uIFJFQUQgcG9zaXRpb24gQ09OU1RBTlQg
RklOQUwpCisgICAgUV9QUk9QRVJUWShpbnQgc2l6ZSBSRUFEIHNpemUgQ09OU1RBTlQgRklOQUwp
CisKK3B1YmxpYzoKKyAgICBRUG9pbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0
aW9uOyB9CisgICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtZW51U2l6ZShtX2FsbEl0ZW1z
KTsgfQorICAgIFFfSU5WT0tBQkxFIHZvaWQgcmVqZWN0KCkgeyBlbWl0IHJlamVjdGVkKCk7IH0K
KyAgICBRX0lOVk9LQUJMRSBRT2JqZWN0KiBjcmVhdGVNZW51SXRlbU1vZGVsKGludCk7CisgICAg
UV9JTlZPS0FCTEUgUU9iamVjdCogY3JlYXRlU3ViTWVudU1vZGVsKGludCwgaW50LCBpbnQpOwor
CisgICAgQ29udGV4dE1lbnVDb250ZXh0T2JqZWN0KGNvbnN0IFFQb2ludCYsIGNvbnN0IFZlY3Rv
cjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYsIFdlYkNvbnRleHRNZW51UHJveHlRdCopOworCitR
X1NJR05BTFM6CisgICAgdm9pZCByZWplY3RlZCgpOworCitwcml2YXRlOgorICAgIFFQb2ludCBt
X3Bvc2l0aW9uOworICAgIFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiBtX2FsbEl0ZW1z
OworICAgIENvbnRleHRNZW51TW9kZWwqIG1fbWVudU1vZGVsOworICAgIFdlYkNvbnRleHRNZW51
UHJveHlRdCogbV9tZW51UHJveHk7Cit9OworCitRT2JqZWN0KiBDb250ZXh0TWVudUNvbnRleHRP
YmplY3Q6OmNyZWF0ZU1lbnVJdGVtTW9kZWwoaW50IGluZGV4KQoreworICAgIENvbnRleHRNZW51
SXRlbU1vZGVsKiBtZW51SXRlbU1vZGVsID0gbV9tZW51TW9kZWwtPmdldE1lbnVJdGVtKGluZGV4
KTsKKyAgICByZXR1cm4gbWVudUl0ZW1Nb2RlbDsKK30KKworQ29udGV4dE1lbnVDb250ZXh0T2Jq
ZWN0OjpDb250ZXh0TWVudUNvbnRleHRPYmplY3QoY29uc3QgUVBvaW50ICZwb3NpdGlvbiwgY29u
c3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+ICZpdGVtcywgV2ViQ29udGV4dE1lbnVQ
cm94eVF0KiBtZW51UHJveHkpCisgICAgOiBtX3Bvc2l0aW9uKHBvc2l0aW9uKQorICAgICwgbV9h
bGxJdGVtcyhpdGVtcykKKyAgICAsIG1fbWVudVByb3h5KG1lbnVQcm94eSkKK3sKKyAgICBtX21l
bnVNb2RlbCA9IG5ldyBDb250ZXh0TWVudU1vZGVsKG1fYWxsSXRlbXMsIG1fbWVudVByb3h5KTsK
K30KKworUU9iamVjdCogQ29udGV4dE1lbnVDb250ZXh0T2JqZWN0OjpjcmVhdGVTdWJNZW51TW9k
ZWwoaW50IHgsIGludCB5LCBpbnQgaW5kZXgpCit7CisgICAgcmV0dXJuIG5ldyBDb250ZXh0TWVu
dUNvbnRleHRPYmplY3QoUVBvaW50KHgsIHkpLCBtX21lbnVNb2RlbC0+Z2V0TWVudUl0ZW0oaW5k
ZXgpLT5nZXRTdWJNZW51SXRlbURhdGFzKCksIG1fbWVudVByb3h5KTsKK30KKworV2ViQ29udGV4
dE1lbnVQcm94eVF0OjpXZWJDb250ZXh0TWVudVByb3h5UXQoV2ViUGFnZVByb3h5KiB3ZWJQYWdl
UHJveHksIFFRdWlja1dlYlZpZXcqIHdlYlZpZXcpCisgICAgOiBtX3dlYlZpZXcod2ViVmlldykK
KyAgICAsIG1fd2ViUGFnZVByb3h5KHdlYlBhZ2VQcm94eSkKK3sKK30KKworUGFzc1JlZlB0cjxX
ZWJDb250ZXh0TWVudVByb3h5UXQ+IFdlYkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlKFdlYlBh
Z2VQcm94eSogd2ViUGFnZVByb3h5LCBRUXVpY2tXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgV2ViQ29udGV4dE1lbnVQcm94eVF0KHdlYlBhZ2VQcm94eSwgd2Vi
VmlldykpOwogfQogCiB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlRdDo6c2hvd0NvbnRleHRNZW51
KGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRl
bURhdGE+JiBpdGVtcykKIHsKKyAgICBjcmVhdGVJdGVtKHBvc2l0aW9uLCBpdGVtcyk7CisgICAg
aWYgKCFtX2NvbnRleHRNZW51KQorICAgICAgICByZXR1cm47CisKKyAgICBRUXVpY2tXZWJWaWV3
UHJpdmF0ZTo6Z2V0KG1fd2ViVmlldyktPnNldERpYWxvZ0FjdGl2ZSh0cnVlKTsKIH0KIAogdm9p
ZCBXZWJDb250ZXh0TWVudVByb3h5UXQ6OmhpZGVDb250ZXh0TWVudSgpCiB7CisgICAgbV9jb250
ZXh0TWVudS5jbGVhcigpOworICAgIFFRdWlja1dlYlZpZXdQcml2YXRlOjpnZXQobV93ZWJWaWV3
KS0+c2V0RGlhbG9nQWN0aXZlKGZhbHNlKTsKKyAgICBtX2NvbnRleHQuY2xlYXIoKTsKIH0KIAot
I2luY2x1ZGUgIm1vY19XZWJDb250ZXh0TWVudVByb3h5UXQuY3BwIgordm9pZCBXZWJDb250ZXh0
TWVudVByb3h5UXQ6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKFdlYkNvbnRleHRNZW51SXRlbURh
dGEgd2ViQ29udGV4dE1lbnVJdGVtRGF0YSkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQod2ViQ29udGV4dE1lbnVJdGVtRGF0YSk7CisgICAgaGlkZUNvbnRl
eHRNZW51KCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dE1lbnVQcm94eVF0OjpjcmVhdGVJdGVtKGNv
bnN0IEludFBvaW50JiBwb3NpdGlvbiwgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURh
dGE+JiBpdGVtcykKK3sKKyAgICBRUW1sQ29tcG9uZW50KiBjb21wb25lbnQgPSBtX3dlYlZpZXct
PmV4cGVyaW1lbnRhbCgpLT5jb250ZXh0TWVudSgpOworCisgICAgaWYgKCFjb21wb25lbnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIENvbnRleHRNZW51Q29udGV4dE9iamVjdCogY29udGV4dE9i
amVjdCA9IG5ldyBDb250ZXh0TWVudUNvbnRleHRPYmplY3QoUVBvaW50KHBvc2l0aW9uLngoKSwg
cG9zaXRpb24ueSgpKSwgaXRlbXMsIHRoaXMpOworICAgIGNyZWF0ZUNvbnRleHQoY29tcG9uZW50
LCBjb250ZXh0T2JqZWN0KTsKKyAgICBRT2JqZWN0KiBvYmplY3QgPSBjb21wb25lbnQtPmJlZ2lu
Q3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgbV9j
b250ZXh0LmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHRN
ZW51ID0gYWRvcHRQdHIocW9iamVjdF9jYXN0PFFRdWlja0l0ZW0qPihvYmplY3QpKTsKKyAgICBp
ZiAoIW1fY29udGV4dE1lbnUpIHsKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgICAg
IG1fY29udGV4dE1lbnUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IFdlIGVucXVldWUgdGhlc2UgYmVjYXVzZSB0aGV5IGFyZSB0cmlnZ2VyZWQgYnkgbV9jb250ZXh0
TWVudSBhbmQgd2lsbCBsZWFkIHRvIGl0cyBkZXN0cnVjdGlvbi4KKyAgICBjb25uZWN0KGNvbnRl
eHRPYmplY3QsIFNJR05BTChyZWplY3RlZCgpKSwgU0xPVChoaWRlQ29udGV4dE1lbnUoKSksIFF0
OjpRdWV1ZWRDb25uZWN0aW9uKTsKKworICAgIFFRdWlja1dlYlZpZXdQcml2YXRlOjpnZXQobV93
ZWJWaWV3KS0+YWRkQXR0YWNoZWRQcm9wZXJ0eVRvKG1fY29udGV4dE1lbnUuZ2V0KCkpOworICAg
IG1fY29udGV4dE1lbnUtPnNldFBhcmVudEl0ZW0obV93ZWJWaWV3KTsKKworICAgIC8vIE9ubHkg
ZnVsbHkgY3JlYXRlIHRoZSBjb21wb25lbnQgb25jZSB3ZSd2ZSBzZXQgYm90aCBhIHBhcmVudAor
ICAgIC8vIGFuZCB0aGUgbmVlZGVkIGNvbnRleHQgYW5kIGF0dGFjaGVkIHByb3BlcnRpZXMsIHNv
IHRoYXQgdGhlCisgICAgLy8gZGlhbG9nIGNhbiBkbyB1c2VmdWwgc3R1ZmYgaW4gQ29tcG9uZW50
Lm9uQ29tcGxldGVkKCkuCisgICAgY29tcG9uZW50LT5jb21wbGV0ZUNyZWF0ZSgpOworfQorCit2
b2lkIFdlYkNvbnRleHRNZW51UHJveHlRdDo6Y3JlYXRlQ29udGV4dChRUW1sQ29tcG9uZW50KiBj
b21wb25lbnQsIFFPYmplY3QqIGNvbnRleHRPYmplY3QpCit7CisgICAgUVFtbENvbnRleHQqIGJh
c2VDb250ZXh0ID0gY29tcG9uZW50LT5jcmVhdGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWJhc2VD
b250ZXh0KQorICAgICAgICBiYXNlQ29udGV4dCA9IFFRbWxFbmdpbmU6OmNvbnRleHRGb3JPYmpl
Y3QobV93ZWJWaWV3KTsKKyAgICBtX2NvbnRleHQgPSBhZG9wdFB0cihuZXcgUVFtbENvbnRleHQo
YmFzZUNvbnRleHQpKTsKKworICAgIGNvbnRleHRPYmplY3QtPnNldFBhcmVudChtX2NvbnRleHQu
Z2V0KCkpOworICAgIG1fY29udGV4dC0+c2V0Q29udGV4dFByb3BlcnR5KFFMYXRpbjFTdHJpbmco
Im1vZGVsIiksIGNvbnRleHRPYmplY3QpOworICAgIG1fY29udGV4dC0+c2V0Q29udGV4dE9iamVj
dChjb250ZXh0T2JqZWN0KTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKKyNpbmNsdWRl
ICJXZWJDb250ZXh0TWVudVByb3h5UXQubW9jIgorCisjaW5jbHVkZSAibW9jX1dlYkNvbnRleHRN
ZW51UHJveHlRdC5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
V2ViQ29udGV4dE1lbnVQcm94eVF0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvV2Vi
Q29udGV4dE1lbnVQcm94eVF0LmgKaW5kZXggYmQ3YWViZC4uODAxZTMzMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1dlYkNvbnRleHRNZW51UHJveHlRdC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9XZWJDb250ZXh0TWVudVByb3h5UXQuaApAQCAt
MjksNiArMjksMTIgQEAKIAogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHkuaCIKICNpbmNs
dWRlIDxRdENvcmUvUU9iamVjdD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK2NsYXNzIFFR
bWxDb21wb25lbnQ7CitjbGFzcyBRUW1sQ29udGV4dDsKK2NsYXNzIFFRdWlja1dlYlZpZXc7Citj
bGFzcyBRUXVpY2tJdGVtOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMzcsMTMgKzQzLDI0
IEBAIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNzIFdlYkNvbnRleHRNZW51UHJveHlRdCA6IHB1
YmxpYyBRT2JqZWN0LCBwdWJsaWMgV2ViQ29udGV4dE1lbnVQcm94eSB7CiAgICAgUV9PQkpFQ1QK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVudVByb3h5UXQ+IGNy
ZWF0ZShXZWJQYWdlUHJveHkqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb250ZXh0TWVu
dVByb3h5UXQ+IGNyZWF0ZShXZWJQYWdlUHJveHkqLCBRUXVpY2tXZWJWaWV3Kik7CisKK3B1Ymxp
YyBRX1NMT1RTOgorICAgIHZpcnR1YWwgdm9pZCBoaWRlQ29udGV4dE1lbnUoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoV2ViQ29udGV4dE1lbnVJdGVtRGF0YSk7
CiAKIHByaXZhdGU6Ci0gICAgV2ViQ29udGV4dE1lbnVQcm94eVF0KFdlYlBhZ2VQcm94eSopOwor
ICAgIFdlYkNvbnRleHRNZW51UHJveHlRdChXZWJQYWdlUHJveHkqLCBRUXVpY2tXZWJWaWV3Kik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgc2hvd0NvbnRleHRNZW51KGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiwgY29uc3QgVmVjdG9yPFdlYkNvbnRleHRNZW51SXRlbURhdGE+Jik7Ci0gICAgdmlydHVh
bCB2b2lkIGhpZGVDb250ZXh0TWVudSgpOworICAgIHZvaWQgY3JlYXRlSXRlbShjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYsIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0TWVudUl0ZW1EYXRhPiYpOwor
ICAgIHZvaWQgY3JlYXRlQ29udGV4dChRUW1sQ29tcG9uZW50KiwgUU9iamVjdCopOworCisgICAg
T3duUHRyPFFRbWxDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgT3duUHRyPFFRdWlja0l0ZW0+IG1f
Y29udGV4dE1lbnU7CisKKyAgICBRUXVpY2tXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgV2ViUGFn
ZVByb3h5KiBtX3dlYlBhZ2VQcm94eTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjIGIvVG9vbHMvTWlu
aUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucXJjCmluZGV4IGUyMWVlZjMuLjkzMWNjNjMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnFyYworKysgYi9Ub29scy9N
aW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5xcmMKQEAgLTMyLDUgKzMyLDcgQEAKICAgICAgICAg
PGZpbGU+cW1sL1Byb3h5QXV0aGVudGljYXRpb25EaWFsb2cucW1sPC9maWxlPgogICAgICAgICA8
ZmlsZT5xbWwvU2Nyb2xsSW5kaWNhdG9yLnFtbDwvZmlsZT4KICAgICAgICAgPGZpbGU+cW1sL1Zp
ZXdwb3J0SW5mb0l0ZW0ucW1sPC9maWxlPgorICAgICAgICA8ZmlsZT5xbWwvQ29udGV4dE1lbnUu
cW1sPC9maWxlPgorICAgICAgICA8ZmlsZT5xbWwvTWVudUl0ZW0ucW1sPC9maWxlPgogICAgIDwv
cXJlc291cmNlPgogPC9SQ0M+CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwv
QnJvd3NlcldpbmRvdy5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvQnJvd3NlcldpbmRv
dy5xbWwKaW5kZXggOGNkNThlYi4uNmI1ZTQ2ZSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dz
ZXIvcXQvcW1sL0Jyb3dzZXJXaW5kb3cucW1sCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3Ft
bC9Ccm93c2VyV2luZG93LnFtbApAQCAtMzU5LDYgKzM1OSw3IEBAIFJlY3RhbmdsZSB7CiAgICAg
ICAgIGV4cGVyaW1lbnRhbC5wcmVmZXJlbmNlcy53ZWJHTEVuYWJsZWQ6IHRydWUKICAgICAgICAg
ZXhwZXJpbWVudGFsLnByZWZlcnJlZE1pbmltdW1Db250ZW50c1dpZHRoOiA5ODAKICAgICAgICAg
ZXhwZXJpbWVudGFsLml0ZW1TZWxlY3RvcjogSXRlbVNlbGVjdG9yIHsgfQorICAgICAgICBleHBl
cmltZW50YWwuY29udGV4dE1lbnU6IENvbnRleHRNZW51IHsgfQogICAgICAgICBleHBlcmltZW50
YWwuYWxlcnREaWFsb2c6IEFsZXJ0RGlhbG9nIHsgfQogICAgICAgICBleHBlcmltZW50YWwuY29u
ZmlybURpYWxvZzogQ29uZmlybURpYWxvZyB7IH0KICAgICAgICAgZXhwZXJpbWVudGFsLnByb21w
dERpYWxvZzogUHJvbXB0RGlhbG9nIHsgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIv
cXQvcW1sL0NvbnRleHRNZW51LnFtbCBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Db250ZXh0
TWVudS5xbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkYmY1MgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L3FtbC9Db250ZXh0TWVudS5xbWwK
QEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxMiBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
aW1wb3J0IFF0UXVpY2sgMi4wCisKK01vdXNlQXJlYSB7CisgICAgcHJvcGVydHkgUXRPYmplY3Qg
bWVudU1vZGVsOiBtb2RlbAorICAgIHByb3BlcnR5IGludCBpdGVtV2lkdGg6IDIyMAorICAgIHBy
b3BlcnR5IGludCBpdGVtSGVpZ2h0OiAyMAorICAgIGFuY2hvcnMuZmlsbDogcGFyZW50CisgICAg
b25DbGlja2VkOiBtZW51TW9kZWwucmVqZWN0KCkKKworICAgIFJlY3RhbmdsZSB7CisgICAgICAg
IGlkOiByb290TWVudVJlY3QKKyAgICAgICAgeDogbWVudU1vZGVsLnBvc2l0aW9uLngKKyAgICAg
ICAgeTogbWVudU1vZGVsLnBvc2l0aW9uLnkKKyAgICAgICAgd2lkdGg6IGl0ZW1XaWR0aAorICAg
ICAgICBoZWlnaHQ6IG1lbnVNb2RlbC5zaXplICogaXRlbUhlaWdodAorICAgICAgICBjb2xvcjog
ImJsdWUiCisgICAgICAgIG9wYWNpdHk6IDEKKworICAgICAgICBDb21wb25lbnQub25Db21wbGV0
ZWQ6IHsKKyAgICAgICAgICAgIHZhciBtZW51SXRlbUNvbXBvbmVudCA9IFF0LmNyZWF0ZUNvbXBv
bmVudCgiTWVudUl0ZW0ucW1sIikKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVu
dU1vZGVsLnNpemU7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBtZW51SXRlbSA9IG1lbnVJ
dGVtQ29tcG9uZW50LmNyZWF0ZU9iamVjdChyb290TWVudVJlY3QpOworICAgICAgICAgICAgICAg
IG1lbnVJdGVtLnJvb3RNZW51TW9kZWwgPSBtZW51TW9kZWwKKyAgICAgICAgICAgICAgICBtZW51
SXRlbS5tZW51SXRlbU1vZGVsID0gbWVudU1vZGVsLmNyZWF0ZU1lbnVJdGVtTW9kZWwoaSkKKwor
ICAgICAgICAgICAgICAgIG1lbnVJdGVtLnkgPSBpdGVtSGVpZ2h0ICogaTsKKyAgICAgICAgICAg
ICAgICBtZW51SXRlbS53aWR0aCA9IGl0ZW1XaWR0aAorICAgICAgICAgICAgICAgIG1lbnVJdGVt
LmhlaWdodCA9IGl0ZW1IZWlnaHQKKyAgICAgICAgICAgICAgICBtZW51SXRlbS5pbmRleCA9IGkK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01p
bmlCcm93c2VyL3F0L3FtbC9NZW51SXRlbS5xbWwgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwv
TWVudUl0ZW0ucW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OTI1N2UK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9xdC9xbWwvTWVudUl0ZW0ucW1s
CkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
VW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K2ltcG9ydCBRdFF1aWNrIDIuMAorCitJdGVtIHsKKyAgICBpZDogbWVudUl0ZW0KKyAgICBwcm9w
ZXJ0eSBRdE9iamVjdCByb290TWVudU1vZGVsCisgICAgcHJvcGVydHkgUXRPYmplY3QgbWVudUl0
ZW1Nb2RlbAorICAgIHByb3BlcnR5IGludCBpbmRleAorCisgICAgVGV4dCB7CisgICAgICAgIGlk
OiBtZW51VGV4dAorICAgICAgICBhbmNob3JzLmZpbGw6IHBhcmVudC5DZW50ZXIKKyAgICAgICAg
dGV4dDogbWVudUl0ZW1Nb2RlbC50ZXh0CisgICAgICAgIGVuYWJsZWQ6IG1lbnVJdGVtTW9kZWwu
ZW5hYmxlZAorICAgICAgICBjb2xvcjogbWVudUl0ZW1Nb2RlbC5lbmFibGVkID8gIndoaXRlIiA6
ICJibGFjayIKKyAgICB9CisKKyAgICBNb3VzZUFyZWEgeworICAgICAgICBhbmNob3JzLmZpbGw6
IG1lbnVJdGVtCisgICAgICAgIG9uQ2xpY2tlZDogeworICAgICAgICAgICAgaWYgKG1lbnVJdGVt
TW9kZWwuaGFzU3ViTWVudSgpKSB7CisgICAgICAgICAgICAgICAgdmFyIHN1Yk1lbnVDb21wb25l
bnQgPSBRdC5jcmVhdGVDb21wb25lbnQoIkNvbnRleHRNZW51LnFtbCIpCisgICAgICAgICAgICAg
ICAgdmFyIHN1Yk1lbnUgPSBzdWJNZW51Q29tcG9uZW50LmNyZWF0ZU9iamVjdChyb290TWVudVJl
Y3QpOworICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyB3cm9uZyB0aGVyZToKKyAgICAgICAg
ICAgICAgICAvLyB0aGUgaXRlbXMgb2YgdGhlIG1haW5tZW51IGFyZSBzaG93biBpbiBpdCAoaG93
ZXZlciBpdHMgc2l6ZSBpcyBjb3JyZWN0KQorICAgICAgICAgICAgICAgIHN1Yk1lbnUubWVudU1v
ZGVsID0gcm9vdE1lbnVNb2RlbC5jcmVhdGVTdWJNZW51TW9kZWwobWVudUl0ZW0ud2lkdGgsIG1l
bnVJdGVtLmhlaWdodCppbmRleCwgaW5kZXgpCisgICAgICAgICAgICB9IGVsc2UgaWYgKG1lbnVU
ZXh0LmVuYWJsZWQpCisgICAgICAgICAgICAgICAgbWVudUl0ZW1Nb2RlbC5hY2NlcHQoKQorICAg
ICAgICB9CisgICAgfQorfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>